dev3000 0.0.185 ā 0.0.187
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 +102 -13
- package/bin/dev3000 +1 -2
- package/dist/cdp-monitor.d.ts +7 -12
- package/dist/cdp-monitor.d.ts.map +1 -1
- package/dist/cdp-monitor.js +86 -170
- package/dist/cdp-monitor.js.map +1 -1
- package/dist/cli.d.ts +1 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -1369
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/portless.d.ts +10 -0
- package/dist/portless.d.ts.map +1 -1
- package/dist/portless.js +44 -1
- package/dist/portless.js.map +1 -1
- package/dist/runtime/bridge.d.ts +26 -0
- package/dist/runtime/bridge.d.ts.map +1 -0
- package/dist/runtime/bridge.js +340 -0
- package/dist/runtime/bridge.js.map +1 -0
- package/dist/runtime/chrome-isolation.d.ts +16 -0
- package/dist/runtime/chrome-isolation.d.ts.map +1 -0
- package/dist/runtime/chrome-isolation.js +97 -0
- package/dist/runtime/chrome-isolation.js.map +1 -0
- package/dist/runtime/cli.js +116 -26
- package/dist/runtime/cli.js.map +1 -1
- package/dist/runtime/event-views.d.ts +21 -0
- package/dist/runtime/event-views.d.ts.map +1 -0
- package/dist/runtime/event-views.js +53 -0
- package/dist/runtime/event-views.js.map +1 -0
- package/dist/runtime/harness.d.ts +16 -0
- package/dist/runtime/harness.d.ts.map +1 -0
- package/dist/runtime/harness.js +68 -0
- package/dist/runtime/harness.js.map +1 -0
- package/dist/runtime/local-proxy.d.ts +12 -0
- package/dist/runtime/local-proxy.d.ts.map +1 -0
- package/dist/runtime/local-proxy.js +114 -0
- package/dist/runtime/local-proxy.js.map +1 -0
- package/dist/runtime/runtime.d.ts +14 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +82 -21
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/sandbox-agent.d.ts +6 -0
- package/dist/runtime/sandbox-agent.d.ts.map +1 -0
- package/dist/runtime/sandbox-agent.js +35 -0
- package/dist/runtime/sandbox-agent.js.map +1 -0
- package/dist/runtime/sandbox-command.d.ts +9 -0
- package/dist/runtime/sandbox-command.d.ts.map +1 -0
- package/dist/runtime/sandbox-command.js +101 -0
- package/dist/runtime/sandbox-command.js.map +1 -0
- package/dist/runtime/sandbox-proxy.d.ts +11 -0
- package/dist/runtime/sandbox-proxy.d.ts.map +1 -0
- package/dist/runtime/sandbox-proxy.js +123 -0
- package/dist/runtime/sandbox-proxy.js.map +1 -0
- package/dist/runtime/sandbox-sessions.d.ts +31 -0
- package/dist/runtime/sandbox-sessions.d.ts.map +1 -0
- package/dist/runtime/sandbox-sessions.js +102 -0
- package/dist/runtime/sandbox-sessions.js.map +1 -0
- package/dist/runtime/sandbox.d.ts +21 -0
- package/dist/runtime/sandbox.d.ts.map +1 -0
- package/dist/runtime/sandbox.js +481 -0
- package/dist/runtime/sandbox.js.map +1 -0
- package/dist/utils/agent-browser.d.ts +2 -120
- package/dist/utils/agent-browser.d.ts.map +1 -1
- package/dist/utils/agent-browser.js +13 -376
- package/dist/utils/agent-browser.js.map +1 -1
- package/dist/utils/project-name.d.ts +11 -1
- package/dist/utils/project-name.d.ts.map +1 -1
- package/dist/utils/project-name.js +14 -1
- package/dist/utils/project-name.js.map +1 -1
- package/package.json +13 -22
- package/skills/d3k/SKILL.md +23 -1
- package/dist/commands/crawl.d.ts +0 -12
- package/dist/commands/crawl.d.ts.map +0 -1
- package/dist/commands/crawl.js +0 -101
- package/dist/commands/crawl.js.map +0 -1
- package/dist/commands/errors.d.ts +0 -14
- package/dist/commands/errors.d.ts.map +0 -1
- package/dist/commands/errors.js +0 -246
- package/dist/commands/errors.js.map +0 -1
- package/dist/commands/fix.d.ts +0 -13
- package/dist/commands/fix.d.ts.map +0 -1
- package/dist/commands/fix.js +0 -219
- package/dist/commands/fix.js.map +0 -1
- package/dist/commands/logs.d.ts +0 -13
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -146
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/resume.d.ts +0 -11
- package/dist/commands/resume.d.ts.map +0 -1
- package/dist/commands/resume.js +0 -75
- package/dist/commands/resume.js.map +0 -1
- package/dist/commands/status.d.ts +0 -21
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -44
- package/dist/commands/status.js.map +0 -1
- package/dist/components/AgentSelector.d.ts +0 -12
- package/dist/components/AgentSelector.d.ts.map +0 -1
- package/dist/components/AgentSelector.js +0 -99
- package/dist/components/AgentSelector.js.map +0 -1
- package/dist/components/PackageSelector.d.ts +0 -13
- package/dist/components/PackageSelector.d.ts.map +0 -1
- package/dist/components/PackageSelector.js +0 -79
- package/dist/components/PackageSelector.js.map +0 -1
- package/dist/constants/log-colors.d.ts +0 -43
- package/dist/constants/log-colors.d.ts.map +0 -1
- package/dist/constants/log-colors.js +0 -59
- package/dist/constants/log-colors.js.map +0 -1
- package/dist/dev-environment.d.ts +0 -187
- package/dist/dev-environment.d.ts.map +0 -1
- package/dist/dev-environment.js +0 -2248
- package/dist/dev-environment.js.map +0 -1
- package/dist/screencast-manager.d.ts +0 -78
- package/dist/screencast-manager.d.ts.map +0 -1
- package/dist/screencast-manager.js +0 -529
- package/dist/screencast-manager.js.map +0 -1
- package/dist/services/parsers/error-detectors/base.d.ts +0 -24
- package/dist/services/parsers/error-detectors/base.d.ts.map +0 -1
- package/dist/services/parsers/error-detectors/base.js +0 -44
- package/dist/services/parsers/error-detectors/base.js.map +0 -1
- package/dist/services/parsers/error-detectors/index.d.ts +0 -6
- package/dist/services/parsers/error-detectors/index.d.ts.map +0 -1
- package/dist/services/parsers/error-detectors/index.js +0 -6
- package/dist/services/parsers/error-detectors/index.js.map +0 -1
- package/dist/services/parsers/error-detectors/nextjs.d.ts +0 -9
- package/dist/services/parsers/error-detectors/nextjs.d.ts.map +0 -1
- package/dist/services/parsers/error-detectors/nextjs.js +0 -52
- package/dist/services/parsers/error-detectors/nextjs.js.map +0 -1
- package/dist/services/parsers/index.d.ts +0 -9
- package/dist/services/parsers/index.d.ts.map +0 -1
- package/dist/services/parsers/index.js +0 -10
- package/dist/services/parsers/index.js.map +0 -1
- package/dist/services/parsers/log-parsers/base.d.ts +0 -26
- package/dist/services/parsers/log-parsers/base.d.ts.map +0 -1
- package/dist/services/parsers/log-parsers/base.js +0 -6
- package/dist/services/parsers/log-parsers/base.js.map +0 -1
- package/dist/services/parsers/log-parsers/index.d.ts +0 -6
- package/dist/services/parsers/log-parsers/index.d.ts.map +0 -1
- package/dist/services/parsers/log-parsers/index.js +0 -5
- package/dist/services/parsers/log-parsers/index.js.map +0 -1
- package/dist/services/parsers/log-parsers/standard.d.ts +0 -9
- package/dist/services/parsers/log-parsers/standard.d.ts.map +0 -1
- package/dist/services/parsers/log-parsers/standard.js +0 -17
- package/dist/services/parsers/log-parsers/standard.js.map +0 -1
- package/dist/services/parsers/output-processor.d.ts +0 -39
- package/dist/services/parsers/output-processor.d.ts.map +0 -1
- package/dist/services/parsers/output-processor.js +0 -54
- package/dist/services/parsers/output-processor.js.map +0 -1
- package/dist/skills/d3k/internal-skill.md +0 -32
- package/dist/skills/index.d.ts +0 -54
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -214
- package/dist/skills/index.js.map +0 -1
- package/dist/src/tui-interface-impl.tsx +0 -644
- package/dist/tui-interface-impl.d.ts +0 -30
- package/dist/tui-interface-impl.d.ts.map +0 -1
- package/dist/tui-interface-impl.js +0 -403
- package/dist/tui-interface-impl.js.map +0 -1
- package/dist/tui-interface-opentui.d.ts +0 -33
- package/dist/tui-interface-opentui.d.ts.map +0 -1
- package/dist/tui-interface-opentui.js +0 -1128
- package/dist/tui-interface-opentui.js.map +0 -1
- package/dist/tui-interface.d.ts +0 -38
- package/dist/tui-interface.d.ts.map +0 -1
- package/dist/tui-interface.js +0 -84
- package/dist/tui-interface.js.map +0 -1
- package/dist/utils/agent-detection.d.ts +0 -17
- package/dist/utils/agent-detection.d.ts.map +0 -1
- package/dist/utils/agent-detection.js +0 -81
- package/dist/utils/agent-detection.js.map +0 -1
- package/dist/utils/agent-selection.d.ts +0 -25
- package/dist/utils/agent-selection.d.ts.map +0 -1
- package/dist/utils/agent-selection.js +0 -73
- package/dist/utils/agent-selection.js.map +0 -1
- package/dist/utils/browser-command-argv.d.ts +0 -19
- package/dist/utils/browser-command-argv.d.ts.map +0 -1
- package/dist/utils/browser-command-argv.js +0 -149
- package/dist/utils/browser-command-argv.js.map +0 -1
- package/dist/utils/build-version.d.ts +0 -2
- package/dist/utils/build-version.d.ts.map +0 -1
- package/dist/utils/build-version.js +0 -8
- package/dist/utils/build-version.js.map +0 -1
- package/dist/utils/cli-options.d.ts +0 -5
- package/dist/utils/cli-options.d.ts.map +0 -1
- package/dist/utils/cli-options.js +0 -36
- package/dist/utils/cli-options.js.map +0 -1
- package/dist/utils/d3k-dir.d.ts +0 -3
- package/dist/utils/d3k-dir.d.ts.map +0 -1
- package/dist/utils/d3k-dir.js +0 -12
- package/dist/utils/d3k-dir.js.map +0 -1
- package/dist/utils/d3k-skill-installer.d.ts +0 -4
- package/dist/utils/d3k-skill-installer.d.ts.map +0 -1
- package/dist/utils/d3k-skill-installer.js +0 -30
- package/dist/utils/d3k-skill-installer.js.map +0 -1
- package/dist/utils/log-filename.d.ts +0 -30
- package/dist/utils/log-filename.d.ts.map +0 -1
- package/dist/utils/log-filename.js +0 -60
- package/dist/utils/log-filename.js.map +0 -1
- package/dist/utils/project-detector.d.ts +0 -25
- package/dist/utils/project-detector.d.ts.map +0 -1
- package/dist/utils/project-detector.js +0 -153
- package/dist/utils/project-detector.js.map +0 -1
- package/dist/utils/project-metadata.d.ts +0 -4
- package/dist/utils/project-metadata.d.ts.map +0 -1
- package/dist/utils/project-metadata.js +0 -48
- package/dist/utils/project-metadata.js.map +0 -1
- package/dist/utils/repo-validate.d.ts +0 -2
- package/dist/utils/repo-validate.d.ts.map +0 -1
- package/dist/utils/repo-validate.js +0 -10
- package/dist/utils/repo-validate.js.map +0 -1
- package/dist/utils/session.d.ts +0 -19
- package/dist/utils/session.d.ts.map +0 -1
- package/dist/utils/session.js +0 -65
- package/dist/utils/session.js.map +0 -1
- package/dist/utils/skill-installer.d.ts +0 -65
- package/dist/utils/skill-installer.d.ts.map +0 -1
- package/dist/utils/skill-installer.js +0 -265
- package/dist/utils/skill-installer.js.map +0 -1
- package/dist/utils/timestamp.d.ts +0 -20
- package/dist/utils/timestamp.d.ts.map +0 -1
- package/dist/utils/timestamp.js +0 -57
- package/dist/utils/timestamp.js.map +0 -1
- package/dist/utils/tmux-helpers.d.ts +0 -36
- package/dist/utils/tmux-helpers.d.ts.map +0 -1
- package/dist/utils/tmux-helpers.js +0 -118
- package/dist/utils/tmux-helpers.js.map +0 -1
- package/dist/utils/user-config.d.ts +0 -12
- package/dist/utils/user-config.d.ts.map +0 -1
- package/dist/utils/user-config.js +0 -46
- package/dist/utils/user-config.js.map +0 -1
- package/dist/utils/version-check.d.ts +0 -52
- package/dist/utils/version-check.d.ts.map +0 -1
- package/dist/utils/version-check.js +0 -304
- package/dist/utils/version-check.js.map +0 -1
- package/src/tui-interface-impl.tsx +0 -644
|
@@ -113,9 +113,22 @@ export function getProjectDisplayName(cwd = process.cwd()) {
|
|
|
113
113
|
// Remove hash suffix if present
|
|
114
114
|
return fullName.replace(/-[a-f0-9]{6}$/, "");
|
|
115
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Name to register with Portless, i.e. the app's https://<name>.localhost host.
|
|
118
|
+
*
|
|
119
|
+
* Prefers the readable name (`my-app` -> https://my-app.localhost). The
|
|
120
|
+
* path-hashed name is only used when that hostname is already held by another
|
|
121
|
+
* project, so two checkouts with the same name can still run side by side.
|
|
122
|
+
* The data directory (Chrome profile, session discovery) stays keyed by the hashed name
|
|
123
|
+
* either way, so switching hostnames never shares or loses a profile.
|
|
124
|
+
*/
|
|
125
|
+
export function getPortlessName(cwd = process.cwd(), isHostnameHeld = () => false) {
|
|
126
|
+
const displayName = getProjectDisplayName(cwd);
|
|
127
|
+
return displayName && !isHostnameHeld(displayName) ? displayName : getProjectName(cwd);
|
|
128
|
+
}
|
|
116
129
|
/**
|
|
117
130
|
* Get the d3k data directory for a project
|
|
118
|
-
*
|
|
131
|
+
* Project browser profiles and session discovery are stored here
|
|
119
132
|
* Structure: ~/.d3k/{projectName}/
|
|
120
133
|
*
|
|
121
134
|
* Honors D3K_DATA_DIR as a full override of the computed project directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-name.js","sourceRoot":"","sources":["../../src/utils/project-name.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project-name.js","sourceRoot":"","sources":["../../src/utils/project-name.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dev3000",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.187",
|
|
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/
|
|
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
|
-
"@
|
|
45
|
-
"agent-browser": "0.
|
|
46
|
-
"chalk": "^6.0.1",
|
|
43
|
+
"@vercel/sandbox": "^3.9.0",
|
|
44
|
+
"agent-browser": "0.39.2",
|
|
47
45
|
"commander": "15.0.0",
|
|
48
|
-
"
|
|
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.
|
|
59
|
-
"@types/node": "26.6.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
96
|
-
"yauzl": "3.4.0"
|
|
85
|
+
"vite": "8.3.5",
|
|
86
|
+
"yauzl": "3.4.0",
|
|
87
|
+
"zod": "4.6.7"
|
|
97
88
|
}
|
|
98
89
|
}
|
package/skills/d3k/SKILL.md
CHANGED
|
@@ -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.
|
|
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+, macOS, and Chrome for Testing (`bunx agent-browser install`). 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.
|
package/dist/commands/crawl.d.ts
DELETED
|
@@ -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"}
|
package/dist/commands/crawl.js
DELETED
|
@@ -1,101 +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
|
-
import { spawnSync } from "node:child_process";
|
|
8
|
-
import chalk from "chalk";
|
|
9
|
-
import { findCurrentSession } from "../utils/session.js";
|
|
10
|
-
function runAgentBrowser(args) {
|
|
11
|
-
try {
|
|
12
|
-
const result = spawnSync("d3k", ["agent-browser", ...args], {
|
|
13
|
-
encoding: "utf-8",
|
|
14
|
-
timeout: 30000
|
|
15
|
-
});
|
|
16
|
-
if (result.status === 0) {
|
|
17
|
-
return { success: true, output: result.stdout || "" };
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
return { success: false, output: result.stderr || result.stdout || "Unknown error" };
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
return { success: false, output: error instanceof Error ? error.message : String(error) };
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
export async function crawlApp(options) {
|
|
28
|
-
const maxDepth = options.depth === "all" ? 10 : parseInt(options.depth || "1", 10);
|
|
29
|
-
const limitPerPage = parseInt(options.limit || "3", 10);
|
|
30
|
-
const session = findCurrentSession();
|
|
31
|
-
if (!session) {
|
|
32
|
-
console.log(chalk.red("ā No active d3k sessions found."));
|
|
33
|
-
console.log(chalk.gray("Make sure d3k is running first."));
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
const appPort = session.appPort || "3000";
|
|
37
|
-
const baseUrl = session.publicUrl || `http://localhost:${appPort}`;
|
|
38
|
-
console.log(chalk.cyan(`š·ļø Crawling ${baseUrl}`));
|
|
39
|
-
console.log(chalk.gray(` Depth: ${options.depth === "all" ? "exhaustive" : maxDepth}`));
|
|
40
|
-
console.log(chalk.gray(` Links per page: ${limitPerPage}`));
|
|
41
|
-
console.log();
|
|
42
|
-
const discoveredUrls = new Set([baseUrl]);
|
|
43
|
-
const visitedUrls = new Set();
|
|
44
|
-
const urlsToVisit = [{ url: baseUrl, depth: 0 }];
|
|
45
|
-
while (urlsToVisit.length > 0) {
|
|
46
|
-
const item = urlsToVisit.shift();
|
|
47
|
-
if (!item)
|
|
48
|
-
continue;
|
|
49
|
-
const { url, depth } = item;
|
|
50
|
-
if (visitedUrls.has(url) || depth > maxDepth) {
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
visitedUrls.add(url);
|
|
54
|
-
console.log(chalk.gray(` Visiting: ${url}`));
|
|
55
|
-
// Navigate to the URL
|
|
56
|
-
const navResult = runAgentBrowser(["open", url]);
|
|
57
|
-
if (!navResult.success) {
|
|
58
|
-
console.log(chalk.yellow(` ā ļø Failed to navigate: ${navResult.output.slice(0, 100)}`));
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
// Wait for page to load
|
|
62
|
-
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
63
|
-
// Extract links using eval
|
|
64
|
-
const evalResult = runAgentBrowser([
|
|
65
|
-
"eval",
|
|
66
|
-
`JSON.stringify(Array.from(document.querySelectorAll('a[href]')).map(a => a.href).filter(href => href.startsWith(window.location.origin)).slice(0, ${limitPerPage}))`
|
|
67
|
-
]);
|
|
68
|
-
if (evalResult.success) {
|
|
69
|
-
try {
|
|
70
|
-
// Parse the JSON output from agent-browser
|
|
71
|
-
const output = evalResult.output.trim();
|
|
72
|
-
// Extract JSON from potential wrapper
|
|
73
|
-
const jsonMatch = output.match(/\[.*\]/s);
|
|
74
|
-
if (jsonMatch) {
|
|
75
|
-
const links = JSON.parse(jsonMatch[0]);
|
|
76
|
-
for (const link of links) {
|
|
77
|
-
// Normalize URL (remove query params and hash for deduplication)
|
|
78
|
-
const normalized = link.split("?")[0].split("#")[0];
|
|
79
|
-
if (!discoveredUrls.has(normalized)) {
|
|
80
|
-
discoveredUrls.add(normalized);
|
|
81
|
-
urlsToVisit.push({ url: normalized, depth: depth + 1 });
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
// Failed to parse links, continue
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
console.log();
|
|
92
|
-
console.log(chalk.green(`ā
Crawl complete!`));
|
|
93
|
-
console.log();
|
|
94
|
-
console.log(chalk.cyan(`Discovered ${discoveredUrls.size} URLs:`));
|
|
95
|
-
Array.from(discoveredUrls)
|
|
96
|
-
.sort()
|
|
97
|
-
.forEach((url) => {
|
|
98
|
-
console.log(` ⢠${url}`);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=crawl.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../src/commands/crawl.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAOxD,SAAS,eAAe,CAAC,IAAc;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC,EAAE;YAC1D,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;SACf,CAAC,CAAA;QAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAA;QACvD,CAAC;aAAM,CAAC;YACN,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,eAAe,EAAE,CAAA;QACtF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAA;IAC3F,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAqB;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAClF,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAA;IAEvD,MAAM,OAAO,GAAG,kBAAkB,EAAE,CAAA;IAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAA;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAA;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAA;IACzC,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,IAAI,oBAAoB,OAAO,EAAE,CAAA;IAElE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC,CAAA;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,YAAY,EAAE,CAAC,CAAC,CAAA;IAC7D,OAAO,CAAC,GAAG,EAAE,CAAA;IAEb,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IACjD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAA;IACrC,MAAM,WAAW,GAA0C,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IAEvF,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,CAAA;QAChC,IAAI,CAAC,IAAI;YAAE,SAAQ;QACnB,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAA;QAE3B,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YAC7C,SAAQ;QACV,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAA;QAE7C,sBAAsB;QACtB,MAAM,SAAS,GAAG,eAAe,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;QAChD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;YACzF,SAAQ;QACV,CAAC;QAED,wBAAwB;QACxB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QAEzD,2BAA2B;QAC3B,MAAM,UAAU,GAAG,eAAe,CAAC;YACjC,MAAM;YACN,qJAAqJ,YAAY,IAAI;SACtK,CAAC,CAAA;QAEF,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,2CAA2C;gBAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;gBACvC,sCAAsC;gBACtC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;gBACzC,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAa,CAAA;oBAElD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,iEAAiE;wBACjE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;wBACnD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;4BACpC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;4BAC9B,WAAW,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAA;wBACzD,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAA;IAC7C,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,cAAc,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAA;IAClE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;SACvB,IAAI,EAAE;SACN,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACf,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* d3k errors - Quick view of recent errors from d3k logs
|
|
3
|
-
*
|
|
4
|
-
* Shows the most recent errors from both browser and server logs.
|
|
5
|
-
* This is the quick "what went wrong?" command.
|
|
6
|
-
*/
|
|
7
|
-
export interface ErrorsOptions {
|
|
8
|
-
count?: string;
|
|
9
|
-
all?: boolean;
|
|
10
|
-
context?: boolean;
|
|
11
|
-
json?: boolean;
|
|
12
|
-
}
|
|
13
|
-
export declare function showErrors(options: ErrorsOptions): Promise<void>;
|
|
14
|
-
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/commands/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AA8JD,wBAAsB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA0GtE"}
|
package/dist/commands/errors.js
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* d3k errors - Quick view of recent errors from d3k logs
|
|
3
|
-
*
|
|
4
|
-
* Shows the most recent errors from both browser and server logs.
|
|
5
|
-
* This is the quick "what went wrong?" command.
|
|
6
|
-
*/
|
|
7
|
-
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
8
|
-
import { homedir } from "node:os";
|
|
9
|
-
import { join } from "node:path";
|
|
10
|
-
import chalk from "chalk";
|
|
11
|
-
import { findCurrentSession } from "../utils/session.js";
|
|
12
|
-
function getLogPath() {
|
|
13
|
-
const session = findCurrentSession();
|
|
14
|
-
if (session?.logFilePath) {
|
|
15
|
-
return session.logFilePath;
|
|
16
|
-
}
|
|
17
|
-
// Fall back to environment variable
|
|
18
|
-
const envPath = process.env.LOG_FILE_PATH;
|
|
19
|
-
if (envPath) {
|
|
20
|
-
return envPath;
|
|
21
|
-
}
|
|
22
|
-
// Try to find the most recent log file
|
|
23
|
-
const sessionDir = join(homedir(), ".d3k");
|
|
24
|
-
if (!existsSync(sessionDir)) {
|
|
25
|
-
return null;
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
const entries = readdirSync(sessionDir, { withFileTypes: true });
|
|
29
|
-
let mostRecentLog = null;
|
|
30
|
-
for (const entry of entries) {
|
|
31
|
-
if (entry.isDirectory()) {
|
|
32
|
-
const logFile = join(sessionDir, entry.name, "d3k.log");
|
|
33
|
-
if (existsSync(logFile)) {
|
|
34
|
-
const stat = statSync(logFile);
|
|
35
|
-
if (!mostRecentLog || stat.mtime > mostRecentLog.mtime) {
|
|
36
|
-
mostRecentLog = { path: logFile, mtime: stat.mtime };
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return mostRecentLog?.path || null;
|
|
42
|
-
}
|
|
43
|
-
catch {
|
|
44
|
-
return null;
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
// Error patterns to match
|
|
48
|
-
const errorPatterns = [
|
|
49
|
-
/\[.*ERROR.*\]/i,
|
|
50
|
-
/\[.*FAIL.*\]/i,
|
|
51
|
-
/Exception/i,
|
|
52
|
-
/CRITICAL/i,
|
|
53
|
-
/FATAL/i,
|
|
54
|
-
/Uncaught/i,
|
|
55
|
-
/TypeError/i,
|
|
56
|
-
/ReferenceError/i,
|
|
57
|
-
/SyntaxError/i,
|
|
58
|
-
/RUNTIME\.ERROR/,
|
|
59
|
-
/hydration.*mismatch/i,
|
|
60
|
-
/Failed to compile/i,
|
|
61
|
-
/Build failed/i,
|
|
62
|
-
/\b500\b.*Internal Server Error/i,
|
|
63
|
-
/\b503\b.*Service Unavailable/i,
|
|
64
|
-
/ECONNREFUSED/i,
|
|
65
|
-
/ENOTFOUND/i,
|
|
66
|
-
/timeout/i
|
|
67
|
-
];
|
|
68
|
-
// Patterns to ignore (framework noise)
|
|
69
|
-
const ignorePatterns = [
|
|
70
|
-
/link rel=preload.*must have.*valid.*as/i,
|
|
71
|
-
/next\/font/i,
|
|
72
|
-
/automatically generated/i,
|
|
73
|
-
/Download the React DevTools/i,
|
|
74
|
-
/\[HMR\]/i
|
|
75
|
-
];
|
|
76
|
-
function isError(line) {
|
|
77
|
-
// Skip ignored patterns
|
|
78
|
-
if (ignorePatterns.some((p) => p.test(line))) {
|
|
79
|
-
return false;
|
|
80
|
-
}
|
|
81
|
-
// Check for error patterns
|
|
82
|
-
return errorPatterns.some((p) => p.test(line));
|
|
83
|
-
}
|
|
84
|
-
// Patterns that indicate user interactions (for replay context)
|
|
85
|
-
function isInteraction(line) {
|
|
86
|
-
return (line.includes("[INTERACTION]") ||
|
|
87
|
-
line.includes("[NAVIGATION]") ||
|
|
88
|
-
line.includes("[PAGE]") ||
|
|
89
|
-
line.includes("[CLICK]") ||
|
|
90
|
-
line.includes("[INPUT]") ||
|
|
91
|
-
line.includes("[SUBMIT]") ||
|
|
92
|
-
line.includes("[SCROLL]"));
|
|
93
|
-
}
|
|
94
|
-
// Find interactions that happened before an error (for replay)
|
|
95
|
-
function findInteractionsBefore(errorLine, allLines, maxCount = 5) {
|
|
96
|
-
const errorIndex = allLines.indexOf(errorLine);
|
|
97
|
-
if (errorIndex === -1)
|
|
98
|
-
return [];
|
|
99
|
-
const interactions = [];
|
|
100
|
-
// Look back up to 30 lines to find interactions
|
|
101
|
-
for (let i = errorIndex - 1; i >= Math.max(0, errorIndex - 30) && interactions.length < maxCount; i--) {
|
|
102
|
-
if (isInteraction(allLines[i])) {
|
|
103
|
-
interactions.unshift(allLines[i]);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return interactions;
|
|
107
|
-
}
|
|
108
|
-
function formatInteraction(line) {
|
|
109
|
-
// Extract timestamp if present
|
|
110
|
-
const timeMatch = line.match(/\[(\d{2}:\d{2}:\d{2}\.\d{3})\]/);
|
|
111
|
-
const time = timeMatch ? timeMatch[1] : "";
|
|
112
|
-
// Clean up the line
|
|
113
|
-
const message = line
|
|
114
|
-
.replace(/\[\d{2}:\d{2}:\d{2}\.\d{3}\]\s*/, "") // Remove timestamp
|
|
115
|
-
.trim();
|
|
116
|
-
return ` ${chalk.gray(time)} ${chalk.cyan("ā")} ${chalk.dim(message)}`;
|
|
117
|
-
}
|
|
118
|
-
function formatError(line) {
|
|
119
|
-
// Extract timestamp if present
|
|
120
|
-
const timeMatch = line.match(/\[(\d{2}:\d{2}:\d{2}\.\d{3})\]/);
|
|
121
|
-
const time = timeMatch ? timeMatch[1] : "";
|
|
122
|
-
// Determine error type and color
|
|
123
|
-
let prefix = "";
|
|
124
|
-
const color = chalk.red;
|
|
125
|
-
if (line.includes("[SERVER]") || line.includes("[server]")) {
|
|
126
|
-
prefix = chalk.magenta("SERVER");
|
|
127
|
-
}
|
|
128
|
-
else if (line.includes("[BROWSER]") || line.includes("[browser]")) {
|
|
129
|
-
prefix = chalk.yellow("BROWSER");
|
|
130
|
-
}
|
|
131
|
-
else if (line.includes("[NETWORK]") || line.includes("[network]")) {
|
|
132
|
-
prefix = chalk.cyan("NETWORK");
|
|
133
|
-
}
|
|
134
|
-
else if (line.includes("Failed to compile") || line.includes("Build failed")) {
|
|
135
|
-
prefix = chalk.red("BUILD");
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
prefix = chalk.gray("LOG");
|
|
139
|
-
}
|
|
140
|
-
// Clean up the line for display
|
|
141
|
-
let message = line
|
|
142
|
-
.replace(/\[\d{2}:\d{2}:\d{2}\.\d{3}\]\s*/, "") // Remove timestamp
|
|
143
|
-
.replace(/\[(SERVER|BROWSER|NETWORK|D3K)\]\s*/gi, "") // Remove source tag
|
|
144
|
-
.trim();
|
|
145
|
-
// Truncate very long lines
|
|
146
|
-
if (message.length > 200) {
|
|
147
|
-
message = `${message.substring(0, 197)}...`;
|
|
148
|
-
}
|
|
149
|
-
return `${chalk.gray(time)} ${prefix} ${color(message)}`;
|
|
150
|
-
}
|
|
151
|
-
export async function showErrors(options) {
|
|
152
|
-
const count = parseInt(options.count || "10", 10);
|
|
153
|
-
const showAll = options.all || false;
|
|
154
|
-
const showContext = options.context || false;
|
|
155
|
-
const outputJson = options.json || false;
|
|
156
|
-
const logPath = getLogPath();
|
|
157
|
-
if (!logPath) {
|
|
158
|
-
if (outputJson) {
|
|
159
|
-
console.log(JSON.stringify({ error: "No d3k log file found" }));
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
console.log(chalk.red("ā No d3k log file found."));
|
|
163
|
-
console.log(chalk.gray("Make sure d3k is running or has been run recently."));
|
|
164
|
-
}
|
|
165
|
-
process.exit(1);
|
|
166
|
-
}
|
|
167
|
-
if (!existsSync(logPath)) {
|
|
168
|
-
if (outputJson) {
|
|
169
|
-
console.log(JSON.stringify({ error: "Log file doesn't exist", path: logPath }));
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
console.log(chalk.yellow("š Log file doesn't exist yet."));
|
|
173
|
-
console.log(chalk.gray("The dev server may still be starting up."));
|
|
174
|
-
}
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
const content = readFileSync(logPath, "utf-8");
|
|
178
|
-
const logLines = content.trim().split("\n").filter(Boolean);
|
|
179
|
-
if (logLines.length === 0) {
|
|
180
|
-
if (outputJson) {
|
|
181
|
-
console.log(JSON.stringify({ errors: [], message: "Log file is empty" }));
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
console.log(chalk.yellow("š Log file is empty."));
|
|
185
|
-
}
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
// Find all error lines
|
|
189
|
-
const errorLines = logLines.filter(isError);
|
|
190
|
-
if (errorLines.length === 0) {
|
|
191
|
-
if (outputJson) {
|
|
192
|
-
console.log(JSON.stringify({ errors: [], message: "No errors found" }));
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
console.log(chalk.green("ā
No errors found in the logs."));
|
|
196
|
-
}
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
// Get the requested number of errors (from the end)
|
|
200
|
-
const errorsToShow = showAll ? errorLines : errorLines.slice(-count);
|
|
201
|
-
if (outputJson) {
|
|
202
|
-
const result = {
|
|
203
|
-
total: errorLines.length,
|
|
204
|
-
showing: errorsToShow.length,
|
|
205
|
-
errors: showContext
|
|
206
|
-
? errorsToShow.map((error) => ({
|
|
207
|
-
error,
|
|
208
|
-
interactions: findInteractionsBefore(error, logLines)
|
|
209
|
-
}))
|
|
210
|
-
: errorsToShow
|
|
211
|
-
};
|
|
212
|
-
console.log(JSON.stringify(result, null, 2));
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
// Header
|
|
216
|
-
console.log(chalk.red(`\nā ${errorLines.length} error${errorLines.length === 1 ? "" : "s"} found`));
|
|
217
|
-
if (!showAll && errorLines.length > count) {
|
|
218
|
-
console.log(chalk.gray(` Showing last ${count}. Use --all to see all errors.`));
|
|
219
|
-
}
|
|
220
|
-
if (showContext) {
|
|
221
|
-
console.log(chalk.gray(` Showing interaction context for replay.`));
|
|
222
|
-
}
|
|
223
|
-
console.log(chalk.gray(` Log: ${logPath}`));
|
|
224
|
-
console.log();
|
|
225
|
-
// Print errors with optional context
|
|
226
|
-
for (const line of errorsToShow) {
|
|
227
|
-
if (showContext) {
|
|
228
|
-
const interactions = findInteractionsBefore(line, logLines);
|
|
229
|
-
if (interactions.length > 0) {
|
|
230
|
-
console.log(chalk.dim(" Interactions before error:"));
|
|
231
|
-
for (const interaction of interactions) {
|
|
232
|
-
console.log(formatInteraction(interaction));
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
console.log(formatError(line));
|
|
237
|
-
if (showContext) {
|
|
238
|
-
console.log(); // Extra spacing between errors when showing context
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
if (!showContext) {
|
|
242
|
-
console.log();
|
|
243
|
-
}
|
|
244
|
-
console.log(chalk.gray("Tip: Use --context to see interactions for replay verification."));
|
|
245
|
-
}
|
|
246
|
-
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/commands/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/fix.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* d3k fix - Diagnose application errors from logs
|
|
3
|
-
*
|
|
4
|
-
* Analyzes d3k session logs and categorizes errors by type and severity.
|
|
5
|
-
* Returns a prioritized list of issues that need to be fixed.
|
|
6
|
-
*/
|
|
7
|
-
export interface FixOptions {
|
|
8
|
-
focus?: string;
|
|
9
|
-
time?: string;
|
|
10
|
-
json?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare function fixMyApp(options: FixOptions): Promise<void>;
|
|
13
|
-
//# sourceMappingURL=fix.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/commands/fix.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AA2BD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA+OjE"}
|