create-walle 0.9.20 → 0.9.22

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 (65) hide show
  1. package/README.md +5 -5
  2. package/package.json +2 -2
  3. package/template/claude-task-manager/api-prompts.js +13 -0
  4. package/template/claude-task-manager/api-reviews.js +5 -2
  5. package/template/claude-task-manager/db.js +479 -15
  6. package/template/claude-task-manager/docs/app-update-refresh-protocol.md +69 -0
  7. package/template/claude-task-manager/docs/image-paste-ux.md +3 -0
  8. package/template/claude-task-manager/docs/ipad-web-preview.md +88 -0
  9. package/template/claude-task-manager/docs/microsoft-dev-tunnel-phone-access-design.md +58 -50
  10. package/template/claude-task-manager/docs/phone-access-design.md +23 -7
  11. package/template/claude-task-manager/docs/walle-session-model-preferences.md +119 -0
  12. package/template/claude-task-manager/git-utils.js +146 -17
  13. package/template/claude-task-manager/lib/auth-rate-limit.js +23 -3
  14. package/template/claude-task-manager/lib/auth-rules.js +3 -0
  15. package/template/claude-task-manager/lib/document-review.js +33 -2
  16. package/template/claude-task-manager/lib/microsoft-dev-tunnel-setup.js +115 -48
  17. package/template/claude-task-manager/lib/mobile-auth-api.js +14 -0
  18. package/template/claude-task-manager/lib/remote-relay-protocol.js +5 -0
  19. package/template/claude-task-manager/lib/restart-guard.js +68 -0
  20. package/template/claude-task-manager/lib/session-standup.js +36 -13
  21. package/template/claude-task-manager/lib/session-stream.js +11 -4
  22. package/template/claude-task-manager/lib/transport-security.js +50 -0
  23. package/template/claude-task-manager/lib/walle-external-actions.js +20 -3
  24. package/template/claude-task-manager/lib/walle-transcript.js +16 -0
  25. package/template/claude-task-manager/lib/worktree-active-sync.js +6 -3
  26. package/template/claude-task-manager/public/css/reviews.css +10 -0
  27. package/template/claude-task-manager/public/css/setup.css +13 -0
  28. package/template/claude-task-manager/public/css/walle.css +145 -0
  29. package/template/claude-task-manager/public/index.html +564 -44
  30. package/template/claude-task-manager/public/ipad.html +363 -0
  31. package/template/claude-task-manager/public/js/document-review-links.js +196 -0
  32. package/template/claude-task-manager/public/js/message-renderer.js +14 -3
  33. package/template/claude-task-manager/public/js/reviews.js +30 -6
  34. package/template/claude-task-manager/public/js/setup.js +57 -13
  35. package/template/claude-task-manager/public/js/stream-view.js +20 -1
  36. package/template/claude-task-manager/public/js/walle-session.js +31 -3
  37. package/template/claude-task-manager/public/js/walle.js +405 -39
  38. package/template/claude-task-manager/public/m/app.css +1213 -39
  39. package/template/claude-task-manager/public/m/app.js +1887 -97
  40. package/template/claude-task-manager/public/m/claim.html +9 -2
  41. package/template/claude-task-manager/public/m/index.html +48 -7
  42. package/template/claude-task-manager/public/m/sw.js +1 -1
  43. package/template/claude-task-manager/server.js +695 -78
  44. package/template/claude-task-manager/session-integrity.js +4 -0
  45. package/template/claude-task-manager/workers/state-detectors/codex.js +18 -3
  46. package/template/docs/designs/2026-05-17-portkey-gateway-provider-ux.md +86 -35
  47. package/template/package.json +1 -1
  48. package/template/wall-e/api-walle.js +19 -1
  49. package/template/wall-e/brain.js +152 -6
  50. package/template/wall-e/chat.js +117 -2
  51. package/template/wall-e/coding/stream-processor.js +36 -0
  52. package/template/wall-e/coding-orchestrator.js +151 -12
  53. package/template/wall-e/docs/external-action-controller.md +60 -2
  54. package/template/wall-e/external-action-controller.js +23 -1
  55. package/template/wall-e/external-action-gateway.js +163 -0
  56. package/template/wall-e/fly.toml +1 -0
  57. package/template/wall-e/http/model-admin.js +131 -0
  58. package/template/wall-e/lib/service-health.js +194 -0
  59. package/template/wall-e/llm/anthropic.js +7 -0
  60. package/template/wall-e/llm/client.js +46 -12
  61. package/template/wall-e/llm/openai.js +17 -2
  62. package/template/wall-e/llm/portkey-sync.js +201 -0
  63. package/template/wall-e/server.js +13 -0
  64. package/template/wall-e/tools/local-tools.js +122 -4
  65. package/template/website/index.html +10 -10
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # create-walle
2
2
 
3
- Set up **CTM + Wall-E** in one command — a browser-based command center for AI coding agents, remote phone access, review workflows, and a personal AI agent that builds a searchable second brain from your work life.
3
+ Set up **CTM + Wall-E** in one command — a browser-based command center for AI coding agents, remote phone and tablet access, review workflows, and a personal AI agent that builds a searchable second brain from your work life.
4
4
 
5
5
  ## What You Get
6
6
 
@@ -12,7 +12,7 @@ A web dashboard for running and managing AI coding sessions across multiple prov
12
12
  - **Prompt Editor** — Save, version, and organize prompts with folders, tags, chains, templates, and AI search
13
13
  - **Task Queue** — Queue prompts for sequential execution with auto-advance when the agent finishes, or step through manually
14
14
  - **Approval Workflows** — Auto-approve tool-use requests based on learned rules; uncertain cases escalate to you
15
- - **Remote Phone Access** — Pair your phone with a QR code and use a mobile CTM UI over Microsoft Dev Tunnels, Tailscale, Cloudflare Tunnel, or Walle Remote
15
+ - **Remote Phone & Tablet Access** — Pair your phone or tablet with a QR code and use a responsive CTM UI over Microsoft Dev Tunnels, Tailscale, Cloudflare Tunnel, or Walle Remote, with live prompts and model controls
16
16
  - **Code & Doc Review** — Review git diffs and Markdown docs side by side, add anchored comments, and send feedback into an agent session or queue
17
17
  - **Model Registry** — Manage providers (Anthropic, OpenAI, Google, DeepSeek, Ollama, LM Studio, MLX, and CLI subscription providers), compare pricing, switch models per session
18
18
  - **Session Insights** — Analyze patterns across sessions to optimize prompts and workflows
@@ -35,7 +35,7 @@ An always-on AI agent that learns from your Slack, email, calendar, and coding s
35
35
  npx create-walle install ./walle
36
36
  ```
37
37
 
38
- This copies the project, installs dependencies, auto-detects your name and timezone, and starts the server. Open **http://localhost:3456** to finish setup in the browser, then pair your phone from Setup if you want remote access.
38
+ This copies the project, installs dependencies, auto-detects your name and timezone, and starts the server. Open **http://localhost:3456** to finish setup in the browser, then pair your phone or tablet from Setup if you want remote access.
39
39
 
40
40
  ## Commands
41
41
 
@@ -62,7 +62,7 @@ On first launch, the browser setup page guides you through:
62
62
  1. **Owner name** — auto-detected from `git config`
63
63
  2. **API key** — enter manually, or click "Auto-detect" to find it from your shell environment, Claude Code OAuth, or corporate devbox
64
64
  3. **Integrations** — connect Slack (OAuth), email and calendar auto-detected on macOS
65
- 4. **Remote phone access** — optional QR pairing with Microsoft Dev Tunnels, Tailscale, Cloudflare Tunnel, or Walle Remote
65
+ 4. **Remote phone and tablet access** — optional QR pairing with Microsoft Dev Tunnels, Tailscale, Cloudflare Tunnel, or Walle Remote, including touch-friendly prompts and model controls
66
66
 
67
67
  ## Custom Port
68
68
 
@@ -78,7 +78,7 @@ Everything runs locally. CTM serves the dashboard, Wall-E runs as a background a
78
78
 
79
79
  | Component | Default Port | What it does |
80
80
  |-----------|-------------|--------------|
81
- | CTM | 3456 | Dashboard, multi-agent terminal, prompt editor, queue, model registry, code/doc review, remote phone UI |
81
+ | CTM | 3456 | Dashboard, multi-agent terminal, prompt editor, queue, model registry, code/doc review, remote phone/tablet UI |
82
82
  | Wall-E | 3457 | AI agent, brain database, skills engine, multi-model chat API |
83
83
 
84
84
  ## Links
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-walle",
3
- "version": "0.9.20",
4
- "description": "CTM + Wall-E \u2014 AI coding dashboard and personal digital twin agent. Multi-agent terminal for Claude Code, Codex, Gemini, Aider, OpenCode, and more, plus prompt editor, task queue, remote phone access, code/doc review, and an agent that learns from Slack, email & calendar.",
3
+ "version": "0.9.22",
4
+ "description": "CTM + Wall-E \u2014 AI coding dashboard and personal digital twin agent. Multi-agent terminal for Claude Code, Codex, Gemini, Aider, OpenCode, and more, plus prompt editor, task queue, remote phone and tablet access, code/doc review, and an agent that learns from Slack, email & calendar.",
5
5
  "bin": {
6
6
  "create-walle": "bin/create-walle.js"
7
7
  },
@@ -143,6 +143,7 @@ function handlePromptApi(req, res, url) {
143
143
  // --- Images ---
144
144
  if (p === '/api/images/upload' && m === 'POST') return handleUploadImage(req, res, url);
145
145
  if (p === '/api/mobile/attachments/upload' && m === 'POST') return handleUploadMobileAttachment(req, res, url);
146
+ if (p === '/api/session/image-refs' && m === 'POST') return handleSessionImageRefs(req, res);
146
147
  if (p.match(/^\/api\/images\/\d+$/) && m === 'GET') return handleGetImage(req, res, url);
147
148
  if (p.match(/^\/api\/images\/\d+\/annotations$/) && m === 'PUT') return handleUpdateAnnotations(req, res, url);
148
149
  if (p.match(/^\/api\/images\/\d+$/) && m === 'DELETE') return handleDeleteImage(req, res, url);
@@ -677,6 +678,18 @@ async function handleUploadMobileAttachment(req, res, url) {
677
678
  }
678
679
  }
679
680
 
681
+ async function handleSessionImageRefs(req, res) {
682
+ try {
683
+ const body = await readBody(req, 256 * 1024);
684
+ const result = await db.recordSessionImageRefs(body || {});
685
+ const safeResult = { ...(result || {}) };
686
+ delete safeResult.refDir;
687
+ jsonResponse(res, 200, { ok: true, ...safeResult });
688
+ } catch (e) {
689
+ jsonResponse(res, 400, { ok: false, error: e.message });
690
+ }
691
+ }
692
+
680
693
  function handleGetImage(req, res, url) {
681
694
  const id = parseInt(url.pathname.split('/').pop());
682
695
  const img = db.getImage(id);
@@ -140,7 +140,7 @@ function handleReviewApi(req, res, url) {
140
140
  try {
141
141
  const filePath = url.searchParams.get('path');
142
142
  const line = url.searchParams.get('line') || 1;
143
- const document = documentReview.readDocument(filePath, { line });
143
+ const document = documentReview.readDocument(filePath, { line, cwd: url.searchParams.get('cwd') || '' });
144
144
  return jsonResponse(res, 200, { document });
145
145
  } catch (e) {
146
146
  return jsonResponse(res, e.statusCode || 500, { error: e.message });
@@ -150,7 +150,10 @@ function handleReviewApi(req, res, url) {
150
150
  // POST /api/reviews/document-review - create/reuse a review record for one document
151
151
  if (p === '/api/reviews/document-review' && m === 'POST') {
152
152
  readBody(req).then(body => {
153
- const document = documentReview.readDocument(body.path, { line: body.line || 1 });
153
+ const document = documentReview.readDocument(body.path, {
154
+ line: body.line || 1,
155
+ cwd: body.cwd || '',
156
+ });
154
157
  const review = db.listReviews({
155
158
  project_path: document.projectRoot,
156
159
  review_type: 'doc',