@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,159 @@
1
+ export class ConversationStreamStoreError extends Error {
2
+ code;
3
+ constructor(code, message) {
4
+ super(message);
5
+ this.name = 'ConversationStreamStoreError';
6
+ this.code = code;
7
+ }
8
+ }
9
+ export const CONVERSATION_STREAM_DEFAULT_READ_LIMIT = 100;
10
+ export const CONVERSATION_STREAM_MAX_READ_LIMIT = 1000;
11
+ export function clampReadLimit(limit) {
12
+ if (limit === undefined || !Number.isFinite(limit) || limit <= 0) {
13
+ return CONVERSATION_STREAM_DEFAULT_READ_LIMIT;
14
+ }
15
+ return Math.min(Math.floor(limit), CONVERSATION_STREAM_MAX_READ_LIMIT);
16
+ }
17
+ export function formatStreamOffset(offset) {
18
+ return String(offset);
19
+ }
20
+ export function parseStreamOffset(offset) {
21
+ if (offset === undefined || offset === '')
22
+ return 0;
23
+ const parsed = Number.parseInt(offset, 10);
24
+ if (!Number.isFinite(parsed) || parsed < 0)
25
+ return 0;
26
+ return parsed;
27
+ }
28
+ /** Stream path for a session's conversation projection. */
29
+ export function conversationStreamPath(storeSessionId) {
30
+ return `conversations/${storeSessionId}`;
31
+ }
32
+ /**
33
+ * Process-local listener registry shared by store implementations —
34
+ * registration, unsubscribe-and-prune, and error-swallowing notify.
35
+ */
36
+ export class StreamListenerRegistry {
37
+ listeners = new Map();
38
+ subscribe(path, listener) {
39
+ let set = this.listeners.get(path);
40
+ if (!set) {
41
+ set = new Set();
42
+ this.listeners.set(path, set);
43
+ }
44
+ set.add(listener);
45
+ return () => {
46
+ set.delete(listener);
47
+ if (set.size === 0)
48
+ this.listeners.delete(path);
49
+ };
50
+ }
51
+ notify(path) {
52
+ for (const listener of this.listeners.get(path) ?? []) {
53
+ try {
54
+ listener();
55
+ }
56
+ catch {
57
+ // Listener failures never affect the writer.
58
+ }
59
+ }
60
+ }
61
+ }
62
+ /** In-memory conversation stream store (dev / `runtime: 'stateless'` / tests). */
63
+ export class InMemoryConversationStreamStore {
64
+ streams = new Map();
65
+ registry = new StreamListenerRegistry();
66
+ async createStream(path, identity) {
67
+ if (!this.streams.has(path)) {
68
+ this.streams.set(path, {
69
+ identity,
70
+ batches: [],
71
+ nextOffset: 0,
72
+ producerId: null,
73
+ producerEpoch: 0,
74
+ nextProducerSequence: 0,
75
+ });
76
+ }
77
+ }
78
+ async acquireProducer(path, producerId) {
79
+ const stream = this.requireStream(path);
80
+ stream.producerId = producerId;
81
+ stream.producerEpoch += 1;
82
+ stream.nextProducerSequence = 0;
83
+ return {
84
+ producerId,
85
+ producerEpoch: stream.producerEpoch,
86
+ nextProducerSequence: stream.nextProducerSequence,
87
+ offset: formatStreamOffset(stream.nextOffset),
88
+ };
89
+ }
90
+ async append(input) {
91
+ const stream = this.requireStream(input.path);
92
+ if (input.producerId !== stream.producerId || input.producerEpoch !== stream.producerEpoch) {
93
+ throw new ConversationStreamStoreError('PRODUCER_FENCED', `Producer ${input.producerId}@${input.producerEpoch} is fenced; current is ${stream.producerId ?? 'none'}@${stream.producerEpoch}.`);
94
+ }
95
+ // Idempotent redelivery: identical coordinates return the committed offset.
96
+ const existing = stream.batches.find((batch) => batch.producerId === input.producerId &&
97
+ batch.producerEpoch === input.producerEpoch &&
98
+ batch.producerSequence === input.producerSequence);
99
+ if (existing)
100
+ return { offset: formatStreamOffset(existing.seq) };
101
+ if (input.producerSequence !== stream.nextProducerSequence) {
102
+ throw new ConversationStreamStoreError('SEQUENCE_CONFLICT', `Producer sequence ${input.producerSequence} does not match expected ${stream.nextProducerSequence}.`);
103
+ }
104
+ const seq = stream.nextOffset;
105
+ stream.batches.push({
106
+ seq,
107
+ producerId: input.producerId,
108
+ producerEpoch: input.producerEpoch,
109
+ producerSequence: input.producerSequence,
110
+ records: input.records.map((record) => structuredClone(record)),
111
+ });
112
+ stream.nextOffset = seq + 1;
113
+ stream.nextProducerSequence = input.producerSequence + 1;
114
+ this.registry.notify(input.path);
115
+ return { offset: formatStreamOffset(seq) };
116
+ }
117
+ async read(path, options) {
118
+ const stream = this.requireStream(path);
119
+ const from = parseStreamOffset(options?.offset);
120
+ const limit = clampReadLimit(options?.limit);
121
+ const selected = stream.batches.filter((batch) => batch.seq >= from).slice(0, limit);
122
+ const last = selected[selected.length - 1];
123
+ const nextOffset = last ? last.seq + 1 : from;
124
+ return {
125
+ batches: selected.map((batch) => ({
126
+ offset: formatStreamOffset(batch.seq),
127
+ records: batch.records.map((record) => structuredClone(record)),
128
+ })),
129
+ nextOffset: formatStreamOffset(nextOffset),
130
+ upToDate: nextOffset >= stream.nextOffset,
131
+ };
132
+ }
133
+ async getMeta(path) {
134
+ const stream = this.streams.get(path);
135
+ if (!stream)
136
+ return null;
137
+ return {
138
+ identity: stream.identity,
139
+ nextOffset: formatStreamOffset(stream.nextOffset),
140
+ producerId: stream.producerId,
141
+ producerEpoch: stream.producerEpoch,
142
+ nextProducerSequence: stream.nextProducerSequence,
143
+ };
144
+ }
145
+ async delete(path) {
146
+ this.streams.delete(path);
147
+ }
148
+ subscribe(path, listener) {
149
+ return this.registry.subscribe(path, listener);
150
+ }
151
+ requireStream(path) {
152
+ const stream = this.streams.get(path);
153
+ if (!stream) {
154
+ throw new ConversationStreamStoreError('STREAM_NOT_FOUND', `Conversation stream not found: ${path}`);
155
+ }
156
+ return stream;
157
+ }
158
+ }
159
+ //# sourceMappingURL=conversation-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-stream.js","sourceRoot":"","sources":["../src/conversation-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import type { SignalEntryData } from './types.js';
2
+ /**
3
+ * DeliveredMessage — the single unified input shape for everything that
4
+ * enters a persistent agent's session: direct HTTP prompts, dispatch,
5
+ * channels/webhooks, Databricks events, SDK clients, and tests.
6
+ *
7
+ * `kind: 'user'` is a direct user talking to the assistant (1:1 chat
8
+ * surface), optionally carrying attachments.
9
+ *
10
+ * `kind: 'signal'` models everything beyond that direct exchange — a Slack
11
+ * thread or a Lakeflow job event is activity the agent observes, not the
12
+ * assistant's own user speaking. Sender identity and structured metadata go
13
+ * in `attributes`; the message itself in `body`. Signals render into model
14
+ * context as an XML envelope (`<tagName ...attributes>body</tagName>`).
15
+ *
16
+ * `body` (not `text`/`content`) is named for headroom — a future revision may
17
+ * accept a real JSON value and stringify internally without a field rename.
18
+ */
19
+ export type DeliveredMessage = {
20
+ kind: 'user';
21
+ body: string;
22
+ attachments?: DeliveredAttachment[];
23
+ } | {
24
+ kind: 'signal';
25
+ /** Caller-defined event/signal type, e.g. `'slack.message'` or `'databricks.job_run'`. */
26
+ type: string;
27
+ body: string;
28
+ attributes?: Record<string, string>;
29
+ tagName?: string;
30
+ };
31
+ /**
32
+ * One attachment on a `kind: 'user'` message. Today the only supported
33
+ * attachment is an image, carried either inline (`data`, base64) or as a
34
+ * durable content-addressed reference (`ref`) once an attachment store is
35
+ * configured — admission materializes inline bytes into refs. An attachment
36
+ * must carry `data` or `ref` (or both, transiently during materialization).
37
+ */
38
+ export interface DeliveredAttachment {
39
+ type: 'image';
40
+ /** Base64-encoded bytes (inline form). */
41
+ data?: string;
42
+ mimeType: string;
43
+ /** Uploader-provided display name; not part of byte identity. */
44
+ filename?: string;
45
+ /** Durable content-addressed reference (materialized form). */
46
+ ref?: DeliveredAttachmentRef;
47
+ }
48
+ /** Durable reference to attachment bytes in an attachment store. */
49
+ export interface DeliveredAttachmentRef {
50
+ /** Attachment id assigned at materialization. */
51
+ id: string;
52
+ /** Lowercase hex SHA-256 of the bytes — the content address. */
53
+ digest: string;
54
+ sizeBytes: number;
55
+ }
56
+ /** Maximum accepted base64 length for a single inline attachment. */
57
+ export declare const MAX_ATTACHMENT_DATA_LENGTH: number;
58
+ /** Thrown by {@link parseDeliveredMessage} on malformed input. */
59
+ export declare class InvalidDeliveredMessageError extends Error {
60
+ readonly code = "INVALID_DELIVERED_MESSAGE";
61
+ constructor(reason: string);
62
+ }
63
+ /**
64
+ * Validate a raw value as a {@link DeliveredMessage}. Shared by dispatch
65
+ * admission and the direct HTTP route so every transport produces the same
66
+ * structured error on bad input.
67
+ */
68
+ export declare function parseDeliveredMessage(value: unknown): DeliveredMessage;
69
+ /** True when a raw value already looks like a {@link DeliveredMessage} (has a valid `kind`). */
70
+ export declare function isDeliveredMessageShape(value: unknown): boolean;
71
+ /**
72
+ * Normalize legacy inputs into a {@link DeliveredMessage}:
73
+ * - a string → a user message with that body
74
+ * - a value with a `kind` discriminator → validated as a DeliveredMessage
75
+ * - any other JSON value → a user message with the JSON-stringified body
76
+ * (matching the historical dispatch rendering, so behavior is unchanged
77
+ * for pre-DeliveredMessage callers)
78
+ */
79
+ export declare function normalizeDeliveredMessage(input: unknown): DeliveredMessage;
80
+ /**
81
+ * Render a delivered message to the prompt text form. User messages pass
82
+ * their body through verbatim; signals render as their XML envelope via the
83
+ * shared {@link renderSignalMessage} machinery.
84
+ */
85
+ export declare function renderDeliveredMessage(message: DeliveredMessage): string;
86
+ /** Map a signal-kind message onto the persisted `signal` entry's data shape. */
87
+ export declare function deliveredSignalToEntryData(message: Extract<DeliveredMessage, {
88
+ kind: 'signal';
89
+ }>): SignalEntryData;
90
+ //# sourceMappingURL=delivered-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivered-message.d.ts","sourceRoot":"","sources":["../src/delivered-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAAE,GACnE;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,0FAA0F;IAC1F,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEN;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,sBAAsB,CAAC;CAC9B;AAED,oEAAoE;AACpE,MAAM,WAAW,sBAAsB;IACrC,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAC;IACX,gEAAgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,QAAmB,CAAC;AAU3D,kEAAkE;AAClE,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,QAAQ,CAAC,IAAI,+BAA+B;gBAChC,MAAM,EAAE,MAAM;CAI3B;AAUD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAiDtE;AAkDD,gGAAgG;AAChG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE/D;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAI1E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAGxE;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,GACrD,eAAe,CAOjB"}
@@ -0,0 +1,154 @@
1
+ import { renderSignalMessage } from './history.js';
2
+ /** Maximum accepted base64 length for a single inline attachment. */
3
+ export const MAX_ATTACHMENT_DATA_LENGTH = 14 * 1024 * 1024;
4
+ /**
5
+ * The tag name is rendered (escaped attributes/body, but the tag itself is
6
+ * structural) as the signal's XML envelope in model context, so it must be a
7
+ * valid XML name — anything looser would let a caller-controlled value
8
+ * inject markup that the body/attribute escaping exists to prevent.
9
+ */
10
+ const XML_TAG_NAME_RE = /^[A-Za-z_][A-Za-z0-9_.-]*$/;
11
+ /** Thrown by {@link parseDeliveredMessage} on malformed input. */
12
+ export class InvalidDeliveredMessageError extends Error {
13
+ code = 'INVALID_DELIVERED_MESSAGE';
14
+ constructor(reason) {
15
+ super(reason);
16
+ this.name = 'InvalidDeliveredMessageError';
17
+ }
18
+ }
19
+ const SHAPE_HINT = 'Delivered messages must be { kind: "user", body: string, attachments?: attachment[] } ' +
20
+ 'or { kind: "signal", type: string, body: string, attributes?: Record<string, string>, tagName?: string }.';
21
+ function isRecord(value) {
22
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
23
+ }
24
+ /**
25
+ * Validate a raw value as a {@link DeliveredMessage}. Shared by dispatch
26
+ * admission and the direct HTTP route so every transport produces the same
27
+ * structured error on bad input.
28
+ */
29
+ export function parseDeliveredMessage(value) {
30
+ if (!isRecord(value))
31
+ throw new InvalidDeliveredMessageError(SHAPE_HINT);
32
+ if (value.kind === 'user') {
33
+ if (typeof value.body !== 'string')
34
+ throw new InvalidDeliveredMessageError(SHAPE_HINT);
35
+ let attachments;
36
+ if (value.attachments !== undefined) {
37
+ if (!Array.isArray(value.attachments))
38
+ throw new InvalidDeliveredMessageError(SHAPE_HINT);
39
+ attachments = value.attachments.map((raw) => parseDeliveredAttachment(raw));
40
+ }
41
+ return { kind: 'user', body: value.body, ...(attachments ? { attachments } : {}) };
42
+ }
43
+ if (value.kind === 'signal') {
44
+ if (typeof value.type !== 'string' || value.type.length === 0) {
45
+ throw new InvalidDeliveredMessageError('Signal message "type" must be a non-empty string.');
46
+ }
47
+ if (typeof value.body !== 'string')
48
+ throw new InvalidDeliveredMessageError(SHAPE_HINT);
49
+ let attributes;
50
+ if (value.attributes !== undefined) {
51
+ if (!isRecord(value.attributes))
52
+ throw new InvalidDeliveredMessageError(SHAPE_HINT);
53
+ attributes = {};
54
+ for (const [key, attr] of Object.entries(value.attributes)) {
55
+ if (typeof attr !== 'string') {
56
+ throw new InvalidDeliveredMessageError('Signal message "attributes" values must be strings.');
57
+ }
58
+ attributes[key] = attr;
59
+ }
60
+ }
61
+ let tagName;
62
+ if (value.tagName !== undefined) {
63
+ if (typeof value.tagName !== 'string' || !XML_TAG_NAME_RE.test(value.tagName)) {
64
+ throw new InvalidDeliveredMessageError('Signal message "tagName" must be a valid XML tag name ' +
65
+ '(letters, digits, "_", "-", "."; must not start with a digit, "-", or ".").');
66
+ }
67
+ tagName = value.tagName;
68
+ }
69
+ return {
70
+ kind: 'signal',
71
+ type: value.type,
72
+ body: value.body,
73
+ ...(attributes ? { attributes } : {}),
74
+ ...(tagName ? { tagName } : {}),
75
+ };
76
+ }
77
+ throw new InvalidDeliveredMessageError(SHAPE_HINT);
78
+ }
79
+ function parseDeliveredAttachment(value) {
80
+ if (!isRecord(value) || value.type !== 'image' || typeof value.mimeType !== 'string') {
81
+ throw new InvalidDeliveredMessageError('Attachments must be { type: "image", data?: base64 string, ref?: { id, digest, sizeBytes }, mimeType: string, filename?: string }.');
82
+ }
83
+ if (value.data === undefined && value.ref === undefined) {
84
+ throw new InvalidDeliveredMessageError('Attachments must carry inline "data" (base64) or a durable "ref".');
85
+ }
86
+ if (value.data !== undefined) {
87
+ if (typeof value.data !== 'string') {
88
+ throw new InvalidDeliveredMessageError('Attachment "data" must be a base64 string when provided.');
89
+ }
90
+ if (value.data.length > MAX_ATTACHMENT_DATA_LENGTH) {
91
+ throw new InvalidDeliveredMessageError(`Attachment data exceeds the ${MAX_ATTACHMENT_DATA_LENGTH} character limit.`);
92
+ }
93
+ }
94
+ let ref;
95
+ if (value.ref !== undefined) {
96
+ const raw = value.ref;
97
+ if (!isRecord(raw) ||
98
+ typeof raw.id !== 'string' ||
99
+ typeof raw.digest !== 'string' ||
100
+ typeof raw.sizeBytes !== 'number') {
101
+ throw new InvalidDeliveredMessageError('Attachment "ref" must be { id: string, digest: string, sizeBytes: number }.');
102
+ }
103
+ ref = { id: raw.id, digest: raw.digest, sizeBytes: raw.sizeBytes };
104
+ }
105
+ if (value.filename !== undefined && typeof value.filename !== 'string') {
106
+ throw new InvalidDeliveredMessageError('Attachment "filename" must be a string when provided.');
107
+ }
108
+ return {
109
+ type: 'image',
110
+ ...(typeof value.data === 'string' ? { data: value.data } : {}),
111
+ mimeType: value.mimeType,
112
+ ...(typeof value.filename === 'string' ? { filename: value.filename } : {}),
113
+ ...(ref ? { ref } : {}),
114
+ };
115
+ }
116
+ /** True when a raw value already looks like a {@link DeliveredMessage} (has a valid `kind`). */
117
+ export function isDeliveredMessageShape(value) {
118
+ return isRecord(value) && (value.kind === 'user' || value.kind === 'signal');
119
+ }
120
+ /**
121
+ * Normalize legacy inputs into a {@link DeliveredMessage}:
122
+ * - a string → a user message with that body
123
+ * - a value with a `kind` discriminator → validated as a DeliveredMessage
124
+ * - any other JSON value → a user message with the JSON-stringified body
125
+ * (matching the historical dispatch rendering, so behavior is unchanged
126
+ * for pre-DeliveredMessage callers)
127
+ */
128
+ export function normalizeDeliveredMessage(input) {
129
+ if (typeof input === 'string')
130
+ return { kind: 'user', body: input };
131
+ if (isDeliveredMessageShape(input))
132
+ return parseDeliveredMessage(input);
133
+ return { kind: 'user', body: JSON.stringify(input ?? null) };
134
+ }
135
+ /**
136
+ * Render a delivered message to the prompt text form. User messages pass
137
+ * their body through verbatim; signals render as their XML envelope via the
138
+ * shared {@link renderSignalMessage} machinery.
139
+ */
140
+ export function renderDeliveredMessage(message) {
141
+ if (message.kind === 'user')
142
+ return message.body;
143
+ return renderSignalMessage(deliveredSignalToEntryData(message));
144
+ }
145
+ /** Map a signal-kind message onto the persisted `signal` entry's data shape. */
146
+ export function deliveredSignalToEntryData(message) {
147
+ return {
148
+ signalType: message.type,
149
+ content: message.body,
150
+ ...(message.attributes ? { attributes: message.attributes } : {}),
151
+ ...(message.tagName ? { tagName: message.tagName } : {}),
152
+ };
153
+ }
154
+ //# sourceMappingURL=delivered-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivered-message.js","sourceRoot":"","sources":["../src/delivered-message.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,19 @@
1
+ import type { DeliveredMessage } from './delivered-message.js';
1
2
  import type { CreatedAgent } from './persistent-agent.js';
2
- import type { FabricActor } from './types.js';
3
+ import type { FabricActor, JsonObject } from './types.js';
3
4
  /** Async delivery request to a persistent agent instance + session. */
4
5
  export interface AgentDispatchRequest {
5
6
  /** Instance id of the target persistent agent. */
6
7
  id: string;
7
8
  /** Named session within the instance. Defaults to `"default"`. */
8
9
  session?: string;
9
- /** JSON-serializable payload delivered to the instance. */
10
- input: unknown;
10
+ /**
11
+ * The message delivered to the session. Preferred over `input`; a string
12
+ * or plain JSON `input` is normalized into a user-kind message.
13
+ */
14
+ message?: DeliveredMessage;
15
+ /** Legacy JSON-serializable payload. Normalized into `message` at admission. */
16
+ input?: DeliveredMessage | string | JsonObject;
11
17
  }
12
18
  /** A dispatch request that names its target agent. */
13
19
  export interface NamedAgentDispatchRequest extends AgentDispatchRequest {
@@ -24,6 +30,13 @@ export interface DispatchInput {
24
30
  agent: string;
25
31
  id: string;
26
32
  session: string;
33
+ /** The normalized message delivered to the session. */
34
+ message: DeliveredMessage;
35
+ /**
36
+ * Legacy payload, retained for wire compatibility with pre-2.0 queue
37
+ * implementations. New code should read `message`.
38
+ * @deprecated Read `message` instead.
39
+ */
27
40
  input: unknown;
28
41
  acceptedAt: string;
29
42
  tenantId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}
package/dist/dispatch.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { normalizeDeliveredMessage } from './delivered-message.js';
1
2
  /**
2
3
  * In-process dispatch queue: microtask-drained, concurrent across sessions,
3
4
  * serialized within a single session. Suitable for the `inline`/`stateless`
@@ -153,11 +154,13 @@ export async function enqueueDispatch(queue, request, extra = {}) {
153
154
  }
154
155
  let input;
155
156
  try {
156
- input = JSON.parse(JSON.stringify(request.input ?? null));
157
+ // Snapshot at admission time (also proves JSON-serializability).
158
+ input = JSON.parse(JSON.stringify(request.message ?? request.input ?? null));
157
159
  }
158
160
  catch {
159
161
  throw new Error('dispatch: input must be JSON-serializable.');
160
162
  }
163
+ const message = normalizeDeliveredMessage(input);
161
164
  const dispatchInput = {
162
165
  // A caller-supplied id (e.g. derived from a platform event id) gives exactly-once delivery via
163
166
  // the persistent-run idempotency marker; otherwise mint a fresh one.
@@ -165,6 +168,7 @@ export async function enqueueDispatch(queue, request, extra = {}) {
165
168
  agent: request.agent,
166
169
  id: request.id,
167
170
  session: request.session ?? 'default',
171
+ message,
168
172
  input,
169
173
  acceptedAt: new Date().toISOString(),
170
174
  ...(extra.tenantId ? { tenantId: extra.tenantId } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"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"}
package/dist/history.d.ts CHANGED
@@ -45,9 +45,36 @@ export declare class SessionHistory {
45
45
  */
46
46
  getActivePathSince(afterLeafId: string | null | undefined): SessionEntry[];
47
47
  getLatestCompaction(): SessionEntry | undefined;
48
+ /** Trailing dangling tool calls on THIS history's active path. See {@link findTrailingDanglingToolCalls}. */
49
+ findTrailingDanglingToolCalls(): SessionEntry[];
48
50
  buildContextEntries(): SessionEntry[];
49
51
  buildModelMessages(role?: Role): ModelMessage[];
50
52
  }
51
53
  export declare function buildModelMessagesFromHistory(data: SessionData | undefined, role?: Role): ModelMessage[];
54
+ /**
55
+ * Find trailing `tool_call` entries on the active path that were never
56
+ * settled — no matching `tool_result` (paired by `toolCallId`, falling back
57
+ * to tool name) and no subsequent `error` entry for the same tool.
58
+ *
59
+ * A dangling call means a model turn died (crash/abort) between recording
60
+ * the call and recording its outcome. Left in place it produces an
61
+ * assistant `tool_use` with no `tool_result` on resume, which providers
62
+ * reject — the repair path appends synthetic interrupted outcomes for
63
+ * exactly the entries returned here.
64
+ *
65
+ * Conservative by construction: only the window after the last turn
66
+ * boundary (user prompt / assistant message / result / compaction / signal)
67
+ * is examined, so historical, already-settled turns are never re-judged.
68
+ * Both the resume-repair and the submission terminalization derive the
69
+ * dangling set through this single function so they can never disagree.
70
+ */
71
+ export declare function findTrailingDanglingToolCalls(path: SessionEntry[]): SessionEntry[];
72
+ /**
73
+ * Trailing `task_start` entries in the same window with no matching
74
+ * `task_end` — a subtask that was in flight when the turn died. These do not
75
+ * corrupt model context (task entries are bookkeeping), but settling them
76
+ * keeps UI/audit state coherent.
77
+ */
78
+ export declare function findTrailingUnfinishedTasks(path: SessionEntry[]): SessionEntry[];
52
79
  export declare function renderSignalMessage(data: SignalEntryData): string;
53
80
  //# sourceMappingURL=history.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnF,eAAO,MAAM,yBAAyB,4iBAA4iB,CAAC;AAEnlB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO;IAMP,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,cAAc;IAI9D;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAUzF;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAWzD,aAAa,IAAI,YAAY,EAAE;IAU/B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO9B;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,EAAE;IAQ1E,mBAAmB,IAAI,YAAY,GAAG,SAAS;IAS/C,mBAAmB,IAAI,YAAY,EAAE;IAgBrC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,YAAY,EAAE;CAiChD;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,YAAY,EAAE,CAExG;AAoDD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAYjE"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../src/history.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,YAAY,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnF,eAAO,MAAM,yBAAyB,4iBAA4iB,CAAC;AAEnlB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA4B;IACjD,OAAO,CAAC,MAAM,CAAqB;IAEnC,OAAO;IAMP,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,cAAc;IAI9D;;;;;;OAMG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAUzF;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAWzD,aAAa,IAAI,YAAY,EAAE;IAU/B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO9B;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,EAAE;IAQ1E,mBAAmB,IAAI,YAAY,GAAG,SAAS;IAS/C,6GAA6G;IAC7G,6BAA6B,IAAI,YAAY,EAAE;IAI/C,mBAAmB,IAAI,YAAY,EAAE;IAgBrC,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,YAAY,EAAE;CAiChD;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,YAAY,EAAE,CAExG;AAiBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAiClF;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAqBhF;AAoDD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAYjE"}