@namzu/sdk 0.2.0 → 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 +53 -2
- package/dist/agents/ReactiveAgent.d.ts.map +1 -1
- package/dist/agents/ReactiveAgent.js +3 -2
- package/dist/agents/ReactiveAgent.js.map +1 -1
- package/dist/agents/SupervisorAgent.d.ts.map +1 -1
- package/dist/agents/SupervisorAgent.js +5 -2
- 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/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 +4 -3
- 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/contracts/api.d.ts +6 -38
- 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 -5
- 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/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/manager/agent/__tests__/lifecycle.test.js +27 -13
- package/dist/manager/agent/__tests__/lifecycle.test.js.map +1 -1
- package/dist/manager/agent/lifecycle.d.ts +9 -0
- package/dist/manager/agent/lifecycle.d.ts.map +1 -1
- package/dist/manager/agent/lifecycle.js +93 -31
- 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 +3 -1
- package/dist/manager/run/persistence.d.ts.map +1 -1
- package/dist/manager/run/persistence.js +5 -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/runtime/query/__tests__/context.test.js +8 -7
- package/dist/runtime/query/__tests__/context.test.js.map +1 -1
- 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 +12 -21
- package/dist/runtime/query/context.d.ts.map +1 -1
- package/dist/runtime/query/context.js +3 -1
- package/dist/runtime/query/context.js.map +1 -1
- package/dist/runtime/query/index.d.ts +13 -15
- package/dist/runtime/query/index.d.ts.map +1 -1
- package/dist/runtime/query/index.js +1 -0
- package/dist/runtime/query/index.js.map +1 -1
- package/dist/session/__tests__/integration/_fixtures.d.ts +11 -4
- package/dist/session/__tests__/integration/_fixtures.d.ts.map +1 -1
- package/dist/session/__tests__/integration/_fixtures.js +23 -6
- package/dist/session/__tests__/integration/_fixtures.js.map +1 -1
- 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.js +13 -6
- package/dist/session/__tests__/integration/capacity-caps.test.js.map +1 -1
- package/dist/session/__tests__/integration/e2e-spawn.test.js +14 -2
- package/dist/session/__tests__/integration/e2e-spawn.test.js.map +1 -1
- package/dist/session/__tests__/integration/event-stream-ordering.test.js +14 -7
- package/dist/session/__tests__/integration/event-stream-ordering.test.js.map +1 -1
- package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js +26 -14
- package/dist/session/__tests__/integration/handoff-broadcast-e2e.test.js.map +1 -1
- package/dist/session/__tests__/integration/handoff-illegal-transition.test.js +30 -20
- package/dist/session/__tests__/integration/handoff-illegal-transition.test.js.map +1 -1
- package/dist/session/__tests__/integration/handoff-single-e2e.test.js +25 -9
- package/dist/session/__tests__/integration/handoff-single-e2e.test.js.map +1 -1
- package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js +11 -10
- package/dist/session/__tests__/integration/hierarchy-lifecycle.test.js.map +1 -1
- package/dist/session/__tests__/integration/prev-artifact-dag.test.js +5 -4
- package/dist/session/__tests__/integration/prev-artifact-dag.test.js.map +1 -1
- package/dist/session/__tests__/integration/retention-archive.test.js +3 -2
- package/dist/session/__tests__/integration/retention-archive.test.js.map +1 -1
- 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.js +2 -1
- package/dist/session/__tests__/integration/summary-materialization-e2e.test.js.map +1 -1
- package/dist/session/__tests__/integration/tenant-isolation.test.js +14 -5
- package/dist/session/__tests__/integration/tenant-isolation.test.js.map +1 -1
- package/dist/session/errors.d.ts +79 -0
- package/dist/session/errors.d.ts.map +1 -1
- package/dist/session/errors.js +57 -0
- package/dist/session/errors.js.map +1 -1
- package/dist/session/handoff/__tests__/broadcast.test.js +49 -31
- package/dist/session/handoff/__tests__/broadcast.test.js.map +1 -1
- package/dist/session/handoff/__tests__/capacity.test.js +21 -18
- package/dist/session/handoff/__tests__/capacity.test.js.map +1 -1
- package/dist/session/handoff/__tests__/single.test.js +39 -30
- package/dist/session/handoff/__tests__/single.test.js.map +1 -1
- package/dist/session/handoff/assignment.d.ts +13 -1
- package/dist/session/handoff/assignment.d.ts.map +1 -1
- package/dist/session/handoff/broadcast.d.ts +7 -0
- package/dist/session/handoff/broadcast.d.ts.map +1 -1
- package/dist/session/handoff/broadcast.js +16 -1
- package/dist/session/handoff/broadcast.js.map +1 -1
- package/dist/session/handoff/single.d.ts +7 -0
- package/dist/session/handoff/single.d.ts.map +1 -1
- package/dist/session/handoff/single.js +13 -1
- package/dist/session/handoff/single.js.map +1 -1
- package/dist/session/hierarchy/__tests__/session.test.js +2 -0
- package/dist/session/hierarchy/__tests__/session.test.js.map +1 -1
- package/dist/session/hierarchy/index.d.ts +1 -0
- package/dist/session/hierarchy/index.d.ts.map +1 -1
- package/dist/session/hierarchy/index.js.map +1 -1
- package/dist/session/hierarchy/session.d.ts +15 -3
- package/dist/session/hierarchy/session.d.ts.map +1 -1
- package/dist/session/hierarchy/session.js.map +1 -1
- 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/migration/id-prefix.d.ts +8 -13
- package/dist/session/migration/id-prefix.d.ts.map +1 -1
- package/dist/session/migration/id-prefix.js +8 -13
- package/dist/session/migration/id-prefix.js.map +1 -1
- package/dist/session/retention/__tests__/archive.test.js +3 -2
- package/dist/session/retention/__tests__/archive.test.js.map +1 -1
- package/dist/session/summary/__tests__/materialize.test.js +4 -3
- package/dist/session/summary/__tests__/materialize.test.js.map +1 -1
- 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.js +32 -5
- package/dist/store/session/__tests__/disk.test.js.map +1 -1
- package/dist/store/session/__tests__/memory.test.js +50 -9
- package/dist/store/session/__tests__/memory.test.js.map +1 -1
- package/dist/store/session/disk.d.ts +2 -1
- package/dist/store/session/disk.d.ts.map +1 -1
- package/dist/store/session/disk.js +61 -0
- package/dist/store/session/disk.js.map +1 -1
- package/dist/store/session/index.d.ts.map +1 -1
- package/dist/store/session/index.js +3 -4
- package/dist/store/session/index.js.map +1 -1
- package/dist/store/session/memory.d.ts +2 -1
- package/dist/store/session/memory.d.ts.map +1 -1
- package/dist/store/session/memory.js +13 -0
- package/dist/store/session/memory.js.map +1 -1
- 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/types/agent/base.d.ts +17 -21
- 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 +18 -11
- package/dist/types/agent/task.d.ts.map +1 -1
- package/dist/types/ids/index.d.ts +5 -9
- package/dist/types/ids/index.d.ts.map +1 -1
- package/dist/types/ids/index.js +4 -4
- package/dist/types/ids/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 +6 -5
- package/dist/types/run/config.d.ts.map +1 -1
- package/dist/types/run/metadata.d.ts +5 -18
- package/dist/types/run/metadata.d.ts.map +1 -1
- package/dist/types/session/ids.d.ts +4 -13
- package/dist/types/session/ids.d.ts.map +1 -1
- package/dist/types/session/ids.js +3 -6
- package/dist/types/session/ids.js.map +1 -1
- package/dist/types/session/index.d.ts +1 -1
- package/dist/types/session/index.d.ts.map +1 -1
- package/dist/types/session/store.d.ts +32 -10
- package/dist/types/session/store.d.ts.map +1 -1
- package/dist/types/session/store.js +3 -8
- package/dist/types/session/store.js.map +1 -1
- 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 +1 -12
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +3 -23
- package/dist/utils/id.js.map +1 -1
- package/package.json +6 -11
- package/src/agents/ReactiveAgent.ts +3 -2
- package/src/agents/SupervisorAgent.ts +5 -2
- package/src/bridge/a2a/index.ts +0 -1
- package/src/bridge/a2a/message.ts +0 -32
- package/src/bridge/a2a/task.ts +8 -7
- package/src/contracts/api.ts +6 -42
- package/src/contracts/ids.ts +1 -1
- package/src/contracts/index.ts +2 -8
- package/src/contracts/schemas.ts +1 -8
- package/src/index.ts +0 -4
- package/src/manager/agent/__tests__/lifecycle.test.ts +34 -13
- package/src/manager/agent/lifecycle.ts +114 -35
- package/src/manager/index.ts +3 -0
- package/src/manager/run/persistence.ts +7 -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/runtime/query/__tests__/context.test.ts +9 -8
- package/src/runtime/query/context-cache.ts +4 -4
- package/src/runtime/query/context.ts +15 -22
- package/src/runtime/query/index.ts +15 -16
- package/src/session/__tests__/integration/_fixtures.ts +36 -8
- package/src/session/__tests__/integration/archive-gate.test.ts +288 -0
- package/src/session/__tests__/integration/capacity-caps.test.ts +13 -6
- package/src/session/__tests__/integration/e2e-spawn.test.ts +20 -2
- package/src/session/__tests__/integration/event-stream-ordering.test.ts +14 -7
- package/src/session/__tests__/integration/handoff-broadcast-e2e.test.ts +39 -13
- package/src/session/__tests__/integration/handoff-illegal-transition.test.ts +54 -19
- package/src/session/__tests__/integration/handoff-single-e2e.test.ts +40 -9
- package/src/session/__tests__/integration/hierarchy-lifecycle.test.ts +13 -10
- package/src/session/__tests__/integration/prev-artifact-dag.test.ts +12 -5
- package/src/session/__tests__/integration/retention-archive.test.ts +5 -3
- package/src/session/__tests__/integration/spawn-rollback.test.ts +313 -0
- package/src/session/__tests__/integration/summary-materialization-e2e.test.ts +4 -2
- package/src/session/__tests__/integration/tenant-isolation.test.ts +16 -6
- package/src/session/errors.ts +89 -0
- package/src/session/handoff/__tests__/broadcast.test.ts +56 -28
- package/src/session/handoff/__tests__/capacity.test.ts +26 -20
- package/src/session/handoff/__tests__/single.test.ts +45 -28
- package/src/session/handoff/assignment.ts +13 -1
- package/src/session/handoff/broadcast.ts +26 -1
- package/src/session/handoff/single.ts +23 -1
- package/src/session/hierarchy/__tests__/session.test.ts +9 -1
- package/src/session/hierarchy/index.ts +1 -0
- package/src/session/hierarchy/session.ts +15 -3
- package/src/session/hierarchy/thread.ts +55 -0
- package/src/session/migration/id-prefix.ts +8 -13
- package/src/session/retention/__tests__/archive.test.ts +5 -3
- package/src/session/summary/__tests__/materialize.test.ts +6 -4
- package/src/store/index.ts +0 -3
- package/src/store/session/__tests__/disk.test.ts +57 -6
- package/src/store/session/__tests__/memory.test.ts +84 -9
- package/src/store/session/disk.ts +57 -1
- package/src/store/session/index.ts +3 -4
- package/src/store/session/memory.ts +13 -1
- 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 +17 -21
- package/src/types/agent/factory.ts +8 -3
- package/src/types/agent/task.ts +19 -11
- package/src/types/ids/index.ts +8 -15
- package/src/types/rag/retrieval.ts +4 -3
- package/src/types/run/config.ts +6 -5
- package/src/types/run/metadata.ts +5 -18
- package/src/types/session/ids.ts +4 -15
- package/src/types/session/index.ts +1 -2
- package/src/types/session/store.ts +34 -11
- package/src/types/thread/index.ts +5 -0
- package/src/types/thread/store.ts +92 -0
- package/src/utils/id.ts +3 -24
- package/dist/store/conversation/memory.d.ts +0 -43
- package/dist/store/conversation/memory.d.ts.map +0 -1
- package/dist/store/conversation/memory.js +0 -108
- package/dist/store/conversation/memory.js.map +0 -1
- package/dist/types/conversation/index.d.ts +0 -14
- 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 -144
- package/src/types/conversation/index.ts +0 -15
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SessionStore — canonical persistence contract for the session hierarchy.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* (Convention #17). Cross-tenant access rejects with `TenantIsolationError`.
|
|
8
|
-
*
|
|
9
|
-
* Minimum surface — covers downstream phases 4 (handoff), 5 (summary), and
|
|
10
|
-
* 6 (sub-session spawn) plus the drill primitive (§14.3). Extensions land in
|
|
11
|
-
* paired phases alongside their consumers (Convention #0: no speculative API).
|
|
4
|
+
* Every accessor takes explicit {@link TenantId} (Convention #17). Cross-tenant
|
|
5
|
+
* access rejects with `TenantIsolationError`. Convention #0: no speculative
|
|
6
|
+
* API — extensions land alongside their consumers.
|
|
12
7
|
*/
|
|
13
8
|
export {};
|
|
14
9
|
//# sourceMappingURL=store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/types/session/store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/types/session/store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/thread/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/thread/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,yEAAyE;AACzE,yCAAyC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThreadStore — canonical persistence contract for the Thread topic layer
|
|
3
|
+
* (Project → **Thread** → Session → SubSession → Run).
|
|
4
|
+
*
|
|
5
|
+
* Threads are pure containers (Phase 0 decision B.1). They have no own
|
|
6
|
+
* message stream and no fan-in `deriveStatus()` — status is owner-managed
|
|
7
|
+
* (`'open' | 'archived'`). Every accessor takes explicit {@link TenantId};
|
|
8
|
+
* cross-tenant access rejects with `TenantIsolationError` (Convention #17).
|
|
9
|
+
*
|
|
10
|
+
* Read accessors return `null` when the resource does not exist for the
|
|
11
|
+
* supplied tenant (deny-by-default surface). Callers branch on missing
|
|
12
|
+
* explicitly — no fallback substitution.
|
|
13
|
+
*
|
|
14
|
+
* `deleteThread` is intentionally a dumb record-delete at this layer:
|
|
15
|
+
* it does NOT walk session ownership. The "reject when sessions attached"
|
|
16
|
+
* precondition lives in {@link import('../../manager/thread/lifecycle.js').ThreadManager}
|
|
17
|
+
* where both stores are in scope. Keeping ThreadStore free of cross-store
|
|
18
|
+
* awareness preserves the single-boundary ownership boundary that Phase 2
|
|
19
|
+
* has just introduced for this layer (Convention #0).
|
|
20
|
+
*/
|
|
21
|
+
import type { Thread } from '../../session/hierarchy/thread.js';
|
|
22
|
+
import type { TenantId } from '../ids/index.js';
|
|
23
|
+
import type { ProjectId, ThreadId } from '../session/ids.js';
|
|
24
|
+
/**
|
|
25
|
+
* Params for {@link ThreadStore.createThread}. The store owns id generation,
|
|
26
|
+
* `ownerVersion` initialization (0 at create), and timestamps.
|
|
27
|
+
*/
|
|
28
|
+
export interface CreateThreadParams {
|
|
29
|
+
projectId: ProjectId;
|
|
30
|
+
/**
|
|
31
|
+
* User-facing display label. Not unique within the project — see
|
|
32
|
+
* {@link Thread} JSDoc. Empty strings are permitted; callers that require
|
|
33
|
+
* a label should validate at the API layer.
|
|
34
|
+
*/
|
|
35
|
+
title: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Canonical persistence contract for the Thread layer. Every accessor takes
|
|
39
|
+
* explicit `tenantId`; cross-tenant reads/writes reject with
|
|
40
|
+
* `TenantIsolationError` (`session/errors.ts`, Convention #17).
|
|
41
|
+
*/
|
|
42
|
+
export interface ThreadStore {
|
|
43
|
+
/**
|
|
44
|
+
* Persist a new Thread under the given project. Returns the minted
|
|
45
|
+
* {@link Thread} with `ownerVersion: 0` and freshly-generated
|
|
46
|
+
* {@link ThreadId}. Callers must ensure the parent project exists and
|
|
47
|
+
* belongs to the same tenant — the store does not validate project
|
|
48
|
+
* ownership (that is a cross-store precondition owned by the manager).
|
|
49
|
+
*/
|
|
50
|
+
createThread(params: CreateThreadParams, tenantId: TenantId): Promise<Thread>;
|
|
51
|
+
/**
|
|
52
|
+
* Read a Thread by id. Returns `null` when absent. Cross-tenant reads
|
|
53
|
+
* reject with `TenantIsolationError`.
|
|
54
|
+
*/
|
|
55
|
+
getThread(threadId: ThreadId, tenantId: TenantId): Promise<Thread | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Persist a mutation to a Thread record. CAS on `ownerVersion`: if the
|
|
58
|
+
* supplied `thread.ownerVersion` does not match the persisted version,
|
|
59
|
+
* rejects with `StaleThreadError`. On success the write commits with
|
|
60
|
+
* `ownerVersion + 1` and a refreshed `updatedAt`.
|
|
61
|
+
*
|
|
62
|
+
* Archival transition (`status: 'open' → 'archived'`) shares this path;
|
|
63
|
+
* the caller is responsible for verifying that no non-terminal Sessions
|
|
64
|
+
* are attached before flipping (see ThreadManager.archiveThread).
|
|
65
|
+
*/
|
|
66
|
+
updateThread(thread: Thread, tenantId: TenantId): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Hard-delete a Thread record. Idempotent — absent threads succeed as a
|
|
69
|
+
* no-op. Rejects with `TenantIsolationError` on cross-tenant access.
|
|
70
|
+
*
|
|
71
|
+
* **Does NOT cascade to child Sessions** — the caller (typically
|
|
72
|
+
* ThreadManager) enforces the precondition that no Sessions reference
|
|
73
|
+
* this thread. Convention #5: deny-by-default, no implicit cascade.
|
|
74
|
+
*/
|
|
75
|
+
deleteThread(threadId: ThreadId, tenantId: TenantId): Promise<void>;
|
|
76
|
+
/**
|
|
77
|
+
* List all Threads under a project for the given tenant, ordered by
|
|
78
|
+
* `createdAt` ascending. Returns an empty array when none exist.
|
|
79
|
+
* Cross-tenant reads reject with `TenantIsolationError`.
|
|
80
|
+
*
|
|
81
|
+
* The return shape is a concrete snapshot — callers that mutate the
|
|
82
|
+
* result array do not affect store state.
|
|
83
|
+
*/
|
|
84
|
+
listThreads(projectId: ProjectId, tenantId: TenantId): Promise<readonly Thread[]>;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/types/thread/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAA;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5D;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,SAAS,CAAA;IACpB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAE7E;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAEzE;;;;;;;;;OASG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE/D;;;;;;;OAOG;IACH,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEnE;;;;;;;OAOG;IACH,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAAA;CACjF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ThreadStore — canonical persistence contract for the Thread topic layer
|
|
3
|
+
* (Project → **Thread** → Session → SubSession → Run).
|
|
4
|
+
*
|
|
5
|
+
* Threads are pure containers (Phase 0 decision B.1). They have no own
|
|
6
|
+
* message stream and no fan-in `deriveStatus()` — status is owner-managed
|
|
7
|
+
* (`'open' | 'archived'`). Every accessor takes explicit {@link TenantId};
|
|
8
|
+
* cross-tenant access rejects with `TenantIsolationError` (Convention #17).
|
|
9
|
+
*
|
|
10
|
+
* Read accessors return `null` when the resource does not exist for the
|
|
11
|
+
* supplied tenant (deny-by-default surface). Callers branch on missing
|
|
12
|
+
* explicitly — no fallback substitution.
|
|
13
|
+
*
|
|
14
|
+
* `deleteThread` is intentionally a dumb record-delete at this layer:
|
|
15
|
+
* it does NOT walk session ownership. The "reject when sessions attached"
|
|
16
|
+
* precondition lives in {@link import('../../manager/thread/lifecycle.js').ThreadManager}
|
|
17
|
+
* where both stores are in scope. Keeping ThreadStore free of cross-store
|
|
18
|
+
* awareness preserves the single-boundary ownership boundary that Phase 2
|
|
19
|
+
* has just introduced for this layer (Convention #0).
|
|
20
|
+
*/
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/types/thread/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG"}
|
package/dist/utils/id.d.ts
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import type { ActivityId, AdvisoryCallId, AdvisoryId, CheckpointId, ChunkId, ConnectorId, ConnectorInstanceId, CredentialId, DeliverableId, DocumentId, EmergencySaveId, EnvironmentId, ExecutionContextId, HandoffId, KnowledgeBaseId, MCPClientId, MCPServerId, MCPSessionId, MemoryId, MessageId, PlanId, PluginId, ProjectId, RunId, SandboxId, SessionId, SubSessionId, SummaryId, TaskId, TenantId, ThreadId, ToolCallId, WorkspaceId } from '../types/ids/index.js';
|
|
2
|
-
/**
|
|
3
|
-
* @deprecated Prefer {@link generateProjectId}. `ThreadId` is an alias of
|
|
4
|
-
* `ProjectId` during the 0.2.x migration window; this helper emits the new
|
|
5
|
-
* `prj_` prefix and will be removed in 0.3.0. See session-hierarchy.md §13.
|
|
6
|
-
*/
|
|
7
|
-
export declare function generateThreadId(): ThreadId;
|
|
8
2
|
export declare function generateProjectId(): ProjectId;
|
|
3
|
+
export declare function generateThreadId(): ThreadId;
|
|
9
4
|
export declare function generateRunId(): RunId;
|
|
10
5
|
export declare function generateMessageId(): MessageId;
|
|
11
6
|
export declare function generateSessionId(): SessionId;
|
|
@@ -37,12 +32,6 @@ export declare function generateSubSessionId(): SubSessionId;
|
|
|
37
32
|
export declare function generateSummaryId(): SummaryId;
|
|
38
33
|
export declare function generateHandoffId(): HandoffId;
|
|
39
34
|
export declare function generateDeliverableId(): DeliverableId;
|
|
40
|
-
/**
|
|
41
|
-
* @deprecated Parses either the legacy `thd_*` prefix or the new `prj_*`
|
|
42
|
-
* prefix during the 0.2.x migration window. 0.3.x will only accept `prj_*`.
|
|
43
|
-
* See session-hierarchy.md §13.3.1.
|
|
44
|
-
*/
|
|
45
|
-
export declare function parseThreadId(raw: string): ThreadId;
|
|
46
35
|
export declare function parseProjectId(raw: string): ProjectId;
|
|
47
36
|
export declare function parseRunId(raw: string): RunId;
|
|
48
37
|
export declare function parseConnectorInstanceId(raw: string): ConnectorInstanceId;
|
package/dist/utils/id.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,QAAQ,EACR,SAAS,EACT,KAAK,EACL,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,EACX,MAAM,uBAAuB,CAAA;AAsB9B
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACX,UAAU,EACV,cAAc,EACd,UAAU,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,UAAU,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,eAAe,EACf,WAAW,EACX,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,MAAM,EACN,QAAQ,EACR,SAAS,EACT,KAAK,EACL,SAAS,EACT,SAAS,EACT,YAAY,EACZ,SAAS,EACT,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,WAAW,EACX,MAAM,uBAAuB,CAAA;AAsB9B,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C;AAED,wBAAgB,aAAa,IAAI,KAAK,CAErC;AAED,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAE/C;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAE/C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,uBAAuB,IAAI,eAAe,CAEzD;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAE/C;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,wBAAgB,mBAAmB,IAAI,WAAW,CAEjD;AAED,wBAAgB,2BAA2B,IAAI,mBAAmB,CAEjE;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAEnD;AAED,wBAAgB,0BAA0B,IAAI,kBAAkB,CAE/D;AAED,wBAAgB,mBAAmB,IAAI,WAAW,CAEjD;AAED,wBAAgB,mBAAmB,IAAI,WAAW,CAEjD;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAEnD;AAED,wBAAgB,qBAAqB,IAAI,aAAa,CAErD;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAEnD;AAED,wBAAgB,kBAAkB,IAAI,UAAU,CAE/C;AAED,wBAAgB,sBAAsB,IAAI,cAAc,CAEvD;AAED,wBAAgB,uBAAuB,IAAI,eAAe,CAEzD;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C;AAED,wBAAgB,gBAAgB,IAAI,QAAQ,CAE3C;AAED,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,mBAAmB,IAAI,WAAW,CAEjD;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAEnD;AAED,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,iBAAiB,IAAI,SAAS,CAE7C;AAED,wBAAgB,qBAAqB,IAAI,aAAa,CAErD;AASD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAErD;AACD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAE7C;AACD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAEzE;AACD,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAEnD;AACD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAErD"}
|
package/dist/utils/id.js
CHANGED
|
@@ -18,17 +18,12 @@ function generateId(prefix, length = 12) {
|
|
|
18
18
|
}
|
|
19
19
|
return `${prefix}${suffix}`;
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
22
|
-
* @deprecated Prefer {@link generateProjectId}. `ThreadId` is an alias of
|
|
23
|
-
* `ProjectId` during the 0.2.x migration window; this helper emits the new
|
|
24
|
-
* `prj_` prefix and will be removed in 0.3.0. See session-hierarchy.md §13.
|
|
25
|
-
*/
|
|
26
|
-
export function generateThreadId() {
|
|
27
|
-
return generateId('prj_');
|
|
28
|
-
}
|
|
29
21
|
export function generateProjectId() {
|
|
30
22
|
return generateId('prj_');
|
|
31
23
|
}
|
|
24
|
+
export function generateThreadId() {
|
|
25
|
+
return generateId('thd_');
|
|
26
|
+
}
|
|
32
27
|
export function generateRunId() {
|
|
33
28
|
return generateId('run_');
|
|
34
29
|
}
|
|
@@ -128,21 +123,6 @@ function parseId(raw, prefix, typeName) {
|
|
|
128
123
|
}
|
|
129
124
|
return raw;
|
|
130
125
|
}
|
|
131
|
-
/**
|
|
132
|
-
* @deprecated Parses either the legacy `thd_*` prefix or the new `prj_*`
|
|
133
|
-
* prefix during the 0.2.x migration window. 0.3.x will only accept `prj_*`.
|
|
134
|
-
* See session-hierarchy.md §13.3.1.
|
|
135
|
-
*/
|
|
136
|
-
export function parseThreadId(raw) {
|
|
137
|
-
if (raw.startsWith('prj_')) {
|
|
138
|
-
return raw;
|
|
139
|
-
}
|
|
140
|
-
if (raw.startsWith('thd_')) {
|
|
141
|
-
// Read-accept legacy prefix; a proper coercion pipeline lands in Phase 7.
|
|
142
|
-
return raw;
|
|
143
|
-
}
|
|
144
|
-
throw new Error(`Invalid ThreadId: expected "prj_" or "thd_" prefix, got "${raw}"`);
|
|
145
|
-
}
|
|
146
126
|
export function parseProjectId(raw) {
|
|
147
127
|
return parseId(raw, 'prj_', 'ProjectId');
|
|
148
128
|
}
|
package/dist/utils/id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAqCzC,MAAM,QAAQ,GAAG,sCAAsC,CAAA;AACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAA;AACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,YAAY,CAAA;AAEtE,SAAS,UAAU,CAAmB,MAAS,EAAE,MAAM,GAAG,EAAE;IAC3D,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,SAAS,GAAG,MAAM,CAAA;IACtB,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,SAAS,IAAI,CAAC;gBAAE,MAAK;YACzB,IAAI,IAAI,GAAG,gBAAgB,EAAE,CAAC;gBAC7B,MAAM,IAAI,QAAQ,CAAC,IAAI,GAAG,YAAY,CAAC,CAAA;gBACvC,SAAS,EAAE,CAAA;YACZ,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,GAAG,MAAM,GAAG,MAAM,EAAqB,CAAA;AAC/C,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@namzu/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Open-source AI agent SDK with a built-in runtime. Nothing between you and your agents.",
|
|
5
5
|
"license": "FSL-1.1-MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"types": "./dist/index.d.ts",
|
|
17
17
|
"exports": {
|
|
18
18
|
".": {
|
|
19
|
-
"
|
|
20
|
-
"
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js"
|
|
21
21
|
}
|
|
22
22
|
},
|
|
23
23
|
"files": [
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@biomejs/biome": "^1.9.4",
|
|
51
51
|
"@types/node": "^22.19.17",
|
|
52
|
+
"knip": "^6.4.1",
|
|
52
53
|
"typescript": "^5.5.0",
|
|
53
54
|
"vitest": "^2.0.0"
|
|
54
55
|
},
|
|
@@ -60,13 +61,7 @@
|
|
|
60
61
|
"format": "biome format --write src/",
|
|
61
62
|
"test": "vitest run --passWithNoTests",
|
|
62
63
|
"typecheck": "tsc --noEmit",
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"release:minor": "bash scripts/release.sh minor",
|
|
66
|
-
"release:major": "bash scripts/release.sh major",
|
|
67
|
-
"release:rc": "bash scripts/release.sh rc",
|
|
68
|
-
"release:beta": "bash scripts/release.sh beta",
|
|
69
|
-
"release:stable": "bash scripts/release.sh stable",
|
|
70
|
-
"release:dry": "bash scripts/release.sh patch --dry-run"
|
|
64
|
+
"knip": "knip",
|
|
65
|
+
"knip:production": "knip --production"
|
|
71
66
|
}
|
|
72
67
|
}
|
|
@@ -32,9 +32,9 @@ export class ReactiveAgent extends AbstractAgent<ReactiveAgentConfig, ReactiveAg
|
|
|
32
32
|
): Promise<ReactiveAgentResult> {
|
|
33
33
|
const startTime = Date.now()
|
|
34
34
|
|
|
35
|
-
if (!config.sessionId || !config.projectId || !config.tenantId) {
|
|
35
|
+
if (!config.sessionId || !config.threadId || !config.projectId || !config.tenantId) {
|
|
36
36
|
throw new Error(
|
|
37
|
-
'ReactiveAgent requires sessionId, projectId, and tenantId in config (session-hierarchy.md §12.1).',
|
|
37
|
+
'ReactiveAgent requires sessionId, threadId, projectId, and tenantId in config (session-hierarchy.md §12.1).',
|
|
38
38
|
)
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -61,6 +61,7 @@ export class ReactiveAgent extends AbstractAgent<ReactiveAgentConfig, ReactiveAg
|
|
|
61
61
|
agentName: this.metadata.name,
|
|
62
62
|
workingDirectory: input.workingDirectory,
|
|
63
63
|
sessionId: config.sessionId,
|
|
64
|
+
threadId: config.threadId,
|
|
64
65
|
projectId: config.projectId,
|
|
65
66
|
tenantId: config.tenantId,
|
|
66
67
|
parentRunId: config.parentRunId,
|
|
@@ -43,12 +43,13 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
|
|
|
43
43
|
const startTime = Date.now()
|
|
44
44
|
const runId = this.createRunId()
|
|
45
45
|
|
|
46
|
-
if (!config.sessionId || !config.projectId || !config.tenantId) {
|
|
46
|
+
if (!config.sessionId || !config.threadId || !config.projectId || !config.tenantId) {
|
|
47
47
|
throw new Error(
|
|
48
|
-
'SupervisorAgent requires sessionId, projectId, and tenantId in config (session-hierarchy.md §12.1).',
|
|
48
|
+
'SupervisorAgent requires sessionId, threadId, projectId, and tenantId in config (session-hierarchy.md §12.1).',
|
|
49
49
|
)
|
|
50
50
|
}
|
|
51
51
|
const sessionId = config.sessionId
|
|
52
|
+
const threadId = config.threadId
|
|
52
53
|
const projectId = config.projectId
|
|
53
54
|
const tenantId = config.tenantId
|
|
54
55
|
|
|
@@ -84,6 +85,7 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
|
|
|
84
85
|
},
|
|
85
86
|
factoryOptions: mergedFactoryOptions,
|
|
86
87
|
tenantId,
|
|
88
|
+
threadId,
|
|
87
89
|
sessionId,
|
|
88
90
|
projectId,
|
|
89
91
|
parentActor,
|
|
@@ -138,6 +140,7 @@ export class SupervisorAgent extends AbstractAgent<SupervisorAgentConfig, Superv
|
|
|
138
140
|
messages: input.messages,
|
|
139
141
|
signal: input.signal,
|
|
140
142
|
sessionId,
|
|
143
|
+
threadId,
|
|
141
144
|
projectId,
|
|
142
145
|
tenantId,
|
|
143
146
|
runId,
|
package/src/bridge/a2a/index.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { ThreadMessage } from '../../contracts/index.js'
|
|
2
1
|
import type { A2AMessage, A2AMessageRole, A2APart, TextPart } from '../../types/a2a/index.js'
|
|
3
2
|
import type { Message, MessageRole } from '../../types/message/index.js'
|
|
4
3
|
|
|
@@ -48,37 +47,6 @@ export function messageToA2A(msg: Message): A2AMessage {
|
|
|
48
47
|
}
|
|
49
48
|
}
|
|
50
49
|
|
|
51
|
-
export function threadMessageToA2A(msg: ThreadMessage): A2AMessage {
|
|
52
|
-
const parts: A2APart[] = []
|
|
53
|
-
|
|
54
|
-
if (msg.content) {
|
|
55
|
-
parts.push({ kind: 'text', text: msg.content })
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
if (msg.tool_calls) {
|
|
59
|
-
for (const tc of msg.tool_calls) {
|
|
60
|
-
parts.push({
|
|
61
|
-
kind: 'data',
|
|
62
|
-
data: {
|
|
63
|
-
toolCallId: tc.id,
|
|
64
|
-
name: tc.function.name,
|
|
65
|
-
arguments: tc.function.arguments,
|
|
66
|
-
},
|
|
67
|
-
mimeType: 'application/x-namzu-tool-call',
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (parts.length === 0) {
|
|
73
|
-
parts.push({ kind: 'text', text: '' })
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
return {
|
|
77
|
-
role: toA2ARole(msg.role),
|
|
78
|
-
parts,
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
50
|
export function extractTextFromA2AMessage(msg: A2AMessage): string {
|
|
83
51
|
return msg.parts
|
|
84
52
|
.filter((p): p is TextPart => p.kind === 'text')
|
package/src/bridge/a2a/task.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RUN_STATUS_TO_A2A, TERMINAL_STATES } from '../../constants/a2a/index.js'
|
|
2
|
-
import type { Run, RunConfig,
|
|
2
|
+
import type { Run, RunConfig, WireRunStatus } from '../../contracts/index.js'
|
|
3
3
|
import type {
|
|
4
4
|
A2AArtifact,
|
|
5
5
|
A2AMessage,
|
|
@@ -8,7 +8,8 @@ import type {
|
|
|
8
8
|
A2ATaskState,
|
|
9
9
|
A2ATaskStatus,
|
|
10
10
|
} from '../../types/a2a/index.js'
|
|
11
|
-
import {
|
|
11
|
+
import type { Message } from '../../types/message/index.js'
|
|
12
|
+
import { extractTextFromA2AMessage, messageToA2A } from './message.js'
|
|
12
13
|
|
|
13
14
|
export function isTerminalState(state: A2ATaskState): boolean {
|
|
14
15
|
return TERMINAL_STATES.has(state)
|
|
@@ -53,12 +54,12 @@ function buildArtifacts(run: Run): A2AArtifact[] | undefined {
|
|
|
53
54
|
]
|
|
54
55
|
}
|
|
55
56
|
|
|
56
|
-
export function runToA2ATask(run: Run, messages?: readonly
|
|
57
|
+
export function runToA2ATask(run: Run, messages?: readonly Message[]): A2ATask {
|
|
57
58
|
return {
|
|
58
59
|
id: run.id,
|
|
59
|
-
contextId: run.
|
|
60
|
+
contextId: run.project_id ?? undefined,
|
|
60
61
|
status: buildTaskStatus(run),
|
|
61
|
-
history: messages?.map(
|
|
62
|
+
history: messages?.map(messageToA2A),
|
|
62
63
|
artifacts: buildArtifacts(run),
|
|
63
64
|
metadata: {
|
|
64
65
|
agent_id: run.agent_id,
|
|
@@ -71,7 +72,7 @@ export function runToA2ATask(run: Run, messages?: readonly ThreadMessage[]): A2A
|
|
|
71
72
|
export interface CreateRunFromA2A {
|
|
72
73
|
readonly agentId: string
|
|
73
74
|
readonly input: string
|
|
74
|
-
readonly
|
|
75
|
+
readonly projectId?: string
|
|
75
76
|
readonly config: RunConfig
|
|
76
77
|
}
|
|
77
78
|
|
|
@@ -99,7 +100,7 @@ export function a2aMessageToCreateRun(
|
|
|
99
100
|
return {
|
|
100
101
|
agentId,
|
|
101
102
|
input,
|
|
102
|
-
|
|
103
|
+
projectId: params.contextId,
|
|
103
104
|
config,
|
|
104
105
|
}
|
|
105
106
|
}
|
package/src/contracts/api.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AgentCapabilities, AgentType } from '../types/agent/base.js'
|
|
2
2
|
import type { MessageRole } from '../types/message/index.js'
|
|
3
3
|
import type { StopReason } from '../types/run/events.js'
|
|
4
|
-
import type {
|
|
4
|
+
import type { ProjectId, RunId, SessionId } from './ids.js'
|
|
5
5
|
|
|
6
6
|
export type { MessageRole, StopReason, AgentType, AgentCapabilities }
|
|
7
7
|
|
|
@@ -27,14 +27,6 @@ export interface AgentInfo {
|
|
|
27
27
|
capabilities?: AgentCapabilities
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
export interface Thread {
|
|
31
|
-
id: ThreadId
|
|
32
|
-
created_at: ISOTimestamp
|
|
33
|
-
updated_at: ISOTimestamp
|
|
34
|
-
metadata: Record<string, string>
|
|
35
|
-
message_count: number
|
|
36
|
-
}
|
|
37
|
-
|
|
38
30
|
export interface ToolCallInfo {
|
|
39
31
|
id: string
|
|
40
32
|
type: 'function'
|
|
@@ -44,23 +36,6 @@ export interface ToolCallInfo {
|
|
|
44
36
|
}
|
|
45
37
|
}
|
|
46
38
|
|
|
47
|
-
export interface ThreadMessage {
|
|
48
|
-
id: MessageId
|
|
49
|
-
thread_id: ThreadId
|
|
50
|
-
role: MessageRole
|
|
51
|
-
content: string | null
|
|
52
|
-
created_at: ISOTimestamp
|
|
53
|
-
run_id?: RunId
|
|
54
|
-
tool_call_id?: string
|
|
55
|
-
tool_calls?: ToolCallInfo[]
|
|
56
|
-
metadata?: Record<string, unknown>
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface CreateThreadRequest {
|
|
60
|
-
metadata?: Record<string, string>
|
|
61
|
-
messages?: CreateMessageRequest[]
|
|
62
|
-
}
|
|
63
|
-
|
|
64
39
|
export interface CreateMessageRequest {
|
|
65
40
|
role: 'user'
|
|
66
41
|
content: string
|
|
@@ -71,14 +46,10 @@ export interface CreateMessageRequest {
|
|
|
71
46
|
* Wire-side run status for HTTP / A2A / SSE payloads.
|
|
72
47
|
*
|
|
73
48
|
* Distinct from the domain {@link import('../types/run/status.js').RunStatus}
|
|
74
|
-
* which models the kernel state machine
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* `
|
|
78
|
-
*
|
|
79
|
-
* Renamed from `RunStatus` to `WireRunStatus` in 0.2.0 to disambiguate from
|
|
80
|
-
* the domain enum; a deprecated alias `RunStatus = WireRunStatus` is retained
|
|
81
|
-
* at the bottom of this module for one migration window.
|
|
49
|
+
* which models the kernel state machine. The wire enum collapses domain
|
|
50
|
+
* variants onto the HTTP-facing shape (e.g. domain `succeeded` → wire
|
|
51
|
+
* `completed`; domain `awaiting_hitl*` → wire `running`; domain
|
|
52
|
+
* `awaiting_subsession` → wire `running`).
|
|
82
53
|
*/
|
|
83
54
|
export type WireRunStatus =
|
|
84
55
|
| 'queued'
|
|
@@ -96,7 +67,7 @@ export type RunStopReason = StopReason
|
|
|
96
67
|
|
|
97
68
|
export interface Run {
|
|
98
69
|
id: RunId
|
|
99
|
-
|
|
70
|
+
project_id: ProjectId | null
|
|
100
71
|
session_id?: SessionId
|
|
101
72
|
agent_id: string
|
|
102
73
|
agent_name?: string
|
|
@@ -234,10 +205,3 @@ export interface ApiError {
|
|
|
234
205
|
param?: string
|
|
235
206
|
}
|
|
236
207
|
}
|
|
237
|
-
|
|
238
|
-
/**
|
|
239
|
-
* @deprecated Use {@link WireRunStatus}. Alias retained for one migration
|
|
240
|
-
* window (0.2.x); scheduled for removal in 0.3.0. Renamed to disambiguate
|
|
241
|
-
* from the domain `RunStatus` in `../types/run/status.js`.
|
|
242
|
-
*/
|
|
243
|
-
export type RunStatus = WireRunStatus
|
package/src/contracts/ids.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type {
|
|
1
|
+
export type { ProjectId, RunId, MessageId, SessionId } from '../types/ids/index.js'
|
package/src/contracts/index.ts
CHANGED
|
@@ -10,14 +10,9 @@ export type {
|
|
|
10
10
|
ISOTimestamp,
|
|
11
11
|
AgentDefaults,
|
|
12
12
|
AgentInfo,
|
|
13
|
-
Thread,
|
|
14
13
|
ToolCallInfo,
|
|
15
|
-
ThreadMessage,
|
|
16
|
-
CreateThreadRequest,
|
|
17
14
|
CreateMessageRequest,
|
|
18
15
|
WireRunStatus,
|
|
19
|
-
/** @deprecated Use {@link WireRunStatus}. */
|
|
20
|
-
RunStatus,
|
|
21
16
|
RunStopReason,
|
|
22
17
|
Run,
|
|
23
18
|
RunHierarchyNode,
|
|
@@ -34,15 +29,14 @@ export type {
|
|
|
34
29
|
ApiError,
|
|
35
30
|
} from './api.js'
|
|
36
31
|
|
|
37
|
-
export type {
|
|
32
|
+
export type { ProjectId, RunId, MessageId, SessionId } from './ids.js'
|
|
38
33
|
|
|
39
34
|
export {
|
|
40
|
-
|
|
35
|
+
ProjectIdSchema,
|
|
41
36
|
RunIdSchema,
|
|
42
37
|
MessageIdSchema,
|
|
43
38
|
RunConfigSchema,
|
|
44
39
|
CreateMessageSchema,
|
|
45
|
-
CreateThreadSchema,
|
|
46
40
|
CreateRunSchema,
|
|
47
41
|
CreateStatelessRunSchema,
|
|
48
42
|
PaginationSchema,
|
package/src/contracts/schemas.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from 'zod'
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const ProjectIdSchema = z.string().regex(/^prj_[a-z0-9]+$/, 'Invalid project ID format')
|
|
4
4
|
export const RunIdSchema = z.string().regex(/^run_[a-z0-9]+$/, 'Invalid run ID format')
|
|
5
5
|
export const MessageIdSchema = z.string().regex(/^msg_[a-z0-9]+$/, 'Invalid message ID format')
|
|
6
6
|
|
|
@@ -24,13 +24,6 @@ export const CreateMessageSchema = z
|
|
|
24
24
|
})
|
|
25
25
|
.strict()
|
|
26
26
|
|
|
27
|
-
export const CreateThreadSchema = z
|
|
28
|
-
.object({
|
|
29
|
-
metadata: z.record(z.string()).optional(),
|
|
30
|
-
messages: z.array(CreateMessageSchema).optional(),
|
|
31
|
-
})
|
|
32
|
-
.strict()
|
|
33
|
-
|
|
34
27
|
export const CreateRunSchema = z
|
|
35
28
|
.object({
|
|
36
29
|
agent_id: z.string().min(1, 'agent_id is required'),
|
package/src/index.ts
CHANGED
|
@@ -42,7 +42,6 @@ export * from './types/execution/index.js'
|
|
|
42
42
|
export * from './types/connector/index.js'
|
|
43
43
|
export * from './types/skills/index.js'
|
|
44
44
|
export * from './types/a2a/index.js'
|
|
45
|
-
export * from './types/conversation/index.js'
|
|
46
45
|
export * from './types/router/index.js'
|
|
47
46
|
export * from './types/advisory/index.js'
|
|
48
47
|
export * from './types/memory/index.js'
|
|
@@ -140,8 +139,6 @@ export {
|
|
|
140
139
|
InMemoryTaskStore,
|
|
141
140
|
DiskTaskStore,
|
|
142
141
|
type DiskTaskStoreConfig,
|
|
143
|
-
InMemoryConversationStore,
|
|
144
|
-
type InMemoryConversationStoreConfig,
|
|
145
142
|
InMemoryMemoryIndex,
|
|
146
143
|
InMemoryMemoryStore,
|
|
147
144
|
DiskMemoryStore,
|
|
@@ -300,7 +297,6 @@ export {
|
|
|
300
297
|
runStatusToA2AState,
|
|
301
298
|
a2aMessageToCreateRun,
|
|
302
299
|
messageToA2A,
|
|
303
|
-
threadMessageToA2A,
|
|
304
300
|
extractTextFromA2AMessage,
|
|
305
301
|
a2aMessageToInput,
|
|
306
302
|
mapRunToA2AEvent,
|