@vm0/cli 9.244.7 → 9.245.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/{agent-2TIFNP32.js → agent-VZXA6XR3.js} +6 -5
  2. package/{agent-2TIFNP32.js.map → agent-VZXA6XR3.js.map} +1 -1
  3. package/{banking-UR7XJI3L.js → banking-QOV2GZE6.js} +4 -3
  4. package/{banking-UR7XJI3L.js.map → banking-QOV2GZE6.js.map} +1 -1
  5. package/{chat-5N4C3FDV.js → chat-7PONFLUP.js} +5 -4
  6. package/{chat-5N4C3FDV.js.map → chat-7PONFLUP.js.map} +1 -1
  7. package/{chunk-NR6ANGRK.js → chunk-5XVBOER3.js} +74 -506
  8. package/chunk-5XVBOER3.js.map +1 -0
  9. package/{chunk-E32I3TNQ.js → chunk-6P7XBY46.js} +845 -1217
  10. package/chunk-6P7XBY46.js.map +1 -0
  11. package/{chunk-7KSTVBNN.js → chunk-ARENVRJY.js} +4 -4
  12. package/{chunk-M6GLCPCJ.js → chunk-DE4HMRSU.js} +3 -3
  13. package/{chunk-STMJYQTH.js → chunk-FVYB5CBP.js} +2 -2
  14. package/chunk-HOIDOML4.js +678 -0
  15. package/chunk-HOIDOML4.js.map +1 -0
  16. package/{chunk-BIJC6U3G.js → chunk-VN4PPSXU.js} +2 -2
  17. package/{chunk-26BGLMA3.js → chunk-XYZN3XWH.js} +3 -665
  18. package/chunk-XYZN3XWH.js.map +1 -0
  19. package/{chunk-JWDLLCI3.js → chunk-YSVL5RAP.js} +2 -2
  20. package/{chunk-QCG2H3VD.js → chunk-ZXCF4ARW.js} +2 -2
  21. package/{computer-use-3WUKJYHK.js → computer-use-Y54YFGNC.js} +4 -3
  22. package/{computer-use-3WUKJYHK.js.map → computer-use-Y54YFGNC.js.map} +1 -1
  23. package/{connector-PDEOFNTE.js → connector-2PAPMRZG.js} +7 -6
  24. package/{connector-PDEOFNTE.js.map → connector-2PAPMRZG.js.map} +1 -1
  25. package/{credit-ET4RS32X.js → credit-PX6354BA.js} +5 -4
  26. package/{credit-ET4RS32X.js.map → credit-PX6354BA.js.map} +1 -1
  27. package/{developer-support-3DJEJT2A.js → developer-support-R5K6XKFG.js} +4 -3
  28. package/{developer-support-3DJEJT2A.js.map → developer-support-R5K6XKFG.js.map} +1 -1
  29. package/{doctor-F7OWYXXH.js → doctor-JNHZPFHW.js} +4 -3
  30. package/{doctor-F7OWYXXH.js.map → doctor-JNHZPFHW.js.map} +1 -1
  31. package/{generate-4GKWSL6P.js → generate-TY4LZA3R.js} +10 -8
  32. package/{generate-4GKWSL6P.js.map → generate-TY4LZA3R.js.map} +1 -1
  33. package/{github-S5HFK2IC.js → github-UHTFPDZJ.js} +4 -3
  34. package/{github-S5HFK2IC.js.map → github-UHTFPDZJ.js.map} +1 -1
  35. package/{goal-ISJWIT2Q.js → goal-CKBOG76D.js} +4 -3
  36. package/{goal-ISJWIT2Q.js.map → goal-CKBOG76D.js.map} +1 -1
  37. package/{host-T52XQ2SZ.js → host-HAVFML26.js} +28 -7
  38. package/host-HAVFML26.js.map +1 -0
  39. package/index.js +4 -715
  40. package/index.js.map +1 -1
  41. package/{logs-D4IL5OLR.js → logs-OXZZHIMA.js} +13 -14
  42. package/logs-OXZZHIMA.js.map +1 -0
  43. package/{mail-JXO3GW72.js → mail-QCU47LFX.js} +6 -5
  44. package/{mail-JXO3GW72.js.map → mail-QCU47LFX.js.map} +1 -1
  45. package/{maps-T3YFBRLP.js → maps-F3YPBNGC.js} +4 -3
  46. package/{maps-T3YFBRLP.js.map → maps-F3YPBNGC.js.map} +1 -1
  47. package/{model-GJRTV6E5.js → model-5CYADUCZ.js} +5 -4
  48. package/{model-GJRTV6E5.js.map → model-5CYADUCZ.js.map} +1 -1
  49. package/{model-provider-T4VN4HNU.js → model-provider-676BK2JF.js} +5 -4
  50. package/{model-provider-T4VN4HNU.js.map → model-provider-676BK2JF.js.map} +1 -1
  51. package/{org-GNNU77Y5.js → org-M637OTRU.js} +4 -3
  52. package/{org-GNNU77Y5.js.map → org-M637OTRU.js.map} +1 -1
  53. package/package.json +1 -1
  54. package/{phone-EQ4R2GBO.js → phone-WBFLXP4V.js} +4 -3
  55. package/{phone-EQ4R2GBO.js.map → phone-WBFLXP4V.js.map} +1 -1
  56. package/{preference-3FHEQPKG.js → preference-5AVRP7UU.js} +4 -3
  57. package/{preference-3FHEQPKG.js.map → preference-5AVRP7UU.js.map} +1 -1
  58. package/{resource-EOO2VATC.js → resource-N6ADJPCL.js} +4 -3
  59. package/{resource-EOO2VATC.js.map → resource-N6ADJPCL.js.map} +1 -1
  60. package/{scrape-TZCFJY6X.js → scrape-XIJ5J6LW.js} +4 -3
  61. package/{scrape-TZCFJY6X.js.map → scrape-XIJ5J6LW.js.map} +1 -1
  62. package/{search-RXP4DMUC.js → search-V2PWSYSL.js} +9 -10
  63. package/search-V2PWSYSL.js.map +1 -0
  64. package/{secret-S4ZCVY2X.js → secret-JLGGOPTX.js} +4 -3
  65. package/{secret-S4ZCVY2X.js.map → secret-JLGGOPTX.js.map} +1 -1
  66. package/{slack-7YJFUJE6.js → slack-QNQY6TVX.js} +4 -3
  67. package/{slack-7YJFUJE6.js.map → slack-QNQY6TVX.js.map} +1 -1
  68. package/{teams-45MMUROF.js → teams-QZZG5ERQ.js} +4 -3
  69. package/{teams-45MMUROF.js.map → teams-QZZG5ERQ.js.map} +1 -1
  70. package/{telegram-7ZCSI24W.js → telegram-JEQYIW2X.js} +4 -3
  71. package/{telegram-7ZCSI24W.js.map → telegram-JEQYIW2X.js.map} +1 -1
  72. package/{variable-O33TDP4J.js → variable-LDKUIYU7.js} +4 -3
  73. package/{variable-O33TDP4J.js.map → variable-LDKUIYU7.js.map} +1 -1
  74. package/{video-D5LSABFJ.js → video-D3AUHQL2.js} +6 -4
  75. package/{video-D5LSABFJ.js.map → video-D3AUHQL2.js.map} +1 -1
  76. package/{web-JW7AH2UT.js → web-MUTRFMMA.js} +7 -5
  77. package/{web-JW7AH2UT.js.map → web-MUTRFMMA.js.map} +1 -1
  78. package/{web-search-MHFQFZS6.js → web-search-KBLKNBIF.js} +4 -3
  79. package/{web-search-MHFQFZS6.js.map → web-search-KBLKNBIF.js.map} +1 -1
  80. package/{whoami-5DJLOQUZ.js → whoami-POJMF7BB.js} +6 -5
  81. package/{whoami-5DJLOQUZ.js.map → whoami-POJMF7BB.js.map} +1 -1
  82. package/{workflow-TXG3RBJR.js → workflow-GXTNSIWC.js} +4 -3
  83. package/{workflow-TXG3RBJR.js.map → workflow-GXTNSIWC.js.map} +1 -1
  84. package/zero.js +35 -35
  85. package/chunk-26BGLMA3.js.map +0 -1
  86. package/chunk-5QJVQEHO.js +0 -240
  87. package/chunk-5QJVQEHO.js.map +0 -1
  88. package/chunk-E32I3TNQ.js.map +0 -1
  89. package/chunk-NR6ANGRK.js.map +0 -1
  90. package/chunk-ZUSDQG2O.js +0 -50
  91. package/chunk-ZUSDQG2O.js.map +0 -1
  92. package/host-T52XQ2SZ.js.map +0 -1
  93. package/logs-D4IL5OLR.js.map +0 -1
  94. package/search-RXP4DMUC.js.map +0 -1
  95. /package/{chunk-7KSTVBNN.js.map → chunk-ARENVRJY.js.map} +0 -0
  96. /package/{chunk-M6GLCPCJ.js.map → chunk-DE4HMRSU.js.map} +0 -0
  97. /package/{chunk-STMJYQTH.js.map → chunk-FVYB5CBP.js.map} +0 -0
  98. /package/{chunk-BIJC6U3G.js.map → chunk-VN4PPSXU.js.map} +0 -0
  99. /package/{chunk-JWDLLCI3.js.map → chunk-YSVL5RAP.js.map} +0 -0
  100. /package/{chunk-QCG2H3VD.js.map → chunk-ZXCF4ARW.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-NR6ANGRK.js";
14
+ } from "./chunk-5XVBOER3.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-26BGLMA3.js";
25
+ upsertModelProviderResponseSchema,
26
+ withErrorHandler
27
+ } from "./chunk-XYZN3XWH.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
  });
@@ -11950,6 +11879,31 @@ var testSlackStateResponseSchema = external_exports.object({
11950
11879
  createdAt: external_exports.string()
11951
11880
  })
11952
11881
  ),
11882
+ chat_thread_routes: external_exports.array(
11883
+ external_exports.object({
11884
+ id: external_exports.string(),
11885
+ connectionId: external_exports.string(),
11886
+ channelId: external_exports.string(),
11887
+ threadTs: external_exports.string(),
11888
+ userId: external_exports.string(),
11889
+ backend: external_exports.enum(["legacy", "canonical"]),
11890
+ chatThreadId: external_exports.string().nullable(),
11891
+ createdAt: external_exports.string()
11892
+ })
11893
+ ),
11894
+ chat_ingress: external_exports.array(
11895
+ external_exports.object({
11896
+ id: external_exports.string(),
11897
+ routeId: external_exports.string(),
11898
+ eventId: external_exports.string(),
11899
+ payload: external_exports.string(),
11900
+ status: external_exports.enum(["pending", "processing", "processed", "failed"]),
11901
+ retryCount: external_exports.number(),
11902
+ lastError: external_exports.string().nullable(),
11903
+ createdAt: external_exports.string(),
11904
+ updatedAt: external_exports.string()
11905
+ })
11906
+ ),
11953
11907
  recent_runs: external_exports.array(
11954
11908
  external_exports.object({
11955
11909
  id: external_exports.string(),
@@ -11961,13 +11915,6 @@ var testSlackStateResponseSchema = external_exports.object({
11961
11915
  promptPreview: external_exports.string().nullable()
11962
11916
  })
11963
11917
  ),
11964
- artifact_storage: external_exports.object({
11965
- id: external_exports.string(),
11966
- headVersionId: external_exports.string().nullable(),
11967
- s3Prefix: external_exports.string(),
11968
- versionId: external_exports.string().nullable(),
11969
- versionS3Key: external_exports.string().nullable()
11970
- }).nullable(),
11971
11918
  org_metadata: external_exports.object({
11972
11919
  orgId: external_exports.string(),
11973
11920
  defaultAgentId: external_exports.string().nullable(),
@@ -11999,15 +11946,14 @@ var testSlackStateResponseSchema = external_exports.object({
11999
11946
  })
12000
11947
  )
12001
11948
  });
12002
- var testSlackStateContract = c26.router({
11949
+ var testSlackStateContract = c29.router({
12003
11950
  get: {
12004
11951
  method: "GET",
12005
11952
  path: "/api/test/slack-state",
12006
11953
  query: external_exports.object({
12007
11954
  team_id: external_exports.string().optional(),
12008
11955
  empty_team_id: external_exports.literal("1").optional(),
12009
- org_id: external_exports.string().optional(),
12010
- user_id: external_exports.string().optional()
11956
+ org_id: external_exports.string().optional()
12011
11957
  }),
12012
11958
  responses: {
12013
11959
  200: testSlackStateResponseSchema,
@@ -12045,7 +11991,7 @@ var testSlackStateContract = c26.router({
12045
11991
 
12046
11992
  // ../../packages/api-contracts/src/contracts/test-slack-mock.ts
12047
11993
  init_esm_shims();
12048
- var c27 = initContract();
11994
+ var c30 = initContract();
12049
11995
  var slackMockRequestBodySchema = external_exports.record(external_exports.string(), external_exports.unknown()).optional();
12050
11996
  var slackMockNotFoundSchema = external_exports.string();
12051
11997
  var testSlackMockOkResponseSchema = external_exports.object({
@@ -12111,7 +12057,7 @@ var testSlackMockUsersInfoResponseSchema = testSlackMockOkResponseSchema.extend(
12111
12057
  })
12112
12058
  })
12113
12059
  });
12114
- var testSlackMockContract = c27.router({
12060
+ var testSlackMockContract = c30.router({
12115
12061
  assistantThreadsSetStatus: {
12116
12062
  method: "POST",
12117
12063
  path: "/api/test/slack-mock/assistant.threads.setStatus",
@@ -12216,7 +12162,7 @@ var testSlackMockContract = c27.router({
12216
12162
 
12217
12163
  // ../../packages/api-contracts/src/contracts/test-telegram-mock.ts
12218
12164
  init_esm_shims();
12219
- var c28 = initContract();
12165
+ var c31 = initContract();
12220
12166
  var testTelegramMockPathParamsSchema = external_exports.object({
12221
12167
  botToken: external_exports.string(),
12222
12168
  method: external_exports.string()
@@ -12229,7 +12175,7 @@ var testTelegramMockErrorResponseSchema = external_exports.object({
12229
12175
  ok: external_exports.literal(false),
12230
12176
  description: external_exports.string()
12231
12177
  });
12232
- var testTelegramMockContract = c28.router({
12178
+ var testTelegramMockContract = c31.router({
12233
12179
  post: {
12234
12180
  method: "POST",
12235
12181
  path: "/api/test/telegram-mock/:botToken/:method",
@@ -12245,7 +12191,7 @@ var testTelegramMockContract = c28.router({
12245
12191
 
12246
12192
  // ../../packages/api-contracts/src/contracts/test-teams-mock.ts
12247
12193
  init_esm_shims();
12248
- var c29 = initContract();
12194
+ var c32 = initContract();
12249
12195
  var teamsMockBodySchema = external_exports.record(external_exports.string(), external_exports.unknown()).optional();
12250
12196
  var teamsMockOkSchema = external_exports.object({ ok: external_exports.literal(true) });
12251
12197
  var teamsMockTokenResponseSchema = external_exports.object({
@@ -12281,7 +12227,7 @@ var testTeamsMockGraphMessagePathParamsSchema = testTeamsMockGraphMessagesPathPa
12281
12227
  var testTeamsMockGraphUserPathParamsSchema = external_exports.object({
12282
12228
  userId: external_exports.string()
12283
12229
  });
12284
- var testTeamsMockContract = c29.router({
12230
+ var testTeamsMockContract = c32.router({
12285
12231
  token: {
12286
12232
  method: "POST",
12287
12233
  path: "/api/test/teams-mock/token",
@@ -12390,7 +12336,7 @@ var testTeamsMockContract = c29.router({
12390
12336
 
12391
12337
  // ../../packages/api-contracts/src/contracts/test-teams-state.ts
12392
12338
  init_esm_shims();
12393
- var c30 = initContract();
12339
+ var c33 = initContract();
12394
12340
  var testTeamsStateErrorSchema = external_exports.object({
12395
12341
  error: external_exports.string()
12396
12342
  });
@@ -12511,7 +12457,7 @@ var testTeamsStateResponseSchema = external_exports.object({
12511
12457
  })
12512
12458
  )
12513
12459
  });
12514
- var testTeamsStateContract = c30.router({
12460
+ var testTeamsStateContract = c33.router({
12515
12461
  get: {
12516
12462
  method: "GET",
12517
12463
  path: "/api/test/teams-state",
@@ -12555,7 +12501,7 @@ var testTeamsStateContract = c30.router({
12555
12501
 
12556
12502
  // ../../packages/api-contracts/src/contracts/test-telegram-state.ts
12557
12503
  init_esm_shims();
12558
- var c31 = initContract();
12504
+ var c34 = initContract();
12559
12505
  var testTelegramStateQuerySchema = external_exports.object({
12560
12506
  bot_id: external_exports.string().optional()
12561
12507
  });
@@ -12631,7 +12577,7 @@ var testTelegramStateSeedResponseSchema = external_exports.object({
12631
12577
  user_link_id: external_exports.string().nullable(),
12632
12578
  default_agent_id: external_exports.string()
12633
12579
  });
12634
- var testTelegramStateContract = c31.router({
12580
+ var testTelegramStateContract = c34.router({
12635
12581
  get: {
12636
12582
  method: "GET",
12637
12583
  path: "/api/test/telegram-state",
@@ -12680,7 +12626,7 @@ var testTelegramStateContract = c31.router({
12680
12626
 
12681
12627
  // ../../packages/api-contracts/src/contracts/cron.ts
12682
12628
  init_esm_shims();
12683
- var c32 = initContract();
12629
+ var c35 = initContract();
12684
12630
  var cleanupResultSchema = external_exports.object({
12685
12631
  runId: external_exports.string(),
12686
12632
  sandboxId: external_exports.string().nullable(),
@@ -12695,7 +12641,7 @@ var cleanupResponseSchema = external_exports.object({
12695
12641
  exportJobsCleaned: external_exports.number(),
12696
12642
  exportJobsStuck: external_exports.number()
12697
12643
  });
12698
- var cronCleanupSandboxesContract = c32.router({
12644
+ var cronCleanupSandboxesContract = c35.router({
12699
12645
  /**
12700
12646
  * GET /api/cron/cleanup-sandboxes
12701
12647
  * Cron job to cleanup sandboxes that have stopped sending heartbeats
@@ -12821,6 +12767,11 @@ var cronExecuteWorkflowAutomationsResponseSchema = external_exports.object({
12821
12767
  executed: external_exports.number(),
12822
12768
  skipped: external_exports.number()
12823
12769
  });
12770
+ var cronExecuteMorningBriefsResponseSchema = external_exports.object({
12771
+ success: external_exports.literal(true),
12772
+ executed: external_exports.number(),
12773
+ skipped: external_exports.number()
12774
+ });
12824
12775
  var cronRenewGmailWatchesResponseSchema = external_exports.object({
12825
12776
  success: external_exports.literal(true),
12826
12777
  renewed: external_exports.number(),
@@ -12877,7 +12828,7 @@ var cronAggregateModelStatsResponseSchema = external_exports.object({
12877
12828
  windowEnd: external_exports.string(),
12878
12829
  aggregated: external_exports.number()
12879
12830
  });
12880
- var cronAggregateUsageContract = c32.router({
12831
+ var cronAggregateUsageContract = c35.router({
12881
12832
  aggregate: {
12882
12833
  method: "GET",
12883
12834
  path: "/api/cron/aggregate-usage",
@@ -12889,7 +12840,7 @@ var cronAggregateUsageContract = c32.router({
12889
12840
  summary: "Aggregate daily usage cache"
12890
12841
  }
12891
12842
  });
12892
- var cronProcessUsageEventsContract = c32.router({
12843
+ var cronProcessUsageEventsContract = c35.router({
12893
12844
  process: {
12894
12845
  method: "GET",
12895
12846
  path: "/api/cron/process-usage-events",
@@ -12901,7 +12852,7 @@ var cronProcessUsageEventsContract = c32.router({
12901
12852
  summary: "Process pending usage events"
12902
12853
  }
12903
12854
  });
12904
- var cronCompactChatThreadSnapshotsContract = c32.router({
12855
+ var cronCompactChatThreadSnapshotsContract = c35.router({
12905
12856
  compact: {
12906
12857
  method: "GET",
12907
12858
  path: "/api/cron/compact-chat-thread-snapshots",
@@ -12913,7 +12864,7 @@ var cronCompactChatThreadSnapshotsContract = c32.router({
12913
12864
  summary: "Compact chat thread snapshots from lifecycle events"
12914
12865
  }
12915
12866
  });
12916
- var cronMonitorChatMessageQueueContract = c32.router({
12867
+ var cronMonitorChatMessageQueueContract = c35.router({
12917
12868
  monitor: {
12918
12869
  method: "GET",
12919
12870
  path: "/api/cron/monitor-chat-message-queue",
@@ -12926,7 +12877,7 @@ var cronMonitorChatMessageQueueContract = c32.router({
12926
12877
  summary: "Monitor for orphaned queued chat messages"
12927
12878
  }
12928
12879
  });
12929
- var cronReconcileBillingEntitlementsContract = c32.router({
12880
+ var cronReconcileBillingEntitlementsContract = c35.router({
12930
12881
  reconcile: {
12931
12882
  method: "GET",
12932
12883
  path: "/api/cron/reconcile-billing-entitlements",
@@ -12938,7 +12889,7 @@ var cronReconcileBillingEntitlementsContract = c32.router({
12938
12889
  summary: "Reconcile billing entitlements"
12939
12890
  }
12940
12891
  });
12941
- var cronTelegramCleanupContract = c32.router({
12892
+ var cronTelegramCleanupContract = c35.router({
12942
12893
  cleanup: {
12943
12894
  method: "GET",
12944
12895
  path: "/api/cron/telegram-cleanup",
@@ -12950,7 +12901,7 @@ var cronTelegramCleanupContract = c32.router({
12950
12901
  summary: "Delete expired Telegram messages"
12951
12902
  }
12952
12903
  });
12953
- var cronComputerUseScreenshotCleanupContract = c32.router({
12904
+ var cronComputerUseScreenshotCleanupContract = c35.router({
12954
12905
  cleanup: {
12955
12906
  method: "GET",
12956
12907
  path: "/api/cron/computer-use-screenshot-cleanup",
@@ -12962,7 +12913,7 @@ var cronComputerUseScreenshotCleanupContract = c32.router({
12962
12913
  summary: "Delete expired desktop computer-use screenshots"
12963
12914
  }
12964
12915
  });
12965
- var cronArtifactPreviewContract = c32.router({
12916
+ var cronArtifactPreviewContract = c35.router({
12966
12917
  generate: {
12967
12918
  method: "GET",
12968
12919
  path: "/api/cron/artifact-preview",
@@ -12974,7 +12925,7 @@ var cronArtifactPreviewContract = c32.router({
12974
12925
  summary: "Render static preview images for HTML/website artifacts"
12975
12926
  }
12976
12927
  });
12977
- var cronDrainEmailOutboxContract = c32.router({
12928
+ var cronDrainEmailOutboxContract = c35.router({
12978
12929
  drain: {
12979
12930
  method: "GET",
12980
12931
  path: "/api/cron/drain-email-outbox",
@@ -12986,7 +12937,7 @@ var cronDrainEmailOutboxContract = c32.router({
12986
12937
  summary: "Drain pending email outbox messages"
12987
12938
  }
12988
12939
  });
12989
- var cronRenewGmailWatchesContract = c32.router({
12940
+ var cronRenewGmailWatchesContract = c35.router({
12990
12941
  renew: {
12991
12942
  method: "GET",
12992
12943
  path: "/api/cron/renew-gmail-watches",
@@ -12998,7 +12949,7 @@ var cronRenewGmailWatchesContract = c32.router({
12998
12949
  summary: "Renew Gmail push notification watches"
12999
12950
  }
13000
12951
  });
13001
- var cronRenewGoogleCalendarWatchesContract = c32.router({
12952
+ var cronRenewGoogleCalendarWatchesContract = c35.router({
13002
12953
  renew: {
13003
12954
  method: "GET",
13004
12955
  path: "/api/cron/renew-google-calendar-watches",
@@ -13010,7 +12961,7 @@ var cronRenewGoogleCalendarWatchesContract = c32.router({
13010
12961
  summary: "Renew Google Calendar push notification watches"
13011
12962
  }
13012
12963
  });
13013
- var cronRenewGoogleWorkspaceEventSubscriptionsContract = c32.router({
12964
+ var cronRenewGoogleWorkspaceEventSubscriptionsContract = c35.router({
13014
12965
  renew: {
13015
12966
  method: "GET",
13016
12967
  path: "/api/cron/renew-google-workspace-event-subscriptions",
@@ -13022,7 +12973,7 @@ var cronRenewGoogleWorkspaceEventSubscriptionsContract = c32.router({
13022
12973
  summary: "Renew Google Workspace Events subscriptions"
13023
12974
  }
13024
12975
  });
13025
- var cronSyncSkillsContract = c32.router({
12976
+ var cronSyncSkillsContract = c35.router({
13026
12977
  sync: {
13027
12978
  method: "GET",
13028
12979
  path: "/api/cron/sync-skills",
@@ -13034,7 +12985,7 @@ var cronSyncSkillsContract = c32.router({
13034
12985
  summary: "Sync official skills from the skills repository"
13035
12986
  }
13036
12987
  });
13037
- var cronConnectorCatalogContract = c32.router({
12988
+ var cronConnectorCatalogContract = c35.router({
13038
12989
  sync: {
13039
12990
  method: "GET",
13040
12991
  path: "/api/cron/sync-connector-catalog",
@@ -13056,7 +13007,7 @@ var cronConnectorCatalogContract = c32.router({
13056
13007
  summary: "Read connector catalog sync status"
13057
13008
  }
13058
13009
  });
13059
- var cronExecuteWorkflowAutomationsContract = c32.router({
13010
+ var cronExecuteWorkflowAutomationsContract = c35.router({
13060
13011
  execute: {
13061
13012
  method: "GET",
13062
13013
  path: "/api/cron/execute-workflow-automations",
@@ -13068,7 +13019,19 @@ var cronExecuteWorkflowAutomationsContract = c32.router({
13068
13019
  summary: "Execute due workflow automations"
13069
13020
  }
13070
13021
  });
13071
- var cronAggregateInsightsContract = c32.router({
13022
+ var cronExecuteMorningBriefsContract = c35.router({
13023
+ execute: {
13024
+ method: "GET",
13025
+ path: "/api/cron/execute-morning-briefs",
13026
+ headers: authHeadersSchema,
13027
+ responses: {
13028
+ 200: cronExecuteMorningBriefsResponseSchema,
13029
+ 401: apiErrorSchema
13030
+ },
13031
+ summary: "Execute due morning briefs"
13032
+ }
13033
+ });
13034
+ var cronAggregateInsightsContract = c35.router({
13072
13035
  aggregate: {
13073
13036
  method: "GET",
13074
13037
  path: "/api/cron/aggregate-insights",
@@ -13080,7 +13043,7 @@ var cronAggregateInsightsContract = c32.router({
13080
13043
  summary: "Aggregate daily usage insights"
13081
13044
  }
13082
13045
  });
13083
- var cronAggregateModelStatsContract = c32.router({
13046
+ var cronAggregateModelStatsContract = c35.router({
13084
13047
  aggregate: {
13085
13048
  method: "GET",
13086
13049
  path: "/api/cron/aggregate-model-stats",
@@ -13095,7 +13058,7 @@ var cronAggregateModelStatsContract = c32.router({
13095
13058
  summary: "Aggregate hourly model usage statistics"
13096
13059
  }
13097
13060
  });
13098
- var cronSummarizeMemoryContract = c32.router({
13061
+ var cronSummarizeMemoryContract = c35.router({
13099
13062
  summarize: {
13100
13063
  method: "GET",
13101
13064
  path: "/api/cron/summarize-memory",
@@ -13107,7 +13070,7 @@ var cronSummarizeMemoryContract = c32.router({
13107
13070
  summary: "Summarize daily memory changes per user"
13108
13071
  }
13109
13072
  });
13110
- var cronRefreshStoragePresignedUrlsContract = c32.router({
13073
+ var cronRefreshStoragePresignedUrlsContract = c35.router({
13111
13074
  refresh: {
13112
13075
  method: "GET",
13113
13076
  path: "/api/cron/refresh-storage-presigned-urls",
@@ -13120,199 +13083,83 @@ var cronRefreshStoragePresignedUrlsContract = c32.router({
13120
13083
  }
13121
13084
  });
13122
13085
 
13123
- // ../../packages/api-contracts/src/contracts/chat-threads-v1.ts
13086
+ // ../../packages/api-contracts/src/contracts/sessions.ts
13124
13087
  init_esm_shims();
13125
- var c33 = initContract();
13126
- var v1ThreadSchema = external_exports.object({
13088
+ var c36 = initContract();
13089
+ var sessionResponseSchema = external_exports.object({
13127
13090
  id: external_exports.string(),
13128
- title: external_exports.string().nullable(),
13091
+ agentComposeId: external_exports.string(),
13092
+ conversationId: external_exports.string().nullable(),
13093
+ artifactNames: external_exports.array(external_exports.string()),
13094
+ secretNames: external_exports.array(external_exports.string()).nullable(),
13129
13095
  createdAt: external_exports.string(),
13130
13096
  updatedAt: external_exports.string()
13131
13097
  });
13132
- var v1MessageSchema = external_exports.object({
13098
+ var agentComposeSnapshotSchema = external_exports.object({
13099
+ agentComposeVersionId: external_exports.string(),
13100
+ vars: external_exports.record(external_exports.string(), external_exports.string()).optional(),
13101
+ secretNames: external_exports.array(external_exports.string()).optional()
13102
+ });
13103
+ var volumeVersionsSnapshotSchema = external_exports.object({
13104
+ versions: external_exports.record(external_exports.string(), external_exports.string())
13105
+ });
13106
+ var checkpointResponseSchema = external_exports.object({
13133
13107
  id: external_exports.string(),
13134
- role: external_exports.enum(["user", "assistant"]),
13135
- content: external_exports.string().nullable(),
13136
- error: external_exports.string().optional(),
13108
+ runId: external_exports.string(),
13109
+ conversationId: external_exports.string(),
13110
+ agentComposeSnapshot: agentComposeSnapshotSchema,
13111
+ // Checkpoints persist context-artifact arrays, while the GET handler
13112
+ // projects them to this stable name-to-version response map.
13113
+ artifactSnapshots: external_exports.record(external_exports.string(), external_exports.string()).nullable(),
13114
+ volumeVersionsSnapshot: volumeVersionsSnapshotSchema.nullable(),
13137
13115
  createdAt: external_exports.string()
13138
13116
  });
13139
- var chatThreadV1GetContract = c33.router({
13140
- get: {
13117
+ var sessionsByIdContract = c36.router({
13118
+ /**
13119
+ * GET /api/agent/sessions/:id
13120
+ * Get session by ID
13121
+ */
13122
+ getById: {
13141
13123
  method: "GET",
13142
- path: "/api/v1/chat-threads/:threadId",
13124
+ path: "/api/agent/sessions/:id",
13143
13125
  headers: authHeadersSchema,
13144
- pathParams: external_exports.object({ threadId: external_exports.string().uuid() }),
13126
+ pathParams: external_exports.object({
13127
+ id: external_exports.string().min(1, "Session ID is required")
13128
+ }),
13145
13129
  responses: {
13146
- 200: v1ThreadSchema,
13130
+ 200: sessionResponseSchema,
13147
13131
  401: apiErrorSchema,
13148
13132
  403: apiErrorSchema,
13149
13133
  404: apiErrorSchema
13150
13134
  },
13151
- summary: "Get a chat thread"
13135
+ summary: "Get session by ID"
13152
13136
  }
13153
13137
  });
13154
- var chatThreadV1MessagesContract = c33.router({
13155
- list: {
13138
+ var checkpointsByIdContract = c36.router({
13139
+ /**
13140
+ * GET /api/agent/checkpoints/:id
13141
+ * Get checkpoint by ID
13142
+ */
13143
+ getById: {
13156
13144
  method: "GET",
13157
- path: "/api/v1/chat-threads/:threadId/messages",
13145
+ path: "/api/agent/checkpoints/:id",
13158
13146
  headers: authHeadersSchema,
13159
- pathParams: external_exports.object({ threadId: external_exports.string().uuid() }),
13160
- query: external_exports.object({
13161
- sinceId: external_exports.string().uuid().optional(),
13162
- beforeId: external_exports.string().uuid().optional(),
13163
- limit: external_exports.coerce.number().min(1).max(100).default(50)
13147
+ pathParams: external_exports.object({
13148
+ id: external_exports.string().min(1, "Checkpoint ID is required")
13164
13149
  }),
13165
13150
  responses: {
13166
- 200: external_exports.object({ messages: external_exports.array(v1MessageSchema) }),
13151
+ 200: checkpointResponseSchema,
13167
13152
  401: apiErrorSchema,
13168
13153
  403: apiErrorSchema,
13169
13154
  404: apiErrorSchema
13170
13155
  },
13171
- summary: "List messages in a chat thread"
13172
- }
13173
- });
13174
- var chatThreadV1SendContract = c33.router({
13175
- send: {
13176
- method: "POST",
13177
- path: "/api/v1/chat-threads/messages",
13178
- headers: authHeadersSchema,
13179
- body: external_exports.object({
13180
- prompt: external_exports.string().min(1),
13181
- threadId: external_exports.string().uuid()
13182
- }),
13183
- responses: {
13184
- 201: external_exports.object({
13185
- threadId: external_exports.string(),
13186
- messageId: external_exports.string(),
13187
- runId: external_exports.string().nullable(),
13188
- createdAt: external_exports.string()
13189
- }),
13190
- 400: apiErrorSchema,
13191
- 401: apiErrorSchema,
13192
- 402: apiErrorSchema,
13193
- 403: apiErrorSchema,
13194
- 404: apiErrorSchema,
13195
- 409: apiErrorSchema,
13196
- 422: apiErrorSchema,
13197
- 429: apiErrorSchema,
13198
- 503: apiErrorSchema
13199
- },
13200
- summary: "Send a chat message to an existing thread"
13201
- }
13202
- });
13203
-
13204
- // ../../packages/api-contracts/src/contracts/device-token.ts
13205
- init_esm_shims();
13206
- var c34 = initContract();
13207
- var bb0DeviceCodeSchema = external_exports.string().regex(/^[A-Z2-9]{4}-[A-Z2-9]{4}$/);
13208
- var bleSessionNonceSchema = external_exports.string().min(16).max(128).regex(/^[A-Za-z0-9._:-]+$/);
13209
- var pollTokenSchema = external_exports.string().min(32).max(256).regex(/^[A-Za-z0-9._-]+$/);
13210
- var createDeviceTokenRequestSchema = external_exports.object({
13211
- device_type: external_exports.literal("bb0"),
13212
- ble_session_nonce: bleSessionNonceSchema.optional()
13213
- });
13214
- var createDeviceTokenResponseSchema = external_exports.object({
13215
- device_code: bb0DeviceCodeSchema,
13216
- expires_in: external_exports.number().int().positive(),
13217
- interval: external_exports.number().int().positive(),
13218
- poll_token: pollTokenSchema
13219
- });
13220
- var pollDeviceTokenRequestSchema = external_exports.object({
13221
- device_code: bb0DeviceCodeSchema,
13222
- poll_token: pollTokenSchema
13223
- });
13224
- var pollDeviceTokenPendingResponseSchema = external_exports.object({
13225
- status: external_exports.literal("pending"),
13226
- interval: external_exports.number().int().positive()
13227
- });
13228
- var pollDeviceTokenApprovedResponseSchema = external_exports.object({
13229
- status: external_exports.literal("approved"),
13230
- api_token: external_exports.string(),
13231
- thread_id: external_exports.string().uuid()
13232
- });
13233
- var pollDeviceTokenExpiredResponseSchema = external_exports.object({
13234
- status: external_exports.literal("expired")
13235
- });
13236
- var pollDeviceTokenInvalidResponseSchema = external_exports.object({
13237
- status: external_exports.literal("invalid")
13238
- });
13239
- var confirmBb0DeviceRequestSchema = external_exports.object({
13240
- device_code: bb0DeviceCodeSchema
13241
- });
13242
- var confirmBb0DeviceResponseSchema = external_exports.object({
13243
- status: external_exports.literal("approved")
13244
- });
13245
- var deviceTokenContract = c34.router({
13246
- create: {
13247
- method: "POST",
13248
- path: "/api/device-token",
13249
- body: createDeviceTokenRequestSchema,
13250
- responses: {
13251
- 200: createDeviceTokenResponseSchema,
13252
- 400: apiErrorSchema
13253
- },
13254
- summary: "Create a short-lived device code for embedded device onboarding"
13255
- },
13256
- poll: {
13257
- method: "POST",
13258
- path: "/api/device-token/poll",
13259
- body: pollDeviceTokenRequestSchema,
13260
- responses: {
13261
- 200: pollDeviceTokenApprovedResponseSchema,
13262
- 202: pollDeviceTokenPendingResponseSchema,
13263
- 400: apiErrorSchema,
13264
- 404: pollDeviceTokenInvalidResponseSchema,
13265
- 410: pollDeviceTokenExpiredResponseSchema
13266
- },
13267
- summary: "Poll a bb0 device code for approval and final credentials"
13268
- }
13269
- });
13270
- var bb0DeviceConfirmContract = c34.router({
13271
- confirm: {
13272
- method: "POST",
13273
- path: "/api/zero/devices/bb0/confirm",
13274
- headers: authHeadersSchema,
13275
- body: confirmBb0DeviceRequestSchema,
13276
- responses: {
13277
- 200: confirmBb0DeviceResponseSchema,
13278
- 400: apiErrorSchema,
13279
- 401: apiErrorSchema,
13280
- 403: apiErrorSchema,
13281
- 404: apiErrorSchema
13282
- },
13283
- summary: "Confirm a bb0 device code for the authenticated user"
13284
- }
13285
- });
13286
-
13287
- // ../../packages/api-contracts/src/contracts/audio-transcriptions-v1.ts
13288
- init_esm_shims();
13289
- var c35 = initContract();
13290
- var audioTranscriptionV1Schema = external_exports.object({
13291
- text: external_exports.string()
13292
- });
13293
- var audioTranscriptionsV1Contract = c35.router({
13294
- transcribe: {
13295
- method: "POST",
13296
- path: "/api/v1/audio/transcriptions",
13297
- headers: authHeadersSchema,
13298
- body: c35.type(),
13299
- responses: {
13300
- 200: audioTranscriptionV1Schema,
13301
- 400: apiErrorSchema,
13302
- 401: apiErrorSchema,
13303
- 402: apiErrorSchema,
13304
- 403: apiErrorSchema,
13305
- 413: apiErrorSchema,
13306
- 429: apiErrorSchema,
13307
- 500: apiErrorSchema
13308
- },
13309
- summary: "Transcribe raw 16 kHz mono signed 16-bit PCM audio using the existing voice input pipeline"
13156
+ summary: "Get checkpoint by ID"
13310
13157
  }
13311
13158
  });
13312
13159
 
13313
13160
  // ../../packages/api-contracts/src/contracts/realtime.ts
13314
13161
  init_esm_shims();
13315
- var c36 = initContract();
13162
+ var c37 = initContract();
13316
13163
  var ablyTokenRequestSchema = external_exports.object({
13317
13164
  keyName: external_exports.string(),
13318
13165
  ttl: external_exports.number().optional(),
@@ -13322,7 +13169,7 @@ var ablyTokenRequestSchema = external_exports.object({
13322
13169
  nonce: external_exports.string(),
13323
13170
  mac: external_exports.string()
13324
13171
  });
13325
- var runnerRealtimeTokenContract = c36.router({
13172
+ var runnerRealtimeTokenContract = c37.router({
13326
13173
  /**
13327
13174
  * POST /api/runners/realtime/token
13328
13175
  * Get an Ably token to subscribe to a runner group's job notification channel
@@ -13344,7 +13191,7 @@ var runnerRealtimeTokenContract = c36.router({
13344
13191
  summary: "Get Ably token for runner group job notifications"
13345
13192
  }
13346
13193
  });
13347
- var platformRealtimeTokenContract = c36.router({
13194
+ var platformRealtimeTokenContract = c37.router({
13348
13195
  /**
13349
13196
  * POST /api/zero/realtime/token
13350
13197
  * Get an Ably token to subscribe to the authenticated user's push channel
@@ -27449,6 +27296,53 @@ var together = {
27449
27296
  }
27450
27297
  };
27451
27298
 
27299
+ // ../../packages/connectors/src/connectors/topvisor.ts
27300
+ init_esm_shims();
27301
+ var topvisor = {
27302
+ topvisor: {
27303
+ label: "Topvisor",
27304
+ category: "marketing-content-growth",
27305
+ tags: ["seo", "rank tracking", "keyword research", "serp", "site audit"],
27306
+ helpText: "Connect your Topvisor account to manage SEO projects, keywords, search rankings, SERP data, and site audits",
27307
+ authMethods: {
27308
+ "api-token": {
27309
+ label: "API Credentials",
27310
+ helpText: "1. Log in to [Topvisor](https://topvisor.com)\n2. Open **Account Settings**\n3. Copy your **User ID**\n4. Create or copy your **API Key** (Topvisor requires a funded account balance to create one)",
27311
+ storage: {
27312
+ version: 1,
27313
+ secrets: ["TOPVISOR_USER_ID", "TOPVISOR_TOKEN"],
27314
+ variables: []
27315
+ },
27316
+ grant: {
27317
+ kind: "manual",
27318
+ fields: {
27319
+ TOPVISOR_USER_ID: {
27320
+ label: "User ID",
27321
+ publicId: "userId",
27322
+ required: true,
27323
+ placeholder: "123456"
27324
+ },
27325
+ TOPVISOR_TOKEN: {
27326
+ label: "API Key",
27327
+ publicId: "apiKey",
27328
+ required: true,
27329
+ placeholder: "your-topvisor-api-key"
27330
+ }
27331
+ }
27332
+ },
27333
+ access: {
27334
+ kind: "static",
27335
+ envBindings: {
27336
+ TOPVISOR_USER_ID: "$secrets.TOPVISOR_USER_ID",
27337
+ TOPVISOR_TOKEN: "$secrets.TOPVISOR_TOKEN"
27338
+ }
27339
+ },
27340
+ revoke: { kind: "none" }
27341
+ }
27342
+ }
27343
+ }
27344
+ };
27345
+
27452
27346
  // ../../packages/connectors/src/connectors/tripo.ts
27453
27347
  init_esm_shims();
27454
27348
  var tripo = {
@@ -28711,6 +28605,7 @@ var CONNECTOR_TYPES_DEF = defineConnectors({
28711
28605
  ...ticketmaster,
28712
28606
  ...tldv,
28713
28607
  ...together,
28608
+ ...topvisor,
28714
28609
  ...tripo,
28715
28610
  ...twenty,
28716
28611
  ...twilio,
@@ -28751,7 +28646,7 @@ var HEX_DIGITS = new Set("0123456789abcdefABCDEF".split(""));
28751
28646
 
28752
28647
  // ../../packages/api-contracts/src/contracts/zero-feature-switches.ts
28753
28648
  init_esm_shims();
28754
- var c37 = initContract();
28649
+ var c38 = initContract();
28755
28650
  var featureSwitchesResponseSchema = external_exports.object({
28756
28651
  switches: external_exports.record(external_exports.string(), external_exports.boolean()),
28757
28652
  effectiveSwitches: external_exports.record(external_exports.string(), external_exports.boolean())
@@ -28759,7 +28654,7 @@ var featureSwitchesResponseSchema = external_exports.object({
28759
28654
  var updateFeatureSwitchesRequestSchema = external_exports.object({
28760
28655
  switches: external_exports.record(external_exports.string(), external_exports.boolean())
28761
28656
  });
28762
- var zeroFeatureSwitchesContract = c37.router({
28657
+ var zeroFeatureSwitchesContract = c38.router({
28763
28658
  get: {
28764
28659
  method: "GET",
28765
28660
  path: "/api/zero/feature-switches",
@@ -28788,7 +28683,7 @@ var zeroFeatureSwitchesContract = c37.router({
28788
28683
  method: "DELETE",
28789
28684
  path: "/api/zero/feature-switches",
28790
28685
  headers: authHeadersSchema,
28791
- body: c37.noBody(),
28686
+ body: c38.noBody(),
28792
28687
  responses: {
28793
28688
  200: external_exports.object({ deleted: external_exports.literal(true) }),
28794
28689
  401: apiErrorSchema,
@@ -28800,7 +28695,7 @@ var zeroFeatureSwitchesContract = c37.router({
28800
28695
 
28801
28696
  // ../../packages/api-contracts/src/contracts/zero-memory.ts
28802
28697
  init_esm_shims();
28803
- var c38 = initContract();
28698
+ var c39 = initContract();
28804
28699
  var memoryFileSchema = external_exports.object({
28805
28700
  path: external_exports.string(),
28806
28701
  size: external_exports.number()
@@ -28818,7 +28713,7 @@ var memoryDetailResponseSchema = external_exports.object({
28818
28713
  files: external_exports.array(memoryFileSchema),
28819
28714
  fileContents: external_exports.array(memoryFileContentSchema)
28820
28715
  });
28821
- var zeroMemoryContract = c38.router({
28716
+ var zeroMemoryContract = c39.router({
28822
28717
  get: {
28823
28718
  method: "GET",
28824
28719
  path: "/api/zero/memory",
@@ -28834,7 +28729,7 @@ var zeroMemoryContract = c38.router({
28834
28729
 
28835
28730
  // ../../packages/api-contracts/src/contracts/onboarding.ts
28836
28731
  init_esm_shims();
28837
- var c39 = initContract();
28732
+ var c40 = initContract();
28838
28733
  var onboardingStatusResponseSchema = external_exports.object({
28839
28734
  needsOnboarding: external_exports.boolean(),
28840
28735
  onboardingComplete: external_exports.boolean(),
@@ -28849,7 +28744,7 @@ var onboardingStatusResponseSchema = external_exports.object({
28849
28744
  avatarUrl: external_exports.string().optional()
28850
28745
  }).nullable()
28851
28746
  });
28852
- var onboardingStatusContract = c39.router({
28747
+ var onboardingStatusContract = c40.router({
28853
28748
  getStatus: {
28854
28749
  method: "GET",
28855
28750
  path: "/api/zero/onboarding/status",
@@ -28861,7 +28756,7 @@ var onboardingStatusContract = c39.router({
28861
28756
  summary: "Get onboarding status for current user"
28862
28757
  }
28863
28758
  });
28864
- var onboardingCompleteContract = c39.router({
28759
+ var onboardingCompleteContract = c40.router({
28865
28760
  complete: {
28866
28761
  method: "POST",
28867
28762
  path: "/api/zero/onboarding/complete",
@@ -28889,7 +28784,7 @@ var skillFrontmatterSchema = external_exports.object({
28889
28784
 
28890
28785
  // ../../packages/api-contracts/src/contracts/zero-codex-device-auth.ts
28891
28786
  init_esm_shims();
28892
- var c40 = initContract();
28787
+ var c41 = initContract();
28893
28788
  var codexDeviceAuthScopeSchema = external_exports.enum(["org", "personal"]);
28894
28789
  var codexDeviceAuthStartResponseSchema = external_exports.object({
28895
28790
  sessionToken: external_exports.string(),
@@ -28915,7 +28810,7 @@ var codexDeviceAuthCompleteResponseSchema = external_exports.discriminatedUnion(
28915
28810
  var codexDeviceAuthCancelResponseSchema = external_exports.object({
28916
28811
  status: external_exports.literal("cancelled")
28917
28812
  });
28918
- var zeroCodexDeviceAuthContract = c40.router({
28813
+ var zeroCodexDeviceAuthContract = c41.router({
28919
28814
  start: {
28920
28815
  method: "POST",
28921
28816
  path: "/api/zero/model-providers/codex/device-auth/sessions",
@@ -28963,7 +28858,7 @@ var zeroCodexDeviceAuthContract = c40.router({
28963
28858
 
28964
28859
  // ../../packages/api-contracts/src/contracts/zero-claude-code-device-auth.ts
28965
28860
  init_esm_shims();
28966
- var c41 = initContract();
28861
+ var c42 = initContract();
28967
28862
  var claudeCodeDeviceAuthScopeSchema = external_exports.enum(["org", "personal"]);
28968
28863
  var claudeCodeDeviceAuthStartResponseSchema = external_exports.object({
28969
28864
  sessionToken: external_exports.string(),
@@ -28981,7 +28876,7 @@ var claudeCodeDeviceAuthCompleteResponseSchema = external_exports.object({
28981
28876
  var claudeCodeDeviceAuthCancelResponseSchema = external_exports.object({
28982
28877
  status: external_exports.literal("cancelled")
28983
28878
  });
28984
- var zeroClaudeCodeDeviceAuthContract = c41.router({
28879
+ var zeroClaudeCodeDeviceAuthContract = c42.router({
28985
28880
  start: {
28986
28881
  method: "POST",
28987
28882
  path: "/api/zero/model-providers/claude-code/device-auth/sessions",
@@ -29032,12 +28927,12 @@ var zeroClaudeCodeDeviceAuthContract = c41.router({
29032
28927
 
29033
28928
  // ../../packages/api-contracts/src/contracts/zero-org-logo.ts
29034
28929
  init_esm_shims();
29035
- var c42 = initContract();
28930
+ var c43 = initContract();
29036
28931
  var zeroOrgLogoResponseSchema = external_exports.object({
29037
28932
  logoUrl: external_exports.string().nullable(),
29038
28933
  hasImage: external_exports.boolean()
29039
28934
  });
29040
- var zeroOrgLogoContract = c42.router({
28935
+ var zeroOrgLogoContract = c43.router({
29041
28936
  get: {
29042
28937
  method: "GET",
29043
28938
  path: "/api/zero/org/logo",
@@ -29055,7 +28950,7 @@ var zeroOrgLogoContract = c42.router({
29055
28950
  path: "/api/zero/org/logo",
29056
28951
  headers: authHeadersSchema,
29057
28952
  contentType: "multipart/form-data",
29058
- body: c42.type(),
28953
+ body: c43.type(),
29059
28954
  responses: {
29060
28955
  200: zeroOrgLogoResponseSchema,
29061
28956
  400: apiErrorSchema,
@@ -29082,8 +28977,8 @@ var zeroOrgLogoContract = c42.router({
29082
28977
 
29083
28978
  // ../../packages/api-contracts/src/contracts/zero-composes.ts
29084
28979
  init_esm_shims();
29085
- var c43 = initContract();
29086
- var zeroComposesListContract = c43.router({
28980
+ var c44 = initContract();
28981
+ var zeroComposesListContract = c44.router({
29087
28982
  list: {
29088
28983
  method: "GET",
29089
28984
  path: "/api/zero/composes/list",
@@ -29103,14 +28998,14 @@ var zeroComposesListContract = c43.router({
29103
28998
 
29104
28999
  // ../../packages/api-contracts/src/contracts/zero-personal-model-providers.ts
29105
29000
  init_esm_shims();
29106
- var c44 = initContract();
29001
+ var c45 = initContract();
29107
29002
  var resetPersonalModelProviderSubscriptionUsageRequestSchema = external_exports.object({
29108
29003
  idempotencyKey: external_exports.uuid()
29109
29004
  });
29110
29005
  var resetPersonalModelProviderSubscriptionUsageResponseSchema = external_exports.object({
29111
29006
  outcome: external_exports.enum(["reset", "nothingToReset", "noCredit", "alreadyRedeemed"])
29112
29007
  });
29113
- var zeroPersonalModelProvidersMainContract = c44.router({
29008
+ var zeroPersonalModelProvidersMainContract = c45.router({
29114
29009
  list: {
29115
29010
  method: "GET",
29116
29011
  path: "/api/zero/me/model-providers",
@@ -29139,7 +29034,7 @@ var zeroPersonalModelProvidersMainContract = c44.router({
29139
29034
  summary: "Create or update a personal model provider for the requesting user"
29140
29035
  }
29141
29036
  });
29142
- var zeroPersonalModelProvidersByTypeContract = c44.router({
29037
+ var zeroPersonalModelProvidersByTypeContract = c45.router({
29143
29038
  delete: {
29144
29039
  method: "DELETE",
29145
29040
  path: "/api/zero/me/model-providers/:type",
@@ -29148,7 +29043,7 @@ var zeroPersonalModelProvidersByTypeContract = c44.router({
29148
29043
  type: modelProviderTypeSchema
29149
29044
  }),
29150
29045
  responses: {
29151
- 204: c44.noBody(),
29046
+ 204: c45.noBody(),
29152
29047
  401: apiErrorSchema,
29153
29048
  404: apiErrorSchema,
29154
29049
  500: apiErrorSchema
@@ -29176,7 +29071,7 @@ var zeroPersonalModelProvidersByTypeContract = c44.router({
29176
29071
 
29177
29072
  // ../../packages/api-contracts/src/contracts/zero-memory-dev-refresh.ts
29178
29073
  init_esm_shims();
29179
- var c45 = initContract();
29074
+ var c46 = initContract();
29180
29075
  var memoryDevRefreshSkippedResponseSchema = external_exports.object({
29181
29076
  skipped: external_exports.literal(true)
29182
29077
  });
@@ -29187,12 +29082,12 @@ var memoryDevRefreshResponseSchema = external_exports.union([
29187
29082
  memoryDevRefreshSkippedResponseSchema,
29188
29083
  memoryDevRefreshSummarizedResponseSchema
29189
29084
  ]);
29190
- var zeroMemoryDevRefreshContract = c45.router({
29085
+ var zeroMemoryDevRefreshContract = c46.router({
29191
29086
  refresh: {
29192
29087
  method: "POST",
29193
29088
  path: "/api/zero/memory/dev-refresh",
29194
29089
  headers: authHeadersSchema,
29195
- body: c45.noBody(),
29090
+ body: c46.noBody(),
29196
29091
  responses: {
29197
29092
  200: memoryDevRefreshResponseSchema,
29198
29093
  401: apiErrorSchema,
@@ -29203,69 +29098,6 @@ var zeroMemoryDevRefreshContract = c45.router({
29203
29098
  }
29204
29099
  });
29205
29100
 
29206
- // ../../packages/api-contracts/src/contracts/api-keys.ts
29207
- init_esm_shims();
29208
- var c46 = initContract();
29209
- var apiKeyItemSchema = external_exports.object({
29210
- id: external_exports.string().uuid(),
29211
- name: external_exports.string(),
29212
- tokenPrefix: external_exports.string(),
29213
- createdAt: external_exports.string(),
29214
- expiresAt: external_exports.string(),
29215
- lastUsedAt: external_exports.string().nullable()
29216
- });
29217
- var apiKeyListResponseSchema = external_exports.object({
29218
- apiKeys: external_exports.array(apiKeyItemSchema)
29219
- });
29220
- var createApiKeyRequestSchema = external_exports.object({
29221
- name: external_exports.string().min(1).max(100),
29222
- expiresInDays: external_exports.number().int().positive().max(3650)
29223
- });
29224
- var createApiKeyResponseSchema = apiKeyItemSchema.extend({
29225
- token: external_exports.string()
29226
- });
29227
- var apiKeysContract = c46.router({
29228
- list: {
29229
- method: "GET",
29230
- path: "/api/zero/api-keys",
29231
- headers: authHeadersSchema,
29232
- responses: {
29233
- 200: apiKeyListResponseSchema,
29234
- 401: apiErrorSchema,
29235
- 500: apiErrorSchema
29236
- },
29237
- summary: "List caller's API keys (metadata only)"
29238
- },
29239
- create: {
29240
- method: "POST",
29241
- path: "/api/zero/api-keys",
29242
- headers: authHeadersSchema,
29243
- body: createApiKeyRequestSchema,
29244
- responses: {
29245
- 201: createApiKeyResponseSchema,
29246
- 400: apiErrorSchema,
29247
- 401: apiErrorSchema,
29248
- 500: apiErrorSchema
29249
- },
29250
- summary: "Create a new API key (token returned once)"
29251
- }
29252
- });
29253
- var apiKeysByIdContract = c46.router({
29254
- delete: {
29255
- method: "DELETE",
29256
- path: "/api/zero/api-keys/:id",
29257
- headers: authHeadersSchema,
29258
- pathParams: external_exports.object({ id: external_exports.string().uuid() }),
29259
- responses: {
29260
- 204: c46.noBody(),
29261
- 401: apiErrorSchema,
29262
- 404: apiErrorSchema,
29263
- 500: apiErrorSchema
29264
- },
29265
- summary: "Revoke (delete) an API key"
29266
- }
29267
- });
29268
-
29269
29101
  // ../../packages/api-contracts/src/contracts/integrations-github.ts
29270
29102
  init_esm_shims();
29271
29103
  var c47 = initContract();
@@ -31823,6 +31655,11 @@ var FEATURE_SWITCHES = {
31823
31655
  description: "Reveal activity debug surfaces, activity log navigation, appended system prompts, and Debug preferences",
31824
31656
  enabled: false
31825
31657
  },
31658
+ ["canonicalSlackIngress" /* CanonicalSlackIngress */]: {
31659
+ maintainer: "lancy@vm0.ai",
31660
+ description: "Route newly admitted per-user Slack threads through canonical chat ingress.",
31661
+ enabled: false
31662
+ },
31826
31663
  ["zeroScrape" /* ZeroScrape */]: {
31827
31664
  maintainer: "liangyou@vm0.ai",
31828
31665
  description: "Enable the managed Firecrawl-backed Zero Scrape API and scrape:read ZERO_TOKEN capability.",
@@ -31847,6 +31684,20 @@ var FEATURE_SWITCHES = {
31847
31684
  enabled: false,
31848
31685
  enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31849
31686
  },
31687
+ ["morningBrief" /* MorningBrief */]: {
31688
+ maintainer: "ethan@vm0.ai",
31689
+ description: "Enable the daily 7:00 local-time Morning Brief email built from GitHub, Gmail, and Google Calendar.",
31690
+ enabled: false,
31691
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES,
31692
+ userOverridable: true
31693
+ },
31694
+ ["manualMorningBrief" /* ManualMorningBrief */]: {
31695
+ maintainer: "ethan@vm0.ai",
31696
+ description: "Show a Send now button in Settings that triggers a Morning Brief immediately for testing.",
31697
+ enabled: false,
31698
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES,
31699
+ userOverridable: true
31700
+ },
31850
31701
  ["notionWorkflowAutomations" /* NotionWorkflowAutomations */]: {
31851
31702
  maintainer: "lancy@vm0.ai",
31852
31703
  description: "Enable Notion event workflow automations, starting with child pages created under a configured parent page.",
@@ -31878,12 +31729,6 @@ var FEATURE_SWITCHES = {
31878
31729
  description: "Enable the Workday HCM and finance connector",
31879
31730
  enabled: false
31880
31731
  },
31881
- ["apiKeys" /* ApiKeys */]: {
31882
- maintainer: "ethan@vm0.ai",
31883
- 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.",
31884
- enabled: false,
31885
- enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31886
- },
31887
31732
  ["codexFastMode" /* CodexFastMode */]: {
31888
31733
  maintainer: "lancy@vm0.ai",
31889
31734
  description: "Enable Codex fast mode for ChatGPT subscription GPT 5.5 and GPT 5.6 web chat runs.",
@@ -31906,6 +31751,12 @@ var FEATURE_SWITCHES = {
31906
31751
  enabled: false,
31907
31752
  userOverridable: false
31908
31753
  },
31754
+ ["structuredPrompt" /* StructuredPrompt */]: {
31755
+ maintainer: "bingjie@vm0.ai",
31756
+ description: "Enable structured user prompt rendering, sends, and drafts while preserving the legacy content fallback.",
31757
+ enabled: false,
31758
+ enabledOrgIdHashes: STAFF_ORG_ID_HASHES
31759
+ },
31909
31760
  ["zapierConnector" /* ZapierConnector */]: {
31910
31761
  maintainer: "yuma@vm0.ai",
31911
31762
  description: "Enable the Zapier connector. When disabled, Zapier is hidden from the connectors list and cannot be connected.",
@@ -33851,454 +33702,231 @@ var EventRenderer = class _EventRenderer {
33851
33702
  }
33852
33703
  };
33853
33704
 
33854
- // src/commands/run/shared.ts
33705
+ // src/lib/utils/log-pagination.ts
33855
33706
  init_esm_shims();
33856
- var import_dotenv = __toESM(require_main(), 1);
33857
- import * as fs from "fs";
33858
- function collectKeyValue(value, previous) {
33859
- const [key, ...valueParts] = value.split("=");
33860
- const val = valueParts.join("=");
33861
- if (!key || val === void 0 || val === "") {
33862
- throw new Error(`Invalid format: ${value} (expected KEY=value)`);
33707
+ function parsePositiveLogCount(value, optionName) {
33708
+ const trimmed = value.trim();
33709
+ if (!/^0*[1-9]\d*$/.test(trimmed)) {
33710
+ throw new Error(`Option ${optionName} must be a positive integer`);
33863
33711
  }
33864
- return { ...previous, [key]: val };
33865
- }
33866
- function collectVolumeVersions(value, previous) {
33867
- const [volumeName, ...versionParts] = value.split("=");
33868
- const version = versionParts.join("=");
33869
- if (!volumeName || version === void 0 || version === "") {
33870
- throw new Error(
33871
- `Invalid volume-version format: ${value} (expected volumeName=version)`
33872
- );
33712
+ const count = Number(trimmed);
33713
+ if (!Number.isSafeInteger(count)) {
33714
+ throw new Error(`Option ${optionName} must be a positive integer`);
33873
33715
  }
33874
- return { ...previous, [volumeName]: version };
33716
+ return count;
33875
33717
  }
33876
- function parseMount(value, flagLabel) {
33877
- const parts = value.split(":");
33878
- if (parts.length < 2 || parts.length > 3) {
33879
- throw new Error(
33880
- `Invalid ${flagLabel} format: ${value} (expected name:/path or name:version:/path)`
33881
- );
33882
- }
33883
- const name = parts[0];
33884
- const mountPath = parts.length === 3 ? parts[2] : parts[1];
33885
- if (!name) {
33886
- throw new Error(
33887
- `Invalid ${flagLabel} format: ${value} (name cannot be empty)`
33888
- );
33889
- }
33890
- if (!mountPath.startsWith("/")) {
33891
- throw new Error(
33892
- `Invalid ${flagLabel} mount path: ${mountPath} (must start with /)`
33893
- );
33894
- }
33895
- if (parts.length === 2) {
33896
- return { name, mountPath };
33718
+ function parseBoundedLogCount(value, optionName, min, max) {
33719
+ const trimmed = value.trim();
33720
+ if (!/^\d+$/.test(trimmed)) {
33721
+ throw new Error(`${optionName} must be between ${min} and ${max}`);
33897
33722
  }
33898
- const version = parts[1];
33899
- if (!version) {
33900
- throw new Error(
33901
- `Invalid ${flagLabel} format: ${value} (version cannot be empty)`
33902
- );
33723
+ const count = Number(trimmed);
33724
+ if (!Number.isSafeInteger(count) || count < min || count > max) {
33725
+ throw new Error(`${optionName} must be between ${min} and ${max}`);
33903
33726
  }
33904
- return { name, version, mountPath };
33905
- }
33906
- function collectMounts(value, previous) {
33907
- return [...previous, parseMount(value, "volume")];
33908
- }
33909
- function collectArtifacts(value, previous) {
33910
- return [...previous, parseMount(value, "artifact")];
33727
+ return count;
33911
33728
  }
33912
- function parsePermissionPolicies(json) {
33913
- if (!json) return void 0;
33914
- let parsed;
33915
- try {
33916
- parsed = JSON.parse(json);
33917
- } catch {
33918
- throw new Error(
33919
- `Invalid --permission-policies JSON: ${json}
33920
- Expected format: '{"ref": {"permissions": {"perm": "allow|deny|ask"}}}'`
33921
- );
33922
- }
33923
- const result = firewallPoliciesSchema.safeParse(parsed);
33924
- if (!result.success) {
33925
- throw new Error(
33926
- `Invalid --permission-policies: ${result.error.issues.map((i) => {
33927
- return i.message;
33928
- }).join(", ")}`
33929
- );
33729
+ async function collectLogItems(options) {
33730
+ const collected = [];
33731
+ const seenCursors = /* @__PURE__ */ new Set();
33732
+ let cursor2;
33733
+ while (true) {
33734
+ const requestLimit = options.targetCount === "all" ? options.pageLimit : Math.min(options.pageLimit, options.targetCount - collected.length);
33735
+ const page = await options.fetchPage({
33736
+ sinceTime: options.sinceTime,
33737
+ cursor: cursor2,
33738
+ limit: requestLimit,
33739
+ order: options.order
33740
+ });
33741
+ collected.push(...page.items);
33742
+ if (options.targetCount !== "all" && collected.length >= options.targetCount) {
33743
+ break;
33744
+ }
33745
+ const nextCursor = page.nextCursor ?? null;
33746
+ if (!page.hasMore || !nextCursor || seenCursors.has(nextCursor)) {
33747
+ break;
33748
+ }
33749
+ seenCursors.add(nextCursor);
33750
+ cursor2 = nextCursor;
33930
33751
  }
33931
- return result.data;
33752
+ const entries = options.targetCount === "all" ? collected : collected.slice(0, options.targetCount);
33753
+ return options.order === "desc" ? entries.reverse() : entries;
33932
33754
  }
33755
+
33756
+ // src/lib/utils/uuid.ts
33757
+ init_esm_shims();
33933
33758
  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;
33934
- function isUUID(str) {
33935
- return UUID_PATTERN.test(str);
33759
+ function isUuid(value) {
33760
+ return UUID_PATTERN.test(value);
33936
33761
  }
33937
- function extractVarNames(composeContent) {
33938
- const grouped = extractAndGroupVariables(composeContent);
33939
- return grouped.vars.map((r) => {
33940
- return r.name;
33941
- });
33942
- }
33943
- function extractSecretNames(composeContent) {
33944
- const grouped = extractAndGroupVariables(composeContent);
33945
- return grouped.secrets.map((r) => {
33946
- return r.name;
33947
- });
33948
- }
33949
- function loadValues(cliValues, configNames, envFilePath) {
33950
- const result = { ...cliValues };
33951
- const missingNames = configNames.filter((name) => {
33952
- return !(name in result);
33953
- });
33954
- if (missingNames.length > 0) {
33955
- const envValues = {};
33956
- for (const name of missingNames) {
33957
- const envValue = process.env[name];
33958
- if (envValue !== void 0) {
33959
- envValues[name] = envValue;
33960
- }
33961
- }
33962
- let fileValues = {};
33963
- if (envFilePath) {
33964
- if (!fs.existsSync(envFilePath)) {
33965
- throw new Error(`Environment file not found: ${envFilePath}`);
33966
- }
33967
- const dotenvResult = (0, import_dotenv.config)({ path: envFilePath, quiet: true });
33968
- if (dotenvResult.parsed) {
33969
- fileValues = Object.fromEntries(
33970
- Object.entries(dotenvResult.parsed).filter(([key]) => {
33971
- return missingNames.includes(key);
33972
- })
33973
- );
33974
- }
33975
- }
33976
- Object.assign(result, envValues, fileValues);
33762
+
33763
+ // src/lib/utils/search-query.ts
33764
+ init_esm_shims();
33765
+ function parseSearchQuery(value, label) {
33766
+ const trimmed = value.trim();
33767
+ if (!trimmed) {
33768
+ throw new Error(`${label} cannot be empty.`);
33977
33769
  }
33978
- return Object.keys(result).length > 0 ? result : void 0;
33770
+ return trimmed;
33979
33771
  }
33980
- function parseIdentifier(identifier) {
33981
- if (isUUID(identifier)) {
33982
- return { name: identifier };
33983
- }
33984
- const colonIndex = identifier.indexOf(":");
33985
- if (colonIndex > 0 && colonIndex < identifier.length - 1) {
33986
- return {
33987
- name: identifier.slice(0, colonIndex),
33988
- version: identifier.slice(colonIndex + 1)
33989
- };
33990
- }
33991
- return { name: identifier };
33772
+
33773
+ // src/commands/zero/logs/search.ts
33774
+ init_esm_shims();
33775
+ var SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1e3;
33776
+ function supportedSearchFramework(framework) {
33777
+ const normalized = framework ?? void 0;
33778
+ return isSupportedFramework(normalized) ? normalized : void 0;
33992
33779
  }
33993
- function renderRunCreated(response) {
33994
- if (response.status === "queued") {
33995
- console.log(source_default.yellow("\u26A0 Run queued \u2014 concurrency limit reached"));
33996
- console.log(` Run ID: ${source_default.dim(response.runId)}`);
33997
- console.log(
33998
- source_default.dim(" Will start automatically when a slot is available")
33999
- );
34000
- console.log();
34001
- } else {
34002
- EventRenderer.renderRunStarted({
34003
- runId: response.runId,
34004
- sandboxId: response.sandboxId
34005
- });
33780
+ function renderSearchEvent(event, framework, renderer, normalizer) {
33781
+ const parsedEvents = normalizer.process(
33782
+ event.eventData,
33783
+ supportedSearchFramework(framework),
33784
+ new Date(event.createdAt)
33785
+ );
33786
+ for (const parsed of parsedEvents) {
33787
+ renderer.render(parsed);
34006
33788
  }
34007
33789
  }
34008
- var TERMINAL_RUN_STATUSES = [
34009
- "completed",
34010
- "failed",
34011
- "timeout",
34012
- "cancelled"
34013
- ];
34014
- var POLL_INTERVAL_MS = 1e3;
34015
- var TERMINAL_DRAIN_POLL_INTERVAL_MS = 500;
34016
- var TERMINAL_DRAIN_IDLE_MS = 1e3;
34017
- var TERMINAL_DRAIN_MAX_MS = 3e3;
34018
- function supportedEventFramework(framework) {
34019
- return isSupportedFramework(framework) ? framework : void 0;
34020
- }
34021
- function isTerminalRunState(run) {
34022
- return TERMINAL_RUN_STATUSES.includes(run.status);
34023
- }
34024
- function shouldDrainNextEventPage(response, madeSequenceProgress) {
34025
- return response.hasMore && response.events.length > 0 && madeSequenceProgress;
34026
- }
34027
- function isBlockedBySequenceGap(response, madeSequenceProgress) {
34028
- return response.hasMore && !madeSequenceProgress;
34029
- }
34030
- function hasTerminalWatermark(run) {
34031
- return run.lastEventSequence !== void 0;
34032
- }
34033
- function hasReachedTerminalWatermark(run, nextSequence) {
34034
- return run.lastEventSequence !== void 0 && nextSequence >= run.lastEventSequence;
34035
- }
34036
- function shouldCompleteTerminalDrain(terminalSeenAt, lastTerminalProgressAt, blockedByGap) {
34037
- const now = Date.now();
34038
- const terminalElapsedMs = now - terminalSeenAt;
34039
- const terminalIdleMs = now - lastTerminalProgressAt;
34040
- return terminalElapsedMs >= TERMINAL_DRAIN_MAX_MS || !blockedByGap && terminalIdleMs >= TERMINAL_DRAIN_IDLE_MS;
34041
- }
34042
- function updateTerminalDrainState(state, run, madeSequenceProgress, now) {
34043
- if (isTerminalRunState(run)) {
34044
- if (!state.runState) {
34045
- state.seenAt = now;
34046
- state.lastProgressAt = now;
34047
- } else if (madeSequenceProgress) {
34048
- state.lastProgressAt = now;
34049
- }
34050
- state.runState = run;
34051
- return;
34052
- }
34053
- if (state.runState && madeSequenceProgress) {
34054
- state.lastProgressAt = now;
33790
+ function flushSearchRenderer(renderer, normalizer) {
33791
+ for (const parsed of normalizer.flush()) {
33792
+ renderer.render(parsed);
34055
33793
  }
33794
+ renderer.flush();
34056
33795
  }
34057
- function isBlockedByTerminalWatermark(run, nextSequence) {
34058
- return hasTerminalWatermark(run) && !hasReachedTerminalWatermark(run, nextSequence);
33796
+ function formatRunHeader(runId, agentName, timestamp) {
33797
+ const time = formatIsoTimestamp(timestamp);
33798
+ return `\u2500\u2500 Run ${runId} (${agentName}, ${time}) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500`;
34059
33799
  }
34060
- function shouldReturnTerminalRunResult(state, response, nextSequence, madeSequenceProgress, seenResultEvent) {
34061
- const run = state.runState;
34062
- if (!run) {
34063
- return false;
34064
- }
34065
- if (!hasTerminalWatermark(run) && run.status !== "completed") {
34066
- if (run.status === "timeout" && shouldDrainNextEventPage(response, madeSequenceProgress)) {
34067
- return false;
34068
- }
34069
- return true;
34070
- }
34071
- if (!hasTerminalWatermark(run) && seenResultEvent) {
34072
- return true;
34073
- }
34074
- return shouldCompleteTerminalDrain(
34075
- state.seenAt,
34076
- state.lastProgressAt,
34077
- isBlockedBySequenceGap(response, madeSequenceProgress) || isBlockedByTerminalWatermark(run, nextSequence)
34078
- );
33800
+ function parseContextOptions(options) {
33801
+ const contextN = options.context !== void 0 ? parseBoundedLogCount(options.context, "--context", 0, 10) : 0;
33802
+ const before = options.beforeContext !== void 0 ? parseBoundedLogCount(options.beforeContext, "--before-context", 0, 10) : contextN;
33803
+ const after = options.afterContext !== void 0 ? parseBoundedLogCount(options.afterContext, "--after-context", 0, 10) : contextN;
33804
+ return { before, after };
34079
33805
  }
34080
- function renderTerminalRunResult(runId, run) {
34081
- if (run.status === "completed") {
34082
- EventRenderer.renderRunCompleted(run.result);
34083
- return {
34084
- succeeded: true,
34085
- runId,
34086
- sessionId: run.result?.agentSessionId,
34087
- checkpointId: run.result?.checkpointId
34088
- };
34089
- }
34090
- if (run.status === "failed") {
34091
- EventRenderer.renderRunFailed(run.error, runId);
34092
- return { succeeded: false, runId };
34093
- }
34094
- if (run.status === "timeout") {
34095
- console.error(source_default.red("\n\u2717 Run timed out"));
34096
- console.error(source_default.dim(` (use "zero logs ${runId}" to view logs)`));
34097
- return { succeeded: false, runId };
34098
- }
34099
- console.error(source_default.yellow("\n\u2717 Run cancelled"));
34100
- return { succeeded: false, runId };
33806
+ function parseLimit(value) {
33807
+ if (value === void 0) return void 0;
33808
+ return parseBoundedLogCount(value, "--limit", 1, 50);
34101
33809
  }
34102
- function sleep(ms) {
34103
- return new Promise((resolve) => {
34104
- return setTimeout(resolve, ms);
34105
- });
34106
- }
34107
- async function pollEvents(runId, options) {
34108
- const renderer = new EventRenderer({ verbose: options?.verbose });
34109
- const normalizer = new EventStreamNormalizer();
34110
- let nextSequence = -1;
34111
- const terminalDrain = {
34112
- seenAt: 0,
34113
- lastProgressAt: 0
34114
- };
34115
- let seenResultEvent = false;
34116
- const flushPendingEvents = () => {
34117
- for (const parsed of normalizer.flush()) {
34118
- renderer.render(parsed);
34119
- }
34120
- renderer.flush();
34121
- };
34122
- for (; ; ) {
34123
- const previousSequence = nextSequence;
34124
- const response = await getEvents(runId, {
34125
- since: nextSequence
34126
- });
34127
- const now = Date.now();
34128
- const madeSequenceProgress = response.nextSequence > previousSequence;
34129
- let pageHasResultEvent = false;
34130
- if (madeSequenceProgress) {
34131
- for (const event of response.events) {
34132
- const parsedEvents = normalizer.process(
34133
- event.eventData,
34134
- supportedEventFramework(response.framework)
34135
- );
34136
- for (const parsed of parsedEvents) {
34137
- renderer.render(parsed);
34138
- if (parsed.type === "result") {
34139
- pageHasResultEvent = true;
34140
- }
34141
- }
34142
- }
33810
+ function renderResults(response) {
33811
+ const grouped = /* @__PURE__ */ new Map();
33812
+ for (const result of response.results) {
33813
+ const existing = grouped.get(result.runId);
33814
+ if (existing) {
33815
+ existing.results.push(result);
33816
+ } else {
33817
+ grouped.set(result.runId, {
33818
+ agentName: result.agentName,
33819
+ results: [result]
33820
+ });
34143
33821
  }
34144
- if (madeSequenceProgress) {
34145
- if (pageHasResultEvent) {
34146
- seenResultEvent = true;
34147
- }
34148
- nextSequence = response.nextSequence;
33822
+ }
33823
+ let isFirstGroup = true;
33824
+ for (const [runId, group] of grouped) {
33825
+ if (!isFirstGroup) {
33826
+ console.log();
34149
33827
  }
34150
- updateTerminalDrainState(
34151
- terminalDrain,
34152
- response.run,
34153
- madeSequenceProgress,
34154
- now
33828
+ isFirstGroup = false;
33829
+ const firstTimestamp = group.results[0].matchedEvent.createdAt;
33830
+ console.log(
33831
+ source_default.bold(formatRunHeader(runId, group.agentName, firstTimestamp))
34155
33832
  );
34156
- if (terminalDrain.runState && hasReachedTerminalWatermark(terminalDrain.runState, nextSequence)) {
34157
- flushPendingEvents();
34158
- return renderTerminalRunResult(runId, terminalDrain.runState);
34159
- }
34160
- const terminalRunState = terminalDrain.runState;
34161
- if (terminalRunState && shouldReturnTerminalRunResult(
34162
- terminalDrain,
34163
- response,
34164
- nextSequence,
34165
- madeSequenceProgress,
34166
- seenResultEvent
34167
- )) {
34168
- flushPendingEvents();
34169
- return renderTerminalRunResult(runId, terminalRunState);
34170
- }
34171
- if (shouldDrainNextEventPage(response, madeSequenceProgress)) {
34172
- continue;
33833
+ for (const result of group.results) {
33834
+ const renderer = new EventRenderer({
33835
+ showTimestamp: true,
33836
+ verbose: false
33837
+ });
33838
+ const normalizer = new EventStreamNormalizer();
33839
+ for (const event of result.contextBefore) {
33840
+ renderSearchEvent(event, result.framework, renderer, normalizer);
33841
+ }
33842
+ renderSearchEvent(
33843
+ result.matchedEvent,
33844
+ result.framework,
33845
+ renderer,
33846
+ normalizer
33847
+ );
33848
+ for (const event of result.contextAfter) {
33849
+ renderSearchEvent(event, result.framework, renderer, normalizer);
33850
+ }
33851
+ flushSearchRenderer(renderer, normalizer);
34173
33852
  }
34174
- await sleep(
34175
- terminalDrain.runState ? TERMINAL_DRAIN_POLL_INTERVAL_MS : POLL_INTERVAL_MS
33853
+ }
33854
+ if (response.hasMore) {
33855
+ console.log();
33856
+ console.log(
33857
+ source_default.dim(
33858
+ ` Showing first ${response.results.length} matches. Use --limit to see more.`
33859
+ )
34176
33860
  );
34177
33861
  }
34178
33862
  }
34179
- function showNextSteps(result) {
34180
- const { runId, sessionId, checkpointId } = result;
34181
- console.log();
34182
- console.log(" View agent logs:");
34183
- console.log(source_default.cyan(` zero logs ${runId}`));
34184
- if (sessionId) {
34185
- console.log(" Continue with session (latest conversation and artifact):");
34186
- console.log(
34187
- source_default.cyan(` vm0 run continue ${sessionId} "your next prompt"`)
33863
+ async function runLogsSearch(keyword, options) {
33864
+ const searchKeyword = parseSearchQuery(keyword, "Keyword");
33865
+ const { before, after } = parseContextOptions(options);
33866
+ if (options.agentId !== void 0 && !isUuid(options.agentId)) {
33867
+ console.error(
33868
+ source_default.red(`\u2717 Invalid agent ID "${options.agentId}" \u2014 expected a UUID`)
34188
33869
  );
33870
+ console.error(source_default.dim(" Run: zero logs list to find agent IDs"));
33871
+ process.exit(1);
34189
33872
  }
34190
- if (checkpointId) {
34191
- console.log(
34192
- " Resume from checkpoint (snapshotted conversation and artifact):"
33873
+ if (options.run !== void 0 && !isUuid(options.run)) {
33874
+ console.error(
33875
+ source_default.red(`\u2717 Invalid run ID "${options.run}" \u2014 expected a UUID`)
34193
33876
  );
33877
+ console.error(source_default.dim(" Run: zero logs list to find run IDs"));
33878
+ process.exit(1);
33879
+ }
33880
+ const since = options.since !== void 0 ? parseTime(options.since) : Date.now() - SEVEN_DAYS_MS;
33881
+ const limit = parseLimit(options.limit);
33882
+ const response = await searchZeroLogs({
33883
+ keyword: searchKeyword,
33884
+ agentId: options.agentId,
33885
+ runId: options.run,
33886
+ since,
33887
+ limit,
33888
+ before,
33889
+ after
33890
+ });
33891
+ if (response.results.length === 0) {
33892
+ console.log(source_default.dim("No matches found"));
34194
33893
  console.log(
34195
- source_default.cyan(` vm0 run resume ${checkpointId} "your next prompt"`)
33894
+ source_default.dim(
33895
+ " Try a broader search with --since 30d or a different keyword"
33896
+ )
34196
33897
  );
33898
+ return;
34197
33899
  }
33900
+ renderResults(response);
34198
33901
  }
34199
-
34200
- // src/lib/utils/time-parser.ts
34201
- init_esm_shims();
34202
- 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})?)?$/;
34203
- var DAYS_BY_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
34204
- var MAX_DATE_TIMESTAMP_MS = 864e13;
34205
- function parseTime(timeStr) {
34206
- const relativeMatch = timeStr.match(/^(\d+)([smhdw])$/);
34207
- if (relativeMatch) {
34208
- const value = Number(relativeMatch[1]);
34209
- const unit = relativeMatch[2];
34210
- const timestamp2 = parseRelativeTime(value, unit);
34211
- if (timestamp2 !== void 0) {
34212
- return timestamp2;
34213
- }
34214
- }
34215
- if (/^\d+$/.test(timeStr)) {
34216
- const rawTimestamp = Number(timeStr);
34217
- const timestamp2 = rawTimestamp < 1e10 ? rawTimestamp * 1e3 : rawTimestamp;
34218
- if (isValidTimestamp(timestamp2)) {
34219
- return timestamp2;
33902
+ 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(
33903
+ "after",
33904
+ `
33905
+ Examples:
33906
+ zero logs search "error"
33907
+ zero logs search "timeout" --agent 123e4567-e89b-12d3-a456-426614174000 -C 2
33908
+ zero logs search "failed" --since 30d --limit 50`
33909
+ ).action(
33910
+ withErrorHandler(
33911
+ async (keyword, options) => {
33912
+ const { agent, ...searchOptions } = options;
33913
+ await runLogsSearch(keyword, { ...searchOptions, agentId: agent });
34220
33914
  }
34221
- }
34222
- const timestamp = parseIsoTime(timeStr);
34223
- if (timestamp !== void 0) {
34224
- return timestamp;
34225
- }
34226
- throw new Error(
34227
- `Invalid time format: "${timeStr}". Supported formats: relative (5m, 2h, 1d), ISO 8601 (2024-01-15T10:30:00Z), Unix timestamp`
34228
- );
34229
- }
34230
- function parseIsoTime(timeStr) {
34231
- const match = ISO_8601_PATTERN.exec(timeStr);
34232
- if (!match) {
34233
- return void 0;
34234
- }
34235
- const year = Number(match[1]);
34236
- const month = Number(match[2]);
34237
- const day = Number(match[3]);
34238
- const hour = match[4] ? Number(match[4]) : 0;
34239
- const minute = match[5] ? Number(match[5]) : 0;
34240
- const second = match[6] ? Number(match[6]) : 0;
34241
- 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) {
34242
- return void 0;
34243
- }
34244
- const timestamp = new Date(timeStr).getTime();
34245
- return isValidTimestamp(timestamp) ? timestamp : void 0;
34246
- }
34247
- function daysInMonth(year, month) {
34248
- if (month === 2) {
34249
- return isLeapYear(year) ? 29 : 28;
34250
- }
34251
- return DAYS_BY_MONTH[month - 1] ?? 0;
34252
- }
34253
- function isLeapYear(year) {
34254
- return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
34255
- }
34256
- function parseRelativeTime(value, unit) {
34257
- if (!Number.isSafeInteger(value)) {
34258
- return void 0;
34259
- }
34260
- const now = Date.now();
34261
- const multipliers = {
34262
- s: 1e3,
34263
- // seconds
34264
- m: 60 * 1e3,
34265
- // minutes
34266
- h: 60 * 60 * 1e3,
34267
- // hours
34268
- d: 24 * 60 * 60 * 1e3,
34269
- // days
34270
- w: 7 * 24 * 60 * 60 * 1e3
34271
- // weeks
34272
- };
34273
- const multiplier = multipliers[unit];
34274
- if (!multiplier) {
34275
- throw new Error(`Unknown time unit: ${unit}`);
34276
- }
34277
- const timestamp = now - value * multiplier;
34278
- return isValidTimestamp(timestamp) ? timestamp : void 0;
34279
- }
34280
- function isValidTimestamp(timestamp) {
34281
- return Number.isSafeInteger(timestamp) && Math.abs(timestamp) <= MAX_DATE_TIMESTAMP_MS;
34282
- }
33915
+ )
33916
+ );
34283
33917
 
34284
33918
  export {
33919
+ parseTime,
34285
33920
  isSupportedFramework,
34286
33921
  EventStreamNormalizer,
34287
33922
  formatIsoTimestamp,
34288
33923
  EventRenderer,
34289
- collectKeyValue,
34290
- collectVolumeVersions,
34291
- collectMounts,
34292
- collectArtifacts,
34293
- parsePermissionPolicies,
34294
- isUUID,
34295
- extractVarNames,
34296
- extractSecretNames,
34297
- loadValues,
34298
- parseIdentifier,
34299
- renderRunCreated,
34300
- pollEvents,
34301
- showNextSteps,
34302
- parseTime
34303
- };
34304
- //# sourceMappingURL=chunk-E32I3TNQ.js.map
33924
+ parsePositiveLogCount,
33925
+ parseBoundedLogCount,
33926
+ collectLogItems,
33927
+ isUuid,
33928
+ parseSearchQuery,
33929
+ runLogsSearch,
33930
+ searchCommand
33931
+ };
33932
+ //# sourceMappingURL=chunk-6P7XBY46.js.map