@devran-ai/kit 4.1.0 → 4.2.1
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/.agent/CheatSheet.md +1 -1
- package/.agent/commands/help.md +1 -1
- package/.agent/manifest.json +1 -1
- package/README.md +33 -6
- package/bin/kit.js +36 -1
- package/lib/io.js +36 -0
- package/package.json +1 -1
package/.agent/CheatSheet.md
CHANGED
package/.agent/commands/help.md
CHANGED
|
@@ -24,7 +24,7 @@ Your complete guide to the Devran AI Kit. Type `/help` for a quick overview, or
|
|
|
24
24
|
|
|
25
25
|
## Quick Overview
|
|
26
26
|
|
|
27
|
-
**Devran AI Kit v4.1
|
|
27
|
+
**Devran AI Kit v4.2.1** — Trust-Grade AI Development Framework
|
|
28
28
|
|
|
29
29
|
| Category | Count | Description |
|
|
30
30
|
|:---------|:------|:------------|
|
package/.agent/manifest.json
CHANGED
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Devran AI Kit
|
|
2
2
|
|
|
3
|
-
[](https://github.com/devran-ai/kit)
|
|
4
4
|
[](LICENSE)
|
|
5
|
-
[](tests/)
|
|
6
6
|
[](package.json)
|
|
7
7
|
[](.agent/agents/)
|
|
8
8
|
[](.agent/skills/)
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
| Self-healing CI | None | None | Auto-diagnoses and patches failures |
|
|
27
27
|
| Cross-IDE support | Single IDE | Single IDE | 5 IDEs from one source of truth |
|
|
28
28
|
| Plugin marketplace | None | None | Trust-verified skill marketplace |
|
|
29
|
-
| Test suite | None | None |
|
|
29
|
+
| Test suite | None | None | 388+ tests with security validation |
|
|
30
30
|
| Runtime dependencies | Varies | Varies | **Zero** |
|
|
31
31
|
|
|
32
32
|
## Quick Start
|
|
@@ -47,6 +47,17 @@ Creates a new project with `.agent/` pre-configured. Templates: `minimal`, `node
|
|
|
47
47
|
npx @devran-ai/kit init
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
## How It Works in Teams
|
|
51
|
+
|
|
52
|
+
Devran AI Kit is **personal developer tooling** — like your IDE settings. `kit init` adds `.agent/` to `.gitignore` by default so it stays local.
|
|
53
|
+
|
|
54
|
+
| Mode | Command | Behavior |
|
|
55
|
+
|------|---------|----------|
|
|
56
|
+
| Personal (default) | `kit init` | `.agent/` gitignored — local only |
|
|
57
|
+
| Team (opt-in) | `kit init --shared` | `.agent/` committed — shared with team |
|
|
58
|
+
|
|
59
|
+
Your project's `CLAUDE.md` remains the single source of truth. The kit enhances your personal workflow without affecting teammates. Anyone who wants it runs `npx @devran-ai/kit init`.
|
|
60
|
+
|
|
50
61
|
### Updating
|
|
51
62
|
|
|
52
63
|
```bash
|
|
@@ -84,7 +95,24 @@ IDLE -> EXPLORE -> PLAN -> IMPLEMENT -> VERIFY -> CHECKPOINT -> REVIEW -> DEPLOY
|
|
|
84
95
|
|
|
85
96
|
Each phase requires explicit developer approval before transitioning. The engine enforces governance rules and tracks session state across restarts.
|
|
86
97
|
|
|
87
|
-
## What's New
|
|
98
|
+
## What's New
|
|
99
|
+
|
|
100
|
+
### v4.2.1
|
|
101
|
+
|
|
102
|
+
| Change | Details |
|
|
103
|
+
|---|---|
|
|
104
|
+
| Untrack hint | Detects tracked `.agent/` and prints `git rm --cached` command |
|
|
105
|
+
| Documentation fixes | Updated release notes, stale test counts corrected |
|
|
106
|
+
|
|
107
|
+
### v4.2.0
|
|
108
|
+
|
|
109
|
+
| Change | Details |
|
|
110
|
+
|---|---|
|
|
111
|
+
| Gitignore by default | `kit init` adds `.agent/` to `.gitignore` — personal dev tooling |
|
|
112
|
+
| `--shared` flag | Opt-in to commit `.agent/` for team sharing |
|
|
113
|
+
| 388 tests | 37 test suites across unit, structural, and security |
|
|
114
|
+
|
|
115
|
+
### v4.1.0
|
|
88
116
|
|
|
89
117
|
| Change | Details |
|
|
90
118
|
|---|---|
|
|
@@ -92,7 +120,6 @@ Each phase requires explicit developer approval before transitioning. The engine
|
|
|
92
120
|
| Multi-language reviewers | TypeScript, Python, Go dedicated review agents |
|
|
93
121
|
| Continuous learning | Confidence scoring with time-based decay model |
|
|
94
122
|
| MCP server templates | GitHub, Supabase, Vercel, PostgreSQL, Filesystem |
|
|
95
|
-
| Test coverage | 382 tests (up from 348) across 36 test suites |
|
|
96
123
|
|
|
97
124
|
## Cross-IDE Support
|
|
98
125
|
|
|
@@ -189,7 +216,7 @@ kit/
|
|
|
189
216
|
├── create-kit-app/ # Project scaffolder
|
|
190
217
|
├── docs/ # MkDocs documentation site
|
|
191
218
|
├── examples/ # Starter examples (minimal, full-stack)
|
|
192
|
-
└── tests/ #
|
|
219
|
+
└── tests/ # 388 tests (unit, structural, security)
|
|
193
220
|
```
|
|
194
221
|
|
|
195
222
|
## Security
|
package/bin/kit.js
CHANGED
|
@@ -93,6 +93,7 @@ ${colors.bright}Options:${colors.reset}
|
|
|
93
93
|
--file <path> CI log file for heal command
|
|
94
94
|
--ide <name> Generate config for single IDE (cursor|opencode|codex)
|
|
95
95
|
--skip-ide Skip IDE config generation
|
|
96
|
+
--shared Commit .agent/ to repo (team mode — skip .gitignore)
|
|
96
97
|
|
|
97
98
|
${colors.bright}Examples:${colors.reset}
|
|
98
99
|
npx @devran-ai/kit init
|
|
@@ -247,7 +248,7 @@ function initCommand(options) {
|
|
|
247
248
|
|
|
248
249
|
// Dynamic step counter — avoids hardcoded step strings
|
|
249
250
|
const isForceWithBackup = backupPath !== null;
|
|
250
|
-
const totalSteps = isForceWithBackup ?
|
|
251
|
+
const totalSteps = isForceWithBackup ? 7 : 5;
|
|
251
252
|
let currentStep = isForceWithBackup ? 2 : 1;
|
|
252
253
|
|
|
253
254
|
// C-3: Atomic copy via temp directory
|
|
@@ -327,6 +328,39 @@ function initCommand(options) {
|
|
|
327
328
|
}
|
|
328
329
|
currentStep++;
|
|
329
330
|
|
|
331
|
+
// Add .agent/ to .gitignore (unless --shared)
|
|
332
|
+
if (!options.shared) {
|
|
333
|
+
const { addToGitignore } = require('../lib/io');
|
|
334
|
+
const { execSync } = require('child_process');
|
|
335
|
+
logStep(`${currentStep}/${totalSteps}`, 'Configuring .gitignore...');
|
|
336
|
+
try {
|
|
337
|
+
const result = addToGitignore(targetDir);
|
|
338
|
+
if (result.added) {
|
|
339
|
+
log(' ✓ .agent/ added to .gitignore (local dev tooling)', 'green');
|
|
340
|
+
} else {
|
|
341
|
+
log(' ✓ .agent/ already in .gitignore', 'green');
|
|
342
|
+
}
|
|
343
|
+
} catch (err) {
|
|
344
|
+
log(` ⚠️ Could not update .gitignore: ${err.message}`, 'yellow');
|
|
345
|
+
}
|
|
346
|
+
// Detect if .agent/ is still git-tracked despite being gitignored
|
|
347
|
+
try {
|
|
348
|
+
const tracked = execSync('git ls-files .agent/', { cwd: targetDir, encoding: 'utf-8' }).trim();
|
|
349
|
+
if (tracked.length > 0) {
|
|
350
|
+
log('', 'reset');
|
|
351
|
+
log(' ⚠️ .agent/ is gitignored but still tracked by git.', 'yellow');
|
|
352
|
+
log(' Run this to untrack (keeps local files):', 'yellow');
|
|
353
|
+
log(` ${colors.cyan}git rm -r --cached .agent/${colors.reset}`, 'reset');
|
|
354
|
+
}
|
|
355
|
+
} catch (err) {
|
|
356
|
+
// Not a git repo or git not available — skip hint
|
|
357
|
+
}
|
|
358
|
+
} else {
|
|
359
|
+
logStep(`${currentStep}/${totalSteps}`, 'Shared mode — .agent/ will be committed');
|
|
360
|
+
log(' ℹ .gitignore not modified (--shared flag)', 'cyan');
|
|
361
|
+
}
|
|
362
|
+
currentStep++;
|
|
363
|
+
|
|
330
364
|
// Final message
|
|
331
365
|
logStep(`${currentStep}/${totalSteps}`, 'Setup complete!');
|
|
332
366
|
|
|
@@ -683,6 +717,7 @@ const options = {
|
|
|
683
717
|
dryRun: args.includes('--dry-run'),
|
|
684
718
|
apply: args.includes('--apply'),
|
|
685
719
|
skipIde: args.includes('--skip-ide'),
|
|
720
|
+
shared: args.includes('--shared'),
|
|
686
721
|
ide: null,
|
|
687
722
|
path: null,
|
|
688
723
|
file: null,
|
package/lib/io.js
CHANGED
|
@@ -139,8 +139,44 @@ function safeCopyDirSync(src, dest) {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
/**
|
|
143
|
+
* Adds Devran AI Kit entries to a project's .gitignore.
|
|
144
|
+
* Creates .gitignore if it doesn't exist. Idempotent — skips
|
|
145
|
+
* if entries already present. Uses marker-based detection to
|
|
146
|
+
* avoid duplicate entries across multiple runs.
|
|
147
|
+
*
|
|
148
|
+
* @param {string} projectRoot - Project root directory
|
|
149
|
+
* @returns {{ added: boolean, reason: string }}
|
|
150
|
+
*/
|
|
151
|
+
function addToGitignore(projectRoot) {
|
|
152
|
+
const gitignorePath = path.join(projectRoot, '.gitignore');
|
|
153
|
+
const marker = '# Devran AI Kit';
|
|
154
|
+
const block = [
|
|
155
|
+
'',
|
|
156
|
+
'# Devran AI Kit (local dev tooling)',
|
|
157
|
+
'# Install: npx @devran-ai/kit init',
|
|
158
|
+
'.agent/',
|
|
159
|
+
].join('\n') + '\n';
|
|
160
|
+
|
|
161
|
+
let content = '';
|
|
162
|
+
if (fs.existsSync(gitignorePath)) {
|
|
163
|
+
content = fs.readFileSync(gitignorePath, 'utf-8');
|
|
164
|
+
// Primary check: is .agent/ already ignored?
|
|
165
|
+
if (content.includes('.agent/')) {
|
|
166
|
+
if (content.includes(marker)) {
|
|
167
|
+
return { added: false, reason: 'already-present' };
|
|
168
|
+
}
|
|
169
|
+
return { added: false, reason: 'already-ignored' };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
fs.appendFileSync(gitignorePath, block, 'utf-8');
|
|
174
|
+
return { added: true, reason: 'added' };
|
|
175
|
+
}
|
|
176
|
+
|
|
142
177
|
module.exports = {
|
|
143
178
|
writeJsonAtomic,
|
|
144
179
|
readJsonSafe,
|
|
145
180
|
safeCopyDirSync,
|
|
181
|
+
addToGitignore,
|
|
146
182
|
};
|
package/package.json
CHANGED