@canaryai/cli 0.2.12 → 0.2.14
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-CEW4BDXD.js → chunk-4A4G5KTC.js} +14 -6
- package/dist/chunk-4A4G5KTC.js.map +1 -0
- package/dist/{chunk-MSMC6UXW.js → chunk-6IAPGYZQ.js} +1016 -245
- package/dist/chunk-6IAPGYZQ.js.map +1 -0
- 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-A44B2PEA.js → chunk-SYPQF57S.js} +40 -8
- package/dist/chunk-SYPQF57S.js.map +1 -0
- package/dist/{chunk-Q7WFBG5C.js → chunk-ZQF72UTG.js} +19 -5
- package/dist/chunk-ZQF72UTG.js.map +1 -0
- package/dist/{debug-workflow-53ULOFJC.js → debug-workflow-DIQZDFMN.js} +10 -12
- package/dist/debug-workflow-DIQZDFMN.js.map +1 -0
- package/dist/{docs-BEE3LOCO.js → docs-CSVSGIGW.js} +63 -15
- package/dist/docs-CSVSGIGW.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-BTDX5N6P.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-ZPVM4BXX.js} +6 -6
- package/dist/{local-browser-VAZORCO3.js → local-browser-WV4IH2DU.js} +4 -4
- package/dist/{login-ZLP64YQP.js → login-W4GXV3VA.js} +4 -4
- package/dist/{mcp-ZF5G5DCB.js → mcp-YER5GQG7.js} +7 -10
- package/dist/mcp-YER5GQG7.js.map +1 -0
- package/dist/{psql-2YPIRMDY.js → psql-XO5BB5L5.js} +2 -2
- package/dist/{record-V6QKFFH3.js → record-KRS2PHMW.js} +7 -7
- package/dist/record-KRS2PHMW.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-CLWAVJ2K.js} +33 -12
- package/dist/{session-UGNJXRUW.js.map → session-CLWAVJ2K.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-WLOHOI6P.js} +8 -2
- package/dist/{start-E532F3BU.js → start-CNNQUP5I.js} +4 -4
- package/dist/test.js +1 -1
- package/dist/test.js.map +1 -1
- package/dist/{workflow-HXIUXRFI.js → workflow-XXL4H5R4.js} +23 -11
- package/dist/workflow-XXL4H5R4.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-BTDX5N6P.js.map} +0 -0
- /package/dist/{knobs-O35GAU5M.js.map → knobs-VYABZESR.js.map} +0 -0
- /package/dist/{local-NHXXPHZ3.js.map → local-ZPVM4BXX.js.map} +0 -0
- /package/dist/{local-browser-VAZORCO3.js.map → local-browser-WV4IH2DU.js.map} +0 -0
- /package/dist/{login-ZLP64YQP.js.map → login-W4GXV3VA.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-WLOHOI6P.js.map} +0 -0
- /package/dist/{start-E532F3BU.js.map → start-CNNQUP5I.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/debug-workflow.ts"],"sourcesContent":["/**\n * Debug Workflow Command\n *\n * Runs a workflow in a local headed browser for debugging. Replays cached\n * actions where possible and falls back to the agent for uncached steps.\n * The browser stays open after execution so the user can inspect page state.\n *\n * Usage:\n * canary debug <workflowId> [--to-step N] [--api-url URL] [--env local|dev|prod]\n *\n * @module debug-workflow\n */\n\nimport fs from 'node:fs/promises';\nimport process from 'node:process';\nimport { createParser, type EventSourceMessage } from 'eventsource-parser';\nimport { resolveConfig, getArgValue, hasFlag } from './auth';\nimport { downloadStorageState } from './cli-helpers.js';\nimport { LocalBrowserHost } from './local-browser/host';\n\ninterface CreateSessionResponse {\n ok: boolean;\n sessionId: string;\n wsToken: string;\n wsUrl: string;\n expiresAt: string;\n error?: string;\n}\n\ninterface DebugSessionResponse {\n ok: boolean;\n sessionId?: string;\n workflowName?: string;\n nodes?: Array<{\n index: number;\n id: string;\n name: string;\n type: string;\n }>;\n isAuthenticated?: boolean;\n credential?: { credentialId: string; propertyId: string } | null;\n error?: string;\n}\n\ninterface StepStartedEvent {\n type: 'step-started';\n stepIndex: number;\n totalSteps: number;\n stepName: string;\n nodeType: string;\n nodeId: string;\n}\n\ninterface NodeCompletedEvent {\n type: 'completed';\n stepIndex?: number;\n result: { success: boolean; errorMessage?: string; source?: string };\n}\n\ninterface RunCompleteEvent {\n type: 'run-complete';\n stepsExecuted: number;\n totalSteps: number;\n stoppedEarly: boolean;\n reason?: string;\n}\n\ntype DebugEvent =\n | StepStartedEvent\n | NodeCompletedEvent\n | RunCompleteEvent\n | { type: string; [key: string]: unknown };\n\nexport async function runDebugWorkflow(argv: string[]): Promise<void> {\n const workflowId = argv.find((arg) => !arg.startsWith('-'));\n\n if (!workflowId) {\n console.error('Usage: canary debug <workflowId> [--to-step N] [--env local|dev|prod]');\n process.exit(1);\n }\n\n const toStepStr = getArgValue(argv, '--to-step');\n const toStep = toStepStr ? parseInt(toStepStr, 10) : undefined;\n const verbose = hasFlag(argv, '--verbose', '-v');\n\n if (toStep !== undefined && (isNaN(toStep) || toStep < 1)) {\n console.error('Error: --to-step must be a positive integer');\n process.exit(1);\n }\n\n const { apiUrl, token } = await resolveConfig(argv);\n\n // 1. Create local browser session\n console.log('Creating local browser session...');\n\n let localSession: CreateSessionResponse;\n try {\n const res = await fetch(`${apiUrl}/local-browser/sessions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({ browserMode: 'playwright' }),\n });\n\n if (!res.ok) {\n const text = await res.text();\n console.error(`Failed to create local browser session: ${res.status} ${text}`);\n process.exit(1);\n }\n\n localSession = (await res.json()) as CreateSessionResponse;\n if (!localSession.ok) {\n console.error(`Failed to create session: ${localSession.error}`);\n process.exit(1);\n }\n } catch (err) {\n console.error(`Failed to connect to API: ${err}`);\n process.exit(1);\n }\n\n // 2. Create debug session (before browser launch so we can download storage state)\n console.log('Loading workflow...');\n\n let debugSession: DebugSessionResponse;\n try {\n const res = await fetch(`${apiUrl}/cli/debug/sessions`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n workflowId,\n localBrowserSessionId: localSession.sessionId,\n }),\n });\n\n if (!res.ok) {\n const text = await res.text();\n console.error(`Failed to create debug session: ${res.status} ${text}`);\n process.exit(1);\n }\n\n debugSession = (await res.json()) as DebugSessionResponse;\n if (!debugSession.ok || !debugSession.sessionId) {\n console.error(`Failed to create debug session: ${debugSession.error}`);\n process.exit(1);\n }\n } catch (err) {\n console.error(`Failed to create debug session: ${err}`);\n process.exit(1);\n }\n\n const debugSessionId: string | null = debugSession.sessionId;\n\n // 3. Download storage state if the workflow has valid credentials\n let storageStatePath: string | undefined;\n if (debugSession.isAuthenticated && debugSession.credential) {\n console.log('Downloading storage state...');\n storageStatePath = await downloadStorageState({\n apiUrl,\n token,\n propertyId: debugSession.credential.propertyId,\n credentialId: debugSession.credential.credentialId,\n prefix: 'canary-debug-ss',\n });\n if (storageStatePath) {\n console.log('Storage state loaded.');\n } else {\n console.warn('Could not download storage state, continuing without it.');\n }\n }\n\n // 4. Launch headed browser with storage state\n console.log('Launching headed browser...');\n\n const host = new LocalBrowserHost({\n apiUrl,\n wsToken: localSession.wsToken,\n sessionId: localSession.sessionId,\n browserMode: 'playwright',\n headless: false,\n storageStatePath,\n onLog: (level, message, data) => {\n if (verbose) {\n const prefix = `[${level.toUpperCase()}]`;\n if (data) {\n console.log(prefix, message, data);\n } else {\n console.log(prefix, message);\n }\n }\n },\n });\n\n // Set up cleanup\n const cleanup = async () => {\n console.log('\\nShutting down...');\n\n if (debugSessionId) {\n try {\n await fetch(`${apiUrl}/cli/debug/sessions/${debugSessionId}`, {\n method: 'DELETE',\n headers: { Authorization: `Bearer ${token}` },\n });\n } catch {\n // Ignore cleanup errors\n }\n }\n\n if (storageStatePath) {\n await fs.unlink(storageStatePath).catch(() => {});\n }\n\n await host.stop();\n process.exit(0);\n };\n\n process.on('SIGINT', () => void cleanup());\n process.on('SIGTERM', () => void cleanup());\n\n try {\n await host.start();\n } catch (err) {\n console.error(`Failed to start local browser: ${err}`);\n await host.stop();\n process.exit(1);\n }\n\n console.log('Browser connected.');\n console.log();\n\n const nodes = debugSession.nodes ?? [];\n const totalSteps = nodes.length;\n const effectiveToStep = toStep ? Math.min(toStep, totalSteps) : totalSteps;\n\n console.log(`Debugging: \"${debugSession.workflowName}\" (${totalSteps} steps)`);\n if (toStep) {\n console.log(`Running steps 1-${effectiveToStep} of ${totalSteps}`);\n }\n console.log();\n\n // 5. Run steps via SSE\n let runRes: Response;\n try {\n runRes = await fetch(`${apiUrl}/cli/debug/sessions/${debugSessionId}/run`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n Accept: 'text/event-stream',\n },\n body: JSON.stringify({ toStep: effectiveToStep }),\n });\n } catch (err) {\n console.error(`Failed to start execution: ${err}`);\n await cleanup();\n return;\n }\n\n if (!runRes.ok || !runRes.body) {\n console.error(`Failed to start execution: ${runRes.status}`);\n await cleanup();\n return;\n }\n\n // Track execution state\n let currentStep = 0;\n let _hasError = false;\n const stepResults = new Map<number, { name: string; success: boolean; source?: string }>();\n\n const parser = createParser({\n onEvent: (event: EventSourceMessage) => {\n if (!event.data) return;\n\n try {\n const data = JSON.parse(event.data) as DebugEvent;\n\n if (verbose) {\n console.log(`[SSE] ${JSON.stringify(data)}`);\n }\n\n if (data.type === 'step-started') {\n const e = data as StepStartedEvent;\n currentStep = e.stepIndex;\n process.stdout.write(`[${e.stepIndex}/${e.totalSteps}] ${e.stepName} `);\n }\n\n if (data.type === 'completed') {\n const e = data as NodeCompletedEvent;\n const stepIndex = e.stepIndex ?? currentStep;\n const success = e.result.success;\n const source = e.result.source;\n\n if (success) {\n const sourceLabel =\n source === 'cache' ? '(cache)' : source === 'agent' ? '(agent)' : '';\n console.log(`\\u2713 ${sourceLabel}`);\n } else {\n console.log('\\u2717');\n if (e.result.errorMessage) {\n console.log(` Error: ${e.result.errorMessage.slice(0, 200)}`);\n }\n _hasError = true;\n }\n\n stepResults.set(stepIndex, {\n name: `Step ${stepIndex}`,\n success,\n source,\n });\n }\n\n if (data.type === 'run-complete') {\n const e = data as RunCompleteEvent;\n console.log();\n if (e.stoppedEarly) {\n console.log(\n `Stopped at step ${e.stepsExecuted} of ${e.totalSteps}. ${e.reason === 'step-failed' ? 'Step failed.' : 'Error occurred.'}`\n );\n } else {\n console.log(`All ${e.stepsExecuted} step(s) completed.`);\n }\n }\n\n if (data.type === 'run-error') {\n const errorData = data as { error?: string };\n console.log(`\\u2717`);\n if (errorData.error) {\n console.log(` Error: ${String(errorData.error).slice(0, 200)}`);\n }\n _hasError = true;\n }\n } catch {\n // Ignore parse errors\n }\n },\n });\n\n const reader = runRes.body.getReader();\n const decoder = new TextDecoder();\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n parser.feed(decoder.decode(value, { stream: true }));\n }\n } finally {\n reader.releaseLock();\n }\n\n // 6. Keep browser open for inspection\n console.log();\n console.log('Browser is open for inspection.');\n console.log('Press Ctrl+C to close.');\n\n // Keep the process running until Ctrl+C\n await new Promise(() => {});\n}\n"],"mappings":"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","names":[]}
|
|
@@ -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,19 +172,63 @@ 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);
|
|
186
191
|
}
|
|
187
192
|
console.log(`Created page: ${slug}`);
|
|
188
193
|
}
|
|
194
|
+
async function handleSearch(argv, apiUrl, token) {
|
|
195
|
+
const query = argv.filter((a) => !a.startsWith("--")).join(" ").trim();
|
|
196
|
+
if (!query) {
|
|
197
|
+
console.error("Error: Missing search query.");
|
|
198
|
+
console.error("Usage: canary docs search <query> [--limit <n>] [--json]");
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
const jsonOutput = hasFlag(argv, "--json");
|
|
202
|
+
const limitArg = getArgValue(argv, "--limit");
|
|
203
|
+
const params = new URLSearchParams({ q: query });
|
|
204
|
+
if (limitArg) params.set("limit", limitArg);
|
|
205
|
+
const res = await fetch(`${apiUrl}/public/docs/search?${params.toString()}`, {
|
|
206
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
207
|
+
});
|
|
208
|
+
if (!res.ok) {
|
|
209
|
+
const body2 = await res.json().catch(() => ({ error: res.statusText }));
|
|
210
|
+
console.error(`Error: ${body2.error ?? res.statusText}`);
|
|
211
|
+
process.exit(1);
|
|
212
|
+
}
|
|
213
|
+
const body = await res.json();
|
|
214
|
+
const results = body.data?.results ?? [];
|
|
215
|
+
if (jsonOutput) {
|
|
216
|
+
console.log(JSON.stringify(results, null, 2));
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
if (results.length === 0) {
|
|
220
|
+
console.log("No results found.");
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
for (const r of results) {
|
|
224
|
+
const desc = r.description ? ` ${r.description}` : "";
|
|
225
|
+
const excerpt = r.excerpt ? ` ${r.excerpt.replace(/<\/?mark>/g, "").replace(/\n/g, " ").slice(0, 120)}` : "";
|
|
226
|
+
console.log(` ${r.path ?? r.title}`);
|
|
227
|
+
if (r.title) console.log(` ${r.title}${desc}`);
|
|
228
|
+
if (excerpt) console.log(` ${excerpt}`);
|
|
229
|
+
console.log();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
189
232
|
async function handleDelete(argv, apiUrl, token) {
|
|
190
233
|
const slug = argv[0];
|
|
191
234
|
if (!slug || slug.startsWith("--")) {
|
|
@@ -213,6 +256,7 @@ function printDocsHelp() {
|
|
|
213
256
|
"Sub-commands:",
|
|
214
257
|
" list List all doc pages",
|
|
215
258
|
" get <slug> Print content to stdout",
|
|
259
|
+
" search <query> Full-text search docs",
|
|
216
260
|
" pull <slug> [--output <path>] Download to local file",
|
|
217
261
|
" push <slug> --file <path> [--message] Publish new version",
|
|
218
262
|
" history <slug> Show version history",
|
|
@@ -224,8 +268,9 @@ function printDocsHelp() {
|
|
|
224
268
|
" --title <text> Page title (create only)",
|
|
225
269
|
" --description <text> Page description (create only)",
|
|
226
270
|
" --message <text> Version commit message",
|
|
271
|
+
" --limit <n> Max results for search (default: 8, max: 20)",
|
|
227
272
|
" --output <path> Output path for pull (default: /tmp/canary/docs/<slug>.md)",
|
|
228
|
-
" --json Output as JSON (list, history)",
|
|
273
|
+
" --json Output as JSON (list, history, search)",
|
|
229
274
|
" --env <env> Target environment (prod, dev)",
|
|
230
275
|
" --api-url <url> API URL override",
|
|
231
276
|
" --token <key> API token override"
|
|
@@ -246,6 +291,9 @@ async function runDocs(argv) {
|
|
|
246
291
|
case "get":
|
|
247
292
|
await handleGet(rest, apiUrl, token);
|
|
248
293
|
break;
|
|
294
|
+
case "search":
|
|
295
|
+
await handleSearch(rest, apiUrl, token);
|
|
296
|
+
break;
|
|
249
297
|
case "pull":
|
|
250
298
|
await handlePull(rest, apiUrl, token);
|
|
251
299
|
break;
|
|
@@ -270,4 +318,4 @@ async function runDocs(argv) {
|
|
|
270
318
|
export {
|
|
271
319
|
runDocs
|
|
272
320
|
};
|
|
273
|
-
//# sourceMappingURL=docs-
|
|
321
|
+
//# sourceMappingURL=docs-CSVSGIGW.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\ntype DocsSearchResult = {\n path: string;\n title: string;\n description: string | null;\n excerpt: string;\n};\n\ntype DocsSearchResponse = {\n ok: boolean;\n error?: string;\n data?: { results: DocsSearchResult[] };\n};\n\nasync function handleSearch(argv: string[], apiUrl: string, token: string): Promise<void> {\n const query = argv.filter((a) => !a.startsWith('--')).join(' ').trim();\n if (!query) {\n console.error('Error: Missing search query.');\n console.error('Usage: canary docs search <query> [--limit <n>] [--json]');\n process.exit(1);\n }\n\n const jsonOutput = hasFlag(argv, '--json');\n const limitArg = getArgValue(argv, '--limit');\n const params = new URLSearchParams({ q: query });\n if (limitArg) params.set('limit', limitArg);\n\n const res = await fetch(`${apiUrl}/public/docs/search?${params.toString()}`, {\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 DocsSearchResponse;\n const results = body.data?.results ?? [];\n\n if (jsonOutput) {\n console.log(JSON.stringify(results, null, 2));\n return;\n }\n\n if (results.length === 0) {\n console.log('No results found.');\n return;\n }\n\n for (const r of results) {\n const desc = r.description ? ` ${r.description}` : '';\n const excerpt = r.excerpt\n ? ` ${r.excerpt.replace(/<\\/?mark>/g, '').replace(/\\n/g, ' ').slice(0, 120)}`\n : '';\n console.log(` ${r.path ?? r.title}`);\n if (r.title) console.log(` ${r.title}${desc}`);\n if (excerpt) console.log(` ${excerpt}`);\n console.log();\n }\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 ' search <query> Full-text search docs',\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 ' --limit <n> Max results for search (default: 8, max: 20)',\n ' --output <path> Output path for pull (default: /tmp/canary/docs/<slug>.md)',\n ' --json Output as JSON (list, history, search)',\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 'search':\n await handleSearch(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-YER5GQG7.js").then((m) => m.runMcp);
|
|
932
|
+
var loadLocalBrowser = () => import("./local-browser-WV4IH2DU.js").then((m) => m.runLocalBrowser);
|
|
933
|
+
var loadDebugWorkflow = () => import("./debug-workflow-DIQZDFMN.js").then((m) => m.runDebugWorkflow);
|
|
934
|
+
var loadRecord = () => import("./record-KRS2PHMW.js").then((m) => m.runRecord);
|
|
935
|
+
var loadSession = () => import("./session-CLWAVJ2K.js").then((m) => m.runSession);
|
|
936
|
+
var loadLocal = () => import("./local-ZPVM4BXX.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-CSVSGIGW.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-XXL4H5R4.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
|
}
|