@tidblink/server 0.0.0-stage → 0.4.0-rc.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 (116) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1182 -2
  3. package/dist/audio.d.ts +72 -0
  4. package/dist/audio.d.ts.map +1 -0
  5. package/dist/audio.js +168 -0
  6. package/dist/audio.js.map +1 -0
  7. package/dist/backend-connection.d.ts +89 -0
  8. package/dist/backend-connection.d.ts.map +1 -0
  9. package/dist/backend-connection.js +300 -0
  10. package/dist/backend-connection.js.map +1 -0
  11. package/dist/backend-pool.d.ts +93 -0
  12. package/dist/backend-pool.d.ts.map +1 -0
  13. package/dist/backend-pool.js +419 -0
  14. package/dist/backend-pool.js.map +1 -0
  15. package/dist/client-tool-executor.d.ts +31 -0
  16. package/dist/client-tool-executor.d.ts.map +1 -0
  17. package/dist/client-tool-executor.js +190 -0
  18. package/dist/client-tool-executor.js.map +1 -0
  19. package/dist/client-tools.d.ts +21 -0
  20. package/dist/client-tools.d.ts.map +1 -0
  21. package/dist/client-tools.js +48 -0
  22. package/dist/client-tools.js.map +1 -0
  23. package/dist/connector-callback.d.ts +92 -0
  24. package/dist/connector-callback.d.ts.map +1 -0
  25. package/dist/connector-callback.js +155 -0
  26. package/dist/connector-callback.js.map +1 -0
  27. package/dist/connectors.d.ts +66 -0
  28. package/dist/connectors.d.ts.map +1 -0
  29. package/dist/connectors.js +71 -0
  30. package/dist/connectors.js.map +1 -0
  31. package/dist/control.d.ts +17 -0
  32. package/dist/control.d.ts.map +1 -0
  33. package/dist/control.js +52 -0
  34. package/dist/control.js.map +1 -0
  35. package/dist/errors.d.ts +103 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +115 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/events.d.ts +158 -0
  40. package/dist/events.d.ts.map +1 -0
  41. package/dist/events.js +110 -0
  42. package/dist/events.js.map +1 -0
  43. package/dist/files.d.ts +129 -0
  44. package/dist/files.d.ts.map +1 -0
  45. package/dist/files.js +388 -0
  46. package/dist/files.js.map +1 -0
  47. package/dist/history.d.ts +279 -0
  48. package/dist/history.d.ts.map +1 -0
  49. package/dist/history.js +91 -0
  50. package/dist/history.js.map +1 -0
  51. package/dist/http.d.ts +88 -0
  52. package/dist/http.d.ts.map +1 -0
  53. package/dist/http.js +302 -0
  54. package/dist/http.js.map +1 -0
  55. package/dist/index.d.ts +39 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +18 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/organization.d.ts +87 -0
  60. package/dist/organization.d.ts.map +1 -0
  61. package/dist/organization.js +112 -0
  62. package/dist/organization.js.map +1 -0
  63. package/dist/realtime.d.ts +90 -0
  64. package/dist/realtime.d.ts.map +1 -0
  65. package/dist/realtime.js +111 -0
  66. package/dist/realtime.js.map +1 -0
  67. package/dist/session-connection.d.ts +144 -0
  68. package/dist/session-connection.d.ts.map +1 -0
  69. package/dist/session-connection.js +334 -0
  70. package/dist/session-connection.js.map +1 -0
  71. package/dist/session-send.d.ts +49 -0
  72. package/dist/session-send.d.ts.map +1 -0
  73. package/dist/session-send.js +179 -0
  74. package/dist/session-send.js.map +1 -0
  75. package/dist/session.d.ts +165 -0
  76. package/dist/session.d.ts.map +1 -0
  77. package/dist/session.js +253 -0
  78. package/dist/session.js.map +1 -0
  79. package/dist/skills.d.ts +103 -0
  80. package/dist/skills.d.ts.map +1 -0
  81. package/dist/skills.js +98 -0
  82. package/dist/skills.js.map +1 -0
  83. package/dist/sse.d.ts +10 -0
  84. package/dist/sse.d.ts.map +1 -0
  85. package/dist/sse.js +50 -0
  86. package/dist/sse.js.map +1 -0
  87. package/dist/template-switch.d.ts +51 -0
  88. package/dist/template-switch.d.ts.map +1 -0
  89. package/dist/template-switch.js +81 -0
  90. package/dist/template-switch.js.map +1 -0
  91. package/dist/templates.d.ts +129 -0
  92. package/dist/templates.d.ts.map +1 -0
  93. package/dist/templates.js +92 -0
  94. package/dist/templates.js.map +1 -0
  95. package/dist/turn.d.ts +47 -0
  96. package/dist/turn.d.ts.map +1 -0
  97. package/dist/turn.js +210 -0
  98. package/dist/turn.js.map +1 -0
  99. package/dist/usage.d.ts +278 -0
  100. package/dist/usage.d.ts.map +1 -0
  101. package/dist/usage.js +22 -0
  102. package/dist/usage.js.map +1 -0
  103. package/dist/user.d.ts +55 -0
  104. package/dist/user.d.ts.map +1 -0
  105. package/dist/user.js +52 -0
  106. package/dist/user.js.map +1 -0
  107. package/examples/control-turn.mjs +53 -0
  108. package/examples/create-session.mjs +82 -0
  109. package/examples/http-connector.mjs +127 -0
  110. package/examples/lamp-backend.mjs +175 -0
  111. package/examples/prepare-realtime-connection.mjs +72 -0
  112. package/examples/read-usage.mjs +44 -0
  113. package/examples/send-message.mjs +48 -0
  114. package/examples/submit-audio.mjs +57 -0
  115. package/examples/upload-file.mjs +58 -0
  116. package/package.json +59 -4
@@ -0,0 +1,165 @@
1
+ import { type AudioTurnInput, type AudioTurnEvent, type AudioTurnResult } from "./audio.js";
2
+ import { type ClientToolDeclaration, type ClientToolSet, type ReplaceClientToolsOptions } from "./client-tools.js";
3
+ import { type TurnCommandInput, type RetryReceipt } from "./control.js";
4
+ import { type SwitchTemplateInput, type TemplateSwitchReceipt } from "./template-switch.js";
5
+ import type { RequestOptions } from "./organization.js";
6
+ import { type ConnectOptions, type SessionConnection } from "./session-connection.js";
7
+ import { HttpClient } from "./http.js";
8
+ import { type OpenRealtimeConnectionInput, type OpenRealtimeConnectionResult, type RealtimeConnectGrant, type RealtimeConnection, type RealtimeModelSelection } from "./realtime.js";
9
+ import { type CreateTurnInput, type TurnResult, type WaitForResultOptions } from "./turn.js";
10
+ import { type SessionInteraction, type SessionInteractionPage, type TurnRecord, type TurnPage, type SessionTimelinePage } from "./history.js";
11
+ import type { ListOptions } from "./http.js";
12
+ /** Model IDs come from the deployment catalog, including newly published models. */
13
+ export type SelectableSessionModel = string;
14
+ export type SessionModel = string;
15
+ /** The Sandbox a Session runs in, chosen at creation. */
16
+ export interface SessionSandboxSelection {
17
+ /** A selectable Sandbox profile; omitted or null uses the Template's profile. */
18
+ profileId?: string | null;
19
+ /** A Drive-relative working directory; defaults to `.`. Creation does not make it. */
20
+ workingDirectory?: string;
21
+ }
22
+ export interface CreateSessionOptions extends RequestOptions {
23
+ /** The active Template the Session runs. Required: there is no default Template. */
24
+ templateId: string;
25
+ /** Keep the same key and input when recovering an uncertain creation. */
26
+ idempotencyKey: string;
27
+ model?: string;
28
+ realtimeModel?: string;
29
+ billingTag?: BillingTag | null;
30
+ tools?: ClientToolDeclaration[];
31
+ /** Added to the Template instructions for this Session only; at most 4096 UTF-8 bytes. */
32
+ additionalInstructions?: string | null;
33
+ sandbox?: SessionSandboxSelection;
34
+ /** Required as `true` when the Template enables cross-Session Recall. */
35
+ acknowledgeSessionRecall?: boolean;
36
+ }
37
+ export interface SuggestSessionNameInput {
38
+ userText: string;
39
+ assistantText?: string;
40
+ }
41
+ export interface BillingTag {
42
+ key: string;
43
+ value: string;
44
+ }
45
+ export interface SessionRecord {
46
+ organizationId: string;
47
+ sessionId: string;
48
+ name: string | null;
49
+ autoTitle: string | null;
50
+ ownerUserId: string;
51
+ startedByUserId: string;
52
+ createdByType: "user" | "scheduler" | "template_preview";
53
+ readOnly: boolean;
54
+ sourceSchedulerId: string | null;
55
+ sourceSchedulerFireId: string | null;
56
+ billingTag: BillingTag | null;
57
+ model: SessionModel;
58
+ modelRevision: number;
59
+ realtimeModel: string | null;
60
+ realtimeModelRevision: number;
61
+ realtimeModelEtag: string;
62
+ realtimeVoice: import("./realtime.js").RealtimeVoiceSetting | null;
63
+ template?: {
64
+ templateId: string;
65
+ contentDigest: string;
66
+ } | null;
67
+ realtime: {
68
+ id: string;
69
+ status: "connecting" | "active" | "paused";
70
+ audio: import("./realtime.js").RealtimeAudioFormats;
71
+ startedAt: string;
72
+ } | null;
73
+ /** Current Session Configuration Epoch; null for read-only or provider-owned snapshots. */
74
+ configurationEpoch: number | null;
75
+ /** True while a Template switch fences new interaction. */
76
+ switching: boolean;
77
+ modelPolicyStatus: "allowed" | "organization_disallowed";
78
+ status: "active" | "deleted";
79
+ activeTurnId: string | null;
80
+ createdAt: string;
81
+ updatedAt: string;
82
+ deletedAt: string | null;
83
+ }
84
+ export type ClarificationItem = {
85
+ prompt: string;
86
+ selectionMode: "single";
87
+ answerChoices: [string, string, string?];
88
+ response?: {
89
+ answers: [string];
90
+ responseTurnId: string;
91
+ };
92
+ } | {
93
+ prompt: string;
94
+ selectionMode: "multiple";
95
+ answerChoices: [string, string, ...string[]];
96
+ response?: {
97
+ answers: [string, ...string[]];
98
+ responseTurnId: string;
99
+ };
100
+ };
101
+ export declare class Session {
102
+ #private;
103
+ readonly id: string;
104
+ constructor(http: HttpClient, id: string, record?: SessionRecord, etag?: string);
105
+ get data(): Readonly<SessionRecord> | undefined;
106
+ get model(): SessionModel | undefined;
107
+ refresh(options?: RequestOptions): Promise<this>;
108
+ setModel(model: SelectableSessionModel, options?: RequestOptions): Promise<this>;
109
+ rename(name: string, options?: RequestOptions): Promise<this>;
110
+ suggestName(input: SuggestSessionNameInput, options?: RequestOptions): Promise<this>;
111
+ setBillingTag(billingTag: BillingTag | null, options?: RequestOptions): Promise<this>;
112
+ delete(options?: RequestOptions): Promise<this>;
113
+ openRealtimeConnection(input?: OpenRealtimeConnectionInput, options?: {
114
+ signal?: AbortSignal;
115
+ }): Promise<OpenRealtimeConnectionResult>;
116
+ getRealtimeConnection(options?: {
117
+ signal?: AbortSignal;
118
+ }): Promise<RealtimeConnection>;
119
+ createRealtimeConnectToken(options?: {
120
+ signal?: AbortSignal;
121
+ }): Promise<RealtimeConnectGrant>;
122
+ endRealtimeConnection(options?: {
123
+ signal?: AbortSignal;
124
+ }): Promise<RealtimeConnection>;
125
+ getRealtimeModelSelection(options?: {
126
+ signal?: AbortSignal;
127
+ }): Promise<RealtimeModelSelection>;
128
+ setRealtimeModel(model: string, options: {
129
+ ifMatch: string;
130
+ signal?: AbortSignal;
131
+ }): Promise<RealtimeModelSelection>;
132
+ /**
133
+ * Move this idle Session to another Template. After a lost response, repeat
134
+ * with the same input to recover the receipt. The receipt holds no Session,
135
+ * so `data` is not updated: call `refresh()` to read the new Template.
136
+ */
137
+ switchTemplate(input: SwitchTemplateInput): Promise<TemplateSwitchReceipt>;
138
+ /**
139
+ * Attach this Session to the process's Backend Connection: receive its
140
+ * events and, unless `observe` is set, declare and execute its Client
141
+ * Tools. Resolves once the attach took effect. One connection per Session
142
+ * per OrganizationClient; a connection on another process or client takes
143
+ * the Session over and this one ends with `superseded`.
144
+ */
145
+ connect(options?: ConnectOptions): Promise<SessionConnection>;
146
+ streamAudio(input: AudioTurnInput): AsyncGenerator<AudioTurnEvent>;
147
+ audio(input: AudioTurnInput): Promise<AudioTurnResult>;
148
+ getClientTools(options?: RequestOptions): Promise<ClientToolSet>;
149
+ replaceClientTools(tools: readonly ClientToolDeclaration[], options: ReplaceClientToolsOptions): Promise<ClientToolSet>;
150
+ history(options?: ListOptions): Promise<TurnPage>;
151
+ getTurn(turnId: string, options?: RequestOptions): Promise<TurnRecord>;
152
+ timeline(options?: ListOptions): Promise<SessionTimelinePage>;
153
+ listInteractions(options?: ListOptions): Promise<SessionInteractionPage>;
154
+ getInteraction(inputId: string, options?: RequestOptions): Promise<SessionInteraction>;
155
+ reconcileInteraction(clientEventId: string, options?: RequestOptions): Promise<SessionInteraction | null>;
156
+ /** Acceptance requests cancellation; read the receipt for the eventual outcome. */
157
+ cancel(input: TurnCommandInput): Promise<SessionInteraction>;
158
+ /** Explicit checkpoint retry has its own identity and original execution result. */
159
+ retry(input: TurnCommandInput): Promise<RetryReceipt>;
160
+ submitMessage(input: CreateTurnInput): Promise<SessionInteraction>;
161
+ waitForResult(inputId: string, options?: WaitForResultOptions): Promise<TurnResult>;
162
+ turn(input: CreateTurnInput, options?: WaitForResultOptions): Promise<TurnResult>;
163
+ }
164
+ export declare const createSession: (http: HttpClient, options: CreateSessionOptions) => Promise<Session>;
165
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,253 @@
1
+ import { audioTurn, streamAudio, } from "./audio.js";
2
+ import { getClientTools, replaceClientTools, validateClientTools, } from "./client-tools.js";
3
+ import { submitTurnCommand, } from "./control.js";
4
+ import { OutcomeUnknownError } from "./errors.js";
5
+ import { switchTemplate, } from "./template-switch.js";
6
+ import { connectSession, } from "./session-connection.js";
7
+ import { requestOptions, HttpClient, requireEtag, requireKnownKeys, requireCreationKey, requireTemplateId, } from "./http.js";
8
+ import { realtimeModelSelectionFrom, requireOpenRealtimeConnectionReceipt, requireRealtimeConnectGrantReceipt, requireRealtimeConnectionReceipt, requireRealtimeModelSelectionReceipt, } from "./realtime.js";
9
+ import { submitMessage, waitForResult, validateWaitOptions, } from "./turn.js";
10
+ import { getInteraction, reconcileInteraction, listInteractions, history, getTurn, timeline, } from "./history.js";
11
+ export class Session {
12
+ #http;
13
+ id;
14
+ #etag;
15
+ #record;
16
+ constructor(http, id, record, etag) {
17
+ if (!id)
18
+ throw new TypeError("Session id is required");
19
+ this.#http = http;
20
+ this.id = id;
21
+ this.#record = record;
22
+ this.#etag = etag;
23
+ }
24
+ get data() {
25
+ return this.#record;
26
+ }
27
+ get model() {
28
+ return this.#record?.model;
29
+ }
30
+ async refresh(options) {
31
+ options = requestOptions(options);
32
+ const result = await this.#http.getResponse(`/sessions/${encodeURIComponent(this.id)}`, options);
33
+ const etag = requireEtag(result);
34
+ this.#record = result.data.session;
35
+ this.#etag = etag;
36
+ return this;
37
+ }
38
+ async setModel(model, options) {
39
+ options = requestOptions(options);
40
+ if (!this.#etag)
41
+ await this.refresh(options);
42
+ const result = await this.#http.patchResponse(`/sessions/${encodeURIComponent(this.id)}/model`, { model }, {
43
+ ifMatch: this.#etag,
44
+ outcomeUnknown: true,
45
+ ...options,
46
+ });
47
+ if (!result.etag)
48
+ throw new OutcomeUnknownError("Session model update returned no model ETag; read the Session before changing it again", { requestId: result.requestId });
49
+ this.#record = sessionReceipt(result.data, result.requestId);
50
+ const etag = result.etag;
51
+ this.#etag = etag;
52
+ return this;
53
+ }
54
+ async rename(name, options) {
55
+ options = requestOptions(options);
56
+ const result = await this.#http.postResponse(`/sessions/${encodeURIComponent(this.id)}/name`, { name }, { ...options, outcomeUnknown: true });
57
+ this.#record = sessionReceipt(result.data, result.requestId);
58
+ return this;
59
+ }
60
+ async suggestName(input, options) {
61
+ options = requestOptions(options);
62
+ requireKnownKeys(input, ["userText", "assistantText"], "Session naming input");
63
+ const result = await this.#http.postResponse(`/sessions/${encodeURIComponent(this.id)}/name/suggest`, input, { ...options, outcomeUnknown: true });
64
+ this.#record = sessionReceipt(result.data, result.requestId);
65
+ return this;
66
+ }
67
+ async setBillingTag(billingTag, options) {
68
+ options = requestOptions(options);
69
+ const result = await this.#http.patchResponse(`/sessions/${encodeURIComponent(this.id)}/billing-tag`, { billingTag }, { ...options, outcomeUnknown: true });
70
+ this.#record = sessionReceipt(result.data, result.requestId);
71
+ return this;
72
+ }
73
+ async delete(options) {
74
+ options = requestOptions(options);
75
+ const result = await this.#http.deleteResponse(`/sessions/${encodeURIComponent(this.id)}`, { ...options, outcomeUnknown: true });
76
+ this.#record = sessionReceipt(result.data, result.requestId);
77
+ return this;
78
+ }
79
+ async openRealtimeConnection(input = {}, options) {
80
+ options = requestOptions(options);
81
+ requireKnownKeys(input, ["audio", "metadata"], "Realtime Connection input");
82
+ const result = await this.#http.postResponse(`/sessions/${encodeURIComponent(this.id)}/realtime`, input, {
83
+ outcomeUnknown: true,
84
+ ...(options?.signal ? { signal: options.signal } : {}),
85
+ });
86
+ return requireOpenRealtimeConnectionReceipt(result.data, result.requestId);
87
+ }
88
+ async getRealtimeConnection(options) {
89
+ options = requestOptions(options);
90
+ const response = await this.#http.get(`/sessions/${encodeURIComponent(this.id)}/realtime`, options);
91
+ return response.realtimeConnection;
92
+ }
93
+ async createRealtimeConnectToken(options) {
94
+ options = requestOptions(options);
95
+ const result = await this.#http.postResponse(`/sessions/${encodeURIComponent(this.id)}/realtime/connect-tokens`, undefined, {
96
+ outcomeUnknown: true,
97
+ ...(options?.signal ? { signal: options.signal } : {}),
98
+ });
99
+ return requireRealtimeConnectGrantReceipt(result.data, result.requestId);
100
+ }
101
+ async endRealtimeConnection(options) {
102
+ options = requestOptions(options);
103
+ const result = await this.#http.deleteResponse(`/sessions/${encodeURIComponent(this.id)}/realtime`, {
104
+ outcomeUnknown: true,
105
+ ...(options?.signal ? { signal: options.signal } : {}),
106
+ });
107
+ return requireRealtimeConnectionReceipt(result.data, result.requestId);
108
+ }
109
+ async getRealtimeModelSelection(options) {
110
+ options = requestOptions(options);
111
+ const response = await this.#http.get(`/sessions/${encodeURIComponent(this.id)}`, options);
112
+ return realtimeModelSelectionFrom(response.session);
113
+ }
114
+ async setRealtimeModel(model, options) {
115
+ requireKnownKeys(options, ["ifMatch", "signal"], "Realtime Model selection options");
116
+ if (!model || model.length > 128)
117
+ throw new TypeError("Realtime Model ID must contain 1-128 characters");
118
+ if (!options.ifMatch)
119
+ throw new TypeError("Realtime Model selection requires ifMatch");
120
+ const result = await this.#http.patchResponse(`/sessions/${encodeURIComponent(this.id)}/realtime-model`, { realtimeModel: model }, {
121
+ ifMatch: options.ifMatch,
122
+ outcomeUnknown: true,
123
+ ...(options.signal ? { signal: options.signal } : {}),
124
+ });
125
+ const receipt = result.data;
126
+ return requireRealtimeModelSelectionReceipt(receipt?.session, result.requestId);
127
+ }
128
+ /**
129
+ * Move this idle Session to another Template. After a lost response, repeat
130
+ * with the same input to recover the receipt. The receipt holds no Session,
131
+ * so `data` is not updated: call `refresh()` to read the new Template.
132
+ */
133
+ switchTemplate(input) {
134
+ return switchTemplate(this.#http, this.id, input);
135
+ }
136
+ /**
137
+ * Attach this Session to the process's Backend Connection: receive its
138
+ * events and, unless `observe` is set, declare and execute its Client
139
+ * Tools. Resolves once the attach took effect. One connection per Session
140
+ * per OrganizationClient; a connection on another process or client takes
141
+ * the Session over and this one ends with `superseded`.
142
+ */
143
+ connect(options) {
144
+ return connectSession(this.#http, this.#http.backend, this.#http.userId, this.id, options);
145
+ }
146
+ streamAudio(input) {
147
+ return streamAudio(this.#http, this.id, input);
148
+ }
149
+ audio(input) {
150
+ return audioTurn(this.#http, this.id, input);
151
+ }
152
+ getClientTools(options) {
153
+ return getClientTools(this.#http, this.id, options);
154
+ }
155
+ replaceClientTools(tools, options) {
156
+ return replaceClientTools(this.#http, this.id, tools, options);
157
+ }
158
+ history(options) {
159
+ return history(this.#http, this.id, options);
160
+ }
161
+ getTurn(turnId, options) {
162
+ return getTurn(this.#http, this.id, turnId, options);
163
+ }
164
+ timeline(options) {
165
+ return timeline(this.#http, this.id, options);
166
+ }
167
+ listInteractions(options) {
168
+ return listInteractions(this.#http, this.id, options);
169
+ }
170
+ getInteraction(inputId, options) {
171
+ return getInteraction(this.#http, this.id, inputId, options);
172
+ }
173
+ reconcileInteraction(clientEventId, options) {
174
+ return reconcileInteraction(this.#http, this.id, clientEventId, options);
175
+ }
176
+ /** Acceptance requests cancellation; read the receipt for the eventual outcome. */
177
+ cancel(input) {
178
+ return submitTurnCommand(this.#http, this.id, "cancel", input);
179
+ }
180
+ /** Explicit checkpoint retry has its own identity and original execution result. */
181
+ retry(input) {
182
+ return submitTurnCommand(this.#http, this.id, "retry", input);
183
+ }
184
+ submitMessage(input) {
185
+ return submitMessage(this.#http, this.id, input);
186
+ }
187
+ waitForResult(inputId, options) {
188
+ return waitForResult(this.#http, this.id, inputId, options);
189
+ }
190
+ async turn(input, options) {
191
+ validateWaitOptions(options);
192
+ const waitOptions = {
193
+ ...(input.signal ? { signal: input.signal } : {}),
194
+ ...options,
195
+ };
196
+ const accepted = await this.submitMessage(input);
197
+ return this.waitForResult(accepted.inputId, waitOptions);
198
+ }
199
+ }
200
+ const sessionReceipt = (value, requestId) => {
201
+ if (typeof value?.session?.sessionId !== "string" ||
202
+ !value.session.sessionId) {
203
+ throw new OutcomeUnknownError("Session mutation returned no usable Session; reconcile before retrying", { requestId });
204
+ }
205
+ return value.session;
206
+ };
207
+ export const createSession = async (http, options) => {
208
+ requireKnownKeys(options, [
209
+ "templateId",
210
+ "idempotencyKey",
211
+ "model",
212
+ "realtimeModel",
213
+ "billingTag",
214
+ "tools",
215
+ "additionalInstructions",
216
+ "sandbox",
217
+ "acknowledgeSessionRecall",
218
+ "signal",
219
+ "requestId",
220
+ ], "Session options");
221
+ requireTemplateId(options.templateId, "Session creation");
222
+ requireCreationKey(options.idempotencyKey);
223
+ if (options.tools !== undefined)
224
+ validateClientTools(options.tools);
225
+ const instructions = options.additionalInstructions;
226
+ if (instructions !== undefined &&
227
+ instructions !== null &&
228
+ typeof instructions !== "string")
229
+ throw new TypeError("additionalInstructions must be text or null");
230
+ if (options.sandbox !== undefined) {
231
+ requireKnownKeys(options.sandbox, ["profileId", "workingDirectory"], "Session Sandbox selection");
232
+ const { profileId, workingDirectory } = options.sandbox;
233
+ if (profileId !== undefined &&
234
+ profileId !== null &&
235
+ typeof profileId !== "string")
236
+ throw new TypeError("sandbox.profileId must be text or null");
237
+ if (workingDirectory !== undefined && typeof workingDirectory !== "string")
238
+ throw new TypeError("sandbox.workingDirectory must be text");
239
+ }
240
+ const { templateId, idempotencyKey, signal, requestId, ...body } = options;
241
+ const result = await http.postResponse("/sessions", { agentTemplateId: templateId, ...body }, {
242
+ idempotencyKey,
243
+ idempotent: true,
244
+ outcomeUnknown: true,
245
+ ...(signal ? { signal } : {}),
246
+ ...(requestId ? { requestId } : {}),
247
+ });
248
+ const record = sessionReceipt(result.data, result.requestId);
249
+ if (!result.etag)
250
+ throw new OutcomeUnknownError("Session creation returned no model ETag; recover with the same creation key", { requestId: result.requestId });
251
+ return new Session(http, record.sessionId, record, result.etag);
252
+ };
253
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ import { HttpClient, type ListOptions } from "./http.js";
2
+ import type { RequestOptions } from "./organization.js";
3
+ export interface SkillSummary {
4
+ skillId: string;
5
+ name: string;
6
+ description: string;
7
+ revision: number;
8
+ /** The latest published version. */
9
+ headVersion: number;
10
+ createdAt: string;
11
+ updatedAt: string;
12
+ }
13
+ export interface SkillVersion {
14
+ version: number;
15
+ name: string;
16
+ description: string;
17
+ packageDigest: string;
18
+ rawSize: number;
19
+ extractedSize: number;
20
+ loadable: boolean;
21
+ portable: boolean;
22
+ createdAt: string;
23
+ }
24
+ export interface SkillPage {
25
+ skills: SkillSummary[];
26
+ nextCursor: string | null;
27
+ }
28
+ /** A Skill with one page of its published versions, newest first. */
29
+ export interface SkillDetail {
30
+ skill: SkillSummary;
31
+ versions: SkillVersion[];
32
+ nextCursor: string | null;
33
+ }
34
+ export type SkillUploadState = "uploading" | "pending" | "uploaded" | "fetching" | "validating" | "extracting" | "awaiting_confirmation" | "finalizing" | "done" | "failed" | "aborted";
35
+ /**
36
+ * A Skill ZIP being validated and published. It reaches
37
+ * `awaiting_confirmation` once valid, then `done` with a `version` after
38
+ * publication; `failed` and `aborted` are final.
39
+ */
40
+ export interface SkillUpload {
41
+ uploadId: string;
42
+ /** Every upload creates a new Skill. */
43
+ skillId: string;
44
+ state: SkillUploadState;
45
+ byteSize: number;
46
+ sha256: string;
47
+ /** Publish before this time. */
48
+ expiresAt: string | null;
49
+ validation: {
50
+ entriesTotal: number | null;
51
+ fileCount: number | null;
52
+ entriesDone: number;
53
+ declaredBytes: number | null;
54
+ bytesDone: number;
55
+ diagnostics: Record<string, unknown>[];
56
+ failureCode: string | null;
57
+ failurePath: string | null;
58
+ };
59
+ /** The published version once `state` is `done`. */
60
+ version: number | null;
61
+ createdAt: string;
62
+ updatedAt: string;
63
+ }
64
+ export interface UploadSkillInput extends RequestOptions {
65
+ /** The Skill package as a ZIP archive (at most 200 MiB). */
66
+ bytes: Uint8Array;
67
+ /** Repeating the same bytes with the same key returns the original upload. */
68
+ idempotencyKey: string;
69
+ }
70
+ export interface PublishSkillOptions extends RequestOptions {
71
+ /** Repeating publication with the same key returns the same upload. */
72
+ idempotencyKey: string;
73
+ }
74
+ export interface WaitForSkillUploadOptions extends RequestOptions {
75
+ /** Stop waiting at one of these states. Defaults to `awaiting_confirmation`, `done`, `failed` and `aborted`. */
76
+ until?: readonly SkillUploadState[];
77
+ /** Local wait limit; default 120 seconds. */
78
+ timeoutMs?: number;
79
+ /** Delay between reads; default 1 second. */
80
+ intervalMs?: number;
81
+ }
82
+ /** Organization Skills that Templates can reference by `skillId` and `version`. */
83
+ export declare class Skills {
84
+ #private;
85
+ constructor(http: HttpClient);
86
+ /** Published, loadable Organization Skills. */
87
+ list(options?: ListOptions): Promise<SkillPage>;
88
+ /** A Skill and its published versions, newest first. */
89
+ get(skillId: string, options?: ListOptions): Promise<SkillDetail>;
90
+ /** Upload a Skill ZIP for validation. It is not published until `publish`. */
91
+ upload(input: UploadSkillInput): Promise<SkillUpload>;
92
+ getUpload(uploadId: string, options?: RequestOptions): Promise<SkillUpload>;
93
+ /** Read the upload until it reaches a settled state. */
94
+ waitForUpload(uploadId: string, options?: WaitForSkillUploadOptions): Promise<SkillUpload>;
95
+ /** Cancel an upload that is not published. */
96
+ cancelUpload(uploadId: string, options?: RequestOptions): Promise<void>;
97
+ /**
98
+ * Publish a validated upload as the Skill's next version. Publication
99
+ * finishes asynchronously: wait for `done` to read the `version`.
100
+ */
101
+ publish(uploadId: string, options: PublishSkillOptions): Promise<SkillUpload>;
102
+ }
103
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"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"}
package/dist/skills.js ADDED
@@ -0,0 +1,98 @@
1
+ import { OutcomeUnknownError, TiDBLinkError } from "./errors.js";
2
+ import { HttpClient, paginationQuery, requireCreationKey, requireKnownKeys, requestOptions, sleep, } from "./http.js";
3
+ const SETTLED = [
4
+ "awaiting_confirmation",
5
+ "done",
6
+ "failed",
7
+ "aborted",
8
+ ];
9
+ const uploadPath = (id) => `/skills/uploads/${encodeURIComponent(id)}`;
10
+ const uploadReceipt = (result) => {
11
+ if (typeof result.data?.upload?.uploadId !== "string" ||
12
+ !result.data.upload.uploadId)
13
+ throw new OutcomeUnknownError("Skill upload returned no usable state; repeat it with the same idempotency key", { requestId: result.requestId });
14
+ return result.data.upload;
15
+ };
16
+ /** Organization Skills that Templates can reference by `skillId` and `version`. */
17
+ export class Skills {
18
+ #http;
19
+ constructor(http) {
20
+ this.#http = http;
21
+ }
22
+ /** Published, loadable Organization Skills. */
23
+ list(options) {
24
+ return this.#http.get(`/skills${paginationQuery(options)}`, options);
25
+ }
26
+ /** A Skill and its published versions, newest first. */
27
+ get(skillId, options) {
28
+ return this.#http.get(`/skills/${encodeURIComponent(skillId)}${paginationQuery(options)}`, options);
29
+ }
30
+ /** Upload a Skill ZIP for validation. It is not published until `publish`. */
31
+ async upload(input) {
32
+ requireKnownKeys(input, ["bytes", "idempotencyKey", "signal", "requestId"], "Skill upload");
33
+ if (!(input.bytes instanceof Uint8Array) || input.bytes.byteLength === 0)
34
+ throw new TypeError("Skill upload requires the ZIP bytes");
35
+ requireCreationKey(input.idempotencyKey);
36
+ const { response, requestId } = await this.#http.rawResponse("/skills/uploads", {
37
+ method: "POST",
38
+ body: Uint8Array.from(input.bytes),
39
+ headers: { "content-type": "application/octet-stream" },
40
+ idempotencyKey: input.idempotencyKey,
41
+ retry: "safe",
42
+ outcomeUnknown: true,
43
+ ...(input.signal ? { signal: input.signal } : {}),
44
+ ...(input.requestId ? { requestId: input.requestId } : {}),
45
+ });
46
+ let data;
47
+ try {
48
+ data = (await response.json());
49
+ }
50
+ catch (cause) {
51
+ throw new OutcomeUnknownError("Skill upload returned an unusable response; repeat it with the same idempotency key", { requestId, cause });
52
+ }
53
+ return uploadReceipt({ data, etag: undefined, requestId });
54
+ }
55
+ async getUpload(uploadId, options) {
56
+ const response = await this.#http.get(uploadPath(uploadId), requestOptions(options));
57
+ return response.upload;
58
+ }
59
+ /** Read the upload until it reaches a settled state. */
60
+ async waitForUpload(uploadId, options = {}) {
61
+ requireKnownKeys(options, ["until", "timeoutMs", "intervalMs", "signal", "requestId"], "Skill upload wait options");
62
+ const { until = SETTLED, timeoutMs = 120_000, intervalMs = 1_000 } = options;
63
+ for (const value of [timeoutMs, intervalMs])
64
+ if (!Number.isSafeInteger(value) || value < 0)
65
+ throw new TypeError("Wait durations must be non-negative integers");
66
+ const deadline = Date.now() + timeoutMs;
67
+ const request = {
68
+ ...(options.signal ? { signal: options.signal } : {}),
69
+ ...(options.requestId ? { requestId: options.requestId } : {}),
70
+ };
71
+ while (true) {
72
+ const upload = await this.getUpload(uploadId, request);
73
+ if (until.includes(upload.state))
74
+ return upload;
75
+ if (Date.now() + intervalMs > deadline)
76
+ throw new TiDBLinkError(`Skill upload is still ${upload.state}; read it again later`);
77
+ await sleep(intervalMs, options.signal);
78
+ }
79
+ }
80
+ /** Cancel an upload that is not published. */
81
+ async cancelUpload(uploadId, options) {
82
+ await this.#http.deleteResponse(uploadPath(uploadId), {
83
+ ...requestOptions(options),
84
+ outcomeUnknown: true,
85
+ });
86
+ }
87
+ /**
88
+ * Publish a validated upload as the Skill's next version. Publication
89
+ * finishes asynchronously: wait for `done` to read the `version`.
90
+ */
91
+ async publish(uploadId, options) {
92
+ requireKnownKeys(options, ["idempotencyKey", "signal", "requestId"], "Skill publication options");
93
+ requireCreationKey(options.idempotencyKey);
94
+ const { idempotencyKey, ...request } = options;
95
+ return uploadReceipt(await this.#http.postResponse(`${uploadPath(uploadId)}/publish`, undefined, { idempotencyKey, idempotent: true, outcomeUnknown: true, ...request }));
96
+ }
97
+ }
98
+ //# sourceMappingURL=skills.js.map