@agent-os-sdk/client 0.7.9 → 0.7.10

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.
@@ -133,6 +133,74 @@ export type BuilderChatResponse = {
133
133
  thread_id: string;
134
134
  hints: HintModel[];
135
135
  };
136
+ /** Supported patch operation types */
137
+ export type OpType = "add_node" | "remove_node" | "update_node" | "add_edge" | "remove_edge" | "set_entrypoint" | "rename_node";
138
+ /** A single graph modification operation */
139
+ export type PatchOp = {
140
+ op: OpType;
141
+ node_id?: string;
142
+ kind?: string;
143
+ label?: string;
144
+ data?: Record<string, unknown>;
145
+ set?: Record<string, unknown>;
146
+ source?: string;
147
+ target?: string;
148
+ from?: string;
149
+ to?: string;
150
+ entrypoint?: string;
151
+ };
152
+ /** A collection of patch operations with deterministic ID */
153
+ export type GraphPatch = {
154
+ patch_id: string;
155
+ ops: PatchOp[];
156
+ description?: string;
157
+ };
158
+ /** Validation error from applying patch */
159
+ export type PatchValidationError = {
160
+ code: string;
161
+ message: string;
162
+ node_id?: string;
163
+ path?: string;
164
+ };
165
+ /** Meta-chat request */
166
+ export type MetaChatRequest = {
167
+ instruction: string;
168
+ };
169
+ /** Meta-chat stream events */
170
+ export type MetaChatStreamEvent = {
171
+ type: "assistant.delta";
172
+ data: {
173
+ text: string;
174
+ };
175
+ } | {
176
+ type: "patch.validation";
177
+ data: {
178
+ valid: boolean;
179
+ errors: PatchValidationError[];
180
+ };
181
+ } | {
182
+ type: "patch.proposed";
183
+ data: GraphPatch;
184
+ } | {
185
+ type: "final";
186
+ data: {
187
+ ok: boolean;
188
+ patch_id: string;
189
+ };
190
+ } | {
191
+ type: "error";
192
+ data: {
193
+ error: string;
194
+ };
195
+ };
196
+ /** Meta-chat sync response */
197
+ export type MetaChatResponse = {
198
+ patch: GraphPatch | null;
199
+ applied_spec: Record<string, unknown> | null;
200
+ valid: boolean;
201
+ errors: PatchValidationError[];
202
+ message: string;
203
+ };
136
204
  export declare class BuilderModule {
137
205
  private client;
138
206
  constructor(client: RawClient);
@@ -153,5 +221,26 @@ export declare class BuilderModule {
153
221
  * Convenience method: chat and collect all events.
154
222
  */
155
223
  chatCollect(agentId: string, request: BuilderChatRequest): Promise<BuilderChatResponse>;
224
+ /**
225
+ * Stream meta-chat with patch-ops architecture (SSE).
226
+ * Returns GraphPatch proposals instead of full graph specs.
227
+ *
228
+ * @example
229
+ * ```ts
230
+ * for await (const event of client.builder.metaChat(agentId, {
231
+ * instruction: "Add a log node after the main agent"
232
+ * })) {
233
+ * if (event.type === 'patch.proposed') {
234
+ * const patch = event.data;
235
+ * console.log(`Proposed ${patch.ops.length} operations`);
236
+ * }
237
+ * }
238
+ * ```
239
+ */
240
+ metaChat(agentId: string, request: MetaChatRequest, options?: SSEOptions): AsyncGenerator<MetaChatStreamEvent>;
241
+ /**
242
+ * Meta-chat and collect the proposed patch.
243
+ */
244
+ metaChatCollect(agentId: string, request: MetaChatRequest): Promise<MetaChatResponse>;
156
245
  }
157
246
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/modules/builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/modules/builder.ts"],"names":[],"mappings":"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"}
@@ -146,4 +146,103 @@ export class BuilderModule {
146
146
  thread_id: threadId,
147
147
  };
148
148
  }
149
+ // ============================================
150
+ // META-CHAT V2 (PATCH-OPS ARCHITECTURE)
151
+ // ============================================
152
+ /**
153
+ * Stream meta-chat with patch-ops architecture (SSE).
154
+ * Returns GraphPatch proposals instead of full graph specs.
155
+ *
156
+ * @example
157
+ * ```ts
158
+ * for await (const event of client.builder.metaChat(agentId, {
159
+ * instruction: "Add a log node after the main agent"
160
+ * })) {
161
+ * if (event.type === 'patch.proposed') {
162
+ * const patch = event.data;
163
+ * console.log(`Proposed ${patch.ops.length} operations`);
164
+ * }
165
+ * }
166
+ * ```
167
+ */
168
+ async *metaChat(agentId, request, options) {
169
+ const response = await this.client.streamPost("/v1/builder/{agentId}/meta-chat", {
170
+ params: { path: { agentId } },
171
+ body: request,
172
+ signal: options?.signal,
173
+ });
174
+ if (!response.ok) {
175
+ const errorText = await response.text();
176
+ throw new Error(`Meta-chat failed: ${response.status} - ${errorText}`);
177
+ }
178
+ if (!response.body) {
179
+ throw new Error("No response body");
180
+ }
181
+ options?.onOpen?.();
182
+ const reader = response.body.getReader();
183
+ const decoder = new TextDecoder();
184
+ let buffer = "";
185
+ try {
186
+ while (true) {
187
+ const { done, value } = await reader.read();
188
+ if (done)
189
+ break;
190
+ buffer += decoder.decode(value, { stream: true });
191
+ const lines = buffer.split("\n");
192
+ buffer = lines.pop() ?? "";
193
+ let eventType = "message";
194
+ let eventData = "";
195
+ for (const line of lines) {
196
+ if (line.startsWith("event:")) {
197
+ eventType = line.slice(6).trim();
198
+ }
199
+ else if (line.startsWith("data:")) {
200
+ eventData = line.slice(5).trim();
201
+ }
202
+ else if (line === "" && eventData) {
203
+ try {
204
+ const parsed = JSON.parse(eventData);
205
+ yield { type: eventType, data: parsed };
206
+ }
207
+ catch {
208
+ // Skip invalid JSON
209
+ }
210
+ eventData = "";
211
+ eventType = "message";
212
+ }
213
+ }
214
+ }
215
+ }
216
+ finally {
217
+ reader.releaseLock();
218
+ }
219
+ }
220
+ /**
221
+ * Meta-chat and collect the proposed patch.
222
+ */
223
+ async metaChatCollect(agentId, request) {
224
+ let patch = null;
225
+ let isValid = true;
226
+ const errors = [];
227
+ let message = "";
228
+ for await (const event of this.metaChat(agentId, request)) {
229
+ if (event.type === "assistant.delta") {
230
+ message += event.data.text;
231
+ }
232
+ else if (event.type === "patch.proposed") {
233
+ patch = event.data;
234
+ }
235
+ else if (event.type === "patch.validation") {
236
+ isValid = event.data.valid;
237
+ errors.push(...event.data.errors);
238
+ }
239
+ }
240
+ return {
241
+ patch,
242
+ applied_spec: null, // Frontend should apply patch locally
243
+ valid: isValid,
244
+ errors,
245
+ message,
246
+ };
247
+ }
149
248
  }
@@ -55,6 +55,27 @@ export interface TriggerListResponse {
55
55
  items: Trigger[];
56
56
  total: number;
57
57
  }
58
+ export interface TriggerInputContractResponse {
59
+ trigger_id: string;
60
+ template_slug?: string;
61
+ external_body_schema?: unknown;
62
+ run_input_schema?: unknown;
63
+ effective_input_mapping_spec?: unknown;
64
+ example_payload?: unknown;
65
+ has_input_mapping: boolean;
66
+ }
67
+ export interface MappingValidationError {
68
+ code: string;
69
+ path?: string;
70
+ message: string;
71
+ }
72
+ export interface TestMappingResponse {
73
+ original_payload: unknown;
74
+ transformed_graph_input: unknown;
75
+ mapping_configured: boolean;
76
+ mapping_executed: boolean;
77
+ validation_errors?: MappingValidationError[];
78
+ }
58
79
  export declare class TriggersModule {
59
80
  private client;
60
81
  private headers;
@@ -109,7 +130,21 @@ export declare class TriggersModule {
109
130
  * Avoids client-side secret exposure - server signs the request.
110
131
  * @param triggerId - The trigger to test
111
132
  * @param payload - Optional JSON payload (wrapped in { payload: ... } per backend contract)
133
+ * @param threadKey - Optional thread key for conversation context
134
+ * @param idempotencyKey - Optional idempotency key for deduplication
135
+ */
136
+ test(triggerId: string, payload?: unknown, threadKey?: string, idempotencyKey?: string): Promise<APIResponse<TestTriggerResponse>>;
137
+ /**
138
+ * Get the full input contract for a trigger.
139
+ * Returns schemas and mapping spec for transformation configuration.
140
+ */
141
+ getContract(triggerId: string): Promise<APIResponse<TriggerInputContractResponse>>;
142
+ /**
143
+ * Test input mapping transformation without executing a run.
144
+ * Preview how a payload will be transformed before execution.
145
+ * @param triggerId - The trigger to test mapping for
146
+ * @param samplePayload - Sample payload to transform
112
147
  */
113
- test(triggerId: string, payload?: unknown): Promise<APIResponse<TestTriggerResponse>>;
148
+ testMapping(triggerId: string, samplePayload: unknown): Promise<APIResponse<TestMappingResponse>>;
114
149
  }
115
150
  //# sourceMappingURL=triggers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../src/modules/triggers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triggers.d.ts","sourceRoot":"","sources":["../../src/modules/triggers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/D,MAAM,WAAW,OAAO;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAE7B;AAED,MAAM,WAAW,sBAAsB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,qBAAqB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAMD,MAAM,WAAW,4BAA4B;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAChC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,OAAO,CAAC;IACjC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAChD;AAMD,qBAAa,cAAc;IACX,OAAO,CAAC,MAAM;IAAa,OAAO,CAAC,OAAO;gBAAlC,MAAM,EAAE,SAAS,EAAU,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAEpF;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAO7C;;;OAGG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAI7E;;OAEG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAO3D;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IAO/E;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAOjC;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;QAClC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,OAAO,CAAC;KACvB,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAQjC;;OAEG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAO3D;;;;;;;OAOG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAYxI;;;OAGG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC;IAOxF;;;;;OAKG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;CAO1G"}
@@ -82,11 +82,40 @@ export class TriggersModule {
82
82
  * Avoids client-side secret exposure - server signs the request.
83
83
  * @param triggerId - The trigger to test
84
84
  * @param payload - Optional JSON payload (wrapped in { payload: ... } per backend contract)
85
+ * @param threadKey - Optional thread key for conversation context
86
+ * @param idempotencyKey - Optional idempotency key for deduplication
85
87
  */
86
- async test(triggerId, payload) {
88
+ async test(triggerId, payload, threadKey, idempotencyKey) {
87
89
  return this.client.POST("/v1/api/triggers/{id}/test", {
88
90
  params: { path: { id: triggerId } },
89
- body: payload !== undefined ? { payload } : undefined,
91
+ body: {
92
+ payload: payload ?? undefined,
93
+ thread_key: threadKey ?? undefined,
94
+ idempotency_key: idempotencyKey ?? undefined,
95
+ },
96
+ headers: this.headers(),
97
+ });
98
+ }
99
+ /**
100
+ * Get the full input contract for a trigger.
101
+ * Returns schemas and mapping spec for transformation configuration.
102
+ */
103
+ async getContract(triggerId) {
104
+ return this.client.GET("/v1/api/triggers/{id}/contract", {
105
+ params: { path: { id: triggerId } },
106
+ headers: this.headers(),
107
+ });
108
+ }
109
+ /**
110
+ * Test input mapping transformation without executing a run.
111
+ * Preview how a payload will be transformed before execution.
112
+ * @param triggerId - The trigger to test mapping for
113
+ * @param samplePayload - Sample payload to transform
114
+ */
115
+ async testMapping(triggerId, samplePayload) {
116
+ return this.client.POST("/v1/api/triggers/{id}/test-mapping", {
117
+ params: { path: { id: triggerId } },
118
+ body: { sample_payload: samplePayload },
90
119
  headers: this.headers(),
91
120
  });
92
121
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-os-sdk/client",
3
- "version": "0.7.9",
3
+ "version": "0.7.10",
4
4
  "description": "Official TypeScript SDK for Agent OS platform",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -49,4 +49,4 @@
49
49
  "dist",
50
50
  "src"
51
51
  ]
52
- }
52
+ }
@@ -144,6 +144,73 @@ export type BuilderChatResponse = {
144
144
  hints: HintModel[];
145
145
  };
146
146
 
147
+ // ============================================
148
+ // PATCH-OPS ARCHITECTURE (Meta-Agent V2)
149
+ // ============================================
150
+
151
+ /** Supported patch operation types */
152
+ export type OpType =
153
+ | "add_node"
154
+ | "remove_node"
155
+ | "update_node"
156
+ | "add_edge"
157
+ | "remove_edge"
158
+ | "set_entrypoint"
159
+ | "rename_node";
160
+
161
+ /** A single graph modification operation */
162
+ export type PatchOp = {
163
+ op: OpType;
164
+ node_id?: string;
165
+ kind?: string;
166
+ label?: string;
167
+ data?: Record<string, unknown>;
168
+ set?: Record<string, unknown>;
169
+ source?: string;
170
+ target?: string;
171
+ from?: string;
172
+ to?: string;
173
+ entrypoint?: string;
174
+ };
175
+
176
+ /** A collection of patch operations with deterministic ID */
177
+ export type GraphPatch = {
178
+ patch_id: string;
179
+ ops: PatchOp[];
180
+ description?: string;
181
+ };
182
+
183
+ /** Validation error from applying patch */
184
+ export type PatchValidationError = {
185
+ code: string;
186
+ message: string;
187
+ node_id?: string;
188
+ path?: string;
189
+ };
190
+
191
+ /** Meta-chat request */
192
+ export type MetaChatRequest = {
193
+ instruction: string;
194
+ };
195
+
196
+ /** Meta-chat stream events */
197
+ export type MetaChatStreamEvent =
198
+ | { type: "assistant.delta"; data: { text: string } }
199
+ | { type: "patch.validation"; data: { valid: boolean; errors: PatchValidationError[] } }
200
+ | { type: "patch.proposed"; data: GraphPatch }
201
+ | { type: "final"; data: { ok: boolean; patch_id: string } }
202
+ | { type: "error"; data: { error: string } };
203
+
204
+ /** Meta-chat sync response */
205
+ export type MetaChatResponse = {
206
+ patch: GraphPatch | null;
207
+ applied_spec: Record<string, unknown> | null;
208
+ valid: boolean;
209
+ errors: PatchValidationError[];
210
+ message: string;
211
+ };
212
+
213
+
147
214
  export class BuilderModule {
148
215
  constructor(private client: RawClient) { }
149
216
 
@@ -281,4 +348,116 @@ export class BuilderModule {
281
348
  thread_id: threadId,
282
349
  };
283
350
  }
351
+
352
+ // ============================================
353
+ // META-CHAT V2 (PATCH-OPS ARCHITECTURE)
354
+ // ============================================
355
+
356
+ /**
357
+ * Stream meta-chat with patch-ops architecture (SSE).
358
+ * Returns GraphPatch proposals instead of full graph specs.
359
+ *
360
+ * @example
361
+ * ```ts
362
+ * for await (const event of client.builder.metaChat(agentId, {
363
+ * instruction: "Add a log node after the main agent"
364
+ * })) {
365
+ * if (event.type === 'patch.proposed') {
366
+ * const patch = event.data;
367
+ * console.log(`Proposed ${patch.ops.length} operations`);
368
+ * }
369
+ * }
370
+ * ```
371
+ */
372
+ async *metaChat(
373
+ agentId: string,
374
+ request: MetaChatRequest,
375
+ options?: SSEOptions
376
+ ): AsyncGenerator<MetaChatStreamEvent> {
377
+ const response = await this.client.streamPost("/v1/builder/{agentId}/meta-chat", {
378
+ params: { path: { agentId } },
379
+ body: request,
380
+ signal: options?.signal,
381
+ });
382
+
383
+ if (!response.ok) {
384
+ const errorText = await response.text();
385
+ throw new Error(`Meta-chat failed: ${response.status} - ${errorText}`);
386
+ }
387
+
388
+ if (!response.body) {
389
+ throw new Error("No response body");
390
+ }
391
+
392
+ options?.onOpen?.();
393
+
394
+ const reader = response.body.getReader();
395
+ const decoder = new TextDecoder();
396
+ let buffer = "";
397
+
398
+ try {
399
+ while (true) {
400
+ const { done, value } = await reader.read();
401
+ if (done) break;
402
+
403
+ buffer += decoder.decode(value, { stream: true });
404
+ const lines = buffer.split("\n");
405
+ buffer = lines.pop() ?? "";
406
+
407
+ let eventType = "message";
408
+ let eventData = "";
409
+
410
+ for (const line of lines) {
411
+ if (line.startsWith("event:")) {
412
+ eventType = line.slice(6).trim();
413
+ } else if (line.startsWith("data:")) {
414
+ eventData = line.slice(5).trim();
415
+ } else if (line === "" && eventData) {
416
+ try {
417
+ const parsed = JSON.parse(eventData);
418
+ yield { type: eventType, data: parsed } as MetaChatStreamEvent;
419
+ } catch {
420
+ // Skip invalid JSON
421
+ }
422
+ eventData = "";
423
+ eventType = "message";
424
+ }
425
+ }
426
+ }
427
+ } finally {
428
+ reader.releaseLock();
429
+ }
430
+ }
431
+
432
+ /**
433
+ * Meta-chat and collect the proposed patch.
434
+ */
435
+ async metaChatCollect(
436
+ agentId: string,
437
+ request: MetaChatRequest
438
+ ): Promise<MetaChatResponse> {
439
+ let patch: GraphPatch | null = null;
440
+ let isValid = true;
441
+ const errors: PatchValidationError[] = [];
442
+ let message = "";
443
+
444
+ for await (const event of this.metaChat(agentId, request)) {
445
+ if (event.type === "assistant.delta") {
446
+ message += event.data.text;
447
+ } else if (event.type === "patch.proposed") {
448
+ patch = event.data;
449
+ } else if (event.type === "patch.validation") {
450
+ isValid = event.data.valid;
451
+ errors.push(...event.data.errors);
452
+ }
453
+ }
454
+
455
+ return {
456
+ patch,
457
+ applied_spec: null, // Frontend should apply patch locally
458
+ valid: isValid,
459
+ errors,
460
+ message,
461
+ };
462
+ }
284
463
  }
@@ -68,6 +68,34 @@ export interface TriggerListResponse {
68
68
  total: number;
69
69
  }
70
70
 
71
+ // =============================================================================
72
+ // Input Mapping Types (Wave 2)
73
+ // =============================================================================
74
+
75
+ export interface TriggerInputContractResponse {
76
+ trigger_id: string;
77
+ template_slug?: string;
78
+ external_body_schema?: unknown;
79
+ run_input_schema?: unknown;
80
+ effective_input_mapping_spec?: unknown;
81
+ example_payload?: unknown;
82
+ has_input_mapping: boolean;
83
+ }
84
+
85
+ export interface MappingValidationError {
86
+ code: string;
87
+ path?: string;
88
+ message: string;
89
+ }
90
+
91
+ export interface TestMappingResponse {
92
+ original_payload: unknown;
93
+ transformed_graph_input: unknown;
94
+ mapping_configured: boolean;
95
+ mapping_executed: boolean;
96
+ validation_errors?: MappingValidationError[];
97
+ }
98
+
71
99
  // =============================================================================
72
100
  // Module
73
101
  // =============================================================================
@@ -165,12 +193,44 @@ export class TriggersModule {
165
193
  * Avoids client-side secret exposure - server signs the request.
166
194
  * @param triggerId - The trigger to test
167
195
  * @param payload - Optional JSON payload (wrapped in { payload: ... } per backend contract)
196
+ * @param threadKey - Optional thread key for conversation context
197
+ * @param idempotencyKey - Optional idempotency key for deduplication
168
198
  */
169
- async test(triggerId: string, payload?: unknown): Promise<APIResponse<TestTriggerResponse>> {
199
+ async test(triggerId: string, payload?: unknown, threadKey?: string, idempotencyKey?: string): Promise<APIResponse<TestTriggerResponse>> {
170
200
  return this.client.POST<TestTriggerResponse>("/v1/api/triggers/{id}/test", {
171
201
  params: { path: { id: triggerId } },
172
- body: payload !== undefined ? { payload } : undefined,
202
+ body: {
203
+ payload: payload ?? undefined,
204
+ thread_key: threadKey ?? undefined,
205
+ idempotency_key: idempotencyKey ?? undefined,
206
+ },
207
+ headers: this.headers(),
208
+ });
209
+ }
210
+
211
+ /**
212
+ * Get the full input contract for a trigger.
213
+ * Returns schemas and mapping spec for transformation configuration.
214
+ */
215
+ async getContract(triggerId: string): Promise<APIResponse<TriggerInputContractResponse>> {
216
+ return this.client.GET<TriggerInputContractResponse>("/v1/api/triggers/{id}/contract", {
217
+ params: { path: { id: triggerId } },
218
+ headers: this.headers(),
219
+ });
220
+ }
221
+
222
+ /**
223
+ * Test input mapping transformation without executing a run.
224
+ * Preview how a payload will be transformed before execution.
225
+ * @param triggerId - The trigger to test mapping for
226
+ * @param samplePayload - Sample payload to transform
227
+ */
228
+ async testMapping(triggerId: string, samplePayload: unknown): Promise<APIResponse<TestMappingResponse>> {
229
+ return this.client.POST<TestMappingResponse>("/v1/api/triggers/{id}/test-mapping", {
230
+ params: { path: { id: triggerId } },
231
+ body: { sample_payload: samplePayload },
173
232
  headers: this.headers(),
174
233
  });
175
234
  }
176
235
  }
236
+