@namzu/sdk 0.1.7 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -5
- package/README.md +14 -9
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +5 -3
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/RouterAgent.d.ts.map +1 -1
- package/dist/agents/RouterAgent.js +3 -0
- package/dist/agents/RouterAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +18 -5
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/bridge/a2a/mapper.d.ts.map +1 -1
- package/dist/bridge/a2a/mapper.js +6 -0
- package/dist/bridge/a2a/mapper.js.map +1 -1
- package/dist/bridge/a2a/task.d.ts +2 -2
- package/dist/bridge/a2a/task.d.ts.map +1 -1
- package/dist/bridge/a2a/task.js.map +1 -1
- package/dist/bridge/sse/mapper.d.ts.map +1 -1
- package/dist/bridge/sse/mapper.js +6 -0
- package/dist/bridge/sse/mapper.js.map +1 -1
- package/dist/constants/a2a/index.d.ts +2 -2
- package/dist/constants/a2a/index.d.ts.map +1 -1
- package/dist/constants/a2a/index.js.map +1 -1
- package/dist/contracts/api.d.ts +22 -3
- package/dist/contracts/api.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +3 -1
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/gateway/local.d.ts.map +1 -1
- package/dist/gateway/local.js +6 -0
- package/dist/gateway/local.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/manager/agent/__tests__/lifecycle.test.d.ts +2 -0
- package/dist/manager/agent/__tests__/lifecycle.test.d.ts.map +1 -0
- package/dist/manager/agent/__tests__/lifecycle.test.js +302 -0
- package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -0
- package/dist/manager/agent/lifecycle.d.ts +58 -3
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +311 -12
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +8 -1
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +15 -0
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/run/reporter.d.ts.map +1 -1
- package/dist/run/reporter.js +25 -0
- package/dist/run/reporter.js.map +1 -1
- package/dist/runtime/query/__tests__/context.test.d.ts +2 -0
- package/dist/runtime/query/__tests__/context.test.d.ts.map +1 -0
- package/dist/runtime/query/__tests__/context.test.js +84 -0
- package/dist/runtime/query/__tests__/context.test.js.map +1 -0
- package/dist/runtime/query/context.d.ts +55 -2
- package/dist/runtime/query/context.d.ts.map +1 -1
- package/dist/runtime/query/context.js +48 -8
- package/dist/runtime/query/context.js.map +1 -1
- package/dist/runtime/query/events.d.ts.map +1 -1
- package/dist/runtime/query/events.js +8 -0
- package/dist/runtime/query/events.js.map +1 -1
- package/dist/runtime/query/index.d.ts +25 -2
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +11 -1
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/session/__tests__/integration/_fixtures.d.ts +115 -0
- package/dist/session/__tests__/integration/_fixtures.d.ts.map +1 -0
- package/dist/session/__tests__/integration/_fixtures.js +198 -0
- package/dist/session/__tests__/integration/_fixtures.js.map +1 -0
- package/dist/session/__tests__/integration/capacity-caps.test.d.ts +13 -0
- package/dist/session/__tests__/integration/capacity-caps.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/capacity-caps.test.js +116 -0
- package/dist/session/__tests__/integration/capacity-caps.test.js.map +1 -0
- package/dist/session/__tests__/integration/e2e-spawn.test.d.ts +18 -0
- package/dist/session/__tests__/integration/e2e-spawn.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/e2e-spawn.test.js +226 -0
- package/dist/session/__tests__/integration/e2e-spawn.test.js.map +1 -0
- package/dist/session/__tests__/integration/event-stream-ordering.test.d.ts +15 -0
- package/dist/session/__tests__/integration/event-stream-ordering.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/event-stream-ordering.test.js +323 -0
- package/dist/session/__tests__/integration/event-stream-ordering.test.js.map +1 -0
- package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.d.ts +12 -0
- package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js +170 -0
- package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js.map +1 -0
- package/dist/session/__tests__/integration/handoff-illegal-transition.test.d.ts +18 -0
- package/dist/session/__tests__/integration/handoff-illegal-transition.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/handoff-illegal-transition.test.js +146 -0
- package/dist/session/__tests__/integration/handoff-illegal-transition.test.js.map +1 -0
- package/dist/session/__tests__/integration/handoff-single-e2e.test.d.ts +15 -0
- package/dist/session/__tests__/integration/handoff-single-e2e.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/handoff-single-e2e.test.js +163 -0
- package/dist/session/__tests__/integration/handoff-single-e2e.test.js.map +1 -0
- package/dist/session/__tests__/integration/hierarchy-lifecycle.test.d.ts +12 -0
- package/dist/session/__tests__/integration/hierarchy-lifecycle.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js +157 -0
- package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js.map +1 -0
- package/dist/session/__tests__/integration/migration-filesystem.test.d.ts +11 -0
- package/dist/session/__tests__/integration/migration-filesystem.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/migration-filesystem.test.js +140 -0
- package/dist/session/__tests__/integration/migration-filesystem.test.js.map +1 -0
- package/dist/session/__tests__/integration/migration-id-prefix.test.d.ts +13 -0
- package/dist/session/__tests__/integration/migration-id-prefix.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/migration-id-prefix.test.js +84 -0
- package/dist/session/__tests__/integration/migration-id-prefix.test.js.map +1 -0
- package/dist/session/__tests__/integration/prev-artifact-dag.test.d.ts +14 -0
- package/dist/session/__tests__/integration/prev-artifact-dag.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/prev-artifact-dag.test.js +241 -0
- package/dist/session/__tests__/integration/prev-artifact-dag.test.js.map +1 -0
- package/dist/session/__tests__/integration/retention-archive.test.d.ts +12 -0
- package/dist/session/__tests__/integration/retention-archive.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/retention-archive.test.js +186 -0
- package/dist/session/__tests__/integration/retention-archive.test.js.map +1 -0
- package/dist/session/__tests__/integration/summary-materialization-e2e.test.d.ts +18 -0
- package/dist/session/__tests__/integration/summary-materialization-e2e.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/summary-materialization-e2e.test.js +200 -0
- package/dist/session/__tests__/integration/summary-materialization-e2e.test.js.map +1 -0
- package/dist/session/__tests__/integration/tenant-isolation.test.d.ts +14 -0
- package/dist/session/__tests__/integration/tenant-isolation.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/tenant-isolation.test.js +180 -0
- package/dist/session/__tests__/integration/tenant-isolation.test.js.map +1 -0
- package/dist/session/errors.d.ts +60 -0
- package/dist/session/errors.d.ts.map +1 -0
- package/dist/session/errors.js +50 -0
- package/dist/session/errors.js.map +1 -0
- package/dist/session/events/index.d.ts +4 -0
- package/dist/session/events/index.d.ts.map +1 -0
- package/dist/session/events/index.js +8 -0
- package/dist/session/events/index.js.map +1 -0
- package/dist/session/events/schema-version.d.ts +13 -0
- package/dist/session/events/schema-version.d.ts.map +1 -0
- package/dist/session/events/schema-version.js +12 -0
- package/dist/session/events/schema-version.js.map +1 -0
- package/dist/session/events/types.d.ts +64 -0
- package/dist/session/events/types.d.ts.map +1 -0
- package/dist/session/events/types.js +2 -0
- package/dist/session/events/types.js.map +1 -0
- package/dist/session/handoff/__tests__/broadcast.test.d.ts +2 -0
- package/dist/session/handoff/__tests__/broadcast.test.d.ts.map +1 -0
- package/dist/session/handoff/__tests__/broadcast.test.js +243 -0
- package/dist/session/handoff/__tests__/broadcast.test.js.map +1 -0
- package/dist/session/handoff/__tests__/capacity.test.d.ts +2 -0
- package/dist/session/handoff/__tests__/capacity.test.d.ts.map +1 -0
- package/dist/session/handoff/__tests__/capacity.test.js +100 -0
- package/dist/session/handoff/__tests__/capacity.test.js.map +1 -0
- package/dist/session/handoff/__tests__/single.test.d.ts +2 -0
- package/dist/session/handoff/__tests__/single.test.d.ts.map +1 -0
- package/dist/session/handoff/__tests__/single.test.js +230 -0
- package/dist/session/handoff/__tests__/single.test.js.map +1 -0
- package/dist/session/handoff/assignment.d.ts +59 -0
- package/dist/session/handoff/assignment.d.ts.map +1 -0
- package/dist/session/handoff/assignment.js +11 -0
- package/dist/session/handoff/assignment.js.map +1 -0
- package/dist/session/handoff/broadcast.d.ts +47 -0
- package/dist/session/handoff/broadcast.d.ts.map +1 -0
- package/dist/session/handoff/broadcast.js +296 -0
- package/dist/session/handoff/broadcast.js.map +1 -0
- package/dist/session/handoff/capacity.d.ts +66 -0
- package/dist/session/handoff/capacity.d.ts.map +1 -0
- package/dist/session/handoff/capacity.js +60 -0
- package/dist/session/handoff/capacity.js.map +1 -0
- package/dist/session/handoff/events.d.ts +66 -0
- package/dist/session/handoff/events.d.ts.map +1 -0
- package/dist/session/handoff/events.js +13 -0
- package/dist/session/handoff/events.js.map +1 -0
- package/dist/session/handoff/index.d.ts +12 -0
- package/dist/session/handoff/index.d.ts.map +1 -0
- package/dist/session/handoff/index.js +9 -0
- package/dist/session/handoff/index.js.map +1 -0
- package/dist/session/handoff/single.d.ts +62 -0
- package/dist/session/handoff/single.d.ts.map +1 -0
- package/dist/session/handoff/single.js +217 -0
- package/dist/session/handoff/single.js.map +1 -0
- package/dist/session/handoff/version.d.ts +52 -0
- package/dist/session/handoff/version.d.ts.map +1 -0
- package/dist/session/handoff/version.js +36 -0
- package/dist/session/handoff/version.js.map +1 -0
- package/dist/session/hierarchy/__tests__/session.test.d.ts +2 -0
- package/dist/session/hierarchy/__tests__/session.test.d.ts.map +1 -0
- package/dist/session/hierarchy/__tests__/session.test.js +67 -0
- package/dist/session/hierarchy/__tests__/session.test.js.map +1 -0
- package/dist/session/hierarchy/actor.d.ts +26 -0
- package/dist/session/hierarchy/actor.d.ts.map +1 -0
- package/dist/session/hierarchy/actor.js +2 -0
- package/dist/session/hierarchy/actor.js.map +1 -0
- package/dist/session/hierarchy/index.d.ts +8 -0
- package/dist/session/hierarchy/index.d.ts.map +1 -0
- package/dist/session/hierarchy/index.js +4 -0
- package/dist/session/hierarchy/index.js.map +1 -0
- package/dist/session/hierarchy/lineage.d.ts +15 -0
- package/dist/session/hierarchy/lineage.d.ts.map +1 -0
- package/dist/session/hierarchy/lineage.js +2 -0
- package/dist/session/hierarchy/lineage.js.map +1 -0
- package/dist/session/hierarchy/project.d.ts +40 -0
- package/dist/session/hierarchy/project.d.ts.map +1 -0
- package/dist/session/hierarchy/project.js +2 -0
- package/dist/session/hierarchy/project.js.map +1 -0
- package/dist/session/hierarchy/session.d.ts +59 -0
- package/dist/session/hierarchy/session.d.ts.map +1 -0
- package/dist/session/hierarchy/session.js +51 -0
- package/dist/session/hierarchy/session.js.map +1 -0
- package/dist/session/hierarchy/sub-session.d.ts +76 -0
- package/dist/session/hierarchy/sub-session.d.ts.map +1 -0
- package/dist/session/hierarchy/sub-session.js +2 -0
- package/dist/session/hierarchy/sub-session.js.map +1 -0
- package/dist/session/hierarchy/tenant.d.ts +13 -0
- package/dist/session/hierarchy/tenant.d.ts.map +1 -0
- package/dist/session/hierarchy/tenant.js +2 -0
- package/dist/session/hierarchy/tenant.js.map +1 -0
- package/dist/session/index.d.ts +10 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +15 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/intervention/__tests__/prev-artifact.test.d.ts +2 -0
- package/dist/session/intervention/__tests__/prev-artifact.test.d.ts.map +1 -0
- package/dist/session/intervention/__tests__/prev-artifact.test.js +179 -0
- package/dist/session/intervention/__tests__/prev-artifact.test.js.map +1 -0
- package/dist/session/intervention/index.d.ts +3 -0
- package/dist/session/intervention/index.d.ts.map +1 -0
- package/dist/session/intervention/index.js +8 -0
- package/dist/session/intervention/index.js.map +1 -0
- package/dist/session/intervention/prev-artifact.d.ts +103 -0
- package/dist/session/intervention/prev-artifact.d.ts.map +1 -0
- package/dist/session/intervention/prev-artifact.js +112 -0
- package/dist/session/intervention/prev-artifact.js.map +1 -0
- package/dist/session/migration/__tests__/filesystem.test.d.ts +2 -0
- package/dist/session/migration/__tests__/filesystem.test.d.ts.map +1 -0
- package/dist/session/migration/__tests__/filesystem.test.js +188 -0
- package/dist/session/migration/__tests__/filesystem.test.js.map +1 -0
- package/dist/session/migration/__tests__/id-prefix.test.d.ts +2 -0
- package/dist/session/migration/__tests__/id-prefix.test.d.ts.map +1 -0
- package/dist/session/migration/__tests__/id-prefix.test.js +83 -0
- package/dist/session/migration/__tests__/id-prefix.test.js.map +1 -0
- package/dist/session/migration/__tests__/marker.test.d.ts +2 -0
- package/dist/session/migration/__tests__/marker.test.d.ts.map +1 -0
- package/dist/session/migration/__tests__/marker.test.js +75 -0
- package/dist/session/migration/__tests__/marker.test.js.map +1 -0
- package/dist/session/migration/errors.d.ts +26 -0
- package/dist/session/migration/errors.d.ts.map +1 -0
- package/dist/session/migration/errors.js +22 -0
- package/dist/session/migration/errors.js.map +1 -0
- package/dist/session/migration/filesystem.d.ts +94 -0
- package/dist/session/migration/filesystem.d.ts.map +1 -0
- package/dist/session/migration/filesystem.js +319 -0
- package/dist/session/migration/filesystem.js.map +1 -0
- package/dist/session/migration/id-prefix.d.ts +98 -0
- package/dist/session/migration/id-prefix.d.ts.map +1 -0
- package/dist/session/migration/id-prefix.js +116 -0
- package/dist/session/migration/id-prefix.js.map +1 -0
- package/dist/session/migration/index.d.ts +8 -0
- package/dist/session/migration/index.d.ts.map +1 -0
- package/dist/session/migration/index.js +8 -0
- package/dist/session/migration/index.js.map +1 -0
- package/dist/session/migration/marker.d.ts +57 -0
- package/dist/session/migration/marker.d.ts.map +1 -0
- package/dist/session/migration/marker.js +111 -0
- package/dist/session/migration/marker.js.map +1 -0
- package/dist/session/retention/__tests__/archive.test.d.ts +2 -0
- package/dist/session/retention/__tests__/archive.test.d.ts.map +1 -0
- package/dist/session/retention/__tests__/archive.test.js +252 -0
- package/dist/session/retention/__tests__/archive.test.js.map +1 -0
- package/dist/session/retention/__tests__/disk-backend.test.d.ts +2 -0
- package/dist/session/retention/__tests__/disk-backend.test.d.ts.map +1 -0
- package/dist/session/retention/__tests__/disk-backend.test.js +154 -0
- package/dist/session/retention/__tests__/disk-backend.test.js.map +1 -0
- package/dist/session/retention/archive-backend-ref.d.ts +18 -0
- package/dist/session/retention/archive-backend-ref.d.ts.map +1 -0
- package/dist/session/retention/archive-backend-ref.js +2 -0
- package/dist/session/retention/archive-backend-ref.js.map +1 -0
- package/dist/session/retention/archive.d.ts +130 -0
- package/dist/session/retention/archive.d.ts.map +1 -0
- package/dist/session/retention/archive.js +203 -0
- package/dist/session/retention/archive.js.map +1 -0
- package/dist/session/retention/backend.d.ts +101 -0
- package/dist/session/retention/backend.d.ts.map +1 -0
- package/dist/session/retention/backend.js +15 -0
- package/dist/session/retention/backend.js.map +1 -0
- package/dist/session/retention/disk-backend.d.ts +59 -0
- package/dist/session/retention/disk-backend.d.ts.map +1 -0
- package/dist/session/retention/disk-backend.js +236 -0
- package/dist/session/retention/disk-backend.js.map +1 -0
- package/dist/session/retention/index.d.ts +9 -0
- package/dist/session/retention/index.d.ts.map +1 -0
- package/dist/session/retention/index.js +6 -0
- package/dist/session/retention/index.js.map +1 -0
- package/dist/session/retention/policy.d.ts +49 -0
- package/dist/session/retention/policy.d.ts.map +1 -0
- package/dist/session/retention/policy.js +21 -0
- package/dist/session/retention/policy.js.map +1 -0
- package/dist/session/summary/__tests__/materialize.test.d.ts +2 -0
- package/dist/session/summary/__tests__/materialize.test.d.ts.map +1 -0
- package/dist/session/summary/__tests__/materialize.test.js +269 -0
- package/dist/session/summary/__tests__/materialize.test.js.map +1 -0
- package/dist/session/summary/deliverable.d.ts +74 -0
- package/dist/session/summary/deliverable.d.ts.map +1 -0
- package/dist/session/summary/deliverable.js +20 -0
- package/dist/session/summary/deliverable.js.map +1 -0
- package/dist/session/summary/index.d.ts +6 -0
- package/dist/session/summary/index.d.ts.map +1 -0
- package/dist/session/summary/index.js +9 -0
- package/dist/session/summary/index.js.map +1 -0
- package/dist/session/summary/materialize.d.ts +82 -0
- package/dist/session/summary/materialize.d.ts.map +1 -0
- package/dist/session/summary/materialize.js +117 -0
- package/dist/session/summary/materialize.js.map +1 -0
- package/dist/session/summary/ref.d.ts +91 -0
- package/dist/session/summary/ref.d.ts.map +1 -0
- package/dist/session/summary/ref.js +51 -0
- package/dist/session/summary/ref.js.map +1 -0
- package/dist/session/workspace/__tests__/git-worktree.test.d.ts +2 -0
- package/dist/session/workspace/__tests__/git-worktree.test.d.ts.map +1 -0
- package/dist/session/workspace/__tests__/git-worktree.test.js +244 -0
- package/dist/session/workspace/__tests__/git-worktree.test.js.map +1 -0
- package/dist/session/workspace/__tests__/path-builder.test.d.ts +2 -0
- package/dist/session/workspace/__tests__/path-builder.test.d.ts.map +1 -0
- package/dist/session/workspace/__tests__/path-builder.test.js +37 -0
- package/dist/session/workspace/__tests__/path-builder.test.js.map +1 -0
- package/dist/session/workspace/driver.d.ts +55 -0
- package/dist/session/workspace/driver.d.ts.map +1 -0
- package/dist/session/workspace/driver.js +12 -0
- package/dist/session/workspace/driver.js.map +1 -0
- package/dist/session/workspace/git-worktree.d.ts +65 -0
- package/dist/session/workspace/git-worktree.d.ts.map +1 -0
- package/dist/session/workspace/git-worktree.js +156 -0
- package/dist/session/workspace/git-worktree.js.map +1 -0
- package/dist/session/workspace/index.d.ts +8 -0
- package/dist/session/workspace/index.d.ts.map +1 -0
- package/dist/session/workspace/index.js +7 -0
- package/dist/session/workspace/index.js.map +1 -0
- package/dist/session/workspace/path-builder.d.ts +50 -0
- package/dist/session/workspace/path-builder.d.ts.map +1 -0
- package/dist/session/workspace/path-builder.js +50 -0
- package/dist/session/workspace/path-builder.js.map +1 -0
- package/dist/session/workspace/ref.d.ts +46 -0
- package/dist/session/workspace/ref.d.ts.map +1 -0
- package/dist/session/workspace/ref.js +11 -0
- package/dist/session/workspace/ref.js.map +1 -0
- package/dist/session/workspace/registry.d.ts +26 -0
- package/dist/session/workspace/registry.d.ts.map +1 -0
- package/dist/session/workspace/registry.js +35 -0
- package/dist/session/workspace/registry.js.map +1 -0
- package/dist/store/conversation/memory.d.ts +22 -0
- package/dist/store/conversation/memory.d.ts.map +1 -1
- package/dist/store/conversation/memory.js +22 -0
- package/dist/store/conversation/memory.js.map +1 -1
- package/dist/store/session/__tests__/disk.test.d.ts +2 -0
- package/dist/store/session/__tests__/disk.test.d.ts.map +1 -0
- package/dist/store/session/__tests__/disk.test.js +240 -0
- package/dist/store/session/__tests__/disk.test.js.map +1 -0
- package/dist/store/session/__tests__/memory.test.d.ts +2 -0
- package/dist/store/session/__tests__/memory.test.d.ts.map +1 -0
- package/dist/store/session/__tests__/memory.test.js +217 -0
- package/dist/store/session/__tests__/memory.test.js.map +1 -0
- package/dist/store/session/disk.d.ts +85 -0
- package/dist/store/session/disk.d.ts.map +1 -0
- package/dist/store/session/disk.js +757 -0
- package/dist/store/session/disk.js.map +1 -0
- package/dist/store/session/index.d.ts +7 -0
- package/dist/store/session/index.d.ts.map +1 -0
- package/dist/store/session/index.js +11 -0
- package/dist/store/session/index.js.map +1 -0
- package/dist/store/session/linkage.d.ts +38 -0
- package/dist/store/session/linkage.d.ts.map +1 -0
- package/dist/store/session/linkage.js +64 -0
- package/dist/store/session/linkage.js.map +1 -0
- package/dist/store/session/memory.d.ts +48 -0
- package/dist/store/session/memory.d.ts.map +1 -0
- package/dist/store/session/memory.js +322 -0
- package/dist/store/session/memory.js.map +1 -0
- package/dist/store/session/messages.d.ts +20 -0
- package/dist/store/session/messages.d.ts.map +1 -0
- package/dist/store/session/messages.js +12 -0
- package/dist/store/session/messages.js.map +1 -0
- package/dist/tools/builtins/__tests__/structuredOutput.example.d.ts +1 -1
- package/dist/types/agent/base.d.ts +28 -1
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +50 -2
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/agent/task.js.map +1 -1
- package/dist/types/conversation/index.d.ts +7 -0
- package/dist/types/conversation/index.d.ts.map +1 -1
- package/dist/types/ids/index.d.ts +26 -3
- package/dist/types/ids/index.d.ts.map +1 -1
- package/dist/types/ids/index.js +8 -1
- package/dist/types/ids/index.js.map +1 -1
- package/dist/types/invocation/__tests__/state.test.js +36 -29
- package/dist/types/invocation/__tests__/state.test.js.map +1 -1
- package/dist/types/invocation/index.d.ts +20 -4
- package/dist/types/invocation/index.d.ts.map +1 -1
- package/dist/types/invocation/index.js +10 -7
- package/dist/types/invocation/index.js.map +1 -1
- package/dist/types/run/config.d.ts +11 -1
- package/dist/types/run/config.d.ts.map +1 -1
- package/dist/types/run/events.d.ts +26 -1
- package/dist/types/run/events.d.ts.map +1 -1
- package/dist/types/run/index.d.ts.map +1 -1
- package/dist/types/run/index.js +8 -0
- package/dist/types/run/index.js.map +1 -1
- package/dist/types/run/metadata.d.ts +24 -1
- package/dist/types/run/metadata.d.ts.map +1 -1
- package/dist/types/run/status.d.ts +26 -0
- package/dist/types/run/status.d.ts.map +1 -0
- package/dist/types/run/status.js +2 -0
- package/dist/types/run/status.js.map +1 -0
- package/dist/types/session/ids.d.ts +18 -0
- package/dist/types/session/ids.d.ts.map +1 -0
- package/dist/types/session/ids.js +12 -0
- package/dist/types/session/ids.js.map +1 -0
- package/dist/types/session/index.d.ts +3 -0
- package/dist/types/session/index.d.ts.map +1 -0
- package/dist/types/session/index.js +5 -0
- package/dist/types/session/index.js.map +1 -0
- package/dist/types/session/store.d.ts +188 -0
- package/dist/types/session/store.d.ts.map +1 -0
- package/dist/types/session/store.js +14 -0
- package/dist/types/session/store.js.map +1 -0
- package/dist/utils/id.d.ts +18 -1
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +42 -4
- package/dist/utils/id.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/ReactiveAgent.ts +7 -3
- package/src/agents/RouterAgent.ts +5 -0
- package/src/agents/SupervisorAgent.ts +26 -6
- package/src/bridge/a2a/mapper.ts +7 -0
- package/src/bridge/a2a/task.ts +2 -2
- package/src/bridge/sse/mapper.ts +8 -1
- package/src/constants/a2a/index.ts +2 -2
- package/src/contracts/api.ts +23 -3
- package/src/contracts/index.ts +2 -0
- package/src/gateway/local.ts +6 -0
- package/src/index.ts +14 -0
- package/src/manager/agent/__tests__/lifecycle.test.ts +452 -0
- package/src/manager/agent/lifecycle.ts +434 -19
- package/src/manager/run/persistence.ts +20 -1
- package/src/run/reporter.ts +28 -0
- package/src/runtime/query/__tests__/context.test.ts +101 -0
- package/src/runtime/query/context.ts +106 -10
- package/src/runtime/query/events.ts +8 -0
- package/src/runtime/query/index.ts +41 -3
- package/src/session/__tests__/integration/_fixtures.ts +282 -0
- package/src/session/__tests__/integration/capacity-caps.test.ts +164 -0
- package/src/session/__tests__/integration/e2e-spawn.test.ts +278 -0
- package/src/session/__tests__/integration/event-stream-ordering.test.ts +403 -0
- package/src/session/__tests__/integration/handoff-broadcast-e2e.test.ts +245 -0
- package/src/session/__tests__/integration/handoff-illegal-transition.test.ts +179 -0
- package/src/session/__tests__/integration/handoff-single-e2e.test.ts +220 -0
- package/src/session/__tests__/integration/hierarchy-lifecycle.test.ts +237 -0
- package/src/session/__tests__/integration/migration-filesystem.test.ts +209 -0
- package/src/session/__tests__/integration/migration-id-prefix.test.ts +101 -0
- package/src/session/__tests__/integration/prev-artifact-dag.test.ts +318 -0
- package/src/session/__tests__/integration/retention-archive.test.ts +231 -0
- package/src/session/__tests__/integration/summary-materialization-e2e.test.ts +237 -0
- package/src/session/__tests__/integration/tenant-isolation.test.ts +282 -0
- package/src/session/errors.ts +70 -0
- package/src/session/events/index.ts +16 -0
- package/src/session/events/schema-version.ts +13 -0
- package/src/session/events/types.ts +71 -0
- package/src/session/handoff/__tests__/broadcast.test.ts +350 -0
- package/src/session/handoff/__tests__/capacity.test.ts +123 -0
- package/src/session/handoff/__tests__/single.test.ts +316 -0
- package/src/session/handoff/assignment.ts +62 -0
- package/src/session/handoff/broadcast.ts +381 -0
- package/src/session/handoff/capacity.ts +121 -0
- package/src/session/handoff/events.ts +72 -0
- package/src/session/handoff/index.ts +29 -0
- package/src/session/handoff/single.ts +288 -0
- package/src/session/handoff/version.ts +59 -0
- package/src/session/hierarchy/__tests__/session.test.ts +92 -0
- package/src/session/hierarchy/actor.ts +17 -0
- package/src/session/hierarchy/index.ts +17 -0
- package/src/session/hierarchy/lineage.ts +15 -0
- package/src/session/hierarchy/project.ts +41 -0
- package/src/session/hierarchy/session.ts +97 -0
- package/src/session/hierarchy/sub-session.ts +92 -0
- package/src/session/hierarchy/tenant.ts +13 -0
- package/src/session/index.ts +15 -0
- package/src/session/intervention/__tests__/prev-artifact.test.ts +234 -0
- package/src/session/intervention/index.ts +16 -0
- package/src/session/intervention/prev-artifact.ts +180 -0
- package/src/session/migration/__tests__/filesystem.test.ts +263 -0
- package/src/session/migration/__tests__/id-prefix.test.ts +101 -0
- package/src/session/migration/__tests__/marker.test.ts +84 -0
- package/src/session/migration/errors.ts +23 -0
- package/src/session/migration/filesystem.ts +401 -0
- package/src/session/migration/id-prefix.ts +146 -0
- package/src/session/migration/index.ts +38 -0
- package/src/session/migration/marker.ts +131 -0
- package/src/session/retention/__tests__/archive.test.ts +316 -0
- package/src/session/retention/__tests__/disk-backend.test.ts +180 -0
- package/src/session/retention/archive-backend-ref.ts +17 -0
- package/src/session/retention/archive.ts +281 -0
- package/src/session/retention/backend.ts +107 -0
- package/src/session/retention/disk-backend.ts +304 -0
- package/src/session/retention/index.ts +16 -0
- package/src/session/retention/policy.ts +53 -0
- package/src/session/summary/__tests__/materialize.test.ts +341 -0
- package/src/session/summary/deliverable.ts +84 -0
- package/src/session/summary/index.ts +31 -0
- package/src/session/summary/materialize.ts +169 -0
- package/src/session/summary/ref.ts +104 -0
- package/src/session/workspace/__tests__/git-worktree.test.ts +258 -0
- package/src/session/workspace/__tests__/path-builder.test.ts +51 -0
- package/src/session/workspace/driver.ts +60 -0
- package/src/session/workspace/git-worktree.ts +209 -0
- package/src/session/workspace/index.ts +25 -0
- package/src/session/workspace/path-builder.ts +71 -0
- package/src/session/workspace/ref.ts +50 -0
- package/src/session/workspace/registry.ts +42 -0
- package/src/store/conversation/memory.ts +23 -0
- package/src/store/session/__tests__/disk.test.ts +346 -0
- package/src/store/session/__tests__/memory.test.ts +327 -0
- package/src/store/session/disk.ts +920 -0
- package/src/store/session/index.ts +14 -0
- package/src/store/session/linkage.ts +80 -0
- package/src/store/session/memory.ts +400 -0
- package/src/store/session/messages.ts +21 -0
- package/src/types/agent/base.ts +31 -1
- package/src/types/agent/task.ts +58 -2
- package/src/types/conversation/index.ts +7 -0
- package/src/types/ids/index.ts +41 -3
- package/src/types/invocation/__tests__/state.test.ts +37 -29
- package/src/types/invocation/index.ts +26 -10
- package/src/types/run/config.ts +12 -1
- package/src/types/run/events.ts +36 -1
- package/src/types/run/index.ts +8 -0
- package/src/types/run/metadata.ts +24 -1
- package/src/types/run/status.ts +33 -0
- package/src/types/session/ids.ts +34 -0
- package/src/types/session/index.ts +28 -0
- package/src/types/session/store.ts +229 -0
- package/src/utils/id.ts +55 -4
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { WorkspaceBackendError } from '../../errors.js';
|
|
3
|
+
import { GitWorktreeDriver, parseWorktreeList, } from '../git-worktree.js';
|
|
4
|
+
function stubLogger() {
|
|
5
|
+
return {
|
|
6
|
+
debug: vi.fn(),
|
|
7
|
+
info: vi.fn(),
|
|
8
|
+
warn: vi.fn(),
|
|
9
|
+
error: vi.fn(),
|
|
10
|
+
child() {
|
|
11
|
+
return stubLogger();
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function okExec(stdout = '', stderr = '') {
|
|
16
|
+
return { stdout, stderr };
|
|
17
|
+
}
|
|
18
|
+
describe('GitWorktreeDriver', () => {
|
|
19
|
+
it('create: invokes `git worktree add` with argv array (no shell interpolation)', async () => {
|
|
20
|
+
const calls = [];
|
|
21
|
+
const exec = async (file, args) => {
|
|
22
|
+
calls.push({ file, args: [...args] });
|
|
23
|
+
return okExec();
|
|
24
|
+
};
|
|
25
|
+
const driver = new GitWorktreeDriver({
|
|
26
|
+
repoRoot: '/repo',
|
|
27
|
+
logger: stubLogger(),
|
|
28
|
+
execFile: exec,
|
|
29
|
+
});
|
|
30
|
+
const ref = await driver.create({ label: 'foo', baseRef: 'main' });
|
|
31
|
+
expect(ref.id.startsWith('wsp_')).toBe(true);
|
|
32
|
+
expect(ref.meta.backend).toBe('git-worktree');
|
|
33
|
+
expect(ref.meta.branch).toBe('namzu/foo');
|
|
34
|
+
expect(calls).toHaveLength(1);
|
|
35
|
+
const call = calls[0];
|
|
36
|
+
if (!call)
|
|
37
|
+
throw new Error('missing call');
|
|
38
|
+
expect(call.file).toBe('git');
|
|
39
|
+
expect(call.args).toEqual([
|
|
40
|
+
'-C',
|
|
41
|
+
'/repo',
|
|
42
|
+
'worktree',
|
|
43
|
+
'add',
|
|
44
|
+
'-b',
|
|
45
|
+
'namzu/foo',
|
|
46
|
+
'/repo/.namzu/worktrees/foo',
|
|
47
|
+
'main',
|
|
48
|
+
]);
|
|
49
|
+
});
|
|
50
|
+
it('create: omits baseRef argv slot when not supplied', async () => {
|
|
51
|
+
const calls = [];
|
|
52
|
+
const exec = async (file, args) => {
|
|
53
|
+
calls.push({ file, args: [...args] });
|
|
54
|
+
return okExec();
|
|
55
|
+
};
|
|
56
|
+
const driver = new GitWorktreeDriver({
|
|
57
|
+
repoRoot: '/repo',
|
|
58
|
+
logger: stubLogger(),
|
|
59
|
+
execFile: exec,
|
|
60
|
+
});
|
|
61
|
+
await driver.create({ label: 'bar' });
|
|
62
|
+
const call = calls[0];
|
|
63
|
+
if (!call)
|
|
64
|
+
throw new Error('missing call');
|
|
65
|
+
expect(call.args.at(-1)).toBe('/repo/.namzu/worktrees/bar');
|
|
66
|
+
});
|
|
67
|
+
it('create: wraps failures in WorkspaceBackendError', async () => {
|
|
68
|
+
const exec = async () => {
|
|
69
|
+
throw new Error('invalid baseRef');
|
|
70
|
+
};
|
|
71
|
+
const driver = new GitWorktreeDriver({
|
|
72
|
+
repoRoot: '/repo',
|
|
73
|
+
logger: stubLogger(),
|
|
74
|
+
execFile: exec,
|
|
75
|
+
});
|
|
76
|
+
await expect(driver.create({ baseRef: 'does-not-exist' })).rejects.toBeInstanceOf(WorkspaceBackendError);
|
|
77
|
+
});
|
|
78
|
+
it('dispose: removes worktree with --force', async () => {
|
|
79
|
+
const calls = [];
|
|
80
|
+
const exec = async (_file, args) => {
|
|
81
|
+
calls.push(args);
|
|
82
|
+
return okExec();
|
|
83
|
+
};
|
|
84
|
+
const driver = new GitWorktreeDriver({
|
|
85
|
+
repoRoot: '/repo',
|
|
86
|
+
logger: stubLogger(),
|
|
87
|
+
execFile: exec,
|
|
88
|
+
});
|
|
89
|
+
const ref = {
|
|
90
|
+
id: 'wsp_x',
|
|
91
|
+
meta: {
|
|
92
|
+
backend: 'git-worktree',
|
|
93
|
+
repoRoot: '/repo',
|
|
94
|
+
branch: 'namzu/x',
|
|
95
|
+
worktreePath: '/repo/.namzu/worktrees/x',
|
|
96
|
+
},
|
|
97
|
+
createdAt: new Date(),
|
|
98
|
+
};
|
|
99
|
+
await driver.dispose(ref);
|
|
100
|
+
expect(calls[0]).toEqual([
|
|
101
|
+
'-C',
|
|
102
|
+
'/repo',
|
|
103
|
+
'worktree',
|
|
104
|
+
'remove',
|
|
105
|
+
'/repo/.namzu/worktrees/x',
|
|
106
|
+
'--force',
|
|
107
|
+
]);
|
|
108
|
+
});
|
|
109
|
+
it('dispose: tolerates missing worktree ("not a working tree")', async () => {
|
|
110
|
+
const exec = async () => {
|
|
111
|
+
throw new Error("'/tmp/gone' is not a working tree");
|
|
112
|
+
};
|
|
113
|
+
const driver = new GitWorktreeDriver({
|
|
114
|
+
repoRoot: '/repo',
|
|
115
|
+
logger: stubLogger(),
|
|
116
|
+
execFile: exec,
|
|
117
|
+
});
|
|
118
|
+
const ref = {
|
|
119
|
+
id: 'wsp_x',
|
|
120
|
+
meta: {
|
|
121
|
+
backend: 'git-worktree',
|
|
122
|
+
repoRoot: '/repo',
|
|
123
|
+
branch: 'namzu/x',
|
|
124
|
+
worktreePath: '/tmp/gone',
|
|
125
|
+
},
|
|
126
|
+
createdAt: new Date(),
|
|
127
|
+
};
|
|
128
|
+
// Must NOT throw — roadmap Risk #3 mitigation.
|
|
129
|
+
await expect(driver.dispose(ref)).resolves.toBeUndefined();
|
|
130
|
+
});
|
|
131
|
+
it('dispose: surfaces unexpected failures as WorkspaceBackendError', async () => {
|
|
132
|
+
const exec = async () => {
|
|
133
|
+
throw new Error('fatal: permission denied');
|
|
134
|
+
};
|
|
135
|
+
const driver = new GitWorktreeDriver({
|
|
136
|
+
repoRoot: '/repo',
|
|
137
|
+
logger: stubLogger(),
|
|
138
|
+
execFile: exec,
|
|
139
|
+
});
|
|
140
|
+
const ref = {
|
|
141
|
+
id: 'wsp_x',
|
|
142
|
+
meta: {
|
|
143
|
+
backend: 'git-worktree',
|
|
144
|
+
repoRoot: '/repo',
|
|
145
|
+
branch: 'namzu/x',
|
|
146
|
+
worktreePath: '/repo/.namzu/worktrees/x',
|
|
147
|
+
},
|
|
148
|
+
createdAt: new Date(),
|
|
149
|
+
};
|
|
150
|
+
await expect(driver.dispose(ref)).rejects.toBeInstanceOf(WorkspaceBackendError);
|
|
151
|
+
});
|
|
152
|
+
it('inspect: parses list output and detects clean tree', async () => {
|
|
153
|
+
const listStdout = [
|
|
154
|
+
'worktree /repo/.namzu/worktrees/x',
|
|
155
|
+
'HEAD abc123',
|
|
156
|
+
'branch refs/heads/namzu/x',
|
|
157
|
+
'',
|
|
158
|
+
].join('\n');
|
|
159
|
+
let callIndex = 0;
|
|
160
|
+
const exec = async (_file, args) => {
|
|
161
|
+
callIndex++;
|
|
162
|
+
if (args.includes('list'))
|
|
163
|
+
return okExec(listStdout);
|
|
164
|
+
if (args.includes('status'))
|
|
165
|
+
return okExec('');
|
|
166
|
+
throw new Error(`unexpected call ${callIndex}`);
|
|
167
|
+
};
|
|
168
|
+
const driver = new GitWorktreeDriver({
|
|
169
|
+
repoRoot: '/repo',
|
|
170
|
+
logger: stubLogger(),
|
|
171
|
+
execFile: exec,
|
|
172
|
+
});
|
|
173
|
+
const ref = {
|
|
174
|
+
id: 'wsp_x',
|
|
175
|
+
meta: {
|
|
176
|
+
backend: 'git-worktree',
|
|
177
|
+
repoRoot: '/repo',
|
|
178
|
+
branch: 'namzu/x',
|
|
179
|
+
worktreePath: '/repo/.namzu/worktrees/x',
|
|
180
|
+
},
|
|
181
|
+
createdAt: new Date(),
|
|
182
|
+
};
|
|
183
|
+
const inspection = await driver.inspect(ref);
|
|
184
|
+
expect(inspection.exists).toBe(true);
|
|
185
|
+
expect(inspection.isDirty).toBe(false);
|
|
186
|
+
});
|
|
187
|
+
it('inspect: reports dirty when status --porcelain has output', async () => {
|
|
188
|
+
const listStdout = [
|
|
189
|
+
'worktree /repo/.namzu/worktrees/x',
|
|
190
|
+
'HEAD abc123',
|
|
191
|
+
'branch refs/heads/namzu/x',
|
|
192
|
+
'',
|
|
193
|
+
].join('\n');
|
|
194
|
+
const exec = async (_file, args) => {
|
|
195
|
+
if (args.includes('list'))
|
|
196
|
+
return okExec(listStdout);
|
|
197
|
+
if (args.includes('status'))
|
|
198
|
+
return okExec(' M path/to/file\n');
|
|
199
|
+
throw new Error('unexpected');
|
|
200
|
+
};
|
|
201
|
+
const driver = new GitWorktreeDriver({
|
|
202
|
+
repoRoot: '/repo',
|
|
203
|
+
logger: stubLogger(),
|
|
204
|
+
execFile: exec,
|
|
205
|
+
});
|
|
206
|
+
const ref = {
|
|
207
|
+
id: 'wsp_x',
|
|
208
|
+
meta: {
|
|
209
|
+
backend: 'git-worktree',
|
|
210
|
+
repoRoot: '/repo',
|
|
211
|
+
branch: 'namzu/x',
|
|
212
|
+
worktreePath: '/repo/.namzu/worktrees/x',
|
|
213
|
+
},
|
|
214
|
+
createdAt: new Date(),
|
|
215
|
+
};
|
|
216
|
+
const inspection = await driver.inspect(ref);
|
|
217
|
+
expect(inspection.isDirty).toBe(true);
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
describe('parseWorktreeList', () => {
|
|
221
|
+
it('returns null when the target path is absent', () => {
|
|
222
|
+
const stdout = ['worktree /other', 'HEAD abc', 'branch refs/heads/main', ''].join('\n');
|
|
223
|
+
expect(parseWorktreeList(stdout, '/missing')).toBeNull();
|
|
224
|
+
});
|
|
225
|
+
it('extracts head + branch for the matching entry', () => {
|
|
226
|
+
const stdout = [
|
|
227
|
+
'worktree /repo/.namzu/worktrees/x',
|
|
228
|
+
'HEAD deadbeef',
|
|
229
|
+
'branch refs/heads/namzu/x',
|
|
230
|
+
'',
|
|
231
|
+
'worktree /other',
|
|
232
|
+
'HEAD abc',
|
|
233
|
+
'bare',
|
|
234
|
+
'',
|
|
235
|
+
].join('\n');
|
|
236
|
+
const entry = parseWorktreeList(stdout, '/repo/.namzu/worktrees/x');
|
|
237
|
+
expect(entry).toEqual({
|
|
238
|
+
path: '/repo/.namzu/worktrees/x',
|
|
239
|
+
head: 'deadbeef',
|
|
240
|
+
branch: 'refs/heads/namzu/x',
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
//# sourceMappingURL=git-worktree.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-worktree.test.js","sourceRoot":"","sources":["../../../../src/session/workspace/__tests__/git-worktree.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-builder.test.d.ts","sourceRoot":"","sources":["../../../../src/session/workspace/__tests__/path-builder.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { DefaultPathBuilder } from '../path-builder.js';
|
|
4
|
+
const projectId = 'prj_abc';
|
|
5
|
+
const sessionId = 'ses_xyz';
|
|
6
|
+
const subSessionId = 'sub_qqq';
|
|
7
|
+
const runId = 'run_rrr';
|
|
8
|
+
describe('DefaultPathBuilder', () => {
|
|
9
|
+
it('rootDir returns the injected root verbatim', () => {
|
|
10
|
+
const pb = new DefaultPathBuilder('/tmp/ns');
|
|
11
|
+
expect(pb.rootDir()).toBe('/tmp/ns');
|
|
12
|
+
});
|
|
13
|
+
it('projectDir resolves to {root}/projects/{projectId}', () => {
|
|
14
|
+
const pb = new DefaultPathBuilder('/tmp/ns');
|
|
15
|
+
expect(pb.projectDir(projectId)).toBe(join('/tmp/ns', 'projects', projectId));
|
|
16
|
+
});
|
|
17
|
+
it('sessionDir resolves to {root}/projects/{projectId}/sessions/{sessionId}', () => {
|
|
18
|
+
const pb = new DefaultPathBuilder('/tmp/ns');
|
|
19
|
+
expect(pb.sessionDir(projectId, sessionId)).toBe(join('/tmp/ns', 'projects', projectId, 'sessions', sessionId));
|
|
20
|
+
});
|
|
21
|
+
it('subSessionDir nests under session/subsessions/{subSessionId}', () => {
|
|
22
|
+
const pb = new DefaultPathBuilder('/tmp/ns');
|
|
23
|
+
expect(pb.subSessionDir(projectId, sessionId, subSessionId)).toBe(join('/tmp/ns', 'projects', projectId, 'sessions', sessionId, 'subsessions', subSessionId));
|
|
24
|
+
});
|
|
25
|
+
it('runDir nests under session/runs/{runId}', () => {
|
|
26
|
+
const pb = new DefaultPathBuilder('/tmp/ns');
|
|
27
|
+
expect(pb.runDir(projectId, sessionId, runId)).toBe(join('/tmp/ns', 'projects', projectId, 'sessions', sessionId, 'runs', runId));
|
|
28
|
+
});
|
|
29
|
+
it('root injection is per-instance (does not mutate global state)', () => {
|
|
30
|
+
const a = new DefaultPathBuilder('/tmp/a');
|
|
31
|
+
const b = new DefaultPathBuilder('/tmp/b');
|
|
32
|
+
expect(a.rootDir()).toBe('/tmp/a');
|
|
33
|
+
expect(b.rootDir()).toBe('/tmp/b');
|
|
34
|
+
expect(a.projectDir(projectId)).not.toBe(b.projectDir(projectId));
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=path-builder.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-builder.test.js","sourceRoot":"","sources":["../../../../src/session/workspace/__tests__/path-builder.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAG7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,SAAS,GAAG,SAAsB,CAAA;AACxC,MAAM,SAAS,GAAG,SAAsB,CAAA;AACxC,MAAM,YAAY,GAAG,SAAyB,CAAA;AAC9C,MAAM,KAAK,GAAG,SAAkB,CAAA;AAEhC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACrD,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC7D,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAClF,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAC/C,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAC7D,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACvE,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAChE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,CAAC,CAC1F,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QAClD,MAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC,SAAS,CAAC,CAAA;QAC5C,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAClD,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAC5E,CAAA;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACxE,MAAM,CAAC,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkspaceBackendDriver — pluggable backend contract for workspace
|
|
3
|
+
* provisioning. See session-hierarchy.md §7.1.
|
|
4
|
+
*
|
|
5
|
+
* Every Session persists a {@link WorkspaceRef}; the driver owns the
|
|
6
|
+
* underlying filesystem/container/etc. semantics. Phase 3 ships the
|
|
7
|
+
* git-worktree reference implementation (`git-worktree.ts`); tmpfs,
|
|
8
|
+
* container, and shared variants slot behind this same interface in a
|
|
9
|
+
* later phase (Convention #10: provider abstraction).
|
|
10
|
+
*/
|
|
11
|
+
import type { WorkspaceBackendKind, WorkspaceRef } from './ref.js';
|
|
12
|
+
/**
|
|
13
|
+
* Params for {@link WorkspaceBackendDriver.create}. `baseRef` selects the
|
|
14
|
+
* commit / branch the workspace should track; when absent the driver
|
|
15
|
+
* provisions from the backend's default (e.g. the current branch of the
|
|
16
|
+
* repo for git-worktree).
|
|
17
|
+
*/
|
|
18
|
+
export interface CreateWorkspaceParams {
|
|
19
|
+
baseRef?: string;
|
|
20
|
+
label?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Params for {@link WorkspaceBackendDriver.branch}. `label` is a free-form
|
|
24
|
+
* tag embedded into the new workspace name so operators can trace provenance
|
|
25
|
+
* without reaching into the driver's internal naming scheme.
|
|
26
|
+
*/
|
|
27
|
+
export interface BranchWorkspaceParams {
|
|
28
|
+
label?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Snapshot returned by {@link WorkspaceBackendDriver.inspect}. `exists` is
|
|
32
|
+
* `false` when the underlying resource has been disposed out-of-band (e.g.
|
|
33
|
+
* manual `git worktree remove` on disk); consumers can use it to detect
|
|
34
|
+
* divergence between the persisted {@link WorkspaceRef} and the backend.
|
|
35
|
+
*/
|
|
36
|
+
export interface WorkspaceInspection {
|
|
37
|
+
exists: boolean;
|
|
38
|
+
currentRef: string;
|
|
39
|
+
isDirty: boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Backend driver contract. All methods are async and may throw
|
|
43
|
+
* {@link WorkspaceBackendError} on I/O failures. `dispose` is idempotent —
|
|
44
|
+
* calling it against an already-disposed ref is not an error (mitigates
|
|
45
|
+
* roadmap Risk #3: broadcast rollback must not fail on partial state).
|
|
46
|
+
*/
|
|
47
|
+
export interface WorkspaceBackendDriver {
|
|
48
|
+
readonly kind: WorkspaceBackendKind;
|
|
49
|
+
create(params: CreateWorkspaceParams): Promise<WorkspaceRef>;
|
|
50
|
+
branch(source: WorkspaceRef, params: BranchWorkspaceParams): Promise<WorkspaceRef>;
|
|
51
|
+
dispose(ref: WorkspaceRef): Promise<void>;
|
|
52
|
+
inspect(ref: WorkspaceRef): Promise<WorkspaceInspection>;
|
|
53
|
+
}
|
|
54
|
+
export type { WorkspaceBackendKind } from './ref.js';
|
|
55
|
+
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../src/session/workspace/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAElE;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;IACnC,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC5D,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAClF,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACxD;AAED,YAAY,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkspaceBackendDriver — pluggable backend contract for workspace
|
|
3
|
+
* provisioning. See session-hierarchy.md §7.1.
|
|
4
|
+
*
|
|
5
|
+
* Every Session persists a {@link WorkspaceRef}; the driver owns the
|
|
6
|
+
* underlying filesystem/container/etc. semantics. Phase 3 ships the
|
|
7
|
+
* git-worktree reference implementation (`git-worktree.ts`); tmpfs,
|
|
8
|
+
* container, and shared variants slot behind this same interface in a
|
|
9
|
+
* later phase (Convention #10: provider abstraction).
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/session/workspace/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWorktreeDriver — reference implementation of
|
|
3
|
+
* {@link WorkspaceBackendDriver} backed by `git worktree`.
|
|
4
|
+
*
|
|
5
|
+
* See session-hierarchy.md §7.2 (Git-worktree reference backend).
|
|
6
|
+
*
|
|
7
|
+
* Safety: every subprocess invocation uses `execFile` with an argv array —
|
|
8
|
+
* no shell interpolation — so caller-supplied `label`/`baseRef` strings
|
|
9
|
+
* cannot escape their argument slot. Failures surface as
|
|
10
|
+
* {@link WorkspaceBackendError} carrying the underlying cause.
|
|
11
|
+
*/
|
|
12
|
+
import type { Logger } from '../../utils/logger.js';
|
|
13
|
+
import type { BranchWorkspaceParams, CreateWorkspaceParams, WorkspaceBackendDriver, WorkspaceInspection } from './driver.js';
|
|
14
|
+
import type { WorkspaceRef } from './ref.js';
|
|
15
|
+
/**
|
|
16
|
+
* Minimal shape of `execFile`'s promisified result — allows tests to stub
|
|
17
|
+
* via dependency injection without pulling in the full `ChildProcess` type.
|
|
18
|
+
*/
|
|
19
|
+
export interface ExecFileResult {
|
|
20
|
+
stdout: string;
|
|
21
|
+
stderr: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Async exec callable used by {@link GitWorktreeDriver}. Matches the shape
|
|
25
|
+
* of `promisify(execFile)` for the argv-array overload. Injected via the
|
|
26
|
+
* constructor so tests can stub without touching `child_process`.
|
|
27
|
+
*/
|
|
28
|
+
export type ExecFile = (file: string, args: readonly string[]) => Promise<ExecFileResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Configuration for {@link GitWorktreeDriver}.
|
|
31
|
+
*/
|
|
32
|
+
export interface GitWorktreeDriverConfig {
|
|
33
|
+
/** Absolute path to the repo root whose `.git` backs the worktrees. */
|
|
34
|
+
repoRoot: string;
|
|
35
|
+
/**
|
|
36
|
+
* Directory (absolute) where worktree checkouts live. Defaults to
|
|
37
|
+
* `{repoRoot}/.namzu/worktrees` per session-hierarchy.md §7.2.
|
|
38
|
+
*/
|
|
39
|
+
worktreesDir?: string;
|
|
40
|
+
logger: Logger;
|
|
41
|
+
/** Test-seam: inject a stub `execFile` implementation. */
|
|
42
|
+
execFile?: ExecFile;
|
|
43
|
+
}
|
|
44
|
+
export declare class GitWorktreeDriver implements WorkspaceBackendDriver {
|
|
45
|
+
readonly kind: "git-worktree";
|
|
46
|
+
private readonly repoRoot;
|
|
47
|
+
private readonly worktreesDir;
|
|
48
|
+
private readonly log;
|
|
49
|
+
private readonly exec;
|
|
50
|
+
constructor(config: GitWorktreeDriverConfig);
|
|
51
|
+
create(params: CreateWorkspaceParams): Promise<WorkspaceRef>;
|
|
52
|
+
branch(source: WorkspaceRef, params: BranchWorkspaceParams): Promise<WorkspaceRef>;
|
|
53
|
+
dispose(ref: WorkspaceRef): Promise<void>;
|
|
54
|
+
inspect(ref: WorkspaceRef): Promise<WorkspaceInspection>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Parses `git worktree list --porcelain` output, returning the record for
|
|
58
|
+
* `worktreePath` or `null` when absent. Exported for tests.
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseWorktreeList(stdout: string, worktreePath: string): {
|
|
61
|
+
path: string;
|
|
62
|
+
head?: string;
|
|
63
|
+
branch?: string;
|
|
64
|
+
} | null;
|
|
65
|
+
//# sourceMappingURL=git-worktree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-worktree.d.ts","sourceRoot":"","sources":["../../../src/session/workspace/git-worktree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAEnD,OAAO,KAAK,EACX,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAA0B,YAAY,EAAE,MAAM,UAAU,CAAA;AAIpE;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;AAIzF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACnB;AAED,qBAAa,iBAAkB,YAAW,sBAAsB;IAC/D,QAAQ,CAAC,IAAI,EAAG,cAAc,CAAS;IAEvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;gBAEnB,MAAM,EAAE,uBAAuB;IAOrC,MAAM,CAAC,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAgC5D,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,GAAG,OAAO,CAAC,YAAY,CAAC;IAMlF,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BzC,OAAO,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAkC9D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqBzD"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitWorktreeDriver — reference implementation of
|
|
3
|
+
* {@link WorkspaceBackendDriver} backed by `git worktree`.
|
|
4
|
+
*
|
|
5
|
+
* See session-hierarchy.md §7.2 (Git-worktree reference backend).
|
|
6
|
+
*
|
|
7
|
+
* Safety: every subprocess invocation uses `execFile` with an argv array —
|
|
8
|
+
* no shell interpolation — so caller-supplied `label`/`baseRef` strings
|
|
9
|
+
* cannot escape their argument slot. Failures surface as
|
|
10
|
+
* {@link WorkspaceBackendError} carrying the underlying cause.
|
|
11
|
+
*/
|
|
12
|
+
import { execFile } from 'node:child_process';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { promisify } from 'node:util';
|
|
15
|
+
import { generateWorkspaceId } from '../../utils/id.js';
|
|
16
|
+
import { WorkspaceBackendError } from '../errors.js';
|
|
17
|
+
const execFileAsync = promisify(execFile);
|
|
18
|
+
const defaultExecFile = async (file, args) => execFileAsync(file, [...args]);
|
|
19
|
+
export class GitWorktreeDriver {
|
|
20
|
+
kind = 'git-worktree';
|
|
21
|
+
repoRoot;
|
|
22
|
+
worktreesDir;
|
|
23
|
+
log;
|
|
24
|
+
exec;
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.repoRoot = config.repoRoot;
|
|
27
|
+
this.worktreesDir = config.worktreesDir ?? join(config.repoRoot, '.namzu', 'worktrees');
|
|
28
|
+
this.log = config.logger.child({ component: 'GitWorktreeDriver' });
|
|
29
|
+
this.exec = config.execFile ?? defaultExecFile;
|
|
30
|
+
}
|
|
31
|
+
async create(params) {
|
|
32
|
+
const id = generateWorkspaceId();
|
|
33
|
+
const label = params.label ?? id;
|
|
34
|
+
const branch = `namzu/${label}`;
|
|
35
|
+
const worktreePath = join(this.worktreesDir, label);
|
|
36
|
+
const argv = ['-C', this.repoRoot, 'worktree', 'add', '-b', branch, worktreePath];
|
|
37
|
+
if (params.baseRef !== undefined) {
|
|
38
|
+
argv.push(params.baseRef);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
await this.exec('git', argv);
|
|
42
|
+
}
|
|
43
|
+
catch (cause) {
|
|
44
|
+
throw new WorkspaceBackendError({ op: 'create', kind: this.kind, cause });
|
|
45
|
+
}
|
|
46
|
+
const meta = {
|
|
47
|
+
backend: 'git-worktree',
|
|
48
|
+
repoRoot: this.repoRoot,
|
|
49
|
+
branch,
|
|
50
|
+
worktreePath,
|
|
51
|
+
};
|
|
52
|
+
this.log.info('git-worktree created', { id, branch, worktreePath });
|
|
53
|
+
return {
|
|
54
|
+
id,
|
|
55
|
+
meta,
|
|
56
|
+
createdAt: new Date(),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async branch(source, params) {
|
|
60
|
+
// Branch from the source worktree's current branch. The source's
|
|
61
|
+
// `meta.branch` is the ref we base off.
|
|
62
|
+
return this.create({ baseRef: source.meta.branch, label: params.label });
|
|
63
|
+
}
|
|
64
|
+
async dispose(ref) {
|
|
65
|
+
// Tolerate missing directories per roadmap Risk #3 mitigation: the
|
|
66
|
+
// broadcast-rollback compensating step calls dispose on partially
|
|
67
|
+
// provisioned refs and must not propagate "already gone" errors.
|
|
68
|
+
try {
|
|
69
|
+
await this.exec('git', [
|
|
70
|
+
'-C',
|
|
71
|
+
this.repoRoot,
|
|
72
|
+
'worktree',
|
|
73
|
+
'remove',
|
|
74
|
+
ref.meta.worktreePath,
|
|
75
|
+
'--force',
|
|
76
|
+
]);
|
|
77
|
+
this.log.info('git-worktree disposed', { id: ref.id, path: ref.meta.worktreePath });
|
|
78
|
+
}
|
|
79
|
+
catch (cause) {
|
|
80
|
+
const message = cause instanceof Error ? cause.message : String(cause);
|
|
81
|
+
// git exits non-zero with "is not a working tree" when the path is
|
|
82
|
+
// absent; treat as idempotent success and log at debug.
|
|
83
|
+
if (/not a working tree|does not exist|No such file/i.test(message)) {
|
|
84
|
+
this.log.debug('git-worktree already gone; dispose idempotent', {
|
|
85
|
+
id: ref.id,
|
|
86
|
+
path: ref.meta.worktreePath,
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
throw new WorkspaceBackendError({ op: 'dispose', kind: this.kind, cause });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async inspect(ref) {
|
|
94
|
+
let listStdout;
|
|
95
|
+
try {
|
|
96
|
+
const result = await this.exec('git', [
|
|
97
|
+
'-C',
|
|
98
|
+
this.repoRoot,
|
|
99
|
+
'worktree',
|
|
100
|
+
'list',
|
|
101
|
+
'--porcelain',
|
|
102
|
+
]);
|
|
103
|
+
listStdout = result.stdout;
|
|
104
|
+
}
|
|
105
|
+
catch (cause) {
|
|
106
|
+
throw new WorkspaceBackendError({ op: 'inspect:list', kind: this.kind, cause });
|
|
107
|
+
}
|
|
108
|
+
const entry = parseWorktreeList(listStdout, ref.meta.worktreePath);
|
|
109
|
+
if (!entry) {
|
|
110
|
+
return { exists: false, currentRef: ref.meta.branch, isDirty: false };
|
|
111
|
+
}
|
|
112
|
+
let statusStdout;
|
|
113
|
+
try {
|
|
114
|
+
const result = await this.exec('git', ['-C', ref.meta.worktreePath, 'status', '--porcelain']);
|
|
115
|
+
statusStdout = result.stdout;
|
|
116
|
+
}
|
|
117
|
+
catch (cause) {
|
|
118
|
+
throw new WorkspaceBackendError({ op: 'inspect:status', kind: this.kind, cause });
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
exists: true,
|
|
122
|
+
currentRef: entry.branch ?? entry.head ?? ref.meta.branch,
|
|
123
|
+
isDirty: statusStdout.trim().length > 0,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Parses `git worktree list --porcelain` output, returning the record for
|
|
129
|
+
* `worktreePath` or `null` when absent. Exported for tests.
|
|
130
|
+
*/
|
|
131
|
+
export function parseWorktreeList(stdout, worktreePath) {
|
|
132
|
+
const blocks = stdout.split(/\n\n+/);
|
|
133
|
+
for (const block of blocks) {
|
|
134
|
+
const lines = block.split('\n').filter((l) => l.length > 0);
|
|
135
|
+
let path;
|
|
136
|
+
let head;
|
|
137
|
+
let branch;
|
|
138
|
+
for (const line of lines) {
|
|
139
|
+
if (line.startsWith('worktree '))
|
|
140
|
+
path = line.slice('worktree '.length);
|
|
141
|
+
else if (line.startsWith('HEAD '))
|
|
142
|
+
head = line.slice('HEAD '.length);
|
|
143
|
+
else if (line.startsWith('branch '))
|
|
144
|
+
branch = line.slice('branch '.length);
|
|
145
|
+
}
|
|
146
|
+
if (path === worktreePath) {
|
|
147
|
+
return {
|
|
148
|
+
path,
|
|
149
|
+
...(head !== undefined && { head }),
|
|
150
|
+
...(branch !== undefined && { branch }),
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=git-worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-worktree.js","sourceRoot":"","sources":["../../../src/session/workspace/git-worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type { WorkspaceRef, WorkspaceBackendMeta, WorkspaceBackendKind, GitWorktreeBackendMeta, } from './ref.js';
|
|
2
|
+
export type { WorkspaceBackendDriver, CreateWorkspaceParams, BranchWorkspaceParams, WorkspaceInspection, } from './driver.js';
|
|
3
|
+
export { DefaultPathBuilder } from './path-builder.js';
|
|
4
|
+
export type { PathBuilder } from './path-builder.js';
|
|
5
|
+
export { WorkspaceBackendRegistry } from './registry.js';
|
|
6
|
+
export { GitWorktreeDriver, parseWorktreeList } from './git-worktree.js';
|
|
7
|
+
export type { ExecFile, ExecFileResult, GitWorktreeDriverConfig } from './git-worktree.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/workspace/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACX,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,GACtB,MAAM,UAAU,CAAA;AAEjB,YAAY,EACX,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACnB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACxE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Sub-barrel for the workspace module (Convention #4).
|
|
2
|
+
// Concrete types + driver implementation live in sibling files; re-export
|
|
3
|
+
// them here so other modules import via `../session/workspace/index.js`.
|
|
4
|
+
export { DefaultPathBuilder } from './path-builder.js';
|
|
5
|
+
export { WorkspaceBackendRegistry } from './registry.js';
|
|
6
|
+
export { GitWorktreeDriver, parseWorktreeList } from './git-worktree.js';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/workspace/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,0EAA0E;AAC1E,yEAAyE;AAgBzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AAExD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA"}
|