@launchsecure/launch-kit 0.0.30 → 0.0.32

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 (106) hide show
  1. package/dist/beacon/beacon.mjs +1027 -929
  2. package/dist/beacon/beacon.mjs.map +1 -1
  3. package/dist/beacon/beacon.umd.js +9 -9
  4. package/dist/beacon/beacon.umd.js.map +1 -1
  5. package/dist/beacon/types/internal/pick-mode-overlay.d.ts.map +1 -1
  6. package/dist/beacon/types/internal/picker.d.ts.map +1 -1
  7. package/dist/beacon/types/internal/pin-popover.d.ts.map +1 -1
  8. package/dist/beacon/types/internal/screenshot.d.ts +19 -1
  9. package/dist/beacon/types/internal/screenshot.d.ts.map +1 -1
  10. package/dist/beacon/types/internal/selector.d.ts.map +1 -1
  11. package/dist/beacon/types/plugins/domEle.d.ts.map +1 -1
  12. package/dist/chart-client/assets/{index-CJ4mgRRF.css → index-CDIhdgWg.css} +1 -1
  13. package/dist/chart-client/index.html +2 -2
  14. package/dist/client/assets/{index-DI5qSR_w.css → index-CfW4n40I.css} +1 -1
  15. package/dist/client/index.html +2 -2
  16. package/dist/council-client/assets/{index-C_-vAM9L.css → index-CZim6x1u.css} +1 -1
  17. package/dist/council-client/index.html +2 -2
  18. package/dist/deck-client/assets/{_baseUniq-DCt2IMRR.js → _baseUniq-C7GsHvgg.js} +1 -1
  19. package/dist/deck-client/assets/{arc-h-ifqmNR.js → arc-CSrZRINY.js} +1 -1
  20. package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-C9dITSPv.js → architectureDiagram-Q4EWVU46-zoB-G17J.js} +1 -1
  21. package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-BHuJT34t.js → blockDiagram-DXYQGD6D-BRjjtYH6.js} +1 -1
  22. package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-CpvMGtDG.js → c4Diagram-AHTNJAMY-C3D3sd2U.js} +1 -1
  23. package/dist/deck-client/assets/channel-8ReQnQfH.js +1 -0
  24. package/dist/deck-client/assets/{chunk-4BX2VUAB-B6md1VIm.js → chunk-4BX2VUAB-DhpDMOPO.js} +1 -1
  25. package/dist/deck-client/assets/{chunk-4TB4RGXK-BmEnX8ik.js → chunk-4TB4RGXK-BIRgPXRl.js} +1 -1
  26. package/dist/deck-client/assets/{chunk-55IACEB6-BZPUyZAZ.js → chunk-55IACEB6-BF24dwDZ.js} +1 -1
  27. package/dist/deck-client/assets/{chunk-EDXVE4YY-BWwNUK-l.js → chunk-EDXVE4YY-CW75Y61B.js} +1 -1
  28. package/dist/deck-client/assets/{chunk-FMBD7UC4-o7gSppGI.js → chunk-FMBD7UC4-B5-oyL79.js} +1 -1
  29. package/dist/deck-client/assets/{chunk-OYMX7WX6-C4KoTL5p.js → chunk-OYMX7WX6-BB2bHe_Q.js} +1 -1
  30. package/dist/deck-client/assets/{chunk-QZHKN3VN-jkf68sDs.js → chunk-QZHKN3VN-D80eZO4B.js} +1 -1
  31. package/dist/deck-client/assets/{chunk-YZCP3GAM-Cd4yBE7o.js → chunk-YZCP3GAM-Dz9787p_.js} +1 -1
  32. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-cRxTeGkK.js +1 -0
  33. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-cRxTeGkK.js +1 -0
  34. package/dist/deck-client/assets/clone-LSHZ3K6R.js +1 -0
  35. package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-DeGFUgAV.js → cose-bilkent-S5V4N54A-MQjiZLcL.js} +1 -1
  36. package/dist/deck-client/assets/{dagre-KV5264BT-ekcYJuUV.js → dagre-KV5264BT-DG4EcLpJ.js} +1 -1
  37. package/dist/deck-client/assets/{diagram-5BDNPKRD-YHPk4rV2.js → diagram-5BDNPKRD-1n7hM3Gc.js} +1 -1
  38. package/dist/deck-client/assets/{diagram-G4DWMVQ6-DM-JCd_B.js → diagram-G4DWMVQ6-CYMarncV.js} +1 -1
  39. package/dist/deck-client/assets/{diagram-MMDJMWI5-l5FK1ybk.js → diagram-MMDJMWI5-DSisoipe.js} +1 -1
  40. package/dist/deck-client/assets/{diagram-TYMM5635-CIN4_1-j.js → diagram-TYMM5635-Btnq49OJ.js} +1 -1
  41. package/dist/deck-client/assets/{erDiagram-SMLLAGMA-MyinSkEl.js → erDiagram-SMLLAGMA-Cu2Hb_Tz.js} +1 -1
  42. package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-Dk8nn42x.js → flowDiagram-DWJPFMVM-CGJzUzsO.js} +1 -1
  43. package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-BU1ihicu.js → ganttDiagram-T4ZO3ILL-D9sqGUBT.js} +1 -1
  44. package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-BjsTL13C.js → gitGraphDiagram-UUTBAWPF-C0QwX2od.js} +1 -1
  45. package/dist/deck-client/assets/{graph-DJmh-xi7.js → graph-CcBjOQCl.js} +1 -1
  46. package/dist/deck-client/assets/index-0arwoc0z.js +1195 -0
  47. package/dist/deck-client/assets/index-6sdqbm2o.js +2 -0
  48. package/dist/deck-client/assets/{index-DsIZ3LqL.css → index-BlTlhxFW.css} +1 -1
  49. package/dist/deck-client/assets/{infoDiagram-42DDH7IO-Dxvy_RB4.js → infoDiagram-42DDH7IO-DTimhhhS.js} +1 -1
  50. package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-DPOaNF1l.js → ishikawaDiagram-UXIWVN3A-DxOxg_B4.js} +1 -1
  51. package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-DMew3K5c.js → journeyDiagram-VCZTEJTY-Bpq0qa4j.js} +1 -1
  52. package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-csciJFuk.js → kanban-definition-6JOO6SKY-aTIrpcVO.js} +1 -1
  53. package/dist/deck-client/assets/{layout-Dg4yyms2.js → layout-DqglLR2E.js} +1 -1
  54. package/dist/deck-client/assets/{linear-BA3zU6gq.js → linear-D5GxehPc.js} +1 -1
  55. package/dist/deck-client/assets/{min-lz-Ird-p.js → min-DXLfSREq.js} +1 -1
  56. package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-CCEN8OQV.js → mindmap-definition-QFDTVHPH-mO5Vys7I.js} +1 -1
  57. package/dist/deck-client/assets/{pieDiagram-DEJITSTG-DM6n1HY7.js → pieDiagram-DEJITSTG-Dm0gzdAr.js} +1 -1
  58. package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-_ULoR66n.js → quadrantDiagram-34T5L4WZ-Daq7j3qD.js} +1 -1
  59. package/dist/deck-client/assets/{requirementDiagram-MS252O5E-BuwJs7Tn.js → requirementDiagram-MS252O5E-CmwV95um.js} +1 -1
  60. package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-BEsuzkW4.js → sankeyDiagram-XADWPNL6-BOYl3Nkf.js} +1 -1
  61. package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-CP2H0YWf.js → sequenceDiagram-FGHM5R23-BuUjhIcW.js} +1 -1
  62. package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-B5Gw_NNL.js → stateDiagram-FHFEXIEX-LUZ_uwio.js} +1 -1
  63. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-CnnRwE5D.js +1 -0
  64. package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-DsoYydQa.js → timeline-definition-GMOUNBTQ-CDUxCCAW.js} +1 -1
  65. package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-Dz8JT_ob.js → vennDiagram-DHZGUBPP-BRb24Tf7.js} +1 -1
  66. package/dist/deck-client/assets/{wardley-RL74JXVD-DGHQ_Ijv.js → wardley-RL74JXVD-B0BYyVBY.js} +1 -1
  67. package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-DN1LJMB1.js → wardleyDiagram-NUSXRM2D-BLGlYrQz.js} +1 -1
  68. package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-nb0oSfrQ.js → xychartDiagram-5P7HB3ND-De31MSnk.js} +1 -1
  69. package/dist/deck-client/index.html +2 -2
  70. package/dist/server/cli.js +666 -12
  71. package/dist/server/council-entry.js +0 -0
  72. package/dist/server/deck-mcp-entry.js +224 -61
  73. package/dist/server/deck-serve.js +195 -41
  74. package/dist/server/fb-wizard.js +0 -0
  75. package/dist/server/graph-mcp-entry.js +666 -12
  76. package/dist/server/init-entry.js +231 -82
  77. package/package.json +23 -21
  78. package/scaffolds/ls-marketplace/plugins/kit/skills/analyse/SKILL.md +180 -0
  79. package/scaffolds/ls-marketplace/plugins/kit/skills/{blast-radius.md → blast-radius/SKILL.md} +28 -12
  80. package/scaffolds/ls-marketplace/plugins/kit/skills/{debug.md → debug/SKILL.md} +2 -9
  81. package/scaffolds/ls-marketplace/plugins/kit/skills/diagram/SKILL.md +174 -0
  82. package/scaffolds/ls-marketplace/plugins/kit/skills/{prototype.md → prototype/SKILL.md} +21 -1
  83. package/scaffolds/ls-marketplace/plugins/kit/skills/recovery/SKILL.md +95 -0
  84. package/scaffolds/ls-marketplace/plugins/kit/skills/{wireframe.md → wireframe/SKILL.md} +21 -1
  85. package/scaffolds/migrate-safety/scripts/migrate-with-backup.sh +0 -0
  86. package/scaffolds/recall-hook/scripts/ensure-recall.sh +0 -0
  87. package/dist/deck-client/assets/channel-2PZVMiXf.js +0 -1
  88. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-Bt8xBAof.js +0 -1
  89. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-Bt8xBAof.js +0 -1
  90. package/dist/deck-client/assets/clone-BHQryoDl.js +0 -1
  91. package/dist/deck-client/assets/index-KsShfCV-.js +0 -476
  92. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-4T4wMDXr.js +0 -1
  93. package/scaffolds/ls-marketplace/plugins/kit/skills/diagram.md +0 -134
  94. package/scaffolds/ls-marketplace/plugins/kit/skills/recall.md +0 -83
  95. /package/dist/chart-client/assets/{index-Ccy-DpI-.js → index-B__ARB8k.js} +0 -0
  96. /package/dist/client/assets/{index-Dp0_okva.js → index-h8kMzVtG.js} +0 -0
  97. /package/dist/council-client/assets/{index-Dt4zWKSj.js → index-CWaDcsFR.js} +0 -0
  98. /package/scaffolds/ls-marketplace/plugins/kit/skills/{beacon-array.md → beacon-array/SKILL.md} +0 -0
  99. /package/scaffolds/ls-marketplace/plugins/kit/skills/{beacon-clear.md → beacon-clear/SKILL.md} +0 -0
  100. /package/scaffolds/ls-marketplace/plugins/kit/skills/{beacon-pulse.md → beacon-pulse/SKILL.md} +0 -0
  101. /package/scaffolds/ls-marketplace/plugins/kit/skills/{beacon-scan.md → beacon-scan/SKILL.md} +0 -0
  102. /package/scaffolds/ls-marketplace/plugins/kit/skills/{brief.md → brief/SKILL.md} +0 -0
  103. /package/scaffolds/ls-marketplace/plugins/kit/skills/{course.md → course/SKILL.md} +0 -0
  104. /package/scaffolds/ls-marketplace/plugins/kit/skills/{deploy-check.md → deploy-check/SKILL.md} +0 -0
  105. /package/scaffolds/ls-marketplace/plugins/kit/skills/{orbit.md → orbit/SKILL.md} +0 -0
  106. /package/scaffolds/ls-marketplace/plugins/kit/skills/{show-mcp-status.md → show-mcp-status/SKILL.md} +0 -0
@@ -1 +0,0 @@
1
- import{s as t,b as r,a,S as s}from"./chunk-OYMX7WX6-C4KoTL5p.js";import{_ as i}from"./index-KsShfCV-.js";import"./chunk-55IACEB6-BZPUyZAZ.js";import"./chunk-EDXVE4YY-BWwNUK-l.js";var l={parser:a,get db(){return new s(2)},renderer:r,styles:t,init:i(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")};export{l as diagram};
@@ -1,134 +0,0 @@
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.**
@@ -1,83 +0,0 @@
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.