@vm0/cli 9.244.8 → 9.245.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.
Files changed (100) hide show
  1. package/{agent-QLXX4WY7.js → agent-G4K3H6XM.js} +6 -5
  2. package/{agent-QLXX4WY7.js.map → agent-G4K3H6XM.js.map} +1 -1
  3. package/{banking-WY3J5BTJ.js → banking-EKOZ3Q5H.js} +4 -3
  4. package/{banking-WY3J5BTJ.js.map → banking-EKOZ3Q5H.js.map} +1 -1
  5. package/{chat-L3EFI2XJ.js → chat-LJVPQ6E3.js} +5 -4
  6. package/{chat-L3EFI2XJ.js.map → chat-LJVPQ6E3.js.map} +1 -1
  7. package/{chunk-TTP663DN.js → chunk-35SF4MIM.js} +2 -2
  8. package/{chunk-KMLBXZVR.js → chunk-3AV5UOJI.js} +2 -2
  9. package/{chunk-43PGP5OI.js → chunk-AKRDZBGF.js} +4 -4
  10. package/{chunk-JVIFZRZ7.js → chunk-C2X2AMNB.js} +3 -3
  11. package/{chunk-LHR5Z775.js → chunk-D7RUZAYZ.js} +2 -2
  12. package/{chunk-MX32FFQR.js → chunk-HFZVT4HJ.js} +60 -506
  13. package/chunk-HFZVT4HJ.js.map +1 -0
  14. package/{chunk-65MTNZ44.js → chunk-LNJWRJPF.js} +786 -1217
  15. package/chunk-LNJWRJPF.js.map +1 -0
  16. package/{chunk-WCRXAO2G.js → chunk-QO2ZPLKJ.js} +2 -2
  17. package/chunk-TLZUMBBR.js +678 -0
  18. package/chunk-TLZUMBBR.js.map +1 -0
  19. package/{chunk-MA37R4QS.js → chunk-WEEPG6HO.js} +3 -665
  20. package/chunk-WEEPG6HO.js.map +1 -0
  21. package/{computer-use-7FYLJXZS.js → computer-use-INB6UBIB.js} +4 -3
  22. package/{computer-use-7FYLJXZS.js.map → computer-use-INB6UBIB.js.map} +1 -1
  23. package/{connector-BSBQIFMQ.js → connector-P3EJMWEQ.js} +7 -6
  24. package/{connector-BSBQIFMQ.js.map → connector-P3EJMWEQ.js.map} +1 -1
  25. package/{credit-JBFJY5US.js → credit-4HVDTUJU.js} +5 -4
  26. package/{credit-JBFJY5US.js.map → credit-4HVDTUJU.js.map} +1 -1
  27. package/{developer-support-RUWSZBFP.js → developer-support-H2WWODQP.js} +4 -3
  28. package/{developer-support-RUWSZBFP.js.map → developer-support-H2WWODQP.js.map} +1 -1
  29. package/{doctor-YLD526OE.js → doctor-5J2UDQ7Y.js} +4 -3
  30. package/{doctor-YLD526OE.js.map → doctor-5J2UDQ7Y.js.map} +1 -1
  31. package/{generate-5EMJ3PE6.js → generate-ZQSGF4JD.js} +10 -8
  32. package/{generate-5EMJ3PE6.js.map → generate-ZQSGF4JD.js.map} +1 -1
  33. package/{github-36XCAIUP.js → github-L7OTQLJ3.js} +4 -3
  34. package/{github-36XCAIUP.js.map → github-L7OTQLJ3.js.map} +1 -1
  35. package/{goal-FRXLYRUG.js → goal-OD43U6LO.js} +4 -3
  36. package/{goal-FRXLYRUG.js.map → goal-OD43U6LO.js.map} +1 -1
  37. package/{host-X2KS3WTS.js → host-AHDILSME.js} +28 -7
  38. package/host-AHDILSME.js.map +1 -0
  39. package/index.js +4 -715
  40. package/index.js.map +1 -1
  41. package/{logs-WHQES7BY.js → logs-B5UAWP3H.js} +13 -14
  42. package/logs-B5UAWP3H.js.map +1 -0
  43. package/{mail-LOXCIZZN.js → mail-OLFTOSFS.js} +6 -5
  44. package/{mail-LOXCIZZN.js.map → mail-OLFTOSFS.js.map} +1 -1
  45. package/{maps-KQWCQLHW.js → maps-5275BTHE.js} +4 -3
  46. package/{maps-KQWCQLHW.js.map → maps-5275BTHE.js.map} +1 -1
  47. package/{model-2BBROTMX.js → model-3PJFWIGT.js} +5 -4
  48. package/{model-2BBROTMX.js.map → model-3PJFWIGT.js.map} +1 -1
  49. package/{model-provider-BOMTZ6JA.js → model-provider-MFTEUVUR.js} +5 -4
  50. package/{model-provider-BOMTZ6JA.js.map → model-provider-MFTEUVUR.js.map} +1 -1
  51. package/{org-SO7ELOV6.js → org-FYW5SKNL.js} +4 -3
  52. package/{org-SO7ELOV6.js.map → org-FYW5SKNL.js.map} +1 -1
  53. package/package.json +1 -1
  54. package/{phone-IYUG3RGY.js → phone-GPEGHEYZ.js} +4 -3
  55. package/{phone-IYUG3RGY.js.map → phone-GPEGHEYZ.js.map} +1 -1
  56. package/{preference-TGBWXIP7.js → preference-VZPSASBS.js} +4 -3
  57. package/{preference-TGBWXIP7.js.map → preference-VZPSASBS.js.map} +1 -1
  58. package/{resource-EA5OUVG4.js → resource-U2AKCUW6.js} +4 -3
  59. package/{resource-EA5OUVG4.js.map → resource-U2AKCUW6.js.map} +1 -1
  60. package/{scrape-2S3B33RA.js → scrape-75TPDRWU.js} +4 -3
  61. package/{scrape-2S3B33RA.js.map → scrape-75TPDRWU.js.map} +1 -1
  62. package/{search-LCGK3BJI.js → search-FTR3X5KB.js} +9 -10
  63. package/search-FTR3X5KB.js.map +1 -0
  64. package/{secret-M5C54VAT.js → secret-EDHHGJ74.js} +4 -3
  65. package/{secret-M5C54VAT.js.map → secret-EDHHGJ74.js.map} +1 -1
  66. package/{slack-FJV2NEOT.js → slack-HMY4W3TP.js} +4 -3
  67. package/{slack-FJV2NEOT.js.map → slack-HMY4W3TP.js.map} +1 -1
  68. package/{teams-XBLEN2XV.js → teams-FEBFKEOJ.js} +4 -3
  69. package/{teams-XBLEN2XV.js.map → teams-FEBFKEOJ.js.map} +1 -1
  70. package/{telegram-RE6IO7ZT.js → telegram-JXCTBHDN.js} +4 -3
  71. package/{telegram-RE6IO7ZT.js.map → telegram-JXCTBHDN.js.map} +1 -1
  72. package/{variable-5MVUR6U4.js → variable-X6MW44CV.js} +4 -3
  73. package/{variable-5MVUR6U4.js.map → variable-X6MW44CV.js.map} +1 -1
  74. package/{video-DIVG6CMM.js → video-HKMGD425.js} +6 -4
  75. package/{video-DIVG6CMM.js.map → video-HKMGD425.js.map} +1 -1
  76. package/{web-KVZL6WM4.js → web-PQCJRMF2.js} +7 -5
  77. package/{web-KVZL6WM4.js.map → web-PQCJRMF2.js.map} +1 -1
  78. package/{web-search-XNJH2FXZ.js → web-search-GE3BRO7E.js} +4 -3
  79. package/{web-search-XNJH2FXZ.js.map → web-search-GE3BRO7E.js.map} +1 -1
  80. package/{whoami-NQYYRWEE.js → whoami-FJVWNO4Z.js} +6 -5
  81. package/{whoami-NQYYRWEE.js.map → whoami-FJVWNO4Z.js.map} +1 -1
  82. package/{workflow-5CGPRRAY.js → workflow-CM6JMVRA.js} +4 -3
  83. package/{workflow-5CGPRRAY.js.map → workflow-CM6JMVRA.js.map} +1 -1
  84. package/zero.js +35 -35
  85. package/chunk-65MTNZ44.js.map +0 -1
  86. package/chunk-MA37R4QS.js.map +0 -1
  87. package/chunk-MPSVIFKZ.js +0 -240
  88. package/chunk-MPSVIFKZ.js.map +0 -1
  89. package/chunk-MX32FFQR.js.map +0 -1
  90. package/chunk-ZUSDQG2O.js +0 -50
  91. package/chunk-ZUSDQG2O.js.map +0 -1
  92. package/host-X2KS3WTS.js.map +0 -1
  93. package/logs-WHQES7BY.js.map +0 -1
  94. package/search-LCGK3BJI.js.map +0 -1
  95. /package/{chunk-TTP663DN.js.map → chunk-35SF4MIM.js.map} +0 -0
  96. /package/{chunk-KMLBXZVR.js.map → chunk-3AV5UOJI.js.map} +0 -0
  97. /package/{chunk-43PGP5OI.js.map → chunk-AKRDZBGF.js.map} +0 -0
  98. /package/{chunk-JVIFZRZ7.js.map → chunk-C2X2AMNB.js.map} +0 -0
  99. /package/{chunk-LHR5Z775.js.map → chunk-D7RUZAYZ.js.map} +0 -0
  100. /package/{chunk-WCRXAO2G.js.map → chunk-QO2ZPLKJ.js.map} +0 -0
@@ -6,13 +6,12 @@ import {
6
6
  } from "./chunk-DWWE7STW.js";
7
7
  import {
8
8
  authHeadersSchema,
9
- composeListItemSchema,
10
9
  connectorCatalogRefSchema,
11
- firewallPoliciesSchema,
12
- getEvents,
10
+ firewallsSchema,
13
11
  runnerGroupSchema,
12
+ searchZeroLogs,
14
13
  zeroAgentVisibilitySchema
15
- } from "./chunk-MX32FFQR.js";
14
+ } from "./chunk-HFZVT4HJ.js";
16
15
  import {
17
16
  apiErrorSchema,
18
17
  external_exports,
@@ -23,8 +22,12 @@ import {
23
22
  source_default,
24
23
  supportedRunModelSchema,
25
24
  upsertModelProviderRequestSchema,
26
- upsertModelProviderResponseSchema
27
- } from "./chunk-MA37R4QS.js";
25
+ upsertModelProviderResponseSchema,
26
+ withErrorHandler
27
+ } from "./chunk-WEEPG6HO.js";
28
+ import {
29
+ Command
30
+ } from "./chunk-B3W2RUBP.js";
28
31
  import {
29
32
  __commonJS,
30
33
  __require,
@@ -6955,14 +6958,14 @@ var require_parser = __commonJS({
6955
6958
  case "scalar":
6956
6959
  case "single-quoted-scalar":
6957
6960
  case "double-quoted-scalar": {
6958
- const fs2 = this.flowScalar(this.type);
6961
+ const fs = this.flowScalar(this.type);
6959
6962
  if (atNextItem || it.value) {
6960
- map.items.push({ start, key: fs2, sep: [] });
6963
+ map.items.push({ start, key: fs, sep: [] });
6961
6964
  this.onKeyLine = true;
6962
6965
  } else if (it.sep) {
6963
- this.stack.push(fs2);
6966
+ this.stack.push(fs);
6964
6967
  } else {
6965
- Object.assign(it, { key: fs2, sep: [] });
6968
+ Object.assign(it, { key: fs, sep: [] });
6966
6969
  this.onKeyLine = true;
6967
6970
  }
6968
6971
  return;
@@ -7090,13 +7093,13 @@ var require_parser = __commonJS({
7090
7093
  case "scalar":
7091
7094
  case "single-quoted-scalar":
7092
7095
  case "double-quoted-scalar": {
7093
- const fs2 = this.flowScalar(this.type);
7096
+ const fs = this.flowScalar(this.type);
7094
7097
  if (!it || it.value)
7095
- fc.items.push({ start: [], key: fs2, sep: [] });
7098
+ fc.items.push({ start: [], key: fs, sep: [] });
7096
7099
  else if (it.sep)
7097
- this.stack.push(fs2);
7100
+ this.stack.push(fs);
7098
7101
  else
7099
- Object.assign(it, { key: fs2, sep: [] });
7102
+ Object.assign(it, { key: fs, sep: [] });
7100
7103
  return;
7101
7104
  }
7102
7105
  case "flow-map-end":
@@ -7406,401 +7409,89 @@ var require_dist = __commonJS({
7406
7409
  }
7407
7410
  });
7408
7411
 
7409
- // ../../node_modules/.pnpm/dotenv@17.3.1/node_modules/dotenv/package.json
7410
- var require_package = __commonJS({
7411
- "../../node_modules/.pnpm/dotenv@17.3.1/node_modules/dotenv/package.json"(exports, module) {
7412
- module.exports = {
7413
- name: "dotenv",
7414
- version: "17.3.1",
7415
- description: "Loads environment variables from .env file",
7416
- main: "lib/main.js",
7417
- types: "lib/main.d.ts",
7418
- exports: {
7419
- ".": {
7420
- types: "./lib/main.d.ts",
7421
- require: "./lib/main.js",
7422
- default: "./lib/main.js"
7423
- },
7424
- "./config": "./config.js",
7425
- "./config.js": "./config.js",
7426
- "./lib/env-options": "./lib/env-options.js",
7427
- "./lib/env-options.js": "./lib/env-options.js",
7428
- "./lib/cli-options": "./lib/cli-options.js",
7429
- "./lib/cli-options.js": "./lib/cli-options.js",
7430
- "./package.json": "./package.json"
7431
- },
7432
- scripts: {
7433
- "dts-check": "tsc --project tests/types/tsconfig.json",
7434
- lint: "standard",
7435
- pretest: "npm run lint && npm run dts-check",
7436
- test: "tap run tests/**/*.js --allow-empty-coverage --disable-coverage --timeout=60000",
7437
- "test:coverage": "tap run tests/**/*.js --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",
7438
- prerelease: "npm test",
7439
- release: "standard-version"
7440
- },
7441
- repository: {
7442
- type: "git",
7443
- url: "git://github.com/motdotla/dotenv.git"
7444
- },
7445
- homepage: "https://github.com/motdotla/dotenv#readme",
7446
- funding: "https://dotenvx.com",
7447
- keywords: [
7448
- "dotenv",
7449
- "env",
7450
- ".env",
7451
- "environment",
7452
- "variables",
7453
- "config",
7454
- "settings"
7455
- ],
7456
- readmeFilename: "README.md",
7457
- license: "BSD-2-Clause",
7458
- devDependencies: {
7459
- "@types/node": "^18.11.3",
7460
- decache: "^4.6.2",
7461
- sinon: "^14.0.1",
7462
- standard: "^17.0.0",
7463
- "standard-version": "^9.5.0",
7464
- tap: "^19.2.0",
7465
- typescript: "^4.8.4"
7466
- },
7467
- engines: {
7468
- node: ">=12"
7469
- },
7470
- browser: {
7471
- fs: false
7472
- }
7473
- };
7474
- }
7475
- });
7476
-
7477
- // ../../node_modules/.pnpm/dotenv@17.3.1/node_modules/dotenv/lib/main.js
7478
- var require_main = __commonJS({
7479
- "../../node_modules/.pnpm/dotenv@17.3.1/node_modules/dotenv/lib/main.js"(exports, module) {
7480
- "use strict";
7481
- init_esm_shims();
7482
- var fs2 = __require("fs");
7483
- var path = __require("path");
7484
- var os = __require("os");
7485
- var crypto = __require("crypto");
7486
- var packageJson = require_package();
7487
- var version = packageJson.version;
7488
- var TIPS = [
7489
- "\u{1F510} encrypt with Dotenvx: https://dotenvx.com",
7490
- "\u{1F510} prevent committing .env to code: https://dotenvx.com/precommit",
7491
- "\u{1F510} prevent building .env in docker: https://dotenvx.com/prebuild",
7492
- "\u{1F916} agentic secret storage: https://dotenvx.com/as2",
7493
- "\u26A1\uFE0F secrets for agents: https://dotenvx.com/as2",
7494
- "\u{1F6E1}\uFE0F auth for agents: https://vestauth.com",
7495
- "\u{1F6E0}\uFE0F run anywhere with `dotenvx run -- yourcommand`",
7496
- "\u2699\uFE0F specify custom .env file path with { path: '/custom/path/.env' }",
7497
- "\u2699\uFE0F enable debug logging with { debug: true }",
7498
- "\u2699\uFE0F override existing env vars with { override: true }",
7499
- "\u2699\uFE0F suppress all logs with { quiet: true }",
7500
- "\u2699\uFE0F write to custom object with { processEnv: myObject }",
7501
- "\u2699\uFE0F load multiple .env files with { path: ['.env.local', '.env'] }"
7502
- ];
7503
- function _getRandomTip() {
7504
- return TIPS[Math.floor(Math.random() * TIPS.length)];
7505
- }
7506
- function parseBoolean(value) {
7507
- if (typeof value === "string") {
7508
- return !["false", "0", "no", "off", ""].includes(value.toLowerCase());
7509
- }
7510
- return Boolean(value);
7511
- }
7512
- function supportsAnsi() {
7513
- return process.stdout.isTTY;
7514
- }
7515
- function dim(text) {
7516
- return supportsAnsi() ? `\x1B[2m${text}\x1B[0m` : text;
7517
- }
7518
- var LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
7519
- function parse(src) {
7520
- const obj = {};
7521
- let lines = src.toString();
7522
- lines = lines.replace(/\r\n?/mg, "\n");
7523
- let match;
7524
- while ((match = LINE.exec(lines)) != null) {
7525
- const key = match[1];
7526
- let value = match[2] || "";
7527
- value = value.trim();
7528
- const maybeQuote = value[0];
7529
- value = value.replace(/^(['"`])([\s\S]*)\1$/mg, "$2");
7530
- if (maybeQuote === '"') {
7531
- value = value.replace(/\\n/g, "\n");
7532
- value = value.replace(/\\r/g, "\r");
7533
- }
7534
- obj[key] = value;
7535
- }
7536
- return obj;
7537
- }
7538
- function _parseVault(options) {
7539
- options = options || {};
7540
- const vaultPath = _vaultPath(options);
7541
- options.path = vaultPath;
7542
- const result = DotenvModule.configDotenv(options);
7543
- if (!result.parsed) {
7544
- const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`);
7545
- err.code = "MISSING_DATA";
7546
- throw err;
7547
- }
7548
- const keys = _dotenvKey(options).split(",");
7549
- const length = keys.length;
7550
- let decrypted;
7551
- for (let i = 0; i < length; i++) {
7552
- try {
7553
- const key = keys[i].trim();
7554
- const attrs = _instructions(result, key);
7555
- decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key);
7556
- break;
7557
- } catch (error) {
7558
- if (i + 1 >= length) {
7559
- throw error;
7560
- }
7561
- }
7562
- }
7563
- return DotenvModule.parse(decrypted);
7564
- }
7565
- function _warn(message) {
7566
- console.error(`[dotenv@${version}][WARN] ${message}`);
7567
- }
7568
- function _debug(message) {
7569
- console.log(`[dotenv@${version}][DEBUG] ${message}`);
7570
- }
7571
- function _log(message) {
7572
- console.log(`[dotenv@${version}] ${message}`);
7573
- }
7574
- function _dotenvKey(options) {
7575
- if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {
7576
- return options.DOTENV_KEY;
7577
- }
7578
- if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {
7579
- return process.env.DOTENV_KEY;
7580
- }
7581
- return "";
7582
- }
7583
- function _instructions(result, dotenvKey) {
7584
- let uri;
7585
- try {
7586
- uri = new URL(dotenvKey);
7587
- } catch (error) {
7588
- if (error.code === "ERR_INVALID_URL") {
7589
- const err = new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");
7590
- err.code = "INVALID_DOTENV_KEY";
7591
- throw err;
7592
- }
7593
- throw error;
7594
- }
7595
- const key = uri.password;
7596
- if (!key) {
7597
- const err = new Error("INVALID_DOTENV_KEY: Missing key part");
7598
- err.code = "INVALID_DOTENV_KEY";
7599
- throw err;
7600
- }
7601
- const environment = uri.searchParams.get("environment");
7602
- if (!environment) {
7603
- const err = new Error("INVALID_DOTENV_KEY: Missing environment part");
7604
- err.code = "INVALID_DOTENV_KEY";
7605
- throw err;
7606
- }
7607
- const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`;
7608
- const ciphertext = result.parsed[environmentKey];
7609
- if (!ciphertext) {
7610
- const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`);
7611
- err.code = "NOT_FOUND_DOTENV_ENVIRONMENT";
7612
- throw err;
7613
- }
7614
- return { ciphertext, key };
7615
- }
7616
- function _vaultPath(options) {
7617
- let possibleVaultPath = null;
7618
- if (options && options.path && options.path.length > 0) {
7619
- if (Array.isArray(options.path)) {
7620
- for (const filepath of options.path) {
7621
- if (fs2.existsSync(filepath)) {
7622
- possibleVaultPath = filepath.endsWith(".vault") ? filepath : `${filepath}.vault`;
7623
- }
7624
- }
7625
- } else {
7626
- possibleVaultPath = options.path.endsWith(".vault") ? options.path : `${options.path}.vault`;
7627
- }
7628
- } else {
7629
- possibleVaultPath = path.resolve(process.cwd(), ".env.vault");
7630
- }
7631
- if (fs2.existsSync(possibleVaultPath)) {
7632
- return possibleVaultPath;
7633
- }
7634
- return null;
7635
- }
7636
- function _resolveHome(envPath) {
7637
- return envPath[0] === "~" ? path.join(os.homedir(), envPath.slice(1)) : envPath;
7638
- }
7639
- function _configVault(options) {
7640
- const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || options && options.debug);
7641
- const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || options && options.quiet);
7642
- if (debug || !quiet) {
7643
- _log("Loading env from encrypted .env.vault");
7644
- }
7645
- const parsed = DotenvModule._parseVault(options);
7646
- let processEnv = process.env;
7647
- if (options && options.processEnv != null) {
7648
- processEnv = options.processEnv;
7649
- }
7650
- DotenvModule.populate(processEnv, parsed, options);
7651
- return { parsed };
7652
- }
7653
- function configDotenv(options) {
7654
- const dotenvPath = path.resolve(process.cwd(), ".env");
7655
- let encoding = "utf8";
7656
- let processEnv = process.env;
7657
- if (options && options.processEnv != null) {
7658
- processEnv = options.processEnv;
7659
- }
7660
- let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || options && options.debug);
7661
- let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || options && options.quiet);
7662
- if (options && options.encoding) {
7663
- encoding = options.encoding;
7664
- } else {
7665
- if (debug) {
7666
- _debug("No encoding is specified. UTF-8 is used by default");
7667
- }
7668
- }
7669
- let optionPaths = [dotenvPath];
7670
- if (options && options.path) {
7671
- if (!Array.isArray(options.path)) {
7672
- optionPaths = [_resolveHome(options.path)];
7673
- } else {
7674
- optionPaths = [];
7675
- for (const filepath of options.path) {
7676
- optionPaths.push(_resolveHome(filepath));
7677
- }
7678
- }
7679
- }
7680
- let lastError;
7681
- const parsedAll = {};
7682
- for (const path2 of optionPaths) {
7683
- try {
7684
- const parsed = DotenvModule.parse(fs2.readFileSync(path2, { encoding }));
7685
- DotenvModule.populate(parsedAll, parsed, options);
7686
- } catch (e) {
7687
- if (debug) {
7688
- _debug(`Failed to load ${path2} ${e.message}`);
7689
- }
7690
- lastError = e;
7691
- }
7692
- }
7693
- const populated = DotenvModule.populate(processEnv, parsedAll, options);
7694
- debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug);
7695
- quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet);
7696
- if (debug || !quiet) {
7697
- const keysCount = Object.keys(populated).length;
7698
- const shortPaths = [];
7699
- for (const filePath of optionPaths) {
7700
- try {
7701
- const relative = path.relative(process.cwd(), filePath);
7702
- shortPaths.push(relative);
7703
- } catch (e) {
7704
- if (debug) {
7705
- _debug(`Failed to load ${filePath} ${e.message}`);
7706
- }
7707
- lastError = e;
7708
- }
7709
- }
7710
- _log(`injecting env (${keysCount}) from ${shortPaths.join(",")} ${dim(`-- tip: ${_getRandomTip()}`)}`);
7711
- }
7712
- if (lastError) {
7713
- return { parsed: parsedAll, error: lastError };
7714
- } else {
7715
- return { parsed: parsedAll };
7716
- }
7717
- }
7718
- function config(options) {
7719
- if (_dotenvKey(options).length === 0) {
7720
- return DotenvModule.configDotenv(options);
7721
- }
7722
- const vaultPath = _vaultPath(options);
7723
- if (!vaultPath) {
7724
- _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`);
7725
- return DotenvModule.configDotenv(options);
7726
- }
7727
- return DotenvModule._configVault(options);
7728
- }
7729
- function decrypt(encrypted, keyStr) {
7730
- const key = Buffer.from(keyStr.slice(-64), "hex");
7731
- let ciphertext = Buffer.from(encrypted, "base64");
7732
- const nonce = ciphertext.subarray(0, 12);
7733
- const authTag = ciphertext.subarray(-16);
7734
- ciphertext = ciphertext.subarray(12, -16);
7735
- try {
7736
- const aesgcm = crypto.createDecipheriv("aes-256-gcm", key, nonce);
7737
- aesgcm.setAuthTag(authTag);
7738
- return `${aesgcm.update(ciphertext)}${aesgcm.final()}`;
7739
- } catch (error) {
7740
- const isRange = error instanceof RangeError;
7741
- const invalidKeyLength = error.message === "Invalid key length";
7742
- const decryptionFailed = error.message === "Unsupported state or unable to authenticate data";
7743
- if (isRange || invalidKeyLength) {
7744
- const err = new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");
7745
- err.code = "INVALID_DOTENV_KEY";
7746
- throw err;
7747
- } else if (decryptionFailed) {
7748
- const err = new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");
7749
- err.code = "DECRYPTION_FAILED";
7750
- throw err;
7751
- } else {
7752
- throw error;
7753
- }
7754
- }
7412
+ // src/lib/utils/time-parser.ts
7413
+ init_esm_shims();
7414
+ var ISO_8601_PATTERN = /^(\d{4})-(\d{2})-(\d{2})(?:[Tt](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,9})?)?(?:[Zz]|[+-]\d{2}:?\d{2})?)?$/;
7415
+ var DAYS_BY_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
7416
+ var MAX_DATE_TIMESTAMP_MS = 864e13;
7417
+ function parseTime(timeStr) {
7418
+ const relativeMatch = timeStr.match(/^(\d+)([smhdw])$/);
7419
+ if (relativeMatch) {
7420
+ const value = Number(relativeMatch[1]);
7421
+ const unit = relativeMatch[2];
7422
+ const timestamp2 = parseRelativeTime(value, unit);
7423
+ if (timestamp2 !== void 0) {
7424
+ return timestamp2;
7755
7425
  }
7756
- function populate(processEnv, parsed, options = {}) {
7757
- const debug = Boolean(options && options.debug);
7758
- const override = Boolean(options && options.override);
7759
- const populated = {};
7760
- if (typeof parsed !== "object") {
7761
- const err = new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");
7762
- err.code = "OBJECT_REQUIRED";
7763
- throw err;
7764
- }
7765
- for (const key of Object.keys(parsed)) {
7766
- if (Object.prototype.hasOwnProperty.call(processEnv, key)) {
7767
- if (override === true) {
7768
- processEnv[key] = parsed[key];
7769
- populated[key] = parsed[key];
7770
- }
7771
- if (debug) {
7772
- if (override === true) {
7773
- _debug(`"${key}" is already defined and WAS overwritten`);
7774
- } else {
7775
- _debug(`"${key}" is already defined and was NOT overwritten`);
7776
- }
7777
- }
7778
- } else {
7779
- processEnv[key] = parsed[key];
7780
- populated[key] = parsed[key];
7781
- }
7782
- }
7783
- return populated;
7426
+ }
7427
+ if (/^\d+$/.test(timeStr)) {
7428
+ const rawTimestamp = Number(timeStr);
7429
+ const timestamp2 = rawTimestamp < 1e10 ? rawTimestamp * 1e3 : rawTimestamp;
7430
+ if (isValidTimestamp(timestamp2)) {
7431
+ return timestamp2;
7784
7432
  }
7785
- var DotenvModule = {
7786
- configDotenv,
7787
- _configVault,
7788
- _parseVault,
7789
- config,
7790
- decrypt,
7791
- parse,
7792
- populate
7793
- };
7794
- module.exports.configDotenv = DotenvModule.configDotenv;
7795
- module.exports._configVault = DotenvModule._configVault;
7796
- module.exports._parseVault = DotenvModule._parseVault;
7797
- module.exports.config = DotenvModule.config;
7798
- module.exports.decrypt = DotenvModule.decrypt;
7799
- module.exports.parse = DotenvModule.parse;
7800
- module.exports.populate = DotenvModule.populate;
7801
- module.exports = DotenvModule;
7802
7433
  }
7803
- });
7434
+ const timestamp = parseIsoTime(timeStr);
7435
+ if (timestamp !== void 0) {
7436
+ return timestamp;
7437
+ }
7438
+ throw new Error(
7439
+ `Invalid time format: "${timeStr}". Supported formats: relative (5m, 2h, 1d), ISO 8601 (2024-01-15T10:30:00Z), Unix timestamp`
7440
+ );
7441
+ }
7442
+ function parseIsoTime(timeStr) {
7443
+ const match = ISO_8601_PATTERN.exec(timeStr);
7444
+ if (!match) {
7445
+ return void 0;
7446
+ }
7447
+ const year = Number(match[1]);
7448
+ const month = Number(match[2]);
7449
+ const day = Number(match[3]);
7450
+ const hour = match[4] ? Number(match[4]) : 0;
7451
+ const minute = match[5] ? Number(match[5]) : 0;
7452
+ const second = match[6] ? Number(match[6]) : 0;
7453
+ if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day) || !Number.isInteger(hour) || !Number.isInteger(minute) || !Number.isInteger(second) || month < 1 || month > 12 || day < 1 || day > daysInMonth(year, month) || hour > 23 || minute > 59 || second > 59) {
7454
+ return void 0;
7455
+ }
7456
+ const timestamp = new Date(timeStr).getTime();
7457
+ return isValidTimestamp(timestamp) ? timestamp : void 0;
7458
+ }
7459
+ function daysInMonth(year, month) {
7460
+ if (month === 2) {
7461
+ return isLeapYear(year) ? 29 : 28;
7462
+ }
7463
+ return DAYS_BY_MONTH[month - 1] ?? 0;
7464
+ }
7465
+ function isLeapYear(year) {
7466
+ return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
7467
+ }
7468
+ function parseRelativeTime(value, unit) {
7469
+ if (!Number.isSafeInteger(value)) {
7470
+ return void 0;
7471
+ }
7472
+ const now = Date.now();
7473
+ const multipliers = {
7474
+ s: 1e3,
7475
+ // seconds
7476
+ m: 60 * 1e3,
7477
+ // minutes
7478
+ h: 60 * 60 * 1e3,
7479
+ // hours
7480
+ d: 24 * 60 * 60 * 1e3,
7481
+ // days
7482
+ w: 7 * 24 * 60 * 60 * 1e3
7483
+ // weeks
7484
+ };
7485
+ const multiplier = multipliers[unit];
7486
+ if (!multiplier) {
7487
+ throw new Error(`Unknown time unit: ${unit}`);
7488
+ }
7489
+ const timestamp = now - value * multiplier;
7490
+ return isValidTimestamp(timestamp) ? timestamp : void 0;
7491
+ }
7492
+ function isValidTimestamp(timestamp) {
7493
+ return Number.isSafeInteger(timestamp) && Math.abs(timestamp) <= MAX_DATE_TIMESTAMP_MS;
7494
+ }
7804
7495
 
7805
7496
  // ../../packages/core/src/frameworks.ts
7806
7497
  init_esm_shims();
@@ -7844,57 +7535,6 @@ init_esm_shims();
7844
7535
 
7845
7536
  // ../../packages/core/src/variable-expander.ts
7846
7537
  init_esm_shims();
7847
- var VARIABLE_PATTERN = /\$\{\{\s*(env|vars|secrets)\.([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/g;
7848
- function extractVariableReferencesFromString(value) {
7849
- const refs = [];
7850
- const matches = value.matchAll(VARIABLE_PATTERN);
7851
- for (const match of matches) {
7852
- const source = match[1];
7853
- const name = match[2];
7854
- refs.push({ source, name });
7855
- }
7856
- return refs;
7857
- }
7858
- function extractVariableReferences(obj) {
7859
- const refs = [];
7860
- const seen = /* @__PURE__ */ new Set();
7861
- function scan(value) {
7862
- if (typeof value === "string") {
7863
- const stringRefs = extractVariableReferencesFromString(value);
7864
- for (const ref of stringRefs) {
7865
- const key = `${ref.source}.${ref.name}`;
7866
- if (!seen.has(key)) {
7867
- seen.add(key);
7868
- refs.push(ref);
7869
- }
7870
- }
7871
- } else if (Array.isArray(value)) {
7872
- for (const item of value) {
7873
- scan(item);
7874
- }
7875
- } else if (value !== null && typeof value === "object") {
7876
- for (const val of Object.values(value)) {
7877
- scan(val);
7878
- }
7879
- }
7880
- }
7881
- scan(obj);
7882
- return refs;
7883
- }
7884
- function groupVariablesBySource(refs) {
7885
- const groups = {
7886
- env: [],
7887
- vars: [],
7888
- secrets: []
7889
- };
7890
- for (const ref of refs) {
7891
- groups[ref.source].push(ref);
7892
- }
7893
- return groups;
7894
- }
7895
- function extractAndGroupVariables(obj) {
7896
- return groupVariablesBySource(extractVariableReferences(obj));
7897
- }
7898
7538
 
7899
7539
  // ../../packages/core/src/usage-source-bucket.ts
7900
7540
  init_esm_shims();
@@ -10845,9 +10485,235 @@ var desktopAuthConsumeContract = c3.router({
10845
10485
  }
10846
10486
  });
10847
10487
 
10848
- // ../../packages/api-contracts/src/contracts/zero-user-model-preference.ts
10488
+ // ../../packages/api-contracts/src/contracts/composes.ts
10849
10489
  init_esm_shims();
10850
10490
  var c4 = initContract();
10491
+ var MOUNT_PATH_TEMPLATE = "${{ working_dir }}";
10492
+ var composeVersionQuerySchema = external_exports.string().min(1, "Missing version query parameter").regex(
10493
+ /^[a-f0-9]{8,64}$|^latest$/i,
10494
+ "Version must be 8-64 hex characters or 'latest'"
10495
+ );
10496
+ var AGENT_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}[a-zA-Z0-9]$/;
10497
+ var agentNameSchema = external_exports.string().min(3, "Agent name must be at least 3 characters").max(64, "Agent name must be 64 characters or less").regex(
10498
+ AGENT_NAME_REGEX,
10499
+ "Agent name must start and end with letter or number, and contain only letters, numbers, and hyphens"
10500
+ );
10501
+ var volumeConfigSchema = external_exports.object({
10502
+ name: external_exports.string().min(1, "Volume name is required"),
10503
+ version: external_exports.string().min(1, "Volume version is required"),
10504
+ /** When true, skip mounting without error if volume doesn't exist */
10505
+ optional: external_exports.boolean().optional()
10506
+ });
10507
+ var mountPathSchema = external_exports.string().min(1, "mount_path cannot be empty").refine((val) => {
10508
+ return val === MOUNT_PATH_TEMPLATE || val.startsWith("/");
10509
+ }, "mount_path must be an absolute path or ${{ working_dir }}");
10510
+ var artifactConfigSchema = external_exports.object({
10511
+ name: external_exports.string().min(1, "Artifact name is required"),
10512
+ version: external_exports.string().min(1).optional(),
10513
+ mount_path: mountPathSchema.optional()
10514
+ });
10515
+ var artifactsArraySchema = external_exports.array(artifactConfigSchema).refine((items) => {
10516
+ const names = items.map((i) => {
10517
+ return i.name;
10518
+ });
10519
+ return new Set(names).size === names.length;
10520
+ }, "Artifact names must be unique");
10521
+ var agentFirewallsMapSchema = external_exports.record(
10522
+ external_exports.string(),
10523
+ external_exports.object({
10524
+ permissions: external_exports.union([external_exports.literal("all"), external_exports.array(external_exports.string()).min(1)])
10525
+ })
10526
+ );
10527
+ var legacyAgentFirewallsSchema = external_exports.union([
10528
+ agentFirewallsMapSchema,
10529
+ firewallsSchema
10530
+ ]);
10531
+ var agentDefinitionSchema = external_exports.object({
10532
+ description: external_exports.string().optional(),
10533
+ framework: external_exports.enum(["claude-code", "codex"]),
10534
+ volumes: external_exports.array(external_exports.string()).optional(),
10535
+ environment: external_exports.record(external_exports.string(), external_exports.string()).optional(),
10536
+ /**
10537
+ * Path to instructions file (e.g., AGENTS.md).
10538
+ * Auto-uploaded as volume and mounted at /home/user/.claude/CLAUDE.md
10539
+ */
10540
+ instructions: external_exports.string().min(1, "Instructions path cannot be empty").refine((val) => {
10541
+ return !val.includes("..") && !val.startsWith("/") && !val.startsWith("\\");
10542
+ }, "Instructions path must be a relative path without '..' segments").optional(),
10543
+ /**
10544
+ * @deprecated Skills are no longer processed by the CLI path. Declare
10545
+ * mounts via `volumes:` / `--volume` instead. Field retained as optional
10546
+ * so older CLI clients posting `skills:` are not rejected; server strips
10547
+ * the field before persisting compose content.
10548
+ */
10549
+ skills: external_exports.array(external_exports.string()).optional(),
10550
+ /**
10551
+ * Route this agent to a self-hosted runner instead of E2B.
10552
+ * When specified, runs will be queued for the specified runner group.
10553
+ */
10554
+ experimental_runner: external_exports.object({
10555
+ group: external_exports.string().regex(
10556
+ /^[a-z0-9-]+\/[a-z0-9-]+$/,
10557
+ "Runner group must be in vm0/<name> format (e.g., vm0/production)"
10558
+ )
10559
+ }).optional(),
10560
+ /**
10561
+ * VM profile for resource allocation (e.g., "vm0/default").
10562
+ * Determines rootfs image and VM resources (vCPU, memory).
10563
+ * Defaults to "vm0/default" when omitted.
10564
+ */
10565
+ experimental_profile: external_exports.string().regex(
10566
+ /^[a-z0-9-]+\/[a-z0-9-]+$/,
10567
+ "Profile must be in org/name format (e.g., vm0/default)"
10568
+ ).optional(),
10569
+ /**
10570
+ * External firewall rules for proxy-side token replacement.
10571
+ * Map format: { slack: { permissions: [...] | "all" } }
10572
+ * Resolved to full ExpandedFirewallConfig[] at runtime.
10573
+ */
10574
+ firewalls: agentFirewallsMapSchema.optional()
10575
+ });
10576
+ var agentComposeContentSchema = external_exports.object({
10577
+ version: external_exports.string().min(1, "Version is required"),
10578
+ agents: external_exports.record(external_exports.string(), agentDefinitionSchema),
10579
+ volumes: external_exports.record(external_exports.string(), volumeConfigSchema).optional(),
10580
+ artifacts: artifactsArraySchema.optional()
10581
+ });
10582
+ var agentComposeApiContentSchema = external_exports.object({
10583
+ version: external_exports.string().min(1, "Version is required"),
10584
+ agents: external_exports.record(
10585
+ external_exports.string(),
10586
+ agentDefinitionSchema.extend({
10587
+ // Legacy: older compose versions may have this field (map or expanded array).
10588
+ // Accepted for backward compat but ignored at runtime.
10589
+ firewalls: legacyAgentFirewallsSchema.optional()
10590
+ })
10591
+ ),
10592
+ volumes: external_exports.record(external_exports.string(), volumeConfigSchema).optional(),
10593
+ artifacts: artifactsArraySchema.optional()
10594
+ });
10595
+ var composeResponseSchema = external_exports.object({
10596
+ id: external_exports.string(),
10597
+ name: external_exports.string(),
10598
+ headVersionId: external_exports.string().nullable(),
10599
+ content: agentComposeApiContentSchema.nullable(),
10600
+ createdAt: external_exports.string(),
10601
+ updatedAt: external_exports.string()
10602
+ });
10603
+ var createComposeResponseSchema = external_exports.object({
10604
+ composeId: external_exports.string(),
10605
+ name: external_exports.string(),
10606
+ versionId: external_exports.string(),
10607
+ action: external_exports.enum(["created", "existing"]),
10608
+ updatedAt: external_exports.string()
10609
+ });
10610
+ var composesMainContract = c4.router({
10611
+ /**
10612
+ * GET /api/agent/composes?name={name}&org={org}
10613
+ * Get agent compose by name with HEAD version content
10614
+ * If org is not provided, uses the authenticated user's default org
10615
+ */
10616
+ getByName: {
10617
+ method: "GET",
10618
+ path: "/api/agent/composes",
10619
+ headers: authHeadersSchema,
10620
+ query: external_exports.object({
10621
+ name: external_exports.string().min(1, "Missing name query parameter")
10622
+ }),
10623
+ responses: {
10624
+ 200: composeResponseSchema,
10625
+ 400: apiErrorSchema,
10626
+ 401: apiErrorSchema,
10627
+ 403: apiErrorSchema,
10628
+ 404: apiErrorSchema
10629
+ },
10630
+ summary: "Get agent compose by name"
10631
+ },
10632
+ /**
10633
+ * POST /api/agent/composes
10634
+ * Create or update an agent compose version
10635
+ *
10636
+ * Returns 201 when a new compose is created, 200 when updating an existing compose.
10637
+ * The action field indicates whether a new version was created or an existing one reused.
10638
+ */
10639
+ create: {
10640
+ method: "POST",
10641
+ path: "/api/agent/composes",
10642
+ headers: authHeadersSchema,
10643
+ body: external_exports.object({
10644
+ content: agentComposeApiContentSchema
10645
+ }),
10646
+ responses: {
10647
+ 200: createComposeResponseSchema,
10648
+ 201: createComposeResponseSchema,
10649
+ 400: apiErrorSchema,
10650
+ 401: apiErrorSchema,
10651
+ 403: apiErrorSchema
10652
+ },
10653
+ summary: "Create or update agent compose version"
10654
+ }
10655
+ });
10656
+ var composesByIdContract = c4.router({
10657
+ /**
10658
+ * GET /api/agent/composes/:id
10659
+ * Get agent compose by ID with HEAD version content
10660
+ */
10661
+ getById: {
10662
+ method: "GET",
10663
+ path: "/api/agent/composes/:id",
10664
+ headers: authHeadersSchema,
10665
+ pathParams: external_exports.object({
10666
+ id: external_exports.string().uuid("Compose ID must be a valid UUID")
10667
+ }),
10668
+ responses: {
10669
+ 200: composeResponseSchema,
10670
+ 400: apiErrorSchema,
10671
+ 401: apiErrorSchema,
10672
+ 403: apiErrorSchema,
10673
+ 404: apiErrorSchema
10674
+ },
10675
+ summary: "Get agent compose by ID"
10676
+ }
10677
+ });
10678
+ var composesVersionsContract = c4.router({
10679
+ /**
10680
+ * GET /api/agent/composes/versions?composeId={id}&version={hash|tag}
10681
+ * Resolve a version specifier to a full version ID
10682
+ */
10683
+ resolveVersion: {
10684
+ method: "GET",
10685
+ path: "/api/agent/composes/versions",
10686
+ headers: authHeadersSchema,
10687
+ query: external_exports.object({
10688
+ composeId: external_exports.string().min(1, "Missing composeId query parameter"),
10689
+ version: composeVersionQuerySchema
10690
+ }),
10691
+ responses: {
10692
+ 200: external_exports.object({
10693
+ versionId: external_exports.string(),
10694
+ tag: external_exports.string().optional()
10695
+ }),
10696
+ 400: apiErrorSchema,
10697
+ 401: apiErrorSchema,
10698
+ 403: apiErrorSchema,
10699
+ 404: apiErrorSchema
10700
+ },
10701
+ summary: "Resolve version specifier to full version ID"
10702
+ }
10703
+ });
10704
+ var composeListItemSchema = external_exports.object({
10705
+ id: external_exports.string(),
10706
+ name: external_exports.string(),
10707
+ displayName: external_exports.string().nullable().optional(),
10708
+ description: external_exports.string().nullable().optional(),
10709
+ sound: external_exports.string().nullable().optional(),
10710
+ headVersionId: external_exports.string().nullable(),
10711
+ updatedAt: external_exports.string()
10712
+ });
10713
+
10714
+ // ../../packages/api-contracts/src/contracts/zero-user-model-preference.ts
10715
+ init_esm_shims();
10716
+ var c5 = initContract();
10851
10717
  var userModelPreferenceResponseSchema = external_exports.object({
10852
10718
  selectedModel: supportedRunModelSchema.nullable(),
10853
10719
  updatedAt: external_exports.string().nullable()
@@ -10855,7 +10721,7 @@ var userModelPreferenceResponseSchema = external_exports.object({
10855
10721
  var updateUserModelPreferenceRequestSchema = external_exports.object({
10856
10722
  selectedModel: supportedRunModelSchema.nullable()
10857
10723
  });
10858
- var zeroUserModelPreferenceContract = c4.router({
10724
+ var zeroUserModelPreferenceContract = c5.router({
10859
10725
  get: {
10860
10726
  method: "GET",
10861
10727
  path: "/api/zero/user-model-preference",
@@ -10888,7 +10754,7 @@ var zeroUserModelPreferenceContract = c4.router({
10888
10754
 
10889
10755
  // ../../packages/api-contracts/src/contracts/presentation-images.ts
10890
10756
  init_esm_shims();
10891
- var c5 = initContract();
10757
+ var c6 = initContract();
10892
10758
  var presentationImageOrientationSchema = external_exports.enum([
10893
10759
  "landscape",
10894
10760
  "portrait",
@@ -10946,7 +10812,7 @@ var presentationImageResolveResponseSchema = external_exports.object({
10946
10812
  ])
10947
10813
  )
10948
10814
  }).strict();
10949
- var presentationImagesContract = c5.router({
10815
+ var presentationImagesContract = c6.router({
10950
10816
  resolve: {
10951
10817
  method: "POST",
10952
10818
  path: "/api/presentation/images/resolve",
@@ -10965,7 +10831,7 @@ var presentationImagesContract = c5.router({
10965
10831
 
10966
10832
  // ../../packages/api-contracts/src/contracts/test-telegram-dispatch-probe.ts
10967
10833
  init_esm_shims();
10968
- var c6 = initContract();
10834
+ var c7 = initContract();
10969
10835
  var testTelegramDispatchProbeBodySchema = external_exports.object({
10970
10836
  bot_id: external_exports.string(),
10971
10837
  chat_id: external_exports.string(),
@@ -10990,7 +10856,7 @@ var testTelegramDispatchProbeHandlerErrorSchema = external_exports.object({
10990
10856
  stack: external_exports.string().optional()
10991
10857
  })
10992
10858
  });
10993
- var testTelegramDispatchProbeContract = c6.router({
10859
+ var testTelegramDispatchProbeContract = c7.router({
10994
10860
  post: {
10995
10861
  method: "POST",
10996
10862
  path: "/api/test/telegram-dispatch-probe",
@@ -11009,7 +10875,7 @@ var testTelegramDispatchProbeContract = c6.router({
11009
10875
 
11010
10876
  // ../../packages/api-contracts/src/contracts/test-teams-dispatch-probe.ts
11011
10877
  init_esm_shims();
11012
- var c7 = initContract();
10878
+ var c8 = initContract();
11013
10879
  var testTeamsDispatchProbeBodySchema = external_exports.object({
11014
10880
  tenant_id: external_exports.string(),
11015
10881
  conversation_id: external_exports.string(),
@@ -11048,7 +10914,7 @@ var testTeamsDispatchProbeResponseSchema = external_exports.union([
11048
10914
  testTeamsDispatchProbeSuccessResponseSchema,
11049
10915
  testTeamsDispatchProbeFailureResponseSchema
11050
10916
  ]);
11051
- var testTeamsDispatchProbeContract = c7.router({
10917
+ var testTeamsDispatchProbeContract = c8.router({
11052
10918
  post: {
11053
10919
  method: "POST",
11054
10920
  path: "/api/test/teams-dispatch-probe",
@@ -11091,7 +10957,7 @@ var internalCallbackErrorSchema = external_exports.object({
11091
10957
  });
11092
10958
 
11093
10959
  // ../../packages/api-contracts/src/contracts/zero-email.ts
11094
- var c8 = initContract();
10960
+ var c9 = initContract();
11095
10961
  var emailRecipientsSchema = external_exports.array(external_exports.string()).optional();
11096
10962
  var zeroEmailReplyCallbackPayloadSchema = external_exports.object({
11097
10963
  emailThreadSessionId: external_exports.string(),
@@ -11114,7 +10980,7 @@ var zeroEmailTriggerCallbackPayloadSchema = external_exports.object({
11114
10980
  replyRecipientTo: emailRecipientsSchema,
11115
10981
  replyRecipientCc: emailRecipientsSchema
11116
10982
  }).passthrough();
11117
- var zeroEmailReplyCallbackContract = c8.router({
10983
+ var zeroEmailReplyCallbackContract = c9.router({
11118
10984
  post: {
11119
10985
  method: "POST",
11120
10986
  path: "/api/zero/email/callbacks/reply",
@@ -11131,7 +10997,7 @@ var zeroEmailReplyCallbackContract = c8.router({
11131
10997
  summary: "Handle Zero email reply completion callbacks"
11132
10998
  }
11133
10999
  });
11134
- var zeroEmailTriggerCallbackContract = c8.router({
11000
+ var zeroEmailTriggerCallbackContract = c9.router({
11135
11001
  post: {
11136
11002
  method: "POST",
11137
11003
  path: "/api/zero/email/callbacks/trigger",
@@ -11148,7 +11014,7 @@ var zeroEmailTriggerCallbackContract = c8.router({
11148
11014
  summary: "Handle Zero email trigger completion callbacks"
11149
11015
  }
11150
11016
  });
11151
- var zeroEmailInboundContract = c8.router({
11017
+ var zeroEmailInboundContract = c9.router({
11152
11018
  post: {
11153
11019
  method: "POST",
11154
11020
  path: "/api/zero/email/inbound",
@@ -11168,8 +11034,8 @@ var zeroEmailInboundContract = c8.router({
11168
11034
 
11169
11035
  // ../../packages/api-contracts/src/contracts/auth.ts
11170
11036
  init_esm_shims();
11171
- var c9 = initContract();
11172
- var authContract = c9.router({
11037
+ var c10 = initContract();
11038
+ var authContract = c10.router({
11173
11039
  /**
11174
11040
  * GET /api/auth/me
11175
11041
  * Get current user information
@@ -11194,7 +11060,7 @@ var authContract = c9.router({
11194
11060
 
11195
11061
  // ../../packages/api-contracts/src/contracts/user-export.ts
11196
11062
  init_esm_shims();
11197
- var c10 = initContract();
11063
+ var c11 = initContract();
11198
11064
  var exportJobStatusSchema = external_exports.enum([
11199
11065
  "pending",
11200
11066
  "running",
@@ -11219,7 +11085,7 @@ var userExportStartResponseSchema = external_exports.object({
11219
11085
  jobId: external_exports.string().uuid(),
11220
11086
  status: external_exports.enum(["pending", "running"])
11221
11087
  });
11222
- var userExportContract = c10.router({
11088
+ var userExportContract = c11.router({
11223
11089
  get: {
11224
11090
  method: "GET",
11225
11091
  path: "/api/user/export",
@@ -11250,7 +11116,7 @@ var userExportContract = c10.router({
11250
11116
 
11251
11117
  // ../../packages/api-contracts/src/contracts/email-unsubscribe.ts
11252
11118
  init_esm_shims();
11253
- var c11 = initContract();
11119
+ var c12 = initContract();
11254
11120
  var emailUnsubscribeQuerySchema = external_exports.object({
11255
11121
  token: external_exports.string().optional()
11256
11122
  });
@@ -11260,13 +11126,13 @@ var emailUnsubscribeResponseSchema = external_exports.object({
11260
11126
  var emailUnsubscribeErrorSchema = external_exports.object({
11261
11127
  error: external_exports.string()
11262
11128
  });
11263
- var emailUnsubscribeContract = c11.router({
11129
+ var emailUnsubscribeContract = c12.router({
11264
11130
  get: {
11265
11131
  method: "GET",
11266
11132
  path: "/api/email/unsubscribe",
11267
11133
  query: emailUnsubscribeQuerySchema,
11268
11134
  responses: {
11269
- 200: c11.otherResponse({
11135
+ 200: c12.otherResponse({
11270
11136
  contentType: "text/html",
11271
11137
  body: external_exports.unknown()
11272
11138
  }),
@@ -11287,10 +11153,73 @@ var emailUnsubscribeContract = c11.router({
11287
11153
  }
11288
11154
  });
11289
11155
 
11156
+ // ../../packages/api-contracts/src/contracts/zero-morning-brief.ts
11157
+ init_esm_shims();
11158
+ var c13 = initContract();
11159
+ var triggerMorningBriefResponseSchema = external_exports.object({
11160
+ runId: external_exports.string(),
11161
+ briefDate: external_exports.string()
11162
+ });
11163
+ var zeroMorningBriefContract = c13.router({
11164
+ trigger: {
11165
+ method: "POST",
11166
+ path: "/api/zero/morning-brief/trigger",
11167
+ headers: authHeadersSchema,
11168
+ body: external_exports.object({}),
11169
+ responses: {
11170
+ 200: triggerMorningBriefResponseSchema,
11171
+ 400: apiErrorSchema,
11172
+ 401: apiErrorSchema,
11173
+ 403: apiErrorSchema,
11174
+ 500: apiErrorSchema
11175
+ },
11176
+ summary: "Trigger a morning brief immediately for the current user"
11177
+ }
11178
+ });
11179
+
11180
+ // ../../packages/api-contracts/src/contracts/email-morning-brief-unsubscribe.ts
11181
+ init_esm_shims();
11182
+ var c14 = initContract();
11183
+ var emailMorningBriefUnsubscribeQuerySchema = external_exports.object({
11184
+ token: external_exports.string().optional()
11185
+ });
11186
+ var emailMorningBriefUnsubscribeResponseSchema = external_exports.object({
11187
+ unsubscribed: external_exports.literal(true)
11188
+ });
11189
+ var emailMorningBriefUnsubscribeErrorSchema = external_exports.object({
11190
+ error: external_exports.string()
11191
+ });
11192
+ var emailMorningBriefUnsubscribeContract = c14.router({
11193
+ get: {
11194
+ method: "GET",
11195
+ path: "/api/email/morning-brief/unsubscribe",
11196
+ query: emailMorningBriefUnsubscribeQuerySchema,
11197
+ responses: {
11198
+ 200: c14.otherResponse({
11199
+ contentType: "text/html",
11200
+ body: external_exports.unknown()
11201
+ }),
11202
+ 400: emailMorningBriefUnsubscribeErrorSchema
11203
+ },
11204
+ summary: "Turn off the Morning Brief from an email link"
11205
+ },
11206
+ unsubscribe: {
11207
+ method: "POST",
11208
+ path: "/api/email/morning-brief/unsubscribe",
11209
+ query: emailMorningBriefUnsubscribeQuerySchema,
11210
+ body: external_exports.undefined(),
11211
+ responses: {
11212
+ 200: emailMorningBriefUnsubscribeResponseSchema,
11213
+ 400: emailMorningBriefUnsubscribeErrorSchema
11214
+ },
11215
+ summary: "One-click List-Unsubscribe for the Morning Brief"
11216
+ }
11217
+ });
11218
+
11290
11219
  // ../../packages/api-contracts/src/contracts/connectors-type-callback.ts
11291
11220
  init_esm_shims();
11292
- var c12 = initContract();
11293
- var connectorsTypeCallbackContract = c12.router({
11221
+ var c15 = initContract();
11222
+ var connectorsTypeCallbackContract = c15.router({
11294
11223
  callback: {
11295
11224
  method: "GET",
11296
11225
  path: "/api/connectors/:type/callback",
@@ -11316,7 +11245,7 @@ var connectorsTypeCallbackContract = c12.router({
11316
11245
  "openid.realm": external_exports.string().optional()
11317
11246
  }).catchall(external_exports.string()),
11318
11247
  responses: {
11319
- 307: c12.noBody()
11248
+ 307: c15.noBody()
11320
11249
  },
11321
11250
  summary: "Complete connector browser authorization"
11322
11251
  }
@@ -11324,7 +11253,7 @@ var connectorsTypeCallbackContract = c12.router({
11324
11253
 
11325
11254
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-authorize.ts
11326
11255
  init_esm_shims();
11327
- var c13 = initContract();
11256
+ var c16 = initContract();
11328
11257
  var testOAuthProviderAuthorizeErrorSchema = external_exports.object({
11329
11258
  error: external_exports.string()
11330
11259
  });
@@ -11336,13 +11265,13 @@ var testOAuthProviderAuthorizeQuerySchema = external_exports.object({
11336
11265
  scope: external_exports.string().optional(),
11337
11266
  state: external_exports.string().optional()
11338
11267
  });
11339
- var testOAuthProviderAuthorizeContract = c13.router({
11268
+ var testOAuthProviderAuthorizeContract = c16.router({
11340
11269
  authorize: {
11341
11270
  method: "GET",
11342
11271
  path: "/api/test/oauth-provider/authorize",
11343
11272
  query: testOAuthProviderAuthorizeQuerySchema,
11344
11273
  responses: {
11345
- 302: c13.noBody(),
11274
+ 302: c16.noBody(),
11346
11275
  400: testOAuthProviderAuthorizeErrorSchema,
11347
11276
  404: external_exports.string()
11348
11277
  },
@@ -11352,7 +11281,7 @@ var testOAuthProviderAuthorizeContract = c13.router({
11352
11281
 
11353
11282
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-echo.ts
11354
11283
  init_esm_shims();
11355
- var c14 = initContract();
11284
+ var c17 = initContract();
11356
11285
  var testOAuthProviderEchoErrorSchema = external_exports.object({
11357
11286
  error: external_exports.string()
11358
11287
  });
@@ -11360,7 +11289,7 @@ var testOAuthProviderEchoResponseSchema = external_exports.object({
11360
11289
  authorization: external_exports.string(),
11361
11290
  receivedAt: external_exports.string()
11362
11291
  });
11363
- var testOAuthProviderEchoContract = c14.router({
11292
+ var testOAuthProviderEchoContract = c17.router({
11364
11293
  echo: {
11365
11294
  method: "GET",
11366
11295
  path: "/api/test/oauth-provider/echo",
@@ -11375,7 +11304,7 @@ var testOAuthProviderEchoContract = c14.router({
11375
11304
 
11376
11305
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-token.ts
11377
11306
  init_esm_shims();
11378
- var c15 = initContract();
11307
+ var c18 = initContract();
11379
11308
  var testOAuthProviderTokenErrorSchema = external_exports.object({
11380
11309
  error: external_exports.string(),
11381
11310
  error_description: external_exports.string().optional()
@@ -11387,11 +11316,11 @@ var testOAuthProviderTokenResponseSchema = external_exports.object({
11387
11316
  expires_in: external_exports.number(),
11388
11317
  scope: external_exports.string()
11389
11318
  });
11390
- var testOAuthProviderTokenContract = c15.router({
11319
+ var testOAuthProviderTokenContract = c18.router({
11391
11320
  token: {
11392
11321
  method: "POST",
11393
11322
  path: "/api/test/oauth-provider/token",
11394
- body: c15.type(),
11323
+ body: c18.type(),
11395
11324
  responses: {
11396
11325
  200: testOAuthProviderTokenResponseSchema,
11397
11326
  400: testOAuthProviderTokenErrorSchema,
@@ -11404,7 +11333,7 @@ var testOAuthProviderTokenContract = c15.router({
11404
11333
 
11405
11334
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-device-auth.ts
11406
11335
  init_esm_shims();
11407
- var c16 = initContract();
11336
+ var c19 = initContract();
11408
11337
  var testOAuthProviderDeviceAuthErrorSchema = external_exports.object({
11409
11338
  error: external_exports.string(),
11410
11339
  error_description: external_exports.string().optional()
@@ -11417,11 +11346,11 @@ var testOAuthProviderDeviceAuthResponseSchema = external_exports.object({
11417
11346
  expires_in: external_exports.number(),
11418
11347
  interval: external_exports.number()
11419
11348
  });
11420
- var testOAuthProviderDeviceAuthContract = c16.router({
11349
+ var testOAuthProviderDeviceAuthContract = c19.router({
11421
11350
  deviceAuth: {
11422
11351
  method: "POST",
11423
11352
  path: "/api/test/oauth-provider/device/code",
11424
- body: c16.type(),
11353
+ body: c19.type(),
11425
11354
  responses: {
11426
11355
  200: testOAuthProviderDeviceAuthResponseSchema,
11427
11356
  400: testOAuthProviderDeviceAuthErrorSchema,
@@ -11434,7 +11363,7 @@ var testOAuthProviderDeviceAuthContract = c16.router({
11434
11363
 
11435
11364
  // ../../packages/api-contracts/src/contracts/test-oauth-provider-userinfo.ts
11436
11365
  init_esm_shims();
11437
- var c17 = initContract();
11366
+ var c20 = initContract();
11438
11367
  var testOAuthProviderUserinfoErrorSchema = external_exports.object({
11439
11368
  error: external_exports.string()
11440
11369
  });
@@ -11443,7 +11372,7 @@ var testOAuthProviderUserinfoResponseSchema = external_exports.object({
11443
11372
  id: external_exports.string(),
11444
11373
  username: external_exports.string()
11445
11374
  });
11446
- var testOAuthProviderUserinfoContract = c17.router({
11375
+ var testOAuthProviderUserinfoContract = c20.router({
11447
11376
  userinfo: {
11448
11377
  method: "GET",
11449
11378
  path: "/api/test/oauth-provider/userinfo",
@@ -11458,7 +11387,7 @@ var testOAuthProviderUserinfoContract = c17.router({
11458
11387
 
11459
11388
  // ../../packages/api-contracts/src/contracts/test-computer-use-state.ts
11460
11389
  init_esm_shims();
11461
- var c18 = initContract();
11390
+ var c21 = initContract();
11462
11391
  var testComputerUseStateErrorSchema = external_exports.object({
11463
11392
  error: external_exports.string()
11464
11393
  });
@@ -11491,7 +11420,7 @@ var testComputerUseStateGetResponseSchema = external_exports.object({
11491
11420
  var testComputerUseStateDeleteResponseSchema = external_exports.object({
11492
11421
  ok: external_exports.literal(true)
11493
11422
  });
11494
- var testComputerUseStateContract = c18.router({
11423
+ var testComputerUseStateContract = c21.router({
11495
11424
  post: {
11496
11425
  method: "POST",
11497
11426
  path: "/api/test/computer-use-state",
@@ -11533,7 +11462,7 @@ var testComputerUseStateContract = c18.router({
11533
11462
 
11534
11463
  // ../../packages/api-contracts/src/contracts/test-runtime-state.ts
11535
11464
  init_esm_shims();
11536
- var c19 = initContract();
11465
+ var c22 = initContract();
11537
11466
  var testRuntimeStateErrorSchema = external_exports.object({
11538
11467
  error: external_exports.string()
11539
11468
  });
@@ -11590,7 +11519,7 @@ var testRuntimeStateActionResponseSchema = external_exports.object({
11590
11519
  admission_lock_waiting: external_exports.boolean().optional(),
11591
11520
  uploaded_file_sources: external_exports.array(external_exports.string()).optional()
11592
11521
  });
11593
- var testRuntimeStateContract = c19.router({
11522
+ var testRuntimeStateContract = c22.router({
11594
11523
  action: {
11595
11524
  method: "POST",
11596
11525
  path: "/api/test/runtime-state/action",
@@ -11606,7 +11535,7 @@ var testRuntimeStateContract = c19.router({
11606
11535
 
11607
11536
  // ../../packages/api-contracts/src/contracts/test-zero-agent-state.ts
11608
11537
  init_esm_shims();
11609
- var c20 = initContract();
11538
+ var c23 = initContract();
11610
11539
  var testZeroAgentStateErrorSchema = external_exports.object({
11611
11540
  error: external_exports.string()
11612
11541
  });
@@ -11628,7 +11557,7 @@ var testZeroAgentStateActionBodySchema = external_exports.discriminatedUnion(
11628
11557
  var testZeroAgentStateActionResponseSchema = external_exports.object({
11629
11558
  ok: external_exports.literal(true)
11630
11559
  });
11631
- var testZeroAgentStateContract = c20.router({
11560
+ var testZeroAgentStateContract = c23.router({
11632
11561
  action: {
11633
11562
  method: "POST",
11634
11563
  path: "/api/test/zero-agent-state/action",
@@ -11644,7 +11573,7 @@ var testZeroAgentStateContract = c20.router({
11644
11573
 
11645
11574
  // ../../packages/api-contracts/src/contracts/test-model-provider-state.ts
11646
11575
  init_esm_shims();
11647
- var c21 = initContract();
11576
+ var c24 = initContract();
11648
11577
  var testModelProviderStateErrorSchema = external_exports.object({
11649
11578
  error: external_exports.string()
11650
11579
  });
@@ -11662,7 +11591,7 @@ var testModelProviderStateActionBodySchema = external_exports.discriminatedUnion
11662
11591
  var testModelProviderStateActionResponseSchema = external_exports.object({
11663
11592
  ok: external_exports.literal(true)
11664
11593
  });
11665
- var testModelProviderStateContract = c21.router({
11594
+ var testModelProviderStateContract = c24.router({
11666
11595
  action: {
11667
11596
  method: "POST",
11668
11597
  path: "/api/test/model-provider-state/action",
@@ -11678,8 +11607,8 @@ var testModelProviderStateContract = c21.router({
11678
11607
 
11679
11608
  // ../../packages/api-contracts/src/contracts/test-mail-draft-state.ts
11680
11609
  init_esm_shims();
11681
- var c22 = initContract();
11682
- var testMailDraftStateContract = c22.router({
11610
+ var c25 = initContract();
11611
+ var testMailDraftStateContract = c25.router({
11683
11612
  get: {
11684
11613
  method: "GET",
11685
11614
  path: "/api/test/mail-draft-state/:mailDraftId",
@@ -11694,7 +11623,7 @@ var testMailDraftStateContract = c22.router({
11694
11623
 
11695
11624
  // ../../packages/api-contracts/src/contracts/test-usage-insight-state.ts
11696
11625
  init_esm_shims();
11697
- var c23 = initContract();
11626
+ var c26 = initContract();
11698
11627
  var nullableDateStringSchema = external_exports.string().nullable();
11699
11628
  var optionalDateStringSchema = external_exports.string().optional();
11700
11629
  var testUsageInsightStateErrorSchema = external_exports.object({
@@ -11792,7 +11721,7 @@ var testUsageInsightStateActionResponseSchema = external_exports.object({
11792
11721
  chat_thread_id: external_exports.string().optional(),
11793
11722
  usage_event_id: external_exports.string().optional()
11794
11723
  });
11795
- var testUsageInsightStateContract = c23.router({
11724
+ var testUsageInsightStateContract = c26.router({
11796
11725
  action: {
11797
11726
  method: "POST",
11798
11727
  path: "/api/test/usage-insight-state/action",
@@ -11808,7 +11737,7 @@ var testUsageInsightStateContract = c23.router({
11808
11737
 
11809
11738
  // ../../packages/api-contracts/src/contracts/test-cron-cleanup-sandboxes-state.ts
11810
11739
  init_esm_shims();
11811
- var c24 = initContract();
11740
+ var c27 = initContract();
11812
11741
  var testCronCleanupSandboxesStateActionBodySchema = external_exports.object({
11813
11742
  action: external_exports.enum([
11814
11743
  "seed-run",
@@ -11833,7 +11762,7 @@ var testCronCleanupSandboxesStateActionResponseSchema = external_exports.object(
11833
11762
  var testCronCleanupSandboxesStateErrorSchema = external_exports.object({
11834
11763
  error: external_exports.string()
11835
11764
  });
11836
- var testCronCleanupSandboxesStateContract = c24.router({
11765
+ var testCronCleanupSandboxesStateContract = c27.router({
11837
11766
  action: {
11838
11767
  method: "POST",
11839
11768
  path: "/api/test/cron-cleanup-sandboxes-state/action",
@@ -11849,7 +11778,7 @@ var testCronCleanupSandboxesStateContract = c24.router({
11849
11778
 
11850
11779
  // ../../packages/api-contracts/src/contracts/test-slack-dispatch-probe.ts
11851
11780
  init_esm_shims();
11852
- var c25 = initContract();
11781
+ var c28 = initContract();
11853
11782
  var testSlackDispatchProbeBodySchema = external_exports.object({
11854
11783
  team_id: external_exports.string(),
11855
11784
  channel_id: external_exports.string(),
@@ -11877,7 +11806,7 @@ var testSlackDispatchProbeResponseSchema = external_exports.union([
11877
11806
  testSlackDispatchProbeSuccessResponseSchema,
11878
11807
  testSlackDispatchProbeFailureResponseSchema
11879
11808
  ]);
11880
- var testSlackDispatchProbeContract = c25.router({
11809
+ var testSlackDispatchProbeContract = c28.router({
11881
11810
  post: {
11882
11811
  method: "POST",
11883
11812
  path: "/api/test/slack-dispatch-probe",
@@ -11893,7 +11822,7 @@ var testSlackDispatchProbeContract = c25.router({
11893
11822
 
11894
11823
  // ../../packages/api-contracts/src/contracts/test-slack-state.ts
11895
11824
  init_esm_shims();
11896
- var c26 = initContract();
11825
+ var c29 = initContract();
11897
11826
  var testSlackStateErrorSchema = external_exports.object({
11898
11827
  error: external_exports.string()
11899
11828
  });
@@ -11975,6 +11904,20 @@ var testSlackStateResponseSchema = external_exports.object({
11975
11904
  updatedAt: external_exports.string()
11976
11905
  })
11977
11906
  ),
11907
+ chat_message_queue: external_exports.array(
11908
+ external_exports.object({
11909
+ id: external_exports.string(),
11910
+ chatThreadId: external_exports.string(),
11911
+ chatMessageId: external_exports.string().nullable(),
11912
+ itemType: external_exports.enum([
11913
+ "user_message",
11914
+ "slack_user_message",
11915
+ "workflow_event"
11916
+ ]),
11917
+ triggerSource: external_exports.string().nullable(),
11918
+ createdAt: external_exports.string()
11919
+ })
11920
+ ),
11978
11921
  recent_runs: external_exports.array(
11979
11922
  external_exports.object({
11980
11923
  id: external_exports.string(),
@@ -11986,13 +11929,6 @@ var testSlackStateResponseSchema = external_exports.object({
11986
11929
  promptPreview: external_exports.string().nullable()
11987
11930
  })
11988
11931
  ),
11989
- artifact_storage: external_exports.object({
11990
- id: external_exports.string(),
11991
- headVersionId: external_exports.string().nullable(),
11992
- s3Prefix: external_exports.string(),
11993
- versionId: external_exports.string().nullable(),
11994
- versionS3Key: external_exports.string().nullable()
11995
- }).nullable(),
11996
11932
  org_metadata: external_exports.object({
11997
11933
  orgId: external_exports.string(),
11998
11934
  defaultAgentId: external_exports.string().nullable(),
@@ -12024,15 +11960,14 @@ var testSlackStateResponseSchema = external_exports.object({
12024
11960
  })
12025
11961
  )
12026
11962
  });
12027
- var testSlackStateContract = c26.router({
11963
+ var testSlackStateContract = c29.router({
12028
11964
  get: {
12029
11965
  method: "GET",
12030
11966
  path: "/api/test/slack-state",
12031
11967
  query: external_exports.object({
12032
11968
  team_id: external_exports.string().optional(),
12033
11969
  empty_team_id: external_exports.literal("1").optional(),
12034
- org_id: external_exports.string().optional(),
12035
- user_id: external_exports.string().optional()
11970
+ org_id: external_exports.string().optional()
12036
11971
  }),
12037
11972
  responses: {
12038
11973
  200: testSlackStateResponseSchema,
@@ -12070,7 +12005,7 @@ var testSlackStateContract = c26.router({
12070
12005
 
12071
12006
  // ../../packages/api-contracts/src/contracts/test-slack-mock.ts
12072
12007
  init_esm_shims();
12073
- var c27 = initContract();
12008
+ var c30 = initContract();
12074
12009
  var slackMockRequestBodySchema = external_exports.record(external_exports.string(), external_exports.unknown()).optional();
12075
12010
  var slackMockNotFoundSchema = external_exports.string();
12076
12011
  var testSlackMockOkResponseSchema = external_exports.object({
@@ -12136,7 +12071,7 @@ var testSlackMockUsersInfoResponseSchema = testSlackMockOkResponseSchema.extend(
12136
12071
  })
12137
12072
  })
12138
12073
  });
12139
- var testSlackMockContract = c27.router({
12074
+ var testSlackMockContract = c30.router({
12140
12075
  assistantThreadsSetStatus: {
12141
12076
  method: "POST",
12142
12077
  path: "/api/test/slack-mock/assistant.threads.setStatus",
@@ -12241,7 +12176,7 @@ var testSlackMockContract = c27.router({
12241
12176
 
12242
12177
  // ../../packages/api-contracts/src/contracts/test-telegram-mock.ts
12243
12178
  init_esm_shims();
12244
- var c28 = initContract();
12179
+ var c31 = initContract();
12245
12180
  var testTelegramMockPathParamsSchema = external_exports.object({
12246
12181
  botToken: external_exports.string(),
12247
12182
  method: external_exports.string()
@@ -12254,7 +12189,7 @@ var testTelegramMockErrorResponseSchema = external_exports.object({
12254
12189
  ok: external_exports.literal(false),
12255
12190
  description: external_exports.string()
12256
12191
  });
12257
- var testTelegramMockContract = c28.router({
12192
+ var testTelegramMockContract = c31.router({
12258
12193
  post: {
12259
12194
  method: "POST",
12260
12195
  path: "/api/test/telegram-mock/:botToken/:method",
@@ -12270,7 +12205,7 @@ var testTelegramMockContract = c28.router({
12270
12205
 
12271
12206
  // ../../packages/api-contracts/src/contracts/test-teams-mock.ts
12272
12207
  init_esm_shims();
12273
- var c29 = initContract();
12208
+ var c32 = initContract();
12274
12209
  var teamsMockBodySchema = external_exports.record(external_exports.string(), external_exports.unknown()).optional();
12275
12210
  var teamsMockOkSchema = external_exports.object({ ok: external_exports.literal(true) });
12276
12211
  var teamsMockTokenResponseSchema = external_exports.object({
@@ -12306,7 +12241,7 @@ var testTeamsMockGraphMessagePathParamsSchema = testTeamsMockGraphMessagesPathPa
12306
12241
  var testTeamsMockGraphUserPathParamsSchema = external_exports.object({
12307
12242
  userId: external_exports.string()
12308
12243
  });
12309
- var testTeamsMockContract = c29.router({
12244
+ var testTeamsMockContract = c32.router({
12310
12245
  token: {
12311
12246
  method: "POST",
12312
12247
  path: "/api/test/teams-mock/token",
@@ -12415,7 +12350,7 @@ var testTeamsMockContract = c29.router({
12415
12350
 
12416
12351
  // ../../packages/api-contracts/src/contracts/test-teams-state.ts
12417
12352
  init_esm_shims();
12418
- var c30 = initContract();
12353
+ var c33 = initContract();
12419
12354
  var testTeamsStateErrorSchema = external_exports.object({
12420
12355
  error: external_exports.string()
12421
12356
  });
@@ -12536,7 +12471,7 @@ var testTeamsStateResponseSchema = external_exports.object({
12536
12471
  })
12537
12472
  )
12538
12473
  });
12539
- var testTeamsStateContract = c30.router({
12474
+ var testTeamsStateContract = c33.router({
12540
12475
  get: {
12541
12476
  method: "GET",
12542
12477
  path: "/api/test/teams-state",
@@ -12580,7 +12515,7 @@ var testTeamsStateContract = c30.router({
12580
12515
 
12581
12516
  // ../../packages/api-contracts/src/contracts/test-telegram-state.ts
12582
12517
  init_esm_shims();
12583
- var c31 = initContract();
12518
+ var c34 = initContract();
12584
12519
  var testTelegramStateQuerySchema = external_exports.object({
12585
12520
  bot_id: external_exports.string().optional()
12586
12521
  });
@@ -12656,7 +12591,7 @@ var testTelegramStateSeedResponseSchema = external_exports.object({
12656
12591
  user_link_id: external_exports.string().nullable(),
12657
12592
  default_agent_id: external_exports.string()
12658
12593
  });
12659
- var testTelegramStateContract = c31.router({
12594
+ var testTelegramStateContract = c34.router({
12660
12595
  get: {
12661
12596
  method: "GET",
12662
12597
  path: "/api/test/telegram-state",
@@ -12705,7 +12640,7 @@ var testTelegramStateContract = c31.router({
12705
12640
 
12706
12641
  // ../../packages/api-contracts/src/contracts/cron.ts
12707
12642
  init_esm_shims();
12708
- var c32 = initContract();
12643
+ var c35 = initContract();
12709
12644
  var cleanupResultSchema = external_exports.object({
12710
12645
  runId: external_exports.string(),
12711
12646
  sandboxId: external_exports.string().nullable(),
@@ -12720,7 +12655,7 @@ var cleanupResponseSchema = external_exports.object({
12720
12655
  exportJobsCleaned: external_exports.number(),
12721
12656
  exportJobsStuck: external_exports.number()
12722
12657
  });
12723
- var cronCleanupSandboxesContract = c32.router({
12658
+ var cronCleanupSandboxesContract = c35.router({
12724
12659
  /**
12725
12660
  * GET /api/cron/cleanup-sandboxes
12726
12661
  * Cron job to cleanup sandboxes that have stopped sending heartbeats
@@ -12846,6 +12781,11 @@ var cronExecuteWorkflowAutomationsResponseSchema = external_exports.object({
12846
12781
  executed: external_exports.number(),
12847
12782
  skipped: external_exports.number()
12848
12783
  });
12784
+ var cronExecuteMorningBriefsResponseSchema = external_exports.object({
12785
+ success: external_exports.literal(true),
12786
+ executed: external_exports.number(),
12787
+ skipped: external_exports.number()
12788
+ });
12849
12789
  var cronRenewGmailWatchesResponseSchema = external_exports.object({
12850
12790
  success: external_exports.literal(true),
12851
12791
  renewed: external_exports.number(),
@@ -12902,7 +12842,7 @@ var cronAggregateModelStatsResponseSchema = external_exports.object({
12902
12842
  windowEnd: external_exports.string(),
12903
12843
  aggregated: external_exports.number()
12904
12844
  });
12905
- var cronAggregateUsageContract = c32.router({
12845
+ var cronAggregateUsageContract = c35.router({
12906
12846
  aggregate: {
12907
12847
  method: "GET",
12908
12848
  path: "/api/cron/aggregate-usage",
@@ -12914,7 +12854,7 @@ var cronAggregateUsageContract = c32.router({
12914
12854
  summary: "Aggregate daily usage cache"
12915
12855
  }
12916
12856
  });
12917
- var cronProcessUsageEventsContract = c32.router({
12857
+ var cronProcessUsageEventsContract = c35.router({
12918
12858
  process: {
12919
12859
  method: "GET",
12920
12860
  path: "/api/cron/process-usage-events",
@@ -12926,7 +12866,7 @@ var cronProcessUsageEventsContract = c32.router({
12926
12866
  summary: "Process pending usage events"
12927
12867
  }
12928
12868
  });
12929
- var cronCompactChatThreadSnapshotsContract = c32.router({
12869
+ var cronCompactChatThreadSnapshotsContract = c35.router({
12930
12870
  compact: {
12931
12871
  method: "GET",
12932
12872
  path: "/api/cron/compact-chat-thread-snapshots",
@@ -12938,7 +12878,7 @@ var cronCompactChatThreadSnapshotsContract = c32.router({
12938
12878
  summary: "Compact chat thread snapshots from lifecycle events"
12939
12879
  }
12940
12880
  });
12941
- var cronMonitorChatMessageQueueContract = c32.router({
12881
+ var cronMonitorChatMessageQueueContract = c35.router({
12942
12882
  monitor: {
12943
12883
  method: "GET",
12944
12884
  path: "/api/cron/monitor-chat-message-queue",
@@ -12951,7 +12891,7 @@ var cronMonitorChatMessageQueueContract = c32.router({
12951
12891
  summary: "Monitor for orphaned queued chat messages"
12952
12892
  }
12953
12893
  });
12954
- var cronReconcileBillingEntitlementsContract = c32.router({
12894
+ var cronReconcileBillingEntitlementsContract = c35.router({
12955
12895
  reconcile: {
12956
12896
  method: "GET",
12957
12897
  path: "/api/cron/reconcile-billing-entitlements",
@@ -12963,7 +12903,7 @@ var cronReconcileBillingEntitlementsContract = c32.router({
12963
12903
  summary: "Reconcile billing entitlements"
12964
12904
  }
12965
12905
  });
12966
- var cronTelegramCleanupContract = c32.router({
12906
+ var cronTelegramCleanupContract = c35.router({
12967
12907
  cleanup: {
12968
12908
  method: "GET",
12969
12909
  path: "/api/cron/telegram-cleanup",
@@ -12975,7 +12915,7 @@ var cronTelegramCleanupContract = c32.router({
12975
12915
  summary: "Delete expired Telegram messages"
12976
12916
  }
12977
12917
  });
12978
- var cronComputerUseScreenshotCleanupContract = c32.router({
12918
+ var cronComputerUseScreenshotCleanupContract = c35.router({
12979
12919
  cleanup: {
12980
12920
  method: "GET",
12981
12921
  path: "/api/cron/computer-use-screenshot-cleanup",
@@ -12987,7 +12927,7 @@ var cronComputerUseScreenshotCleanupContract = c32.router({
12987
12927
  summary: "Delete expired desktop computer-use screenshots"
12988
12928
  }
12989
12929
  });
12990
- var cronArtifactPreviewContract = c32.router({
12930
+ var cronArtifactPreviewContract = c35.router({
12991
12931
  generate: {
12992
12932
  method: "GET",
12993
12933
  path: "/api/cron/artifact-preview",
@@ -12999,7 +12939,7 @@ var cronArtifactPreviewContract = c32.router({
12999
12939
  summary: "Render static preview images for HTML/website artifacts"
13000
12940
  }
13001
12941
  });
13002
- var cronDrainEmailOutboxContract = c32.router({
12942
+ var cronDrainEmailOutboxContract = c35.router({
13003
12943
  drain: {
13004
12944
  method: "GET",
13005
12945
  path: "/api/cron/drain-email-outbox",
@@ -13011,7 +12951,7 @@ var cronDrainEmailOutboxContract = c32.router({
13011
12951
  summary: "Drain pending email outbox messages"
13012
12952
  }
13013
12953
  });
13014
- var cronRenewGmailWatchesContract = c32.router({
12954
+ var cronRenewGmailWatchesContract = c35.router({
13015
12955
  renew: {
13016
12956
  method: "GET",
13017
12957
  path: "/api/cron/renew-gmail-watches",
@@ -13023,7 +12963,7 @@ var cronRenewGmailWatchesContract = c32.router({
13023
12963
  summary: "Renew Gmail push notification watches"
13024
12964
  }
13025
12965
  });
13026
- var cronRenewGoogleCalendarWatchesContract = c32.router({
12966
+ var cronRenewGoogleCalendarWatchesContract = c35.router({
13027
12967
  renew: {
13028
12968
  method: "GET",
13029
12969
  path: "/api/cron/renew-google-calendar-watches",
@@ -13035,7 +12975,7 @@ var cronRenewGoogleCalendarWatchesContract = c32.router({
13035
12975
  summary: "Renew Google Calendar push notification watches"
13036
12976
  }
13037
12977
  });
13038
- var cronRenewGoogleWorkspaceEventSubscriptionsContract = c32.router({
12978
+ var cronRenewGoogleWorkspaceEventSubscriptionsContract = c35.router({
13039
12979
  renew: {
13040
12980
  method: "GET",
13041
12981
  path: "/api/cron/renew-google-workspace-event-subscriptions",
@@ -13047,7 +12987,7 @@ var cronRenewGoogleWorkspaceEventSubscriptionsContract = c32.router({
13047
12987
  summary: "Renew Google Workspace Events subscriptions"
13048
12988
  }
13049
12989
  });
13050
- var cronSyncSkillsContract = c32.router({
12990
+ var cronSyncSkillsContract = c35.router({
13051
12991
  sync: {
13052
12992
  method: "GET",
13053
12993
  path: "/api/cron/sync-skills",
@@ -13059,7 +12999,7 @@ var cronSyncSkillsContract = c32.router({
13059
12999
  summary: "Sync official skills from the skills repository"
13060
13000
  }
13061
13001
  });
13062
- var cronConnectorCatalogContract = c32.router({
13002
+ var cronConnectorCatalogContract = c35.router({
13063
13003
  sync: {
13064
13004
  method: "GET",
13065
13005
  path: "/api/cron/sync-connector-catalog",
@@ -13081,7 +13021,7 @@ var cronConnectorCatalogContract = c32.router({
13081
13021
  summary: "Read connector catalog sync status"
13082
13022
  }
13083
13023
  });
13084
- var cronExecuteWorkflowAutomationsContract = c32.router({
13024
+ var cronExecuteWorkflowAutomationsContract = c35.router({
13085
13025
  execute: {
13086
13026
  method: "GET",
13087
13027
  path: "/api/cron/execute-workflow-automations",
@@ -13093,7 +13033,19 @@ var cronExecuteWorkflowAutomationsContract = c32.router({
13093
13033
  summary: "Execute due workflow automations"
13094
13034
  }
13095
13035
  });
13096
- var cronAggregateInsightsContract = c32.router({
13036
+ var cronExecuteMorningBriefsContract = c35.router({
13037
+ execute: {
13038
+ method: "GET",
13039
+ path: "/api/cron/execute-morning-briefs",
13040
+ headers: authHeadersSchema,
13041
+ responses: {
13042
+ 200: cronExecuteMorningBriefsResponseSchema,
13043
+ 401: apiErrorSchema
13044
+ },
13045
+ summary: "Execute due morning briefs"
13046
+ }
13047
+ });
13048
+ var cronAggregateInsightsContract = c35.router({
13097
13049
  aggregate: {
13098
13050
  method: "GET",
13099
13051
  path: "/api/cron/aggregate-insights",
@@ -13105,7 +13057,7 @@ var cronAggregateInsightsContract = c32.router({
13105
13057
  summary: "Aggregate daily usage insights"
13106
13058
  }
13107
13059
  });
13108
- var cronAggregateModelStatsContract = c32.router({
13060
+ var cronAggregateModelStatsContract = c35.router({
13109
13061
  aggregate: {
13110
13062
  method: "GET",
13111
13063
  path: "/api/cron/aggregate-model-stats",
@@ -13120,7 +13072,7 @@ var cronAggregateModelStatsContract = c32.router({
13120
13072
  summary: "Aggregate hourly model usage statistics"
13121
13073
  }
13122
13074
  });
13123
- var cronSummarizeMemoryContract = c32.router({
13075
+ var cronSummarizeMemoryContract = c35.router({
13124
13076
  summarize: {
13125
13077
  method: "GET",
13126
13078
  path: "/api/cron/summarize-memory",
@@ -13132,7 +13084,7 @@ var cronSummarizeMemoryContract = c32.router({
13132
13084
  summary: "Summarize daily memory changes per user"
13133
13085
  }
13134
13086
  });
13135
- var cronRefreshStoragePresignedUrlsContract = c32.router({
13087
+ var cronRefreshStoragePresignedUrlsContract = c35.router({
13136
13088
  refresh: {
13137
13089
  method: "GET",
13138
13090
  path: "/api/cron/refresh-storage-presigned-urls",
@@ -13145,199 +13097,83 @@ var cronRefreshStoragePresignedUrlsContract = c32.router({
13145
13097
  }
13146
13098
  });
13147
13099
 
13148
- // ../../packages/api-contracts/src/contracts/chat-threads-v1.ts
13100
+ // ../../packages/api-contracts/src/contracts/sessions.ts
13149
13101
  init_esm_shims();
13150
- var c33 = initContract();
13151
- var v1ThreadSchema = external_exports.object({
13102
+ var c36 = initContract();
13103
+ var sessionResponseSchema = external_exports.object({
13152
13104
  id: external_exports.string(),
13153
- title: external_exports.string().nullable(),
13105
+ agentComposeId: external_exports.string(),
13106
+ conversationId: external_exports.string().nullable(),
13107
+ artifactNames: external_exports.array(external_exports.string()),
13108
+ secretNames: external_exports.array(external_exports.string()).nullable(),
13154
13109
  createdAt: external_exports.string(),
13155
13110
  updatedAt: external_exports.string()
13156
13111
  });
13157
- var v1MessageSchema = external_exports.object({
13112
+ var agentComposeSnapshotSchema = external_exports.object({
13113
+ agentComposeVersionId: external_exports.string(),
13114
+ vars: external_exports.record(external_exports.string(), external_exports.string()).optional(),
13115
+ secretNames: external_exports.array(external_exports.string()).optional()
13116
+ });
13117
+ var volumeVersionsSnapshotSchema = external_exports.object({
13118
+ versions: external_exports.record(external_exports.string(), external_exports.string())
13119
+ });
13120
+ var checkpointResponseSchema = external_exports.object({
13158
13121
  id: external_exports.string(),
13159
- role: external_exports.enum(["user", "assistant"]),
13160
- content: external_exports.string().nullable(),
13161
- error: external_exports.string().optional(),
13122
+ runId: external_exports.string(),
13123
+ conversationId: external_exports.string(),
13124
+ agentComposeSnapshot: agentComposeSnapshotSchema,
13125
+ // Checkpoints persist context-artifact arrays, while the GET handler
13126
+ // projects them to this stable name-to-version response map.
13127
+ artifactSnapshots: external_exports.record(external_exports.string(), external_exports.string()).nullable(),
13128
+ volumeVersionsSnapshot: volumeVersionsSnapshotSchema.nullable(),
13162
13129
  createdAt: external_exports.string()
13163
13130
  });
13164
- var chatThreadV1GetContract = c33.router({
13165
- get: {
13166
- method: "GET",
13167
- path: "/api/v1/chat-threads/:threadId",
13168
- headers: authHeadersSchema,
13169
- pathParams: external_exports.object({ threadId: external_exports.string().uuid() }),
13170
- responses: {
13171
- 200: v1ThreadSchema,
13172
- 401: apiErrorSchema,
13173
- 403: apiErrorSchema,
13174
- 404: apiErrorSchema
13175
- },
13176
- summary: "Get a chat thread"
13177
- }
13178
- });
13179
- var chatThreadV1MessagesContract = c33.router({
13180
- list: {
13131
+ var sessionsByIdContract = c36.router({
13132
+ /**
13133
+ * GET /api/agent/sessions/:id
13134
+ * Get session by ID
13135
+ */
13136
+ getById: {
13181
13137
  method: "GET",
13182
- path: "/api/v1/chat-threads/:threadId/messages",
13138
+ path: "/api/agent/sessions/:id",
13183
13139
  headers: authHeadersSchema,
13184
- pathParams: external_exports.object({ threadId: external_exports.string().uuid() }),
13185
- query: external_exports.object({
13186
- sinceId: external_exports.string().uuid().optional(),
13187
- beforeId: external_exports.string().uuid().optional(),
13188
- limit: external_exports.coerce.number().min(1).max(100).default(50)
13140
+ pathParams: external_exports.object({
13141
+ id: external_exports.string().min(1, "Session ID is required")
13189
13142
  }),
13190
13143
  responses: {
13191
- 200: external_exports.object({ messages: external_exports.array(v1MessageSchema) }),
13144
+ 200: sessionResponseSchema,
13192
13145
  401: apiErrorSchema,
13193
13146
  403: apiErrorSchema,
13194
13147
  404: apiErrorSchema
13195
13148
  },
13196
- summary: "List messages in a chat thread"
13149
+ summary: "Get session by ID"
13197
13150
  }
13198
13151
  });
13199
- var chatThreadV1SendContract = c33.router({
13200
- send: {
13201
- method: "POST",
13202
- path: "/api/v1/chat-threads/messages",
13152
+ var checkpointsByIdContract = c36.router({
13153
+ /**
13154
+ * GET /api/agent/checkpoints/:id
13155
+ * Get checkpoint by ID
13156
+ */
13157
+ getById: {
13158
+ method: "GET",
13159
+ path: "/api/agent/checkpoints/:id",
13203
13160
  headers: authHeadersSchema,
13204
- body: external_exports.object({
13205
- prompt: external_exports.string().min(1),
13206
- threadId: external_exports.string().uuid()
13161
+ pathParams: external_exports.object({
13162
+ id: external_exports.string().min(1, "Checkpoint ID is required")
13207
13163
  }),
13208
13164
  responses: {
13209
- 201: external_exports.object({
13210
- threadId: external_exports.string(),
13211
- messageId: external_exports.string(),
13212
- runId: external_exports.string().nullable(),
13213
- createdAt: external_exports.string()
13214
- }),
13215
- 400: apiErrorSchema,
13216
- 401: apiErrorSchema,
13217
- 402: apiErrorSchema,
13218
- 403: apiErrorSchema,
13219
- 404: apiErrorSchema,
13220
- 409: apiErrorSchema,
13221
- 422: apiErrorSchema,
13222
- 429: apiErrorSchema,
13223
- 503: apiErrorSchema
13224
- },
13225
- summary: "Send a chat message to an existing thread"
13226
- }
13227
- });
13228
-
13229
- // ../../packages/api-contracts/src/contracts/device-token.ts
13230
- init_esm_shims();
13231
- var c34 = initContract();
13232
- var bb0DeviceCodeSchema = external_exports.string().regex(/^[A-Z2-9]{4}-[A-Z2-9]{4}$/);
13233
- var bleSessionNonceSchema = external_exports.string().min(16).max(128).regex(/^[A-Za-z0-9._:-]+$/);
13234
- var pollTokenSchema = external_exports.string().min(32).max(256).regex(/^[A-Za-z0-9._-]+$/);
13235
- var createDeviceTokenRequestSchema = external_exports.object({
13236
- device_type: external_exports.literal("bb0"),
13237
- ble_session_nonce: bleSessionNonceSchema.optional()
13238
- });
13239
- var createDeviceTokenResponseSchema = external_exports.object({
13240
- device_code: bb0DeviceCodeSchema,
13241
- expires_in: external_exports.number().int().positive(),
13242
- interval: external_exports.number().int().positive(),
13243
- poll_token: pollTokenSchema
13244
- });
13245
- var pollDeviceTokenRequestSchema = external_exports.object({
13246
- device_code: bb0DeviceCodeSchema,
13247
- poll_token: pollTokenSchema
13248
- });
13249
- var pollDeviceTokenPendingResponseSchema = external_exports.object({
13250
- status: external_exports.literal("pending"),
13251
- interval: external_exports.number().int().positive()
13252
- });
13253
- var pollDeviceTokenApprovedResponseSchema = external_exports.object({
13254
- status: external_exports.literal("approved"),
13255
- api_token: external_exports.string(),
13256
- thread_id: external_exports.string().uuid()
13257
- });
13258
- var pollDeviceTokenExpiredResponseSchema = external_exports.object({
13259
- status: external_exports.literal("expired")
13260
- });
13261
- var pollDeviceTokenInvalidResponseSchema = external_exports.object({
13262
- status: external_exports.literal("invalid")
13263
- });
13264
- var confirmBb0DeviceRequestSchema = external_exports.object({
13265
- device_code: bb0DeviceCodeSchema
13266
- });
13267
- var confirmBb0DeviceResponseSchema = external_exports.object({
13268
- status: external_exports.literal("approved")
13269
- });
13270
- var deviceTokenContract = c34.router({
13271
- create: {
13272
- method: "POST",
13273
- path: "/api/device-token",
13274
- body: createDeviceTokenRequestSchema,
13275
- responses: {
13276
- 200: createDeviceTokenResponseSchema,
13277
- 400: apiErrorSchema
13278
- },
13279
- summary: "Create a short-lived device code for embedded device onboarding"
13280
- },
13281
- poll: {
13282
- method: "POST",
13283
- path: "/api/device-token/poll",
13284
- body: pollDeviceTokenRequestSchema,
13285
- responses: {
13286
- 200: pollDeviceTokenApprovedResponseSchema,
13287
- 202: pollDeviceTokenPendingResponseSchema,
13288
- 400: apiErrorSchema,
13289
- 404: pollDeviceTokenInvalidResponseSchema,
13290
- 410: pollDeviceTokenExpiredResponseSchema
13291
- },
13292
- summary: "Poll a bb0 device code for approval and final credentials"
13293
- }
13294
- });
13295
- var bb0DeviceConfirmContract = c34.router({
13296
- confirm: {
13297
- method: "POST",
13298
- path: "/api/zero/devices/bb0/confirm",
13299
- headers: authHeadersSchema,
13300
- body: confirmBb0DeviceRequestSchema,
13301
- responses: {
13302
- 200: confirmBb0DeviceResponseSchema,
13303
- 400: apiErrorSchema,
13165
+ 200: checkpointResponseSchema,
13304
13166
  401: apiErrorSchema,
13305
13167
  403: apiErrorSchema,
13306
13168
  404: apiErrorSchema
13307
13169
  },
13308
- summary: "Confirm a bb0 device code for the authenticated user"
13309
- }
13310
- });
13311
-
13312
- // ../../packages/api-contracts/src/contracts/audio-transcriptions-v1.ts
13313
- init_esm_shims();
13314
- var c35 = initContract();
13315
- var audioTranscriptionV1Schema = external_exports.object({
13316
- text: external_exports.string()
13317
- });
13318
- var audioTranscriptionsV1Contract = c35.router({
13319
- transcribe: {
13320
- method: "POST",
13321
- path: "/api/v1/audio/transcriptions",
13322
- headers: authHeadersSchema,
13323
- body: c35.type(),
13324
- responses: {
13325
- 200: audioTranscriptionV1Schema,
13326
- 400: apiErrorSchema,
13327
- 401: apiErrorSchema,
13328
- 402: apiErrorSchema,
13329
- 403: apiErrorSchema,
13330
- 413: apiErrorSchema,
13331
- 429: apiErrorSchema,
13332
- 500: apiErrorSchema
13333
- },
13334
- summary: "Transcribe raw 16 kHz mono signed 16-bit PCM audio using the existing voice input pipeline"
13170
+ summary: "Get checkpoint by ID"
13335
13171
  }
13336
13172
  });
13337
13173
 
13338
13174
  // ../../packages/api-contracts/src/contracts/realtime.ts
13339
13175
  init_esm_shims();
13340
- var c36 = initContract();
13176
+ var c37 = initContract();
13341
13177
  var ablyTokenRequestSchema = external_exports.object({
13342
13178
  keyName: external_exports.string(),
13343
13179
  ttl: external_exports.number().optional(),
@@ -13347,7 +13183,7 @@ var ablyTokenRequestSchema = external_exports.object({
13347
13183
  nonce: external_exports.string(),
13348
13184
  mac: external_exports.string()
13349
13185
  });
13350
- var runnerRealtimeTokenContract = c36.router({
13186
+ var runnerRealtimeTokenContract = c37.router({
13351
13187
  /**
13352
13188
  * POST /api/runners/realtime/token
13353
13189
  * Get an Ably token to subscribe to a runner group's job notification channel
@@ -13369,7 +13205,7 @@ var runnerRealtimeTokenContract = c36.router({
13369
13205
  summary: "Get Ably token for runner group job notifications"
13370
13206
  }
13371
13207
  });
13372
- var platformRealtimeTokenContract = c36.router({
13208
+ var platformRealtimeTokenContract = c37.router({
13373
13209
  /**
13374
13210
  * POST /api/zero/realtime/token
13375
13211
  * Get an Ably token to subscribe to the authenticated user's push channel
@@ -28824,7 +28660,7 @@ var HEX_DIGITS = new Set("0123456789abcdefABCDEF".split(""));
28824
28660
 
28825
28661
  // ../../packages/api-contracts/src/contracts/zero-feature-switches.ts
28826
28662
  init_esm_shims();
28827
- var c37 = initContract();
28663
+ var c38 = initContract();
28828
28664
  var featureSwitchesResponseSchema = external_exports.object({
28829
28665
  switches: external_exports.record(external_exports.string(), external_exports.boolean()),
28830
28666
  effectiveSwitches: external_exports.record(external_exports.string(), external_exports.boolean())
@@ -28832,7 +28668,7 @@ var featureSwitchesResponseSchema = external_exports.object({
28832
28668
  var updateFeatureSwitchesRequestSchema = external_exports.object({
28833
28669
  switches: external_exports.record(external_exports.string(), external_exports.boolean())
28834
28670
  });
28835
- var zeroFeatureSwitchesContract = c37.router({
28671
+ var zeroFeatureSwitchesContract = c38.router({
28836
28672
  get: {
28837
28673
  method: "GET",
28838
28674
  path: "/api/zero/feature-switches",
@@ -28861,7 +28697,7 @@ var zeroFeatureSwitchesContract = c37.router({
28861
28697
  method: "DELETE",
28862
28698
  path: "/api/zero/feature-switches",
28863
28699
  headers: authHeadersSchema,
28864
- body: c37.noBody(),
28700
+ body: c38.noBody(),
28865
28701
  responses: {
28866
28702
  200: external_exports.object({ deleted: external_exports.literal(true) }),
28867
28703
  401: apiErrorSchema,
@@ -28873,7 +28709,7 @@ var zeroFeatureSwitchesContract = c37.router({
28873
28709
 
28874
28710
  // ../../packages/api-contracts/src/contracts/zero-memory.ts
28875
28711
  init_esm_shims();
28876
- var c38 = initContract();
28712
+ var c39 = initContract();
28877
28713
  var memoryFileSchema = external_exports.object({
28878
28714
  path: external_exports.string(),
28879
28715
  size: external_exports.number()
@@ -28891,7 +28727,7 @@ var memoryDetailResponseSchema = external_exports.object({
28891
28727
  files: external_exports.array(memoryFileSchema),
28892
28728
  fileContents: external_exports.array(memoryFileContentSchema)
28893
28729
  });
28894
- var zeroMemoryContract = c38.router({
28730
+ var zeroMemoryContract = c39.router({
28895
28731
  get: {
28896
28732
  method: "GET",
28897
28733
  path: "/api/zero/memory",
@@ -28907,7 +28743,7 @@ var zeroMemoryContract = c38.router({
28907
28743
 
28908
28744
  // ../../packages/api-contracts/src/contracts/onboarding.ts
28909
28745
  init_esm_shims();
28910
- var c39 = initContract();
28746
+ var c40 = initContract();
28911
28747
  var onboardingStatusResponseSchema = external_exports.object({
28912
28748
  needsOnboarding: external_exports.boolean(),
28913
28749
  onboardingComplete: external_exports.boolean(),
@@ -28922,7 +28758,7 @@ var onboardingStatusResponseSchema = external_exports.object({
28922
28758
  avatarUrl: external_exports.string().optional()
28923
28759
  }).nullable()
28924
28760
  });
28925
- var onboardingStatusContract = c39.router({
28761
+ var onboardingStatusContract = c40.router({
28926
28762
  getStatus: {
28927
28763
  method: "GET",
28928
28764
  path: "/api/zero/onboarding/status",
@@ -28934,7 +28770,7 @@ var onboardingStatusContract = c39.router({
28934
28770
  summary: "Get onboarding status for current user"
28935
28771
  }
28936
28772
  });
28937
- var onboardingCompleteContract = c39.router({
28773
+ var onboardingCompleteContract = c40.router({
28938
28774
  complete: {
28939
28775
  method: "POST",
28940
28776
  path: "/api/zero/onboarding/complete",
@@ -28962,7 +28798,7 @@ var skillFrontmatterSchema = external_exports.object({
28962
28798
 
28963
28799
  // ../../packages/api-contracts/src/contracts/zero-codex-device-auth.ts
28964
28800
  init_esm_shims();
28965
- var c40 = initContract();
28801
+ var c41 = initContract();
28966
28802
  var codexDeviceAuthScopeSchema = external_exports.enum(["org", "personal"]);
28967
28803
  var codexDeviceAuthStartResponseSchema = external_exports.object({
28968
28804
  sessionToken: external_exports.string(),
@@ -28988,7 +28824,7 @@ var codexDeviceAuthCompleteResponseSchema = external_exports.discriminatedUnion(
28988
28824
  var codexDeviceAuthCancelResponseSchema = external_exports.object({
28989
28825
  status: external_exports.literal("cancelled")
28990
28826
  });
28991
- var zeroCodexDeviceAuthContract = c40.router({
28827
+ var zeroCodexDeviceAuthContract = c41.router({
28992
28828
  start: {
28993
28829
  method: "POST",
28994
28830
  path: "/api/zero/model-providers/codex/device-auth/sessions",
@@ -29036,7 +28872,7 @@ var zeroCodexDeviceAuthContract = c40.router({
29036
28872
 
29037
28873
  // ../../packages/api-contracts/src/contracts/zero-claude-code-device-auth.ts
29038
28874
  init_esm_shims();
29039
- var c41 = initContract();
28875
+ var c42 = initContract();
29040
28876
  var claudeCodeDeviceAuthScopeSchema = external_exports.enum(["org", "personal"]);
29041
28877
  var claudeCodeDeviceAuthStartResponseSchema = external_exports.object({
29042
28878
  sessionToken: external_exports.string(),
@@ -29054,7 +28890,7 @@ var claudeCodeDeviceAuthCompleteResponseSchema = external_exports.object({
29054
28890
  var claudeCodeDeviceAuthCancelResponseSchema = external_exports.object({
29055
28891
  status: external_exports.literal("cancelled")
29056
28892
  });
29057
- var zeroClaudeCodeDeviceAuthContract = c41.router({
28893
+ var zeroClaudeCodeDeviceAuthContract = c42.router({
29058
28894
  start: {
29059
28895
  method: "POST",
29060
28896
  path: "/api/zero/model-providers/claude-code/device-auth/sessions",
@@ -29105,12 +28941,12 @@ var zeroClaudeCodeDeviceAuthContract = c41.router({
29105
28941
 
29106
28942
  // ../../packages/api-contracts/src/contracts/zero-org-logo.ts
29107
28943
  init_esm_shims();
29108
- var c42 = initContract();
28944
+ var c43 = initContract();
29109
28945
  var zeroOrgLogoResponseSchema = external_exports.object({
29110
28946
  logoUrl: external_exports.string().nullable(),
29111
28947
  hasImage: external_exports.boolean()
29112
28948
  });
29113
- var zeroOrgLogoContract = c42.router({
28949
+ var zeroOrgLogoContract = c43.router({
29114
28950
  get: {
29115
28951
  method: "GET",
29116
28952
  path: "/api/zero/org/logo",
@@ -29128,7 +28964,7 @@ var zeroOrgLogoContract = c42.router({
29128
28964
  path: "/api/zero/org/logo",
29129
28965
  headers: authHeadersSchema,
29130
28966
  contentType: "multipart/form-data",
29131
- body: c42.type(),
28967
+ body: c43.type(),
29132
28968
  responses: {
29133
28969
  200: zeroOrgLogoResponseSchema,
29134
28970
  400: apiErrorSchema,
@@ -29155,8 +28991,8 @@ var zeroOrgLogoContract = c42.router({
29155
28991
 
29156
28992
  // ../../packages/api-contracts/src/contracts/zero-composes.ts
29157
28993
  init_esm_shims();
29158
- var c43 = initContract();
29159
- var zeroComposesListContract = c43.router({
28994
+ var c44 = initContract();
28995
+ var zeroComposesListContract = c44.router({
29160
28996
  list: {
29161
28997
  method: "GET",
29162
28998
  path: "/api/zero/composes/list",
@@ -29176,14 +29012,14 @@ var zeroComposesListContract = c43.router({
29176
29012
 
29177
29013
  // ../../packages/api-contracts/src/contracts/zero-personal-model-providers.ts
29178
29014
  init_esm_shims();
29179
- var c44 = initContract();
29015
+ var c45 = initContract();
29180
29016
  var resetPersonalModelProviderSubscriptionUsageRequestSchema = external_exports.object({
29181
29017
  idempotencyKey: external_exports.uuid()
29182
29018
  });
29183
29019
  var resetPersonalModelProviderSubscriptionUsageResponseSchema = external_exports.object({
29184
29020
  outcome: external_exports.enum(["reset", "nothingToReset", "noCredit", "alreadyRedeemed"])
29185
29021
  });
29186
- var zeroPersonalModelProvidersMainContract = c44.router({
29022
+ var zeroPersonalModelProvidersMainContract = c45.router({
29187
29023
  list: {
29188
29024
  method: "GET",
29189
29025
  path: "/api/zero/me/model-providers",
@@ -29212,7 +29048,7 @@ var zeroPersonalModelProvidersMainContract = c44.router({
29212
29048
  summary: "Create or update a personal model provider for the requesting user"
29213
29049
  }
29214
29050
  });
29215
- var zeroPersonalModelProvidersByTypeContract = c44.router({
29051
+ var zeroPersonalModelProvidersByTypeContract = c45.router({
29216
29052
  delete: {
29217
29053
  method: "DELETE",
29218
29054
  path: "/api/zero/me/model-providers/:type",
@@ -29221,7 +29057,7 @@ var zeroPersonalModelProvidersByTypeContract = c44.router({
29221
29057
  type: modelProviderTypeSchema
29222
29058
  }),
29223
29059
  responses: {
29224
- 204: c44.noBody(),
29060
+ 204: c45.noBody(),
29225
29061
  401: apiErrorSchema,
29226
29062
  404: apiErrorSchema,
29227
29063
  500: apiErrorSchema
@@ -29249,7 +29085,7 @@ var zeroPersonalModelProvidersByTypeContract = c44.router({
29249
29085
 
29250
29086
  // ../../packages/api-contracts/src/contracts/zero-memory-dev-refresh.ts
29251
29087
  init_esm_shims();
29252
- var c45 = initContract();
29088
+ var c46 = initContract();
29253
29089
  var memoryDevRefreshSkippedResponseSchema = external_exports.object({
29254
29090
  skipped: external_exports.literal(true)
29255
29091
  });
@@ -29260,12 +29096,12 @@ var memoryDevRefreshResponseSchema = external_exports.union([
29260
29096
  memoryDevRefreshSkippedResponseSchema,
29261
29097
  memoryDevRefreshSummarizedResponseSchema
29262
29098
  ]);
29263
- var zeroMemoryDevRefreshContract = c45.router({
29099
+ var zeroMemoryDevRefreshContract = c46.router({
29264
29100
  refresh: {
29265
29101
  method: "POST",
29266
29102
  path: "/api/zero/memory/dev-refresh",
29267
29103
  headers: authHeadersSchema,
29268
- body: c45.noBody(),
29104
+ body: c46.noBody(),
29269
29105
  responses: {
29270
29106
  200: memoryDevRefreshResponseSchema,
29271
29107
  401: apiErrorSchema,
@@ -29276,69 +29112,6 @@ var zeroMemoryDevRefreshContract = c45.router({
29276
29112
  }
29277
29113
  });
29278
29114
 
29279
- // ../../packages/api-contracts/src/contracts/api-keys.ts
29280
- init_esm_shims();
29281
- var c46 = initContract();
29282
- var apiKeyItemSchema = external_exports.object({
29283
- id: external_exports.string().uuid(),
29284
- name: external_exports.string(),
29285
- tokenPrefix: external_exports.string(),
29286
- createdAt: external_exports.string(),
29287
- expiresAt: external_exports.string(),
29288
- lastUsedAt: external_exports.string().nullable()
29289
- });
29290
- var apiKeyListResponseSchema = external_exports.object({
29291
- apiKeys: external_exports.array(apiKeyItemSchema)
29292
- });
29293
- var createApiKeyRequestSchema = external_exports.object({
29294
- name: external_exports.string().min(1).max(100),
29295
- expiresInDays: external_exports.number().int().positive().max(3650)
29296
- });
29297
- var createApiKeyResponseSchema = apiKeyItemSchema.extend({
29298
- token: external_exports.string()
29299
- });
29300
- var apiKeysContract = c46.router({
29301
- list: {
29302
- method: "GET",
29303
- path: "/api/zero/api-keys",
29304
- headers: authHeadersSchema,
29305
- responses: {
29306
- 200: apiKeyListResponseSchema,
29307
- 401: apiErrorSchema,
29308
- 500: apiErrorSchema
29309
- },
29310
- summary: "List caller's API keys (metadata only)"
29311
- },
29312
- create: {
29313
- method: "POST",
29314
- path: "/api/zero/api-keys",
29315
- headers: authHeadersSchema,
29316
- body: createApiKeyRequestSchema,
29317
- responses: {
29318
- 201: createApiKeyResponseSchema,
29319
- 400: apiErrorSchema,
29320
- 401: apiErrorSchema,
29321
- 500: apiErrorSchema
29322
- },
29323
- summary: "Create a new API key (token returned once)"
29324
- }
29325
- });
29326
- var apiKeysByIdContract = c46.router({
29327
- delete: {
29328
- method: "DELETE",
29329
- path: "/api/zero/api-keys/:id",
29330
- headers: authHeadersSchema,
29331
- pathParams: external_exports.object({ id: external_exports.string().uuid() }),
29332
- responses: {
29333
- 204: c46.noBody(),
29334
- 401: apiErrorSchema,
29335
- 404: apiErrorSchema,
29336
- 500: apiErrorSchema
29337
- },
29338
- summary: "Revoke (delete) an API key"
29339
- }
29340
- });
29341
-
29342
29115
  // ../../packages/api-contracts/src/contracts/integrations-github.ts
29343
29116
  init_esm_shims();
29344
29117
  var c47 = initContract();
@@ -31901,6 +31674,11 @@ var FEATURE_SWITCHES = {
31901
31674
  description: "Route newly admitted per-user Slack threads through canonical chat ingress.",
31902
31675
  enabled: false
31903
31676
  },
31677
+ ["canonicalSlackWebVisibility" /* CanonicalSlackWebVisibility */]: {
31678
+ maintainer: "lancy@vm0.ai",
31679
+ description: "Show canonical Slack chat threads in Web chat surfaces for enrolled users.",
31680
+ enabled: false
31681
+ },
31904
31682
  ["zeroScrape" /* ZeroScrape */]: {
31905
31683
  maintainer: "liangyou@vm0.ai",
31906
31684
  description: "Enable the managed Firecrawl-backed Zero Scrape API and scrape:read ZERO_TOKEN capability.",
@@ -31925,6 +31703,20 @@ var FEATURE_SWITCHES = {
31925
31703
  enabled: false,
31926
31704
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31927
31705
  },
31706
+ ["morningBrief" /* MorningBrief */]: {
31707
+ maintainer: "ethan@vm0.ai",
31708
+ description: "Enable the daily 7:00 local-time Morning Brief email built from GitHub, Gmail, and Google Calendar.",
31709
+ enabled: false,
31710
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES,
31711
+ userOverridable: true
31712
+ },
31713
+ ["manualMorningBrief" /* ManualMorningBrief */]: {
31714
+ maintainer: "ethan@vm0.ai",
31715
+ description: "Show a Send now button in Settings that triggers a Morning Brief immediately for testing.",
31716
+ enabled: false,
31717
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES,
31718
+ userOverridable: true
31719
+ },
31928
31720
  ["notionWorkflowAutomations" /* NotionWorkflowAutomations */]: {
31929
31721
  maintainer: "lancy@vm0.ai",
31930
31722
  description: "Enable Notion event workflow automations, starting with child pages created under a configured parent page.",
@@ -31956,12 +31748,6 @@ var FEATURE_SWITCHES = {
31956
31748
  description: "Enable the Workday HCM and finance connector",
31957
31749
  enabled: false
31958
31750
  },
31959
- ["apiKeys" /* ApiKeys */]: {
31960
- maintainer: "ethan@vm0.ai",
31961
- description: "Gate the custom /settings/api-keys UI for issuing personal access tokens used by the /api/v1 public surface. When disabled, the settings page redirects to / and the sidebar menu item is hidden. The backend /api/v1 verification does NOT consult this flag \u2014 previously issued PATs continue to work.",
31962
- enabled: false,
31963
- enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31964
- },
31965
31751
  ["codexFastMode" /* CodexFastMode */]: {
31966
31752
  maintainer: "lancy@vm0.ai",
31967
31753
  description: "Enable Codex fast mode for ChatGPT subscription GPT 5.5 and GPT 5.6 web chat runs.",
@@ -31984,6 +31770,12 @@ var FEATURE_SWITCHES = {
31984
31770
  enabled: false,
31985
31771
  userOverridable: false
31986
31772
  },
31773
+ ["structuredPrompt" /* StructuredPrompt */]: {
31774
+ maintainer: "bingjie@vm0.ai",
31775
+ description: "Enable structured user prompt rendering, sends, and drafts while preserving the legacy content fallback.",
31776
+ enabled: false,
31777
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31778
+ },
31987
31779
  ["zapierConnector" /* ZapierConnector */]: {
31988
31780
  maintainer: "yuma@vm0.ai",
31989
31781
  description: "Enable the Zapier connector. When disabled, Zapier is hidden from the connectors list and cannot be connected.",
@@ -33929,454 +33721,231 @@ var EventRenderer = class _EventRenderer {
33929
33721
  }
33930
33722
  };
33931
33723
 
33932
- // src/commands/run/shared.ts
33724
+ // src/lib/utils/log-pagination.ts
33933
33725
  init_esm_shims();
33934
- var import_dotenv = __toESM(require_main(), 1);
33935
- import * as fs from "fs";
33936
- function collectKeyValue(value, previous) {
33937
- const [key, ...valueParts] = value.split("=");
33938
- const val = valueParts.join("=");
33939
- if (!key || val === void 0 || val === "") {
33940
- throw new Error(`Invalid format: ${value} (expected KEY=value)`);
33726
+ function parsePositiveLogCount(value, optionName) {
33727
+ const trimmed = value.trim();
33728
+ if (!/^0*[1-9]\d*$/.test(trimmed)) {
33729
+ throw new Error(`Option ${optionName} must be a positive integer`);
33941
33730
  }
33942
- return { ...previous, [key]: val };
33943
- }
33944
- function collectVolumeVersions(value, previous) {
33945
- const [volumeName, ...versionParts] = value.split("=");
33946
- const version = versionParts.join("=");
33947
- if (!volumeName || version === void 0 || version === "") {
33948
- throw new Error(
33949
- `Invalid volume-version format: ${value} (expected volumeName=version)`
33950
- );
33731
+ const count = Number(trimmed);
33732
+ if (!Number.isSafeInteger(count)) {
33733
+ throw new Error(`Option ${optionName} must be a positive integer`);
33951
33734
  }
33952
- return { ...previous, [volumeName]: version };
33735
+ return count;
33953
33736
  }
33954
- function parseMount(value, flagLabel) {
33955
- const parts = value.split(":");
33956
- if (parts.length < 2 || parts.length > 3) {
33957
- throw new Error(
33958
- `Invalid ${flagLabel} format: ${value} (expected name:/path or name:version:/path)`
33959
- );
33960
- }
33961
- const name = parts[0];
33962
- const mountPath = parts.length === 3 ? parts[2] : parts[1];
33963
- if (!name) {
33964
- throw new Error(
33965
- `Invalid ${flagLabel} format: ${value} (name cannot be empty)`
33966
- );
33967
- }
33968
- if (!mountPath.startsWith("/")) {
33969
- throw new Error(
33970
- `Invalid ${flagLabel} mount path: ${mountPath} (must start with /)`
33971
- );
33972
- }
33973
- if (parts.length === 2) {
33974
- return { name, mountPath };
33737
+ function parseBoundedLogCount(value, optionName, min, max) {
33738
+ const trimmed = value.trim();
33739
+ if (!/^\d+$/.test(trimmed)) {
33740
+ throw new Error(`${optionName} must be between ${min} and ${max}`);
33975
33741
  }
33976
- const version = parts[1];
33977
- if (!version) {
33978
- throw new Error(
33979
- `Invalid ${flagLabel} format: ${value} (version cannot be empty)`
33980
- );
33742
+ const count = Number(trimmed);
33743
+ if (!Number.isSafeInteger(count) || count < min || count > max) {
33744
+ throw new Error(`${optionName} must be between ${min} and ${max}`);
33981
33745
  }
33982
- return { name, version, mountPath };
33983
- }
33984
- function collectMounts(value, previous) {
33985
- return [...previous, parseMount(value, "volume")];
33986
- }
33987
- function collectArtifacts(value, previous) {
33988
- return [...previous, parseMount(value, "artifact")];
33746
+ return count;
33989
33747
  }
33990
- function parsePermissionPolicies(json) {
33991
- if (!json) return void 0;
33992
- let parsed;
33993
- try {
33994
- parsed = JSON.parse(json);
33995
- } catch {
33996
- throw new Error(
33997
- `Invalid --permission-policies JSON: ${json}
33998
- Expected format: '{"ref": {"permissions": {"perm": "allow|deny|ask"}}}'`
33999
- );
34000
- }
34001
- const result = firewallPoliciesSchema.safeParse(parsed);
34002
- if (!result.success) {
34003
- throw new Error(
34004
- `Invalid --permission-policies: ${result.error.issues.map((i) => {
34005
- return i.message;
34006
- }).join(", ")}`
34007
- );
33748
+ async function collectLogItems(options) {
33749
+ const collected = [];
33750
+ const seenCursors = /* @__PURE__ */ new Set();
33751
+ let cursor2;
33752
+ while (true) {
33753
+ const requestLimit = options.targetCount === "all" ? options.pageLimit : Math.min(options.pageLimit, options.targetCount - collected.length);
33754
+ const page = await options.fetchPage({
33755
+ sinceTime: options.sinceTime,
33756
+ cursor: cursor2,
33757
+ limit: requestLimit,
33758
+ order: options.order
33759
+ });
33760
+ collected.push(...page.items);
33761
+ if (options.targetCount !== "all" && collected.length >= options.targetCount) {
33762
+ break;
33763
+ }
33764
+ const nextCursor = page.nextCursor ?? null;
33765
+ if (!page.hasMore || !nextCursor || seenCursors.has(nextCursor)) {
33766
+ break;
33767
+ }
33768
+ seenCursors.add(nextCursor);
33769
+ cursor2 = nextCursor;
34008
33770
  }
34009
- return result.data;
33771
+ const entries = options.targetCount === "all" ? collected : collected.slice(0, options.targetCount);
33772
+ return options.order === "desc" ? entries.reverse() : entries;
34010
33773
  }
33774
+
33775
+ // src/lib/utils/uuid.ts
33776
+ init_esm_shims();
34011
33777
  var UUID_PATTERN = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;
34012
- function isUUID(str) {
34013
- return UUID_PATTERN.test(str);
33778
+ function isUuid(value) {
33779
+ return UUID_PATTERN.test(value);
34014
33780
  }
34015
- function extractVarNames(composeContent) {
34016
- const grouped = extractAndGroupVariables(composeContent);
34017
- return grouped.vars.map((r) => {
34018
- return r.name;
34019
- });
34020
- }
34021
- function extractSecretNames(composeContent) {
34022
- const grouped = extractAndGroupVariables(composeContent);
34023
- return grouped.secrets.map((r) => {
34024
- return r.name;
34025
- });
34026
- }
34027
- function loadValues(cliValues, configNames, envFilePath) {
34028
- const result = { ...cliValues };
34029
- const missingNames = configNames.filter((name) => {
34030
- return !(name in result);
34031
- });
34032
- if (missingNames.length > 0) {
34033
- const envValues = {};
34034
- for (const name of missingNames) {
34035
- const envValue = process.env[name];
34036
- if (envValue !== void 0) {
34037
- envValues[name] = envValue;
34038
- }
34039
- }
34040
- let fileValues = {};
34041
- if (envFilePath) {
34042
- if (!fs.existsSync(envFilePath)) {
34043
- throw new Error(`Environment file not found: ${envFilePath}`);
34044
- }
34045
- const dotenvResult = (0, import_dotenv.config)({ path: envFilePath, quiet: true });
34046
- if (dotenvResult.parsed) {
34047
- fileValues = Object.fromEntries(
34048
- Object.entries(dotenvResult.parsed).filter(([key]) => {
34049
- return missingNames.includes(key);
34050
- })
34051
- );
34052
- }
34053
- }
34054
- Object.assign(result, envValues, fileValues);
33781
+
33782
+ // src/lib/utils/search-query.ts
33783
+ init_esm_shims();
33784
+ function parseSearchQuery(value, label) {
33785
+ const trimmed = value.trim();
33786
+ if (!trimmed) {
33787
+ throw new Error(`${label} cannot be empty.`);
34055
33788
  }
34056
- return Object.keys(result).length > 0 ? result : void 0;
33789
+ return trimmed;
34057
33790
  }
34058
- function parseIdentifier(identifier) {
34059
- if (isUUID(identifier)) {
34060
- return { name: identifier };
34061
- }
34062
- const colonIndex = identifier.indexOf(":");
34063
- if (colonIndex > 0 && colonIndex < identifier.length - 1) {
34064
- return {
34065
- name: identifier.slice(0, colonIndex),
34066
- version: identifier.slice(colonIndex + 1)
34067
- };
34068
- }
34069
- return { name: identifier };
33791
+
33792
+ // src/commands/zero/logs/search.ts
33793
+ init_esm_shims();
33794
+ var SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1e3;
33795
+ function supportedSearchFramework(framework) {
33796
+ const normalized = framework ?? void 0;
33797
+ return isSupportedFramework(normalized) ? normalized : void 0;
34070
33798
  }
34071
- function renderRunCreated(response) {
34072
- if (response.status === "queued") {
34073
- console.log(source_default.yellow("\u26A0 Run queued \u2014 concurrency limit reached"));
34074
- console.log(` Run ID: ${source_default.dim(response.runId)}`);
34075
- console.log(
34076
- source_default.dim(" Will start automatically when a slot is available")
34077
- );
34078
- console.log();
34079
- } else {
34080
- EventRenderer.renderRunStarted({
34081
- runId: response.runId,
34082
- sandboxId: response.sandboxId
34083
- });
33799
+ function renderSearchEvent(event, framework, renderer, normalizer) {
33800
+ const parsedEvents = normalizer.process(
33801
+ event.eventData,
33802
+ supportedSearchFramework(framework),
33803
+ new Date(event.createdAt)
33804
+ );
33805
+ for (const parsed of parsedEvents) {
33806
+ renderer.render(parsed);
34084
33807
  }
34085
33808
  }
34086
- var TERMINAL_RUN_STATUSES = [
34087
- "completed",
34088
- "failed",
34089
- "timeout",
34090
- "cancelled"
34091
- ];
34092
- var POLL_INTERVAL_MS = 1e3;
34093
- var TERMINAL_DRAIN_POLL_INTERVAL_MS = 500;
34094
- var TERMINAL_DRAIN_IDLE_MS = 1e3;
34095
- var TERMINAL_DRAIN_MAX_MS = 3e3;
34096
- function supportedEventFramework(framework) {
34097
- return isSupportedFramework(framework) ? framework : void 0;
34098
- }
34099
- function isTerminalRunState(run) {
34100
- return TERMINAL_RUN_STATUSES.includes(run.status);
34101
- }
34102
- function shouldDrainNextEventPage(response, madeSequenceProgress) {
34103
- return response.hasMore && response.events.length > 0 && madeSequenceProgress;
34104
- }
34105
- function isBlockedBySequenceGap(response, madeSequenceProgress) {
34106
- return response.hasMore && !madeSequenceProgress;
34107
- }
34108
- function hasTerminalWatermark(run) {
34109
- return run.lastEventSequence !== void 0;
34110
- }
34111
- function hasReachedTerminalWatermark(run, nextSequence) {
34112
- return run.lastEventSequence !== void 0 && nextSequence >= run.lastEventSequence;
34113
- }
34114
- function shouldCompleteTerminalDrain(terminalSeenAt, lastTerminalProgressAt, blockedByGap) {
34115
- const now = Date.now();
34116
- const terminalElapsedMs = now - terminalSeenAt;
34117
- const terminalIdleMs = now - lastTerminalProgressAt;
34118
- return terminalElapsedMs >= TERMINAL_DRAIN_MAX_MS || !blockedByGap && terminalIdleMs >= TERMINAL_DRAIN_IDLE_MS;
34119
- }
34120
- function updateTerminalDrainState(state, run, madeSequenceProgress, now) {
34121
- if (isTerminalRunState(run)) {
34122
- if (!state.runState) {
34123
- state.seenAt = now;
34124
- state.lastProgressAt = now;
34125
- } else if (madeSequenceProgress) {
34126
- state.lastProgressAt = now;
34127
- }
34128
- state.runState = run;
34129
- return;
34130
- }
34131
- if (state.runState && madeSequenceProgress) {
34132
- state.lastProgressAt = now;
33809
+ function flushSearchRenderer(renderer, normalizer) {
33810
+ for (const parsed of normalizer.flush()) {
33811
+ renderer.render(parsed);
34133
33812
  }
33813
+ renderer.flush();
34134
33814
  }
34135
- function isBlockedByTerminalWatermark(run, nextSequence) {
34136
- return hasTerminalWatermark(run) && !hasReachedTerminalWatermark(run, nextSequence);
33815
+ function formatRunHeader(runId, agentName, timestamp) {
33816
+ const time = formatIsoTimestamp(timestamp);
33817
+ return `\u2500\u2500 Run ${runId} (${agentName}, ${time}) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`;
34137
33818
  }
34138
- function shouldReturnTerminalRunResult(state, response, nextSequence, madeSequenceProgress, seenResultEvent) {
34139
- const run = state.runState;
34140
- if (!run) {
34141
- return false;
34142
- }
34143
- if (!hasTerminalWatermark(run) && run.status !== "completed") {
34144
- if (run.status === "timeout" && shouldDrainNextEventPage(response, madeSequenceProgress)) {
34145
- return false;
34146
- }
34147
- return true;
34148
- }
34149
- if (!hasTerminalWatermark(run) && seenResultEvent) {
34150
- return true;
34151
- }
34152
- return shouldCompleteTerminalDrain(
34153
- state.seenAt,
34154
- state.lastProgressAt,
34155
- isBlockedBySequenceGap(response, madeSequenceProgress) || isBlockedByTerminalWatermark(run, nextSequence)
34156
- );
33819
+ function parseContextOptions(options) {
33820
+ const contextN = options.context !== void 0 ? parseBoundedLogCount(options.context, "--context", 0, 10) : 0;
33821
+ const before = options.beforeContext !== void 0 ? parseBoundedLogCount(options.beforeContext, "--before-context", 0, 10) : contextN;
33822
+ const after = options.afterContext !== void 0 ? parseBoundedLogCount(options.afterContext, "--after-context", 0, 10) : contextN;
33823
+ return { before, after };
34157
33824
  }
34158
- function renderTerminalRunResult(runId, run) {
34159
- if (run.status === "completed") {
34160
- EventRenderer.renderRunCompleted(run.result);
34161
- return {
34162
- succeeded: true,
34163
- runId,
34164
- sessionId: run.result?.agentSessionId,
34165
- checkpointId: run.result?.checkpointId
34166
- };
34167
- }
34168
- if (run.status === "failed") {
34169
- EventRenderer.renderRunFailed(run.error, runId);
34170
- return { succeeded: false, runId };
34171
- }
34172
- if (run.status === "timeout") {
34173
- console.error(source_default.red("\n\u2717 Run timed out"));
34174
- console.error(source_default.dim(` (use "zero logs ${runId}" to view logs)`));
34175
- return { succeeded: false, runId };
34176
- }
34177
- console.error(source_default.yellow("\n\u2717 Run cancelled"));
34178
- return { succeeded: false, runId };
33825
+ function parseLimit(value) {
33826
+ if (value === void 0) return void 0;
33827
+ return parseBoundedLogCount(value, "--limit", 1, 50);
34179
33828
  }
34180
- function sleep(ms) {
34181
- return new Promise((resolve) => {
34182
- return setTimeout(resolve, ms);
34183
- });
34184
- }
34185
- async function pollEvents(runId, options) {
34186
- const renderer = new EventRenderer({ verbose: options?.verbose });
34187
- const normalizer = new EventStreamNormalizer();
34188
- let nextSequence = -1;
34189
- const terminalDrain = {
34190
- seenAt: 0,
34191
- lastProgressAt: 0
34192
- };
34193
- let seenResultEvent = false;
34194
- const flushPendingEvents = () => {
34195
- for (const parsed of normalizer.flush()) {
34196
- renderer.render(parsed);
34197
- }
34198
- renderer.flush();
34199
- };
34200
- for (; ; ) {
34201
- const previousSequence = nextSequence;
34202
- const response = await getEvents(runId, {
34203
- since: nextSequence
34204
- });
34205
- const now = Date.now();
34206
- const madeSequenceProgress = response.nextSequence > previousSequence;
34207
- let pageHasResultEvent = false;
34208
- if (madeSequenceProgress) {
34209
- for (const event of response.events) {
34210
- const parsedEvents = normalizer.process(
34211
- event.eventData,
34212
- supportedEventFramework(response.framework)
34213
- );
34214
- for (const parsed of parsedEvents) {
34215
- renderer.render(parsed);
34216
- if (parsed.type === "result") {
34217
- pageHasResultEvent = true;
34218
- }
34219
- }
34220
- }
33829
+ function renderResults(response) {
33830
+ const grouped = /* @__PURE__ */ new Map();
33831
+ for (const result of response.results) {
33832
+ const existing = grouped.get(result.runId);
33833
+ if (existing) {
33834
+ existing.results.push(result);
33835
+ } else {
33836
+ grouped.set(result.runId, {
33837
+ agentName: result.agentName,
33838
+ results: [result]
33839
+ });
34221
33840
  }
34222
- if (madeSequenceProgress) {
34223
- if (pageHasResultEvent) {
34224
- seenResultEvent = true;
34225
- }
34226
- nextSequence = response.nextSequence;
33841
+ }
33842
+ let isFirstGroup = true;
33843
+ for (const [runId, group] of grouped) {
33844
+ if (!isFirstGroup) {
33845
+ console.log();
34227
33846
  }
34228
- updateTerminalDrainState(
34229
- terminalDrain,
34230
- response.run,
34231
- madeSequenceProgress,
34232
- now
33847
+ isFirstGroup = false;
33848
+ const firstTimestamp = group.results[0].matchedEvent.createdAt;
33849
+ console.log(
33850
+ source_default.bold(formatRunHeader(runId, group.agentName, firstTimestamp))
34233
33851
  );
34234
- if (terminalDrain.runState && hasReachedTerminalWatermark(terminalDrain.runState, nextSequence)) {
34235
- flushPendingEvents();
34236
- return renderTerminalRunResult(runId, terminalDrain.runState);
34237
- }
34238
- const terminalRunState = terminalDrain.runState;
34239
- if (terminalRunState && shouldReturnTerminalRunResult(
34240
- terminalDrain,
34241
- response,
34242
- nextSequence,
34243
- madeSequenceProgress,
34244
- seenResultEvent
34245
- )) {
34246
- flushPendingEvents();
34247
- return renderTerminalRunResult(runId, terminalRunState);
34248
- }
34249
- if (shouldDrainNextEventPage(response, madeSequenceProgress)) {
34250
- continue;
33852
+ for (const result of group.results) {
33853
+ const renderer = new EventRenderer({
33854
+ showTimestamp: true,
33855
+ verbose: false
33856
+ });
33857
+ const normalizer = new EventStreamNormalizer();
33858
+ for (const event of result.contextBefore) {
33859
+ renderSearchEvent(event, result.framework, renderer, normalizer);
33860
+ }
33861
+ renderSearchEvent(
33862
+ result.matchedEvent,
33863
+ result.framework,
33864
+ renderer,
33865
+ normalizer
33866
+ );
33867
+ for (const event of result.contextAfter) {
33868
+ renderSearchEvent(event, result.framework, renderer, normalizer);
33869
+ }
33870
+ flushSearchRenderer(renderer, normalizer);
34251
33871
  }
34252
- await sleep(
34253
- terminalDrain.runState ? TERMINAL_DRAIN_POLL_INTERVAL_MS : POLL_INTERVAL_MS
33872
+ }
33873
+ if (response.hasMore) {
33874
+ console.log();
33875
+ console.log(
33876
+ source_default.dim(
33877
+ ` Showing first ${response.results.length} matches. Use --limit to see more.`
33878
+ )
34254
33879
  );
34255
33880
  }
34256
33881
  }
34257
- function showNextSteps(result) {
34258
- const { runId, sessionId, checkpointId } = result;
34259
- console.log();
34260
- console.log(" View agent logs:");
34261
- console.log(source_default.cyan(` zero logs ${runId}`));
34262
- if (sessionId) {
34263
- console.log(" Continue with session (latest conversation and artifact):");
34264
- console.log(
34265
- source_default.cyan(` vm0 run continue ${sessionId} "your next prompt"`)
33882
+ async function runLogsSearch(keyword, options) {
33883
+ const searchKeyword = parseSearchQuery(keyword, "Keyword");
33884
+ const { before, after } = parseContextOptions(options);
33885
+ if (options.agentId !== void 0 && !isUuid(options.agentId)) {
33886
+ console.error(
33887
+ source_default.red(`\u2717 Invalid agent ID "${options.agentId}" \u2014 expected a UUID`)
34266
33888
  );
33889
+ console.error(source_default.dim(" Run: zero logs list to find agent IDs"));
33890
+ process.exit(1);
34267
33891
  }
34268
- if (checkpointId) {
34269
- console.log(
34270
- " Resume from checkpoint (snapshotted conversation and artifact):"
33892
+ if (options.run !== void 0 && !isUuid(options.run)) {
33893
+ console.error(
33894
+ source_default.red(`\u2717 Invalid run ID "${options.run}" \u2014 expected a UUID`)
34271
33895
  );
33896
+ console.error(source_default.dim(" Run: zero logs list to find run IDs"));
33897
+ process.exit(1);
33898
+ }
33899
+ const since = options.since !== void 0 ? parseTime(options.since) : Date.now() - SEVEN_DAYS_MS;
33900
+ const limit = parseLimit(options.limit);
33901
+ const response = await searchZeroLogs({
33902
+ keyword: searchKeyword,
33903
+ agentId: options.agentId,
33904
+ runId: options.run,
33905
+ since,
33906
+ limit,
33907
+ before,
33908
+ after
33909
+ });
33910
+ if (response.results.length === 0) {
33911
+ console.log(source_default.dim("No matches found"));
34272
33912
  console.log(
34273
- source_default.cyan(` vm0 run resume ${checkpointId} "your next prompt"`)
33913
+ source_default.dim(
33914
+ " Try a broader search with --since 30d or a different keyword"
33915
+ )
34274
33916
  );
33917
+ return;
34275
33918
  }
33919
+ renderResults(response);
34276
33920
  }
34277
-
34278
- // src/lib/utils/time-parser.ts
34279
- init_esm_shims();
34280
- var ISO_8601_PATTERN = /^(\d{4})-(\d{2})-(\d{2})(?:[Tt](\d{2}):(\d{2})(?::(\d{2})(?:\.\d{1,9})?)?(?:[Zz]|[+-]\d{2}:?\d{2})?)?$/;
34281
- var DAYS_BY_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
34282
- var MAX_DATE_TIMESTAMP_MS = 864e13;
34283
- function parseTime(timeStr) {
34284
- const relativeMatch = timeStr.match(/^(\d+)([smhdw])$/);
34285
- if (relativeMatch) {
34286
- const value = Number(relativeMatch[1]);
34287
- const unit = relativeMatch[2];
34288
- const timestamp2 = parseRelativeTime(value, unit);
34289
- if (timestamp2 !== void 0) {
34290
- return timestamp2;
34291
- }
34292
- }
34293
- if (/^\d+$/.test(timeStr)) {
34294
- const rawTimestamp = Number(timeStr);
34295
- const timestamp2 = rawTimestamp < 1e10 ? rawTimestamp * 1e3 : rawTimestamp;
34296
- if (isValidTimestamp(timestamp2)) {
34297
- return timestamp2;
33921
+ var searchCommand = new Command().name("search").description("Search agent events across runs").argument("<keyword>", "Search keyword").option("-A, --after-context <n>", "Show n events after each match").option("-B, --before-context <n>", "Show n events before each match").option("-C, --context <n>", "Show n events before and after each match").option("--agent <id>", "Filter by Zero agent ID").option("--run <id>", "Filter by specific run ID").option("--since <time>", "Search logs since (default: 7d)").option("--limit <n>", "Maximum number of matches (default: 20)").addHelpText(
33922
+ "after",
33923
+ `
33924
+ Examples:
33925
+ zero logs search "error"
33926
+ zero logs search "timeout" --agent 123e4567-e89b-12d3-a456-426614174000 -C 2
33927
+ zero logs search "failed" --since 30d --limit 50`
33928
+ ).action(
33929
+ withErrorHandler(
33930
+ async (keyword, options) => {
33931
+ const { agent, ...searchOptions } = options;
33932
+ await runLogsSearch(keyword, { ...searchOptions, agentId: agent });
34298
33933
  }
34299
- }
34300
- const timestamp = parseIsoTime(timeStr);
34301
- if (timestamp !== void 0) {
34302
- return timestamp;
34303
- }
34304
- throw new Error(
34305
- `Invalid time format: "${timeStr}". Supported formats: relative (5m, 2h, 1d), ISO 8601 (2024-01-15T10:30:00Z), Unix timestamp`
34306
- );
34307
- }
34308
- function parseIsoTime(timeStr) {
34309
- const match = ISO_8601_PATTERN.exec(timeStr);
34310
- if (!match) {
34311
- return void 0;
34312
- }
34313
- const year = Number(match[1]);
34314
- const month = Number(match[2]);
34315
- const day = Number(match[3]);
34316
- const hour = match[4] ? Number(match[4]) : 0;
34317
- const minute = match[5] ? Number(match[5]) : 0;
34318
- const second = match[6] ? Number(match[6]) : 0;
34319
- if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day) || !Number.isInteger(hour) || !Number.isInteger(minute) || !Number.isInteger(second) || month < 1 || month > 12 || day < 1 || day > daysInMonth(year, month) || hour > 23 || minute > 59 || second > 59) {
34320
- return void 0;
34321
- }
34322
- const timestamp = new Date(timeStr).getTime();
34323
- return isValidTimestamp(timestamp) ? timestamp : void 0;
34324
- }
34325
- function daysInMonth(year, month) {
34326
- if (month === 2) {
34327
- return isLeapYear(year) ? 29 : 28;
34328
- }
34329
- return DAYS_BY_MONTH[month - 1] ?? 0;
34330
- }
34331
- function isLeapYear(year) {
34332
- return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
34333
- }
34334
- function parseRelativeTime(value, unit) {
34335
- if (!Number.isSafeInteger(value)) {
34336
- return void 0;
34337
- }
34338
- const now = Date.now();
34339
- const multipliers = {
34340
- s: 1e3,
34341
- // seconds
34342
- m: 60 * 1e3,
34343
- // minutes
34344
- h: 60 * 60 * 1e3,
34345
- // hours
34346
- d: 24 * 60 * 60 * 1e3,
34347
- // days
34348
- w: 7 * 24 * 60 * 60 * 1e3
34349
- // weeks
34350
- };
34351
- const multiplier = multipliers[unit];
34352
- if (!multiplier) {
34353
- throw new Error(`Unknown time unit: ${unit}`);
34354
- }
34355
- const timestamp = now - value * multiplier;
34356
- return isValidTimestamp(timestamp) ? timestamp : void 0;
34357
- }
34358
- function isValidTimestamp(timestamp) {
34359
- return Number.isSafeInteger(timestamp) && Math.abs(timestamp) <= MAX_DATE_TIMESTAMP_MS;
34360
- }
33934
+ )
33935
+ );
34361
33936
 
34362
33937
  export {
33938
+ parseTime,
34363
33939
  isSupportedFramework,
34364
33940
  EventStreamNormalizer,
34365
33941
  formatIsoTimestamp,
34366
33942
  EventRenderer,
34367
- collectKeyValue,
34368
- collectVolumeVersions,
34369
- collectMounts,
34370
- collectArtifacts,
34371
- parsePermissionPolicies,
34372
- isUUID,
34373
- extractVarNames,
34374
- extractSecretNames,
34375
- loadValues,
34376
- parseIdentifier,
34377
- renderRunCreated,
34378
- pollEvents,
34379
- showNextSteps,
34380
- parseTime
34381
- };
34382
- //# sourceMappingURL=chunk-65MTNZ44.js.map
33943
+ parsePositiveLogCount,
33944
+ parseBoundedLogCount,
33945
+ collectLogItems,
33946
+ isUuid,
33947
+ parseSearchQuery,
33948
+ runLogsSearch,
33949
+ searchCommand
33950
+ };
33951
+ //# sourceMappingURL=chunk-LNJWRJPF.js.map