assistant-cloud 0.2.2 → 0.2.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 (87) hide show
  1. package/README.md +2 -2
  2. package/dist/AssistantCloud.d.ts +15 -17
  3. package/dist/AssistantCloud.d.ts.map +1 -1
  4. package/dist/AssistantCloud.js +7 -2
  5. package/dist/AssistantCloud.js.map +1 -1
  6. package/dist/AssistantCloudAPI.d.ts +69 -66
  7. package/dist/AssistantCloudAPI.d.ts.map +1 -1
  8. package/dist/AssistantCloudAPI.js.map +1 -1
  9. package/dist/AssistantCloudAuthStrategy.d.ts +23 -25
  10. package/dist/AssistantCloudAuthStrategy.d.ts.map +1 -1
  11. package/dist/AssistantCloudAuthTokens.d.ts +6 -7
  12. package/dist/AssistantCloudAuthTokens.d.ts.map +1 -1
  13. package/dist/AssistantCloudEvents.d.ts +32 -25
  14. package/dist/AssistantCloudEvents.d.ts.map +1 -1
  15. package/dist/AssistantCloudEvents.js +65 -16
  16. package/dist/AssistantCloudEvents.js.map +1 -1
  17. package/dist/AssistantCloudFiles.d.ts +25 -26
  18. package/dist/AssistantCloudFiles.d.ts.map +1 -1
  19. package/dist/AssistantCloudProjectThreadMessages.d.ts +10 -11
  20. package/dist/AssistantCloudProjectThreadMessages.d.ts.map +1 -1
  21. package/dist/AssistantCloudProjectThreads.d.ts +11 -12
  22. package/dist/AssistantCloudProjectThreads.d.ts.map +1 -1
  23. package/dist/AssistantCloudProjects.d.ts +3 -5
  24. package/dist/AssistantCloudProjects.d.ts.map +1 -1
  25. package/dist/AssistantCloudRuns.d.ts +65 -53
  26. package/dist/AssistantCloudRuns.d.ts.map +1 -1
  27. package/dist/AssistantCloudRuns.js +9 -4
  28. package/dist/AssistantCloudRuns.js.map +1 -1
  29. package/dist/AssistantCloudScores.d.ts +17 -19
  30. package/dist/AssistantCloudScores.d.ts.map +1 -1
  31. package/dist/AssistantCloudThreadMessages.d.ts +33 -31
  32. package/dist/AssistantCloudThreadMessages.d.ts.map +1 -1
  33. package/dist/AssistantCloudThreadMessages.js +9 -2
  34. package/dist/AssistantCloudThreadMessages.js.map +1 -1
  35. package/dist/AssistantCloudThreads.d.ts +37 -38
  36. package/dist/AssistantCloudThreads.d.ts.map +1 -1
  37. package/dist/CloudEngagementReporter.d.ts +53 -54
  38. package/dist/CloudEngagementReporter.d.ts.map +1 -1
  39. package/dist/CloudEngagementReporter.js +4 -1
  40. package/dist/CloudEngagementReporter.js.map +1 -1
  41. package/dist/CloudMessagePersistence.d.ts +55 -56
  42. package/dist/CloudMessagePersistence.d.ts.map +1 -1
  43. package/dist/CloudMessagePersistence.js +3 -0
  44. package/dist/CloudMessagePersistence.js.map +1 -1
  45. package/dist/CloudRunReporter.d.ts +6 -8
  46. package/dist/CloudRunReporter.d.ts.map +1 -1
  47. package/dist/FormattedCloudPersistence.d.ts +34 -36
  48. package/dist/FormattedCloudPersistence.d.ts.map +1 -1
  49. package/dist/ai-sdk/index.d.ts +10 -12
  50. package/dist/ai-sdk/index.d.ts.map +1 -1
  51. package/dist/cloudResponse.d.ts +2 -4
  52. package/dist/cloudResponse.d.ts.map +1 -1
  53. package/dist/generateThreadTitle.d.ts +8 -10
  54. package/dist/generateThreadTitle.d.ts.map +1 -1
  55. package/dist/index.d.ts +18 -17
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/instrumentMcpSampling.d.ts +30 -32
  58. package/dist/instrumentMcpSampling.d.ts.map +1 -1
  59. package/dist/runTelemetry.d.ts +86 -78
  60. package/dist/runTelemetry.d.ts.map +1 -1
  61. package/dist/runTelemetry.js +57 -15
  62. package/dist/runTelemetry.js.map +1 -1
  63. package/dist/telemetry/index.d.ts +13 -15
  64. package/dist/telemetry/index.d.ts.map +1 -1
  65. package/dist/version.d.ts +0 -2
  66. package/dist/version.d.ts.map +1 -1
  67. package/dist/version.js +1 -1
  68. package/package.json +3 -3
  69. package/src/AssistantCloud.ts +17 -2
  70. package/src/AssistantCloudAPI.ts +4 -0
  71. package/src/AssistantCloudEvents.test.ts +116 -0
  72. package/src/AssistantCloudEvents.ts +81 -20
  73. package/src/AssistantCloudRuns.ts +35 -5
  74. package/src/AssistantCloudThreadMessages.ts +21 -1
  75. package/src/BackendTranscriptCopy.test.ts +79 -0
  76. package/src/CloudEngagementReporter.ts +9 -3
  77. package/src/CloudMessagePersistence.ts +4 -0
  78. package/src/ai-sdk/index.test.ts +2 -2
  79. package/src/runTelemetry.test.ts +226 -2
  80. package/src/runTelemetry.ts +121 -17
  81. package/src/tests/AssistantCloud.test.ts +22 -0
  82. package/src/tests/AssistantCloudRuns.test.ts +28 -0
  83. package/src/tests/CloudEngagementReporter.test.ts +45 -0
  84. package/src/tests/CloudRunReporter.test.ts +14 -2
  85. package/dist/tests/setup.d.ts +0 -1
  86. package/dist/tests/setup.js +0 -7
  87. package/dist/tests/setup.js.map +0 -1
package/README.md CHANGED
@@ -9,7 +9,7 @@ Server- and client-side SDK for [Assistant Cloud](https://cloud.assistant-ui.com
9
9
  ## Installation
10
10
 
11
11
  ```bash
12
- npm install @assistant-ui/react @assistant-ui/ai-sdk assistant-cloud
12
+ npm install @assistant-ui/react @assistant-ui/ai-sdk ai assistant-cloud
13
13
  ```
14
14
 
15
15
  ## Usage
@@ -100,7 +100,7 @@ import { withAssistantCloudTraceMetadata } from "assistant-cloud/telemetry";
100
100
  export async function POST(request: Request) {
101
101
  const { messages } = await request.json();
102
102
  const result = streamText({
103
- model: openai("gpt-5.6-luna"),
103
+ model: openai("gpt-6-luna"),
104
104
  messages: await convertToModelMessages(messages),
105
105
  telemetry: { integrations: [new OpenTelemetry()] },
106
106
  });
@@ -1,25 +1,23 @@
1
- import { AssistantCloudRuns } from "./AssistantCloudRuns.js";
2
- import { AssistantCloudConfig, AssistantCloudTelemetryConfig, SdkIdentity } from "./AssistantCloudAPI.js";
1
+ import { type AssistantCloudConfig, type SdkIdentity, type AssistantCloudTelemetryConfig } from "./AssistantCloudAPI.js";
3
2
  import { AssistantCloudAuthTokens } from "./AssistantCloudAuthTokens.js";
4
- import { AssistantCloudThreads } from "./AssistantCloudThreads.js";
5
3
  import { AssistantCloudProjects } from "./AssistantCloudProjects.js";
4
+ import { AssistantCloudRuns } from "./AssistantCloudRuns.js";
5
+ import { AssistantCloudThreads } from "./AssistantCloudThreads.js";
6
6
  import { AssistantCloudFiles } from "./AssistantCloudFiles.js";
7
7
  import { AssistantCloudEvents } from "./AssistantCloudEvents.js";
8
8
  import { AssistantCloudScores } from "./AssistantCloudScores.js";
9
- //#region src/AssistantCloud.d.ts
10
9
  export declare class AssistantCloud {
11
- readonly threads: AssistantCloudThreads;
12
- readonly projects: AssistantCloudProjects;
13
- readonly auth: {
14
- tokens: AssistantCloudAuthTokens;
15
- };
16
- readonly runs: AssistantCloudRuns;
17
- readonly files: AssistantCloudFiles;
18
- readonly events: AssistantCloudEvents;
19
- readonly scores: AssistantCloudScores;
20
- readonly telemetry: AssistantCloudTelemetryConfig;
21
- readonly registerSdk: (sdk: SdkIdentity) => void;
22
- constructor(config: AssistantCloudConfig);
10
+ readonly threads: AssistantCloudThreads;
11
+ readonly projects: AssistantCloudProjects;
12
+ readonly auth: {
13
+ tokens: AssistantCloudAuthTokens;
14
+ };
15
+ readonly runs: AssistantCloudRuns;
16
+ readonly files: AssistantCloudFiles;
17
+ readonly events: AssistantCloudEvents;
18
+ readonly scores: AssistantCloudScores;
19
+ readonly telemetry: AssistantCloudTelemetryConfig;
20
+ readonly registerSdk: (sdk: SdkIdentity) => void;
21
+ constructor(config: AssistantCloudConfig);
23
22
  }
24
- //#endregion
25
23
  //# sourceMappingURL=AssistantCloud.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloud.d.ts","names":[],"sources":["../src/AssistantCloud.ts"],"mappings":";;;;;;;;;qBAca;WACK,SAAO;WACP,UAAQ;WACR;;;WACA,MAAI;WACJ,OAAK;WACL,QAAM;WACN,QAAM;WACN,WAAW;WACX,cAAc,KAAK;EAEvB,YAAA,QAAQ"}
1
+ {"version":3,"file":"AssistantCloud.d.ts","sourceRoot":"","sources":["../src/AssistantCloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,6BAA6B,EACnC,+BAA4B;AAC7B,OAAO,EAAE,wBAAwB,EAAE,sCAAmC;AACtE,OAAO,EAAE,sBAAsB,EAAE,oCAAiC;AAClE,OAAO,EAAE,kBAAkB,EAAE,gCAA6B;AAC1D,OAAO,EAAE,qBAAqB,EAAE,mCAAgC;AAChE,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EACL,oBAAoB,EAErB,kCAA+B;AAChC,OAAO,EAAE,oBAAoB,EAAE,kCAA+B;AAE9D,qBAAa,cAAc;IACzB,SAAgB,OAAO,wBAAC;IACxB,SAAgB,QAAQ,yBAAC;IACzB,SAAgB,IAAI;;MAAC;IACrB,SAAgB,IAAI,qBAAC;IACrB,SAAgB,KAAK,sBAAC;IACtB,SAAgB,MAAM,uBAAC;IACvB,SAAgB,MAAM,uBAAC;IACvB,SAAgB,SAAS,EAAE,6BAA6B,CAAC;IACzD,SAAgB,WAAW,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;gBAE5C,MAAM,EAAE,oBAAoB;CAuCzC"}
@@ -4,7 +4,7 @@ import { AssistantCloudThreads } from "./AssistantCloudThreads.js";
4
4
  import { AssistantCloudProjects } from "./AssistantCloudProjects.js";
5
5
  import { AssistantCloudRuns } from "./AssistantCloudRuns.js";
6
6
  import { AssistantCloudFiles } from "./AssistantCloudFiles.js";
7
- import { AssistantCloudEvents } from "./AssistantCloudEvents.js";
7
+ import { AssistantCloudEvents, clearPendingAssistantCloudEvents } from "./AssistantCloudEvents.js";
8
8
  import { AssistantCloudScores } from "./AssistantCloudScores.js";
9
9
  //#region src/AssistantCloud.ts
10
10
  var AssistantCloud = class {
@@ -21,10 +21,15 @@ var AssistantCloud = class {
21
21
  const api = new AssistantCloudAPI(config);
22
22
  this.registerSdk = api.registerSdk;
23
23
  const t = config.telemetry;
24
- this.telemetry = t === false ? { enabled: false } : t === true || t === void 0 ? { enabled: true } : {
24
+ const telemetry = t === false ? { enabled: false } : t === true || t === void 0 ? { enabled: true } : {
25
25
  ...t,
26
26
  enabled: t.enabled !== false
27
27
  };
28
+ this.telemetry = new Proxy(telemetry, { set: (target, property, value) => {
29
+ const updated = Reflect.set(target, property, value);
30
+ if ((property === "enabled" || property === "events") && (target.enabled === false || target.events === false)) clearPendingAssistantCloudEvents(this.events);
31
+ return updated;
32
+ } });
28
33
  this.threads = new AssistantCloudThreads(api);
29
34
  this.projects = new AssistantCloudProjects(api);
30
35
  this.auth = { tokens: new AssistantCloudAuthTokens(api) };
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloud.js","names":[],"sources":["../src/AssistantCloud.ts"],"sourcesContent":["import {\n AssistantCloudAPI,\n type AssistantCloudConfig,\n type SdkIdentity,\n type AssistantCloudTelemetryConfig,\n} from \"./AssistantCloudAPI\";\nimport { AssistantCloudAuthTokens } from \"./AssistantCloudAuthTokens\";\nimport { AssistantCloudProjects } from \"./AssistantCloudProjects\";\nimport { AssistantCloudRuns } from \"./AssistantCloudRuns\";\nimport { AssistantCloudThreads } from \"./AssistantCloudThreads\";\nimport { AssistantCloudFiles } from \"./AssistantCloudFiles\";\nimport { AssistantCloudEvents } from \"./AssistantCloudEvents\";\nimport { AssistantCloudScores } from \"./AssistantCloudScores\";\n\nexport class AssistantCloud {\n public readonly threads;\n public readonly projects;\n public readonly auth;\n public readonly runs;\n public readonly files;\n public readonly events;\n public readonly scores;\n public readonly telemetry: AssistantCloudTelemetryConfig;\n public readonly registerSdk: (sdk: SdkIdentity) => void;\n\n constructor(config: AssistantCloudConfig) {\n const api = new AssistantCloudAPI(config);\n this.registerSdk = api.registerSdk;\n const t = config.telemetry;\n this.telemetry =\n t === false\n ? { enabled: false }\n : t === true || t === undefined\n ? { enabled: true }\n : {\n ...t,\n enabled: t.enabled !== false,\n };\n\n this.threads = new AssistantCloudThreads(api);\n this.projects = new AssistantCloudProjects(api);\n this.auth = {\n tokens: new AssistantCloudAuthTokens(api),\n };\n this.runs = new AssistantCloudRuns(api);\n this.files = new AssistantCloudFiles(api);\n this.events = new AssistantCloudEvents(\n api,\n () => this.telemetry.enabled !== false && this.telemetry.events !== false,\n );\n this.scores = new AssistantCloudScores(api);\n }\n}\n"],"mappings":";;;;;;;;;AAcA,IAAa,iBAAb,MAA4B;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,QAA8B;EACxC,MAAM,MAAM,IAAI,kBAAkB,MAAM;EACxC,KAAK,cAAc,IAAI;EACvB,MAAM,IAAI,OAAO;EACjB,KAAK,YACH,MAAM,QACF,EAAE,SAAS,MAAM,IACjB,MAAM,QAAQ,MAAM,KAAA,IAClB,EAAE,SAAS,KAAK,IAChB;GACE,GAAG;GACH,SAAS,EAAE,YAAY;EACzB;EAER,KAAK,UAAU,IAAI,sBAAsB,GAAG;EAC5C,KAAK,WAAW,IAAI,uBAAuB,GAAG;EAC9C,KAAK,OAAO,EACV,QAAQ,IAAI,yBAAyB,GAAG,EAC1C;EACA,KAAK,OAAO,IAAI,mBAAmB,GAAG;EACtC,KAAK,QAAQ,IAAI,oBAAoB,GAAG;EACxC,KAAK,SAAS,IAAI,qBAChB,WACM,KAAK,UAAU,YAAY,SAAS,KAAK,UAAU,WAAW,KACtE;EACA,KAAK,SAAS,IAAI,qBAAqB,GAAG;CAC5C;AACF"}
1
+ {"version":3,"file":"AssistantCloud.js","names":[],"sources":["../src/AssistantCloud.ts"],"sourcesContent":["import {\n AssistantCloudAPI,\n type AssistantCloudConfig,\n type SdkIdentity,\n type AssistantCloudTelemetryConfig,\n} from \"./AssistantCloudAPI\";\nimport { AssistantCloudAuthTokens } from \"./AssistantCloudAuthTokens\";\nimport { AssistantCloudProjects } from \"./AssistantCloudProjects\";\nimport { AssistantCloudRuns } from \"./AssistantCloudRuns\";\nimport { AssistantCloudThreads } from \"./AssistantCloudThreads\";\nimport { AssistantCloudFiles } from \"./AssistantCloudFiles\";\nimport {\n AssistantCloudEvents,\n clearPendingAssistantCloudEvents,\n} from \"./AssistantCloudEvents\";\nimport { AssistantCloudScores } from \"./AssistantCloudScores\";\n\nexport class AssistantCloud {\n public readonly threads;\n public readonly projects;\n public readonly auth;\n public readonly runs;\n public readonly files;\n public readonly events;\n public readonly scores;\n public readonly telemetry: AssistantCloudTelemetryConfig;\n public readonly registerSdk: (sdk: SdkIdentity) => void;\n\n constructor(config: AssistantCloudConfig) {\n const api = new AssistantCloudAPI(config);\n this.registerSdk = api.registerSdk;\n const t = config.telemetry;\n const telemetry =\n t === false\n ? { enabled: false }\n : t === true || t === undefined\n ? { enabled: true }\n : {\n ...t,\n enabled: t.enabled !== false,\n };\n this.telemetry = new Proxy(telemetry, {\n set: (target, property, value) => {\n const updated = Reflect.set(target, property, value);\n if (\n (property === \"enabled\" || property === \"events\") &&\n (target.enabled === false || target.events === false)\n ) {\n clearPendingAssistantCloudEvents(this.events);\n }\n return updated;\n },\n });\n\n this.threads = new AssistantCloudThreads(api);\n this.projects = new AssistantCloudProjects(api);\n this.auth = {\n tokens: new AssistantCloudAuthTokens(api),\n };\n this.runs = new AssistantCloudRuns(api);\n this.files = new AssistantCloudFiles(api);\n this.events = new AssistantCloudEvents(\n api,\n () => this.telemetry.enabled !== false && this.telemetry.events !== false,\n );\n this.scores = new AssistantCloudScores(api);\n }\n}\n"],"mappings":";;;;;;;;;AAiBA,IAAa,iBAAb,MAA4B;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA,YAAY,QAA8B;EACxC,MAAM,MAAM,IAAI,kBAAkB,MAAM;EACxC,KAAK,cAAc,IAAI;EACvB,MAAM,IAAI,OAAO;EACjB,MAAM,YACJ,MAAM,QACF,EAAE,SAAS,MAAM,IACjB,MAAM,QAAQ,MAAM,KAAA,IAClB,EAAE,SAAS,KAAK,IAChB;GACE,GAAG;GACH,SAAS,EAAE,YAAY;EACzB;EACR,KAAK,YAAY,IAAI,MAAM,WAAW,EACpC,MAAM,QAAQ,UAAU,UAAU;GAChC,MAAM,UAAU,QAAQ,IAAI,QAAQ,UAAU,KAAK;GACnD,KACG,aAAa,aAAa,aAAa,cACvC,OAAO,YAAY,SAAS,OAAO,WAAW,QAE/C,iCAAiC,KAAK,MAAM;GAE9C,OAAO;EACT,EACF,CAAC;EAED,KAAK,UAAU,IAAI,sBAAsB,GAAG;EAC5C,KAAK,WAAW,IAAI,uBAAuB,GAAG;EAC9C,KAAK,OAAO,EACV,QAAQ,IAAI,yBAAyB,GAAG,EAC1C;EACA,KAAK,OAAO,IAAI,mBAAmB,GAAG;EACtC,KAAK,QAAQ,IAAI,oBAAoB,GAAG;EACxC,KAAK,SAAS,IAAI,qBAChB,WACM,KAAK,UAAU,YAAY,SAAS,KAAK,UAAU,WAAW,KACtE;EACA,KAAK,SAAS,IAAI,qBAAqB,GAAG;CAC5C;AACF"}
@@ -1,82 +1,85 @@
1
- import { AssistantCloudAuthStrategy } from "./AssistantCloudAuthStrategy.js";
2
- import { AssistantCloudRunReport } from "./AssistantCloudRuns.js";
3
- //#region src/AssistantCloudAPI.d.ts
1
+ import { type AssistantCloudAuthStrategy } from "./AssistantCloudAuthStrategy.js";
2
+ import type { AssistantCloudRunReport } from "./AssistantCloudRuns.js";
4
3
  export type SdkIdentity = {
5
- name: string;
6
- version: string;
4
+ name: string;
5
+ version: string;
7
6
  };
8
7
  export type AssistantCloudTelemetryConfig = {
9
- /**
10
- * Enables Assistant Cloud telemetry. Defaults to `true`. Set to `false` to
11
- * disable both run reports and engagement events.
12
- */
13
- enabled?: boolean;
14
- /**
15
- * Enables Assistant Cloud engagement events. Defaults to `true` when
16
- * telemetry is enabled. Set to `false` to keep run reports while disabling
17
- * engagement events.
18
- */
19
- events?: boolean;
20
- release?: string;
21
- environment?: string;
22
- tags?: string[];
23
- /**
24
- * Called before each telemetry report is sent.
25
- * Return a modified report to enrich it (e.g. add `model_id`),
26
- * or return `null` to skip the report.
27
- */
28
- beforeReport?: (report: AssistantCloudRunReport) => AssistantCloudRunReport | null;
8
+ /**
9
+ * Enables Assistant Cloud telemetry. Defaults to `true`. Set to `false` to
10
+ * disable both run reports and engagement events.
11
+ */
12
+ enabled?: boolean;
13
+ /**
14
+ * Enables Assistant Cloud engagement events. Defaults to `true` when
15
+ * telemetry is enabled. Set to `false` to keep run reports while disabling
16
+ * engagement events.
17
+ */
18
+ events?: boolean;
19
+ /**
20
+ * Stores the messages of runtimes whose backend keeps the transcript (LangGraph, LangChain, Google ADK, custom external stores), so the dashboard can show them. Defaults to `true` when telemetry is enabled. Set to `false` to keep run reports and events without storing those messages.
21
+ */
22
+ messages?: boolean;
23
+ release?: string;
24
+ environment?: string;
25
+ tags?: string[];
26
+ /**
27
+ * Called before each telemetry report is sent.
28
+ * Return a modified report to enrich it (e.g. add `model_id`),
29
+ * or return `null` to skip the report.
30
+ */
31
+ beforeReport?: (report: AssistantCloudRunReport) => AssistantCloudRunReport | null;
29
32
  };
30
33
  export type AssistantCloudConfig = ({
31
- baseUrl: string;
32
- authToken: () => Promise<string | null>;
34
+ baseUrl: string;
35
+ authToken: () => Promise<string | null>;
33
36
  } | {
34
- baseUrl?: string;
35
- apiKey: string;
36
- userId: string;
37
- workspaceId: string;
37
+ baseUrl?: string;
38
+ apiKey: string;
39
+ userId: string;
40
+ workspaceId: string;
38
41
  } | {
39
- baseUrl: string;
40
- anonymous: true;
42
+ baseUrl: string;
43
+ anonymous: true;
41
44
  }) & {
42
- /**
43
- * Client-side run telemetry reporting. Default: `true`.
44
- *
45
- * When enabled, the SDK automatically reports run metadata (status, step
46
- * count, tool calls, and token usage) to Assistant Cloud after each
47
- * assistant message is saved. Reports can also include assistant output,
48
- * tool arguments and results, errors, and metadata, which may contain
49
- * sensitive content. Use `beforeReport` to redact or drop reports, or
50
- * `telemetry: false` to disable reporting.
51
- *
52
- * - `true` / `undefined` — enabled with defaults
53
- * - `false` — disabled
54
- * - `{ beforeReport }` — enabled with a hook to enrich or filter reports
55
- */
56
- telemetry?: boolean | AssistantCloudTelemetryConfig;
45
+ /**
46
+ * Client-side run telemetry reporting. Default: `true`.
47
+ *
48
+ * When enabled, the SDK automatically reports run metadata (status, step
49
+ * count, tool calls, and token usage) to Assistant Cloud after each
50
+ * assistant message is saved. Reports can also include assistant output,
51
+ * tool arguments and results, errors, and metadata, which may contain
52
+ * sensitive content. Use `beforeReport` to redact or drop reports, or
53
+ * `telemetry: false` to disable reporting.
54
+ *
55
+ * - `true` / `undefined` — enabled with defaults
56
+ * - `false` — disabled
57
+ * - `{ beforeReport }` — enabled with a hook to enrich or filter reports
58
+ */
59
+ telemetry?: boolean | AssistantCloudTelemetryConfig;
57
60
  };
58
61
  export declare class CloudAPIError extends Error {
59
- readonly status: number;
60
- readonly code?: string;
61
- readonly details?: Record<string, unknown>;
62
- constructor(message: string, status: number, code?: string, details?: Record<string, unknown>);
62
+ readonly status: number;
63
+ readonly code?: string;
64
+ readonly details?: Record<string, unknown>;
65
+ constructor(message: string, status: number, code?: string, details?: Record<string, unknown>);
63
66
  }
64
67
  type MakeRequestOptions = {
65
- method?: "POST" | "PUT" | "DELETE" | undefined;
66
- headers?: Record<string, string> | undefined;
67
- query?: Record<string, string | number | boolean> | undefined;
68
- body?: object | undefined;
69
- keepalive?: boolean | undefined;
68
+ method?: "POST" | "PUT" | "DELETE" | undefined;
69
+ headers?: Record<string, string> | undefined;
70
+ query?: Record<string, string | number | boolean> | undefined;
71
+ body?: object | undefined;
72
+ keepalive?: boolean | undefined;
70
73
  };
71
74
  export declare class AssistantCloudAPI {
72
- _auth: AssistantCloudAuthStrategy;
73
- _baseUrl: string;
74
- readonly registerSdk: (sdk: SdkIdentity) => void;
75
- readonly sdkHeader: () => string;
76
- constructor(config: AssistantCloudConfig);
77
- initializeAuth(): Promise<boolean>;
78
- makeRawRequest(endpoint: string, options?: MakeRequestOptions): Promise<Response>;
79
- makeRequest(endpoint: string, options?: MakeRequestOptions): Promise<any>;
75
+ _auth: AssistantCloudAuthStrategy;
76
+ _baseUrl: string;
77
+ readonly registerSdk: (sdk: SdkIdentity) => void;
78
+ readonly sdkHeader: () => string;
79
+ constructor(config: AssistantCloudConfig);
80
+ initializeAuth(): Promise<boolean>;
81
+ makeRawRequest(endpoint: string, options?: MakeRequestOptions): Promise<Response>;
82
+ makeRequest(endpoint: string, options?: MakeRequestOptions): Promise<any>;
80
83
  }
81
- //#endregion
84
+ export {};
82
85
  //# sourceMappingURL=AssistantCloudAPI.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudAPI.d.ts","names":[],"sources":["../src/AssistantCloudAPI.ts"],"mappings":";;;YAUY;EACV;EACA;;YAGU;;;;;EAKV;;;;;;EAMA;EACA;EACA;EACA;;;;;;EAMA,gBACE,QAAQ,4BACL;;YAGK;EAEN;EACA,iBAAiB;;EAGjB;EACA;EACA;EACA;;EAGA;EACA;;;;;;;;;;;;;;;;EAiBJ,sBAAsB;;qBAGX,sBAAsB;WACjB;WACA;WACA,UAAU;EAGxB,YAAA,iBACA,gBACA,eACA,UAAU;;KAUT;EACH;EACA,UAAU;EACV,QAAQ;EACR;EACA;;qBAKW;EACJ,OAAO;EACP;WACS,cAAc,KAAK;WACnB;EAEJ,YAAA,QAAQ;EAuCP,kBAAc;EAId,eACX,kBACA,UAAS,qBAAuB,QAAA;EAkErB,YAAY,kBAAkB,UAAS,qBAAuB"}
1
+ {"version":3,"file":"AssistantCloudAPI.d.ts","sourceRoot":"","sources":["../src/AssistantCloudAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,0BAA0B,EAKhC,wCAAqC;AACtC,OAAO,KAAK,EAAE,uBAAuB,EAAE,gCAA6B;AAGpE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CACb,MAAM,EAAE,uBAAuB,KAC5B,uBAAuB,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAC/B;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACzC,GACD;IACE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB,CACJ,GAAG;IACF;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,6BAA6B,CAAC;CACrD,CAAC;AAEF,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAGhD,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAQpC;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,CAAC;IAC9D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC,CAAC;AAIF,qBAAa,iBAAiB;IACrB,KAAK,EAAE,0BAA0B,CAAC;IAClC,QAAQ,SAAC;IAChB,SAAgB,WAAW,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;IACxD,SAAgB,SAAS,EAAE,MAAM,MAAM,CAAC;gBAE5B,MAAM,EAAE,oBAAoB;IAuC3B,cAAc;IAId,cAAc,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB;IAkErB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;CAa5E"}
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudAPI.js","names":[],"sources":["../src/AssistantCloudAPI.ts"],"sourcesContent":["import {\n type AssistantCloudAuthStrategy,\n AssistantCloudJWTAuthStrategy,\n AssistantCloudAPIKeyAuthStrategy,\n AssistantCloudAnonymousAuthStrategy,\n normalizeBaseUrl,\n} from \"./AssistantCloudAuthStrategy\";\nimport type { AssistantCloudRunReport } from \"./AssistantCloudRuns\";\nimport { ASSISTANT_CLOUD_VERSION } from \"./version\";\n\nexport type SdkIdentity = {\n name: string;\n version: string;\n};\n\nexport type AssistantCloudTelemetryConfig = {\n /**\n * Enables Assistant Cloud telemetry. Defaults to `true`. Set to `false` to\n * disable both run reports and engagement events.\n */\n enabled?: boolean;\n /**\n * Enables Assistant Cloud engagement events. Defaults to `true` when\n * telemetry is enabled. Set to `false` to keep run reports while disabling\n * engagement events.\n */\n events?: boolean;\n release?: string;\n environment?: string;\n tags?: string[];\n /**\n * Called before each telemetry report is sent.\n * Return a modified report to enrich it (e.g. add `model_id`),\n * or return `null` to skip the report.\n */\n beforeReport?: (\n report: AssistantCloudRunReport,\n ) => AssistantCloudRunReport | null;\n};\n\nexport type AssistantCloudConfig = (\n | {\n baseUrl: string;\n authToken: () => Promise<string | null>;\n }\n | {\n baseUrl?: string;\n apiKey: string;\n userId: string;\n workspaceId: string;\n }\n | {\n baseUrl: string;\n anonymous: true;\n }\n) & {\n /**\n * Client-side run telemetry reporting. Default: `true`.\n *\n * When enabled, the SDK automatically reports run metadata (status, step\n * count, tool calls, and token usage) to Assistant Cloud after each\n * assistant message is saved. Reports can also include assistant output,\n * tool arguments and results, errors, and metadata, which may contain\n * sensitive content. Use `beforeReport` to redact or drop reports, or\n * `telemetry: false` to disable reporting.\n *\n * - `true` / `undefined` — enabled with defaults\n * - `false` — disabled\n * - `{ beforeReport }` — enabled with a hook to enrich or filter reports\n */\n telemetry?: boolean | AssistantCloudTelemetryConfig;\n};\n\nexport class CloudAPIError extends Error {\n public readonly status: number;\n public readonly code?: string;\n public readonly details?: Record<string, unknown>;\n\n constructor(\n message: string,\n status: number,\n code?: string,\n details?: Record<string, unknown>,\n ) {\n super(message);\n this.status = status;\n if (code !== undefined) this.code = code;\n if (details !== undefined) this.details = details;\n this.name = \"CloudAPIError\";\n }\n}\n\ntype MakeRequestOptions = {\n method?: \"POST\" | \"PUT\" | \"DELETE\" | undefined;\n headers?: Record<string, string> | undefined;\n query?: Record<string, string | number | boolean> | undefined;\n body?: object | undefined;\n keepalive?: boolean | undefined;\n};\n\nconst HEADER_TOKEN = /^[\\x21-\\x7e]+$/;\n\nexport class AssistantCloudAPI {\n public _auth: AssistantCloudAuthStrategy;\n public _baseUrl;\n public readonly registerSdk: (sdk: SdkIdentity) => void;\n public readonly sdkHeader: () => string;\n\n constructor(config: AssistantCloudConfig) {\n const sdks = new Map<string, SdkIdentity>();\n this.registerSdk = (sdk) => {\n const name = sdk.name.trim();\n const version = sdk.version.trim();\n if (!HEADER_TOKEN.test(name) || !HEADER_TOKEN.test(version)) return;\n sdks.set(`${name}/${version}`, { name, version });\n };\n this.sdkHeader = () =>\n [\n `assistant-cloud/${ASSISTANT_CLOUD_VERSION}`,\n ...Array.from(\n sdks.values(),\n ({ name, version }) => `${name}/${version}`,\n ),\n ].join(\" \");\n\n if (\"authToken\" in config) {\n this._baseUrl = normalizeBaseUrl(config.baseUrl);\n this._auth = new AssistantCloudJWTAuthStrategy(config.authToken);\n } else if (\"apiKey\" in config) {\n this._baseUrl = normalizeBaseUrl(\n config.baseUrl ?? \"https://backend.assistant-api.com\",\n );\n this._auth = new AssistantCloudAPIKeyAuthStrategy(\n config.apiKey,\n config.userId,\n config.workspaceId,\n );\n } else if (\"anonymous\" in config) {\n this._baseUrl = normalizeBaseUrl(config.baseUrl);\n this._auth = new AssistantCloudAnonymousAuthStrategy(this._baseUrl);\n } else {\n throw new Error(\n \"Invalid configuration: Must provide authToken, apiKey, or anonymous configuration\",\n );\n }\n }\n\n public async initializeAuth() {\n return !!(await this._auth.getAuthHeaders());\n }\n\n public async makeRawRequest(\n endpoint: string,\n options: MakeRequestOptions = {},\n ) {\n const authHeaders = await this._auth.getAuthHeaders();\n if (!authHeaders) throw new Error(\"Authorization failed\");\n\n const headers = {\n ...authHeaders,\n ...options.headers,\n \"Content-Type\": \"application/json\",\n \"Aui-Sdk\": this.sdkHeader(),\n };\n\n const queryParams = new URLSearchParams();\n if (options.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value === false) continue;\n if (value === true) {\n queryParams.set(key, \"true\");\n } else {\n queryParams.set(key, value.toString());\n }\n }\n }\n\n const url = new URL(`${this._baseUrl}/v1${endpoint}`);\n url.search = queryParams.toString();\n\n const response = await fetch(url, {\n method: options.method ?? \"GET\",\n headers,\n body: options.body ? JSON.stringify(options.body) : null,\n ...(options.keepalive ? { keepalive: true } : {}),\n });\n\n this._auth.readAuthHeaders(response.headers);\n\n if (!response.ok) {\n const text = await response.text();\n let message: string | undefined;\n let code: string | undefined;\n let details: Record<string, unknown> | undefined;\n try {\n const body = JSON.parse(text) as unknown;\n if (typeof body === \"object\" && body !== null && !Array.isArray(body)) {\n const record = body as Record<string, unknown>;\n if (typeof record.message === \"string\" && record.message.length > 0) {\n message = record.message;\n }\n if (typeof record.error === \"string\") {\n code = record.error;\n details = { ...record };\n delete details.error;\n }\n }\n } catch {}\n throw new CloudAPIError(\n message ?? `Request failed with status ${response.status}, ${text}`,\n response.status,\n code,\n details,\n );\n }\n\n return response;\n }\n\n public async makeRequest(endpoint: string, options: MakeRequestOptions = {}) {\n const response = await this.makeRawRequest(endpoint, options);\n if (\n response.status === 204 ||\n response.headers.get(\"content-length\") === \"0\"\n )\n return undefined;\n\n const text = await response.text();\n if (text.trim() === \"\") return undefined;\n\n return JSON.parse(text);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"AssistantCloudAPI.js","names":[],"sources":["../src/AssistantCloudAPI.ts"],"sourcesContent":["import {\n type AssistantCloudAuthStrategy,\n AssistantCloudJWTAuthStrategy,\n AssistantCloudAPIKeyAuthStrategy,\n AssistantCloudAnonymousAuthStrategy,\n normalizeBaseUrl,\n} from \"./AssistantCloudAuthStrategy\";\nimport type { AssistantCloudRunReport } from \"./AssistantCloudRuns\";\nimport { ASSISTANT_CLOUD_VERSION } from \"./version\";\n\nexport type SdkIdentity = {\n name: string;\n version: string;\n};\n\nexport type AssistantCloudTelemetryConfig = {\n /**\n * Enables Assistant Cloud telemetry. Defaults to `true`. Set to `false` to\n * disable both run reports and engagement events.\n */\n enabled?: boolean;\n /**\n * Enables Assistant Cloud engagement events. Defaults to `true` when\n * telemetry is enabled. Set to `false` to keep run reports while disabling\n * engagement events.\n */\n events?: boolean;\n /**\n * Stores the messages of runtimes whose backend keeps the transcript (LangGraph, LangChain, Google ADK, custom external stores), so the dashboard can show them. Defaults to `true` when telemetry is enabled. Set to `false` to keep run reports and events without storing those messages.\n */\n messages?: boolean;\n release?: string;\n environment?: string;\n tags?: string[];\n /**\n * Called before each telemetry report is sent.\n * Return a modified report to enrich it (e.g. add `model_id`),\n * or return `null` to skip the report.\n */\n beforeReport?: (\n report: AssistantCloudRunReport,\n ) => AssistantCloudRunReport | null;\n};\n\nexport type AssistantCloudConfig = (\n | {\n baseUrl: string;\n authToken: () => Promise<string | null>;\n }\n | {\n baseUrl?: string;\n apiKey: string;\n userId: string;\n workspaceId: string;\n }\n | {\n baseUrl: string;\n anonymous: true;\n }\n) & {\n /**\n * Client-side run telemetry reporting. Default: `true`.\n *\n * When enabled, the SDK automatically reports run metadata (status, step\n * count, tool calls, and token usage) to Assistant Cloud after each\n * assistant message is saved. Reports can also include assistant output,\n * tool arguments and results, errors, and metadata, which may contain\n * sensitive content. Use `beforeReport` to redact or drop reports, or\n * `telemetry: false` to disable reporting.\n *\n * - `true` / `undefined` — enabled with defaults\n * - `false` — disabled\n * - `{ beforeReport }` — enabled with a hook to enrich or filter reports\n */\n telemetry?: boolean | AssistantCloudTelemetryConfig;\n};\n\nexport class CloudAPIError extends Error {\n public readonly status: number;\n public readonly code?: string;\n public readonly details?: Record<string, unknown>;\n\n constructor(\n message: string,\n status: number,\n code?: string,\n details?: Record<string, unknown>,\n ) {\n super(message);\n this.status = status;\n if (code !== undefined) this.code = code;\n if (details !== undefined) this.details = details;\n this.name = \"CloudAPIError\";\n }\n}\n\ntype MakeRequestOptions = {\n method?: \"POST\" | \"PUT\" | \"DELETE\" | undefined;\n headers?: Record<string, string> | undefined;\n query?: Record<string, string | number | boolean> | undefined;\n body?: object | undefined;\n keepalive?: boolean | undefined;\n};\n\nconst HEADER_TOKEN = /^[\\x21-\\x7e]+$/;\n\nexport class AssistantCloudAPI {\n public _auth: AssistantCloudAuthStrategy;\n public _baseUrl;\n public readonly registerSdk: (sdk: SdkIdentity) => void;\n public readonly sdkHeader: () => string;\n\n constructor(config: AssistantCloudConfig) {\n const sdks = new Map<string, SdkIdentity>();\n this.registerSdk = (sdk) => {\n const name = sdk.name.trim();\n const version = sdk.version.trim();\n if (!HEADER_TOKEN.test(name) || !HEADER_TOKEN.test(version)) return;\n sdks.set(`${name}/${version}`, { name, version });\n };\n this.sdkHeader = () =>\n [\n `assistant-cloud/${ASSISTANT_CLOUD_VERSION}`,\n ...Array.from(\n sdks.values(),\n ({ name, version }) => `${name}/${version}`,\n ),\n ].join(\" \");\n\n if (\"authToken\" in config) {\n this._baseUrl = normalizeBaseUrl(config.baseUrl);\n this._auth = new AssistantCloudJWTAuthStrategy(config.authToken);\n } else if (\"apiKey\" in config) {\n this._baseUrl = normalizeBaseUrl(\n config.baseUrl ?? \"https://backend.assistant-api.com\",\n );\n this._auth = new AssistantCloudAPIKeyAuthStrategy(\n config.apiKey,\n config.userId,\n config.workspaceId,\n );\n } else if (\"anonymous\" in config) {\n this._baseUrl = normalizeBaseUrl(config.baseUrl);\n this._auth = new AssistantCloudAnonymousAuthStrategy(this._baseUrl);\n } else {\n throw new Error(\n \"Invalid configuration: Must provide authToken, apiKey, or anonymous configuration\",\n );\n }\n }\n\n public async initializeAuth() {\n return !!(await this._auth.getAuthHeaders());\n }\n\n public async makeRawRequest(\n endpoint: string,\n options: MakeRequestOptions = {},\n ) {\n const authHeaders = await this._auth.getAuthHeaders();\n if (!authHeaders) throw new Error(\"Authorization failed\");\n\n const headers = {\n ...authHeaders,\n ...options.headers,\n \"Content-Type\": \"application/json\",\n \"Aui-Sdk\": this.sdkHeader(),\n };\n\n const queryParams = new URLSearchParams();\n if (options.query) {\n for (const [key, value] of Object.entries(options.query)) {\n if (value === false) continue;\n if (value === true) {\n queryParams.set(key, \"true\");\n } else {\n queryParams.set(key, value.toString());\n }\n }\n }\n\n const url = new URL(`${this._baseUrl}/v1${endpoint}`);\n url.search = queryParams.toString();\n\n const response = await fetch(url, {\n method: options.method ?? \"GET\",\n headers,\n body: options.body ? JSON.stringify(options.body) : null,\n ...(options.keepalive ? { keepalive: true } : {}),\n });\n\n this._auth.readAuthHeaders(response.headers);\n\n if (!response.ok) {\n const text = await response.text();\n let message: string | undefined;\n let code: string | undefined;\n let details: Record<string, unknown> | undefined;\n try {\n const body = JSON.parse(text) as unknown;\n if (typeof body === \"object\" && body !== null && !Array.isArray(body)) {\n const record = body as Record<string, unknown>;\n if (typeof record.message === \"string\" && record.message.length > 0) {\n message = record.message;\n }\n if (typeof record.error === \"string\") {\n code = record.error;\n details = { ...record };\n delete details.error;\n }\n }\n } catch {}\n throw new CloudAPIError(\n message ?? `Request failed with status ${response.status}, ${text}`,\n response.status,\n code,\n details,\n );\n }\n\n return response;\n }\n\n public async makeRequest(endpoint: string, options: MakeRequestOptions = {}) {\n const response = await this.makeRawRequest(endpoint, options);\n if (\n response.status === 204 ||\n response.headers.get(\"content-length\") === \"0\"\n )\n return undefined;\n\n const text = await response.text();\n if (text.trim() === \"\") return undefined;\n\n return JSON.parse(text);\n }\n}\n"],"mappings":"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"}
@@ -1,37 +1,35 @@
1
- //#region src/AssistantCloudAuthStrategy.d.ts
2
1
  export type AssistantCloudAuthStrategy = {
3
- readonly strategy: "anon" | "jwt" | "api-key";
4
- getAuthHeaders(): Promise<Record<string, string> | false>;
5
- readAuthHeaders(headers: Headers): void;
2
+ readonly strategy: "anon" | "jwt" | "api-key";
3
+ getAuthHeaders(): Promise<Record<string, string> | false>;
4
+ readAuthHeaders(headers: Headers): void;
6
5
  };
7
6
  export declare class AssistantCloudJWTAuthStrategy implements AssistantCloudAuthStrategy {
8
- #private;
9
- readonly strategy = "jwt";
10
- private cachedToken;
11
- private tokenExpiry;
12
- private tokenRequest;
13
- constructor(authTokenCallback: () => Promise<string | null>);
14
- getAuthHeaders(): Promise<Record<string, string> | false>;
15
- private fetchAuthHeaders;
16
- readAuthHeaders(headers: Headers): void;
7
+ #private;
8
+ readonly strategy = "jwt";
9
+ private cachedToken;
10
+ private tokenExpiry;
11
+ private tokenRequest;
12
+ constructor(authTokenCallback: () => Promise<string | null>);
13
+ getAuthHeaders(): Promise<Record<string, string> | false>;
14
+ private fetchAuthHeaders;
15
+ readAuthHeaders(headers: Headers): void;
17
16
  }
18
17
  export declare class AssistantCloudAPIKeyAuthStrategy implements AssistantCloudAuthStrategy {
19
- #private;
20
- readonly strategy = "api-key";
21
- constructor(apiKey: string, userId: string, workspaceId: string);
22
- getAuthHeaders(): Promise<Record<string, string>>;
23
- readAuthHeaders(): void;
18
+ #private;
19
+ readonly strategy = "api-key";
20
+ constructor(apiKey: string, userId: string, workspaceId: string);
21
+ getAuthHeaders(): Promise<Record<string, string>>;
22
+ readAuthHeaders(): void;
24
23
  }
25
24
  export declare const normalizeBaseUrl: (baseUrl: string) => string;
26
25
  /** The refresh token of the anonymous identity this browser holds for `baseUrl`, or null when it has none. */
27
26
  export declare const readAnonymousRefreshToken: (baseUrl: string) => string | null;
28
27
  export declare class AssistantCloudAnonymousAuthStrategy implements AssistantCloudAuthStrategy {
29
- readonly strategy = "anon";
30
- private baseUrl;
31
- private jwtStrategy;
32
- constructor(baseUrl: string);
33
- getAuthHeaders(): Promise<Record<string, string> | false>;
34
- readAuthHeaders(headers: Headers): void;
28
+ readonly strategy = "anon";
29
+ private baseUrl;
30
+ private jwtStrategy;
31
+ constructor(baseUrl: string);
32
+ getAuthHeaders(): Promise<Record<string, string> | false>;
33
+ readAuthHeaders(headers: Headers): void;
35
34
  }
36
- //#endregion
37
35
  //# sourceMappingURL=AssistantCloudAuthStrategy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudAuthStrategy.d.ts","names":[],"sources":["../src/AssistantCloudAuthStrategy.ts"],"mappings":";YAkCY;WACD;EACT,kBAAkB,QAAQ;EAC1B,gBAAgB,SAAS;;qBAmFd,yCAAyC;;WACpC;UAER;UACA;UACA;EAGI,YAAA,yBAAyB;EAIxB,kBAAkB,QAAQ;UA0BzB;EAWP,gBAAgB,SAAS;;qBAerB,4CAA4C;;WACvC;EAMJ,YAAA,gBAAgB,gBAAgB;EAM/B,kBAAkB,QAAQ;EAQhC;;qBAuDI,mBAAoB;;qBAMpB,4BAA6B;qBAwE7B,+CAA+C;WAC1C;UAER;UACA;EAEI,YAAA;EAwFC,kBAAkB,QAAQ;EAIhC,gBAAgB,SAAS"}
1
+ {"version":3,"file":"AssistantCloudAuthStrategy.d.ts","sourceRoot":"","sources":["../src/AssistantCloudAuthStrategy.ts"],"names":[],"mappings":"AAkCA,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAC9C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IAC1D,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC,CAAC;AAkFF,qBAAa,6BAA8B,YAAW,0BAA0B;;IAC9E,SAAgB,QAAQ,SAAS;IAEjC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAAwD;gBAGhE,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI9C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;YA0BxD,gBAAgB;IAWvB,eAAe,CAAC,OAAO,EAAE,OAAO;CAaxC;AAED,qBAAa,gCAAiC,YAAW,0BAA0B;;IACjF,SAAgB,QAAQ,aAAa;gBAMzB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAMlD,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAQvD,eAAe;CAGvB;AAoDD,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,KAAG,MAGlD,CAAC;AAEF,8GAA8G;AAC9G,eAAO,MAAM,yBAAyB,GAAI,SAAS,MAAM,KAAG,MAAM,GAAG,IAKpE,CAAC;AAmEF,qBAAa,mCAAoC,YAAW,0BAA0B;IACpF,SAAgB,QAAQ,UAAU;IAElC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAgC;gBAEvC,OAAO,EAAE,MAAM;IAwFd,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAI/D,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;CAG/C"}
@@ -1,12 +1,11 @@
1
- import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
2
- //#region src/AssistantCloudAuthTokens.d.ts
1
+ import type { AssistantCloudAPI } from "./AssistantCloudAPI.js";
3
2
  type AssistantCloudAuthTokensCreateResponse = {
4
- token: string;
3
+ token: string;
5
4
  };
6
5
  export declare class AssistantCloudAuthTokens {
7
- private cloud;
8
- constructor(cloud: AssistantCloudAPI);
9
- create(): Promise<AssistantCloudAuthTokensCreateResponse>;
6
+ private cloud;
7
+ constructor(cloud: AssistantCloudAPI);
8
+ create(): Promise<AssistantCloudAuthTokensCreateResponse>;
10
9
  }
11
- //#endregion
10
+ export {};
12
11
  //# sourceMappingURL=AssistantCloudAuthTokens.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudAuthTokens.d.ts","names":[],"sources":["../src/AssistantCloudAuthTokens.ts"],"mappings":";;KAGK;EACH;;qBAGW;UACH;EAEI,YAAA,OAAO;EAIN,UAAU,QAAQ"}
1
+ {"version":3,"file":"AssistantCloudAuthTokens.d.ts","sourceRoot":"","sources":["../src/AssistantCloudAuthTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA4B;AAG7D,KAAK,sCAAsC,GAAG;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,wBAAwB;IACnC,OAAO,CAAC,KAAK,CAAoB;gBAErB,KAAK,EAAE,iBAAiB;IAIvB,MAAM,IAAI,OAAO,CAAC,sCAAsC,CAAC;CAQvE"}
@@ -1,31 +1,38 @@
1
- import { AssistantCloudAPI } from "./AssistantCloudAPI.js";
2
- //#region src/AssistantCloudEvents.d.ts
1
+ import type { AssistantCloudAPI } from "./AssistantCloudAPI.js";
3
2
  export type AssistantCloudEventKind = "message_sent" | "message_edited" | "run_stopped" | "message_regenerated" | "message_copied" | "branch_switched" | "suggestions_shown" | "suggestion_clicked" | "attachment_added" | "attachment_failed" | "thread_switched" | "tool_approved" | "tool_rejected" | "speech_started" | "voice_started" | "error_shown";
4
3
  export type AssistantCloudEvent = {
5
- kind: AssistantCloudEventKind;
6
- thread_id?: string | undefined;
7
- message_id?: string | undefined;
8
- run_id?: string | undefined;
9
- value?: number | undefined;
10
- props?: Readonly<Record<string, string | number | boolean>> | undefined;
4
+ kind: AssistantCloudEventKind;
5
+ thread_id?: string | undefined;
6
+ message_id?: string | undefined;
7
+ run_id?: string | undefined;
8
+ value?: number | undefined;
9
+ props?: Readonly<Record<string, string | number | boolean>> | undefined;
11
10
  };
11
+ export declare const clearPendingAssistantCloudEvents: (events: AssistantCloudEvents) => void;
12
12
  export declare class AssistantCloudEvents {
13
- private buffer;
14
- private timer;
15
- private flushing;
16
- private readonly cloud;
17
- private readonly isEnabled;
18
- private listening;
19
- constructor(cloud: AssistantCloudAPI, isEnabled: () => boolean);
20
- track(event: AssistantCloudEvent): void;
21
- private listen;
22
- private unlisten;
23
- dispose(): void;
24
- private onVisibilityChange;
25
- private flush;
26
- private flushPending;
27
- private scheduleFlush;
28
- private clearFlushTimer;
13
+ private buffer;
14
+ private timer;
15
+ private flushing;
16
+ private retryTimer;
17
+ private resolveRetryDelay;
18
+ private bestEffortRequested;
19
+ private generation;
20
+ private readonly cloud;
21
+ private readonly isEnabled;
22
+ private listening;
23
+ constructor(cloud: AssistantCloudAPI, isEnabled: () => boolean);
24
+ track(event: AssistantCloudEvent): void;
25
+ private listen;
26
+ private unlisten;
27
+ dispose(): void;
28
+ private clearPending;
29
+ private onVisibilityChange;
30
+ private flushBestEffort;
31
+ private flush;
32
+ private flushPending;
33
+ private waitForRetry;
34
+ private interruptRetryDelay;
35
+ private scheduleFlush;
36
+ private clearFlushTimer;
29
37
  }
30
- //#endregion
31
38
  //# sourceMappingURL=AssistantCloudEvents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AssistantCloudEvents.d.ts","names":[],"sources":["../src/AssistantCloudEvents.ts"],"mappings":";;YAEY;YAkBA;EACV,MAAM;EACN;EACA;EACA;EACA;EACA,QAAQ,SAAS;;qBAON;UACH;UACA;UACA;mBAES;mBACA;UAET;EAEI,YAAA,OAAO,mBAAmB;EAK/B,MAAM,OAAO;UAaZ;UAaA;EAOD;UAMC;UAMA;UAyBM;UAkBN;UAQA"}
1
+ {"version":3,"file":"AssistantCloudEvents.d.ts","sourceRoot":"","sources":["../src/AssistantCloudEvents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,+BAA4B;AAE7D,MAAM,MAAM,uBAAuB,GAC/B,cAAc,GACd,gBAAgB,GAChB,aAAa,GACb,qBAAqB,GACrB,gBAAgB,GAChB,iBAAiB,GACjB,mBAAmB,GACnB,oBAAoB,GACpB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,GACf,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,aAAa,CAAC;AAElB,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;CACzE,CAAC;AAQF,eAAO,MAAM,gCAAgC,GAC3C,QAAQ,oBAAoB,KAC3B,IAEF,CAAC;AAEF,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,iBAAiB,CAA2B;IACpD,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,UAAU,CAAK;IAEvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAE1C,OAAO,CAAC,SAAS,CAAS;gBAEd,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO;IAMvD,KAAK,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAa9C,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,QAAQ;IAOT,OAAO,IAAI,IAAI;IAMtB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,kBAAkB,CAIxB;IAEF,OAAO,CAAC,eAAe,CAMrB;IAEF,OAAO,CAAC,KAAK,CAsBX;YAEY,YAAY;IAkC1B,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,eAAe;CAKxB"}