devlyn-cli 0.7.0 → 0.7.2
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/bin/devlyn.js +33 -4
- package/config/skills/{devlyn-resolve → devlyn:resolve}/SKILL.md +40 -11
- package/config/skills/{devlyn-team-resolve → devlyn:team-resolve}/SKILL.md +15 -1
- package/config/skills/root-cause-analysis/SKILL.md +5 -1
- package/package.json +1 -1
- /package/config/skills/{devlyn-clean → devlyn:clean}/SKILL.md +0 -0
- /package/config/skills/{devlyn-design-system → devlyn:design-system}/SKILL.md +0 -0
- /package/config/skills/{devlyn-design-ui → devlyn:design-ui}/SKILL.md +0 -0
- /package/config/skills/{devlyn-discover-product → devlyn:discover-product}/SKILL.md +0 -0
- /package/config/skills/{devlyn-evaluate → devlyn:evaluate}/SKILL.md +0 -0
- /package/config/skills/{devlyn-feature-spec → devlyn:feature-spec}/SKILL.md +0 -0
- /package/config/skills/{devlyn-implement-ui → devlyn:implement-ui}/SKILL.md +0 -0
- /package/config/skills/{devlyn-product-spec → devlyn:product-spec}/SKILL.md +0 -0
- /package/config/skills/{devlyn-recommend-features → devlyn:recommend-features}/SKILL.md +0 -0
- /package/config/skills/{devlyn-review → devlyn:review}/SKILL.md +0 -0
- /package/config/skills/{devlyn-team-design-ui → devlyn:team-design-ui}/SKILL.md +0 -0
- /package/config/skills/{devlyn-team-review → devlyn:team-review}/SKILL.md +0 -0
- /package/config/skills/{devlyn-update-docs → devlyn:update-docs}/SKILL.md +0 -0
- /package/optional-skills/{devlyn-pencil-pull → devlyn:pencil-pull}/SKILL.md +0 -0
- /package/optional-skills/{devlyn-pencil-push → devlyn:pencil-push}/SKILL.md +0 -0
package/bin/devlyn.js
CHANGED
|
@@ -63,8 +63,29 @@ const DEPRECATED_FILES = [
|
|
|
63
63
|
'commands/devlyn.team-resolve.md',
|
|
64
64
|
'commands/devlyn.team-review.md',
|
|
65
65
|
'commands/devlyn.update-docs.md',
|
|
66
|
-
'commands/devlyn.pencil-pull.md', // migrated to skills/devlyn
|
|
67
|
-
'commands/devlyn.pencil-push.md', // migrated to skills/devlyn
|
|
66
|
+
'commands/devlyn.pencil-pull.md', // migrated to skills/devlyn:pencil-pull
|
|
67
|
+
'commands/devlyn.pencil-push.md', // migrated to skills/devlyn:pencil-push
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
// Skill directories renamed from devlyn-* to devlyn:* in v0.7.x
|
|
71
|
+
const DEPRECATED_DIRS = [
|
|
72
|
+
'skills/devlyn-clean',
|
|
73
|
+
'skills/devlyn-design-system',
|
|
74
|
+
'skills/devlyn-design-ui',
|
|
75
|
+
'skills/devlyn-discover-product',
|
|
76
|
+
'skills/devlyn-evaluate',
|
|
77
|
+
'skills/devlyn-feature-spec',
|
|
78
|
+
'skills/devlyn-implement-ui',
|
|
79
|
+
'skills/devlyn-product-spec',
|
|
80
|
+
'skills/devlyn-recommend-features',
|
|
81
|
+
'skills/devlyn-resolve',
|
|
82
|
+
'skills/devlyn-review',
|
|
83
|
+
'skills/devlyn-team-design-ui',
|
|
84
|
+
'skills/devlyn-team-resolve',
|
|
85
|
+
'skills/devlyn-team-review',
|
|
86
|
+
'skills/devlyn-update-docs',
|
|
87
|
+
'skills/devlyn-pencil-pull',
|
|
88
|
+
'skills/devlyn-pencil-push',
|
|
68
89
|
];
|
|
69
90
|
|
|
70
91
|
function getTargetDir() {
|
|
@@ -123,8 +144,8 @@ const OPTIONAL_ADDONS = [
|
|
|
123
144
|
{ name: 'better-auth-setup', desc: 'Production-ready Better Auth + Hono + Drizzle + PostgreSQL auth setup', type: 'local' },
|
|
124
145
|
{ name: 'pyx-scan', desc: 'Check whether an AI agent skill is safe before installing', type: 'local' },
|
|
125
146
|
{ name: 'dokkit', desc: 'Document template filling for DOCX/HWPX — ingest, fill, review, export', type: 'local' },
|
|
126
|
-
{ name: 'devlyn
|
|
127
|
-
{ name: 'devlyn
|
|
147
|
+
{ name: 'devlyn:pencil-pull', desc: 'Pull Pencil designs into code with exact visual fidelity', type: 'local' },
|
|
148
|
+
{ name: 'devlyn:pencil-push', desc: 'Push codebase UI to Pencil canvas for design sync', type: 'local' },
|
|
128
149
|
// External skill packs (installed via npx skills add)
|
|
129
150
|
{ name: 'vercel-labs/agent-skills', desc: 'React, Next.js, React Native best practices', type: 'external' },
|
|
130
151
|
{ name: 'supabase/agent-skills', desc: 'Supabase integration patterns', type: 'external' },
|
|
@@ -232,6 +253,14 @@ function cleanupDeprecated(targetDir) {
|
|
|
232
253
|
removed++;
|
|
233
254
|
}
|
|
234
255
|
}
|
|
256
|
+
for (const relPath of DEPRECATED_DIRS) {
|
|
257
|
+
const fullPath = path.join(targetDir, relPath);
|
|
258
|
+
if (fs.existsSync(fullPath)) {
|
|
259
|
+
fs.rmSync(fullPath, { recursive: true });
|
|
260
|
+
log(` ✕ ${relPath}/ (renamed)`, 'dim');
|
|
261
|
+
removed++;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
235
264
|
return removed;
|
|
236
265
|
}
|
|
237
266
|
|
|
@@ -30,7 +30,7 @@ When escalating, output your partial findings first so the team lead has context
|
|
|
30
30
|
</escalation>
|
|
31
31
|
|
|
32
32
|
<investigate_before_answering>
|
|
33
|
-
|
|
33
|
+
Never speculate about code you have not opened. If the user references a specific file, you MUST read the file before answering. Make sure to investigate and read relevant files BEFORE answering questions about the codebase. Never make any claims about code before investigating unless you are certain of the correct answer — give grounded and hallucination-free answers.
|
|
34
34
|
|
|
35
35
|
1. Read the issue/error message and identify the symptom
|
|
36
36
|
2. Run `git log --oneline -20` and `git blame` on the suspected file — establish when the regression was introduced and by what change
|
|
@@ -45,10 +45,10 @@ Entry: `file.ts:123` functionName()
|
|
|
45
45
|
→ potential issue here
|
|
46
46
|
```
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
6. Find related test files that cover this area
|
|
49
|
+
7. Verify each assumption with actual code inspection
|
|
50
50
|
|
|
51
|
-
Evidence-based reasoning only. Every claim must reference specific file:line.
|
|
51
|
+
Evidence-based reasoning only. Every claim must reference specific file:line. Never use placeholders or guess missing details — use tools to discover them.
|
|
52
52
|
</investigate_before_answering>
|
|
53
53
|
|
|
54
54
|
<analysis_approach>
|
|
@@ -80,19 +80,48 @@ If fix doesn't work, revert completely before trying next approach. Never layer
|
|
|
80
80
|
</test_driven_validation>
|
|
81
81
|
|
|
82
82
|
<no_fallbacks_or_workarounds>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
|
|
83
|
+
Write a high-quality, general-purpose solution that addresses the actual root cause.
|
|
84
|
+
|
|
85
|
+
Do not create helper scripts or workarounds to accomplish the task more efficiently.
|
|
86
|
+
Do not hard-code values or create solutions that only work for specific failing cases.
|
|
87
|
+
Instead, implement the actual logic that solves the problem generally.
|
|
88
|
+
|
|
89
|
+
Workaround indicators (if you catch yourself doing any of these, STOP):
|
|
90
|
+
- Adding `|| defaultValue` to mask null/undefined
|
|
91
|
+
- Adding `try/catch` that swallows errors silently
|
|
92
|
+
- Using optional chaining (?.) to bypass null when null IS the bug
|
|
93
|
+
- Hard-coding a value for the specific failing case
|
|
94
|
+
- Adding a "just in case" check that shouldn't be needed
|
|
95
|
+
- Suppressing warnings/errors instead of fixing them
|
|
96
|
+
- Adding retry logic instead of fixing why it fails
|
|
88
97
|
|
|
89
98
|
Instead:
|
|
90
99
|
- Fix the code path that produces incorrect state
|
|
91
|
-
- Ensure solution works for all valid inputs
|
|
92
|
-
- Follow codebase's existing patterns
|
|
100
|
+
- Ensure solution works correctly for all valid inputs, not just the failing case
|
|
101
|
+
- Follow codebase's existing patterns and idioms
|
|
93
102
|
- Escalate blockers rather than shipping fragile patches
|
|
103
|
+
|
|
104
|
+
If the task is unreasonable or infeasible, or if any of the tests are incorrect, inform the user rather than working around them. The solution should be robust, maintainable, and extendable.
|
|
94
105
|
</no_fallbacks_or_workarounds>
|
|
95
106
|
|
|
107
|
+
<code_quality_standards>
|
|
108
|
+
Every fix must be **production-grade**. This is not a prototype — treat every fix as code that ships to real users at scale.
|
|
109
|
+
|
|
110
|
+
**Non-negotiable standards**:
|
|
111
|
+
- **Root cause fixes only** — never workarounds, never "good enough for now"
|
|
112
|
+
- **Graceful error handling** — errors are caught, surfaced to the user with actionable context, and logged. No silent swallowing. No raw stack traces in UI. Every failure path has a recovery or clear error state.
|
|
113
|
+
- **Robust edge case coverage** — handle nulls, empty states, concurrent access, network failures, partial data, and boundary conditions. If it can happen in production, handle it.
|
|
114
|
+
- **Optimized for performance** — no unnecessary re-renders, no N+1 queries, no unbounded loops, no blocking I/O on hot paths.
|
|
115
|
+
- **Scalable patterns** — solutions must work at 10x the current load. Avoid patterns that degrade with data size (O(n²) where O(n) is possible, in-memory aggregation of unbounded datasets, missing pagination).
|
|
116
|
+
- **Best practice adherence** — follow the language/framework idioms of the codebase. Use established patterns over novel approaches. Leverage the type system.
|
|
117
|
+
- **Clean interfaces** — clear contracts between modules. No leaky abstractions. Inputs validated at boundaries. Return types are explicit, not `any`.
|
|
118
|
+
- **Defensive but not paranoid** — validate external inputs rigorously, trust internal interfaces. Don't add guards for impossible states — instead, make impossible states unrepresentable through types.
|
|
119
|
+
</code_quality_standards>
|
|
120
|
+
|
|
121
|
+
<commit_to_approach>
|
|
122
|
+
When deciding how to approach a problem, choose an approach and commit to it. Avoid revisiting decisions unless you encounter new information that directly contradicts your reasoning. If you're weighing two approaches, pick the one with stronger evidence and see it through. Do not oscillate between strategies — diagnose, decide, execute.
|
|
123
|
+
</commit_to_approach>
|
|
124
|
+
|
|
96
125
|
<use_parallel_tool_calls>
|
|
97
126
|
Read multiple potentially relevant files in parallel. If the issue might involve 3 modules, read all 3 simultaneously.
|
|
98
127
|
</use_parallel_tool_calls>
|
|
@@ -26,6 +26,10 @@ Every teammate should evaluate their findings and recommendations against these
|
|
|
26
26
|
|
|
27
27
|
Before spawning any teammates, do your own investigation:
|
|
28
28
|
|
|
29
|
+
<investigate_before_answering>
|
|
30
|
+
Never speculate about code you have not opened. If the issue references a specific file, you MUST read the file before forming hypotheses. Make sure to investigate and read relevant files BEFORE classifying the issue or assembling a team. Never make any claims about code before investigating unless you are certain of the correct answer — give grounded and hallucination-free answers. Never use placeholders or guess missing details — use tools to discover them.
|
|
31
|
+
</investigate_before_answering>
|
|
32
|
+
|
|
29
33
|
1. Read the issue/task description carefully
|
|
30
34
|
2. Read relevant files and error logs in parallel (use parallel tool calls)
|
|
31
35
|
3. Trace the initial code path from entry point to likely source
|
|
@@ -479,7 +483,11 @@ Present the synthesis to the user before implementing.
|
|
|
479
483
|
## Phase 5: IMPLEMENTATION (You, Team Lead)
|
|
480
484
|
|
|
481
485
|
<no_workarounds>
|
|
482
|
-
|
|
486
|
+
Write a high-quality, general-purpose solution that addresses the actual root cause. Do not implement workarounds.
|
|
487
|
+
|
|
488
|
+
Do not create helper scripts or workarounds to accomplish the task more efficiently.
|
|
489
|
+
Do not hard-code values or create solutions that only work for specific failing cases.
|
|
490
|
+
Instead, implement the actual logic that solves the problem generally.
|
|
483
491
|
|
|
484
492
|
Workaround indicators (if you catch yourself doing any of these, STOP):
|
|
485
493
|
- Adding `|| defaultValue` to mask null/undefined
|
|
@@ -490,6 +498,8 @@ Workaround indicators (if you catch yourself doing any of these, STOP):
|
|
|
490
498
|
- Suppressing warnings/errors instead of fixing them
|
|
491
499
|
- Adding retry logic instead of fixing why it fails
|
|
492
500
|
|
|
501
|
+
If the task is unreasonable or infeasible, or if any of the tests are incorrect, inform the user rather than working around them. The solution should be robust, maintainable, and extendable.
|
|
502
|
+
|
|
493
503
|
If the true fix requires significant refactoring:
|
|
494
504
|
1. Document why in the root cause analysis
|
|
495
505
|
2. Call the `EnterPlanMode` tool to present the scope to the user and get approval before proceeding
|
|
@@ -497,6 +507,10 @@ If the true fix requires significant refactoring:
|
|
|
497
507
|
4. Never ship a workaround "for now"
|
|
498
508
|
</no_workarounds>
|
|
499
509
|
|
|
510
|
+
<commit_to_approach>
|
|
511
|
+
When deciding how to approach a problem, choose an approach and commit to it. Avoid revisiting decisions unless you encounter new information that directly contradicts your reasoning. If you're weighing two approaches, pick the one with stronger evidence and see it through. Do not oscillate between strategies — diagnose, decide, execute.
|
|
512
|
+
</commit_to_approach>
|
|
513
|
+
|
|
500
514
|
Implementation order:
|
|
501
515
|
1. Write a failing test based on the Test Engineer's findings
|
|
502
516
|
2. Implement the fix addressing the true root cause
|
|
@@ -34,7 +34,7 @@ Continue until you reach something **actionable** — a code change that prevent
|
|
|
34
34
|
|
|
35
35
|
## Evidence Standards
|
|
36
36
|
|
|
37
|
-
Every claim MUST reference a specific `file:line`.
|
|
37
|
+
Every claim MUST reference a specific `file:line`. Never speculate about code you have not opened. Never make any claims about code before investigating unless you are certain of the correct answer — give grounded and hallucination-free answers. Never use placeholders or guess missing details — use tools to discover them.
|
|
38
38
|
|
|
39
39
|
1. Read the actual code before forming hypotheses
|
|
40
40
|
2. Trace the execution path: entry → intermediate calls → issue location
|
|
@@ -44,6 +44,8 @@ Every claim MUST reference a specific `file:line`. No speculation about code you
|
|
|
44
44
|
|
|
45
45
|
## No-Workaround Rule
|
|
46
46
|
|
|
47
|
+
Write a high-quality, general-purpose solution that addresses the actual root cause. Do not create helper scripts or workarounds. Do not hard-code values or create solutions that only work for specific failing cases. Instead, implement the actual logic that solves the problem generally.
|
|
48
|
+
|
|
47
49
|
Every fix MUST address the root cause. Stop immediately if you catch yourself:
|
|
48
50
|
|
|
49
51
|
- Adding `|| defaultValue` to mask null/undefined
|
|
@@ -54,6 +56,8 @@ Every fix MUST address the root cause. Stop immediately if you catch yourself:
|
|
|
54
56
|
- Suppressing warnings/errors instead of fixing them
|
|
55
57
|
- Adding retry logic instead of fixing why it fails
|
|
56
58
|
|
|
59
|
+
If the task is unreasonable or infeasible, or if any of the tests are incorrect, inform the user rather than working around them. The solution should be robust, maintainable, and extendable.
|
|
60
|
+
|
|
57
61
|
If the real fix requires significant refactoring, present the scope to the user — never ship a workaround "for now".
|
|
58
62
|
|
|
59
63
|
## Routing
|
package/package.json
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|