antpath 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/README.md +102 -67
  2. package/dist/client.js +4 -1
  3. package/dist/client.js.map +1 -1
  4. package/dist/credentials.js +34 -5
  5. package/dist/credentials.js.map +1 -1
  6. package/dist/files/downloader.js +8 -0
  7. package/dist/files/downloader.js.map +1 -1
  8. package/dist/index.d.ts +7 -2
  9. package/dist/index.js +3 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/platform/client.d.ts +204 -0
  12. package/dist/platform/client.js +203 -0
  13. package/dist/platform/client.js.map +1 -0
  14. package/dist/platform/index.d.ts +1 -0
  15. package/dist/platform/index.js +2 -0
  16. package/dist/platform/index.js.map +1 -0
  17. package/dist/providers/anthropic/provider.d.ts +6 -0
  18. package/dist/providers/anthropic/provider.js +90 -12
  19. package/dist/providers/anthropic/provider.js.map +1 -1
  20. package/dist/providers/known-events.d.ts +60 -0
  21. package/dist/providers/known-events.js +64 -0
  22. package/dist/providers/known-events.js.map +1 -0
  23. package/dist/run/controller.d.ts +4 -1
  24. package/dist/run/controller.js +103 -13
  25. package/dist/run/controller.js.map +1 -1
  26. package/dist/template/index.d.ts +1 -1
  27. package/dist/types.d.ts +20 -0
  28. package/dist/utils/events.d.ts +21 -0
  29. package/dist/utils/events.js +97 -18
  30. package/dist/utils/events.js.map +1 -1
  31. package/dist/utils/paths.js +9 -3
  32. package/dist/utils/paths.js.map +1 -1
  33. package/docs/cleanup.md +15 -15
  34. package/docs/credentials.md +105 -23
  35. package/docs/events.md +129 -0
  36. package/docs/mcp.md +18 -18
  37. package/docs/outputs.md +16 -16
  38. package/docs/quickstart.md +13 -13
  39. package/docs/release.md +22 -22
  40. package/docs/skills.md +18 -16
  41. package/docs/templates.md +24 -24
  42. package/docs/testing.md +26 -27
  43. package/examples/mcp-static-bearer.ts +30 -30
  44. package/examples/quickstart.ts +23 -23
  45. package/package.json +46 -51
  46. package/references/architecture-decisions.md +473 -203
  47. package/references/implementation-plan.md +452 -527
  48. package/references/research-sources.md +41 -30
  49. package/references/testing-strategy.md +29 -108
@@ -11,6 +11,8 @@ export class RunController {
11
11
  #timeoutMs;
12
12
  #signal;
13
13
  #logger;
14
+ #onEventAbortOnError;
15
+ #sessionResources;
14
16
  #events = new AsyncEventBus();
15
17
  #startedAt = new Date().toISOString();
16
18
  #ids = { credentialIds: [], uploadedFileIds: [] };
@@ -23,6 +25,8 @@ export class RunController {
23
25
  #outputManifest;
24
26
  #cleanupState = "not_started";
25
27
  #userTerminated = false;
28
+ #terminating = false;
29
+ #listenerUnsubscribe;
26
30
  constructor(options) {
27
31
  this.#provider = options.provider;
28
32
  this.#template = options.template;
@@ -31,14 +35,19 @@ export class RunController {
31
35
  this.#timeoutMs = options.timeoutMs;
32
36
  this.#signal = options.signal;
33
37
  this.#logger = options.logger;
38
+ this.#onEventAbortOnError = options.onEventAbortOnError ?? false;
39
+ this.#sessionResources = options.sessionResources ?? [];
34
40
  this.#resultPromise = new Promise((resolve, reject) => {
35
41
  this.#resolveResult = resolve;
36
42
  this.#rejectResult = reject;
37
43
  });
44
+ if (options.onEvent) {
45
+ this.#listenerUnsubscribe = this.#events.addListener(options.onEvent, (error, event) => this.#handleListenerError(error, event));
46
+ }
38
47
  }
39
48
  async start() {
40
49
  this.#consume().catch((error) => {
41
- this.#fail(error instanceof Error ? error : new RunStateError(String(error)));
50
+ void this.#fail(error instanceof Error ? error : new RunStateError(String(error)));
42
51
  });
43
52
  }
44
53
  status() {
@@ -93,7 +102,7 @@ export class RunController {
93
102
  this.#userTerminated = true;
94
103
  this.#setStatus("terminating");
95
104
  await this.#provider.terminateSession(this.#ids.sessionId, reason);
96
- this.#finish("terminated");
105
+ await this.#finish("terminated");
97
106
  }
98
107
  async usage() {
99
108
  if (!this.#ids.sessionId) {
@@ -124,7 +133,7 @@ export class RunController {
124
133
  }
125
134
  }
126
135
  }
127
- this.#ids.sessionId = await this.#provider.createSession(this.#ids.agentId, this.#ids.environmentId, this.#ids.vaultId ? [this.#ids.vaultId] : [], toSessionResources(this.#ids.uploadedFileIds, prepared));
136
+ this.#ids.sessionId = await this.#provider.createSession(this.#ids.agentId, this.#ids.environmentId, this.#ids.vaultId ? [this.#ids.vaultId] : [], await this.#buildSessionResources(prepared));
128
137
  const abort = new AbortController();
129
138
  this.#signal?.addEventListener("abort", () => abort.abort(this.#signal?.reason), { once: true });
130
139
  const timeout = this.#timeoutMs === undefined
@@ -132,17 +141,30 @@ export class RunController {
132
141
  : setTimeout(() => {
133
142
  void this.terminate("timeout");
134
143
  }, this.#timeoutMs);
144
+ let iterator;
135
145
  try {
136
146
  const stream = this.#provider.streamEvents(this.#ids.sessionId, abort.signal);
147
+ iterator = stream[Symbol.asyncIterator]();
148
+ // Prime the SSE iterator BEFORE sending the first user message.
149
+ // The Claude Managed Agents docs are explicit:
150
+ // "Only events emitted after the stream is opened are delivered, so
151
+ // open the stream before sending events to avoid a race condition."
152
+ // The provider's `streamEvents` is an async generator; the underlying
153
+ // HTTP GET only fires on the first `iterator.next()` call. Pulling
154
+ // before `sendUserMessage` opens the stream so the first events
155
+ // emitted by the message are not dropped.
156
+ const firstEventPromise = iterator.next();
137
157
  await this.#sendNextMessage();
138
- for await (const event of stream) {
158
+ let pending = await firstEventPromise;
159
+ while (!pending.done) {
160
+ const event = pending.value;
139
161
  this.#emit({ type: "provider.event", event, at: new Date().toISOString() });
140
162
  if (event.type === "session.error") {
141
- this.#fail(new RunStateError("Provider session.error event received", event));
163
+ await this.#fail(new RunStateError("Provider session.error event received", event));
142
164
  return;
143
165
  }
144
166
  if (event.type === "session.status_terminated") {
145
- this.#finish(this.#userTerminated ? "terminated" : "failed", this.#userTerminated ? undefined : "Provider session terminated");
167
+ await this.#finish(this.#userTerminated ? "terminated" : "failed", this.#userTerminated ? undefined : "Provider session terminated");
146
168
  return;
147
169
  }
148
170
  if (event.type === "session.status_idle") {
@@ -151,16 +173,24 @@ export class RunController {
151
173
  await this.#sendNextMessage();
152
174
  }
153
175
  else {
154
- this.#finish("succeeded");
176
+ await this.#finish("succeeded");
155
177
  return;
156
178
  }
157
179
  }
180
+ pending = await iterator.next();
158
181
  }
159
182
  }
160
183
  finally {
161
184
  if (timeout)
162
185
  clearTimeout(timeout);
163
186
  abort.abort();
187
+ if (iterator?.return) {
188
+ await iterator.return().catch(() => undefined);
189
+ }
190
+ // Safety net: if the loop exited without reaching a terminal handler
191
+ // (e.g., provider stream closed unexpectedly), close the bus so any
192
+ // streamEvents() consumers receive `done: true` and don't hang.
193
+ // `#finish` and `#fail` close the bus themselves; close is idempotent.
164
194
  this.#events.close();
165
195
  }
166
196
  }
@@ -177,6 +207,27 @@ export class RunController {
177
207
  this.#emit({ type: "sdk.message_sent", index: this.#messageIndex, at: new Date().toISOString() });
178
208
  this.#messageIndex++;
179
209
  }
210
+ /**
211
+ * Upload extra (non-skill) session resources, then build the combined
212
+ * `SessionResourceInput[]` passed to `createSession` (skills + extras).
213
+ *
214
+ * Extras are uploaded in declaration order so failure of the Nth upload
215
+ * doesn't leak fileIds beyond what's already been recorded — the
216
+ * caller's `cleanupHandle` covers `uploadedFileIds` on partial failure.
217
+ */
218
+ async #buildSessionResources(prepared) {
219
+ const resources = toSessionResources(this.#ids.uploadedFileIds, prepared);
220
+ for (const extra of this.#sessionResources) {
221
+ const fileId = await this.#provider.uploadFile({
222
+ filename: extra.filename,
223
+ data: extra.data,
224
+ ...(extra.mimeType ? { mimeType: extra.mimeType } : {})
225
+ });
226
+ this.#ids.uploadedFileIds.push(fileId);
227
+ resources.push({ type: "file", fileId, mountPath: extra.mountPath });
228
+ }
229
+ return resources;
230
+ }
180
231
  async #buildResult(status, error) {
181
232
  const session = this.#ids.sessionId ? await this.#provider.getSession(this.#ids.sessionId).catch(() => undefined) : undefined;
182
233
  const result = {
@@ -204,21 +255,60 @@ export class RunController {
204
255
  this.#logger?.debug?.("antpath event", redactSecrets({ event }));
205
256
  this.#events.emit(redactSecrets(event));
206
257
  }
207
- #finish(status, error) {
258
+ async #finish(status, error) {
259
+ if (this.#terminating) {
260
+ return;
261
+ }
262
+ this.#terminating = true;
208
263
  this.#setStatus(status);
209
- this.#buildResult(status, error).then((result) => {
264
+ try {
265
+ const result = await this.#buildResult(status, error);
210
266
  this.#finalResult = result;
267
+ this.#events.close();
268
+ await this.#events.drainListeners();
269
+ this.#listenerUnsubscribe?.();
211
270
  this.#resolveResult(result);
271
+ }
272
+ catch (error_) {
212
273
  this.#events.close();
213
- }, this.#rejectResult);
274
+ await this.#events.drainListeners().catch(() => undefined);
275
+ this.#listenerUnsubscribe?.();
276
+ this.#rejectResult(error_ instanceof Error ? error_ : new Error(String(error_)));
277
+ }
214
278
  }
215
- #fail(error) {
279
+ async #fail(error) {
280
+ if (this.#terminating) {
281
+ return;
282
+ }
283
+ this.#terminating = true;
216
284
  this.#setStatus("failed");
217
- this.#buildResult("failed", error.message).then((result) => {
285
+ try {
286
+ const result = await this.#buildResult("failed", error.message);
218
287
  this.#finalResult = result;
288
+ this.#events.close();
289
+ await this.#events.drainListeners();
290
+ this.#listenerUnsubscribe?.();
219
291
  this.#resolveResult(result);
292
+ }
293
+ catch (error_) {
220
294
  this.#events.close();
221
- }, this.#rejectResult);
295
+ await this.#events.drainListeners().catch(() => undefined);
296
+ this.#listenerUnsubscribe?.();
297
+ this.#rejectResult(error_ instanceof Error ? error_ : new Error(String(error_)));
298
+ }
299
+ }
300
+ #handleListenerError(error, _event) {
301
+ const message = error instanceof Error ? error.message : String(error);
302
+ const redactedMessage = redactSecrets(message);
303
+ if (this.#onEventAbortOnError && !this.#terminating) {
304
+ // Schedule failure; do NOT await here (we're inside the listener's
305
+ // promise chain). `#fail` is async but fire-and-forget here is safe
306
+ // because subsequent invocations of this hook will observe
307
+ // `#terminating === true` and log instead of recursing.
308
+ void this.#fail(new RunStateError("onEvent handler failed", { cause: redactedMessage }));
309
+ return;
310
+ }
311
+ this.#logger?.warn?.("antpath onEvent handler failed", { error: redactedMessage });
222
312
  }
223
313
  }
224
314
  //# sourceMappingURL=controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/run/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/run/controller.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { CredentialRequirement, TemplateDefinition, TemplateVariableDefinition } from "./types.js";
2
- export type { TemplateDefinition, TemplateVariableDefinition } from "./types.js";
2
+ export type { TemplateDefinition, TemplateVariableDefinition, EnvironmentDefinition } from "./types.js";
3
3
  export { compileTemplate, type ResolvedTemplate } from "./compiler.js";
4
4
  export declare function defineTemplate<TVariables extends Record<string, TemplateVariableDefinition> = Record<string, never>>(definition: TemplateDefinition<TVariables>): TemplateDefinition<TVariables>;
5
5
  export declare function string(options?: {
package/dist/types.d.ts CHANGED
@@ -8,6 +8,12 @@ export type CredentialInput = {
8
8
  accessToken: string;
9
9
  expiresAt?: string | undefined;
10
10
  };
11
+ export interface SessionResourceUpload {
12
+ filename: string;
13
+ data: Uint8Array;
14
+ mimeType?: string | undefined;
15
+ mountPath: string;
16
+ }
11
17
  export interface RunOptions {
12
18
  variables?: Record<string, string> | undefined;
13
19
  credentials?: Record<string, CredentialInput> | undefined;
@@ -15,7 +21,21 @@ export interface RunOptions {
15
21
  cleanupPolicy?: CleanupPolicy | undefined;
16
22
  signal?: AbortSignal | undefined;
17
23
  logger?: Logger | undefined;
24
+ onEvent?: RunEventHandler | undefined;
25
+ onEventAbortOnError?: boolean | undefined;
26
+ /**
27
+ * Additional files to upload and mount into the agent session alongside
28
+ * skills. Each entry is uploaded via the provider's `uploadFile` and
29
+ * passed in the `createSession` resources array with the requested
30
+ * `mountPath`. Used by the platform to bootstrap the `/antpath/antpath`
31
+ * CLI and `/antpath/index.json` manifest, but available to any caller.
32
+ *
33
+ * Session resources do NOT count against the provider's per-session
34
+ * skill limit; they're a distinct resource type with their own quota.
35
+ */
36
+ sessionResources?: readonly SessionResourceUpload[] | undefined;
18
37
  }
38
+ export type RunEventHandler = (event: RunEvent) => void | Promise<void>;
19
39
  export type RunStatus = "initializing" | "creating_provider_resources" | "running" | "idle_waiting_to_send_next_message" | "downloading_outputs" | "succeeded" | "failed" | "terminating" | "terminated" | "cleanup_pending" | "cleaned_up";
20
40
  export interface UsageSummary {
21
41
  inputTokens?: number | undefined;
@@ -1,6 +1,27 @@
1
+ export type EventListener<T> = (event: T) => void | Promise<void>;
2
+ export type EventListenerErrorHandler<T> = (error: unknown, event: T) => void;
3
+ export type Unsubscribe = () => void;
1
4
  export declare class AsyncEventBus<T> {
2
5
  #private;
3
6
  emit(event: T): void;
4
7
  close(): void;
8
+ closed(): boolean;
9
+ /**
10
+ * Register a callback that is invoked for every emitted event in order.
11
+ *
12
+ * Async handlers are serialized through a per-listener promise chain so
13
+ * invocation order matches emission order. Errors thrown synchronously or
14
+ * via rejected promises are routed to onError. The chain stays fulfilled
15
+ * even when handlers fail, so subsequent events still trigger the handler.
16
+ */
17
+ addListener(handler: EventListener<T>, onError: EventListenerErrorHandler<T>): Unsubscribe;
18
+ /**
19
+ * Await every queued listener invocation that has already been scheduled at
20
+ * the moment this method is called. Callers (e.g., the run controller)
21
+ * must finish emitting before invoking drainListeners; emits that happen
22
+ * after drainListeners is awaited are not guaranteed to be observed by the
23
+ * returned promise.
24
+ */
25
+ drainListeners(): Promise<void>;
5
26
  stream(): AsyncIterable<T>;
6
27
  }
@@ -1,39 +1,118 @@
1
1
  export class AsyncEventBus {
2
2
  #history = [];
3
- #waiters = [];
3
+ #streamSubscribers = new Set();
4
+ #listeners = new Set();
4
5
  #closed = false;
5
6
  emit(event) {
6
7
  if (this.#closed) {
7
8
  return;
8
9
  }
9
10
  this.#history.push(event);
10
- const waiter = this.#waiters.shift();
11
- if (waiter) {
12
- waiter({ value: event, done: false });
11
+ for (const subscriber of this.#streamSubscribers) {
12
+ const wake = subscriber.wake;
13
+ if (wake) {
14
+ subscriber.wake = undefined;
15
+ wake();
16
+ }
17
+ }
18
+ for (const listener of this.#listeners) {
19
+ listener.chain = listener.chain.then(() => listener.handler(event)).catch((error) => {
20
+ try {
21
+ listener.onError(error, event);
22
+ }
23
+ catch {
24
+ // onError must never throw; swallow to keep the chain alive for future events.
25
+ }
26
+ });
13
27
  }
14
28
  }
15
29
  close() {
30
+ if (this.#closed) {
31
+ return;
32
+ }
16
33
  this.#closed = true;
17
- for (const waiter of this.#waiters.splice(0)) {
18
- waiter({ value: undefined, done: true });
34
+ for (const subscriber of this.#streamSubscribers) {
35
+ const wake = subscriber.wake;
36
+ if (wake) {
37
+ subscriber.wake = undefined;
38
+ wake();
39
+ }
19
40
  }
20
41
  }
42
+ closed() {
43
+ return this.#closed;
44
+ }
45
+ /**
46
+ * Register a callback that is invoked for every emitted event in order.
47
+ *
48
+ * Async handlers are serialized through a per-listener promise chain so
49
+ * invocation order matches emission order. Errors thrown synchronously or
50
+ * via rejected promises are routed to onError. The chain stays fulfilled
51
+ * even when handlers fail, so subsequent events still trigger the handler.
52
+ */
53
+ addListener(handler, onError) {
54
+ const listener = {
55
+ handler,
56
+ onError,
57
+ chain: Promise.resolve()
58
+ };
59
+ this.#listeners.add(listener);
60
+ return () => {
61
+ this.#listeners.delete(listener);
62
+ };
63
+ }
64
+ /**
65
+ * Await every queued listener invocation that has already been scheduled at
66
+ * the moment this method is called. Callers (e.g., the run controller)
67
+ * must finish emitting before invoking drainListeners; emits that happen
68
+ * after drainListeners is awaited are not guaranteed to be observed by the
69
+ * returned promise.
70
+ */
71
+ async drainListeners() {
72
+ if (this.#listeners.size === 0) {
73
+ return;
74
+ }
75
+ const snapshot = [...this.#listeners].map((listener) => listener.chain);
76
+ await Promise.all(snapshot);
77
+ }
21
78
  stream() {
22
79
  const self = this;
23
80
  return {
24
- async *[Symbol.asyncIterator]() {
25
- let index = 0;
26
- while (index < self.#history.length) {
27
- yield self.#history[index++];
28
- }
29
- while (!self.#closed) {
30
- const next = await new Promise((resolve) => self.#waiters.push(resolve));
31
- if (next.done) {
32
- return;
81
+ [Symbol.asyncIterator]() {
82
+ const subscriber = { wake: undefined, done: false };
83
+ self.#streamSubscribers.add(subscriber);
84
+ let cursor = 0;
85
+ return {
86
+ async next() {
87
+ while (true) {
88
+ if (subscriber.done) {
89
+ self.#streamSubscribers.delete(subscriber);
90
+ return { value: undefined, done: true };
91
+ }
92
+ if (cursor < self.#history.length) {
93
+ const value = self.#history[cursor++];
94
+ return { value, done: false };
95
+ }
96
+ if (self.#closed) {
97
+ self.#streamSubscribers.delete(subscriber);
98
+ return { value: undefined, done: true };
99
+ }
100
+ await new Promise((resolve) => {
101
+ subscriber.wake = resolve;
102
+ });
103
+ }
104
+ },
105
+ async return() {
106
+ subscriber.done = true;
107
+ const wake = subscriber.wake;
108
+ if (wake) {
109
+ subscriber.wake = undefined;
110
+ wake();
111
+ }
112
+ self.#streamSubscribers.delete(subscriber);
113
+ return { value: undefined, done: true };
33
114
  }
34
- index++;
35
- yield next.value;
36
- }
115
+ };
37
116
  }
38
117
  };
39
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAa;IACf,QAAQ,GAAQ,EAAE,CAAC;IACnB,QAAQ,GAA8C,EAAE,CAAC;IAClE,OAAO,GAAG,KAAK,CAAC;IAEhB,IAAI,CAAC,KAAQ;QACX,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACrC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,EAAE,KAAK,EAAE,SAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO;YACL,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;gBAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,OAAO,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAM,CAAC;gBACpC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;oBACrB,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC5F,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,OAAO;oBACT,CAAC;oBACD,KAAK,EAAE,CAAC;oBACR,MAAM,IAAI,CAAC,KAAK,CAAC;gBACnB,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/utils/events.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,aAAa;IACf,QAAQ,GAAQ,EAAE,CAAC;IACnB,kBAAkB,GAAG,IAAI,GAAG,EAAoB,CAAC;IACjD,UAAU,GAAG,IAAI,GAAG,EAAe,CAAC;IAC7C,OAAO,GAAG,KAAK,CAAC;IAEhB,IAAI,CAAC,KAAQ;QACX,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC7B,IAAI,IAAI,EAAE,CAAC;gBACT,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC;gBAC5B,IAAI,EAAE,CAAC;YACT,CAAC;QACH,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAClF,IAAI,CAAC;oBACH,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACjC,CAAC;gBAAC,MAAM,CAAC;oBACP,+EAA+E;gBACjF,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;YAC7B,IAAI,IAAI,EAAE,CAAC;gBACT,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC;gBAC5B,IAAI,EAAE,CAAC;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,OAAyB,EAAE,OAAqC;QAC1E,MAAM,QAAQ,GAAgB;YAC5B,OAAO;YACP,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE;SACzB,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM;QACJ,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO;YACL,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpB,MAAM,UAAU,GAAqB,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACtE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxC,IAAI,MAAM,GAAG,CAAC,CAAC;gBACf,OAAO;oBACL,KAAK,CAAC,IAAI;wBACR,OAAO,IAAI,EAAE,CAAC;4BACZ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gCACpB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gCAC3C,OAAO,EAAE,KAAK,EAAE,SAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;4BAC/C,CAAC;4BACD,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gCAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAM,CAAC;gCAC3C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;4BAChC,CAAC;4BACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gCACjB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gCAC3C,OAAO,EAAE,KAAK,EAAE,SAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;4BAC/C,CAAC;4BACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gCAClC,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC;4BAC5B,CAAC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;oBACD,KAAK,CAAC,MAAM;wBACV,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;wBACvB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;wBAC7B,IAAI,IAAI,EAAE,CAAC;4BACT,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC;4BAC5B,IAAI,EAAE,CAAC;wBACT,CAAC;wBACD,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wBAC3C,OAAO,EAAE,KAAK,EAAE,SAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;oBAC/C,CAAC;iBACF,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -1,8 +1,14 @@
1
1
  import { mkdir, writeFile } from "node:fs/promises";
2
- import { basename, join, resolve } from "node:path";
2
+ import { join, resolve } from "node:path";
3
+ const WINDOWS_RESERVED_BASENAMES = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/i;
3
4
  export function sanitizeFilename(filename) {
4
- const base = basename(filename).replace(/[\u0000-\u001f<>:"/\\|?*]+/g, "_").trim();
5
- return base.length === 0 || base === "." || base === ".." ? "download" : base;
5
+ const lastSep = Math.max(filename.lastIndexOf("/"), filename.lastIndexOf("\\"));
6
+ const tail = lastSep >= 0 ? filename.slice(lastSep + 1) : filename;
7
+ const base = tail.replace(/[\u0000-\u001f<>:"/\\|?*]+/g, "_").trim().slice(0, 120);
8
+ if (base.length === 0 || base === "." || base === "..") {
9
+ return "download";
10
+ }
11
+ return WINDOWS_RESERVED_BASENAMES.test(base) ? `_${base}` : base;
6
12
  }
7
13
  export function safeDestination(directory, filename) {
8
14
  const root = resolve(directory);
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpD,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnF,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAgB;IACjE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,QAAgB,EAAE,OAAmB;IAC1F,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,WAAW,CAAC;AACrB,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,0BAA0B,GAAG,+CAA+C,CAAC;AAEnF,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,QAAgB;IACjE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,QAAgB,EAAE,OAAmB;IAC1F,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,WAAW,CAAC;AACrB,CAAC"}
package/docs/cleanup.md CHANGED
@@ -1,15 +1,15 @@
1
- ---
2
- title: Cleanup
3
- ---
4
-
5
- # Cleanup
6
-
7
- Cleanup is manual by default:
8
-
9
- ```ts
10
- await handle.cleanup();
11
- ```
12
-
13
- This preserves provider-side files/events for inspection and avoids deleting outputs before users download them.
14
-
15
- If the SDK process exits before cleanup, provider resources may remain in the user's provider workspace. The result includes provider IDs so a future cleanup helper can recover orphaned resources when the caller recreates a Client with the same key.
1
+ ---
2
+ title: Cleanup
3
+ ---
4
+
5
+ # Cleanup
6
+
7
+ Cleanup is manual by default:
8
+
9
+ ```ts
10
+ await handle.cleanup();
11
+ ```
12
+
13
+ This preserves provider-side files/events for inspection and avoids deleting outputs before users download them.
14
+
15
+ If the SDK process exits before cleanup, provider resources may remain in the user's provider workspace. The result includes provider IDs so a future cleanup helper can recover orphaned resources when the caller recreates a Client with the same key.