@canaryai/cli 0.2.8 → 0.2.12
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/README.md +77 -92
- package/dist/chunk-CEW4BDXD.js +186 -0
- package/dist/chunk-CEW4BDXD.js.map +1 -0
- package/dist/chunk-ERSNYLMZ.js +229 -0
- package/dist/chunk-ERSNYLMZ.js.map +1 -0
- package/dist/{chunk-FK3EZADZ.js → chunk-MSMC6UXW.js} +2021 -873
- package/dist/chunk-MSMC6UXW.js.map +1 -0
- package/dist/{chunk-K2OB72B6.js → chunk-Q7WFBG5C.js} +2 -2
- package/dist/{debug-workflow-55G4Y6YT.js → debug-workflow-53ULOFJC.js} +57 -36
- package/dist/debug-workflow-53ULOFJC.js.map +1 -0
- package/dist/{docs-RPFT7ZJB.js → docs-BEE3LOCO.js} +2 -2
- package/dist/{feature-flag-2FDSKOVX.js → feature-flag-CYTDV4ZB.js} +3 -2
- package/dist/{feature-flag-2FDSKOVX.js.map → feature-flag-CYTDV4ZB.js.map} +1 -1
- package/dist/index.js +72 -137
- package/dist/index.js.map +1 -1
- package/dist/init-M6I3MG3D.js +146 -0
- package/dist/init-M6I3MG3D.js.map +1 -0
- package/dist/{issues-6ZDNDSD6.js → issues-NLM72HLU.js} +3 -2
- package/dist/{issues-6ZDNDSD6.js.map → issues-NLM72HLU.js.map} +1 -1
- package/dist/{knobs-MZRTYS3P.js → knobs-O35GAU5M.js} +3 -2
- package/dist/{knobs-MZRTYS3P.js.map → knobs-O35GAU5M.js.map} +1 -1
- package/dist/list-4K4EIGAT.js +57 -0
- package/dist/list-4K4EIGAT.js.map +1 -0
- package/dist/local-NHXXPHZ3.js +63 -0
- package/dist/local-NHXXPHZ3.js.map +1 -0
- package/dist/{local-browser-X7J27IGS.js → local-browser-VAZORCO3.js} +3 -3
- package/dist/login-ZLP64YQP.js +130 -0
- package/dist/login-ZLP64YQP.js.map +1 -0
- package/dist/mcp-ZF5G5DCB.js +377 -0
- package/dist/mcp-ZF5G5DCB.js.map +1 -0
- package/dist/{record-4OX7HXWQ.js → record-V6QKFFH3.js} +133 -72
- package/dist/record-V6QKFFH3.js.map +1 -0
- package/dist/{release-L4IXOHDF.js → release-7TI7EIGD.js} +8 -4
- package/dist/release-7TI7EIGD.js.map +1 -0
- package/dist/session-UGNJXRUW.js +819 -0
- package/dist/session-UGNJXRUW.js.map +1 -0
- package/dist/skill-ORWAPBDW.js +424 -0
- package/dist/skill-ORWAPBDW.js.map +1 -0
- package/dist/{src-I4EXB5OD.js → src-4VIDSK4A.js} +18 -2
- package/dist/start-E532F3BU.js +112 -0
- package/dist/start-E532F3BU.js.map +1 -0
- package/dist/workflow-HXIUXRFI.js +613 -0
- package/dist/workflow-HXIUXRFI.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-6WWHXWCS.js +0 -65
- package/dist/chunk-6WWHXWCS.js.map +0 -1
- package/dist/chunk-DXIAHB72.js +0 -340
- package/dist/chunk-DXIAHB72.js.map +0 -1
- package/dist/chunk-FK3EZADZ.js.map +0 -1
- package/dist/debug-workflow-55G4Y6YT.js.map +0 -1
- package/dist/mcp-4JVLADZL.js +0 -688
- package/dist/mcp-4JVLADZL.js.map +0 -1
- package/dist/record-4OX7HXWQ.js.map +0 -1
- package/dist/release-L4IXOHDF.js.map +0 -1
- /package/dist/{chunk-K2OB72B6.js.map → chunk-Q7WFBG5C.js.map} +0 -0
- /package/dist/{docs-RPFT7ZJB.js.map → docs-BEE3LOCO.js.map} +0 -0
- /package/dist/{local-browser-X7J27IGS.js.map → local-browser-VAZORCO3.js.map} +0 -0
- /package/dist/{src-I4EXB5OD.js.map → src-4VIDSK4A.js.map} +0 -0
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
analyzeSnapshot,
|
|
15
15
|
annotateScreenshotIndexed,
|
|
16
16
|
appendHintsToResponse,
|
|
17
|
+
appendRowsToCSV,
|
|
17
18
|
buildResolutionNote,
|
|
18
19
|
buildSectionTree,
|
|
19
20
|
captureElementAtPoint,
|
|
@@ -26,6 +27,8 @@ import {
|
|
|
26
27
|
detectGrid,
|
|
27
28
|
detectModal,
|
|
28
29
|
detectModalFromYaml,
|
|
30
|
+
detectPaginationInfo,
|
|
31
|
+
dispatchBrowserTool,
|
|
29
32
|
downsampleImage,
|
|
30
33
|
ensureAllowedHost,
|
|
31
34
|
estimateTextTokens,
|
|
@@ -34,13 +37,16 @@ import {
|
|
|
34
37
|
extractCellText,
|
|
35
38
|
extractDataValue,
|
|
36
39
|
extractGridCell,
|
|
40
|
+
extractIndexedDB,
|
|
37
41
|
extractLinks,
|
|
38
42
|
extractLinksFromTree,
|
|
39
43
|
extractSemanticHint,
|
|
40
44
|
extractSnapshotYaml,
|
|
45
|
+
extractTablesFromSnapshot,
|
|
41
46
|
findActiveElement,
|
|
42
47
|
findCloseButton,
|
|
43
48
|
findRelevanceScope,
|
|
49
|
+
formatCSVWithFrontmatter,
|
|
44
50
|
formatClickedElement,
|
|
45
51
|
formatGridOutput,
|
|
46
52
|
formatGridRow,
|
|
@@ -48,6 +54,7 @@ import {
|
|
|
48
54
|
formatSemanticSnapshot,
|
|
49
55
|
getBrowserToolDefinitions,
|
|
50
56
|
getBrowserToolDefinitionsWithLifecycle,
|
|
57
|
+
gridInfoToRows,
|
|
51
58
|
guessMimeType,
|
|
52
59
|
hasDiffChanges,
|
|
53
60
|
highlightElement,
|
|
@@ -59,13 +66,14 @@ import {
|
|
|
59
66
|
parseSnapshotWithMetrics,
|
|
60
67
|
populateSearchContext,
|
|
61
68
|
reconcileCellColumn,
|
|
69
|
+
restoreIndexedDB,
|
|
62
70
|
searchElements,
|
|
63
71
|
setCdpScreencastLogger,
|
|
64
72
|
setSnapshotAnalyzerLogger,
|
|
65
73
|
sortMatchesByContext,
|
|
66
74
|
withRecoveryNotice,
|
|
67
75
|
withRecoveryNoticeMCP
|
|
68
|
-
} from "./chunk-
|
|
76
|
+
} from "./chunk-MSMC6UXW.js";
|
|
69
77
|
import "./chunk-XAA5VQ5N.js";
|
|
70
78
|
import {
|
|
71
79
|
consoleLogger,
|
|
@@ -89,6 +97,7 @@ export {
|
|
|
89
97
|
analyzeSnapshot,
|
|
90
98
|
annotateScreenshotIndexed,
|
|
91
99
|
appendHintsToResponse,
|
|
100
|
+
appendRowsToCSV,
|
|
92
101
|
buildResolutionNote,
|
|
93
102
|
buildSectionTree,
|
|
94
103
|
captureElementAtPoint,
|
|
@@ -102,6 +111,8 @@ export {
|
|
|
102
111
|
detectGrid,
|
|
103
112
|
detectModal,
|
|
104
113
|
detectModalFromYaml,
|
|
114
|
+
detectPaginationInfo,
|
|
115
|
+
dispatchBrowserTool,
|
|
105
116
|
downsampleImage,
|
|
106
117
|
ensureAllowedHost,
|
|
107
118
|
estimateTextTokens,
|
|
@@ -110,15 +121,18 @@ export {
|
|
|
110
121
|
extractCellText,
|
|
111
122
|
extractDataValue,
|
|
112
123
|
extractGridCell,
|
|
124
|
+
extractIndexedDB,
|
|
113
125
|
extractLinks,
|
|
114
126
|
extractLinksFromTree,
|
|
115
127
|
extractPdfText,
|
|
116
128
|
extractPdfTextFromBuffer,
|
|
117
129
|
extractSemanticHint,
|
|
118
130
|
extractSnapshotYaml,
|
|
131
|
+
extractTablesFromSnapshot,
|
|
119
132
|
findActiveElement,
|
|
120
133
|
findCloseButton,
|
|
121
134
|
findRelevanceScope,
|
|
135
|
+
formatCSVWithFrontmatter,
|
|
122
136
|
formatClickedElement,
|
|
123
137
|
formatGridOutput,
|
|
124
138
|
formatGridRow,
|
|
@@ -126,6 +140,7 @@ export {
|
|
|
126
140
|
formatSemanticSnapshot,
|
|
127
141
|
getBrowserToolDefinitions,
|
|
128
142
|
getBrowserToolDefinitionsWithLifecycle,
|
|
143
|
+
gridInfoToRows,
|
|
129
144
|
guessMimeType,
|
|
130
145
|
hasDiffChanges,
|
|
131
146
|
highlightElement,
|
|
@@ -137,6 +152,7 @@ export {
|
|
|
137
152
|
parseSnapshotWithMetrics,
|
|
138
153
|
populateSearchContext,
|
|
139
154
|
reconcileCellColumn,
|
|
155
|
+
restoreIndexedDB,
|
|
140
156
|
searchElements,
|
|
141
157
|
setCdpScreencastLogger,
|
|
142
158
|
setPdfExtractLogger,
|
|
@@ -145,4 +161,4 @@ export {
|
|
|
145
161
|
withRecoveryNotice,
|
|
146
162
|
withRecoveryNoticeMCP
|
|
147
163
|
};
|
|
148
|
-
//# sourceMappingURL=src-
|
|
164
|
+
//# sourceMappingURL=src-4VIDSK4A.js.map
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { createRequire as __cr } from "module"; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
downloadStorageState,
|
|
4
|
+
fetchList,
|
|
5
|
+
promptChoice,
|
|
6
|
+
selectProperty
|
|
7
|
+
} from "./chunk-ERSNYLMZ.js";
|
|
8
|
+
import {
|
|
9
|
+
createSession
|
|
10
|
+
} from "./chunk-CEW4BDXD.js";
|
|
11
|
+
import {
|
|
12
|
+
resolveConfig
|
|
13
|
+
} from "./chunk-PWWQGYFG.js";
|
|
14
|
+
import "./chunk-XAA5VQ5N.js";
|
|
15
|
+
import "./chunk-VKVL7WBN.js";
|
|
16
|
+
|
|
17
|
+
// src/local/start.ts
|
|
18
|
+
import process from "process";
|
|
19
|
+
async function runLocalStart(argv) {
|
|
20
|
+
const config = await resolveConfig(argv);
|
|
21
|
+
const property = await selectProperty(config.apiUrl, config.token);
|
|
22
|
+
if (!property) {
|
|
23
|
+
process.exitCode = 1;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const envs = await fetchList(
|
|
27
|
+
config.apiUrl,
|
|
28
|
+
config.token,
|
|
29
|
+
`/org/properties/${property.id}/environments/local`,
|
|
30
|
+
"items"
|
|
31
|
+
);
|
|
32
|
+
if (envs.length === 0) {
|
|
33
|
+
console.error("No local environments found. Run `canary local init` first.");
|
|
34
|
+
process.exitCode = 1;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
let selectedEnv;
|
|
38
|
+
if (envs.length === 1) {
|
|
39
|
+
selectedEnv = envs[0];
|
|
40
|
+
} else {
|
|
41
|
+
const picked = await promptChoice(
|
|
42
|
+
"Select a local environment:",
|
|
43
|
+
envs.map((e) => ({ label: `${e.name} \u2014 ${e.url}`, value: e }))
|
|
44
|
+
);
|
|
45
|
+
if (!picked) {
|
|
46
|
+
process.exitCode = 1;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
selectedEnv = picked;
|
|
50
|
+
}
|
|
51
|
+
const allCredentials = await fetchList(
|
|
52
|
+
config.apiUrl,
|
|
53
|
+
config.token,
|
|
54
|
+
"/org/credentials",
|
|
55
|
+
"items"
|
|
56
|
+
);
|
|
57
|
+
const envCredentials = allCredentials.filter(
|
|
58
|
+
(c) => c.propertyId === property.id
|
|
59
|
+
);
|
|
60
|
+
let storageStatePath;
|
|
61
|
+
let credentialName;
|
|
62
|
+
if (envCredentials.length > 0) {
|
|
63
|
+
let credential;
|
|
64
|
+
if (envCredentials.length === 1) {
|
|
65
|
+
credential = envCredentials[0];
|
|
66
|
+
} else {
|
|
67
|
+
const picked = await promptChoice(
|
|
68
|
+
"Select a credential:",
|
|
69
|
+
envCredentials.map((c) => ({ label: c.name, value: c }))
|
|
70
|
+
);
|
|
71
|
+
if (!picked) {
|
|
72
|
+
process.exitCode = 1;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
credential = picked;
|
|
76
|
+
}
|
|
77
|
+
credentialName = credential.name;
|
|
78
|
+
if (credential.storageStateS3Key) {
|
|
79
|
+
console.log("Loading saved login state...");
|
|
80
|
+
storageStatePath = await downloadStorageState({
|
|
81
|
+
apiUrl: config.apiUrl,
|
|
82
|
+
token: config.token,
|
|
83
|
+
propertyId: property.id,
|
|
84
|
+
credentialId: credential.id,
|
|
85
|
+
prefix: "local"
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
console.log(`Starting session at ${selectedEnv.url}...`);
|
|
90
|
+
const result = await createSession({
|
|
91
|
+
name: `local-${property.name}`,
|
|
92
|
+
url: selectedEnv.url,
|
|
93
|
+
storageStatePath,
|
|
94
|
+
credentialName
|
|
95
|
+
});
|
|
96
|
+
if (!result.ok || !result.data) {
|
|
97
|
+
console.error(`Failed to start session: ${result.error ?? "Unknown error"}`);
|
|
98
|
+
process.exitCode = 1;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
console.log(`
|
|
102
|
+
Session started: ${result.data.id}`);
|
|
103
|
+
console.log(` URL: ${selectedEnv.url}`);
|
|
104
|
+
if (credentialName) console.log(` Credential: ${credentialName}`);
|
|
105
|
+
if (storageStatePath) console.log(` Login state: loaded`);
|
|
106
|
+
console.log(`
|
|
107
|
+
Use \`canary session\` commands to interact with the browser.`);
|
|
108
|
+
}
|
|
109
|
+
export {
|
|
110
|
+
runLocalStart
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=start-E532F3BU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/local/start.ts"],"sourcesContent":["/**\n * `canary local start` — Start a headed session for a local environment.\n *\n * @module\n */\n\nimport process from 'node:process';\nimport { resolveConfig } from '../auth.js';\nimport {\n selectProperty,\n promptChoice,\n fetchList,\n downloadStorageState,\n} from '../cli-helpers.js';\nimport { createSession } from '../session/daemon-client.js';\nimport type { CredentialListItem } from '../cli-helpers.js';\n\ninterface LocalEnvironment {\n id: string;\n name: string;\n url: string;\n propertyId: string;\n}\n\nexport async function runLocalStart(argv: string[]) {\n const config = await resolveConfig(argv);\n\n // Select property\n const property = await selectProperty(config.apiUrl, config.token);\n if (!property) {\n process.exitCode = 1;\n return;\n }\n\n // Get local environments for this property\n const envs = await fetchList<LocalEnvironment>(\n config.apiUrl,\n config.token,\n `/org/properties/${property.id}/environments/local`,\n 'items'\n );\n\n if (envs.length === 0) {\n console.error('No local environments found. Run `canary local init` first.');\n process.exitCode = 1;\n return;\n }\n\n let selectedEnv: LocalEnvironment;\n if (envs.length === 1) {\n selectedEnv = envs[0];\n } else {\n const picked = await promptChoice(\n 'Select a local environment:',\n envs.map((e) => ({ label: `${e.name} — ${e.url}`, value: e }))\n );\n if (!picked) {\n process.exitCode = 1;\n return;\n }\n selectedEnv = picked;\n }\n\n // Look up credentials for this environment\n const allCredentials = await fetchList<CredentialListItem>(\n config.apiUrl,\n config.token,\n '/org/credentials',\n 'items'\n );\n\n const envCredentials = allCredentials.filter(\n (c) => c.propertyId === property.id\n );\n\n let storageStatePath: string | undefined;\n let credentialName: string | undefined;\n\n if (envCredentials.length > 0) {\n // Pick a credential if multiple\n let credential: CredentialListItem;\n if (envCredentials.length === 1) {\n credential = envCredentials[0];\n } else {\n const picked = await promptChoice(\n 'Select a credential:',\n envCredentials.map((c) => ({ label: c.name, value: c }))\n );\n if (!picked) {\n process.exitCode = 1;\n return;\n }\n credential = picked;\n }\n\n credentialName = credential.name;\n\n // Download storage state if available\n if (credential.storageStateS3Key) {\n console.log('Loading saved login state...');\n storageStatePath = await downloadStorageState({\n apiUrl: config.apiUrl,\n token: config.token,\n propertyId: property.id,\n credentialId: credential.id,\n prefix: 'local',\n });\n }\n }\n\n // Create headed session\n console.log(`Starting session at ${selectedEnv.url}...`);\n const result = await createSession({\n name: `local-${property.name}`,\n url: selectedEnv.url,\n storageStatePath,\n credentialName,\n });\n\n if (!result.ok || !result.data) {\n console.error(`Failed to start session: ${result.error ?? 'Unknown error'}`);\n process.exitCode = 1;\n return;\n }\n\n console.log(`\\nSession started: ${result.data.id}`);\n console.log(` URL: ${selectedEnv.url}`);\n if (credentialName) console.log(` Credential: ${credentialName}`);\n if (storageStatePath) console.log(` Login state: loaded`);\n console.log(`\\nUse \\`canary session\\` commands to interact with the browser.`);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAMA,OAAO,aAAa;AAkBpB,eAAsB,cAAc,MAAgB;AAClD,QAAM,SAAS,MAAM,cAAc,IAAI;AAGvC,QAAM,WAAW,MAAM,eAAe,OAAO,QAAQ,OAAO,KAAK;AACjE,MAAI,CAAC,UAAU;AACb,YAAQ,WAAW;AACnB;AAAA,EACF;AAGA,QAAM,OAAO,MAAM;AAAA,IACjB,OAAO;AAAA,IACP,OAAO;AAAA,IACP,mBAAmB,SAAS,EAAE;AAAA,IAC9B;AAAA,EACF;AAEA,MAAI,KAAK,WAAW,GAAG;AACrB,YAAQ,MAAM,6DAA6D;AAC3E,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,MAAI;AACJ,MAAI,KAAK,WAAW,GAAG;AACrB,kBAAc,KAAK,CAAC;AAAA,EACtB,OAAO;AACL,UAAM,SAAS,MAAM;AAAA,MACnB;AAAA,MACA,KAAK,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,WAAM,EAAE,GAAG,IAAI,OAAO,EAAE,EAAE;AAAA,IAC/D;AACA,QAAI,CAAC,QAAQ;AACX,cAAQ,WAAW;AACnB;AAAA,IACF;AACA,kBAAc;AAAA,EAChB;AAGA,QAAM,iBAAiB,MAAM;AAAA,IAC3B,OAAO;AAAA,IACP,OAAO;AAAA,IACP;AAAA,IACA;AAAA,EACF;AAEA,QAAM,iBAAiB,eAAe;AAAA,IACpC,CAAC,MAAM,EAAE,eAAe,SAAS;AAAA,EACnC;AAEA,MAAI;AACJ,MAAI;AAEJ,MAAI,eAAe,SAAS,GAAG;AAE7B,QAAI;AACJ,QAAI,eAAe,WAAW,GAAG;AAC/B,mBAAa,eAAe,CAAC;AAAA,IAC/B,OAAO;AACL,YAAM,SAAS,MAAM;AAAA,QACnB;AAAA,QACA,eAAe,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,EAAE,EAAE;AAAA,MACzD;AACA,UAAI,CAAC,QAAQ;AACX,gBAAQ,WAAW;AACnB;AAAA,MACF;AACA,mBAAa;AAAA,IACf;AAEA,qBAAiB,WAAW;AAG5B,QAAI,WAAW,mBAAmB;AAChC,cAAQ,IAAI,8BAA8B;AAC1C,yBAAmB,MAAM,qBAAqB;AAAA,QAC5C,QAAQ,OAAO;AAAA,QACf,OAAO,OAAO;AAAA,QACd,YAAY,SAAS;AAAA,QACrB,cAAc,WAAW;AAAA,QACzB,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAAA,EACF;AAGA,UAAQ,IAAI,uBAAuB,YAAY,GAAG,KAAK;AACvD,QAAM,SAAS,MAAM,cAAc;AAAA,IACjC,MAAM,SAAS,SAAS,IAAI;AAAA,IAC5B,KAAK,YAAY;AAAA,IACjB;AAAA,IACA;AAAA,EACF,CAAC;AAED,MAAI,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM;AAC9B,YAAQ,MAAM,4BAA4B,OAAO,SAAS,eAAe,EAAE;AAC3E,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,UAAQ,IAAI;AAAA,mBAAsB,OAAO,KAAK,EAAE,EAAE;AAClD,UAAQ,IAAI,UAAU,YAAY,GAAG,EAAE;AACvC,MAAI,eAAgB,SAAQ,IAAI,iBAAiB,cAAc,EAAE;AACjE,MAAI,iBAAkB,SAAQ,IAAI,uBAAuB;AACzD,UAAQ,IAAI;AAAA,8DAAiE;AAC/E;","names":[]}
|