@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.
Files changed (66) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/package.json +11 -11
  3. package/plugins/sp/plugin.json +1 -1
  4. package/plugins/sp/skills/conflict-finding/SKILL.md +2 -0
  5. package/plugins/sp/skills/issue-finding/SKILL.md +2 -0
  6. package/plugins/sp/skills/reverse-engineering/SKILL.md +2 -0
  7. package/plugins/sp/skills/spur-cli/references/self.md +37 -2
  8. package/plugins/sp/skills/wayfinder/SKILL.md +2 -0
  9. package/spur.js +28958 -17117
  10. package/web/_astro/{BoardApp.DFBNysRC.js → BoardApp.CNBpKuB6.js} +167 -169
  11. package/web/_astro/{BoardApp.DspUVt5b.js → BoardApp.DVWLxHcV.js} +1 -1
  12. package/web/_astro/{TaskDetail.DEzLL6Fe.js → TaskDetail.BY6jO_3P.js} +1 -1
  13. package/web/_astro/arc.CLFbvaU4.js +1 -0
  14. package/web/_astro/{architectureDiagram-3BPJPVTR.D2Zyc6nm.js → architectureDiagram-3BPJPVTR.YYrMKtrm.js} +1 -1
  15. package/web/_astro/{blockDiagram-GPEHLZMM.BnA_rJl6.js → blockDiagram-GPEHLZMM.D-Xzu32A.js} +1 -1
  16. package/web/_astro/{c4Diagram-AAUBKEIU.DVUo9pxo.js → c4Diagram-AAUBKEIU.Cv7EV8QD.js} +1 -1
  17. package/web/_astro/channel.DzHZuqj0.js +1 -0
  18. package/web/_astro/{chunk-2J33WTMH.BJ-VkV91.js → chunk-2J33WTMH.CkAKN-fF.js} +1 -1
  19. package/web/_astro/{chunk-4BX2VUAB.xpN1rBQK.js → chunk-4BX2VUAB.D-xu2Tgi.js} +1 -1
  20. package/web/_astro/{chunk-55IACEB6.Dtu4VTmK.js → chunk-55IACEB6.yNQibVGY.js} +1 -1
  21. package/web/_astro/{chunk-727SXJPM.CjXhM1c1.js → chunk-727SXJPM.DlVIFHHZ.js} +4 -4
  22. package/web/_astro/{chunk-AQP2D5EJ.DSCad_Gd.js → chunk-AQP2D5EJ.C-LGFaeS.js} +1 -1
  23. package/web/_astro/{chunk-FMBD7UC4.DxwDIiuY.js → chunk-FMBD7UC4.Df2n26zT.js} +1 -1
  24. package/web/_astro/{chunk-ND2GUHAM.D5LgSWYE.js → chunk-ND2GUHAM.CV_k83Gj.js} +1 -1
  25. package/web/_astro/{chunk-QZHKN3VN.CwXZoKZI.js → chunk-QZHKN3VN.BQQDO3h3.js} +1 -1
  26. package/web/_astro/{classDiagram-4FO5ZUOK.DZ-I2QOo.js → classDiagram-4FO5ZUOK.DkSMdA84.js} +1 -1
  27. package/web/_astro/{classDiagram-v2-Q7XG4LA2.DZ-I2QOo.js → classDiagram-v2-Q7XG4LA2.DkSMdA84.js} +1 -1
  28. package/web/_astro/{cose-bilkent-S5V4N54A.DszE5dpz.js → cose-bilkent-S5V4N54A.CCN7GwAZ.js} +1 -1
  29. package/web/_astro/{cynefin-OW5HDTMX.c-ctyPLt.js → cynefin-OW5HDTMX.CqQCttkM.js} +1 -1
  30. package/web/_astro/{dagre-BM42HDAG.Boq07Shn.js → dagre-BM42HDAG.CCn6iftc.js} +2 -2
  31. package/web/_astro/diagram-2AECGRRQ.DImUVZK-.js +43 -0
  32. package/web/_astro/diagram-5GNKFQAL.BYNywZwV.js +10 -0
  33. package/web/_astro/{diagram-KO2AKTUF.BXEZQbTM.js → diagram-KO2AKTUF.LJZ9DjsJ.js} +3 -3
  34. package/web/_astro/{diagram-LMA3HP47.CFcDobF6.js → diagram-LMA3HP47.CJ3YpVED.js} +1 -1
  35. package/web/_astro/{diagram-OG6HWLK6.CJ8Q1cQd.js → diagram-OG6HWLK6.CnVtq5_j.js} +1 -1
  36. package/web/_astro/{erDiagram-TEJ5UH35.B409nFLg.js → erDiagram-TEJ5UH35.SdmuzZwT.js} +5 -5
  37. package/web/_astro/{flowDiagram-I6XJVG4X.BtF5dGDY.js → flowDiagram-I6XJVG4X.C9V-B-nO.js} +5 -5
  38. package/web/_astro/{ganttDiagram-6RSMTGT7.BbflTg4R.js → ganttDiagram-6RSMTGT7.DT5v7SL5.js} +1 -1
  39. package/web/_astro/{gitGraphDiagram-PVQCEYII.BLPcOhGS.js → gitGraphDiagram-PVQCEYII.B3qURYBL.js} +1 -1
  40. package/web/_astro/index.C8LjH5ri.css +1 -0
  41. package/web/_astro/{infoDiagram-5YYISTIA.DsaY8QU3.js → infoDiagram-5YYISTIA.CHO0xT8l.js} +1 -1
  42. package/web/_astro/{ishikawaDiagram-YF4QCWOH.D9PaTLtO.js → ishikawaDiagram-YF4QCWOH.buALAOGh.js} +5 -5
  43. package/web/_astro/{journeyDiagram-JHISSGLW.4_zPJ9m2.js → journeyDiagram-JHISSGLW.DvKuIdbX.js} +1 -1
  44. package/web/_astro/{kanban-definition-UN3LZRKU.IqD1vq7W.js → kanban-definition-UN3LZRKU.Dvoi9jdN.js} +7 -7
  45. package/web/_astro/{linear.JJiEkviR.js → linear.EsEfz8Ex.js} +1 -1
  46. package/web/_astro/mermaid.core.Vk3ryVC7.js +303 -0
  47. package/web/_astro/{mindmap-definition-RKZ34NQL.B6pZnBGO.js → mindmap-definition-RKZ34NQL.DG1pkymq.js} +2 -2
  48. package/web/_astro/{pieDiagram-4H26LBE5.MM6Of7YP.js → pieDiagram-4H26LBE5.DAUmIdd6.js} +3 -3
  49. package/web/_astro/{quadrantDiagram-W4KKPZXB.7eWQnH9R.js → quadrantDiagram-W4KKPZXB.Du3QUozl.js} +1 -1
  50. package/web/_astro/{requirementDiagram-4Y6WPE33.C3T9mbHc.js → requirementDiagram-4Y6WPE33.neRi5GrQ.js} +3 -3
  51. package/web/_astro/{sankeyDiagram-5OEKKPKP.CqlwDe_m.js → sankeyDiagram-5OEKKPKP.CMUtxA70.js} +4 -4
  52. package/web/_astro/{sequenceDiagram-3UESZ5HK.BNVlPChR.js → sequenceDiagram-3UESZ5HK.CfYFLmYH.js} +1 -1
  53. package/web/_astro/{stateDiagram-AJRCARHV.DSExW-ER.js → stateDiagram-AJRCARHV.Bn4dmAad.js} +1 -1
  54. package/web/_astro/{stateDiagram-v2-BHNVJYJU.CxE4k_fB.js → stateDiagram-v2-BHNVJYJU.BMNezvp-.js} +1 -1
  55. package/web/_astro/{timeline-definition-PNZ67QCA.uFqjG7Z5.js → timeline-definition-PNZ67QCA.ByaDwsBX.js} +3 -3
  56. package/web/_astro/{vennDiagram-CIIHVFJN.DpTrAXYs.js → vennDiagram-CIIHVFJN.CUYU1Mc9.js} +5 -5
  57. package/web/_astro/{wardleyDiagram-YWT4CUSO.Dl0KBFZe.js → wardleyDiagram-YWT4CUSO.DpZZeJr2.js} +3 -3
  58. package/web/_astro/{xychartDiagram-2RQKCTM6.CE0syl0o.js → xychartDiagram-2RQKCTM6.CWwI33U0.js} +1 -1
  59. package/web/board-runtime.json +4 -0
  60. package/web/index.html +2 -2
  61. package/web/_astro/arc.TAQDSOGC.js +0 -1
  62. package/web/_astro/channel.DpBpvy1k.js +0 -1
  63. package/web/_astro/diagram-2AECGRRQ.Csap4wVu.js +0 -43
  64. package/web/_astro/diagram-5GNKFQAL.Cy4jXe_F.js +0 -10
  65. package/web/_astro/index.DVDW9-eD.css +0 -1
  66. package/web/_astro/mermaid.core.Brxzivhz.js +0 -301
@@ -7,7 +7,7 @@
7
7
  "plugins": [
8
8
  {
9
9
  "name": "sp",
10
- "version": "0.4.21",
10
+ "version": "0.4.22",
11
11
  "source": "./plugins/sp"
12
12
  }
13
13
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gobing-ai/spur",
3
- "version": "0.4.21",
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": "^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",
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": "^14.0.3",
72
+ "commander": "14.0.3",
73
73
  "figlet": "^1.11.0",
74
74
  "zod": "4.4.3"
75
75
  },
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "sp",
3
- "version": "0.4.21",
3
+ "version": "0.4.22",
4
4
  "description": "Spur — a local-first harness engineering toolkit that wraps mainstream coding agents with constraint checking, workflow orchestration, and history analytics."
5
5
  }
@@ -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` has no top-level alias."
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.