@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,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed errors for the session hierarchy module.
|
|
3
|
+
*
|
|
4
|
+
* See session-hierarchy.md §12.2 (cross-tenant rejection), §6.2 (workspace
|
|
5
|
+
* backend operation failures), §4.5 (intervention DAG). Each error carries a
|
|
6
|
+
* structured `details` payload so consumers can route without string parsing
|
|
7
|
+
* (Convention #5: deny-by-default, fail fast).
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Raised by {@link SessionStore} accessors when the supplied {@link TenantId}
|
|
11
|
+
* does not match the tenant owning the target resource. Convention #17:
|
|
12
|
+
* cross-tenant access is a hard error at the kernel boundary — there is no
|
|
13
|
+
* escape hatch. See session-hierarchy.md §12.2.
|
|
14
|
+
*/
|
|
15
|
+
export class TenantIsolationError extends Error {
|
|
16
|
+
details;
|
|
17
|
+
constructor(details) {
|
|
18
|
+
super(`Tenant isolation violation: ${details.requested} accessed ${details.resource}`);
|
|
19
|
+
this.name = 'TenantIsolationError';
|
|
20
|
+
this.details = details;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Raised by {@link SessionStore.getAncestry} / {@link SessionStore.drill}
|
|
25
|
+
* when walking parent sub-session links encounters a revisit. Indicates store
|
|
26
|
+
* corruption — the write path enforces acyclicity (session-hierarchy.md §4.5).
|
|
27
|
+
*/
|
|
28
|
+
export class AncestryCycleError extends Error {
|
|
29
|
+
details;
|
|
30
|
+
constructor(details) {
|
|
31
|
+
super(`Ancestry cycle detected starting at ${details.sessionId}: ${details.cyclePath.join(' -> ')}`);
|
|
32
|
+
this.name = 'AncestryCycleError';
|
|
33
|
+
this.details = details;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Raised by {@link WorkspaceBackendDriver} implementations on any I/O or
|
|
38
|
+
* invariant failure. Wraps the underlying cause; callers can match on
|
|
39
|
+
* `details.op` + `details.kind` for routing (Convention #0: no silent
|
|
40
|
+
* fallbacks — surface the failure). See session-hierarchy.md §6.2 / §7.
|
|
41
|
+
*/
|
|
42
|
+
export class WorkspaceBackendError extends Error {
|
|
43
|
+
details;
|
|
44
|
+
constructor(details) {
|
|
45
|
+
super(`Workspace backend ${details.kind} failed on ${details.op}`);
|
|
46
|
+
this.name = 'WorkspaceBackendError';
|
|
47
|
+
this.details = details;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Raised by {@link import('../types/thread/store.js').ThreadStore.updateThread}
|
|
52
|
+
* when the supplied {@link Thread.ownerVersion} does not match the persisted
|
|
53
|
+
* record. The caller must re-read via `getThread`, re-apply its intended
|
|
54
|
+
* mutation on top of the fresh record, and retry. Mirrors the Session
|
|
55
|
+
* handoff CAS pattern (§6.1).
|
|
56
|
+
*/
|
|
57
|
+
export class StaleThreadError extends Error {
|
|
58
|
+
details;
|
|
59
|
+
constructor(details) {
|
|
60
|
+
super(`Stale Thread ${details.threadId}: expected ownerVersion=${details.expectedVersion}, actual=${details.actualVersion}`);
|
|
61
|
+
this.name = 'StaleThreadError';
|
|
62
|
+
this.details = details;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Raised by the spawn path (and any caller that enforces the open-thread
|
|
67
|
+
* precondition) when a Thread is in `'archived'` state and would-be mutations
|
|
68
|
+
* require it to be `'open'`. Convention #5: deny-by-default — archival is a
|
|
69
|
+
* hard read-only boundary.
|
|
70
|
+
*/
|
|
71
|
+
export class ThreadClosedError extends Error {
|
|
72
|
+
details;
|
|
73
|
+
constructor(details) {
|
|
74
|
+
super(`Thread ${details.threadId} is archived; operation '${details.op}' rejected`);
|
|
75
|
+
this.name = 'ThreadClosedError';
|
|
76
|
+
this.details = details;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Raised by {@link import('../manager/thread/lifecycle.js').ThreadManager.archive}
|
|
81
|
+
* and `.delete` when the Thread's session-presence precondition is violated:
|
|
82
|
+
*
|
|
83
|
+
* - `op: 'archive'` — at least one Session under the Thread is in a
|
|
84
|
+
* non-terminal state (`active | locked | awaiting_hitl | awaiting_merge`).
|
|
85
|
+
* The caller must first quiesce those sessions (let them reach `idle`,
|
|
86
|
+
* `failed`, or `archived`) before flipping the Thread to archived.
|
|
87
|
+
* - `op: 'delete'` — the Thread still has at least one attached Session.
|
|
88
|
+
* Callers must either archive + tombstone those sessions (`deleteSession`)
|
|
89
|
+
* before calling `deleteThread`, or accept that deletion is not yet safe.
|
|
90
|
+
*
|
|
91
|
+
* `blockingSessions` carries the first {@link THREAD_NOT_EMPTY_SAMPLE_LIMIT}
|
|
92
|
+
* offenders with their current status so operator tooling can surface an
|
|
93
|
+
* actionable list without unbounded error payloads on large threads.
|
|
94
|
+
* `totalBlockingSessions` holds the full count even when the sample is
|
|
95
|
+
* truncated. Convention #5: deny-by-default — no implicit cascade, no silent
|
|
96
|
+
* no-op.
|
|
97
|
+
*/
|
|
98
|
+
export const THREAD_NOT_EMPTY_SAMPLE_LIMIT = 50;
|
|
99
|
+
export class ThreadNotEmptyError extends Error {
|
|
100
|
+
details;
|
|
101
|
+
constructor(details) {
|
|
102
|
+
super(`Thread ${details.threadId} ${details.op} blocked: ${details.totalBlockingSessions} session(s) still attached`);
|
|
103
|
+
this.name = 'ThreadNotEmptyError';
|
|
104
|
+
this.details = details;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/session/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACrC,OAAO,CAGf;IAED,YAAY,OAAkD;QAC7D,KAAK,CAAC,+BAA+B,OAAO,CAAC,SAAS,aAAa,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;QACtF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAA;QAClC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;CACD;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACnC,OAAO,CAGf;IAED,YAAY,OAAkE;QAC7E,KAAK,CACJ,uCAAuC,OAAO,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAC7F,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACtC,OAAO,CAIf;IAED,YAAY,OAAoE;QAC/E,KAAK,CAAC,qBAAqB,OAAO,CAAC,IAAI,cAAc,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;QAClE,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;CACD;AAED;;;;;;GAMG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACjC,OAAO,CAIf;IAED,YAAY,OAA+E;QAC1F,KAAK,CACJ,gBAAgB,OAAO,CAAC,QAAQ,2BAA2B,OAAO,CAAC,eAAe,YAAY,OAAO,CAAC,aAAa,EAAE,CACrH,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;CACD;AAED;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAClC,OAAO,CAGf;IAED,YAAY,OAA2C;QACtD,KAAK,CAAC,UAAU,OAAO,CAAC,QAAQ,4BAA4B,OAAO,CAAC,EAAE,YAAY,CAAC,CAAA;QACnF,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;QAC/B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;CACD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAA;AAE/C,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IACpC,OAAO,CAMf;IAED,YAAY,OAMX;QACA,KAAK,CACJ,UAAU,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,EAAE,aAAa,OAAO,CAAC,qBAAqB,4BAA4B,CAC9G,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAA;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,CAAC;CACD"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { RUN_EVENT_SCHEMA_VERSION } from './schema-version.js';
|
|
2
|
+
export type { RunEventSchemaVersion } from './schema-version.js';
|
|
3
|
+
export type { SubsessionSpawnedEvent, SubsessionMessagedEvent, SubsessionIdledEvent, SubsessionLifecycleEvent, } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/events/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE,YAAY,EACX,sBAAsB,EACtB,uBAAuB,EACvB,oBAAoB,EACpB,wBAAwB,GACxB,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// Sub-barrel for session-hierarchy run-event surface.
|
|
2
|
+
// Convention #4: concrete types live in sibling files; re-export them here.
|
|
3
|
+
//
|
|
4
|
+
// Phase 2 scope is limited to the sub-session lifecycle variants that are
|
|
5
|
+
// spliced into `RunEvent`. A dedicated `SessionHierarchyEvent` top-level
|
|
6
|
+
// union lands in a later phase (see session-hierarchy.md §10.2).
|
|
7
|
+
export { RUN_EVENT_SCHEMA_VERSION } from './schema-version.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/session/events/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,4EAA4E;AAC5E,EAAE;AACF,0EAA0E;AAC1E,yEAAyE;AACzE,iEAAiE;AAEjE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RunEvent envelope schema version. Bumped on breaking envelope change.
|
|
3
|
+
*
|
|
4
|
+
* - v1: pre-0.2.0 (implicit; untagged events are treated as v1 by consumers).
|
|
5
|
+
* - v2: 0.2.0+ — adds `schemaVersion`, `lineage`, and sub-session lifecycle
|
|
6
|
+
* events.
|
|
7
|
+
*
|
|
8
|
+
* See session-hierarchy.md §10.1 (Event-schema evolution contract) and
|
|
9
|
+
* §13.3.2 (`schemaVersion` back-compat).
|
|
10
|
+
*/
|
|
11
|
+
export declare const RUN_EVENT_SCHEMA_VERSION: 2;
|
|
12
|
+
export type RunEventSchemaVersion = typeof RUN_EVENT_SCHEMA_VERSION;
|
|
13
|
+
//# sourceMappingURL=schema-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-version.d.ts","sourceRoot":"","sources":["../../../src/session/events/schema-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,EAAG,CAAU,CAAA;AAElD,MAAM,MAAM,qBAAqB,GAAG,OAAO,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RunEvent envelope schema version. Bumped on breaking envelope change.
|
|
3
|
+
*
|
|
4
|
+
* - v1: pre-0.2.0 (implicit; untagged events are treated as v1 by consumers).
|
|
5
|
+
* - v2: 0.2.0+ — adds `schemaVersion`, `lineage`, and sub-session lifecycle
|
|
6
|
+
* events.
|
|
7
|
+
*
|
|
8
|
+
* See session-hierarchy.md §10.1 (Event-schema evolution contract) and
|
|
9
|
+
* §13.3.2 (`schemaVersion` back-compat).
|
|
10
|
+
*/
|
|
11
|
+
export const RUN_EVENT_SCHEMA_VERSION = 2;
|
|
12
|
+
//# sourceMappingURL=schema-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-version.js","sourceRoot":"","sources":["../../../src/session/events/schema-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAU,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { MessageId, RunId, SessionId } from '../../types/ids/index.js';
|
|
2
|
+
import type { SubSessionId } from '../../types/session/ids.js';
|
|
3
|
+
import type { ActorRef } from '../hierarchy/actor.js';
|
|
4
|
+
import type { Lineage } from '../hierarchy/lineage.js';
|
|
5
|
+
import type { RunEventSchemaVersion } from './schema-version.js';
|
|
6
|
+
/**
|
|
7
|
+
* Sub-session lifecycle events that splice into {@link RunEvent}.
|
|
8
|
+
*
|
|
9
|
+
* See session-hierarchy.md §10.4 (Parent-Child Linkage). These cover the
|
|
10
|
+
* in-flight visibility gap that the terminal-only `SessionSummaryRef` does
|
|
11
|
+
* not address. Every sub-session emission carries the full {@link Lineage}
|
|
12
|
+
* chain — consumers can reconstruct the delegation tree without walking the
|
|
13
|
+
* store (§10.4 invariant).
|
|
14
|
+
*
|
|
15
|
+
* Note: these events are spliced into the `RunEvent` union in
|
|
16
|
+
* `types/run/events.ts` rather than kept as a separate top-level union.
|
|
17
|
+
* A dedicated `SessionHierarchyEvent` top-level type lands in Phase 3+.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Emitted when the kernel creates a new sub-session. Precedes the child
|
|
21
|
+
* session's `run_started`. See §10.4 / §10.5 example stream.
|
|
22
|
+
*/
|
|
23
|
+
export interface SubsessionSpawnedEvent {
|
|
24
|
+
type: 'subsession_spawned';
|
|
25
|
+
runId: RunId;
|
|
26
|
+
subSessionId: SubSessionId;
|
|
27
|
+
parentSessionId: SessionId;
|
|
28
|
+
spawnedBy: ActorRef;
|
|
29
|
+
lineage: Lineage;
|
|
30
|
+
schemaVersion: RunEventSchemaVersion;
|
|
31
|
+
at: Date;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Emitted each time the child session's Run appends a message. Gives parents
|
|
35
|
+
* and platform consumers in-flight visibility without requiring a drill into
|
|
36
|
+
* the child transcript. See §10.4.
|
|
37
|
+
*/
|
|
38
|
+
export interface SubsessionMessagedEvent {
|
|
39
|
+
type: 'subsession_messaged';
|
|
40
|
+
runId: RunId;
|
|
41
|
+
subSessionId: SubSessionId;
|
|
42
|
+
parentSessionId: SessionId;
|
|
43
|
+
messageId: MessageId;
|
|
44
|
+
lineage: Lineage;
|
|
45
|
+
schemaVersion: RunEventSchemaVersion;
|
|
46
|
+
at: Date;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Emitted when the child session transitions to `idle` (terminal persistent
|
|
50
|
+
* state per §5.3 — sub-sessions never close). A separate
|
|
51
|
+
* `sub_session.summarized` event carries the `SessionSummaryRef` (§8); this
|
|
52
|
+
* event only reports the lifecycle transition.
|
|
53
|
+
*/
|
|
54
|
+
export interface SubsessionIdledEvent {
|
|
55
|
+
type: 'subsession_idled';
|
|
56
|
+
runId: RunId;
|
|
57
|
+
subSessionId: SubSessionId;
|
|
58
|
+
parentSessionId: SessionId;
|
|
59
|
+
lineage: Lineage;
|
|
60
|
+
schemaVersion: RunEventSchemaVersion;
|
|
61
|
+
at: Date;
|
|
62
|
+
}
|
|
63
|
+
export type SubsessionLifecycleEvent = SubsessionSpawnedEvent | SubsessionMessagedEvent | SubsessionIdledEvent;
|
|
64
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/session/events/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAEhE;;;;;;;;;;;;GAYG;AAEH;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACtC,IAAI,EAAE,oBAAoB,CAAA;IAC1B,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,EAAE,YAAY,CAAA;IAC1B,eAAe,EAAE,SAAS,CAAA;IAC1B,SAAS,EAAE,QAAQ,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,qBAAqB,CAAA;IACpC,EAAE,EAAE,IAAI,CAAA;CACR;AAED;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACvC,IAAI,EAAE,qBAAqB,CAAA;IAC3B,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,EAAE,YAAY,CAAA;IAC1B,eAAe,EAAE,SAAS,CAAA;IAC1B,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,qBAAqB,CAAA;IACpC,EAAE,EAAE,IAAI,CAAA;CACR;AAED;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACpC,IAAI,EAAE,kBAAkB,CAAA;IACxB,KAAK,EAAE,KAAK,CAAA;IACZ,YAAY,EAAE,YAAY,CAAA;IAC1B,eAAe,EAAE,SAAS,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,qBAAqB,CAAA;IACpC,EAAE,EAAE,IAAI,CAAA;CACR;AAED,MAAM,MAAM,wBAAwB,GACjC,sBAAsB,GACtB,uBAAuB,GACvB,oBAAoB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/session/events/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcast.test.d.ts","sourceRoot":"","sources":["../../../../src/session/handoff/__tests__/broadcast.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { ThreadManager } from '../../../manager/thread/lifecycle.js';
|
|
3
|
+
import { GitWorktreeDriver, } from '../../../session/workspace/git-worktree.js';
|
|
4
|
+
import { WorkspaceBackendRegistry } from '../../../session/workspace/registry.js';
|
|
5
|
+
import { InMemorySessionStore } from '../../../store/session/memory.js';
|
|
6
|
+
import { InMemoryThreadStore } from '../../../store/thread/memory.js';
|
|
7
|
+
import { generateHandoffId } from '../../../utils/id.js';
|
|
8
|
+
import { executeBroadcastHandoff } from '../broadcast.js';
|
|
9
|
+
import { DefaultCapacityValidator } from '../capacity.js';
|
|
10
|
+
import { HandoffVersionConflict } from '../version.js';
|
|
11
|
+
const tenant = 'tnt_alpha';
|
|
12
|
+
function stubLogger() {
|
|
13
|
+
return {
|
|
14
|
+
debug: vi.fn(),
|
|
15
|
+
info: vi.fn(),
|
|
16
|
+
warn: vi.fn(),
|
|
17
|
+
error: vi.fn(),
|
|
18
|
+
child() {
|
|
19
|
+
return stubLogger();
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function okExec(stdout = '', stderr = '') {
|
|
24
|
+
return { stdout, stderr };
|
|
25
|
+
}
|
|
26
|
+
function user(userId) {
|
|
27
|
+
return { kind: 'user', userId: userId, tenantId: tenant };
|
|
28
|
+
}
|
|
29
|
+
function buildDeps(store, threadStore, execOverride) {
|
|
30
|
+
const exec = execOverride ? execOverride : async (_file, _args) => okExec();
|
|
31
|
+
const driver = new GitWorktreeDriver({
|
|
32
|
+
repoRoot: '/repo',
|
|
33
|
+
logger: stubLogger(),
|
|
34
|
+
execFile: exec,
|
|
35
|
+
});
|
|
36
|
+
const registry = new WorkspaceBackendRegistry();
|
|
37
|
+
registry.register(driver);
|
|
38
|
+
const events = {
|
|
39
|
+
onLocked: vi.fn(),
|
|
40
|
+
onUnlocked: vi.fn(),
|
|
41
|
+
onCommitted: vi.fn(),
|
|
42
|
+
onBroadcastRollback: vi.fn(),
|
|
43
|
+
};
|
|
44
|
+
const threadManager = new ThreadManager({ threadStore, sessionStore: store });
|
|
45
|
+
return {
|
|
46
|
+
deps: {
|
|
47
|
+
store,
|
|
48
|
+
workspaceRegistry: registry,
|
|
49
|
+
capacity: new DefaultCapacityValidator(store),
|
|
50
|
+
events,
|
|
51
|
+
threadManager,
|
|
52
|
+
},
|
|
53
|
+
events,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
async function seedIdle(store, threadStore) {
|
|
57
|
+
const project = await store.createProject({ tenantId: tenant, name: 'p' }, tenant);
|
|
58
|
+
const thread = await threadStore.createThread({ projectId: project.id, title: 'handoff-broadcast-test' }, tenant);
|
|
59
|
+
const session = await store.createSession({ threadId: thread.id, projectId: project.id, currentActor: user('usr_source') }, tenant);
|
|
60
|
+
return { project, thread, session };
|
|
61
|
+
}
|
|
62
|
+
function buildAssignments(sourceSessionId, projectId, threadId, expectedOwnerVersion, recipients, broadcastId = 'bc_1') {
|
|
63
|
+
return recipients.map((recipientActor) => ({
|
|
64
|
+
id: generateHandoffId(),
|
|
65
|
+
mode: 'broadcast',
|
|
66
|
+
sourceSessionId,
|
|
67
|
+
tenantId: tenant,
|
|
68
|
+
threadId,
|
|
69
|
+
projectId,
|
|
70
|
+
sourceActor: user('usr_source'),
|
|
71
|
+
recipientActor,
|
|
72
|
+
expectedOwnerVersion,
|
|
73
|
+
broadcastId,
|
|
74
|
+
createdAt: new Date('2026-02-01'),
|
|
75
|
+
}));
|
|
76
|
+
}
|
|
77
|
+
describe('executeBroadcastHandoff', () => {
|
|
78
|
+
let store;
|
|
79
|
+
let threadStore;
|
|
80
|
+
beforeEach(() => {
|
|
81
|
+
store = new InMemorySessionStore();
|
|
82
|
+
threadStore = new InMemoryThreadStore();
|
|
83
|
+
});
|
|
84
|
+
it('happy path: 3 recipients → source ends in awaiting_merge with 3 new children', async () => {
|
|
85
|
+
const { project, thread, session } = await seedIdle(store, threadStore);
|
|
86
|
+
const { deps, events } = buildDeps(store, threadStore);
|
|
87
|
+
const assignments = buildAssignments(session.id, project.id, thread.id, 0, [
|
|
88
|
+
user('usr_bob'),
|
|
89
|
+
user('usr_carol'),
|
|
90
|
+
user('usr_dan'),
|
|
91
|
+
]);
|
|
92
|
+
const outcomes = await executeBroadcastHandoff(deps, assignments, tenant);
|
|
93
|
+
expect(outcomes).toHaveLength(3);
|
|
94
|
+
expect(new Set(outcomes.map((o) => o.newSessionId)).size).toBe(3);
|
|
95
|
+
expect(outcomes.every((o) => o.committedOwnerVersion === 1)).toBe(true);
|
|
96
|
+
const reloaded = await store.getSession(session.id, tenant);
|
|
97
|
+
expect(reloaded?.status).toBe('awaiting_merge');
|
|
98
|
+
expect(reloaded?.ownerVersion).toBe(1);
|
|
99
|
+
const children = await store.getChildren(session.id, tenant);
|
|
100
|
+
expect(children).toHaveLength(3);
|
|
101
|
+
expect(events.onLocked).toHaveBeenCalledTimes(1);
|
|
102
|
+
expect(events.onCommitted).toHaveBeenCalledTimes(1);
|
|
103
|
+
expect(events.onBroadcastRollback).not.toHaveBeenCalled();
|
|
104
|
+
});
|
|
105
|
+
it('rollback on mid-fan-out failure (2nd recipient worktree add fails): source reverts, rollback emits accurate partialState', async () => {
|
|
106
|
+
const { project, thread, session } = await seedIdle(store, threadStore);
|
|
107
|
+
let addCount = 0;
|
|
108
|
+
const exec = async (_file, args) => {
|
|
109
|
+
if (args.includes('add')) {
|
|
110
|
+
addCount += 1;
|
|
111
|
+
if (addCount === 2)
|
|
112
|
+
throw new Error('simulated mid-fanout failure');
|
|
113
|
+
}
|
|
114
|
+
return okExec();
|
|
115
|
+
};
|
|
116
|
+
const { deps, events } = buildDeps(store, threadStore, exec);
|
|
117
|
+
const assignments = buildAssignments(session.id, project.id, thread.id, 0, [
|
|
118
|
+
user('usr_b'),
|
|
119
|
+
user('usr_c'),
|
|
120
|
+
user('usr_d'),
|
|
121
|
+
]);
|
|
122
|
+
await expect(executeBroadcastHandoff(deps, assignments, tenant)).rejects.toThrow(/Workspace backend git-worktree failed on create/);
|
|
123
|
+
const reloaded = await store.getSession(session.id, tenant);
|
|
124
|
+
expect(reloaded?.status).toBe('idle');
|
|
125
|
+
expect(reloaded?.ownerVersion).toBe(0);
|
|
126
|
+
// The first recipient got through all three sub-ops; the second failed
|
|
127
|
+
// during worktree provisioning. partialState reports:
|
|
128
|
+
// worktreesProvisioned: 1 (the first recipient's)
|
|
129
|
+
// subsessionsCreated: 1 (the first recipient's)
|
|
130
|
+
// assignmentsWritten: 1 (the first recipient's)
|
|
131
|
+
expect(events.onBroadcastRollback).toHaveBeenCalledTimes(1);
|
|
132
|
+
const rollbackCall = events.onBroadcastRollback.mock.calls[0]?.[0];
|
|
133
|
+
expect(rollbackCall).toBeDefined();
|
|
134
|
+
expect(rollbackCall?.partialState.worktreesProvisioned).toBe(1);
|
|
135
|
+
expect(rollbackCall?.partialState.subsessionsCreated).toBe(1);
|
|
136
|
+
expect(rollbackCall?.partialState.assignmentsWritten).toBe(1);
|
|
137
|
+
expect(rollbackCall?.broadcastId).toBe('bc_1');
|
|
138
|
+
// Phase 8: rollback now fully deletes partial records rather than
|
|
139
|
+
// flipping them to 'archived'. The source session has no children and
|
|
140
|
+
// no orphan child sessions remain under the project.
|
|
141
|
+
const children = await store.getChildren(session.id, tenant);
|
|
142
|
+
expect(children).toHaveLength(0);
|
|
143
|
+
});
|
|
144
|
+
it('rollback performs full cleanup via deleteSubSession/deleteSession (no status-flip stopgap)', async () => {
|
|
145
|
+
const { project, thread, session } = await seedIdle(store, threadStore);
|
|
146
|
+
let addCount = 0;
|
|
147
|
+
const exec = async (_file, args) => {
|
|
148
|
+
if (args.includes('add')) {
|
|
149
|
+
addCount += 1;
|
|
150
|
+
if (addCount === 2)
|
|
151
|
+
throw new Error('simulated failure');
|
|
152
|
+
}
|
|
153
|
+
return okExec();
|
|
154
|
+
};
|
|
155
|
+
const { deps } = buildDeps(store, threadStore, exec);
|
|
156
|
+
const assignments = buildAssignments(session.id, project.id, thread.id, 0, [
|
|
157
|
+
user('usr_b'),
|
|
158
|
+
user('usr_c'),
|
|
159
|
+
]);
|
|
160
|
+
await expect(executeBroadcastHandoff(deps, assignments, tenant)).rejects.toThrow();
|
|
161
|
+
// No sub-session record remains.
|
|
162
|
+
const children = await store.getChildren(session.id, tenant);
|
|
163
|
+
expect(children).toHaveLength(0);
|
|
164
|
+
// Source is back to idle with its original ownerVersion (unchanged because
|
|
165
|
+
// the CAS commit never landed).
|
|
166
|
+
const reloaded = await store.getSession(session.id, tenant);
|
|
167
|
+
expect(reloaded?.status).toBe('idle');
|
|
168
|
+
expect(reloaded?.ownerVersion).toBe(0);
|
|
169
|
+
});
|
|
170
|
+
it('rollback idempotency: worktree dispose throwing during rollback does not bubble a secondary failure', async () => {
|
|
171
|
+
const { project, thread, session } = await seedIdle(store, threadStore);
|
|
172
|
+
let addCount = 0;
|
|
173
|
+
let removeCount = 0;
|
|
174
|
+
const exec = async (_file, args) => {
|
|
175
|
+
if (args.includes('add')) {
|
|
176
|
+
addCount += 1;
|
|
177
|
+
if (addCount === 2)
|
|
178
|
+
throw new Error('primary: mid-fanout add failure');
|
|
179
|
+
}
|
|
180
|
+
if (args.includes('remove')) {
|
|
181
|
+
removeCount += 1;
|
|
182
|
+
// Throw an unclassified error so the regex in dispose does NOT treat
|
|
183
|
+
// it as idempotent success — exercises the outer try/catch in the
|
|
184
|
+
// rollback loop.
|
|
185
|
+
throw new Error('secondary rollback dispose failure (unexpected)');
|
|
186
|
+
}
|
|
187
|
+
return okExec();
|
|
188
|
+
};
|
|
189
|
+
const { deps, events } = buildDeps(store, threadStore, exec);
|
|
190
|
+
const assignments = buildAssignments(session.id, project.id, thread.id, 0, [
|
|
191
|
+
user('usr_b'),
|
|
192
|
+
user('usr_c'),
|
|
193
|
+
]);
|
|
194
|
+
// Outer failure is the PRIMARY one — the secondary dispose failure is
|
|
195
|
+
// swallowed. Primary wraps in WorkspaceBackendError (create op).
|
|
196
|
+
await expect(executeBroadcastHandoff(deps, assignments, tenant)).rejects.toThrow(/Workspace backend git-worktree failed on create/);
|
|
197
|
+
expect(removeCount).toBeGreaterThanOrEqual(1);
|
|
198
|
+
expect(events.onBroadcastRollback).toHaveBeenCalledTimes(1);
|
|
199
|
+
// Source is idle (rollback succeeded at the store layer even if dispose
|
|
200
|
+
// partially failed).
|
|
201
|
+
const reloaded = await store.getSession(session.id, tenant);
|
|
202
|
+
expect(reloaded?.status).toBe('idle');
|
|
203
|
+
});
|
|
204
|
+
it('dedupe: two assignments targeting same recipient → rejected pre-lock (no side effects)', async () => {
|
|
205
|
+
const { project, thread, session } = await seedIdle(store, threadStore);
|
|
206
|
+
const { deps, events } = buildDeps(store, threadStore);
|
|
207
|
+
const bob = user('usr_bob');
|
|
208
|
+
const assignments = buildAssignments(session.id, project.id, thread.id, 0, [
|
|
209
|
+
bob,
|
|
210
|
+
bob,
|
|
211
|
+
user('usr_dan'),
|
|
212
|
+
]);
|
|
213
|
+
await expect(executeBroadcastHandoff(deps, assignments, tenant)).rejects.toThrow(/duplicate recipient/);
|
|
214
|
+
// Source never locked — no events fired.
|
|
215
|
+
expect(events.onLocked).not.toHaveBeenCalled();
|
|
216
|
+
expect(events.onCommitted).not.toHaveBeenCalled();
|
|
217
|
+
expect(events.onBroadcastRollback).not.toHaveBeenCalled();
|
|
218
|
+
const reloaded = await store.getSession(session.id, tenant);
|
|
219
|
+
expect(reloaded?.status).toBe('idle');
|
|
220
|
+
});
|
|
221
|
+
it('width cap: 9 recipients exceeds default maxWidth=8 → rejected before source lock', async () => {
|
|
222
|
+
const { project, thread, session } = await seedIdle(store, threadStore);
|
|
223
|
+
const { deps, events } = buildDeps(store, threadStore);
|
|
224
|
+
const recipients = Array.from({ length: 9 }, (_, i) => user(`usr_${i}`));
|
|
225
|
+
const assignments = buildAssignments(session.id, project.id, thread.id, 0, recipients);
|
|
226
|
+
await expect(executeBroadcastHandoff(deps, assignments, tenant)).rejects.toThrow(/Delegation capacity exceeded/);
|
|
227
|
+
expect(events.onLocked).not.toHaveBeenCalled();
|
|
228
|
+
expect(events.onBroadcastRollback).not.toHaveBeenCalled();
|
|
229
|
+
const reloaded = await store.getSession(session.id, tenant);
|
|
230
|
+
expect(reloaded?.status).toBe('idle');
|
|
231
|
+
});
|
|
232
|
+
it('concurrent broadcast on same source: second attempt rejected with HandoffVersionConflict', async () => {
|
|
233
|
+
const { project, thread, session } = await seedIdle(store, threadStore);
|
|
234
|
+
const { deps } = buildDeps(store, threadStore);
|
|
235
|
+
const firstAssignments = buildAssignments(session.id, project.id, thread.id, 0, [user('usr_b'), user('usr_c')], 'bc_1');
|
|
236
|
+
await executeBroadcastHandoff(deps, firstAssignments, tenant);
|
|
237
|
+
// Second broadcast still has expectedOwnerVersion = 0 but source is now 1.
|
|
238
|
+
// It should also observe source.status === 'awaiting_merge' (non-idle) —
|
|
239
|
+
// that rejects with HandoffLockRejected BEFORE the CAS check fires. To
|
|
240
|
+
// exercise the CAS path, reset source to `idle` (simulating all recipients
|
|
241
|
+
// completing) and THEN attempt the second handoff with stale expected=0.
|
|
242
|
+
const reloaded = await store.getSession(session.id, tenant);
|
|
243
|
+
if (!reloaded)
|
|
244
|
+
throw new Error('source missing');
|
|
245
|
+
await store.updateSession({ ...reloaded, status: 'idle' }, tenant);
|
|
246
|
+
const second = buildAssignments(session.id, project.id, thread.id, 0, // stale — actual is 1
|
|
247
|
+
[user('usr_d'), user('usr_e')], 'bc_2');
|
|
248
|
+
await expect(executeBroadcastHandoff(deps, second, tenant)).rejects.toBeInstanceOf(HandoffVersionConflict);
|
|
249
|
+
});
|
|
250
|
+
it('empty assignments → throws a descriptive error', async () => {
|
|
251
|
+
const { deps } = buildDeps(store, threadStore);
|
|
252
|
+
await expect(executeBroadcastHandoff(deps, [], tenant)).rejects.toThrow(/assignments must not be empty/);
|
|
253
|
+
});
|
|
254
|
+
it('single-row broadcast → rejected (caller must use executeSingleHandoff)', async () => {
|
|
255
|
+
const { project, thread, session } = await seedIdle(store, threadStore);
|
|
256
|
+
const { deps } = buildDeps(store, threadStore);
|
|
257
|
+
const assignments = buildAssignments(session.id, project.id, thread.id, 0, [user('usr_b')]);
|
|
258
|
+
await expect(executeBroadcastHandoff(deps, assignments, tenant)).rejects.toThrow(/single-recipient handoffs must use executeSingleHandoff/);
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
//# sourceMappingURL=broadcast.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcast.test.js","sourceRoot":"","sources":["../../../../src/session/handoff/__tests__/broadcast.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacity.test.d.ts","sourceRoot":"","sources":["../../../../src/session/handoff/__tests__/capacity.test.ts"],"names":[],"mappings":""}
|