@gobing-ai/spur 0.4.21 → 0.4.22
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/.claude-plugin/marketplace.json +1 -1
- package/package.json +11 -11
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/skills/conflict-finding/SKILL.md +2 -0
- package/plugins/sp/skills/issue-finding/SKILL.md +2 -0
- package/plugins/sp/skills/reverse-engineering/SKILL.md +2 -0
- package/plugins/sp/skills/spur-cli/references/self.md +37 -2
- package/plugins/sp/skills/wayfinder/SKILL.md +2 -0
- package/spur.js +28958 -17117
- package/web/_astro/{BoardApp.DFBNysRC.js → BoardApp.CNBpKuB6.js} +167 -169
- package/web/_astro/{BoardApp.DspUVt5b.js → BoardApp.DVWLxHcV.js} +1 -1
- package/web/_astro/{TaskDetail.DEzLL6Fe.js → TaskDetail.BY6jO_3P.js} +1 -1
- package/web/_astro/arc.CLFbvaU4.js +1 -0
- package/web/_astro/{architectureDiagram-3BPJPVTR.D2Zyc6nm.js → architectureDiagram-3BPJPVTR.YYrMKtrm.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.BnA_rJl6.js → blockDiagram-GPEHLZMM.D-Xzu32A.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.DVUo9pxo.js → c4Diagram-AAUBKEIU.Cv7EV8QD.js} +1 -1
- package/web/_astro/channel.DzHZuqj0.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.BJ-VkV91.js → chunk-2J33WTMH.CkAKN-fF.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.xpN1rBQK.js → chunk-4BX2VUAB.D-xu2Tgi.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.Dtu4VTmK.js → chunk-55IACEB6.yNQibVGY.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.CjXhM1c1.js → chunk-727SXJPM.DlVIFHHZ.js} +4 -4
- package/web/_astro/{chunk-AQP2D5EJ.DSCad_Gd.js → chunk-AQP2D5EJ.C-LGFaeS.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.DxwDIiuY.js → chunk-FMBD7UC4.Df2n26zT.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.D5LgSWYE.js → chunk-ND2GUHAM.CV_k83Gj.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.CwXZoKZI.js → chunk-QZHKN3VN.BQQDO3h3.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.DZ-I2QOo.js → classDiagram-4FO5ZUOK.DkSMdA84.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.DZ-I2QOo.js → classDiagram-v2-Q7XG4LA2.DkSMdA84.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.DszE5dpz.js → cose-bilkent-S5V4N54A.CCN7GwAZ.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.c-ctyPLt.js → cynefin-OW5HDTMX.CqQCttkM.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.Boq07Shn.js → dagre-BM42HDAG.CCn6iftc.js} +2 -2
- package/web/_astro/diagram-2AECGRRQ.DImUVZK-.js +43 -0
- package/web/_astro/diagram-5GNKFQAL.BYNywZwV.js +10 -0
- package/web/_astro/{diagram-KO2AKTUF.BXEZQbTM.js → diagram-KO2AKTUF.LJZ9DjsJ.js} +3 -3
- package/web/_astro/{diagram-LMA3HP47.CFcDobF6.js → diagram-LMA3HP47.CJ3YpVED.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.CJ8Q1cQd.js → diagram-OG6HWLK6.CnVtq5_j.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.B409nFLg.js → erDiagram-TEJ5UH35.SdmuzZwT.js} +5 -5
- package/web/_astro/{flowDiagram-I6XJVG4X.BtF5dGDY.js → flowDiagram-I6XJVG4X.C9V-B-nO.js} +5 -5
- package/web/_astro/{ganttDiagram-6RSMTGT7.BbflTg4R.js → ganttDiagram-6RSMTGT7.DT5v7SL5.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.BLPcOhGS.js → gitGraphDiagram-PVQCEYII.B3qURYBL.js} +1 -1
- package/web/_astro/index.C8LjH5ri.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.DsaY8QU3.js → infoDiagram-5YYISTIA.CHO0xT8l.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.D9PaTLtO.js → ishikawaDiagram-YF4QCWOH.buALAOGh.js} +5 -5
- package/web/_astro/{journeyDiagram-JHISSGLW.4_zPJ9m2.js → journeyDiagram-JHISSGLW.DvKuIdbX.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.IqD1vq7W.js → kanban-definition-UN3LZRKU.Dvoi9jdN.js} +7 -7
- package/web/_astro/{linear.JJiEkviR.js → linear.EsEfz8Ex.js} +1 -1
- package/web/_astro/mermaid.core.Vk3ryVC7.js +303 -0
- package/web/_astro/{mindmap-definition-RKZ34NQL.B6pZnBGO.js → mindmap-definition-RKZ34NQL.DG1pkymq.js} +2 -2
- package/web/_astro/{pieDiagram-4H26LBE5.MM6Of7YP.js → pieDiagram-4H26LBE5.DAUmIdd6.js} +3 -3
- package/web/_astro/{quadrantDiagram-W4KKPZXB.7eWQnH9R.js → quadrantDiagram-W4KKPZXB.Du3QUozl.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.C3T9mbHc.js → requirementDiagram-4Y6WPE33.neRi5GrQ.js} +3 -3
- package/web/_astro/{sankeyDiagram-5OEKKPKP.CqlwDe_m.js → sankeyDiagram-5OEKKPKP.CMUtxA70.js} +4 -4
- package/web/_astro/{sequenceDiagram-3UESZ5HK.BNVlPChR.js → sequenceDiagram-3UESZ5HK.CfYFLmYH.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.DSExW-ER.js → stateDiagram-AJRCARHV.Bn4dmAad.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.CxE4k_fB.js → stateDiagram-v2-BHNVJYJU.BMNezvp-.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.uFqjG7Z5.js → timeline-definition-PNZ67QCA.ByaDwsBX.js} +3 -3
- package/web/_astro/{vennDiagram-CIIHVFJN.DpTrAXYs.js → vennDiagram-CIIHVFJN.CUYU1Mc9.js} +5 -5
- package/web/_astro/{wardleyDiagram-YWT4CUSO.Dl0KBFZe.js → wardleyDiagram-YWT4CUSO.DpZZeJr2.js} +3 -3
- package/web/_astro/{xychartDiagram-2RQKCTM6.CE0syl0o.js → xychartDiagram-2RQKCTM6.CWwI33U0.js} +1 -1
- package/web/board-runtime.json +4 -0
- package/web/index.html +2 -2
- package/web/_astro/arc.TAQDSOGC.js +0 -1
- package/web/_astro/channel.DpBpvy1k.js +0 -1
- package/web/_astro/diagram-2AECGRRQ.Csap4wVu.js +0 -43
- package/web/_astro/diagram-5GNKFQAL.Cy4jXe_F.js +0 -10
- package/web/_astro/index.DVDW9-eD.css +0 -1
- package/web/_astro/mermaid.core.Brxzivhz.js +0 -301
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gobing-ai/spur",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.22",
|
|
4
4
|
"description": "Spur CLI — local-first harness for mainstream coding agents: constraint checking, workflow orchestration, agent health, and history analytics. Bun-native; exposes the `spur` command.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"spur",
|
|
@@ -57,19 +57,19 @@
|
|
|
57
57
|
"prepublishOnly": "cd ../.. && bun run apps/cli/src/index.ts builder bump-ver --check spur --no-logo"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@commander-js/extra-typings": "
|
|
61
|
-
"@gobing-ai/ts-db": "
|
|
62
|
-
"@gobing-ai/ts-ai-runner": "
|
|
63
|
-
"@gobing-ai/ts-dual-workflow-engine": "
|
|
64
|
-
"@gobing-ai/ts-infra": "
|
|
65
|
-
"@gobing-ai/ts-llm-jsonl-importer": "
|
|
66
|
-
"@gobing-ai/ts-rule-engine": "
|
|
67
|
-
"@gobing-ai/ts-runtime": "
|
|
68
|
-
"@gobing-ai/ts-utils": "
|
|
60
|
+
"@commander-js/extra-typings": "14.0.0",
|
|
61
|
+
"@gobing-ai/ts-db": "0.7.1",
|
|
62
|
+
"@gobing-ai/ts-ai-runner": "0.7.1",
|
|
63
|
+
"@gobing-ai/ts-dual-workflow-engine": "0.7.1",
|
|
64
|
+
"@gobing-ai/ts-infra": "0.7.1",
|
|
65
|
+
"@gobing-ai/ts-llm-jsonl-importer": "0.7.1",
|
|
66
|
+
"@gobing-ai/ts-rule-engine": "0.7.1",
|
|
67
|
+
"@gobing-ai/ts-runtime": "0.7.1",
|
|
68
|
+
"@gobing-ai/ts-utils": "0.7.1",
|
|
69
69
|
"@types/bun": "1.4.3",
|
|
70
70
|
"@types/figlet": "^1.7.0",
|
|
71
71
|
"@types/node-notifier": "8.0.5",
|
|
72
|
-
"commander": "
|
|
72
|
+
"commander": "14.0.3",
|
|
73
73
|
"figlet": "^1.11.0",
|
|
74
74
|
"zod": "4.4.3"
|
|
75
75
|
},
|
package/plugins/sp/plugin.json
CHANGED
|
@@ -234,6 +234,8 @@ findings, unresolved, coverage, cost, remediation, errors`.
|
|
|
234
234
|
| `Bash` | `git`, `rg`, `spur task/feature ... --json`, `spur ... check`, `sp:doc-evolve` audit |
|
|
235
235
|
| `Write` | Only for temp files / owner-routed repair payloads after confirmation (with `--resolve`) |
|
|
236
236
|
|
|
237
|
+
**Search routing** (hybrid search, ADR-147): concept, cross-file, or "how does X work" questions → semantic first — the zg MCP tool `zvec_grep_search` when the host exposes it, else `spur self search "<query>" --mode fuzzy --json`. Literal, symbol, regex, or exhaustive occurrence lists → `rg`. If zg is absent or the search response carries a `skipped` reason → fall back to `rg`.
|
|
238
|
+
|
|
237
239
|
## Platform Notes
|
|
238
240
|
|
|
239
241
|
### Claude Code
|
|
@@ -367,6 +367,8 @@ With `--create-task`, include `"task": { "wbs": "…", "file": "…", "status":
|
|
|
367
367
|
| `Bash` | `spur history` + `spur task` CLI |
|
|
368
368
|
| `Write` | Temp files for section bodies |
|
|
369
369
|
|
|
370
|
+
**Search routing** (hybrid search, ADR-147): concept, cross-file, or "how does X work" questions → semantic first — the zg MCP tool `zvec_grep_search` when the host exposes it, else `spur self search "<query>" --mode fuzzy --json`. Literal, symbol, regex, or exhaustive occurrence lists → `rg`. If zg is absent or the search response carries a `skipped` reason → fall back to `rg`.
|
|
371
|
+
|
|
370
372
|
## Platform Notes
|
|
371
373
|
|
|
372
374
|
- **Claude Code** — invoke via `/sp:dev-find-issue …` or `Skill(skill="sp:issue-finding",
|
|
@@ -141,6 +141,8 @@ Execute phases in order. Stop at the phase boundary required by the selected mod
|
|
|
141
141
|
3. Exclude or de-prioritize generated, vendored, build output, dependency cache, lockfile-only, binary-heavy, and snapshot-heavy paths unless they are directly relevant.
|
|
142
142
|
4. For monorepos, identify packages/apps and either ask for scope or analyze each package at the requested depth if feasible.
|
|
143
143
|
|
|
144
|
+
**Search routing** (hybrid search, ADR-147): concept, cross-file, or "how does X work" questions → semantic first — the zg MCP tool `zvec_grep_search` when the host exposes it, else `spur self search "<query>" --mode fuzzy --json`. Literal, symbol, regex, or exhaustive occurrence lists → `rg`. If zg is absent or the search response carries a `skipped` reason → fall back to `rg`.
|
|
145
|
+
|
|
144
146
|
### Phase 3: Classify
|
|
145
147
|
|
|
146
148
|
Classify the codebase as one or more archetypes:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: spur-cli-self
|
|
3
|
-
description: "spur-cli noun reference for `spur self`: self-management verbs — SDLC action runner (`exec`), scaffold (`init`), database maintenance (`maintain`), schema migrations (`migrate`), local web server (`serve`), and status overview (`status`). The five legacy verbs (`init`, `maintain`, `migrate`, `serve`, `status`) each mount the same command builder as their legacy top-level noun, which remains a hidden alias; `exec`
|
|
3
|
+
description: "spur-cli noun reference for `spur self`: self-management verbs — SDLC action runner (`exec`), scaffold (`init`), database maintenance (`maintain`), schema migrations (`migrate`), hybrid rg/zg search (`search`), local web server (`serve`), and status overview (`status`). The five legacy verbs (`init`, `maintain`, `migrate`, `serve`, `status`) each mount the same command builder as their legacy top-level noun, which remains a hidden alias; `exec` and `search` have no top-level alias."
|
|
4
4
|
see_also:
|
|
5
5
|
- spur-cli
|
|
6
6
|
---
|
|
@@ -14,7 +14,8 @@ Both paths share the same command builder: identical flags, output, and exit cod
|
|
|
14
14
|
top-level forms are omitted from `spur --help`, leaving `self` as the visible surface.
|
|
15
15
|
|
|
16
16
|
`exec` is the exception: it exists only as `spur self exec` — there is no `spur exec` top-level
|
|
17
|
-
alias (`spur exec <action>` is an unknown command), so nothing depends on a legacy path.
|
|
17
|
+
alias (`spur exec <action>` is an unknown command), so nothing depends on a legacy path. `search`
|
|
18
|
+
is the second such verb: `spur self search` only.
|
|
18
19
|
|
|
19
20
|
## Verb map
|
|
20
21
|
|
|
@@ -24,6 +25,7 @@ alias (`spur exec <action>` is an unknown command), so nothing depends on a lega
|
|
|
24
25
|
| `init` | Scaffold a new Spur project in the current directory | `--name <name>` `--force` `--minimal` `--adopt-global-config` `--json` |
|
|
25
26
|
| `maintain` | Run database maintenance: PRAGMA optimize, WAL truncation, optional VACUUM | `--vacuum` `--json` |
|
|
26
27
|
| `migrate` | Apply CLI-owned schema migrations (or `--check` the importer schema) | `--check` `--json` |
|
|
28
|
+
| `search` | Hybrid exact (`rg`) and semantic (`zg`) search over project docs and code | `--mode` `--scope` `--glob` `--limit` `--regex` `--status` `--json` |
|
|
27
29
|
| `serve` | Start the Spur web server (local fallback) | `--port <n>` `--host <addr>` `--no-open` `--cwd <path>` `--json` |
|
|
28
30
|
| `status [path]` | Show project and git status for a Spur project | `--json` |
|
|
29
31
|
|
|
@@ -63,6 +65,39 @@ first non-zero exit.
|
|
|
63
65
|
`--json` without `--list` or `--dry-run` prints a final `{ action, steps: [{ name, exitCode, durationMs }], exitCode }`
|
|
64
66
|
after the streaming output. Full surface: `docs/design/sdlc-actions.md` §3.3.
|
|
65
67
|
|
|
68
|
+
## `self search` - hybrid exact and semantic search
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
spur self search "how is a paused workflow resumed" # auto: exact + fuzzy where available
|
|
72
|
+
spur self search Bun.which --mode exact # ripgrep only
|
|
73
|
+
spur self search 'runCost' --mode fuzzy --limit 5 # zg semantic only
|
|
74
|
+
spur self search resum --mode exact --scope docs --glob '*.md'
|
|
75
|
+
spur self search --status # backend readiness, no query
|
|
76
|
+
spur self search Bun.which --mode exact --json # raw SearchResponse payload
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
One verb over the hybrid search service (`docs/design/hybrid-search.md` §4, ADR-147). `--mode` is
|
|
80
|
+
`exact` | `fuzzy` | `auto` (default `auto`), `--scope` is `docs` | `code` | `all` (default `all`),
|
|
81
|
+
`--limit` is 1–100 (default 20), `--glob` adds a backend glob (repeatable; prefix `!` to negate),
|
|
82
|
+
and `--regex` switches the exact route from fixed string to pattern. `--status` prints the `rg`/`zg`
|
|
83
|
+
readiness payload and takes no query.
|
|
84
|
+
|
|
85
|
+
The groups are `exact` (ripgrep `--json` events) and `fuzzy` (zg `--hybrid`); a group is `null` when
|
|
86
|
+
that route did not run, and `skipped[]` names the degraded route with its reason
|
|
87
|
+
(`zg-not-installed`, `zg-index-missing`, `zg-timeout`, `zg-failed`, `zg-output-error`) plus an exact
|
|
88
|
+
hint string. Hints are printed, never executed — Spur installs and indexes nothing. Human output
|
|
89
|
+
prints `exact (n)` / `fuzzy (n)` headers with `path:start[-end] [matchedBy]` rows, the first three
|
|
90
|
+
snippet lines indented, then the skip lines; zero hits print `no matches`. `--json` emits the
|
|
91
|
+
`SearchResponse` verbatim (`--json-envelope` for the ADR-091 envelope).
|
|
92
|
+
|
|
93
|
+
| Exit | When |
|
|
94
|
+
| ---- | ---- |
|
|
95
|
+
| `0` | results, empty results, or a degraded fuzzy route |
|
|
96
|
+
| `1` | invalid request (empty query, bad mode/scope/limit), rg missing or rg failed |
|
|
97
|
+
| `2` | no query and no `--status` (usage) |
|
|
98
|
+
|
|
99
|
+
Raw zg/rg passthrough flags are deliberately absent: they would leak the adapter.
|
|
100
|
+
|
|
66
101
|
## `self init` - scaffold a Spur project
|
|
67
102
|
|
|
68
103
|
```bash
|
|
@@ -142,6 +142,8 @@ Invoked when a map already exists (operator provides the feature ID). A ticket i
|
|
|
142
142
|
| **Prototype** | Cheap, rough, concrete artifact to react to — an outline, stub, or rough implementation via `sp:code-implementation`. | Linked prototype as a task artifact |
|
|
143
143
|
| **Task** | Literal manual work — nothing to prototype or research. Moving data, provisioning access. | Checklist in task body; resolved when done |
|
|
144
144
|
|
|
145
|
+
**Search routing** (hybrid search, ADR-147): concept, cross-file, or "how does X work" questions → semantic first — the zg MCP tool `zvec_grep_search` when the host exposes it, else `spur self search "<query>" --mode fuzzy --json`. Literal, symbol, regex, or exhaustive occurrence lists → `rg`. If zg is absent or the search response carries a `skipped` reason → fall back to `rg`.
|
|
146
|
+
|
|
145
147
|
An open question from the map is **not** resolved this way. It is settled with the operator in
|
|
146
148
|
conversation (`AskUserQuestion` where available) and recorded straight into **## Decisions so far**
|
|
147
149
|
— no task is claimed, and it does not consume the session's one ticket.
|