@vm0/cli 9.244.8 → 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.
- package/{agent-QLXX4WY7.js → agent-VZXA6XR3.js} +6 -5
- package/{agent-QLXX4WY7.js.map → agent-VZXA6XR3.js.map} +1 -1
- package/{banking-WY3J5BTJ.js → banking-QOV2GZE6.js} +4 -3
- package/{banking-WY3J5BTJ.js.map → banking-QOV2GZE6.js.map} +1 -1
- package/{chat-L3EFI2XJ.js → chat-7PONFLUP.js} +5 -4
- package/{chat-L3EFI2XJ.js.map → chat-7PONFLUP.js.map} +1 -1
- package/{chunk-MX32FFQR.js → chunk-5XVBOER3.js} +60 -506
- package/chunk-5XVBOER3.js.map +1 -0
- package/{chunk-65MTNZ44.js → chunk-6P7XBY46.js} +767 -1217
- package/chunk-6P7XBY46.js.map +1 -0
- package/{chunk-43PGP5OI.js → chunk-ARENVRJY.js} +4 -4
- package/{chunk-JVIFZRZ7.js → chunk-DE4HMRSU.js} +3 -3
- package/{chunk-TTP663DN.js → chunk-FVYB5CBP.js} +2 -2
- package/chunk-HOIDOML4.js +678 -0
- package/chunk-HOIDOML4.js.map +1 -0
- package/{chunk-KMLBXZVR.js → chunk-VN4PPSXU.js} +2 -2
- package/{chunk-MA37R4QS.js → chunk-XYZN3XWH.js} +3 -665
- package/chunk-XYZN3XWH.js.map +1 -0
- package/{chunk-LHR5Z775.js → chunk-YSVL5RAP.js} +2 -2
- package/{chunk-WCRXAO2G.js → chunk-ZXCF4ARW.js} +2 -2
- package/{computer-use-7FYLJXZS.js → computer-use-Y54YFGNC.js} +4 -3
- package/{computer-use-7FYLJXZS.js.map → computer-use-Y54YFGNC.js.map} +1 -1
- package/{connector-BSBQIFMQ.js → connector-2PAPMRZG.js} +7 -6
- package/{connector-BSBQIFMQ.js.map → connector-2PAPMRZG.js.map} +1 -1
- package/{credit-JBFJY5US.js → credit-PX6354BA.js} +5 -4
- package/{credit-JBFJY5US.js.map → credit-PX6354BA.js.map} +1 -1
- package/{developer-support-RUWSZBFP.js → developer-support-R5K6XKFG.js} +4 -3
- package/{developer-support-RUWSZBFP.js.map → developer-support-R5K6XKFG.js.map} +1 -1
- package/{doctor-YLD526OE.js → doctor-JNHZPFHW.js} +4 -3
- package/{doctor-YLD526OE.js.map → doctor-JNHZPFHW.js.map} +1 -1
- package/{generate-5EMJ3PE6.js → generate-TY4LZA3R.js} +10 -8
- package/{generate-5EMJ3PE6.js.map → generate-TY4LZA3R.js.map} +1 -1
- package/{github-36XCAIUP.js → github-UHTFPDZJ.js} +4 -3
- package/{github-36XCAIUP.js.map → github-UHTFPDZJ.js.map} +1 -1
- package/{goal-FRXLYRUG.js → goal-CKBOG76D.js} +4 -3
- package/{goal-FRXLYRUG.js.map → goal-CKBOG76D.js.map} +1 -1
- package/{host-X2KS3WTS.js → host-HAVFML26.js} +28 -7
- package/host-HAVFML26.js.map +1 -0
- package/index.js +4 -715
- package/index.js.map +1 -1
- package/{logs-WHQES7BY.js → logs-OXZZHIMA.js} +13 -14
- package/logs-OXZZHIMA.js.map +1 -0
- package/{mail-LOXCIZZN.js → mail-QCU47LFX.js} +6 -5
- package/{mail-LOXCIZZN.js.map → mail-QCU47LFX.js.map} +1 -1
- package/{maps-KQWCQLHW.js → maps-F3YPBNGC.js} +4 -3
- package/{maps-KQWCQLHW.js.map → maps-F3YPBNGC.js.map} +1 -1
- package/{model-2BBROTMX.js → model-5CYADUCZ.js} +5 -4
- package/{model-2BBROTMX.js.map → model-5CYADUCZ.js.map} +1 -1
- package/{model-provider-BOMTZ6JA.js → model-provider-676BK2JF.js} +5 -4
- package/{model-provider-BOMTZ6JA.js.map → model-provider-676BK2JF.js.map} +1 -1
- package/{org-SO7ELOV6.js → org-M637OTRU.js} +4 -3
- package/{org-SO7ELOV6.js.map → org-M637OTRU.js.map} +1 -1
- package/package.json +1 -1
- package/{phone-IYUG3RGY.js → phone-WBFLXP4V.js} +4 -3
- package/{phone-IYUG3RGY.js.map → phone-WBFLXP4V.js.map} +1 -1
- package/{preference-TGBWXIP7.js → preference-5AVRP7UU.js} +4 -3
- package/{preference-TGBWXIP7.js.map → preference-5AVRP7UU.js.map} +1 -1
- package/{resource-EA5OUVG4.js → resource-N6ADJPCL.js} +4 -3
- package/{resource-EA5OUVG4.js.map → resource-N6ADJPCL.js.map} +1 -1
- package/{scrape-2S3B33RA.js → scrape-XIJ5J6LW.js} +4 -3
- package/{scrape-2S3B33RA.js.map → scrape-XIJ5J6LW.js.map} +1 -1
- package/{search-LCGK3BJI.js → search-V2PWSYSL.js} +9 -10
- package/search-V2PWSYSL.js.map +1 -0
- package/{secret-M5C54VAT.js → secret-JLGGOPTX.js} +4 -3
- package/{secret-M5C54VAT.js.map → secret-JLGGOPTX.js.map} +1 -1
- package/{slack-FJV2NEOT.js → slack-QNQY6TVX.js} +4 -3
- package/{slack-FJV2NEOT.js.map → slack-QNQY6TVX.js.map} +1 -1
- package/{teams-XBLEN2XV.js → teams-QZZG5ERQ.js} +4 -3
- package/{teams-XBLEN2XV.js.map → teams-QZZG5ERQ.js.map} +1 -1
- package/{telegram-RE6IO7ZT.js → telegram-JEQYIW2X.js} +4 -3
- package/{telegram-RE6IO7ZT.js.map → telegram-JEQYIW2X.js.map} +1 -1
- package/{variable-5MVUR6U4.js → variable-LDKUIYU7.js} +4 -3
- package/{variable-5MVUR6U4.js.map → variable-LDKUIYU7.js.map} +1 -1
- package/{video-DIVG6CMM.js → video-D3AUHQL2.js} +6 -4
- package/{video-DIVG6CMM.js.map → video-D3AUHQL2.js.map} +1 -1
- package/{web-KVZL6WM4.js → web-MUTRFMMA.js} +7 -5
- package/{web-KVZL6WM4.js.map → web-MUTRFMMA.js.map} +1 -1
- package/{web-search-XNJH2FXZ.js → web-search-KBLKNBIF.js} +4 -3
- package/{web-search-XNJH2FXZ.js.map → web-search-KBLKNBIF.js.map} +1 -1
- package/{whoami-NQYYRWEE.js → whoami-POJMF7BB.js} +6 -5
- package/{whoami-NQYYRWEE.js.map → whoami-POJMF7BB.js.map} +1 -1
- package/{workflow-5CGPRRAY.js → workflow-GXTNSIWC.js} +4 -3
- package/{workflow-5CGPRRAY.js.map → workflow-GXTNSIWC.js.map} +1 -1
- package/zero.js +35 -35
- package/chunk-65MTNZ44.js.map +0 -1
- package/chunk-MA37R4QS.js.map +0 -1
- package/chunk-MPSVIFKZ.js +0 -240
- package/chunk-MPSVIFKZ.js.map +0 -1
- package/chunk-MX32FFQR.js.map +0 -1
- package/chunk-ZUSDQG2O.js +0 -50
- package/chunk-ZUSDQG2O.js.map +0 -1
- package/host-X2KS3WTS.js.map +0 -1
- package/logs-WHQES7BY.js.map +0 -1
- package/search-LCGK3BJI.js.map +0 -1
- /package/{chunk-43PGP5OI.js.map → chunk-ARENVRJY.js.map} +0 -0
- /package/{chunk-JVIFZRZ7.js.map → chunk-DE4HMRSU.js.map} +0 -0
- /package/{chunk-TTP663DN.js.map → chunk-FVYB5CBP.js.map} +0 -0
- /package/{chunk-KMLBXZVR.js.map → chunk-VN4PPSXU.js.map} +0 -0
- /package/{chunk-LHR5Z775.js.map → chunk-YSVL5RAP.js.map} +0 -0
- /package/{chunk-WCRXAO2G.js.map → chunk-ZXCF4ARW.js.map} +0 -0
package/chunk-ZUSDQG2O.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { createRequire as __createRequire } from "node:module";
|
|
3
|
-
const require = __createRequire(import.meta.url);
|
|
4
|
-
import {
|
|
5
|
-
init_esm_shims
|
|
6
|
-
} from "./chunk-DIRAZ3YX.js";
|
|
7
|
-
|
|
8
|
-
// src/lib/utils/file-utils.ts
|
|
9
|
-
init_esm_shims();
|
|
10
|
-
import * as fs from "fs";
|
|
11
|
-
function checkDirectoryStatus(dirPath) {
|
|
12
|
-
if (!fs.existsSync(dirPath)) {
|
|
13
|
-
return { exists: false, empty: true };
|
|
14
|
-
}
|
|
15
|
-
const stat = fs.statSync(dirPath);
|
|
16
|
-
if (!stat.isDirectory()) {
|
|
17
|
-
return { exists: true, empty: false };
|
|
18
|
-
}
|
|
19
|
-
const entries = fs.readdirSync(dirPath);
|
|
20
|
-
return { exists: true, empty: entries.length === 0 };
|
|
21
|
-
}
|
|
22
|
-
function formatBytes(bytes) {
|
|
23
|
-
if (bytes === 0) return "0 B";
|
|
24
|
-
const k = 1024;
|
|
25
|
-
const sizes = ["B", "KB", "MB", "GB"];
|
|
26
|
-
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
27
|
-
return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`;
|
|
28
|
-
}
|
|
29
|
-
function formatRelativeTime(isoDate) {
|
|
30
|
-
const date = new Date(isoDate);
|
|
31
|
-
const now = /* @__PURE__ */ new Date();
|
|
32
|
-
const diffMs = now.getTime() - date.getTime();
|
|
33
|
-
const diffSec = Math.floor(diffMs / 1e3);
|
|
34
|
-
const diffMin = Math.floor(diffSec / 60);
|
|
35
|
-
const diffHour = Math.floor(diffMin / 60);
|
|
36
|
-
const diffDay = Math.floor(diffHour / 24);
|
|
37
|
-
const diffWeek = Math.floor(diffDay / 7);
|
|
38
|
-
if (diffSec < 60) return "just now";
|
|
39
|
-
if (diffMin < 60) return `${diffMin} minute${diffMin === 1 ? "" : "s"} ago`;
|
|
40
|
-
if (diffHour < 24) return `${diffHour} hour${diffHour === 1 ? "" : "s"} ago`;
|
|
41
|
-
if (diffDay < 7) return `${diffDay} day${diffDay === 1 ? "" : "s"} ago`;
|
|
42
|
-
return `${diffWeek} week${diffWeek === 1 ? "" : "s"} ago`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export {
|
|
46
|
-
checkDirectoryStatus,
|
|
47
|
-
formatBytes,
|
|
48
|
-
formatRelativeTime
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=chunk-ZUSDQG2O.js.map
|
package/chunk-ZUSDQG2O.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/utils/file-utils.ts"],"sourcesContent":["import * as fs from \"fs\";\n\n/**\n * Check if a directory exists and is empty (contains no files or subdirectories).\n * Returns: { exists: boolean, empty: boolean }\n * - Non-existent path: { exists: false, empty: true }\n * - Existing empty directory: { exists: true, empty: true }\n * - Existing non-empty directory: { exists: true, empty: false }\n * - Existing file (not directory): { exists: true, empty: false }\n */\nexport function checkDirectoryStatus(dirPath: string): {\n exists: boolean;\n empty: boolean;\n} {\n if (!fs.existsSync(dirPath)) {\n return { exists: false, empty: true };\n }\n\n const stat = fs.statSync(dirPath);\n if (!stat.isDirectory()) {\n // Path exists but is a file, not a directory\n return { exists: true, empty: false };\n }\n\n const entries = fs.readdirSync(dirPath);\n return { exists: true, empty: entries.length === 0 };\n}\n\n/**\n * Format bytes to human-readable format\n */\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) return \"0 B\";\n const k = 1024;\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\"];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`;\n}\n\n/**\n * Format relative time from ISO date string\n */\nexport function formatRelativeTime(isoDate: string): string {\n const date = new Date(isoDate);\n const now = new Date();\n const diffMs = now.getTime() - date.getTime();\n const diffSec = Math.floor(diffMs / 1000);\n const diffMin = Math.floor(diffSec / 60);\n const diffHour = Math.floor(diffMin / 60);\n const diffDay = Math.floor(diffHour / 24);\n const diffWeek = Math.floor(diffDay / 7);\n\n if (diffSec < 60) return \"just now\";\n if (diffMin < 60) return `${diffMin} minute${diffMin === 1 ? \"\" : \"s\"} ago`;\n if (diffHour < 24) return `${diffHour} hour${diffHour === 1 ? \"\" : \"s\"} ago`;\n if (diffDay < 7) return `${diffDay} day${diffDay === 1 ? \"\" : \"s\"} ago`;\n return `${diffWeek} week${diffWeek === 1 ? \"\" : \"s\"} ago`;\n}\n"],"mappings":";;;;;;;;AAAA;AAAA,YAAY,QAAQ;AAUb,SAAS,qBAAqB,SAGnC;AACA,MAAI,CAAI,cAAW,OAAO,GAAG;AAC3B,WAAO,EAAE,QAAQ,OAAO,OAAO,KAAK;AAAA,EACtC;AAEA,QAAM,OAAU,YAAS,OAAO;AAChC,MAAI,CAAC,KAAK,YAAY,GAAG;AAEvB,WAAO,EAAE,QAAQ,MAAM,OAAO,MAAM;AAAA,EACtC;AAEA,QAAM,UAAa,eAAY,OAAO;AACtC,SAAO,EAAE,QAAQ,MAAM,OAAO,QAAQ,WAAW,EAAE;AACrD;AAKO,SAAS,YAAY,OAAuB;AACjD,MAAI,UAAU,EAAG,QAAO;AACxB,QAAM,IAAI;AACV,QAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,IAAI;AACpC,QAAM,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC;AAClD,SAAO,IAAI,QAAQ,KAAK,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAC3D;AAKO,SAAS,mBAAmB,SAAyB;AAC1D,QAAM,OAAO,IAAI,KAAK,OAAO;AAC7B,QAAM,MAAM,oBAAI,KAAK;AACrB,QAAM,SAAS,IAAI,QAAQ,IAAI,KAAK,QAAQ;AAC5C,QAAM,UAAU,KAAK,MAAM,SAAS,GAAI;AACxC,QAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,QAAM,WAAW,KAAK,MAAM,UAAU,EAAE;AACxC,QAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,QAAM,WAAW,KAAK,MAAM,UAAU,CAAC;AAEvC,MAAI,UAAU,GAAI,QAAO;AACzB,MAAI,UAAU,GAAI,QAAO,GAAG,OAAO,UAAU,YAAY,IAAI,KAAK,GAAG;AACrE,MAAI,WAAW,GAAI,QAAO,GAAG,QAAQ,QAAQ,aAAa,IAAI,KAAK,GAAG;AACtE,MAAI,UAAU,EAAG,QAAO,GAAG,OAAO,OAAO,YAAY,IAAI,KAAK,GAAG;AACjE,SAAO,GAAG,QAAQ,QAAQ,aAAa,IAAI,KAAK,GAAG;AACrD;","names":[]}
|
package/host-X2KS3WTS.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/host/index.ts","../src/lib/host/publish-static-site.ts","../src/lib/host/static-site.ts","../src/commands/zero/host/clone.ts","../src/lib/host/clone-hosted-site.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n hostedArtifactKindSchema,\n type HostedArtifactKind,\n} from \"@vm0/api-contracts/contracts/zero-host\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { publishStaticSite } from \"../../../lib/host/publish-static-site\";\nimport { cloneHostedSiteCommand } from \"./clone\";\n\ninterface HostOptions {\n readonly site?: string;\n readonly slugSuffix?: string;\n readonly artifactKind?: HostedArtifactKind;\n readonly spa?: boolean;\n readonly json?: boolean;\n}\n\nfunction parseArtifactKind(value: string): HostedArtifactKind {\n return hostedArtifactKindSchema.parse(value);\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport const zeroHostCommand = new Command()\n .name(\"host\")\n .description(\"Publish static sites and clone owned hosted site files\")\n .argument(\"<dir>\", \"Static build directory, for example ./dist\")\n .option(\"--site <slug>\", \"Public site slug, e.g. my-product-demo\")\n .option(\"--slug-suffix <suffix>\", \"Reuse a generated site URL suffix\")\n .option(\n \"--artifact-kind <kind>\",\n \"Artifact kind to record for this hosted deployment\",\n parseArtifactKind,\n )\n .option(\"--spa\", \"Serve unknown HTML navigation paths from index.html\")\n .option(\"--json\", \"Output only the final result as JSON\")\n .addCommand(cloneHostedSiteCommand)\n .addHelpText(\n \"after\",\n `\nExamples:\n Publish a Vite build: zero host ./dist --site my-product-demo --spa\n Redeploy a URL: zero host ./dist --site my-product-demo --slug-suffix a1b2c3d4 --spa\n Clone a hosted site: zero host clone my-product-demo-a1b2c3d4-release-01 ./site\n Machine readable: zero host ./dist --site my-product-demo --spa --json\n\nNotes:\n - Authenticates via ZERO_TOKEN (publish requires host:write; clone requires host:read)\n - Reusing both --site and --slug-suffix keeps the same URL\n - The directory must include index.html\n - Local HTML/CSS asset references must point at files inside the directory`,\n )\n .action(\n withErrorHandler(async (dir: string, options: HostOptions) => {\n if (!options.site) {\n throw new Error(\"--site is required when publishing a hosted site\");\n }\n const result = await publishStaticSite({\n dir,\n site: options.site,\n slugSuffix: options.slugSuffix,\n artifactKind: options.artifactKind,\n spaFallback: Boolean(options.spa),\n onProgress: options.json\n ? undefined\n : (progress) => {\n if (progress.phase === \"preparing\") {\n console.log(\n chalk.dim(`Preparing ${progress.fileCount} files...`),\n );\n return;\n }\n console.log(chalk.dim(`Uploading ${progress.path}`));\n },\n });\n\n if (options.json) {\n console.log(JSON.stringify(result));\n return;\n }\n\n console.log(chalk.green(\"✓ Hosted site ready\"));\n console.log(chalk.dim(` Site: ${result.publicSlug}`));\n console.log(chalk.dim(` Deployment: ${result.deploymentId}`));\n console.log(chalk.dim(` Files: ${result.fileCount.toLocaleString()}`));\n console.log(chalk.dim(` Size: ${formatBytes(result.size)}`));\n console.log(` URL: ${result.url}`);\n }),\n );\n","import type { HostedArtifactKind } from \"@vm0/api-contracts/contracts/zero-host\";\nimport { completeHostedSite, prepareHostedSite } from \"../api\";\nimport { readStaticSiteFile, scanStaticSite } from \"./static-site\";\n\ninterface PublishStaticSiteProgress {\n readonly phase: \"preparing\" | \"uploading\";\n readonly fileCount?: number;\n readonly path?: string;\n}\n\ninterface PublishStaticSiteResult {\n readonly siteId: string;\n readonly deploymentId: string;\n readonly publicSlug: string;\n readonly url: string;\n readonly fileCount: number;\n readonly size: number;\n}\n\ninterface PublishStaticSiteOptions {\n readonly dir: string;\n readonly site: string;\n readonly slugSuffix?: string;\n readonly artifactKind?: HostedArtifactKind;\n readonly spaFallback?: boolean;\n readonly onProgress?: (progress: PublishStaticSiteProgress) => void;\n}\n\nexport async function publishStaticSite(\n options: PublishStaticSiteOptions,\n): Promise<PublishStaticSiteResult> {\n const artifactKind = options.artifactKind ?? \"hosted-site\";\n const scan = await scanStaticSite(\n options.dir,\n artifactKind === \"hosted-site\" ? { defaultRobots: \"disallow-all\" } : {},\n );\n const totalSize = scan.files.reduce((sum, file) => {\n return sum + file.size;\n }, 0);\n\n options.onProgress?.({\n phase: \"preparing\",\n fileCount: scan.files.length,\n });\n\n const prepared = await prepareHostedSite({\n site: options.site,\n ...(options.slugSuffix !== undefined && { slugSuffix: options.slugSuffix }),\n artifactKind,\n spaFallback: Boolean(options.spaFallback),\n files: scan.files.map((file) => {\n return {\n path: file.path,\n size: file.size,\n sha256: file.sha256,\n contentType: file.contentType,\n immutable: file.immutable,\n };\n }),\n });\n\n const uploadByPath = new Map(\n prepared.uploads.map((upload) => {\n return [upload.path, upload.uploadUrl];\n }),\n );\n\n for (const file of scan.files) {\n const uploadUrl = uploadByPath.get(file.path);\n if (!uploadUrl) {\n throw new Error(`Missing upload URL for ${file.path}`);\n }\n options.onProgress?.({ phase: \"uploading\", path: file.path });\n const bytes = await readStaticSiteFile(file);\n const response = await fetch(uploadUrl, {\n method: \"PUT\",\n headers: { \"Content-Type\": file.contentType },\n body: new Uint8Array(bytes),\n });\n if (!response.ok) {\n throw new Error(\n `Failed to upload ${file.path} (HTTP ${response.status})`,\n );\n }\n }\n\n const completed = await completeHostedSite(prepared.deploymentId);\n\n return {\n siteId: completed.siteId,\n deploymentId: completed.deploymentId,\n publicSlug: completed.publicSlug,\n url: completed.url,\n fileCount: scan.files.length,\n size: totalSize,\n };\n}\n","import { createHash } from \"node:crypto\";\nimport { readdir, readFile, stat } from \"node:fs/promises\";\nimport { extname, relative, resolve, sep, dirname, posix } from \"node:path\";\n\ninterface StaticSiteFile {\n readonly absolutePath?: string;\n readonly content?: Uint8Array;\n readonly path: string;\n readonly size: number;\n readonly sha256: string;\n readonly contentType: string;\n readonly immutable?: boolean;\n}\n\ninterface StaticSiteScanOptions {\n readonly defaultRobots?: \"disallow-all\";\n}\n\ninterface StaticSiteScanResult {\n readonly root: string;\n readonly files: readonly StaticSiteFile[];\n}\n\nexport const DEFAULT_HOSTED_SITE_ROBOTS_TXT = \"User-agent: *\\nDisallow: /\\n\";\n\nconst MIME_BY_EXTENSION: Record<string, string> = {\n \".html\": \"text/html; charset=utf-8\",\n \".htm\": \"text/html; charset=utf-8\",\n \".css\": \"text/css; charset=utf-8\",\n \".js\": \"application/javascript; charset=utf-8\",\n \".mjs\": \"application/javascript; charset=utf-8\",\n \".json\": \"application/json; charset=utf-8\",\n \".map\": \"application/json; charset=utf-8\",\n \".txt\": \"text/plain; charset=utf-8\",\n \".xml\": \"application/xml; charset=utf-8\",\n \".svg\": \"image/svg+xml; charset=utf-8\",\n \".png\": \"image/png\",\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".avif\": \"image/avif\",\n \".ico\": \"image/x-icon\",\n \".wasm\": \"application/wasm\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\n \".ttf\": \"font/ttf\",\n \".otf\": \"font/otf\",\n \".eot\": \"application/vnd.ms-fontobject\",\n \".mp4\": \"video/mp4\",\n \".webm\": \"video/webm\",\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/wav\",\n};\n\nconst HTML_REFERENCE_RE =\n /<(?:script|link|img|source|video|audio|embed|object)\\b[^>]*\\s(?:src|href|poster|data)=[\"']([^\"']+)[\"'][^>]*>/giu;\nconst SRCSET_RE = /\\s(?:srcset)=[\"']([^\"']+)[\"']/giu;\nconst CSS_URL_RE = /url\\(\\s*[\"']?([^\"')]+)[\"']?\\s*\\)/giu;\nconst CSS_IMPORT_RE = /@import\\s+(?:url\\()?[\"']([^\"']+)[\"']\\)?/giu;\n\nfunction inferContentType(path: string): string {\n return (\n MIME_BY_EXTENSION[extname(path).toLowerCase()] ?? \"application/octet-stream\"\n );\n}\n\nfunction looksImmutable(path: string): boolean {\n if (path.startsWith(\"/assets/\")) {\n return true;\n }\n return /(?:[-.])[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9]+$/u.test(path);\n}\n\nfunction toSitePath(root: string, absolutePath: string): string {\n const rel = relative(root, absolutePath).split(sep).join(\"/\");\n return `/${rel}`;\n}\n\nfunction isSafeSitePath(path: string): boolean {\n if (!path.startsWith(\"/\") || path.startsWith(\"//\")) {\n return false;\n }\n if (path.includes(\"\\\\\") || path.includes(\"\\0\")) {\n return false;\n }\n const segments = path.split(\"/\").filter(Boolean);\n return !segments.some((segment) => {\n return segment === \".\" || segment === \"..\";\n });\n}\n\nfunction isExternalReference(value: string): boolean {\n return /^(?:[a-z][a-z0-9+.-]*:|\\/\\/|#)/iu.test(value);\n}\n\n// References containing template interpolation are resolved at runtime, not on\n// disk. Covers JS template literals (`${...}`), mustache/Vue/Angular/Handlebars\n// (`{{...}}`), and EJS/ERB (`<%...%>`). These cannot be validated statically.\nfunction isDynamicReference(value: string): boolean {\n return /\\$\\{|\\{\\{|<%/u.test(value);\n}\n\nfunction stripQueryAndHash(value: string): string {\n const hashIndex = value.indexOf(\"#\");\n const withoutHash = hashIndex >= 0 ? value.slice(0, hashIndex) : value;\n const queryIndex = withoutHash.indexOf(\"?\");\n return queryIndex >= 0 ? withoutHash.slice(0, queryIndex) : withoutHash;\n}\n\nfunction normalizeReference(fromPath: string, raw: string): string | null {\n const trimmed = raw.trim();\n if (!trimmed || isExternalReference(trimmed) || isDynamicReference(trimmed)) {\n return null;\n }\n const stripped = stripQueryAndHash(trimmed);\n if (!stripped || stripped.endsWith(\"/\")) {\n return null;\n }\n const resolved = stripped.startsWith(\"/\")\n ? posix.normalize(stripped)\n : posix.normalize(posix.join(dirname(fromPath), stripped));\n const path = resolved.startsWith(\"/\") ? resolved : `/${resolved}`;\n if (!isSafeSitePath(path)) {\n throw new Error(`Invalid asset reference in ${fromPath}: ${raw}`);\n }\n return path;\n}\n\nfunction shouldRequireHtmlReference(path: string): boolean {\n return extname(path).length > 0 || path.startsWith(\"/assets/\");\n}\n\nfunction isHtmlExtension(ext: string): boolean {\n return ext === \".html\" || ext === \".htm\";\n}\n\nfunction shouldValidateReferences(ext: string): boolean {\n return isHtmlExtension(ext) || ext === \".css\";\n}\n\nfunction collectSrcsetReferences(value: string): string[] {\n return value\n .split(\",\")\n .map((entry) => {\n return entry.trim().split(/\\s+/u)[0] ?? \"\";\n })\n .filter(Boolean);\n}\n\nfunction collectHtmlReferences(text: string): string[] {\n const references: string[] = [];\n for (const match of text.matchAll(HTML_REFERENCE_RE)) {\n if (match[1]) references.push(match[1]);\n }\n for (const match of text.matchAll(SRCSET_RE)) {\n if (!match[1]) continue;\n references.push(...collectSrcsetReferences(match[1]));\n }\n return references;\n}\n\nfunction collectCssReferences(text: string): string[] {\n const references: string[] = [];\n for (const match of text.matchAll(CSS_URL_RE)) {\n if (match[1]) references.push(match[1]);\n }\n for (const match of text.matchAll(CSS_IMPORT_RE)) {\n if (match[1]) references.push(match[1]);\n }\n return references;\n}\n\nfunction collectReferences(ext: string, text: string): string[] {\n return isHtmlExtension(ext)\n ? collectHtmlReferences(text)\n : collectCssReferences(text);\n}\n\nasync function hashFile(path: string): Promise<string> {\n const bytes = await readFile(path);\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\n\nfunction textFile(path: string, content: string): StaticSiteFile {\n const bytes = new TextEncoder().encode(content);\n return {\n content: bytes,\n path,\n size: bytes.byteLength,\n sha256: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n contentType: inferContentType(path),\n };\n}\n\nfunction ensureDefaultRobots(\n files: readonly StaticSiteFile[],\n options: StaticSiteScanOptions,\n): readonly StaticSiteFile[] {\n if (\n options.defaultRobots !== \"disallow-all\" ||\n files.some((file) => {\n return file.path === \"/robots.txt\";\n })\n ) {\n return files;\n }\n\n return [...files, textFile(\"/robots.txt\", DEFAULT_HOSTED_SITE_ROBOTS_TXT)];\n}\n\nasync function walk(\n root: string,\n dir: string,\n files: StaticSiteFile[],\n): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fullPath = resolve(dir, entry.name);\n if (entry.isDirectory()) {\n await walk(root, fullPath, files);\n continue;\n }\n if (!entry.isFile()) {\n throw new Error(`Unsupported file type in hosted site: ${fullPath}`);\n }\n\n const fileStat = await stat(fullPath);\n const path = toSitePath(root, fullPath);\n if (!isSafeSitePath(path)) {\n throw new Error(`Invalid hosted-site path: ${path}`);\n }\n files.push({\n absolutePath: fullPath,\n path,\n size: fileStat.size,\n sha256: await hashFile(fullPath),\n contentType: inferContentType(path),\n immutable: looksImmutable(path) || undefined,\n });\n }\n}\n\nasync function assertReferencesExist(\n files: readonly StaticSiteFile[],\n): Promise<void> {\n const byPath = new Map(\n files.map((file) => {\n return [file.path, file];\n }),\n );\n\n for (const file of files) {\n const ext = extname(file.path).toLowerCase();\n if (!shouldValidateReferences(ext)) {\n continue;\n }\n if (!file.absolutePath) {\n throw new Error(`Hosted-site file has no source: ${file.path}`);\n }\n const text = await readFile(file.absolutePath, \"utf8\");\n const references = collectReferences(ext, text);\n\n for (const reference of references) {\n const normalized = normalizeReference(file.path, reference);\n if (!normalized) {\n continue;\n }\n if (isHtmlExtension(ext) && !shouldRequireHtmlReference(normalized)) {\n continue;\n }\n if (!byPath.has(normalized)) {\n throw new Error(\n `Missing asset referenced by ${file.path}: ${reference}`,\n );\n }\n }\n }\n}\n\nexport async function scanStaticSite(\n rootPath: string,\n options: StaticSiteScanOptions = {},\n): Promise<StaticSiteScanResult> {\n const root = resolve(rootPath);\n const rootStat = await stat(root);\n if (!rootStat.isDirectory()) {\n throw new Error(`Hosted site path must be a directory: ${rootPath}`);\n }\n\n const files: StaticSiteFile[] = [];\n await walk(root, root, files);\n\n if (\n !files.some((file) => {\n return file.path === \"/index.html\";\n })\n ) {\n throw new Error(\"Hosted site directory must include index.html\");\n }\n\n await assertReferencesExist(files);\n const publishFiles = [...ensureDefaultRobots(files, options)];\n\n return {\n root,\n files: publishFiles.sort((a, b) => {\n return a.path.localeCompare(b.path);\n }),\n };\n}\n\nexport async function readStaticSiteFile(\n file: StaticSiteFile,\n): Promise<Uint8Array> {\n if (file.content) {\n return file.content;\n }\n if (!file.absolutePath) {\n throw new Error(`Hosted-site file has no source: ${file.path}`);\n }\n const bytes = await readFile(file.absolutePath);\n return new Uint8Array(bytes);\n}\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\n\nimport { withErrorHandler } from \"../../../lib/command\";\nimport {\n cloneHostedSite,\n publicSlugFromSite,\n} from \"../../../lib/host/clone-hosted-site\";\nimport { formatBytes } from \"../../../lib/utils/file-utils\";\n\ninterface CloneOptions {\n readonly json?: boolean;\n}\n\nfunction jsonOption(options: CloneOptions, command: Command): boolean {\n const parentOptions = command.parent?.opts<CloneOptions>();\n return Boolean(options.json || parentOptions?.json);\n}\n\nexport const cloneHostedSiteCommand = new Command()\n .name(\"clone\")\n .description(\"Clone an owned hosted site's active files to a local directory\")\n .argument(\"<site>\", \"Hosted site public slug or URL\")\n .argument(\"[destination]\", \"Destination directory (default: public slug)\")\n .option(\"--json\", \"Output only the final result as JSON\")\n .addHelpText(\n \"after\",\n `\nExamples:\n Clone by public slug: zero host clone my-site-a1b2c3d4-release-01\n Clone by hosted URL: zero host clone https://my-site-a1b2c3d4-release-01.sites.example.com ./site\n Machine readable: zero host clone my-site-a1b2c3d4-release-01 --json\n\nNotes:\n - Authenticates via ZERO_TOKEN (requires host:read capability)\n - Only hosted sites owned by the active org can be cloned\n - Downloads files directly from R2 and verifies size/hash\n - The destination directory must be empty or not exist`,\n )\n .action(\n withErrorHandler(\n async (\n site: string,\n destination: string | undefined,\n options: CloneOptions,\n command: Command,\n ) => {\n const json = jsonOption(options, command);\n const targetDir = destination ?? publicSlugFromSite(site);\n const result = await cloneHostedSite({\n site,\n destination: targetDir,\n onProgress: json\n ? undefined\n : (progress) => {\n if (progress.phase === \"checking\") {\n console.log(chalk.dim(\"Checking hosted site...\"));\n return;\n }\n if (progress.phase === \"creating\") {\n console.log(\n chalk.dim(\n `Preparing ${progress.fileCount?.toLocaleString() ?? 0} files...`,\n ),\n );\n return;\n }\n console.log(chalk.dim(`Downloading ${progress.path}`));\n },\n });\n\n if (json) {\n console.log(JSON.stringify(result));\n return;\n }\n\n console.log(chalk.green(\"✓ Hosted site cloned\"));\n console.log(chalk.dim(` Site: ${result.publicSlug}`));\n console.log(chalk.dim(` Deployment: ${result.deploymentId}`));\n console.log(chalk.dim(` Files: ${result.fileCount.toLocaleString()}`));\n console.log(chalk.dim(` Size: ${formatBytes(result.size)}`));\n console.log(chalk.dim(` Location: ${result.destination}/`));\n console.log(` URL: ${result.url}`);\n },\n ),\n );\n","import { createHash } from \"node:crypto\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve, sep } from \"node:path\";\n\nimport type { HostedSiteFilesResponse } from \"@vm0/api-contracts/contracts/zero-host\";\nimport { getHostedSiteFiles } from \"../api\";\nimport { checkDirectoryStatus } from \"../utils/file-utils\";\n\ninterface CloneHostedSiteProgress {\n readonly phase: \"checking\" | \"creating\" | \"downloading\";\n readonly fileCount?: number;\n readonly path?: string;\n}\n\ninterface CloneHostedSiteResult {\n readonly siteId: string;\n readonly deploymentId: string;\n readonly publicSlug: string;\n readonly url: string;\n readonly destination: string;\n readonly fileCount: number;\n readonly size: number;\n}\n\ninterface CloneHostedSiteOptions {\n readonly site: string;\n readonly destination: string;\n readonly onProgress?: (progress: CloneHostedSiteProgress) => void;\n}\n\nexport function publicSlugFromSite(value: string): string {\n const trimmed = value.trim();\n if (URL.canParse(trimmed)) {\n const url = new URL(trimmed);\n return url.hostname.split(\".\")[0] ?? trimmed;\n }\n if (trimmed.includes(\".\")) {\n return trimmed.split(\".\")[0] ?? trimmed;\n }\n return trimmed;\n}\n\nfunction isInsideDirectory(parent: string, target: string): boolean {\n const relativePath = relative(parent, target);\n return (\n relativePath === \"\" ||\n (!relativePath.startsWith(`..${sep}`) &&\n relativePath !== \"..\" &&\n !isAbsolute(relativePath))\n );\n}\n\nfunction outputPathForHostedFile(\n destination: string,\n hostedPath: string,\n): string {\n if (\n !hostedPath.startsWith(\"/\") ||\n hostedPath.startsWith(\"//\") ||\n hostedPath.includes(\"\\\\\") ||\n hostedPath.includes(\"\\0\")\n ) {\n throw new Error(`Invalid hosted-site path: ${hostedPath}`);\n }\n\n const segments = hostedPath.split(\"/\").filter((segment) => {\n return segment.length > 0;\n });\n if (\n segments.length === 0 ||\n segments.some((segment) => {\n return segment === \".\" || segment === \"..\";\n })\n ) {\n throw new Error(`Invalid hosted-site path: ${hostedPath}`);\n }\n\n const destinationRoot = resolve(destination);\n const outputPath = resolve(destinationRoot, ...segments);\n if (!isInsideDirectory(destinationRoot, outputPath)) {\n throw new Error(`Invalid hosted-site path: ${hostedPath}`);\n }\n\n return outputPath;\n}\n\nfunction sha256(bytes: Buffer): string {\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\n\nasync function downloadHostedFile(\n file: HostedSiteFilesResponse[\"files\"][number],\n destination: string,\n): Promise<void> {\n const response = await fetch(file.downloadUrl);\n if (!response.ok) {\n throw new Error(\n `Failed to download ${file.path} (HTTP ${response.status})`,\n );\n }\n\n const bytes = Buffer.from(await response.arrayBuffer());\n if (bytes.byteLength !== file.size) {\n throw new Error(`Downloaded size mismatch for ${file.path}`);\n }\n if (sha256(bytes) !== file.sha256) {\n throw new Error(`Downloaded hash mismatch for ${file.path}`);\n }\n\n const outputPath = outputPathForHostedFile(destination, file.path);\n await mkdir(dirname(outputPath), { recursive: true });\n await writeFile(outputPath, bytes);\n}\n\nexport async function cloneHostedSite(\n options: CloneHostedSiteOptions,\n): Promise<CloneHostedSiteResult> {\n const publicSlug = publicSlugFromSite(options.site);\n const dirStatus = checkDirectoryStatus(options.destination);\n if (dirStatus.exists && !dirStatus.empty) {\n throw new Error(`Directory \"${options.destination}\" is not empty`);\n }\n\n options.onProgress?.({ phase: \"checking\" });\n const hostedSite = await getHostedSiteFiles(publicSlug);\n\n options.onProgress?.({\n phase: \"creating\",\n fileCount: hostedSite.fileCount,\n });\n await mkdir(options.destination, { recursive: true });\n\n for (const file of hostedSite.files) {\n options.onProgress?.({ phase: \"downloading\", path: file.path });\n await downloadHostedFile(file, options.destination);\n }\n\n return {\n siteId: hostedSite.siteId,\n deploymentId: hostedSite.deploymentId,\n publicSlug: hostedSite.publicSlug,\n url: hostedSite.url,\n destination: options.destination,\n fileCount: hostedSite.fileCount,\n size: hostedSite.size,\n };\n}\n"],"mappings":"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","names":["createHash","dirname","relative","resolve","sep","relative","sep","resolve","createHash","dirname","formatBytes"]}
|
package/logs-WHQES7BY.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/logs/index.ts","../src/commands/zero/logs/list.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { getZeroRunAgentEvents, type RunEvent } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { EventStreamNormalizer } from \"../../../lib/events/event-stream-normalizer\";\nimport { EventRenderer } from \"../../../lib/events/event-renderer\";\nimport {\n collectLogItems,\n parsePositiveLogCount,\n} from \"../../../lib/utils/log-pagination\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\nimport { listCommand } from \"./list\";\nimport { searchCommand } from \"./search\";\nimport { isSupportedFramework } from \"@vm0/core/frameworks\";\n\nconst PAGE_LIMIT = 100;\n\ninterface AgentEventWithFramework {\n readonly event: RunEvent;\n readonly framework?: string;\n readonly useDefaultFramework: boolean;\n}\n\nfunction supportedLogFramework(\n framework: string | undefined,\n): string | undefined {\n return isSupportedFramework(framework) ? framework : undefined;\n}\n\nfunction hasLogFramework(framework: string | null | undefined): boolean {\n return framework !== undefined && framework !== null;\n}\n\nfunction renderAgentEvent(\n event: RunEvent,\n renderer: EventRenderer,\n normalizer: EventStreamNormalizer,\n framework: string | undefined,\n): void {\n const parsedEvents = normalizer.process(\n event.eventData,\n framework,\n new Date(event.createdAt),\n );\n for (const parsed of parsedEvents) {\n renderer.render(parsed);\n }\n}\n\nasync function showAgentEvents(\n runId: string,\n options: {\n since?: number;\n targetCount: number | \"all\";\n order: \"asc\" | \"desc\";\n },\n): Promise<void> {\n const events = await collectLogItems<AgentEventWithFramework>({\n fetchPage: async (request) => {\n const response = await getZeroRunAgentEvents(runId, request);\n const responseFramework: string | null | undefined = response.framework;\n return {\n items: response.events.map((event) => {\n const framework = supportedLogFramework(\n responseFramework ?? undefined,\n );\n return {\n event,\n ...(framework ? { framework } : {}),\n useDefaultFramework: !hasLogFramework(responseFramework),\n };\n }),\n hasMore: response.hasMore,\n nextCursor: response.nextCursor,\n };\n },\n sinceTime: options.since,\n targetCount: options.targetCount,\n order: options.order,\n pageLimit: PAGE_LIMIT,\n });\n\n if (events.length === 0) {\n console.log(chalk.yellow(\"No agent events found for this run\"));\n return;\n }\n\n const renderer = new EventRenderer({\n showTimestamp: true,\n verbose: true,\n });\n const framework = events.find((item) => {\n return item.framework !== undefined;\n })?.framework;\n const normalizer = new EventStreamNormalizer();\n\n for (const item of events) {\n renderAgentEvent(\n item.event,\n renderer,\n normalizer,\n item.framework ?? (item.useDefaultFramework ? framework : undefined),\n );\n }\n for (const parsed of normalizer.flush()) {\n renderer.render(parsed);\n }\n renderer.flush();\n}\n\nexport const zeroLogsCommand = new Command()\n .name(\"logs\")\n .description(\"View and search agent run logs\")\n .argument(\"[runId]\", \"Run ID to view agent events for\")\n .addCommand(listCommand)\n .addCommand(searchCommand)\n .option(\n \"--since <time>\",\n \"Show logs since timestamp (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--tail <n>\", \"Show last N entries (default: 5)\")\n .option(\"--head <n>\", \"Show first N entries\")\n .option(\"--all\", \"Fetch all log entries\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs <runId>\n zero logs <runId> --tail 10\n zero logs <runId> --all\n zero logs search \"error\"`,\n )\n .action(\n withErrorHandler(\n async (\n runId: string | undefined,\n options: {\n since?: string;\n tail?: string;\n head?: string;\n all?: boolean;\n },\n ) => {\n if (!runId) {\n zeroLogsCommand.help();\n return;\n }\n\n if (!isUUID(runId)) {\n console.error(\n chalk.red(`✗ Invalid run ID \"${runId}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find run IDs\"));\n process.exit(1);\n }\n\n const countModes = [\n options.tail !== undefined,\n options.head !== undefined,\n options.all === true,\n ].filter(Boolean).length;\n if (countModes > 1) {\n throw new Error(\n \"Options --tail, --head, and --all are mutually exclusive\",\n );\n }\n\n let since: number | undefined;\n if (options.since !== undefined) {\n since = parseTime(options.since);\n }\n\n const isAll = options.all === true;\n const isHead = options.head !== undefined;\n const isTail = options.tail !== undefined;\n\n let targetCount: number | \"all\";\n if (isAll) {\n targetCount = \"all\";\n } else if (isHead) {\n targetCount = parsePositiveLogCount(options.head!, \"--head\");\n } else if (isTail) {\n targetCount = parsePositiveLogCount(options.tail!, \"--tail\");\n } else {\n targetCount = 5;\n }\n\n const order: \"asc\" | \"desc\" = isHead ? \"asc\" : \"desc\";\n\n await showAgentEvents(runId, { since, targetCount, order });\n },\n ),\n );\n","import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { listZeroLogs } from \"../../../lib/api\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { isUUID } from \"../../run/shared\";\n\nfunction formatStatus(status: string): string {\n switch (status) {\n case \"completed\":\n return chalk.green(status);\n case \"failed\":\n case \"timeout\":\n return chalk.red(status);\n case \"running\":\n case \"pending\":\n case \"queued\":\n return chalk.yellow(status);\n case \"cancelled\":\n return chalk.dim(status);\n default:\n return status;\n }\n}\n\nfunction formatTime(iso: string): string {\n return formatIsoTimestamp(iso);\n}\n\nexport const listCommand = new Command()\n .name(\"list\")\n .alias(\"ls\")\n .description(\"List agent run logs\")\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\n \"--status <status>\",\n \"Filter by status (queued|pending|running|completed|failed|timeout|cancelled)\",\n )\n .option(\n \"--since <time>\",\n \"Filter runs created since (e.g., 5m, 2h, 1d, 2024-01-15T10:30:00Z)\",\n )\n .option(\"--limit <n>\", \"Maximum number of results (default: 20)\")\n .addHelpText(\n \"after\",\n `\nExamples:\n zero logs list\n zero logs list --agent 123e4567-e89b-12d3-a456-426614174000\n zero logs list --status completed --limit 10\n zero logs list --since 1h\n zero logs list --since 1d --status completed`,\n )\n .action(\n withErrorHandler(\n async (options: {\n agent?: string;\n status?: string;\n since?: string;\n limit?: string;\n }) => {\n const limit =\n options.limit !== undefined\n ? parseBoundedLogCount(options.limit, \"--limit\", 1, 100)\n : undefined;\n const since =\n options.since !== undefined ? parseTime(options.since) : undefined;\n if (options.agent !== undefined && !isUUID(options.agent)) {\n console.error(\n chalk.red(\n `✗ Invalid agent ID \"${options.agent}\" — expected a UUID`,\n ),\n );\n console.error(\n chalk.dim(\" Run: zero logs list to find agent IDs\"),\n );\n process.exit(1);\n }\n\n const result = await listZeroLogs({\n agentId: options.agent,\n status: options.status,\n since,\n limit,\n });\n\n if (result.data.length === 0) {\n console.log(chalk.dim(\"No logs found\"));\n return;\n }\n\n const nameCol = Math.max(\n 5,\n ...result.data.map((r) => {\n return (r.displayName || r.agentId || \"-\").length;\n }),\n );\n const statusCol = Math.max(\n 6,\n ...result.data.map((r) => {\n return r.status.length;\n }),\n );\n\n const header = [\n \"RUN ID\".padEnd(38),\n \"AGENT\".padEnd(nameCol),\n \"STATUS\".padEnd(statusCol),\n \"CREATED\",\n ].join(\" \");\n console.log(chalk.dim(header));\n\n for (const entry of result.data) {\n const runId = entry.id;\n const name = entry.displayName || entry.agentId || \"-\";\n const row = [\n runId.padEnd(38),\n name.padEnd(nameCol),\n formatStatus(entry.status).padEnd(statusCol),\n formatTime(entry.createdAt),\n ].join(\" \");\n console.log(row);\n }\n\n if (result.pagination.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing ${result.data.length} of more results. Use --limit to adjust.`,\n ),\n );\n }\n },\n ),\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;ACAA;AASA,SAAS,aAAa,QAAwB;AAC5C,UAAQ,QAAQ;AAAA,IACd,KAAK;AACH,aAAO,eAAM,MAAM,MAAM;AAAA,IAC3B,KAAK;AAAA,IACL,KAAK;AACH,aAAO,eAAM,IAAI,MAAM;AAAA,IACzB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,eAAM,OAAO,MAAM;AAAA,IAC5B,KAAK;AACH,aAAO,eAAM,IAAI,MAAM;AAAA,IACzB;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,WAAW,KAAqB;AACvC,SAAO,mBAAmB,GAAG;AAC/B;AAEO,IAAM,cAAc,IAAI,QAAQ,EACpC,KAAK,MAAM,EACX,MAAM,IAAI,EACV,YAAY,qBAAqB,EACjC,OAAO,gBAAgB,yBAAyB,EAChD;AAAA,EACC;AAAA,EACA;AACF,EACC;AAAA,EACC;AAAA,EACA;AACF,EACC,OAAO,eAAe,yCAAyC,EAC/D;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOF,EACC;AAAA,EACC;AAAA,IACE,OAAO,YAKD;AACJ,YAAM,QACJ,QAAQ,UAAU,SACd,qBAAqB,QAAQ,OAAO,WAAW,GAAG,GAAG,IACrD;AACN,YAAM,QACJ,QAAQ,UAAU,SAAY,UAAU,QAAQ,KAAK,IAAI;AAC3D,UAAI,QAAQ,UAAU,UAAa,CAAC,OAAO,QAAQ,KAAK,GAAG;AACzD,gBAAQ;AAAA,UACN,eAAM;AAAA,YACJ,4BAAuB,QAAQ,KAAK;AAAA,UACtC;AAAA,QACF;AACA,gBAAQ;AAAA,UACN,eAAM,IAAI,4CAA4C;AAAA,QACxD;AACA,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,YAAM,SAAS,MAAM,aAAa;AAAA,QAChC,SAAS,QAAQ;AAAA,QACjB,QAAQ,QAAQ;AAAA,QAChB;AAAA,QACA;AAAA,MACF,CAAC;AAED,UAAI,OAAO,KAAK,WAAW,GAAG;AAC5B,gBAAQ,IAAI,eAAM,IAAI,eAAe,CAAC;AACtC;AAAA,MACF;AAEA,YAAM,UAAU,KAAK;AAAA,QACnB;AAAA,QACA,GAAG,OAAO,KAAK,IAAI,CAAC,MAAM;AACxB,kBAAQ,EAAE,eAAe,EAAE,WAAW,KAAK;AAAA,QAC7C,CAAC;AAAA,MACH;AACA,YAAM,YAAY,KAAK;AAAA,QACrB;AAAA,QACA,GAAG,OAAO,KAAK,IAAI,CAAC,MAAM;AACxB,iBAAO,EAAE,OAAO;AAAA,QAClB,CAAC;AAAA,MACH;AAEA,YAAM,SAAS;AAAA,QACb,SAAS,OAAO,EAAE;AAAA,QAClB,QAAQ,OAAO,OAAO;AAAA,QACtB,SAAS,OAAO,SAAS;AAAA,QACzB;AAAA,MACF,EAAE,KAAK,IAAI;AACX,cAAQ,IAAI,eAAM,IAAI,MAAM,CAAC;AAE7B,iBAAW,SAAS,OAAO,MAAM;AAC/B,cAAM,QAAQ,MAAM;AACpB,cAAM,OAAO,MAAM,eAAe,MAAM,WAAW;AACnD,cAAM,MAAM;AAAA,UACV,MAAM,OAAO,EAAE;AAAA,UACf,KAAK,OAAO,OAAO;AAAA,UACnB,aAAa,MAAM,MAAM,EAAE,OAAO,SAAS;AAAA,UAC3C,WAAW,MAAM,SAAS;AAAA,QAC5B,EAAE,KAAK,IAAI;AACX,gBAAQ,IAAI,GAAG;AAAA,MACjB;AAEA,UAAI,OAAO,WAAW,SAAS;AAC7B,gBAAQ,IAAI;AACZ,gBAAQ;AAAA,UACN,eAAM;AAAA,YACJ,aAAa,OAAO,KAAK,MAAM;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;ADxHF,IAAM,aAAa;AAQnB,SAAS,sBACP,WACoB;AACpB,SAAO,qBAAqB,SAAS,IAAI,YAAY;AACvD;AAEA,SAAS,gBAAgB,WAA+C;AACtE,SAAO,cAAc,UAAa,cAAc;AAClD;AAEA,SAAS,iBACP,OACA,UACA,YACA,WACM;AACN,QAAM,eAAe,WAAW;AAAA,IAC9B,MAAM;AAAA,IACN;AAAA,IACA,IAAI,KAAK,MAAM,SAAS;AAAA,EAC1B;AACA,aAAW,UAAU,cAAc;AACjC,aAAS,OAAO,MAAM;AAAA,EACxB;AACF;AAEA,eAAe,gBACb,OACA,SAKe;AACf,QAAM,SAAS,MAAM,gBAAyC;AAAA,IAC5D,WAAW,OAAO,YAAY;AAC5B,YAAM,WAAW,MAAM,sBAAsB,OAAO,OAAO;AAC3D,YAAM,oBAA+C,SAAS;AAC9D,aAAO;AAAA,QACL,OAAO,SAAS,OAAO,IAAI,CAAC,UAAU;AACpC,gBAAMA,aAAY;AAAA,YAChB,qBAAqB;AAAA,UACvB;AACA,iBAAO;AAAA,YACL;AAAA,YACA,GAAIA,aAAY,EAAE,WAAAA,WAAU,IAAI,CAAC;AAAA,YACjC,qBAAqB,CAAC,gBAAgB,iBAAiB;AAAA,UACzD;AAAA,QACF,CAAC;AAAA,QACD,SAAS,SAAS;AAAA,QAClB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAAA,IACA,WAAW,QAAQ;AAAA,IACnB,aAAa,QAAQ;AAAA,IACrB,OAAO,QAAQ;AAAA,IACf,WAAW;AAAA,EACb,CAAC;AAED,MAAI,OAAO,WAAW,GAAG;AACvB,YAAQ,IAAI,eAAM,OAAO,oCAAoC,CAAC;AAC9D;AAAA,EACF;AAEA,QAAM,WAAW,IAAI,cAAc;AAAA,IACjC,eAAe;AAAA,IACf,SAAS;AAAA,EACX,CAAC;AACD,QAAM,YAAY,OAAO,KAAK,CAAC,SAAS;AACtC,WAAO,KAAK,cAAc;AAAA,EAC5B,CAAC,GAAG;AACJ,QAAM,aAAa,IAAI,sBAAsB;AAE7C,aAAW,QAAQ,QAAQ;AACzB;AAAA,MACE,KAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK,cAAc,KAAK,sBAAsB,YAAY;AAAA,IAC5D;AAAA,EACF;AACA,aAAW,UAAU,WAAW,MAAM,GAAG;AACvC,aAAS,OAAO,MAAM;AAAA,EACxB;AACA,WAAS,MAAM;AACjB;AAEO,IAAM,kBAAkB,IAAI,QAAQ,EACxC,KAAK,MAAM,EACX,YAAY,gCAAgC,EAC5C,SAAS,WAAW,iCAAiC,EACrD,WAAW,WAAW,EACtB,WAAW,aAAa,EACxB;AAAA,EACC;AAAA,EACA;AACF,EACC,OAAO,cAAc,kCAAkC,EACvD,OAAO,cAAc,sBAAsB,EAC3C,OAAO,SAAS,uBAAuB,EACvC;AAAA,EACC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOF,EACC;AAAA,EACC;AAAA,IACE,OACE,OACA,YAMG;AACH,UAAI,CAAC,OAAO;AACV,wBAAgB,KAAK;AACrB;AAAA,MACF;AAEA,UAAI,CAAC,OAAO,KAAK,GAAG;AAClB,gBAAQ;AAAA,UACN,eAAM,IAAI,0BAAqB,KAAK,0BAAqB;AAAA,QAC3D;AACA,gBAAQ,MAAM,eAAM,IAAI,0CAA0C,CAAC;AACnE,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,YAAM,aAAa;AAAA,QACjB,QAAQ,SAAS;AAAA,QACjB,QAAQ,SAAS;AAAA,QACjB,QAAQ,QAAQ;AAAA,MAClB,EAAE,OAAO,OAAO,EAAE;AAClB,UAAI,aAAa,GAAG;AAClB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,UAAI;AACJ,UAAI,QAAQ,UAAU,QAAW;AAC/B,gBAAQ,UAAU,QAAQ,KAAK;AAAA,MACjC;AAEA,YAAM,QAAQ,QAAQ,QAAQ;AAC9B,YAAM,SAAS,QAAQ,SAAS;AAChC,YAAM,SAAS,QAAQ,SAAS;AAEhC,UAAI;AACJ,UAAI,OAAO;AACT,sBAAc;AAAA,MAChB,WAAW,QAAQ;AACjB,sBAAc,sBAAsB,QAAQ,MAAO,QAAQ;AAAA,MAC7D,WAAW,QAAQ;AACjB,sBAAc,sBAAsB,QAAQ,MAAO,QAAQ;AAAA,MAC7D,OAAO;AACL,sBAAc;AAAA,MAChB;AAEA,YAAM,QAAwB,SAAS,QAAQ;AAE/C,YAAM,gBAAgB,OAAO,EAAE,OAAO,aAAa,MAAM,CAAC;AAAA,IAC5D;AAAA,EACF;AACF;","names":["framework"]}
|
package/search-LCGK3BJI.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/zero/search/index.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { withErrorHandler } from \"../../../lib/command\";\nimport { runLogsSearch, type LogsSearchCliOptions } from \"../logs/search\";\nimport { searchZeroChat } from \"../../../lib/api\";\nimport type {\n ChatSearchMessage,\n ChatSearchResponse,\n} from \"@vm0/api-contracts/contracts/chat-threads\";\nimport { parseTime } from \"../../../lib/utils/time-parser\";\nimport { formatIsoTimestamp } from \"../../../lib/utils/time-format\";\nimport { parseBoundedLogCount } from \"../../../lib/utils/log-pagination\";\nimport { parseSearchQuery } from \"../../../lib/utils/search-query\";\nimport { isUUID } from \"../../run/shared\";\n\nconst SUPPORTED_SOURCES = [\"logs\", \"chat\", \"slack\"] as const;\ntype Source = (typeof SUPPORTED_SOURCES)[number];\n\nconst SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport const SEARCH_EXPLAINER = `\nAvailable sources:\n logs full agent event stream (tool calls, tokens, system events) from agent runs\n chat user/assistant text messages as shown in the web chat UI\n slack returns a recipe for calling the Slack API directly; requires the Slack connector\n\nUsage: zero search <query> --source <logs|chat|slack> [flags]\nRun 'zero search --help' for all flags.`;\n\nexport function buildSlackRecipe(query: string): string {\n const encoded = encodeURIComponent(query);\n return `The \\`slack\\` source does not call Slack from this CLI. Run the\nfollowing inside an agent sandbox that has $SLACK_TOKEN available:\n\n curl -H \"Authorization: Bearer $SLACK_TOKEN\" \\\\\n \"https://slack.com/api/search.messages?query=${encoded}\"\n\nIf you don't have $SLACK_TOKEN, check the connector status:\n zero connector status slack\n\nTo verify the token and network policy end-to-end:\n zero connector check --env-name SLACK_TOKEN\n\nSlack API docs: https://api.slack.com/methods/search.messages\n\nNote: CLI-local flags (--limit, --since, -A/-B/-C) are ignored for the\nslack source. Pass equivalents to Slack's API via count= / highlight=\nquery parameters instead.`;\n}\n\ninterface SearchOptions {\n source: string[];\n agent?: string;\n run?: string;\n since?: string;\n limit?: string;\n afterContext?: string;\n beforeContext?: string;\n context?: string;\n}\n\nfunction collectSource(value: string, previous: string[]): string[] {\n return [...previous, value];\n}\n\nfunction parseContextOptions(options: SearchOptions): {\n before: number;\n after: number;\n} {\n const contextN =\n options.context !== undefined\n ? parseBoundedLogCount(options.context, \"--context\", 0, 10)\n : 0;\n const before =\n options.beforeContext !== undefined\n ? parseBoundedLogCount(options.beforeContext, \"--before-context\", 0, 10)\n : contextN;\n const after =\n options.afterContext !== undefined\n ? parseBoundedLogCount(options.afterContext, \"--after-context\", 0, 10)\n : contextN;\n\n return { before, after };\n}\n\nfunction parseLimit(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n return parseBoundedLogCount(value, \"--limit\", 1, 50);\n}\n\nasync function runLogsSource(\n query: string,\n options: SearchOptions,\n): Promise<void> {\n const logsOptions: LogsSearchCliOptions = {\n afterContext: options.afterContext,\n beforeContext: options.beforeContext,\n context: options.context,\n agentId: options.agent,\n run: options.run,\n since: options.since,\n limit: options.limit,\n };\n await runLogsSearch(query, logsOptions);\n}\n\nfunction formatTimestamp(iso: string): string {\n return formatIsoTimestamp(iso);\n}\n\nfunction renderChatMessage(msg: ChatSearchMessage, isMatch: boolean): void {\n const marker = isMatch ? chalk.yellow(\"▸\") : chalk.dim(\"·\");\n const header = `${marker} ${chalk.dim(msg.role)} ${chalk.dim(formatTimestamp(msg.createdAt))}`;\n console.log(header);\n console.log(isMatch ? msg.content : chalk.dim(msg.content));\n}\n\nfunction renderChatResults(response: ChatSearchResponse): void {\n let isFirst = true;\n for (const result of response.results) {\n if (!isFirst) console.log();\n isFirst = false;\n\n console.log(\n chalk.bold(\n `── Thread ${result.chatThreadId} (${result.agentName}) ──────────`,\n ),\n );\n for (const msg of result.contextBefore) {\n renderChatMessage(msg, false);\n }\n renderChatMessage(result.matchedMessage, true);\n for (const msg of result.contextAfter) {\n renderChatMessage(msg, false);\n }\n }\n\n if (response.hasMore) {\n console.log();\n console.log(\n chalk.dim(\n ` Showing first ${response.results.length} matches. Use --limit to see more.`,\n ),\n );\n }\n}\n\nasync function runChatSource(\n query: string,\n options: SearchOptions,\n): Promise<void> {\n if (options.run !== undefined) {\n throw new Error(\"--run is not supported with --source chat\");\n }\n if (options.agent !== undefined && !isUUID(options.agent)) {\n console.error(\n chalk.red(`✗ Invalid agent ID \"${options.agent}\" — expected a UUID`),\n );\n console.error(chalk.dim(\" Run: zero logs list to find agent IDs\"));\n process.exit(1);\n }\n\n const { before, after } = parseContextOptions(options);\n const limit = parseLimit(options.limit);\n const since =\n options.since !== undefined\n ? parseTime(options.since)\n : Date.now() - SEVEN_DAYS_MS;\n\n const response = await searchZeroChat({\n keyword: query,\n agentId: options.agent,\n since,\n limit,\n before,\n after,\n });\n\n if (response.results.length === 0) {\n console.log(chalk.dim(\"No matches found\"));\n console.log(\n chalk.dim(\n \" Try a broader search with --since 30d or a different keyword\",\n ),\n );\n return;\n }\n\n renderChatResults(response);\n}\n\nasync function runSlackSource(\n query: string,\n _options: SearchOptions,\n): Promise<void> {\n console.log(buildSlackRecipe(query));\n}\n\nexport const zeroSearchCommand = new Command()\n .name(\"search\")\n .description(\"Search logs, chat, or get a recipe for external sources\")\n .argument(\"<query>\", \"Search query\")\n .option(\n \"--source <type>\",\n \"Source to search: logs | chat | slack (pass once)\",\n collectSource,\n [] as string[],\n )\n .option(\"--agent <id>\", \"Filter by Zero agent ID\")\n .option(\"--run <id>\", \"Filter by run ID\")\n .option(\"--since <time>\", \"Time window (e.g., 7d, 2h)\")\n .option(\"--limit <n>\", \"Maximum number of matches\")\n .option(\"-A, --after-context <n>\", \"Show n items after each match\")\n .option(\"-B, --before-context <n>\", \"Show n items before each match\")\n .option(\"-C, --context <n>\", \"Show n items before and after each match\")\n .addHelpText(\"after\", SEARCH_EXPLAINER)\n .action(\n withErrorHandler(async (query: string, options: SearchOptions) => {\n const searchQuery = parseSearchQuery(query, \"Query\");\n const sources = options.source;\n\n if (sources.length === 0) {\n console.log(SEARCH_EXPLAINER);\n return;\n }\n\n if (sources.length > 1) {\n throw new Error(\"Only one --source is allowed.\");\n }\n\n const source = sources[0]!;\n if (!SUPPORTED_SOURCES.includes(source as Source)) {\n throw new Error(\n `Unknown --source \"${source}\". Expected one of: ${SUPPORTED_SOURCES.join(\", \")}`,\n );\n }\n\n switch (source as Source) {\n case \"logs\":\n await runLogsSource(searchQuery, options);\n return;\n case \"chat\":\n await runChatSource(searchQuery, options);\n return;\n case \"slack\":\n await runSlackSource(searchQuery, options);\n return;\n }\n }),\n );\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|