delimit-cli 3.11.2 → 3.11.4
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/delimit-setup.js +82 -23
- package/bin/delimit.js +6 -6
- package/package.json +1 -1
- package/server.json +2 -2
package/bin/delimit-setup.js
CHANGED
|
@@ -338,40 +338,36 @@ Run full governance compliance checks. Verify security, policy compliance, evide
|
|
|
338
338
|
}
|
|
339
339
|
log(` ${green('✓')} ${installed} agents installed (${Object.keys(agents).length - installed} already existed)`);
|
|
340
340
|
|
|
341
|
-
// Step 5: Create CLAUDE.md
|
|
342
|
-
step(5, 'Setting up
|
|
341
|
+
// Step 5: Create/update CLAUDE.md and platform instruction files
|
|
342
|
+
step(5, 'Setting up AI instruction files...');
|
|
343
343
|
|
|
344
344
|
const claudeMd = path.join(os.homedir(), 'CLAUDE.md');
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
log(` ${green('✓')} Created ${claudeMd} with
|
|
345
|
+
const claudeResult = upsertDelimitSection(claudeMd);
|
|
346
|
+
if (claudeResult.action === 'created') {
|
|
347
|
+
log(` ${green('✓')} Created ${claudeMd} with governance triggers`);
|
|
348
|
+
} else if (claudeResult.action === 'updated') {
|
|
349
|
+
log(` ${green('✓')} Updated Delimit section in ${claudeMd} (version changed)`);
|
|
350
|
+
} else if (claudeResult.action === 'appended') {
|
|
351
|
+
log(` ${green('✓')} Appended Delimit section to ${claudeMd} (user content preserved)`);
|
|
348
352
|
} else {
|
|
349
|
-
|
|
350
|
-
const existing = fs.readFileSync(claudeMd, 'utf-8');
|
|
351
|
-
if (existing.includes('# Delimit AI Guardrails') || existing.includes('delimit_init') || existing.includes('delimit_lint') || existing.includes('persistent memory, verified execution')) {
|
|
352
|
-
fs.writeFileSync(claudeMd, getClaudeMdContent());
|
|
353
|
-
log(` ${green('✓')} Updated ${claudeMd} with improved onboarding`);
|
|
354
|
-
} else {
|
|
355
|
-
log(` ${dim(' CLAUDE.md already exists with custom content — skipped')}`);
|
|
356
|
-
}
|
|
353
|
+
log(` ${dim(' CLAUDE.md already up to date')}`);
|
|
357
354
|
}
|
|
358
355
|
|
|
359
|
-
// Create instruction files for other platforms
|
|
360
|
-
const instructionContent = getClaudeMdContent();
|
|
361
|
-
|
|
362
356
|
// Codex instructions
|
|
363
357
|
const codexInstructions = path.join(os.homedir(), '.codex', 'instructions.md');
|
|
364
358
|
if (fs.existsSync(path.join(os.homedir(), '.codex'))) {
|
|
365
|
-
|
|
366
|
-
|
|
359
|
+
const codexResult = upsertDelimitSection(codexInstructions);
|
|
360
|
+
if (codexResult.action !== 'unchanged') {
|
|
361
|
+
log(` ${green('✓')} ${codexResult.action === 'created' ? 'Created' : 'Updated'} ${codexInstructions}`);
|
|
367
362
|
}
|
|
368
363
|
}
|
|
369
364
|
|
|
370
365
|
// Cursor rules
|
|
371
366
|
const cursorRules = path.join(os.homedir(), '.cursorrules');
|
|
372
367
|
if (fs.existsSync(path.join(os.homedir(), '.cursor'))) {
|
|
373
|
-
|
|
374
|
-
|
|
368
|
+
const cursorResult = upsertDelimitSection(cursorRules);
|
|
369
|
+
if (cursorResult.action !== 'unchanged') {
|
|
370
|
+
log(` ${green('✓')} ${cursorResult.action === 'created' ? 'Created' : 'Updated'} ${cursorRules}`);
|
|
375
371
|
}
|
|
376
372
|
}
|
|
377
373
|
|
|
@@ -540,8 +536,11 @@ echo "[Delimit] ${toolName} not found" >&2; exit 127
|
|
|
540
536
|
log('');
|
|
541
537
|
}
|
|
542
538
|
|
|
543
|
-
function
|
|
544
|
-
|
|
539
|
+
function getDelimitSection() {
|
|
540
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
541
|
+
const version = pkg.version || '0.0.0';
|
|
542
|
+
return `<!-- delimit:start v${version} -->
|
|
543
|
+
# Delimit
|
|
545
544
|
|
|
546
545
|
One workspace for every AI coding assistant.
|
|
547
546
|
|
|
@@ -577,7 +576,67 @@ Add breaking change detection to any repo:
|
|
|
577
576
|
- Docs: https://delimit.ai/docs
|
|
578
577
|
- GitHub: https://github.com/delimit-ai/delimit
|
|
579
578
|
- Action: https://github.com/marketplace/actions/delimit-api-governance
|
|
580
|
-
|
|
579
|
+
<!-- delimit:end -->`;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
function getClaudeMdContent() {
|
|
583
|
+
return getDelimitSection() + '\n';
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* Upsert the Delimit section in a file using <!-- delimit:start --> / <!-- delimit:end --> markers.
|
|
588
|
+
* If markers exist, replaces only that region (preserving user content above/below).
|
|
589
|
+
* If no markers exist but old Delimit content is detected, replaces the whole file.
|
|
590
|
+
* If no Delimit content at all, appends the section.
|
|
591
|
+
* Returns { action: 'created' | 'updated' | 'unchanged' | 'appended' }
|
|
592
|
+
*/
|
|
593
|
+
function upsertDelimitSection(filePath) {
|
|
594
|
+
const newSection = getDelimitSection();
|
|
595
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
596
|
+
const version = pkg.version || '0.0.0';
|
|
597
|
+
|
|
598
|
+
if (!fs.existsSync(filePath)) {
|
|
599
|
+
fs.writeFileSync(filePath, newSection + '\n');
|
|
600
|
+
return { action: 'created' };
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
const existing = fs.readFileSync(filePath, 'utf-8');
|
|
604
|
+
|
|
605
|
+
// Check if markers already exist
|
|
606
|
+
const startMarkerRe = /<!-- delimit:start[^>]*-->/;
|
|
607
|
+
const endMarker = '<!-- delimit:end -->';
|
|
608
|
+
const hasStart = startMarkerRe.test(existing);
|
|
609
|
+
const hasEnd = existing.includes(endMarker);
|
|
610
|
+
|
|
611
|
+
if (hasStart && hasEnd) {
|
|
612
|
+
// Extract current version from the marker
|
|
613
|
+
const versionMatch = existing.match(/<!-- delimit:start v([^ ]+) -->/);
|
|
614
|
+
const currentVersion = versionMatch ? versionMatch[1] : '';
|
|
615
|
+
if (currentVersion === version) {
|
|
616
|
+
return { action: 'unchanged' };
|
|
617
|
+
}
|
|
618
|
+
// Replace only the delimit section
|
|
619
|
+
const before = existing.substring(0, existing.search(startMarkerRe));
|
|
620
|
+
const after = existing.substring(existing.indexOf(endMarker) + endMarker.length);
|
|
621
|
+
fs.writeFileSync(filePath, before + newSection + after);
|
|
622
|
+
return { action: 'updated' };
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
// No markers — check for old Delimit content that should be replaced
|
|
626
|
+
const isOldDelimit = existing.includes('# Delimit AI Guardrails') ||
|
|
627
|
+
existing.includes('delimit_init') ||
|
|
628
|
+
existing.includes('persistent memory, verified execution') ||
|
|
629
|
+
(existing.includes('# Delimit') && existing.includes('delimit_ledger_context'));
|
|
630
|
+
|
|
631
|
+
if (isOldDelimit) {
|
|
632
|
+
fs.writeFileSync(filePath, newSection + '\n');
|
|
633
|
+
return { action: 'updated' };
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
// File exists with user content but no Delimit section — append
|
|
637
|
+
const separator = existing.endsWith('\n') ? '\n' : '\n\n';
|
|
638
|
+
fs.writeFileSync(filePath, existing + separator + newSection + '\n');
|
|
639
|
+
return { action: 'appended' };
|
|
581
640
|
}
|
|
582
641
|
|
|
583
642
|
function copyDir(src, dest) {
|
package/bin/delimit.js
CHANGED
|
@@ -41,7 +41,7 @@ function findRealExecutable(command, customPath) {
|
|
|
41
41
|
if (command === 'pre-commit-check' || command === 'pre-commit') {
|
|
42
42
|
log('Running pre-commit governance checks...', GREEN);
|
|
43
43
|
|
|
44
|
-
// Verify PATH is still
|
|
44
|
+
// Verify PATH is still integrateed
|
|
45
45
|
if (!process.env.PATH.includes('.delimit/shims')) {
|
|
46
46
|
error('Governance layer is not active in your PATH!');
|
|
47
47
|
error('Commit REJECTED. Please restart your terminal or run: source ~/.bashrc');
|
|
@@ -183,9 +183,9 @@ if (command === 'pre-commit-check' || command === 'pre-commit') {
|
|
|
183
183
|
log('Delimit Governance Status', BLUE);
|
|
184
184
|
log('═══════════════════════════════════════════', BLUE);
|
|
185
185
|
|
|
186
|
-
// Check PATH
|
|
187
|
-
const
|
|
188
|
-
log(`PATH Hijack: ${
|
|
186
|
+
// Check PATH integrateion
|
|
187
|
+
const pathIntegrateed = process.env.PATH.includes('.delimit/shims');
|
|
188
|
+
log(`PATH Hijack: ${pathIntegrateed ? '✓ ACTIVE' : '✗ INACTIVE'}`, pathIntegrateed ? GREEN : RED);
|
|
189
189
|
|
|
190
190
|
// Check Git hooks
|
|
191
191
|
try {
|
|
@@ -206,7 +206,7 @@ if (command === 'pre-commit-check' || command === 'pre-commit') {
|
|
|
206
206
|
|
|
207
207
|
log('═══════════════════════════════════════════', BLUE);
|
|
208
208
|
|
|
209
|
-
} else if (command === 'install' || command === '
|
|
209
|
+
} else if (command === 'install' || command === 'integrate') {
|
|
210
210
|
log('Installing Delimit governance layer...', GREEN);
|
|
211
211
|
execSync(`node ${path.join(__dirname, '../../scripts/install-governance.js')}`);
|
|
212
212
|
|
|
@@ -220,7 +220,7 @@ Usage: delimit [command]
|
|
|
220
220
|
|
|
221
221
|
Commands:
|
|
222
222
|
status Check governance status
|
|
223
|
-
install/
|
|
223
|
+
install/integrate Install governance layer system-wide
|
|
224
224
|
|
|
225
225
|
Internal Commands (called by hooks/shims):
|
|
226
226
|
pre-commit-check Run pre-commit governance
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "delimit-cli",
|
|
3
3
|
"mcpName": "io.github.delimit-ai/delimit",
|
|
4
|
-
"version": "3.11.
|
|
4
|
+
"version": "3.11.4",
|
|
5
5
|
"description": "One workspace for every AI coding assistant. Tasks, memory, and governance carry between Claude Code, Codex, and Gemini CLI.",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"files": [
|
package/server.json
CHANGED
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
"url": "https://github.com/delimit-ai/delimit",
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
|
-
"version": "3.11.
|
|
10
|
+
"version": "3.11.4",
|
|
11
11
|
"websiteUrl": "https://delimit.ai",
|
|
12
12
|
"packages": [
|
|
13
13
|
{
|
|
14
14
|
"registryType": "npm",
|
|
15
15
|
"identifier": "delimit-cli",
|
|
16
|
-
"version": "3.11.
|
|
16
|
+
"version": "3.11.4",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
|
19
19
|
}
|