@namzu/sdk 0.1.8 → 0.3.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 +69 -2
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +5 -2
- 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 +21 -5
- package/dist/agents/SupervisorAgent.js.map +1 -1
- package/dist/bridge/a2a/index.d.ts +1 -1
- package/dist/bridge/a2a/index.d.ts.map +1 -1
- package/dist/bridge/a2a/index.js +1 -1
- package/dist/bridge/a2a/index.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/message.d.ts +0 -2
- package/dist/bridge/a2a/message.d.ts.map +1 -1
- package/dist/bridge/a2a/message.js +0 -26
- package/dist/bridge/a2a/message.js.map +1 -1
- package/dist/bridge/a2a/task.d.ts +5 -4
- package/dist/bridge/a2a/task.d.ts.map +1 -1
- package/dist/bridge/a2a/task.js +4 -4
- 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 +14 -27
- package/dist/contracts/api.d.ts.map +1 -1
- package/dist/contracts/ids.d.ts +1 -1
- package/dist/contracts/ids.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +3 -3
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/schemas.d.ts +1 -31
- package/dist/contracts/schemas.d.ts.map +1 -1
- package/dist/contracts/schemas.js +1 -7
- package/dist/contracts/schemas.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 +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3
- 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 +316 -0
- package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -0
- package/dist/manager/agent/lifecycle.d.ts +67 -3
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +375 -14
- package/dist/manager/agent/lifecycle.js.map +1 -1
- package/dist/manager/index.d.ts +2 -0
- package/dist/manager/index.d.ts.map +1 -1
- package/dist/manager/index.js +1 -0
- package/dist/manager/index.js.map +1 -1
- package/dist/manager/run/persistence.d.ts +10 -1
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +20 -0
- package/dist/manager/run/persistence.js.map +1 -1
- package/dist/manager/thread/__tests__/lifecycle.test.d.ts +2 -0
- package/dist/manager/thread/__tests__/lifecycle.test.d.ts.map +1 -0
- package/dist/manager/thread/__tests__/lifecycle.test.js +216 -0
- package/dist/manager/thread/__tests__/lifecycle.test.js.map +1 -0
- package/dist/manager/thread/lifecycle.d.ts +105 -0
- package/dist/manager/thread/lifecycle.d.ts.map +1 -0
- package/dist/manager/thread/lifecycle.js +186 -0
- package/dist/manager/thread/lifecycle.js.map +1 -0
- package/dist/rag/retriever.js +2 -2
- 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 +85 -0
- package/dist/runtime/query/__tests__/context.test.js.map +1 -0
- package/dist/runtime/query/context-cache.d.ts +3 -3
- package/dist/runtime/query/context-cache.d.ts.map +1 -1
- package/dist/runtime/query/context-cache.js +2 -2
- package/dist/runtime/query/context-cache.js.map +1 -1
- package/dist/runtime/query/context.d.ts +45 -1
- package/dist/runtime/query/context.d.ts.map +1 -1
- package/dist/runtime/query/context.js +50 -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 +22 -1
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +11 -0
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/session/__tests__/integration/_fixtures.d.ts +122 -0
- package/dist/session/__tests__/integration/_fixtures.d.ts.map +1 -0
- package/dist/session/__tests__/integration/_fixtures.js +215 -0
- package/dist/session/__tests__/integration/_fixtures.js.map +1 -0
- package/dist/session/__tests__/integration/archive-gate.test.d.ts +15 -0
- package/dist/session/__tests__/integration/archive-gate.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/archive-gate.test.js +214 -0
- package/dist/session/__tests__/integration/archive-gate.test.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 +123 -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 +238 -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 +330 -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 +182 -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 +156 -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 +179 -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 +158 -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 +242 -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 +187 -0
- package/dist/session/__tests__/integration/retention-archive.test.js.map +1 -0
- package/dist/session/__tests__/integration/spawn-rollback.test.d.ts +26 -0
- package/dist/session/__tests__/integration/spawn-rollback.test.d.ts.map +1 -0
- package/dist/session/__tests__/integration/spawn-rollback.test.js +236 -0
- package/dist/session/__tests__/integration/spawn-rollback.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 +201 -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 +189 -0
- package/dist/session/__tests__/integration/tenant-isolation.test.js.map +1 -0
- package/dist/session/errors.d.ts +139 -0
- package/dist/session/errors.d.ts.map +1 -0
- package/dist/session/errors.js +107 -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 +261 -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 +103 -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 +239 -0
- package/dist/session/handoff/__tests__/single.test.js.map +1 -0
- package/dist/session/handoff/assignment.d.ts +71 -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 +54 -0
- package/dist/session/handoff/broadcast.d.ts.map +1 -0
- package/dist/session/handoff/broadcast.js +311 -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 +69 -0
- package/dist/session/handoff/single.d.ts.map +1 -0
- package/dist/session/handoff/single.js +229 -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 +69 -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 +9 -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 +71 -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/hierarchy/thread.d.ts +54 -0
- package/dist/session/hierarchy/thread.d.ts.map +1 -0
- package/dist/session/hierarchy/thread.js +2 -0
- package/dist/session/hierarchy/thread.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 +93 -0
- package/dist/session/migration/id-prefix.d.ts.map +1 -0
- package/dist/session/migration/id-prefix.js +111 -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 +253 -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 +270 -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/index.d.ts +0 -2
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +0 -1
- package/dist/store/index.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 +267 -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 +258 -0
- package/dist/store/session/__tests__/memory.test.js.map +1 -0
- package/dist/store/session/disk.d.ts +86 -0
- package/dist/store/session/disk.d.ts.map +1 -0
- package/dist/store/session/disk.js +818 -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 +10 -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 +49 -0
- package/dist/store/session/memory.d.ts.map +1 -0
- package/dist/store/session/memory.js +335 -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/store/thread/disk.d.ts +41 -0
- package/dist/store/thread/disk.d.ts.map +1 -0
- package/dist/store/thread/disk.js +229 -0
- package/dist/store/thread/disk.js.map +1 -0
- package/dist/store/thread/index.d.ts +4 -0
- package/dist/store/thread/index.d.ts.map +1 -0
- package/dist/store/thread/index.js +6 -0
- package/dist/store/thread/index.js.map +1 -0
- package/dist/store/thread/memory.d.ts +23 -0
- package/dist/store/thread/memory.d.ts.map +1 -0
- package/dist/store/thread/memory.js +90 -0
- package/dist/store/thread/memory.js.map +1 -0
- package/dist/tools/builtins/__tests__/structuredOutput.example.d.ts +1 -1
- package/dist/types/agent/base.d.ts +24 -1
- package/dist/types/agent/base.d.ts.map +1 -1
- package/dist/types/agent/factory.d.ts +8 -2
- package/dist/types/agent/factory.d.ts.map +1 -1
- package/dist/types/agent/task.d.ts +57 -2
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/agent/task.js.map +1 -1
- package/dist/types/ids/index.d.ts +22 -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/rag/retrieval.d.ts +4 -3
- package/dist/types/rag/retrieval.d.ts.map +1 -1
- package/dist/types/run/config.d.ts +12 -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 +12 -2
- 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 +9 -0
- package/dist/types/session/ids.d.ts.map +1 -0
- package/dist/types/session/ids.js +9 -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 +210 -0
- package/dist/types/session/store.d.ts.map +1 -0
- package/dist/types/session/store.js +9 -0
- package/dist/types/session/store.js.map +1 -0
- package/dist/types/thread/index.d.ts +2 -0
- package/dist/types/thread/index.d.ts.map +1 -0
- package/dist/types/thread/index.js +5 -0
- package/dist/types/thread/index.js.map +1 -0
- package/dist/types/thread/store.d.ts +86 -0
- package/dist/types/thread/store.d.ts.map +1 -0
- package/dist/types/thread/store.js +22 -0
- package/dist/types/thread/store.js.map +1 -0
- package/dist/utils/id.d.ts +8 -2
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +22 -4
- package/dist/utils/id.js.map +1 -1
- package/package.json +6 -11
- package/src/agents/ReactiveAgent.ts +7 -2
- package/src/agents/RouterAgent.ts +5 -0
- package/src/agents/SupervisorAgent.ts +29 -6
- package/src/bridge/a2a/index.ts +0 -1
- package/src/bridge/a2a/mapper.ts +7 -0
- package/src/bridge/a2a/message.ts +0 -32
- package/src/bridge/a2a/task.ts +9 -8
- package/src/bridge/sse/mapper.ts +8 -1
- package/src/constants/a2a/index.ts +2 -2
- package/src/contracts/api.ts +14 -30
- package/src/contracts/ids.ts +1 -1
- package/src/contracts/index.ts +3 -7
- package/src/contracts/schemas.ts +1 -8
- package/src/gateway/local.ts +6 -0
- package/src/index.ts +14 -4
- package/src/manager/agent/__tests__/lifecycle.test.ts +473 -0
- package/src/manager/agent/lifecycle.ts +515 -21
- package/src/manager/index.ts +3 -0
- package/src/manager/run/persistence.ts +26 -1
- package/src/manager/thread/__tests__/lifecycle.test.ts +286 -0
- package/src/manager/thread/lifecycle.ts +217 -0
- package/src/rag/retriever.ts +2 -2
- package/src/run/reporter.ts +28 -0
- package/src/runtime/query/__tests__/context.test.ts +102 -0
- package/src/runtime/query/context-cache.ts +4 -4
- package/src/runtime/query/context.ts +98 -9
- package/src/runtime/query/events.ts +8 -0
- package/src/runtime/query/index.ts +38 -1
- package/src/session/__tests__/integration/_fixtures.ts +310 -0
- package/src/session/__tests__/integration/archive-gate.test.ts +288 -0
- package/src/session/__tests__/integration/capacity-caps.test.ts +171 -0
- package/src/session/__tests__/integration/e2e-spawn.test.ts +296 -0
- package/src/session/__tests__/integration/event-stream-ordering.test.ts +410 -0
- package/src/session/__tests__/integration/handoff-broadcast-e2e.test.ts +271 -0
- package/src/session/__tests__/integration/handoff-illegal-transition.test.ts +214 -0
- package/src/session/__tests__/integration/handoff-single-e2e.test.ts +251 -0
- package/src/session/__tests__/integration/hierarchy-lifecycle.test.ts +240 -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 +325 -0
- package/src/session/__tests__/integration/retention-archive.test.ts +233 -0
- package/src/session/__tests__/integration/spawn-rollback.test.ts +313 -0
- package/src/session/__tests__/integration/summary-materialization-e2e.test.ts +239 -0
- package/src/session/__tests__/integration/tenant-isolation.test.ts +292 -0
- package/src/session/errors.ts +159 -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 +378 -0
- package/src/session/handoff/__tests__/capacity.test.ts +129 -0
- package/src/session/handoff/__tests__/single.test.ts +333 -0
- package/src/session/handoff/assignment.ts +74 -0
- package/src/session/handoff/broadcast.ts +406 -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 +310 -0
- package/src/session/handoff/version.ts +59 -0
- package/src/session/hierarchy/__tests__/session.test.ts +100 -0
- package/src/session/hierarchy/actor.ts +17 -0
- package/src/session/hierarchy/index.ts +18 -0
- package/src/session/hierarchy/lineage.ts +15 -0
- package/src/session/hierarchy/project.ts +41 -0
- package/src/session/hierarchy/session.ts +109 -0
- package/src/session/hierarchy/sub-session.ts +92 -0
- package/src/session/hierarchy/tenant.ts +13 -0
- package/src/session/hierarchy/thread.ts +55 -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 +141 -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 +318 -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 +343 -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/index.ts +0 -3
- package/src/store/session/__tests__/disk.test.ts +397 -0
- package/src/store/session/__tests__/memory.test.ts +402 -0
- package/src/store/session/disk.ts +976 -0
- package/src/store/session/index.ts +13 -0
- package/src/store/session/linkage.ts +80 -0
- package/src/store/session/memory.ts +412 -0
- package/src/store/session/messages.ts +21 -0
- package/src/store/thread/disk.ts +261 -0
- package/src/store/thread/index.ts +7 -0
- package/src/store/thread/memory.ts +104 -0
- package/src/types/agent/base.ts +27 -1
- package/src/types/agent/factory.ts +8 -3
- package/src/types/agent/task.ts +66 -2
- package/src/types/ids/index.ts +34 -3
- package/src/types/invocation/__tests__/state.test.ts +37 -29
- package/src/types/invocation/index.ts +26 -10
- package/src/types/rag/retrieval.ts +4 -3
- package/src/types/run/config.ts +13 -1
- package/src/types/run/events.ts +36 -1
- package/src/types/run/index.ts +8 -0
- package/src/types/run/metadata.ts +12 -2
- package/src/types/run/status.ts +33 -0
- package/src/types/session/ids.ts +23 -0
- package/src/types/session/index.ts +27 -0
- package/src/types/session/store.ts +252 -0
- package/src/types/thread/index.ts +5 -0
- package/src/types/thread/store.ts +92 -0
- package/src/utils/id.ts +34 -4
- package/dist/store/conversation/memory.d.ts +0 -21
- package/dist/store/conversation/memory.d.ts.map +0 -1
- package/dist/store/conversation/memory.js +0 -86
- package/dist/store/conversation/memory.js.map +0 -1
- package/dist/types/conversation/index.d.ts +0 -7
- package/dist/types/conversation/index.d.ts.map +0 -1
- package/dist/types/conversation/index.js +0 -2
- package/dist/types/conversation/index.js.map +0 -1
- package/src/store/conversation/memory.ts +0 -121
- package/src/types/conversation/index.ts +0 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/session/hierarchy/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GACtB,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,eAAe,GACf,gBAAgB,GAChB,QAAQ,GACR,UAAU,CAAA;AAEb;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,OAAO;IACvB,EAAE,EAAE,SAAS,CAAA;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,EAAE,SAAS,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,aAAa,CAAA;IACrB,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC7B,cAAc,EAAE,SAAS,QAAQ,EAAE,CAAA;IACnC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CACf;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,CAC3B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,SAAS;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,EAAE,GACpC,aAAa,CA4Bf"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure Run→Session fan-in helper per session-hierarchy.md §5.1.
|
|
3
|
+
*
|
|
4
|
+
* The precedence (highest first) matches the pattern-doc table:
|
|
5
|
+
* 1. Session-level states that do not fan in from Run status:
|
|
6
|
+
* - `locked` (handoff CAS window) — preserved verbatim
|
|
7
|
+
* - `awaiting_merge` (broadcast source post-fan-out, §5.4) — preserved
|
|
8
|
+
* - `archived` (retention tombstone, §12.3) — preserved
|
|
9
|
+
* 2. Any Run `running` or `awaiting_subsession` → Session `active`.
|
|
10
|
+
* Delegation-in-flight is an active state of the parent — the parent
|
|
11
|
+
* Run is suspended waiting on the child's SessionSummaryMaterializer,
|
|
12
|
+
* and the session is NOT idle while that is pending.
|
|
13
|
+
* 3. Any Run `awaiting_hitl` or `awaiting_hitl_resolution` → Session
|
|
14
|
+
* `awaiting_hitl`.
|
|
15
|
+
* 4. All Runs `failed` and at least one Run present → Session `failed`.
|
|
16
|
+
* 5. Otherwise (all runs terminal — succeeded/cancelled/failed mix, or no
|
|
17
|
+
* runs at all) → Session `idle`.
|
|
18
|
+
*
|
|
19
|
+
* `cancelled` does NOT surface a `failed` Session (§5.1 — "Cancellation is
|
|
20
|
+
* not a terminal Session state"). Only `failed` runs drive the Session to
|
|
21
|
+
* `failed` when every Run ended that way.
|
|
22
|
+
*/
|
|
23
|
+
export function deriveStatus(session, runs) {
|
|
24
|
+
// Session-level overrides — these states do not fan in from Run status.
|
|
25
|
+
if (session.status === 'locked')
|
|
26
|
+
return 'locked';
|
|
27
|
+
if (session.status === 'awaiting_merge')
|
|
28
|
+
return 'awaiting_merge';
|
|
29
|
+
if (session.status === 'archived')
|
|
30
|
+
return 'archived';
|
|
31
|
+
// Any active Run (in-flight iteration or awaiting a child sub-session) →
|
|
32
|
+
// `active`. Delegation is an active state: the parent Run is suspended
|
|
33
|
+
// waiting on the child's Materializer, not idle.
|
|
34
|
+
const hasActive = runs.some((r) => r.status === 'running' || r.status === 'awaiting_subsession');
|
|
35
|
+
if (hasActive)
|
|
36
|
+
return 'active';
|
|
37
|
+
// Any HITL block (synchronous or persisted) → `awaiting_hitl`.
|
|
38
|
+
const hasHitl = runs.some((r) => r.status === 'awaiting_hitl' || r.status === 'awaiting_hitl_resolution');
|
|
39
|
+
if (hasHitl)
|
|
40
|
+
return 'awaiting_hitl';
|
|
41
|
+
// All failed (with at least one Run) → `failed`. Note that a `cancelled`
|
|
42
|
+
// Run does NOT drive the Session to `failed`; §5.1 is explicit that
|
|
43
|
+
// cancellation leaves the Session `idle`.
|
|
44
|
+
if (runs.length > 0 && runs.every((r) => r.status === 'failed')) {
|
|
45
|
+
return 'failed';
|
|
46
|
+
}
|
|
47
|
+
// Otherwise — empty run set, or all runs terminated (succeeded / cancelled
|
|
48
|
+
// / mixed with failed) — the Session is `idle`.
|
|
49
|
+
return 'idle';
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/session/hierarchy/session.ts"],"names":[],"mappings":"AAuDA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,YAAY,CAC3B,OAAgB,EAChB,IAAsC;IAEtC,wEAAwE;IACxE,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAChD,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB;QAAE,OAAO,gBAAgB,CAAA;IAChE,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU;QAAE,OAAO,UAAU,CAAA;IAEpD,yEAAyE;IACzE,uEAAuE;IACvE,iDAAiD;IACjD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,KAAK,qBAAqB,CAAC,CAAA;IAChG,IAAI,SAAS;QAAE,OAAO,QAAQ,CAAA;IAE9B,+DAA+D;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,eAAe,IAAI,CAAC,CAAC,MAAM,KAAK,0BAA0B,CAC9E,CAAA;IACD,IAAI,OAAO;QAAE,OAAO,eAAe,CAAA;IAEnC,yEAAyE;IACzE,oEAAoE;IACpE,0CAA0C;IAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,EAAE,CAAC;QACjE,OAAO,QAAQ,CAAA;IAChB,CAAC;IAED,2EAA2E;IAC3E,gDAAgD;IAChD,OAAO,MAAM,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { SessionId } from '../../types/ids/index.js';
|
|
2
|
+
import type { SubSessionId, SummaryId, WorkspaceId } from '../../types/session/ids.js';
|
|
3
|
+
import type { ArchiveBackendRef } from '../retention/archive-backend-ref.js';
|
|
4
|
+
import type { DeliverableRef } from '../summary/deliverable.js';
|
|
5
|
+
import type { ActorRef } from './actor.js';
|
|
6
|
+
/**
|
|
7
|
+
* Full 11-variant status union. See session-hierarchy.md §4.4 and the merge
|
|
8
|
+
* state machine in §4.4.1. Absence of a `closed` state is load-bearing —
|
|
9
|
+
* completed sub-sessions land on `idle` and stay there for drill-down
|
|
10
|
+
* (Decision #5).
|
|
11
|
+
*/
|
|
12
|
+
export type SubSessionStatus = 'pending' | 'active' | 'idle' | 'failed' | 'awaiting_merge' | 'pending_merge' | 'merging' | 'merged' | 'merge_conflict' | 'merge_rejected' | 'archived';
|
|
13
|
+
/**
|
|
14
|
+
* Discriminator for how a sub-session was created. Pattern doc §4.4
|
|
15
|
+
* enumerates four variants; the three kept here collapse `user_handoff`
|
|
16
|
+
* and `user_broadcast` into the single `user_handoff` kind (multi-recipient
|
|
17
|
+
* flows are encoded via `broadcastGroupId` in later phases).
|
|
18
|
+
*/
|
|
19
|
+
export type SubSessionKind = 'agent_spawn' | 'user_handoff' | 'intervention';
|
|
20
|
+
/**
|
|
21
|
+
* Per-spawn failure policy for parallel fan-out. See session-hierarchy.md
|
|
22
|
+
* §4.4. Default is `delegate` — siblings continue and the parent agent
|
|
23
|
+
* decides what to do with partial results.
|
|
24
|
+
*/
|
|
25
|
+
export type FailureMode = 'fail_fast' | 'delegate';
|
|
26
|
+
/**
|
|
27
|
+
* Completion contract the parent expects. See session-hierarchy.md §9.
|
|
28
|
+
*
|
|
29
|
+
* `summary_ref` is the default for agent delegation and interventions.
|
|
30
|
+
* `merge_back` is used by multi-user handoff; full spec lives in
|
|
31
|
+
* `collaboration-primitives.md`.
|
|
32
|
+
*/
|
|
33
|
+
export type CompletionMode = 'summary_ref' | 'merge_back';
|
|
34
|
+
/**
|
|
35
|
+
* Re-export of the real {@link DeliverableRef} discriminated union. The
|
|
36
|
+
* concrete shape lives in `../summary/deliverable.ts` — see
|
|
37
|
+
* session-hierarchy.md §4.7 / §8.1. Phase 5 (this phase) replaced the Phase 1
|
|
38
|
+
* `unknown` placeholder with the real type.
|
|
39
|
+
*/
|
|
40
|
+
export type { DeliverableRef };
|
|
41
|
+
/**
|
|
42
|
+
* Edge between a parent {@link Session} and a child session, carrying the
|
|
43
|
+
* delegation metadata. The child session itself lives in `SessionStore`
|
|
44
|
+
* like any other session — see session-hierarchy.md §4.4.
|
|
45
|
+
*/
|
|
46
|
+
export interface SubSession {
|
|
47
|
+
id: SubSessionId;
|
|
48
|
+
parentSessionId: SessionId;
|
|
49
|
+
childSessionId: SessionId;
|
|
50
|
+
kind: SubSessionKind;
|
|
51
|
+
status: SubSessionStatus;
|
|
52
|
+
spawnedBy: ActorRef;
|
|
53
|
+
spawnedAt: Date;
|
|
54
|
+
failureMode: FailureMode;
|
|
55
|
+
completionMode: CompletionMode;
|
|
56
|
+
workspaceId: WorkspaceId | null;
|
|
57
|
+
/**
|
|
58
|
+
* For interventions, the immutable artifact being addressed. Chains form
|
|
59
|
+
* a strict acyclic DAG — see session-hierarchy.md §4.5.
|
|
60
|
+
*/
|
|
61
|
+
prevArtifactRef?: DeliverableRef;
|
|
62
|
+
/** Fan-out bookkeeping for broadcasts (§4.4). */
|
|
63
|
+
broadcastGroupId?: string;
|
|
64
|
+
/** Populated by {@link SessionSummaryMaterializer} on terminalization (§8). */
|
|
65
|
+
summaryRef?: SummaryId;
|
|
66
|
+
/**
|
|
67
|
+
* Pointer to the archive bundle for this sub-session. Present iff
|
|
68
|
+
* `status === 'archived'` (pattern doc §12.3). The paired
|
|
69
|
+
* {@link archivedAt} timestamp captures when the bundle was sealed.
|
|
70
|
+
* Cleared by {@link ArchivalManager.restore}.
|
|
71
|
+
*/
|
|
72
|
+
archiveRef?: ArchiveBackendRef;
|
|
73
|
+
archivedAt?: Date;
|
|
74
|
+
updatedAt: Date;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=sub-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sub-session.d.ts","sourceRoot":"","sources":["../../../src/session/hierarchy/sub-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAA;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GACzB,SAAS,GACT,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,QAAQ,GACR,gBAAgB,GAChB,gBAAgB,GAChB,UAAU,CAAA;AAEb;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,CAAA;AAE5E;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG,UAAU,CAAA;AAElD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,YAAY,CAAA;AAEzD;;;;;GAKG;AACH,YAAY,EAAE,cAAc,EAAE,CAAA;AAE9B;;;;GAIG;AACH,MAAM,WAAW,UAAU;IAC1B,EAAE,EAAE,YAAY,CAAA;IAChB,eAAe,EAAE,SAAS,CAAA;IAC1B,cAAc,EAAE,SAAS,CAAA;IACzB,IAAI,EAAE,cAAc,CAAA;IACpB,MAAM,EAAE,gBAAgB,CAAA;IACxB,SAAS,EAAE,QAAQ,CAAA;IACnB,SAAS,EAAE,IAAI,CAAA;IACf,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,cAAc,CAAA;IAC9B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B;;;OAGG;IACH,eAAe,CAAC,EAAE,cAAc,CAAA;IAChC,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,SAAS,CAAA;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,UAAU,CAAC,EAAE,IAAI,CAAA;IACjB,SAAS,EAAE,IAAI,CAAA;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sub-session.js","sourceRoot":"","sources":["../../../src/session/hierarchy/sub-session.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TenantId } from '../../types/ids/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Tenancy boundary for everything in the hierarchy.
|
|
4
|
+
*
|
|
5
|
+
* Intentionally thin — naming, billing, SSO, and quotas live outside the SDK
|
|
6
|
+
* (session-hierarchy.md §4.1 Convention #17). No API surface crosses
|
|
7
|
+
* {@link TenantId}.
|
|
8
|
+
*/
|
|
9
|
+
export interface Tenant {
|
|
10
|
+
id: TenantId;
|
|
11
|
+
createdAt: Date;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=tenant.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../../src/session/hierarchy/tenant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAExD;;;;;;GAMG;AACH,MAAM,WAAW,MAAM;IACtB,EAAE,EAAE,QAAQ,CAAA;IACZ,SAAS,EAAE,IAAI,CAAA;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../../src/session/hierarchy/tenant.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { TenantId } from '../../types/ids/index.js';
|
|
2
|
+
import type { ProjectId, ThreadId } from '../../types/session/ids.js';
|
|
3
|
+
/**
|
|
4
|
+
* Lifecycle state of a Thread.
|
|
5
|
+
*
|
|
6
|
+
* - `open` — accepts new Sessions and new Runs under existing Sessions.
|
|
7
|
+
* - `archived` — read-only tombstone. No new Sessions may be created; existing
|
|
8
|
+
* Sessions remain navigable. Transitioning `open → archived` requires that
|
|
9
|
+
* no Session under the Thread is in a non-terminal state (guarded at the
|
|
10
|
+
* store level by listing + status fan-in).
|
|
11
|
+
*
|
|
12
|
+
* There is no `active` variant — Thread does NOT derive status from its child
|
|
13
|
+
* Sessions the way a Session does from its Runs. Thread is a pure container
|
|
14
|
+
* (Phase 0 decision B.1: Thread is container-only, no message stream, no
|
|
15
|
+
* fan-in). Its status is an explicit owner action.
|
|
16
|
+
*/
|
|
17
|
+
export type ThreadStatus = 'open' | 'archived';
|
|
18
|
+
/**
|
|
19
|
+
* Topic-level container sitting between {@link ProjectId Project} and
|
|
20
|
+
* {@link import('../../types/session/ids.js').SessionId Session} in the
|
|
21
|
+
* five-layer hierarchy (Project → Thread → Session → SubSession → Run).
|
|
22
|
+
*
|
|
23
|
+
* A Thread groups together many Sessions that address the same coherent
|
|
24
|
+
* topic or line-of-work within a Project (e.g. "auth refactor", "billing
|
|
25
|
+
* incident"). Sessions under the same Thread share Project-level shared
|
|
26
|
+
* resources (memory, vaults, knowledge bases) but have independent actor
|
|
27
|
+
* state, handoff history, and Run streams.
|
|
28
|
+
*
|
|
29
|
+
* Design §4 (`docs.local/sessions/ses_001-hierarchy-redesign/design.md`):
|
|
30
|
+
* - Container only. No own message stream, no own Run stream. Messages
|
|
31
|
+
* live in Sessions (Phase 0 decision B.1).
|
|
32
|
+
* - `title` is a user-facing label. **Titles are NOT unique within a
|
|
33
|
+
* Project.** Callers disambiguate by {@link ThreadId}; the title is
|
|
34
|
+
* freeform display text. If a product surface needs uniqueness (e.g.
|
|
35
|
+
* a human-typed slug), that constraint lives at the API layer, not in
|
|
36
|
+
* the kernel.
|
|
37
|
+
* - `ownerVersion` is the CAS counter for mutations — `updateThread` and
|
|
38
|
+
* archival transitions require a matching version and reject
|
|
39
|
+
* {@link StaleThreadError} on mismatch. Mirrors the
|
|
40
|
+
* {@link import('./session.js').Session} handoff CAS pattern (§6.1).
|
|
41
|
+
* - No fan-in `deriveStatus()` helper — status is owner-managed, not
|
|
42
|
+
* Run-derived. This is the Thread-vs-Session contract boundary.
|
|
43
|
+
*/
|
|
44
|
+
export interface Thread {
|
|
45
|
+
id: ThreadId;
|
|
46
|
+
projectId: ProjectId;
|
|
47
|
+
tenantId: TenantId;
|
|
48
|
+
title: string;
|
|
49
|
+
status: ThreadStatus;
|
|
50
|
+
ownerVersion: number;
|
|
51
|
+
createdAt: Date;
|
|
52
|
+
updatedAt: Date;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=thread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../../src/session/hierarchy/thread.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErE;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,CAAA;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,MAAM;IACtB,EAAE,EAAE,QAAQ,CAAA;IACZ,SAAS,EAAE,SAAS,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,YAAY,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread.js","sourceRoot":"","sources":["../../../src/session/hierarchy/thread.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './hierarchy/index.js';
|
|
2
|
+
export * from './events/index.js';
|
|
3
|
+
export * from './workspace/index.js';
|
|
4
|
+
export * from './handoff/index.js';
|
|
5
|
+
export * from './summary/index.js';
|
|
6
|
+
export * from './intervention/index.js';
|
|
7
|
+
export * from './migration/index.js';
|
|
8
|
+
export * from './retention/index.js';
|
|
9
|
+
export { TenantIsolationError, WorkspaceBackendError, AncestryCycleError } from './errors.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAMA,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Top-level barrel for the session hierarchy module.
|
|
2
|
+
// Phase 1 populates `hierarchy/`; Phase 2 adds `events/`; Phase 3 adds
|
|
3
|
+
// `workspace/` + `errors.ts`; Phase 4 adds `handoff/`; Phase 5 adds
|
|
4
|
+
// `summary/` + `intervention/`; Phase 7 adds `migration/`; Phase 8 adds
|
|
5
|
+
// `retention/`.
|
|
6
|
+
export * from './hierarchy/index.js';
|
|
7
|
+
export * from './events/index.js';
|
|
8
|
+
export * from './workspace/index.js';
|
|
9
|
+
export * from './handoff/index.js';
|
|
10
|
+
export * from './summary/index.js';
|
|
11
|
+
export * from './intervention/index.js';
|
|
12
|
+
export * from './migration/index.js';
|
|
13
|
+
export * from './retention/index.js';
|
|
14
|
+
export { TenantIsolationError, WorkspaceBackendError, AncestryCycleError } from './errors.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD,uEAAuE;AACvE,oEAAoE;AACpE,wEAAwE;AACxE,gBAAgB;AAEhB,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prev-artifact.test.d.ts","sourceRoot":"","sources":["../../../../src/session/intervention/__tests__/prev-artifact.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ArtifactRefCycleError, InterventionDepthExceeded, validatePrevArtifactChain, } from '../prev-artifact.js';
|
|
3
|
+
// Helpers -------------------------------------------------------------------
|
|
4
|
+
function sessionId(n) {
|
|
5
|
+
return `ses_${n}`;
|
|
6
|
+
}
|
|
7
|
+
function subId(n) {
|
|
8
|
+
return `sub_${n}`;
|
|
9
|
+
}
|
|
10
|
+
function summaryDeliverable(targetSession) {
|
|
11
|
+
return {
|
|
12
|
+
id: 'del_test',
|
|
13
|
+
kind: 'session_summary',
|
|
14
|
+
sessionId: targetSession,
|
|
15
|
+
summaryRef: 'sum_test',
|
|
16
|
+
at: new Date('2026-04-17T00:00:00Z'),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build a loader that walks a pre-configured chain. `chain[i]` is the node
|
|
21
|
+
* returned for the i'th step (keyed by the session id the previous step
|
|
22
|
+
* targeted). `nodesBySession` keys the loader by `sessionId`.
|
|
23
|
+
*/
|
|
24
|
+
function buildLoader(nodes) {
|
|
25
|
+
const map = new Map();
|
|
26
|
+
for (const n of nodes) {
|
|
27
|
+
map.set(n.bySession, {
|
|
28
|
+
subSessionId: n.subSessionId,
|
|
29
|
+
sessionId: n.sessionId,
|
|
30
|
+
...(n.prevArtifactRef !== undefined && { prevArtifactRef: n.prevArtifactRef }),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
loadAncestor: async (sid) => map.get(sid) ?? null,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
describe('validatePrevArtifactChain', () => {
|
|
38
|
+
it('accepts a depth-1 chain (direct parent only)', async () => {
|
|
39
|
+
const loader = buildLoader([
|
|
40
|
+
{
|
|
41
|
+
bySession: sessionId(1),
|
|
42
|
+
subSessionId: subId(1),
|
|
43
|
+
sessionId: sessionId(1),
|
|
44
|
+
// No prevArtifactRef — chain terminates here.
|
|
45
|
+
},
|
|
46
|
+
]);
|
|
47
|
+
const chain = await validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(1)), 10);
|
|
48
|
+
expect(chain).toEqual([subId(1)]);
|
|
49
|
+
});
|
|
50
|
+
it('accepts a depth-2 chain', async () => {
|
|
51
|
+
const loader = buildLoader([
|
|
52
|
+
{
|
|
53
|
+
bySession: sessionId(1),
|
|
54
|
+
subSessionId: subId(1),
|
|
55
|
+
sessionId: sessionId(1),
|
|
56
|
+
prevArtifactRef: summaryDeliverable(sessionId(2)),
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
bySession: sessionId(2),
|
|
60
|
+
subSessionId: subId(2),
|
|
61
|
+
sessionId: sessionId(2),
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
const chain = await validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(1)), 10);
|
|
65
|
+
expect(chain).toEqual([subId(1), subId(2)]);
|
|
66
|
+
});
|
|
67
|
+
it('accepts a chain exactly at the depth limit', async () => {
|
|
68
|
+
// 10-deep chain with maxDepth = 10.
|
|
69
|
+
const nodes = [];
|
|
70
|
+
for (let i = 1; i <= 10; i++) {
|
|
71
|
+
nodes.push({
|
|
72
|
+
bySession: sessionId(i),
|
|
73
|
+
subSessionId: subId(i),
|
|
74
|
+
sessionId: sessionId(i),
|
|
75
|
+
...(i < 10 && { prevArtifactRef: summaryDeliverable(sessionId(i + 1)) }),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const loader = buildLoader(nodes);
|
|
79
|
+
const chain = await validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(1)), 10);
|
|
80
|
+
expect(chain).toHaveLength(10);
|
|
81
|
+
});
|
|
82
|
+
it('rejects a chain that would exceed the depth limit', async () => {
|
|
83
|
+
// 11-deep chain with maxDepth = 10.
|
|
84
|
+
const nodes = [];
|
|
85
|
+
for (let i = 1; i <= 11; i++) {
|
|
86
|
+
nodes.push({
|
|
87
|
+
bySession: sessionId(i),
|
|
88
|
+
subSessionId: subId(i),
|
|
89
|
+
sessionId: sessionId(i),
|
|
90
|
+
...(i < 11 && { prevArtifactRef: summaryDeliverable(sessionId(i + 1)) }),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const loader = buildLoader(nodes);
|
|
94
|
+
await expect(validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(1)), 10)).rejects.toBeInstanceOf(InterventionDepthExceeded);
|
|
95
|
+
});
|
|
96
|
+
it('rejects self-reference as a cycle', async () => {
|
|
97
|
+
// proposedChild's prev points at a node whose subSessionId == proposedChild.
|
|
98
|
+
const loader = buildLoader([
|
|
99
|
+
{
|
|
100
|
+
bySession: sessionId(1),
|
|
101
|
+
subSessionId: subId(100), // SAME id as proposedChild
|
|
102
|
+
sessionId: sessionId(1),
|
|
103
|
+
},
|
|
104
|
+
]);
|
|
105
|
+
await expect(validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(1)), 10)).rejects.toBeInstanceOf(ArtifactRefCycleError);
|
|
106
|
+
});
|
|
107
|
+
it('rejects a 2-cycle (A -> B -> A)', async () => {
|
|
108
|
+
const loader = buildLoader([
|
|
109
|
+
{
|
|
110
|
+
bySession: sessionId(1),
|
|
111
|
+
subSessionId: subId(1),
|
|
112
|
+
sessionId: sessionId(1),
|
|
113
|
+
prevArtifactRef: summaryDeliverable(sessionId(2)),
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
bySession: sessionId(2),
|
|
117
|
+
subSessionId: subId(2),
|
|
118
|
+
sessionId: sessionId(2),
|
|
119
|
+
prevArtifactRef: summaryDeliverable(sessionId(1)),
|
|
120
|
+
},
|
|
121
|
+
]);
|
|
122
|
+
await expect(validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(1)), 10)).rejects.toBeInstanceOf(ArtifactRefCycleError);
|
|
123
|
+
});
|
|
124
|
+
it('rejects a 3-cycle (A -> B -> C -> A)', async () => {
|
|
125
|
+
const loader = buildLoader([
|
|
126
|
+
{
|
|
127
|
+
bySession: sessionId(1),
|
|
128
|
+
subSessionId: subId(1),
|
|
129
|
+
sessionId: sessionId(1),
|
|
130
|
+
prevArtifactRef: summaryDeliverable(sessionId(2)),
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
bySession: sessionId(2),
|
|
134
|
+
subSessionId: subId(2),
|
|
135
|
+
sessionId: sessionId(2),
|
|
136
|
+
prevArtifactRef: summaryDeliverable(sessionId(3)),
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
bySession: sessionId(3),
|
|
140
|
+
subSessionId: subId(3),
|
|
141
|
+
sessionId: sessionId(3),
|
|
142
|
+
prevArtifactRef: summaryDeliverable(sessionId(1)),
|
|
143
|
+
},
|
|
144
|
+
]);
|
|
145
|
+
await expect(validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(1)), 10)).rejects.toBeInstanceOf(ArtifactRefCycleError);
|
|
146
|
+
});
|
|
147
|
+
it('returns an empty chain for a non-session_summary deliverable', async () => {
|
|
148
|
+
const fileRef = {
|
|
149
|
+
id: 'del_file',
|
|
150
|
+
kind: 'file',
|
|
151
|
+
path: 'a.txt',
|
|
152
|
+
contentHash: 'abc',
|
|
153
|
+
sizeBytes: 0,
|
|
154
|
+
};
|
|
155
|
+
const loader = {
|
|
156
|
+
loadAncestor: async () => null,
|
|
157
|
+
};
|
|
158
|
+
const chain = await validatePrevArtifactChain(loader, subId(100), fileRef, 10);
|
|
159
|
+
expect(chain).toEqual([]);
|
|
160
|
+
});
|
|
161
|
+
it('terminates cleanly on unknown ancestor (archived/tombstoned)', async () => {
|
|
162
|
+
const loader = buildLoader([
|
|
163
|
+
// no matching node — loadAncestor returns null for any id
|
|
164
|
+
]);
|
|
165
|
+
const chain = await validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(42)), 10);
|
|
166
|
+
expect(chain).toEqual([]);
|
|
167
|
+
});
|
|
168
|
+
it('rejects zero/negative maxDepth as depth-exceeded up front', async () => {
|
|
169
|
+
const loader = buildLoader([
|
|
170
|
+
{
|
|
171
|
+
bySession: sessionId(1),
|
|
172
|
+
subSessionId: subId(1),
|
|
173
|
+
sessionId: sessionId(1),
|
|
174
|
+
},
|
|
175
|
+
]);
|
|
176
|
+
await expect(validatePrevArtifactChain(loader, subId(100), summaryDeliverable(sessionId(1)), 0)).rejects.toBeInstanceOf(InterventionDepthExceeded);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
//# sourceMappingURL=prev-artifact.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prev-artifact.test.js","sourceRoot":"","sources":["../../../../src/session/intervention/__tests__/prev-artifact.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/intervention/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACN,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACX,uBAAuB,EACvB,gBAAgB,GAChB,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Sub-barrel for the intervention DAG module (Convention #4).
|
|
2
|
+
//
|
|
3
|
+
// See session-hierarchy.md §4.5 — intervention chains via `prevArtifactRef`
|
|
4
|
+
// form a strict acyclic DAG capped by
|
|
5
|
+
// `Project.config.maxInterventionDepth`. This module owns the pre-commit
|
|
6
|
+
// validator + typed errors; sub-session wiring is Phase 6.
|
|
7
|
+
export { ArtifactRefCycleError, InterventionDepthExceeded, validatePrevArtifactChain, } from './prev-artifact.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/intervention/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,sCAAsC;AACtC,yEAAyE;AACzE,2DAA2D;AAE3D,OAAO,EACN,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,GACzB,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prevArtifactRef DAG primitives — acyclic walker, cycle detection, depth
|
|
3
|
+
* enforcement. See session-hierarchy.md §4.5.
|
|
4
|
+
*
|
|
5
|
+
* Intervention chains link successive follow-up sub-sessions via
|
|
6
|
+
* `SubSession.prevArtifactRef`, forming a strict acyclic DAG over prior
|
|
7
|
+
* completed sessions. This module supplies the pre-commit validator that
|
|
8
|
+
* rejects any insertion that would close a cycle or overflow
|
|
9
|
+
* {@link Project.config.maxInterventionDepth} (default 10).
|
|
10
|
+
*
|
|
11
|
+
* Convention #5: deny-by-default. Cycle or depth violation rejects with a
|
|
12
|
+
* typed error; callers never get a silently-truncated chain.
|
|
13
|
+
*
|
|
14
|
+
* Convention #0: no silent fallbacks. The walker surfaces corruption as
|
|
15
|
+
* `ArtifactRefCycleError` rather than infinite-looping.
|
|
16
|
+
*/
|
|
17
|
+
import type { SessionId } from '../../types/ids/index.js';
|
|
18
|
+
import type { SubSessionId } from '../../types/session/ids.js';
|
|
19
|
+
import type { DeliverableRef } from '../summary/deliverable.js';
|
|
20
|
+
/**
|
|
21
|
+
* Minimal record the validator needs to step ancestrally from one
|
|
22
|
+
* sub-session to its predecessor. Concrete stores provide this projection.
|
|
23
|
+
*
|
|
24
|
+
* `sessionId` is the completed session this node represents (the one the
|
|
25
|
+
* incoming {@link DeliverableRef} pointed at). `subSessionId` is its own
|
|
26
|
+
* sub-session edge id — used for the visited-set so intervention chains form
|
|
27
|
+
* an acyclic DAG over sub-session identities.
|
|
28
|
+
*/
|
|
29
|
+
export interface PrevArtifactNode {
|
|
30
|
+
readonly subSessionId: SubSessionId;
|
|
31
|
+
readonly sessionId: SessionId;
|
|
32
|
+
readonly prevArtifactRef?: DeliverableRef;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Raised when {@link validatePrevArtifactChain} detects a cycle — revisiting
|
|
36
|
+
* a sub-session id already in the ancestry set. Indicates a bug in the caller
|
|
37
|
+
* (or pre-existing store corruption); the write must be rejected.
|
|
38
|
+
*/
|
|
39
|
+
export declare class ArtifactRefCycleError extends Error {
|
|
40
|
+
readonly details: {
|
|
41
|
+
readonly startSubSessionId: SubSessionId;
|
|
42
|
+
readonly cyclePath: readonly SubSessionId[];
|
|
43
|
+
};
|
|
44
|
+
constructor(details: {
|
|
45
|
+
startSubSessionId: SubSessionId;
|
|
46
|
+
cyclePath: readonly SubSessionId[];
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Raised when the resolved chain length exceeds the configured intervention
|
|
51
|
+
* depth limit (`Project.config.maxInterventionDepth`). Convention #5
|
|
52
|
+
* deny-by-default — the kernel does not auto-truncate.
|
|
53
|
+
*/
|
|
54
|
+
export declare class InterventionDepthExceeded extends Error {
|
|
55
|
+
readonly details: {
|
|
56
|
+
readonly subSessionId: SubSessionId;
|
|
57
|
+
readonly depth: number;
|
|
58
|
+
readonly limit: number;
|
|
59
|
+
};
|
|
60
|
+
constructor(details: {
|
|
61
|
+
subSessionId: SubSessionId;
|
|
62
|
+
depth: number;
|
|
63
|
+
limit: number;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Loader surface the validator queries to walk ancestry. Returning `null`
|
|
68
|
+
* means "no further ancestor" — the chain terminates cleanly. The loader is
|
|
69
|
+
* injected so tests can fake a chain without standing up a full
|
|
70
|
+
* {@link SessionStore}.
|
|
71
|
+
*/
|
|
72
|
+
export interface InterventionChainLoader {
|
|
73
|
+
/**
|
|
74
|
+
* Resolves the ancestor node for the supplied {@link SessionId} — the
|
|
75
|
+
* session that the last step's `SessionSummaryDeliverable.sessionId` named.
|
|
76
|
+
* Returns `null` when no sub-session edge exists for that session (root
|
|
77
|
+
* session, or an archived/tombstoned ancestor — see §12.3).
|
|
78
|
+
*/
|
|
79
|
+
loadAncestor(sessionId: SessionId): Promise<PrevArtifactNode | null>;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Pre-commit validator for adding a `prevArtifactRef` on a proposed child
|
|
83
|
+
* sub-session. Walks from `candidateAncestor` backwards through
|
|
84
|
+
* `loader.loadAncestor`, seeding the visited-set with `proposedChild` so a
|
|
85
|
+
* cycle (the candidate chain loops back to the child) is rejected
|
|
86
|
+
* immediately.
|
|
87
|
+
*
|
|
88
|
+
* Returns the resolved ancestry chain (oldest last, length ≤ `maxDepth`),
|
|
89
|
+
* excluding `proposedChild` itself. The chain is ordered from
|
|
90
|
+
* immediate-ancestor to furthest-ancestor (reverse-chronological per §4.5).
|
|
91
|
+
*
|
|
92
|
+
* Throws:
|
|
93
|
+
* - {@link ArtifactRefCycleError} if the walk revisits `proposedChild` or
|
|
94
|
+
* any already-visited ancestor.
|
|
95
|
+
* - {@link InterventionDepthExceeded} if the chain would exceed `maxDepth`.
|
|
96
|
+
*
|
|
97
|
+
* Non-session_summary deliverables (file / message / artifact_blob) do not
|
|
98
|
+
* form chain links — the walker terminates cleanly when it encounters one,
|
|
99
|
+
* since only `kind: 'session_summary'` references another sub-session's
|
|
100
|
+
* ancestry.
|
|
101
|
+
*/
|
|
102
|
+
export declare function validatePrevArtifactChain(loader: InterventionChainLoader, proposedChild: SubSessionId, candidateAncestor: DeliverableRef, maxDepth: number): Promise<readonly SubSessionId[]>;
|
|
103
|
+
//# sourceMappingURL=prev-artifact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prev-artifact.d.ts","sourceRoot":"","sources":["../../../src/session/intervention/prev-artifact.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE/D;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,cAAc,CAAA;CACzC;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,OAAO,EAAE;QACjB,QAAQ,CAAC,iBAAiB,EAAE,YAAY,CAAA;QACxC,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAA;KAC3C,CAAA;gBAEW,OAAO,EAAE;QACpB,iBAAiB,EAAE,YAAY,CAAA;QAC/B,SAAS,EAAE,SAAS,YAAY,EAAE,CAAA;KAClC;CAOD;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;IACnD,QAAQ,CAAC,OAAO,EAAE;QACjB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;QACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACtB,CAAA;gBAEW,OAAO,EAAE;QAAE,YAAY,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;CAOjF;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACvC;;;;;OAKG;IACH,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;CACpE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,yBAAyB,CAC9C,MAAM,EAAE,uBAAuB,EAC/B,aAAa,EAAE,YAAY,EAC3B,iBAAiB,EAAE,cAAc,EACjC,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAyDlC"}
|