@axiom-lattice/client-sdk 3.0.5 → 4.0.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 (40) hide show
  1. package/dist/__tests__/a2a-keys.test.d.ts +8 -0
  2. package/dist/__tests__/a2a-keys.test.d.ts.map +1 -0
  3. package/dist/__tests__/a2a-keys.test.js +110 -0
  4. package/dist/__tests__/a2a-keys.test.js.map +1 -0
  5. package/dist/__tests__/export-import.test.d.ts +2 -0
  6. package/dist/__tests__/export-import.test.d.ts.map +1 -0
  7. package/dist/__tests__/export-import.test.js +245 -0
  8. package/dist/__tests__/export-import.test.js.map +1 -0
  9. package/dist/__tests__/tasks.test.d.ts +2 -0
  10. package/dist/__tests__/tasks.test.d.ts.map +1 -0
  11. package/dist/__tests__/tasks.test.js +67 -0
  12. package/dist/__tests__/tasks.test.js.map +1 -0
  13. package/dist/__tests__/workspace-client.test.d.ts +10 -0
  14. package/dist/__tests__/workspace-client.test.d.ts.map +1 -0
  15. package/dist/__tests__/workspace-client.test.js +56 -0
  16. package/dist/__tests__/workspace-client.test.js.map +1 -0
  17. package/dist/abstract-client.d.ts +59 -2
  18. package/dist/abstract-client.d.ts.map +1 -1
  19. package/dist/abstract-client.js +74 -3
  20. package/dist/abstract-client.js.map +1 -1
  21. package/dist/client.d.ts +2 -0
  22. package/dist/client.d.ts.map +1 -1
  23. package/dist/client.js +2 -0
  24. package/dist/client.js.map +1 -1
  25. package/dist/export-import.d.ts +136 -24
  26. package/dist/export-import.d.ts.map +1 -1
  27. package/dist/export-import.js +142 -48
  28. package/dist/export-import.js.map +1 -1
  29. package/dist/index.d.ts +263 -33
  30. package/dist/index.js +258 -96
  31. package/dist/index.js.map +1 -1
  32. package/dist/index.mjs +258 -96
  33. package/dist/index.mjs.map +1 -1
  34. package/dist/types.d.ts +60 -0
  35. package/dist/types.d.ts.map +1 -1
  36. package/dist/workspace-client.d.ts +2 -2
  37. package/dist/workspace-client.d.ts.map +1 -1
  38. package/dist/workspace-client.js +7 -2
  39. package/dist/workspace-client.js.map +1 -1
  40. package/package.json +2 -2
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Client.a2aKeys namespace tests.
3
+ *
4
+ * Asserts the six A2A API key management methods hit the gateway's
5
+ * `/api/a2a/keys` endpoints with the correct URL, HTTP method, and body.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=a2a-keys.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-keys.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/a2a-keys.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Client.a2aKeys namespace tests.
3
+ *
4
+ * Asserts the six A2A API key management methods hit the gateway's
5
+ * `/api/a2a/keys` endpoints with the correct URL, HTTP method, and body.
6
+ */
7
+ import { Client } from "../client";
8
+ const mockFetch = jest.fn();
9
+ global.fetch = mockFetch;
10
+ const record = {
11
+ id: "key-1",
12
+ key: "a2a_abc123...",
13
+ tenantId: "t1",
14
+ projectId: "p1",
15
+ assistantIds: ["a1"],
16
+ label: "prod",
17
+ enabled: true,
18
+ createdAt: "2026-08-19T00:00:00.000Z",
19
+ updatedAt: "2026-08-19T00:00:00.000Z",
20
+ };
21
+ function makeClient() {
22
+ return new Client({
23
+ baseURL: "http://localhost:3000",
24
+ apiKey: "test-key",
25
+ assistantId: "asst-1",
26
+ transport: "sse",
27
+ });
28
+ }
29
+ function mockJsonResponse(body) {
30
+ mockFetch.mockResolvedValue({
31
+ ok: true,
32
+ json: async () => body,
33
+ });
34
+ }
35
+ function lastFetch() {
36
+ return mockFetch.mock.calls[mockFetch.mock.calls.length - 1];
37
+ }
38
+ beforeEach(() => {
39
+ jest.clearAllMocks();
40
+ });
41
+ describe("Client.a2aKeys", () => {
42
+ it("list -> GET /api/a2a/keys with tenantId/limit/offset query", async () => {
43
+ mockJsonResponse({ success: true, data: { records: [record], total: 1 } });
44
+ const result = await makeClient().a2aKeys.list({
45
+ tenantId: "t1",
46
+ limit: 10,
47
+ offset: 20,
48
+ });
49
+ const [url, init] = lastFetch();
50
+ expect(url).toBe("http://localhost:3000/api/a2a/keys?tenantId=t1&limit=10&offset=20");
51
+ expect(init.method).toBe("GET");
52
+ expect(result).toEqual({ records: [record], total: 1 });
53
+ });
54
+ it("list sends no query string when params omitted", async () => {
55
+ mockJsonResponse({ success: true, data: { records: [], total: 0 } });
56
+ await makeClient().a2aKeys.list();
57
+ const [url] = lastFetch();
58
+ expect(url).toBe("http://localhost:3000/api/a2a/keys");
59
+ });
60
+ it("create -> POST /api/a2a/keys with tenantId/projectId/assistantIds/label", async () => {
61
+ mockJsonResponse({ success: true, data: { ...record, key: "a2a_full_key" } });
62
+ const result = await makeClient().a2aKeys.create({
63
+ tenantId: "t1",
64
+ projectId: "p1",
65
+ assistantIds: ["a1", "a2"],
66
+ label: "prod",
67
+ });
68
+ const [url, init] = lastFetch();
69
+ expect(url).toBe("http://localhost:3000/api/a2a/keys");
70
+ expect(init.method).toBe("POST");
71
+ expect(JSON.parse(init.body)).toEqual({
72
+ tenantId: "t1",
73
+ projectId: "p1",
74
+ assistantIds: ["a1", "a2"],
75
+ label: "prod",
76
+ });
77
+ expect(result.key).toBe("a2a_full_key");
78
+ });
79
+ it("delete -> DELETE /api/a2a/keys/:id", async () => {
80
+ mockJsonResponse({ success: true });
81
+ await makeClient().a2aKeys.delete("key-1");
82
+ const [url, init] = lastFetch();
83
+ expect(url).toBe("http://localhost:3000/api/a2a/keys/key-1");
84
+ expect(init.method).toBe("DELETE");
85
+ });
86
+ it("disable -> POST /api/a2a/keys/:id/disable", async () => {
87
+ mockJsonResponse({ success: true, data: { ...record, enabled: false } });
88
+ const result = await makeClient().a2aKeys.disable("key-1");
89
+ const [url, init] = lastFetch();
90
+ expect(url).toBe("http://localhost:3000/api/a2a/keys/key-1/disable");
91
+ expect(init.method).toBe("POST");
92
+ expect(result.enabled).toBe(false);
93
+ });
94
+ it("enable -> POST /api/a2a/keys/:id/enable", async () => {
95
+ mockJsonResponse({ success: true, data: record });
96
+ await makeClient().a2aKeys.enable("key-1");
97
+ const [url, init] = lastFetch();
98
+ expect(url).toBe("http://localhost:3000/api/a2a/keys/key-1/enable");
99
+ expect(init.method).toBe("POST");
100
+ });
101
+ it("rotate -> POST /api/a2a/keys/:id/rotate", async () => {
102
+ mockJsonResponse({ success: true, data: { ...record, key: "a2a_rotated" } });
103
+ const result = await makeClient().a2aKeys.rotate("key-1");
104
+ const [url, init] = lastFetch();
105
+ expect(url).toBe("http://localhost:3000/api/a2a/keys/key-1/rotate");
106
+ expect(init.method).toBe("POST");
107
+ expect(result.key).toBe("a2a_rotated");
108
+ });
109
+ });
110
+ //# sourceMappingURL=a2a-keys.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a2a-keys.test.js","sourceRoot":"","sources":["../../src/__tests__/a2a-keys.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=export-import.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-import.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/export-import.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,245 @@
1
+ import { Client } from "../client";
2
+ import { ExportImportClient, } from "../export-import";
3
+ const mockFetch = jest.fn();
4
+ global.fetch = mockFetch;
5
+ function mockJsonResponse(body, ok = true, status = 200) {
6
+ mockFetch.mockResolvedValue({
7
+ ok,
8
+ status,
9
+ json: async () => body,
10
+ });
11
+ }
12
+ function formDataEntries() {
13
+ return Object.fromEntries(lastFetch()[1].body.entries());
14
+ }
15
+ function lastFetch() {
16
+ return mockFetch.mock.calls[mockFetch.mock.calls.length - 1];
17
+ }
18
+ function requestBody() {
19
+ return JSON.parse(lastFetch()[1].body);
20
+ }
21
+ const bundle = {
22
+ version: 1,
23
+ exportedAt: "2026-08-21T00:00:00.000Z",
24
+ sourceTenantId: "source-tenant",
25
+ entities: {
26
+ assistants: [{ _exportId: "assistant-1", data: { name: "Agent" } }],
27
+ },
28
+ dependencyOrder: ["assistants"],
29
+ };
30
+ const resolutions = {
31
+ "assistant-1": { _exportId: "assistant-1", action: "overwrite" },
32
+ };
33
+ beforeEach(() => {
34
+ jest.clearAllMocks();
35
+ });
36
+ describe("ExportImportClient gateway contract", () => {
37
+ it("gets typed exportable types from the JSON envelope", async () => {
38
+ mockJsonResponse({
39
+ success: true,
40
+ data: [{
41
+ entityType: "assistants",
42
+ label: "Assistants",
43
+ category: "core",
44
+ dependsOn: [],
45
+ cascadeParents: [],
46
+ }],
47
+ });
48
+ const client = new ExportImportClient({
49
+ baseURL: "http://localhost:3000",
50
+ apiKey: "key",
51
+ assistantId: "assistant",
52
+ transport: "sse",
53
+ });
54
+ const result = await client.getExportableTypes();
55
+ expect(lastFetch()[0]).toBe("http://localhost:3000/api/tenants/exportable-types");
56
+ expect(lastFetch()[1].method).toBe("GET");
57
+ expect(result[0].entityType).toBe("assistants");
58
+ });
59
+ it("sends optional entity IDs for export and confirmation", async () => {
60
+ const client = new ExportImportClient({
61
+ baseURL: "http://localhost:3000",
62
+ apiKey: "key",
63
+ assistantId: "assistant",
64
+ transport: "sse",
65
+ });
66
+ const entityIds = { assistants: ["assistant-1"] };
67
+ mockJsonResponse({ success: true, data: { jobId: "job-1", summary: { assistants: 1 } } });
68
+ await client.exportConfig("tenant-1", ["assistants"], entityIds);
69
+ expect(lastFetch()[0]).toBe("http://localhost:3000/api/tenants/tenant-1/export");
70
+ expect(lastFetch()[1].method).toBe("POST");
71
+ expect(requestBody()).toEqual({ entityTypes: ["assistants"], entityIds });
72
+ mockJsonResponse({ success: true, data: { jobId: "job-2", summary: { assistants: 1 } } });
73
+ await client.exportConfigConfirm("tenant-1", ["assistants"], entityIds);
74
+ expect(lastFetch()[0]).toBe("http://localhost:3000/api/tenants/tenant-1/export/confirm");
75
+ expect(lastFetch()[1].method).toBe("POST");
76
+ expect(requestBody()).toEqual({ entityTypes: ["assistants"], entityIds });
77
+ });
78
+ it("omits entityIds when no explicit selection is provided", async () => {
79
+ mockJsonResponse({ success: true, data: { jobId: "job-1", summary: {} } });
80
+ const client = new ExportImportClient({
81
+ baseURL: "http://localhost:3000",
82
+ apiKey: "key",
83
+ assistantId: "assistant",
84
+ transport: "sse",
85
+ });
86
+ await client.exportConfig("tenant-1", ["assistants"]);
87
+ expect(requestBody()).toEqual({ entityTypes: ["assistants"] });
88
+ });
89
+ it("previews selectable entities", async () => {
90
+ mockJsonResponse({
91
+ success: true,
92
+ data: { assistants: [{ id: "assistant-1", name: "Agent", description: "Primary" }] },
93
+ });
94
+ const client = new ExportImportClient({
95
+ baseURL: "http://localhost:3000",
96
+ apiKey: "key",
97
+ assistantId: "assistant",
98
+ transport: "sse",
99
+ });
100
+ const result = await client.previewEntities("tenant-1", ["assistants"]);
101
+ expect(lastFetch()[0]).toBe("http://localhost:3000/api/tenants/tenant-1/export/entities");
102
+ expect(lastFetch()[1].method).toBe("POST");
103
+ expect(requestBody()).toEqual({ entityTypes: ["assistants"] });
104
+ expect(result.assistants[0].name).toBe("Agent");
105
+ });
106
+ it("downloads raw archive bytes and reads the attachment filename", async () => {
107
+ mockFetch.mockResolvedValue({
108
+ ok: true,
109
+ status: 200,
110
+ headers: new Headers({
111
+ "Content-Disposition": "attachment; filename=\"tenant export.tar.gz\"",
112
+ }),
113
+ arrayBuffer: async () => new Uint8Array([0, 1, 254, 255]).buffer,
114
+ });
115
+ const client = new ExportImportClient({
116
+ baseURL: "http://localhost:3000",
117
+ apiKey: "key",
118
+ assistantId: "assistant",
119
+ transport: "sse",
120
+ });
121
+ const result = await client.downloadExport("tenant-1", "job-1");
122
+ expect(lastFetch()[0]).toBe("http://localhost:3000/api/tenants/tenant-1/export/job-1/download");
123
+ expect(lastFetch()[1].method).toBe("GET");
124
+ expect(result.filename).toBe("tenant export.tar.gz");
125
+ expect(Array.from(result.data)).toEqual([0, 1, 254, 255]);
126
+ });
127
+ it.each([
128
+ ["base64 string", "AAH+/w=="],
129
+ ["Uint8Array", new Uint8Array([0, 1, 254, 255])],
130
+ ["ArrayBuffer", new Uint8Array([0, 1, 254, 255]).buffer],
131
+ ["Blob", new Blob([new Uint8Array([0, 1, 254, 255])])],
132
+ ])("previews an archive from %s as multipart", async (_label, archive) => {
133
+ mockJsonResponse({ success: true, data: { conflicts: [], insertions: [], errors: [] } });
134
+ const client = new ExportImportClient({
135
+ baseURL: "http://localhost:3000",
136
+ apiKey: "key",
137
+ assistantId: "assistant",
138
+ transport: "sse",
139
+ });
140
+ await client.importPreview("tenant-1", { archive });
141
+ expect(lastFetch()[0]).toBe("http://localhost:3000/api/tenants/tenant-1/import/preview");
142
+ expect(lastFetch()[1].method).toBe("POST");
143
+ expect(lastFetch()[1].body).toBeInstanceOf(FormData);
144
+ const entries = formDataEntries();
145
+ expect(Object.keys(entries)).toEqual(["file"]);
146
+ expect(entries.file).toBeInstanceOf(Blob);
147
+ expect(Array.from(new Uint8Array(await entries.file.arrayBuffer())))
148
+ .toEqual([0, 1, 254, 255]);
149
+ expect(entries.file.name).toBe("tenant-import.tar.gz");
150
+ expect(lastFetch()[1].headers).toEqual(expect.not.objectContaining({
151
+ "Content-Type": expect.anything(),
152
+ }));
153
+ });
154
+ it("previews a plain bundle explicitly", async () => {
155
+ mockJsonResponse({ success: true, data: { conflicts: [], insertions: [], errors: [] } });
156
+ const client = new ExportImportClient({
157
+ baseURL: "http://localhost:3000",
158
+ apiKey: "key",
159
+ assistantId: "assistant",
160
+ transport: "sse",
161
+ });
162
+ await client.importPreview("tenant-1", { bundle });
163
+ expect(requestBody()).toEqual({ bundle });
164
+ });
165
+ it("applies archive imports as multipart with resolutions JSON", async () => {
166
+ const result = { results: [], idMap: {} };
167
+ const client = new ExportImportClient({
168
+ baseURL: "http://localhost:3000",
169
+ apiKey: "key",
170
+ assistantId: "assistant",
171
+ transport: "sse",
172
+ });
173
+ mockJsonResponse({ success: true, data: result });
174
+ await client.importApply("tenant-1", { archive: new Uint8Array([0, 1, 254, 255]) }, resolutions);
175
+ const entries = formDataEntries();
176
+ expect(JSON.parse(entries.resolutions)).toEqual(resolutions);
177
+ expect(Array.from(new Uint8Array(await entries.file.arrayBuffer())))
178
+ .toEqual([0, 1, 254, 255]);
179
+ });
180
+ it("applies plain bundle imports as JSON", async () => {
181
+ const result = { results: [], idMap: {} };
182
+ const client = new ExportImportClient({
183
+ baseURL: "http://localhost:3000",
184
+ apiKey: "key",
185
+ assistantId: "assistant",
186
+ transport: "sse",
187
+ });
188
+ mockJsonResponse({ success: true, data: result });
189
+ await client.importApply("tenant-1", { bundle }, resolutions);
190
+ expect(requestBody()).toEqual({ bundle, resolutions });
191
+ });
192
+ it("strips configured and live JSON content types for multipart only", async () => {
193
+ mockJsonResponse({ success: true, data: { conflicts: [], insertions: [], errors: [] } });
194
+ const client = new ExportImportClient({
195
+ baseURL: "http://localhost:3000",
196
+ apiKey: "key",
197
+ assistantId: "assistant",
198
+ transport: "sse",
199
+ headers: { "content-type": "application/problem+json", "x-custom": "configured" },
200
+ }, () => ({ "Content-Type": "application/json", "x-tenant-id": "tenant-live" }));
201
+ await client.importPreview("tenant-1", { archive: new Uint8Array([1, 2, 3]) });
202
+ expect(lastFetch()[1].headers).toEqual({
203
+ Authorization: "Bearer key",
204
+ "x-custom": "configured",
205
+ "x-tenant-id": "tenant-live",
206
+ });
207
+ });
208
+ it.each([
209
+ [{ message: "message failure" }, "message failure"],
210
+ [{ error: "error failure" }, "error failure"],
211
+ ])("reads gateway errors from either field", async (body, expected) => {
212
+ mockJsonResponse(body, false, 400);
213
+ const client = new ExportImportClient({
214
+ baseURL: "http://localhost:3000",
215
+ apiKey: "key",
216
+ assistantId: "assistant",
217
+ transport: "sse",
218
+ });
219
+ await expect(client.getExportableTypes()).rejects.toThrow(expected);
220
+ });
221
+ });
222
+ describe("Client.exportImport", () => {
223
+ it("uses live auth, custom, tenant, workspace, and project headers", async () => {
224
+ const client = new Client({
225
+ baseURL: "http://localhost:3000",
226
+ apiKey: "key",
227
+ assistantId: "assistant",
228
+ transport: "sse",
229
+ headers: { "x-custom": "configured" },
230
+ });
231
+ client.setTenantId("tenant-header");
232
+ client.setWorkspaceContext("workspace-1", "project-1");
233
+ mockJsonResponse({ success: true, data: {} });
234
+ await client.exportImport.previewEntities("tenant-path", ["assistants"]);
235
+ expect(lastFetch()[1].headers).toEqual(expect.objectContaining({
236
+ Authorization: "Bearer key",
237
+ "Content-Type": "application/json",
238
+ "x-custom": "configured",
239
+ "x-tenant-id": "tenant-header",
240
+ "x-workspace-id": "workspace-1",
241
+ "x-project-id": "project-1",
242
+ }));
243
+ });
244
+ });
245
+ //# sourceMappingURL=export-import.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-import.test.js","sourceRoot":"","sources":["../../src/__tests__/export-import.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tasks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tasks.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,67 @@
1
+ import { Client } from "../client";
2
+ const mockFetch = jest.fn();
3
+ global.fetch = mockFetch;
4
+ function makeClient() {
5
+ return new Client({
6
+ baseURL: "http://localhost:3000",
7
+ apiKey: "test-key",
8
+ assistantId: "agent-1",
9
+ transport: "sse",
10
+ });
11
+ }
12
+ beforeEach(() => {
13
+ jest.clearAllMocks();
14
+ mockFetch.mockResolvedValue({
15
+ ok: true,
16
+ json: async () => ({ success: true, data: { id: "task-1", status: "completed" } }),
17
+ });
18
+ });
19
+ describe("Client.tasks lifecycle methods", () => {
20
+ it("sends completion evidence to PATCH /api/tasks/:id/complete", async () => {
21
+ await makeClient().tasks.complete("task-1", {
22
+ result: "done",
23
+ beliefImpact: [{ key: "Confidence", after: 0.9, basis: "verified" }],
24
+ });
25
+ const [url, init] = mockFetch.mock.calls[0];
26
+ expect(url).toBe("http://localhost:3000/api/tasks/task-1/complete");
27
+ expect(init.method).toBe("PATCH");
28
+ expect(JSON.parse(init.body)).toEqual({
29
+ result: "done",
30
+ beliefImpact: [{ key: "Confidence", after: 0.9, basis: "verified" }],
31
+ });
32
+ });
33
+ it("preserves completion lifecycle metadata in the response envelope", async () => {
34
+ const warnings = [{
35
+ code: "PARENT_ACTIVITY_WRITE_FAILED",
36
+ taskId: "task-1",
37
+ evidenceId: "evidence-1",
38
+ eventKey: "completion:task-1",
39
+ parentTaskId: "parent-1",
40
+ }];
41
+ mockFetch.mockResolvedValueOnce({
42
+ ok: true,
43
+ json: async () => ({
44
+ success: true,
45
+ data: { id: "task-1", status: "completed" },
46
+ evidenceId: "evidence-1",
47
+ eventKey: "completion:task-1",
48
+ warnings,
49
+ }),
50
+ });
51
+ const result = await makeClient().tasks.complete("task-1", { result: "done" });
52
+ expect(result).toEqual({
53
+ success: true,
54
+ data: { id: "task-1", status: "completed" },
55
+ evidenceId: "evidence-1",
56
+ eventKey: "completion:task-1",
57
+ warnings,
58
+ });
59
+ });
60
+ it("does not expose detached approve or reject task methods", () => {
61
+ const tasks = makeClient().tasks;
62
+ expect(tasks.approve).toBeUndefined();
63
+ expect(tasks.reject).toBeUndefined();
64
+ expect(tasks.resume).toBeUndefined();
65
+ });
66
+ });
67
+ //# sourceMappingURL=tasks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.test.js","sourceRoot":"","sources":["../../src/__tests__/tasks.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * WorkspaceClient project kind tests
3
+ *
4
+ * listProjects accepts an optional kind filter and sends it as a ?kind=
5
+ * query param only when provided; requests without a kind stay bare
6
+ * (backward compatible). ProjectKind and the create/update request types
7
+ * expose the kind field from the shared protocol types.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=workspace-client.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-client.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/workspace-client.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * WorkspaceClient project kind tests
3
+ *
4
+ * listProjects accepts an optional kind filter and sends it as a ?kind=
5
+ * query param only when provided; requests without a kind stay bare
6
+ * (backward compatible). ProjectKind and the create/update request types
7
+ * expose the kind field from the shared protocol types.
8
+ */
9
+ import { WorkspaceClient } from "../workspace-client";
10
+ const mockFetch = jest.fn();
11
+ global.fetch = mockFetch;
12
+ function makeClient() {
13
+ return new WorkspaceClient({
14
+ baseURL: "http://localhost:3000",
15
+ apiKey: "test-key",
16
+ assistantId: "asst-1",
17
+ transport: "sse",
18
+ }, "tenant-1");
19
+ }
20
+ function mockJsonResponse(body) {
21
+ mockFetch.mockResolvedValue({
22
+ ok: true,
23
+ json: async () => body,
24
+ });
25
+ }
26
+ function fetchedUrl() {
27
+ return mockFetch.mock.calls[0][0];
28
+ }
29
+ describe("WorkspaceClient.listProjects kind filter", () => {
30
+ beforeEach(() => {
31
+ jest.clearAllMocks();
32
+ });
33
+ it("sends kind as a query param when provided", async () => {
34
+ mockJsonResponse({ success: true, data: [] });
35
+ await makeClient().listProjects("ws-1", "personal");
36
+ expect(fetchedUrl()).toBe("http://localhost:3000/api/workspaces/ws-1/projects?kind=personal");
37
+ });
38
+ it("sends no query string when kind is omitted", async () => {
39
+ mockJsonResponse({ success: true, data: [] });
40
+ await makeClient().listProjects("ws-1");
41
+ expect(fetchedUrl()).toBe("http://localhost:3000/api/workspaces/ws-1/projects");
42
+ });
43
+ });
44
+ describe("project kind type exposure", () => {
45
+ it("exposes ProjectKind and accepts kind on create/update requests", () => {
46
+ const kind = "personal";
47
+ const createReq = { name: "My Space", kind };
48
+ const updateReq = { kind };
49
+ expect([kind, createReq.kind, updateReq.kind]).toEqual([
50
+ "personal",
51
+ "personal",
52
+ "personal",
53
+ ]);
54
+ });
55
+ });
56
+ //# sourceMappingURL=workspace-client.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-client.test.js","sourceRoot":"","sources":["../../src/__tests__/workspace-client.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAuC,CAAC;AAChE,MAAkC,CAAC,KAAK,GAAG,SAAS,CAAC;AAEtD,SAAS,UAAU;IACjB,OAAO,IAAI,eAAe,CACxB;QACE,OAAO,EAAE,uBAAuB;QAChC,MAAM,EAAE,UAAU;QAClB,WAAW,EAAE,QAAQ;QACrB,SAAS,EAAE,KAAK;KACjB,EACD,UAAU,CACX,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAa;IACrC,SAAS,CAAC,iBAAiB,CAAC;QAC1B,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;KACX,CAAC,CAAC;AACjB,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC;AAC9C,CAAC;AAED,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE9C,MAAM,UAAU,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAEpD,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CACvB,kEAAkE,CACnE,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAE9C,MAAM,UAAU,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CACvB,oDAAoD,CACrD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;IAC1C,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,IAAI,GAAgB,UAAU,CAAC;QACrC,MAAM,SAAS,GAAyB,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACnE,MAAM,SAAS,GAAyB,EAAE,IAAI,EAAE,CAAC;QAEjD,MAAM,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACrD,UAAU;YACV,UAAU;YACV,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -3,7 +3,16 @@ import { AgentState, Assistant, ChatResponse, ChatSendOptions, ChatStreamOptions
3
3
  import type { Skill, CreateSkillRequest, DataSource, DatabaseConfigEntry, CreateDatabaseConfigRequest, UpdateDatabaseConfigRequest, MetricsServerConfigEntry, CreateMetricsServerConfigRequest, UpdateMetricsServerConfigRequest, McpServerConfigEntry, CreateMcpServerConfigRequest, UpdateMcpServerConfigRequest, ConnectionEntry } from "@axiom-lattice/protocols";
4
4
  import type { Tool } from "./types";
5
5
  import type { TaskItem, CreateTaskRequest, UpdateTaskRequest, TaskWorkItem } from "@axiom-lattice/protocols";
6
- import type { TestConnectionResponse, TestMcpServerResponse, AbortAgentParams, LocalA2AProviderState, LocalA2ATemplateDefinition } from "./types";
6
+ /** Completion evidence accepted by the task lifecycle endpoint. */
7
+ export interface CompleteTaskInput {
8
+ result: string;
9
+ beliefImpact?: Array<{
10
+ key: string;
11
+ after: number;
12
+ basis: string;
13
+ }>;
14
+ }
15
+ import type { TestConnectionResponse, TestMcpServerResponse, AbortAgentParams, CompleteTaskResponse, LocalA2AProviderState, LocalA2ATemplateDefinition, A2AKeyListItem, CreateA2AKeyInput, A2AKeysListResponse } from "./types";
7
16
  /**
8
17
  * Abstract client class for interacting with the Axiom Lattice Agent Service API
9
18
  * Provides common functionality for different client implementations
@@ -90,7 +99,7 @@ export declare abstract class AbstractClient {
90
99
  create: (data: CreateTaskRequest) => Promise<TaskItem>;
91
100
  update: (id: string, data: UpdateTaskRequest) => Promise<TaskItem>;
92
101
  delete: (id: string) => Promise<void>;
93
- complete: (id: string) => Promise<TaskItem>;
102
+ complete: (id: string, data: CompleteTaskInput) => Promise<CompleteTaskResponse>;
94
103
  workItems: {
95
104
  list: (taskId: string, params?: {
96
105
  action?: string;
@@ -363,6 +372,54 @@ export declare abstract class AbstractClient {
363
372
  };
364
373
  };
365
374
  };
375
+ /**
376
+ * A2A API keys namespace for managing A2A API keys
377
+ */
378
+ a2aKeys: {
379
+ /**
380
+ * Lists A2A API keys, optionally filtered by tenant
381
+ * Key values are masked in list responses
382
+ * @param params - Optional tenant filter and pagination
383
+ * @returns A promise that resolves to the list of key records and total
384
+ */
385
+ list: (params?: {
386
+ tenantId?: string;
387
+ limit?: number;
388
+ offset?: number;
389
+ }) => Promise<A2AKeysListResponse>;
390
+ /**
391
+ * Creates a new A2A API key
392
+ * The full key value is returned only from this call
393
+ * @param input - Key creation input (tenant, project, optional assistant whitelist and label)
394
+ * @returns A promise that resolves to the created key record (full key value)
395
+ */
396
+ create: (input: CreateA2AKeyInput) => Promise<A2AKeyListItem>;
397
+ /**
398
+ * Permanently deletes an A2A API key
399
+ * @param id - Key identifier
400
+ * @returns A promise that resolves when the key is deleted
401
+ */
402
+ delete: (id: string) => Promise<void>;
403
+ /**
404
+ * Disables an A2A API key
405
+ * @param id - Key identifier
406
+ * @returns A promise that resolves to the updated key record
407
+ */
408
+ disable: (id: string) => Promise<A2AKeyListItem>;
409
+ /**
410
+ * Enables a previously disabled A2A API key
411
+ * @param id - Key identifier
412
+ * @returns A promise that resolves to the updated key record
413
+ */
414
+ enable: (id: string) => Promise<A2AKeyListItem>;
415
+ /**
416
+ * Rotates an A2A API key, generating a new key value
417
+ * The full new key value is returned only from this call
418
+ * @param id - Key identifier
419
+ * @returns A promise that resolves to the updated key record (full new key value)
420
+ */
421
+ rotate: (id: string) => Promise<A2AKeyListItem>;
422
+ };
366
423
  /**
367
424
  * Skills namespace for managing skills
368
425
  */