@introspection-sdk/introspection-node 0.4.1 → 0.4.3

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 (166) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-check-types.log +4 -0
  3. package/.turbo/turbo-lint.log +5 -0
  4. package/dist/ai-sdk-integration.d.ts.map +1 -1
  5. package/dist/ai-sdk-integration.js +2 -2
  6. package/dist/claude-hooks.d.ts.map +1 -1
  7. package/dist/claude-hooks.js +3 -3
  8. package/dist/client.d.ts +42 -132
  9. package/dist/client.d.ts.map +1 -1
  10. package/dist/client.js +66 -365
  11. package/dist/client.js.map +1 -0
  12. package/dist/converters/claude.d.ts +5 -1
  13. package/dist/converters/claude.d.ts.map +1 -1
  14. package/dist/converters/claude.js +7 -0
  15. package/dist/converters/claude.js.map +1 -0
  16. package/dist/converters/gemini.d.ts +90 -0
  17. package/dist/converters/gemini.d.ts.map +1 -0
  18. package/dist/converters/gemini.js +171 -0
  19. package/dist/converters/gemini.js.map +1 -0
  20. package/dist/converters/index.d.ts +1 -1
  21. package/dist/converters/index.d.ts.map +1 -1
  22. package/dist/converters/index.js +2 -1
  23. package/dist/converters/index.js.map +1 -0
  24. package/dist/converters/openai.js +1 -0
  25. package/dist/converters/openai.js.map +1 -0
  26. package/dist/converters/openclaw.d.ts +16 -0
  27. package/dist/converters/openclaw.d.ts.map +1 -0
  28. package/dist/converters/openclaw.js +49 -0
  29. package/dist/converters/openinference.js +1 -0
  30. package/dist/converters/openinference.js.map +1 -0
  31. package/dist/converters/vercel.d.ts.map +1 -1
  32. package/dist/converters/vercel.js +31 -3
  33. package/dist/converters/vercel.js.map +1 -0
  34. package/dist/http.d.ts +36 -0
  35. package/dist/http.d.ts.map +1 -0
  36. package/dist/http.js +145 -0
  37. package/dist/http.js.map +1 -0
  38. package/dist/index.d.ts +24 -27
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +22 -32
  41. package/dist/index.js.map +1 -0
  42. package/dist/langchain-handler.d.ts.map +1 -1
  43. package/dist/langchain-handler.js +2 -2
  44. package/dist/mastra-exporter.d.ts.map +1 -1
  45. package/dist/mastra-exporter.js +2 -2
  46. package/dist/otel/anthropic.d.ts +62 -0
  47. package/dist/otel/anthropic.d.ts.map +1 -0
  48. package/dist/otel/anthropic.js +425 -0
  49. package/dist/otel/anthropic.js.map +1 -0
  50. package/dist/otel/claude-hooks.d.ts +346 -0
  51. package/dist/otel/claude-hooks.d.ts.map +1 -0
  52. package/dist/otel/claude-hooks.js +645 -0
  53. package/dist/otel/claude-hooks.js.map +1 -0
  54. package/dist/otel/claude-wrapper.d.ts +93 -0
  55. package/dist/otel/claude-wrapper.d.ts.map +1 -0
  56. package/dist/otel/claude-wrapper.js +155 -0
  57. package/dist/otel/claude-wrapper.js.map +1 -0
  58. package/dist/otel/gemini.d.ts +48 -0
  59. package/dist/otel/gemini.d.ts.map +1 -0
  60. package/dist/otel/gemini.js +297 -0
  61. package/dist/otel/gemini.js.map +1 -0
  62. package/dist/otel/index.d.ts +27 -0
  63. package/dist/otel/index.d.ts.map +1 -0
  64. package/dist/otel/index.js +33 -0
  65. package/dist/otel/index.js.map +1 -0
  66. package/dist/otel/langchain-handler.d.ts +112 -0
  67. package/dist/otel/langchain-handler.d.ts.map +1 -0
  68. package/dist/otel/langchain-handler.js +555 -0
  69. package/dist/otel/langchain-handler.js.map +1 -0
  70. package/dist/otel/logs.d.ts +82 -0
  71. package/dist/otel/logs.d.ts.map +1 -0
  72. package/dist/otel/logs.js +271 -0
  73. package/dist/otel/logs.js.map +1 -0
  74. package/dist/otel/mastra-exporter.d.ts +87 -0
  75. package/dist/otel/mastra-exporter.d.ts.map +1 -0
  76. package/dist/otel/mastra-exporter.js +525 -0
  77. package/dist/otel/mastra-exporter.js.map +1 -0
  78. package/dist/otel/pi.d.ts +59 -0
  79. package/dist/otel/pi.d.ts.map +1 -0
  80. package/dist/otel/pi.js +67 -0
  81. package/dist/otel/pi.js.map +1 -0
  82. package/dist/otel/setup.d.ts +23 -0
  83. package/dist/otel/setup.d.ts.map +1 -0
  84. package/dist/otel/setup.js +127 -0
  85. package/dist/otel/setup.js.map +1 -0
  86. package/dist/otel/span-processor.d.ts +62 -0
  87. package/dist/otel/span-processor.d.ts.map +1 -0
  88. package/dist/otel/span-processor.js +319 -0
  89. package/dist/otel/span-processor.js.map +1 -0
  90. package/dist/otel/tracing-processor.d.ts +139 -0
  91. package/dist/otel/tracing-processor.d.ts.map +1 -0
  92. package/dist/otel/tracing-processor.js +418 -0
  93. package/dist/otel/tracing-processor.js.map +1 -0
  94. package/dist/resources/experiments.d.ts +31 -0
  95. package/dist/resources/experiments.d.ts.map +1 -0
  96. package/dist/resources/experiments.js +133 -0
  97. package/dist/resources/experiments.js.map +1 -0
  98. package/dist/resources/recipes.d.ts +22 -0
  99. package/dist/resources/recipes.d.ts.map +1 -0
  100. package/dist/resources/recipes.js +61 -0
  101. package/dist/resources/recipes.js.map +1 -0
  102. package/dist/resources/runtimes.d.ts +76 -0
  103. package/dist/resources/runtimes.d.ts.map +1 -0
  104. package/dist/resources/runtimes.js +179 -0
  105. package/dist/resources/runtimes.js.map +1 -0
  106. package/dist/runner-resources/files.d.ts +35 -0
  107. package/dist/runner-resources/files.d.ts.map +1 -0
  108. package/dist/runner-resources/files.js +131 -0
  109. package/dist/runner-resources/files.js.map +1 -0
  110. package/dist/runner-resources/tasks.d.ts +39 -0
  111. package/dist/runner-resources/tasks.d.ts.map +1 -0
  112. package/dist/runner-resources/tasks.js +129 -0
  113. package/dist/runner-resources/tasks.js.map +1 -0
  114. package/dist/runner.d.ts +80 -0
  115. package/dist/runner.d.ts.map +1 -0
  116. package/dist/runner.js +159 -0
  117. package/dist/runner.js.map +1 -0
  118. package/dist/span-processor.d.ts.map +1 -1
  119. package/dist/span-processor.js +3 -3
  120. package/dist/streaming.d.ts +8 -0
  121. package/dist/streaming.d.ts.map +1 -0
  122. package/dist/streaming.js +67 -0
  123. package/dist/streaming.js.map +1 -0
  124. package/dist/tracing-processor.d.ts.map +1 -1
  125. package/dist/tracing-processor.js +3 -3
  126. package/dist/types/genai.d.ts +165 -0
  127. package/dist/types/genai.d.ts.map +1 -0
  128. package/dist/types/genai.js +82 -0
  129. package/dist/types.js +1 -0
  130. package/dist/types.js.map +1 -0
  131. package/dist/utils.d.ts +1 -0
  132. package/dist/utils.d.ts.map +1 -1
  133. package/dist/utils.js +14 -0
  134. package/dist/utils.js.map +1 -0
  135. package/dist/version.js +1 -0
  136. package/dist/version.js.map +1 -0
  137. package/package.json +83 -25
  138. package/src/client.ts +76 -471
  139. package/src/converters/claude.ts +11 -1
  140. package/src/converters/gemini.ts +243 -0
  141. package/src/converters/index.ts +13 -7
  142. package/src/converters/vercel.ts +41 -3
  143. package/src/http.ts +163 -0
  144. package/src/index.ts +110 -75
  145. package/src/{anthropic.ts → otel/anthropic.ts} +95 -8
  146. package/src/{claude-hooks.ts → otel/claude-hooks.ts} +125 -24
  147. package/src/{claude-wrapper.ts → otel/claude-wrapper.ts} +1 -1
  148. package/src/otel/gemini.ts +397 -0
  149. package/src/otel/index.ts +80 -0
  150. package/src/{langchain-handler.ts → otel/langchain-handler.ts} +56 -7
  151. package/src/otel/logs.ts +394 -0
  152. package/src/{mastra-exporter.ts → otel/mastra-exporter.ts} +86 -23
  153. package/src/otel/pi.ts +88 -0
  154. package/src/otel/setup.ts +174 -0
  155. package/src/{span-processor.ts → otel/span-processor.ts} +17 -10
  156. package/src/{tracing-processor.ts → otel/tracing-processor.ts} +100 -23
  157. package/src/resources/experiments.ts +170 -0
  158. package/src/resources/recipes.ts +73 -0
  159. package/src/resources/runtimes.ts +231 -0
  160. package/src/runner-resources/files.ts +163 -0
  161. package/src/runner-resources/tasks.ts +156 -0
  162. package/src/runner.ts +194 -0
  163. package/src/streaming.ts +57 -0
  164. package/src/utils.ts +15 -0
  165. package/src/ai-sdk-integration.ts +0 -689
  166. package/src/converters/ai-sdk.ts +0 -323
@@ -0,0 +1,131 @@
1
+ export class FileVersionsApi {
2
+ http;
3
+ constructor(http) {
4
+ this.http = http;
5
+ }
6
+ list(fileId, params) {
7
+ return this.http.request({
8
+ method: "GET",
9
+ path: `/v1/files/${encodeURIComponent(fileId)}/versions`,
10
+ query: params,
11
+ });
12
+ }
13
+ async *listAll(fileId, params) {
14
+ let next = params?.next;
15
+ do {
16
+ const page = await this.list(fileId, { ...params, next });
17
+ for (const f of page.records)
18
+ yield f;
19
+ next = page.next ?? undefined;
20
+ } while (next);
21
+ }
22
+ get(fileId, versionId) {
23
+ return this.http.request({
24
+ method: "GET",
25
+ path: `/v1/files/${encodeURIComponent(fileId)}/versions/${encodeURIComponent(versionId)}`,
26
+ });
27
+ }
28
+ create(fileId, body) {
29
+ const form = toFormData(body);
30
+ return this.http.request({
31
+ method: "POST",
32
+ path: `/v1/files/${encodeURIComponent(fileId)}/versions`,
33
+ body: form,
34
+ });
35
+ }
36
+ }
37
+ export class FilesApi {
38
+ http;
39
+ versions;
40
+ constructor(http) {
41
+ this.http = http;
42
+ this.versions = new FileVersionsApi(http);
43
+ }
44
+ list(params) {
45
+ return this.http.request({
46
+ method: "GET",
47
+ path: "/v1/files",
48
+ query: params,
49
+ });
50
+ }
51
+ async *listAll(params) {
52
+ let next = params?.next;
53
+ do {
54
+ const page = await this.list({ ...params, next });
55
+ for (const f of page.records)
56
+ yield f;
57
+ next = page.next ?? undefined;
58
+ } while (next);
59
+ }
60
+ upload(body) {
61
+ const form = toFormData(body);
62
+ return this.http.request({
63
+ method: "POST",
64
+ path: "/v1/files",
65
+ body: form,
66
+ });
67
+ }
68
+ createText(body) {
69
+ return this.http.request({
70
+ method: "POST",
71
+ path: "/v1/files",
72
+ body,
73
+ });
74
+ }
75
+ get(fileId) {
76
+ return this.http.request({
77
+ method: "GET",
78
+ path: `/v1/files/${encodeURIComponent(fileId)}`,
79
+ });
80
+ }
81
+ update(fileId, body) {
82
+ return this.http.request({
83
+ method: "PATCH",
84
+ path: `/v1/files/${encodeURIComponent(fileId)}`,
85
+ body,
86
+ });
87
+ }
88
+ delete(fileId) {
89
+ return this.http.request({
90
+ method: "DELETE",
91
+ path: `/v1/files/${encodeURIComponent(fileId)}`,
92
+ expect: "empty",
93
+ });
94
+ }
95
+ download(fileId) {
96
+ return this.http.request({
97
+ method: "GET",
98
+ path: `/v1/files/${encodeURIComponent(fileId)}/content`,
99
+ expect: "bytes",
100
+ });
101
+ }
102
+ downloadStream(fileId) {
103
+ return this.http.request({
104
+ method: "GET",
105
+ path: `/v1/files/${encodeURIComponent(fileId)}/content`,
106
+ expect: "stream",
107
+ });
108
+ }
109
+ }
110
+ function toFormData(body) {
111
+ const fd = new FormData();
112
+ if ("file" in body && body.file instanceof Blob) {
113
+ fd.append("file", body.file, body.name);
114
+ }
115
+ else {
116
+ // Uint8Array branch — copy into a fresh ArrayBuffer so the Blob
117
+ // constructor sees a concrete ArrayBuffer (not ArrayBufferLike,
118
+ // which TS rejects under nodenext lib).
119
+ const u8 = body.file;
120
+ const ct = body.contentType ??
121
+ "application/octet-stream";
122
+ const ab = u8.buffer.slice(u8.byteOffset, u8.byteOffset + u8.byteLength);
123
+ fd.append("file", new Blob([ab], { type: ct }), body.name);
124
+ }
125
+ if (body.name)
126
+ fd.append("name", body.name);
127
+ if (body.file_type)
128
+ fd.append("file_type", body.file_type);
129
+ return fd;
130
+ }
131
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/runner-resources/files.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { Paginated, SseEvent, Task, TaskCancelResponse, TaskCreateParams, TaskCreateResponse, TaskListParams, TaskRun, TaskRunCreateParams, TaskUpdateParams } from "@introspection-sdk/types";
2
+ import { HttpClient } from "../http.js";
3
+ export interface StartParams extends TaskCreateParams {
4
+ prompt: string;
5
+ }
6
+ export declare class RunHandle {
7
+ readonly task: Task | null;
8
+ readonly run: TaskRun;
9
+ private readonly runs;
10
+ constructor(task: Task | null, run: TaskRun, runs: TaskRunsApi);
11
+ stream(): AsyncIterable<SseEvent>;
12
+ cancel(): Promise<TaskCancelResponse>;
13
+ /** Convenience: collect `data` from `event: text`-style frames into a string. */
14
+ text(): Promise<string>;
15
+ }
16
+ export declare class TaskRunsApi {
17
+ private readonly http;
18
+ constructor(http: HttpClient);
19
+ create(taskId: string, body: TaskRunCreateParams): Promise<RunHandle>;
20
+ get(taskId: string, runId: string): Promise<TaskRun>;
21
+ cancel(taskId: string, runId: string): Promise<TaskCancelResponse>;
22
+ stream(taskId: string, runId: string): AsyncIterable<SseEvent>;
23
+ }
24
+ export declare class TasksApi {
25
+ private readonly http;
26
+ readonly runs: TaskRunsApi;
27
+ constructor(http: HttpClient);
28
+ list(params?: TaskListParams): Promise<Paginated<Task>>;
29
+ listAll(params?: TaskListParams): AsyncIterable<Task>;
30
+ create(body: TaskCreateParams): Promise<TaskCreateResponse>;
31
+ get(taskId: string): Promise<Task>;
32
+ update(taskId: string, body: TaskUpdateParams): Promise<Task>;
33
+ delete(taskId: string): Promise<void>;
34
+ archive(taskId: string): Promise<void>;
35
+ unarchive(taskId: string): Promise<void>;
36
+ /** Cursor-style sugar: create a task + return a handle on its initial run. */
37
+ start(params: StartParams): Promise<RunHandle>;
38
+ }
39
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/runner-resources/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,IAAI,EACJ,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,OAAO,EACP,mBAAmB,EAEnB,gBAAgB,EACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,MAAM,WAAW,WAAY,SAAQ,gBAAgB;IACnD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,SAAS;aAEF,IAAI,EAAE,IAAI,GAAG,IAAI;aACjB,GAAG,EAAE,OAAO;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFL,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,GAAG,EAAE,OAAO,EACX,IAAI,EAAE,WAAW;IAGpC,MAAM,IAAI,aAAa,CAAC,QAAQ,CAAC;IAIjC,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAIrC,iFAAiF;IAC3E,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;CAO9B;AAED,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAEvC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IAS3E,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOpD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAO3D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC;CAMtE;AAED,qBAAa,QAAQ;IAGP,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;gBAEE,IAAI,EAAE,UAAU;IAI7C,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAQhD,OAAO,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC;IAS5D,MAAM,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQ3D,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,8EAA8E;IACxE,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;CAIrD"}
@@ -0,0 +1,129 @@
1
+ import { parseSse } from "../streaming.js";
2
+ export class RunHandle {
3
+ task;
4
+ run;
5
+ runs;
6
+ constructor(task, run, runs) {
7
+ this.task = task;
8
+ this.run = run;
9
+ this.runs = runs;
10
+ }
11
+ stream() {
12
+ return this.runs.stream(this.run.task_id, this.run.id);
13
+ }
14
+ cancel() {
15
+ return this.runs.cancel(this.run.task_id, this.run.id);
16
+ }
17
+ /** Convenience: collect `data` from `event: text`-style frames into a string. */
18
+ async text() {
19
+ let out = "";
20
+ for await (const ev of this.stream()) {
21
+ if (ev.event === "text" || ev.event === "message")
22
+ out += ev.data;
23
+ }
24
+ return out;
25
+ }
26
+ }
27
+ export class TaskRunsApi {
28
+ http;
29
+ constructor(http) {
30
+ this.http = http;
31
+ }
32
+ async create(taskId, body) {
33
+ const res = await this.http.request({
34
+ method: "POST",
35
+ path: `/v1/tasks/${encodeURIComponent(taskId)}/runs`,
36
+ body,
37
+ });
38
+ return new RunHandle(null, res.run, this);
39
+ }
40
+ get(taskId, runId) {
41
+ return this.http.request({
42
+ method: "GET",
43
+ path: `/v1/tasks/${encodeURIComponent(taskId)}/runs/${encodeURIComponent(runId)}`,
44
+ });
45
+ }
46
+ cancel(taskId, runId) {
47
+ return this.http.request({
48
+ method: "POST",
49
+ path: `/v1/tasks/${encodeURIComponent(taskId)}/runs/${encodeURIComponent(runId)}/cancel`,
50
+ });
51
+ }
52
+ async *stream(taskId, runId) {
53
+ const res = await this.http.stream({
54
+ path: `/v1/tasks/${encodeURIComponent(taskId)}/runs/${encodeURIComponent(runId)}/stream`,
55
+ });
56
+ yield* parseSse(res);
57
+ }
58
+ }
59
+ export class TasksApi {
60
+ http;
61
+ runs;
62
+ constructor(http) {
63
+ this.http = http;
64
+ this.runs = new TaskRunsApi(http);
65
+ }
66
+ list(params) {
67
+ return this.http.request({
68
+ method: "GET",
69
+ path: "/v1/tasks",
70
+ query: params,
71
+ });
72
+ }
73
+ async *listAll(params) {
74
+ let next = params?.next;
75
+ do {
76
+ const page = await this.list({ ...params, next });
77
+ for (const t of page.records)
78
+ yield t;
79
+ next = page.next ?? undefined;
80
+ } while (next);
81
+ }
82
+ create(body) {
83
+ return this.http.request({
84
+ method: "POST",
85
+ path: "/v1/tasks",
86
+ body,
87
+ });
88
+ }
89
+ get(taskId) {
90
+ return this.http.request({
91
+ method: "GET",
92
+ path: `/v1/tasks/${encodeURIComponent(taskId)}`,
93
+ });
94
+ }
95
+ update(taskId, body) {
96
+ return this.http.request({
97
+ method: "PATCH",
98
+ path: `/v1/tasks/${encodeURIComponent(taskId)}`,
99
+ body,
100
+ });
101
+ }
102
+ delete(taskId) {
103
+ return this.http.request({
104
+ method: "DELETE",
105
+ path: `/v1/tasks/${encodeURIComponent(taskId)}`,
106
+ expect: "empty",
107
+ });
108
+ }
109
+ archive(taskId) {
110
+ return this.http.request({
111
+ method: "POST",
112
+ path: `/v1/tasks/${encodeURIComponent(taskId)}/archive`,
113
+ expect: "empty",
114
+ });
115
+ }
116
+ unarchive(taskId) {
117
+ return this.http.request({
118
+ method: "POST",
119
+ path: `/v1/tasks/${encodeURIComponent(taskId)}/unarchive`,
120
+ expect: "empty",
121
+ });
122
+ }
123
+ /** Cursor-style sugar: create a task + return a handle on its initial run. */
124
+ async start(params) {
125
+ const res = await this.create(params);
126
+ return new RunHandle(res.task, res.run, this.runs);
127
+ }
128
+ }
129
+ //# sourceMappingURL=tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/runner-resources/tasks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import { type RunnerContext, type RunnerDeployment, type RunnerSpec, type RunRequest, type Uuid } from "@introspection-sdk/types";
2
+ import { TasksApi } from "./runner-resources/tasks.js";
3
+ import { FilesApi } from "./runner-resources/files.js";
4
+ import type { IntrospectionClient } from "./client.js";
5
+ /**
6
+ * Where this Runner came from, so `refresh()` can call CP again with the
7
+ * same arguments to obtain a fresh `RunnerSpec` (manual escape hatch only;
8
+ * not auto-scheduled).
9
+ */
10
+ export type RunnerSource = {
11
+ kind: "runtime";
12
+ id: Uuid;
13
+ options?: RunRequest;
14
+ } | {
15
+ kind: "experiment";
16
+ id: Uuid;
17
+ options?: RunRequest;
18
+ };
19
+ /**
20
+ * Live handle to a Data Plane sandbox. Holds the bearer JWT, the DP
21
+ * endpoint URL, and the runtime/experiment context, and exposes the
22
+ * runner-bound `tasks` and `files` namespaces.
23
+ *
24
+ * In v1 of the agent-session-based design, token refresh is handled
25
+ * server-side by the DP materializer attached to the agent session — the
26
+ * SDK does NOT auto-refresh and does NOT install a 401 safety-net. The
27
+ * `refresh()` method is kept as a manual escape hatch that re-calls the
28
+ * CP `/run` route to mint a brand-new spec.
29
+ */
30
+ export declare class Runner {
31
+ private readonly client;
32
+ private readonly source;
33
+ private spec;
34
+ private http;
35
+ private closed;
36
+ readonly tasks: TasksApi;
37
+ readonly files: FilesApi;
38
+ constructor(client: IntrospectionClient, source: RunnerSource, spec: RunnerSpec);
39
+ /** DP REST base URL the runner is bound to. */
40
+ get dpEndpoint(): string;
41
+ /** Routing target — DP endpoint / slug / region. */
42
+ get deployment(): Readonly<RunnerDeployment>;
43
+ /** Session lifetime (ISO-8601 string). */
44
+ get expires_at(): string;
45
+ /** Session ID assigned by CP. */
46
+ get session_id(): string;
47
+ /** Resolved runtime / arm / recipe / identity / caller context. */
48
+ get context(): Readonly<RunnerContext>;
49
+ /** True once `close()` has been called. */
50
+ get isClosed(): boolean;
51
+ /**
52
+ * Manual escape hatch: re-call CP `/v1/runtimes/{id}/run` or
53
+ * `/v1/experiments/{id}/run` with the original `RunRequest` and replace
54
+ * this runner's in-memory spec with a fresh one.
55
+ *
56
+ * Not auto-scheduled — in v1 the DP materializer refreshes the
57
+ * underlying access token transparently for the agent-session-backed
58
+ * runner. Call this only if you have an explicit reason to mint a new
59
+ * session (e.g. you held a runner across a very long pause).
60
+ */
61
+ refresh(): Promise<void>;
62
+ /**
63
+ * Best-effort close — flips a local `isClosed` flag so subsequent
64
+ * `runner.tasks` / `runner.files` calls throw a friendly error. No
65
+ * server-side revoke is performed; future work will route a revoke via
66
+ * the CP locator-token path.
67
+ */
68
+ close(): Promise<void>;
69
+ private buildHttp;
70
+ /**
71
+ * Wrap an HttpClient so that calls after `close()` fail with a clear
72
+ * `RunnerExpiredError` instead of hitting the network with a stale
73
+ * bearer. No 401 retry / refresh logic — that is the DP materializer's
74
+ * job in v1.
75
+ */
76
+ private guardedHttp;
77
+ private assertOpen;
78
+ private requestFreshSpec;
79
+ }
80
+ //# sourceMappingURL=runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,IAAI,EACV,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,qBAAa,MAAM;IAUf,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAS;IAGvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAGN,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,YAAY,EACrC,IAAI,EAAE,UAAU;IAUlB,+CAA+C;IAC/C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,oDAAoD;IACpD,IAAI,UAAU,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAE3C;IAED,0CAA0C;IAC1C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,iCAAiC;IACjC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,mEAAmE;IACnE,IAAI,OAAO,IAAI,QAAQ,CAAC,aAAa,CAAC,CAErC;IAED,2CAA2C;IAC3C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAID;;;;;;;;;OASG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,CAAC,SAAS;IAUjB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,UAAU;YAUJ,gBAAgB;CAgB/B"}
package/dist/runner.js ADDED
@@ -0,0 +1,159 @@
1
+ import { RunnerExpiredError, } from "@introspection-sdk/types";
2
+ import { HttpClient } from "./http.js";
3
+ import { TasksApi } from "./runner-resources/tasks.js";
4
+ import { FilesApi } from "./runner-resources/files.js";
5
+ /**
6
+ * Live handle to a Data Plane sandbox. Holds the bearer JWT, the DP
7
+ * endpoint URL, and the runtime/experiment context, and exposes the
8
+ * runner-bound `tasks` and `files` namespaces.
9
+ *
10
+ * In v1 of the agent-session-based design, token refresh is handled
11
+ * server-side by the DP materializer attached to the agent session — the
12
+ * SDK does NOT auto-refresh and does NOT install a 401 safety-net. The
13
+ * `refresh()` method is kept as a manual escape hatch that re-calls the
14
+ * CP `/run` route to mint a brand-new spec.
15
+ */
16
+ export class Runner {
17
+ client;
18
+ source;
19
+ spec;
20
+ http;
21
+ closed = false;
22
+ // Public API surfaces.
23
+ tasks;
24
+ files;
25
+ constructor(client, source, spec) {
26
+ this.client = client;
27
+ this.source = source;
28
+ this.spec = spec;
29
+ this.http = this.buildHttp();
30
+ this.tasks = new TasksApi(this.guardedHttp(this.http));
31
+ this.files = new FilesApi(this.guardedHttp(this.http));
32
+ }
33
+ // --- public accessors ---
34
+ /** DP REST base URL the runner is bound to. */
35
+ get dpEndpoint() {
36
+ return this.spec.deployment.endpoint;
37
+ }
38
+ /** Routing target — DP endpoint / slug / region. */
39
+ get deployment() {
40
+ return Object.freeze({ ...this.spec.deployment });
41
+ }
42
+ /** Session lifetime (ISO-8601 string). */
43
+ get expires_at() {
44
+ return this.spec.expires_at;
45
+ }
46
+ /** Session ID assigned by CP. */
47
+ get session_id() {
48
+ return this.spec.session_id;
49
+ }
50
+ /** Resolved runtime / arm / recipe / identity / caller context. */
51
+ get context() {
52
+ return Object.freeze({ ...this.spec.runtime_context });
53
+ }
54
+ /** True once `close()` has been called. */
55
+ get isClosed() {
56
+ return this.closed;
57
+ }
58
+ // --- lifecycle ---
59
+ /**
60
+ * Manual escape hatch: re-call CP `/v1/runtimes/{id}/run` or
61
+ * `/v1/experiments/{id}/run` with the original `RunRequest` and replace
62
+ * this runner's in-memory spec with a fresh one.
63
+ *
64
+ * Not auto-scheduled — in v1 the DP materializer refreshes the
65
+ * underlying access token transparently for the agent-session-backed
66
+ * runner. Call this only if you have an explicit reason to mint a new
67
+ * session (e.g. you held a runner across a very long pause).
68
+ */
69
+ async refresh() {
70
+ if (this.closed) {
71
+ throw new RunnerExpiredError({
72
+ message: "Runner has been closed",
73
+ status: 401,
74
+ code: "runner_expired",
75
+ });
76
+ }
77
+ const fresh = await this.requestFreshSpec();
78
+ this.spec = fresh;
79
+ // Note: we intentionally don't swap the underlying `http` here — the
80
+ // constructor-time bindings stay stable for the lifetime of the Runner.
81
+ // Callers wanting a freshly-bound Runner should call
82
+ // `client.runtimes(id).run(...)` again.
83
+ }
84
+ /**
85
+ * Best-effort close — flips a local `isClosed` flag so subsequent
86
+ * `runner.tasks` / `runner.files` calls throw a friendly error. No
87
+ * server-side revoke is performed; future work will route a revoke via
88
+ * the CP locator-token path.
89
+ */
90
+ async close() {
91
+ this.closed = true;
92
+ }
93
+ // --- internals ---
94
+ buildHttp() {
95
+ const advanced = this.client.advancedOptions;
96
+ return new HttpClient({
97
+ apiUrl: this.spec.deployment.endpoint,
98
+ token: this.spec.session_token,
99
+ additionalHeaders: advanced.additionalHeaders,
100
+ fetch: advanced.fetch,
101
+ });
102
+ }
103
+ /**
104
+ * Wrap an HttpClient so that calls after `close()` fail with a clear
105
+ * `RunnerExpiredError` instead of hitting the network with a stale
106
+ * bearer. No 401 retry / refresh logic — that is the DP materializer's
107
+ * job in v1.
108
+ */
109
+ guardedHttp(http) {
110
+ const proxy = Object.create(http);
111
+ proxy.request = async (opts) => {
112
+ this.assertOpen();
113
+ return http.request(opts);
114
+ };
115
+ proxy.stream = async (opts) => {
116
+ this.assertOpen();
117
+ return http.stream(opts);
118
+ };
119
+ return proxy;
120
+ }
121
+ assertOpen() {
122
+ if (this.closed) {
123
+ throw new RunnerExpiredError({
124
+ message: "Runner has been closed",
125
+ status: 401,
126
+ code: "runner_expired",
127
+ });
128
+ }
129
+ }
130
+ async requestFreshSpec() {
131
+ const http = this.client.cpHttp;
132
+ const body = toRunBody(this.source.options);
133
+ if (this.source.kind === "runtime") {
134
+ return await http.request({
135
+ method: "POST",
136
+ path: `/v1/runtimes/${encodeURIComponent(this.source.id)}/run`,
137
+ body,
138
+ });
139
+ }
140
+ return await http.request({
141
+ method: "POST",
142
+ path: `/v1/experiments/${encodeURIComponent(this.source.id)}/run`,
143
+ body,
144
+ });
145
+ }
146
+ }
147
+ function toRunBody(opts) {
148
+ if (!opts)
149
+ return {};
150
+ const out = {};
151
+ if (opts.identity)
152
+ out.identity = opts.identity;
153
+ if (opts.caller)
154
+ out.caller = opts.caller;
155
+ if (opts.ttl_seconds !== undefined)
156
+ out.ttl_seconds = opts.ttl_seconds;
157
+ return out;
158
+ }
159
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"span-processor.d.ts","sourceRoot":"","sources":["../src/span-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAIR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,IAAI,EAGL,MAAM,+BAA+B,CAAC;AAMvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA8FlD,MAAM,WAAW,iCAAiC;IAChD,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,0BAA2B,YAAW,aAAa;IAC9D,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAkC;gBAE9C,OAAO,GAAE,iCAAsC;IAwH3D;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAIjD;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IA2H/B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
1
+ {"version":3,"file":"span-processor.d.ts","sourceRoot":"","sources":["../src/span-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAIR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,IAAI,EAGL,MAAM,+BAA+B,CAAC;AAMvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA8FlD,MAAM,WAAW,iCAAiC;IAChD,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,0BAA2B,YAAW,aAAa;IAC9D,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAkC;gBAE9C,OAAO,GAAE,iCAAsC;IA0H3D;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAIjD;;;;;;OAMG;IACH,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IA2H/B;;;;OAIG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
@@ -5,7 +5,7 @@ import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions";
5
5
  import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto";
6
6
  import { ExportResultCode } from "@opentelemetry/core";
7
7
  import { randomUUID } from "crypto";
8
- import { logger } from "./utils.js";
8
+ import { logger, withOtlpHttpsProxy } from "./utils.js";
9
9
  import { isOpenInferenceSpan, replaceOpenInferenceWithGenAI, isVercelAISpan, convertVercelAIToGenAI, } from "./converters/index.js";
10
10
  /**
11
11
  * A {@link ReadableSpan} wrapper that substitutes the original attributes with
@@ -120,10 +120,10 @@ export class IntrospectionSpanProcessor {
120
120
  logger.info(`IntrospectionSpanProcessor initialized: endpoint=${endpoint}${serviceName ? `, serviceName=${serviceName}` : ""}`);
121
121
  // Use custom spanExporter if provided (for testing), otherwise create OTLP exporter
122
122
  const baseExporter = advanced.spanExporter ||
123
- new OTLPTraceExporter({
123
+ new OTLPTraceExporter(withOtlpHttpsProxy({
124
124
  url: endpoint,
125
125
  headers,
126
- });
126
+ }));
127
127
  // Wrap exporter to add v1/v2 compatibility and basic validation
128
128
  const exporter = {
129
129
  export: (spans, resultCallback) => {
@@ -0,0 +1,8 @@
1
+ import type { SseEvent } from "@introspection-sdk/types";
2
+ /**
3
+ * Parse a `text/event-stream` Response into an async-iterable of SSE
4
+ * events. Minimal parser: handles `event:`, `data:` (multi-line),
5
+ * `id:`, `retry:`; ignores comments and unknown fields.
6
+ */
7
+ export declare function parseSse(res: Response): AsyncIterable<SseEvent>;
8
+ //# sourceMappingURL=streaming.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../src/streaming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD;;;;GAIG;AACH,wBAAuB,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAiDtE"}