@zocomputer/system-api 0.3.0 → 0.3.1

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.
@@ -29,6 +29,7 @@ declare function readToken(): Promise<string>;
29
29
  interface FetchExportOptions {
30
30
  readonly timeoutMs?: number;
31
31
  readonly maxBytes?: number;
32
+ readonly cachedBytes?: Uint8Array;
32
33
  }
33
34
  declare function fetchExport(baseUrl: URL, workspace: string, catalog: string | undefined, token: string, options?: FetchExportOptions): Promise<Uint8Array>;
34
35
  /**
@@ -18,7 +18,7 @@
18
18
  import { createHash } from "node:crypto";
19
19
  import { realpathSync } from "node:fs";
20
20
  import { existsSync, readFileSync, readdirSync } from "node:fs";
21
- import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
21
+ import { lstat, mkdir, readFile, rename, rm, writeFile, } from "node:fs/promises";
22
22
  import { dirname, join, resolve } from "node:path";
23
23
  import { argv } from "node:process";
24
24
  import { fileURLToPath } from "node:url";
@@ -131,10 +131,16 @@ async function fetchExport(baseUrl, workspace, catalog, token, options = {}) {
131
131
  endpoint.searchParams.set("workspace_id", workspace);
132
132
  if (catalog !== undefined)
133
133
  endpoint.searchParams.set("catalog", catalog);
134
+ const cached = options.cachedBytes;
135
+ const etag = cached && cached.byteLength <= maxBytes ? `"${digest(cached)}"` : undefined;
134
136
  let response;
135
137
  try {
136
138
  response = await fetch(endpoint, {
137
- headers: { authorization: `Bearer ${token}`, accept: "application/json" },
139
+ headers: {
140
+ authorization: `Bearer ${token}`,
141
+ accept: "application/json",
142
+ ...(etag ? { "If-None-Match": etag } : {}),
143
+ },
138
144
  redirect: "manual",
139
145
  signal: AbortSignal.timeout(timeoutMs),
140
146
  });
@@ -147,8 +153,15 @@ async function fetchExport(baseUrl, workspace, catalog, token, options = {}) {
147
153
  // With redirect:"manual", undici surfaces a 3xx as an opaque redirect: refuse
148
154
  // it rather than let fetch resend the Authorization header to a new origin.
149
155
  if (response.type === "opaqueredirect" ||
150
- (response.status >= 300 && response.status < 400))
156
+ (response.status >= 300 && response.status < 400 && response.status !== 304))
151
157
  throw new CliError("catalog export endpoint returned a redirect; refusing to follow it");
158
+ if (response.status === 304) {
159
+ if (cached === undefined ||
160
+ etag === undefined ||
161
+ response.headers.get("etag") !== etag)
162
+ throw new CliError("catalog export returned 304 without matching saved bytes");
163
+ return cached;
164
+ }
152
165
  if (!response.ok)
153
166
  throw new CliError(`catalog export request failed with HTTP ${response.status}`);
154
167
  return readBounded(response, maxBytes);
@@ -288,7 +301,12 @@ async function runGenerate(args) {
288
301
  const baseUrl = validateBaseUrl(args.baseUrl);
289
302
  if (args.workspace === undefined || args.workspace === "")
290
303
  throw new CliError("--workspace <id> is required when fetching from --base-url");
291
- schemaBytes = await fetchExport(baseUrl, args.workspace, args.catalog, await readToken());
304
+ const savedPath = join(resolve(args.out), "schema.json");
305
+ const savedStat = await lstat(savedPath).catch(() => undefined);
306
+ const savedBytes = savedStat?.isFile() && savedStat.size <= MAX_EXPORT_BYTES
307
+ ? new Uint8Array(await readFile(savedPath))
308
+ : undefined;
309
+ schemaBytes = await fetchExport(baseUrl, args.workspace, args.catalog, await readToken(), { cachedBytes: savedBytes });
292
310
  }
293
311
  // generateBundle snapshots schemaBytes and derives the model internally, so the
294
312
  // emitted types and persisted schema.json always come from one immutable source.
@@ -43,7 +43,7 @@ export const catalog = defineCatalog({
43
43
  "zo.agent.list_messages": {
44
44
  defaultVersion: 1,
45
45
  versions: {
46
- 1: { digest: "sha256:a8e34e154f63267fa02c162d32cd887f95eeac983693ea1c6570c6504ebe202d" },
46
+ 1: { digest: "sha256:983f22ac6e48618bb3290155e3d7723ae1be7e885f78f9135f3ee0f37e5d0d16" },
47
47
  },
48
48
  },
49
49
  "zo.agent.send": {
@@ -61,25 +61,25 @@ export const catalog = defineCatalog({
61
61
  "zo.agent_session.get": {
62
62
  defaultVersion: 1,
63
63
  versions: {
64
- 1: { digest: "sha256:fa7d4538f2a14134318196e18081aca325cd991851561a50071e92808becdb1f" },
64
+ 1: { digest: "sha256:c9a0287765cc63f5c2681159cfbf66c1546a423fd3fdb2c21684169de7f29680" },
65
65
  },
66
66
  },
67
67
  "zo.agent_session.history": {
68
68
  defaultVersion: 1,
69
69
  versions: {
70
- 1: { digest: "sha256:1d5dc59be3ce5b5186b4f3675283d0a87ff4aed46374e2d419defefaa85e2758" },
70
+ 1: { digest: "sha256:0ec9eeab9cf92d991c5586cbb00eb01a9c56a9b0f81b1b3b8d372e2e70b9419a" },
71
71
  },
72
72
  },
73
73
  "zo.agent_session.list": {
74
74
  defaultVersion: 1,
75
75
  versions: {
76
- 1: { digest: "sha256:ccad299f85ad1e29daa8630f04f7844e9db5aff02940dbb700cb173bf25017a1" },
76
+ 1: { digest: "sha256:77d2dc953e6259fb131c0d2e219299589c4fbfdab41f4db90140108e91e661ca" },
77
77
  },
78
78
  },
79
79
  "zo.agent_session.list_workspace": {
80
80
  defaultVersion: 1,
81
81
  versions: {
82
- 1: { digest: "sha256:0c0023c827285b09c4e7fbb9d001c89faca96ee293d769568d77baf63885b0a2" },
82
+ 1: { digest: "sha256:332ee8b48ca75d74d5e09e4b71c030bca6ad9c3950b1d02ce532dfbb041116db" },
83
83
  },
84
84
  },
85
85
  "zo.billing.list_rates": {
@@ -127,13 +127,13 @@ export const catalog = defineCatalog({
127
127
  "zo.connection.get": {
128
128
  defaultVersion: 1,
129
129
  versions: {
130
- 1: { digest: "sha256:5ca6347217eba21af2b37e1830df0252e5d4115a3f7ee4f9357bed5e11280861" },
130
+ 1: { digest: "sha256:888acd2e1feba5b19c1905857e5125329737f23ec450b85a4d63e1879b585cf2" },
131
131
  },
132
132
  },
133
133
  "zo.connection.list": {
134
134
  defaultVersion: 1,
135
135
  versions: {
136
- 1: { digest: "sha256:92aca1c5160f58db8d84f380e55f271730a7159e4ca3d2bddde8462adba18a30" },
136
+ 1: { digest: "sha256:980544a4939be631e0b12a1930bd7fa07266ee893055cb2187a97e75e791c6d7" },
137
137
  },
138
138
  },
139
139
  "zo.connection.register_resource": {
@@ -309,13 +309,13 @@ export const catalog = defineCatalog({
309
309
  "zo.function.get": {
310
310
  defaultVersion: 1,
311
311
  versions: {
312
- 1: { digest: "sha256:8fefdcc1440b09264f2c0b0a31ef8f3cefb5f2fe79f0166341e7537addf89819" },
312
+ 1: { digest: "sha256:a7003bbcae500ade1da64eb0f61f5442119a59ec2ab0c8c402c9627b3d1dfffb" },
313
313
  },
314
314
  },
315
315
  "zo.function.get_run": {
316
316
  defaultVersion: 1,
317
317
  versions: {
318
- 1: { digest: "sha256:2505ec5258453629ea98a3d70911387096dbbd4c2f68d5c2c24ee5f32746eaca" },
318
+ 1: { digest: "sha256:e2ffa72539a3742262be01ce613f5da85c900f4d2c1a30358fbf3d08b6bc6ba0" },
319
319
  },
320
320
  },
321
321
  "zo.function.invoke": {
@@ -333,7 +333,7 @@ export const catalog = defineCatalog({
333
333
  "zo.function.list_runs": {
334
334
  defaultVersion: 1,
335
335
  versions: {
336
- 1: { digest: "sha256:5afb66f0e9685192469f0fda5db8ea0cf49cf1a645ab23d22a03bc8698c8a7b4" },
336
+ 1: { digest: "sha256:4c4ca436fc7e5ef58880efeace4433508105f2f749b9609eb799609ffd648fa2" },
337
337
  },
338
338
  },
339
339
  "zo.function.publish_contract": {
@@ -471,7 +471,13 @@ export const catalog = defineCatalog({
471
471
  "zo.message.get": {
472
472
  defaultVersion: 1,
473
473
  versions: {
474
- 1: { digest: "sha256:aadcb480b26c475386eb47a4694a413a0b118969638cd9bfd9d9e5d68b5f758e" },
474
+ 1: { digest: "sha256:ac04dbbd2642ad79c98bfd056cdef95a2db7538415dba5987ffc4adb2e4868dd" },
475
+ },
476
+ },
477
+ "zo.model.generate_text": {
478
+ defaultVersion: 1,
479
+ versions: {
480
+ 1: { digest: "sha256:3b53f6bc7b92dbda22ad01a97d1c69baaf567234ef35d364297f96c979bca184" },
475
481
  },
476
482
  },
477
483
  "zo.model.list": {
@@ -483,7 +489,7 @@ export const catalog = defineCatalog({
483
489
  "zo.oauth_app.create": {
484
490
  defaultVersion: 1,
485
491
  versions: {
486
- 1: { digest: "sha256:36487e5b7a08bfe7fb60077cbdf001f9e49bcdad39180a2f39f4f338198d23ce" },
492
+ 1: { digest: "sha256:d9216f3b7e1c6aa991dfd4572f88a4eff1f97e0bbd08bcaa9b28827d7536a828" },
487
493
  },
488
494
  },
489
495
  "zo.oauth_app.delete": {
@@ -507,7 +513,7 @@ export const catalog = defineCatalog({
507
513
  "zo.oauth_app.update": {
508
514
  defaultVersion: 1,
509
515
  versions: {
510
- 1: { digest: "sha256:f5478f52aaa077c985cab0e10a44a13c9ac72d6dedac67d6974ef831e5aded61" },
516
+ 1: { digest: "sha256:4b2d3c01b760b5007430f546a25fc645ad587fcc8aac0aacaf61bfcdab6c3d1f" },
511
517
  },
512
518
  },
513
519
  "zo.quota.get": {
@@ -727,7 +733,7 @@ export const catalog = defineCatalog({
727
733
  "zo.website.create": {
728
734
  defaultVersion: 1,
729
735
  versions: {
730
- 1: { digest: "sha256:8c7b48e80e39d01eb6fa121ba0a2688deba2f2ba7396dee8e3f583d7f6c884ff" },
736
+ 1: { digest: "sha256:1a383ed93cdc7acb59c8937a36be01157a90dba7923afc6ffc8304a5080475f2" },
731
737
  },
732
738
  },
733
739
  "zo.website.delete": {
@@ -739,19 +745,19 @@ export const catalog = defineCatalog({
739
745
  "zo.website.get": {
740
746
  defaultVersion: 1,
741
747
  versions: {
742
- 1: { digest: "sha256:e95171ac43bb4bf95e277a4c6777ee8061c728feb119cbfc2354dc45dfb82d49" },
748
+ 1: { digest: "sha256:2ecc0a4426f4cb62d99e7953c7cc2905417f1a97996ed79ad8b2fa5e539aea9c" },
743
749
  },
744
750
  },
745
751
  "zo.website.list": {
746
752
  defaultVersion: 1,
747
753
  versions: {
748
- 1: { digest: "sha256:1acce33b16bd903d94f40273da1785d694f99444facb40e166a061190db1bb74" },
754
+ 1: { digest: "sha256:a4c5d48b532bc4a9323278889bc14679b58e50f189225e2b191408b16cf0e5b2" },
749
755
  },
750
756
  },
751
757
  "zo.website.update": {
752
758
  defaultVersion: 1,
753
759
  versions: {
754
- 1: { digest: "sha256:99ad2a085bd283d6fee339a8c3c1adf1414065e7f0a5714f0292ba352c9d7655" },
760
+ 1: { digest: "sha256:954824c368536054d6b91ed7131afba47b09abd1e5f9cacfc7a89479f2f37133" },
755
761
  },
756
762
  },
757
763
  "zo.website_route.create": {
@@ -829,7 +835,7 @@ export const catalog = defineCatalog({
829
835
  "zo.workflow.get_run": {
830
836
  defaultVersion: 1,
831
837
  versions: {
832
- 1: { digest: "sha256:00478ddd31dbeb45aa4fd30e09eddfd5bec875dbf9257e5a412f51d54cc06e53" },
838
+ 1: { digest: "sha256:3064b3976db41d34bcabbdc4d709195eb7cb0fa9e5b3dfd7b55cf682e91720ab" },
833
839
  },
834
840
  },
835
841
  "zo.workflow.invoke": {
@@ -847,7 +853,7 @@ export const catalog = defineCatalog({
847
853
  "zo.workflow.list_runs": {
848
854
  defaultVersion: 1,
849
855
  versions: {
850
- 1: { digest: "sha256:aceef50f9aa81c86aee06efb7adfa831673879888d32e4e3b57ab16387f6cbee" },
856
+ 1: { digest: "sha256:ac1c9dc13fa389ef7a7458da1b2d7a749e7532264aa9f17c14028806fe7be968" },
851
857
  },
852
858
  },
853
859
  "zo.workflow.publish": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "generatorVersion": "0.1.0",
3
- "schemaDigest": "sha256:f3723f93d9d519ebe2517e16cb3db50c99b38e60b9705187006ada3eaeb4e391",
4
- "bundleDigest": "sha256:3a231dad9b11d51ce7019ce70c98d528eb3ee3144152814edc44a8c0ceaa1302",
3
+ "schemaDigest": "sha256:5efcff731683bd222f815032f63155a41134ba7ed47b8b63caa7736a2e5950a3",
4
+ "bundleDigest": "sha256:40f79e00f48091e3d1f779cea67334314930fe718bc9ce549b2385ea29c2a16e",
5
5
  "actions": [
6
6
  {
7
7
  "action": "zo.activity.list",
@@ -36,7 +36,7 @@
36
36
  {
37
37
  "action": "zo.agent.list_messages",
38
38
  "version": 1,
39
- "digest": "sha256:a8e34e154f63267fa02c162d32cd887f95eeac983693ea1c6570c6504ebe202d"
39
+ "digest": "sha256:983f22ac6e48618bb3290155e3d7723ae1be7e885f78f9135f3ee0f37e5d0d16"
40
40
  },
41
41
  {
42
42
  "action": "zo.agent.send",
@@ -51,22 +51,22 @@
51
51
  {
52
52
  "action": "zo.agent_session.get",
53
53
  "version": 1,
54
- "digest": "sha256:fa7d4538f2a14134318196e18081aca325cd991851561a50071e92808becdb1f"
54
+ "digest": "sha256:c9a0287765cc63f5c2681159cfbf66c1546a423fd3fdb2c21684169de7f29680"
55
55
  },
56
56
  {
57
57
  "action": "zo.agent_session.history",
58
58
  "version": 1,
59
- "digest": "sha256:1d5dc59be3ce5b5186b4f3675283d0a87ff4aed46374e2d419defefaa85e2758"
59
+ "digest": "sha256:0ec9eeab9cf92d991c5586cbb00eb01a9c56a9b0f81b1b3b8d372e2e70b9419a"
60
60
  },
61
61
  {
62
62
  "action": "zo.agent_session.list",
63
63
  "version": 1,
64
- "digest": "sha256:ccad299f85ad1e29daa8630f04f7844e9db5aff02940dbb700cb173bf25017a1"
64
+ "digest": "sha256:77d2dc953e6259fb131c0d2e219299589c4fbfdab41f4db90140108e91e661ca"
65
65
  },
66
66
  {
67
67
  "action": "zo.agent_session.list_workspace",
68
68
  "version": 1,
69
- "digest": "sha256:0c0023c827285b09c4e7fbb9d001c89faca96ee293d769568d77baf63885b0a2"
69
+ "digest": "sha256:332ee8b48ca75d74d5e09e4b71c030bca6ad9c3950b1d02ce532dfbb041116db"
70
70
  },
71
71
  {
72
72
  "action": "zo.billing.list_rates",
@@ -106,12 +106,12 @@
106
106
  {
107
107
  "action": "zo.connection.get",
108
108
  "version": 1,
109
- "digest": "sha256:5ca6347217eba21af2b37e1830df0252e5d4115a3f7ee4f9357bed5e11280861"
109
+ "digest": "sha256:888acd2e1feba5b19c1905857e5125329737f23ec450b85a4d63e1879b585cf2"
110
110
  },
111
111
  {
112
112
  "action": "zo.connection.list",
113
113
  "version": 1,
114
- "digest": "sha256:92aca1c5160f58db8d84f380e55f271730a7159e4ca3d2bddde8462adba18a30"
114
+ "digest": "sha256:980544a4939be631e0b12a1930bd7fa07266ee893055cb2187a97e75e791c6d7"
115
115
  },
116
116
  {
117
117
  "action": "zo.connection.register_resource",
@@ -266,12 +266,12 @@
266
266
  {
267
267
  "action": "zo.function.get",
268
268
  "version": 1,
269
- "digest": "sha256:8fefdcc1440b09264f2c0b0a31ef8f3cefb5f2fe79f0166341e7537addf89819"
269
+ "digest": "sha256:a7003bbcae500ade1da64eb0f61f5442119a59ec2ab0c8c402c9627b3d1dfffb"
270
270
  },
271
271
  {
272
272
  "action": "zo.function.get_run",
273
273
  "version": 1,
274
- "digest": "sha256:2505ec5258453629ea98a3d70911387096dbbd4c2f68d5c2c24ee5f32746eaca"
274
+ "digest": "sha256:e2ffa72539a3742262be01ce613f5da85c900f4d2c1a30358fbf3d08b6bc6ba0"
275
275
  },
276
276
  {
277
277
  "action": "zo.function.invoke",
@@ -286,7 +286,7 @@
286
286
  {
287
287
  "action": "zo.function.list_runs",
288
288
  "version": 1,
289
- "digest": "sha256:5afb66f0e9685192469f0fda5db8ea0cf49cf1a645ab23d22a03bc8698c8a7b4"
289
+ "digest": "sha256:4c4ca436fc7e5ef58880efeace4433508105f2f749b9609eb799609ffd648fa2"
290
290
  },
291
291
  {
292
292
  "action": "zo.function.publish_contract",
@@ -401,7 +401,12 @@
401
401
  {
402
402
  "action": "zo.message.get",
403
403
  "version": 1,
404
- "digest": "sha256:aadcb480b26c475386eb47a4694a413a0b118969638cd9bfd9d9e5d68b5f758e"
404
+ "digest": "sha256:ac04dbbd2642ad79c98bfd056cdef95a2db7538415dba5987ffc4adb2e4868dd"
405
+ },
406
+ {
407
+ "action": "zo.model.generate_text",
408
+ "version": 1,
409
+ "digest": "sha256:3b53f6bc7b92dbda22ad01a97d1c69baaf567234ef35d364297f96c979bca184"
405
410
  },
406
411
  {
407
412
  "action": "zo.model.list",
@@ -411,7 +416,7 @@
411
416
  {
412
417
  "action": "zo.oauth_app.create",
413
418
  "version": 1,
414
- "digest": "sha256:36487e5b7a08bfe7fb60077cbdf001f9e49bcdad39180a2f39f4f338198d23ce"
419
+ "digest": "sha256:d9216f3b7e1c6aa991dfd4572f88a4eff1f97e0bbd08bcaa9b28827d7536a828"
415
420
  },
416
421
  {
417
422
  "action": "zo.oauth_app.delete",
@@ -431,7 +436,7 @@
431
436
  {
432
437
  "action": "zo.oauth_app.update",
433
438
  "version": 1,
434
- "digest": "sha256:f5478f52aaa077c985cab0e10a44a13c9ac72d6dedac67d6974ef831e5aded61"
439
+ "digest": "sha256:4b2d3c01b760b5007430f546a25fc645ad587fcc8aac0aacaf61bfcdab6c3d1f"
435
440
  },
436
441
  {
437
442
  "action": "zo.quota.get",
@@ -631,7 +636,7 @@
631
636
  {
632
637
  "action": "zo.website.create",
633
638
  "version": 1,
634
- "digest": "sha256:8c7b48e80e39d01eb6fa121ba0a2688deba2f2ba7396dee8e3f583d7f6c884ff"
639
+ "digest": "sha256:1a383ed93cdc7acb59c8937a36be01157a90dba7923afc6ffc8304a5080475f2"
635
640
  },
636
641
  {
637
642
  "action": "zo.website.delete",
@@ -641,17 +646,17 @@
641
646
  {
642
647
  "action": "zo.website.get",
643
648
  "version": 1,
644
- "digest": "sha256:e95171ac43bb4bf95e277a4c6777ee8061c728feb119cbfc2354dc45dfb82d49"
649
+ "digest": "sha256:2ecc0a4426f4cb62d99e7953c7cc2905417f1a97996ed79ad8b2fa5e539aea9c"
645
650
  },
646
651
  {
647
652
  "action": "zo.website.list",
648
653
  "version": 1,
649
- "digest": "sha256:1acce33b16bd903d94f40273da1785d694f99444facb40e166a061190db1bb74"
654
+ "digest": "sha256:a4c5d48b532bc4a9323278889bc14679b58e50f189225e2b191408b16cf0e5b2"
650
655
  },
651
656
  {
652
657
  "action": "zo.website.update",
653
658
  "version": 1,
654
- "digest": "sha256:99ad2a085bd283d6fee339a8c3c1adf1414065e7f0a5714f0292ba352c9d7655"
659
+ "digest": "sha256:954824c368536054d6b91ed7131afba47b09abd1e5f9cacfc7a89479f2f37133"
655
660
  },
656
661
  {
657
662
  "action": "zo.website_route.create",
@@ -716,7 +721,7 @@
716
721
  {
717
722
  "action": "zo.workflow.get_run",
718
723
  "version": 1,
719
- "digest": "sha256:00478ddd31dbeb45aa4fd30e09eddfd5bec875dbf9257e5a412f51d54cc06e53"
724
+ "digest": "sha256:3064b3976db41d34bcabbdc4d709195eb7cb0fa9e5b3dfd7b55cf682e91720ab"
720
725
  },
721
726
  {
722
727
  "action": "zo.workflow.invoke",
@@ -731,7 +736,7 @@
731
736
  {
732
737
  "action": "zo.workflow.list_runs",
733
738
  "version": 1,
734
- "digest": "sha256:aceef50f9aa81c86aee06efb7adfa831673879888d32e4e3b57ab16387f6cbee"
739
+ "digest": "sha256:ac1c9dc13fa389ef7a7458da1b2d7a749e7532264aa9f17c14028806fe7be968"
735
740
  },
736
741
  {
737
742
  "action": "zo.workflow.publish",