@runcofactor/cli 0.15.2 → 0.17.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/dist/{account-62I7FG5G.js → account-ZSM2Q3RB.js} +6 -6
- package/dist/account-ZSM2Q3RB.js.map +1 -0
- package/dist/{api-catalog-CAJUASVC.js → api-catalog-MMPFWS52.js} +5 -5
- package/dist/{attachment-RL4AZUJE.js → attachment-NSYL5X3S.js} +5 -5
- package/dist/{augmentor-GAF3MFY6.js → augmentor-LSJLMJYP.js} +5 -5
- package/dist/{auth-DURHUZDW.js → auth-OYF5A4BY.js} +4 -2
- package/dist/{chunk-26U3DGUM.js → chunk-7YJTQCPX.js} +3 -5
- package/dist/chunk-7YJTQCPX.js.map +1 -0
- package/dist/{chunk-PXFDH6YL.js → chunk-A4ISG3VX.js} +55 -15
- package/dist/{chunk-PXFDH6YL.js.map → chunk-A4ISG3VX.js.map} +1 -1
- package/dist/{chunk-4NRDONSC.js → chunk-FGB6PS2T.js} +4 -4
- package/dist/chunk-FGB6PS2T.js.map +1 -0
- package/dist/{chunk-VKBTI5EF.js → chunk-GFP4UEUT.js} +3 -3
- package/dist/{chunk-IWKJQZJQ.js → chunk-GZVCNYR4.js} +55 -55
- package/dist/chunk-GZVCNYR4.js.map +1 -0
- package/dist/{chunk-G5SXUXSU.js → chunk-H7ZML5QL.js} +2 -2
- package/dist/{chunk-HKQ5XQAQ.js → chunk-HGPZ2QWV.js} +4 -4
- package/dist/{chunk-CJEKEW7R.js → chunk-IHCPMYKU.js} +3 -3
- package/dist/{chunk-UZ2ZA5A6.js → chunk-JZWJFG4M.js} +2 -2
- package/dist/{chunk-5R4HMSNX.js → chunk-MO5G5TP5.js} +17141 -16812
- package/dist/chunk-MO5G5TP5.js.map +1 -0
- package/dist/{chunk-CFJXYPTF.js → chunk-PVWG3V62.js} +13 -5
- package/dist/chunk-PVWG3V62.js.map +1 -0
- package/dist/{chunk-3CZU7XCS.js → chunk-PWZ4ULCB.js} +20 -14
- package/dist/chunk-PWZ4ULCB.js.map +1 -0
- package/dist/{chunk-ZXRVFFCY.js → chunk-VHVOTGBQ.js} +3 -3
- package/dist/{chunk-IGHDIWZU.js → chunk-VYTIJ6HJ.js} +17 -2
- package/dist/{chunk-IGHDIWZU.js.map → chunk-VYTIJ6HJ.js.map} +1 -1
- package/dist/{credential-JGVSEGVH.js → credential-WOATCWOU.js} +5 -5
- package/dist/{credential-template-CWWMOKB2.js → credential-template-Q3DQE2AH.js} +5 -5
- package/dist/{debug-workflow-BXRU72YZ.js → debug-workflow-ZNP5XZQF.js} +7 -7
- package/dist/{src-CV57ZD6I.js → dist-WW2S733L.js} +7 -9
- package/dist/{docs-PVBXPTGR.js → docs-XVU4LA7G.js} +5 -5
- package/dist/{doctor-RHMKD4W5.js → doctor-PGNHD3TI.js} +3 -3
- package/dist/{environment-WZKIO3R3.js → environment-MRDNWU47.js} +5 -5
- package/dist/{feature-flag-K5REGGDY.js → feature-flag-D3DQZ6DX.js} +11 -10
- package/dist/feature-flag-D3DQZ6DX.js.map +1 -0
- package/dist/index.js +144 -56
- package/dist/index.js.map +1 -1
- package/dist/{init-FFUZO5D7.js → init-DHWKUYIR.js} +10 -10
- package/dist/{install-XRKEQAFZ.js → install-DMEFGQHD.js} +5 -5
- package/dist/{issues-I3V6GEXU.js → issues-E4YQ4DVC.js} +5 -5
- package/dist/{knobs-6WLJMB44.js → knobs-NA6SPLHX.js} +5 -5
- package/dist/{list-PHC7VYNS.js → list-GJNGFQMC.js} +5 -5
- package/dist/{local-VGYRSW22.js → local-NSKOZHHA.js} +6 -6
- package/dist/{login-QPU2BKG2.js → login-AMSRVPXG.js} +10 -10
- package/dist/{mcp-LA452TOA.js → mcp-V4GKEL2J.js} +7 -8
- package/dist/{mcp-LA452TOA.js.map → mcp-V4GKEL2J.js.map} +1 -1
- package/dist/metrics-DM4YQQZN.js +367 -0
- package/dist/metrics-DM4YQQZN.js.map +1 -0
- package/dist/{product-RSZV5HMB.js → product-WGOLTBRI.js} +6 -5
- package/dist/product-WGOLTBRI.js.map +1 -0
- package/dist/{property-YP4GHQAR.js → property-B7QMGLVW.js} +5 -5
- package/dist/{psql-XGLBI6T7.js → psql-4JHPJ2CO.js} +3 -3
- package/dist/{record-KWKHP2ZY.js → record-LDNKS42Y.js} +6 -6
- package/dist/{record-KWKHP2ZY.js.map → record-LDNKS42Y.js.map} +1 -1
- package/dist/{redis-VJGCUJPV.js → redis-N44ZZ6VB.js} +3 -3
- package/dist/{release-NDRHPW6V.js → release-R7GKLEAI.js} +5 -5
- package/dist/{sandbox-OOCANWOG.js → sandbox-PLYUNOFX.js} +6 -6
- package/dist/{scenarios-2HRLCGFY.js → scenarios-WUUUKP2S.js} +5 -5
- package/dist/{session-M4ULYDYP.js → session-Y6RO7GFC.js} +15 -17
- package/dist/{session-M4ULYDYP.js.map → session-Y6RO7GFC.js.map} +1 -1
- package/dist/{skill-4DGPRDUC.js → skill-3SP7MAA4.js} +176 -15
- package/dist/skill-3SP7MAA4.js.map +1 -0
- package/dist/{spec-XZ2TKUFZ.js → spec-ESPA3H26.js} +5 -5
- package/dist/{src-HL7HEJIW.js → src-ECFPDE5X.js} +18 -2
- package/dist/src-ECFPDE5X.js.map +1 -0
- package/dist/{src-7LAXXTVG.js → src-OWPS5DCK.js} +63 -27
- package/dist/{src-7LAXXTVG.js.map → src-OWPS5DCK.js.map} +1 -1
- package/dist/{src-OU7544PM.js → src-PDYXACRP.js} +2 -2
- package/dist/{start-IYKF3C3X.js → start-KDDRLUFN.js} +8 -8
- package/dist/{tag-T45MMSCH.js → tag-DAGHQZAR.js} +6 -6
- package/dist/{task-MCUHAVTD.js → task-PRR75HI4.js} +5 -5
- package/dist/{test-suite-BICBRSBP.js → test-suite-O3UY7EER.js} +7 -7
- package/dist/{trace-2BAPMYAS.js → trace-BCSP7PCX.js} +5 -6
- package/dist/{triage-M3RZ2ASB.js → triage-2BKUBMMX.js} +6 -6
- package/dist/utilities-O3OO64T5.js +441 -0
- package/dist/utilities-O3OO64T5.js.map +1 -0
- package/dist/{workflow-ZGJU4QCV.js → workflow-76EKT3DS.js} +16 -21
- package/dist/workflow-76EKT3DS.js.map +1 -0
- package/dist/{workflow-cache-M4N325UT.js → workflow-cache-UDTTNIHT.js} +8 -8
- package/dist/{workflow-cache-M4N325UT.js.map → workflow-cache-UDTTNIHT.js.map} +1 -1
- package/dist/{workflow-debug-W4USZH35.js → workflow-debug-WO7D32EI.js} +8 -9
- package/dist/{workflow-debug-W4USZH35.js.map → workflow-debug-WO7D32EI.js.map} +1 -1
- package/dist/{workflow-proposals-5E3DTYZB.js → workflow-proposals-PGURJ6ZI.js} +7 -7
- package/package.json +3 -3
- package/dist/account-62I7FG5G.js.map +0 -1
- package/dist/chunk-26U3DGUM.js.map +0 -1
- package/dist/chunk-3CZU7XCS.js.map +0 -1
- package/dist/chunk-4NRDONSC.js.map +0 -1
- package/dist/chunk-5R4HMSNX.js.map +0 -1
- package/dist/chunk-CFJXYPTF.js.map +0 -1
- package/dist/chunk-IWKJQZJQ.js.map +0 -1
- package/dist/chunk-KRWRUU6R.js +0 -114
- package/dist/chunk-KRWRUU6R.js.map +0 -1
- package/dist/feature-flag-K5REGGDY.js.map +0 -1
- package/dist/pdf-extract-YHE54XU4.js +0 -13
- package/dist/product-RSZV5HMB.js.map +0 -1
- package/dist/skill-4DGPRDUC.js.map +0 -1
- package/dist/src-HL7HEJIW.js.map +0 -1
- package/dist/triage-M3RZ2ASB.js.map +0 -1
- package/dist/workflow-ZGJU4QCV.js.map +0 -1
- /package/dist/{api-catalog-CAJUASVC.js.map → api-catalog-MMPFWS52.js.map} +0 -0
- /package/dist/{attachment-RL4AZUJE.js.map → attachment-NSYL5X3S.js.map} +0 -0
- /package/dist/{augmentor-GAF3MFY6.js.map → augmentor-LSJLMJYP.js.map} +0 -0
- /package/dist/{auth-DURHUZDW.js.map → auth-OYF5A4BY.js.map} +0 -0
- /package/dist/{chunk-VKBTI5EF.js.map → chunk-GFP4UEUT.js.map} +0 -0
- /package/dist/{chunk-G5SXUXSU.js.map → chunk-H7ZML5QL.js.map} +0 -0
- /package/dist/{chunk-HKQ5XQAQ.js.map → chunk-HGPZ2QWV.js.map} +0 -0
- /package/dist/{chunk-CJEKEW7R.js.map → chunk-IHCPMYKU.js.map} +0 -0
- /package/dist/{chunk-UZ2ZA5A6.js.map → chunk-JZWJFG4M.js.map} +0 -0
- /package/dist/{chunk-ZXRVFFCY.js.map → chunk-VHVOTGBQ.js.map} +0 -0
- /package/dist/{credential-JGVSEGVH.js.map → credential-WOATCWOU.js.map} +0 -0
- /package/dist/{credential-template-CWWMOKB2.js.map → credential-template-Q3DQE2AH.js.map} +0 -0
- /package/dist/{debug-workflow-BXRU72YZ.js.map → debug-workflow-ZNP5XZQF.js.map} +0 -0
- /package/dist/{pdf-extract-YHE54XU4.js.map → dist-WW2S733L.js.map} +0 -0
- /package/dist/{docs-PVBXPTGR.js.map → docs-XVU4LA7G.js.map} +0 -0
- /package/dist/{doctor-RHMKD4W5.js.map → doctor-PGNHD3TI.js.map} +0 -0
- /package/dist/{environment-WZKIO3R3.js.map → environment-MRDNWU47.js.map} +0 -0
- /package/dist/{init-FFUZO5D7.js.map → init-DHWKUYIR.js.map} +0 -0
- /package/dist/{install-XRKEQAFZ.js.map → install-DMEFGQHD.js.map} +0 -0
- /package/dist/{issues-I3V6GEXU.js.map → issues-E4YQ4DVC.js.map} +0 -0
- /package/dist/{knobs-6WLJMB44.js.map → knobs-NA6SPLHX.js.map} +0 -0
- /package/dist/{list-PHC7VYNS.js.map → list-GJNGFQMC.js.map} +0 -0
- /package/dist/{local-VGYRSW22.js.map → local-NSKOZHHA.js.map} +0 -0
- /package/dist/{login-QPU2BKG2.js.map → login-AMSRVPXG.js.map} +0 -0
- /package/dist/{property-YP4GHQAR.js.map → property-B7QMGLVW.js.map} +0 -0
- /package/dist/{psql-XGLBI6T7.js.map → psql-4JHPJ2CO.js.map} +0 -0
- /package/dist/{redis-VJGCUJPV.js.map → redis-N44ZZ6VB.js.map} +0 -0
- /package/dist/{release-NDRHPW6V.js.map → release-R7GKLEAI.js.map} +0 -0
- /package/dist/{sandbox-OOCANWOG.js.map → sandbox-PLYUNOFX.js.map} +0 -0
- /package/dist/{scenarios-2HRLCGFY.js.map → scenarios-WUUUKP2S.js.map} +0 -0
- /package/dist/{spec-XZ2TKUFZ.js.map → spec-ESPA3H26.js.map} +0 -0
- /package/dist/{src-CV57ZD6I.js.map → src-PDYXACRP.js.map} +0 -0
- /package/dist/{start-IYKF3C3X.js.map → start-KDDRLUFN.js.map} +0 -0
- /package/dist/{src-OU7544PM.js.map → tag-DAGHQZAR.js.map} +0 -0
- /package/dist/{task-MCUHAVTD.js.map → task-PRR75HI4.js.map} +0 -0
- /package/dist/{test-suite-BICBRSBP.js.map → test-suite-O3UY7EER.js.map} +0 -0
- /package/dist/{tag-T45MMSCH.js.map → trace-BCSP7PCX.js.map} +0 -0
- /package/dist/{trace-2BAPMYAS.js.map → triage-2BKUBMMX.js.map} +0 -0
- /package/dist/{workflow-proposals-5E3DTYZB.js.map → workflow-proposals-PGURJ6ZI.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utilities.ts"],"sourcesContent":["/**\n * CLI Utilities Commands — a freeform agent toolkit.\n *\n * Three primitives for building and sharing reports:\n * - object: upload images/videos/files to the CDN (public or private), with\n * optional TTL, and get shareable / signed links.\n * - gist: publish text/markdown viewable in the Cofactor web app.\n * - email / slack: send one-off messages to ORG MEMBERS (looked up by email\n * or name). Use `cofactor org members` to see who can receive them.\n *\n * @module utilities\n */\n\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport process from 'node:process';\nimport { resolveConfig, getArgValue, hasFlag } from './auth.js';\nimport { apiRequest } from './cli-helpers.js';\n\n// ── shared helpers ─────────────────────────────────────────────────────────\n\n/** Collect every value for a repeated flag, e.g. `--to a --to b`. */\nfunction getAllArgValues(argv: string[], key: string): string[] {\n const out: string[] = [];\n for (let i = 0; i < argv.length; i++) {\n if (argv[i] === key && i + 1 < argv.length) out.push(argv[i + 1]!);\n }\n return out;\n}\n\n/** Parse a human duration (`30s`, `15m`, `24h`, `7d`, or bare seconds) → seconds. */\nfunction parseTtlSeconds(raw: string | undefined): number | undefined {\n if (!raw) return undefined;\n const m = raw.trim().match(/^(\\d+)\\s*(s|m|h|d)?$/i);\n if (!m) {\n console.error(`Error: invalid --ttl '${raw}'. Use e.g. 30s, 15m, 24h, 7d, or seconds.`);\n process.exit(1);\n }\n const n = Number(m[1]);\n const unit = (m[2] ?? 's').toLowerCase();\n const mult = unit === 'd' ? 86400 : unit === 'h' ? 3600 : unit === 'm' ? 60 : 1;\n return n * mult;\n}\n\nfunction formatSize(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\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf-8');\n}\n\n/** Resolve message/gist body from --body, --body-file, or --stdin. */\nasync function resolveBody(argv: string[]): Promise<string> {\n const inline = getArgValue(argv, '--body');\n if (inline !== undefined) return inline;\n const file = getArgValue(argv, '--body-file');\n if (file) {\n try {\n return await fs.readFile(file, 'utf-8');\n } catch (err) {\n console.error(`Error: failed to read ${file}: ${err instanceof Error ? err.message : err}`);\n process.exit(1);\n }\n }\n if (hasFlag(argv, '--stdin')) return readStdin();\n console.error('Error: provide a body via --body <text>, --body-file <path>, or --stdin.');\n process.exit(1);\n}\n\n// ── help ───────────────────────────────────────────────────────────────────\n\nfunction printHelp(): void {\n console.log(\n [\n 'Usage: cofactor utilities <group> <sub-command> [options]',\n '',\n 'A freeform toolkit for building and sharing reports.',\n '',\n 'Objects (images / videos / files):',\n ' object upload <file> [--public] [--ttl 7d] [--name <n>] [--json]',\n ' object list [--kind image|video|data|all] [--search <q>] [--json]',\n ' object url <id> [--download] Print a shareable/signed link',\n ' object delete <id>',\n '',\n 'Gists (text / markdown, viewable in the web app):',\n ' gist create [<file> | --stdin] [--title <t>] [--format markdown|text]',\n ' [--public] [--ttl 7d] [--json]',\n ' gist list [--search <q>] [--json]',\n ' gist get <id> [--raw] --raw prints content; default shows metadata + link',\n ' gist delete <id>',\n '',\n 'Messaging (org members only — see `cofactor org members`):',\n ' email --to <member> [--to ...] --subject <s> (--body <t> | --body-file <f> | --stdin)',\n ' slack --to <member> [--to ...] (--body <t> | --body-file <f> | --stdin)',\n '',\n 'Common options:',\n ' --env <prod|dev|local> Target environment',\n ' --json Machine-readable output',\n '',\n 'Recipe — build & share a report:',\n ' 1. Upload evidence: cofactor utilities object upload chart.png --public',\n ' 2. Write a report: cofactor utilities gist create report.md --public --title \"Run 42\"',\n ' (embed the object URLs from step 1 as markdown images)',\n ' 3. Share the link: cofactor utilities slack --to alex@acme.com --body \"Report: <gist url>\"',\n ].join('\\n')\n );\n}\n\n// ── objects ──────────────────────────────────────────────────────────────\n\ntype ObjectItem = {\n id: string;\n visibility: 'public' | 'private';\n filename: string;\n contentType: string;\n sizeBytes: number;\n expiresAt: string | null;\n createdAt: string;\n publicUrl: string | null;\n};\n\nasync function objectUpload(argv: string[], apiUrl: string, token: string): Promise<void> {\n const filePath = argv.find((a) => !a.startsWith('-'));\n if (!filePath) {\n console.error('Error: missing file path. Usage: utilities object upload <file> [--public] [--ttl 7d]');\n process.exit(1);\n }\n const isPublic = hasFlag(argv, '--public');\n const ttlSeconds = parseTtlSeconds(getArgValue(argv, '--ttl'));\n const overrideName = getArgValue(argv, '--name');\n const jsonOutput = hasFlag(argv, '--json');\n\n let buf: Buffer;\n try {\n buf = await fs.readFile(filePath);\n } catch (err) {\n console.error(`Error: failed to read ${filePath}: ${err instanceof Error ? err.message : err}`);\n process.exit(1);\n }\n const filename = overrideName ?? path.basename(filePath);\n\n const form = new FormData();\n form.append('file', new Blob([new Uint8Array(buf)]), filename);\n form.append('visibility', isPublic ? 'public' : 'private');\n if (ttlSeconds) form.append('ttlSeconds', String(ttlSeconds));\n if (overrideName) form.append('filename', overrideName);\n\n const res = await fetch(`${apiUrl}/org/utilities/objects`, {\n method: 'POST',\n headers: { Authorization: `Bearer ${token}` },\n body: form,\n });\n if (res.status === 401) {\n console.error('Error: Unauthorized. Run: cofactor login');\n process.exit(1);\n }\n let body: { ok: boolean; error?: string; data?: ObjectItem & { url: string } };\n try {\n body = (await res.json()) as typeof body;\n } catch {\n console.error(`Error: invalid JSON response (${res.status})`);\n process.exit(1);\n }\n if (!body.ok || !body.data) {\n console.error(`Error: ${body.error ?? `upload failed (${res.status})`}`);\n process.exit(1);\n }\n\n const created = body.data;\n if (jsonOutput) {\n console.log(JSON.stringify(created, null, 2));\n return;\n }\n console.log(`✓ Uploaded ${created.filename} (${created.visibility})`);\n console.log(` ID: ${created.id}`);\n console.log(` Type: ${created.contentType} Size: ${formatSize(created.sizeBytes)}`);\n if (created.expiresAt) console.log(` Expires: ${created.expiresAt}`);\n console.log(` Link: ${created.url}`);\n if (created.visibility === 'private') {\n console.log(' (private link is short-lived — re-mint with: utilities object url ' + created.id + ')');\n }\n}\n\nasync function objectList(argv: string[], apiUrl: string, token: string): Promise<void> {\n const params = new URLSearchParams();\n const kind = getArgValue(argv, '--kind');\n const search = getArgValue(argv, '--search');\n if (kind) params.set('kind', kind);\n if (search) params.set('search', search);\n const qs = params.toString();\n\n const result = await apiRequest<{ ok: boolean; error?: string; data: ObjectItem[] }>(\n apiUrl,\n token,\n 'GET',\n `/org/utilities/objects${qs ? `?${qs}` : ''}`\n );\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n if (hasFlag(argv, '--json')) {\n console.log(JSON.stringify(result.data, null, 2));\n return;\n }\n if (result.data.length === 0) {\n console.log('No objects.');\n return;\n }\n for (const o of result.data) {\n console.log(`${o.id} ${o.visibility.padEnd(7)} ${formatSize(o.sizeBytes).padStart(8)} ${o.filename}`);\n }\n}\n\nasync function objectUrl(argv: string[], apiUrl: string, token: string): Promise<void> {\n const id = argv.find((a) => !a.startsWith('-'));\n if (!id) {\n console.error('Error: missing object id. Usage: utilities object url <id> [--download]');\n process.exit(1);\n }\n const dl = hasFlag(argv, '--download') ? '?dl=1' : '';\n const result = await apiRequest<{ ok: boolean; error?: string; url?: string }>(\n apiUrl,\n token,\n 'GET',\n `/org/utilities/objects/${id}/url${dl}`\n );\n if (!result.ok || !result.url) {\n console.error(`Error: ${result.error ?? 'failed to get URL'}`);\n process.exit(1);\n }\n console.log(result.url);\n}\n\nasync function objectDelete(argv: string[], apiUrl: string, token: string): Promise<void> {\n const id = argv.find((a) => !a.startsWith('-'));\n if (!id) {\n console.error('Error: missing object id. Usage: utilities object delete <id>');\n process.exit(1);\n }\n const result = await apiRequest<{ ok: boolean; error?: string }>(\n apiUrl,\n token,\n 'DELETE',\n `/org/utilities/objects/${id}`\n );\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n console.log(`✓ Deleted ${id}`);\n}\n\n// ── gists ────────────────────────────────────────────────────────────────\n\ntype GistItem = {\n id: string;\n slug: string;\n title: string;\n content?: string;\n format: 'text' | 'markdown';\n visibility: 'public' | 'private';\n expiresAt: string | null;\n createdAt: string;\n viewUrl?: string | null;\n};\n\nasync function gistCreate(argv: string[], apiUrl: string, token: string): Promise<void> {\n const filePath = argv.find((a) => !a.startsWith('-'));\n let content: string;\n if (filePath) {\n try {\n content = await fs.readFile(filePath, 'utf-8');\n } catch (err) {\n console.error(`Error: failed to read ${filePath}: ${err instanceof Error ? err.message : err}`);\n process.exit(1);\n }\n } else if (hasFlag(argv, '--stdin')) {\n content = await readStdin();\n } else {\n const inline = getArgValue(argv, '--content');\n if (inline === undefined) {\n console.error('Error: provide content via a <file> arg, --stdin, or --content <text>.');\n process.exit(1);\n }\n content = inline;\n }\n\n const title =\n getArgValue(argv, '--title') ?? (filePath ? path.basename(filePath) : 'Untitled gist');\n const format = (getArgValue(argv, '--format') as 'text' | 'markdown') ?? 'markdown';\n const visibility = hasFlag(argv, '--public') ? 'public' : 'private';\n const ttlSeconds = parseTtlSeconds(getArgValue(argv, '--ttl'));\n\n const result = await apiRequest<{ ok: boolean; error?: string; data?: GistItem }>(\n apiUrl,\n token,\n 'POST',\n '/org/utilities/gists',\n { title, content, format, visibility, ...(ttlSeconds ? { ttlSeconds } : {}) }\n );\n if (!result.ok || !result.data) {\n console.error(`Error: ${result.error ?? 'failed to create gist'}`);\n process.exit(1);\n }\n if (hasFlag(argv, '--json')) {\n console.log(JSON.stringify(result.data, null, 2));\n return;\n }\n console.log(`✓ Created gist \"${result.data.title}\" (${result.data.visibility})`);\n console.log(` ID: ${result.data.id}`);\n if (result.data.viewUrl) console.log(` Public link: ${result.data.viewUrl}`);\n else console.log(' View in the web app under Utilities → Gists.');\n}\n\nasync function gistList(argv: string[], apiUrl: string, token: string): Promise<void> {\n const search = getArgValue(argv, '--search');\n const qs = search ? `?search=${encodeURIComponent(search)}` : '';\n const result = await apiRequest<{ ok: boolean; error?: string; data: GistItem[] }>(\n apiUrl,\n token,\n 'GET',\n `/org/utilities/gists${qs}`\n );\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n if (hasFlag(argv, '--json')) {\n console.log(JSON.stringify(result.data, null, 2));\n return;\n }\n if (result.data.length === 0) {\n console.log('No gists.');\n return;\n }\n for (const g of result.data) {\n console.log(`${g.id} ${g.visibility.padEnd(7)} ${g.format.padEnd(8)} ${g.title}`);\n }\n}\n\nasync function gistGet(argv: string[], apiUrl: string, token: string): Promise<void> {\n const id = argv.find((a) => !a.startsWith('-'));\n if (!id) {\n console.error('Error: missing gist id. Usage: utilities gist get <id> [--raw]');\n process.exit(1);\n }\n const result = await apiRequest<{ ok: boolean; error?: string; data?: GistItem }>(\n apiUrl,\n token,\n 'GET',\n `/org/utilities/gists/${id}`\n );\n if (!result.ok || !result.data) {\n console.error(`Error: ${result.error ?? 'gist not found'}`);\n process.exit(1);\n }\n if (hasFlag(argv, '--raw')) {\n process.stdout.write(result.data.content ?? '');\n return;\n }\n if (hasFlag(argv, '--json')) {\n console.log(JSON.stringify(result.data, null, 2));\n return;\n }\n console.log(`${result.data.title} (${result.data.visibility}, ${result.data.format})`);\n console.log(` ID: ${result.data.id}`);\n if (result.data.viewUrl) console.log(` Public link: ${result.data.viewUrl}`);\n console.log('');\n console.log(result.data.content ?? '');\n}\n\nasync function gistDelete(argv: string[], apiUrl: string, token: string): Promise<void> {\n const id = argv.find((a) => !a.startsWith('-'));\n if (!id) {\n console.error('Error: missing gist id. Usage: utilities gist delete <id>');\n process.exit(1);\n }\n const result = await apiRequest<{ ok: boolean; error?: string }>(\n apiUrl,\n token,\n 'DELETE',\n `/org/utilities/gists/${id}`\n );\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n console.log(`✓ Deleted ${id}`);\n}\n\n// ── messaging ──────────────────────────────────────────────────────────────\n\nasync function sendEmail(argv: string[], apiUrl: string, token: string): Promise<void> {\n const recipients = getAllArgValues(argv, '--to');\n const subject = getArgValue(argv, '--subject');\n if (recipients.length === 0 || !subject) {\n console.error('Error: usage: utilities email --to <member> [--to ...] --subject <s> (--body <t> | --body-file <f> | --stdin)');\n process.exit(1);\n }\n const body = await resolveBody(argv);\n\n const result = await apiRequest<{ ok: boolean; error?: string; data?: { sent: number } }>(\n apiUrl,\n token,\n 'POST',\n '/org/utilities/email',\n { recipients, subject, body }\n );\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n console.log(`✓ Email sent to ${result.data?.sent ?? recipients.length} recipient(s).`);\n}\n\nasync function sendSlack(argv: string[], apiUrl: string, token: string): Promise<void> {\n const recipients = getAllArgValues(argv, '--to');\n if (recipients.length === 0) {\n console.error('Error: usage: utilities slack --to <member> [--to ...] (--body <t> | --body-file <f> | --stdin)');\n process.exit(1);\n }\n const body = await resolveBody(argv);\n\n const result = await apiRequest<{ ok: boolean; error?: string; data?: { sent: number } }>(\n apiUrl,\n token,\n 'POST',\n '/org/utilities/slack',\n { recipients, body }\n );\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n console.log(`✓ Slack message sent to ${result.data?.sent ?? recipients.length} recipient(s).`);\n}\n\n// ── dispatch ─────────────────────────────────────────────────────────────\n\nasync function runObject(argv: string[], apiUrl: string, token: string): Promise<void> {\n const [sub, ...rest] = argv;\n switch (sub) {\n case 'upload':\n return objectUpload(rest, apiUrl, token);\n case 'list':\n return objectList(rest, apiUrl, token);\n case 'url':\n return objectUrl(rest, apiUrl, token);\n case 'delete':\n return objectDelete(rest, apiUrl, token);\n default:\n console.error(`Unknown object sub-command: ${sub ?? '(none)'}`);\n printHelp();\n process.exit(1);\n }\n}\n\nasync function runGist(argv: string[], apiUrl: string, token: string): Promise<void> {\n const [sub, ...rest] = argv;\n switch (sub) {\n case 'create':\n return gistCreate(rest, apiUrl, token);\n case 'list':\n return gistList(rest, apiUrl, token);\n case 'get':\n return gistGet(rest, apiUrl, token);\n case 'delete':\n return gistDelete(rest, apiUrl, token);\n default:\n console.error(`Unknown gist sub-command: ${sub ?? '(none)'}`);\n printHelp();\n process.exit(1);\n }\n}\n\nexport async function runUtilities(argv: string[]): Promise<void> {\n const [group, ...rest] = argv;\n\n if (!group || group === 'help' || hasFlag(argv, '--help', '-h')) {\n printHelp();\n return;\n }\n\n const { apiUrl, token } = await resolveConfig(rest);\n\n switch (group) {\n case 'object':\n return runObject(rest, apiUrl, token);\n case 'gist':\n return runGist(rest, apiUrl, token);\n case 'email':\n return sendEmail(rest, apiUrl, token);\n case 'slack':\n return sendSlack(rest, apiUrl, token);\n default:\n console.error(`Unknown utilities group: ${group}`);\n printHelp();\n process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
printGuide
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FGB6PS2T.js";
|
|
5
5
|
import {
|
|
6
6
|
workflowToSpec
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7YJTQCPX.js";
|
|
8
8
|
import {
|
|
9
9
|
applyWorkflowTagFlags
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import {
|
|
12
|
-
alignSnapshotNodeIds
|
|
13
|
-
} from "./chunk-JDBCZ3Z2.js";
|
|
10
|
+
} from "./chunk-GFP4UEUT.js";
|
|
14
11
|
import {
|
|
15
12
|
apiRequest,
|
|
16
13
|
renderWorkflowUserError
|
|
17
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-PVWG3V62.js";
|
|
18
15
|
import {
|
|
19
16
|
apiFetch,
|
|
20
17
|
exitOnFailure,
|
|
21
18
|
fetchOrExit
|
|
22
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-PWZ4ULCB.js";
|
|
20
|
+
import {
|
|
21
|
+
alignSnapshotNodeIds
|
|
22
|
+
} from "./chunk-JDBCZ3Z2.js";
|
|
23
23
|
import {
|
|
24
24
|
getArgValue,
|
|
25
25
|
hasFlag,
|
|
26
26
|
resolveAppUrl,
|
|
27
27
|
resolveConfig
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-VYTIJ6HJ.js";
|
|
29
29
|
import {
|
|
30
30
|
specExtension
|
|
31
31
|
} from "./chunk-32P26BZT.js";
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
NODE_TYPE_LABEL,
|
|
35
35
|
USER_SETTABLE_WORKFLOW_STATUSES,
|
|
36
36
|
normalizeNodeType
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-GZVCNYR4.js";
|
|
38
38
|
import "./chunk-VKVL7WBN.js";
|
|
39
39
|
|
|
40
40
|
// src/workflow.ts
|
|
@@ -2826,7 +2826,6 @@ function getCleanConfig(node) {
|
|
|
2826
2826
|
case "action":
|
|
2827
2827
|
return pick(c, [
|
|
2828
2828
|
"actionDescription",
|
|
2829
|
-
"customActionInstructions",
|
|
2830
2829
|
"playbookSteps",
|
|
2831
2830
|
"inputValues",
|
|
2832
2831
|
"declaredOutputs",
|
|
@@ -3332,7 +3331,7 @@ async function handlePromote(argv, apiUrl, token, options) {
|
|
|
3332
3331
|
if (jsonOutput) {
|
|
3333
3332
|
console.log(JSON.stringify(result, null, 2));
|
|
3334
3333
|
} else {
|
|
3335
|
-
const hint = result.code === "
|
|
3334
|
+
const hint = result.code === "FLOW_NOT_READY_TO_PROMOTE" ? "\n Trigger a successful run first (canary workflow run <id>), or pass --force." : result.code === "PROMOTION_REQUIRES_APPROVAL" ? `
|
|
3336
3335
|
Approve the test first: canary workflow approve ${workflowId} --yes
|
|
3337
3336
|
(Approval asserts a human verified the test checks the right thing \u2014 it cannot be forced.)` : "";
|
|
3338
3337
|
console.error(`Error: ${result.error}${hint}`);
|
|
@@ -3517,7 +3516,6 @@ function printWorkflowHelp() {
|
|
|
3517
3516
|
" approve <workflowId> [--yes] [--json] Mark the test as human-verified (spec is right)",
|
|
3518
3517
|
" promote <workflowId> [--force] [--json] Include the test in suite runs (requires approval)",
|
|
3519
3518
|
" pause <workflowId> [--json] Exclude a promoted test from suite runs",
|
|
3520
|
-
" publish <workflowId> [--force] [--json] (deprecated alias for promote)",
|
|
3521
3519
|
" archive <workflowId> [--yes] [--json] Soft-delete: hide from lists, skip in test suites (reversible)",
|
|
3522
3520
|
" unarchive <workflowId> [--json] Restore a previously archived workflow",
|
|
3523
3521
|
" run <workflowId> [options] Trigger a workflow execution",
|
|
@@ -3673,7 +3671,7 @@ async function runWorkflow(argv) {
|
|
|
3673
3671
|
return;
|
|
3674
3672
|
}
|
|
3675
3673
|
if (subCommand === "debug" && hasFlag(rest, "--help", "-h")) {
|
|
3676
|
-
const { handleWorkflowDebug } = await import("./workflow-debug-
|
|
3674
|
+
const { handleWorkflowDebug } = await import("./workflow-debug-WO7D32EI.js");
|
|
3677
3675
|
await handleWorkflowDebug(rest, "", "");
|
|
3678
3676
|
return;
|
|
3679
3677
|
}
|
|
@@ -3710,9 +3708,6 @@ async function runWorkflow(argv) {
|
|
|
3710
3708
|
case "pause":
|
|
3711
3709
|
await handlePause(rest, apiUrl, token);
|
|
3712
3710
|
break;
|
|
3713
|
-
case "publish":
|
|
3714
|
-
await handlePromote(rest, apiUrl, token, { deprecatedAlias: "publish" });
|
|
3715
|
-
break;
|
|
3716
3711
|
case "archive":
|
|
3717
3712
|
await handleArchive(rest, apiUrl, token);
|
|
3718
3713
|
break;
|
|
@@ -3751,7 +3746,7 @@ async function runWorkflow(argv) {
|
|
|
3751
3746
|
await handleWorkflowSync(rest, apiUrl, token);
|
|
3752
3747
|
break;
|
|
3753
3748
|
case "proposals": {
|
|
3754
|
-
const { handleWorkflowProposals } = await import("./workflow-proposals-
|
|
3749
|
+
const { handleWorkflowProposals } = await import("./workflow-proposals-PGURJ6ZI.js");
|
|
3755
3750
|
await handleWorkflowProposals(rest, apiUrl, token);
|
|
3756
3751
|
break;
|
|
3757
3752
|
}
|
|
@@ -3762,12 +3757,12 @@ async function runWorkflow(argv) {
|
|
|
3762
3757
|
await handleWorkflowApiSequence(rest, apiUrl, token);
|
|
3763
3758
|
break;
|
|
3764
3759
|
case "cache": {
|
|
3765
|
-
const { handleWorkflowCache } = await import("./workflow-cache-
|
|
3760
|
+
const { handleWorkflowCache } = await import("./workflow-cache-UDTTNIHT.js");
|
|
3766
3761
|
await handleWorkflowCache(rest, apiUrl, token);
|
|
3767
3762
|
break;
|
|
3768
3763
|
}
|
|
3769
3764
|
case "debug": {
|
|
3770
|
-
const { handleWorkflowDebug } = await import("./workflow-debug-
|
|
3765
|
+
const { handleWorkflowDebug } = await import("./workflow-debug-WO7D32EI.js");
|
|
3771
3766
|
await handleWorkflowDebug(rest, apiUrl, token);
|
|
3772
3767
|
break;
|
|
3773
3768
|
}
|
|
@@ -3780,4 +3775,4 @@ async function runWorkflow(argv) {
|
|
|
3780
3775
|
export {
|
|
3781
3776
|
runWorkflow
|
|
3782
3777
|
};
|
|
3783
|
-
//# sourceMappingURL=workflow-
|
|
3778
|
+
//# sourceMappingURL=workflow-76EKT3DS.js.map
|