@canaryai/cli 0.2.12 → 0.2.13
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/{chunk-PWWQGYFG.js → chunk-ACRIE2YR.js} +5 -2
- package/dist/chunk-ACRIE2YR.js.map +1 -0
- package/dist/{chunk-ERSNYLMZ.js → chunk-BOS2YLKH.js} +12 -8
- package/dist/chunk-BOS2YLKH.js.map +1 -0
- package/dist/{chunk-MSMC6UXW.js → chunk-IFOJT3A5.js} +1002 -253
- package/dist/chunk-IFOJT3A5.js.map +1 -0
- package/dist/{chunk-Q7WFBG5C.js → chunk-SVU2XTYZ.js} +19 -5
- package/dist/chunk-SVU2XTYZ.js.map +1 -0
- package/dist/{chunk-A44B2PEA.js → chunk-SYPQF57S.js} +40 -8
- package/dist/chunk-SYPQF57S.js.map +1 -0
- package/dist/{chunk-CEW4BDXD.js → chunk-Z3F373YR.js} +13 -6
- package/dist/chunk-Z3F373YR.js.map +1 -0
- package/dist/{debug-workflow-53ULOFJC.js → debug-workflow-K2LL6CO4.js} +10 -12
- package/dist/debug-workflow-K2LL6CO4.js.map +1 -0
- package/dist/{docs-BEE3LOCO.js → docs-SR7CW24Y.js} +19 -14
- package/dist/docs-SR7CW24Y.js.map +1 -0
- package/dist/{feature-flag-CYTDV4ZB.js → feature-flag-BIPFVVNC.js} +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +36 -30
- package/dist/index.js.map +1 -1
- package/dist/{init-M6I3MG3D.js → init-KXAVWHYE.js} +4 -4
- package/dist/{issues-NLM72HLU.js → issues-EWVB52CA.js} +37 -18
- package/dist/issues-EWVB52CA.js.map +1 -0
- package/dist/{knobs-O35GAU5M.js → knobs-VYABZESR.js} +3 -3
- package/dist/{list-4K4EIGAT.js → list-RCPYLS36.js} +3 -3
- package/dist/list-RCPYLS36.js.map +1 -0
- package/dist/{local-NHXXPHZ3.js → local-34FX3M5K.js} +6 -6
- package/dist/{local-browser-VAZORCO3.js → local-browser-VPOSJS52.js} +4 -4
- package/dist/{login-ZLP64YQP.js → login-MSIM2VIH.js} +4 -4
- package/dist/{mcp-ZF5G5DCB.js → mcp-YBR7G254.js} +7 -10
- package/dist/mcp-YBR7G254.js.map +1 -0
- package/dist/{psql-2YPIRMDY.js → psql-XO5BB5L5.js} +2 -2
- package/dist/{record-V6QKFFH3.js → record-DXXQHPGT.js} +7 -7
- package/dist/record-DXXQHPGT.js.map +1 -0
- package/dist/{redis-A7GWM23E.js → redis-CQTBPZ6F.js} +2 -2
- package/dist/{release-7TI7EIGD.js → release-DW7RPQSQ.js} +2 -2
- package/dist/runner/preload.js +1 -1
- package/dist/{session-UGNJXRUW.js → session-XQGCLWNC.js} +33 -12
- package/dist/{session-UGNJXRUW.js.map → session-XQGCLWNC.js.map} +1 -1
- package/dist/{skill-ORWAPBDW.js → skill-2TXI3IKP.js} +1 -1
- package/dist/skill-2TXI3IKP.js.map +1 -0
- package/dist/{src-4VIDSK4A.js → src-F7LQ5PY2.js} +8 -2
- package/dist/{start-E532F3BU.js → start-ZOMUD6LW.js} +4 -4
- package/dist/test.js +1 -1
- package/dist/test.js.map +1 -1
- package/dist/{workflow-HXIUXRFI.js → workflow-5UZTKX7X.js} +21 -10
- package/dist/workflow-5UZTKX7X.js.map +1 -0
- package/package.json +1 -2
- package/dist/chunk-A44B2PEA.js.map +0 -1
- package/dist/chunk-CEW4BDXD.js.map +0 -1
- package/dist/chunk-ERSNYLMZ.js.map +0 -1
- package/dist/chunk-MSMC6UXW.js.map +0 -1
- package/dist/chunk-PWWQGYFG.js.map +0 -1
- package/dist/chunk-Q7WFBG5C.js.map +0 -1
- package/dist/debug-workflow-53ULOFJC.js.map +0 -1
- package/dist/docs-BEE3LOCO.js.map +0 -1
- package/dist/issues-NLM72HLU.js.map +0 -1
- package/dist/list-4K4EIGAT.js.map +0 -1
- package/dist/mcp-ZF5G5DCB.js.map +0 -1
- package/dist/record-V6QKFFH3.js.map +0 -1
- package/dist/skill-ORWAPBDW.js.map +0 -1
- package/dist/workflow-HXIUXRFI.js.map +0 -1
- /package/dist/{feature-flag-CYTDV4ZB.js.map → feature-flag-BIPFVVNC.js.map} +0 -0
- /package/dist/{init-M6I3MG3D.js.map → init-KXAVWHYE.js.map} +0 -0
- /package/dist/{knobs-O35GAU5M.js.map → knobs-VYABZESR.js.map} +0 -0
- /package/dist/{local-NHXXPHZ3.js.map → local-34FX3M5K.js.map} +0 -0
- /package/dist/{local-browser-VAZORCO3.js.map → local-browser-VPOSJS52.js.map} +0 -0
- /package/dist/{login-ZLP64YQP.js.map → login-MSIM2VIH.js.map} +0 -0
- /package/dist/{psql-2YPIRMDY.js.map → psql-XO5BB5L5.js.map} +0 -0
- /package/dist/{redis-A7GWM23E.js.map → redis-CQTBPZ6F.js.map} +0 -0
- /package/dist/{release-7TI7EIGD.js.map → release-DW7RPQSQ.js.map} +0 -0
- /package/dist/{src-4VIDSK4A.js.map → src-F7LQ5PY2.js.map} +0 -0
- /package/dist/{start-E532F3BU.js.map → start-ZOMUD6LW.js.map} +0 -0
|
@@ -2,12 +2,12 @@ import { createRequire as __cr } from "module"; const require = __cr(import.meta
|
|
|
2
2
|
import {
|
|
3
3
|
apiRequest,
|
|
4
4
|
fetchList
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BOS2YLKH.js";
|
|
6
6
|
import {
|
|
7
7
|
getArgValue,
|
|
8
8
|
hasFlag,
|
|
9
9
|
resolveConfig
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-ACRIE2YR.js";
|
|
11
11
|
import {
|
|
12
12
|
getSubDir
|
|
13
13
|
} from "./chunk-XAA5VQ5N.js";
|
|
@@ -122,10 +122,9 @@ async function handleHistory(argv, apiUrl, token) {
|
|
|
122
122
|
process.exit(1);
|
|
123
123
|
}
|
|
124
124
|
const jsonOutput = hasFlag(argv, "--json");
|
|
125
|
-
const res = await fetch(
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
);
|
|
125
|
+
const res = await fetch(`${apiUrl}/public/docs/pages/versions?slug=${encodeURIComponent(slug)}`, {
|
|
126
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
127
|
+
});
|
|
129
128
|
if (!res.ok) {
|
|
130
129
|
const body2 = await res.json().catch(() => ({ error: res.statusText }));
|
|
131
130
|
console.error(`Error: ${body2.error ?? res.statusText}`);
|
|
@@ -173,13 +172,19 @@ async function handleCreate(argv, apiUrl, token) {
|
|
|
173
172
|
console.error(`Error: Could not read file: ${filePath}`);
|
|
174
173
|
process.exit(1);
|
|
175
174
|
}
|
|
176
|
-
const result = await apiRequest(
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
175
|
+
const result = await apiRequest(
|
|
176
|
+
apiUrl,
|
|
177
|
+
token,
|
|
178
|
+
"POST",
|
|
179
|
+
"/superadmin/docs/pages",
|
|
180
|
+
{
|
|
181
|
+
slug,
|
|
182
|
+
title,
|
|
183
|
+
description,
|
|
184
|
+
content,
|
|
185
|
+
message
|
|
186
|
+
}
|
|
187
|
+
);
|
|
183
188
|
if (!result.ok) {
|
|
184
189
|
console.error(`Error: ${result.error}`);
|
|
185
190
|
process.exit(1);
|
|
@@ -270,4 +275,4 @@ async function runDocs(argv) {
|
|
|
270
275
|
export {
|
|
271
276
|
runDocs
|
|
272
277
|
};
|
|
273
|
-
//# sourceMappingURL=docs-
|
|
278
|
+
//# sourceMappingURL=docs-SR7CW24Y.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/docs.ts"],"sourcesContent":["/**\n * CLI Documentation Management\n *\n * Allows agents and superadmins to list, pull, edit, and push documentation pages.\n */\n\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport path from 'node:path';\nimport { getSubDir } from '@chatsdet/tmp';\nimport process from 'node:process';\nimport { resolveConfig, getArgValue, hasFlag } from './auth.js';\nimport { apiRequest, fetchList } from './cli-helpers.js';\n\ntype DocsPageListItem = {\n slug: string;\n title: string;\n description: string | null;\n updatedAt: string;\n publishedBy: string | null;\n};\n\ntype DocsVersionItem = {\n version: number;\n title: string;\n checksum: string;\n message: string | null;\n createdBy: string;\n createdAt: string;\n};\n\ntype DocsApiResponse = {\n ok: boolean;\n error?: string;\n data?: {\n slug?: string;\n title?: string;\n pages?: DocsPageListItem[];\n content?: string;\n versions?: DocsVersionItem[];\n };\n};\n\nconst DEFAULT_PULL_DIR = getSubDir('docs');\n\nasync function handleList(argv: string[], apiUrl: string, token: string): Promise<void> {\n const jsonOutput = hasFlag(argv, '--json');\n const pages = await fetchList<DocsPageListItem>(apiUrl, token, '/public/docs/pages', 'pages');\n\n if (jsonOutput) {\n console.log(JSON.stringify(pages, null, 2));\n return;\n }\n\n if (pages.length === 0) {\n console.log('No documentation pages found.');\n return;\n }\n\n for (const page of pages) {\n const date = new Date(page.updatedAt).toISOString().slice(0, 10);\n const by = page.publishedBy ? ` (${page.publishedBy})` : '';\n console.log(` ${page.slug} ${page.title} [${date}${by}]`);\n }\n}\n\nasync function handleGet(argv: string[], apiUrl: string, token: string): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs get <slug>');\n process.exit(1);\n }\n\n const res = await fetch(`${apiUrl}/public/docs/pages/raw?slug=${encodeURIComponent(slug)}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (res.status === 404) {\n console.error(`Error: Page not found: ${slug}`);\n process.exit(1);\n }\n\n if (!res.ok) {\n console.error(`Error: ${res.statusText}`);\n process.exit(1);\n }\n\n const content = await res.text();\n console.log(content);\n}\n\nasync function handlePull(argv: string[], apiUrl: string, token: string): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs pull <slug> [--output <path>]');\n process.exit(1);\n }\n\n const outputPath = getArgValue(argv, '--output') ?? path.join(DEFAULT_PULL_DIR, `${slug}.md`);\n\n const res = await fetch(`${apiUrl}/public/docs/pages/raw?slug=${encodeURIComponent(slug)}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (res.status === 404) {\n console.error(`Error: Page not found: ${slug}`);\n process.exit(1);\n }\n\n if (!res.ok) {\n console.error(`Error: ${res.statusText}`);\n process.exit(1);\n }\n\n const content = await res.text();\n await mkdir(path.dirname(outputPath), { recursive: true });\n await writeFile(outputPath, content, 'utf8');\n console.log(`Pulled ${slug} → ${outputPath}`);\n}\n\nasync function handlePush(argv: string[], apiUrl: string, token: string): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs push <slug> --file <path> [--message <text>]');\n process.exit(1);\n }\n\n const filePath = getArgValue(argv, '--file');\n if (!filePath) {\n console.error('Error: Missing --file <path>.');\n process.exit(1);\n }\n\n const message = getArgValue(argv, '--message') ?? undefined;\n const createdBy = getArgValue(argv, '--created-by') ?? undefined;\n\n let content: string;\n try {\n content = await readFile(filePath, 'utf8');\n } catch {\n console.error(`Error: Could not read file: ${filePath}`);\n process.exit(1);\n }\n\n const result = await apiRequest<DocsApiResponse>(\n apiUrl,\n token,\n 'PUT',\n `/superadmin/docs/pages?slug=${encodeURIComponent(slug)}`,\n { content, message, createdBy }\n );\n\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n\n console.log(`Published new version of ${slug}`);\n}\n\nasync function handleHistory(argv: string[], apiUrl: string, token: string): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs history <slug>');\n process.exit(1);\n }\n\n const jsonOutput = hasFlag(argv, '--json');\n\n const res = await fetch(`${apiUrl}/public/docs/pages/versions?slug=${encodeURIComponent(slug)}`, {\n headers: { Authorization: `Bearer ${token}` },\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }));\n console.error(`Error: ${(body as { error?: string }).error ?? res.statusText}`);\n process.exit(1);\n }\n\n const body = (await res.json()) as DocsApiResponse;\n const versions = body.data?.versions ?? [];\n\n if (jsonOutput) {\n console.log(JSON.stringify(versions, null, 2));\n return;\n }\n\n if (versions.length === 0) {\n console.log(`No versions found for ${slug}.`);\n return;\n }\n\n for (const v of versions) {\n const date = new Date(v.createdAt).toISOString().slice(0, 19).replace('T', ' ');\n const msg = v.message ? ` — ${v.message}` : '';\n console.log(` v${v.version} ${date} ${v.createdBy}${msg}`);\n }\n}\n\nasync function handleCreate(argv: string[], apiUrl: string, token: string): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs create <slug> --file <path> --title <text>');\n process.exit(1);\n }\n\n const filePath = getArgValue(argv, '--file');\n const title = getArgValue(argv, '--title');\n\n if (!filePath) {\n console.error('Error: Missing --file <path>.');\n process.exit(1);\n }\n if (!title) {\n console.error('Error: Missing --title <text>.');\n process.exit(1);\n }\n\n const description = getArgValue(argv, '--description') ?? undefined;\n const message = getArgValue(argv, '--message') ?? undefined;\n\n let content: string;\n try {\n content = await readFile(filePath, 'utf8');\n } catch {\n console.error(`Error: Could not read file: ${filePath}`);\n process.exit(1);\n }\n\n const result = await apiRequest<DocsApiResponse>(\n apiUrl,\n token,\n 'POST',\n '/superadmin/docs/pages',\n {\n slug,\n title,\n description,\n content,\n message,\n }\n );\n\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n\n console.log(`Created page: ${slug}`);\n}\n\nasync function handleDelete(argv: string[], apiUrl: string, token: string): Promise<void> {\n const slug = argv[0];\n if (!slug || slug.startsWith('--')) {\n console.error('Error: Missing slug.');\n console.error('Usage: canary docs delete <slug>');\n process.exit(1);\n }\n\n const result = await apiRequest<DocsApiResponse>(\n apiUrl,\n token,\n 'DELETE',\n `/superadmin/docs/pages?slug=${encodeURIComponent(slug)}`\n );\n\n if (!result.ok) {\n console.error(`Error: ${result.error}`);\n process.exit(1);\n }\n\n console.log(`Deleted page: ${slug}`);\n}\n\nfunction printDocsHelp(): void {\n console.log(\n [\n 'Usage: canary docs <sub-command> [options]',\n '',\n 'Sub-commands:',\n ' list List all doc pages',\n ' get <slug> Print content to stdout',\n ' pull <slug> [--output <path>] Download to local file',\n ' push <slug> --file <path> [--message] Publish new version',\n ' history <slug> Show version history',\n ' create <slug> --file <path> --title ... Create new page',\n ' delete <slug> Soft-delete a page',\n '',\n 'Options:',\n ' --file <path> Path to markdown file',\n ' --title <text> Page title (create only)',\n ' --description <text> Page description (create only)',\n ' --message <text> Version commit message',\n ' --output <path> Output path for pull (default: /tmp/canary/docs/<slug>.md)',\n ' --json Output as JSON (list, history)',\n ' --env <env> Target environment (prod, dev)',\n ' --api-url <url> API URL override',\n ' --token <key> API token override',\n ].join('\\n')\n );\n}\n\nexport async function runDocs(argv: string[]): Promise<void> {\n const [subCommand, ...rest] = argv;\n\n if (!subCommand || subCommand === 'help' || hasFlag(argv, '--help', '-h')) {\n printDocsHelp();\n return;\n }\n\n const { apiUrl, token } = await resolveConfig(argv);\n\n switch (subCommand) {\n case 'list':\n await handleList(rest, apiUrl, token);\n break;\n case 'get':\n await handleGet(rest, apiUrl, token);\n break;\n case 'pull':\n await handlePull(rest, apiUrl, token);\n break;\n case 'push':\n await handlePush(rest, apiUrl, token);\n break;\n case 'history':\n await handleHistory(rest, apiUrl, token);\n break;\n case 'create':\n await handleCreate(rest, apiUrl, token);\n break;\n case 'delete':\n await handleDelete(rest, apiUrl, token);\n break;\n default:\n console.error(`Unknown sub-command: ${subCommand}`);\n printDocsHelp();\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["body"]}
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
fetchList,
|
|
5
5
|
parseLifecycleStage,
|
|
6
6
|
toLifecycleLabel
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-BOS2YLKH.js";
|
|
8
8
|
import {
|
|
9
9
|
getArgValue,
|
|
10
10
|
hasFlag,
|
|
11
11
|
resolveConfig
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ACRIE2YR.js";
|
|
13
13
|
import "./chunk-XAA5VQ5N.js";
|
|
14
14
|
import "./chunk-VKVL7WBN.js";
|
|
15
15
|
|
|
@@ -277,4 +277,4 @@ async function runFeatureFlag(argv) {
|
|
|
277
277
|
export {
|
|
278
278
|
runFeatureFlag
|
|
279
279
|
};
|
|
280
|
-
//# sourceMappingURL=feature-flag-
|
|
280
|
+
//# sourceMappingURL=feature-flag-BIPFVVNC.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -20,10 +20,10 @@ type RunRequest = {
|
|
|
20
20
|
cliArgs?: string[];
|
|
21
21
|
env?: Record<string, string>;
|
|
22
22
|
healing?: HealingOptions;
|
|
23
|
-
reporter?:
|
|
23
|
+
reporter?: 'default' | 'json' | string;
|
|
24
24
|
timeoutMs?: number;
|
|
25
25
|
nodeBin?: string;
|
|
26
|
-
stdio?:
|
|
26
|
+
stdio?: 'inherit' | 'pipe';
|
|
27
27
|
};
|
|
28
28
|
type RunResult = {
|
|
29
29
|
ok: boolean;
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
readStoredToken,
|
|
10
10
|
resolveConfig,
|
|
11
11
|
saveAuth
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ACRIE2YR.js";
|
|
13
13
|
import {
|
|
14
14
|
makeTempDirSync
|
|
15
15
|
} from "./chunk-XAA5VQ5N.js";
|
|
@@ -178,11 +178,10 @@ function buildReporterArgs(requested, jsonReportPath) {
|
|
|
178
178
|
if (requested && requested !== "default") return requested;
|
|
179
179
|
return `list,json=${jsonReportPath}`;
|
|
180
180
|
}
|
|
181
|
-
function prepareArtifactsDir(
|
|
181
|
+
function prepareArtifactsDir(_cwd) {
|
|
182
182
|
const dir = makeTempDirSync("canary-run-");
|
|
183
183
|
const jsonReportPath = path2.join(dir, "report.json");
|
|
184
184
|
const eventLogPath = path2.join(dir, "events-worker-0.jsonl");
|
|
185
|
-
const artifactsDir = path2.join(cwd, "test-results", "ai-healer");
|
|
186
185
|
return { jsonReportPath, eventLogPath, artifactsDir: dir };
|
|
187
186
|
}
|
|
188
187
|
function buildEnv(params) {
|
|
@@ -237,7 +236,12 @@ async function spawnPlaywright(opts) {
|
|
|
237
236
|
}
|
|
238
237
|
child.on("close", (code) => {
|
|
239
238
|
if (timer) clearTimeout(timer);
|
|
240
|
-
resolve({
|
|
239
|
+
resolve({
|
|
240
|
+
exitCode: code ?? 1,
|
|
241
|
+
output: output || void 0,
|
|
242
|
+
durationMs: Date.now() - started,
|
|
243
|
+
error
|
|
244
|
+
});
|
|
241
245
|
});
|
|
242
246
|
});
|
|
243
247
|
}
|
|
@@ -510,7 +514,7 @@ Choice [1-${orgs.length}]: `);
|
|
|
510
514
|
|
|
511
515
|
// src/orgs.ts
|
|
512
516
|
import process3 from "process";
|
|
513
|
-
async function runOrgs(
|
|
517
|
+
async function runOrgs(_argv) {
|
|
514
518
|
const token = process3.env.CANARY_API_TOKEN ?? await readStoredToken();
|
|
515
519
|
if (!token) {
|
|
516
520
|
console.error("Not logged in. Run: canary login");
|
|
@@ -924,12 +928,12 @@ function isSuperadminToken(token) {
|
|
|
924
928
|
// src/index.ts
|
|
925
929
|
var require2 = createRequire2(import.meta.url);
|
|
926
930
|
var pkg = require2("../package.json");
|
|
927
|
-
var loadMcp = () => import("./mcp-
|
|
928
|
-
var loadLocalBrowser = () => import("./local-browser-
|
|
929
|
-
var loadDebugWorkflow = () => import("./debug-workflow-
|
|
930
|
-
var loadRecord = () => import("./record-
|
|
931
|
-
var loadSession = () => import("./session-
|
|
932
|
-
var loadLocal = () => import("./local-
|
|
931
|
+
var loadMcp = () => import("./mcp-YBR7G254.js").then((m) => m.runMcp);
|
|
932
|
+
var loadLocalBrowser = () => import("./local-browser-VPOSJS52.js").then((m) => m.runLocalBrowser);
|
|
933
|
+
var loadDebugWorkflow = () => import("./debug-workflow-K2LL6CO4.js").then((m) => m.runDebugWorkflow);
|
|
934
|
+
var loadRecord = () => import("./record-DXXQHPGT.js").then((m) => m.runRecord);
|
|
935
|
+
var loadSession = () => import("./session-XQGCLWNC.js").then((m) => m.runSession);
|
|
936
|
+
var loadLocal = () => import("./local-34FX3M5K.js").then((m) => m.runLocal);
|
|
933
937
|
var canary = { run };
|
|
934
938
|
var baseDir = typeof __dirname !== "undefined" ? __dirname : path4.dirname(fileURLToPath2(import.meta.url));
|
|
935
939
|
var preloadPath = path4.join(baseDir, "runner", "preload.js");
|
|
@@ -977,9 +981,7 @@ function printHelp({ isSuperadmin }) {
|
|
|
977
981
|
" canary workflow <sub-command> Inspect workflow definitions",
|
|
978
982
|
" canary skill <name> Install an AI agent skill template"
|
|
979
983
|
];
|
|
980
|
-
lines.push(
|
|
981
|
-
" canary release <sub-command> Release QA gate (CI/CD)"
|
|
982
|
-
);
|
|
984
|
+
lines.push(" canary release <sub-command> Release QA gate (CI/CD)");
|
|
983
985
|
if (isSuperadmin) {
|
|
984
986
|
lines.push(
|
|
985
987
|
" canary debug-session [--env dev|local] [--json] Create browser debug session",
|
|
@@ -1083,12 +1085,7 @@ function printHelp({ isSuperadmin }) {
|
|
|
1083
1085
|
" Set lifecycle metadata"
|
|
1084
1086
|
);
|
|
1085
1087
|
}
|
|
1086
|
-
lines.push(
|
|
1087
|
-
"",
|
|
1088
|
-
"Flags:",
|
|
1089
|
-
" -h, --help Show help",
|
|
1090
|
-
" -V, --version Show version"
|
|
1091
|
-
);
|
|
1088
|
+
lines.push("", "Flags:", " -h, --help Show help", " -V, --version Show version");
|
|
1092
1089
|
console.log(lines.join("\n"));
|
|
1093
1090
|
}
|
|
1094
1091
|
function printTestHelp() {
|
|
@@ -1128,7 +1125,16 @@ function printTestHelp() {
|
|
|
1128
1125
|
].join("\n")
|
|
1129
1126
|
);
|
|
1130
1127
|
}
|
|
1131
|
-
var COMMANDS_WITH_HELP = /* @__PURE__ */ new Set([
|
|
1128
|
+
var COMMANDS_WITH_HELP = /* @__PURE__ */ new Set([
|
|
1129
|
+
"test",
|
|
1130
|
+
"session",
|
|
1131
|
+
"local",
|
|
1132
|
+
"issues",
|
|
1133
|
+
"workflow",
|
|
1134
|
+
"release",
|
|
1135
|
+
"skill",
|
|
1136
|
+
"skills"
|
|
1137
|
+
]);
|
|
1132
1138
|
async function resolveIsSuperadmin() {
|
|
1133
1139
|
const envToken = process6.env.CANARY_API_TOKEN;
|
|
1134
1140
|
if (envToken) return isSuperadminToken(envToken);
|
|
@@ -1210,47 +1216,47 @@ async function main(argv) {
|
|
|
1210
1216
|
return;
|
|
1211
1217
|
}
|
|
1212
1218
|
if (command === "psql") {
|
|
1213
|
-
const { runPsql } = await import("./psql-
|
|
1219
|
+
const { runPsql } = await import("./psql-XO5BB5L5.js");
|
|
1214
1220
|
await runPsql(rest);
|
|
1215
1221
|
return;
|
|
1216
1222
|
}
|
|
1217
1223
|
if (command === "redis") {
|
|
1218
|
-
const { runRedis } = await import("./redis-
|
|
1224
|
+
const { runRedis } = await import("./redis-CQTBPZ6F.js");
|
|
1219
1225
|
await runRedis(rest);
|
|
1220
1226
|
return;
|
|
1221
1227
|
}
|
|
1222
1228
|
if (command === "release") {
|
|
1223
|
-
const { runRelease } = await import("./release-
|
|
1229
|
+
const { runRelease } = await import("./release-DW7RPQSQ.js");
|
|
1224
1230
|
await runRelease(rest);
|
|
1225
1231
|
return;
|
|
1226
1232
|
}
|
|
1227
1233
|
if (command === "docs") {
|
|
1228
|
-
const { runDocs } = await import("./docs-
|
|
1234
|
+
const { runDocs } = await import("./docs-SR7CW24Y.js");
|
|
1229
1235
|
await runDocs(rest);
|
|
1230
1236
|
return;
|
|
1231
1237
|
}
|
|
1232
1238
|
if (command === "feature-flag") {
|
|
1233
|
-
const { runFeatureFlag } = await import("./feature-flag-
|
|
1239
|
+
const { runFeatureFlag } = await import("./feature-flag-BIPFVVNC.js");
|
|
1234
1240
|
await runFeatureFlag(rest);
|
|
1235
1241
|
return;
|
|
1236
1242
|
}
|
|
1237
1243
|
if (command === "knobs") {
|
|
1238
|
-
const { runKnobs } = await import("./knobs-
|
|
1244
|
+
const { runKnobs } = await import("./knobs-VYABZESR.js");
|
|
1239
1245
|
await runKnobs(rest);
|
|
1240
1246
|
return;
|
|
1241
1247
|
}
|
|
1242
1248
|
if (command === "issues") {
|
|
1243
|
-
const { runIssues } = await import("./issues-
|
|
1249
|
+
const { runIssues } = await import("./issues-EWVB52CA.js");
|
|
1244
1250
|
await runIssues(rest);
|
|
1245
1251
|
return;
|
|
1246
1252
|
}
|
|
1247
1253
|
if (command === "workflow") {
|
|
1248
|
-
const { runWorkflow } = await import("./workflow-
|
|
1254
|
+
const { runWorkflow } = await import("./workflow-5UZTKX7X.js");
|
|
1249
1255
|
await runWorkflow(rest);
|
|
1250
1256
|
return;
|
|
1251
1257
|
}
|
|
1252
1258
|
if (command === "skill" || command === "skills") {
|
|
1253
|
-
const { runSkill } = await import("./skill-
|
|
1259
|
+
const { runSkill } = await import("./skill-2TXI3IKP.js");
|
|
1254
1260
|
await runSkill(rest);
|
|
1255
1261
|
return;
|
|
1256
1262
|
}
|