feat(workspace): store runtime state under omo
This commit is contained in:
@@ -10,7 +10,7 @@ function createTempDirectory(): string {
|
||||
}
|
||||
|
||||
function seedPlanAndState(directory: string): void {
|
||||
const planDirectory = join(directory, ".sisyphus", "plans")
|
||||
const planDirectory = join(directory, ".omo", "plans")
|
||||
mkdirSync(planDirectory, { recursive: true })
|
||||
|
||||
const planAPath = join(planDirectory, "alpha.md")
|
||||
@@ -35,7 +35,7 @@ function seedPlanAndState(directory: string): void {
|
||||
"utf-8",
|
||||
)
|
||||
|
||||
const boulderDirectory = join(directory, ".sisyphus")
|
||||
const boulderDirectory = join(directory, ".omo")
|
||||
mkdirSync(boulderDirectory, { recursive: true })
|
||||
|
||||
writeFileSync(
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -68,12 +68,12 @@ describe("getContinuationState JSON backend descendant coverage", () => {
|
||||
test("returns active boulder for explicitly tracked appended descendant on JSON message storage backend", async () => {
|
||||
// given
|
||||
const directory = createTempDir()
|
||||
const plansDir = join(directory, ".sisyphus", "plans")
|
||||
const plansDir = join(directory, ".omo", "plans")
|
||||
mkdirSync(plansDir, { recursive: true })
|
||||
const planPath = join(plansDir, "json-descendant-plan.md")
|
||||
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
|
||||
mkdirSync(join(directory, ".sisyphus"), { recursive: true })
|
||||
writeFileSync(join(directory, ".sisyphus", "boulder.json"), JSON.stringify({
|
||||
mkdirSync(join(directory, ".omo"), { recursive: true })
|
||||
writeFileSync(join(directory, ".omo", "boulder.json"), JSON.stringify({
|
||||
active_plan: planPath,
|
||||
started_at: new Date().toISOString(),
|
||||
session_ids: ["ses_root_session", "ses_child_session"],
|
||||
@@ -134,12 +134,12 @@ describe("getContinuationState JSON backend descendant coverage", () => {
|
||||
test("prefers newest JSON agent by time.created even when filenames look reversed and timestamps tie-break by filename only", async () => {
|
||||
// given
|
||||
const directory = createTempDir()
|
||||
const plansDir = join(directory, ".sisyphus", "plans")
|
||||
const plansDir = join(directory, ".omo", "plans")
|
||||
mkdirSync(plansDir, { recursive: true })
|
||||
const planPath = join(plansDir, "json-random-id-plan.md")
|
||||
writeFileSync(planPath, "- [ ] unfinished task\n", "utf-8")
|
||||
mkdirSync(join(directory, ".sisyphus"), { recursive: true })
|
||||
writeFileSync(join(directory, ".sisyphus", "boulder.json"), JSON.stringify({
|
||||
mkdirSync(join(directory, ".omo"), { recursive: true })
|
||||
writeFileSync(join(directory, ".omo", "boulder.json"), JSON.stringify({
|
||||
active_plan: planPath,
|
||||
started_at: new Date().toISOString(),
|
||||
session_ids: ["ses_root_random"],
|
||||
|
||||
Reference in New Issue
Block a user