liteagents 2.5.3 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/README.md +51 -45
- package/installer/cli.js +1 -1
- package/installer/installation-engine.js +82 -21
- package/installer/package-manager.js +34 -3
- package/package.json +3 -2
- package/packages/ampcode/AGENT.md +1 -0
- package/packages/ampcode/commands/friction/friction.js +19 -4
- package/packages/ampcode/commands/live-canvas/DESIGN_PRINCIPLES.md +2140 -0
- package/packages/ampcode/commands/live-canvas/README.md +273 -0
- package/packages/ampcode/commands/live-canvas/templates/.claude/settings.local.json +8 -0
- package/packages/ampcode/commands/live-canvas/templates/demo/post-variants.html +205 -0
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +1299 -0
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/format-utils.ts +283 -0
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/index.ts +62 -0
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/selector-utils.ts +423 -0
- package/packages/ampcode/commands/live-canvas/templates/feedback-react/types.ts +118 -0
- package/packages/ampcode/commands/live-canvas/templates/overlay-vanilla.js +477 -0
- package/packages/ampcode/commands/live-canvas.md +1104 -0
- package/packages/claude/CLAUDE.md +1 -0
- package/packages/claude/commands/friction/friction.js +19 -4
- package/packages/claude/plugins/live-canvas-marketplace/.claude-plugin/marketplace.json +14 -0
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/.claude-plugin/plugin.json +18 -0
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/README.md +89 -0
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/package-lock.json +1142 -0
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/package.json +17 -0
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/schema.json +37 -0
- package/packages/claude/plugins/live-canvas-marketplace/plugins/live-canvas-channel/server.js +179 -0
- package/packages/claude/plugins/live-canvas-marketplace/setup.sh +61 -0
- package/packages/claude/skills/live-canvas/DESIGN_PRINCIPLES.md +2140 -0
- package/packages/claude/skills/live-canvas/INTEGRATION_NOTES.md +210 -0
- package/packages/claude/skills/live-canvas/README.md +273 -0
- package/packages/claude/skills/live-canvas/SKILL.md +1119 -0
- package/packages/claude/skills/live-canvas/templates/.claude/settings.local.json +8 -0
- package/packages/claude/skills/live-canvas/templates/demo/post-variants.html +205 -0
- package/packages/claude/skills/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +1299 -0
- package/packages/claude/skills/live-canvas/templates/feedback-react/format-utils.ts +283 -0
- package/packages/claude/skills/live-canvas/templates/feedback-react/index.ts +62 -0
- package/packages/claude/skills/live-canvas/templates/feedback-react/selector-utils.ts +423 -0
- package/packages/claude/skills/live-canvas/templates/feedback-react/types.ts +118 -0
- package/packages/claude/skills/live-canvas/templates/overlay-vanilla.js +477 -0
- package/packages/claude/variants.json +2 -1
- package/packages/droid/AGENTS.md +1 -0
- package/packages/droid/commands/friction/friction.js +19 -4
- package/packages/droid/commands/live-canvas/DESIGN_PRINCIPLES.md +2140 -0
- package/packages/droid/commands/live-canvas/README.md +273 -0
- package/packages/droid/commands/live-canvas/templates/.claude/settings.local.json +8 -0
- package/packages/droid/commands/live-canvas/templates/demo/post-variants.html +205 -0
- package/packages/droid/commands/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +1299 -0
- package/packages/droid/commands/live-canvas/templates/feedback-react/format-utils.ts +283 -0
- package/packages/droid/commands/live-canvas/templates/feedback-react/index.ts +62 -0
- package/packages/droid/commands/live-canvas/templates/feedback-react/selector-utils.ts +423 -0
- package/packages/droid/commands/live-canvas/templates/feedback-react/types.ts +118 -0
- package/packages/droid/commands/live-canvas/templates/overlay-vanilla.js +477 -0
- package/packages/droid/commands/live-canvas.md +1104 -0
- package/packages/opencode/AGENTS.md +1 -0
- package/packages/opencode/command/friction/friction.js +19 -4
- package/packages/opencode/command/live-canvas/DESIGN_PRINCIPLES.md +2140 -0
- package/packages/opencode/command/live-canvas/README.md +273 -0
- package/packages/opencode/command/live-canvas/templates/.claude/settings.local.json +8 -0
- package/packages/opencode/command/live-canvas/templates/demo/post-variants.html +205 -0
- package/packages/opencode/command/live-canvas/templates/feedback-react/FeedbackOverlay.tsx +1299 -0
- package/packages/opencode/command/live-canvas/templates/feedback-react/format-utils.ts +283 -0
- package/packages/opencode/command/live-canvas/templates/feedback-react/index.ts +62 -0
- package/packages/opencode/command/live-canvas/templates/feedback-react/selector-utils.ts +423 -0
- package/packages/opencode/command/live-canvas/templates/feedback-react/types.ts +118 -0
- package/packages/opencode/command/live-canvas/templates/overlay-vanilla.js +477 -0
- package/packages/opencode/command/live-canvas.md +1104 -0
- package/packages/opencode/opencode.jsonc +4 -0
- package/packages/subagentic-manual.md +15 -12
|
@@ -31,6 +31,7 @@ These subagents are available when using Claude Code CLI. Droid can reference th
|
|
|
31
31
|
| condition-based-waiting | Replaces arbitrary timeouts with condition polling to wait for actual state changes | /condition-based-waiting <condition-type> <timeout-specs> | false |
|
|
32
32
|
| docs-builder | Create comprehensive project documentation with structured /docs hierarchy | /docs-builder | false |
|
|
33
33
|
| root-cause-tracing | Systematically traces bugs backward through call stack to identify source | /root-cause-tracing <issue-description> | false |
|
|
34
|
+
| live-canvas | Conduct design interviews, generate UI variations, collect live click-to-annotate feedback via a browser overlay that streams into the session | /live-canvas | false |
|
|
34
35
|
| skill-creator | Guide for creating effective skills and extending Claude capabilities | /skill-creator <skill-type> <skill-description> | false |
|
|
35
36
|
| systematic-debugging | Four-phase debugging framework - investigate root cause before any fixes | /systematic-debugging <bug-or-error-description> | false |
|
|
36
37
|
| test-driven-development | Write test first, watch it fail, write minimal code to pass | /test-driven-development <feature-or-behavior-to-test> | true |
|
|
@@ -1940,12 +1940,21 @@ function clusterCandidates(allCandidates) {
|
|
|
1940
1940
|
const clusters = Object.values(clusterMap).map(cl => {
|
|
1941
1941
|
const weight = signalWeights[cl.anchor_signal] || 1;
|
|
1942
1942
|
const peaks = cl.peaks.sort((a, b) => a - b);
|
|
1943
|
+
// Session IDs follow "project/dateStr-shortId", so the first segment is
|
|
1944
|
+
// the project. Preserve both the ID list and the deduped project set so
|
|
1945
|
+
// downstream renderers can surface which repos produced the cluster.
|
|
1946
|
+
const sessionIds = Object.keys(cl.sessions);
|
|
1947
|
+
const projects = [...new Set(
|
|
1948
|
+
sessionIds.map(s => s.includes('/') ? s.split('/')[0] : 'unknown')
|
|
1949
|
+
)].sort();
|
|
1943
1950
|
return {
|
|
1944
1951
|
anchor_signal: cl.anchor_signal,
|
|
1945
1952
|
tool_pattern: cl.tool_pattern,
|
|
1946
1953
|
count: cl.count,
|
|
1947
1954
|
score: cl.count * weight,
|
|
1948
|
-
sessions:
|
|
1955
|
+
sessions: sessionIds.length,
|
|
1956
|
+
session_ids: sessionIds,
|
|
1957
|
+
projects: projects,
|
|
1949
1958
|
median_peak: peaks[Math.floor(peaks.length / 2)],
|
|
1950
1959
|
max_peak: peaks[peaks.length - 1],
|
|
1951
1960
|
contexts: cl.contexts,
|
|
@@ -2048,10 +2057,13 @@ function extractMain(sessionsDir) {
|
|
|
2048
2057
|
|
|
2049
2058
|
// Summary table
|
|
2050
2059
|
reviewLines.push('## Cluster Summary\n\n');
|
|
2051
|
-
reviewLines.push('| # | Signal | Tool Pattern | Count | Sessions | Score | Median Peak |\n');
|
|
2052
|
-
reviewLines.push('
|
|
2060
|
+
reviewLines.push('| # | Signal | Tool Pattern | Count | Sessions | Projects | Score | Median Peak |\n');
|
|
2061
|
+
reviewLines.push('|---|--------|-------------|-------|----------|----------|-------|-------------|\n');
|
|
2053
2062
|
reviewClusters.forEach((cl, idx) => {
|
|
2054
|
-
|
|
2063
|
+
const projs = cl.projects || [];
|
|
2064
|
+
const projectsShort = projs.slice(0, 3).join(', ') +
|
|
2065
|
+
(projs.length > 3 ? `, +${projs.length - 3}` : '');
|
|
2066
|
+
reviewLines.push(`| ${idx + 1} | ${cl.anchor_signal} | ${cl.tool_pattern} | ${cl.count} | ${cl.sessions} | ${projectsShort || '-'} | ${cl.score} | ${cl.median_peak} |\n`);
|
|
2055
2067
|
});
|
|
2056
2068
|
reviewLines.push('\n---\n\n');
|
|
2057
2069
|
|
|
@@ -2059,6 +2071,9 @@ function extractMain(sessionsDir) {
|
|
|
2059
2071
|
reviewClusters.forEach((cl, idx) => {
|
|
2060
2072
|
reviewLines.push(`## Cluster ${idx + 1}: ${cl.anchor_signal} | ${cl.tool_pattern}\n\n`);
|
|
2061
2073
|
reviewLines.push(`**Occurrences:** ${cl.count} across ${cl.sessions} sessions | **Score:** ${cl.score} | **Median peak:** ${cl.median_peak} | **Max peak:** ${cl.max_peak}\n\n`);
|
|
2074
|
+
if (cl.projects && cl.projects.length > 0) {
|
|
2075
|
+
reviewLines.push(`**Projects:** ${cl.projects.join(', ')}\n\n`);
|
|
2076
|
+
}
|
|
2062
2077
|
|
|
2063
2078
|
if (cl.contexts.length > 0) {
|
|
2064
2079
|
reviewLines.push('### User Context (what the user said)\n\n');
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "live-canvas-marketplace",
|
|
3
|
+
"description": "Live Canvas — push click-to-annotate feedback from the browser overlay into a Claude Code session.",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "liteagents"
|
|
6
|
+
},
|
|
7
|
+
"plugins": [
|
|
8
|
+
{
|
|
9
|
+
"name": "live-canvas-channel",
|
|
10
|
+
"source": "./plugins/live-canvas-channel",
|
|
11
|
+
"description": "Channel plugin that bridges the Live Canvas overlay (HTTP) to the Claude session (MCP notifications)."
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "live-canvas-channel",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Bridges the Live Canvas browser overlay to a Claude Code session. Each overlay Save becomes a claude/channel notification delivered over MCP.",
|
|
5
|
+
"author": { "name": "liteagents" },
|
|
6
|
+
"channels": [
|
|
7
|
+
{ "server": "live-canvas" }
|
|
8
|
+
],
|
|
9
|
+
"mcpServers": {
|
|
10
|
+
"live-canvas": {
|
|
11
|
+
"command": "node",
|
|
12
|
+
"args": ["${CLAUDE_PLUGIN_ROOT}/server.js"],
|
|
13
|
+
"env": {
|
|
14
|
+
"LIVE_CANVAS_PORT": "8788"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# live-canvas-channel
|
|
2
|
+
|
|
3
|
+
Claude Code channel plugin that bridges the Live Canvas browser overlay to a running Claude session. Each Save in the overlay becomes a `notifications/claude/channel` event — Claude reacts immediately without the user leaving the browser.
|
|
4
|
+
|
|
5
|
+
## How it fits
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
┌──────────────────┐ POST /feedback ┌───────────────────┐ MCP stdio ┌──────────────┐
|
|
9
|
+
│ Overlay in page │ ──────────────────▶ │ live-canvas- │ ──────────▶ │ Claude Code │
|
|
10
|
+
│ (any framework) │ ◀── 200/ok ────────│ channel (node) │ │ session │
|
|
11
|
+
└──────────────────┘ └───────────────────┘ └──────────────┘
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
- HTTP listener: `127.0.0.1:8788` (override with `LIVE_CANVAS_PORT`)
|
|
15
|
+
- `GET /health` — overlay probes this to select Live vs Batch mode
|
|
16
|
+
- `POST /feedback` — wire-compatible with the overlay's v1.0 schema
|
|
17
|
+
- stdio: MCP protocol using `@modelcontextprotocol/sdk`
|
|
18
|
+
|
|
19
|
+
## Install (local dev)
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Point Claude at this marketplace (one-time)
|
|
23
|
+
claude /plugin marketplace add /absolute/path/to/live-canvas-marketplace
|
|
24
|
+
|
|
25
|
+
# Install the plugin from it
|
|
26
|
+
claude /plugin install live-canvas-channel@live-canvas-marketplace
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The marketplace directory is the parent that contains `.claude-plugin/marketplace.json`.
|
|
30
|
+
|
|
31
|
+
## Activate the channel on a session
|
|
32
|
+
|
|
33
|
+
**Channels are in research preview and custom channels aren't on the approved allowlist.** `/plugin install` spawns the MCP server but does NOT auto-subscribe the session. To receive channel events, start a fresh Claude session with the development flag:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
claude --dangerously-load-development-channels plugin:live-canvas-channel@live-canvas-marketplace
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
You'll see a confirmation prompt the first time. After confirming, channel events arrive in the assistant's context wrapped as `<channel source="live-canvas" ...>...</channel>` tags.
|
|
40
|
+
|
|
41
|
+
Requirements: Claude Code v2.1.80+, claude.ai login (not API key or Console auth). On Team/Enterprise, channels must be explicitly enabled by the admin.
|
|
42
|
+
|
|
43
|
+
## First run
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
cd /path/to/live-canvas-marketplace/plugins/live-canvas-channel
|
|
47
|
+
npm install
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This installs `@modelcontextprotocol/sdk`. After that, `/plugin install` can launch `server.js` on demand.
|
|
51
|
+
|
|
52
|
+
## Debugging standalone
|
|
53
|
+
|
|
54
|
+
The process expects stdio to be held open (Claude Code does this; the shell doesn't unless you trick it):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
LIVE_CANVAS_PORT=8788 tail -f /dev/null | node server.js
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Then in another terminal:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
curl http://localhost:8788/health
|
|
64
|
+
curl -X POST http://localhost:8788/feedback \
|
|
65
|
+
-H 'content-type: application/json' \
|
|
66
|
+
-d '{"version":"1.0","target":"PostCard","comment":{"id":"test","variant":"A","element":{"selector":"button","tagName":"button","textContent":"Like"},"text":"too small"}}'
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Protocol emitted
|
|
70
|
+
|
|
71
|
+
| Method | When | Params |
|
|
72
|
+
|---|---|---|
|
|
73
|
+
| `notifications/claude/channel` | Valid feedback POST | `{ content: string, meta: Record<string,string> }` |
|
|
74
|
+
|
|
75
|
+
**content** — human-readable text delivered to the active Claude turn:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
[LIVE-CANVAS A · PostCard] too small
|
|
79
|
+
selector: `button`, button with "Like"
|
|
80
|
+
comment_id: test
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**meta** — machine-structured fields the assistant can parse: `source`, `target`, `variant`, `selector`, `tagName`, `commentId`.
|
|
84
|
+
|
|
85
|
+
## Failure modes
|
|
86
|
+
|
|
87
|
+
- **Port in use** — another Claude session owns 8788. Logs to stderr and exits; overlay health probe fails; overlay falls back to Batch mode silently.
|
|
88
|
+
- **Invalid payload** — HTTP 400 with reason; no notification emitted.
|
|
89
|
+
- **MCP transport not connected** — HTTP call still returns 200 (so the overlay shows "pushed"), but stderr logs the drop. Avoids false-negative toasts.
|