@launchsecure/launch-kit 0.0.28 → 0.0.29
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.
- package/dist/server/chart-serve.js +3 -1
- package/dist/server/cli.js +231 -221
- package/dist/server/council-entry.js +0 -0
- package/dist/server/course-entry.js +3 -3
- package/dist/server/fb-wizard.js +0 -0
- package/dist/server/graph-mcp-entry.js +35 -72
- package/dist/server/init-entry.js +794 -195
- package/package.json +22 -21
- package/scaffolds/ls-marketplace/.claude-plugin/marketplace.json +4 -4
- package/scaffolds/ls-marketplace/plugins/{ls → kit}/.claude-plugin/plugin.json +1 -10
- package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/activate-beacon.md +2 -2
- package/scaffolds/ls-marketplace/plugins/kit/commands/activate-statusline.md +46 -0
- package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/beacon-array.md +3 -3
- package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/beacon-clear.md +2 -2
- package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/beacon-pulse.md +7 -7
- package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/beacon-scan.md +7 -7
- package/scaffolds/ls-marketplace/plugins/kit/commands/deactivate-statusline.md +34 -0
- package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/show-mcp-status.md +6 -6
- package/scaffolds/ls-marketplace/plugins/{ls → kit}/commands/standup.md +52 -38
- package/scaffolds/migrate-safety/scripts/migrate-with-backup.sh +0 -0
- package/scaffolds/recall-hook/scripts/ensure-recall.sh +0 -0
- package/scaffolds/statusline/statusline-mcp.sh +192 -0
- package/scaffolds/statusline/statusline-wrapper.sh +50 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@launchsecure/launch-kit",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.29",
|
|
4
4
|
"description": "LaunchSecure toolkit — launch-pod (pipeline), launch-chart (project graph MCP), launch-deck (visual playground MCP), launch-kit-beacon (feedback Web Component), launch-recall (file-watcher backup).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "LaunchSecure - AutomateWithUs",
|
|
@@ -56,6 +56,23 @@
|
|
|
56
56
|
"launch-course": "./dist/server/course-entry.js",
|
|
57
57
|
"launch-beacon": "./dist/server/beacon-monitor-entry.js"
|
|
58
58
|
},
|
|
59
|
+
"scripts": {
|
|
60
|
+
"build": "pnpm build:client && pnpm build:chart-client && pnpm build:deck-client && pnpm build:council-client && pnpm build:beacon && pnpm build:server",
|
|
61
|
+
"build:beacon": "vite build --config vite.beacon.config.ts && tsc -p tsconfig.beacon.json --emitDeclarationOnly --outDir dist/beacon/types",
|
|
62
|
+
"test:beacon": "vitest run --config vite.beacon.config.ts",
|
|
63
|
+
"test:radar": "vitest run --config vite.radar.config.ts",
|
|
64
|
+
"test:chart": "vitest run --config vite.chart.test.config.ts",
|
|
65
|
+
"build:deck-client": "vite build --config vite.deck.config.ts",
|
|
66
|
+
"build:council-client": "vite build --config vite.council.config.ts",
|
|
67
|
+
"build:client": "vite build",
|
|
68
|
+
"build:chart-client": "vite build --config vite.chart.config.ts",
|
|
69
|
+
"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 --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 && 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",
|
|
70
|
+
"dev:client": "vite",
|
|
71
|
+
"dev:chart": "pnpm build:server && pnpm build:chart-client && node dist/server/graph-mcp-entry.js serve",
|
|
72
|
+
"dev:server": "pnpm build:server && node dist/server/cli.js",
|
|
73
|
+
"dev": "pnpm build:server && concurrently -k -n client,server -c cyan,magenta \"vite\" \"node dist/server/cli.js\"",
|
|
74
|
+
"prepublishOnly": "pnpm build"
|
|
75
|
+
},
|
|
59
76
|
"files": [
|
|
60
77
|
"dist",
|
|
61
78
|
"prompts",
|
|
@@ -75,6 +92,8 @@
|
|
|
75
92
|
"ws": "^8.18.0"
|
|
76
93
|
},
|
|
77
94
|
"devDependencies": {
|
|
95
|
+
"@launchsecure/claude-code-web": "workspace:*",
|
|
96
|
+
"@launchsecure/ui": "workspace:*",
|
|
78
97
|
"@types/node": "^20.0.0",
|
|
79
98
|
"@types/pg": "^8.11.10",
|
|
80
99
|
"@types/react": "^18.3.12",
|
|
@@ -98,24 +117,6 @@
|
|
|
98
117
|
"react-router-dom": "^6.28.0",
|
|
99
118
|
"tailwindcss": "^3.4.19",
|
|
100
119
|
"vite": "^5.4.11",
|
|
101
|
-
"vitest": "^1.6.0"
|
|
102
|
-
"@launchsecure/claude-code-web": "0.0.1",
|
|
103
|
-
"@launchsecure/ui": "0.0.1"
|
|
104
|
-
},
|
|
105
|
-
"scripts": {
|
|
106
|
-
"build": "pnpm build:client && pnpm build:chart-client && pnpm build:deck-client && pnpm build:council-client && pnpm build:beacon && pnpm build:server",
|
|
107
|
-
"build:beacon": "vite build --config vite.beacon.config.ts && tsc -p tsconfig.beacon.json --emitDeclarationOnly --outDir dist/beacon/types",
|
|
108
|
-
"test:beacon": "vitest run --config vite.beacon.config.ts",
|
|
109
|
-
"test:radar": "vitest run --config vite.radar.config.ts",
|
|
110
|
-
"test:chart": "vitest run --config vite.chart.test.config.ts",
|
|
111
|
-
"build:deck-client": "vite build --config vite.deck.config.ts",
|
|
112
|
-
"build:council-client": "vite build --config vite.council.config.ts",
|
|
113
|
-
"build:client": "vite build",
|
|
114
|
-
"build:chart-client": "vite build --config vite.chart.config.ts",
|
|
115
|
-
"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 --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 && 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",
|
|
116
|
-
"dev:client": "vite",
|
|
117
|
-
"dev:chart": "pnpm build:server && pnpm build:chart-client && node dist/server/graph-mcp-entry.js serve",
|
|
118
|
-
"dev:server": "pnpm build:server && node dist/server/cli.js",
|
|
119
|
-
"dev": "pnpm build:server && concurrently -k -n client,server -c cyan,magenta \"vite\" \"node dist/server/cli.js\""
|
|
120
|
+
"vitest": "^1.6.0"
|
|
120
121
|
}
|
|
121
|
-
}
|
|
122
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "launch-secure",
|
|
3
3
|
"description": "LaunchSecure plugins for Claude Code — in-app feedback widget activation, and future LS-namespaced workflows. Distributed locally via launch-kit init today; the same catalog will move to github.com/launchsecure/claude-plugins for centralized updates.",
|
|
4
4
|
"owner": {
|
|
5
5
|
"name": "LaunchSecure — AutomateWithUs",
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
},
|
|
8
8
|
"plugins": [
|
|
9
9
|
{
|
|
10
|
-
"name": "
|
|
11
|
-
"source": "./plugins/
|
|
12
|
-
"description": "
|
|
10
|
+
"name": "kit",
|
|
11
|
+
"source": "./plugins/kit",
|
|
12
|
+
"description": "Kit-namespaced slash commands. Exposes /kit:activate-beacon to wire the launch-kit-beacon in-app feedback widget into the current project."
|
|
13
13
|
}
|
|
14
14
|
]
|
|
15
15
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
2
|
+
"name": "kit",
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"description": "LaunchSecure commands for Claude Code — in-app feedback widget activation, daily standups posted to the Comm Hub, and future LS-namespaced workflows.",
|
|
5
5
|
"author": {
|
|
@@ -15,14 +15,5 @@
|
|
|
15
15
|
"feedback",
|
|
16
16
|
"standup",
|
|
17
17
|
"daily-update"
|
|
18
|
-
],
|
|
19
|
-
"commands": [
|
|
20
|
-
"./commands/activate-beacon.md",
|
|
21
|
-
"./commands/standup.md",
|
|
22
|
-
"./commands/show-mcp-status.md",
|
|
23
|
-
"./commands/beacon-scan.md",
|
|
24
|
-
"./commands/beacon-pulse.md",
|
|
25
|
-
"./commands/beacon-array.md",
|
|
26
|
-
"./commands/beacon-clear.md"
|
|
27
18
|
]
|
|
28
19
|
}
|
|
@@ -10,7 +10,7 @@ This command does the integration as a normal dev cycle — read the layout, pro
|
|
|
10
10
|
|
|
11
11
|
## Preflight
|
|
12
12
|
|
|
13
|
-
1. Confirm `.launch-secure.cred.config` exists at the repo root. If missing, stop and tell the user to run `npx launch-kit init` first — without the cred file the scaffolded `/api/feedback` route has no upstream credentials.
|
|
13
|
+
1. Confirm `.launch-secure.cred.config` exists at the repo root. If missing, stop and tell the user to run `npx @launchsecure/launch-kit init` first — without the cred file the scaffolded `/api/feedback` route has no upstream credentials.
|
|
14
14
|
2. Read `package.json` to detect framework:
|
|
15
15
|
- **Next.js App Router** — `next` in deps AND `app/` or `src/app/` directory present.
|
|
16
16
|
- **Next.js Pages Router** — `next` in deps AND `pages/` directory (no `app/`).
|
|
@@ -202,7 +202,7 @@ For Astro, SvelteKit, Nuxt, Express, plain HTML, etc.: do NOT attempt to edit ap
|
|
|
202
202
|
|
|
203
203
|
## Idempotency
|
|
204
204
|
|
|
205
|
-
Re-running `/
|
|
205
|
+
Re-running `/kit:activate-beacon`:
|
|
206
206
|
- If `BeaconMount.tsx` exists, leave it alone unless the user explicitly asks to regenerate.
|
|
207
207
|
- If `<launch-kit-beacon>` is already mounted in the layout, do NOT add a duplicate. Offer to update attributes (endpoint, position) or migrate trigger mode.
|
|
208
208
|
- If `app/api/feedback/route.ts` exists, do NOT overwrite. Diff against the scaffold template and ask whether to merge.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Wire launch-kit's MCP daemon 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) showing each daemon's liveness + last-activity age. Idempotent. Run /kit:deactivate-statusline to undo.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /kit:activate-statusline
|
|
6
|
+
|
|
7
|
+
Extends the user's existing `~/.claude/settings.json` statusline so MCP daemon health appears alongside whatever they already show (project name, git branch, context %, etc.).
|
|
8
|
+
|
|
9
|
+
## What it does
|
|
10
|
+
|
|
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/`:
|
|
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).
|
|
17
|
+
4. Idempotent: if the wrapper is already wired, refreshes the chip scripts only.
|
|
18
|
+
|
|
19
|
+
## How to run
|
|
20
|
+
|
|
21
|
+
Shell out to the kit binary:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
launch-kit statusline activate # all chips
|
|
25
|
+
launch-kit statusline activate --show=recall,chart # only these
|
|
26
|
+
launch-kit statusline activate --show=recall,chart,deck,council # explicit all
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The `--show` flag accepts any comma-separated subset of `recall,chart,deck,council`. Omitting it shows all four. Re-running activate with a different `--show` updates the chip set in place — no need to deactivate first.
|
|
30
|
+
|
|
31
|
+
If the published bin isn't on PATH (dev repo, monorepo), fall back to:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
node packages/cli/dist/server/init-entry.js statusline activate [--show=...]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
If the user passed an argument to the slash command (e.g. `/kit:activate-statusline recall,chart`), forward it as `--show=$ARGUMENTS`.
|
|
38
|
+
|
|
39
|
+
The command prints one of:
|
|
40
|
+
- `✓ activated …` — newly wrapped
|
|
41
|
+
- `✓ refreshed …` — already wrapped, scripts refreshed
|
|
42
|
+
- `✗ no-statusline …` — user has no statusline; report this and stop, do not propose creating one
|
|
43
|
+
|
|
44
|
+
## After running
|
|
45
|
+
|
|
46
|
+
Restart any open Claude Code session for the statusline to pick up the wrapper. Subsequent sessions render the chips automatically.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: Show the array of launch-beacon monitor sessions in `.launchsecure/` — which is most recent, how many events each has, last event time, suspected liveness. Use to confirm a session is being recorded, find an old session to inspect, or audit disk usage. Read-only.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# /
|
|
5
|
+
# /kit:beacon-array
|
|
6
6
|
|
|
7
7
|
Liveness + inventory across every `launch-beacon monitor` session this repo has recorded — one row per beacon in the array.
|
|
8
8
|
|
|
@@ -59,7 +59,7 @@ Rules:
|
|
|
59
59
|
- Summary line: total count + how many active.
|
|
60
60
|
- Plain text, monospace alignment.
|
|
61
61
|
|
|
62
|
-
## Full output (`/
|
|
62
|
+
## Full output (`/kit:beacon-array full`)
|
|
63
63
|
|
|
64
64
|
Same per-session block as default, but expand each into a block with extra fields:
|
|
65
65
|
|
|
@@ -89,4 +89,4 @@ End with the same summary line as default.
|
|
|
89
89
|
- **Read-only.** No deletion, no rotation, no auto-cleanup.
|
|
90
90
|
- **Fast.** Default view should be sub-second even with many session files. Don't full-parse JSON — line counts + first/last line sed is enough.
|
|
91
91
|
- **Plain text.** No markdown tables, no fenced blocks in the actual output.
|
|
92
|
-
- **Don't suggest cleanup.** That's `/
|
|
92
|
+
- **Don't suggest cleanup.** That's `/kit:beacon-clear`'s job. Stale sessions are informational, not an error.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: Wipe launch-beacon monitor session NDJSON files. Default clears only the latest session (so you can start a clean repro); pass `all` to remove every `.launchsecure/beacon-*.ndjson`. Always shows what will be deleted and asks for confirmation. Destructive.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# /
|
|
5
|
+
# /kit:beacon-clear
|
|
6
6
|
|
|
7
7
|
Clean slate before a fresh repro. The receiver appends to the same NDJSON file across reconnects of the same session, so an existing file accumulates noise from earlier attempts — clearing first makes the new stream easier to reason about.
|
|
8
8
|
|
|
@@ -33,7 +33,7 @@ Refuse with a clear message if:
|
|
|
33
33
|
- the active monitor session is being written *right now* (mtime within the last 5 seconds) — print a one-line warning and ask the user to stop the monitor first, e.g.:
|
|
34
34
|
```
|
|
35
35
|
⚠ .launchsecure/beacon-8f3c2a91.ndjson was written 2s ago — looks active.
|
|
36
|
-
Stop the receiver (Ctrl+C in the launch-beacon monitor terminal) and re-run /
|
|
36
|
+
Stop the receiver (Ctrl+C in the launch-beacon monitor terminal) and re-run /kit:beacon-clear.
|
|
37
37
|
```
|
|
38
38
|
The user can still force by passing the token explicitly as the argument — but never silently nuke an actively-written file.
|
|
39
39
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: Show the most recent error from the active launch-beacon monitor session, plus the N events that preceded it (default 10). Answers "what was happening when it broke" without scrolling through the full stream. Read-only.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# /
|
|
5
|
+
# /kit:beacon-pulse
|
|
6
6
|
|
|
7
7
|
The "what happened just before this error" command — a single pulse, freezing the moment the beacon caught a failure. When a bug fires, the actual story is usually the chain of events leading up to it: the click that triggered a state change, the failed fetch that left auth in a bad state, the route change that mounted the wrong component.
|
|
8
8
|
|
|
@@ -10,7 +10,7 @@ Parse `$ARGUMENTS` as one optional integer — the count of preceding events to
|
|
|
10
10
|
|
|
11
11
|
## Preflight
|
|
12
12
|
|
|
13
|
-
Same as `/
|
|
13
|
+
Same as `/kit:beacon-scan` — find the latest NDJSON; if none, stop:
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
16
|
LATEST=$(ls -t .launchsecure/beacon-*.ndjson 2>/dev/null | head -1)
|
|
@@ -23,7 +23,7 @@ Errors are events with `"kind":"error"` or `"kind":"unhandledrejection"`. Find t
|
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
25
|
ERR_LINE=$(grep -nE '"kind":"(error|unhandledrejection)"' "$LATEST" | tail -1 | cut -d: -f1)
|
|
26
|
-
test -n "$ERR_LINE" || { echo "No errors in the current session. Use /
|
|
26
|
+
test -n "$ERR_LINE" || { echo "No errors in the current session. Use /kit:beacon-scan to browse all events."; exit 0; }
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
## Pull the window
|
|
@@ -62,7 +62,7 @@ window: 10 events before error at line 247
|
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
Format rules:
|
|
65
|
-
- One line per event, same SUMMARY format as `/
|
|
65
|
+
- One line per event, same SUMMARY format as `/kit:beacon-scan`.
|
|
66
66
|
- The error block at the end gets the message + (truncated) stack frames if present.
|
|
67
67
|
- Separator above the error is the visual cue.
|
|
68
68
|
|
|
@@ -71,10 +71,10 @@ After the timeline, write **one short paragraph** of analysis: what does the cha
|
|
|
71
71
|
- click → no observable effect → click again → error → "first click handler crashed silently; second click landed on something else"
|
|
72
72
|
- route change → error → "component on the new route blew up during initial render"
|
|
73
73
|
|
|
74
|
-
Don't dive into a fix — name the suspected proximate cause, suggest one concrete next step (which file to read, which probe to add, which `/
|
|
74
|
+
Don't dive into a fix — name the suspected proximate cause, suggest one concrete next step (which file to read, which probe to add, which `/kit:beacon-scan <kind>` to drill into).
|
|
75
75
|
|
|
76
76
|
## Constraints
|
|
77
77
|
|
|
78
78
|
- **Read-only.**
|
|
79
|
-
- **Most recent error only.** If the user wants an earlier one, they can clear the session (`/
|
|
80
|
-
- **Plain text.** Same monospace conventions as `/
|
|
79
|
+
- **Most recent error only.** If the user wants an earlier one, they can clear the session (`/kit:beacon-clear`) and reproduce, or grep manually.
|
|
80
|
+
- **Plain text.** Same monospace conventions as `/kit:beacon-scan`.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: Scan recent events from the active launch-beacon monitor session. Defaults to last 50 events across all kinds; pass a kind (`error`, `click`, `fetch`, `route`, `dialog`, `probe`, etc.) to filter, and/or a numeric limit. Reads `.launchsecure/beacon-*.ndjson` — the file written by `launch-beacon monitor`. Read-only.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# /
|
|
5
|
+
# /kit:beacon-scan
|
|
6
6
|
|
|
7
7
|
Recent runtime events captured by a `launch-beacon monitor` session. Use this as the first step when investigating something that just happened in the browser — clicks, failed network calls, errors, route changes, probe() calls, dialog mount/unmount.
|
|
8
8
|
|
|
@@ -11,10 +11,10 @@ Parse `$ARGUMENTS` as up to two tokens (space-separated):
|
|
|
11
11
|
- A **limit**: integer. Default 50.
|
|
12
12
|
|
|
13
13
|
Examples:
|
|
14
|
-
- `/
|
|
15
|
-
- `/
|
|
16
|
-
- `/
|
|
17
|
-
- `/
|
|
14
|
+
- `/kit:beacon-scan` → last 50 events of any kind
|
|
15
|
+
- `/kit:beacon-scan error` → last 50 errors only
|
|
16
|
+
- `/kit:beacon-scan click 20` → last 20 click events
|
|
17
|
+
- `/kit:beacon-scan 100` → last 100 events of any kind
|
|
18
18
|
|
|
19
19
|
## Preflight
|
|
20
20
|
|
|
@@ -56,7 +56,7 @@ If the buffer is empty after filtering, say so: `No events match that filter in
|
|
|
56
56
|
|
|
57
57
|
## Constraints
|
|
58
58
|
|
|
59
|
-
- **Read-only.** Never delete, modify, or write to the NDJSON file. Wiping is `/
|
|
59
|
+
- **Read-only.** Never delete, modify, or write to the NDJSON file. Wiping is `/kit:beacon-clear`.
|
|
60
60
|
- **Always use the latest session by default.** If the user wants a specific session, they'll pass it as a third token — accept any of `<token>`, `<filename>`, or absolute path, and resolve to a valid `.launchsecure/beacon-*.ndjson` path before scanning. Reject with a clear error if it doesn't exist.
|
|
61
61
|
- **Plain text output.** Monospace alignment beats markdown tables here. The user is reading this fast during a debug loop.
|
|
62
|
-
- **Don't speculate on root cause.** Surface anomalies; let the user direct the next query (often: `/
|
|
62
|
+
- **Don't speculate on root cause.** Surface anomalies; let the user direct the next query (often: `/kit:beacon-pulse` for context around the latest error).
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Remove launch-kit's MCP daemon chips from the user's Claude Code statusline. Restores the original statusLine.command from the snapshot under _launchKitStatuslineOriginal and deletes the kit-managed wrapper + chip scripts. Idempotent — silently reports if nothing to undo.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /kit:deactivate-statusline
|
|
6
|
+
|
|
7
|
+
Reverses `/kit:activate-statusline`. Restores `~/.claude/settings.json`'s `statusLine.command` to whatever it pointed at before activation.
|
|
8
|
+
|
|
9
|
+
## What it does
|
|
10
|
+
|
|
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`.
|
|
14
|
+
4. If `_launchKitStatuslineOriginal` is absent → reports "not active" and stops.
|
|
15
|
+
|
|
16
|
+
## How to run
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
launch-kit statusline deactivate
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or, in a dev repo:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node packages/cli/dist/server/init-entry.js statusline deactivate
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The command prints one of:
|
|
29
|
+
- `✓ deactivated …`
|
|
30
|
+
- `✗ not-active …`
|
|
31
|
+
|
|
32
|
+
## After running
|
|
33
|
+
|
|
34
|
+
Restart any open Claude Code session for the statusline change to take effect.
|
|
@@ -2,13 +2,13 @@
|
|
|
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
|
-
# /
|
|
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 (`/
|
|
11
|
-
- `full` (`/
|
|
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
|
|
|
@@ -36,7 +36,7 @@ Or if dead:
|
|
|
36
36
|
```
|
|
37
37
|
recall ✗ dead pidfile missing/stale
|
|
38
38
|
|
|
39
|
-
1 daemon down. Run /
|
|
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 `node packages/cli/dist/server/recall-entry.js watch` from this repo).
|
|
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 (`/
|
|
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
|
|
|
@@ -106,4 +106,4 @@ Don't over-warn — if a repo has genuinely been idle (e.g. you opened it for th
|
|
|
106
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.
|
|
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 `/
|
|
109
|
+
- If you find yourself wanting to add features beyond status display (restart the watcher, prune snaps, etc.) — stop. Those belong in separate `/kit:*` commands. This one is a status pane.
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Draft a daily standup from work done since the last push,
|
|
2
|
+
description: Draft a daily standup from work done since the last push, surface in-progress local work and follow-ups, show the draft, and post to LaunchSecure Comm Hub as a daily_update after explicit confirmation.
|
|
3
3
|
---
|
|
4
4
|
|
|
5
5
|
# Standup
|
|
6
6
|
|
|
7
|
-
Generates a daily-update comment for the LaunchSecure Comm Hub. Pulls commits since the last push (with fallbacks),
|
|
7
|
+
Generates a daily-update comment for the LaunchSecure Comm Hub. Pulls commits since the last push (with fallbacks), surfaces what's still in-flight locally (uncommitted work, explicit follow-ups, in-progress work items), drafts a summary in the project's house style, shows it to the user, and posts only after the user confirms. Never posts without explicit "yes".
|
|
8
8
|
|
|
9
9
|
## Preflight
|
|
10
10
|
|
|
11
|
-
1. Verify `.launch-secure.cred.config` exists at the repo root. If missing, abort and tell the user to run `npx launch-kit init` first — without the cred file the `launch-secure` MCP cannot authenticate, so we cannot read prior standups or post the new one.
|
|
11
|
+
1. Verify `.launch-secure.cred.config` exists at the repo root. If missing, abort and tell the user to run `npx @launchsecure/launch-kit init` first — without the cred file the `launch-secure` MCP cannot authenticate, so we cannot read prior standups or post the new one.
|
|
12
12
|
2. Verify we are inside a git repo (`git rev-parse --git-dir`). If not, abort with a clear message.
|
|
13
|
-
3. Record the current branch (`git rev-parse --abbrev-ref HEAD`).
|
|
14
|
-
4. Detect whether `launch-chart` is wired by calling `mcp__launch-chart__detect_project_stack`. If the call fails or returns nothing, fall back to git-only grouping (note this in the final summary).
|
|
13
|
+
3. Record the current branch (`git rev-parse --abbrev-ref HEAD`) and current git email (`git config user.email`).
|
|
15
14
|
|
|
16
15
|
## Gather
|
|
17
16
|
|
|
18
|
-
Pull data from layered sources, in this order
|
|
17
|
+
Pull data from layered sources, in this order. Default to git + commit messages — they already carry the structure. Only reach for `launch-chart` in the explicit case described in step 3.
|
|
19
18
|
|
|
20
19
|
### 1. Determine the window
|
|
21
20
|
|
|
@@ -27,34 +26,42 @@ Tell the user which window was used in one short line ("Using commits since last
|
|
|
27
26
|
|
|
28
27
|
### 2. Collect change context
|
|
29
28
|
|
|
30
|
-
- `git diff --stat @{push}..HEAD` (or whichever window was chosen) — file paths + line counts. Drives theme grouping
|
|
29
|
+
- `git diff --stat @{push}..HEAD` (or whichever window was chosen) — file paths + line counts. Drives theme grouping.
|
|
31
30
|
- `git log --pretty=format:'%h %s' <window>` — short subject lines for quick scan.
|
|
31
|
+
- `git log --pretty=format:'%h%n%B%n---' <window>` — full commit bodies. Needed for step 4 (follow-up detection).
|
|
32
32
|
- Branch names + PR references in commit messages (look for `#<digits>`, `LS-<id>`, branch slugs like `fix/foo-bar`). These are work-item handles.
|
|
33
33
|
|
|
34
|
-
### 3. Group
|
|
34
|
+
### 3. Group into themes
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
**Default: group by commit-message scope.** Conventional-commit subjects like `feat(launch-kit): …`, `refactor(server): …`, `chore(lint): …` already declare the theme — use the scope as the theme name. Multiple commits with the same scope collapse into one `→ <Scope>` section.
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
-
|
|
38
|
+
**Only escalate to `launch-chart` when ALL of these are true:**
|
|
39
|
+
- Window has ≥20 changed files across ≥5 top-level directories, AND
|
|
40
|
+
- Commit scopes are missing, inconsistent, or too coarse to reveal structure (e.g. everything is `chore: …` or untagged).
|
|
40
41
|
|
|
41
|
-
|
|
42
|
+
In that case: call `mcp__launch-chart__detect_project_stack` to verify the chart is wired, then for each changed file call `mcp__launch-chart__read_graph({ search: "<basename>" })` and group by the resolved node's `module` field. Common LS modules: `auth`, `pda`, `pda-guides`, `pda-shell`, `radar`, `chart`, `orbit`, `recall`, `comms`, `board`, `webhooks`, `feedback`, `briefs`, `mcp`.
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
Files that don't resolve in the chart (new files, non-TS, config) bucket under "Misc" or by directory.
|
|
44
45
|
|
|
45
|
-
### 4.
|
|
46
|
+
### 4. Collect in-progress signals (the "what's still in flight" data)
|
|
46
47
|
|
|
47
|
-
|
|
48
|
+
This is the data that makes the standup honest about what's still open, not just what shipped. Always run all three:
|
|
48
49
|
|
|
49
|
-
|
|
50
|
+
**4a. Uncommitted local work** — `git status --short`. Group by area (e.g. `scripts/`, `.claude/`, untracked dirs). Filter out build artifacts that don't represent intentional work (`.launchsecure/graphs/*.json`, `node_modules`, `dist`, `.next`). What remains is in-flight code or scaffolds — surface it under "Pending / in-progress".
|
|
50
51
|
|
|
51
|
-
|
|
52
|
+
**4b. Follow-up flags in commit bodies** — grep the full commit bodies pulled in step 2 for these patterns (case-insensitive): `follow-up`, `followup`, `TODO`, `flagged`, `deferred`, `not patched`, `rolled back`, `revert`, `queued`, `to be solved`, `next pass`. Each hit is a self-declared open item by the author — surface the sentence verbatim or paraphrased under "Pending / in-progress".
|
|
52
53
|
|
|
53
|
-
|
|
54
|
+
**4c. In-progress work items assigned to current user** — call `mcp__launch-secure__work_items_list({ assignee_email: "<git email from preflight>", status: "IN_PROGRESS" })`. For each returned item, capture title + id. Don't list more than 5; if more exist, list 5 + "(N more)".
|
|
54
55
|
|
|
55
|
-
|
|
56
|
+
If any of 4a/4b/4c return nothing, that section just doesn't appear in the draft. Don't fabricate filler.
|
|
56
57
|
|
|
57
|
-
###
|
|
58
|
+
### 5. Work-item closure linkage
|
|
59
|
+
|
|
60
|
+
For each work-item handle found in commit messages from step 2 (regex `#\d+|LS-\w+`), call `mcp__launch-secure__work_item_get({ id: "<id>" })` (or `work_items_list` with id filter). If any status changed to DONE/COMPLETED, call them out in the closing `----` block as a one-liner.
|
|
61
|
+
|
|
62
|
+
Skip this step if no handles were found in commit messages — don't pull the full work-items list to fish for closures.
|
|
63
|
+
|
|
64
|
+
### 6. Release detection
|
|
58
65
|
|
|
59
66
|
A commit qualifies the post for the `release` tag if ANY of the following are true:
|
|
60
67
|
- `package.json` `version` field changed in `git diff @{push}..HEAD -- package.json`
|
|
@@ -66,7 +73,7 @@ If any are true, set `addReleaseTag = true`. Otherwise `false`.
|
|
|
66
73
|
|
|
67
74
|
## Draft
|
|
68
75
|
|
|
69
|
-
Produce the standup in the **exact** house format. This is the format Prajyot uses for human-written daily updates (verified against the May 18, 19, 20 posts in the Comm Hub):
|
|
76
|
+
Produce the standup in the **exact** house format. This is the format Prajyot uses for human-written daily updates (verified against the May 18, 19, 20, 21 posts in the Comm Hub):
|
|
70
77
|
|
|
71
78
|
```
|
|
72
79
|
Hey @everyone
|
|
@@ -85,6 +92,16 @@ Pushed <N> commits to <branch> today. Highlights:
|
|
|
85
92
|
|
|
86
93
|
----
|
|
87
94
|
|
|
95
|
+
Pending / in-progress:
|
|
96
|
+
|
|
97
|
+
→ <Pending area 1>
|
|
98
|
+
- <one-line item — what's open, why, where>
|
|
99
|
+
|
|
100
|
+
→ <Pending area 2>
|
|
101
|
+
- <one-line item>
|
|
102
|
+
|
|
103
|
+
----
|
|
104
|
+
|
|
88
105
|
<one-line PSA or deploy-safety note. Examples: "TS clean, no schema/migration changes, safe to deploy." or "Includes prisma migration <name> — run migrate-with-backup.sh before deploy.">
|
|
89
106
|
|
|
90
107
|
Thanks
|
|
@@ -94,20 +111,21 @@ Thanks
|
|
|
94
111
|
|
|
95
112
|
- `Hey @everyone` — exactly this. Not "Hey team", not "Hi everyone". Single line, blank line after.
|
|
96
113
|
- `Pushed N commits to <branch> today. Highlights:` — replace `<branch>` with the actual branch from preflight. If the window was a fallback (not "since last push"), say "Drafted N commits' worth of work on <branch> today. Highlights:" instead — be honest about the window.
|
|
97
|
-
- `→ <Theme>` — right-arrow + space + theme name. Theme names come from
|
|
114
|
+
- `→ <Theme>` — right-arrow + space + theme name. Theme names come from commit-message scope (default) or chart module grouping (escalated case). Capitalize the first letter.
|
|
98
115
|
- `- <bullet>` — plain hyphen + space. Bullets are **outcomes**, not commit messages. Translate "feat(radar): add transcript view" into "Structured transcript view with overlay reply drawer". Drop scope prefixes and verb tense.
|
|
99
116
|
- Blank line between themes.
|
|
100
|
-
- `----` — four hyphens, on its own line, blank line above and below.
|
|
101
|
-
-
|
|
117
|
+
- `----` — four hyphens, on its own line, blank line above and below. Used twice: once to open the Pending block, once to close it.
|
|
118
|
+
- **Pending / in-progress block** — omit entirely if steps 4a/4b/4c all returned nothing. If present, populate from those three sources. Each `→` sub-heading names an area (e.g. `→ Feedback widget`, `→ Codex config writer`, `→ Beacon monitor UX`). Bullets are short, factual, name the file or symbol when relevant.
|
|
119
|
+
- Closing block: one short line is fine. Don't pad. Mention work-item closures + any deploy-affecting changes here.
|
|
102
120
|
- `Thanks` — exact word, no comma, no name signature (the post's author is attached automatically).
|
|
103
121
|
|
|
104
122
|
**Constraints:**
|
|
105
123
|
|
|
106
124
|
- Plain text only. No `**bold**`, no `*italic*`, no backticks, no `# headers`, no markdown link syntax. The Comm Hub renders as plain text.
|
|
107
|
-
- Aim for ≤
|
|
125
|
+
- Aim for ≤ 400 words total (was 350; bumped to accommodate the Pending block). Standups are skim-able; trim aggressively.
|
|
108
126
|
- Top 3–6 themes is the sweet spot. If you have 20 commits in 12 different modules, collapse the small ones into a "→ Misc" theme.
|
|
109
127
|
- Bullets should be **outcome-shaped**: what landed in the product, not what the diff did. "Multi-select EventTypesPicker on subscription forms" beats "modified components/webhooks/EventTypesPicker.tsx".
|
|
110
|
-
-
|
|
128
|
+
- Pending items are honest snapshots, not commitments. "Drawer fix reverted — to be solved fresh" is fine; "will be fixed by EOD" is not.
|
|
111
129
|
|
|
112
130
|
## Confirm
|
|
113
131
|
|
|
@@ -127,7 +145,7 @@ Anything ambiguous → treat as "edit, what would you like changed?".
|
|
|
127
145
|
|
|
128
146
|
Before posting, call `mcp__launch-secure__communication_read({ tag: "daily_update", limit: 5 })`. If any returned comment has:
|
|
129
147
|
- `resourceType: "comment"` (not `"daily_update"` — that's bot-only, distinct stream)
|
|
130
|
-
- `author.email` matches the current user's email (from
|
|
148
|
+
- `author.email` matches the current user's email (from preflight)
|
|
131
149
|
- `createdAt` within the last 12 hours
|
|
132
150
|
|
|
133
151
|
…then a manual daily_update already exists from today. Offer:
|
|
@@ -156,22 +174,18 @@ On success: report the comment ID and a friendly "posted to LS Comm Hub" line. I
|
|
|
156
174
|
|
|
157
175
|
On failure: surface the error verbatim. Don't retry automatically — auth or schema errors deserve human attention. The draft is preserved in chat so the user can retry manually.
|
|
158
176
|
|
|
159
|
-
## Tag handling
|
|
160
|
-
|
|
161
|
-
Before adding any tag, you may verify it exists via `mcp__launch-secure__tags_list`. The `daily_update` and `release` tags are standard in LS projects; if either is missing, the post will still succeed but the tag won't attach. Surface this as a warning, not a blocker.
|
|
162
|
-
|
|
163
177
|
## Idempotency
|
|
164
178
|
|
|
165
|
-
Re-running `/
|
|
179
|
+
Re-running `/kit:standup`:
|
|
166
180
|
- Always re-pulls the window fresh. No cached state.
|
|
167
181
|
- Duplicate check handles same-day reposts.
|
|
168
182
|
- The draft is never written to disk — only shown in chat. User can copy it manually if they cancel.
|
|
169
183
|
|
|
170
184
|
## Notes for the assistant
|
|
171
185
|
|
|
172
|
-
-
|
|
173
|
-
- The
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
- If
|
|
186
|
+
- **Default to git, not the chart.** Conventional-commit scopes already declare themes; only reach for `launch-chart` when scopes are missing or inconsistent across ≥20 files / ≥5 directories. This was the most common failure of the previous prompt — chart calls produced no different grouping than commit-scope grouping would have.
|
|
187
|
+
- **The Pending / in-progress block is the standup's main job, not the shipped-themes block.** Shipped work is visible in `git log`; what's still open isn't. Always run the three step-4 gathers.
|
|
188
|
+
- **Don't ask clarifying questions before drafting.** Produce a first cut from whatever data step 1–6 returned, then iterate. The draft is cheap; the conversation isn't.
|
|
189
|
+
- **Outcome bullet, not commit message** is the single most important transform. A standup full of "feat(x): add y" reads like a changelog, not a status.
|
|
190
|
+
- **Never assume `release` tag without evidence** (see step 6). False positives confuse downstream consumers.
|
|
191
|
+
- **If a step's tool fails**, note it inline and continue with the remaining sources — don't abort the whole standup over one failed call.
|
|
File without changes
|
|
File without changes
|