gsd-codex-cli 1.20.2 → 1.20.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/.codex/prompts/gsd-add-phase.md +20 -11
- package/.codex/prompts/gsd-add-todo.md +20 -10
- package/.codex/prompts/gsd-audit-milestone.md +20 -10
- package/.codex/prompts/gsd-check-todos.md +20 -10
- package/.codex/prompts/gsd-complete-milestone.md +20 -10
- package/.codex/prompts/gsd-debug.md +20 -10
- package/.codex/prompts/gsd-discuss-phase.md +20 -10
- package/.codex/prompts/gsd-doctor.md +51 -0
- package/.codex/prompts/gsd-execute-phase.md +20 -10
- package/.codex/prompts/gsd-help.md +19 -9
- package/.codex/prompts/gsd-insert-phase.md +20 -10
- package/.codex/prompts/gsd-list-phase-assumptions.md +20 -10
- package/.codex/prompts/gsd-map-codebase.md +20 -10
- package/.codex/prompts/gsd-new-milestone.md +20 -10
- package/.codex/prompts/gsd-new-project.md +20 -10
- package/.codex/prompts/gsd-pause-work.md +20 -10
- package/.codex/prompts/gsd-plan-milestone-gaps.md +20 -10
- package/.codex/prompts/gsd-plan-phase.md +20 -10
- package/.codex/prompts/gsd-progress.md +20 -10
- package/.codex/prompts/gsd-quick.md +20 -10
- package/.codex/prompts/gsd-remove-phase.md +20 -10
- package/.codex/prompts/gsd-research-phase.md +20 -10
- package/.codex/prompts/gsd-resume-work.md +20 -10
- package/.codex/prompts/gsd-set-profile.md +20 -10
- package/.codex/prompts/gsd-settings.md +20 -10
- package/.codex/prompts/gsd-update.md +19 -9
- package/.codex/prompts/gsd-verify-work.md +20 -10
- package/.codex/skills/get-shit-done-codex/SKILL.md +6 -5
- package/README.md +88 -88
- package/bin/install-codex.js +8 -4
- package/get-shit-done/bin/gsd-tools.cjs +87 -33
- package/get-shit-done/bin/gsd-tools.js +29 -0
- package/package.json +1 -1
|
@@ -12,8 +12,10 @@ Configure GSD workflow toggles and model profile
|
|
|
12
12
|
- Use .codex/skills/get-shit-done-codex semantics.
|
|
13
13
|
- Treat upstream workflow as the source of truth.
|
|
14
14
|
- Replace user-specific paths with workspace-relative paths (.claude/..., .planning/...).
|
|
15
|
-
-
|
|
16
|
-
|
|
15
|
+
- Resolve gsd-tools path (prefer .cjs, fallback to .js):
|
|
16
|
+
$GsdTools = if (Test-Path ".claude/get-shit-done/bin/gsd-tools.cjs") { ".claude/get-shit-done/bin/gsd-tools.cjs" } elseif (Test-Path ".claude/get-shit-done/bin/gsd-tools.js") { ".claude/get-shit-done/bin/gsd-tools.js" } elseif (Test-Path "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs") { "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" } elseif (Test-Path "$HOME/.claude/get-shit-done/bin/gsd-tools.js") { "$HOME/.claude/get-shit-done/bin/gsd-tools.js" } else { throw "Missing gsd-tools in .claude or $HOME/.claude. Reinstall GSD." }
|
|
17
|
+
- Run engine commands through PowerShell:
|
|
18
|
+
node $GsdTools ...
|
|
17
19
|
- Parse JSON with ConvertFrom-Json; parse key/value output when workflow uses KEY=value raw mode.
|
|
18
20
|
- No jq / bash-only constructs.
|
|
19
21
|
|
|
@@ -23,10 +25,18 @@ node .claude/get-shit-done/bin/gsd-tools.js ...
|
|
|
23
25
|
- Spawn only when the upstream workflow defines an agent role.
|
|
24
26
|
- Use `.claude/agents/gsd-*.md` as role context for each spawned agent.
|
|
25
27
|
- Do not advance workflow steps until wait and close complete.
|
|
28
|
+
## Update check
|
|
29
|
+
- Best-effort only; do not fail if offline.
|
|
30
|
+
- Run:
|
|
31
|
+
$installed = if (Test-Path ".codex/gsd/VERSION") { (Get-Content ".codex/gsd/VERSION" -Raw).Trim() } elseif (Test-Path "$HOME/.codex/gsd/VERSION") { (Get-Content "$HOME/.codex/gsd/VERSION" -Raw).Trim() } else { $null }
|
|
32
|
+
$latest = $null; try { $latest = (npm view gsd-codex-cli version).Trim() } catch {}
|
|
33
|
+
- If $installed and $latest and $installed -ne $latest, surface:
|
|
34
|
+
"Update available: $installed -> $latest. Next: gsd-update (Codex) / /gsd:update (Claude) or re-run npx gsd-codex-cli@latest."
|
|
35
|
+
|
|
26
36
|
## Execution
|
|
27
37
|
1. Parse [none] from the user input.
|
|
28
38
|
2. Run init:
|
|
29
|
-
node
|
|
39
|
+
node $GsdTools config-ensure-section --raw
|
|
30
40
|
|
|
31
41
|
3. Load .claude/get-shit-done/workflows/settings.md and execute it step-by-step.
|
|
32
42
|
4. Translate each Task(...) in workflow into:
|
|
@@ -34,10 +44,10 @@ node .claude/get-shit-done/bin/gsd-tools.js config-ensure-section --raw
|
|
|
34
44
|
- wait for each spawned agent and apply returned output before moving forward.
|
|
35
45
|
5. Preserve all gates and routing from upstream workflow.
|
|
36
46
|
6. Preserve commit behavior using
|
|
37
|
-
node
|
|
38
|
-
7. If commit preflight fails (no git / no commit flag), proceed in read-only mode and report clearly.
|
|
39
|
-
|
|
40
|
-
## Completion output
|
|
41
|
-
- Summarize key artifacts created/updated
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
node $GsdTools commit "message" --files ....
|
|
48
|
+
7. If commit preflight fails (no git / no commit flag), proceed in read-only mode and report clearly.
|
|
49
|
+
|
|
50
|
+
## Completion output
|
|
51
|
+
- Summarize key artifacts created/updated.
|
|
52
|
+
- Next recommended command: use the next user-facing GSD command (Codex prompt name + Claude slash command).
|
|
53
|
+
- Never recommend internal `node ... gsd-tools ...` commands to the user.
|
|
@@ -12,8 +12,10 @@ Update GSD to latest version with changelog display
|
|
|
12
12
|
- Use .codex/skills/get-shit-done-codex semantics.
|
|
13
13
|
- Treat upstream workflow as the source of truth.
|
|
14
14
|
- Replace user-specific paths with workspace-relative paths (.claude/..., .planning/...).
|
|
15
|
-
-
|
|
16
|
-
|
|
15
|
+
- Resolve gsd-tools path (prefer .cjs, fallback to .js):
|
|
16
|
+
$GsdTools = if (Test-Path ".claude/get-shit-done/bin/gsd-tools.cjs") { ".claude/get-shit-done/bin/gsd-tools.cjs" } elseif (Test-Path ".claude/get-shit-done/bin/gsd-tools.js") { ".claude/get-shit-done/bin/gsd-tools.js" } elseif (Test-Path "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs") { "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" } elseif (Test-Path "$HOME/.claude/get-shit-done/bin/gsd-tools.js") { "$HOME/.claude/get-shit-done/bin/gsd-tools.js" } else { throw "Missing gsd-tools in .claude or $HOME/.claude. Reinstall GSD." }
|
|
17
|
+
- Run engine commands through PowerShell:
|
|
18
|
+
node $GsdTools ...
|
|
17
19
|
- Parse JSON with ConvertFrom-Json; parse key/value output when workflow uses KEY=value raw mode.
|
|
18
20
|
- No jq / bash-only constructs.
|
|
19
21
|
|
|
@@ -23,6 +25,14 @@ node .claude/get-shit-done/bin/gsd-tools.js ...
|
|
|
23
25
|
- Spawn only when the upstream workflow defines an agent role.
|
|
24
26
|
- Use `.claude/agents/gsd-*.md` as role context for each spawned agent.
|
|
25
27
|
- Do not advance workflow steps until wait and close complete.
|
|
28
|
+
## Update check
|
|
29
|
+
- Best-effort only; do not fail if offline.
|
|
30
|
+
- Run:
|
|
31
|
+
$installed = if (Test-Path ".codex/gsd/VERSION") { (Get-Content ".codex/gsd/VERSION" -Raw).Trim() } elseif (Test-Path "$HOME/.codex/gsd/VERSION") { (Get-Content "$HOME/.codex/gsd/VERSION" -Raw).Trim() } else { $null }
|
|
32
|
+
$latest = $null; try { $latest = (npm view gsd-codex-cli version).Trim() } catch {}
|
|
33
|
+
- If $installed and $latest and $installed -ne $latest, surface:
|
|
34
|
+
"Update available: $installed -> $latest. Next: gsd-update (Codex) / /gsd:update (Claude) or re-run npx gsd-codex-cli@latest."
|
|
35
|
+
|
|
26
36
|
## Execution
|
|
27
37
|
1. Parse [none] from the user input.
|
|
28
38
|
2. Run init:
|
|
@@ -34,10 +44,10 @@ node .claude/get-shit-done/bin/gsd-tools.js ...
|
|
|
34
44
|
- wait for each spawned agent and apply returned output before moving forward.
|
|
35
45
|
5. Preserve all gates and routing from upstream workflow.
|
|
36
46
|
6. Preserve commit behavior using
|
|
37
|
-
node
|
|
38
|
-
7. If commit preflight fails (no git / no commit flag), proceed in read-only mode and report clearly.
|
|
39
|
-
|
|
40
|
-
## Completion output
|
|
41
|
-
- Summarize key artifacts created/updated
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
node $GsdTools commit "message" --files ....
|
|
48
|
+
7. If commit preflight fails (no git / no commit flag), proceed in read-only mode and report clearly.
|
|
49
|
+
|
|
50
|
+
## Completion output
|
|
51
|
+
- Summarize key artifacts created/updated.
|
|
52
|
+
- Next recommended command: use the next user-facing GSD command (Codex prompt name + Claude slash command).
|
|
53
|
+
- Never recommend internal `node ... gsd-tools ...` commands to the user.
|
|
@@ -12,8 +12,10 @@ Validate built features through conversational UAT
|
|
|
12
12
|
- Use .codex/skills/get-shit-done-codex semantics.
|
|
13
13
|
- Treat upstream workflow as the source of truth.
|
|
14
14
|
- Replace user-specific paths with workspace-relative paths (.claude/..., .planning/...).
|
|
15
|
-
-
|
|
16
|
-
|
|
15
|
+
- Resolve gsd-tools path (prefer .cjs, fallback to .js):
|
|
16
|
+
$GsdTools = if (Test-Path ".claude/get-shit-done/bin/gsd-tools.cjs") { ".claude/get-shit-done/bin/gsd-tools.cjs" } elseif (Test-Path ".claude/get-shit-done/bin/gsd-tools.js") { ".claude/get-shit-done/bin/gsd-tools.js" } elseif (Test-Path "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs") { "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" } elseif (Test-Path "$HOME/.claude/get-shit-done/bin/gsd-tools.js") { "$HOME/.claude/get-shit-done/bin/gsd-tools.js" } else { throw "Missing gsd-tools in .claude or $HOME/.claude. Reinstall GSD." }
|
|
17
|
+
- Run engine commands through PowerShell:
|
|
18
|
+
node $GsdTools ...
|
|
17
19
|
- Parse JSON with ConvertFrom-Json; parse key/value output when workflow uses KEY=value raw mode.
|
|
18
20
|
- No jq / bash-only constructs.
|
|
19
21
|
|
|
@@ -23,10 +25,18 @@ node .claude/get-shit-done/bin/gsd-tools.js ...
|
|
|
23
25
|
- Spawn only when the upstream workflow defines an agent role.
|
|
24
26
|
- Use `.claude/agents/gsd-*.md` as role context for each spawned agent.
|
|
25
27
|
- Do not advance workflow steps until wait and close complete.
|
|
28
|
+
## Update check
|
|
29
|
+
- Best-effort only; do not fail if offline.
|
|
30
|
+
- Run:
|
|
31
|
+
$installed = if (Test-Path ".codex/gsd/VERSION") { (Get-Content ".codex/gsd/VERSION" -Raw).Trim() } elseif (Test-Path "$HOME/.codex/gsd/VERSION") { (Get-Content "$HOME/.codex/gsd/VERSION" -Raw).Trim() } else { $null }
|
|
32
|
+
$latest = $null; try { $latest = (npm view gsd-codex-cli version).Trim() } catch {}
|
|
33
|
+
- If $installed and $latest and $installed -ne $latest, surface:
|
|
34
|
+
"Update available: $installed -> $latest. Next: gsd-update (Codex) / /gsd:update (Claude) or re-run npx gsd-codex-cli@latest."
|
|
35
|
+
|
|
26
36
|
## Execution
|
|
27
37
|
1. Parse "[phase number, for example 4]" from the user input.
|
|
28
38
|
2. Run init:
|
|
29
|
-
node
|
|
39
|
+
node $GsdTools init verify-work $PHASE --raw
|
|
30
40
|
|
|
31
41
|
3. Load .claude/get-shit-done/workflows/verify-work.md and execute it step-by-step.
|
|
32
42
|
4. Translate each Task(...) in workflow into:
|
|
@@ -34,10 +44,10 @@ node .claude/get-shit-done/bin/gsd-tools.js init verify-work $PHASE --raw
|
|
|
34
44
|
- wait for each spawned agent and apply returned output before moving forward.
|
|
35
45
|
5. Preserve all gates and routing from upstream workflow.
|
|
36
46
|
6. Preserve commit behavior using
|
|
37
|
-
node
|
|
38
|
-
7. If commit preflight fails (no git / no commit flag), proceed in read-only mode and report clearly.
|
|
39
|
-
|
|
40
|
-
## Completion output
|
|
41
|
-
- Summarize key artifacts created/updated
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
node $GsdTools commit "message" --files ....
|
|
48
|
+
7. If commit preflight fails (no git / no commit flag), proceed in read-only mode and report clearly.
|
|
49
|
+
|
|
50
|
+
## Completion output
|
|
51
|
+
- Summarize key artifacts created/updated.
|
|
52
|
+
- Next recommended command: use the next user-facing GSD command (Codex prompt name + Claude slash command).
|
|
53
|
+
- Never recommend internal `node ... gsd-tools ...` commands to the user.
|
|
@@ -14,11 +14,12 @@ Use this skill to run `gsd-*` prompts under `Codex` while preserving upstream GS
|
|
|
14
14
|
- Keep `.claude/agents/gsd-*.md` as role contracts for subagents.
|
|
15
15
|
- Keep `.codex/prompts/gsd-*.md` as Codex-native orchestrators.
|
|
16
16
|
|
|
17
|
-
## Core rules
|
|
18
|
-
1. Do not change command semantics.
|
|
19
|
-
2. Do not change source workflow logic unless necessary for Codex command compatibility.
|
|
20
|
-
3. Use workspace-relative paths.
|
|
21
|
-
4. Preserve step ordering and gate behavior from workflow files.
|
|
17
|
+
## Core rules
|
|
18
|
+
1. Do not change command semantics.
|
|
19
|
+
2. Do not change source workflow logic unless necessary for Codex command compatibility.
|
|
20
|
+
3. Use workspace-relative paths.
|
|
21
|
+
4. Preserve step ordering and gate behavior from workflow files.
|
|
22
|
+
5. User-facing guidance should recommend `gsd-*` prompts (Codex) and `/gsd:*` commands (Claude), not internal `node ... gsd-tools ...` plumbing.
|
|
22
23
|
|
|
23
24
|
## Mandatory codex translations
|
|
24
25
|
- Replace each `Task(...)` with: `spawn_agent` + `wait`.
|
package/README.md
CHANGED
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
# Get Shit Done - Codex Fork
|
|
2
|
-
|
|
3
|
-
This repository packages the get-shit-done (GSD) workflow for Codex. It installs Codex prompts plus the supporting GSD reference files used by the workflows and agents.
|
|
4
|
-
|
|
5
|
-
Use this fork if you want the GSD workflow inside Codex with a simple installer that works for a single project or your home directory.
|
|
6
|
-
|
|
7
|
-
## Quick Install
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npx gsd-codex-cli@latest --path .
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Install globally (prompts available from any project):
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
npx gsd-codex-cli@latest --global
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
You can combine both:
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
npx gsd-codex-cli@latest --path . --global
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
## What Gets Installed
|
|
26
|
-
|
|
27
|
-
The installer copies these directories into the target location:
|
|
28
|
-
|
|
29
|
-
- `.codex/prompts` and `.codex/skills` for Codex commands
|
|
30
|
-
- `.claude/get-shit-done` for workflow references
|
|
31
|
-
- `.claude/agents` for agent definitions
|
|
32
|
-
|
|
33
|
-
This fork is Codex-first, but the Claude assets are kept alongside for compatibility with the upstream workflow files.
|
|
34
|
-
|
|
35
|
-
## Using the Prompts
|
|
36
|
-
|
|
37
|
-
Open your project in Codex and run these prompts from the prompt list:
|
|
38
|
-
|
|
39
|
-
- `gsd-new-project`
|
|
40
|
-
- `gsd-plan-phase`
|
|
41
|
-
- `gsd-execute-phase`
|
|
42
|
-
|
|
43
|
-
All Codex prompts live in `.codex/prompts`.
|
|
44
|
-
|
|
45
|
-
## Update
|
|
46
|
-
|
|
47
|
-
Re-run the installer to update your local or global install. It overwrites the existing files with the latest version.
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
npx gsd-codex-cli@latest --path . --global
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## CLI Options
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
--path <dir> Install into a specific directory (defaults to current directory)
|
|
57
|
-
--global Also install to your home directory (~/.codex and ~/.claude)
|
|
58
|
-
--help Show help
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Development
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
git clone https://github.com/redstar1337/get-shit-done-codex.git
|
|
65
|
-
cd get-shit-done-codex
|
|
66
|
-
node bin/install-codex.js --path .
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Run tests and build hooks:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
npm test
|
|
73
|
-
npm run build:hooks
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
## Notes
|
|
77
|
-
|
|
78
|
-
- This package is published as `gsd-codex-cli`. Use `npx gsd-codex-cli@latest` for installs.
|
|
79
|
-
- The npm binary names `get-shit-done-codex` and `get-shit-done-cc` are still provided for compatibility after install.
|
|
80
|
-
|
|
81
|
-
## Upstream
|
|
82
|
-
|
|
83
|
-
GSD originated in the upstream repository by TACHES. This fork keeps the core workflow and adds Codex-native prompts and packaging.
|
|
84
|
-
|
|
85
|
-
Upstream: https://github.com/glittercowboy/get-shit-done
|
|
86
|
-
|
|
87
|
-
## License
|
|
88
|
-
|
|
1
|
+
# Get Shit Done - Codex Fork
|
|
2
|
+
|
|
3
|
+
This repository packages the get-shit-done (GSD) workflow for Codex. It installs Codex prompts plus the supporting GSD reference files used by the workflows and agents.
|
|
4
|
+
|
|
5
|
+
Use this fork if you want the GSD workflow inside Codex with a simple installer that works for a single project or your home directory.
|
|
6
|
+
|
|
7
|
+
## Quick Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx gsd-codex-cli@latest --path .
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Install globally (prompts available from any project):
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx gsd-codex-cli@latest --global
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
You can combine both:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx gsd-codex-cli@latest --path . --global
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## What Gets Installed
|
|
26
|
+
|
|
27
|
+
The installer copies these directories into the target location:
|
|
28
|
+
|
|
29
|
+
- `.codex/prompts` and `.codex/skills` for Codex commands
|
|
30
|
+
- `.claude/get-shit-done` for workflow references
|
|
31
|
+
- `.claude/agents` for agent definitions
|
|
32
|
+
|
|
33
|
+
This fork is Codex-first, but the Claude assets are kept alongside for compatibility with the upstream workflow files.
|
|
34
|
+
|
|
35
|
+
## Using the Prompts
|
|
36
|
+
|
|
37
|
+
Open your project in Codex and run these prompts from the prompt list:
|
|
38
|
+
|
|
39
|
+
- `gsd-new-project`
|
|
40
|
+
- `gsd-plan-phase`
|
|
41
|
+
- `gsd-execute-phase`
|
|
42
|
+
|
|
43
|
+
All Codex prompts live in `.codex/prompts`.
|
|
44
|
+
|
|
45
|
+
## Update
|
|
46
|
+
|
|
47
|
+
Re-run the installer to update your local or global install. It overwrites the existing files with the latest version.
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
npx gsd-codex-cli@latest --path . --global
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## CLI Options
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
--path <dir> Install into a specific directory (defaults to current directory)
|
|
57
|
+
--global Also install to your home directory (~/.codex and ~/.claude)
|
|
58
|
+
--help Show help
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Development
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
git clone https://github.com/redstar1337/get-shit-done-codex.git
|
|
65
|
+
cd get-shit-done-codex
|
|
66
|
+
node bin/install-codex.js --path .
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Run tests and build hooks:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npm test
|
|
73
|
+
npm run build:hooks
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Notes
|
|
77
|
+
|
|
78
|
+
- This package is published as `gsd-codex-cli`. Use `npx gsd-codex-cli@latest` for installs.
|
|
79
|
+
- The npm binary names `get-shit-done-codex` and `get-shit-done-cc` are still provided for compatibility after install.
|
|
80
|
+
|
|
81
|
+
## Upstream
|
|
82
|
+
|
|
83
|
+
GSD originated in the upstream repository by TACHES. This fork keeps the core workflow and adds Codex-native prompts and packaging.
|
|
84
|
+
|
|
85
|
+
Upstream: https://github.com/glittercowboy/get-shit-done
|
|
86
|
+
|
|
87
|
+
## License
|
|
88
|
+
|
|
89
89
|
MIT. See `LICENSE`.
|
package/bin/install-codex.js
CHANGED
|
@@ -72,6 +72,7 @@ function copyCodexToDirectory(baseDir) {
|
|
|
72
72
|
const sourceGetShitDone = resolveSourceDir('get-shit-done', '.claude/get-shit-done');
|
|
73
73
|
const sourceAgents = resolveSourceDir('agents', '.claude/agents');
|
|
74
74
|
const versionDest = path.join(targetClaude, 'get-shit-done', 'VERSION');
|
|
75
|
+
const codexVersionDest = path.join(targetCodex, 'gsd', 'VERSION');
|
|
75
76
|
|
|
76
77
|
ensureDir(baseDir);
|
|
77
78
|
ensureDir(targetCodex);
|
|
@@ -82,6 +83,8 @@ function copyCodexToDirectory(baseDir) {
|
|
|
82
83
|
copyRecursive(sourceAgents, path.join(targetClaude, 'agents'));
|
|
83
84
|
ensureDir(path.dirname(versionDest));
|
|
84
85
|
fs.writeFileSync(versionDest, `${pkg.version}\n`);
|
|
86
|
+
ensureDir(path.dirname(codexVersionDest));
|
|
87
|
+
fs.writeFileSync(codexVersionDest, `${pkg.version}\n`);
|
|
85
88
|
}
|
|
86
89
|
|
|
87
90
|
copyCodexToDirectory(targetDir);
|
|
@@ -97,7 +100,8 @@ console.log(` local: ${targetDir}`);
|
|
|
97
100
|
if (installGlobal) {
|
|
98
101
|
console.log(' global: ~/.codex');
|
|
99
102
|
}
|
|
100
|
-
console.log('\nNext steps:');
|
|
101
|
-
console.log(' 1) Open your project in Codex');
|
|
102
|
-
console.log(' 2) Run prompt gsd-new-project, then gsd-plan-phase, gsd-execute-phase');
|
|
103
|
-
console.log(' 3)
|
|
103
|
+
console.log('\nNext steps:');
|
|
104
|
+
console.log(' 1) Open your project in Codex');
|
|
105
|
+
console.log(' 2) Run prompt gsd-new-project, then gsd-discuss-phase, gsd-plan-phase, gsd-execute-phase');
|
|
106
|
+
console.log(' 3) If something looks off, run prompt gsd-doctor');
|
|
107
|
+
console.log(' 4) Use .codex/prompts/* for all GSD commands in this fork');
|
|
@@ -56,6 +56,9 @@
|
|
|
56
56
|
* Todos:
|
|
57
57
|
* todo complete <filename> Move todo from pending to completed
|
|
58
58
|
*
|
|
59
|
+
* Update:
|
|
60
|
+
* update check Check npm for newer GSD version
|
|
61
|
+
*
|
|
59
62
|
* Scaffolding:
|
|
60
63
|
* scaffold context --phase <N> Create CONTEXT.md template
|
|
61
64
|
* scaffold uat --phase <N> Create UAT.md template
|
|
@@ -121,6 +124,7 @@
|
|
|
121
124
|
|
|
122
125
|
const fs = require('fs');
|
|
123
126
|
const path = require('path');
|
|
127
|
+
const os = require('os');
|
|
124
128
|
const { execSync } = require('child_process');
|
|
125
129
|
|
|
126
130
|
// ─── Model Profile Table ─────────────────────────────────────────────────────
|
|
@@ -580,6 +584,47 @@ function cmdVerifyPathExists(cwd, targetPath, raw) {
|
|
|
580
584
|
}
|
|
581
585
|
}
|
|
582
586
|
|
|
587
|
+
function cmdUpdateCheck(cwd, raw) {
|
|
588
|
+
const homeDir = os.homedir();
|
|
589
|
+
const cacheDir = path.join(homeDir, '.claude', 'cache');
|
|
590
|
+
const cacheFile = path.join(cacheDir, 'gsd-update-check.json');
|
|
591
|
+
const projectVersionFile = path.join(cwd, '.claude', 'get-shit-done', 'VERSION');
|
|
592
|
+
const globalVersionFile = path.join(homeDir, '.claude', 'get-shit-done', 'VERSION');
|
|
593
|
+
|
|
594
|
+
let installed = '0.0.0';
|
|
595
|
+
try {
|
|
596
|
+
if (fs.existsSync(projectVersionFile)) {
|
|
597
|
+
installed = fs.readFileSync(projectVersionFile, 'utf8').trim();
|
|
598
|
+
} else if (fs.existsSync(globalVersionFile)) {
|
|
599
|
+
installed = fs.readFileSync(globalVersionFile, 'utf8').trim();
|
|
600
|
+
}
|
|
601
|
+
} catch {}
|
|
602
|
+
|
|
603
|
+
let latest = null;
|
|
604
|
+
try {
|
|
605
|
+
latest = execSync('npm view gsd-codex-cli version', { encoding: 'utf8', timeout: 10000, windowsHide: true }).trim();
|
|
606
|
+
} catch {}
|
|
607
|
+
if (!latest) {
|
|
608
|
+
try {
|
|
609
|
+
latest = execSync('npm view get-shit-done-cc version', { encoding: 'utf8', timeout: 10000, windowsHide: true }).trim();
|
|
610
|
+
} catch {}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
const result = {
|
|
614
|
+
update_available: !!(latest && installed && latest !== installed),
|
|
615
|
+
installed,
|
|
616
|
+
latest: latest || 'unknown',
|
|
617
|
+
checked: Math.floor(Date.now() / 1000),
|
|
618
|
+
};
|
|
619
|
+
|
|
620
|
+
try {
|
|
621
|
+
fs.mkdirSync(cacheDir, { recursive: true });
|
|
622
|
+
fs.writeFileSync(cacheFile, JSON.stringify(result));
|
|
623
|
+
} catch {}
|
|
624
|
+
|
|
625
|
+
output(result, raw);
|
|
626
|
+
}
|
|
627
|
+
|
|
583
628
|
function cmdConfigEnsureSection(cwd, raw) {
|
|
584
629
|
const configPath = path.join(cwd, '.planning', 'config.json');
|
|
585
630
|
const planningDir = path.join(cwd, '.planning');
|
|
@@ -2697,35 +2742,35 @@ function cmdPhaseAdd(cwd, description, raw) {
|
|
|
2697
2742
|
// Build phase entry
|
|
2698
2743
|
const phaseEntry = `\n### Phase ${newPhaseNum}: ${description}\n\n**Goal:** [To be planned]\n**Depends on:** Phase ${maxPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run /gsd:plan-phase ${newPhaseNum} to break down)\n`;
|
|
2699
2744
|
|
|
2700
|
-
// Find insertion point: inside last milestone block (if grouped), otherwise before Progress or end
|
|
2701
|
-
const progressMatch = content.match(/^##\s+Progress\b/m);
|
|
2702
|
-
const progressIdx = progressMatch ? progressMatch.index : -1;
|
|
2703
|
-
const searchEnd = progressIdx >= 0 ? progressIdx : content.length;
|
|
2704
|
-
const beforeProgress = content.slice(0, searchEnd);
|
|
2705
|
-
|
|
2706
|
-
const milestonePattern = /^###\s+.*v\d+\.\d+.*$/gmi;
|
|
2707
|
-
const milestoneHeaders = [];
|
|
2708
|
-
let mm;
|
|
2709
|
-
while ((mm = milestonePattern.exec(beforeProgress)) !== null) {
|
|
2710
|
-
milestoneHeaders.push({ index: mm.index });
|
|
2711
|
-
}
|
|
2712
|
-
|
|
2713
|
-
let insertIdx = content.length;
|
|
2714
|
-
if (milestoneHeaders.length > 0) {
|
|
2715
|
-
const target = milestoneHeaders[milestoneHeaders.length - 1];
|
|
2716
|
-
let nextHeaderIdx = searchEnd;
|
|
2717
|
-
for (const header of milestoneHeaders) {
|
|
2718
|
-
if (header.index > target.index) {
|
|
2719
|
-
nextHeaderIdx = header.index;
|
|
2720
|
-
break;
|
|
2721
|
-
}
|
|
2722
|
-
}
|
|
2723
|
-
insertIdx = nextHeaderIdx;
|
|
2724
|
-
} else if (progressIdx >= 0) {
|
|
2725
|
-
insertIdx = progressIdx;
|
|
2726
|
-
}
|
|
2727
|
-
|
|
2728
|
-
const updatedContent = content.slice(0, insertIdx) + phaseEntry + content.slice(insertIdx);
|
|
2745
|
+
// Find insertion point: inside last milestone block (if grouped), otherwise before Progress or end
|
|
2746
|
+
const progressMatch = content.match(/^##\s+Progress\b/m);
|
|
2747
|
+
const progressIdx = progressMatch ? progressMatch.index : -1;
|
|
2748
|
+
const searchEnd = progressIdx >= 0 ? progressIdx : content.length;
|
|
2749
|
+
const beforeProgress = content.slice(0, searchEnd);
|
|
2750
|
+
|
|
2751
|
+
const milestonePattern = /^###\s+.*v\d+\.\d+.*$/gmi;
|
|
2752
|
+
const milestoneHeaders = [];
|
|
2753
|
+
let mm;
|
|
2754
|
+
while ((mm = milestonePattern.exec(beforeProgress)) !== null) {
|
|
2755
|
+
milestoneHeaders.push({ index: mm.index });
|
|
2756
|
+
}
|
|
2757
|
+
|
|
2758
|
+
let insertIdx = content.length;
|
|
2759
|
+
if (milestoneHeaders.length > 0) {
|
|
2760
|
+
const target = milestoneHeaders[milestoneHeaders.length - 1];
|
|
2761
|
+
let nextHeaderIdx = searchEnd;
|
|
2762
|
+
for (const header of milestoneHeaders) {
|
|
2763
|
+
if (header.index > target.index) {
|
|
2764
|
+
nextHeaderIdx = header.index;
|
|
2765
|
+
break;
|
|
2766
|
+
}
|
|
2767
|
+
}
|
|
2768
|
+
insertIdx = nextHeaderIdx;
|
|
2769
|
+
} else if (progressIdx >= 0) {
|
|
2770
|
+
insertIdx = progressIdx;
|
|
2771
|
+
}
|
|
2772
|
+
|
|
2773
|
+
const updatedContent = content.slice(0, insertIdx) + phaseEntry + content.slice(insertIdx);
|
|
2729
2774
|
|
|
2730
2775
|
fs.writeFileSync(roadmapPath, updatedContent, 'utf-8');
|
|
2731
2776
|
|
|
@@ -5063,10 +5108,19 @@ async function main() {
|
|
|
5063
5108
|
break;
|
|
5064
5109
|
}
|
|
5065
5110
|
|
|
5066
|
-
case '
|
|
5067
|
-
|
|
5068
|
-
|
|
5069
|
-
|
|
5111
|
+
case 'update': {
|
|
5112
|
+
const subcommand = args[1];
|
|
5113
|
+
if (subcommand === 'check') {
|
|
5114
|
+
cmdUpdateCheck(cwd, raw);
|
|
5115
|
+
} else {
|
|
5116
|
+
error('Unknown update subcommand. Available: check');
|
|
5117
|
+
}
|
|
5118
|
+
break;
|
|
5119
|
+
}
|
|
5120
|
+
case 'history-digest': {
|
|
5121
|
+
cmdHistoryDigest(cwd, raw);
|
|
5122
|
+
break;
|
|
5123
|
+
}
|
|
5070
5124
|
|
|
5071
5125
|
case 'phases': {
|
|
5072
5126
|
const subcommand = args[1];
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// Backward-compatible wrapper: some workflows/prompts reference gsd-tools.js.
|
|
4
|
+
// Canonical implementation lives in gsd-tools.cjs (CommonJS) to avoid ESM issues.
|
|
5
|
+
|
|
6
|
+
const path = require('path');
|
|
7
|
+
const { spawnSync } = require('child_process');
|
|
8
|
+
|
|
9
|
+
const cjsPath = path.join(__dirname, 'gsd-tools.cjs');
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
|
|
12
|
+
const result = spawnSync(process.execPath, [cjsPath, ...args], { stdio: 'inherit' });
|
|
13
|
+
|
|
14
|
+
if (result.error) {
|
|
15
|
+
console.error(result.error.message || String(result.error));
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if (result.signal) {
|
|
20
|
+
// Mirror the child termination signal if possible.
|
|
21
|
+
try {
|
|
22
|
+
process.kill(process.pid, result.signal);
|
|
23
|
+
} catch {
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
process.exit(typeof result.status === 'number' ? result.status : 0);
|
|
29
|
+
|