allye-pi 2.13.0 → 2.14.0
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 +9 -9
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -77,6 +77,10 @@ Pair this install with your Allye account and every new, cleared or compacted se
|
|
|
77
77
|
|
|
78
78
|
When paired, hooks send Allye the state of your sessions (started, working, waiting, idle, ended), the tool names in use (within about 2 seconds of the call), subagent ids and types with their outcome, the spec and task keys the session is bound to and, on by default, short texts the agent wrote, each at most 140 characters: the description of a subagent dispatch, an activity phrase for each tool call (the `description` of a Bash or Agent call, else a fixed phrase such as "Read tree.ts", "Run vitest" or "Search the code" that holds at most one file name or Allye key and nothing else of the call), the `summary:` line of a crew report, and a session label (at most 60 characters: the `ALLYE_SESSION_LABEL` variable or the title Claude Code gives the session) with the name of the working folder. A crew report is also read from the subagent transcript when the final message has none (only its whole-line fields leave, never the transcript). Small numbers and keywords from the report (attempt, next step, gate, checks, finding counts, phase, ready/approved) and the pull request number from the `- PR: #N` line of the mission log go with them. Paths, URLs, emails, IP addresses, secrets and backticked code are stripped on your machine on a best-effort basis, with no guarantee, and Allye scrubs them again (the Allye scrub is the authoritative one); `/allye:hooks live activity off` turns the texts off (so does Detailed Live in the Allye app). Only you can see these texts in Allye (a teammate's token receives none). Allye keeps them for 30 days with the run: the three texts, the session labels, up to 50 activity phrases per step and the working folder name; turning Detailed Live off deletes them. A small background watcher (one per session, no network use while Claude Code runs) ends the run on Allye when Claude Code is closed without a normal exit. Through the Allye MCP, `task_start`, `task_submit`, `spec_context` and `spec_get` (and a `/bridge` launch with a key) tie a session to a spec or task. The subagent type, tool names, the texts and `allye:<action>` / spec / task keys DO leave your machine; prompts, commands, tool inputs and outputs, file paths, notification messages, assistant messages other than the report's whole-line fields, transcripts, branch names and credentials never do. The name of the working folder (one path component, never the path) leaves only with a session label, and not when its name looks secret. Update the plugin only after the Allye API that accepts the new fields is live. Control it with `/allye:hooks live off|on|status`; events, fields, the watcher and local files are in [docs/live-reporting.md](docs/live-reporting.md).
|
|
79
79
|
|
|
80
|
+
#### Answering from Allye (Claude Code only, optional)
|
|
81
|
+
|
|
82
|
+
With Live reporting on, a blocking `PermissionRequest` hook (`hooks/live-answer.sh`, timeout 120 s) lets you answer a question (`AskUserQuestion`) or allow once / deny a normal-risk permission from Allye while the dialog is open. The terminal always keeps the last word (the dialog stays usable while the hook waits) and on any doubt the hook exits with no output; nothing is ever "always allow", and the tool input changes only by adding your question answers. **High risk** (`Bash`, protected paths such as dotfiles, `scripts/`, manifests, lockfiles and CI files, paths outside `CLAUDE_PROJECT_DIR` or all path tools when it is unset, any Allye MCP write, other MCP or unknown tools) can only be denied from Allye or answered in the terminal; a repository `.mcp.json` server named `plugin_allye_allye` cannot be told from the plugin's by name (known limit; the API keeps any higher risk it computes). **What leaves the machine**, per request: the session hash, the kind, a hash of tool name and input (SHA-256 of `jq -S -c` over `[tool_name, tool_input]`; for a question, over its `questions`), the risk class, the tool name (other MCP servers as `mcp`), the cleaned activity phrase and, for a question, its cleaned texts (neither is sent, and no question is opened, when Detailed Live is off) and the reporter's last `seq`; the reporter also sends the call id `tu` and, when a call ends, `cmd_end` `{tu, h, seq, at, ok}`. Never the raw command, path, prompt or tool input. **The wait** is up to 110 s (hook timeout 120 s); it stops at once when Allye reports the request terminal, expired or not answerable, cancels the request on exit while pending, and after an answer in the terminal keeps waiting until Allye ends the request or the 110 s pass. `/allye:hooks live off` (also unpaired, no credential or an unusable origin) stops the events and `cmd_end`, and the hook exits at once with no network call; the origin comes only from the pairing file; after a failed open it pauses 60 s (10 minutes after a 404 or 405). **Spike verdict** `VERDICT: permission=go question=go` (questions use the `PermissionRequest` decision `updatedInput.answers`; a `PreToolUse` hook shows no dialog): [docs/spikes/live-return-channel.md](docs/spikes/live-return-channel.md); check it with `node --test test/test-spike-doc.mjs` (or `npm run test:hooks-config`); a real rerun needs an interactive Claude Code session. **Known limits:** decision texts get NFC only when `uconv` is installed, length caps count code points, the hook tests use GNU tools and there is no CI for them yet; update the plugin only after the Allye API that accepts the new fields is live (releases happen on merge to `main`, API first). Details in [docs/live-reporting.md](docs/live-reporting.md).
|
|
83
|
+
|
|
80
84
|
### Codex, OpenCode
|
|
81
85
|
|
|
82
86
|
Paste into the agent. The install and update guides install one pinned release: the latest GitHub release unless you name a version. They check that it exists, never download from a branch, and keep a timestamped backup of any config they rewrite (`opencode.json`, `~/.codex/AGENTS.md`, `~/.codex/skills/bridge*`) under `~/.allye/backups/<harness>/`.
|
|
@@ -116,17 +120,15 @@ Who can install, where skills go, how edited, deleted and moved copies are handl
|
|
|
116
120
|
## Repository layout
|
|
117
121
|
|
|
118
122
|
```
|
|
119
|
-
bootstrap/allye.md shared bootstrap text (single source)
|
|
123
|
+
bootstrap/allye.md shared bootstrap text (single source; scripts/sync-bootstrap.sh copies it to manifests/codex/AGENTS.md)
|
|
120
124
|
skills/bridge/ the Bridge skill and its references
|
|
121
125
|
skills/bridge-*/ the crew skills (Armorer, Recon, Strategist, Architect, Dispatcher, Pilot, Navigator, Copilot, Medic, Optimizer, Shield, Watcher)
|
|
122
126
|
agents/bridge-*.md native crew subagents (Claude Code; OpenCode registers them from here): load the crew skill under a per-role tool allowlist
|
|
123
|
-
hooks/ Claude Code hooks (bootstrap, pinned preferences, Live reporter) and the script behind /allye:hooks
|
|
127
|
+
hooks/ Claude Code hooks (bootstrap, pinned preferences, Live reporter, blocking answer hook) and the script behind /allye:hooks
|
|
124
128
|
.claude-plugin/, .mcp.json Claude Code plugin and marketplace manifests
|
|
125
129
|
manifests/ Codex copy of the bootstrap (codex/AGENTS.md, synced) and a sample OpenCode config (opencode/)
|
|
126
|
-
packages/allye-opencode
|
|
127
|
-
packages/allye-pi/ Pi/OMP extension (npm: allye-pi, root package.json)
|
|
130
|
+
packages/ allye-opencode (OpenCode plugin) and allye-pi (Pi/OMP extension, root package.json), both on npm
|
|
128
131
|
install.sh, install/ organization skills installer and its tests
|
|
129
|
-
scripts/sync-bootstrap.sh copies the bootstrap to manifests/codex/AGENTS.md
|
|
130
132
|
docs/ per-harness install and update guides, organization skills details
|
|
131
133
|
```
|
|
132
134
|
|
|
@@ -134,13 +136,11 @@ docs/ per-harness install and update guides, organization
|
|
|
134
136
|
|
|
135
137
|
```bash
|
|
136
138
|
npm install
|
|
137
|
-
|
|
138
|
-
npm run typecheck # Pi
|
|
139
|
+
scripts/sync-bootstrap.sh # after editing bootstrap/allye.md
|
|
140
|
+
npm test && npm run typecheck # tests (offline): bootstrap, hooks (npm run test:hooks), crew agents, skills, installer and docs gate, Pi and OpenCode; then the Pi typecheck
|
|
139
141
|
cd packages/allye-opencode && bun install && bun run typecheck && bun run build
|
|
140
142
|
```
|
|
141
143
|
|
|
142
|
-
After editing `bootstrap/allye.md`, run `scripts/sync-bootstrap.sh`.
|
|
143
|
-
|
|
144
144
|
## Releases
|
|
145
145
|
|
|
146
146
|
Releases are automated by semantic-release on every push to `main` (Conventional Commits). It bumps the version in `.claude-plugin/plugin.json`, `.claude-plugin/marketplace.json`, `packages/allye-opencode/package.json`, `package.json` and `package-lock.json`, updates `CHANGELOG.md`, tags and creates the GitHub release. CI then publishes `allye-opencode` and `allye-pi` to npm when their version changed. `./release.sh [major|minor|patch]` is the manual fallback.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "allye-pi",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.14.0",
|
|
4
4
|
"description": "Allye extension for Pi and OMP: the Allye bootstrap, the Bridge skill and the repository-to-project link",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
|
@@ -47,7 +47,8 @@
|
|
|
47
47
|
"test:pi": "node --experimental-strip-types --test packages/allye-pi/src/index.test.ts",
|
|
48
48
|
"test:opencode": "node --experimental-strip-types --test packages/allye-opencode/src/skills-paths.test.ts",
|
|
49
49
|
"test:installer": "bash install/test-validation.sh && bash install/test-installer.sh && npm run test:docs-gate",
|
|
50
|
-
"test:hooks": "
|
|
50
|
+
"test:hooks-config": "node --test --test-concurrency=4 test/test-spike-doc.mjs test/test-hooks-config.mjs",
|
|
51
|
+
"test:hooks": "bash hooks/test-allye-hooks.sh && bash hooks/test-session-preferences.sh && bash hooks/test-live-report.sh && npm run test:hooks-config",
|
|
51
52
|
"test:bootstrap": "bash test/test-bootstrap.sh && bash hooks/test-session-start.sh",
|
|
52
53
|
"test:agents": "node test/test-agents.mjs",
|
|
53
54
|
"test:guides": "node test/test-install-guides.mjs",
|