@webpresso/codex-plugin 3.1.7 → 3.1.9
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/.codex-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/autopilot/SKILL.md +39 -0
- package/skills/goal/SKILL.md +27 -0
- package/skills/opencode-go/SKILL.md +45 -35
- package/skills/verify/SKILL.md +4 -4
package/package.json
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: skill
|
|
3
|
+
slug: autopilot
|
|
4
|
+
title: Autopilot
|
|
5
|
+
status: active
|
|
6
|
+
scope: repo
|
|
7
|
+
applies_to: [agents]
|
|
8
|
+
related: [goal, plan-refine, verify, testing-philosophy]
|
|
9
|
+
created: "2026-07-10"
|
|
10
|
+
last_reviewed: "2026-07-10"
|
|
11
|
+
name: autopilot
|
|
12
|
+
description: "Drive a brief through the bounded native goal pipeline."
|
|
13
|
+
argument-hint: "<brief|force: brief>"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Autopilot
|
|
17
|
+
|
|
18
|
+
Drive an approved brief through `plan -> execute -> qa -> validate -> land -> complete` using `wp goal run` and the current handoff.
|
|
19
|
+
|
|
20
|
+
## Vague gate
|
|
21
|
+
|
|
22
|
+
A brief is anchored when it includes a file path, symbol, issue number, test name, or numbered steps. Route any unanchored brief through `plan-refine` before execution. A leading `force:` is the only explicit bypass; strip it before creating the goal and record the bypass in the blueprint.
|
|
23
|
+
|
|
24
|
+
## Pipeline
|
|
25
|
+
|
|
26
|
+
1. Plan: refine blueprints and satisfy provenance-backed promotion approvals.
|
|
27
|
+
2. Execute: implement current ready tasks; use only `wp_blueprint_task_verify` to mark them done.
|
|
28
|
+
3. QA: run affected checks and `wp qa`; preserve normalized failure evidence.
|
|
29
|
+
4. Validate: obtain distinct verification and code-review evidence and resolve findings. Each lane appends a tracked `reviews.md` record in one of these exact forms:
|
|
30
|
+
|
|
31
|
+
```text
|
|
32
|
+
<!-- wp:goal-validation {"kind":"verify","reviewer":"<identity>","artifact":"<tracked-path>"} -->
|
|
33
|
+
<!-- wp:goal-validation {"kind":"code-review","reviewer":"<different-identity>","artifact":"<tracked-path>"} -->
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
5. Land: require green PR checks, complete the blueprint in the same PR, merge, and run owner cleanup.
|
|
37
|
+
6. Complete: stop only when `wp goal run` records terminal evidence.
|
|
38
|
+
|
|
39
|
+
Resume from durable state after interruption. Obey `WP_GOAL_DISABLE=1`, iteration/error/validation caps, and repository ownership. The pipeline must never self-approve, directly mark tasks done, bypass evidence, or push to main. Keep every loop bounded and never increase timeouts.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: skill
|
|
3
|
+
slug: goal
|
|
4
|
+
title: Goal
|
|
5
|
+
status: active
|
|
6
|
+
scope: repo
|
|
7
|
+
applies_to: [agents]
|
|
8
|
+
related: [autopilot, plan-refine, verify]
|
|
9
|
+
created: "2026-07-10"
|
|
10
|
+
last_reviewed: "2026-07-10"
|
|
11
|
+
name: goal
|
|
12
|
+
description: "Run durable multi-blueprint goals through evidence-gated handoffs."
|
|
13
|
+
argument-hint: "<new|status|handoff|run|cancel> [brief]"
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# Goal
|
|
17
|
+
|
|
18
|
+
Use `wp goal` as the durable controller for work spanning one or more blueprints.
|
|
19
|
+
|
|
20
|
+
## Protocol
|
|
21
|
+
|
|
22
|
+
1. Create or resume the goal in a managed blueprint owner worktree.
|
|
23
|
+
2. Read `wp goal status`, execute only the current phase handoff, then call `wp goal run` again.
|
|
24
|
+
3. Complete blueprint tasks only through `wp_blueprint_task_verify` with passing evidence.
|
|
25
|
+
4. Stop when the controller reports `complete`, `cancelled`, blocked guard exhaustion, or `WP_GOAL_DISABLE=1`.
|
|
26
|
+
|
|
27
|
+
The blueprint engine owns task status and approval gates. The goal controller must never self-approve, directly mark a task done, bypass review provenance, or mutate the primary checkout. Keep every loop bounded and never increase timeouts.
|
|
@@ -44,46 +44,56 @@ MODEL=$(echo "$CATALOG" | grep '^opencode-go/kimi' | grep -- '-code$' | sort -V
|
|
|
44
44
|
[ -z "$MODEL" ] && MODEL=$(echo "$CATALOG" | grep '^opencode-go/mimo' | grep -- '-pro$' | sort -V | tail -1)
|
|
45
45
|
[ -z "$MODEL" ] && MODEL=$(echo "$CATALOG" | sort -V | tail -1)
|
|
46
46
|
|
|
47
|
-
# Fail fast on blocked quota before launching a long review.
|
|
47
|
+
# Fail fast on blocked quota before launching a long review. The probe uses
|
|
48
|
+
# an idle timeout, not a wall-clock timeout, so active output is allowed to continue.
|
|
49
|
+
# The probe succeeds as soon as it observes the expected success marker instead of
|
|
50
|
+
# waiting for the CLI to finish teardown after the reply has already arrived.
|
|
48
51
|
[ -n "$MODEL" ] || { echo "No OpenCode Go model resolved for this reviewer." >&2; exit 2; }
|
|
49
52
|
OPENCODE_GO_REVIEW_EFFORT=${OPENCODE_GO_REVIEW_EFFORT:-medium}
|
|
50
53
|
[ "$OPENCODE_GO_REVIEW_EFFORT" = medium ] || [ "$OPENCODE_GO_REVIEW_EFFORT" = high ] || { echo "OPENCODE_GO_REVIEW_EFFORT must be one of: medium, high" >&2; exit 2; }
|
|
51
54
|
OPENCODE_GO_PROBE_TIMEOUT=${OPENCODE_GO_PROBE_TIMEOUT:-20}
|
|
55
|
+
case "$OPENCODE_GO_PROBE_TIMEOUT" in
|
|
56
|
+
""|*[!0-9]*) echo "OPENCODE_GO_PROBE_TIMEOUT must be a positive integer number of seconds" >&2; exit 2 ;;
|
|
57
|
+
esac
|
|
58
|
+
[ "$OPENCODE_GO_PROBE_TIMEOUT" -gt 0 ] || { echo "OPENCODE_GO_PROBE_TIMEOUT must be a positive integer number of seconds" >&2; exit 2; }
|
|
52
59
|
PROBE_LOG=$(mktemp -t wp-opencode-go-probe.XXXXXX)
|
|
53
|
-
PROBE_RC
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
[
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
if
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
60
|
+
unset PROBE_RC
|
|
61
|
+
opencode run --format json --variant "$OPENCODE_GO_REVIEW_EFFORT" --model "$MODEL" --title opencode-go-credit-probe 'Reply exactly OPENCODE_GO_OK.' >"$PROBE_LOG" 2>&1 &
|
|
62
|
+
PROBE_PID=$!
|
|
63
|
+
LAST_PROBE_SIZE=$(wc -c <"$PROBE_LOG" | tr -d " ")
|
|
64
|
+
LAST_PROBE_PROGRESS_AT=$(date +%s)
|
|
65
|
+
while kill -0 "$PROBE_PID" 2>/dev/null; do
|
|
66
|
+
if grep -q "OPENCODE_GO_OK" "$PROBE_LOG"; then
|
|
67
|
+
kill "$PROBE_PID" 2>/dev/null || true
|
|
68
|
+
wait "$PROBE_PID" 2>/dev/null || true
|
|
69
|
+
PROBE_RC=0
|
|
70
|
+
break
|
|
71
|
+
fi
|
|
72
|
+
CURRENT_PROBE_SIZE=$(wc -c <"$PROBE_LOG" | tr -d " ")
|
|
73
|
+
NOW=$(date +%s)
|
|
74
|
+
if [ "$CURRENT_PROBE_SIZE" -gt "$LAST_PROBE_SIZE" ]; then
|
|
75
|
+
LAST_PROBE_SIZE=$CURRENT_PROBE_SIZE
|
|
76
|
+
LAST_PROBE_PROGRESS_AT=$NOW
|
|
77
|
+
elif [ $((NOW - LAST_PROBE_PROGRESS_AT)) -gt "$OPENCODE_GO_PROBE_TIMEOUT" ]; then
|
|
78
|
+
printf '\nOPENCODE_GO_PROBE_TIMEOUT after %ss without progress\n' "$OPENCODE_GO_PROBE_TIMEOUT" >>"$PROBE_LOG"
|
|
79
|
+
kill -KILL "$PROBE_PID" 2>/dev/null || true
|
|
80
|
+
wait "$PROBE_PID" 2>/dev/null || true
|
|
81
|
+
PROBE_RC=124
|
|
82
|
+
break
|
|
83
|
+
fi
|
|
84
|
+
sleep 1
|
|
85
|
+
done
|
|
86
|
+
if [ -z "${PROBE_RC+x}" ]; then
|
|
87
|
+
if grep -q "OPENCODE_GO_OK" "$PROBE_LOG"; then
|
|
88
|
+
PROBE_RC=0
|
|
89
|
+
else
|
|
90
|
+
wait "$PROBE_PID" || PROBE_RC=$?
|
|
91
|
+
fi
|
|
92
|
+
fi
|
|
93
|
+
if [ "$PROBE_RC" -eq 0 ] && ! grep -q "OPENCODE_GO_OK" "$PROBE_LOG"; then
|
|
94
|
+
echo "OpenCode Go probe finished without the expected success marker." >>"$PROBE_LOG"
|
|
95
|
+
PROBE_RC=1
|
|
96
|
+
fi
|
|
87
97
|
if [ "$PROBE_RC" -ne 0 ]; then
|
|
88
98
|
echo "OpenCode Go probe failed or timed out for $MODEL after ${OPENCODE_GO_PROBE_TIMEOUT}s; skipping this reviewer instead of starting the full review." >&2
|
|
89
99
|
sed -n '1,80p' "$PROBE_LOG" >&2
|
package/skills/verify/SKILL.md
CHANGED
|
@@ -162,7 +162,7 @@ user explicitly asked for a different approval count or reviewer mix.
|
|
|
162
162
|
|
|
163
163
|
Default policy:
|
|
164
164
|
|
|
165
|
-
- Require **two extra model approvals** by default.
|
|
165
|
+
- Require **two extra model approvals** by default, but at most **one OpenCode Go reviewer** is required unless the user explicitly asks for multiple OpenCode models.
|
|
166
166
|
- If the user asks for more, fewer, zero, or specific reviewers, follow that
|
|
167
167
|
explicit instruction and report the chosen requirement.
|
|
168
168
|
- These approvals are model outside-voice approvals, not a substitute for
|
|
@@ -172,10 +172,10 @@ Reviewer preference:
|
|
|
172
172
|
|
|
173
173
|
- When running from Codex, prefer **Claude + one OpenCode Go reviewer**.
|
|
174
174
|
- When running from Claude, prefer **Codex + one OpenCode Go reviewer**.
|
|
175
|
-
- When Codex/Claude outside voice is unavailable, use **
|
|
176
|
-
|
|
175
|
+
- When Codex/Claude outside voice is unavailable, use **one OpenCode Go
|
|
176
|
+
reviewer** if OpenCode is logged in.
|
|
177
177
|
- Prefer the repo's outside-voice skills instead of hand-rolled commands:
|
|
178
|
-
`$agent-kit:claude`, `$agent-kit:codex`, and one
|
|
178
|
+
`$agent-kit:claude`, `$agent-kit:codex`, and one OpenCode Go reviewer
|
|
179
179
|
skills such as `$agent-kit:opencode-go`, `$agent-kit:qwen`,
|
|
180
180
|
`$agent-kit:deepseek`, `$agent-kit:glm`, `$agent-kit:kimi`,
|
|
181
181
|
`$agent-kit:minimax`, or `$agent-kit:mimo`.
|