create-walle 0.9.28 → 0.9.30
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/README.md +2 -2
- package/bin/create-walle.js +166 -6
- package/package.json +1 -1
- package/template/bin/ctm-launch.sh +70 -18
- package/template/bin/dev.sh +18 -0
- package/template/bin/ensure-stable-node.js +11 -0
- package/template/bin/node-bin.sh +9 -0
- package/template/claude-task-manager/api-prompts.js +214 -23
- package/template/claude-task-manager/db.js +884 -50
- package/template/claude-task-manager/docs/backfill-incremental-no-main-fallback.md +48 -0
- package/template/claude-task-manager/docs/conversation-import-freshness.md +21 -0
- package/template/claude-task-manager/docs/conversation-log-redesign.html +587 -0
- package/template/claude-task-manager/docs/session-title-authority.md +8 -3
- package/template/claude-task-manager/lib/auth-rules.js +13 -0
- package/template/claude-task-manager/lib/claude-desktop-sessions.js +63 -0
- package/template/claude-task-manager/lib/codex-config-guard.js +124 -0
- package/template/claude-task-manager/lib/codex-rollout-snapshot.js +93 -0
- package/template/claude-task-manager/lib/coding-agent-models.js +5 -4
- package/template/claude-task-manager/lib/db-owner-cooperative-scheduler.js +114 -0
- package/template/claude-task-manager/lib/db-owner-task-queue.js +67 -0
- package/template/claude-task-manager/lib/db-owner-worker-client.js +5 -1
- package/template/claude-task-manager/lib/desktop-fork.js +81 -0
- package/template/claude-task-manager/lib/headless-term-service.js +251 -4
- package/template/claude-task-manager/lib/message-identity.js +115 -0
- package/template/claude-task-manager/lib/mirror-feed-guards.js +25 -0
- package/template/claude-task-manager/lib/mirror-feed-sanitize.js +45 -0
- package/template/claude-task-manager/lib/path-suggest.js +77 -0
- package/template/claude-task-manager/lib/prompt-index-inputs.js +136 -0
- package/template/claude-task-manager/lib/real-node.js +36 -4
- package/template/claude-task-manager/lib/restore-auto-resume-policy.js +67 -0
- package/template/claude-task-manager/lib/restore-resume-batch.js +20 -0
- package/template/claude-task-manager/lib/restore-terminal-dims.js +109 -0
- package/template/claude-task-manager/lib/resume-cwd.js +124 -3
- package/template/claude-task-manager/lib/runtime-approval-recorder.js +152 -0
- package/template/claude-task-manager/lib/runtime-context-truth.js +236 -0
- package/template/claude-task-manager/lib/runtime-contract.js +195 -0
- package/template/claude-task-manager/lib/runtime-history-builder.js +205 -0
- package/template/claude-task-manager/lib/runtime-hook-bus.js +98 -0
- package/template/claude-task-manager/lib/runtime-input-queue.js +114 -0
- package/template/claude-task-manager/lib/runtime-input-recorder.js +156 -0
- package/template/claude-task-manager/lib/runtime-lineage.js +189 -0
- package/template/claude-task-manager/lib/runtime-registry.js +263 -0
- package/template/claude-task-manager/lib/runtime-session-history.js +41 -0
- package/template/claude-task-manager/lib/scrollback-snapshot-policy.js +37 -0
- package/template/claude-task-manager/lib/server-phase-conditions.js +103 -0
- package/template/claude-task-manager/lib/session-content-backfill.js +55 -8
- package/template/claude-task-manager/lib/session-db-read-contract.js +67 -0
- package/template/claude-task-manager/lib/session-history.js +93 -5
- package/template/claude-task-manager/lib/session-host-manager.js +154 -2
- package/template/claude-task-manager/lib/session-messages-defer.js +50 -0
- package/template/claude-task-manager/lib/session-messages-page.js +13 -0
- package/template/claude-task-manager/lib/session-messages-projection.js +48 -29
- package/template/claude-task-manager/lib/session-stream.js +80 -17
- package/template/claude-task-manager/lib/session-title-signals.js +54 -0
- package/template/claude-task-manager/lib/session-token-usage.js +13 -0
- package/template/claude-task-manager/lib/state-sync/cell-diff.js +41 -0
- package/template/claude-task-manager/lib/state-sync/frame-emitter.js +214 -0
- package/template/claude-task-manager/lib/state-sync/frame-rate.js +75 -0
- package/template/claude-task-manager/lib/state-sync/row-serializer.js +166 -0
- package/template/claude-task-manager/lib/terminal-fingerprint.js +19 -3
- package/template/claude-task-manager/lib/transcript-ingest-chunker.js +41 -0
- package/template/claude-task-manager/lib/transcript-store.js +99 -7
- package/template/claude-task-manager/lib/wal-checkpoint-policy.js +40 -0
- package/template/claude-task-manager/lib/walle-session-model-catalog.js +100 -9
- package/template/claude-task-manager/lib/worktree-output-binding.js +93 -0
- package/template/claude-task-manager/lib/write-coalescer.js +83 -0
- package/template/claude-task-manager/public/css/walle-session.css +4 -0
- package/template/claude-task-manager/public/css/walle.css +0 -66
- package/template/claude-task-manager/public/index.html +1707 -266
- package/template/claude-task-manager/public/js/feedback.js +8 -1
- package/template/claude-task-manager/public/js/message-renderer.js +72 -2
- package/template/claude-task-manager/public/js/session-phase.js +4 -0
- package/template/claude-task-manager/public/js/session-status-precedence.js +7 -173
- package/template/claude-task-manager/public/js/setup.js +46 -3
- package/template/claude-task-manager/public/js/state-sync-client.js +257 -0
- package/template/claude-task-manager/public/js/state-sync-predictor.js +41 -0
- package/template/claude-task-manager/public/js/stream-view.js +113 -9
- package/template/claude-task-manager/public/js/terminal-reconciler.js +24 -4
- package/template/claude-task-manager/public/js/walle-session.js +239 -19
- package/template/claude-task-manager/public/js/walle.js +32 -119
- package/template/claude-task-manager/queue-engine.js +140 -0
- package/template/claude-task-manager/server.js +2802 -416
- package/template/claude-task-manager/session-integrity.js +16 -1
- package/template/claude-task-manager/workers/db-owner-worker.js +23 -6
- package/template/claude-task-manager/workers/read-pool-worker.js +55 -1
- package/template/claude-task-manager/workers/session-host-pool-process.js +193 -0
- package/template/claude-task-manager/workers/session-host-process.js +47 -11
- package/template/claude-task-manager/workers/state-detectors/codex.js +33 -0
- package/template/package.json +1 -1
- package/template/wall-e/agent.js +191 -31
- package/template/wall-e/api-walle.js +97 -52
- package/template/wall-e/auth/flow-manager.js +78 -1
- package/template/wall-e/auth/provider-flows.js +56 -2
- package/template/wall-e/bin/walle-mcp-stdio.js +138 -5
- package/template/wall-e/brain.js +175 -13
- package/template/wall-e/chat.js +46 -1
- package/template/wall-e/embeddings.js +70 -0
- package/template/wall-e/events/event-bus.js +11 -1
- package/template/wall-e/http/auth.js +3 -1
- package/template/wall-e/http/model-admin.js +22 -0
- package/template/wall-e/lib/brain-owner-worker-client.js +36 -4
- package/template/wall-e/lib/diagnostics-flags.js +9 -0
- package/template/wall-e/lib/event-loop-monitor.js +84 -5
- package/template/wall-e/lib/mcp-scan-lifecycle.js +247 -0
- package/template/wall-e/lib/parent-brain-owner-client.js +109 -0
- package/template/wall-e/lib/runtime-process-inventory.js +114 -0
- package/template/wall-e/lib/runtime-worker-pool.js +214 -23
- package/template/wall-e/lib/scheduler-worker-jobs.js +49 -4
- package/template/wall-e/lib/scheduler.js +320 -35
- package/template/wall-e/lib/slack-identity.js +120 -0
- package/template/wall-e/lib/slack-permalink.js +107 -0
- package/template/wall-e/lib/slack-web.js +174 -0
- package/template/wall-e/lib/worker-thread-pool.js +55 -4
- package/template/wall-e/llm/claude-cli.js +21 -3
- package/template/wall-e/llm/cli-binary.js +90 -0
- package/template/wall-e/llm/codex-cli.js +113 -49
- package/template/wall-e/llm/default-fallback.js +10 -4
- package/template/wall-e/llm/mlx.js +46 -8
- package/template/wall-e/llm/model-catalog.js +129 -17
- package/template/wall-e/llm/provider-detector.js +112 -22
- package/template/wall-e/loops/backfill.js +32 -16
- package/template/wall-e/loops/ingest.js +50 -16
- package/template/wall-e/loops/tasks.js +521 -25
- package/template/wall-e/mcp-server.js +215 -6
- package/template/wall-e/memory/ctm-session-context.js +93 -0
- package/template/wall-e/skills/_bundled/google-calendar/run.js +15 -23
- package/template/wall-e/skills/_bundled/gws-workspace/gws-router +237 -0
- package/template/wall-e/skills/_bundled/gws-workspace/setup.js +112 -1
- package/template/wall-e/skills/_bundled/mcp-scan/run.js +265 -41
- package/template/wall-e/skills/_bundled/slack-mentions/run.js +434 -93
- package/template/wall-e/skills/internal-skill-registry.js +27 -5
- package/template/wall-e/skills/mcp-client.js +18 -3
- package/template/wall-e/skills/script-skill-runner.js +53 -5
- package/template/wall-e/skills/skill-planner.js +5 -26
- package/template/wall-e/training/real-trajectory-miner.js +24 -114
- package/template/wall-e/utils/dedup.js +165 -66
- package/template/wall-e/weather-runtime.js +12 -4
- package/template/wall-e/workers/brain-owner-worker.js +68 -0
- package/template/wall-e/workers/runtime-worker.js +4 -0
- package/template/website/index.html +3 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# apiSessionMessages: no-main-fallback + incremental low-priority backfill
|
|
2
|
+
|
|
3
|
+
Three rules from the user:
|
|
4
|
+
1. **Never fall back to the main loop.** Remove the `onMain()` heavy compute from the
|
|
5
|
+
session-message off-thread builders. On read-pool failure/degrade → defer (serve stale
|
|
6
|
+
or `503 {deferred}` retry), never project/serialize on main.
|
|
7
|
+
2. **Incremental fetch/import.** Backfill a single (possibly giant) session in bounded
|
|
8
|
+
row-chunks across ticks, resumable, instead of one all-or-nothing `replaceSessionMessageRows`.
|
|
9
|
+
3. **Smaller chunks, lower priority.** Backfill sweep: smaller per-tick session limit + wall
|
|
10
|
+
budget + per-session row cap, and SKIP the tick under a transient load surge so interactive
|
|
11
|
+
reads keep the read pool / write lock.
|
|
12
|
+
|
|
13
|
+
## Root cause (from live perf logs)
|
|
14
|
+
The one-time migration backfill saturates the read pool (`session-content-rows-backfill`
|
|
15
|
+
caught blocking 6107ms; a single 16k-message session is migrated in ONE
|
|
16
|
+
`replaceSessionMessageRows` call → tens of seconds holding the write lock). While the pool is
|
|
17
|
+
saturated, `apiSessionMessages` off-thread reads time out and fall back to `onMain()` → the
|
|
18
|
+
full-conversation projection + `JSON.stringify` runs on the main loop → 1.5–2.8s freezes
|
|
19
|
+
(probe-confirmed: `apiSessionMessages:2781ms`, `serializeResponse`×20, `project`×37).
|
|
20
|
+
|
|
21
|
+
## Changes
|
|
22
|
+
|
|
23
|
+
### db.js
|
|
24
|
+
- `getSessionMessageRowCount(sessionId)` — dense-store resume point.
|
|
25
|
+
- `appendSessionMessageRowsChunk(sessionId, messages, startIndex, maxCount)` — `INSERT OR IGNORE`
|
|
26
|
+
rows for indices `[start, min(start+maxCount, len))` (idempotent, indices preserved), and set
|
|
27
|
+
`extracted_source_len` only when the chunk reaches the end. Returns `{written, nextIndex, complete}`.
|
|
28
|
+
|
|
29
|
+
### lib/session-content-backfill.js
|
|
30
|
+
- `runContentRowsBackfillSweep` gains chunked mode: when `opts.appendChunk`/`opts.getRowCount`
|
|
31
|
+
/`opts.maxRowsPerSession` are provided, migrate each session one bounded chunk per tick
|
|
32
|
+
(resume from existing row count); a still-incomplete session marks `partial=true` so the
|
|
33
|
+
reclaim/legacy-drop passes wait. Falls back to whole-session `replaceSessionMessageRows`
|
|
34
|
+
when chunk deps are absent (back-compat for existing tests).
|
|
35
|
+
|
|
36
|
+
### server.js
|
|
37
|
+
- Rule 1: `_buildSessionMessagesFullResponseOffThread`, `_buildSessionMessagesPageResponseOffThread`,
|
|
38
|
+
`_fetchSessionMessagesPageOffThread` → `onFail`/degrade returns `null` (no `onMain()`).
|
|
39
|
+
`_sendFullMessagesOffThread` on `null` serves the per-session last-good buffer if present,
|
|
40
|
+
else `503 {deferred:true}` with `Retry-After`. Never runs projection/serialize on main.
|
|
41
|
+
- Rule 3: backfill sweep registration uses smaller `limit` + `budgetMs` + `maxRowsPerSession`
|
|
42
|
+
and skips the tick when `_underTransientLoadSurge()` (or worker degraded, already present).
|
|
43
|
+
|
|
44
|
+
## Tests
|
|
45
|
+
- `tests/session-content-backfill-chunked.test.js` — chunked backfill: ≤ maxRows/session/tick,
|
|
46
|
+
resumes from existing count, converges to 100%, idempotent, gate stays false until complete.
|
|
47
|
+
- `tests/session-messages-no-main-fallback.test.js` — the off-thread builders return null on
|
|
48
|
+
pool-fail; the full-read handler serves stale/503 and never invokes the on-main projection.
|
|
@@ -109,3 +109,24 @@ For a stale Conversation tab, compare:
|
|
|
109
109
|
|
|
110
110
|
If the provider JSONL is current but the DB cache is stale, the fix belongs in
|
|
111
111
|
the importer/scheduler path, not in xterm rendering or tab switching.
|
|
112
|
+
|
|
113
|
+
## Conversation Read Contract
|
|
114
|
+
|
|
115
|
+
The Conversation tab is a CTM DB read path. Provider JSONL files are the
|
|
116
|
+
authoritative import/repair source, but they must not be parsed on the normal
|
|
117
|
+
`/api/session/messages?mode=turns&compact=conversation` request path.
|
|
118
|
+
|
|
119
|
+
Request behavior:
|
|
120
|
+
|
|
121
|
+
- Serve `session_message_rows` when rows exist, even if the source JSONL has
|
|
122
|
+
grown past the imported DB watermark.
|
|
123
|
+
- When rows are present but stale, return the DB page with
|
|
124
|
+
`cacheFresh:false`, `stale:true`, and `freshness:"catching_up"`, then wake
|
|
125
|
+
the importer out of band.
|
|
126
|
+
- When rows are absent but `session_conversations` has cached messages, serve
|
|
127
|
+
that DB cache and wake import if stale or explicitly refreshed.
|
|
128
|
+
- When neither rows nor cache exist, return an explicit DB cache miss response
|
|
129
|
+
and wake import instead of parsing JSONL inside the HTTP request.
|
|
130
|
+
|
|
131
|
+
The importer is responsible for keeping CTM DB current. The HTTP request is
|
|
132
|
+
responsible for bounded DB reads and honest freshness metadata.
|