@undeemed/get-shit-done-codex 1.20.10 → 1.21.0
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/.codex/config.toml +77 -0
- package/README.md +33 -10
- package/bin/install.js +133 -36
- package/{AGENTS.md → get-shit-done/AGENTS.md} +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
:schema https://developers.openai.com/codex/config-schema.json
|
|
2
|
+
|
|
3
|
+
# Project-scoped Codex config for get-shit-done-codex.
|
|
4
|
+
# Loaded only when this project is trusted.
|
|
5
|
+
# Docs:
|
|
6
|
+
# - https://developers.openai.com/codex/config-basic
|
|
7
|
+
# - https://developers.openai.com/codex/config-reference
|
|
8
|
+
# - https://developers.openai.com/codex/multi-agent
|
|
9
|
+
|
|
10
|
+
web_search = "live"
|
|
11
|
+
|
|
12
|
+
[features]
|
|
13
|
+
multi_agent = true
|
|
14
|
+
collaboration_modes = true
|
|
15
|
+
shell_tool = true
|
|
16
|
+
shell_snapshot = true
|
|
17
|
+
unified_exec = true
|
|
18
|
+
apply_patch_freeform = true
|
|
19
|
+
personality = true
|
|
20
|
+
request_rule = true
|
|
21
|
+
|
|
22
|
+
[agents]
|
|
23
|
+
max_threads = 12
|
|
24
|
+
max_depth = 3
|
|
25
|
+
|
|
26
|
+
[agents."general-purpose"]
|
|
27
|
+
description = "General fallback role for GSD orchestration and ad-hoc subtasks."
|
|
28
|
+
|
|
29
|
+
[agents."gsd-codebase-mapper"]
|
|
30
|
+
description = "Map stack, architecture, conventions, testing, and concerns into .planning/codebase docs."
|
|
31
|
+
developer_instructions = "Read and follow agents/gsd-codebase-mapper.md for your complete role definition."
|
|
32
|
+
|
|
33
|
+
[agents."gsd-debugger"]
|
|
34
|
+
description = "Investigate regressions with hypothesis testing, isolate root cause, and propose or apply fixes."
|
|
35
|
+
developer_instructions = "Read and follow agents/gsd-debugger.md for your complete role definition."
|
|
36
|
+
|
|
37
|
+
[agents."gsd-executor"]
|
|
38
|
+
description = "Execute PLAN.md tasks with atomic commits, verification, and summary updates."
|
|
39
|
+
developer_instructions = "Read and follow agents/gsd-executor.md for your complete role definition."
|
|
40
|
+
|
|
41
|
+
[agents."gsd-integration-checker"]
|
|
42
|
+
description = "Verify cross-phase wiring and end-to-end behavior across delivered milestones."
|
|
43
|
+
developer_instructions = "Read and follow agents/gsd-integration-checker.md for your complete role definition."
|
|
44
|
+
|
|
45
|
+
[agents."gsd-phase-researcher"]
|
|
46
|
+
description = "Research phase implementation patterns and write RESEARCH.md artifacts for planners."
|
|
47
|
+
developer_instructions = "Read and follow agents/gsd-phase-researcher.md for your complete role definition."
|
|
48
|
+
|
|
49
|
+
[agents."gsd-plan-checker"]
|
|
50
|
+
description = "Stress-test plan quality and requirement coverage before execution."
|
|
51
|
+
developer_instructions = "Read and follow agents/gsd-plan-checker.md for your complete role definition."
|
|
52
|
+
|
|
53
|
+
[agents."gsd-planner"]
|
|
54
|
+
description = "Draft atomic PLAN.md files with objective, context, tasks, and success criteria."
|
|
55
|
+
developer_instructions = "Read and follow agents/gsd-planner.md for your complete role definition."
|
|
56
|
+
|
|
57
|
+
[agents."gsd-project-researcher"]
|
|
58
|
+
description = "Research ecosystem and produce project-level research docs for roadmap creation."
|
|
59
|
+
developer_instructions = "Read and follow agents/gsd-project-researcher.md for your complete role definition."
|
|
60
|
+
|
|
61
|
+
[agents."gsd-research-synthesizer"]
|
|
62
|
+
description = "Synthesize parallel research artifacts into actionable roadmap inputs."
|
|
63
|
+
developer_instructions = "Read and follow agents/gsd-research-synthesizer.md for your complete role definition."
|
|
64
|
+
|
|
65
|
+
[agents."gsd-roadmapper"]
|
|
66
|
+
description = "Turn requirements into phased ROADMAP.md structure with clear success criteria."
|
|
67
|
+
developer_instructions = "Read and follow agents/gsd-roadmapper.md for your complete role definition."
|
|
68
|
+
|
|
69
|
+
[agents."gsd-verifier"]
|
|
70
|
+
description = "Perform goal-backward verification that outcomes are actually delivered in code."
|
|
71
|
+
developer_instructions = "Read and follow agents/gsd-verifier.md for your complete role definition."
|
|
72
|
+
|
|
73
|
+
[mcp_servers.context7]
|
|
74
|
+
url = "https://mcp.context7.com/mcp"
|
|
75
|
+
|
|
76
|
+
[mcp_servers.context7.env_http_headers]
|
|
77
|
+
CONTEXT7_API_KEY = "CONTEXT7_API_KEY"
|
package/README.md
CHANGED
|
@@ -21,7 +21,7 @@ get-shit-done-codex (GSD) solves context rot — the quality degradation that ha
|
|
|
21
21
|
|
|
22
22
|
## What Changed In This Fork
|
|
23
23
|
|
|
24
|
-
- **AGENTS-first for Codex:** `AGENTS.md` is the primary behavior contract
|
|
24
|
+
- **AGENTS-first for Codex:** `AGENTS.md` is the primary behavior contract . [Agent.md > Skills.md](https://vercel.com/blog/agents-md-outperforms-skills-in-our-agent-evals)
|
|
25
25
|
- **Two command surfaces:** choose native skills (`$gsd-*`) or prompt aliases (`/prompts:gsd-*`).
|
|
26
26
|
- **Installer integrity checks:** `--verify` audits installation health, `--repair` restores missing artifacts.
|
|
27
27
|
- **Mode-aware installs:** installer adapts `AGENTS.md` and command guidance to your chosen mode.
|
|
@@ -58,14 +58,29 @@ npx @undeemed/get-shit-done-codex --verify --repair --global # Auto-repair
|
|
|
58
58
|
|
|
59
59
|
### Codex Modes
|
|
60
60
|
|
|
61
|
-
| Mode
|
|
62
|
-
|
|
|
63
|
-
| `skills` (default) | `skills/gsd-*/SKILL.md`
|
|
64
|
-
| `prompts`
|
|
61
|
+
| Mode | Installs | Use Commands Like |
|
|
62
|
+
| ------------------ | ----------------------- | -------------------------------- |
|
|
63
|
+
| `skills` (default) | `skills/gsd-*/SKILL.md` | `$gsd-help`, `$gsd-plan-phase 1` |
|
|
64
|
+
| `prompts` | `prompts/gsd-*.md` | `/prompts:gsd-help` |
|
|
65
65
|
|
|
66
66
|
After installation, run `codex` (CLI) or `codex app` (Desktop), then run `$gsd-help` (or `/prompts:gsd-help` in prompts mode).
|
|
67
67
|
Single-surface policy: mixed `skills/` + `prompts/` installs are treated as drift and fail `--verify`.
|
|
68
68
|
|
|
69
|
+
### What Gets Installed
|
|
70
|
+
|
|
71
|
+
The installer distributes everything GSD needs:
|
|
72
|
+
|
|
73
|
+
- **`AGENTS.md`** — behavior contract and command reference for Codex
|
|
74
|
+
- **`.codex/config.toml`** — multi-agent mode, feature flags, agent role registry, MCP servers
|
|
75
|
+
- **`agents/gsd-*.md`** — rich agent definitions (700+ lines each) for sub-agent orchestration
|
|
76
|
+
- **`skills/gsd-*/SKILL.md`** or **`prompts/gsd-*.md`** — command surfaces
|
|
77
|
+
- **`get-shit-done/`** — workflow files, templates, and references
|
|
78
|
+
|
|
79
|
+
On first run, Codex will prompt you to **trust the project** so the config takes effect (one-time, one-click).
|
|
80
|
+
|
|
81
|
+
> [!NOTE]
|
|
82
|
+
> `.codex/config.toml` is non-destructive — the installer skips it if you already have one, so your customizations are preserved on updates.
|
|
83
|
+
|
|
69
84
|
### Installed File Structure
|
|
70
85
|
|
|
71
86
|
`$` skills mode (`--codex-mode skills`, default):
|
|
@@ -73,8 +88,9 @@ Single-surface policy: mixed `skills/` + `prompts/` installs are treated as drif
|
|
|
73
88
|
```text
|
|
74
89
|
~/.codex/
|
|
75
90
|
├── AGENTS.md
|
|
76
|
-
├──
|
|
77
|
-
|
|
91
|
+
├── .codex/config.toml
|
|
92
|
+
├── agents/gsd-*.md
|
|
93
|
+
├── skills/gsd-*/SKILL.md
|
|
78
94
|
└── get-shit-done/
|
|
79
95
|
```
|
|
80
96
|
|
|
@@ -83,8 +99,9 @@ Single-surface policy: mixed `skills/` + `prompts/` installs are treated as drif
|
|
|
83
99
|
```text
|
|
84
100
|
~/.codex/
|
|
85
101
|
├── AGENTS.md
|
|
86
|
-
├──
|
|
87
|
-
|
|
102
|
+
├── .codex/config.toml
|
|
103
|
+
├── agents/gsd-*.md
|
|
104
|
+
├── prompts/gsd-*.md
|
|
88
105
|
└── get-shit-done/
|
|
89
106
|
```
|
|
90
107
|
|
|
@@ -92,7 +109,7 @@ For local installs, replace `~/.codex/` with `./`.
|
|
|
92
109
|
|
|
93
110
|
### Verify And Repair
|
|
94
111
|
|
|
95
|
-
- `--verify`: checks `AGENTS.md`, command surfaces, workflow assets, and version metadata.
|
|
112
|
+
- `--verify`: checks `AGENTS.md`, `config.toml`, agent definitions, command surfaces, workflow assets, and version metadata.
|
|
96
113
|
- `--verify --repair`: reinstalls missing/broken artifacts and verifies again.
|
|
97
114
|
- Migration is **detect-then-confirm**, not automatic:
|
|
98
115
|
- Interactive install asks before removing legacy surface files
|
|
@@ -251,6 +268,12 @@ Git bisect finds exact failing task. Each task independently revertable.
|
|
|
251
268
|
- Check `~/.codex/skills/gsd-*/SKILL.md` (global) or `./skills/gsd-*/SKILL.md` (local)
|
|
252
269
|
- If using prompt aliases, check `~/.codex/prompts/gsd-*.md` (global) or `./prompts/gsd-*.md` (local)
|
|
253
270
|
|
|
271
|
+
**Multi-agent / sub-agents not working?**
|
|
272
|
+
|
|
273
|
+
- Check `.codex/config.toml` exists in your install directory
|
|
274
|
+
- Ensure the project is **trusted** in Codex (it prompts on first run)
|
|
275
|
+
- Run `--verify` to check all artifacts are present
|
|
276
|
+
|
|
254
277
|
**Update to latest:**
|
|
255
278
|
|
|
256
279
|
```bash
|
package/bin/install.js
CHANGED
|
@@ -305,6 +305,52 @@ function removeSkillAliases(skillsDir) {
|
|
|
305
305
|
return removed;
|
|
306
306
|
}
|
|
307
307
|
|
|
308
|
+
function installConfig(src, codexDir, pathPrefix) {
|
|
309
|
+
const configSrc = path.join(src, '.codex', 'config.toml');
|
|
310
|
+
if (!fs.existsSync(configSrc)) return false;
|
|
311
|
+
const codexConfigDir = path.join(codexDir, '.codex');
|
|
312
|
+
const configDest = path.join(codexConfigDir, 'config.toml');
|
|
313
|
+
if (fs.existsSync(configDest)) return false;
|
|
314
|
+
fs.mkdirSync(codexConfigDir, { recursive: true });
|
|
315
|
+
let content = applyPathPrefixReplacements(fs.readFileSync(configSrc, 'utf8'), pathPrefix);
|
|
316
|
+
if (pathPrefix === '~/.codex/') {
|
|
317
|
+
content = content.replace(/agents\/gsd-/g, '~/.codex/agents/gsd-');
|
|
318
|
+
}
|
|
319
|
+
fs.writeFileSync(configDest, content, 'utf8');
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
function installAgentDefs(src, codexDir, pathPrefix, mode) {
|
|
324
|
+
const agentsSrc = path.join(src, 'agents');
|
|
325
|
+
if (!fs.existsSync(agentsSrc)) return 0;
|
|
326
|
+
const agentsDest = path.join(codexDir, 'agents');
|
|
327
|
+
fs.mkdirSync(agentsDest, { recursive: true });
|
|
328
|
+
const entries = fs.readdirSync(agentsSrc).filter((e) => /^gsd-.*\.md$/i.test(e));
|
|
329
|
+
for (const entry of entries) {
|
|
330
|
+
let content = fs.readFileSync(path.join(agentsSrc, entry), 'utf8');
|
|
331
|
+
content = applyReplacements(content, pathPrefix);
|
|
332
|
+
if (mode === 'skills') {
|
|
333
|
+
content = convertPromptRefsToSkillRefs(content);
|
|
334
|
+
} else if (mode === 'prompts') {
|
|
335
|
+
content = convertSkillRefsToPromptRefs(content);
|
|
336
|
+
}
|
|
337
|
+
fs.writeFileSync(path.join(agentsDest, entry), content, 'utf8');
|
|
338
|
+
}
|
|
339
|
+
return entries.length;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
function countSourceAgentDefs(src) {
|
|
343
|
+
const agentsSrc = path.join(src, 'agents');
|
|
344
|
+
if (!fs.existsSync(agentsSrc)) return 0;
|
|
345
|
+
return fs.readdirSync(agentsSrc).filter((e) => /^gsd-.*\.md$/i.test(e)).length;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function countInstalledAgentDefs(codexDir) {
|
|
349
|
+
const agentsDest = path.join(codexDir, 'agents');
|
|
350
|
+
if (!fs.existsSync(agentsDest)) return 0;
|
|
351
|
+
return fs.readdirSync(agentsDest).filter((e) => /^gsd-.*\.md$/i.test(e)).length;
|
|
352
|
+
}
|
|
353
|
+
|
|
308
354
|
function detectMigrationPlan(codexDir, mode) {
|
|
309
355
|
const promptsDir = path.join(codexDir, 'prompts');
|
|
310
356
|
const skillsDir = path.join(codexDir, 'skills');
|
|
@@ -450,8 +496,15 @@ function verifyInstall(isGlobal, expectedMode, strictMode = false) {
|
|
|
450
496
|
const checks = [];
|
|
451
497
|
const addCheck = (ok, label, detail) => checks.push({ ok, label, detail });
|
|
452
498
|
|
|
499
|
+
const expectedAgentCount = countSourceAgentDefs(src);
|
|
500
|
+
|
|
453
501
|
addCheck(fs.existsSync(codexDir), 'Config directory exists', codexDir);
|
|
454
502
|
addCheck(fs.existsSync(path.join(codexDir, 'AGENTS.md')), 'AGENTS.md installed', path.join(codexDir, 'AGENTS.md'));
|
|
503
|
+
addCheck(fs.existsSync(path.join(codexDir, '.codex', 'config.toml')), 'config.toml installed', path.join(codexDir, '.codex', 'config.toml'));
|
|
504
|
+
if (expectedAgentCount > 0) {
|
|
505
|
+
const installedAgents = countInstalledAgentDefs(codexDir);
|
|
506
|
+
addCheck(installedAgents === expectedAgentCount, 'Agent definitions complete', `${installedAgents}/${expectedAgentCount}`);
|
|
507
|
+
}
|
|
455
508
|
addCheck(fs.existsSync(workflowRoot), 'get-shit-done assets installed', workflowRoot);
|
|
456
509
|
addCheck(fs.existsSync(path.join(workflowRoot, 'workflows')), 'Workflow directory installed', path.join(workflowRoot, 'workflows'));
|
|
457
510
|
addCheck(fs.existsSync(path.join(workflowRoot, 'templates')), 'Template directory installed', path.join(workflowRoot, 'templates'));
|
|
@@ -496,7 +549,7 @@ function verifyInstall(isGlobal, expectedMode, strictMode = false) {
|
|
|
496
549
|
return { ok, detectedMode, checkedMode: modeToCheck };
|
|
497
550
|
}
|
|
498
551
|
|
|
499
|
-
function installCore(isGlobal, mode, migrationPlan, applyMigration) {
|
|
552
|
+
function installCore(isGlobal, mode, migrationPlan, applyMigration, done = () => {}) {
|
|
500
553
|
const src = path.join(__dirname, '..');
|
|
501
554
|
const { codexDir, locationLabel, pathPrefix } = getInstallContext(isGlobal);
|
|
502
555
|
const installPromptsEnabled = mode === 'prompts';
|
|
@@ -508,43 +561,61 @@ function installCore(isGlobal, mode, migrationPlan, applyMigration) {
|
|
|
508
561
|
applyMigrationPlan(migrationPlan);
|
|
509
562
|
}
|
|
510
563
|
|
|
511
|
-
const agentsSrc = path.join(src, 'AGENTS.md');
|
|
564
|
+
const agentsSrc = path.join(src, 'get-shit-done', 'AGENTS.md');
|
|
512
565
|
const agentsDest = path.join(codexDir, 'AGENTS.md');
|
|
513
|
-
|
|
514
|
-
agentsContent = adaptAgentsForCodexMode(agentsContent, mode);
|
|
515
|
-
fs.writeFileSync(agentsDest, agentsContent, 'utf8');
|
|
516
|
-
console.log(` ${green}✓${reset} Installed AGENTS.md`);
|
|
566
|
+
const agentsExisted = fs.existsSync(agentsDest);
|
|
517
567
|
|
|
518
|
-
const
|
|
519
|
-
|
|
520
|
-
|
|
568
|
+
const writeAgents = () => {
|
|
569
|
+
let agentsContent = applyReplacements(fs.readFileSync(agentsSrc, 'utf8'), pathPrefix);
|
|
570
|
+
agentsContent = adaptAgentsForCodexMode(agentsContent, mode);
|
|
571
|
+
fs.writeFileSync(agentsDest, agentsContent, 'utf8');
|
|
572
|
+
};
|
|
521
573
|
|
|
522
|
-
|
|
523
|
-
const
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
574
|
+
const continueAfterAgents = () => {
|
|
575
|
+
const configInstalled = installConfig(src, codexDir, pathPrefix);
|
|
576
|
+
if (configInstalled) {
|
|
577
|
+
console.log(` ${green}✓${reset} Installed .codex/config.toml`);
|
|
578
|
+
} else {
|
|
579
|
+
console.log(` ${dim}-${reset} Skipped .codex/config.toml (already exists or source missing)`);
|
|
580
|
+
}
|
|
527
581
|
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
}
|
|
582
|
+
const agentCount = installAgentDefs(src, codexDir, pathPrefix, mode);
|
|
583
|
+
if (agentCount > 0) {
|
|
584
|
+
console.log(` ${green}✓${reset} Installed agents/gsd-*.md (${agentCount} agent definitions)`);
|
|
585
|
+
}
|
|
533
586
|
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
writeVersionFile(skillDest, isGlobal);
|
|
538
|
-
console.log(` ${green}✓${reset} Installed get-shit-done/ workflow files`);
|
|
539
|
-
console.log(` ${green}✓${reset} Wrote get-shit-done/VERSION (${pkg.version})`);
|
|
587
|
+
const gsdSrc = path.join(src, 'commands', 'gsd');
|
|
588
|
+
const entries = fs.readdirSync(gsdSrc);
|
|
589
|
+
const markdownEntries = entries.filter((entry) => entry.endsWith('.md'));
|
|
540
590
|
|
|
541
|
-
|
|
591
|
+
if (installPromptsEnabled) {
|
|
592
|
+
const promptsDir = path.join(codexDir, 'prompts');
|
|
593
|
+
installPrompts(gsdSrc, promptsDir, markdownEntries, pathPrefix);
|
|
594
|
+
console.log(` ${green}✓${reset} Installed prompts/gsd-*.md (${markdownEntries.length} commands)`);
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
if (installSkillsEnabled) {
|
|
598
|
+
const skillsDir = path.join(codexDir, 'skills');
|
|
599
|
+
installCodexSkills(gsdSrc, skillsDir, markdownEntries, pathPrefix);
|
|
600
|
+
console.log(` ${green}✓${reset} Installed skills/gsd-*/SKILL.md (${markdownEntries.length} skills)`);
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
const skillSrc = path.join(src, 'get-shit-done');
|
|
604
|
+
const skillDest = path.join(codexDir, 'get-shit-done');
|
|
605
|
+
copyWithPathReplacement(skillSrc, skillDest, pathPrefix);
|
|
606
|
+
writeVersionFile(skillDest, isGlobal);
|
|
607
|
+
console.log(` ${green}✓${reset} Installed get-shit-done/ workflow files`);
|
|
608
|
+
console.log(` ${green}✓${reset} Wrote get-shit-done/VERSION (${pkg.version})`);
|
|
609
|
+
|
|
610
|
+
console.log(`
|
|
542
611
|
${green}Done!${reset}
|
|
543
612
|
|
|
544
613
|
${yellow}For Codex (CLI + Desktop):${reset}
|
|
545
614
|
- AGENTS.md: ${cyan}${codexDir}/AGENTS.md${reset}
|
|
546
615
|
${installPromptsEnabled ? `- Prompt commands: ${cyan}${codexDir}/prompts/${reset}` : ''}
|
|
547
616
|
${installSkillsEnabled ? `- Native skills: ${cyan}${codexDir}/skills/gsd-*/SKILL.md${reset}` : ''}
|
|
617
|
+
- Config: ${cyan}${codexDir}/.codex/config.toml${reset}
|
|
618
|
+
- Agent defs: ${cyan}${codexDir}/agents/gsd-*.md${reset}
|
|
548
619
|
|
|
549
620
|
${yellow}Getting Started:${reset}
|
|
550
621
|
1. Run ${cyan}codex${reset} (CLI) or ${cyan}codex app${reset} (Desktop)
|
|
@@ -554,7 +625,38 @@ function installCore(isGlobal, mode, migrationPlan, applyMigration) {
|
|
|
554
625
|
${yellow}Staying Updated:${reset}
|
|
555
626
|
- In Codex: ${cyan}${installSkillsEnabled ? '$gsd-update' : '/prompts:gsd-update'}${reset}
|
|
556
627
|
- In terminal: ${cyan}npx ${NPM_PACKAGE_LATEST}${reset}
|
|
628
|
+
|
|
629
|
+
${dim}Note: Codex will prompt you to trust this project on first run
|
|
630
|
+
so that the config, agents, and MCP servers take effect.${reset}
|
|
557
631
|
`);
|
|
632
|
+
done();
|
|
633
|
+
};
|
|
634
|
+
|
|
635
|
+
if (isGlobal && agentsExisted && isInteractiveTerminal) {
|
|
636
|
+
const rl = readline.createInterface({
|
|
637
|
+
input: process.stdin,
|
|
638
|
+
output: process.stdout
|
|
639
|
+
});
|
|
640
|
+
rl.question(` ${yellow}⚠${reset} AGENTS.md already exists at ${dim}${agentsDest}${reset}. Overwrite? ${dim}[Y/n]${reset}: `, (answer) => {
|
|
641
|
+
rl.close();
|
|
642
|
+
const normalized = answer.trim().toLowerCase();
|
|
643
|
+
if (normalized === '' || normalized === 'y' || normalized === 'yes') {
|
|
644
|
+
writeAgents();
|
|
645
|
+
console.log(` ${green}✓${reset} Overwrote AGENTS.md`);
|
|
646
|
+
} else {
|
|
647
|
+
console.log(` ${yellow}⚠${reset} Kept existing AGENTS.md`);
|
|
648
|
+
}
|
|
649
|
+
continueAfterAgents();
|
|
650
|
+
});
|
|
651
|
+
} else {
|
|
652
|
+
writeAgents();
|
|
653
|
+
if (agentsExisted) {
|
|
654
|
+
console.log(` ${yellow}⚠${reset} Overwrote existing AGENTS.md ${dim}(non-interactive)${reset}`);
|
|
655
|
+
} else {
|
|
656
|
+
console.log(` ${green}✓${reset} Installed AGENTS.md`);
|
|
657
|
+
}
|
|
658
|
+
continueAfterAgents();
|
|
659
|
+
}
|
|
558
660
|
}
|
|
559
661
|
|
|
560
662
|
function install(isGlobal, mode = codexMode, done = () => {}) {
|
|
@@ -562,8 +664,7 @@ function install(isGlobal, mode = codexMode, done = () => {}) {
|
|
|
562
664
|
const migrationPlan = detectMigrationPlan(codexDir, mode);
|
|
563
665
|
|
|
564
666
|
if (!migrationPlan.hasChanges) {
|
|
565
|
-
installCore(isGlobal, mode, migrationPlan, false);
|
|
566
|
-
done();
|
|
667
|
+
installCore(isGlobal, mode, migrationPlan, false, done);
|
|
567
668
|
return;
|
|
568
669
|
}
|
|
569
670
|
|
|
@@ -572,23 +673,20 @@ function install(isGlobal, mode = codexMode, done = () => {}) {
|
|
|
572
673
|
|
|
573
674
|
if (hasMigrate) {
|
|
574
675
|
console.log(` ${green}✓${reset} Migration approved by --migrate`);
|
|
575
|
-
installCore(isGlobal, mode, migrationPlan, true);
|
|
576
|
-
done();
|
|
676
|
+
installCore(isGlobal, mode, migrationPlan, true, done);
|
|
577
677
|
return;
|
|
578
678
|
}
|
|
579
679
|
|
|
580
680
|
if (hasSkipMigrate) {
|
|
581
681
|
console.log(` ${yellow}Skipping migration due to --skip-migrate.${reset}`);
|
|
582
|
-
installCore(isGlobal, mode, migrationPlan, false);
|
|
583
|
-
done();
|
|
682
|
+
installCore(isGlobal, mode, migrationPlan, false, done);
|
|
584
683
|
return;
|
|
585
684
|
}
|
|
586
685
|
|
|
587
686
|
if (!isInteractiveTerminal) {
|
|
588
687
|
console.log(` ${yellow}Skipping migration in non-interactive mode.${reset}`);
|
|
589
688
|
console.log(` ${dim}Re-run with --migrate to apply cleanup or --skip-migrate to keep legacy files explicitly.${reset}`);
|
|
590
|
-
installCore(isGlobal, mode, migrationPlan, false);
|
|
591
|
-
done();
|
|
689
|
+
installCore(isGlobal, mode, migrationPlan, false, done);
|
|
592
690
|
return;
|
|
593
691
|
}
|
|
594
692
|
|
|
@@ -604,8 +702,7 @@ function install(isGlobal, mode = codexMode, done = () => {}) {
|
|
|
604
702
|
if (!applyMigration) {
|
|
605
703
|
console.log(` ${yellow}Keeping legacy files.${reset}`);
|
|
606
704
|
}
|
|
607
|
-
installCore(isGlobal, mode, migrationPlan, applyMigration);
|
|
608
|
-
done();
|
|
705
|
+
installCore(isGlobal, mode, migrationPlan, applyMigration, done);
|
|
609
706
|
});
|
|
610
707
|
}
|
|
611
708
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@undeemed/get-shit-done-codex",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"description": "A meta-prompting, context engineering and spec-driven development system for OpenAI Codex (CLI and Desktop). Fork of get-shit-done by TÂCHES, adapted for Codex by undeemed.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"get-shit-done-codex": "bin/install.js"
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"agents",
|
|
17
17
|
"hooks/dist",
|
|
18
18
|
"scripts",
|
|
19
|
-
"
|
|
19
|
+
".codex"
|
|
20
20
|
],
|
|
21
21
|
"keywords": [
|
|
22
22
|
"get-shit-done",
|