@context-forge/cli 0.2.2 → 0.3.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/README.md +85 -28
- package/commands/cf/build.md +9 -0
- package/commands/cf/get.md +8 -0
- package/commands/cf/next.md +8 -0
- package/commands/cf/project.md +9 -0
- package/commands/cf/prompt.md +9 -0
- package/commands/cf/set.md +9 -0
- package/commands/cf/status.md +8 -0
- package/dist/commands/build.d.ts.map +1 -1
- package/dist/commands/build.js +3 -1
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/commandInstaller.d.ts +21 -0
- package/dist/commands/commandInstaller.d.ts.map +1 -0
- package/dist/commands/commandInstaller.js +109 -0
- package/dist/commands/commandInstaller.js.map +1 -0
- package/dist/commands/project.d.ts +11 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +169 -99
- package/dist/commands/project.js.map +1 -1
- package/dist/index.js +35 -1
- package/dist/index.js.map +1 -1
- package/dist/output/tables.d.ts +1 -1
- package/dist/output/tables.d.ts.map +1 -1
- package/dist/output/tables.js +8 -5
- package/dist/output/tables.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -2,29 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
Terminal interface for Context Forge — context assembly, project management, workflow navigation, and configuration.
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
From the monorepo root:
|
|
5
|
+
## How It Works
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
pnpm install
|
|
11
|
-
pnpm --filter @context-forge/cli build
|
|
12
|
-
```
|
|
7
|
+
`cf` works like `git` — install it globally and it automatically detects your project based on your current working directory. No configuration files to manage per-project; just `cd` into any registered project and run commands.
|
|
13
8
|
|
|
14
|
-
|
|
9
|
+
## Installation
|
|
15
10
|
|
|
16
11
|
```bash
|
|
12
|
+
# Install globally
|
|
17
13
|
npm install -g @context-forge/cli
|
|
14
|
+
|
|
15
|
+
# Initialize a project (from the project root)
|
|
16
|
+
cd ~/repos/my-project
|
|
17
|
+
cf init
|
|
18
|
+
|
|
19
|
+
# Install the ai-project-guide templates (recommended)
|
|
20
|
+
cf guides install
|
|
21
|
+
|
|
22
|
+
# Install Claude Code slash commands (recommended)
|
|
23
|
+
cf install-commands
|
|
18
24
|
```
|
|
19
25
|
|
|
26
|
+
`cf init` registers the current directory as a Context Forge project. `cf guides install` bootstraps the [ai-project-guide](https://github.com/ecorkran/ai-project-guide) prompt templates that Context Forge's context engine is designed around. `cf install-commands` adds `/cf:*` slash commands to Claude Code.
|
|
27
|
+
|
|
20
28
|
## Quick Start
|
|
21
29
|
|
|
22
30
|
```bash
|
|
23
|
-
#
|
|
24
|
-
cf
|
|
31
|
+
# All commands are discoverable
|
|
32
|
+
cf --help
|
|
33
|
+
cf project --help
|
|
34
|
+
#etc.
|
|
25
35
|
|
|
26
|
-
# Check project status
|
|
27
|
-
|
|
36
|
+
# Check project status
|
|
37
|
+
cf status
|
|
28
38
|
|
|
29
39
|
# Generate a context prompt and copy to clipboard
|
|
30
40
|
cf build | pbcopy
|
|
@@ -32,6 +42,16 @@ cf build | pbcopy
|
|
|
32
42
|
# Generate with phase override
|
|
33
43
|
cf build --phase task-breakdown
|
|
34
44
|
|
|
45
|
+
# Set project fields
|
|
46
|
+
cf set phase 6
|
|
47
|
+
cf set slice 175
|
|
48
|
+
|
|
49
|
+
# Confirm updates (if you like)
|
|
50
|
+
cf status
|
|
51
|
+
|
|
52
|
+
# Detailed information
|
|
53
|
+
cf project get
|
|
54
|
+
|
|
35
55
|
# View available prompt templates
|
|
36
56
|
cf prompt list
|
|
37
57
|
|
|
@@ -39,24 +59,53 @@ cf prompt list
|
|
|
39
59
|
cf prompt get P5
|
|
40
60
|
```
|
|
41
61
|
|
|
42
|
-
## Commands
|
|
62
|
+
## Claude Code Slash Commands
|
|
63
|
+
|
|
64
|
+
When installed via `cf install-commands`, these slash commands are available directly in Claude Code sessions:
|
|
65
|
+
|
|
66
|
+
| Command | Description |
|
|
67
|
+
|---------|-------------|
|
|
68
|
+
| `/cf:build` | Build a context prompt (accepts `--phase`, `--slice` flags) |
|
|
69
|
+
| `/cf:status` | Show project workflow status |
|
|
70
|
+
| `/cf:get` | Show all project fields |
|
|
71
|
+
| `/cf:set` | Set a project field (e.g., `/cf:set phase 6`) |
|
|
72
|
+
| `/cf:prompt` | Get or list prompt templates (e.g., `/cf:prompt P5` or `/cf:prompt list`) |
|
|
73
|
+
| `/cf:project` | Manage projects (e.g., `/cf:project list`, `/cf:project --schema`) |
|
|
74
|
+
| `/cf:next` | Show recommended next action |
|
|
75
|
+
|
|
76
|
+
Each command runs `cf` under the hood — same CWD-based project resolution, same output.
|
|
77
|
+
|
|
78
|
+
## Commands Reference
|
|
43
79
|
|
|
44
80
|
| Command | Usage | Description |
|
|
45
81
|
|---------|-------|-------------|
|
|
82
|
+
| `cf init` | `cf init` | Register the current directory as a Context Forge project |
|
|
46
83
|
| `cf status` | `cf status [--project <id>] [--json]` | Show workflow status for the active project |
|
|
47
84
|
| `cf next` | `cf next [--project <id>] [--json]` | Show recommended next action |
|
|
48
85
|
| `cf build` | `cf build [--project <id>] [--phase] [--slice] [--instruction] [--tasks] [--additional]` | Generate context prompt to stdout |
|
|
86
|
+
| `cf set` | `cf set <field> <value>` | Set a project field (shortcut for `cf project set`) |
|
|
87
|
+
| `cf get` | `cf get [--json]` | Show all project fields (shortcut for `cf project get`) |
|
|
49
88
|
| `cf config` | `cf config list\|get\|set` | Manage configuration |
|
|
50
|
-
| `cf project` | `cf project list\|get\|set` | Manage projects |
|
|
89
|
+
| `cf project` | `cf project list\|get\|set\|rm` | Manage projects |
|
|
51
90
|
| `cf future` | `cf future [--project <id>] [--status <filter>] [--json]` | Show consolidated future work |
|
|
52
|
-
| `cf check` | `cf check [--fix] [--json]` | Run consistency checks
|
|
91
|
+
| `cf check` | `cf check [--fix] [--json]` | Run consistency checks |
|
|
53
92
|
| `cf prompt` | `cf prompt list\|get <phase>` | Access prompt templates with variable substitution |
|
|
93
|
+
| `cf guides` | `cf guides install\|status\|update` | Manage ai-project-guide templates |
|
|
54
94
|
|
|
55
95
|
## Common Options
|
|
56
96
|
|
|
57
|
-
- `--project <name|id>` — Override the
|
|
97
|
+
- `--project <name|id>` — Override the active project by name or ID
|
|
58
98
|
- `--json` — Output as JSON (not applicable to `build` and `prompt get`)
|
|
59
99
|
|
|
100
|
+
## Project Resolution
|
|
101
|
+
|
|
102
|
+
`cf` resolves which project to operate on using a priority chain:
|
|
103
|
+
|
|
104
|
+
1. **`--project` flag** — highest priority. Accepts project name or ID.
|
|
105
|
+
2. **CWD detection** — if the current directory is inside a registered project's path, that project is used automatically.
|
|
106
|
+
|
|
107
|
+
This means you can manage multiple projects just by `cd`-ing between them — no switching commands needed.
|
|
108
|
+
|
|
60
109
|
## Phase Shorthands
|
|
61
110
|
|
|
62
111
|
`cf prompt get` and `cf build --phase` accept phase shorthands:
|
|
@@ -73,23 +122,23 @@ cf prompt get P5
|
|
|
73
122
|
|
|
74
123
|
Shorthands are derived at runtime from the project's prompt asset file.
|
|
75
124
|
|
|
76
|
-
##
|
|
125
|
+
## Phase / Instruction Auto-Set
|
|
77
126
|
|
|
78
|
-
|
|
127
|
+
Setting the development phase automatically updates `instruction` to match:
|
|
79
128
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
129
|
+
```bash
|
|
130
|
+
cf set phase 6
|
|
131
|
+
# Updated phase = Phase 6: Implementation on project my-project
|
|
132
|
+
# Updated instruction = Phase 6: Implementation (auto-set from phase)
|
|
133
|
+
```
|
|
85
134
|
|
|
86
|
-
|
|
135
|
+
Setting `instruction` directly does not change `developmentPhase`.
|
|
87
136
|
|
|
88
137
|
## Architecture
|
|
89
138
|
|
|
90
139
|
The CLI wraps `@context-forge/core` directly (no MCP layer), following the same pattern as the Electron package. All core services are imported from `@context-forge/core/node`.
|
|
91
140
|
|
|
92
|
-
## Development
|
|
141
|
+
## Development (monorepo)
|
|
93
142
|
|
|
94
143
|
```bash
|
|
95
144
|
pnpm --filter @context-forge/cli build # Compile TypeScript
|
|
@@ -100,12 +149,20 @@ pnpm --filter @context-forge/cli typecheck # Type check
|
|
|
100
149
|
|
|
101
150
|
## Changelog
|
|
102
151
|
|
|
152
|
+
### v0.3.0
|
|
153
|
+
|
|
154
|
+
- **Template variable completion** — artifact fields (`fileArch`, `fileSlicePlan`, `fileHLD`, `fileSpec`) and aliases (`arch`, `plan`, `hld`, `spec`) available in prompt templates, with index extraction (`archIndex`, `planIndex`)
|
|
155
|
+
- **Consolidated project context** — `cf build` output uses clean key-value `### Project Context` block instead of bracket-wrapped format; `template` field removed; schema field names used throughout
|
|
156
|
+
- **Unified opening statement** — always "Working on {name}..." regardless of workType
|
|
157
|
+
- **Phase auto-sets instruction** — `cf set phase N` also updates `instruction` to match
|
|
158
|
+
- **Top-level shortcuts** — `cf set` and `cf get` work as shortcuts for `cf project set/get`
|
|
159
|
+
|
|
103
160
|
### v0.2.0
|
|
104
161
|
|
|
105
162
|
- **CWD-based project detection** — `cf` auto-detects the project from your current directory
|
|
106
|
-
- **Name-based resolution** — use `--project orchestration`
|
|
107
|
-
- **Resolution indicators** — `cf status` shows how the project was resolved (`from CWD`,
|
|
108
|
-
- **Compact `cf project list`** — Name/Path/Slice
|
|
163
|
+
- **Name-based resolution** — use `--project orchestration` with project names instead of IDs
|
|
164
|
+
- **Resolution indicators** — `cf status` shows how the project was resolved (`from CWD`, `--project flag`)
|
|
165
|
+
- **Compact `cf project list`** — Name/Path/Slice columns with `*` active indicator and `~` path shortening
|
|
109
166
|
- **Tighter output formatting** — consistent label alignment, suppressed empty fields, standardized error messages
|
|
110
167
|
|
|
111
168
|
### v0.1.0
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Build a Context Forge context prompt (accepts optional --phase, --slice flags)
|
|
3
|
+
argument-hint: [--phase <phase>] [--slice <slice>]
|
|
4
|
+
allowed-tools: Bash(cf:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Present the following context prompt exactly as shown, with no additional commentary or interpretation:
|
|
8
|
+
|
|
9
|
+
!`cf build $ARGUMENTS`
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Manage Context Forge projects (e.g., /cf:project list, /cf:project --schema)
|
|
3
|
+
argument-hint: [list | get | set <field> <value> | rm | --schema]
|
|
4
|
+
allowed-tools: Bash(cf:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Present the following output exactly as shown, with no additional commentary or interpretation:
|
|
8
|
+
|
|
9
|
+
!`cf project $ARGUMENTS`
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Get or list Context Forge prompt templates (e.g., /cf:prompt P5 or /cf:prompt list)
|
|
3
|
+
argument-hint: [phase-name | list]
|
|
4
|
+
allowed-tools: Bash(cf:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Present the following output exactly as shown, with no additional commentary or interpretation:
|
|
8
|
+
|
|
9
|
+
!`cf prompt get $ARGUMENTS 2>/dev/null || cf prompt list`
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Set a field on the active Context Forge project (e.g., /cf:set phase 4)
|
|
3
|
+
argument-hint: <field> <value>
|
|
4
|
+
allowed-tools: Bash(cf:*)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Present the following output exactly as shown, with no additional commentary or interpretation:
|
|
8
|
+
|
|
9
|
+
!`cf set $ARGUMENTS`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoD3D"}
|
package/dist/commands/build.js
CHANGED
|
@@ -28,8 +28,10 @@ export function registerBuildCommand(program) {
|
|
|
28
28
|
process.stderr.write(`Building context for ${project.name}...\n`);
|
|
29
29
|
// Apply overrides to a working copy
|
|
30
30
|
const workingCopy = { ...project };
|
|
31
|
-
if (opts.phase)
|
|
31
|
+
if (opts.phase) {
|
|
32
32
|
workingCopy.developmentPhase = opts.phase;
|
|
33
|
+
workingCopy.instruction = opts.phase;
|
|
34
|
+
}
|
|
33
35
|
if (opts.slice)
|
|
34
36
|
workingCopy.fileSlice = opts.slice;
|
|
35
37
|
if (opts.instruction)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAWlD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wEAAwE,CAAC;SACrF,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;SAC1D,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;SAChD,MAAM,CAAC,6BAA6B,EAAE,2BAA2B,CAAC;SAClE,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SACpD,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,IAAe,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,mDAAmD,CAAC,CAAC;YACpG,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,MAAM,IAAI,SAAS,CACjB,YAAY,OAAO,CAAC,IAAI,oCAAoC;oBAC1D,+CAA+C,CAClD,CAAC;YACJ,CAAC;YAED,iEAAiE;YACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;YAElE,oCAAoC;YACpC,MAAM,WAAW,GAAgB,EAAE,GAAG,OAAO,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,KAAK;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAWlD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO;SACJ,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wEAAwE,CAAC;SACrF,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;SAC1D,MAAM,CAAC,iBAAiB,EAAE,4BAA4B,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;SAChD,MAAM,CAAC,6BAA6B,EAAE,2BAA2B,CAAC;SAClE,MAAM,CAAC,iBAAiB,EAAE,yBAAyB,CAAC;SACpD,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,IAAe,EAAE,EAAE;QAChC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,mDAAmD,CAAC,CAAC;YACpG,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACzB,MAAM,IAAI,SAAS,CACjB,YAAY,OAAO,CAAC,IAAI,oCAAoC;oBAC1D,+CAA+C,CAClD,CAAC;YACJ,CAAC;YAED,iEAAiE;YACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;YAElE,oCAAoC;YACpC,MAAM,WAAW,GAAgB,EAAE,GAAG,OAAO,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,WAAW,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC1C,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YACvC,CAAC;YACD,IAAI,IAAI,CAAC,KAAK;gBAAE,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YACnD,IAAI,IAAI,CAAC,WAAW;gBAAE,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACjE,IAAI,IAAI,CAAC,KAAK;gBAAE,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YAEnD,MAAM,EAAE,UAAU,EAAE,GAAG,qBAAqB,CAAC,WAAW,CAAC,WAAY,CAAC,CAAC;YACvE,IAAI,aAAa,GAAG,MAAM,UAAU,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC;YAE7E,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,aAAa,GAAG,GAAG,aAAa,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3D,CAAC;YAED,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/** Resolve the bundled commands/ directory relative to this script's location. */
|
|
3
|
+
export declare function getSourceCommandsDir(): string;
|
|
4
|
+
/**
|
|
5
|
+
* Copy command files from the bundled commands/cf/ directory to the target.
|
|
6
|
+
* Creates directories as needed. Overwrites existing files (idempotent).
|
|
7
|
+
*
|
|
8
|
+
* @returns List of installed filenames.
|
|
9
|
+
*/
|
|
10
|
+
export declare function installCommands(targetDir: string): string[];
|
|
11
|
+
/**
|
|
12
|
+
* Remove managed command files from the target.
|
|
13
|
+
* Preserves user-added files. Removes the cf/ directory only if empty.
|
|
14
|
+
* No error if files or directory don't exist (idempotent).
|
|
15
|
+
*
|
|
16
|
+
* @returns List of removed filenames.
|
|
17
|
+
*/
|
|
18
|
+
export declare function uninstallCommands(targetDir: string): string[];
|
|
19
|
+
export declare function registerInstallCommandsCommand(program: Command): void;
|
|
20
|
+
export declare function registerUninstallCommandsCommand(program: Command): void;
|
|
21
|
+
//# sourceMappingURL=commandInstaller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandInstaller.d.ts","sourceRoot":"","sources":["../../src/commands/commandInstaller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,kFAAkF;AAClF,wBAAgB,oBAAoB,IAAI,MAAM,CAU7C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAY3D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB7D;AAOD,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiBrE;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqBvE"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as os from 'node:os';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { success, dim } from '../output/styles.js';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = path.dirname(__filename);
|
|
8
|
+
/** Known command files managed by install/uninstall. */
|
|
9
|
+
const MANAGED_FILES = ['status.md', 'build.md', 'next.md', 'prompt.md', 'get.md', 'set.md', 'project.md'];
|
|
10
|
+
/** Resolve the bundled commands/ directory relative to this script's location. */
|
|
11
|
+
export function getSourceCommandsDir() {
|
|
12
|
+
// In dist: dist/commands/commandInstaller.js → ../../commands/
|
|
13
|
+
const resolved = path.resolve(__dirname, '..', '..', 'commands');
|
|
14
|
+
if (!fs.existsSync(resolved)) {
|
|
15
|
+
throw new Error(`Cannot locate bundled commands directory at ${resolved}. ` +
|
|
16
|
+
'Ensure the package includes a commands/ directory.');
|
|
17
|
+
}
|
|
18
|
+
return resolved;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Copy command files from the bundled commands/cf/ directory to the target.
|
|
22
|
+
* Creates directories as needed. Overwrites existing files (idempotent).
|
|
23
|
+
*
|
|
24
|
+
* @returns List of installed filenames.
|
|
25
|
+
*/
|
|
26
|
+
export function installCommands(targetDir) {
|
|
27
|
+
const sourceDir = path.join(getSourceCommandsDir(), 'cf');
|
|
28
|
+
const targetCfDir = path.join(targetDir, 'cf');
|
|
29
|
+
fs.mkdirSync(targetCfDir, { recursive: true });
|
|
30
|
+
const files = fs.readdirSync(sourceDir).filter((f) => f.endsWith('.md'));
|
|
31
|
+
for (const file of files) {
|
|
32
|
+
fs.copyFileSync(path.join(sourceDir, file), path.join(targetCfDir, file));
|
|
33
|
+
}
|
|
34
|
+
return files;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Remove managed command files from the target.
|
|
38
|
+
* Preserves user-added files. Removes the cf/ directory only if empty.
|
|
39
|
+
* No error if files or directory don't exist (idempotent).
|
|
40
|
+
*
|
|
41
|
+
* @returns List of removed filenames.
|
|
42
|
+
*/
|
|
43
|
+
export function uninstallCommands(targetDir) {
|
|
44
|
+
const targetCfDir = path.join(targetDir, 'cf');
|
|
45
|
+
const removed = [];
|
|
46
|
+
for (const file of MANAGED_FILES) {
|
|
47
|
+
const filePath = path.join(targetCfDir, file);
|
|
48
|
+
if (fs.existsSync(filePath)) {
|
|
49
|
+
fs.rmSync(filePath);
|
|
50
|
+
removed.push(file);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Remove cf/ directory if it exists and is now empty
|
|
54
|
+
if (fs.existsSync(targetCfDir)) {
|
|
55
|
+
const remaining = fs.readdirSync(targetCfDir);
|
|
56
|
+
if (remaining.length === 0) {
|
|
57
|
+
fs.rmdirSync(targetCfDir);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return removed;
|
|
61
|
+
}
|
|
62
|
+
/** Default target directory for command installation. */
|
|
63
|
+
function defaultTarget() {
|
|
64
|
+
return path.join(os.homedir(), '.claude', 'commands');
|
|
65
|
+
}
|
|
66
|
+
export function registerInstallCommandsCommand(program) {
|
|
67
|
+
program
|
|
68
|
+
.command('install-commands')
|
|
69
|
+
.description('Install Claude Code slash commands for Context Forge')
|
|
70
|
+
.option('--target <dir>', 'Target directory', defaultTarget())
|
|
71
|
+
.action((opts) => {
|
|
72
|
+
try {
|
|
73
|
+
const installed = installCommands(opts.target);
|
|
74
|
+
console.log(success(`Installed ${installed.length} commands to ${opts.target}/cf/`));
|
|
75
|
+
for (const file of installed) {
|
|
76
|
+
console.log(` ${dim('/cf:' + file.replace('.md', ''))}`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
console.error(`Error: ${err.message}`);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
export function registerUninstallCommandsCommand(program) {
|
|
86
|
+
program
|
|
87
|
+
.command('uninstall-commands')
|
|
88
|
+
.description('Remove Claude Code slash commands for Context Forge')
|
|
89
|
+
.option('--target <dir>', 'Target directory', defaultTarget())
|
|
90
|
+
.action((opts) => {
|
|
91
|
+
try {
|
|
92
|
+
const removed = uninstallCommands(opts.target);
|
|
93
|
+
if (removed.length === 0) {
|
|
94
|
+
console.log(dim('No commands found to remove.'));
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.log(success(`Removed ${removed.length} commands from ${opts.target}/cf/`));
|
|
98
|
+
for (const file of removed) {
|
|
99
|
+
console.log(` ${dim('/cf:' + file.replace('.md', ''))}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
console.error(`Error: ${err.message}`);
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=commandInstaller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commandInstaller.js","sourceRoot":"","sources":["../../src/commands/commandInstaller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/** Generate help text showing settable fields grouped by category. */
|
|
3
|
+
export declare function buildSettableFieldsHelp(): string;
|
|
4
|
+
/** Shared action handler for `cf set` and `cf project set`. */
|
|
5
|
+
export declare function projectSetAction(field: string, val: string, opts: {
|
|
6
|
+
project?: string;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
/** Shared action handler for `cf get` and `cf project get`. */
|
|
9
|
+
export declare function projectGetAction(opts: {
|
|
10
|
+
json?: boolean;
|
|
11
|
+
project?: string;
|
|
12
|
+
}): Promise<void>;
|
|
2
13
|
export declare function registerProjectCommand(program: Command): void;
|
|
3
14
|
//# sourceMappingURL=project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0EpC,sEAAsE;AACtE,wBAAgB,uBAAuB,IAAI,MAAM,CA0BhD;AAED,+DAA+D;AAC/D,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAoEf;AAED,+DAA+D;AAC/D,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2H7D"}
|
package/dist/commands/project.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as os from 'node:os';
|
|
2
2
|
import * as readline from 'node:readline';
|
|
3
|
-
import { FileProjectStore, ConfigManager } from '@context-forge/core/node';
|
|
3
|
+
import { FileProjectStore, ConfigManager, resolveFileByIndex } from '@context-forge/core/node';
|
|
4
4
|
import { resolveFieldName, resolvePhaseValue, validateFieldValue, PROJECT_FIELDS, FIELD_GROUPS, } from '@context-forge/core';
|
|
5
|
-
import { resolveProjectId, findByNameOrId } from '../utils/project.js';
|
|
5
|
+
import { resolveProjectId, findByNameOrId, findProjectByCwd } from '../utils/project.js';
|
|
6
6
|
import { handleError, UserError } from '../utils/errors.js';
|
|
7
7
|
import { printJson } from '../output/formatter.js';
|
|
8
8
|
import { renderTable } from '../output/tables.js';
|
|
@@ -23,26 +23,162 @@ function displaySchema() {
|
|
|
23
23
|
artifacts: 'Artifacts',
|
|
24
24
|
workflow: 'Workflow',
|
|
25
25
|
metadata: 'Metadata',
|
|
26
|
+
custom: 'Custom',
|
|
26
27
|
};
|
|
27
|
-
|
|
28
|
-
|
|
28
|
+
const rows = [];
|
|
29
|
+
const rowPrefixes = [];
|
|
30
|
+
const enumFields = [];
|
|
29
31
|
for (const group of FIELD_GROUPS) {
|
|
30
32
|
const groupFields = PROJECT_FIELDS.filter((f) => f.group === group);
|
|
31
|
-
|
|
33
|
+
// Group separator row
|
|
34
|
+
rows.push([label(groupLabels[group]), '', '']);
|
|
35
|
+
rowPrefixes.push(' ');
|
|
32
36
|
for (const f of groupFields) {
|
|
37
|
+
const alias = f.aliases.length > 0 ? f.aliases.join(', ') : '';
|
|
33
38
|
const flags = [];
|
|
34
39
|
if (f.required)
|
|
35
40
|
flags.push('required');
|
|
36
41
|
if (f.readonly)
|
|
37
42
|
flags.push('readonly');
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
console.log(`${''.padEnd(20)}Aliases: ${f.aliases.join(', ')}`);
|
|
42
|
-
}
|
|
43
|
+
const desc = flags.length > 0 ? `${f.description} ${dim(`(${flags.join(', ')})`)}` : f.description;
|
|
44
|
+
rows.push([f.field, alias, desc]);
|
|
45
|
+
rowPrefixes.push(' ');
|
|
43
46
|
if (f.enumValues) {
|
|
44
|
-
|
|
47
|
+
enumFields.push({ name: f.aliases[0] ?? f.field, values: f.enumValues });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
console.log(label('\nProject Schema') + dim(' (all fields are strings)'));
|
|
52
|
+
console.log('══════════════');
|
|
53
|
+
console.log(renderTable(['Field', 'Alias', 'Description'], rows, rowPrefixes));
|
|
54
|
+
if (enumFields.length > 0) {
|
|
55
|
+
console.log(dim('\n Allowed values:'));
|
|
56
|
+
for (const { name, values } of enumFields) {
|
|
57
|
+
console.log(dim(` ${name}: ${values.join(' | ')}`));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** Generate help text showing settable fields grouped by category. */
|
|
62
|
+
export function buildSettableFieldsHelp() {
|
|
63
|
+
const groupLabels = {
|
|
64
|
+
identity: 'Identity',
|
|
65
|
+
artifacts: 'Artifacts',
|
|
66
|
+
workflow: 'Workflow',
|
|
67
|
+
metadata: 'Metadata',
|
|
68
|
+
custom: 'Custom',
|
|
69
|
+
};
|
|
70
|
+
const lines = ['', 'Settable fields:'];
|
|
71
|
+
for (const group of FIELD_GROUPS) {
|
|
72
|
+
const groupFields = PROJECT_FIELDS.filter((f) => f.group === group && !f.readonly);
|
|
73
|
+
if (groupFields.length === 0)
|
|
74
|
+
continue;
|
|
75
|
+
lines.push(` ${groupLabels[group]}`);
|
|
76
|
+
for (const f of groupFields) {
|
|
77
|
+
const aliasStr = f.aliases.length > 0 ? ` (${f.aliases.join(', ')})` : '';
|
|
78
|
+
lines.push(` ${(f.field + aliasStr).padEnd(30)} ${f.description}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
lines.push('', "Run 'cf project --schema' for full details including allowed values.");
|
|
82
|
+
return lines.join('\n');
|
|
83
|
+
}
|
|
84
|
+
/** Shared action handler for `cf set` and `cf project set`. */
|
|
85
|
+
export async function projectSetAction(field, val, opts) {
|
|
86
|
+
const resolvedField = resolveFieldName(field);
|
|
87
|
+
if (!resolvedField) {
|
|
88
|
+
throw new UserError(`Unknown field: '${field}'. Run 'cf project --schema' to see available fields.`);
|
|
89
|
+
}
|
|
90
|
+
const fieldDef = PROJECT_FIELDS.find((f) => f.field === resolvedField);
|
|
91
|
+
if (fieldDef?.readonly) {
|
|
92
|
+
throw new UserError(`Field '${resolvedField}' is read-only and cannot be set.`);
|
|
93
|
+
}
|
|
94
|
+
let resolvedValue = val;
|
|
95
|
+
if (resolvedField === 'developmentPhase' || resolvedField === 'instruction') {
|
|
96
|
+
const phaseVal = resolvePhaseValue(val);
|
|
97
|
+
if (!phaseVal) {
|
|
98
|
+
const allowed = fieldDef?.enumValues?.join(', ') ?? '';
|
|
99
|
+
throw new UserError(`Invalid value "${val}" for field "${resolvedField}". Allowed values: ${allowed}`);
|
|
100
|
+
}
|
|
101
|
+
resolvedValue = phaseVal;
|
|
102
|
+
}
|
|
103
|
+
const validation = validateFieldValue(resolvedField, resolvedValue);
|
|
104
|
+
if (!validation.valid) {
|
|
105
|
+
throw new UserError(validation.error);
|
|
106
|
+
}
|
|
107
|
+
const store = new FileProjectStore();
|
|
108
|
+
const { id } = await resolveProjectId(opts.project, store);
|
|
109
|
+
const existing = await store.getById(id);
|
|
110
|
+
if (!existing) {
|
|
111
|
+
throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
|
|
112
|
+
}
|
|
113
|
+
// Index-based file resolution: cf set slice 171 → scans for matching file
|
|
114
|
+
if (fieldDef?.group === 'artifacts' && /^\d+$/.test(resolvedValue) && existing.projectPath) {
|
|
115
|
+
try {
|
|
116
|
+
const resolved = resolveFileByIndex(existing.projectPath, resolvedField, resolvedValue);
|
|
117
|
+
if (resolved !== null) {
|
|
118
|
+
resolvedValue = resolved;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
throw new UserError(err.message);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// customData fields use dot-notation; merge into the nested object
|
|
126
|
+
if (resolvedField.startsWith('customData.')) {
|
|
127
|
+
const subField = resolvedField.split('.')[1];
|
|
128
|
+
const merged = { ...existing.customData, [subField]: resolvedValue };
|
|
129
|
+
await store.update(id, { customData: merged });
|
|
130
|
+
}
|
|
131
|
+
else if (resolvedField === 'developmentPhase') {
|
|
132
|
+
// Auto-set instruction to match when phase changes
|
|
133
|
+
await store.update(id, { [resolvedField]: resolvedValue, instruction: resolvedValue });
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
await store.update(id, { [resolvedField]: resolvedValue });
|
|
137
|
+
}
|
|
138
|
+
// Show alias-friendly name in confirmation
|
|
139
|
+
const displayName = fieldDef?.aliases[0] ?? resolvedField;
|
|
140
|
+
console.log(success(`Updated ${displayName} = ${resolvedValue} on project ${existing.name}`));
|
|
141
|
+
if (resolvedField === 'developmentPhase') {
|
|
142
|
+
console.log(success(`Updated instruction = ${resolvedValue} (auto-set from phase)`));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/** Shared action handler for `cf get` and `cf project get`. */
|
|
146
|
+
export async function projectGetAction(opts) {
|
|
147
|
+
const store = new FileProjectStore();
|
|
148
|
+
const { id } = await resolveProjectId(opts.project, store);
|
|
149
|
+
const project = await store.getById(id);
|
|
150
|
+
if (!project) {
|
|
151
|
+
throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
|
|
152
|
+
}
|
|
153
|
+
if (opts.json) {
|
|
154
|
+
printJson(project);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const groupLabels = {
|
|
158
|
+
identity: 'Identity',
|
|
159
|
+
artifacts: 'Artifacts',
|
|
160
|
+
workflow: 'Workflow',
|
|
161
|
+
metadata: 'Metadata',
|
|
162
|
+
custom: 'Custom',
|
|
163
|
+
};
|
|
164
|
+
const projectRecord = project;
|
|
165
|
+
const customData = project.customData;
|
|
166
|
+
for (const group of FIELD_GROUPS) {
|
|
167
|
+
const groupFields = PROJECT_FIELDS.filter((f) => f.group === group);
|
|
168
|
+
console.log(`\n${label(groupLabels[group])}`);
|
|
169
|
+
for (const f of groupFields) {
|
|
170
|
+
// Read from customData sub-object for dot-notation fields
|
|
171
|
+
let v;
|
|
172
|
+
if (f.field.startsWith('customData.')) {
|
|
173
|
+
const subField = f.field.split('.')[1];
|
|
174
|
+
v = customData?.[subField];
|
|
45
175
|
}
|
|
176
|
+
else {
|
|
177
|
+
v = projectRecord[f.field];
|
|
178
|
+
}
|
|
179
|
+
const hasValue = v !== undefined && v !== null && v !== '';
|
|
180
|
+
const display = hasValue ? valueStyle(String(v)) : dim('—');
|
|
181
|
+
console.log(` ${label(`${f.label}:`.padEnd(16))}${display}`);
|
|
46
182
|
}
|
|
47
183
|
}
|
|
48
184
|
}
|
|
@@ -74,23 +210,29 @@ export function registerProjectCommand(program) {
|
|
|
74
210
|
if (defaultRef) {
|
|
75
211
|
defaultProject = await findByNameOrId(defaultRef, store);
|
|
76
212
|
}
|
|
213
|
+
const cwdProject = await findProjectByCwd(store);
|
|
214
|
+
const activeId = cwdProject?.id ?? defaultProject?.id ?? null;
|
|
77
215
|
if (opts.json) {
|
|
78
216
|
printJson(projects.map((p) => ({
|
|
79
217
|
id: p.id,
|
|
80
218
|
name: p.name,
|
|
81
219
|
projectPath: p.projectPath,
|
|
82
220
|
fileSlice: p.fileSlice,
|
|
83
|
-
|
|
221
|
+
isActive: p.id === activeId,
|
|
84
222
|
})));
|
|
85
223
|
return;
|
|
86
224
|
}
|
|
87
|
-
const rows = projects.map((p) =>
|
|
88
|
-
p.
|
|
89
|
-
|
|
90
|
-
p.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
225
|
+
const rows = projects.map((p) => {
|
|
226
|
+
const active = p.id === activeId;
|
|
227
|
+
const name = p.name;
|
|
228
|
+
const path = shortenPath(p.projectPath ?? '');
|
|
229
|
+
const slice = p.fileSlice ?? '';
|
|
230
|
+
return active
|
|
231
|
+
? [success(name), success(path), success(slice)]
|
|
232
|
+
: [name, path, slice];
|
|
233
|
+
});
|
|
234
|
+
const prefixes = projects.map((p) => p.id === activeId ? success('* ') : ' ');
|
|
235
|
+
console.log(renderTable(['Name', 'Path', 'Slice'], rows, prefixes));
|
|
94
236
|
}
|
|
95
237
|
catch (err) {
|
|
96
238
|
handleError(err);
|
|
@@ -103,96 +245,24 @@ export function registerProjectCommand(program) {
|
|
|
103
245
|
.option('--project <id>', 'Project ID (overrides default)')
|
|
104
246
|
.action(async (opts) => {
|
|
105
247
|
try {
|
|
106
|
-
|
|
107
|
-
const { id } = await resolveProjectId(opts.project, store);
|
|
108
|
-
const project = await store.getById(id);
|
|
109
|
-
if (!project) {
|
|
110
|
-
throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
|
|
111
|
-
}
|
|
112
|
-
if (opts.json) {
|
|
113
|
-
printJson(project);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
// Grouped display — iterate by group, skip empty groups
|
|
117
|
-
const groupLabels = {
|
|
118
|
-
identity: 'Identity',
|
|
119
|
-
artifacts: 'Artifacts',
|
|
120
|
-
workflow: 'Workflow',
|
|
121
|
-
metadata: 'Metadata',
|
|
122
|
-
};
|
|
123
|
-
const projectRecord = project;
|
|
124
|
-
for (const group of FIELD_GROUPS) {
|
|
125
|
-
const groupFields = PROJECT_FIELDS.filter((f) => f.group === group);
|
|
126
|
-
const populated = groupFields.filter((f) => {
|
|
127
|
-
const val = projectRecord[f.field];
|
|
128
|
-
return val !== undefined && val !== null && val !== '';
|
|
129
|
-
});
|
|
130
|
-
if (populated.length === 0)
|
|
131
|
-
continue;
|
|
132
|
-
console.log(`\n${label(groupLabels[group])}`);
|
|
133
|
-
for (const f of populated) {
|
|
134
|
-
const val = String(projectRecord[f.field]);
|
|
135
|
-
console.log(` ${label(`${f.label}:`.padEnd(16))}${valueStyle(val)}`);
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
// Display customData sub-fields if populated
|
|
139
|
-
const custom = project.customData;
|
|
140
|
-
if (custom) {
|
|
141
|
-
const customEntries = [
|
|
142
|
-
['Recent Events', custom.recentEvents ?? ''],
|
|
143
|
-
['Notes', custom.additionalNotes ?? ''],
|
|
144
|
-
['Tools', custom.availableTools ?? ''],
|
|
145
|
-
];
|
|
146
|
-
const populated = customEntries.filter(([, v]) => v);
|
|
147
|
-
if (populated.length > 0) {
|
|
148
|
-
console.log(`\n${label('Custom Data')}`);
|
|
149
|
-
for (const [k, v] of populated) {
|
|
150
|
-
console.log(` ${label(`${k}:`.padEnd(16))}${valueStyle(v)}`);
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
}
|
|
248
|
+
await projectGetAction(opts);
|
|
154
249
|
}
|
|
155
250
|
catch (err) {
|
|
156
251
|
handleError(err);
|
|
157
252
|
}
|
|
158
253
|
});
|
|
159
254
|
cmd
|
|
160
|
-
.command('set
|
|
255
|
+
.command('set [field] [value]')
|
|
161
256
|
.description('Update a field on the active project')
|
|
162
257
|
.option('--project <id>', 'Project ID (overrides default)')
|
|
258
|
+
.addHelpText('after', buildSettableFieldsHelp)
|
|
163
259
|
.action(async (field, val, opts) => {
|
|
260
|
+
if (!field || !val) {
|
|
261
|
+
console.log(`Usage: cf project set [options] <field> <value> — run cf project set --help for details`);
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
164
264
|
try {
|
|
165
|
-
|
|
166
|
-
if (!resolvedField) {
|
|
167
|
-
throw new UserError(`Unknown field: '${field}'. Run 'cf project --schema' to see available fields.`);
|
|
168
|
-
}
|
|
169
|
-
const fieldDef = PROJECT_FIELDS.find((f) => f.field === resolvedField);
|
|
170
|
-
if (fieldDef?.readonly) {
|
|
171
|
-
throw new UserError(`Field '${resolvedField}' is read-only and cannot be set.`);
|
|
172
|
-
}
|
|
173
|
-
// Resolve phase/instruction values (number, short name, or full string)
|
|
174
|
-
let resolvedValue = val;
|
|
175
|
-
if (resolvedField === 'developmentPhase' || resolvedField === 'instruction') {
|
|
176
|
-
const phaseVal = resolvePhaseValue(val);
|
|
177
|
-
if (!phaseVal) {
|
|
178
|
-
const allowed = fieldDef?.enumValues?.join(', ') ?? '';
|
|
179
|
-
throw new UserError(`Invalid value "${val}" for field "${resolvedField}". Allowed values: ${allowed}`);
|
|
180
|
-
}
|
|
181
|
-
resolvedValue = phaseVal;
|
|
182
|
-
}
|
|
183
|
-
// Validate against enum constraints
|
|
184
|
-
const validation = validateFieldValue(resolvedField, resolvedValue);
|
|
185
|
-
if (!validation.valid) {
|
|
186
|
-
throw new UserError(validation.error);
|
|
187
|
-
}
|
|
188
|
-
const store = new FileProjectStore();
|
|
189
|
-
const { id } = await resolveProjectId(opts.project, store);
|
|
190
|
-
const existing = await store.getById(id);
|
|
191
|
-
if (!existing) {
|
|
192
|
-
throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
|
|
193
|
-
}
|
|
194
|
-
await store.update(id, { [resolvedField]: resolvedValue });
|
|
195
|
-
console.log(success(`Updated ${resolvedField} = ${resolvedValue} on project ${existing.name}`));
|
|
265
|
+
await projectSetAction(field, val, opts);
|
|
196
266
|
}
|
|
197
267
|
catch (err) {
|
|
198
268
|
handleError(err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import { registerConfigCommand } from './commands/config.js';
|
|
6
|
-
import { registerProjectCommand } from './commands/project.js';
|
|
6
|
+
import { registerProjectCommand, projectSetAction, projectGetAction, buildSettableFieldsHelp } from './commands/project.js';
|
|
7
7
|
import { registerStatusCommand } from './commands/status.js';
|
|
8
8
|
import { registerNextCommand } from './commands/next.js';
|
|
9
9
|
import { registerBuildCommand } from './commands/build.js';
|
|
@@ -12,6 +12,7 @@ import { registerCheckCommand } from './commands/check.js';
|
|
|
12
12
|
import { registerPromptCommand } from './commands/prompt.js';
|
|
13
13
|
import { registerInitCommand } from './commands/init.js';
|
|
14
14
|
import { registerGuidesCommand } from './commands/guides.js';
|
|
15
|
+
import { registerInstallCommandsCommand, registerUninstallCommandsCommand } from './commands/commandInstaller.js';
|
|
15
16
|
import { handleError } from './utils/errors.js';
|
|
16
17
|
const require = createRequire(import.meta.url);
|
|
17
18
|
const { version } = require('../package.json');
|
|
@@ -40,6 +41,39 @@ registerCheckCommand(program);
|
|
|
40
41
|
registerPromptCommand(program);
|
|
41
42
|
registerInitCommand(program);
|
|
42
43
|
registerGuidesCommand(program);
|
|
44
|
+
registerInstallCommandsCommand(program);
|
|
45
|
+
registerUninstallCommandsCommand(program);
|
|
46
|
+
// Top-level shortcuts for project get/set
|
|
47
|
+
program
|
|
48
|
+
.command('set [field] [value]')
|
|
49
|
+
.description('Set a field on the active project (shortcut for cf project set)')
|
|
50
|
+
.option('--project <name|id>', 'Project name or ID (overrides default)')
|
|
51
|
+
.addHelpText('after', buildSettableFieldsHelp)
|
|
52
|
+
.action(async (field, val, opts) => {
|
|
53
|
+
if (!field || !val) {
|
|
54
|
+
console.log(`Usage: cf set [options] <field> <value> — run cf set --help for details`);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
await projectSetAction(field, val, opts);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
handleError(err);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
program
|
|
65
|
+
.command('get')
|
|
66
|
+
.description('Show details for the active project (shortcut for cf project get)')
|
|
67
|
+
.option('--json', 'Output as JSON')
|
|
68
|
+
.option('--project <name|id>', 'Project name or ID (overrides default)')
|
|
69
|
+
.action(async (opts) => {
|
|
70
|
+
try {
|
|
71
|
+
await projectGetAction(opts);
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
handleError(err);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
43
77
|
// Catch unhandled errors at top level
|
|
44
78
|
process.on('uncaughtException', handleError);
|
|
45
79
|
process.on('unhandledRejection', handleError);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/output/tables.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Render a borderless table with bold/cyan headers and an underline separator.
|
|
3
3
|
* Matches orchestration CLI style: no cell borders, column-aligned with padding.
|
|
4
4
|
*/
|
|
5
|
-
export declare function renderTable(headers: string[], rows: string[][]): string;
|
|
5
|
+
export declare function renderTable(headers: string[], rows: string[][], rowPrefixes?: string[]): string;
|
|
6
6
|
//# sourceMappingURL=tables.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../src/output/tables.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,WAAW,
|
|
1
|
+
{"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../../src/output/tables.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EAAE,EAAE,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,MAAM,CAsCR"}
|
package/dist/output/tables.js
CHANGED
|
@@ -3,26 +3,29 @@ import chalk from 'chalk';
|
|
|
3
3
|
* Render a borderless table with bold/cyan headers and an underline separator.
|
|
4
4
|
* Matches orchestration CLI style: no cell borders, column-aligned with padding.
|
|
5
5
|
*/
|
|
6
|
-
export function renderTable(headers, rows) {
|
|
6
|
+
export function renderTable(headers, rows, rowPrefixes) {
|
|
7
7
|
// Calculate column widths from headers and data
|
|
8
8
|
const colWidths = headers.map((h, i) => {
|
|
9
9
|
const dataMax = rows.reduce((max, row) => Math.max(max, stripAnsi(row[i] ?? '').length), 0);
|
|
10
10
|
return Math.max(stripAnsi(h).length, dataMax);
|
|
11
11
|
});
|
|
12
12
|
const pad = 2; // spacing between columns
|
|
13
|
+
const indent = ' ';
|
|
13
14
|
const lines = [];
|
|
14
15
|
// Header row — bold cyan
|
|
15
16
|
const headerLine = headers
|
|
16
17
|
.map((h, i) => chalk.bold.cyan(h.padEnd(colWidths[i])))
|
|
17
18
|
.join(' '.repeat(pad));
|
|
18
|
-
lines.push(
|
|
19
|
+
lines.push(indent + headerLine);
|
|
19
20
|
// Underline — thin dash under each column
|
|
20
21
|
const underline = colWidths
|
|
21
22
|
.map((w) => '─'.repeat(w))
|
|
22
23
|
.join(' '.repeat(pad));
|
|
23
|
-
lines.push(
|
|
24
|
+
lines.push(indent + chalk.dim(underline));
|
|
24
25
|
// Data rows
|
|
25
|
-
for (
|
|
26
|
+
for (let r = 0; r < rows.length; r++) {
|
|
27
|
+
const row = rows[r];
|
|
28
|
+
const prefix = rowPrefixes ? rowPrefixes[r] : indent;
|
|
26
29
|
const rowLine = row
|
|
27
30
|
.map((cell, i) => {
|
|
28
31
|
const visible = stripAnsi(cell ?? '');
|
|
@@ -30,7 +33,7 @@ export function renderTable(headers, rows) {
|
|
|
30
33
|
return (cell ?? '') + ' '.repeat(Math.max(0, padding));
|
|
31
34
|
})
|
|
32
35
|
.join(' '.repeat(pad));
|
|
33
|
-
lines.push(
|
|
36
|
+
lines.push(prefix + rowLine);
|
|
34
37
|
}
|
|
35
38
|
return lines.join('\n');
|
|
36
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/output/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;GAGG;AACH,MAAM,UAAU,WAAW,
|
|
1
|
+
{"version":3,"file":"tables.js","sourceRoot":"","sources":["../../src/output/tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,OAAiB,EACjB,IAAgB,EAChB,WAAsB;IAEtB,gDAAgD;IAChD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,0BAA0B;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,yBAAyB;IACzB,MAAM,UAAU,GAAG,OAAO;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACtD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAEhC,0CAA0C;IAC1C,MAAM,SAAS,GAAG,SAAS;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACzB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1C,YAAY;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,MAAM,OAAO,GAAG,GAAG;aAChB,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACf,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9C,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,+DAA+D;AAC/D,SAAS,SAAS,CAAC,GAAW;IAC5B,4CAA4C;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@context-forge/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "CLI for Context Forge — terminal access to context assembly, project management, workflow navigation, and configuration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
12
|
+
"commands",
|
|
12
13
|
"README.md"
|
|
13
14
|
],
|
|
14
15
|
"keywords": [
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
"dependencies": {
|
|
32
33
|
"chalk": "^5.4.1",
|
|
33
34
|
"commander": "^13.1.0",
|
|
34
|
-
"@context-forge/core": "0.
|
|
35
|
+
"@context-forge/core": "0.3.1"
|
|
35
36
|
},
|
|
36
37
|
"devDependencies": {
|
|
37
38
|
"@types/node": "^25.3.0",
|