spidersan 0.6.0 → 0.9.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.
Files changed (214) hide show
  1. package/CHANGELOG.md +42 -52
  2. package/README.md +238 -3
  3. package/dist/bin/spidersan.d.ts.map +1 -1
  4. package/dist/bin/spidersan.js +13 -1
  5. package/dist/bin/spidersan.js.map +1 -1
  6. package/dist/commands/abandon.d.ts.map +1 -1
  7. package/dist/commands/abandon.js +1 -9
  8. package/dist/commands/abandon.js.map +1 -1
  9. package/dist/commands/ai.d.ts +15 -0
  10. package/dist/commands/ai.d.ts.map +1 -0
  11. package/dist/commands/ai.js +498 -0
  12. package/dist/commands/ai.js.map +1 -0
  13. package/dist/commands/auto.d.ts.map +1 -1
  14. package/dist/commands/auto.js +2 -1
  15. package/dist/commands/auto.js.map +1 -1
  16. package/dist/commands/bot.d.ts +16 -0
  17. package/dist/commands/bot.d.ts.map +1 -0
  18. package/dist/commands/bot.js +398 -0
  19. package/dist/commands/bot.js.map +1 -0
  20. package/dist/commands/conflicts.d.ts.map +1 -1
  21. package/dist/commands/conflicts.js +260 -277
  22. package/dist/commands/conflicts.js.map +1 -1
  23. package/dist/commands/context.d.ts +8 -0
  24. package/dist/commands/context.d.ts.map +1 -0
  25. package/dist/commands/context.js +104 -0
  26. package/dist/commands/context.js.map +1 -0
  27. package/dist/commands/cross-conflicts.d.ts.map +1 -1
  28. package/dist/commands/cross-conflicts.js +1 -41
  29. package/dist/commands/cross-conflicts.js.map +1 -1
  30. package/dist/commands/depends.d.ts.map +1 -1
  31. package/dist/commands/depends.js +1 -9
  32. package/dist/commands/depends.js.map +1 -1
  33. package/dist/commands/fleet-status.d.ts +14 -0
  34. package/dist/commands/fleet-status.d.ts.map +1 -0
  35. package/dist/commands/fleet-status.js +127 -0
  36. package/dist/commands/fleet-status.js.map +1 -0
  37. package/dist/commands/git-watch.d.ts +24 -0
  38. package/dist/commands/git-watch.d.ts.map +1 -0
  39. package/dist/commands/git-watch.js +84 -0
  40. package/dist/commands/git-watch.js.map +1 -0
  41. package/dist/commands/index.d.ts +5 -0
  42. package/dist/commands/index.d.ts.map +1 -1
  43. package/dist/commands/index.js +7 -0
  44. package/dist/commands/index.js.map +1 -1
  45. package/dist/commands/merge-order.d.ts.map +1 -1
  46. package/dist/commands/merge-order.js +18 -67
  47. package/dist/commands/merge-order.js.map +1 -1
  48. package/dist/commands/merged.d.ts.map +1 -1
  49. package/dist/commands/merged.js +1 -9
  50. package/dist/commands/merged.js.map +1 -1
  51. package/dist/commands/pulse.d.ts.map +1 -1
  52. package/dist/commands/pulse.js +134 -63
  53. package/dist/commands/pulse.js.map +1 -1
  54. package/dist/commands/queen.d.ts.map +1 -1
  55. package/dist/commands/queen.js +11 -7
  56. package/dist/commands/queen.js.map +1 -1
  57. package/dist/commands/ready-check.d.ts +2 -1
  58. package/dist/commands/ready-check.d.ts.map +1 -1
  59. package/dist/commands/ready-check.js +6 -30
  60. package/dist/commands/ready-check.js.map +1 -1
  61. package/dist/commands/register.d.ts.map +1 -1
  62. package/dist/commands/register.js +7 -29
  63. package/dist/commands/register.js.map +1 -1
  64. package/dist/commands/torrent.d.ts.map +1 -1
  65. package/dist/commands/torrent.js +29 -18
  66. package/dist/commands/torrent.js.map +1 -1
  67. package/dist/commands/watch.d.ts.map +1 -1
  68. package/dist/commands/watch.js +13 -34
  69. package/dist/commands/watch.js.map +1 -1
  70. package/dist/lib/ai/context-builder.d.ts +16 -0
  71. package/dist/lib/ai/context-builder.d.ts.map +1 -0
  72. package/dist/lib/ai/context-builder.js +216 -0
  73. package/dist/lib/ai/context-builder.js.map +1 -0
  74. package/dist/lib/ai/event-handler.d.ts +21 -0
  75. package/dist/lib/ai/event-handler.d.ts.map +1 -0
  76. package/dist/lib/ai/event-handler.js +98 -0
  77. package/dist/lib/ai/event-handler.js.map +1 -0
  78. package/dist/lib/ai/index.d.ts +13 -0
  79. package/dist/lib/ai/index.d.ts.map +1 -0
  80. package/dist/lib/ai/index.js +11 -0
  81. package/dist/lib/ai/index.js.map +1 -0
  82. package/dist/lib/ai/llm-client.d.ts +37 -0
  83. package/dist/lib/ai/llm-client.d.ts.map +1 -0
  84. package/dist/lib/ai/llm-client.js +225 -0
  85. package/dist/lib/ai/llm-client.js.map +1 -0
  86. package/dist/lib/ai/reasoner.d.ts +11 -0
  87. package/dist/lib/ai/reasoner.d.ts.map +1 -0
  88. package/dist/lib/ai/reasoner.js +246 -0
  89. package/dist/lib/ai/reasoner.js.map +1 -0
  90. package/dist/lib/ai/setup.d.ts +40 -0
  91. package/dist/lib/ai/setup.d.ts.map +1 -0
  92. package/dist/lib/ai/setup.js +154 -0
  93. package/dist/lib/ai/setup.js.map +1 -0
  94. package/dist/lib/ai/types.d.ts +135 -0
  95. package/dist/lib/ai/types.d.ts.map +1 -0
  96. package/dist/lib/ai/types.js +39 -0
  97. package/dist/lib/ai/types.js.map +1 -0
  98. package/dist/lib/colony-subscriber.d.ts +15 -12
  99. package/dist/lib/colony-subscriber.d.ts.map +1 -1
  100. package/dist/lib/colony-subscriber.js +146 -65
  101. package/dist/lib/colony-subscriber.js.map +1 -1
  102. package/dist/lib/config.d.ts.map +1 -1
  103. package/dist/lib/config.js +18 -4
  104. package/dist/lib/config.js.map +1 -1
  105. package/dist/lib/conflict-analyzer.d.ts +33 -0
  106. package/dist/lib/conflict-analyzer.d.ts.map +1 -0
  107. package/dist/lib/conflict-analyzer.js +114 -0
  108. package/dist/lib/conflict-analyzer.js.map +1 -0
  109. package/dist/lib/conflict-renderer.d.ts +7 -0
  110. package/dist/lib/conflict-renderer.d.ts.map +1 -0
  111. package/dist/lib/conflict-renderer.js +162 -0
  112. package/dist/lib/conflict-renderer.js.map +1 -0
  113. package/dist/lib/conflict-tier.d.ts +20 -0
  114. package/dist/lib/conflict-tier.d.ts.map +1 -0
  115. package/dist/lib/conflict-tier.js +49 -0
  116. package/dist/lib/conflict-tier.js.map +1 -0
  117. package/dist/lib/crypto.js +1 -1
  118. package/dist/lib/crypto.js.map +1 -1
  119. package/dist/lib/git-events-subscriber.d.ts +59 -0
  120. package/dist/lib/git-events-subscriber.d.ts.map +1 -0
  121. package/dist/lib/git-events-subscriber.js +779 -0
  122. package/dist/lib/git-events-subscriber.js.map +1 -0
  123. package/dist/lib/git.d.ts +15 -0
  124. package/dist/lib/git.d.ts.map +1 -0
  125. package/dist/lib/git.js +180 -0
  126. package/dist/lib/git.js.map +1 -0
  127. package/dist/lib/github.d.ts.map +1 -1
  128. package/dist/lib/github.js +14 -9
  129. package/dist/lib/github.js.map +1 -1
  130. package/dist/lib/graph.d.ts +23 -0
  131. package/dist/lib/graph.d.ts.map +1 -0
  132. package/dist/lib/graph.js +134 -0
  133. package/dist/lib/graph.js.map +1 -0
  134. package/dist/lib/hub.d.ts +31 -0
  135. package/dist/lib/hub.d.ts.map +1 -0
  136. package/dist/lib/hub.js +92 -0
  137. package/dist/lib/hub.js.map +1 -0
  138. package/dist/lib/remote-drift.d.ts +60 -0
  139. package/dist/lib/remote-drift.d.ts.map +1 -0
  140. package/dist/lib/remote-drift.js +225 -0
  141. package/dist/lib/remote-drift.js.map +1 -0
  142. package/dist/lib/salvage-analyzer.d.ts.map +1 -1
  143. package/dist/lib/salvage-analyzer.js +2 -3
  144. package/dist/lib/salvage-analyzer.js.map +1 -1
  145. package/dist/lib/security.d.ts +11 -0
  146. package/dist/lib/security.d.ts.map +1 -1
  147. package/dist/lib/security.js +24 -1
  148. package/dist/lib/security.js.map +1 -1
  149. package/dist/lib/session-logger.d.ts +54 -0
  150. package/dist/lib/session-logger.d.ts.map +1 -0
  151. package/dist/lib/session-logger.js +136 -0
  152. package/dist/lib/session-logger.js.map +1 -0
  153. package/dist/storage/adapter.d.ts +4 -0
  154. package/dist/storage/adapter.d.ts.map +1 -1
  155. package/dist/storage/branch-registry-store.d.ts +13 -0
  156. package/dist/storage/branch-registry-store.d.ts.map +1 -0
  157. package/dist/storage/branch-registry-store.js +2 -0
  158. package/dist/storage/branch-registry-store.js.map +1 -0
  159. package/dist/storage/factory.d.ts +4 -0
  160. package/dist/storage/factory.d.ts.map +1 -1
  161. package/dist/storage/factory.js +25 -9
  162. package/dist/storage/factory.js.map +1 -1
  163. package/dist/storage/git-messages.d.ts +53 -0
  164. package/dist/storage/git-messages.d.ts.map +1 -0
  165. package/dist/storage/git-messages.js +376 -0
  166. package/dist/storage/git-messages.js.map +1 -0
  167. package/dist/storage/index.d.ts +5 -0
  168. package/dist/storage/index.d.ts.map +1 -1
  169. package/dist/storage/index.js +5 -0
  170. package/dist/storage/index.js.map +1 -1
  171. package/dist/storage/json-branch-registry-store.d.ts +19 -0
  172. package/dist/storage/json-branch-registry-store.d.ts.map +1 -0
  173. package/dist/storage/json-branch-registry-store.js +112 -0
  174. package/dist/storage/json-branch-registry-store.js.map +1 -0
  175. package/dist/storage/local-messages.d.ts +37 -0
  176. package/dist/storage/local-messages.d.ts.map +1 -0
  177. package/dist/storage/local-messages.js +151 -0
  178. package/dist/storage/local-messages.js.map +1 -0
  179. package/dist/storage/local.d.ts +2 -6
  180. package/dist/storage/local.d.ts.map +1 -1
  181. package/dist/storage/local.js +13 -76
  182. package/dist/storage/local.js.map +1 -1
  183. package/dist/storage/memory-branch-registry-store.d.ts +16 -0
  184. package/dist/storage/memory-branch-registry-store.d.ts.map +1 -0
  185. package/dist/storage/memory-branch-registry-store.js +65 -0
  186. package/dist/storage/memory-branch-registry-store.js.map +1 -0
  187. package/dist/storage/message-adapter.d.ts +86 -0
  188. package/dist/storage/message-adapter.d.ts.map +1 -0
  189. package/dist/storage/message-adapter.js +28 -0
  190. package/dist/storage/message-adapter.js.map +1 -0
  191. package/dist/storage/message-factory.d.ts +36 -0
  192. package/dist/storage/message-factory.d.ts.map +1 -0
  193. package/dist/storage/message-factory.js +99 -0
  194. package/dist/storage/message-factory.js.map +1 -0
  195. package/dist/storage/mycmail-adapter.d.ts +38 -0
  196. package/dist/storage/mycmail-adapter.d.ts.map +1 -0
  197. package/dist/storage/mycmail-adapter.js +300 -0
  198. package/dist/storage/mycmail-adapter.js.map +1 -0
  199. package/dist/storage/supabase-registry-sync-client-impl.d.ts +46 -0
  200. package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
  201. package/dist/storage/supabase-registry-sync-client-impl.js +322 -0
  202. package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -0
  203. package/dist/storage/supabase-registry-sync-client.d.ts +9 -0
  204. package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -0
  205. package/dist/storage/supabase-registry-sync-client.js +2 -0
  206. package/dist/storage/supabase-registry-sync-client.js.map +1 -0
  207. package/dist/storage/supabase.d.ts +8 -46
  208. package/dist/storage/supabase.d.ts.map +1 -1
  209. package/dist/storage/supabase.js +30 -342
  210. package/dist/storage/supabase.js.map +1 -1
  211. package/dist/tui/screen.d.ts.map +1 -1
  212. package/dist/tui/screen.js +5 -3
  213. package/dist/tui/screen.js.map +1 -1
  214. package/package.json +92 -90
package/CHANGELOG.md CHANGED
@@ -5,68 +5,58 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## [0.9.0] - 2026-05-11
9
9
 
10
- ## [0.6.0] — 2026-04-04
10
+ ### Added
11
+
12
+ - **`spidersan pulse --remote-drift`** — proactive remote drift detection. Fetches `origin`, identifies the drift zone (files touched by remote commits local doesn't have), cross-references against (a) the registered branch file list with tier classification and (b) unstaged working-tree files (rebase-continue blocker risk). Gracefully degrades when offline, detached HEAD, mid-rebase, or no remote branch. Supports `--json`, `--hub-sync` (post to Hub on risk), `--strict` (exit 1 on overlap). Pre-push hook integration: `spidersan pulse --remote-drift --strict`. Closes the proactive gap exposed by the 2026-05-11 rebase-sync-chaos incident — 7 sangit gold pairs cover the reactive patterns; this command warns before the first push attempt.
13
+ - **`src/lib/remote-drift.ts`** — pure library exporting `getDriftZone`, `getUnstagedTrackedFiles`, `classifyDriftZone`, `computeDriftResult`. Extracted so `watch --fetch-poll` can reuse the primitives without importing from the command layer.
14
+ - **Architecture DEEPENING-8** — contract at `docs/arch/contracts/DEEPENING-8-remote-drift.md`; 15 new tests in `tests/remote-drift.test.ts`.
15
+
16
+ ### Architecture (DEEPENING series — all in this release cycle)
17
+
18
+ - **DEEPENING-3: `src/lib/conflict-analyzer.ts`** — pure `analyzeConflicts() → ConflictReport`; `classifierSource` enum and `useSymbolAware` flag as H10 affordances. `conflicts.ts` reduced from 68 to 2 `console.log` calls.
19
+ - **DEEPENING-4: `src/lib/git.ts`** — canonical git operations module; `getCurrentBranch` deduplication (8× → 1), plus `getChangedFiles`, `getFileAtRef`, `getRemoteHead`, `getAheadBehind`, `GitError`. All git calls use `execFileSync` argv arrays.
20
+ - **DEEPENING-5: `src/lib/hub.ts`** — single `HubClient` with injectable `HubAdapter`; `HUB_URL` defined once (was in 3+ files). Stray `HUB_URL` in `torrent.ts` also removed.
21
+ - **DEEPENING-6: `src/lib/conflict-renderer.ts`** — pure `renderConflictReport()` → `string`; zero side effects; makes conflict detection testable without stdout capture.
22
+ - **DEEPENING-7: `src/lib/graph.ts`** — pure `buildConflictGraph`, `topologicalSort`, `calculateBlockingCounts`; first test coverage for merge-order logic (11 tests).
23
+ - **DEEPENING-1: `src/storage/` split** — `BranchRegistryStore` + `JsonBranchRegistryStore` + `MemoryBranchRegistryStore` (test double) + `SupabaseRegistrySyncClient`. `StorageAdapter` kept as `@deprecated` composing shim; on-disk JSON format unchanged.
24
+
25
+ ### Changed
11
26
 
12
- ### Removed
13
- - **Mycmail messaging layer** — removed 5 source files + 3 test files (~1,600 lines). Mycmail has been superseded by Toak for agent messaging and Colony for coordination. Spidersan's core (registry, conflicts, merge-order, watcher) is unaffected. Specifically removed: `message-adapter.ts`, `mycmail-adapter.ts`, `git-messages.ts`, `local-messages.ts`, `message-factory.ts`, mycmail notification from `conflicts` and `stale` commands, and mycmail health check from `doctor`.
27
+ - `vitest.config.ts` — excludes `conflict-tier.test.ts` (uses `node:test` runner, not vitest)
28
+
29
+ ### Tests
30
+
31
+ - **139 tests, 31 test files** — up from 84 tests / ~20 files before this cycle. All pass.
32
+
33
+ — 4 new tables on treebird-runtime staging (`spider_decision_stream`, `spider_pattern_weights`, `spider_pattern_corrections`, `spider_agent_trust`). HMAC gate trigger on decision stream, optimistic version lock + weight ceiling (≤0.95) triggers on pattern weights, SECURITY DEFINER functions for decay/tombstone/resurface/trust-upsert. `last_promoted_at` column on `spider_pattern_weights` (SANGIT-08 curriculum sync). Migration: `20260504000000_realtime_apprenticeship.sql` · commit `7392776`.
34
+ - **pg_cron schedules for decay + tombstone** — `spider-decay-daily` (03:00 UTC daily) and `spider-tombstone-weekly` (04:00 UTC Sunday) registered on staging. Idempotent unschedule guard. Migration: `20260509000001_pg_cron_spider_decay_tombstone.sql` · authored by watsan-m5 · commit `d8d09f9`.
14
35
 
15
36
  ### Fixed
16
- - **RLS: spider_registries write policies now apply to anon+authenticated** — `CREATE POLICY` with no `TO` clause silently defaults to `service_role` in PostgreSQL; INSERT/UPDATE/DELETE policies dropped and recreated with explicit `TO anon, authenticated`. `registry-sync --push` was blocked by `42501` for all non-service-role clients. Both migration files (`20260219_spider_registries.sql`, `PASTE_THIS.sql`) patched with explicit role grants.
37
+ - **RLS: FOR ALL per-op split** — `service_role_write_patterns` and `service_role_write_trust` were `FOR ALL`; replaced with separate INSERT / UPDATE / DELETE policies per table (migration `20260509000000_sangit02_rls_and_uniqueness_fixes.sql` · commit `9843107`).
38
+ - **NULL uniqueness gap on `spider_agent_trust`** — `UNIQUE(actor_machine, repo)` did not prevent duplicate rows when `repo IS NULL` (PostgreSQL NULL ≠ NULL in UNIQUE constraints). `ON CONFLICT(actor_machine, repo)` silently skipped upsert for cross-repo trust rows. Fix: dropped composite constraint, replaced with two partial unique indexes (`idx_sat_machine_repo_scoped WHERE repo IS NOT NULL`, `idx_sat_machine_repo_global WHERE repo IS NULL`). Updated `spider_update_agent_trust` to branch on `p_repo IS NULL` with correct partial-index conflict targets.
39
+ - **`spider_apply_decay` RETURNING bug** — was returning post-update `base_weight` for both `old_weight` and `new_weight`. Fixed with CTE to capture pre-update weight before the UPDATE fires.
40
+ - **`SET search_path = ''`** added to all 4 SECURITY DEFINER functions and all 3 trigger functions (consistent hardening; prevents schema injection).
17
41
 
18
- ## [0.5.0] - 2026-03-24
42
+
43
+ - **CI: Security tests failing silently** — Added `git config user.name/email` so git-messages and git-injection tests pass in CI
44
+ - **CI: Lint failures swallowed** — Removed `|| true` and `continue-on-error: true` from lint step; lint now blocks CI
45
+ - **Publish: No tests before npm publish** — Added `npm test -- --run` to publish workflow so broken releases cannot ship
46
+ - **Publish: Bad version input ignored** — Removed `continue-on-error` from `npm version` step; invalid semver now fails the workflow
19
47
 
20
48
  ### Added
21
- - **Ecosystem scan**: `spidersan conflicts --ecosystem` multi-repo aggregate conflict scan across all registered repos (29 repos in default sweep)
22
- - **Colony integration**: `spidersan pulse`sync from Colony then show active conflicts; colony subscriber hooks; cross-machine cross-conflicts
23
- - **Queen command**: `spidersan queen`Mode 3 Queen Spider; dispatches sub-spidersan jobs in parallel across repos
24
- - **Activity log**: `spidersan log` structured activity event log; wired into `sync` and `conflicts` commands
25
- - **Daily bridge**: `spidersan daily` — branch-aware daily collab entry bridge (L2)
26
- - **PR conflict detection**: `spidersan conflicts --pr <num>` — detect conflicts against a specific open PR
27
- - **Stale auto-cleanup**: `spidersan stale --auto-cleanup` — non-interactive batch branch removal
28
- - **Cross-machine registry sync**: `spidersan registry-sync` — push/pull branch registry to/from Supabase (F1/F3)
29
- - **GitHub branch inventory**: `spidersan github-sync` — fetch branch/PR/CI status from GitHub (F2/F4)
30
- - **Sync advisor**: `spidersan sync-advisor` — scan repos and recommend push/pull actions
31
- - **TUI Dashboard** (Phase A): 4-panel blessed UI with ecosystem overview, conflict map, activity feed, and merge queue
32
- - **MCP Wave 3 ecosystem tools**: additional MCP server tools for ecosystem-level operations
33
- - **Toak MCP**: toak MCP server now loads correctly in Copilot CLI via `scripts/toak-mcp-wrapper.sh`
34
- - **Dawn script**: `bin/dawn.sh` — fleet agent session startup (git sync, vault, colony, inbox)
35
- - **Close script**: `bin/close.sh` — session close ceremony with pending task generation
36
- - **`.myctoak/registry.json`**: spidersan table ownership declaration for MycToak
49
+ - **CI: Node.js version matrix**Tests now run on Node 18, 20, and 22
50
+ - **CI: npm audit step**`npm audit --audit-level=high` runs on every build
51
+ - **CI: MCP server test job** New `test-mcp` job builds and tests the MCP server in CI
52
+ - **Publish: Dry-run verification**`npm publish --dry-run` validates package contents before actual publish
37
53
 
38
54
  ### Changed
39
- - **Dynamic path resolution** (Phase 2b): all hardcoded `/Users/freedbird/Dev/` paths replaced with `process.env.HOME` / `os.homedir()` fallbacks — ecosystem repos, treetop repos, queen paths, MCP wrapper scripts all portable
40
- - **Privacy**: `homedir()` fallback in `conflicts.ts`, `queen.ts`, `watch.ts` — safe to publish to npm
41
- - **TOAK_AGENT_ID**: now auto-injected via vault key — no manual prefix required
42
- - **ready-check**: WIP markers are advisory only; only branch file conflicts block merges
43
- - **Colony vars**: falls back to `SUPABASE_URL`/`SUPABASE_KEY` if `COLONY_*` vars not set
44
- - **Sync**: remote branches included in orphan detection
45
-
46
- ### Performance
47
- - **O(1) file overlap**: Set pre-computation in `buildConflictGraph`, `watch`, `torrent`, `ready-check` (was O(n²))
48
- - **AST traversal ~6× speedup**: TreeCursor-based traversal replacing recursive walk
49
- - **N+1 elimination**: `conflicts --wake` branchMap pre-fetch; `cleanup` bulk patch
50
- - **Batch Supabase**: `pushRegistry` batched upserts; stale notifications batched
51
- - **`findByFiles` optimization**: Array intersection via Set lookup in local storage
55
+ - **auto-register workflow**: Deduplicated `spidersan init` calls (3 1)
52
56
 
53
- ### Fixed
54
- - MCP: `isError: true` added to all 40 error response paths
55
- - Dashboard: non-TTY guard prevents crash in CI; suppress console bleed in TUI; `padEnd`/`escapeBlessed` ordering fix
56
- - Colony subscriber: TypeScript strict type fixes; `agent_label` added to `ColonySignalRow`
57
- - Sync advisor: suppress git stderr noise; include remote branches
58
- - Doctor: ignore comments in `.env` Supabase check; add `*.key` to `.gitignore`
59
- - `rebase-helper` command registered in CLI
60
- - Migrations: idempotent for shared DB deployment
61
- - Conflicts: exclude `node_modules` and build dirs from scan
62
-
63
- ### Security
64
- - **Path traversal**: `stale`, `rescue`, storage utilities — second-order path validation
65
- - **Command injection**: `git-messages.ts` hardened with `execFileSync`/argument arrays; `git shell executions` sanitized (#67)
66
- - **TUI markup injection**: `escapeBlessed()` applied throughout dashboard
67
- - **Input validation**: `register`, `conflicts --cleanup`, `rescue --symbols` — all input sources validated
68
- - **Prototype pollution**: `deepMerge` throws on `__proto__`/`constructor` keys
69
- - **execSync→execFileSync**: `register.ts` fully refactored; remaining `execSync` instances replaced
57
+ ### Documentation
58
+ - Test coverage analysis (`docs/TEST_COVERAGE_ANALYSIS.md`)
59
+ - CI/CD workflow coverage analysis (`docs/CI_CD_COVERAGE_ANALYSIS.md`)
70
60
 
71
61
  ## [0.4.5] - 2026-02-18
72
62
  ### Added
package/README.md CHANGED
@@ -19,7 +19,7 @@
19
19
 
20
20
  ## 🎯 The Problem
21
21
 
22
- **A multi coders or agents and multi branch work can result in a merging nightmare**
22
+ Multi-agent teams working across branches inevitably collide overlapping files, unclear merge order, rogue abandoned branches. The bigger the fleet, the worse the chaos.
23
23
 
24
24
  ## 🕷️ The Solution
25
25
 
@@ -106,6 +106,68 @@ spidersan merge-order
106
106
  | `spidersan log` | Show branch operation history (local activity log) |
107
107
  | `spidersan daily` | Show branch-relevant entries from daily collab logs |
108
108
  | `spidersan rebase-helper` | Detect and guide through local git rebase states |
109
+ | `spidersan git-watch` | Subscribe to GitHub webhook events — cross-machine push/PR/create/delete with AI conflict routing |
110
+
111
+ ### 🧠 AI Commands (Gemma 4 / LM Studio)
112
+
113
+ Ask spidersan questions about your repo state — powered by a local LLM with an embedded gitops playbook.
114
+
115
+ | Command | Description |
116
+ |---------|-------------|
117
+ | `spidersan context` | Build full repo context (registry, conflicts, colony, git) |
118
+ | `spidersan ask "<question>"` | Ask a question — get actionable gitops advice with commands |
119
+ | `spidersan advise` | Get proactive recommendations based on current repo state |
120
+ | `spidersan explain <branch>` | Explain what a branch does, its risk, and next steps |
121
+ | `spidersan ai-ping` | Test LLM connectivity and latency |
122
+
123
+ ```bash
124
+ # Get AI-powered advice
125
+ spidersan ask "I have 3 branches touching auth.ts — what should I do?"
126
+
127
+ # Proactive recommendations
128
+ spidersan advise
129
+
130
+ # Understand a mystery branch
131
+ spidersan explain feat/strange-refactor
132
+
133
+ # Flags
134
+ spidersan context --json --verbose --repo ~/Dev/other-repo
135
+ spidersan ask "merge strategy?" --provider copilot
136
+ ```
137
+
138
+ **Features:**
139
+ - 🏠 **Local-first**: Defaults to Gemma 4 26B on LM Studio (no API key needed)
140
+ - 🔒 **Privacy**: Code context never leaves your machine unless you opt into remote providers
141
+ - 📋 **18-scenario playbook**: PHC-optimized command reference covering all spidersan workflows
142
+ - 🔧 **MCP integration**: All AI commands available as MCP tools (27 total)
143
+ - 🧠 **Training data**: Use `/spidersan-gold` skill to mine gold pairs for fine-tuning — see [spidersan-ai](https://github.com/treebird7/spidersan-ai)
144
+
145
+ ### 🤖 Remote Bot (Cross-Machine Git Operations)
146
+
147
+ Trigger git operations on a remote machine from any agent — no SSH needed.
148
+
149
+ ```bash
150
+ # Start the bot daemon (listens for /commands via smalltoak)
151
+ envoak vault inject --key GIT_BOT_ENABLED -- spidersan bot
152
+
153
+ # One-shot: process pending commands and exit (good for cron)
154
+ spidersan bot --once
155
+
156
+ # Manage watched repos
157
+ spidersan bot add myrepo --path ~/Dev/myrepo --branch main --push src/
158
+ spidersan bot repos
159
+ spidersan bot remove myrepo
160
+ ```
161
+
162
+ **How it works:** An agent on M2 wants to push `spidersan-ai` from M5. They send `/push spidersan-ai` via smalltoak. The bot running on M5 picks it up, executes `git push`, and replies with the result. Tier-based permissions gate which agents can trigger which operations.
163
+
164
+ | Command | Description |
165
+ |---------|-------------|
166
+ | `spidersan bot` | Start remote git ops daemon (polls smalltoak) |
167
+ | `spidersan bot --once` | Process pending commands once and exit |
168
+ | `spidersan bot add` | Register a repo for bot management |
169
+ | `spidersan bot repos` | List managed repos |
170
+ | `spidersan bot remove` | Unregister a repo |
109
171
 
110
172
  ### 🌐 Multi-Repo & Cloud Commands
111
173
 
@@ -118,8 +180,38 @@ spidersan merge-order
118
180
  | `spidersan cross-conflicts` | Detect file conflicts across machines via Supabase |
119
181
  | `spidersan github-sync` | Fetch branch/PR/CI status from GitHub for configured repos |
120
182
  | `spidersan pulse` | Sync from Colony then show active conflicts (quick health-check) |
183
+ | `spidersan pulse --remote-drift` | Fetch origin + detect remote drift zone; cross-ref against registry and unstaged files |
184
+
185
+ ### 📡 Remote Drift Detection
186
+
187
+ `spidersan pulse --remote-drift` closes the gap between registry-level conflict detection and single-agent divergence:
188
+
189
+ ```bash
190
+ # Check if origin has advanced past local HEAD
191
+ spidersan pulse --remote-drift
192
+
193
+ # Machine-readable output
194
+ spidersan pulse --remote-drift --json
195
+
196
+ # Post alert to Hub if registered or unstaged files are in the drift zone
197
+ spidersan pulse --remote-drift --hub-sync
198
+
199
+ # Exit 1 if any drift risk — use as a pre-push gate
200
+ spidersan pulse --remote-drift --strict
201
+
202
+ # As a pre-push hook:
203
+ # .git/hooks/pre-push
204
+ spidersan pulse --remote-drift --strict || { echo "Fetch + resolve drift first"; exit 1; }
205
+ ```
206
+
207
+ **What it detects:**
208
+ - 📥 Remote commits that local doesn't have (the *drift zone*)
209
+ - 🟠/🔴 Registered files in the drift zone → rebase conflict risk, classified by tier
210
+ - ⚠️ Unstaged tracked files in the drift zone → `git rebase --continue` blocker risk (even after resolving conflict markers — fix: `git checkout HEAD -- <file>`)
211
+
212
+ **Graceful degradation:** offline, detached HEAD, mid-rebase, no remote branch — all print a warning and continue without exit 1.
213
+
121
214
 
122
- ### 👑 Queen Mode (Parallel Dispatch)
123
215
 
124
216
  Dispatch sub-spidersans to run ground jobs across multiple repos in parallel:
125
217
 
@@ -194,7 +286,74 @@ spidersan auto status
194
286
  spidersan auto stop
195
287
  ```
196
288
 
197
- ### 🤖 GitHub Actions Auto-Register (NEW!)
289
+ ### 🔔 git-watch — GitHub Webhook Notifications
290
+
291
+ Cross-machine push/delete notifications via a GitHub org webhook → Supabase edge function → `spidersan_git_events` table. Each machine runs a polling daemon that reacts to events: auto-abandons deleted branches in the registry, warns to `spidersan pulse` on pushes.
292
+
293
+ **Infrastructure (one-time setup):**
294
+
295
+ 1. **Deploy edge function** to your Supabase runtime project:
296
+ ```bash
297
+ supabase functions deploy spidersan-webhook --no-verify-jwt --project-ref <runtime-ref>
298
+ ```
299
+
300
+ 2. **Set edge function secret** (`SPIDERSAN_WEBHOOK_SECRET`) via the Supabase dashboard or CLI.
301
+
302
+ 3. **Apply the migration** (`supabase/migrations/20260421000000_spidersan_git_events.sql`) to your runtime project.
303
+
304
+ 4. **Create a GitHub org webhook:**
305
+ - URL: `https://<runtime-ref>.supabase.co/functions/v1/spidersan-webhook`
306
+ - Content type: `application/json`
307
+ - Secret: your `SPIDERSAN_WEBHOOK_SECRET` value
308
+ - Events: **Pushes**, **Pull requests**, **Branch or tag creation**, **Branch or tag deletion**
309
+
310
+ **Running the daemon on each machine:**
311
+
312
+ ```bash
313
+ # One-shot catch-up (useful for cron / CI)
314
+ SUPABASE_URL=https://<runtime-ref>.supabase.co \
315
+ SUPABASE_KEY=<anon-key> \
316
+ spidersan git-watch --once
317
+
318
+ # Persistent daemon (poll every 30s)
319
+ SUPABASE_URL=https://<runtime-ref>.supabase.co \
320
+ SUPABASE_KEY=<anon-key> \
321
+ spidersan git-watch --interval 30000
322
+ ```
323
+
324
+ **macOS LaunchAgent (keep-alive daemon):**
325
+
326
+ ```xml
327
+ <!-- ~/Library/LaunchAgents/com.treebird.spidersan-git-watch.plist -->
328
+ <key>ProgramArguments</key>
329
+ <array>
330
+ <string>/usr/local/bin/node</string>
331
+ <string>/path/to/spidersan-oss/dist/bin/spidersan.js</string>
332
+ <string>git-watch</string>
333
+ <string>--interval</string>
334
+ <string>30000</string>
335
+ </array>
336
+ <key>EnvironmentVariables</key>
337
+ <dict>
338
+ <key>SUPABASE_URL</key><string>https://<runtime-ref>.supabase.co</string>
339
+ <key>SUPABASE_KEY</key><string><anon-key></string>
340
+ </dict>
341
+ ```
342
+
343
+ ```bash
344
+ launchctl load ~/Library/LaunchAgents/com.treebird.spidersan-git-watch.plist
345
+ tail -f /tmp/spidersan-git-watch.log
346
+ ```
347
+
348
+ **What each event does:**
349
+
350
+ | Event | Action |
351
+ |-------|--------|
352
+ | `push` | Logs to `activity.jsonl`, warns to run `spidersan pulse`. Detects new gold pairs in `sql-tree/pairs/` and `ts-tree/pairs/` — emits `🌱 tree_pairs_ready` cue to `~/.spidersan/git-events-pending.jsonl` |
353
+ | `delete` | Marks branch `abandoned` in registry, archives to `~/.spidersan/archive.jsonl` |
354
+ | `pull_request` / `create` | Logged only |
355
+
356
+ ### 🤖 GitHub Actions Auto-Register
198
357
 
199
358
  **Zero-effort branch registration via GitHub workflow**
200
359
 
@@ -251,6 +410,82 @@ spidersan rescue --abandon path/to/file.ts
251
410
 
252
411
  ---
253
412
 
413
+ ## 🪝 Claude Code Hook Recipes
414
+
415
+ Wire Spidersan into Claude Code's hook system so conflict checks, AI advice, and registry syncs happen **automatically** — no agent needs to remember to run them.
416
+
417
+ ### How it works
418
+
419
+ Claude Code's `~/.claude/settings.json` supports `PreToolUse` hooks that fire before any Bash command and can hard-block execution (returning `continue: false`) or inject context back to the model. Spidersan's `--strict` flag exits with code `1` on TIER 2+ conflicts, making it a natural hard-stop gate.
420
+
421
+ ### The full recipe
422
+
423
+ Add these hooks to `~/.claude/settings.json`:
424
+
425
+ ```json
426
+ {
427
+ "hooks": {
428
+ "PreToolUse": [
429
+ {
430
+ "matcher": "Bash",
431
+ "hooks": [
432
+ {
433
+ "type": "command",
434
+ "command": "jq -r '.tool_input.command // empty' | grep -qE '\\brm\\b' && jq -n '{\"continue\":false,\"stopReason\":\"🛑 rm blocked — verify paths and request explicit permission.\"}' || echo '{}'"
435
+ },
436
+ {
437
+ "type": "command",
438
+ "command": "bash -c 'cmd=$(jq -r \".tool_input.command // empty\"); if echo \"$cmd\" | grep -qE \"\\\\bgit\\\\s+push\\\\b\"; then if ! spidersan conflicts --tier 2 --strict 2>/dev/null; then jq -n \"{\\\"continue\\\":false,\\\"stopReason\\\":\\\"🕷️ Spidersan: TIER 2+ conflict detected. Run spidersan conflicts to review before pushing.\\\"}\"; exit 0; fi; advice=$(spidersan advise 2>/dev/null | head -30); [ -n \"$advice\" ] && jq -n --arg a \"$advice\" \"{\\\"hookSpecificOutput\\\":{\\\"hookEventName\\\":\\\"PreToolUse\\\",\\\"additionalContext\\\":\\\"🕷️ Spidersan pre-push advice:\\\\n\\($a)\\\"}}\" || echo \"{}\"; elif echo \"$cmd\" | grep -qE \"\\\\bgit\\\\s+(merge|rebase)\\\\b\"; then if ! spidersan conflicts --tier 3 --strict 2>/dev/null; then jq -n \"{\\\"continue\\\":false,\\\"stopReason\\\":\\\"🕷️ Spidersan: TIER 3 critical conflict detected. Run spidersan conflicts --tier 3 before merging.\\\"}\"; exit 0; fi; echo \"{}\"; else echo \"{}\"; fi'"
439
+ }
440
+ ]
441
+ }
442
+ ],
443
+ "PostToolUse": [
444
+ {
445
+ "matcher": "Bash",
446
+ "hooks": [
447
+ {
448
+ "type": "command",
449
+ "command": "bash -c 'cmd=$(jq -r \".tool_input.command // empty\"); echo \"$cmd\" | grep -qE \"\\\\bgit\\\\s+push\\\\b\" && spidersan registry-sync --push 2>/dev/null &; echo \"{}\"'",
450
+ "async": true
451
+ }
452
+ ]
453
+ }
454
+ ]
455
+ }
456
+ }
457
+ ```
458
+
459
+ ### What each hook does
460
+
461
+ | Hook | Trigger | Action |
462
+ |------|---------|--------|
463
+ | `rm` guard | Any `rm` command | **Hard block** — requires explicit permission |
464
+ | Pre-push conflict check | `git push` | Runs `spidersan conflicts --tier 2 --strict` — **hard blocks** if TIER 2+ found |
465
+ | Pre-push AI advice | `git push` (after conflict check passes) | Runs `spidersan advise`, injects recommendations into model context |
466
+ | Pre-merge conflict check | `git merge` / `git rebase` | Runs `spidersan conflicts --tier 3 --strict` — **hard blocks** on critical files |
467
+ | Post-push registry sync | `git push` (success) | Runs `spidersan registry-sync --push` async — keeps fleet registry fresh |
468
+
469
+ ### Conflict tiers
470
+
471
+ | Tier | Threshold | Example files | Gate used on |
472
+ |------|-----------|---------------|--------------|
473
+ | TIER 1 WARN | Low risk | `.md`, `.css`, `.json` | Not blocked |
474
+ | TIER 2 PAUSE | Medium risk | `package.json`, migrations, types | `git push` |
475
+ | TIER 3 BLOCK | Critical | `.env`, auth files, core lib | `git merge`, `git rebase` |
476
+
477
+ ### Installing
478
+
479
+ ```bash
480
+ # Merge into your global settings (preserves existing config)
481
+ cp ~/.claude/settings.json ~/.claude/settings.json.bak
482
+ # Then add the hooks block above — or use /update-config in Claude Code
483
+ ```
484
+
485
+ The hooks are global (`~/.claude/settings.json`) so they apply across all projects automatically. Every agent on the machine benefits without per-repo setup.
486
+
487
+ ---
488
+
254
489
  ## 📖 Documentation
255
490
 
256
491
  - [Core Guide](docs/CORE.md) - Public feature set and core workflows
@@ -1 +1 @@
1
- {"version":3,"file":"spidersan.d.ts","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;AA8CvB,eAAO,MAAM,WAAW,eAAkB,CAAC"}
1
+ {"version":3,"file":"spidersan.d.ts","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,eAAe,CAAC;AAyDvB,eAAO,MAAM,WAAW,eAAkB,CAAC"}
@@ -7,7 +7,7 @@
7
7
  import 'dotenv/config';
8
8
  import { Command } from 'commander';
9
9
  import { createRequire } from 'module';
10
- import { initCommand, registerCommand, listCommand, conflictsCommand, mergeOrderCommand, readyCheckCommand, dependsCommand, staleCommand, cleanupCommand, rescueCommand, abandonCommand, mergedCommand, syncCommand, watchCommand, doctorCommand, configCommand, autoCommand, welcomeCommand, registrySyncCommand, crossConflictsCommand, pulseCommand, torrentCommand, queenCommand, githubSyncCommand, syncAdvisorCommand, dashboardCommand, rebaseHelperCommand, logCommand, dailyCommand, loadEcosystemCommands, getEcosystemStatus, } from '../commands/index.js';
10
+ import { initCommand, registerCommand, listCommand, conflictsCommand, mergeOrderCommand, readyCheckCommand, dependsCommand, staleCommand, cleanupCommand, rescueCommand, abandonCommand, mergedCommand, syncCommand, watchCommand, doctorCommand, configCommand, autoCommand, welcomeCommand, registrySyncCommand, crossConflictsCommand, pulseCommand, gitWatchCommand, fleetStatusCommand, torrentCommand, queenCommand, botCommand, githubSyncCommand, syncAdvisorCommand, dashboardCommand, rebaseHelperCommand, logCommand, dailyCommand, contextCommand, askCommand, adviseCommand, explainCommand, aiPingCommand, aiSetupCommand, aiTelemetryCommand, checkOptOutCommand, loadEcosystemCommands, getEcosystemStatus, } from '../commands/index.js';
11
11
  import { checkForUpdates } from '../lib/update-check.js';
12
12
  // Read version from package.json dynamically
13
13
  const require = createRequire(import.meta.url);
@@ -73,14 +73,26 @@ program.addCommand(welcomeCommand);
73
73
  program.addCommand(registrySyncCommand);
74
74
  program.addCommand(crossConflictsCommand);
75
75
  program.addCommand(pulseCommand);
76
+ program.addCommand(gitWatchCommand);
77
+ program.addCommand(fleetStatusCommand);
76
78
  program.addCommand(torrentCommand);
77
79
  program.addCommand(queenCommand);
80
+ program.addCommand(botCommand);
78
81
  program.addCommand(githubSyncCommand);
79
82
  program.addCommand(syncAdvisorCommand());
80
83
  program.addCommand(dashboardCommand);
81
84
  program.addCommand(rebaseHelperCommand);
82
85
  logCommand(program);
83
86
  dailyCommand(program);
87
+ // AI Core commands
88
+ program.addCommand(contextCommand);
89
+ program.addCommand(askCommand);
90
+ program.addCommand(adviseCommand);
91
+ program.addCommand(explainCommand);
92
+ program.addCommand(aiPingCommand);
93
+ program.addCommand(aiSetupCommand);
94
+ program.addCommand(aiTelemetryCommand);
95
+ program.addCommand(checkOptOutCommand);
84
96
  async function main() {
85
97
  const ecosystemCommands = await loadEcosystemCommands();
86
98
  ecosystemCommands.forEach((command) => {
@@ -1 +1 @@
1
- {"version":3,"file":"spidersan.js","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spidersan.js","sourceRoot":"","sources":["../../src/bin/spidersan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"abandon.d.ts","sourceRoot":"","sources":["../../src/commands/abandon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,eAAO,MAAM,cAAc,SAqCrB,CAAC"}
1
+ {"version":3,"file":"abandon.d.ts","sourceRoot":"","sources":["../../src/commands/abandon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,cAAc,SAqCrB,CAAC"}
@@ -4,17 +4,9 @@
4
4
  * Mark a branch as abandoned.
5
5
  */
6
6
  import { Command } from 'commander';
7
- import { execFileSync } from 'child_process';
8
7
  import { getStorage } from '../storage/index.js';
9
8
  import { logActivity } from '../lib/activity.js';
10
- function getCurrentBranch() {
11
- try {
12
- return execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { encoding: 'utf-8' }).trim();
13
- }
14
- catch {
15
- throw new Error('Not in a git repository');
16
- }
17
- }
9
+ import { getCurrentBranch } from '../lib/git.js';
18
10
  export const abandonCommand = new Command('abandon')
19
11
  .description('Mark a branch as abandoned')
20
12
  .argument('[branch]', 'Branch to abandon (default: current)')
@@ -1 +1 @@
1
- {"version":3,"file":"abandon.js","sourceRoot":"","sources":["../../src/commands/abandon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,SAAS,gBAAgB;IACrB,IAAI,CAAC;QACD,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACpG,CAAC;IAAC,MAAM,CAAC;QACL,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KAC/C,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC5D,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;KAC1C,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAAO,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAC;IAEnD,yBAAyB;IACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,aAAa,UAAU,0BAA0B,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAC9D,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAErD,IAAI,OAAO,EAAE,CAAC;QACV,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,wBAAwB,UAAU,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"abandon.js","sourceRoot":"","sources":["../../src/commands/abandon.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KAC/C,WAAW,CAAC,4BAA4B,CAAC;KACzC,QAAQ,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC5D,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;KAC1C,MAAM,CAAC,WAAW,EAAE,+CAA+C,CAAC;KACpE,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAAO,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAC;IAEnD,yBAAyB;IACzB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,aAAa,UAAU,0BAA0B,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QAC9D,OAAO;IACX,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAErD,IAAI,OAAO,EAAE,CAAC;QACV,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACJ,OAAO,CAAC,KAAK,CAAC,wBAAwB,UAAU,IAAI,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * spidersan ask / advise / explain / ai-setup — AI-powered gitops reasoning
3
+ *
4
+ * Thin CLI wrappers over reason() from the AI core.
5
+ * Builds context, sends to LLM (Gemma 4 default), streams response.
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare const askCommand: Command;
9
+ export declare const adviseCommand: Command;
10
+ export declare const explainCommand: Command;
11
+ export declare const aiPingCommand: Command;
12
+ export declare const aiSetupCommand: Command;
13
+ export declare const aiTelemetryCommand: Command;
14
+ export declare const checkOptOutCommand: Command;
15
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqCpC,eAAO,MAAM,UAAU,SAiCnB,CAAC;AAIL,eAAO,MAAM,aAAa,SA+BtB,CAAC;AAIL,eAAO,MAAM,cAAc,SA0BvB,CAAC;AAIL,eAAO,MAAM,aAAa,SAgBtB,CAAC;AAmGL,eAAO,MAAM,cAAc,SAsNvB,CAAC;AAIL,eAAO,MAAM,kBAAkB,SAkC3B,CAAC;AAML,eAAO,MAAM,kBAAkB,SAkC3B,CAAC"}