@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAwB,MAAM,6BAA6B,CAAA;AAClG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,UAAU,EAAwB,MAAM,6BAA6B,CAAA;AAClG,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,KAAK,EAAoB,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAC7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAKrE,qBAAa,cAAc;IAC1B,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,GAAG,CAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,MAAM,EAAE,oBAAoB;IAgCxC,IAAI,EAAE,IAAI,KAAK,CAEd;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,SAAS,IAAI,SAAS,CAEzB;IAED,IAAI,MAAM,sDAET;IAED,IAAI,UAAU,2BAEb;IAED,IAAI,QAAQ,IAAI,OAAO,EAAE,CAExB;IAED,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAI5B,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAIhC,WAAW,IAAI,YAAY;IAI3B,SAAS,IAAI,MAAM,GAAG,IAAI;IAIpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,WAAW,IAAI,IAAI;IAInB,aAAa,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAS5C,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAO/B,aAAa,IAAI,IAAI;IAMrB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAIvC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIjC,kBAAkB,IAAI,MAAM;IAK5B,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAInC,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAQxC,OAAO,CAAC,aAAa;IAUrB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB;IAchD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAc9B"}
|
|
@@ -8,9 +8,17 @@ export class RunPersistence {
|
|
|
8
8
|
runStore;
|
|
9
9
|
pricing;
|
|
10
10
|
log;
|
|
11
|
+
_sessionId;
|
|
12
|
+
_threadId;
|
|
13
|
+
_tenantId;
|
|
14
|
+
_projectId;
|
|
11
15
|
constructor(config) {
|
|
12
16
|
this.pricing = config.pricing;
|
|
13
17
|
this.log = config.log;
|
|
18
|
+
this._sessionId = config.sessionId;
|
|
19
|
+
this._threadId = config.threadId;
|
|
20
|
+
this._tenantId = config.tenantId;
|
|
21
|
+
this._projectId = config.projectId;
|
|
14
22
|
this.runStore = new RunDiskStore({
|
|
15
23
|
baseDir: config.outputDir,
|
|
16
24
|
logger: config.log,
|
|
@@ -36,6 +44,18 @@ export class RunPersistence {
|
|
|
36
44
|
get id() {
|
|
37
45
|
return this.run.id;
|
|
38
46
|
}
|
|
47
|
+
get sessionId() {
|
|
48
|
+
return this._sessionId;
|
|
49
|
+
}
|
|
50
|
+
get threadId() {
|
|
51
|
+
return this._threadId;
|
|
52
|
+
}
|
|
53
|
+
get tenantId() {
|
|
54
|
+
return this._tenantId;
|
|
55
|
+
}
|
|
56
|
+
get projectId() {
|
|
57
|
+
return this._projectId;
|
|
58
|
+
}
|
|
39
59
|
get status() {
|
|
40
60
|
return this.run.status;
|
|
41
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACtD,OAAO,EAAkC,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../../src/manager/run/persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.test.d.ts","sourceRoot":"","sources":["../../../../src/manager/thread/__tests__/lifecycle.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { ThreadClosedError, ThreadNotEmptyError } from '../../../session/errors.js';
|
|
3
|
+
import { InMemorySessionStore } from '../../../store/session/memory.js';
|
|
4
|
+
import { InMemoryThreadStore } from '../../../store/thread/memory.js';
|
|
5
|
+
import { ThreadManager } from '../lifecycle.js';
|
|
6
|
+
const MISSING_THREAD_ID = 'thd_missing';
|
|
7
|
+
const tenantA = 'tnt_alpha';
|
|
8
|
+
const tenantB = 'tnt_beta';
|
|
9
|
+
function userActor(tenantId) {
|
|
10
|
+
return { kind: 'user', userId: 'usr_a', tenantId };
|
|
11
|
+
}
|
|
12
|
+
function agentActor(tenantId) {
|
|
13
|
+
return { kind: 'agent', agentId: 'agt_a', tenantId };
|
|
14
|
+
}
|
|
15
|
+
async function harness(tenantId = tenantA) {
|
|
16
|
+
const threadStore = new InMemoryThreadStore();
|
|
17
|
+
const sessionStore = new InMemorySessionStore();
|
|
18
|
+
const project = await sessionStore.createProject({ tenantId, name: 'p1' }, tenantId);
|
|
19
|
+
const thread = await threadStore.createThread({ projectId: project.id, title: 't' }, tenantId);
|
|
20
|
+
const manager = new ThreadManager({ threadStore, sessionStore });
|
|
21
|
+
return { threadStore, sessionStore, project, thread, manager };
|
|
22
|
+
}
|
|
23
|
+
describe('ThreadManager', () => {
|
|
24
|
+
describe('requireOpen', () => {
|
|
25
|
+
it('returns the thread when open', async () => {
|
|
26
|
+
const { thread, manager } = await harness();
|
|
27
|
+
await expect(manager.requireOpen(thread.id, tenantA)).resolves.toMatchObject({
|
|
28
|
+
id: thread.id,
|
|
29
|
+
status: 'open',
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
it('throws ThreadClosedError when archived', async () => {
|
|
33
|
+
const { thread, manager, threadStore } = await harness();
|
|
34
|
+
await threadStore.updateThread({ ...thread, status: 'archived' }, tenantA);
|
|
35
|
+
await expect(manager.requireOpen(thread.id, tenantA)).rejects.toBeInstanceOf(ThreadClosedError);
|
|
36
|
+
});
|
|
37
|
+
it('throws when the thread does not exist', async () => {
|
|
38
|
+
const { manager } = await harness();
|
|
39
|
+
await expect(manager.requireOpen(MISSING_THREAD_ID, tenantA)).rejects.toThrow(/not found/);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
describe('archive', () => {
|
|
43
|
+
it('flips status to archived and bumps ownerVersion', async () => {
|
|
44
|
+
const { thread, manager } = await harness();
|
|
45
|
+
const archived = await manager.archive(thread.id, tenantA);
|
|
46
|
+
expect(archived.status).toBe('archived');
|
|
47
|
+
expect(archived.ownerVersion).toBe(thread.ownerVersion + 1);
|
|
48
|
+
});
|
|
49
|
+
it('is idempotent on an already-archived thread (no store write)', async () => {
|
|
50
|
+
const { thread, manager, threadStore } = await harness();
|
|
51
|
+
await threadStore.updateThread({ ...thread, status: 'archived' }, tenantA);
|
|
52
|
+
const before = await threadStore.getThread(thread.id, tenantA);
|
|
53
|
+
const result = await manager.archive(thread.id, tenantA);
|
|
54
|
+
expect(result.status).toBe('archived');
|
|
55
|
+
// Re-archival must NOT advance ownerVersion — the store would have
|
|
56
|
+
// rejected a second updateThread as stale anyway; we assert the
|
|
57
|
+
// short-circuit path held instead.
|
|
58
|
+
expect(result.ownerVersion).toBe(before?.ownerVersion);
|
|
59
|
+
});
|
|
60
|
+
it('throws when the thread does not exist', async () => {
|
|
61
|
+
const { manager } = await harness();
|
|
62
|
+
await expect(manager.archive(MISSING_THREAD_ID, tenantA)).rejects.toThrow(/not found/);
|
|
63
|
+
});
|
|
64
|
+
it('rejects with ThreadNotEmptyError when a session is active', async () => {
|
|
65
|
+
const { thread, project, manager, sessionStore } = await harness();
|
|
66
|
+
const session = await sessionStore.createSession({
|
|
67
|
+
threadId: thread.id,
|
|
68
|
+
projectId: project.id,
|
|
69
|
+
currentActor: userActor(tenantA),
|
|
70
|
+
}, tenantA);
|
|
71
|
+
await sessionStore.updateSession({ ...session, status: 'active' }, tenantA);
|
|
72
|
+
await expect(manager.archive(thread.id, tenantA)).rejects.toMatchObject({
|
|
73
|
+
name: 'ThreadNotEmptyError',
|
|
74
|
+
details: {
|
|
75
|
+
threadId: thread.id,
|
|
76
|
+
tenantId: tenantA,
|
|
77
|
+
op: 'archive',
|
|
78
|
+
totalBlockingSessions: 1,
|
|
79
|
+
blockingSessions: [{ sessionId: session.id, status: 'active' }],
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
it('defensive re-check: already-archived thread with a smuggled active session still rejects', async () => {
|
|
84
|
+
// Flip the thread to archived directly (bypassing manager.archive so
|
|
85
|
+
// no check runs), then attach an active session via direct store
|
|
86
|
+
// mutation. A subsequent manager.archive() must surface the offender
|
|
87
|
+
// as ThreadNotEmptyError, not short-circuit as "already archived".
|
|
88
|
+
const { thread, project, manager, sessionStore, threadStore } = await harness();
|
|
89
|
+
await threadStore.updateThread({ ...thread, status: 'archived' }, tenantA);
|
|
90
|
+
const smuggled = await sessionStore.createSession({
|
|
91
|
+
threadId: thread.id,
|
|
92
|
+
projectId: project.id,
|
|
93
|
+
currentActor: userActor(tenantA),
|
|
94
|
+
}, tenantA);
|
|
95
|
+
await sessionStore.updateSession({ ...smuggled, status: 'active' }, tenantA);
|
|
96
|
+
await expect(manager.archive(thread.id, tenantA)).rejects.toMatchObject({
|
|
97
|
+
name: 'ThreadNotEmptyError',
|
|
98
|
+
details: {
|
|
99
|
+
op: 'archive',
|
|
100
|
+
totalBlockingSessions: 1,
|
|
101
|
+
blockingSessions: [{ sessionId: smuggled.id, status: 'active' }],
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
});
|
|
105
|
+
it.each(['locked', 'awaiting_hitl', 'awaiting_merge'])('rejects when a session is %s', async (status) => {
|
|
106
|
+
const { thread, project, manager, sessionStore } = await harness();
|
|
107
|
+
const session = await sessionStore.createSession({
|
|
108
|
+
threadId: thread.id,
|
|
109
|
+
projectId: project.id,
|
|
110
|
+
currentActor: userActor(tenantA),
|
|
111
|
+
}, tenantA);
|
|
112
|
+
await sessionStore.updateSession({ ...session, status }, tenantA);
|
|
113
|
+
await expect(manager.archive(thread.id, tenantA)).rejects.toBeInstanceOf(ThreadNotEmptyError);
|
|
114
|
+
});
|
|
115
|
+
it('allows archival when every session is quiescent (idle / failed / archived)', async () => {
|
|
116
|
+
const { thread, project, manager, sessionStore } = await harness();
|
|
117
|
+
// `createSession` defaults to `idle`; force the others via updateSession.
|
|
118
|
+
await sessionStore.createSession({
|
|
119
|
+
threadId: thread.id,
|
|
120
|
+
projectId: project.id,
|
|
121
|
+
currentActor: userActor(tenantA),
|
|
122
|
+
}, tenantA);
|
|
123
|
+
const sFailed = await sessionStore.createSession({
|
|
124
|
+
threadId: thread.id,
|
|
125
|
+
projectId: project.id,
|
|
126
|
+
currentActor: agentActor(tenantA),
|
|
127
|
+
}, tenantA);
|
|
128
|
+
await sessionStore.updateSession({ ...sFailed, status: 'failed' }, tenantA);
|
|
129
|
+
const archived = await manager.archive(thread.id, tenantA);
|
|
130
|
+
expect(archived.status).toBe('archived');
|
|
131
|
+
});
|
|
132
|
+
it('ignores sessions attached to a sibling thread', async () => {
|
|
133
|
+
const { thread, project, manager, sessionStore, threadStore } = await harness();
|
|
134
|
+
const other = await threadStore.createThread({ projectId: project.id, title: 'other' }, tenantA);
|
|
135
|
+
// Active session under the OTHER thread must not block archival of
|
|
136
|
+
// `thread`.
|
|
137
|
+
const otherSession = await sessionStore.createSession({
|
|
138
|
+
threadId: other.id,
|
|
139
|
+
projectId: project.id,
|
|
140
|
+
currentActor: userActor(tenantA),
|
|
141
|
+
}, tenantA);
|
|
142
|
+
await sessionStore.updateSession({ ...otherSession, status: 'active' }, tenantA);
|
|
143
|
+
await expect(manager.archive(thread.id, tenantA)).resolves.toMatchObject({
|
|
144
|
+
status: 'archived',
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
it('does not leak cross-tenant sessions into the precondition', async () => {
|
|
148
|
+
// Shared stores across tenants (production shape). A session with
|
|
149
|
+
// the same threadId string under tenantB must not block archival
|
|
150
|
+
// of tenantA's thread.
|
|
151
|
+
const threadStore = new InMemoryThreadStore();
|
|
152
|
+
const sessionStore = new InMemorySessionStore();
|
|
153
|
+
const manager = new ThreadManager({ threadStore, sessionStore });
|
|
154
|
+
const pA = await sessionStore.createProject({ tenantId: tenantA, name: 'pa' }, tenantA);
|
|
155
|
+
const pB = await sessionStore.createProject({ tenantId: tenantB, name: 'pb' }, tenantB);
|
|
156
|
+
const tA = await threadStore.createThread({ projectId: pA.id, title: 'ta' }, tenantA);
|
|
157
|
+
// Cross-tenant session with the same threadId string as tA.
|
|
158
|
+
const bSession = await sessionStore.createSession({ threadId: tA.id, projectId: pB.id, currentActor: userActor(tenantB) }, tenantB);
|
|
159
|
+
await sessionStore.updateSession({ ...bSession, status: 'active' }, tenantB);
|
|
160
|
+
await expect(manager.archive(tA.id, tenantA)).resolves.toMatchObject({
|
|
161
|
+
status: 'archived',
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
describe('delete', () => {
|
|
166
|
+
it('deletes an empty thread', async () => {
|
|
167
|
+
const { thread, manager, threadStore } = await harness();
|
|
168
|
+
await manager.delete(thread.id, tenantA);
|
|
169
|
+
expect(await threadStore.getThread(thread.id, tenantA)).toBeNull();
|
|
170
|
+
});
|
|
171
|
+
it('rejects with ThreadNotEmptyError when any session references the thread', async () => {
|
|
172
|
+
const { thread, project, manager, sessionStore } = await harness();
|
|
173
|
+
const session = await sessionStore.createSession({
|
|
174
|
+
threadId: thread.id,
|
|
175
|
+
projectId: project.id,
|
|
176
|
+
currentActor: userActor(tenantA),
|
|
177
|
+
}, tenantA);
|
|
178
|
+
// Idle — allowed under archive, still blocks delete.
|
|
179
|
+
await expect(manager.delete(thread.id, tenantA)).rejects.toMatchObject({
|
|
180
|
+
name: 'ThreadNotEmptyError',
|
|
181
|
+
details: {
|
|
182
|
+
threadId: thread.id,
|
|
183
|
+
tenantId: tenantA,
|
|
184
|
+
op: 'delete',
|
|
185
|
+
totalBlockingSessions: 1,
|
|
186
|
+
blockingSessions: [{ sessionId: session.id, status: 'idle' }],
|
|
187
|
+
},
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
it('detects orphaned sessions referencing a missing thread', async () => {
|
|
191
|
+
// Thread record is destroyed via the store directly, but a session
|
|
192
|
+
// still carries its threadId. Manager.delete must reject rather
|
|
193
|
+
// than silently succeed on the "thread is already gone" short-cut
|
|
194
|
+
// (the session scan runs unconditionally).
|
|
195
|
+
const { thread, project, manager, sessionStore, threadStore } = await harness();
|
|
196
|
+
const orphan = await sessionStore.createSession({
|
|
197
|
+
threadId: thread.id,
|
|
198
|
+
projectId: project.id,
|
|
199
|
+
currentActor: userActor(tenantA),
|
|
200
|
+
}, tenantA);
|
|
201
|
+
await threadStore.deleteThread(thread.id, tenantA);
|
|
202
|
+
await expect(manager.delete(thread.id, tenantA)).rejects.toMatchObject({
|
|
203
|
+
name: 'ThreadNotEmptyError',
|
|
204
|
+
details: {
|
|
205
|
+
op: 'delete',
|
|
206
|
+
blockingSessions: [{ sessionId: orphan.id, status: 'idle' }],
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
it('is idempotent for an absent thread with no orphans', async () => {
|
|
211
|
+
const { manager } = await harness();
|
|
212
|
+
await expect(manager.delete(MISSING_THREAD_ID, tenantA)).resolves.toBeUndefined();
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=lifecycle.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.test.js","sourceRoot":"","sources":["../../../../src/manager/thread/__tests__/lifecycle.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThreadManager — thin orchestrator over {@link ThreadStore} and
|
|
3
|
+
* {@link SessionStore}.
|
|
4
|
+
*
|
|
5
|
+
* Owns user-facing lifecycle operations on the Thread topic layer plus the
|
|
6
|
+
* archive-gate contract enforced at session-creation ingress sites.
|
|
7
|
+
*
|
|
8
|
+
* Phase 2.6 wired `ThreadManager.requireOpen` into three ingress paths:
|
|
9
|
+
* - {@link AgentManager.provisionSpawn} (child session creation)
|
|
10
|
+
* - `executeSingleHandoff` (recipient session creation)
|
|
11
|
+
* - `executeBroadcastHandoff` (N recipient sessions per fan-out)
|
|
12
|
+
* Those call sites depend on this manager, so the one-method indirection
|
|
13
|
+
* stopped being "structural overhead" the moment archive/delete needed the
|
|
14
|
+
* session-presence cross-check anyway.
|
|
15
|
+
*
|
|
16
|
+
* Archive + delete require cross-store preconditions (session-presence
|
|
17
|
+
* checks) — enforced here where both stores are in scope. The stores
|
|
18
|
+
* themselves stay unaware of each other's layout (Convention #0), which is
|
|
19
|
+
* why the gate lives at the manager layer rather than as a universal store
|
|
20
|
+
* interceptor (see `archive` JSDoc for the direct-store-bypass boundary).
|
|
21
|
+
*/
|
|
22
|
+
import type { Thread } from '../../session/hierarchy/thread.js';
|
|
23
|
+
import type { TenantId } from '../../types/ids/index.js';
|
|
24
|
+
import type { ProjectId, ThreadId } from '../../types/session/ids.js';
|
|
25
|
+
import type { SessionStore } from '../../types/session/store.js';
|
|
26
|
+
import type { CreateThreadParams, ThreadStore } from '../../types/thread/store.js';
|
|
27
|
+
export interface ThreadManagerDeps {
|
|
28
|
+
readonly threadStore: ThreadStore;
|
|
29
|
+
readonly sessionStore: SessionStore;
|
|
30
|
+
}
|
|
31
|
+
export declare class ThreadManager {
|
|
32
|
+
private readonly deps;
|
|
33
|
+
constructor(deps: ThreadManagerDeps);
|
|
34
|
+
/** Persist a new Thread. Thin passthrough for uniformity at the manager surface. */
|
|
35
|
+
create(params: CreateThreadParams, tenantId: TenantId): Promise<Thread>;
|
|
36
|
+
/** Read a Thread by id; returns `null` when absent for the tenant. */
|
|
37
|
+
get(threadId: ThreadId, tenantId: TenantId): Promise<Thread | null>;
|
|
38
|
+
/**
|
|
39
|
+
* CAS update on a Thread. Propagates {@link import('../../session/errors.js').StaleThreadError}
|
|
40
|
+
* from the store on `ownerVersion` mismatch — callers re-read, re-apply,
|
|
41
|
+
* and retry.
|
|
42
|
+
*/
|
|
43
|
+
update(thread: Thread, tenantId: TenantId): Promise<void>;
|
|
44
|
+
/** List Threads under a Project, ordered by `createdAt` ascending. */
|
|
45
|
+
list(projectId: ProjectId, tenantId: TenantId): Promise<readonly Thread[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Load a Thread and assert it is in `'open'` state. Used by the spawn path
|
|
48
|
+
* as a precondition — a SubSession cannot be created under an archived
|
|
49
|
+
* Thread. Throws on absence and on archival; returns the loaded Thread on
|
|
50
|
+
* success so callers can avoid the second round-trip.
|
|
51
|
+
*
|
|
52
|
+
* Convention #5: deny-by-default. A missing Thread is a hard error, not a
|
|
53
|
+
* silent "assume archived".
|
|
54
|
+
*/
|
|
55
|
+
requireOpen(threadId: ThreadId, tenantId: TenantId): Promise<Thread>;
|
|
56
|
+
/**
|
|
57
|
+
* Flip a Thread to `'archived'` via CAS on {@link Thread.ownerVersion}.
|
|
58
|
+
*
|
|
59
|
+
* Preconditions (checked in order):
|
|
60
|
+
* 1. Thread exists for the tenant (throws on absence).
|
|
61
|
+
* 2. No attached Session is in a non-terminal state (see
|
|
62
|
+
* {@link ARCHIVAL_BLOCKING_STATUSES}). The presence check runs
|
|
63
|
+
* **before** the idempotent-archive short-circuit so that an already
|
|
64
|
+
* archived thread harboring a live session still surfaces as
|
|
65
|
+
* {@link ThreadNotEmptyError} rather than a silent success.
|
|
66
|
+
* 3. If the thread is already `'archived'` the method short-circuits
|
|
67
|
+
* without an `updateThread` write (idempotent re-archival). The
|
|
68
|
+
* returned record reflects the current persisted state.
|
|
69
|
+
*
|
|
70
|
+
* On a fresh archive transition the underlying
|
|
71
|
+
* {@link ThreadStore.updateThread} call commits with `ownerVersion + 1`.
|
|
72
|
+
* A {@link import('../../session/errors.js').StaleThreadError} from a
|
|
73
|
+
* concurrent writer propagates unchanged — the caller is expected to
|
|
74
|
+
* re-read + retry (mirrors the `updateThread` contract).
|
|
75
|
+
*
|
|
76
|
+
* Gate scope (Phase 2.6): `ThreadManager.requireOpen` is wired into
|
|
77
|
+
* `AgentManager.provisionSpawn` and both handoff flows, so the production
|
|
78
|
+
* ingress paths cannot attach new sessions under an archived thread.
|
|
79
|
+
* `SessionStore.createSession` / `updateSession` remain public and
|
|
80
|
+
* ungated at the store layer — a direct caller can still mutate a
|
|
81
|
+
* session after archival (the store has no `ThreadStore` handle by
|
|
82
|
+
* design; cross-store awareness lives in the manager). The defensive
|
|
83
|
+
* re-check above catches a smuggled live session on a subsequent
|
|
84
|
+
* archive call, but does not prevent the direct-store write from
|
|
85
|
+
* landing. That's an acceptable boundary — kernel callers must go
|
|
86
|
+
* through the ingress paths; direct store consumers are out of scope
|
|
87
|
+
* for the archive invariant.
|
|
88
|
+
*/
|
|
89
|
+
archive(threadId: ThreadId, tenantId: TenantId): Promise<Thread>;
|
|
90
|
+
/**
|
|
91
|
+
* Hard-delete a Thread record. Rejects with {@link ThreadNotEmptyError}
|
|
92
|
+
* (`op: 'delete'`) when ANY Session still references the Thread —
|
|
93
|
+
* deletion is stricter than archival, which tolerates quiescent sessions.
|
|
94
|
+
* Callers must first delete or archive-and-tombstone every attached
|
|
95
|
+
* session (via {@link SessionStore.deleteSession}) before invoking.
|
|
96
|
+
*
|
|
97
|
+
* The session scan runs unconditionally, so orphaned sessions pointing at
|
|
98
|
+
* a missing thread are still detected and reject the delete. Idempotent
|
|
99
|
+
* for genuinely absent threads (no sessions, no thread record) — missing
|
|
100
|
+
* thread + empty session list is a no-op at the store layer. Convention
|
|
101
|
+
* #5: deny-by-default; no implicit cascade into SessionStore.
|
|
102
|
+
*/
|
|
103
|
+
delete(threadId: ThreadId, tenantId: TenantId): Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/manager/thread/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAElF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;CACnC;AAoBD,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;gBAE5B,IAAI,EAAE,iBAAiB;IAInC,oFAAoF;IACpF,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAIvE,sEAAsE;IACtE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAInE;;;;OAIG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,sEAAsE;IACtE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAI1E;;;;;;;;OAQG;IACG,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAW1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAyCtE;;;;;;;;;;;;OAYG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAanE"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThreadManager — thin orchestrator over {@link ThreadStore} and
|
|
3
|
+
* {@link SessionStore}.
|
|
4
|
+
*
|
|
5
|
+
* Owns user-facing lifecycle operations on the Thread topic layer plus the
|
|
6
|
+
* archive-gate contract enforced at session-creation ingress sites.
|
|
7
|
+
*
|
|
8
|
+
* Phase 2.6 wired `ThreadManager.requireOpen` into three ingress paths:
|
|
9
|
+
* - {@link AgentManager.provisionSpawn} (child session creation)
|
|
10
|
+
* - `executeSingleHandoff` (recipient session creation)
|
|
11
|
+
* - `executeBroadcastHandoff` (N recipient sessions per fan-out)
|
|
12
|
+
* Those call sites depend on this manager, so the one-method indirection
|
|
13
|
+
* stopped being "structural overhead" the moment archive/delete needed the
|
|
14
|
+
* session-presence cross-check anyway.
|
|
15
|
+
*
|
|
16
|
+
* Archive + delete require cross-store preconditions (session-presence
|
|
17
|
+
* checks) — enforced here where both stores are in scope. The stores
|
|
18
|
+
* themselves stay unaware of each other's layout (Convention #0), which is
|
|
19
|
+
* why the gate lives at the manager layer rather than as a universal store
|
|
20
|
+
* interceptor (see `archive` JSDoc for the direct-store-bypass boundary).
|
|
21
|
+
*/
|
|
22
|
+
import { THREAD_NOT_EMPTY_SAMPLE_LIMIT, ThreadClosedError, ThreadNotEmptyError, } from '../../session/errors.js';
|
|
23
|
+
/**
|
|
24
|
+
* Session statuses that block Thread archival. A session in any of these
|
|
25
|
+
* states has live work in-flight (mid-run, mid-handoff, blocked on human
|
|
26
|
+
* input, or orchestrating a broadcast merge) — freezing the Thread while any
|
|
27
|
+
* of them are active would strand resumable work.
|
|
28
|
+
*
|
|
29
|
+
* `idle`, `failed`, and `archived` are archival-compatible: they are
|
|
30
|
+
* quiescent or already-terminal, so a newly-frozen Thread can safely contain
|
|
31
|
+
* them. This list mirrors the `SessionStatus` discriminants that represent
|
|
32
|
+
* "not-yet-done" work (session-hierarchy.md §5.1).
|
|
33
|
+
*/
|
|
34
|
+
const ARCHIVAL_BLOCKING_STATUSES = new Set([
|
|
35
|
+
'active',
|
|
36
|
+
'locked',
|
|
37
|
+
'awaiting_hitl',
|
|
38
|
+
'awaiting_merge',
|
|
39
|
+
]);
|
|
40
|
+
export class ThreadManager {
|
|
41
|
+
deps;
|
|
42
|
+
constructor(deps) {
|
|
43
|
+
this.deps = deps;
|
|
44
|
+
}
|
|
45
|
+
/** Persist a new Thread. Thin passthrough for uniformity at the manager surface. */
|
|
46
|
+
create(params, tenantId) {
|
|
47
|
+
return this.deps.threadStore.createThread(params, tenantId);
|
|
48
|
+
}
|
|
49
|
+
/** Read a Thread by id; returns `null` when absent for the tenant. */
|
|
50
|
+
get(threadId, tenantId) {
|
|
51
|
+
return this.deps.threadStore.getThread(threadId, tenantId);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* CAS update on a Thread. Propagates {@link import('../../session/errors.js').StaleThreadError}
|
|
55
|
+
* from the store on `ownerVersion` mismatch — callers re-read, re-apply,
|
|
56
|
+
* and retry.
|
|
57
|
+
*/
|
|
58
|
+
update(thread, tenantId) {
|
|
59
|
+
return this.deps.threadStore.updateThread(thread, tenantId);
|
|
60
|
+
}
|
|
61
|
+
/** List Threads under a Project, ordered by `createdAt` ascending. */
|
|
62
|
+
list(projectId, tenantId) {
|
|
63
|
+
return this.deps.threadStore.listThreads(projectId, tenantId);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Load a Thread and assert it is in `'open'` state. Used by the spawn path
|
|
67
|
+
* as a precondition — a SubSession cannot be created under an archived
|
|
68
|
+
* Thread. Throws on absence and on archival; returns the loaded Thread on
|
|
69
|
+
* success so callers can avoid the second round-trip.
|
|
70
|
+
*
|
|
71
|
+
* Convention #5: deny-by-default. A missing Thread is a hard error, not a
|
|
72
|
+
* silent "assume archived".
|
|
73
|
+
*/
|
|
74
|
+
async requireOpen(threadId, tenantId) {
|
|
75
|
+
const thread = await this.deps.threadStore.getThread(threadId, tenantId);
|
|
76
|
+
if (!thread) {
|
|
77
|
+
throw new Error(`Thread ${threadId} not found`);
|
|
78
|
+
}
|
|
79
|
+
if (thread.status === 'archived') {
|
|
80
|
+
throw new ThreadClosedError({ threadId, op: 'require-open' });
|
|
81
|
+
}
|
|
82
|
+
return thread;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Flip a Thread to `'archived'` via CAS on {@link Thread.ownerVersion}.
|
|
86
|
+
*
|
|
87
|
+
* Preconditions (checked in order):
|
|
88
|
+
* 1. Thread exists for the tenant (throws on absence).
|
|
89
|
+
* 2. No attached Session is in a non-terminal state (see
|
|
90
|
+
* {@link ARCHIVAL_BLOCKING_STATUSES}). The presence check runs
|
|
91
|
+
* **before** the idempotent-archive short-circuit so that an already
|
|
92
|
+
* archived thread harboring a live session still surfaces as
|
|
93
|
+
* {@link ThreadNotEmptyError} rather than a silent success.
|
|
94
|
+
* 3. If the thread is already `'archived'` the method short-circuits
|
|
95
|
+
* without an `updateThread` write (idempotent re-archival). The
|
|
96
|
+
* returned record reflects the current persisted state.
|
|
97
|
+
*
|
|
98
|
+
* On a fresh archive transition the underlying
|
|
99
|
+
* {@link ThreadStore.updateThread} call commits with `ownerVersion + 1`.
|
|
100
|
+
* A {@link import('../../session/errors.js').StaleThreadError} from a
|
|
101
|
+
* concurrent writer propagates unchanged — the caller is expected to
|
|
102
|
+
* re-read + retry (mirrors the `updateThread` contract).
|
|
103
|
+
*
|
|
104
|
+
* Gate scope (Phase 2.6): `ThreadManager.requireOpen` is wired into
|
|
105
|
+
* `AgentManager.provisionSpawn` and both handoff flows, so the production
|
|
106
|
+
* ingress paths cannot attach new sessions under an archived thread.
|
|
107
|
+
* `SessionStore.createSession` / `updateSession` remain public and
|
|
108
|
+
* ungated at the store layer — a direct caller can still mutate a
|
|
109
|
+
* session after archival (the store has no `ThreadStore` handle by
|
|
110
|
+
* design; cross-store awareness lives in the manager). The defensive
|
|
111
|
+
* re-check above catches a smuggled live session on a subsequent
|
|
112
|
+
* archive call, but does not prevent the direct-store write from
|
|
113
|
+
* landing. That's an acceptable boundary — kernel callers must go
|
|
114
|
+
* through the ingress paths; direct store consumers are out of scope
|
|
115
|
+
* for the archive invariant.
|
|
116
|
+
*/
|
|
117
|
+
async archive(threadId, tenantId) {
|
|
118
|
+
const thread = await this.deps.threadStore.getThread(threadId, tenantId);
|
|
119
|
+
if (!thread) {
|
|
120
|
+
throw new Error(`Thread ${threadId} not found`);
|
|
121
|
+
}
|
|
122
|
+
// Always enforce the blocking-session invariant — even on re-archival.
|
|
123
|
+
// If the thread is already archived but somehow gained a live session
|
|
124
|
+
// (direct store mutation, concurrent spawn before a write-barrier
|
|
125
|
+
// existed), surfacing that via ThreadNotEmptyError is more useful to
|
|
126
|
+
// operators than a silent idempotent success.
|
|
127
|
+
const sessions = await this.deps.sessionStore.listSessions(threadId, tenantId);
|
|
128
|
+
const blocking = sessions.filter((s) => ARCHIVAL_BLOCKING_STATUSES.has(s.status));
|
|
129
|
+
if (blocking.length > 0) {
|
|
130
|
+
throw new ThreadNotEmptyError({
|
|
131
|
+
threadId,
|
|
132
|
+
tenantId,
|
|
133
|
+
op: 'archive',
|
|
134
|
+
blockingSessions: summarizeBlocking(blocking),
|
|
135
|
+
totalBlockingSessions: blocking.length,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
if (thread.status === 'archived') {
|
|
139
|
+
// Idempotent: already archived, no live sessions attached. Skip the
|
|
140
|
+
// write (updateThread would still bump ownerVersion for no semantic
|
|
141
|
+
// change).
|
|
142
|
+
return thread;
|
|
143
|
+
}
|
|
144
|
+
const next = { ...thread, status: 'archived' };
|
|
145
|
+
await this.deps.threadStore.updateThread(next, tenantId);
|
|
146
|
+
// updateThread advances ownerVersion + updatedAt; re-read so the returned
|
|
147
|
+
// record reflects the persisted state (callers rely on version monotonicity).
|
|
148
|
+
const reloaded = await this.deps.threadStore.getThread(threadId, tenantId);
|
|
149
|
+
if (!reloaded) {
|
|
150
|
+
throw new Error(`Thread ${threadId} vanished between archive and read-back`);
|
|
151
|
+
}
|
|
152
|
+
return reloaded;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Hard-delete a Thread record. Rejects with {@link ThreadNotEmptyError}
|
|
156
|
+
* (`op: 'delete'`) when ANY Session still references the Thread —
|
|
157
|
+
* deletion is stricter than archival, which tolerates quiescent sessions.
|
|
158
|
+
* Callers must first delete or archive-and-tombstone every attached
|
|
159
|
+
* session (via {@link SessionStore.deleteSession}) before invoking.
|
|
160
|
+
*
|
|
161
|
+
* The session scan runs unconditionally, so orphaned sessions pointing at
|
|
162
|
+
* a missing thread are still detected and reject the delete. Idempotent
|
|
163
|
+
* for genuinely absent threads (no sessions, no thread record) — missing
|
|
164
|
+
* thread + empty session list is a no-op at the store layer. Convention
|
|
165
|
+
* #5: deny-by-default; no implicit cascade into SessionStore.
|
|
166
|
+
*/
|
|
167
|
+
async delete(threadId, tenantId) {
|
|
168
|
+
const sessions = await this.deps.sessionStore.listSessions(threadId, tenantId);
|
|
169
|
+
if (sessions.length > 0) {
|
|
170
|
+
throw new ThreadNotEmptyError({
|
|
171
|
+
threadId,
|
|
172
|
+
tenantId,
|
|
173
|
+
op: 'delete',
|
|
174
|
+
blockingSessions: summarizeBlocking(sessions),
|
|
175
|
+
totalBlockingSessions: sessions.length,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
await this.deps.threadStore.deleteThread(threadId, tenantId);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function summarizeBlocking(sessions) {
|
|
182
|
+
return sessions
|
|
183
|
+
.slice(0, THREAD_NOT_EMPTY_SAMPLE_LIMIT)
|
|
184
|
+
.map((s) => ({ sessionId: s.id, status: s.status }));
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../src/manager/thread/lifecycle.ts"],"names":[],"mappings":"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"}
|
package/dist/rag/retriever.js
CHANGED
|
@@ -38,10 +38,10 @@ export class DefaultRetriever {
|
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
40
|
expandQuery(query) {
|
|
41
|
-
if (!query.
|
|
41
|
+
if (!query.recentMessages || query.recentMessages.length === 0) {
|
|
42
42
|
return query.text;
|
|
43
43
|
}
|
|
44
|
-
const recentContext = query.
|
|
44
|
+
const recentContext = query.recentMessages.slice(-3).join(' ');
|
|
45
45
|
return `${query.text}\n\nContext: ${recentContext}`;
|
|
46
46
|
}
|
|
47
47
|
async vectorSearch(query, scope, knowledgeBaseId, config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/run/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAEjF,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,oBAAoB,CAAA;AAW/D,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"reporter.d.ts","sourceRoot":"","sources":["../../src/run/reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAEjF,OAAO,EAAE,KAAK,MAAM,EAAiB,MAAM,oBAAoB,CAAA;AAW/D,MAAM,WAAW,WAAW;IAC3B,QAAQ,EAAE,gBAAgB,CAAA;IAC1B,OAAO,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAA;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,WAAW,CAwOpE"}
|