acstack 0.47.1 → 0.48.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/.claude-plugin/plugin.json +1 -1
- package/THIRD_PARTY_NOTICES +28 -0
- package/assets/terminal-workspace/config.example.yaml +16 -2
- package/assets/terminal-workspace/setup.sh +283 -6
- package/cli/dist/index.js +761 -60
- package/cli/dist/index.js.map +4 -4
- package/cli/package.json +10 -2
- package/docs/adr/0018-alignment-packs-use-local-viewers.md +11 -0
- package/docs/adr/index.md +1 -0
- package/docs/workflows.md +1 -1
- package/orchestrator/AGENTS.md +2 -2
- package/package.json +1 -1
- package/skills/bootstrap/SKILL.md +2 -2
- package/skills/grilling/SKILL.md +7 -5
- package/skills/implement/SKILL.md +8 -5
- package/skills/map/SKILL.md +6 -6
- package/skills/map/trackers/files.md +5 -2
- package/skills/pre-commit-review/SKILL.md +4 -2
- package/skills/quick-fix/SKILL.md +1 -1
- package/skills/setup/row-fixes.md +5 -3
package/cli/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "acstack-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.1",
|
|
4
4
|
"description": "CLI for the ACStack agentic coding stack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"node": ">=20.0.0"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
|
-
"build": "npm run sync-version && node build.mjs",
|
|
28
|
+
"build": "npm run sync-version && node scripts/build-viewer.mjs && node build.mjs",
|
|
29
29
|
"dev": "node build.mjs --watch",
|
|
30
30
|
"typecheck": "tsc --noEmit",
|
|
31
31
|
"lint": "eslint src/",
|
|
@@ -36,11 +36,19 @@
|
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@eslint/js": "^9.39.5",
|
|
38
38
|
"@types/node": "^22.0.0",
|
|
39
|
+
"@types/react": "^19.3.0",
|
|
40
|
+
"@types/react-dom": "^19.3.0",
|
|
41
|
+
"@xyflow/react": "^12.12.0",
|
|
39
42
|
"chalk": "^5.4.0",
|
|
40
43
|
"commander": "^14.0.0",
|
|
44
|
+
"elkjs": "^0.12.0",
|
|
41
45
|
"esbuild": "^0.24.0",
|
|
42
46
|
"eslint": "^9.39.5",
|
|
43
47
|
"fast-glob": "^3.3.0",
|
|
48
|
+
"lucide-react": "^1.55.0",
|
|
49
|
+
"react": "^19.3.0",
|
|
50
|
+
"react-dom": "^19.3.0",
|
|
51
|
+
"react-markdown": "^10.1.0",
|
|
44
52
|
"typescript": "^5.7.0",
|
|
45
53
|
"typescript-eslint": "^8.67.0",
|
|
46
54
|
"vitest": "^3.0.0",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Alignment packs use local viewers
|
|
2
|
+
|
|
3
|
+
Alignment packs must not depend on a remote viewer or remote script. ACStack can open a generated pack in a local browser, including through a localhost server.
|
|
4
|
+
|
|
5
|
+
## Considered options
|
|
6
|
+
|
|
7
|
+
A pinned remote viewer keeps generated files smaller. It also makes review depend on network access and trust in a hosted script.
|
|
8
|
+
|
|
9
|
+
## Consequences
|
|
10
|
+
|
|
11
|
+
ACStack must inline or vendor the viewer code it needs. A Herdr-style terminal view can follow later if a clean graph viewer exists.
|
package/docs/adr/index.md
CHANGED
|
@@ -15,3 +15,4 @@
|
|
|
15
15
|
- [0015](0015-a-node-id-links-to-its-issue-through-an-anchor.md) – A node id links to its issue through an anchor
|
|
16
16
|
- [0016](0016-the-map-root-carries-no-status-of-its-own.md) – The map root carries no status of its own
|
|
17
17
|
- [0017](0017-call-impeccable-copy-only-its-questions.md) – Call impeccable's command line, and copy only its question sets
|
|
18
|
+
- [0018](0018-alignment-packs-use-local-viewers.md) – Alignment packs use local viewers
|
package/docs/workflows.md
CHANGED
|
@@ -121,7 +121,7 @@ Nodes live in a tracker. That is the storage layer, and you can swap it.
|
|
|
121
121
|
|
|
122
122
|
- `/acstack:implement` claims `afk` work nodes from the frontier when a map exists
|
|
123
123
|
- It treats the request itself as the work item when none does
|
|
124
|
-
- Either way, parallel
|
|
124
|
+
- Either way, parallel read-only codebase-search subagents run over the relevant code before anyone writes anything
|
|
125
125
|
- The command resolves paths at claim time
|
|
126
126
|
- A node describes behaviour
|
|
127
127
|
- It can sit unstarted for weeks
|
package/orchestrator/AGENTS.md
CHANGED
|
@@ -55,7 +55,7 @@ ACStack runs on Claude Code, Codex, and pi. The skills name each capability once
|
|
|
55
55
|
- **Launch a subagent** – start a child agent with its own context, by its ACStack name (`test-writer`, `task-executor`, `task-checker`, `frontend-verifier`)
|
|
56
56
|
- Claude Code: the Agent tool, with `subagent_type` set to that name
|
|
57
57
|
- pi: the `subagent` tool from `pi-subagents`
|
|
58
|
-
-
|
|
58
|
+
- **Read-only codebase-search subagent** – Claude Code's `Explore`, pi's `scout`
|
|
59
59
|
- `debugger` names a debugging agent
|
|
60
60
|
- On a host without a matching built-in agent, launch a general subagent with that brief
|
|
61
61
|
- **Agent team** – parallel full sessions, each owning one scope and launching its own subagents
|
|
@@ -502,7 +502,7 @@ Launch each agent by the name below (see Host tools for how your host takes it).
|
|
|
502
502
|
| Implement task | `task-executor` | CANNOT modify tests |
|
|
503
503
|
| Verify implementation | `task-checker` | Mock skepticism, full regression, TDD isolation |
|
|
504
504
|
| Verify frontend UI | `frontend-verifier` | Real browser, screenshots, non-negotiable |
|
|
505
|
-
| Find/locate something | `Explore`
|
|
505
|
+
| Find/locate something | `Explore` / `scout` | Read-only codebase search; `scout` on pi |
|
|
506
506
|
| Debug/investigate | `debugger` | Built-in debugging agent |
|
|
507
507
|
|
|
508
508
|
---
|
package/package.json
CHANGED
|
@@ -41,7 +41,7 @@ Your job is to:
|
|
|
41
41
|
|
|
42
42
|
## Phase 1: independent exploration (passes 1-3)
|
|
43
43
|
|
|
44
|
-
Launch **3 parallel
|
|
44
|
+
Launch **3 parallel read-only codebase-search subagents** at once. Use `Explore` on Claude Code and `scout` on pi. Each gets a different exploration strategy:
|
|
45
45
|
|
|
46
46
|
### Pass 1 – entry points strategy
|
|
47
47
|
|
|
@@ -90,7 +90,7 @@ Launch a single subagent to merge the 3 independent drafts per domain. It resolv
|
|
|
90
90
|
|
|
91
91
|
## Phase 3: validation (passes 5-7)
|
|
92
92
|
|
|
93
|
-
Launch 3 parallel
|
|
93
|
+
Launch 3 parallel read-only codebase-search subagents to validate ALL domains independently. Each checks that FRs match actual code behavior.
|
|
94
94
|
|
|
95
95
|
## Phase 4: correction merge (pass 8)
|
|
96
96
|
|
package/skills/grilling/SKILL.md
CHANGED
|
@@ -29,9 +29,11 @@ session.
|
|
|
29
29
|
nothing else. Never ask a question whose answer depends on one still open.
|
|
30
30
|
|
|
31
31
|
2. **Facts are your job, never the user's.** Skip a question that an
|
|
32
|
-
environment fact would answer.
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
environment fact would answer.
|
|
33
|
+
|
|
34
|
+
Dispatch parallel read-only codebase-search subagents, one per distinct
|
|
35
|
+
place to look, not a fixed count. Use `Explore` on Claude Code and `scout`
|
|
36
|
+
on pi. Fold what they find into the round.
|
|
35
37
|
|
|
36
38
|
3. **Run it before you ask it.** Check whether running something could answer
|
|
37
39
|
the question – behaviour, timing, output, or performance. If it could,
|
|
@@ -106,8 +108,8 @@ the tracker's `update` and `create` operations:
|
|
|
106
108
|
Write the answer per the `writing` skill.
|
|
107
109
|
|
|
108
110
|
2. Create a node for each new question the answer surfaced, with `answers`
|
|
109
|
-
naming the node that surfaced it.
|
|
110
|
-
|
|
111
|
+
naming the node that surfaced it. Mark precise questions `open`; mark the
|
|
112
|
+
rest `fog`.
|
|
111
113
|
|
|
112
114
|
3. Invoke the `record-context` skill for each resolution – it decides whether
|
|
113
115
|
the decision earns an ADR, a glossary term, both, or neither.
|
|
@@ -98,9 +98,11 @@ Claim each node as you start it:
|
|
|
98
98
|
|
|
99
99
|
Nodes describe behaviour, not paths. **Resolve paths at claim time**.
|
|
100
100
|
|
|
101
|
-
Before any code change, dispatch parallel
|
|
102
|
-
relevant code. Use
|
|
103
|
-
|
|
101
|
+
Before any code change, dispatch parallel read-only codebase-search subagents
|
|
102
|
+
over the relevant code. Use `Explore` on Claude Code and `scout` on pi.
|
|
103
|
+
|
|
104
|
+
Use as many as there are distinct places to look, not a fixed count. Act on
|
|
105
|
+
what they find.
|
|
104
106
|
|
|
105
107
|
### 5. Execute within the claim
|
|
106
108
|
|
|
@@ -219,8 +221,9 @@ diff.
|
|
|
219
221
|
- **The tracker is the progress record** – claim on start, resolve on pass,
|
|
220
222
|
release on stall. No checkbox files, no phase fields.
|
|
221
223
|
|
|
222
|
-
- **Explore before writing** – parallel
|
|
223
|
-
code, sized to the node, before any edit.
|
|
224
|
+
- **Explore before writing** – parallel read-only codebase-search subagents
|
|
225
|
+
over the relevant code, sized to the node, before any edit. Use `Explore` on
|
|
226
|
+
Claude Code and `scout` on pi.
|
|
224
227
|
|
|
225
228
|
- **Resume is a query** – picking up where you left off means asking the
|
|
226
229
|
tracker what is workable now, not reconstructing history. A fresh session
|
package/skills/map/SKILL.md
CHANGED
|
@@ -94,7 +94,7 @@ operation. First the root:
|
|
|
94
94
|
```bash
|
|
95
95
|
# files backend – github.md has the equivalent
|
|
96
96
|
~/.claude/acstack/bin/acstack node create --map <name> --title "<destination>" \
|
|
97
|
-
--kind destination --label "<at most four words>" \
|
|
97
|
+
--kind destination --label "<at most four words>" --summary "<one sentence>" \
|
|
98
98
|
--body "<the destination, as settled>"
|
|
99
99
|
```
|
|
100
100
|
|
|
@@ -111,9 +111,9 @@ operation. First the root:
|
|
|
111
111
|
- On GitHub, every node body opens with a header line that encodes its edges.
|
|
112
112
|
`trackers/github.md` holds the format. The files backend writes none.
|
|
113
113
|
|
|
114
|
-
- Every node carries a `kind` and
|
|
115
|
-
|
|
116
|
-
caps, and the
|
|
114
|
+
- Every node carries a required `kind` and `label`, its short diagram name.
|
|
115
|
+
Work nodes and the destination add a one-sentence business `--summary`.
|
|
116
|
+
`trackers/files.md` holds the kinds, the caps, and the CLI's contract.
|
|
117
117
|
|
|
118
118
|
- Every node body carries a diagram, two at most. A childless `notes` node is
|
|
119
119
|
the one exception.
|
|
@@ -182,8 +182,8 @@ the list, marked `skip: <reason>`.
|
|
|
182
182
|
- `hitl` nodes: run grilling rounds over them. A round is the whole hitl
|
|
183
183
|
frontier.
|
|
184
184
|
- `afk` nodes: claim and run without the user. Unlimited, and in parallel
|
|
185
|
-
when independent. Research goes to
|
|
186
|
-
|
|
185
|
+
when independent. Research goes to read-only codebase-search subagents:
|
|
186
|
+
`Explore` on Claude Code and `scout` on pi.
|
|
187
187
|
|
|
188
188
|
Implementation work follows `/acstack:implement`'s procedure – it owns
|
|
189
189
|
the claim-execute-resolve flow, the explorer dispatch, and the TDD
|
|
@@ -16,15 +16,18 @@ To enumerate a project's maps: `ls acstack/maps/`.
|
|
|
16
16
|
|
|
17
17
|
| Operation | Command |
|
|
18
18
|
| --------- | ------- |
|
|
19
|
-
| create | `acstack node create --map <name> --title <t> --kind <k> --label <l> [--status] [--mode] [--answers <id>] [--blocked-by <ids>] [--pinned] [--body <md>] [--body-file <path>]` |
|
|
19
|
+
| create | `acstack node create --map <name> --title <t> --kind <k> --label <l> [--summary <s>] [--status] [--mode] [--answers <id>] [--blocked-by <ids>] [--pinned] [--body <md>] [--body-file <path>]` |
|
|
20
20
|
| read | `acstack node read <id> --map <name> [--json] [--visuals]` |
|
|
21
|
-
| update | `acstack node update <id> --map <name> [--title] [--status] [--mode] [--kind] [--label] [--answers] [--blocked-by] [--pinned true\|false] [--body] [--body-file] [--append-body]` |
|
|
21
|
+
| update | `acstack node update <id> --map <name> [--title] [--status] [--mode] [--kind] [--label] [--summary] [--answers] [--blocked-by] [--pinned true\|false] [--body] [--body-file] [--append-body]` |
|
|
22
22
|
| list | `acstack node list --map <name> [--status <s>] [--json]` |
|
|
23
23
|
|
|
24
24
|
`create` rejects a node that omits `--kind` or `--label`. `--kind` takes one of
|
|
25
25
|
`destination`, `notes`, `decision`, `research`, or `work`. `--label` takes the
|
|
26
26
|
node's short name for a diagram, at most four words and thirty characters.
|
|
27
27
|
|
|
28
|
+
`--summary` is optional: one plain sentence, on one line, for a business
|
|
29
|
+
reader. `create` refuses a blank one, and on `update` an empty string clears it.
|
|
30
|
+
|
|
28
31
|
## No body header
|
|
29
32
|
|
|
30
33
|
The GitHub backend opens every node body with a header line, because an issue
|
|
@@ -73,7 +73,8 @@ If no meaningful code changes exist (only docs, config, assets), report "No code
|
|
|
73
73
|
|
|
74
74
|
## Step 2: DISCOVER – Learn project conventions (parallel)
|
|
75
75
|
|
|
76
|
-
Launch **3 parallel
|
|
76
|
+
Launch **3 parallel read-only codebase-search subagents** to build a dynamic understanding of the project's current conventions.
|
|
77
|
+
Use `Explore` on Claude Code and `scout` on pi.
|
|
77
78
|
Do NOT hardcode conventions – discover them fresh each time.
|
|
78
79
|
|
|
79
80
|
**Subagent A – Living Specs & Architecture:**
|
|
@@ -177,7 +178,8 @@ Add each finding to the review as `SHOULD | PROSE`, at the `file:line` it names.
|
|
|
177
178
|
|
|
178
179
|
## Step 4: ADJACENT – Check surrounding code for rot
|
|
179
180
|
|
|
180
|
-
For each file with findings from Step 3, launch
|
|
181
|
+
For each file with findings from Step 3, launch a **read-only codebase-search subagent**.
|
|
182
|
+
Use up to 3 subagents in parallel.
|
|
181
183
|
Each subagent examines the rest of that file and its immediate imports for the same categories of issue.
|
|
182
184
|
|
|
183
185
|
```
|
|
@@ -39,7 +39,7 @@ If the user provided an error message or stack trace, note the key details (file
|
|
|
39
39
|
|
|
40
40
|
**Do NOT skip this step.** Delegate exploration to subagents:
|
|
41
41
|
|
|
42
|
-
1. **Locate the code**: Launch
|
|
42
|
+
1. **Locate the code**: Launch a read-only codebase-search subagent to find the files involved. Use `Explore` on Claude Code and `scout` on pi. Read only a file you can already name.
|
|
43
43
|
|
|
44
44
|
2. **Read the integration points**: Have the subagent read the broken function's callers and callees, not just the function. Understand:
|
|
45
45
|
- What calls this code? (upstream)
|
|
@@ -50,9 +50,11 @@ frontend and has not turned browser verification on. Turn it on:
|
|
|
50
50
|
read it. Without it, every path through spec sync skips in silence, and the
|
|
51
51
|
living specs never update.
|
|
52
52
|
|
|
53
|
-
Launch
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
Launch a **read-only codebase-search subagent** over `directories.source` to propose domains.
|
|
54
|
+
Use `Explore` on Claude Code and `scout` on pi.
|
|
55
|
+
|
|
56
|
+
Ask it for the top-level functional areas.
|
|
57
|
+
Ask for a kebab-case name, the paths that belong to it, and one line saying what it owns.
|
|
56
58
|
|
|
57
59
|
Guidance for the subagent:
|
|
58
60
|
|