feat(workspace): store runtime state under omo

This commit is contained in:
YeonGyu-Kim
2026-05-16 17:40:11 +09:00
parent 5dca1a5742
commit a86221b1a9
13 changed files with 137 additions and 137 deletions
+38 -38
View File
@@ -53,10 +53,10 @@ function writeBoulderStateFile(
sessionIDs: string[],
sessionOrigins?: Record<string, "direct" | "appended">,
): void {
const sisyphusDir = join(directory, ".sisyphus")
mkdirSync(sisyphusDir, { recursive: true })
const omoDir = join(directory, ".omo")
mkdirSync(omoDir, { recursive: true })
writeFileSync(
join(sisyphusDir, "boulder.json"),
join(omoDir, "boulder.json"),
JSON.stringify({
active_plan: activePlanPath,
started_at: new Date().toISOString(),
@@ -74,8 +74,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "active-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "active-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] incomplete task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["test-session"])
const ctx = createMockContext(directory)
@@ -92,8 +92,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "done-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "done-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [x] completed task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["test-session"])
const ctx = createMockContext(directory)
@@ -110,17 +110,17 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const mainPlanPath = join(directory, ".sisyphus", "plans", "done-in-worktree-plan.md")
const mainPlanPath = join(directory, ".omo", "plans", "done-in-worktree-plan.md")
const worktreeDirectory = createTempDir()
const worktreePlanPath = join(worktreeDirectory, ".sisyphus", "plans", "done-in-worktree-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
mkdirSync(join(worktreeDirectory, ".sisyphus", "plans"), { recursive: true })
const worktreePlanPath = join(worktreeDirectory, ".omo", "plans", "done-in-worktree-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
mkdirSync(join(worktreeDirectory, ".omo", "plans"), { recursive: true })
writeFileSync(mainPlanPath, "- [ ] stale main repo task\n", "utf-8")
writeFileSync(worktreePlanPath, "- [x] completed worktree task\n", "utf-8")
const sisyphusDir = join(directory, ".sisyphus")
mkdirSync(sisyphusDir, { recursive: true })
const omoDir = join(directory, ".omo")
mkdirSync(omoDir, { recursive: true })
writeFileSync(
join(sisyphusDir, "boulder.json"),
join(omoDir, "boulder.json"),
JSON.stringify({
active_plan: mainPlanPath,
started_at: new Date().toISOString(),
@@ -145,8 +145,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "active-descendant-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "active-descendant-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["root-session", "child-session"], {
"root-session": "direct",
@@ -181,8 +181,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "lineage-non-subagent-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "lineage-non-subagent-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["root-session"])
@@ -209,8 +209,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "lineage-agent-mismatch-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "lineage-agent-mismatch-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["root-session", "mismatch-subagent-session"], {
"root-session": "direct",
@@ -244,8 +244,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "appended-mismatch-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "appended-mismatch-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["root-session", "appended-mismatch-session"], {
"root-session": "direct",
@@ -279,8 +279,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "appended-unresolved-lineage-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "appended-unresolved-lineage-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["root-session", "ses_appended_descendant"], {
"root-session": "direct",
@@ -311,8 +311,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "direct-tracked-child-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "direct-tracked-child-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["ses_direct_child"])
@@ -338,8 +338,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "multi-tracked-direct-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "multi-tracked-direct-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["ses_other_tracked", "ses_direct_tracked"], {
"ses_other_tracked": "direct",
@@ -368,8 +368,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "unknown-origin-multi-session-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "unknown-origin-multi-session-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["ses_root_tracked", "ses_unknown_child"])
@@ -392,8 +392,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "multi-tracked-direct-child-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "multi-tracked-direct-child-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["ses_root_tracked", "ses_direct_child"], {
"ses_root_tracked": "direct",
@@ -427,8 +427,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "compaction-descendant-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "compaction-descendant-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["root-session", "ses_child_after_compaction"], {
"root-session": "direct",
@@ -466,8 +466,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "sqlite-ordered-descendant-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "sqlite-ordered-descendant-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["root-session"])
@@ -502,8 +502,8 @@ describe("checkCompletionConditions continuation coverage", () => {
// given
spyOn(console, "log").mockImplementation(() => {})
const directory = createTempDir()
const planPath = join(directory, ".sisyphus", "plans", "session-agent-fallback-plan.md")
mkdirSync(join(directory, ".sisyphus", "plans"), { recursive: true })
const planPath = join(directory, ".omo", "plans", "session-agent-fallback-plan.md")
mkdirSync(join(directory, ".omo", "plans"), { recursive: true })
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
writeBoulderStateFile(directory, planPath, ["ses_root_tracked", "ses_appended_child"], {
"ses_root_tracked": "direct",