dev3000 0.0.174 → 0.0.175

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 (71) hide show
  1. package/README.md +0 -4
  2. package/dist/cdp-monitor.d.ts +3 -0
  3. package/dist/cdp-monitor.d.ts.map +1 -1
  4. package/dist/cdp-monitor.js +225 -38
  5. package/dist/cdp-monitor.js.map +1 -1
  6. package/dist/cli.js +172 -217
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/crawl.d.ts.map +1 -1
  9. package/dist/commands/crawl.js +4 -43
  10. package/dist/commands/crawl.js.map +1 -1
  11. package/dist/commands/errors.d.ts.map +1 -1
  12. package/dist/commands/errors.js +4 -53
  13. package/dist/commands/errors.js.map +1 -1
  14. package/dist/commands/fix.d.ts.map +1 -1
  15. package/dist/commands/fix.js +5 -74
  16. package/dist/commands/fix.js.map +1 -1
  17. package/dist/commands/logs.d.ts.map +1 -1
  18. package/dist/commands/logs.js +4 -53
  19. package/dist/commands/logs.js.map +1 -1
  20. package/dist/commands/skill-runner.d.ts +14 -0
  21. package/dist/commands/skill-runner.d.ts.map +1 -0
  22. package/dist/commands/skill-runner.js +494 -0
  23. package/dist/commands/skill-runner.js.map +1 -0
  24. package/dist/dev-environment.d.ts +4 -3
  25. package/dist/dev-environment.d.ts.map +1 -1
  26. package/dist/dev-environment.js +111 -95
  27. package/dist/dev-environment.js.map +1 -1
  28. package/dist/skills/d3k/internal-skill.md +145 -0
  29. package/dist/skills/index.test.ts +28 -1
  30. package/dist/skills/index.ts +58 -7
  31. package/dist/utils/agent-browser.d.ts.map +1 -1
  32. package/dist/utils/agent-browser.js +6 -3
  33. package/dist/utils/agent-browser.js.map +1 -1
  34. package/dist/utils/agent-detection.d.ts +1 -0
  35. package/dist/utils/agent-detection.d.ts.map +1 -1
  36. package/dist/utils/agent-detection.js +11 -0
  37. package/dist/utils/agent-detection.js.map +1 -1
  38. package/dist/utils/agent-selection.js +3 -3
  39. package/dist/utils/agent-selection.js.map +1 -1
  40. package/dist/utils/browser-command-argv.d.ts +1 -1
  41. package/dist/utils/browser-command-argv.d.ts.map +1 -1
  42. package/dist/utils/browser-command-argv.js +1 -1
  43. package/dist/utils/browser-command-argv.js.map +1 -1
  44. package/dist/utils/project-name.d.ts +2 -0
  45. package/dist/utils/project-name.d.ts.map +1 -1
  46. package/dist/utils/project-name.js +6 -0
  47. package/dist/utils/project-name.js.map +1 -1
  48. package/dist/utils/session.d.ts +14 -0
  49. package/dist/utils/session.d.ts.map +1 -0
  50. package/dist/utils/session.js +65 -0
  51. package/dist/utils/session.js.map +1 -0
  52. package/dist/utils/version-check.js +2 -2
  53. package/dist/utils/version-check.js.map +1 -1
  54. package/package.json +8 -18
  55. package/dist/commands/cloud-check-pr.d.ts +0 -9
  56. package/dist/commands/cloud-check-pr.d.ts.map +0 -1
  57. package/dist/commands/cloud-check-pr.js +0 -243
  58. package/dist/commands/cloud-check-pr.js.map +0 -1
  59. package/dist/commands/cloud-fix.d.ts +0 -13
  60. package/dist/commands/cloud-fix.d.ts.map +0 -1
  61. package/dist/commands/cloud-fix.js +0 -79
  62. package/dist/commands/cloud-fix.js.map +0 -1
  63. package/dist/commands/find-component.d.ts +0 -8
  64. package/dist/commands/find-component.d.ts.map +0 -1
  65. package/dist/commands/find-component.js +0 -182
  66. package/dist/commands/find-component.js.map +0 -1
  67. package/dist/skills/d3k/SKILL.md +0 -126
  68. package/dist/skills/index.d.ts +0 -46
  69. package/dist/skills/index.d.ts.map +0 -1
  70. package/dist/skills/index.js +0 -174
  71. package/dist/skills/index.js.map +0 -1
@@ -1,126 +0,0 @@
1
- ---
2
- name: "d3k"
3
- description: "d3k assistant for debugging web apps"
4
- ---
5
-
6
- # d3k Commands
7
-
8
- d3k captures browser and server logs in a unified log file. Use these commands:
9
-
10
- ## Viewing Errors and Logs
11
-
12
- ```bash
13
- d3k errors # Show recent errors (browser + server combined)
14
- d3k errors --context # Show errors + user actions that preceded them
15
- d3k errors -n 20 # Show last 20 errors
16
-
17
- d3k logs # Show recent logs (browser + server combined)
18
- d3k logs --type browser # Browser logs only
19
- d3k logs --type server # Server logs only
20
- ```
21
-
22
- ## Other Commands
23
-
24
- ```bash
25
- d3k fix # Deep analysis of application errors
26
- d3k fix --focus build # Focus on build errors
27
-
28
- d3k crawl # Discover app URLs
29
- d3k crawl --depth all # Exhaustive crawl
30
-
31
- d3k find-component "nav" # Find React component source
32
- ```
33
-
34
- ## Browser Interaction
35
-
36
- First run `d3k cdp-port` to get the port number, then use it directly in all browser commands:
37
-
38
- ```bash
39
- d3k cdp-port # Returns e.g. 9222
40
- d3k agent-browser --cdp 9222 open http://localhost:3000/page
41
- d3k agent-browser --cdp 9222 snapshot -i # Get element refs (@e1, @e2)
42
- d3k agent-browser --cdp 9222 click @e2
43
- d3k agent-browser --cdp 9222 fill @e3 "text"
44
- d3k agent-browser --cdp 9222 screenshot /tmp/shot.png
45
- ```
46
-
47
- ## Browser Tool Choice
48
-
49
- Use the browser tool that matches the task:
50
-
51
- - `agent-browser`
52
- - Default choice.
53
- - Best for generic web apps and for driving the exact headed browser session d3k is already monitoring.
54
- - Use it when you need `snapshot`, ref-based `click`, `fill`, or to reproduce what the user sees in the monitored tab.
55
- - `next-browser`
56
- - Next.js-specific tool.
57
- - Best for Next/React introspection: `tree`, `errors`, `logs`, `routes`, `project`, and related Next dev-server diagnostics.
58
- - It is not a drop-in replacement for `agent-browser`: no accessibility `snapshot`, no ref-based `click`, and no `fill`.
59
- - It runs its own daemon/browser flow and does not use `d3k cdp-port`.
60
-
61
- Practical rule:
62
-
63
- - Need to drive the same monitored browser session: use `agent-browser`.
64
- - Need Next.js component-tree or Next-specific diagnostics: use `next-browser`.
65
-
66
- Examples:
67
-
68
- ```bash
69
- # Same monitored browser session
70
- d3k agent-browser --cdp 9222 snapshot -i
71
- d3k agent-browser --cdp 9222 click @e2
72
-
73
- # Next.js-specific inspection
74
- d3k next-browser open http://localhost:3000
75
- d3k next-browser tree
76
- d3k next-browser errors
77
- d3k next-browser logs
78
- ```
79
-
80
- To make d3k prefer one locally when it launches helper browser commands, use:
81
-
82
- ```bash
83
- d3k --browser-tool agent-browser
84
- d3k --browser-tool next-browser
85
- ```
86
-
87
- ## Fix Workflow
88
-
89
- 1. `d3k errors --context` - See errors and what triggered them
90
- 2. Fix the code
91
- 3. Run `d3k cdp-port` to get the port, then `d3k agent-browser --cdp <port> open <url>` then `click @e1` to replay
92
- 4. `d3k errors` - Verify fix worked
93
-
94
- ## Creating PRs with Before/After Screenshots
95
-
96
- When creating a PR for visual changes, **always capture before/after screenshots** to show the impact:
97
-
98
- 1. **Before making changes**, screenshot the production site (run `d3k cdp-port` first to get the port):
99
- ```bash
100
- d3k agent-browser --cdp <port> open https://production-url.com/affected-page
101
- d3k agent-browser --cdp <port> screenshot /tmp/before.png
102
- ```
103
-
104
- 2. **After making changes**, screenshot localhost:
105
- ```bash
106
- d3k agent-browser --cdp <port> open http://localhost:3000/affected-page
107
- d3k agent-browser --cdp <port> screenshot /tmp/after.png
108
- ```
109
-
110
- 3. **Or use the tooling API** to capture multiple routes at once:
111
- ```
112
- capture_before_after_screenshots(
113
- productionUrl: "https://myapp.vercel.app",
114
- routes: ["/", "/about", "/contact"]
115
- )
116
- ```
117
-
118
- 4. **Include in PR description** using markdown:
119
- ```markdown
120
- ### Visual Comparison
121
- | Route | Before | After |
122
- |-------|--------|-------|
123
- | `/` | ![Before](before.png) | ![After](after.png) |
124
- ```
125
-
126
- Upload screenshots by dragging them into the GitHub PR description.
@@ -1,46 +0,0 @@
1
- /**
2
- * Skill module for d3k
3
- *
4
- * Skills are managed by `npx skills` and stored in .agents/skills/
5
- * d3k also bundles its own skill which gets copied to .agents/skills/d3k/ on startup.
6
- */
7
- export interface SkillInfo {
8
- name: string;
9
- description: string;
10
- path: string;
11
- }
12
- export interface SkillResult {
13
- found: boolean;
14
- name: string;
15
- content?: string;
16
- path?: string;
17
- error?: string;
18
- availableSkills?: string[];
19
- }
20
- /**
21
- * Get the path to d3k's bundled skills directory.
22
- * Returns null if not found (e.g., running in development without build).
23
- */
24
- export declare function getBundledSkillsPath(): string | null;
25
- /**
26
- * Get directories where skills can be found.
27
- * Skills are managed by `npx skills` in .agents/skills/
28
- */
29
- export declare function getSkillDirectories(cwd?: string): string[];
30
- /**
31
- * Find a skill by name.
32
- */
33
- export declare function findSkill(name: string, cwd?: string): string | null;
34
- /**
35
- * Get the content of a skill by name.
36
- */
37
- export declare function getSkill(name: string, cwd?: string): SkillResult;
38
- /**
39
- * List all available skills.
40
- */
41
- export declare function listAvailableSkills(cwd?: string): string[];
42
- /**
43
- * Get detailed info about all available skills.
44
- */
45
- export declare function getSkillsInfo(cwd?: string): SkillInfo[];
46
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAC3B;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAkCpD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB1D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQnE;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,WAAW,CAuBhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CA4BvD"}
@@ -1,174 +0,0 @@
1
- /**
2
- * Skill module for d3k
3
- *
4
- * Skills are managed by `npx skills` and stored in .agents/skills/
5
- * d3k also bundles its own skill which gets copied to .agents/skills/d3k/ on startup.
6
- */
7
- import { existsSync, readdirSync, readFileSync } from "fs";
8
- import { homedir } from "os";
9
- import { dirname, join } from "path";
10
- import { fileURLToPath } from "url";
11
- /**
12
- * Get the path to d3k's bundled skills directory.
13
- * Returns null if not found (e.g., running in development without build).
14
- */
15
- export function getBundledSkillsPath() {
16
- // Check if running from compiled binary
17
- const moduleUrl = import.meta.url;
18
- const isCompiledBinary = moduleUrl.startsWith("file:///$bunfs") || moduleUrl.startsWith("/$bunfs");
19
- if (isCompiledBinary) {
20
- // Try process.argv[0] first (more reliable for Bun compiled binaries)
21
- // Then fall back to process.execPath
22
- const possiblePaths = [process.argv[0], process.execPath].filter(Boolean);
23
- for (const binaryPath of possiblePaths) {
24
- if (binaryPath && existsSync(binaryPath)) {
25
- const binDir = dirname(binaryPath);
26
- const packageDir = dirname(binDir);
27
- const skillsDir = join(packageDir, "skills");
28
- if (existsSync(skillsDir)) {
29
- return skillsDir;
30
- }
31
- }
32
- }
33
- }
34
- // Fallback for npm-installed package: look for dist/skills relative to this module
35
- // import.meta.url is like "file:///path/to/node_modules/dev3000/dist/skills/index.js"
36
- if (moduleUrl.startsWith("file://")) {
37
- const modulePath = fileURLToPath(moduleUrl);
38
- // This file is at dist/skills/index.js, so skills are at dist/skills/
39
- const skillsDir = dirname(modulePath);
40
- if (existsSync(join(skillsDir, "d3k", "SKILL.md"))) {
41
- return skillsDir;
42
- }
43
- }
44
- return null;
45
- }
46
- /**
47
- * Get directories where skills can be found.
48
- * Skills are managed by `npx skills` in .agents/skills/
49
- */
50
- export function getSkillDirectories(cwd) {
51
- const dirs = [];
52
- const projectDir = cwd || process.cwd();
53
- // Project-local skills (highest priority)
54
- dirs.push(join(projectDir, ".agents", "skills"));
55
- // Global skills
56
- dirs.push(join(homedir(), ".agents", "skills"));
57
- // d3k's bundled skills (fallback for d3k skill before it's copied)
58
- const bundled = getBundledSkillsPath();
59
- if (bundled) {
60
- dirs.push(bundled);
61
- }
62
- return dirs.filter((dir) => existsSync(dir));
63
- }
64
- /**
65
- * Find a skill by name.
66
- */
67
- export function findSkill(name, cwd) {
68
- for (const dir of getSkillDirectories(cwd)) {
69
- const skillPath = join(dir, name, "SKILL.md");
70
- if (existsSync(skillPath)) {
71
- return skillPath;
72
- }
73
- }
74
- return null;
75
- }
76
- /**
77
- * Get the content of a skill by name.
78
- */
79
- export function getSkill(name, cwd) {
80
- const skillPath = findSkill(name, cwd);
81
- if (skillPath) {
82
- try {
83
- const content = readFileSync(skillPath, "utf-8");
84
- return { found: true, name, content, path: skillPath };
85
- }
86
- catch (error) {
87
- return {
88
- found: false,
89
- name,
90
- error: `Failed to read skill: ${error instanceof Error ? error.message : String(error)}`,
91
- availableSkills: listAvailableSkills(cwd)
92
- };
93
- }
94
- }
95
- return {
96
- found: false,
97
- name,
98
- error: `Skill "${name}" not found`,
99
- availableSkills: listAvailableSkills(cwd)
100
- };
101
- }
102
- /**
103
- * List all available skills.
104
- */
105
- export function listAvailableSkills(cwd) {
106
- const skills = new Set();
107
- for (const dir of getSkillDirectories(cwd)) {
108
- try {
109
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
110
- if (entry.isDirectory() && existsSync(join(dir, entry.name, "SKILL.md"))) {
111
- skills.add(entry.name);
112
- }
113
- }
114
- }
115
- catch {
116
- // Directory not readable
117
- }
118
- }
119
- return Array.from(skills).sort();
120
- }
121
- /**
122
- * Get detailed info about all available skills.
123
- */
124
- export function getSkillsInfo(cwd) {
125
- const skillsMap = new Map();
126
- for (const dir of getSkillDirectories(cwd)) {
127
- try {
128
- for (const entry of readdirSync(dir, { withFileTypes: true })) {
129
- if (entry.isDirectory() && !skillsMap.has(entry.name)) {
130
- const skillPath = join(dir, entry.name, "SKILL.md");
131
- if (existsSync(skillPath)) {
132
- try {
133
- const content = readFileSync(skillPath, "utf-8");
134
- skillsMap.set(entry.name, {
135
- name: entry.name,
136
- description: extractDescription(content),
137
- path: skillPath
138
- });
139
- }
140
- catch {
141
- // Skip unreadable
142
- }
143
- }
144
- }
145
- }
146
- }
147
- catch {
148
- // Directory not readable
149
- }
150
- }
151
- return Array.from(skillsMap.values()).sort((a, b) => a.name.localeCompare(b.name));
152
- }
153
- /**
154
- * Extract description from SKILL.md frontmatter or first paragraph.
155
- */
156
- function extractDescription(content) {
157
- // Try YAML frontmatter
158
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
159
- if (frontmatterMatch) {
160
- const descMatch = frontmatterMatch[1].match(/description:\s*(.+)/);
161
- if (descMatch) {
162
- return descMatch[1].trim();
163
- }
164
- }
165
- // Fallback: first non-heading, non-empty line
166
- for (const line of content.split("\n")) {
167
- const trimmed = line.trim();
168
- if (trimmed && !trimmed.startsWith("#") && !trimmed.startsWith("---")) {
169
- return trimmed.length > 100 ? `${trimmed.slice(0, 97)}...` : trimmed;
170
- }
171
- }
172
- return "No description available";
173
- }
174
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"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"}