@fabric-harness/sdk 1.14.0 → 2.0.1

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.
Files changed (91) hide show
  1. package/dist/action.d.ts +69 -0
  2. package/dist/action.d.ts.map +1 -0
  3. package/dist/action.js +119 -0
  4. package/dist/action.js.map +1 -0
  5. package/dist/attachment-store-contract.d.ts +34 -0
  6. package/dist/attachment-store-contract.d.ts.map +1 -0
  7. package/dist/attachment-store-contract.js +0 -0
  8. package/dist/attachment-store-contract.js.map +1 -0
  9. package/dist/attachment-store.d.ts +107 -0
  10. package/dist/attachment-store.d.ts.map +1 -0
  11. package/dist/attachment-store.js +164 -0
  12. package/dist/attachment-store.js.map +1 -0
  13. package/dist/channel.d.ts +8 -1
  14. package/dist/channel.d.ts.map +1 -1
  15. package/dist/channel.js.map +1 -1
  16. package/dist/conversation-projection.d.ts +52 -0
  17. package/dist/conversation-projection.d.ts.map +1 -0
  18. package/dist/conversation-projection.js +207 -0
  19. package/dist/conversation-projection.js.map +1 -0
  20. package/dist/conversation-stream-contract.d.ts +37 -0
  21. package/dist/conversation-stream-contract.d.ts.map +1 -0
  22. package/dist/conversation-stream-contract.js +453 -0
  23. package/dist/conversation-stream-contract.js.map +1 -0
  24. package/dist/conversation-stream.d.ts +141 -0
  25. package/dist/conversation-stream.d.ts.map +1 -0
  26. package/dist/conversation-stream.js +159 -0
  27. package/dist/conversation-stream.js.map +1 -0
  28. package/dist/delivered-message.d.ts +90 -0
  29. package/dist/delivered-message.d.ts.map +1 -0
  30. package/dist/delivered-message.js +154 -0
  31. package/dist/delivered-message.js.map +1 -0
  32. package/dist/dispatch.d.ts +16 -3
  33. package/dist/dispatch.d.ts.map +1 -1
  34. package/dist/dispatch.js +5 -1
  35. package/dist/dispatch.js.map +1 -1
  36. package/dist/history.d.ts +27 -0
  37. package/dist/history.d.ts.map +1 -1
  38. package/dist/history.js +94 -0
  39. package/dist/history.js.map +1 -1
  40. package/dist/in-memory-submission-store.d.ts +53 -0
  41. package/dist/in-memory-submission-store.d.ts.map +1 -0
  42. package/dist/in-memory-submission-store.js +340 -0
  43. package/dist/in-memory-submission-store.js.map +1 -0
  44. package/dist/index.d.ts +24 -3
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +13 -2
  47. package/dist/index.js.map +1 -1
  48. package/dist/persistent-agent.d.ts +6 -0
  49. package/dist/persistent-agent.d.ts.map +1 -1
  50. package/dist/persistent-agent.js +6 -0
  51. package/dist/persistent-agent.js.map +1 -1
  52. package/dist/session.d.ts +13 -0
  53. package/dist/session.d.ts.map +1 -1
  54. package/dist/session.js +78 -2
  55. package/dist/session.js.map +1 -1
  56. package/dist/strict.d.ts +24 -3
  57. package/dist/strict.d.ts.map +1 -1
  58. package/dist/strict.js +13 -2
  59. package/dist/strict.js.map +1 -1
  60. package/dist/submission-context.d.ts +26 -0
  61. package/dist/submission-context.d.ts.map +1 -0
  62. package/dist/submission-context.js +20 -0
  63. package/dist/submission-context.js.map +1 -0
  64. package/dist/submission-runner.d.ts +150 -0
  65. package/dist/submission-runner.d.ts.map +1 -0
  66. package/dist/submission-runner.js +767 -0
  67. package/dist/submission-runner.js.map +1 -0
  68. package/dist/submission-state.d.ts +50 -0
  69. package/dist/submission-state.d.ts.map +1 -0
  70. package/dist/submission-state.js +82 -0
  71. package/dist/submission-state.js.map +1 -0
  72. package/dist/submission-store-contract.d.ts +31 -0
  73. package/dist/submission-store-contract.d.ts.map +1 -0
  74. package/dist/submission-store-contract.js +730 -0
  75. package/dist/submission-store-contract.js.map +1 -0
  76. package/dist/submission-store.d.ts +365 -0
  77. package/dist/submission-store.d.ts.map +1 -0
  78. package/dist/submission-store.js +191 -0
  79. package/dist/submission-store.js.map +1 -0
  80. package/dist/submission-telemetry.d.ts +56 -0
  81. package/dist/submission-telemetry.d.ts.map +1 -0
  82. package/dist/submission-telemetry.js +36 -0
  83. package/dist/submission-telemetry.js.map +1 -0
  84. package/dist/testing-contracts.d.ts +17 -0
  85. package/dist/testing-contracts.d.ts.map +1 -0
  86. package/dist/testing-contracts.js +14 -0
  87. package/dist/testing-contracts.js.map +1 -0
  88. package/dist/types.d.ts +28 -1
  89. package/dist/types.d.ts.map +1 -1
  90. package/dist/types.js.map +1 -1
  91. package/package.json +5 -1
@@ -0,0 +1,69 @@
1
+ import type { Schema, SchemaIssue } from './schema.js';
2
+ import type { ToolDef } from './tools.js';
3
+ import type { AgentInit, FabricAgent } from './types.js';
4
+ declare const actionSymbol: unique symbol;
5
+ /**
6
+ * What an action runs against: the harness entry point (`init` can prompt
7
+ * models, spawn sessions, and call tools) plus the platform environment.
8
+ * Jobs, agents, and servers all satisfy this — it is the harness slice of
9
+ * `FabricContext`.
10
+ */
11
+ export interface ActionHost {
12
+ init: (options?: AgentInit) => Promise<FabricAgent>;
13
+ env?: Record<string, string | undefined>;
14
+ }
15
+ /**
16
+ * Context passed to an action's `run`. Unlike a tool's `execute` (a leaf
17
+ * capability invoked by the model), an action receives the harness itself
18
+ * and can orchestrate: prompt models, spawn sessions, call other actions.
19
+ */
20
+ export interface ActionContext<TInput = unknown> extends ActionHost {
21
+ input: TInput;
22
+ }
23
+ export interface ActionOptions<TInput = unknown, TOutput = unknown> {
24
+ name: string;
25
+ description: string;
26
+ /** Optional input schema. Must be a top-level object schema (it becomes the tool JSON schema when the action is exposed as a tool). */
27
+ input?: Schema<TInput>;
28
+ /** Optional output schema; when set, `run`'s result is validated against it. */
29
+ output?: Schema<TOutput>;
30
+ run(context: ActionContext<TInput>): Promise<TOutput> | TOutput;
31
+ }
32
+ /**
33
+ * A named, schema-validated unit of harness work created with
34
+ * {@link defineAction}. First-class in v2: registrable on agent profiles as
35
+ * a tool, callable from jobs and agents, evaluable via `fh test`, and
36
+ * deployable as a platform job task.
37
+ */
38
+ export interface ActionDefinition<TInput = unknown, TOutput = unknown> extends ActionOptions<TInput, TOutput> {
39
+ readonly [actionSymbol]: true;
40
+ }
41
+ export declare class ActionError extends Error {
42
+ readonly code: 'INPUT_VALIDATION' | 'OUTPUT_VALIDATION' | 'OUTPUT_SERIALIZATION';
43
+ readonly action: string;
44
+ readonly issues: SchemaIssue[] | undefined;
45
+ constructor(code: ActionError['code'], action: string, message: string, issues?: SchemaIssue[]);
46
+ }
47
+ /**
48
+ * Define an action — the harness-context counterpart to `defineTool`.
49
+ * A tool is a leaf capability the model calls; an action holds the harness
50
+ * (`context.init`) and can prompt, spawn sessions, and compose other work.
51
+ * Input/output use the harness `schema` builders and are validated on every
52
+ * {@link runAction} call; outputs must be JSON-serializable.
53
+ */
54
+ export declare function defineAction<TInput = unknown, TOutput = unknown>(options: ActionOptions<TInput, TOutput>): ActionDefinition<TInput, TOutput>;
55
+ export declare function isActionDefinition(value: unknown): value is ActionDefinition;
56
+ /**
57
+ * Validate input, run the action against `host`, validate + JSON-clone the
58
+ * output. The returned value is always safely serializable (a fresh JSON
59
+ * clone), so callers can persist or transmit it without sharing references.
60
+ */
61
+ export declare function runAction<TInput, TOutput>(action: ActionDefinition<TInput, TOutput>, host: ActionHost, input?: unknown): Promise<TOutput>;
62
+ /**
63
+ * Expose an action to the model as a tool on an agent profile. The tool's
64
+ * JSON schema comes from the action's input schema; execution validates
65
+ * input/output exactly like {@link runAction}.
66
+ */
67
+ export declare function actionAsTool<TInput, TOutput>(action: ActionDefinition<TInput, TOutput>, host: ActionHost): ToolDef<unknown, TOutput>;
68
+ export {};
69
+ //# sourceMappingURL=action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,QAAA,MAAM,YAAY,eAAsC,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,MAAM,GAAG,OAAO,CAAE,SAAQ,UAAU;IACjE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,uIAAuI;IACvI,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvB,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACjE;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,CAAE,SAAQ,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC;IAC3G,QAAQ,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;CAC/B;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;gBAE/B,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE;CAO/F;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,CAwB5I;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,OAAO,EAC7C,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,IAAI,EAAE,UAAU,EAChB,KAAK,CAAC,EAAE,OAAO,GACd,OAAO,CAAC,OAAO,CAAC,CAmDlB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,EAC1C,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EACzC,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAQ3B"}
package/dist/action.js ADDED
@@ -0,0 +1,119 @@
1
+ import { SchemaValidationError } from './schema.js';
2
+ const actionSymbol = Symbol.for('fabric-harness.action');
3
+ export class ActionError extends Error {
4
+ code;
5
+ action;
6
+ issues;
7
+ constructor(code, action, message, issues) {
8
+ super(message);
9
+ this.name = 'ActionError';
10
+ this.code = code;
11
+ this.action = action;
12
+ this.issues = issues;
13
+ }
14
+ }
15
+ /**
16
+ * Define an action — the harness-context counterpart to `defineTool`.
17
+ * A tool is a leaf capability the model calls; an action holds the harness
18
+ * (`context.init`) and can prompt, spawn sessions, and compose other work.
19
+ * Input/output use the harness `schema` builders and are validated on every
20
+ * {@link runAction} call; outputs must be JSON-serializable.
21
+ */
22
+ export function defineAction(options) {
23
+ if (!options || typeof options !== 'object') {
24
+ throw new Error('defineAction() requires an action definition object.');
25
+ }
26
+ if (typeof options.name !== 'string' || options.name.trim().length === 0) {
27
+ throw new Error('defineAction({ name }) must be a non-empty string.');
28
+ }
29
+ if (typeof options.description !== 'string' || options.description.trim().length === 0) {
30
+ throw new Error('defineAction({ description }) must be a non-empty string.');
31
+ }
32
+ if (options.input !== undefined && options.input.toJSONSchema().type !== 'object') {
33
+ throw new Error('defineAction({ input }) must be a top-level object schema (schema.object({...})).');
34
+ }
35
+ if (typeof options.run !== 'function') {
36
+ throw new Error('defineAction({ run }) must be a function.');
37
+ }
38
+ return Object.freeze({
39
+ [actionSymbol]: true,
40
+ name: options.name,
41
+ description: options.description,
42
+ ...(options.input !== undefined ? { input: options.input } : {}),
43
+ ...(options.output !== undefined ? { output: options.output } : {}),
44
+ run: options.run,
45
+ });
46
+ }
47
+ export function isActionDefinition(value) {
48
+ return typeof value === 'object' && value !== null && value[actionSymbol] === true;
49
+ }
50
+ /**
51
+ * Validate input, run the action against `host`, validate + JSON-clone the
52
+ * output. The returned value is always safely serializable (a fresh JSON
53
+ * clone), so callers can persist or transmit it without sharing references.
54
+ */
55
+ export async function runAction(action, host, input) {
56
+ let parsedInput;
57
+ if (action.input) {
58
+ try {
59
+ parsedInput = action.input.parse(input === undefined ? {} : input);
60
+ }
61
+ catch (error) {
62
+ if (error instanceof SchemaValidationError) {
63
+ throw new ActionError('INPUT_VALIDATION', action.name, `Action "${action.name}" input is invalid.\n${error.message}`, error.issues);
64
+ }
65
+ throw error;
66
+ }
67
+ }
68
+ else {
69
+ if (input !== undefined) {
70
+ throw new ActionError('INPUT_VALIDATION', action.name, `Action "${action.name}" does not declare an input schema but received input.`);
71
+ }
72
+ parsedInput = undefined;
73
+ }
74
+ const result = await action.run({
75
+ init: host.init,
76
+ ...(host.env !== undefined ? { env: host.env } : {}),
77
+ input: parsedInput,
78
+ });
79
+ let output = result;
80
+ if (action.output) {
81
+ try {
82
+ output = action.output.parse(result);
83
+ }
84
+ catch (error) {
85
+ if (error instanceof SchemaValidationError) {
86
+ throw new ActionError('OUTPUT_VALIDATION', action.name, `Action "${action.name}" output is invalid.\n${error.message}`, error.issues);
87
+ }
88
+ throw error;
89
+ }
90
+ }
91
+ else if (output === undefined) {
92
+ return undefined;
93
+ }
94
+ try {
95
+ const serialized = JSON.stringify(output);
96
+ if (serialized === undefined) {
97
+ throw new Error('value is not JSON-serializable');
98
+ }
99
+ return JSON.parse(serialized);
100
+ }
101
+ catch (error) {
102
+ throw new ActionError('OUTPUT_SERIALIZATION', action.name, `Action "${action.name}" output is not JSON-serializable: ${error instanceof Error ? error.message : String(error)}`);
103
+ }
104
+ }
105
+ /**
106
+ * Expose an action to the model as a tool on an agent profile. The tool's
107
+ * JSON schema comes from the action's input schema; execution validates
108
+ * input/output exactly like {@link runAction}.
109
+ */
110
+ export function actionAsTool(action, host) {
111
+ return {
112
+ name: action.name,
113
+ description: action.description,
114
+ inputSchema: action.input ? action.input.toJSONSchema() : { type: 'object', properties: {} },
115
+ metadata: { kind: 'action' },
116
+ execute: (input) => runAction(action, host, input),
117
+ };
118
+ }
119
+ //# sourceMappingURL=action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared contract tests for {@link AttachmentStore} implementations.
3
+ *
4
+ * Store packages call {@link defineAttachmentStoreContractTests} with a
5
+ * factory that creates their backend. The tests exercise every method on
6
+ * `AttachmentStore` with identical behavioral assertions regardless of the
7
+ * underlying storage engine — content-addressed put/get round-trips,
8
+ * idempotent puts by `(scope, digest)`, digest verification, scope isolation,
9
+ * and deletion semantics (`delete` of a missing attachment throws
10
+ * `NOT_FOUND`).
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * import { defineAttachmentStoreContractTests } from '@fabric-harness/sdk/testing/contracts';
15
+ *
16
+ * defineAttachmentStoreContractTests('My backend', async () => ({
17
+ * store: await createMyAttachmentStore(),
18
+ * close: async () => myBackend.close(),
19
+ * }));
20
+ * ```
21
+ */
22
+ import type { AttachmentStore } from './attachment-store.js';
23
+ export interface AttachmentStoreContractHandle {
24
+ /** The fresh store under test. */
25
+ store: AttachmentStore;
26
+ /** Optional cleanup after the test (close connections, delete temp files). */
27
+ close?: () => Promise<void>;
28
+ }
29
+ /**
30
+ * Register the standard {@link AttachmentStore} contract tests under the
31
+ * given describe label. Each test gets a fresh store from `factory()`.
32
+ */
33
+ export declare function defineAttachmentStoreContractTests(name: string, factory: () => Promise<AttachmentStoreContractHandle>): void;
34
+ //# sourceMappingURL=attachment-store-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-store-contract.d.ts","sourceRoot":"","sources":["../src/attachment-store-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAiB,eAAe,EAAwB,MAAM,uBAAuB,CAAC;AAsClG,MAAM,WAAW,6BAA6B;IAC5C,kCAAkC;IAClC,KAAK,EAAE,eAAe,CAAC;IACvB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,OAAO,CAAC,6BAA6B,CAAC,GACpD,IAAI,CA4JN"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-store-contract.js","sourceRoot":"","sources":["../src/attachment-store-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Durable, content-addressed attachment storage (v2 migration, phase A7).
3
+ *
4
+ * Inline base64 attachments on a {@link DeliveredMessage} are materialized at
5
+ * admission into content-addressed refs: bytes live in an
6
+ * {@link AttachmentStore} keyed by `(scope, sha-256 digest)` and the persisted
7
+ * submission payload carries only the ref. `scope` is the storage partition —
8
+ * the harness passes the instance's store session id
9
+ * (`agent:<name>:<id>:<session>`), so attachments are isolated per instance
10
+ * session and content-deduplicated within it.
11
+ *
12
+ * Materialization is deterministic (ids derive from the submission/dispatch
13
+ * id + attachment index, digests from content), so an exact redelivery of the
14
+ * same message produces an identical payload and admission idempotency is
15
+ * preserved. Verify an implementation with
16
+ * `defineAttachmentStoreContractTests` from `attachment-store-contract.ts`.
17
+ */
18
+ import type { DeliveredMessage } from './delivered-message.js';
19
+ /** Content-addressed descriptor of one stored attachment. */
20
+ export interface AttachmentRef {
21
+ /** Caller-assigned attachment id (deterministic at admission). */
22
+ id: string;
23
+ mimeType: string;
24
+ sizeBytes: number;
25
+ /** Lowercase hex SHA-256 of the bytes — the content address. */
26
+ digest: string;
27
+ /** Uploader-provided display name; not part of byte identity. */
28
+ filename?: string;
29
+ }
30
+ /**
31
+ * Build an {@link AttachmentRef} for the given bytes, computing the SHA-256
32
+ * digest via WebCrypto (`crypto.subtle`) so the SDK stays runtime-agnostic.
33
+ */
34
+ export declare function createAttachmentRef(input: {
35
+ id: string;
36
+ mimeType: string;
37
+ bytes: Uint8Array;
38
+ filename?: string;
39
+ }): Promise<AttachmentRef>;
40
+ /** Lowercase hex SHA-256 of the bytes (WebCrypto). */
41
+ export declare function attachmentDigest(bytes: Uint8Array): Promise<string>;
42
+ /**
43
+ * Verify that `bytes` match the ref's digest (and declared size), throwing
44
+ * `AttachmentStoreError('DIGEST_MISMATCH')` otherwise. Every store's `put`
45
+ * MUST run this check before persisting.
46
+ */
47
+ export declare function verifyAttachmentBytes(ref: AttachmentRef, bytes: Uint8Array): Promise<void>;
48
+ export interface AttachmentPutInput {
49
+ /** Storage partition — the instance's store session id. */
50
+ scope: string;
51
+ ref: AttachmentRef;
52
+ bytes: Uint8Array;
53
+ }
54
+ export interface StoredAttachment {
55
+ ref: AttachmentRef;
56
+ bytes: Uint8Array;
57
+ }
58
+ /**
59
+ * Durable content-addressed attachment storage.
60
+ *
61
+ * - `put` is idempotent by `(scope, digest)` — re-putting the same content
62
+ * succeeds without duplicating storage (the first stored ref metadata is
63
+ * retained). It MUST verify the digest against the bytes and reject a
64
+ * mismatch with `AttachmentStoreError('DIGEST_MISMATCH')` before writing.
65
+ * - `get`/`getByAttachmentId` return `null` on a miss.
66
+ * - `delete` removes one stored attachment and throws
67
+ * `AttachmentStoreError('NOT_FOUND')` when nothing is stored under
68
+ * `(scope, digest)`.
69
+ */
70
+ export interface AttachmentStore {
71
+ put(input: AttachmentPutInput): Promise<void>;
72
+ get(scope: string, digest: string): Promise<StoredAttachment | null>;
73
+ getByAttachmentId(scope: string, attachmentId: string): Promise<StoredAttachment | null>;
74
+ list(scope: string): Promise<AttachmentRef[]>;
75
+ delete(scope: string, digest: string): Promise<void>;
76
+ }
77
+ export declare class AttachmentStoreError extends Error {
78
+ readonly code: 'DIGEST_MISMATCH' | 'NOT_FOUND';
79
+ constructor(code: AttachmentStoreError['code'], message: string);
80
+ }
81
+ /** In-memory attachment store (dev / `runtime: 'stateless'` / tests). */
82
+ export declare class InMemoryAttachmentStore implements AttachmentStore {
83
+ private readonly records;
84
+ put(input: AttachmentPutInput): Promise<void>;
85
+ get(scope: string, digest: string): Promise<StoredAttachment | null>;
86
+ getByAttachmentId(scope: string, attachmentId: string): Promise<StoredAttachment | null>;
87
+ list(scope: string): Promise<AttachmentRef[]>;
88
+ delete(scope: string, digest: string): Promise<void>;
89
+ }
90
+ /** True when the message carries at least one inline (base64) attachment. */
91
+ export declare function messageHasDataAttachments(message: DeliveredMessage): boolean;
92
+ /**
93
+ * Materialize a message's inline attachments into durable refs: decode the
94
+ * base64 data, store the bytes under `scope`, and return a NEW message whose
95
+ * attachments carry `{ type, mimeType, filename?, ref }` and no `data`.
96
+ *
97
+ * Deterministic by construction — attachment ids are `${idPrefix}_${index}`
98
+ * and digests derive from content — so an exact redelivery of the same
99
+ * message produces an identical materialized payload (admission idempotency).
100
+ * Messages without inline attachments are returned unchanged (same
101
+ * reference).
102
+ */
103
+ export declare function materializeMessageAttachments(message: DeliveredMessage, store: AttachmentStore, options: {
104
+ scope: string;
105
+ idPrefix: string;
106
+ }): Promise<DeliveredMessage>;
107
+ //# sourceMappingURL=attachment-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-store.d.ts","sourceRoot":"","sources":["../src/attachment-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Durable, content-addressed attachment storage (v2 migration, phase A7).
3
+ *
4
+ * Inline base64 attachments on a {@link DeliveredMessage} are materialized at
5
+ * admission into content-addressed refs: bytes live in an
6
+ * {@link AttachmentStore} keyed by `(scope, sha-256 digest)` and the persisted
7
+ * submission payload carries only the ref. `scope` is the storage partition —
8
+ * the harness passes the instance's store session id
9
+ * (`agent:<name>:<id>:<session>`), so attachments are isolated per instance
10
+ * session and content-deduplicated within it.
11
+ *
12
+ * Materialization is deterministic (ids derive from the submission/dispatch
13
+ * id + attachment index, digests from content), so an exact redelivery of the
14
+ * same message produces an identical payload and admission idempotency is
15
+ * preserved. Verify an implementation with
16
+ * `defineAttachmentStoreContractTests` from `attachment-store-contract.ts`.
17
+ */
18
+ /**
19
+ * Build an {@link AttachmentRef} for the given bytes, computing the SHA-256
20
+ * digest via WebCrypto (`crypto.subtle`) so the SDK stays runtime-agnostic.
21
+ */
22
+ export async function createAttachmentRef(input) {
23
+ return {
24
+ id: input.id,
25
+ mimeType: input.mimeType,
26
+ sizeBytes: input.bytes.byteLength,
27
+ digest: await attachmentDigest(input.bytes),
28
+ ...(input.filename !== undefined ? { filename: input.filename } : {}),
29
+ };
30
+ }
31
+ /** Lowercase hex SHA-256 of the bytes (WebCrypto). */
32
+ export async function attachmentDigest(bytes) {
33
+ const digest = await crypto.subtle.digest('SHA-256', viewToBuffer(bytes));
34
+ return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, '0')).join('');
35
+ }
36
+ /**
37
+ * Verify that `bytes` match the ref's digest (and declared size), throwing
38
+ * `AttachmentStoreError('DIGEST_MISMATCH')` otherwise. Every store's `put`
39
+ * MUST run this check before persisting.
40
+ */
41
+ export async function verifyAttachmentBytes(ref, bytes) {
42
+ if (ref.sizeBytes !== bytes.byteLength || ref.digest !== (await attachmentDigest(bytes))) {
43
+ throw new AttachmentStoreError('DIGEST_MISMATCH', `Attachment ${ref.id} bytes do not match the declared digest/size.`);
44
+ }
45
+ }
46
+ export class AttachmentStoreError extends Error {
47
+ code;
48
+ constructor(code, message) {
49
+ super(message);
50
+ this.name = 'AttachmentStoreError';
51
+ this.code = code;
52
+ }
53
+ }
54
+ // ─── In-memory store ────────────────────────────────────────────────────────
55
+ /** In-memory attachment store (dev / `runtime: 'stateless'` / tests). */
56
+ export class InMemoryAttachmentStore {
57
+ records = new Map();
58
+ async put(input) {
59
+ await verifyAttachmentBytes(input.ref, input.bytes);
60
+ const key = attachmentKey(input.scope, input.ref.digest);
61
+ // Idempotent by (scope, digest): the first stored copy wins.
62
+ if (this.records.has(key))
63
+ return;
64
+ this.records.set(key, { ref: { ...input.ref }, bytes: Uint8Array.from(input.bytes) });
65
+ }
66
+ async get(scope, digest) {
67
+ const record = this.records.get(attachmentKey(scope, digest));
68
+ if (!record)
69
+ return null;
70
+ return { ref: { ...record.ref }, bytes: Uint8Array.from(record.bytes) };
71
+ }
72
+ async getByAttachmentId(scope, attachmentId) {
73
+ for (const [key, record] of this.records) {
74
+ if (scopeOfKey(key) === scope && record.ref.id === attachmentId) {
75
+ return { ref: { ...record.ref }, bytes: Uint8Array.from(record.bytes) };
76
+ }
77
+ }
78
+ return null;
79
+ }
80
+ async list(scope) {
81
+ const refs = [];
82
+ for (const [key, record] of this.records) {
83
+ if (scopeOfKey(key) === scope)
84
+ refs.push({ ...record.ref });
85
+ }
86
+ return refs;
87
+ }
88
+ async delete(scope, digest) {
89
+ if (!this.records.delete(attachmentKey(scope, digest))) {
90
+ throw new AttachmentStoreError('NOT_FOUND', `Attachment not found: ${scope}/${digest}`);
91
+ }
92
+ }
93
+ }
94
+ function attachmentKey(scope, digest) {
95
+ return JSON.stringify([scope, digest]);
96
+ }
97
+ function scopeOfKey(key) {
98
+ const [scope] = JSON.parse(key);
99
+ return scope;
100
+ }
101
+ // ─── Message materialization ────────────────────────────────────────────────
102
+ /** True when the message carries at least one inline (base64) attachment. */
103
+ export function messageHasDataAttachments(message) {
104
+ return (message.kind === 'user' &&
105
+ (message.attachments ?? []).some((attachment) => attachment.data !== undefined));
106
+ }
107
+ /**
108
+ * Materialize a message's inline attachments into durable refs: decode the
109
+ * base64 data, store the bytes under `scope`, and return a NEW message whose
110
+ * attachments carry `{ type, mimeType, filename?, ref }` and no `data`.
111
+ *
112
+ * Deterministic by construction — attachment ids are `${idPrefix}_${index}`
113
+ * and digests derive from content — so an exact redelivery of the same
114
+ * message produces an identical materialized payload (admission idempotency).
115
+ * Messages without inline attachments are returned unchanged (same
116
+ * reference).
117
+ */
118
+ export async function materializeMessageAttachments(message, store, options) {
119
+ if (!messageHasDataAttachments(message) || message.kind !== 'user')
120
+ return message;
121
+ const attachments = [];
122
+ const source = message.attachments ?? [];
123
+ for (let index = 0; index < source.length; index += 1) {
124
+ const attachment = source[index];
125
+ if (!attachment || attachment.data === undefined) {
126
+ if (attachment)
127
+ attachments.push(attachment);
128
+ continue;
129
+ }
130
+ const bytes = decodeAttachmentBase64(attachment.data);
131
+ const ref = await createAttachmentRef({
132
+ id: `${options.idPrefix}_${index}`,
133
+ mimeType: attachment.mimeType,
134
+ bytes,
135
+ ...(attachment.filename !== undefined ? { filename: attachment.filename } : {}),
136
+ });
137
+ await store.put({ scope: options.scope, ref, bytes });
138
+ attachments.push({
139
+ type: attachment.type,
140
+ mimeType: attachment.mimeType,
141
+ ...(attachment.filename !== undefined ? { filename: attachment.filename } : {}),
142
+ ref: { id: ref.id, digest: ref.digest, sizeBytes: ref.sizeBytes },
143
+ });
144
+ }
145
+ return { kind: 'user', body: message.body, attachments };
146
+ }
147
+ function decodeAttachmentBase64(value) {
148
+ try {
149
+ if (typeof Buffer !== 'undefined')
150
+ return new Uint8Array(Buffer.from(value, 'base64'));
151
+ const bin = atob(value);
152
+ const out = new Uint8Array(bin.length);
153
+ for (let i = 0; i < bin.length; i += 1)
154
+ out[i] = bin.charCodeAt(i);
155
+ return out;
156
+ }
157
+ catch {
158
+ throw new Error('[fabric-harness] Attachment "data" is not valid base64.');
159
+ }
160
+ }
161
+ function viewToBuffer(bytes) {
162
+ return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
163
+ }
164
+ //# sourceMappingURL=attachment-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachment-store.js","sourceRoot":"","sources":["../src/attachment-store.ts"],"names":[],"mappings":"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"}
package/dist/channel.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { DeliveredMessage } from './delivered-message.js';
1
2
  import type { DispatchReceipt } from './dispatch.js';
2
3
  import type { FabricActor } from './types.js';
3
4
  /**
@@ -26,7 +27,13 @@ export interface ChannelDispatchRequest {
26
27
  /** Target persistent-agent instance id — typically `channel.conversationKey(ref)`. */
27
28
  instanceId: string;
28
29
  session?: string;
29
- input: unknown;
30
+ /**
31
+ * The message delivered to the session. Channels should construct signals
32
+ * (`kind: 'signal'`) for platform activity; preferred over `input`.
33
+ */
34
+ message?: DeliveredMessage;
35
+ /** Legacy JSON payload. Normalized into a user-kind message at admission. */
36
+ input?: unknown;
30
37
  /** Stable key (e.g. the platform event id) → `dispatchId` for exactly-once delivery. */
31
38
  dedupeKey?: string;
32
39
  tenantId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"channel.js","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}