@launchsecure/launch-kit 0.0.28 → 0.0.30

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 (195) hide show
  1. package/dist/beacon/beacon.mjs +2759 -1246
  2. package/dist/beacon/beacon.mjs.map +1 -1
  3. package/dist/beacon/beacon.umd.js +710 -95
  4. package/dist/beacon/beacon.umd.js.map +1 -1
  5. package/dist/beacon/types/core.d.ts +14 -0
  6. package/dist/beacon/types/core.d.ts.map +1 -0
  7. package/dist/beacon/types/ctx.d.ts +14 -0
  8. package/dist/beacon/types/ctx.d.ts.map +1 -0
  9. package/dist/beacon/types/element.d.ts +16 -48
  10. package/dist/beacon/types/element.d.ts.map +1 -1
  11. package/dist/beacon/types/index.d.ts +5 -4
  12. package/dist/beacon/types/index.d.ts.map +1 -1
  13. package/dist/beacon/types/internal/annotation-cache.d.ts +10 -0
  14. package/dist/beacon/types/internal/annotation-cache.d.ts.map +1 -0
  15. package/dist/beacon/types/internal/element-capture.d.ts +19 -0
  16. package/dist/beacon/types/internal/element-capture.d.ts.map +1 -0
  17. package/dist/beacon/types/internal/event-buffer.d.ts +16 -0
  18. package/dist/beacon/types/internal/event-buffer.d.ts.map +1 -0
  19. package/dist/beacon/types/internal/framework-detect.d.ts +6 -0
  20. package/dist/beacon/types/internal/framework-detect.d.ts.map +1 -0
  21. package/dist/beacon/types/internal/markers.d.ts +17 -0
  22. package/dist/beacon/types/internal/markers.d.ts.map +1 -0
  23. package/dist/beacon/types/internal/monitor/capture-dom.d.ts +14 -0
  24. package/dist/beacon/types/internal/monitor/capture-dom.d.ts.map +1 -0
  25. package/dist/beacon/types/internal/monitor/capture-network.d.ts +12 -0
  26. package/dist/beacon/types/internal/monitor/capture-network.d.ts.map +1 -0
  27. package/dist/beacon/types/internal/monitor/overlay.d.ts +16 -0
  28. package/dist/beacon/types/internal/monitor/overlay.d.ts.map +1 -0
  29. package/dist/beacon/types/internal/monitor/session.d.ts +41 -0
  30. package/dist/beacon/types/internal/monitor/session.d.ts.map +1 -0
  31. package/dist/beacon/types/{monitor → internal/monitor}/transport.d.ts +3 -3
  32. package/dist/beacon/types/internal/monitor/transport.d.ts.map +1 -0
  33. package/dist/beacon/types/{monitor/types.d.ts → internal/monitor/wire.d.ts} +69 -27
  34. package/dist/beacon/types/internal/monitor/wire.d.ts.map +1 -0
  35. package/dist/beacon/types/{ui → internal}/pick-mode-overlay.d.ts +4 -5
  36. package/dist/beacon/types/internal/pick-mode-overlay.d.ts.map +1 -0
  37. package/dist/beacon/types/{capture → internal}/picker.d.ts +0 -1
  38. package/dist/beacon/types/internal/picker.d.ts.map +1 -0
  39. package/dist/beacon/types/{ui → internal}/pin-popover.d.ts +1 -1
  40. package/dist/beacon/types/internal/pin-popover.d.ts.map +1 -0
  41. package/dist/beacon/types/{capture → internal}/screenshot.d.ts +1 -0
  42. package/dist/beacon/types/internal/screenshot.d.ts.map +1 -0
  43. package/dist/beacon/types/internal/selector.d.ts.map +1 -0
  44. package/dist/beacon/types/plugins/domEle.d.ts +14 -0
  45. package/dist/beacon/types/plugins/domEle.d.ts.map +1 -0
  46. package/dist/beacon/types/plugins/domSS.d.ts +8 -0
  47. package/dist/beacon/types/plugins/domSS.d.ts.map +1 -0
  48. package/dist/beacon/types/plugins/errors.d.ts +3 -0
  49. package/dist/beacon/types/plugins/errors.d.ts.map +1 -0
  50. package/dist/beacon/types/plugins/index.d.ts +8 -0
  51. package/dist/beacon/types/plugins/index.d.ts.map +1 -0
  52. package/dist/beacon/types/plugins/liveMonitor.d.ts +14 -0
  53. package/dist/beacon/types/plugins/liveMonitor.d.ts.map +1 -0
  54. package/dist/beacon/types/plugins/metadata.d.ts +3 -0
  55. package/dist/beacon/types/plugins/metadata.d.ts.map +1 -0
  56. package/dist/beacon/types/registry.d.ts +33 -0
  57. package/dist/beacon/types/registry.d.ts.map +1 -0
  58. package/dist/beacon/types/styles.d.ts +8 -0
  59. package/dist/beacon/types/styles.d.ts.map +1 -0
  60. package/dist/beacon/types/transport.d.ts +3 -0
  61. package/dist/beacon/types/transport.d.ts.map +1 -0
  62. package/dist/beacon/types/types.d.ts +152 -68
  63. package/dist/beacon/types/types.d.ts.map +1 -1
  64. package/dist/beacon/types/ui/dialog.d.ts +53 -0
  65. package/dist/beacon/types/ui/dialog.d.ts.map +1 -0
  66. package/dist/beacon/types/ui/form.d.ts +7 -0
  67. package/dist/beacon/types/ui/form.d.ts.map +1 -0
  68. package/dist/beacon/types/ui/overlay.d.ts +6 -0
  69. package/dist/beacon/types/ui/overlay.d.ts.map +1 -0
  70. package/dist/deck-client/assets/{_baseUniq-W2JQDmje.js → _baseUniq-DCt2IMRR.js} +1 -1
  71. package/dist/deck-client/assets/{arc-DIBWAId9.js → arc-h-ifqmNR.js} +1 -1
  72. package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-CAIRMvJK.js → architectureDiagram-Q4EWVU46-C9dITSPv.js} +1 -1
  73. package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-BeNaNiOi.js → blockDiagram-DXYQGD6D-BHuJT34t.js} +1 -1
  74. package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-B9Ozi62h.js → c4Diagram-AHTNJAMY-CpvMGtDG.js} +1 -1
  75. package/dist/deck-client/assets/channel-2PZVMiXf.js +1 -0
  76. package/dist/deck-client/assets/{chunk-4BX2VUAB-D7AZ47dt.js → chunk-4BX2VUAB-B6md1VIm.js} +1 -1
  77. package/dist/deck-client/assets/{chunk-4TB4RGXK-DnVnNPcI.js → chunk-4TB4RGXK-BmEnX8ik.js} +1 -1
  78. package/dist/deck-client/assets/{chunk-55IACEB6-UKYs-YNd.js → chunk-55IACEB6-BZPUyZAZ.js} +1 -1
  79. package/dist/deck-client/assets/{chunk-EDXVE4YY-D43b-SKn.js → chunk-EDXVE4YY-BWwNUK-l.js} +1 -1
  80. package/dist/deck-client/assets/{chunk-FMBD7UC4-QzBAoyyW.js → chunk-FMBD7UC4-o7gSppGI.js} +1 -1
  81. package/dist/deck-client/assets/{chunk-OYMX7WX6-Cjif4r6W.js → chunk-OYMX7WX6-C4KoTL5p.js} +1 -1
  82. package/dist/deck-client/assets/{chunk-QZHKN3VN-CqLDirEI.js → chunk-QZHKN3VN-jkf68sDs.js} +1 -1
  83. package/dist/deck-client/assets/{chunk-YZCP3GAM-_FQvmMs4.js → chunk-YZCP3GAM-Cd4yBE7o.js} +1 -1
  84. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-Bt8xBAof.js +1 -0
  85. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-Bt8xBAof.js +1 -0
  86. package/dist/deck-client/assets/clone-BHQryoDl.js +1 -0
  87. package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-rfrocesE.js → cose-bilkent-S5V4N54A-DeGFUgAV.js} +1 -1
  88. package/dist/deck-client/assets/{dagre-KV5264BT-Bv_7DJat.js → dagre-KV5264BT-ekcYJuUV.js} +1 -1
  89. package/dist/deck-client/assets/{diagram-5BDNPKRD-4F1414G5.js → diagram-5BDNPKRD-YHPk4rV2.js} +1 -1
  90. package/dist/deck-client/assets/{diagram-G4DWMVQ6-C4-Pszqm.js → diagram-G4DWMVQ6-DM-JCd_B.js} +1 -1
  91. package/dist/deck-client/assets/{diagram-MMDJMWI5-B647TIx9.js → diagram-MMDJMWI5-l5FK1ybk.js} +1 -1
  92. package/dist/deck-client/assets/{diagram-TYMM5635-BFAqpezd.js → diagram-TYMM5635-CIN4_1-j.js} +1 -1
  93. package/dist/deck-client/assets/{erDiagram-SMLLAGMA-BfBfrJOC.js → erDiagram-SMLLAGMA-MyinSkEl.js} +1 -1
  94. package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-DX9YAYes.js → flowDiagram-DWJPFMVM-Dk8nn42x.js} +1 -1
  95. package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-DCuiy7wF.js → ganttDiagram-T4ZO3ILL-BU1ihicu.js} +1 -1
  96. package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-CGp1IXUh.js → gitGraphDiagram-UUTBAWPF-BjsTL13C.js} +1 -1
  97. package/dist/deck-client/assets/{graph-B7g8aoxv.js → graph-DJmh-xi7.js} +1 -1
  98. package/dist/deck-client/assets/{index-Dg1r-WSN.js → index-KsShfCV-.js} +3 -3
  99. package/dist/deck-client/assets/{infoDiagram-42DDH7IO-L3fahMkF.js → infoDiagram-42DDH7IO-Dxvy_RB4.js} +1 -1
  100. package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-aS_EjWBZ.js → ishikawaDiagram-UXIWVN3A-DPOaNF1l.js} +1 -1
  101. package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-djTSQZF9.js → journeyDiagram-VCZTEJTY-DMew3K5c.js} +1 -1
  102. package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-CcTHo4CM.js → kanban-definition-6JOO6SKY-csciJFuk.js} +1 -1
  103. package/dist/deck-client/assets/{layout-mEJiadb7.js → layout-Dg4yyms2.js} +1 -1
  104. package/dist/deck-client/assets/{linear-XgTKqyRu.js → linear-BA3zU6gq.js} +1 -1
  105. package/dist/deck-client/assets/{min-Ct9jZdpd.js → min-lz-Ird-p.js} +1 -1
  106. package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-BaFxCGNU.js → mindmap-definition-QFDTVHPH-CCEN8OQV.js} +1 -1
  107. package/dist/deck-client/assets/{pieDiagram-DEJITSTG-CIbYYjtw.js → pieDiagram-DEJITSTG-DM6n1HY7.js} +1 -1
  108. package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-D9EtCOvh.js → quadrantDiagram-34T5L4WZ-_ULoR66n.js} +1 -1
  109. package/dist/deck-client/assets/{requirementDiagram-MS252O5E-xeni9eVG.js → requirementDiagram-MS252O5E-BuwJs7Tn.js} +1 -1
  110. package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-LYeknz9h.js → sankeyDiagram-XADWPNL6-BEsuzkW4.js} +1 -1
  111. package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-RDbsKFZf.js → sequenceDiagram-FGHM5R23-CP2H0YWf.js} +1 -1
  112. package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-BH1Zjglk.js → stateDiagram-FHFEXIEX-B5Gw_NNL.js} +1 -1
  113. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-4T4wMDXr.js +1 -0
  114. package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-IFXxKptt.js → timeline-definition-GMOUNBTQ-DsoYydQa.js} +1 -1
  115. package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-D-sLkQs9.js → vennDiagram-DHZGUBPP-Dz8JT_ob.js} +1 -1
  116. package/dist/deck-client/assets/wardley-RL74JXVD-DGHQ_Ijv.js +162 -0
  117. package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-BTjjuDU3.js → wardleyDiagram-NUSXRM2D-DN1LJMB1.js} +1 -1
  118. package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-AYbv92n-.js → xychartDiagram-5P7HB3ND-nb0oSfrQ.js} +1 -1
  119. package/dist/deck-client/index.html +1 -1
  120. package/dist/server/beacon-monitor-entry.js +548 -6
  121. package/dist/server/chart-serve.js +920 -249
  122. package/dist/server/cli.js +1599 -595
  123. package/dist/server/course-entry.js +3 -3
  124. package/dist/server/graph-mcp-entry.js +1361 -394
  125. package/dist/server/init-entry.js +799 -195
  126. package/dist/server/orbit-entry.js +135 -7
  127. package/dist/server/parse-worker-entry.js +918 -247
  128. package/package.json +3 -2
  129. package/scaffolds/ls-marketplace/.claude-plugin/marketplace.json +4 -4
  130. package/scaffolds/ls-marketplace/plugins/{ls → kit}/.claude-plugin/plugin.json +1 -10
  131. package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/activate-beacon.md +2 -2
  132. package/scaffolds/ls-marketplace/plugins/kit/commands/activate-statusline.md +46 -0
  133. package/scaffolds/ls-marketplace/plugins/kit/commands/deactivate-statusline.md +34 -0
  134. package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/standup.md +52 -38
  135. package/scaffolds/ls-marketplace/plugins/kit/skills/beacon-array.md +107 -0
  136. package/scaffolds/ls-marketplace/plugins/kit/skills/beacon-clear.md +94 -0
  137. package/scaffolds/ls-marketplace/plugins/kit/skills/beacon-pulse.md +82 -0
  138. package/scaffolds/ls-marketplace/plugins/kit/skills/beacon-scan.md +66 -0
  139. package/scaffolds/ls-marketplace/plugins/kit/skills/blast-radius.md +101 -0
  140. package/scaffolds/ls-marketplace/plugins/kit/skills/brief.md +112 -0
  141. package/scaffolds/ls-marketplace/plugins/kit/skills/course.md +84 -0
  142. package/scaffolds/ls-marketplace/plugins/kit/skills/debug.md +92 -0
  143. package/scaffolds/ls-marketplace/plugins/kit/skills/deploy-check.md +160 -0
  144. package/scaffolds/ls-marketplace/plugins/kit/skills/diagram.md +134 -0
  145. package/scaffolds/ls-marketplace/plugins/kit/skills/orbit.md +87 -0
  146. package/scaffolds/ls-marketplace/plugins/kit/skills/prototype.md +90 -0
  147. package/scaffolds/ls-marketplace/plugins/kit/skills/recall.md +83 -0
  148. package/scaffolds/ls-marketplace/plugins/{ls/commands → kit/skills}/show-mcp-status.md +8 -8
  149. package/scaffolds/ls-marketplace/plugins/kit/skills/wireframe.md +70 -0
  150. package/scaffolds/statusline/statusline-mcp.sh +204 -0
  151. package/scaffolds/statusline/statusline-wrapper.sh +50 -0
  152. package/dist/beacon/types/capture/element.d.ts +0 -3
  153. package/dist/beacon/types/capture/element.d.ts.map +0 -1
  154. package/dist/beacon/types/capture/events.d.ts +0 -20
  155. package/dist/beacon/types/capture/events.d.ts.map +0 -1
  156. package/dist/beacon/types/capture/framework.d.ts +0 -3
  157. package/dist/beacon/types/capture/framework.d.ts.map +0 -1
  158. package/dist/beacon/types/capture/metadata.d.ts +0 -3
  159. package/dist/beacon/types/capture/metadata.d.ts.map +0 -1
  160. package/dist/beacon/types/capture/overlay.d.ts +0 -7
  161. package/dist/beacon/types/capture/overlay.d.ts.map +0 -1
  162. package/dist/beacon/types/capture/picker.d.ts.map +0 -1
  163. package/dist/beacon/types/capture/screenshot.d.ts.map +0 -1
  164. package/dist/beacon/types/capture/selector.d.ts.map +0 -1
  165. package/dist/beacon/types/monitor/dom.d.ts +0 -13
  166. package/dist/beacon/types/monitor/dom.d.ts.map +0 -1
  167. package/dist/beacon/types/monitor/index.d.ts +0 -19
  168. package/dist/beacon/types/monitor/index.d.ts.map +0 -1
  169. package/dist/beacon/types/monitor/network.d.ts +0 -12
  170. package/dist/beacon/types/monitor/network.d.ts.map +0 -1
  171. package/dist/beacon/types/monitor/transport.d.ts.map +0 -1
  172. package/dist/beacon/types/monitor/types.d.ts.map +0 -1
  173. package/dist/beacon/types/transport/submit.d.ts +0 -3
  174. package/dist/beacon/types/transport/submit.d.ts.map +0 -1
  175. package/dist/beacon/types/ui/button.d.ts +0 -2
  176. package/dist/beacon/types/ui/button.d.ts.map +0 -1
  177. package/dist/beacon/types/ui/drawer.d.ts +0 -33
  178. package/dist/beacon/types/ui/drawer.d.ts.map +0 -1
  179. package/dist/beacon/types/ui/icons.d.ts +0 -9
  180. package/dist/beacon/types/ui/icons.d.ts.map +0 -1
  181. package/dist/beacon/types/ui/monitor-panel.d.ts +0 -19
  182. package/dist/beacon/types/ui/monitor-panel.d.ts.map +0 -1
  183. package/dist/beacon/types/ui/pick-mode-overlay.d.ts.map +0 -1
  184. package/dist/beacon/types/ui/pin-popover.d.ts.map +0 -1
  185. package/dist/deck-client/assets/channel-CRdozqbp.js +0 -1
  186. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-lIZMp57W.js +0 -1
  187. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-lIZMp57W.js +0 -1
  188. package/dist/deck-client/assets/clone-BtWeSTyJ.js +0 -1
  189. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-BrV78NDR.js +0 -1
  190. package/dist/deck-client/assets/wardley-RL74JXVD-C010F8l4.js +0 -162
  191. package/scaffolds/ls-marketplace/plugins/ls/commands/beacon-array.md +0 -92
  192. package/scaffolds/ls-marketplace/plugins/ls/commands/beacon-clear.md +0 -68
  193. package/scaffolds/ls-marketplace/plugins/ls/commands/beacon-pulse.md +0 -80
  194. package/scaffolds/ls-marketplace/plugins/ls/commands/beacon-scan.md +0 -62
  195. /package/dist/beacon/types/{capture → internal}/selector.d.ts +0 -0
@@ -0,0 +1,160 @@
1
+ ---
2
+ description: Production-readiness check for the current branch — typecheck, lint, build, prisma drift, migration safety, env coverage, and recent LS comms. Read-only; reports a punch list of go/no-go signals before a deploy or merge to a deploy-tracked branch. Does NOT deploy.
3
+ ---
4
+
5
+ # /kit:deploy-check
6
+
7
+ Audit the current branch for production readiness. Bundles every signal a human would manually check before clicking "deploy" or merging to a deploy-tracked branch (per project convention: `master`). Reports a punch list with ✓ / ⚠ / ✗ per check and a single go/no-go verdict.
8
+
9
+ Parse `$ARGUMENTS`:
10
+ - (empty) — full check on the current branch vs `master` (or repo's default).
11
+ - **--target=<branch>** — compare against a different deploy-tracked branch.
12
+ - **--skip=<check,…>** — comma-separated checks to skip (e.g. `--skip=lint,build`). Use sparingly; surface skipped checks in the report.
13
+ - **--quick** — skip the build (the slowest check). Still runs typecheck, lint, prisma, env, comms.
14
+ - **--json** — emit a machine-readable report (per check: ok, detail, durationMs).
15
+
16
+ Examples:
17
+ - `/kit:deploy-check`
18
+ - `/kit:deploy-check --quick`
19
+ - `/kit:deploy-check --skip=lint`
20
+ - `/kit:deploy-check --target=staging-mirror --json`
21
+
22
+ ## Preflight
23
+
24
+ 1. Confirm cwd is a git repo (`git rev-parse --is-inside-work-tree`).
25
+ 2. Resolve the target branch — `--target=` if given, else default branch (`git symbolic-ref refs/remotes/origin/HEAD --short` → strip `origin/`; fall back to `master`).
26
+ 3. Print the scope upfront: `"deploy-check: <current-branch> → <target-branch>"`. The user should never wonder which comparison this is.
27
+ 4. Stash check — if `git status --porcelain` shows uncommitted changes, surface this as a `⚠ uncommitted changes in working tree` row at the top of the report. Don't refuse; some workflows want the check to include uncommitted work.
28
+
29
+ ## Checks
30
+
31
+ Run every check in PARALLEL when possible (typecheck/lint/build are independent and slow). Each check returns `{ name, status: "ok"|"warn"|"fail", detail: <one-line>, artifact?: <path or url> }`.
32
+
33
+ ### 1. branch_freshness
34
+
35
+ How far behind the target branch is the current branch?
36
+
37
+ ```
38
+ git fetch --quiet origin
39
+ git rev-list --left-right --count <target>...HEAD
40
+ ```
41
+
42
+ - ✓ `0 commits behind target` → fresh
43
+ - ⚠ `1–10 behind`
44
+ - ✗ `>10 behind` → suggest `git merge origin/<target>` or rebase
45
+
46
+ ### 2. typecheck
47
+
48
+ `npx tsc --noEmit` (or the project's `npm run typecheck` if defined in `package.json` scripts — prefer the script).
49
+
50
+ - ✓ `0 errors`
51
+ - ✗ `<N> errors` (sample first 3 file:line:message)
52
+
53
+ ### 3. lint
54
+
55
+ `npm run lint` if defined in `package.json` scripts; else skip with a `⚠ no lint script defined` row.
56
+
57
+ - ✓ `0 errors`
58
+ - ⚠ `<N> warnings`
59
+ - ✗ `<N> errors`
60
+
61
+ ### 4. build
62
+
63
+ `npm run build` (uses the project's actual build pipeline so the check matches what Vercel/CI would do). Skip if `--quick` or `--skip=build`.
64
+
65
+ - ✓ `built in <durationMs>ms`
66
+ - ✗ `build failed` (last 20 lines of stderr as artifact)
67
+
68
+ Note: this runs the full prod build including prisma generate + migrate deploy. Make sure `DATABASE_URL` is set to a *safe* dev DB before running. If `DATABASE_URL` looks production-y (matches `vercel.app`, `neon.tech`, `rds.amazonaws.com`, etc.), refuse the build step and surface `⚠ build skipped — DATABASE_URL looks production-y (<host>); re-run with a dev DB or pass --skip=build`.
69
+
70
+ ### 5. prisma_drift
71
+
72
+ Schema vs migrations consistency:
73
+
74
+ ```
75
+ npx prisma migrate diff --from-schema-datasource prisma/schema.prisma --to-migrations prisma/migrations --shadow-database-url <DEV_SHADOW_URL>
76
+ ```
77
+
78
+ The project authors migrations by hand (CLAUDE.md: never `prisma db push` or `migrate dev`). So this diff should be EMPTY — any non-empty result means a model field was added without a corresponding hand-written migration.
79
+
80
+ - ✓ `schema matches migrations`
81
+ - ✗ `<N> drift detected` — surface the diff body as an artifact; suggest authoring a migration per the project's hand-written SQL convention.
82
+
83
+ If no `DEV_SHADOW_URL` is available, skip this check with `⚠ prisma_drift skipped — no shadow DB URL` and recommend setting one in `.env.local`.
84
+
85
+ ### 6. migration_safety
86
+
87
+ Recent migrations on the branch — look at every migration file added since divergence from target:
88
+
89
+ ```
90
+ git diff --name-only <target>...HEAD -- prisma/migrations/
91
+ ```
92
+
93
+ For each new migration, scan the SQL for risk patterns (per project CLAUDE.md migration safety rules):
94
+
95
+ - ✓ no destructive ops (`DROP COLUMN`, `DROP TABLE`, `ALTER COLUMN ... DROP`, `DELETE FROM` without `WHERE` matching backup) found.
96
+ - ⚠ destructive ops present BUT a sidecar `CREATE TABLE _backup_*` exists in the same file AND an orphan-check (`RAISE EXCEPTION ... orphans remain`) is present.
97
+ - ✗ destructive ops without backup OR without orphan-check OR mixing expand+contract in a single migration.
98
+
99
+ Each failure cites the exact migration filename + line numbers.
100
+
101
+ ### 7. env_coverage
102
+
103
+ Compare `.env.example` (or `.env.testing` if it exists) keys against `process.env.*` references in the new code since divergence:
104
+
105
+ ```
106
+ git diff <target>...HEAD -- '*.ts' '*.tsx' | grep -oE 'process\.env\.[A-Z_][A-Z0-9_]+'
107
+ ```
108
+
109
+ - ✓ every referenced env var is documented in `.env.example`
110
+ - ⚠ `<N> new env vars used but missing from .env.example` (list them)
111
+ - ✗ N/A (always a warn, never a hard fail — env docs are advisory)
112
+
113
+ ### 8. recent_comms (LS Comm Hub)
114
+
115
+ Pull the last 10 comments tagged `release` or `daily_update` via `mcp__launch-secure__communication_read` and surface a one-line: `"<N> release/standup comments in last 7 days — latest: <title> (<author>, <age>)"`. This is informational — it helps the user know if a release note was already drafted or if the team flagged something to ship.
116
+
117
+ Skip with a `⚠ launch-secure MCP not wired` row if the MCP isn't available; don't fail the whole check.
118
+
119
+ ### 9. recall_health
120
+
121
+ `mcp__launch-recall__recall_status` — ensures the shadow-git backup is alive so a rollback path exists if the deploy goes sideways. Informational only.
122
+
123
+ - ✓ `recall alive — last snap <X ago>`
124
+ - ⚠ `recall dead — restart before deploy (\`/kit:recall doctor\` for detail)`
125
+
126
+ ## Report
127
+
128
+ Render a punch list (plain text, monospace; not markdown table):
129
+
130
+ ```
131
+ deploy-check: implementation → master
132
+
133
+ ✓ branch_freshness 0 commits behind master
134
+ ✓ typecheck 0 errors (3.2s)
135
+ ⚠ lint 12 warnings (no errors)
136
+ ✓ build built in 47s
137
+ ✓ prisma_drift schema matches migrations
138
+ ✗ migration_safety 1 destructive op without backup
139
+ → prisma/migrations/2026_05_25_drop_legacy_thread/migration.sql:14 (DROP COLUMN legacyThreadId, no _backup_* sidecar)
140
+ ⚠ env_coverage 2 new env vars missing from .env.example: FEED_BACKEND_URL, FEED_TIMEOUT_MS
141
+ ✓ recent_comms 1 release comment in last 7 days — "Comm Hub channels rollout" (prajyot, 2d ago)
142
+ ✓ recall_health alive — last snap 4m ago
143
+
144
+ verdict: NO-GO — 1 hard fail (migration_safety).
145
+ next: author a backup table + orphan check in the listed migration, then re-run /kit:deploy-check.
146
+ ```
147
+
148
+ Verdict rules:
149
+ - Any ✗ → NO-GO with the failing check(s) listed.
150
+ - All ✓ + ⚠ only → GO WITH CAVEATS, list the warnings.
151
+ - All ✓ → GO.
152
+
153
+ ## Constraints
154
+
155
+ - **Read-only.** Never deploy, never push, never auto-fix.
156
+ - **Parallel checks.** Run independent checks concurrently (Bash run_in_background) — sequential bloats the wait time past usefulness.
157
+ - **No silent skips.** Every skipped check appears in the report with a reason.
158
+ - **DB-safe.** Refuse to run `build` against a production-looking DATABASE_URL — the build runs `prisma migrate deploy` against it.
159
+ - **Honest about scope.** This check is what a human would do manually; it is NOT a guarantee. Surface false-negatives readers: `"This check doesn't run e2e tests, doesn't validate runtime config, doesn't sniff for secrets in commits — those are separate skills."`
160
+ - **Use launch-chart only for nice-to-have context (e.g. blast radius of a migration), not for the gate.** The gate is git+npm+prisma+MCP-LS; chart is optional.
@@ -0,0 +1,134 @@
1
+ ---
2
+ description: Render a Mermaid diagram (flowchart, sequence, ERD, state, gantt) via launch-deck. For ERDs, auto-derives tables and relations from launch-chart's db layer so the diagram matches the real schema. Files a chart-gap feedback comment to LS if the db layer is missing or empty.
3
+ ---
4
+
5
+ # /kit:diagram
6
+
7
+ Push a Mermaid diagram to launch-deck. Five flavors:
8
+
9
+ - **flowchart** — boxes-and-arrows for any process
10
+ - **sequence** — request/response timing between actors
11
+ - **erd** — entity-relationship diagram. Auto-pulled from chart `db` layer unless the user provides their own DSL.
12
+ - **state** — state machine
13
+ - **gantt** — timeline
14
+
15
+ Parse `$ARGUMENTS`:
16
+ - **kind** (required) — `flowchart` | `sequence` | `erd` | `state` | `gantt`. If absent, ask.
17
+ - **subject** (required for non-erd) — what to diagram, e.g. "user login flow" or "OAuth handshake".
18
+ - **--scope=<filter>** — for ERDs, limit to one module or table set (e.g. `--scope=auth` or `--scope=User,Org,Membership`). Default: all tables.
19
+ - **--session=<id>** — deck session name. Default `diagram-<kind>-<subject-slug>`.
20
+ - **--dsl=<raw-mermaid>** — bypass auto-generation; push the user's DSL verbatim.
21
+ - **--feedback** — push in feedback mode and await response.
22
+
23
+ Examples:
24
+ - `/kit:diagram flowchart user login flow`
25
+ - `/kit:diagram sequence OAuth handshake between client, gateway, idp`
26
+ - `/kit:diagram erd --scope=work-items`
27
+ - `/kit:diagram erd` → full project ERD
28
+ - `/kit:diagram state work-item lifecycle: backlog → todo → in-progress → done`
29
+
30
+ ## Preflight
31
+
32
+ 1. Confirm `mcp__launch-deck__server_status` is running; start if not.
33
+ 2. For `erd`: confirm `mcp__launch-chart__chart_server_status` is up, then call `mcp__launch-chart__detect_project_stack` and check `db` is in the layers list.
34
+
35
+ ## Build the DSL
36
+
37
+ ### flowchart / sequence / state / gantt
38
+
39
+ Translate the subject into Mermaid DSL based on what the user described. For sequence, infer actors from the subject (client/server/db are common defaults). Add concise labels — don't overload with prose.
40
+
41
+ Example flowchart skeleton:
42
+
43
+ ```mermaid
44
+ flowchart TD
45
+ Start([User opens app]) --> Auth{Session valid?}
46
+ Auth -- yes --> Home[Home]
47
+ Auth -- no --> Login[Login form]
48
+ Login -- success --> Home
49
+ ```
50
+
51
+ If the user passed `--dsl=…`, skip generation — use their DSL.
52
+
53
+ ### erd
54
+
55
+ Query the db layer to derive entities and edges:
56
+
57
+ 1. `mcp__launch-chart__read_graph(layer: "db", type: "table"[, module: <scope>])` — gets every table node.
58
+ 2. For each table, `mcp__launch-chart__inspect_node(node_id: <id>, fields: ["columns", "relations"])` to get fields and FK relations.
59
+ 3. Render Mermaid `erDiagram` DSL:
60
+
61
+ ```mermaid
62
+ erDiagram
63
+ USER ||--o{ WORK_ITEM : owns
64
+ USER {
65
+ string id PK
66
+ string email
67
+ datetime createdAt
68
+ }
69
+ WORK_ITEM {
70
+ string id PK
71
+ string userId FK
72
+ string title
73
+ enum type
74
+ }
75
+ ```
76
+
77
+ Rules:
78
+ - Use `||--o{` for 1:N FK relations, `}o--o{` for many-to-many join tables.
79
+ - Include PK + FK markers; include enum/scalar type for the first ~8 columns per table; truncate the rest with a `… (N more)` comment.
80
+ - Cap at 25 tables to keep the diagram readable. If the project has more than 25 in scope, ask the user to narrow with `--scope=`.
81
+
82
+ **Chart-gap detection** — file a feedback comment per the protocol below before stopping if:
83
+ - the db layer is missing from `detect_project_stack`
84
+ - `read_graph(layer: "db")` returns 0 nodes
85
+ - the chart shows tables but `inspect_node` returns no `columns` (parser misconfiguration)
86
+
87
+ ## Push to deck
88
+
89
+ Call `mcp__launch-deck__deck` with:
90
+ - `session: <session>`
91
+ - `mode: "show"` or `"feedback"` (+ `prompt: "Does this match the schema you expected?"` for ERDs)
92
+ - `blocks: [{ type: "mermaid", label: <kind>-<subject>, content: <mermaid-dsl> }]`
93
+
94
+ If `--feedback`, call `await_feedback` and surface the response.
95
+
96
+ ## Output
97
+
98
+ ```
99
+ diagram pushed — deck session "<session>" — http://localhost:52829/?session=<session>
100
+ kind: <kind>
101
+ nodes: <N> edges: <M>
102
+ ```
103
+
104
+ For ERDs add `tables: <N> relations: <M> scope: <scope or "all">`.
105
+
106
+ ## Chart-gap protocol (shared)
107
+
108
+ When the chart MCP returns less data than expected (db layer missing, 0 tables, empty columns), file ONE feedback comment in the project's Comm Hub via `mcp__launch-secure__communication_write` (cloud LS, not local) before stopping:
109
+
110
+ ```
111
+ resource_type: "feedback"
112
+ title: "launch-chart gap: <one-line>"
113
+ body: |
114
+ Skill: /kit:diagram
115
+ Tool: read_graph(layer="db", …) / inspect_node(...)
116
+ Returned: <tables_count> tables, <relations_count> relations
117
+ Expected: db layer present per detect_project_stack
118
+ Project stack: <one-line summary>
119
+ fields:
120
+ severity: "low"
121
+ source: "kit-skill"
122
+ skill: "diagram"
123
+ tool: "read_graph"
124
+ response_summary: { layer, tables_count, error }
125
+ ```
126
+
127
+ Then fall back: render a `flowchart` placeholder explaining "DB layer not available — re-run `npx launch-chart generate_graph` then retry" instead of the ERD.
128
+
129
+ ## Constraints
130
+
131
+ - **MCP-first for ERDs.** Never grep `prisma/schema.prisma` to build the DSL — the chart has the parsed model.
132
+ - **Cap entities at 25.** Past that, Mermaid wraps unreadably; ask the user to narrow scope.
133
+ - **Mermaid only.** This skill does not draw raster images — Mermaid DSL is the deliverable.
134
+ - **One block per push.**
@@ -0,0 +1,87 @@
1
+ ---
2
+ description: Create an isolated worktree, run pre-merge gates, or merge an orbit into its target — using launch-orbit MCP tools with launch-chart layer detection in the pre-flight. Encodes the project's orbit standards (database fork by profile, gate enforcement, post-merge cleanup) so every orbit gets created and merged the same way.
3
+ ---
4
+
5
+ # /kit:orbit
6
+
7
+ Drive a launch-orbit worktree through its lifecycle: create → work → check_mergeable → merge → drop. Wraps the MCP tools with sensible defaults and a layer-aware pre-flight so the operator doesn't forget the project's conventions.
8
+
9
+ Parse `$ARGUMENTS` — first token is the subcommand:
10
+
11
+ - **create &lt;branch&gt;** — `[--base=<ref>] [--profile=<name>]` — fork resources per `orbit.json`, return path + envFile.
12
+ - **list** — list every orbit registered on this machine.
13
+ - **switch &lt;branch&gt;** — print the path/env for an existing orbit (no shell mutation).
14
+ - **doctor** — surface registry inconsistencies.
15
+ - **check &lt;branch&gt; --target=&lt;target-branch&gt;** — run pre-merge gates WITHOUT merging.
16
+ - **merge &lt;branch&gt; --target=&lt;target-branch&gt;** — `[--cleanup=full|none] [--skip-gate=<id>,…]` — run gates + merge.
17
+ - **drop &lt;branch&gt;** — `[--no-backup]` — tear down (backup, drop DB, remove worktree, deregister).
18
+
19
+ Examples:
20
+ - `/kit:orbit create feat-channel-rename --profile=fe`
21
+ - `/kit:orbit check feat-channel-rename --target=implementation`
22
+ - `/kit:orbit merge feat-channel-rename --target=implementation`
23
+ - `/kit:orbit doctor`
24
+
25
+ ## Preflight (runs on create / check / merge)
26
+
27
+ 1. Confirm `mcp__launch-orbit__orbit_doctor` returns no critical inconsistencies for THIS project. If it does, surface them and stop — the operator probably wants `/kit:orbit drop <stale-branch>` first.
28
+ 2. Confirm `orbit.json` exists at the repo root. If missing, tell the user to add one (point at the orbit docs) and stop.
29
+ 3. Run `mcp__launch-chart__detect_project_stack` and print the detected layers as part of the pre-flight log. This is the project's "what's in scope" surface — surface it before any branch op so the operator sees if the chart misses a layer that orbit.json's gates reference (e.g. orbit.json's build-lint gate runs against the api layer but chart doesn't see api).
30
+ 4. For **merge**: confirm `--target=` is set. Default is NOT `master` — explicit target only.
31
+
32
+ ## Per-subcommand behavior
33
+
34
+ ### create
35
+
36
+ 1. `mcp__launch-orbit__orbit_create` with `branch`, `baseRef` (if `--base`), `profile` (if `--profile`).
37
+ 2. On success, surface the returned `nextAction` (`cd <path>`) verbatim and the `envFile` path. Don't auto-cd — the operator's shell is theirs to drive.
38
+ 3. Remind: in the new worktree, `npx launch-kit refresh` will rewire MCPs against the worktree's `.launch-secure.cred.config` symlink if needed.
39
+
40
+ ### list
41
+
42
+ `mcp__launch-orbit__orbit_list` → one row per orbit: `slug branch age path resources`.
43
+
44
+ ### switch
45
+
46
+ `mcp__launch-orbit__orbit_switch(branch)` → print `cd <path>` + `envFile`. Don't run cd.
47
+
48
+ ### doctor
49
+
50
+ `mcp__launch-orbit__orbit_doctor` → list every issue with a one-line fix (e.g. `orphan-registration` → `/kit:orbit drop <branch>`).
51
+
52
+ ### check
53
+
54
+ `mcp__launch-orbit__orbit_check_mergeable(branch, target)` → render the gate report:
55
+
56
+ ```
57
+ orbit feat-channel-rename → implementation
58
+ ✓ builtin/mergeability (no textual conflicts)
59
+ ✗ builtin/build-lint (tsc: 3 errors, see <artifact>)
60
+ ✓ launchsecure/migration-safety (no destructive migrations)
61
+
62
+ result: BLOCKED — fix build-lint then retry.
63
+ ```
64
+
65
+ ### merge
66
+
67
+ 1. Run `check` first (same report). If `passed: false`, stop with the report — don't attempt the merge.
68
+ 2. If `passed: true`, call `mcp__launch-orbit__orbit_merge(branch, target, cleanup, skipGates)` and surface the result.
69
+ 3. Default `cleanup: "full"` (orbit is dropped post-merge after pg_dump). The operator must pass `--cleanup=none` to keep the orbit around.
70
+ 4. After a successful merge, recommend `/kit:standup` to surface the change in the next standup, and `/kit:diagram` if it touched the schema.
71
+
72
+ ### drop
73
+
74
+ `mcp__launch-orbit__orbit_drop(branch, backup: !args.noBackup)` → idempotent. Surface `backups[]` paths.
75
+
76
+ ## Conventions encoded here
77
+
78
+ - **No bare `--target=master`.** Default merge target is `implementation` per project CLAUDE.md ("implementation branch is parent for all impl branches"). If the operator types `--target=master`, double-check by asking once.
79
+ - **No `--skip-gate` without a reason in the next message.** Surface a banner: `"Skipping gates: <ids>. Reason?"` — let the operator answer in chat; do NOT proceed silently.
80
+ - **Always run `check` before `merge`.** The skill enforces this — even if the operator runs `merge` directly, the skill runs `check` first.
81
+ - **Layer awareness.** Pre-flight always prints `detect_project_stack` layers so the operator sees parity (or absence) between chart layers and orbit gate scope.
82
+
83
+ ## Constraints
84
+
85
+ - **MCP-first.** Never shell out to `git worktree`, `git merge`, `pg_dump` directly — orbit's tools own these.
86
+ - **Idempotent.** All subcommands are safe to retry. Drop especially — it handles partial-state gracefully.
87
+ - **Surface, don't hide.** If a gate fails, print the artifact path; if the doctor finds inconsistency, print the exact slug.
@@ -0,0 +1,90 @@
1
+ ---
2
+ description: Generate a working HTML/JS prototype page and push it to launch-deck for click-through review. Use to validate behavior — flow, transitions, interactions — before any framework code is touched. Calls deck's rich-html block with framework=raw; supports CDN scripts, animations, real DOM events.
3
+ ---
4
+
5
+ # /kit:prototype
6
+
7
+ Build a self-contained, interactive HTML page (HTML + CSS + JS, optional CDN scripts) and push it to launch-deck. Unlike `/kit:wireframe`, this is a *working* prototype: the user can click, type, navigate fake routes, see transitions — the goal is to test behavior cheaply.
8
+
9
+ Parse `$ARGUMENTS`:
10
+ - **description** (required) — what the prototype should demonstrate, e.g. "drag-to-reorder kanban with optimistic update and rollback on error".
11
+ - **--session=<id>** — deck session name. Default `proto-<slugified-description-first-3-words>`.
12
+ - **--feedback** — push in `feedback` mode with `prompt: "Did this match the interaction you had in mind?"` and call `await_feedback`.
13
+ - **--cdn=tailwind|alpine|htmx|react|vue|none** — comma-separated CDN(s) to include. Default `tailwind` for styling. `none` for pure handwritten CSS.
14
+ - **--theme=light|dark** — only when the prototype demands one mode (e.g. a dark-mode-only design).
15
+
16
+ Examples:
17
+ - `/kit:prototype drag-to-reorder kanban with optimistic update`
18
+ - `/kit:prototype keyboard shortcut palette with fuzzy search --cdn=tailwind,alpine`
19
+ - `/kit:prototype landing page hero with parallax scroll --feedback`
20
+
21
+ ## Preflight
22
+
23
+ 1. Confirm `mcp__launch-deck__server_status` is running. Start if not.
24
+ 2. If the description references real entities/pages in this repo, run `mcp__launch-chart__read_graph(search: <hint>)` to pull the shape — so the prototype mirrors actual data field names. Optional; skip on first iteration to keep the loop fast.
25
+
26
+ ## Build the page
27
+
28
+ Generate a complete `<!DOCTYPE html>` document. Layout:
29
+
30
+ ```html
31
+ <!DOCTYPE html>
32
+ <html lang="en">
33
+ <head>
34
+ <meta charset="utf-8">
35
+ <meta name="viewport" content="width=device-width, initial-scale=1">
36
+ <title><short title></title>
37
+ <!-- CDNs (per --cdn flag) -->
38
+ <script src="https://cdn.tailwindcss.com"></script>
39
+ <script defer src="https://unpkg.com/alpinejs"></script>
40
+ <style>
41
+ /* page-specific styles */
42
+ </style>
43
+ </head>
44
+ <body class="…">
45
+ <!-- the prototype -->
46
+ <script>
47
+ // event handlers, state, fake data
48
+ </script>
49
+ </body>
50
+ </html>
51
+ ```
52
+
53
+ CDN catalog (use only what's requested):
54
+ - **tailwind** — `<script src="https://cdn.tailwindcss.com"></script>`
55
+ - **alpine** — `<script defer src="https://unpkg.com/alpinejs"></script>` for `x-data` reactivity
56
+ - **htmx** — `<script src="https://unpkg.com/htmx.org"></script>` for fake server swaps
57
+ - **react** — `<script crossorigin src="https://unpkg.com/react/umd/react.production.min.js"></script>` + `react-dom` + Babel CDN if JSX
58
+ - **vue** — `<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>`
59
+
60
+ Design rules:
61
+ - **Fake the backend.** Use in-memory arrays, `setTimeout` to simulate latency, `Math.random() < 0.1` to simulate intermittent failures (for testing rollback flows).
62
+ - **No real PII or secrets.** Use placeholder names ("Ada", "Lin", "Mehmet"), placeholder copy, never a real user from this project.
63
+ - **Show the interaction explicitly.** If the prototype's point is drag-to-reorder, make the drag affordance OBVIOUS (cursor change, hover scale, snap line). If the point is optimistic update + rollback, force a visible failure within ~5 clicks so the reviewer experiences it.
64
+ - **One screen unless the user asks for multi-screen.** Multi-screen prototypes use a fake router (`window.history.pushState` + a click handler) — don't pull in `react-router`.
65
+
66
+ ## Push to deck
67
+
68
+ Call `mcp__launch-deck__deck` with:
69
+ - `session: <session>`
70
+ - `mode: "show"` or `"feedback"` (+ `prompt`)
71
+ - `blocks: [{ type: "rich-html", framework: "raw", label: <short-title>, content: <full-doctype-html>, theme: <theme?> }]`
72
+
73
+ `framework: "raw"` means the deck does NOT wrap your content — what you ship IS the page. That's why the full `<!DOCTYPE html>` doctype is required.
74
+
75
+ If `--feedback`, call `mcp__launch-deck__await_feedback` afterward and surface the response.
76
+
77
+ ## Output
78
+
79
+ ```
80
+ prototype pushed — deck session "<session>" — http://localhost:52829/?session=<session>
81
+ size: <N> KB markup, <M> CDN scripts, <K> inline event handlers
82
+ demonstrates: <one-line>
83
+ ```
84
+
85
+ ## Constraints
86
+
87
+ - **Self-contained.** No external API calls, no auth flows, no real LS endpoints. Everything in one HTML file.
88
+ - **One block per push.** Multi-block prototypes belong as separate sessions.
89
+ - **Iterate via re-push.** Same `--session` overwrites — that's the loop. Don't accumulate prototype-v2, prototype-v3 sessions.
90
+ - **No production-ready output.** If the user is happy with the prototype and wants to "turn it into the real thing," that's a separate `/fe:*` workflow — this skill is throw-away to validate behavior.
@@ -0,0 +1,83 @@
1
+ ---
2
+ description: Recover a file/dir from launch-recall's shadow-git backup. Lists snapshot history for a path and (with explicit confirmation) restores a specific snapshot into the working tree. Read-only by default; restore is one-shot and prompts before overwriting.
3
+ ---
4
+
5
+ # /kit:recall
6
+
7
+ Surface and restore deletions/modifications captured by the launch-recall watcher (the shadow git repo at `.recall/repo.git`). Use when something was accidentally deleted, overwritten, or auto-formatted away.
8
+
9
+ Parse `$ARGUMENTS` — first token is the subcommand:
10
+
11
+ - **status** — quick watcher liveness + last snapshot age.
12
+ - **doctor** — fuller health check (shadow_repo / watcher_alive / recent_snapshot).
13
+ - **history &lt;path&gt;** — `[--limit=N]` — list snapshots that touched the path. Default limit 20.
14
+ - **show &lt;path&gt; &lt;sha&gt;** — display the file's content from that snapshot (no write).
15
+ - **restore &lt;path&gt; &lt;sha&gt;** — `[--to=<target-path>]` — restore the file. Prompts before overwriting unless the path doesn't exist on disk.
16
+ - **diff &lt;path&gt; &lt;sha&gt;** — show a unified diff vs current working-tree (or "(file deleted from working tree)" if absent).
17
+
18
+ Examples:
19
+ - `/kit:recall status`
20
+ - `/kit:recall history src/server/comms/build-feed.ts`
21
+ - `/kit:recall show src/server/comms/build-feed.ts a1b2c3d`
22
+ - `/kit:recall diff src/server/comms/build-feed.ts a1b2c3d`
23
+ - `/kit:recall restore src/server/comms/build-feed.ts a1b2c3d`
24
+ - `/kit:recall restore prisma/schema.prisma a1b2c3d --to=prisma/schema.recovered.prisma`
25
+
26
+ ## Preflight
27
+
28
+ Confirm the recall MCP is wired by attempting `mcp__launch-recall__recall_status`. If neither cloud nor local is callable, stop and tell the user: `"launch-recall MCP not wired in this project. Run \`npx @launchsecure/launch-kit refresh\` (or \`npx launch-recall init\` for the shadow repo)."` Per project memory, prefer the cloud namespace; this skill works with either.
29
+
30
+ ## Per-subcommand behavior
31
+
32
+ ### status
33
+
34
+ `mcp__launch-recall__recall_status` → one line: `recall <alive/dead> pid <N> last snap <X ago>`.
35
+
36
+ ### doctor
37
+
38
+ `mcp__launch-recall__recall_doctor` → render the checks as a 3-line report:
39
+
40
+ ```
41
+ recall — health
42
+ shadow_repo ✓ /Users/.../.recall/repo.git
43
+ watcher_alive ✓ pid 12456
44
+ recent_snapshot ✓ 2m ago
45
+ ```
46
+
47
+ ### history
48
+
49
+ `mcp__launch-recall__recall_history(path: <path>, limit: <limit>)` → one row per snapshot: `sha age message`. Render most-recent first.
50
+
51
+ If the array is empty, say so verbatim and suggest cause: `"No snapshots touch <path>. Either the path was ignored by recall's config, or the file simply never changed during this watcher's lifetime."` Then offer to print `recall.report` for context.
52
+
53
+ ### show
54
+
55
+ The recall MCP exposes history but not a `show` tool directly. Implement by:
56
+ 1. Read `mcp__launch-recall__recall_status` → `shadowRepoPath` (or read the config — `.recall/repo.git` is the default).
57
+ 2. Use `git --git-dir=<shadow> --work-tree=<repo> show <sha>:<path>` via Bash.
58
+ 3. Print the file content (truncate at 500 lines; surface the truncation explicitly).
59
+
60
+ ### diff
61
+
62
+ Same as `show`, but `git --git-dir=<shadow> show <sha>:<path>` piped through `diff -u - <path>` (or print "file deleted from working tree" if missing). Cap diff at 500 lines.
63
+
64
+ ### restore
65
+
66
+ This is the only write operation. Strict protocol — per project memory `feedback_no_dumb_reverts.md`, destructive ops require explicit confirmation.
67
+
68
+ 1. Resolve target path: `--to=<target>` if given, else the original `<path>`.
69
+ 2. If the target exists on disk:
70
+ - Print a side-by-side summary: `current size <N> bytes, snapshot size <M> bytes`.
71
+ - Show the first ~20 lines of the diff (current → snapshot).
72
+ - Ask: `"Overwrite <target>? (yes / show full diff / no)"` — wait for explicit `yes`.
73
+ 3. If the target does NOT exist on disk (file was deleted), restore without prompt but tell the user before writing: `"Restoring deleted file to <target> from snapshot <sha>."`
74
+ 4. Use `git --git-dir=<shadow> show <sha>:<path> > <target>` (or `git checkout <sha> -- <path>` against the shadow with `--work-tree=<repo>`).
75
+ 5. After restore, print: `"Restored. Recall just captured a new snapshot of the restore itself — your previous working-tree state is also recoverable (run \`/kit:recall history <target>\` to confirm)."`
76
+
77
+ ## Constraints
78
+
79
+ - **Read-only by default.** Only `restore` writes; everything else reads.
80
+ - **Restore requires confirmation** when overwriting an existing file. Never auto-overwrite even when the user passes the sha — per project memory, destructive ops need explicit `yes`.
81
+ - **No `git reset`, no `git clean`, no `rm`.** Recall restores via `git show > file`; never run anything that could lose more than the one file requested.
82
+ - **Don't suggest enabling recall for the user.** If recall isn't wired, point at refresh — don't auto-init.
83
+ - **Quote both pieces of advice when the file is unchanged.** If `history` returns nothing AND the file exists on disk, say BOTH "path may be in recall's ignore list" AND "the file may simply have no churn" — don't guess which.
@@ -2,17 +2,17 @@
2
2
  description: Show the health of launch-kit's daemon-style MCPs (today just launch-recall). Default output is a terse one-line summary per daemon; pass `full` for expanded details — PID, pidfile, last snapshot, debounce, shadow repo size, recent activity. Read-only; never mutates state.
3
3
  ---
4
4
 
5
- # /ls:show-mcp-status
5
+ # /kit:show-mcp-status
6
6
 
7
7
  Reports the liveness and recent activity of launch-kit's long-running MCP daemons. The recall watcher is the only daemon today; this command is structured so additional daemons can be added without changing its interface.
8
8
 
9
9
  Read $ARGUMENTS to decide output verbosity:
10
- - empty (`/ls:show-mcp-status`) → terse one-liner per daemon. Goal: fits in one or two visual lines.
11
- - `full` (`/ls:show-mcp-status full`) → expanded report per daemon. Goal: enough detail to diagnose health problems.
10
+ - empty (`/kit:show-mcp-status`) → terse one-liner per daemon. Goal: fits in one or two visual lines.
11
+ - `full` (`/kit:show-mcp-status full`) → expanded report per daemon. Goal: enough detail to diagnose health problems.
12
12
 
13
13
  ## Preflight
14
14
 
15
- 1. Verify the launch-recall MCP is wired by checking whether `mcp__launch-recall__recall_status` (or `mcp__local-launch-recall__recall_status` for dev repos) is callable. If neither is available, say so plainly: "launch-recall MCP not wired in this project — nothing to report" and stop.
15
+ 1. Verify the launch-recall MCP is wired by attempting `mcp__launch-recall__recall_status` (or `mcp__local-launch-recall__recall_status` for dev repos). If neither is callable, **alert the user verbatim**: `"launch-recall MCP not wired in this project — nothing to report. (Skill is MCP-first; no shell fallback for daemon status.)"` and stop.
16
16
  2. Pick whichever recall MCP is available. Prefer the project-level published one (`mcp__launch-recall__*`) unless only the local dev one is wired.
17
17
 
18
18
  ## Daemons
@@ -36,7 +36,7 @@ Or if dead:
36
36
  ```
37
37
  recall ✗ dead pidfile missing/stale
38
38
 
39
- 1 daemon down. Run /ls:show-mcp-status full for details, or restart the watcher (kill any stale pid, then either start a new Claude Code session — the SessionStart hook respawns it — or run `node packages/cli/dist/server/recall-entry.js watch` from this repo).
39
+ 1 daemon down. Run /kit:show-mcp-status full for details, or restart the watcher (kill any stale pid, then either start a new Claude Code session — the SessionStart hook respawns it — or run `npx -y -p @launchsecure/launch-kit launch-recall watch` from the project root).
40
40
  ```
41
41
 
42
42
  Rules for the default view:
@@ -46,7 +46,7 @@ Rules for the default view:
46
46
  - Summary line on a fresh line at the end. If anything is wrong, include a one-sentence recovery hint.
47
47
  - No JSON, no PID files paths, no debug info — that's for `full`.
48
48
 
49
- ## Full output (`/ls:show-mcp-status full`)
49
+ ## Full output (`/kit:show-mcp-status full`)
50
50
 
51
51
  For each daemon, call BOTH `recall_status` AND `recall_report`. Combine into a per-daemon block:
52
52
 
@@ -103,7 +103,7 @@ Don't over-warn — if a repo has genuinely been idle (e.g. you opened it for th
103
103
 
104
104
  ## Notes for the assistant
105
105
 
106
- - Use the wired `launch-recall` MCP tools — do not shell out to `node packages/cli/dist/server/recall-entry.js status` even though it works. Going through MCP makes this command portable across projects that have launch-kit init'd via npx vs dev-build.
106
+ - **MCP-first, no shell fallback.** Use the wired `launch-recall` MCP tools — do NOT shell out to `node packages/cli/dist/server/recall-entry.js status` or `ps`-based liveness checks. If the MCP isn't wired, the preflight step already stops the skill no silent grep/find.
107
107
  - When listing recent snaps, use the `recentSnapshots` array from `recall_report`. It's already sorted newest-first; just truncate.
108
108
  - For "X ago" formatting, do the math yourself. Don't fetch any time service.
109
- - If you find yourself wanting to add features beyond status display (restart the watcher, prune snaps, etc.) — stop. Those belong in separate `/ls:*` commands. This one is a status pane.
109
+ - If you find yourself wanting to add features beyond status display (restart the watcher, prune snaps, etc.) — stop. Those belong in separate `/kit:*` skills. This one is a status pane.