acstack 0.50.0 → 0.50.2

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "acstack",
3
3
  "description": "Agentic coding stack where planning grows only as far as needed: a map of decisions, tasks, checks, and handoffs behind a pluggable tracker.",
4
- "version": "0.50.0",
4
+ "version": "0.50.2",
5
5
  "author": {
6
6
  "name": "ac8318740"
7
7
  },
package/README.md CHANGED
@@ -66,10 +66,10 @@ Then, in your project:
66
66
 
67
67
  ### 1.2. Install on pi
68
68
 
69
- *The same project installs as a [pi](https://pi.dev) package. Subagents come from the `pi-subagents` package.*
69
+ *The same project installs as a [pi](https://pi.dev) package with `@tintinweb/pi-subagents` or `pi-subagents` for delegation.*
70
70
 
71
71
  ```
72
- pi install npm:pi-subagents
72
+ pi install npm:@tintinweb/pi-subagents
73
73
  pi install npm:acstack
74
74
  ```
75
75
 
@@ -91,16 +91,20 @@ Then, in your project, run `/acstack:setup`.
91
91
  - Freshness uses `/acstack:handoff` when a fresh window or independent read helps more
92
92
  - With no thresholds set, the first nudge comes at 200k tokens or half the window, whichever is lower
93
93
  - The urgent nudge comes at 500k tokens or 80% of the window, whichever is lower
94
- - `pi-subagents` finds the four agents through the `pi.subagents` field in `package.json`
95
- - The agents use your `pi-subagents` default model
96
- - ACStack warns at session start when `pi-subagents` is missing
97
- - Allow delegation in `~/.pi/agent/AGENTS.md` – `pi-subagents` only delegates when your request or your instructions allow it:
94
+ - ACStack includes the question-status bridge automatically
95
+ - With `@juicesharp/rpiv-ask-user-question` and Herdr's Pi integration installed, Herdr shows blocked while Pi waits for an answer
96
+ - Existing setup-installed bridges can stay installed without counting the same wait twice
97
+ - Both subagent packages find the four agents through the `pi.subagents` field in `package.json`
98
+ - `@tintinweb/pi-subagents` exposes `Agent`; `pi-subagents` exposes `subagent`
99
+ - The agents use your subagent package's default model
100
+ - ACStack warns at session start when pi lists neither tool
101
+ - Allow delegation in `~/.pi/agent/AGENTS.md`:
98
102
 
99
103
  ```
100
104
  When an ACStack skill or the ACStack orchestrator says to launch a subagent, you may delegate to it.
101
105
  ```
102
106
 
103
- - Set `"toolActivation": "eager"` in `~/.pi/agent/extensions/subagent/config.json` to offer the `subagent` tool from the first turn (restart pi after)
107
+ - For `pi-subagents`, set `"toolActivation": "eager"` in `~/.pi/agent/extensions/subagent/config.json` to offer `subagent` from the first turn (restart pi after)
104
108
  - pi gets the ACStack writing style from the extension by default
105
109
  - Run `/acstack-writing-style default` to use the bundled style again
106
110
  - Run `/acstack-writing-style off` to disable style injection
@@ -1,31 +1,19 @@
1
1
  import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
2
2
 
3
- export default function (pi: ExtensionAPI) {
4
- let pending: { active: boolean; native: boolean } | undefined;
5
- let forwarding = false;
6
-
7
- pi.events.on("herdr:blocked", (event: unknown) => {
8
- if (!forwarding && pending && (event as { active?: unknown } | null)?.active === pending.active) {
9
- pending.native = true;
10
- pending = undefined;
11
- }
12
- });
3
+ const TAKEOVER = "acstack:question-blocked:takeover";
13
4
 
14
- pi.events.on("rpiv:ask-user:blocked", (event: unknown) => {
15
- const active = (event as { active?: unknown } | null)?.active;
16
- if (typeof active !== "boolean") return;
17
- const transition = { active, native: false };
18
- pending = transition;
19
- // shortcut: dual producers emit public then herdr synchronously; async pairs need an upstream source ID
20
- queueMicrotask(() => {
21
- if (pending === transition) pending = undefined;
22
- if (transition.native) return;
23
- forwarding = true;
24
- try {
25
- pi.events.emit("herdr:blocked", { active });
26
- } finally {
27
- forwarding = false;
28
- }
5
+ export default function (pi: ExtensionAPI) {
6
+ pi.on("session_start", () => {
7
+ pi.events.emit(TAKEOVER, {});
8
+ // Register after legacy factories so our synchronous relay suppresses their queued copy.
9
+ // shortcut: legacy compatibility excludes recursively emitted public events; remove the legacy copy if needed
10
+ const stopRelay = pi.events.on("rpiv:ask-user:blocked", (event: unknown) => {
11
+ const active = (event as { active?: unknown } | null)?.active;
12
+ if (typeof active === "boolean") pi.events.emit("herdr:blocked", { active });
13
+ });
14
+ const stopTakeover = pi.events.on(TAKEOVER, () => {
15
+ stopRelay();
16
+ stopTakeover();
29
17
  });
30
18
  });
31
19
  }
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack-cli",
3
- "version": "0.50.0",
3
+ "version": "0.50.2",
4
4
  "description": "CLI for the ACStack agentic coding stack",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -365,11 +365,14 @@ What `apply` does:
365
365
  - ACStack uses it because decisions can include markdown, code and artifact previews
366
366
  - It accepts freeform answers and notes, and needs no full-event telemetry environment variable
367
367
  - This setup still keeps pi's install telemetry disabled through `pi.settings.install_telemetry: false`
368
- - Setup installs a managed question bridge under pi's agent directory, honoring `PI_CODING_AGENT_DIR`
368
+ - ACStack's Pi package loads the question bridge automatically, including installations made without terminal-workspace setup
369
+ - Setup also installs a fallback copy under pi's agent directory, honoring `PI_CODING_AGENT_DIR`
370
+ - The packaged bridge and fallback copy count each wait once when both load
369
371
  - The bridge translates `rpiv:ask-user:blocked` into `herdr:blocked`, so herdr shows the question's input wait
370
372
  - Answer, cancellation, and error completion release the question's blocker while other herdr blockers stay active
371
- - A producer that also emits the matching herdr event synchronously contributes only one blocker
372
- - Events carry no source ID, so the bridge treats a matching synchronous herdr event as the producer's own
373
+ - Anonymous native Herdr events remain independent from question events, including simultaneous waits
374
+ - A producer emitting both event types contributes two balanced blockers, which clear when both sources finish
375
+ - Older fallback copies work unless another extension recursively emits public question events; remove the older copy in that case
373
376
  - Reapply refreshes the owned bridge, but preserves a pre-existing file at the same path
374
377
  - `pi.question_tool: false`, `disable pi`, and `uninstall` remove only the owned bridge and leave user workarounds alone
375
378
  - Set `pi.question_tool: false` to leave the package out, or remove it later if this setup installed it
@@ -40,8 +40,8 @@ ACStack runs on Claude Code, Codex, and pi. The skills name each capability once
40
40
 
41
41
  - **Launch a subagent** – start a child agent with its own context, by its ACStack name (`test-writer`, `task-executor`, `task-checker`, `frontend-verifier`)
42
42
  - Claude Code: the Agent tool, with `subagent_type` set to that name
43
- - pi: the `subagent` tool from `pi-subagents`
44
- - **Read-only codebase-search subagent** – Claude Code's `Explore`, pi's `scout`
43
+ - pi: `Agent` from `@tintinweb/pi-subagents` (`subagent_type`), or `subagent` from `pi-subagents` (`agent`)
44
+ - **Read-only codebase-search subagent** – `Explore` on Claude Code and pi's `Agent`, or `scout` on pi's `subagent`
45
45
  - `debugger` names a debugging agent
46
46
  - On a host without a matching built-in agent, launch a general subagent with that brief
47
47
  - **Agent team** – parallel full sessions, each owning one scope and launching its own subagents
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "acstack",
3
- "version": "0.50.0",
3
+ "version": "0.50.2",
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",
@@ -38,7 +38,8 @@
38
38
  ],
39
39
  "pi": {
40
40
  "extensions": [
41
- "./pi/extension.ts"
41
+ "./pi/extension.ts",
42
+ "./assets/terminal-workspace/pi/acstack-question-blocked.ts"
42
43
  ],
43
44
  "subagents": {
44
45
  "agents": [
package/pi/extension.ts CHANGED
@@ -603,11 +603,11 @@ export default function acstack(pi: ExtensionAPI): void {
603
603
  pi.on("session_start", async (event, ctx) => {
604
604
  linkClis(ctx);
605
605
 
606
- if (!warnedSubagents && !pi.getAllTools().some((tool) => tool.name === "subagent")) {
606
+ if (!warnedSubagents && !pi.getAllTools().some((tool) => tool.name === "subagent" || tool.name === "Agent")) {
607
607
  warnedSubagents = true;
608
608
  report(
609
609
  ctx,
610
- "acstack: pi-subagents is not loaded, so the test-writer, task-executor, task-checker and frontend-verifier agents cannot run. Install it with `pi install npm:pi-subagents`.",
610
+ "acstack: no supported subagent tool is loaded (Agent or subagent), so the test-writer, task-executor, task-checker, and frontend-verifier agents cannot run. Install `npm:@tintinweb/pi-subagents` or `npm:pi-subagents` with `pi install`.",
611
611
  "warning",
612
612
  );
613
613
  }