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/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack-cli",
3
- "version": "0.47.1",
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 explorer subagents run over the relevant code before anyone writes anything
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
@@ -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
- - `Explore` names a read-only codebase-search agent: Claude Code's `Explore`, pi's `scout`
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` | Built-in codebase search |
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack",
3
- "version": "0.47.1",
3
+ "version": "0.48.1",
4
4
  "private": false,
5
5
  "description": "Agentic coding stack with first-class Claude Code and pi support: skills, orchestrator instructions, and verification agents.",
6
6
  "license": "MIT",
@@ -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 `Explore` subagents** at once. Each gets a different exploration strategy:
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 Explore subagents to validate ALL domains independently – each checks that FRs match actual code behavior.
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
 
@@ -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. Dispatch parallel `Explore` subagents, one
33
- per distinct place to look, not a fixed count. Fold what they find into
34
- the round.
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. Questions that can be stated precisely
110
- are `open`; the rest are `fog`.
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 explorer subagents over the
102
- relevant code. Use as many as there are distinct places to look, not a fixed
103
- count. Act on what they find.
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 explorer subagents over the relevant
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
@@ -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 a `label`, both required. A `label` is the
115
- node's short name for a diagram. `trackers/files.md` holds the kinds, the
116
- caps, and the contract the CLI enforces.
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 `Explore` subagents, with the findings
186
- written into the resolution.
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 Explore subagents** to build a dynamic understanding of the project's current conventions.
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 an **Explore subagent** (up to 3 in parallel).
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 an Explore subagent to find the files involved. Read only a file you can already name.
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 an **Explore subagent** over `directories.source` to propose domains. Ask
54
- it for the top-level functional areas. Ask for a kebab-case name, the paths that
55
- belong to it, and one line saying what it owns.
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