allye-pi 2.13.0 → 2.15.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.
Files changed (2) hide show
  1. package/README.md +9 -9
  2. 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/ OpenCode plugin (npm: 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
- npm test # bootstrap, hooks (npm run test:hooks), crew agents, skills, installer and docs gate, Pi and OpenCode tests (offline)
138
- npm run typecheck # Pi extension
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.13.0",
3
+ "version": "2.15.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": "bash hooks/test-allye-hooks.sh && bash hooks/test-session-preferences.sh && bash hooks/test-live-report.sh",
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",