@launchsecure/launch-kit 0.0.38 → 0.0.39

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 (93) hide show
  1. package/dist/beacon/beacon.mjs +308 -298
  2. package/dist/beacon/beacon.mjs.map +1 -1
  3. package/dist/beacon/beacon.umd.js +6 -6
  4. package/dist/beacon/beacon.umd.js.map +1 -1
  5. package/dist/beacon/types/internal/screenshot.d.ts.map +1 -1
  6. package/dist/chart-client/assets/index-ysGpLeOW.css +1 -0
  7. package/dist/chart-client/index.html +2 -2
  8. package/dist/client/assets/index-CMN3tlGP.css +32 -0
  9. package/dist/client/index.html +2 -2
  10. package/dist/council-client/assets/index-ChmNX6bZ.css +1 -0
  11. package/dist/council-client/index.html +2 -2
  12. package/dist/deck-client/assets/{_baseUniq-CgW32Gdk.js → _baseUniq-DOrnEQMI.js} +1 -1
  13. package/dist/deck-client/assets/{arc-D-Mg9gvM.js → arc-DOWK7V3m.js} +1 -1
  14. package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-CdTsXsgl.js → architectureDiagram-Q4EWVU46-DPhzvk7q.js} +1 -1
  15. package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-mwTneYyB.js → blockDiagram-DXYQGD6D-CwAGy9lU.js} +1 -1
  16. package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-C4R8IbjO.js → c4Diagram-AHTNJAMY-L_g_SS21.js} +1 -1
  17. package/dist/deck-client/assets/channel-DqiACUUq.js +1 -0
  18. package/dist/deck-client/assets/{chunk-4BX2VUAB-ZWuRIUwb.js → chunk-4BX2VUAB-RKm0LXpu.js} +1 -1
  19. package/dist/deck-client/assets/{chunk-4TB4RGXK-PNHX10sF.js → chunk-4TB4RGXK-Bk0FUbxU.js} +1 -1
  20. package/dist/deck-client/assets/{chunk-55IACEB6-CD9MUgPr.js → chunk-55IACEB6-Cl3hja-M.js} +1 -1
  21. package/dist/deck-client/assets/{chunk-EDXVE4YY-C_CpORb3.js → chunk-EDXVE4YY-CNIMQCV2.js} +1 -1
  22. package/dist/deck-client/assets/{chunk-FMBD7UC4-Bg5RoVC-.js → chunk-FMBD7UC4-DqOvWr1k.js} +1 -1
  23. package/dist/deck-client/assets/{chunk-OYMX7WX6-DhTwgQwd.js → chunk-OYMX7WX6-1Kd7yK5u.js} +1 -1
  24. package/dist/deck-client/assets/{chunk-QZHKN3VN-C5VLMaFa.js → chunk-QZHKN3VN-6_kraYpP.js} +1 -1
  25. package/dist/deck-client/assets/{chunk-YZCP3GAM-NAGHy4Sr.js → chunk-YZCP3GAM-FgAwIWlo.js} +1 -1
  26. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-D23cq2C3.js +1 -0
  27. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-D23cq2C3.js +1 -0
  28. package/dist/deck-client/assets/clone-C7jSigGq.js +1 -0
  29. package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-CpUczjZk.js → cose-bilkent-S5V4N54A-CigVnnPr.js} +1 -1
  30. package/dist/deck-client/assets/{dagre-KV5264BT-BOvb07MG.js → dagre-KV5264BT-DHZXTktX.js} +1 -1
  31. package/dist/deck-client/assets/{diagram-5BDNPKRD-BPxwTiC-.js → diagram-5BDNPKRD-H5k0eauU.js} +1 -1
  32. package/dist/deck-client/assets/{diagram-G4DWMVQ6-Dz_gsHgx.js → diagram-G4DWMVQ6-Bg3dFhSY.js} +1 -1
  33. package/dist/deck-client/assets/{diagram-MMDJMWI5-B7z-oVTW.js → diagram-MMDJMWI5-CQLC410N.js} +1 -1
  34. package/dist/deck-client/assets/{diagram-TYMM5635-CAIAglLQ.js → diagram-TYMM5635-DFTCHVkP.js} +1 -1
  35. package/dist/deck-client/assets/{erDiagram-SMLLAGMA-BiViTWF3.js → erDiagram-SMLLAGMA-aiv9GZnL.js} +1 -1
  36. package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-DYVemp0H.js → flowDiagram-DWJPFMVM-C6Fhvtsy.js} +1 -1
  37. package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-Chc1Iyu1.js → ganttDiagram-T4ZO3ILL-DSaGMPM4.js} +1 -1
  38. package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-B7eFgaj5.js → gitGraphDiagram-UUTBAWPF-DMjL2Vix.js} +1 -1
  39. package/dist/deck-client/assets/{graph-CKaIoNwb.js → graph-B7Vn5lkK.js} +1 -1
  40. package/dist/deck-client/assets/{index-BRawc7RA.js → index-BD36e-tD.js} +68 -68
  41. package/dist/deck-client/assets/index-CGbNOpk9.css +1 -0
  42. package/dist/deck-client/assets/{infoDiagram-42DDH7IO-BxsVq7vO.js → infoDiagram-42DDH7IO-mNi4iygG.js} +1 -1
  43. package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-DAM7vPwa.js → ishikawaDiagram-UXIWVN3A-BwCUmUVt.js} +1 -1
  44. package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-Xe20Nf7R.js → journeyDiagram-VCZTEJTY-C6qoqJmJ.js} +1 -1
  45. package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-DS8YguzB.js → kanban-definition-6JOO6SKY-Dz1Tt3sA.js} +1 -1
  46. package/dist/deck-client/assets/{layout-DKMBpzR-.js → layout-CZTyRhOG.js} +1 -1
  47. package/dist/deck-client/assets/{linear-DTNtBg5h.js → linear--7n7iEvd.js} +1 -1
  48. package/dist/deck-client/assets/{min-C4DrxCcA.js → min-Bh130DN8.js} +1 -1
  49. package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-B4nEtsw5.js → mindmap-definition-QFDTVHPH-CfXcK1qH.js} +1 -1
  50. package/dist/deck-client/assets/{pieDiagram-DEJITSTG-BzHdGNu5.js → pieDiagram-DEJITSTG-DjVHLAVw.js} +1 -1
  51. package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-CaX0SD4-.js → quadrantDiagram-34T5L4WZ-CXwvZ1i1.js} +1 -1
  52. package/dist/deck-client/assets/{requirementDiagram-MS252O5E-QeG4p2ni.js → requirementDiagram-MS252O5E-Cl6xm0fR.js} +1 -1
  53. package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-BoAwgAj-.js → sankeyDiagram-XADWPNL6-BOH9sLyh.js} +1 -1
  54. package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-Dn4pYYgu.js → sequenceDiagram-FGHM5R23-BC1MYBn6.js} +1 -1
  55. package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-Is6KRmQV.js → stateDiagram-FHFEXIEX-kNp9bv8K.js} +1 -1
  56. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-hRsAFc2t.js +1 -0
  57. package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-v64IZGuY.js → timeline-definition-GMOUNBTQ-DKnITsD4.js} +1 -1
  58. package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-noh9eouF.js → vennDiagram-DHZGUBPP-BdajXRrh.js} +1 -1
  59. package/dist/deck-client/assets/wardley-RL74JXVD-BL802-su.js +162 -0
  60. package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-DxR4j737.js → wardleyDiagram-NUSXRM2D-B2hDCDl2.js} +1 -1
  61. package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-B26vodaL.js → xychartDiagram-5P7HB3ND-CvnYFs51.js} +1 -1
  62. package/dist/deck-client/index.html +2 -2
  63. package/dist/server/council-entry.js +0 -0
  64. package/dist/server/deck-mcp-entry.js +3 -1
  65. package/dist/server/deck-serve.js +3 -1
  66. package/dist/server/fb-wizard.js +0 -0
  67. package/dist/server/init-entry.js +152 -25
  68. package/dist/server/radar-docker-init-entry.js +0 -0
  69. package/dist/server/radar-entrypoint-entry.js +0 -0
  70. package/dist/server/radar-teardown-entry.js +0 -0
  71. package/dist/server/rover-entry.js +44 -1
  72. package/package.json +23 -22
  73. package/scaffolds/ls-marketplace/plugins/kit/commands/activate-statusline.md +8 -7
  74. package/scaffolds/ls-marketplace/plugins/kit/commands/deactivate-statusline.md +2 -2
  75. package/scaffolds/ls-marketplace/plugins/kit/skills/comms/SKILL.md +88 -0
  76. package/scaffolds/ls-marketplace/plugins/kit/skills/project-info/SKILL.md +88 -0
  77. package/scaffolds/ls-marketplace/plugins/kit/skills/slides/SKILL.md +118 -0
  78. package/scaffolds/migrate-safety/scripts/migrate-with-backup.sh +0 -0
  79. package/scaffolds/recall-hook/scripts/ensure-recall.sh +0 -0
  80. package/scaffolds/statusline/statusline-base.sh +20 -0
  81. package/dist/chart-client/assets/index-B6rR0CWx.css +0 -1
  82. package/dist/client/assets/index-D6uX1lQe.css +0 -32
  83. package/dist/council-client/assets/index-CleYLarJ.css +0 -1
  84. package/dist/deck-client/assets/channel-CuSee7GO.js +0 -1
  85. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-_kTisqzs.js +0 -1
  86. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-_kTisqzs.js +0 -1
  87. package/dist/deck-client/assets/clone-kb3zkY60.js +0 -1
  88. package/dist/deck-client/assets/index-55P73aS_.css +0 -1
  89. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-Cy45Ttqq.js +0 -1
  90. package/dist/deck-client/assets/wardley-RL74JXVD-cJ_1is2S.js +0 -162
  91. /package/dist/chart-client/assets/{index-C_xCi3gW.js → index-BlsuXuQ1.js} +0 -0
  92. /package/dist/client/assets/{index-CRecYFUA.js → index-BA7BHBWT.js} +0 -0
  93. /package/dist/council-client/assets/{index-DO-Vn15O.js → index-jjBWyhry.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@launchsecure/launch-kit",
3
- "version": "0.0.38",
3
+ "version": "0.0.39",
4
4
  "description": "LaunchSecure toolkit — launch-sequencer (pipeline runner + terminal bridge), launch-radar (feedback webhook receiver), launch-chart (project graph MCP), launch-deck (visual playground MCP), launch-kit-beacon (feedback Web Component), launch-recall (file-watcher backup). launch-pod is the container image these run inside.",
5
5
  "license": "MIT",
6
6
  "author": "LaunchSecure - AutomateWithUs",
@@ -59,6 +59,24 @@
59
59
  "launch-rover": "./dist/server/rover-entry.js",
60
60
  "launch-bot": "./dist/server/launch-bot-entry.js"
61
61
  },
62
+ "scripts": {
63
+ "build": "pnpm build:client && pnpm build:chart-client && pnpm build:deck-client && pnpm build:council-client && pnpm build:beacon && pnpm build:server",
64
+ "build:beacon": "vite build --config vite.beacon.config.ts && tsc -p tsconfig.beacon.json --emitDeclarationOnly --outDir dist/beacon/types",
65
+ "test:beacon": "vitest run --config vite.beacon.config.ts",
66
+ "test:radar": "vitest run --config vite.radar.config.ts",
67
+ "test:chart": "vitest run --config vite.chart.test.config.ts",
68
+ "build:deck-client": "vite build --config vite.deck.config.ts",
69
+ "build:council-client": "vite build --config vite.council.config.ts",
70
+ "build:client": "vite build",
71
+ "build:chart-client": "vite build --config vite.chart.config.ts",
72
+ "build:server": "esbuild src/server/cli.ts src/server/fb-wizard.ts src/server/graph-mcp-entry.ts src/server/chart-serve.ts src/server/deck-mcp-entry.ts src/server/deck-serve.ts src/server/council-entry.ts src/server/council-serve.ts src/server/recall-entry.ts src/server/init-entry.ts src/server/orbit-entry.ts src/server/course-entry.ts src/server/beacon-monitor-entry.ts src/server/parse-worker-entry.ts src/server/radar-teardown-entry.ts src/server/radar-docker-init-entry.ts src/server/launch-radar-entry.ts src/server/rover-entry.ts src/server/launch-bot-entry.ts --bundle --platform=node --target=node18 --outdir=dist/server --external:node-pty --external:ws --external:typescript --external:web-tree-sitter --external:tree-sitter-typescript --external:cloudflared --external:pg --external:pg-native --external:pgsql-parser --external:libpg-query && rm -rf dist/server/public && cp -r ../claude-code-web/src/public dist/server/public && rm -rf dist/server/graph/queries && mkdir -p dist/server/graph && cp -r src/server/graph/queries dist/server/graph/queries",
73
+ "dev:client": "vite",
74
+ "dev:deck-serve": "cd ../.. && tsx watch packages/cli/src/server/deck-mcp-entry.ts serve",
75
+ "dev:chart": "pnpm build:server && pnpm build:chart-client && node dist/server/graph-mcp-entry.js serve",
76
+ "dev:server": "pnpm build:server && node dist/server/cli.js",
77
+ "dev": "pnpm build:server && concurrently -k -n client,server -c cyan,magenta \"vite\" \"node dist/server/cli.js\"",
78
+ "prepublishOnly": "pnpm build"
79
+ },
62
80
  "files": [
63
81
  "dist",
64
82
  "prompts",
@@ -79,6 +97,8 @@
79
97
  "ws": "^8.18.0"
80
98
  },
81
99
  "devDependencies": {
100
+ "@launchsecure/claude-code-web": "workspace:*",
101
+ "@launchsecure/ui": "workspace:*",
82
102
  "@types/node": "^20.0.0",
83
103
  "@types/pg": "^8.11.10",
84
104
  "@types/react": "^18.3.12",
@@ -102,25 +122,6 @@
102
122
  "react-router-dom": "^6.28.0",
103
123
  "tailwindcss": "^3.4.19",
104
124
  "vite": "^5.4.11",
105
- "vitest": "^1.6.0",
106
- "@launchsecure/claude-code-web": "0.0.1",
107
- "@launchsecure/ui": "0.0.1"
108
- },
109
- "scripts": {
110
- "build": "pnpm build:client && pnpm build:chart-client && pnpm build:deck-client && pnpm build:council-client && pnpm build:beacon && pnpm build:server",
111
- "build:beacon": "vite build --config vite.beacon.config.ts && tsc -p tsconfig.beacon.json --emitDeclarationOnly --outDir dist/beacon/types",
112
- "test:beacon": "vitest run --config vite.beacon.config.ts",
113
- "test:radar": "vitest run --config vite.radar.config.ts",
114
- "test:chart": "vitest run --config vite.chart.test.config.ts",
115
- "build:deck-client": "vite build --config vite.deck.config.ts",
116
- "build:council-client": "vite build --config vite.council.config.ts",
117
- "build:client": "vite build",
118
- "build:chart-client": "vite build --config vite.chart.config.ts",
119
- "build:server": "esbuild src/server/cli.ts src/server/fb-wizard.ts src/server/graph-mcp-entry.ts src/server/chart-serve.ts src/server/deck-mcp-entry.ts src/server/deck-serve.ts src/server/council-entry.ts src/server/council-serve.ts src/server/recall-entry.ts src/server/init-entry.ts src/server/orbit-entry.ts src/server/course-entry.ts src/server/beacon-monitor-entry.ts src/server/parse-worker-entry.ts src/server/radar-teardown-entry.ts src/server/radar-docker-init-entry.ts src/server/launch-radar-entry.ts src/server/rover-entry.ts src/server/launch-bot-entry.ts --bundle --platform=node --target=node18 --outdir=dist/server --external:node-pty --external:ws --external:typescript --external:web-tree-sitter --external:tree-sitter-typescript --external:cloudflared --external:pg --external:pg-native --external:pgsql-parser --external:libpg-query && rm -rf dist/server/public && cp -r ../claude-code-web/src/public dist/server/public && rm -rf dist/server/graph/queries && mkdir -p dist/server/graph && cp -r src/server/graph/queries dist/server/graph/queries",
120
- "dev:client": "vite",
121
- "dev:deck-serve": "cd ../.. && tsx watch packages/cli/src/server/deck-mcp-entry.ts serve",
122
- "dev:chart": "pnpm build:server && pnpm build:chart-client && node dist/server/graph-mcp-entry.js serve",
123
- "dev:server": "pnpm build:server && node dist/server/cli.js",
124
- "dev": "pnpm build:server && concurrently -k -n client,server -c cyan,magenta \"vite\" \"node dist/server/cli.js\""
125
+ "vitest": "^1.6.0"
125
126
  }
126
- }
127
+ }
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Wire launch-kit's MCP chips into the user's existing Claude Code statusline. Additive — does not create or replace an existing statusline, only appends colored chips (recall/chart/deck/council/secure) showing each daemon's liveness + last-activity age, plus a reachability probe for the hosted launch-secure MCP. Idempotent. Run /kit:deactivate-statusline to undo.
2
+ description: Wire launch-kit's MCP chips into the user's Claude Code statusline. Appends colored chips (recall/chart/deck/council/secure) showing each daemon's liveness + last-activity age, plus a reachability probe for the hosted launch-secure MCP. If the user has no statusline, scaffolds Claude Code's default base line first so the chips have something to attach to. Idempotent. Run /kit:deactivate-statusline to undo.
3
3
  ---
4
4
 
5
5
  # /kit:activate-statusline
@@ -9,11 +9,12 @@ Extends the user's existing `~/.claude/settings.json` statusline so MCP daemon h
9
9
  ## What it does
10
10
 
11
11
  1. Reads `~/.claude/settings.json` and checks for an existing `statusLine.command`.
12
- - If absent → reports plainly that the user must create their own statusline first. Do NOT scaffold one launch-kit only EXTENDS, never CREATES.
13
- 2. Writes two scripts under `~/.launchsecure/`:
12
+ - If absent → scaffolds `statusline-base.sh` (Claude Code's documented default base line: model · folder · context %) and stashes it as the original, so the chips render over a useful line instead of bailing. Creates `~/.claude/settings.json` if it doesn't exist.
13
+ 2. Writes scripts under `~/.launchsecure/`:
14
14
  - `statusline-mcp.sh` — emits the colored MCP chips.
15
- - `statusline-wrapper.sh` — runs the user's original command, then appends chips.
16
- 3. Replaces `statusLine.command` with the wrapper, stashing the original under `_launchKitStatuslineOriginal` inside the same settings.json (single source of truth, no sidecar state).
15
+ - `statusline-wrapper.sh` — runs the original (or scaffolded base) command, then appends chips.
16
+ - `statusline-base.sh` only when scaffolding; the default base line.
17
+ 3. Replaces `statusLine.command` with the wrapper, stashing the original (or scaffolded base) under `_launchKitStatuslineOriginal` inside the same settings.json (single source of truth, no sidecar state).
17
18
  4. Idempotent: if the wrapper is already wired, refreshes the chip scripts only.
18
19
 
19
20
  ## How to run
@@ -37,9 +38,9 @@ node packages/cli/dist/server/init-entry.js statusline activate [--show=...]
37
38
  If the user passed an argument to the slash command (e.g. `/kit:activate-statusline recall,chart`), forward it as `--show=$ARGUMENTS`.
38
39
 
39
40
  The command prints one of:
40
- - `✓ activated …` — newly wrapped
41
+ - `✓ activated …` — newly wrapped an existing statusline
42
+ - `✓ scaffolded …` — user had no statusline; scaffolded the default base line + chips
41
43
  - `✓ refreshed …` — already wrapped, scripts refreshed
42
- - `✗ no-statusline …` — user has no statusline; report this and stop, do not propose creating one
43
44
 
44
45
  ## After running
45
46
 
@@ -9,8 +9,8 @@ Reverses `/kit:activate-statusline`. Restores `~/.claude/settings.json`'s `statu
9
9
  ## What it does
10
10
 
11
11
  1. Reads `~/.claude/settings.json`.
12
- 2. If `_launchKitStatuslineOriginal` is present, copies it back to `statusLine` and deletes the stash key.
13
- 3. Removes `~/.launchsecure/statusline-wrapper.sh` and `~/.launchsecure/statusline-mcp.sh`.
12
+ 2. If `_launchKitStatuslineOriginal` is present, copies it back to `statusLine` and deletes the stash key. If the stash is launch-kit's own scaffolded base line (the user had no statusline before activation), removes `statusLine` entirely instead — back to no statusline.
13
+ 3. Removes `~/.launchsecure/statusline-wrapper.sh` and `~/.launchsecure/statusline-mcp.sh` (and `statusline-base.sh` if it was scaffolded).
14
14
  4. If `_launchKitStatuslineOriginal` is absent → reports "not active" and stops.
15
15
 
16
16
  ## How to run
@@ -0,0 +1,88 @@
1
+ ---
2
+ description: Read, search, and post to the LaunchSecure Communication Center (CapCom) via the launch-secure MCP. Use to find a comment/feedback/discussion by wording or author, list a channel, or post an update. Knows the default system tags and the resource_type↔channel mapping so you don't have to call tags_list or page-and-grep.
3
+ when_to_use: |
4
+ Auto-fire when the user wants to find, read, or post something in the LaunchSecure Communication Center / CapCom / Comm Hub. Trigger phrases: "find the feedback about X", "what did <person> say in comms", "search CapCom for Y", "read the feedback channel", "any discussions about Z", "post an update to comms", "what feedback did we get on W", "did anyone log X". Also auto-fire when an earlier attempt to find a comment failed and you reached for paging+grepping — that's the signal to use `q`/`author` server-side filters instead. Do NOT auto-fire for: writing a repo-backed long-form doc (use /kit:brief), drafting a daily standup (use /kit:standup), or filing a launch-kit bug/gap report (use kit_feedback_submit).
5
+ allowed-tools:
6
+ - mcp__launch-secure__communication_read
7
+ - mcp__launch-secure__communication_write
8
+ - mcp__launch-secure__communication_update
9
+ - mcp__launch-secure__communication_vote
10
+ - mcp__launch-secure__communication_delete
11
+ - mcp__launch-secure__tags_list
12
+ - mcp__launch-secure__members_list
13
+ ---
14
+
15
+ # /kit:comms
16
+
17
+ Find, read, and post in the LaunchSecure Communication Center ("CapCom" / Comm Hub) through the `launch-secure` MCP. This skill exists because the failure mode is predictable: people pull a whole channel and grep locally, miss a comment, and conclude "it's not there" or "I can't read it." Use the server-side filters instead.
18
+
19
+ `org_slug` / `project_slug` are **optional** — they default to the MCP's configured project (`.mcp.json` headers). Never ask the user for them unless a tool actually errors that they're missing.
20
+
21
+ ## The model that trips people up
22
+
23
+ The CapCom UI sub-tabs (**All · Comments · Discussions · Issues · Requirements · Feedback**) map to **`resource_type`**, NOT to tags:
24
+
25
+ | UI channel | `communication_read` filter |
26
+ |---|---|
27
+ | Comments | `resource_type: "comment"` |
28
+ | Discussions | `resource_type: "discussion"` |
29
+ | Issues | `resource_type: "issue"` |
30
+ | Requirements | `resource_type: "requirement"` |
31
+ | Feedback | `resource_type: "feedback"` |
32
+
33
+ **A comment can be `resource_type:"feedback"` and NOT carry the `feedback` tag** — beacon-submitted feedback gets both the resource type and the tag, but legacy / non-beacon / pre-ingest feedback often has only the resource type. So `tag:"feedback"` and `resource_type:"feedback"` return **different sets**. To read the Feedback channel, filter by `resource_type:"feedback"` — not the tag.
34
+
35
+ ## Finding one comment (don't page-and-grep)
36
+
37
+ `communication_read` filters compose with AND. The two that matter for search:
38
+
39
+ - **`q`** — case-insensitive substring across **title AND body**. This is how you find a comment by its wording. `q:"create deck"` finds it in one call; pulling 50 comments and grepping does not (and misses anything whose text is in `title` only, or that wasn't in your page).
40
+ - **`author`** — exact userId, or case-insensitive substring of the author's name/email. `author:"matt"` or `author:"hamann"`.
41
+
42
+ Examples:
43
+ - Find a feedback item by wording: `communication_read(resource_type:"feedback", q:"create deck")`
44
+ - Everything a person logged: `communication_read(author:"hamann")`
45
+ - A person's feedback only: `communication_read(resource_type:"feedback", author:"matt")`
46
+ - A discussion by topic: `communication_read(resource_type:"discussion", q:"runtime logs")`
47
+
48
+ If a search comes back empty, widen *before* concluding it's absent: drop `resource_type`, drop `tag`, try a shorter `q` stem (`"deck"` not `"create deck kit skill"`), try `author` alone. Only after the unfiltered `q`/`author` sweep is empty should you say it isn't there.
49
+
50
+ ## Default system tags
51
+
52
+ These ship on every org (from `tags_list`, `isSystem: true`) — you don't need to call `tags_list` to know them, only to get their **IDs** for a write. Numeric tags (e.g. `247`) are auto-created per work-item and are not in this list.
53
+
54
+ | Tag | Meaning |
55
+ |---|---|
56
+ | `announcement` | Team-wide announcement |
57
+ | `daily_update` | Daily standup or status update |
58
+ | `release` | Release note or changelog |
59
+ | `deployment` | Deployment note or rollback log |
60
+ | `decision` | Architectural or product decision |
61
+ | `feature` | Feature request or enhancement |
62
+ | `idea` | Feature idea or improvement suggestion |
63
+ | `feedback` | User-submitted feedback (via launch-kit beacon) |
64
+ | `bug` | Bug report or error |
65
+ | `blocker` | Blocking issue needing attention |
66
+ | `urgent` | Urgent priority item |
67
+ | `question` | Open question needing an answer |
68
+ | `review` | Code or design review thread |
69
+ | `documentation` | Documentation related |
70
+ | `Production` | Production incident, release, or hotfix |
71
+ | `staging` | Staging environment update |
72
+ | `a11y` | Accessibility concern |
73
+ | `ux` | UX or design issue |
74
+
75
+ To attach tags on a write you need their IDs: call `tags_list` once and map names → IDs (tag IDs are stable per org, names are not the API key).
76
+
77
+ ## Posting
78
+
79
+ `communication_write` requires `body` (plaintext — canonical for search/sync). Optional: `title`, `resource_type` (`comment` default; `discussion`/`feedback`/`requirement`/`issue`), `tag_ids` (from `tags_list`), `parent_id` (reply), `mentions` (user IDs — resolve via `members_list`; only ACTIVE org members notify), `fields` (structured JSONB, e.g. beacon feedback), `status` (discussions).
80
+
81
+ **Preview before you write.** CapCom posts are outward-facing and attributed to the user. Paste the full body in the terminal and wait for explicit "post it" before calling `communication_write` / `communication_update`. "Do it" / "go ahead" on an unrelated step does NOT authorize a Comm Hub write in the user's name. `communication_update` and `communication_delete` only work on the caller's own comments.
82
+
83
+ ## Constraints
84
+
85
+ - **Repo-backed long-form doc?** That's `/kit:brief` — it writes a file and the server syncs the comment; don't hand-post it here.
86
+ - **Daily standup?** That's `/kit:standup` — it has the voice/format conventions and the "since last push" diffing.
87
+ - **Bug/gap in launch-kit itself?** That's `kit_feedback_submit`, not a hand-written comment.
88
+ - **Reading is free; writing is gated.** Default to read/search freely; gate every write on an explicit go-ahead.
@@ -0,0 +1,88 @@
1
+ ---
2
+ description: Populate or refresh the local project-info snapshot (.claude/launch-kit/project-info.md) from LaunchSecure — members, providers/integrations, and environments — so Claude knows them every session without re-querying. Gitignored, CLAUDE.md-imported. Run after team/provider/env changes to refresh.
3
+ when_to_use: |
4
+ Auto-fire when the user wants to populate or refresh the project-info memory snapshot, or when the snapshot is stale. Trigger phrases: "refresh project info", "/kit:project-info", "update the project memory", "re-pull members/providers/environments", "who's on this project" (when the snapshot is empty/stale), "the project-info file says 'not populated'". Also auto-fire the first time you notice .claude/launch-kit/project-info.md exists but its Members/Providers/Environments sections are still the "_Not populated yet_" placeholder. Do NOT auto-fire for: a one-off "who's a member" question you can answer with a single members_list call (just call it), posting to comms (/kit:comms), or reading code structure (/kit:analyse).
5
+ allowed-tools:
6
+ - mcp__launch-secure__project_info
7
+ - mcp__launch-secure__members_list
8
+ - mcp__launch-secure__environments_list
9
+ - mcp__launch-secure__tags_list
10
+ - Read
11
+ - Write
12
+ - Bash
13
+ ---
14
+
15
+ # /kit:project-info
16
+
17
+ Regenerate `.claude/launch-kit/project-info.md` — the **local, git-ignored** snapshot of project facts (members, providers/integrations, environments) that Claude auto-loads every session via a CLAUDE.md `@`-import. `init` wires the file + import + gitignore and writes the identity block; **this skill fills and refreshes the cloud-sourced sections.**
18
+
19
+ It's a **cache, not a source of truth** — stamp it with the date and treat it as stale-able. Re-run after someone joins/leaves, a provider is connected, or an environment changes.
20
+
21
+ ## When the file/import isn't wired yet
22
+
23
+ `init` normally creates the file, the `@.claude/launch-kit/project-info.md` import in `CLAUDE.md`, and the `.gitignore` line. If the user never ran `init` (or hand-deleted them), ensure them yourself before writing:
24
+
25
+ ```bash
26
+ # 1. gitignore the snapshot (it can carry member names/emails — never commit it)
27
+ grep -qxF '.claude/launch-kit/project-info.md' .gitignore 2>/dev/null \
28
+ || printf '\n.claude/launch-kit/project-info.md\n' >> .gitignore
29
+
30
+ # 2. ensure CLAUDE.md imports it (Claude Code won't auto-load it otherwise)
31
+ grep -qF '@.claude/launch-kit/project-info.md' CLAUDE.md 2>/dev/null \
32
+ || printf '\n<!-- launch-kit:project-info -->\n@.claude/launch-kit/project-info.md\n<!-- /launch-kit:project-info -->\n' >> CLAUDE.md
33
+ ```
34
+
35
+ Don't duplicate either line — the `grep` guards keep it idempotent.
36
+
37
+ ## Gather (cloud LS — slugs default to the .mcp.json project)
38
+
39
+ Call these and keep only non-secret reference data:
40
+ 1. `mcp__launch-secure__project_info` → project name, counts, **active integration/provider flags**.
41
+ 2. `mcp__launch-secure__members_list` → member **name, email, role** (org + project role). Use the full list; note `mentionable`.
42
+ 3. `mcp__launch-secure__environments_list` → environment **slugs** + `defaultPullEnvSlug`.
43
+
44
+ Never write secret **values** — only provider *types*/names, env *slugs*, member identity. If a section legitimately has no data (e.g. no providers connected), write `_None connected._`, not a placeholder.
45
+
46
+ ## Write
47
+
48
+ Overwrite `.claude/launch-kit/project-info.md` (this skill owns the content; init only seeds it). Preserve the generated-header comment and the `## Identity` block if already present (re-derive Identity from `project_info` if you're regenerating from scratch). Shape:
49
+
50
+ ```markdown
51
+ # Project Info — <projectName>
52
+
53
+ <!-- launch-kit:generated — local, git-ignored snapshot. NOT a source of truth. -->
54
+ > Snapshot as of <YYYY-MM-DD>. Cache of LaunchSecure facts so Claude doesn't
55
+ > re-query each session. Re-run `/kit:project-info` after team/provider/env changes.
56
+
57
+ ## Identity
58
+ - **Org:** <orgSlug>
59
+ - **Project:** <projectName> (`<projectSlug>`)
60
+ - **Server:** <serverUrl>
61
+ - **Course:** <course>
62
+ - **Repo:** <repositoryUrl or —>
63
+
64
+ ## Members
65
+ | Name | Email | Org role | Project role |
66
+ |---|---|---|---|
67
+ | … | … | … | … |
68
+
69
+ ## Providers / integrations
70
+ - <Category>: <provider> (<connected|manual>)
71
+ _…or_ `_None connected._`
72
+
73
+ ## Environments
74
+ - `<slug>`<em> — default pull env</em> (mark the one matching defaultPullEnvSlug)
75
+ ```
76
+
77
+ Use the real values from the calls — no placeholders, no invented people (this is *this* project, cite real names/roles). Date the snapshot with today's date from context.
78
+
79
+ ## Output
80
+
81
+ After writing, print a one-line summary: `project-info refreshed — N members, M providers, K environments — snapshot <date>`. Mention it's git-ignored and loaded into context next session via the CLAUDE.md import.
82
+
83
+ ## Constraints
84
+
85
+ - **Cache, not truth.** Always date it and remind the user it can drift; this skill is the refresh path.
86
+ - **No secrets.** Provider/env *names and slugs* only — never pull or write secret values (that's `secrets_*`).
87
+ - **Local only.** The file is git-ignored on purpose (member PII). Don't commit it, don't move it out of `.claude/launch-kit/`.
88
+ - **Don't touch unrelated CLAUDE.md content.** Only ensure the single marked import block; never rewrite the user's CLAUDE.md.
@@ -0,0 +1,118 @@
1
+ ---
2
+ description: Generate a slide deck (reveal.js presentation) and push it to launch-deck for review or live presenting. Use when the user wants a talk, design walkthrough, RFC pitch, sprint demo, or stakeholder summary as navigable slides — not a single page. Calls deck's rich-html block with framework=reveal; content is markdown slides joined by `---`, with code highlighting and speaker notes.
3
+ when_to_use: |
4
+ Auto-fire when the user wants a navigable SLIDE PRESENTATION as the deliverable — a talk, pitch, design review walkthrough, RFC, sprint demo, kickoff, or stakeholder summary they'll step through. Trigger phrases: "slides for X", "make a deck / slide deck", "presentation about Y", "present this as slides", "turn this into a talk", "walkthrough deck for the design review", "pitch deck for the RFC", "demo slides for sprint review", "slide summary of Z". Deck is required because the deliverable is a rendered, arrow-key-navigable presentation the reviewer steps through — a flat document or terminal text cannot substitute. Do NOT auto-fire for: a single-screen UI sketch (use /kit:wireframe), an interactive click-through page (use /kit:prototype), a Mermaid flow/sequence/ERD (use /kit:diagram), a long-form repo-backed written document (use /kit:brief), or a plain-text summary the user can read inline in the terminal.
5
+ allowed-tools:
6
+ - mcp__launch-deck__server_status
7
+ - mcp__launch-deck__start_server
8
+ - mcp__launch-deck__deck
9
+ - mcp__launch-deck__await_feedback
10
+ - mcp__launch-chart__read_graph
11
+ - Bash
12
+ ---
13
+
14
+ # /kit:slides
15
+
16
+ Build a slide presentation and push it to launch-deck as a `reveal.js` deck. The reviewer navigates with arrow keys; code blocks are syntax-highlighted and speaker notes are available in the presenter view. Use for talks, design-review walkthroughs, RFC pitches, sprint demos, kickoffs, and stakeholder summaries — anything where the point is *stepping through* a narrative, not reading one page.
17
+
18
+ This is the slide-shaped sibling of `/kit:wireframe` (framework=wired) and `/kit:prototype` (framework=raw): same deck push, `framework: "reveal"`.
19
+
20
+ Parse `$ARGUMENTS`:
21
+ - **description** (required) — the topic/outline, e.g. "design review of the OIDC IdP rollout: problem, phases 1-4, edge gate, rollback". If absent, ask the user. If the user points at a doc/Brief/RFC, read it first and turn it into slides.
22
+ - **--session=<id>** — deck session name. Default `slides-<slugified-description-first-3-words>`.
23
+ - **--feedback** — push in `feedback` mode with `prompt: "Which slides land, and what's missing?"` and call `await_feedback` afterward.
24
+ - **--theme=light|dark** — only set when the deck ONLY makes sense in one mode. Default: omit (deck's sun/moon toggle flips the reveal white/black themes live).
25
+ - **--slides=<n>** — target slide count. Default: as many as the content needs; keep it tight (≈1 idea per slide).
26
+
27
+ Examples:
28
+ - `/kit:slides design review of the OIDC IdP rollout: problem, phases 1-4, edge gate, rollback`
29
+ - `/kit:slides sprint demo of the deck feedback feed and share links --feedback`
30
+ - `/kit:slides pitch the launch-kit health design (LS-161 first, LS-160 deferred) --slides=8`
31
+
32
+ ## Preflight
33
+
34
+ 1. Confirm `mcp__launch-deck__server_status` returns running. If not, call `mcp__launch-deck__start_server` first.
35
+ 2. If the description references a real doc, RFC, Brief, or module in this repo, pull the source before authoring slides:
36
+ - For a written doc the user names, Read it and condense — don't invent the content.
37
+ - For a codebase topic, run `mcp__launch-chart__read_graph(search: <hint>)` so the slides cite real module/file/table names, not guesses. Optional; skip on `--no-chart`.
38
+
39
+ ## Author the slides
40
+
41
+ Write the deck as **markdown slides joined by `---` on its own line** (one blank line above and below the `---`). The deck renders each chunk as one slide via reveal's markdown plugin. This is the recommended form — only hand-write raw `<section>` HTML if you need nested/vertical slides or custom layout.
42
+
43
+ ```
44
+ # Title slide
45
+ A one-line subtitle
46
+
47
+ ---
48
+
49
+ ## Problem
50
+
51
+ - Bullet one
52
+ - Bullet two
53
+
54
+ Note: speaker-only context that won't show on the slide.
55
+
56
+ ---
57
+
58
+ ## How it works
59
+
60
+ ```ts
61
+ // fenced code is syntax-highlighted
62
+ const gate = await edgeAccess(req)
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Ask
68
+
69
+ What we need a decision on.
70
+ ```
71
+
72
+ Authoring rules:
73
+ - **One idea per slide.** If a slide has more than ~6 bullets or two distinct ideas, split it. Lean toward more, lighter slides.
74
+ - **Title slide first, "Ask"/"Next steps" slide last.** Give the deck a clear arc: context → problem → approach → detail → decision/next steps.
75
+ - **Speaker notes via `Note:`.** Put the narration, caveats, and numbers you'd *say* (not show) on a `Note:` line — visible in reveal's presenter view (press `S`), hidden on the slide.
76
+ - **Code blocks are highlighted.** Use fenced blocks with a language (```ts, ```sql, ```bash). For line emphasis use reveal's syntax: ```js [1-3|5] steps through line ranges.
77
+ - **Real names, no placeholders.** Unlike a wireframe/prototype, a slide deck is about *this* work — cite the real modules, tables, ticket IDs, and file paths surfaced in preflight. No "Ada/Lin/Mehmet" filler here.
78
+ - **No secrets or live PII on slides.** Summaries and counts are fine; don't paste credentials, tokens, or real user records.
79
+ - Keep bullets to a phrase, not a sentence — the speaker fills in the rest.
80
+
81
+ ## Push to deck
82
+
83
+ Call `mcp__launch-deck__deck` with:
84
+ - `session: <session>`
85
+ - `mode: "show"` (or `"feedback"` if `--feedback` was passed; also set `prompt`)
86
+ - `blocks: [{ type: "rich-html", framework: "reveal", label: <short-title>, content: <markdown-slides>, theme: <theme?> }]`
87
+
88
+ `framework: "reveal"` means the deck wraps your markdown in a full reveal.js document (CSS, JS, markdown + highlight + notes plugins, theme toggle) — you ship only the slide markdown, not a `<!DOCTYPE html>` doc. Slides split on `\n---\n`; `Note:` lines become speaker notes; fenced code is highlighted.
89
+
90
+ If `--feedback` was passed, immediately call `mcp__launch-deck__await_feedback` with the same session and surface the user's response back.
91
+
92
+ ## Open in browser
93
+
94
+ After the push (and after `await_feedback` if `--feedback`), open the per-session URL so the user lands directly on this deck:
95
+
96
+ ```
97
+ open "<deck-url>/#<session>" # macOS
98
+ xdg-open "<deck-url>/#<session>" # Linux
99
+ ```
100
+
101
+ `<deck-url>` is the `url` returned by `mcp__launch-deck__server_status` (typically `http://localhost:52829`). The `#<session>` hash deep-links to this exact session — the deck-client picks it up on load and on hashchange. Tell the user: **arrow keys navigate, `S` opens speaker notes, `F` goes fullscreen, `Esc` shows the slide overview.**
102
+
103
+ ## Output
104
+
105
+ ```
106
+ slides pushed — deck session "<session>" — <deck-url>/#<session>
107
+ <N> slides — <M> with code — <K> with speaker notes
108
+ arc: <title> → … → <last slide>
109
+ ```
110
+
111
+ If `--feedback`: also print the feedback comment + any option selections, then ask what to change.
112
+
113
+ ## Constraints
114
+
115
+ - **Slides, not a page.** If the user wants a single click-through screen, that's `/kit:prototype`; a UI sketch is `/kit:wireframe`; a long-form written doc committed to the repo is `/kit:brief`. This skill produces a navigable deck.
116
+ - **Single block per push.** One deck = one `rich-html`/`reveal` block. Don't split a presentation across multiple deck blocks.
117
+ - **Iterate via re-push.** Re-running with the same `--session` overwrites — that's the iteration loop. Don't accumulate slides-v2, slides-v3 sessions.
118
+ - **Throwaway by default.** The deck lives in launch-deck for review/presenting. If the user wants the content committed to the repo as durable documentation, author it as a `/kit:brief` instead (or in addition).
File without changes
@@ -0,0 +1,20 @@
1
+ #!/bin/bash
2
+ # launch-kit default base statusline.
3
+ # Scaffolded by `launch-kit statusline activate` ONLY when the user has no
4
+ # statusLine.command of their own — gives the MCP chips a base line to attach
5
+ # to instead of bailing. This is Claude Code's documented canonical example
6
+ # (https://code.claude.com/docs/en/statusline.md, "Build a status line step by
7
+ # step"), used verbatim so we ship the real default, not an invented format.
8
+ # Deactivate restores whatever was here before (nothing, in the scaffold case).
9
+
10
+ # Read JSON data that Claude Code sends to stdin
11
+ input=$(cat)
12
+
13
+ # Extract fields using jq
14
+ MODEL=$(echo "$input" | jq -r '.model.display_name')
15
+ DIR=$(echo "$input" | jq -r '.workspace.current_dir')
16
+ # The "// 0" provides a fallback if the field is null
17
+ PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
18
+
19
+ # Output the status line - ${DIR##*/} extracts just the folder name
20
+ echo "[$MODEL] 📁 ${DIR##*/} | ${PCT}% context"