@webpresso/codex-plugin 3.3.2 → 3.3.4

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,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-kit",
3
- "version": "3.3.2",
3
+ "version": "3.3.4",
4
4
  "description": "Webpresso agent-kit: blueprints, skills, hooks, and MCP server",
5
5
  "author": {
6
6
  "name": "Webpresso",
package/.mcp.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "webpresso": {
3
- "command": "${PLUGIN_ROOT}/bin/wp",
3
+ "command": "wp",
4
4
  "args": ["mcp"],
5
5
  "env": {
6
6
  "WP_SKIP_UPDATE_CHECK": "1"
package/bin/wp CHANGED
@@ -102,12 +102,48 @@ function currentAgentKitPackageRoot() {
102
102
  return null;
103
103
  }
104
104
 
105
+ // Bun's global bin dir is stable ($BUN_INSTALL/bin, else ~/.bun/bin) even though
106
+ // its global PACKAGE dir is not: that follows $BUN_INSTALL, bunfig
107
+ // install.globalDir, and version defaults, and can land at $HOME/node_modules.
108
+ // So discover through the bin symlink bun itself writes rather than guessing a
109
+ // package layout.
110
+ function bunGlobalBinDir() {
111
+ const home = process.env.HOME || homedir();
112
+ return join(process.env.BUN_INSTALL || join(home, ".bun"), "bin");
113
+ }
114
+
115
+ function bunGlobalWpCandidates() {
116
+ const binDir = bunGlobalBinDir();
117
+ return pathWpBinNames.map((name) => join(binDir, name));
118
+ }
119
+
120
+ /**
121
+ * The package root reached through bun's own global bin link, or null. Trusted
122
+ * for the same reason the hardcoded anchors are: bun wrote the link into the
123
+ * user's own bun install, and the target must still be a real agent-kit package
124
+ * root. It does NOT widen trust to arbitrary PATH entries.
125
+ */
126
+ function bunGlobalInstallPackageRoot() {
127
+ for (const candidate of bunGlobalWpCandidates()) {
128
+ try {
129
+ const resolved = realpathSync(candidate);
130
+ const packageRoot = dirname(dirname(resolved));
131
+ if (resolved !== join(packageRoot, "bin", "wp")) continue;
132
+ if (isUsableAgentKitPackageRoot(packageRoot)) return packageRoot;
133
+ } catch {
134
+ // Not installed through bun; fall through to the other anchors.
135
+ }
136
+ }
137
+ return null;
138
+ }
139
+
105
140
  function trustedHomeInstallPackageRoots() {
106
141
  const home = process.env.HOME || homedir();
107
142
  return [
108
143
  join(home, ".claude", "plugins", "cache", "webpresso", "agent-kit"),
109
144
  join(home, ".bun", "install", "global", "node_modules", "@webpresso", "agent-kit"),
110
- ];
145
+ bunGlobalInstallPackageRoot(),
146
+ ].filter(Boolean);
111
147
  }
112
148
 
113
149
  function isTrustedAgentKitPackageRoot(packageRoot) {
@@ -141,6 +177,10 @@ function resolveAgentKitWp() {
141
177
  const candidates = [
142
178
  join(adapterRoot, "..", "..", "bin", "wp"),
143
179
  resolveAgentKitPackageWp(),
180
+ // Before PATH: a bun global install links its bin here even when
181
+ // <bunRoot>/bin is not on PATH, which is the common case for MCP servers
182
+ // launched from a host with a sanitized environment.
183
+ ...bunGlobalWpCandidates(),
144
184
  ...pathWpCandidates(),
145
185
  ].filter(Boolean);
146
186
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webpresso/codex-plugin",
3
- "version": "3.3.2",
3
+ "version": "3.3.4",
4
4
  "private": false,
5
5
  "description": "Codex plugin adapter for Webpresso agent-kit skills, hooks, and MCP runtime.",
6
6
  "homepage": "https://github.com/webpresso/agent-kit#readme",
@@ -2,14 +2,14 @@
2
2
  "schemaVersion": 1,
3
3
  "host": "codex",
4
4
  "packageName": "@webpresso/codex-plugin",
5
- "packageVersion": "3.3.2",
5
+ "packageVersion": "3.3.4",
6
6
  "runtimeDirs": [".codex/skills", ".agents/skills"],
7
7
  "skills": {
8
8
  "ai-deslop": {
9
9
  "digest": "sha256:c1da1003009073dd3923454947e1141efc2e7df5ad8d725a511ed5cff03bfb5c"
10
10
  },
11
11
  "autopilot": {
12
- "digest": "sha256:1d2f1ff0902f283c273395e474d9b7841b206b8635457b3c238e8e1df149b6ef"
12
+ "digest": "sha256:9205e5af016d0c4a665b0a64716c0c0a808044b37bbb61e939f74b55a7ca2d17"
13
13
  },
14
14
  "autoresearch": {
15
15
  "digest": "sha256:b4d51cd53beb4a3271827172dfbd0b1d27bd58761ca07a35d49a5d6324b87fdf"
@@ -87,10 +87,10 @@
87
87
  "digest": "sha256:bed3684a850651534f315d355cdeae50d951c429817df0f105cccdb7f4e1561b"
88
88
  },
89
89
  "ultragoal": {
90
- "digest": "sha256:7ed3e728027a9d1047a1dd030f88f23a6120450bf336fa73b1c9037857ab56ee"
90
+ "digest": "sha256:1eddfd05c48fb2abf26e5796e5f659a1e8ae3de466a847f1ba9ca635bf5e1a44"
91
91
  },
92
92
  "verify": {
93
- "digest": "sha256:47c1d75ef5d1d47b94ef48ac91b0fd4bbf6ba1ab32563cfc28518bb75c7798f0"
93
+ "digest": "sha256:bb22b3c997ef3b003e5558c01f0b1e844158a48f1bb5d7169851e5b0b343cd64"
94
94
  }
95
95
  }
96
96
  }
@@ -20,7 +20,7 @@ using `wp_ultragoal_run` / `wp ultragoal run` and the current handoff.
20
20
 
21
21
  ## Outside-voice (required)
22
22
 
23
- After each ultragoal **phase or plan-gate milestone**, run an **OpenCode Go** outside-voice review and pick the model by purpose (plan critique DeepSeek Pro; coding quality Kimi Code first; cheap recheck DeepSeek Flash). Resolve IDs from live `opencode models opencode-go`. Lifecycle authority only via converged `wp review gate` — never self-approve. Full protocol: the `ultragoal` skill. Respect `review_budget` (default one sequential path; no multi-host stampede).
23
+ After each ultragoal **phase or plan-gate milestone**, run an **OpenCode Go** outside-voice review and pick the model by purpose. The purposefamily ordering lives in one place the committed reviewer policy rendered into the `opencode-go` skill — so follow that skill and do not restate the ordering here. Resolve IDs from live `opencode models opencode-go`. Lifecycle authority only via converged `wp review gate` — never self-approve. Full protocol: the `ultragoal` skill. Respect `review_budget` (default owned by `workflow-skills-routing.md`): one sequential path, no multi-host stampede.
24
24
 
25
25
  ## Vague gate
26
26
 
@@ -34,8 +34,9 @@ A brief is anchored when it includes a file path, symbol, issue number, test nam
34
34
  A leading `force:` is the only explicit bypass; strip it before creating the goal and
35
35
  record the bypass in the blueprint.
36
36
 
37
- Default budgets if the user omits them: `concurrency=4`, `fix_budget=1`,
38
- `review_budget=1`, no `/loop`. See `ultragoal` skill.
37
+ Default budgets if the user omits them: `concurrency=4`, `fix_budget=1`, no
38
+ `/loop`; `review_budget` per `workflow-skills-routing.md`. See `ultragoal`
39
+ skill.
39
40
 
40
41
  ## Tooling map
41
42
 
@@ -21,12 +21,12 @@ multi-agent swarms.
21
21
 
22
22
  ## Default budgets (override only when the user sets them)
23
23
 
24
- | Budget | Default | Meaning |
25
- | --------------- | --------- | ---------------------------------------------------------- |
26
- | `concurrency` | 4 (max 8) | Parallel ready tasks / implementer lanes |
27
- | `fix_budget` | 1 | Pre-existing issues fixable via `/fix` this phase |
28
- | `review_budget` | 1 | Outside-voice reviewers for merge-ready (0 for local work) |
29
- | `loop` | off | Do not run `/loop` or unbounded stop-hooks |
24
+ | Budget | Default | Meaning |
25
+ | --------------- | -------------------------------- | -------------------------------------------------- |
26
+ | `concurrency` | 4 (max 8) | Parallel ready tasks / implementer lanes |
27
+ | `fix_budget` | 1 | Pre-existing issues fixable via `/fix` this phase |
28
+ | `review_budget` | see `workflow-skills-routing.md` | Outside-voice reviewer paths, local vs merge-ready |
29
+ | `loop` | off | Do not run `/loop` or unbounded stop-hooks |
30
30
 
31
31
  Reject unbudgeted sleep-mode briefs (“complete all”, “full autopilot”, “go to sleep”)
32
32
  unless they name a blueprint/slug, budgets, and a stop condition. Route vague briefs
@@ -66,7 +66,8 @@ Fallback to `wp …` CLI only when the matching MCP tool is unavailable. Prefer
66
66
  6. **Opportunistic `/fix`:** at most `fix_budget` pre-existing issues per phase, each with
67
67
  named invariant + failing proof. Excess → handoff backlog (do not expand epic).
68
68
  7. **Validate / land:** local proof with `wp_qa` / targeted tools; outside review only when
69
- merge-ready and within `review_budget` (default **exactly 1** sequential outside voice).
69
+ merge-ready and within `review_budget` **exactly one sequential** outside voice unless
70
+ the user sets N (the default value lives in `workflow-skills-routing.md`).
70
71
  Prefer `wp review gate` for lifecycle authority. Use `wp_pr_*` for PR babysit — no
71
72
  multi-sleep poll loops; no parallel multi-reviewer stampede.
72
73
  8. Stop on `complete`, `cancelled`, blocked guard exhaustion, or `WP_ULTRAGOAL_DISABLE=1`.
@@ -87,7 +88,7 @@ primary checkout.
87
88
 
88
89
  Autopilot and agent-driven ultragoal loops **must** request an **OpenCode Go** outside-voice review after each **goal/phase milestone**, and must pick the model by purpose. Direct `wp review run` output is advisory only. Lifecycle authority that can satisfy promotion/completion gates comes only from a converged **`wp review gate`** (content-addressed ledger + bound artifact).
89
90
 
90
- Count each milestone review against `review_budget` for merge-ready claims: **exactly one sequential** reviewer path unless the user sets N. Prefer purpose-matched OpenCode Go first; do not fan out multi-host review swarms.
91
+ Count each milestone review against `review_budget` for merge-ready claims: **exactly one sequential** reviewer path unless the user sets N; the default value is owned by `workflow-skills-routing.md`. Prefer purpose-matched OpenCode Go first; do not fan out multi-host review swarms.
91
92
 
92
93
  ### Milestones that require a review
93
94
 
@@ -147,7 +148,8 @@ Use `--purpose plan` for plan-phase promotion and `--purpose delivery` for imple
147
148
  - If no PR-bound green CI is available, fall back to local **`wp_qa`**.
148
149
  - Open a PR early so CI can satisfy QA. Do **not** raise timeouts.
149
150
  - **Land** still requires a **MERGED** PR with green required checks bound to the projected
150
- source snapshot. Use `/verify --merge-ready` (review_budget=1), not default local verify.
151
+ source snapshot. Use `/verify --merge-ready` (merge-ready `review_budget`, per
152
+ `workflow-skills-routing.md`), not default local verify.
151
153
 
152
154
  ## Snapshot / dirty worktree
153
155
 
@@ -35,18 +35,18 @@ the preferred skill (`claude` / `codex` / `grok` / one OpenCode Go), then stops.
35
35
 
36
36
  ## Tooling map
37
37
 
38
- | Gate | Prefer |
39
- | ------------------------- | --------------------------------------------------------------- |
40
- | Lint / types / tests / QA | `wp_lint`, `wp_typecheck`, `wp_test`, `wp_qa` |
41
- | Format | `wp_format` |
42
- | Audits | `wp_audit`, `wp_audits` |
43
- | Blueprint | blueprint MCP tools + `wp audit blueprint-lifecycle` |
44
- | PR / CI wait | `wp_pr_status`, `wp_pr_wait` (not multi-sleep loops) |
45
- | Release | `wp_release_readiness` when shipping |
46
- | Large output | `wp_session_execute` / `batch_execute` / `execute_file` |
47
- | Continuity | `wp_session_capture` for verify summary; avoid paste-back walls |
48
- | E2E / act | `wp_e2e`, `wp_ci_act` when the change requires them |
49
- | Outside authority | `wp review gate` (not raw multi-agent review swarms) |
38
+ | Gate | Prefer |
39
+ | ------------------------- | --------------------------------------------------------------------------------------- |
40
+ | Lint / types / tests / QA | `wp_lint`, `wp_typecheck`, `wp_test`, `wp_qa` |
41
+ | Format | `wp_format` |
42
+ | Audits | `wp_audit`, `wp_audits` |
43
+ | Blueprint | blueprint MCP tools + `wp audit blueprint-lifecycle` |
44
+ | PR / CI wait | `wp_pr_status`, `wp_pr_wait` (not multi-sleep loops) |
45
+ | Release | `wp_release_progress` for live Release phases; `wp_release_readiness` for package gates |
46
+ | Large output | `wp_session_execute` / `batch_execute` / `execute_file` |
47
+ | Continuity | `wp_session_capture` for verify summary; avoid paste-back walls |
48
+ | E2E / act | `wp_e2e`, `wp_ci_act` when the change requires them |
49
+ | Outside authority | `wp review gate` (not raw multi-agent review swarms) |
50
50
 
51
51
  ## Iron law — evidence before claims
52
52