@specship/specship-win32-arm64 0.16.0 → 0.18.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/lib/dist/activation/steering.d.ts +11 -2
- package/lib/dist/activation/steering.d.ts.map +1 -1
- package/lib/dist/activation/steering.js +26 -9
- package/lib/dist/activation/steering.js.map +1 -1
- package/lib/dist/bin/specship.js +34 -2
- package/lib/dist/bin/specship.js.map +1 -1
- package/lib/dist/commands/specship/learn.md +45 -0
- package/lib/dist/config/runtime-settings.d.ts +25 -0
- package/lib/dist/config/runtime-settings.d.ts.map +1 -0
- package/lib/dist/config/runtime-settings.js +99 -0
- package/lib/dist/config/runtime-settings.js.map +1 -0
- package/lib/dist/index.d.ts +9 -0
- package/lib/dist/index.d.ts.map +1 -1
- package/lib/dist/index.js +8 -0
- package/lib/dist/index.js.map +1 -1
- package/lib/dist/installer/index.js +1 -1
- package/lib/dist/installer/index.js.map +1 -1
- package/lib/dist/installer/targets/claude.d.ts.map +1 -1
- package/lib/dist/installer/targets/claude.js +7 -6
- package/lib/dist/installer/targets/claude.js.map +1 -1
- package/lib/dist/mcp/model-context.d.ts +5 -3
- package/lib/dist/mcp/model-context.d.ts.map +1 -1
- package/lib/dist/mcp/model-context.js +17 -8
- package/lib/dist/mcp/model-context.js.map +1 -1
- package/lib/dist/mcp/session.d.ts +1 -0
- package/lib/dist/mcp/session.d.ts.map +1 -1
- package/lib/dist/mcp/session.js +13 -0
- package/lib/dist/mcp/session.js.map +1 -1
- package/lib/dist/mcp/tools.d.ts +30 -0
- package/lib/dist/mcp/tools.d.ts.map +1 -1
- package/lib/dist/mcp/tools.js +151 -11
- package/lib/dist/mcp/tools.js.map +1 -1
- package/lib/dist/reflect/index.d.ts +3 -1
- package/lib/dist/reflect/index.d.ts.map +1 -1
- package/lib/dist/reflect/index.js +5 -1
- package/lib/dist/reflect/index.js.map +1 -1
- package/lib/dist/reflect/miner.d.ts.map +1 -1
- package/lib/dist/reflect/miner.js +130 -5
- package/lib/dist/reflect/miner.js.map +1 -1
- package/lib/dist/reflect/session-outcomes.d.ts +50 -0
- package/lib/dist/reflect/session-outcomes.d.ts.map +1 -0
- package/lib/dist/reflect/session-outcomes.js +110 -0
- package/lib/dist/reflect/session-outcomes.js.map +1 -0
- package/lib/dist/reflect/sweep.d.ts +11 -0
- package/lib/dist/reflect/sweep.d.ts.map +1 -1
- package/lib/dist/reflect/sweep.js +29 -0
- package/lib/dist/reflect/sweep.js.map +1 -1
- package/lib/dist/server/routes/claude.js +27 -0
- package/lib/dist/workflows/defaults/spec-implement-mixed.yaml +197 -0
- package/lib/node_modules/.package-lock.json +1 -1
- package/lib/package.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
name: spec-implement-mixed
|
|
2
|
+
description: Implement a spec with mixed models — sonnet plans, haiku executes, tests + gates verify. Same steps and gates as spec-implement at a fraction of the token cost.
|
|
3
|
+
tags: [spec, default, mixed-model]
|
|
4
|
+
requires: [specship, git]
|
|
5
|
+
|
|
6
|
+
worktree:
|
|
7
|
+
enabled: true
|
|
8
|
+
|
|
9
|
+
inputs:
|
|
10
|
+
- name: SPEC_ID
|
|
11
|
+
description: The spec ID to implement (e.g. REQ-AUTH-005)
|
|
12
|
+
required: true
|
|
13
|
+
|
|
14
|
+
systemPromptAppend: |
|
|
15
|
+
You are implementing a specific requirement. Before editing code, call
|
|
16
|
+
specship_spec($INPUT.SPEC_ID) to see the spec body and any code it
|
|
17
|
+
already links to. After editing, call specship_link_assert with the
|
|
18
|
+
spec_id and the symbol you implemented BEFORE reporting done.
|
|
19
|
+
|
|
20
|
+
nodes:
|
|
21
|
+
- id: fetch_spec
|
|
22
|
+
# MIXMODEL-DOC: mechanical step → haiku
|
|
23
|
+
model: haiku
|
|
24
|
+
kind: prompt
|
|
25
|
+
output_type: spec_summary
|
|
26
|
+
allowed_tools:
|
|
27
|
+
- mcp__specship__specship_spec
|
|
28
|
+
- mcp__specship__specship_explore
|
|
29
|
+
prompt: |
|
|
30
|
+
Spec ID: $INPUT.SPEC_ID
|
|
31
|
+
|
|
32
|
+
Call specship_spec to fetch the spec. Then call specship_explore on
|
|
33
|
+
a small bag of terms drawn from the spec title and acceptance
|
|
34
|
+
criteria to find the relevant code area.
|
|
35
|
+
|
|
36
|
+
Output: a short summary (≤300 words) of (a) what the spec asks for,
|
|
37
|
+
(b) which code areas / symbols are most relevant, and (c) whether
|
|
38
|
+
any code currently claims to implement it (look at linked_code).
|
|
39
|
+
|
|
40
|
+
- id: plan
|
|
41
|
+
# MIXMODEL-DOC: judgment step → sonnet
|
|
42
|
+
model: sonnet
|
|
43
|
+
kind: prompt
|
|
44
|
+
depends_on: [fetch_spec]
|
|
45
|
+
output_type: plan
|
|
46
|
+
allowed_tools:
|
|
47
|
+
- mcp__specship__specship_explore
|
|
48
|
+
- mcp__specship__specship_node
|
|
49
|
+
- mcp__specship__specship_spec
|
|
50
|
+
- Read
|
|
51
|
+
prompt: |
|
|
52
|
+
Based on this spec summary, write a concrete implementation plan:
|
|
53
|
+
|
|
54
|
+
$fetch_spec.output
|
|
55
|
+
|
|
56
|
+
The plan should list:
|
|
57
|
+
- Files to create or modify (with project-relative paths)
|
|
58
|
+
- Specific functions/methods/classes to add or change
|
|
59
|
+
- Tests to add or update
|
|
60
|
+
- Order of changes
|
|
61
|
+
|
|
62
|
+
Keep it tight (≤500 words). Do NOT edit code in this step.
|
|
63
|
+
|
|
64
|
+
- id: approve_plan
|
|
65
|
+
kind: approval
|
|
66
|
+
depends_on: [plan]
|
|
67
|
+
message: |
|
|
68
|
+
Plan ready for $INPUT.SPEC_ID. Review the plan output and approve
|
|
69
|
+
to proceed with implementation, or reject with feedback to revise.
|
|
70
|
+
capture_response: true
|
|
71
|
+
on_reject:
|
|
72
|
+
prompt: |
|
|
73
|
+
The plan was rejected with this feedback. Revise:
|
|
74
|
+
|
|
75
|
+
$approve_plan.output
|
|
76
|
+
max_attempts: 3
|
|
77
|
+
|
|
78
|
+
- id: implement
|
|
79
|
+
# MIXMODEL-DOC: mechanical step → haiku
|
|
80
|
+
model: haiku
|
|
81
|
+
kind: prompt
|
|
82
|
+
depends_on: [approve_plan]
|
|
83
|
+
output_type: diff
|
|
84
|
+
allowed_tools:
|
|
85
|
+
- Read
|
|
86
|
+
- Edit
|
|
87
|
+
- Write
|
|
88
|
+
- Bash
|
|
89
|
+
- mcp__specship__specship_explore
|
|
90
|
+
- mcp__specship__specship_node
|
|
91
|
+
- mcp__specship__specship_spec
|
|
92
|
+
prompt: |
|
|
93
|
+
Implement the approved plan. Follow it closely.
|
|
94
|
+
|
|
95
|
+
Plan:
|
|
96
|
+
$plan.output
|
|
97
|
+
|
|
98
|
+
Approval feedback (if any):
|
|
99
|
+
$approve_plan.output
|
|
100
|
+
|
|
101
|
+
When done, output a short diff summary (which files changed and why).
|
|
102
|
+
|
|
103
|
+
- id: verify
|
|
104
|
+
kind: bash
|
|
105
|
+
depends_on: [implement]
|
|
106
|
+
output_type: test_results
|
|
107
|
+
timeout: 600000
|
|
108
|
+
bash: |
|
|
109
|
+
# Run the project's test suite. The verify node's exit code drives
|
|
110
|
+
# the gating for the link node — non-zero halts the workflow.
|
|
111
|
+
# The VERIFY_RESULT marker is the machine-readable contract the link
|
|
112
|
+
# node routes on (REQ-IMPLINT-001.A1): a skipped run must never be
|
|
113
|
+
# mistaken for a passing one.
|
|
114
|
+
if [ -f package.json ]; then
|
|
115
|
+
# A fresh worktree has no node_modules/ or build output — a verify
|
|
116
|
+
# failure must mean the tests failed, not that the environment was
|
|
117
|
+
# missing (WF-REJECT-DOC, REQ-WFREJ-005).
|
|
118
|
+
if [ ! -d node_modules ]; then npm ci --no-audit --no-fund || npm install --no-audit --no-fund; fi
|
|
119
|
+
npm run build --if-present
|
|
120
|
+
if npm test; then echo "VERIFY_RESULT=ran-and-passed"; else echo "VERIFY_RESULT=ran-and-failed"; exit 1; fi
|
|
121
|
+
elif [ -f Cargo.toml ]; then
|
|
122
|
+
if cargo test; then echo "VERIFY_RESULT=ran-and-passed"; else echo "VERIFY_RESULT=ran-and-failed"; exit 1; fi
|
|
123
|
+
elif [ -f pyproject.toml ] || [ -f requirements.txt ]; then
|
|
124
|
+
if python -m pytest; then echo "VERIFY_RESULT=ran-and-passed"; else echo "VERIFY_RESULT=ran-and-failed"; exit 1; fi
|
|
125
|
+
else
|
|
126
|
+
echo "no recognised test framework; tests did NOT run"
|
|
127
|
+
echo "VERIFY_RESULT=skipped"
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
- id: link
|
|
131
|
+
# MIXMODEL-DOC: mechanical step → haiku
|
|
132
|
+
model: haiku
|
|
133
|
+
kind: prompt
|
|
134
|
+
depends_on: [verify]
|
|
135
|
+
output_type: link_summary
|
|
136
|
+
allowed_tools:
|
|
137
|
+
- mcp__specship__specship_link_assert
|
|
138
|
+
- mcp__specship__specship_link_verify
|
|
139
|
+
- mcp__specship__specship_spec
|
|
140
|
+
prompt: |
|
|
141
|
+
Assert spec→code links for the changes made in the implement step.
|
|
142
|
+
For each symbol that implements $INPUT.SPEC_ID (or its child
|
|
143
|
+
requirements), call specship_link_assert with the spec_id, the
|
|
144
|
+
file path, and the qualified symbol name.
|
|
145
|
+
|
|
146
|
+
Then route on the VERIFY_RESULT marker in the test results below
|
|
147
|
+
(REQ-IMPLINT-001):
|
|
148
|
+
- VERIFY_RESULT=ran-and-passed → after each assert, call
|
|
149
|
+
specship_link_verify with result="pass".
|
|
150
|
+
- VERIFY_RESULT=skipped → do NOT call specship_link_verify at all;
|
|
151
|
+
the links stay in the `implemented` state. Tests that did not run
|
|
152
|
+
are never reported as passing.
|
|
153
|
+
|
|
154
|
+
Implementation diff summary:
|
|
155
|
+
$implement.output
|
|
156
|
+
|
|
157
|
+
Test results:
|
|
158
|
+
$verify.output
|
|
159
|
+
|
|
160
|
+
Output: a short list of "spec_id → file:symbol [verified|implemented]"
|
|
161
|
+
lines, ending with one line stating whether verification ran or was
|
|
162
|
+
skipped.
|
|
163
|
+
|
|
164
|
+
- id: coverage
|
|
165
|
+
# MIXMODEL-DOC: mechanical step → haiku
|
|
166
|
+
model: haiku
|
|
167
|
+
kind: prompt
|
|
168
|
+
depends_on: [link]
|
|
169
|
+
output_type: coverage_summary
|
|
170
|
+
allowed_tools:
|
|
171
|
+
- mcp__specship__specship_spec
|
|
172
|
+
prompt: |
|
|
173
|
+
Report acceptance-criteria test coverage for $INPUT.SPEC_ID
|
|
174
|
+
(REQ-IMPLINT-002). Call specship_spec with the spec_id, count its
|
|
175
|
+
acceptance criteria (the .A<N> children; if the spec has none,
|
|
176
|
+
treat the requirement itself as one criterion), and count how many
|
|
177
|
+
of them carry a `tests`-kind link.
|
|
178
|
+
|
|
179
|
+
Output exactly one or two lines:
|
|
180
|
+
- "N of M acceptance criteria for $INPUT.SPEC_ID have linked tests."
|
|
181
|
+
- If N < M, add: "Close the gap with /specship:spec behaviour
|
|
182
|
+
$INPUT.SPEC_ID."
|
|
183
|
+
|
|
184
|
+
- id: final_review
|
|
185
|
+
kind: approval
|
|
186
|
+
depends_on: [coverage]
|
|
187
|
+
message: |
|
|
188
|
+
Implementation complete for $INPUT.SPEC_ID.
|
|
189
|
+
|
|
190
|
+
Links asserted:
|
|
191
|
+
$link.output
|
|
192
|
+
|
|
193
|
+
Acceptance-criteria test coverage:
|
|
194
|
+
$coverage.output
|
|
195
|
+
|
|
196
|
+
Approve to finalize the run (worktree is left for you to inspect
|
|
197
|
+
and merge), or reject to abandon.
|
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@specship/specship",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "Supercharge Claude Code with semantic code intelligence. 94% fewer tool calls • 77% faster exploration • 100% local.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|