@openwop/openwop 1.1.1 → 1.1.2

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/README.md CHANGED
@@ -84,10 +84,14 @@ npx tsc --noEmit # typecheck the SDK source
84
84
  | `GET /v1/runs/{id}/events` (SSE) | `client.runs.events(id, opts?)` (async iterable) |
85
85
  | `GET /v1/runs/{id}/events/poll` | `client.runs.pollEvents(id, opts?)` |
86
86
  | `POST /v1/runs/{id}/cancel` | `client.runs.cancel(id, body?)` |
87
+ | `POST /v1/runs:bulk-cancel` | `client.runs.bulkCancel(body, opts?)` |
88
+ | `POST /v1/runs/{id}:pause` | `client.runs.pause(id, body?, opts?)` |
89
+ | `POST /v1/runs/{id}:resume` | `client.runs.resume(id, body?, opts?)` |
87
90
  | `POST /v1/runs/{id}:fork` | `client.runs.fork(id, body)` |
88
91
  | `POST /v1/runs/{id}/interrupts/{nodeId}` | `client.interrupts.resolveByRun(id, nodeId, body)` |
89
92
  | `GET /v1/interrupts/{token}` | `client.interrupts.inspectByToken(token)` |
90
93
  | `POST /v1/interrupts/{token}` | `client.interrupts.resolveByToken(token, body)` |
94
+ | `GET /v1/audit/verify` | `client.audit.verify(fromSeq, toSeq)` |
91
95
 
92
96
  **Idempotency-Key** is supported via the `idempotencyKey` option on every mutation method.
93
97
 
package/dist/client.d.ts CHANGED
@@ -8,7 +8,7 @@
8
8
  * ../../auth.md for credential format.
9
9
  */
10
10
  import { type EventsStreamOptions } from './sse.js';
11
- import { type AuditVerifyResult, type BulkCancelRunsRequest, type BulkCancelRunsResponse, type Capabilities, type CancelRunRequest, type CancelRunResponse, type CreateRunRequest, type CreateRunResponse, type ForkRunRequest, type ForkRunResponse, type InterruptByTokenInspection, type PollEventsResponse, type ResolveInterruptByTokenResponse, type ResolveInterruptRequest, type ResolveInterruptResponse, type RunEventDoc, type RunSnapshot } from './types.js';
11
+ import { type AuditVerifyResult, type BulkCancelRunsRequest, type BulkCancelRunsResponse, type Capabilities, type CancelRunRequest, type CancelRunResponse, type CreateRunRequest, type CreateRunResponse, type ForkRunRequest, type ForkRunResponse, type GetPromptRequest, type InterruptByTokenInspection, type DebugBundle, type DebugBundleOptions, type ListPromptsRequest, type ListPromptsResponse, type PromptTemplate, type RegisterWebhookRequest, type RegisterWebhookResponse, type PauseRunRequest, type PauseRunResponse, type PollEventsResponse, type RenderPromptRequest, type RenderPromptResponse, type ResolveInterruptByTokenResponse, type ResolveInterruptRequest, type ResolveInterruptResponse, type ResumeRunRequest, type ResumeRunResponse, type RunEventDoc, type RunSnapshot } from './types.js';
12
12
  export interface OpenwopClientOptions {
13
13
  /** Base URL of the openwop server, e.g., `https://api.example.com`. Trailing slash optional. */
14
14
  readonly baseUrl: string;
@@ -38,7 +38,22 @@ export declare class OpenwopClient {
38
38
  readonly runs: {
39
39
  create: (body: CreateRunRequest, opts?: MutationOptions) => Promise<CreateRunResponse>;
40
40
  get: (runId: string) => Promise<RunSnapshot>;
41
+ /**
42
+ * Fetch the portable JSON diagnostic export for a single run per
43
+ * `spec/v1/debug-bundle.md`. The bundle's `redactionMode` reflects
44
+ * the host's advertised `capabilities.compliance.defaultMode`; the
45
+ * caller MUST treat masked/omitted/hashed fields as the
46
+ * spec-canonical value. The `truncated` + `truncatedReason` fields
47
+ * indicate the host hit its size cap.
48
+ *
49
+ * Returns `null` when the host doesn't advertise
50
+ * `capabilities.debugBundle.supported: true` (the endpoint returns
51
+ * 404 in that case per `debug-bundle.md` §"Authorization").
52
+ */
53
+ debugBundle: (runId: string, opts?: DebugBundleOptions) => Promise<DebugBundle | null>;
41
54
  cancel: (runId: string, body?: CancelRunRequest, opts?: MutationOptions) => Promise<CancelRunResponse>;
55
+ pause: (runId: string, body?: PauseRunRequest, opts?: MutationOptions) => Promise<PauseRunResponse>;
56
+ resume: (runId: string, body?: ResumeRunRequest, opts?: MutationOptions) => Promise<ResumeRunResponse>;
42
57
  /**
43
58
  * Bulk-cancel a set of in-flight runs in a single request per
44
59
  * `rest-endpoints.md` §"POST /v1/runs:bulk-cancel" (closes R1).
@@ -78,6 +93,70 @@ export declare class OpenwopClient {
78
93
  */
79
94
  resolveByToken: (token: string, body: ResolveInterruptRequest, opts?: MutationOptions) => Promise<ResolveInterruptByTokenResponse>;
80
95
  };
96
+ readonly webhooks: {
97
+ /**
98
+ * Register a webhook subscription. Server signs deliveries with
99
+ * HMAC-SHA256 over `${timestamp}.${rawBody}` using the
100
+ * registration-time secret per `spec/v1/webhooks.md` §"Signature
101
+ * recipe". The secret is returned ONCE in the response — store it
102
+ * server-side for verification; the host cannot recover it.
103
+ */
104
+ register: (body: RegisterWebhookRequest, opts?: MutationOptions) => Promise<RegisterWebhookResponse>;
105
+ /**
106
+ * Unregister a webhook subscription. Returns void on success;
107
+ * throws `WopError` with `subscription_not_found` on unknown
108
+ * subscriptionId.
109
+ */
110
+ unregister: (subscriptionId: string) => Promise<void>;
111
+ };
112
+ readonly prompts: {
113
+ /**
114
+ * List prompt templates available to the caller per RFC 0028 §A
115
+ * (operationId `listPromptTemplates`). Supports kind / tag / modelClass
116
+ * / source filters + opaque cursor pagination.
117
+ */
118
+ list: (req?: ListPromptsRequest) => Promise<ListPromptsResponse>;
119
+ /**
120
+ * Fetch a single PromptTemplate by id per RFC 0028 §A
121
+ * (operationId `getPromptTemplate`). Optionally pin a SemVer
122
+ * `version`; supply `libraryId` to disambiguate when multiple installed
123
+ * packs ship the same templateId.
124
+ */
125
+ get: (req: GetPromptRequest) => Promise<PromptTemplate>;
126
+ /**
127
+ * Render a PromptTemplate with supplied variable bindings per RFC 0028
128
+ * §A (operationId `renderPromptTemplate`). Returns composed body +
129
+ * sha256 hash + per-variable hashes. The deterministic-hash invariant
130
+ * (RFC 0028 §A) requires the `hash` to match what a matching
131
+ * `prompt.composed` event would carry at dispatch time. Does NOT
132
+ * dispatch an LLM call. Secret-source variable values MUST be supplied
133
+ * as `[REDACTED:<credentialRef>]` markers per
134
+ * SECURITY/threat-model-secret-leakage.md §SR-1.
135
+ */
136
+ render: (req: RenderPromptRequest) => Promise<RenderPromptResponse>;
137
+ /**
138
+ * Create a new user-source PromptTemplate per RFC 0028 §A
139
+ * (operationId `createPromptTemplate`). Mutating endpoint —
140
+ * requires `capabilities.prompts.mutableLibrary: true`. Supports
141
+ * `Idempotency-Key` per the standard `MutationOptions` pattern.
142
+ */
143
+ create: (template: PromptTemplate, opts?: MutationOptions) => Promise<void>;
144
+ /**
145
+ * Replace an existing user-source PromptTemplate per RFC 0028 §A
146
+ * (operationId `updatePromptTemplate`). Submitted SemVer MUST be
147
+ * strictly greater than stored. Mutating endpoint — requires
148
+ * `capabilities.prompts.mutableLibrary: true`. Pack-sourced and
149
+ * host-built-in templates are read-only (host returns 403).
150
+ */
151
+ update: (templateId: string, template: PromptTemplate, opts?: MutationOptions) => Promise<PromptTemplate>;
152
+ /**
153
+ * Delete a user-source PromptTemplate per RFC 0028 §A
154
+ * (operationId `deletePromptTemplate`). Mutating endpoint —
155
+ * requires `capabilities.prompts.mutableLibrary: true`. Pack-sourced
156
+ * and host-built-in templates are read-only (host returns 403).
157
+ */
158
+ delete: (templateId: string) => Promise<void>;
159
+ };
81
160
  readonly audit: {
82
161
  /**
83
162
  * Verify the audit-log hash chain over `[fromSeq, toSeq]` per
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EAEtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,kBAAkB,EACvB,KAAK,+BAA+B,EACpC,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EAChB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,oBAAoB;IACnC,gGAAgG;IAChG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2FAA2F;IAC3F,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,gFAAgF;IAChF,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC5B;AAUD,qBAAa,aAAa;;gBAMZ,IAAI,EAAE,oBAAoB;IAUtC,QAAQ,CAAC,SAAS;4BACE,OAAO,CAAC,YAAY,CAAC;uBAG1B,OAAO,CAAC,OAAO,CAAC;MAE7B;IAGF,QAAQ,CAAC,SAAS;0BACE,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;MAK3C;IAGF,QAAQ,CAAC,IAAI;uBACI,gBAAgB,SAAQ,eAAe,KAAQ,OAAO,CAAC,iBAAiB,CAAC;qBAQ3E,MAAM,KAAG,OAAO,CAAC,WAAW,CAAC;wBAOjC,MAAM,SACP,gBAAgB,SAChB,eAAe,KACpB,OAAO,CAAC,iBAAiB,CAAC;QAQ7B;;;;;;;;WAQG;2BAEK,qBAAqB,SACrB,eAAe,KACpB,OAAO,CAAC,sBAAsB,CAAC;sBASzB,MAAM,QACP,cAAc,SACd,eAAe,KACpB,OAAO,CAAC,eAAe,CAAC;4BASlB,MAAM,WACL;YAAE,YAAY,CAAC,EAAE,MAAM,CAAC;YAAC,cAAc,CAAC,EAAE,MAAM,CAAA;SAAE,KACzD,OAAO,CAAC,kBAAkB,CAAC;QAe9B;;;;WAIG;wBACa,MAAM,SAAQ,mBAAmB,KAAQ,cAAc,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC;MAEhG;IAGF,QAAQ,CAAC,UAAU;8BAER,MAAM,UACL,MAAM,QACR,uBAAuB,SACvB,eAAe,KACpB,OAAO,CAAC,wBAAwB,CAAC;QAQpC;;;;;;WAMG;gCACqB,MAAM,KAAG,OAAO,CAAC,0BAA0B,CAAC;QASpE;;;;WAIG;gCAEM,MAAM,QACP,uBAAuB,SACvB,eAAe,KACpB,OAAO,CAAC,+BAA+B,CAAC;MAU3C;IAGF,QAAQ,CAAC,KAAK;QACZ;;;;;;;;;;WAUG;0BACe,MAAM,SAAS,MAAM,KAAG,OAAO,CAAC,iBAAiB,CAAC;MASpE;CAsEH"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -48,12 +48,53 @@ export class OpenwopClient {
48
48
  method: 'GET',
49
49
  path: `/v1/runs/${encodeURIComponent(runId)}`,
50
50
  }),
51
+ /**
52
+ * Fetch the portable JSON diagnostic export for a single run per
53
+ * `spec/v1/debug-bundle.md`. The bundle's `redactionMode` reflects
54
+ * the host's advertised `capabilities.compliance.defaultMode`; the
55
+ * caller MUST treat masked/omitted/hashed fields as the
56
+ * spec-canonical value. The `truncated` + `truncatedReason` fields
57
+ * indicate the host hit its size cap.
58
+ *
59
+ * Returns `null` when the host doesn't advertise
60
+ * `capabilities.debugBundle.supported: true` (the endpoint returns
61
+ * 404 in that case per `debug-bundle.md` §"Authorization").
62
+ */
63
+ debugBundle: async (runId, opts = {}) => {
64
+ const params = new URLSearchParams();
65
+ if (opts.maxEvents !== undefined)
66
+ params.set('maxEvents', String(opts.maxEvents));
67
+ const query = params.toString();
68
+ const path = `/v1/runs/${encodeURIComponent(runId)}/debug-bundle${query ? `?${query}` : ''}`;
69
+ try {
70
+ return await this.#request({ method: 'GET', path });
71
+ }
72
+ catch (err) {
73
+ // Host doesn't advertise the capability → 404. Surface as null so callers
74
+ // can branch on capability discovery without try/catch.
75
+ if (err instanceof Error && /\b404\b/.test(err.message))
76
+ return null;
77
+ throw err;
78
+ }
79
+ },
51
80
  cancel: (runId, body = {}, opts = {}) => this.#request({
52
81
  method: 'POST',
53
82
  path: `/v1/runs/${encodeURIComponent(runId)}/cancel`,
54
83
  body,
55
84
  headers: this.#mutationHeaders(opts),
56
85
  }),
86
+ pause: (runId, body = {}, opts = {}) => this.#request({
87
+ method: 'POST',
88
+ path: `/v1/runs/${encodeURIComponent(runId)}:pause`,
89
+ body,
90
+ headers: this.#mutationHeaders(opts),
91
+ }),
92
+ resume: (runId, body = {}, opts = {}) => this.#request({
93
+ method: 'POST',
94
+ path: `/v1/runs/${encodeURIComponent(runId)}:resume`,
95
+ body,
96
+ headers: this.#mutationHeaders(opts),
97
+ }),
57
98
  /**
58
99
  * Bulk-cancel a set of in-flight runs in a single request per
59
100
  * `rest-endpoints.md` §"POST /v1/runs:bulk-cancel" (closes R1).
@@ -127,6 +168,151 @@ export class OpenwopClient {
127
168
  headers: this.#mutationHeaders(opts),
128
169
  }, false),
129
170
  };
171
+ // ── Webhook subscriptions (per spec/v1/webhooks.md) ─────────────────────
172
+ webhooks = {
173
+ /**
174
+ * Register a webhook subscription. Server signs deliveries with
175
+ * HMAC-SHA256 over `${timestamp}.${rawBody}` using the
176
+ * registration-time secret per `spec/v1/webhooks.md` §"Signature
177
+ * recipe". The secret is returned ONCE in the response — store it
178
+ * server-side for verification; the host cannot recover it.
179
+ */
180
+ register: (body, opts = {}) => this.#request({
181
+ method: 'POST',
182
+ path: '/v1/webhooks',
183
+ body,
184
+ headers: this.#mutationHeaders(opts),
185
+ }),
186
+ /**
187
+ * Unregister a webhook subscription. Returns void on success;
188
+ * throws `WopError` with `subscription_not_found` on unknown
189
+ * subscriptionId.
190
+ */
191
+ unregister: async (subscriptionId) => {
192
+ await this.#request({
193
+ method: 'DELETE',
194
+ path: `/v1/webhooks/${encodeURIComponent(subscriptionId)}`,
195
+ });
196
+ },
197
+ };
198
+ // ── Prompt library (RFC 0028; gated on capabilities.prompts.*) ──
199
+ //
200
+ // Read endpoints (list, get, render) gate on
201
+ // `capabilities.prompts.endpointsSupported: true`. Mutating endpoints
202
+ // (create, update, delete) additionally require
203
+ // `capabilities.prompts.mutableLibrary: true`. Hosts that don't advertise
204
+ // the relevant capability return `501 capability_not_provided`; the SDK
205
+ // surfaces that as a `WopError`. Clients SHOULD pre-flight via
206
+ // `getCapabilities()` before calling.
207
+ //
208
+ // NOTE: `capabilities.prompts.supported: true` (without
209
+ // `endpointsSupported: true`) ONLY gates node-execution PromptRef
210
+ // resolution per RFC 0027 Phase A; it does NOT imply these endpoints are
211
+ // available. See spec/v1/prompts.md §"Capability advertisement" for the
212
+ // two-axis gating split.
213
+ prompts = {
214
+ /**
215
+ * List prompt templates available to the caller per RFC 0028 §A
216
+ * (operationId `listPromptTemplates`). Supports kind / tag / modelClass
217
+ * / source filters + opaque cursor pagination.
218
+ */
219
+ list: (req = {}) => {
220
+ const search = new URLSearchParams();
221
+ if (req.kind)
222
+ search.set('kind', req.kind);
223
+ if (req.tag)
224
+ search.set('tag', req.tag);
225
+ if (req.modelClass)
226
+ search.set('modelClass', req.modelClass);
227
+ if (req.source)
228
+ search.set('source', req.source);
229
+ if (req.cursor)
230
+ search.set('cursor', req.cursor);
231
+ if (req.limit !== undefined)
232
+ search.set('limit', String(req.limit));
233
+ const query = search.toString();
234
+ return this.#request({
235
+ method: 'GET',
236
+ path: `/v1/prompts${query ? `?${query}` : ''}`,
237
+ });
238
+ },
239
+ /**
240
+ * Fetch a single PromptTemplate by id per RFC 0028 §A
241
+ * (operationId `getPromptTemplate`). Optionally pin a SemVer
242
+ * `version`; supply `libraryId` to disambiguate when multiple installed
243
+ * packs ship the same templateId.
244
+ */
245
+ get: (req) => {
246
+ const search = new URLSearchParams();
247
+ if (req.version)
248
+ search.set('version', req.version);
249
+ if (req.libraryId)
250
+ search.set('libraryId', req.libraryId);
251
+ const query = search.toString();
252
+ return this.#request({
253
+ method: 'GET',
254
+ path: `/v1/prompts/${encodeURIComponent(req.templateId)}${query ? `?${query}` : ''}`,
255
+ });
256
+ },
257
+ /**
258
+ * Render a PromptTemplate with supplied variable bindings per RFC 0028
259
+ * §A (operationId `renderPromptTemplate`). Returns composed body +
260
+ * sha256 hash + per-variable hashes. The deterministic-hash invariant
261
+ * (RFC 0028 §A) requires the `hash` to match what a matching
262
+ * `prompt.composed` event would carry at dispatch time. Does NOT
263
+ * dispatch an LLM call. Secret-source variable values MUST be supplied
264
+ * as `[REDACTED:<credentialRef>]` markers per
265
+ * SECURITY/threat-model-secret-leakage.md §SR-1.
266
+ */
267
+ render: (req) => {
268
+ return this.#request({
269
+ method: 'POST',
270
+ path: '/v1/prompts:render',
271
+ body: req,
272
+ });
273
+ },
274
+ /**
275
+ * Create a new user-source PromptTemplate per RFC 0028 §A
276
+ * (operationId `createPromptTemplate`). Mutating endpoint —
277
+ * requires `capabilities.prompts.mutableLibrary: true`. Supports
278
+ * `Idempotency-Key` per the standard `MutationOptions` pattern.
279
+ */
280
+ create: (template, opts = {}) => {
281
+ return this.#request({
282
+ method: 'POST',
283
+ path: '/v1/prompts',
284
+ body: template,
285
+ headers: this.#mutationHeaders(opts),
286
+ });
287
+ },
288
+ /**
289
+ * Replace an existing user-source PromptTemplate per RFC 0028 §A
290
+ * (operationId `updatePromptTemplate`). Submitted SemVer MUST be
291
+ * strictly greater than stored. Mutating endpoint — requires
292
+ * `capabilities.prompts.mutableLibrary: true`. Pack-sourced and
293
+ * host-built-in templates are read-only (host returns 403).
294
+ */
295
+ update: (templateId, template, opts = {}) => {
296
+ return this.#request({
297
+ method: 'PUT',
298
+ path: `/v1/prompts/${encodeURIComponent(templateId)}`,
299
+ body: template,
300
+ headers: this.#mutationHeaders(opts),
301
+ });
302
+ },
303
+ /**
304
+ * Delete a user-source PromptTemplate per RFC 0028 §A
305
+ * (operationId `deletePromptTemplate`). Mutating endpoint —
306
+ * requires `capabilities.prompts.mutableLibrary: true`. Pack-sourced
307
+ * and host-built-in templates are read-only (host returns 403).
308
+ */
309
+ delete: (templateId) => {
310
+ return this.#request({
311
+ method: 'DELETE',
312
+ path: `/v1/prompts/${encodeURIComponent(templateId)}`,
313
+ });
314
+ },
315
+ };
130
316
  // ── Audit-log integrity (gated on openwop-audit-log-integrity profile) ──
131
317
  audit = {
132
318
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Cost-attribution allowlist + sanitizer helpers
3
+ * (`spec/v1/observability.md §"Cost attribution attributes"`).
4
+ *
5
+ * The spec MUSTs that hosts emitting `openwop.cost.*` OTel span attrs
6
+ * route them through an allowlist sanitizer that drops any attribute
7
+ * name outside the canonical set AND any non-primitive value. The
8
+ * `cost-attribution-allowlist-redaction` SECURITY invariant + the
9
+ * `cost-attribution.test.ts` conformance scenario are the public test
10
+ * surface; this module is the SDK-side helper that independent hosts
11
+ * (TypeScript / Python / Go) can share so the allowlist has a single
12
+ * source of truth instead of being re-derived in each runtime.
13
+ *
14
+ * Why this lives in the SDK and not just the conformance suite:
15
+ * implementations need the allowlist at HOST EMIT TIME (before spans
16
+ * are written). Importing from `@openwop/openwop` keeps the runtime
17
+ * + the conformance assertion in lockstep — if a future RFC adds an
18
+ * eighth attribute, one PR updates the constant and both surfaces
19
+ * pick it up.
20
+ *
21
+ * @see spec/v1/observability.md §"Cost attribution attributes"
22
+ * @see SECURITY/invariants.yaml row `cost-attribution-allowlist-redaction`
23
+ * @see conformance/src/scenarios/cost-attribution.test.ts
24
+ */
25
+ /** Canonical allowlist of cost-attribute names. Mutating this list is
26
+ * a wire-shape change — needs an RFC. */
27
+ export declare const OPENWOP_COST_ATTRIBUTE_NAMES: readonly ["openwop.cost.tokens.input", "openwop.cost.tokens.output", "openwop.cost.tokens.total", "openwop.cost.usd", "openwop.cost.currency", "openwop.cost.estimated", "openwop.cost.provider"];
28
+ /** Union of the canonical attribute names. Useful for typed
29
+ * sanitizer outputs in callers that pin the shape. */
30
+ export type OpenwopCostAttributeName = (typeof OPENWOP_COST_ATTRIBUTE_NAMES)[number];
31
+ /** Pure-function sanitizer. Returns a NEW object containing only
32
+ * allowlisted keys with primitive-typed values (number / string /
33
+ * boolean). Drops anything else — non-allowlisted keys, nested
34
+ * objects, arrays, functions, symbols, null, undefined.
35
+ *
36
+ * Callers SHOULD invoke this immediately before writing cost attrs
37
+ * to an OTel span:
38
+ *
39
+ * ```ts
40
+ * import { sanitizeCostAttributes } from '@openwop/openwop';
41
+ * for (const [k, v] of Object.entries(sanitizeCostAttributes(rawAttrs))) {
42
+ * span.setAttribute(k, v);
43
+ * }
44
+ * ```
45
+ *
46
+ * The reference workflow-engine host wires this via
47
+ * `apps/workflow-engine/backend/typescript/src/observability/costEmitter.ts`. */
48
+ export declare function sanitizeCostAttributes(input: Record<string, unknown>): Record<string, number | string | boolean>;
49
+ //# sourceMappingURL=cost-attribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-attribution.d.ts","sourceRoot":"","sources":["../src/cost-attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;0CAC0C;AAC1C,eAAO,MAAM,4BAA4B,mMAQ/B,CAAC;AAEX;uDACuD;AACvD,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAIrF;;;;;;;;;;;;;;;;kFAgBkF;AAClF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAS3C"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Cost-attribution allowlist + sanitizer helpers
3
+ * (`spec/v1/observability.md §"Cost attribution attributes"`).
4
+ *
5
+ * The spec MUSTs that hosts emitting `openwop.cost.*` OTel span attrs
6
+ * route them through an allowlist sanitizer that drops any attribute
7
+ * name outside the canonical set AND any non-primitive value. The
8
+ * `cost-attribution-allowlist-redaction` SECURITY invariant + the
9
+ * `cost-attribution.test.ts` conformance scenario are the public test
10
+ * surface; this module is the SDK-side helper that independent hosts
11
+ * (TypeScript / Python / Go) can share so the allowlist has a single
12
+ * source of truth instead of being re-derived in each runtime.
13
+ *
14
+ * Why this lives in the SDK and not just the conformance suite:
15
+ * implementations need the allowlist at HOST EMIT TIME (before spans
16
+ * are written). Importing from `@openwop/openwop` keeps the runtime
17
+ * + the conformance assertion in lockstep — if a future RFC adds an
18
+ * eighth attribute, one PR updates the constant and both surfaces
19
+ * pick it up.
20
+ *
21
+ * @see spec/v1/observability.md §"Cost attribution attributes"
22
+ * @see SECURITY/invariants.yaml row `cost-attribution-allowlist-redaction`
23
+ * @see conformance/src/scenarios/cost-attribution.test.ts
24
+ */
25
+ /** Canonical allowlist of cost-attribute names. Mutating this list is
26
+ * a wire-shape change — needs an RFC. */
27
+ export const OPENWOP_COST_ATTRIBUTE_NAMES = [
28
+ 'openwop.cost.tokens.input',
29
+ 'openwop.cost.tokens.output',
30
+ 'openwop.cost.tokens.total',
31
+ 'openwop.cost.usd',
32
+ 'openwop.cost.currency',
33
+ 'openwop.cost.estimated',
34
+ 'openwop.cost.provider',
35
+ ];
36
+ const ALLOWLIST = new Set(OPENWOP_COST_ATTRIBUTE_NAMES);
37
+ /** Pure-function sanitizer. Returns a NEW object containing only
38
+ * allowlisted keys with primitive-typed values (number / string /
39
+ * boolean). Drops anything else — non-allowlisted keys, nested
40
+ * objects, arrays, functions, symbols, null, undefined.
41
+ *
42
+ * Callers SHOULD invoke this immediately before writing cost attrs
43
+ * to an OTel span:
44
+ *
45
+ * ```ts
46
+ * import { sanitizeCostAttributes } from '@openwop/openwop';
47
+ * for (const [k, v] of Object.entries(sanitizeCostAttributes(rawAttrs))) {
48
+ * span.setAttribute(k, v);
49
+ * }
50
+ * ```
51
+ *
52
+ * The reference workflow-engine host wires this via
53
+ * `apps/workflow-engine/backend/typescript/src/observability/costEmitter.ts`. */
54
+ export function sanitizeCostAttributes(input) {
55
+ const out = {};
56
+ for (const [key, value] of Object.entries(input)) {
57
+ if (!ALLOWLIST.has(key))
58
+ continue;
59
+ if (typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean') {
60
+ out[key] = value;
61
+ }
62
+ }
63
+ return out;
64
+ }
65
+ //# sourceMappingURL=cost-attribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost-attribution.js","sourceRoot":"","sources":["../src/cost-attribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;0CAC0C;AAC1C,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,2BAA2B;IAC3B,4BAA4B;IAC5B,2BAA2B;IAC3B,kBAAkB;IAClB,uBAAuB;IACvB,wBAAwB;IACxB,uBAAuB;CACf,CAAC;AAMX,MAAM,SAAS,GAAwB,IAAI,GAAG,CAAS,4BAA4B,CAAC,CAAC;AAErF;;;;;;;;;;;;;;;;kFAgBkF;AAClF,MAAM,UAAU,sBAAsB,CACpC,KAA8B;IAE9B,MAAM,GAAG,GAA8C,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACzF,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Typed helpers for the `agent.*` event family (RFC 0002 §B + RFC 0024).
3
+ *
4
+ * Two layers:
5
+ *
6
+ * 1. **Type guards** (`isAgentReasoned`, `isAgentReasoningDelta`, etc.)
7
+ * — discriminator-based predicates that narrow `RunEventDoc` to a
8
+ * `TypedRunEvent<TPayload>` inside the guarded branch. Use these
9
+ * when you're iterating events yourself (e.g., inside a
10
+ * `for await (const ev of streamEvents(...))` loop) and want
11
+ * compile-time-narrowed access to the payload.
12
+ *
13
+ * 2. **High-level subscription helper** (`subscribeToAgentReasoning`)
14
+ * — fan-outs the `streamEvents()` generator into typed callbacks
15
+ * (`onDelta`, `onClosed`). Composes with the existing
16
+ * `streamEvents` SSE consumer; cleanup via the returned
17
+ * `Unsubscribe` function aborts the underlying fetch.
18
+ *
19
+ * Forward-compat: `RunEventDoc.type` is intentionally `string`-typed
20
+ * (not a closed union) per `COMPATIBILITY.md §2.1` — consumers MUST
21
+ * tolerate unknown event types. The type guards here only narrow when
22
+ * the discriminator AND the required payload fields are present; they
23
+ * return `false` for malformed or unknown events.
24
+ *
25
+ * @see schemas/run-event-payloads.schema.json
26
+ * @see RFCS/0002-agent-identity-and-reasoning-events.md
27
+ * @see RFCS/0024-agent-reasoning-streaming.md
28
+ */
29
+ import { type EventsStreamContext, type EventsStreamOptions } from './sse.js';
30
+ import type { AgentDecidedPayload, AgentHandoffPayload, AgentReasonedPayload, AgentReasoningDeltaPayload, AgentToolCalledPayload, AgentToolReturnedPayload, RunEventDoc, TypedRunEvent } from './types.js';
31
+ /** `agent.reasoned` (RFC 0002 §B). Narrows when `type` matches AND
32
+ * payload carries the required `agentId` + `reasoning` strings. */
33
+ export declare function isAgentReasoned(ev: RunEventDoc): ev is TypedRunEvent<AgentReasonedPayload>;
34
+ /** `agent.reasoning.delta` (RFC 0024). Narrows when `type` matches AND
35
+ * payload carries the required `agentId` + `delta` strings + numeric
36
+ * `sequence`. */
37
+ export declare function isAgentReasoningDelta(ev: RunEventDoc): ev is TypedRunEvent<AgentReasoningDeltaPayload>;
38
+ /** `agent.toolCalled` (RFC 0002 §B). */
39
+ export declare function isAgentToolCalled(ev: RunEventDoc): ev is TypedRunEvent<AgentToolCalledPayload>;
40
+ /** `agent.toolReturned` (RFC 0002 §B). Pairs with `agent.toolCalled`
41
+ * via `callId`; `outcome` and `error` are mutually exclusive but the
42
+ * guard doesn't enforce that (callers inspect after narrowing). */
43
+ export declare function isAgentToolReturned(ev: RunEventDoc): ev is TypedRunEvent<AgentToolReturnedPayload>;
44
+ /** `agent.handoff` (RFC 0002 §B). Note the distinct field names —
45
+ * `fromAgentId` / `toAgentId`, NOT a single `agentId`. */
46
+ export declare function isAgentHandoff(ev: RunEventDoc): ev is TypedRunEvent<AgentHandoffPayload>;
47
+ /** `agent.decided` (RFC 0002 §B). `decision` is `unknown` per the
48
+ * schema (host-specific shape); guard only validates `agentId` +
49
+ * the presence of a `decision` key. */
50
+ export declare function isAgentDecided(ev: RunEventDoc): ev is TypedRunEvent<AgentDecidedPayload>;
51
+ /** Returned by {@link subscribeToAgentReasoning}. Call to cancel the
52
+ * underlying SSE subscription. Idempotent — repeated calls are no-ops. */
53
+ export type Unsubscribe = () => void;
54
+ /** Per-callback signatures for {@link subscribeToAgentReasoning}. All
55
+ * callbacks are optional; the helper only invokes those provided.
56
+ * Callback exceptions are caught + reported via `onError` (when
57
+ * provided) so one bad handler doesn't tear down the stream. */
58
+ export interface AgentReasoningCallbacks {
59
+ /** Fired for each `agent.reasoning.delta` event in arrival order
60
+ * (RFC 0024). `sequence` starts at 0 and increments by 1 per delta
61
+ * within a single reasoning block. */
62
+ onDelta?: (payload: AgentReasoningDeltaPayload, ev: TypedRunEvent<AgentReasoningDeltaPayload>) => void | Promise<void>;
63
+ /** Fired once per closed reasoning block with the full
64
+ * authoritative content. Consumers that only care about the final
65
+ * trace can subscribe just to this. */
66
+ onClosed?: (payload: AgentReasonedPayload, ev: TypedRunEvent<AgentReasonedPayload>) => void | Promise<void>;
67
+ /** Fired when the SSE stream ends cleanly (server closed or run
68
+ * reached terminal status). */
69
+ onEnd?: () => void;
70
+ /** Fired when the stream fails OR a callback throws. The helper
71
+ * catches handler exceptions so a thrown error in `onDelta` doesn't
72
+ * tear down the whole subscription; the original error is surfaced
73
+ * here. */
74
+ onError?: (err: Error) => void;
75
+ }
76
+ /**
77
+ * Subscribe to the reasoning event sub-stream for a single run.
78
+ * Convenience wrapper over `streamEvents()` that dispatches the two
79
+ * RFC 0024 event types into typed callbacks.
80
+ *
81
+ * Returns immediately; the SSE consumption runs as a detached async
82
+ * task in the background. Call the returned `Unsubscribe` to cancel.
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * const stop = subscribeToAgentReasoning(ctx, runId, {
87
+ * onDelta: ({ delta, sequence }) => process.stdout.write(delta),
88
+ * onClosed: ({ reasoning }) => console.log('\nfinal:', reasoning),
89
+ * });
90
+ * // ...later
91
+ * stop();
92
+ * ```
93
+ */
94
+ export declare function subscribeToAgentReasoning(ctx: EventsStreamContext, runId: string, callbacks: AgentReasoningCallbacks, options?: Omit<EventsStreamOptions, 'signal'>): Unsubscribe;
95
+ //# sourceMappingURL=event-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-helpers.d.ts","sourceRoot":"","sources":["../src/event-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAgB,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC5F,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,WAAW,EACX,aAAa,EACd,MAAM,YAAY,CAAC;AAepB;oEACoE;AACpE,wBAAgB,eAAe,CAC7B,EAAE,EAAE,WAAW,GACd,EAAE,IAAI,aAAa,CAAC,oBAAoB,CAAC,CAM3C;AAED;;kBAEkB;AAClB,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,WAAW,GACd,EAAE,IAAI,aAAa,CAAC,0BAA0B,CAAC,CAMjD;AAED,wCAAwC;AACxC,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,WAAW,GACd,EAAE,IAAI,aAAa,CAAC,sBAAsB,CAAC,CAO7C;AAED;;oEAEoE;AACpE,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,WAAW,GACd,EAAE,IAAI,aAAa,CAAC,wBAAwB,CAAC,CAO/C;AAED;2DAC2D;AAC3D,wBAAgB,cAAc,CAC5B,EAAE,EAAE,WAAW,GACd,EAAE,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAM1C;AAED;;wCAEwC;AACxC,wBAAgB,cAAc,CAC5B,EAAE,EAAE,WAAW,GACd,EAAE,IAAI,aAAa,CAAC,mBAAmB,CAAC,CAQ1C;AAID;2EAC2E;AAC3E,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC;;;iEAGiE;AACjE,MAAM,WAAW,uBAAuB;IACtC;;2CAEuC;IACvC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,aAAa,CAAC,0BAA0B,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvH;;4CAEwC;IACxC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,EAAE,EAAE,aAAa,CAAC,oBAAoB,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5G;oCACgC;IAChC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB;;;gBAGY;IACZ,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,mBAAmB,EACxB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,uBAAuB,EAClC,OAAO,GAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAM,GAChD,WAAW,CAqDb"}