dev3000 0.0.186 → 0.0.188

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 (235) hide show
  1. package/README.md +101 -13
  2. package/bin/dev3000 +1 -2
  3. package/dist/cdp-monitor.d.ts +7 -12
  4. package/dist/cdp-monitor.d.ts.map +1 -1
  5. package/dist/cdp-monitor.js +86 -170
  6. package/dist/cdp-monitor.js.map +1 -1
  7. package/dist/cli.d.ts +1 -2
  8. package/dist/cli.d.ts.map +1 -1
  9. package/dist/cli.js +1 -1369
  10. package/dist/cli.js.map +1 -1
  11. package/dist/index.d.ts +1 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +0 -1
  14. package/dist/index.js.map +1 -1
  15. package/dist/portless.d.ts +3 -0
  16. package/dist/portless.d.ts.map +1 -1
  17. package/dist/portless.js +10 -0
  18. package/dist/portless.js.map +1 -1
  19. package/dist/runtime/bridge.d.ts +26 -0
  20. package/dist/runtime/bridge.d.ts.map +1 -0
  21. package/dist/runtime/bridge.js +340 -0
  22. package/dist/runtime/bridge.js.map +1 -0
  23. package/dist/runtime/chrome-isolation.d.ts +16 -0
  24. package/dist/runtime/chrome-isolation.d.ts.map +1 -0
  25. package/dist/runtime/chrome-isolation.js +119 -0
  26. package/dist/runtime/chrome-isolation.js.map +1 -0
  27. package/dist/runtime/cli.js +116 -26
  28. package/dist/runtime/cli.js.map +1 -1
  29. package/dist/runtime/event-views.d.ts +21 -0
  30. package/dist/runtime/event-views.d.ts.map +1 -0
  31. package/dist/runtime/event-views.js +53 -0
  32. package/dist/runtime/event-views.js.map +1 -0
  33. package/dist/runtime/harness.d.ts +16 -0
  34. package/dist/runtime/harness.d.ts.map +1 -0
  35. package/dist/runtime/harness.js +68 -0
  36. package/dist/runtime/harness.js.map +1 -0
  37. package/dist/runtime/local-proxy.d.ts +12 -0
  38. package/dist/runtime/local-proxy.d.ts.map +1 -0
  39. package/dist/runtime/local-proxy.js +114 -0
  40. package/dist/runtime/local-proxy.js.map +1 -0
  41. package/dist/runtime/runtime.d.ts +14 -0
  42. package/dist/runtime/runtime.d.ts.map +1 -1
  43. package/dist/runtime/runtime.js +80 -19
  44. package/dist/runtime/runtime.js.map +1 -1
  45. package/dist/runtime/sandbox-agent.d.ts +6 -0
  46. package/dist/runtime/sandbox-agent.d.ts.map +1 -0
  47. package/dist/runtime/sandbox-agent.js +35 -0
  48. package/dist/runtime/sandbox-agent.js.map +1 -0
  49. package/dist/runtime/sandbox-command.d.ts +9 -0
  50. package/dist/runtime/sandbox-command.d.ts.map +1 -0
  51. package/dist/runtime/sandbox-command.js +101 -0
  52. package/dist/runtime/sandbox-command.js.map +1 -0
  53. package/dist/runtime/sandbox-proxy.d.ts +11 -0
  54. package/dist/runtime/sandbox-proxy.d.ts.map +1 -0
  55. package/dist/runtime/sandbox-proxy.js +123 -0
  56. package/dist/runtime/sandbox-proxy.js.map +1 -0
  57. package/dist/runtime/sandbox-sessions.d.ts +31 -0
  58. package/dist/runtime/sandbox-sessions.d.ts.map +1 -0
  59. package/dist/runtime/sandbox-sessions.js +102 -0
  60. package/dist/runtime/sandbox-sessions.js.map +1 -0
  61. package/dist/runtime/sandbox.d.ts +21 -0
  62. package/dist/runtime/sandbox.d.ts.map +1 -0
  63. package/dist/runtime/sandbox.js +481 -0
  64. package/dist/runtime/sandbox.js.map +1 -0
  65. package/dist/utils/agent-browser.d.ts +2 -120
  66. package/dist/utils/agent-browser.d.ts.map +1 -1
  67. package/dist/utils/agent-browser.js +13 -376
  68. package/dist/utils/agent-browser.js.map +1 -1
  69. package/dist/utils/project-name.d.ts +2 -2
  70. package/dist/utils/project-name.js +2 -2
  71. package/package.json +13 -22
  72. package/skills/d3k/SKILL.md +23 -1
  73. package/dist/commands/crawl.d.ts +0 -12
  74. package/dist/commands/crawl.d.ts.map +0 -1
  75. package/dist/commands/crawl.js +0 -101
  76. package/dist/commands/crawl.js.map +0 -1
  77. package/dist/commands/errors.d.ts +0 -14
  78. package/dist/commands/errors.d.ts.map +0 -1
  79. package/dist/commands/errors.js +0 -246
  80. package/dist/commands/errors.js.map +0 -1
  81. package/dist/commands/fix.d.ts +0 -13
  82. package/dist/commands/fix.d.ts.map +0 -1
  83. package/dist/commands/fix.js +0 -219
  84. package/dist/commands/fix.js.map +0 -1
  85. package/dist/commands/logs.d.ts +0 -13
  86. package/dist/commands/logs.d.ts.map +0 -1
  87. package/dist/commands/logs.js +0 -146
  88. package/dist/commands/logs.js.map +0 -1
  89. package/dist/commands/resume.d.ts +0 -11
  90. package/dist/commands/resume.d.ts.map +0 -1
  91. package/dist/commands/resume.js +0 -75
  92. package/dist/commands/resume.js.map +0 -1
  93. package/dist/commands/status.d.ts +0 -21
  94. package/dist/commands/status.d.ts.map +0 -1
  95. package/dist/commands/status.js +0 -44
  96. package/dist/commands/status.js.map +0 -1
  97. package/dist/components/AgentSelector.d.ts +0 -12
  98. package/dist/components/AgentSelector.d.ts.map +0 -1
  99. package/dist/components/AgentSelector.js +0 -99
  100. package/dist/components/AgentSelector.js.map +0 -1
  101. package/dist/components/PackageSelector.d.ts +0 -13
  102. package/dist/components/PackageSelector.d.ts.map +0 -1
  103. package/dist/components/PackageSelector.js +0 -79
  104. package/dist/components/PackageSelector.js.map +0 -1
  105. package/dist/constants/log-colors.d.ts +0 -43
  106. package/dist/constants/log-colors.d.ts.map +0 -1
  107. package/dist/constants/log-colors.js +0 -59
  108. package/dist/constants/log-colors.js.map +0 -1
  109. package/dist/dev-environment.d.ts +0 -187
  110. package/dist/dev-environment.d.ts.map +0 -1
  111. package/dist/dev-environment.js +0 -2248
  112. package/dist/dev-environment.js.map +0 -1
  113. package/dist/screencast-manager.d.ts +0 -78
  114. package/dist/screencast-manager.d.ts.map +0 -1
  115. package/dist/screencast-manager.js +0 -529
  116. package/dist/screencast-manager.js.map +0 -1
  117. package/dist/services/parsers/error-detectors/base.d.ts +0 -24
  118. package/dist/services/parsers/error-detectors/base.d.ts.map +0 -1
  119. package/dist/services/parsers/error-detectors/base.js +0 -44
  120. package/dist/services/parsers/error-detectors/base.js.map +0 -1
  121. package/dist/services/parsers/error-detectors/index.d.ts +0 -6
  122. package/dist/services/parsers/error-detectors/index.d.ts.map +0 -1
  123. package/dist/services/parsers/error-detectors/index.js +0 -6
  124. package/dist/services/parsers/error-detectors/index.js.map +0 -1
  125. package/dist/services/parsers/error-detectors/nextjs.d.ts +0 -9
  126. package/dist/services/parsers/error-detectors/nextjs.d.ts.map +0 -1
  127. package/dist/services/parsers/error-detectors/nextjs.js +0 -52
  128. package/dist/services/parsers/error-detectors/nextjs.js.map +0 -1
  129. package/dist/services/parsers/index.d.ts +0 -9
  130. package/dist/services/parsers/index.d.ts.map +0 -1
  131. package/dist/services/parsers/index.js +0 -10
  132. package/dist/services/parsers/index.js.map +0 -1
  133. package/dist/services/parsers/log-parsers/base.d.ts +0 -26
  134. package/dist/services/parsers/log-parsers/base.d.ts.map +0 -1
  135. package/dist/services/parsers/log-parsers/base.js +0 -6
  136. package/dist/services/parsers/log-parsers/base.js.map +0 -1
  137. package/dist/services/parsers/log-parsers/index.d.ts +0 -6
  138. package/dist/services/parsers/log-parsers/index.d.ts.map +0 -1
  139. package/dist/services/parsers/log-parsers/index.js +0 -5
  140. package/dist/services/parsers/log-parsers/index.js.map +0 -1
  141. package/dist/services/parsers/log-parsers/standard.d.ts +0 -9
  142. package/dist/services/parsers/log-parsers/standard.d.ts.map +0 -1
  143. package/dist/services/parsers/log-parsers/standard.js +0 -17
  144. package/dist/services/parsers/log-parsers/standard.js.map +0 -1
  145. package/dist/services/parsers/output-processor.d.ts +0 -39
  146. package/dist/services/parsers/output-processor.d.ts.map +0 -1
  147. package/dist/services/parsers/output-processor.js +0 -54
  148. package/dist/services/parsers/output-processor.js.map +0 -1
  149. package/dist/skills/d3k/internal-skill.md +0 -32
  150. package/dist/skills/index.d.ts +0 -54
  151. package/dist/skills/index.d.ts.map +0 -1
  152. package/dist/skills/index.js +0 -214
  153. package/dist/skills/index.js.map +0 -1
  154. package/dist/src/tui-interface-impl.tsx +0 -644
  155. package/dist/tui-interface-impl.d.ts +0 -30
  156. package/dist/tui-interface-impl.d.ts.map +0 -1
  157. package/dist/tui-interface-impl.js +0 -403
  158. package/dist/tui-interface-impl.js.map +0 -1
  159. package/dist/tui-interface-opentui.d.ts +0 -33
  160. package/dist/tui-interface-opentui.d.ts.map +0 -1
  161. package/dist/tui-interface-opentui.js +0 -1128
  162. package/dist/tui-interface-opentui.js.map +0 -1
  163. package/dist/tui-interface.d.ts +0 -38
  164. package/dist/tui-interface.d.ts.map +0 -1
  165. package/dist/tui-interface.js +0 -84
  166. package/dist/tui-interface.js.map +0 -1
  167. package/dist/utils/agent-detection.d.ts +0 -17
  168. package/dist/utils/agent-detection.d.ts.map +0 -1
  169. package/dist/utils/agent-detection.js +0 -81
  170. package/dist/utils/agent-detection.js.map +0 -1
  171. package/dist/utils/agent-selection.d.ts +0 -25
  172. package/dist/utils/agent-selection.d.ts.map +0 -1
  173. package/dist/utils/agent-selection.js +0 -73
  174. package/dist/utils/agent-selection.js.map +0 -1
  175. package/dist/utils/browser-command-argv.d.ts +0 -19
  176. package/dist/utils/browser-command-argv.d.ts.map +0 -1
  177. package/dist/utils/browser-command-argv.js +0 -149
  178. package/dist/utils/browser-command-argv.js.map +0 -1
  179. package/dist/utils/build-version.d.ts +0 -2
  180. package/dist/utils/build-version.d.ts.map +0 -1
  181. package/dist/utils/build-version.js +0 -8
  182. package/dist/utils/build-version.js.map +0 -1
  183. package/dist/utils/cli-options.d.ts +0 -5
  184. package/dist/utils/cli-options.d.ts.map +0 -1
  185. package/dist/utils/cli-options.js +0 -36
  186. package/dist/utils/cli-options.js.map +0 -1
  187. package/dist/utils/d3k-dir.d.ts +0 -3
  188. package/dist/utils/d3k-dir.d.ts.map +0 -1
  189. package/dist/utils/d3k-dir.js +0 -12
  190. package/dist/utils/d3k-dir.js.map +0 -1
  191. package/dist/utils/d3k-skill-installer.d.ts +0 -4
  192. package/dist/utils/d3k-skill-installer.d.ts.map +0 -1
  193. package/dist/utils/d3k-skill-installer.js +0 -30
  194. package/dist/utils/d3k-skill-installer.js.map +0 -1
  195. package/dist/utils/log-filename.d.ts +0 -30
  196. package/dist/utils/log-filename.d.ts.map +0 -1
  197. package/dist/utils/log-filename.js +0 -60
  198. package/dist/utils/log-filename.js.map +0 -1
  199. package/dist/utils/project-detector.d.ts +0 -25
  200. package/dist/utils/project-detector.d.ts.map +0 -1
  201. package/dist/utils/project-detector.js +0 -153
  202. package/dist/utils/project-detector.js.map +0 -1
  203. package/dist/utils/project-metadata.d.ts +0 -4
  204. package/dist/utils/project-metadata.d.ts.map +0 -1
  205. package/dist/utils/project-metadata.js +0 -48
  206. package/dist/utils/project-metadata.js.map +0 -1
  207. package/dist/utils/repo-validate.d.ts +0 -2
  208. package/dist/utils/repo-validate.d.ts.map +0 -1
  209. package/dist/utils/repo-validate.js +0 -10
  210. package/dist/utils/repo-validate.js.map +0 -1
  211. package/dist/utils/session.d.ts +0 -19
  212. package/dist/utils/session.d.ts.map +0 -1
  213. package/dist/utils/session.js +0 -65
  214. package/dist/utils/session.js.map +0 -1
  215. package/dist/utils/skill-installer.d.ts +0 -65
  216. package/dist/utils/skill-installer.d.ts.map +0 -1
  217. package/dist/utils/skill-installer.js +0 -265
  218. package/dist/utils/skill-installer.js.map +0 -1
  219. package/dist/utils/timestamp.d.ts +0 -20
  220. package/dist/utils/timestamp.d.ts.map +0 -1
  221. package/dist/utils/timestamp.js +0 -57
  222. package/dist/utils/timestamp.js.map +0 -1
  223. package/dist/utils/tmux-helpers.d.ts +0 -36
  224. package/dist/utils/tmux-helpers.d.ts.map +0 -1
  225. package/dist/utils/tmux-helpers.js +0 -118
  226. package/dist/utils/tmux-helpers.js.map +0 -1
  227. package/dist/utils/user-config.d.ts +0 -12
  228. package/dist/utils/user-config.d.ts.map +0 -1
  229. package/dist/utils/user-config.js +0 -46
  230. package/dist/utils/user-config.js.map +0 -1
  231. package/dist/utils/version-check.d.ts +0 -52
  232. package/dist/utils/version-check.d.ts.map +0 -1
  233. package/dist/utils/version-check.js +0 -304
  234. package/dist/utils/version-check.js.map +0 -1
  235. package/src/tui-interface-impl.tsx +0 -644
@@ -1,11 +1,6 @@
1
- /**
2
- * Wrapper for agent-browser CLI
3
- *
4
- * Provides a TypeScript interface to agent-browser commands for browser automation.
5
- * Uses the CLI approach for reliability and to leverage agent-browser's daemon architecture.
6
- */
7
- import { spawn, spawnSync } from "child_process";
8
- import { accessSync, chmodSync, constants, existsSync, mkdirSync } from "fs";
1
+ /** Resolve the installed agent-browser helper without launching a separate browser. */
2
+ import { createRequire } from "node:module";
3
+ import { accessSync, chmodSync, constants, existsSync } from "fs";
9
4
  import { homedir } from "os";
10
5
  import { dirname, join } from "path";
11
6
  import { fileURLToPath } from "url";
@@ -33,7 +28,7 @@ function getRunnablePath(searchPath) {
33
28
  }
34
29
  // Find the agent-browser binary in node_modules
35
30
  function getAgentBrowserPath() {
36
- // 1. Check environment variable first (set by d3k when starting tools service)
31
+ // 1. Check environment variable first
37
32
  if (process.env.AGENT_BROWSER_PATH) {
38
33
  const runnablePath = getRunnablePath(process.env.AGENT_BROWSER_PATH);
39
34
  if (runnablePath) {
@@ -42,6 +37,14 @@ function getAgentBrowserPath() {
42
37
  }
43
38
  // Build search paths from multiple starting points
44
39
  const searchPaths = [];
40
+ // Package managers may hoist the dependency beside d3k (including sandbox installs).
41
+ try {
42
+ const dependency = createRequire(import.meta.url).resolve("agent-browser/package.json");
43
+ searchPaths.push(join(dirname(dependency), "bin", "agent-browser.js"));
44
+ }
45
+ catch {
46
+ // Bundled installations can fall back to the filesystem/global probes below.
47
+ }
45
48
  // 2. Try import.meta.url-based paths (works in dev, may not work in Next.js bundle)
46
49
  try {
47
50
  const currentFile = fileURLToPath(import.meta.url);
@@ -85,373 +88,7 @@ function getAgentBrowserPath() {
85
88
  // Fallback to global command (may work if installed globally)
86
89
  return "agent-browser";
87
90
  }
88
- /**
89
- * Build CLI args from options
90
- */
91
- function buildArgs(options) {
92
- const args = [];
93
- if (options.headed) {
94
- args.push("--headed");
95
- }
96
- if (options.cdpPort) {
97
- args.push("--cdp", String(options.cdpPort));
98
- }
99
- if (options.session) {
100
- args.push("--session", options.session);
101
- }
102
- if (options.profile) {
103
- args.push("--profile", options.profile);
104
- }
105
- // Always use JSON output for parsing
106
- args.push("--json");
107
- return args;
108
- }
109
- /**
110
- * Execute an agent-browser command
111
- */
112
- async function execAgentBrowser(command, options = {}) {
113
- const args = [...buildArgs(options), ...command];
114
- const timeout = options.timeout || 30000;
115
- const agentBrowserPath = getAgentBrowserPath();
116
- return new Promise((resolve, reject) => {
117
- const proc = spawn(agentBrowserPath, args, {
118
- stdio: ["pipe", "pipe", "pipe"],
119
- timeout
120
- });
121
- let stdout = "";
122
- let stderr = "";
123
- proc.stdout?.on("data", (data) => {
124
- stdout += data.toString();
125
- });
126
- proc.stderr?.on("data", (data) => {
127
- stderr += data.toString();
128
- });
129
- proc.on("close", (code) => {
130
- if (code === 0) {
131
- resolve(stdout);
132
- }
133
- else {
134
- reject(new Error(`agent-browser failed (code ${code}): ${stderr || stdout}`));
135
- }
136
- });
137
- proc.on("error", (err) => {
138
- reject(new Error(`agent-browser spawn error: ${err.message}`));
139
- });
140
- });
141
- }
142
- /**
143
- * Open a URL in the browser
144
- */
145
- export async function openUrl(url, options = {}) {
146
- try {
147
- const output = await execAgentBrowser(["open", url], options);
148
- return { success: true, output };
149
- }
150
- catch (error) {
151
- return {
152
- success: false,
153
- error: error instanceof Error ? error.message : String(error)
154
- };
155
- }
156
- }
157
- /**
158
- * Take a snapshot of the current page (accessibility tree with refs)
159
- */
160
- export async function snapshot(options = {}) {
161
- const args = ["snapshot"];
162
- // -i for interactive elements only (reduces tokens)
163
- if (options.interactive !== false) {
164
- args.push("-i");
165
- }
166
- // -c for compact output
167
- if (options.compact) {
168
- args.push("-c");
169
- }
170
- const output = await execAgentBrowser(args, options);
171
- // Parse the JSON output to extract elements
172
- const elements = [];
173
- try {
174
- const parsed = JSON.parse(output);
175
- if (parsed.success && parsed.data?.refs) {
176
- for (const [ref, info] of Object.entries(parsed.data.refs)) {
177
- const refInfo = info;
178
- elements.push({
179
- ref: `@${ref}`,
180
- role: refInfo.role || "unknown",
181
- name: refInfo.name,
182
- text: refInfo.text
183
- });
184
- }
185
- }
186
- return { elements, raw: parsed.data?.snapshot || output };
187
- }
188
- catch {
189
- // Fallback to text parsing if JSON fails
190
- const refPattern = /@(\w+)\s+(\w+)(?:\s+"([^"]*)")?/g;
191
- const matches = output.matchAll(refPattern);
192
- for (const match of matches) {
193
- elements.push({
194
- ref: `@${match[1]}`,
195
- role: match[2],
196
- name: match[3]
197
- });
198
- }
199
- return { elements, raw: output };
200
- }
201
- }
202
- /**
203
- * Click an element by ref or selector
204
- */
205
- export async function click(target, options = {}) {
206
- try {
207
- const output = await execAgentBrowser(["click", target], options);
208
- return { success: true, output };
209
- }
210
- catch (error) {
211
- return {
212
- success: false,
213
- error: error instanceof Error ? error.message : String(error)
214
- };
215
- }
216
- }
217
- /**
218
- * Type text into the focused element
219
- */
220
- export async function type(text, options = {}) {
221
- try {
222
- const output = await execAgentBrowser(["keyboard", "type", text], options);
223
- return { success: true, output };
224
- }
225
- catch (error) {
226
- return {
227
- success: false,
228
- error: error instanceof Error ? error.message : String(error)
229
- };
230
- }
231
- }
232
- /**
233
- * Fill an input field (by ref or selector)
234
- */
235
- export async function fill(target, value, options = {}) {
236
- try {
237
- const output = await execAgentBrowser(["fill", target, value], options);
238
- return { success: true, output };
239
- }
240
- catch (error) {
241
- return {
242
- success: false,
243
- error: error instanceof Error ? error.message : String(error)
244
- };
245
- }
246
- }
247
- /**
248
- * Scroll the page
249
- */
250
- export async function scroll(direction, amount, options = {}) {
251
- try {
252
- const args = ["scroll", direction];
253
- if (amount) {
254
- args.push(String(amount));
255
- }
256
- const output = await execAgentBrowser(args, options);
257
- return { success: true, output };
258
- }
259
- catch (error) {
260
- return {
261
- success: false,
262
- error: error instanceof Error ? error.message : String(error)
263
- };
264
- }
265
- }
266
- /**
267
- * Take a screenshot
268
- */
269
- export async function screenshot(outputPath, options = {}) {
270
- try {
271
- // Ensure output directory exists
272
- const dir = dirname(outputPath);
273
- if (!existsSync(dir)) {
274
- mkdirSync(dir, { recursive: true });
275
- }
276
- const args = ["screenshot", outputPath];
277
- if (options.fullPage) {
278
- args.push("--full");
279
- }
280
- await execAgentBrowser(args, options);
281
- return { success: true, path: outputPath };
282
- }
283
- catch (error) {
284
- return {
285
- success: false,
286
- error: error instanceof Error ? error.message : String(error)
287
- };
288
- }
289
- }
290
- /**
291
- * Get console messages from the browser
292
- */
293
- export async function getConsoleMessages(options = {}) {
294
- try {
295
- const output = await execAgentBrowser(["console"], options);
296
- // Parse JSON output
297
- const parsed = JSON.parse(output);
298
- return Array.isArray(parsed) ? parsed : [];
299
- }
300
- catch {
301
- return [];
302
- }
303
- }
304
- /**
305
- * Get page errors
306
- */
307
- export async function getErrors(options = {}) {
308
- try {
309
- const output = await execAgentBrowser(["errors"], options);
310
- const parsed = JSON.parse(output);
311
- return Array.isArray(parsed) ? parsed : [];
312
- }
313
- catch {
314
- return [];
315
- }
316
- }
317
- /**
318
- * Navigate back
319
- */
320
- export async function back(options = {}) {
321
- try {
322
- const output = await execAgentBrowser(["back"], options);
323
- return { success: true, output };
324
- }
325
- catch (error) {
326
- return {
327
- success: false,
328
- error: error instanceof Error ? error.message : String(error)
329
- };
330
- }
331
- }
332
- /**
333
- * Navigate forward
334
- */
335
- export async function forward(options = {}) {
336
- try {
337
- const output = await execAgentBrowser(["forward"], options);
338
- return { success: true, output };
339
- }
340
- catch (error) {
341
- return {
342
- success: false,
343
- error: error instanceof Error ? error.message : String(error)
344
- };
345
- }
346
- }
347
- /**
348
- * Reload the page
349
- */
350
- export async function reload(options = {}) {
351
- try {
352
- const output = await execAgentBrowser(["reload"], options);
353
- return { success: true, output };
354
- }
355
- catch (error) {
356
- return {
357
- success: false,
358
- error: error instanceof Error ? error.message : String(error)
359
- };
360
- }
361
- }
362
- /**
363
- * Close the browser
364
- */
365
- export async function close(options = {}) {
366
- try {
367
- const output = await execAgentBrowser(["close"], options);
368
- return { success: true, output };
369
- }
370
- catch (error) {
371
- return {
372
- success: false,
373
- error: error instanceof Error ? error.message : String(error)
374
- };
375
- }
376
- }
377
- /**
378
- * Get the current URL
379
- */
380
- export async function getCurrentUrl(options = {}) {
381
- try {
382
- const output = await execAgentBrowser(["get", "url"], options);
383
- return output.trim();
384
- }
385
- catch {
386
- return null;
387
- }
388
- }
389
- /**
390
- * Get page title
391
- */
392
- export async function getTitle(options = {}) {
393
- try {
394
- const output = await execAgentBrowser(["get", "title"], options);
395
- return output.trim();
396
- }
397
- catch {
398
- return null;
399
- }
400
- }
401
- /**
402
- * Evaluate JavaScript in the browser
403
- */
404
- export async function evaluate(expression, options = {}) {
405
- try {
406
- const output = await execAgentBrowser(["eval", expression], options);
407
- return { success: true, output };
408
- }
409
- catch (error) {
410
- return {
411
- success: false,
412
- error: error instanceof Error ? error.message : String(error)
413
- };
414
- }
415
- }
416
- /**
417
- * Wait for an element to appear
418
- */
419
- export async function waitFor(selector, options = {}) {
420
- try {
421
- const args = ["wait", selector];
422
- if (options.timeout) {
423
- args.push("--timeout", String(options.timeout));
424
- }
425
- const output = await execAgentBrowser(args, options);
426
- return { success: true, output };
427
- }
428
- catch (error) {
429
- return {
430
- success: false,
431
- error: error instanceof Error ? error.message : String(error)
432
- };
433
- }
434
- }
435
- /**
436
- * Check if agent-browser is installed and accessible
437
- */
438
- export function isAgentBrowserAvailable() {
439
- try {
440
- const agentBrowserPath = getAgentBrowserPath();
441
- // agent-browser doesn't have --version, just check if the binary exists and responds to --help
442
- const result = spawnSync(agentBrowserPath, ["--help"], {
443
- stdio: "pipe",
444
- shell: false
445
- });
446
- return result.status === 0;
447
- }
448
- catch {
449
- return false;
450
- }
451
- }
452
- /**
453
- * Get agent-browser path for debugging
454
- */
91
+ /** Resolve the installed browser helper for the runtime-owned CDP session. */
455
92
  export function getAgentBrowserBinaryPath() {
456
93
  return getAgentBrowserPath();
457
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-browser.js","sourceRoot":"","sources":["../../src/utils/agent-browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-browser.js","sourceRoot":"","sources":["../../src/utils/agent-browser.ts"],"names":[],"mappings":"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"}
@@ -21,13 +21,13 @@ export declare function getProjectDisplayName(cwd?: string): string;
21
21
  * Prefers the readable name (`my-app` -> https://my-app.localhost). The
22
22
  * path-hashed name is only used when that hostname is already held by another
23
23
  * project, so two checkouts with the same name can still run side by side.
24
- * The data directory (Chrome profile, logs) stays keyed by the hashed name
24
+ * The data directory (Chrome profile, session discovery) stays keyed by the hashed name
25
25
  * either way, so switching hostnames never shares or loses a profile.
26
26
  */
27
27
  export declare function getPortlessName(cwd?: string, isHostnameHeld?: (name: string) => boolean): string;
28
28
  /**
29
29
  * Get the d3k data directory for a project
30
- * All project-specific files are stored here: logs, chrome profile, skills, session info
30
+ * Project browser profiles and session discovery are stored here
31
31
  * Structure: ~/.d3k/{projectName}/
32
32
  *
33
33
  * Honors D3K_DATA_DIR as a full override of the computed project directory.
@@ -119,7 +119,7 @@ export function getProjectDisplayName(cwd = process.cwd()) {
119
119
  * Prefers the readable name (`my-app` -> https://my-app.localhost). The
120
120
  * path-hashed name is only used when that hostname is already held by another
121
121
  * project, so two checkouts with the same name can still run side by side.
122
- * The data directory (Chrome profile, logs) stays keyed by the hashed name
122
+ * The data directory (Chrome profile, session discovery) stays keyed by the hashed name
123
123
  * either way, so switching hostnames never shares or loses a profile.
124
124
  */
125
125
  export function getPortlessName(cwd = process.cwd(), isHostnameHeld = () => false) {
@@ -128,7 +128,7 @@ export function getPortlessName(cwd = process.cwd(), isHostnameHeld = () => fals
128
128
  }
129
129
  /**
130
130
  * Get the d3k data directory for a project
131
- * All project-specific files are stored here: logs, chrome profile, skills, session info
131
+ * Project browser profiles and session discovery are stored here
132
132
  * Structure: ~/.d3k/{projectName}/
133
133
  *
134
134
  * Honors D3K_DATA_DIR as a full override of the computed project directory.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dev3000",
3
- "version": "0.0.186",
3
+ "version": "0.0.188",
4
4
  "description": "Agent-first local web debugging runtime with unified server and browser context",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -12,12 +12,11 @@
12
12
  "files": [
13
13
  "bin/",
14
14
  "dist/",
15
- "src/tui-interface-impl.tsx",
16
15
  "README.md",
17
16
  "skills/d3k/"
18
17
  ],
19
18
  "scripts": {
20
- "build": "./node_modules/@typescript/native/bin/tsc && mkdir -p dist/src && cp src/loading.html dist/src/ && cp src/tui-interface-impl.tsx dist/src/ && mkdir -p dist/skills && cp -r src/skills/d3k dist/skills/",
19
+ "build": "./node_modules/@typescript/native/bin/tsc && mkdir -p dist/src && cp src/loading.html dist/src/",
21
20
  "typegen": "./scripts/typegen.sh",
22
21
  "typecheck": "./node_modules/@typescript/native/bin/tsc --noEmit && bun run --filter '*' typecheck",
23
22
  "format": "biome format --write .",
@@ -41,30 +40,21 @@
41
40
  "claude"
42
41
  ],
43
42
  "dependencies": {
44
- "@opentui/core": "0.5.17",
45
- "agent-browser": "0.38.2",
46
- "chalk": "^6.0.1",
43
+ "@vercel/sandbox": "^3.9.0",
44
+ "agent-browser": "0.39.2",
47
45
  "commander": "15.0.0",
48
- "ink": "8.0.0",
49
- "ink-select-input": "^6.2.0",
50
- "ink-spinner": "^5.0.0",
51
- "ora": "9.4.1",
52
- "package-manager-detector": "^1.9.0",
53
- "portless": "0.15.7",
54
- "react": "19.3.0",
46
+ "portless": "0.15.12",
55
47
  "ws": "^8.22.0"
56
48
  },
57
49
  "devDependencies": {
58
- "@biomejs/biome": "2.5.15",
59
- "@types/node": "26.6.4",
60
- "@types/react": "19.3.0",
50
+ "@biomejs/biome": "2.6.3",
51
+ "@types/node": "26.6.5",
61
52
  "@types/ws": "^8.18.2",
62
53
  "@typescript/native": "npm:typescript@^7.0.2",
63
54
  "husky": "^9.1.7",
64
- "react-devtools-core": "8.0.0",
65
55
  "tsx": "^4.23.15",
66
56
  "typescript": "^7.0.2",
67
- "vitest": "5.0.3"
57
+ "vitest": "5.0.5"
68
58
  },
69
59
  "engines": {
70
60
  "node": ">=24.0.0"
@@ -81,18 +71,19 @@
81
71
  ],
82
72
  "overrides": {
83
73
  "@xhmikosr/decompress": "11.1.4",
84
- "body-parser": "2.3.0",
74
+ "body-parser": "2.4.0",
85
75
  "defu": "6.1.7",
86
76
  "devalue": "5.9.4",
87
77
  "linkify-it": "6.1.0",
88
78
  "nanoid": "5.1.16",
89
79
  "path-to-regexp": "8.4.2",
90
80
  "piscina": "5.3.2",
91
- "postcss": "8.5.29",
81
+ "postcss": "8.5.32",
92
82
  "qs": "6.16.0",
93
83
  "rollup": "4.64.3",
94
84
  "seroval": "1.6.9",
95
- "vite": "8.3.4",
96
- "yauzl": "3.4.0"
85
+ "vite": "8.3.5",
86
+ "yauzl": "3.4.0",
87
+ "zod": "4.6.7"
97
88
  }
98
89
  }
@@ -12,7 +12,7 @@ Use `node <skill-directory>/scripts/runtime.mjs` as `runtime` below, from the **
12
12
  ## Prepare
13
13
 
14
14
  1. Run `runtime portless status`. Canonical HTTPS must be ready (`canonical: true`, `serviceInstalled: true`, `setupRequired: false`) before starting the app or browser. If needed run `runtime portless setup`, wait for the one-time administrator authorization, then check again. Stop if setup is unavailable; never silently substitute direct localhost.
15
- 2. Run `runtime status`. Reuse a ready runtime for this project. If it is starting, wait for readiness. Do not start another dev server. A legacy d3k session must be stopped before switching runtimes.
15
+ 2. Run `runtime status`. Reuse a ready runtime for this project. If it is starting, wait for readiness. Do not start another dev server.
16
16
  3. Start `runtime start` in a retained background tool session. Keep its process handle. The runtime detects the package manager and `dev` script; use `--command '<dev command>'` when needed. Poll `runtime status` until `ready: true` and `browserConnected: true` with a port-free `https://...localhost` URL. Inspect `runtime events` if startup fails while the runtime is still alive, and the retained process output if it exits.
17
17
 
18
18
  ## Reproduce and inspect
@@ -30,3 +30,25 @@ Use `node <skill-directory>/scripts/runtime.mjs` as `runtime` below, from the **
30
30
  Keep the runtime's project-stable profile for sign-in state. Use `--headless` for CI or when requested; `--servers-only` deliberately omits the browser. Automatic screenshots and persistent log files are off; request a screenshot through `runtime browser screenshot <absolute-path>` when visual evidence is needed.
31
31
 
32
32
  Stop with `runtime stop` or the retained process handle when asked. Leaving the browser open for user testing means leaving the runtime alive. Events are lost when it exits; only profile and session discovery data persist. Console/server text may contain application secrets; inspect selectively and avoid copying sensitive values into reports.
33
+
34
+ ## Vercel Sandbox with local Chrome
35
+
36
+ For a remote project with no local checkout, run `runtime sandbox --project <name-or-id> --scope <team> --name <sandbox-name> --no-shell` on the laptop in a retained background session. The launcher requires Vercel CLI login, Bun, Node.js 24+, and macOS. d3k downloads Chrome for Testing automatically on first use and reuses it afterward. It creates a sandbox from the project's linked public GitHub repository, pulls Development env through Vercel CLI, installs dependencies, and starts the remote skill runtime. For a private repository, use `--attach <name>` with an existing sandbox that already contains the checkout. Private-repository access must be configured separately. Do not supply GitHub or Vercel management tokens to the app environment.
37
+
38
+ The app uses `https://<project>.d3k.localhost`; `--hostname songbook` selects `https://songbook.d3k.localhost`. Canonical Portless is required on the laptop before launch, with no Portless inside the VM. A loopback streaming proxy forwards verified HTTPS app traffic and a session token to the sandbox. Add the exact local auth callback URL to the provider allowlist. The laptop companion opens a dedicated local Chrome and maintains an authenticated outbound WSS bridge; project source and dev compute stay remote. Dev commands must honor `PORT`. Keep the companion alive throughout debugging.
39
+
40
+ Run status, browser, events, and stop commands **inside the sandbox's project directory**, using `/tmp/d3k-tools/node_modules/.bin/d3k-runtime`. For example, use `vercel sandbox exec <name> --project <project-id> --scope <team> --workdir <remote-project-root> -- /tmp/d3k-tools/node_modules/.bin/d3k-runtime browser snapshot -i`. Supply a fresh project OIDC token obtained from `vercel project token <project-id> --scope <team> --format json` as the CLI process's `VERCEL_OIDC_TOKEN` environment variable if needed; capture it without printing it or putting it in command arguments. The interactive launcher handles this authentication automatically. Read the remote `status` before driving Chrome and reuse that runtime; do not start another runtime or browser. An interactive `d3k --project team/project` (or `d3k sandbox`) enters the remote project directory and adds tools to PATH. Type `fx` there after authenticating the harness in the sandbox; d3k installs fx if absent but does not provision Gateway keys or forward laptop credentials. `--no-fx` skips installation. Project processes share the harness identity, so manually configured credentials are accessible to project code. Without a TTY, use `vercel sandbox exec` or `vercel sandbox connect` separately. All remote harnesses need their own authentication. The interactive shell does not inherit app env automatically.
41
+
42
+ App traffic streams through the local proxy to the sandbox, preserving the browser origin, redirects, cookies, and WebSockets. Batch browser operations to reduce CDP round trips, select a nearby sandbox region, and avoid continuous screenshots. HMR works through the in-VM proxy. A bridge disconnect records an evidence gap and closes pending channels without replaying commands; reread status and reproduce after reconnecting before claiming complete evidence.
43
+
44
+ Stopping the local launcher stops its runtime and a sandbox it created while preserving the sandbox filesystem. `--attach` leaves the existing VM running. The sandbox agent can control the dedicated Chrome profile, and the public sandbox app endpoint requires the companion session token; application authentication remains the app's responsibility. Keep agent credentials separate from infrastructure credentials; never describe remote browser control as adding no security risk.
45
+
46
+ ## CLI aliases and evidence views
47
+
48
+ `d3k`, `dev3000`, and `d3k-runtime` use the same implementation. Local startup is `start`; root options are for sandbox mode. Timeout flags use milliseconds. `logs --count <1..500> --type server|browser|runtime|all` and `errors --context` read recent events from the same live timeline; use `--json` to retain evidence-gap metadata. Prefer cursor-based `events` for reproductions. The runtime does not install agent packages, write log files, or automatically upgrade. Use `browser` rather than the removed `agent-browser` subcommand.
49
+
50
+ Sandbox resume: `d3k --resume` lists locally saved session IDs, projects, sandbox names, branches, URLs, and last-used times. `d3k --resume <id>` restores that sandbox checkout and hostname, refreshes Development env and dependencies, restarts the dev runtime, and pairs the retained browser profile using fresh bridge/proxy tokens. No repository checkout is needed on the laptop. Ctrl-C closes the browser and prints the resume command to stdout. Saved entries contain discovery metadata, not credentials or past terminal output; remote availability is checked on resume. Optional `--command`, `--hostname`, `--timeout`, `--no-shell`, `--no-fx`, and `--headless` override launch settings. Sandboxes originally created by d3k stop compute again on resumed exit; externally attached sandboxes remain running.
51
+
52
+ Use `d3k start --harness codex` locally or `d3k --project my-team/my-project --harness fx` remotely to launch a coding harness after readiness. The supported choices are `fx`, `codex`, and `claude`; commands, paths, and extra arguments are rejected. An interactive terminal is required, and exiting the harness closes a session started by that invocation. Harnesses must already be installed and authenticated, except for existing sandbox fx setup. Codex/Claude receive a prompt to read the bundled d3k skill and reuse the runtime; fx receives a temporary skill context through `--add-dir` (its interactive CLI has no startup prompt). No project instruction files are overwritten. Local harnesses use local credentials; sandbox fx can use the temporary team Gateway key. `--resume <id>` remembers the harness choice.
53
+
54
+ Sandbox Chrome and its children run under macOS filesystem confinement. Do not bypass it or substitute an unrestricted browser. The outer policy replaces Chrome's inner sandbox because macOS cannot nest them. Only Chrome, required system files, and the dedicated profile and temporary files are readable; unrelated laptop files are denied. The profile uses a local password store rather than the laptop keychain. Browser sessions remain accessible to sandbox automation. Other platforms fail closed until equivalent isolation is available.
@@ -1,12 +0,0 @@
1
- /**
2
- * d3k crawl - Discover URLs by crawling the app
3
- *
4
- * Uses agent-browser to navigate the app and discover all linked pages.
5
- * Outputs a list of discovered URLs.
6
- */
7
- export interface CrawlOptions {
8
- depth?: string;
9
- limit?: string;
10
- }
11
- export declare function crawlApp(options: CrawlOptions): Promise<void>;
12
- //# sourceMappingURL=crawl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crawl.d.ts","sourceRoot":"","sources":["../../src/commands/crawl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAmBD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFnE"}