@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.
Files changed (58) hide show
  1. package/README.md +77 -92
  2. package/dist/chunk-CEW4BDXD.js +186 -0
  3. package/dist/chunk-CEW4BDXD.js.map +1 -0
  4. package/dist/chunk-ERSNYLMZ.js +229 -0
  5. package/dist/chunk-ERSNYLMZ.js.map +1 -0
  6. package/dist/{chunk-FK3EZADZ.js → chunk-MSMC6UXW.js} +2021 -873
  7. package/dist/chunk-MSMC6UXW.js.map +1 -0
  8. package/dist/{chunk-K2OB72B6.js → chunk-Q7WFBG5C.js} +2 -2
  9. package/dist/{debug-workflow-55G4Y6YT.js → debug-workflow-53ULOFJC.js} +57 -36
  10. package/dist/debug-workflow-53ULOFJC.js.map +1 -0
  11. package/dist/{docs-RPFT7ZJB.js → docs-BEE3LOCO.js} +2 -2
  12. package/dist/{feature-flag-2FDSKOVX.js → feature-flag-CYTDV4ZB.js} +3 -2
  13. package/dist/{feature-flag-2FDSKOVX.js.map → feature-flag-CYTDV4ZB.js.map} +1 -1
  14. package/dist/index.js +72 -137
  15. package/dist/index.js.map +1 -1
  16. package/dist/init-M6I3MG3D.js +146 -0
  17. package/dist/init-M6I3MG3D.js.map +1 -0
  18. package/dist/{issues-6ZDNDSD6.js → issues-NLM72HLU.js} +3 -2
  19. package/dist/{issues-6ZDNDSD6.js.map → issues-NLM72HLU.js.map} +1 -1
  20. package/dist/{knobs-MZRTYS3P.js → knobs-O35GAU5M.js} +3 -2
  21. package/dist/{knobs-MZRTYS3P.js.map → knobs-O35GAU5M.js.map} +1 -1
  22. package/dist/list-4K4EIGAT.js +57 -0
  23. package/dist/list-4K4EIGAT.js.map +1 -0
  24. package/dist/local-NHXXPHZ3.js +63 -0
  25. package/dist/local-NHXXPHZ3.js.map +1 -0
  26. package/dist/{local-browser-X7J27IGS.js → local-browser-VAZORCO3.js} +3 -3
  27. package/dist/login-ZLP64YQP.js +130 -0
  28. package/dist/login-ZLP64YQP.js.map +1 -0
  29. package/dist/mcp-ZF5G5DCB.js +377 -0
  30. package/dist/mcp-ZF5G5DCB.js.map +1 -0
  31. package/dist/{record-4OX7HXWQ.js → record-V6QKFFH3.js} +133 -72
  32. package/dist/record-V6QKFFH3.js.map +1 -0
  33. package/dist/{release-L4IXOHDF.js → release-7TI7EIGD.js} +8 -4
  34. package/dist/release-7TI7EIGD.js.map +1 -0
  35. package/dist/session-UGNJXRUW.js +819 -0
  36. package/dist/session-UGNJXRUW.js.map +1 -0
  37. package/dist/skill-ORWAPBDW.js +424 -0
  38. package/dist/skill-ORWAPBDW.js.map +1 -0
  39. package/dist/{src-I4EXB5OD.js → src-4VIDSK4A.js} +18 -2
  40. package/dist/start-E532F3BU.js +112 -0
  41. package/dist/start-E532F3BU.js.map +1 -0
  42. package/dist/workflow-HXIUXRFI.js +613 -0
  43. package/dist/workflow-HXIUXRFI.js.map +1 -0
  44. package/package.json +1 -1
  45. package/dist/chunk-6WWHXWCS.js +0 -65
  46. package/dist/chunk-6WWHXWCS.js.map +0 -1
  47. package/dist/chunk-DXIAHB72.js +0 -340
  48. package/dist/chunk-DXIAHB72.js.map +0 -1
  49. package/dist/chunk-FK3EZADZ.js.map +0 -1
  50. package/dist/debug-workflow-55G4Y6YT.js.map +0 -1
  51. package/dist/mcp-4JVLADZL.js +0 -688
  52. package/dist/mcp-4JVLADZL.js.map +0 -1
  53. package/dist/record-4OX7HXWQ.js.map +0 -1
  54. package/dist/release-L4IXOHDF.js.map +0 -1
  55. /package/dist/{chunk-K2OB72B6.js.map → chunk-Q7WFBG5C.js.map} +0 -0
  56. /package/dist/{docs-RPFT7ZJB.js.map → docs-BEE3LOCO.js.map} +0 -0
  57. /package/dist/{local-browser-X7J27IGS.js.map → local-browser-VAZORCO3.js.map} +0 -0
  58. /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-FK3EZADZ.js";
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-I4EXB5OD.js.map
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":[]}