create-walle 0.9.13 → 0.9.15
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 +8 -3
- package/bin/create-walle.js +232 -32
- package/bin/mcp-inject.js +18 -53
- package/package.json +3 -1
- package/template/claude-task-manager/api-prompts.js +11 -2
- package/template/claude-task-manager/approval-agent.js +7 -0
- package/template/claude-task-manager/db.js +94 -75
- package/template/claude-task-manager/docs/session-standup-command-center-design.md +242 -0
- package/template/claude-task-manager/docs/session-tooltip-freshness-design.md +224 -0
- package/template/claude-task-manager/docs/session-ux-issue-review-2026-05-01.md +369 -0
- package/template/claude-task-manager/fuzzy-utils.js +10 -2
- package/template/claude-task-manager/git-utils.js +140 -10
- package/template/claude-task-manager/lib/agent-capabilities.js +1 -1
- package/template/claude-task-manager/lib/agent-presets.js +38 -5
- package/template/claude-task-manager/lib/codex-terminal-final.js +53 -0
- package/template/claude-task-manager/lib/ctm-session-context-api.js +222 -0
- package/template/claude-task-manager/lib/session-diagnostics.js +56 -0
- package/template/claude-task-manager/lib/session-history.js +309 -16
- package/template/claude-task-manager/lib/session-standup.js +409 -0
- package/template/claude-task-manager/lib/session-stream.js +253 -20
- package/template/claude-task-manager/lib/standup-attention.js +200 -0
- package/template/claude-task-manager/lib/status-hooks.js +8 -2
- package/template/claude-task-manager/lib/update-telemetry.js +114 -0
- package/template/claude-task-manager/lib/walle-ctm-history.js +49 -6
- package/template/claude-task-manager/lib/walle-default-model.js +55 -0
- package/template/claude-task-manager/lib/walle-mcp-auto-config.js +66 -0
- package/template/claude-task-manager/lib/walle-supervisor.js +86 -19
- package/template/claude-task-manager/lib/walle-transcript.js +1 -3
- package/template/claude-task-manager/lib/worktree-cwd.js +82 -0
- package/template/claude-task-manager/package.json +1 -0
- package/template/claude-task-manager/providers/codex-mcp.js +104 -0
- package/template/claude-task-manager/providers/index.js +2 -0
- package/template/claude-task-manager/public/css/setup.css +2 -1
- package/template/claude-task-manager/public/css/walle.css +71 -0
- package/template/claude-task-manager/public/index.html +2388 -429
- package/template/claude-task-manager/public/js/message-renderer.js +314 -35
- package/template/claude-task-manager/public/js/session-search-utils.js +185 -3
- package/template/claude-task-manager/public/js/session-status-precedence.js +125 -0
- package/template/claude-task-manager/public/js/setup.js +62 -19
- package/template/claude-task-manager/public/js/stream-view.js +396 -55
- package/template/claude-task-manager/public/js/terminal-restore-state.js +57 -0
- package/template/claude-task-manager/public/js/walle-session.js +234 -26
- package/template/claude-task-manager/public/js/walle.js +143 -2
- package/template/claude-task-manager/server.js +1402 -433
- package/template/claude-task-manager/session-integrity.js +77 -28
- package/template/claude-task-manager/workers/approval-widget-validator.js +15 -5
- package/template/claude-task-manager/workers/scrollback-worker.js +5 -6
- package/template/claude-task-manager/workers/state-detectors/codex.js +6 -0
- package/template/package.json +1 -1
- package/template/wall-e/agent-runners/claude-code.js +2 -0
- package/template/wall-e/agent.js +63 -8
- package/template/wall-e/api-walle.js +330 -52
- package/template/wall-e/brain.js +291 -42
- package/template/wall-e/chat.js +172 -15
- package/template/wall-e/coding/compaction-service.js +19 -5
- package/template/wall-e/coding/stream-processor.js +22 -2
- package/template/wall-e/coding/workspace-replay.js +1 -4
- package/template/wall-e/coding-orchestrator.js +250 -80
- package/template/wall-e/compat.js +0 -28
- package/template/wall-e/context/context-builder.js +3 -1
- package/template/wall-e/embeddings.js +2 -7
- package/template/wall-e/eval/agent-runner.js +30 -9
- package/template/wall-e/eval/benchmark-generator.js +21 -1
- package/template/wall-e/eval/benchmarks/chat-eval.json +66 -6
- package/template/wall-e/eval/benchmarks/coding-agent.json +0 -596
- package/template/wall-e/eval/cc-replay.js +1 -0
- package/template/wall-e/eval/codex-cli-baseline.js +633 -0
- package/template/wall-e/eval/debug-agent003.js +1 -0
- package/template/wall-e/eval/eval-orchestrator.js +3 -3
- package/template/wall-e/eval/run-agent-benchmarks.js +11 -3
- package/template/wall-e/eval/run-codex-cli-baseline.js +177 -0
- package/template/wall-e/eval/run-model-comparison.js +1 -0
- package/template/wall-e/eval/swebench-adapter.js +1 -0
- package/template/wall-e/evaluation/quorum-evaluator.js +0 -1
- package/template/wall-e/extraction/knowledge-extractor.js +1 -2
- package/template/wall-e/lib/mcp-integration.js +336 -0
- package/template/wall-e/llm/ollama.js +47 -8
- package/template/wall-e/llm/ollama.plugin.json +1 -1
- package/template/wall-e/llm/tool-adapter.js +1 -0
- package/template/wall-e/loops/ingest.js +42 -8
- package/template/wall-e/loops/initiative.js +87 -2
- package/template/wall-e/mcp-server.js +872 -19
- package/template/wall-e/memory/ctm-context-client.js +230 -0
- package/template/wall-e/memory/ctm-session-context.js +1376 -0
- package/template/wall-e/prompts/coding/memory-protocol.md +6 -0
- package/template/wall-e/server.js +30 -1
- package/template/wall-e/skills/_bundled/memory-search/SKILL.md +8 -0
- package/template/wall-e/skills/_bundled/scan-ctm-sessions/SKILL.md +20 -0
- package/template/wall-e/skills/_bundled/scan-ctm-sessions/run.js +43 -0
- package/template/wall-e/skills/_bundled/slack-mentions/run.js +471 -188
- package/template/wall-e/skills/skill-planner.js +86 -4
- package/template/wall-e/slack/socket-mode-listener.js +276 -0
- package/template/wall-e/telemetry.js +70 -2
- package/template/wall-e/tools/builtin-middleware.js +55 -2
- package/template/wall-e/tools/shell-policy.js +1 -1
- package/template/wall-e/tools/slack-owner.js +104 -0
- package/template/website/index.html +4 -4
- package/template/builder-journal.md +0 -17
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
Use Wall-E session memory as part of the coding workflow.
|
|
2
2
|
|
|
3
3
|
- At session start or before acting on old context, call `walle_memory_status` when available so you know whether memory is connected.
|
|
4
|
+
- If `walle_lookup_context` is available, use it for ambiguous private/work/session recall prompts because it routes the request and gathers memory, entity, and CTM session context in one call.
|
|
4
5
|
- Before answering or changing code based on "last time", "previously", "this branch", "that bug", "my preference", a named project/person, or a remembered decision, search first with `walle_search_sessions` or `search_memories`.
|
|
6
|
+
- For any private, remembered, or work-context question, treat Wall-E memory as the primary source before public web or raw files. This includes prior agent sessions, previous attempts, branch/task history, decisions, preferences, people, teams, projects, tools, Slack/email/calendar context, and prompts like "do you know", "who/what is", "what happened", or "what did we discuss".
|
|
7
|
+
- Use `entity_search` with its `name` argument when graph lookup helps, then `search_memories`; use public web only for public/current facts, after memory misses, or when the user explicitly asks for public information.
|
|
8
|
+
- When memories include private work details, summarize minimally and avoid dumping emails, meeting links, or private document URLs unless the user explicitly needs them.
|
|
9
|
+
- If native `mcp__wall_e__*` tools are not mounted but `codex mcp list` shows `wall-e` enabled, call the MCP endpoint directly with JSON-RPC over `http://localhost:<port>/mcp` before falling back to raw files. Treat file-exists-only status as insufficient; confirm DB retrieval through `walle_search_sessions`, `walle_get_session`, or `walle_context_pack`.
|
|
10
|
+
- If Wall-E MCP reports `ctm_db_schema_read_failed`, say that DB-first memory is unhealthy and use JSONL/direct-file fallback with that caveat. Do not silently call it "tables missing."
|
|
5
11
|
- Batch searches by angle: project/session id, file path, error text, decision keyword. Do not run one narrow query and give up.
|
|
6
12
|
- When you use retrieved memory, cite the source session id, timestamp, file, or diary entry returned by the tool.
|
|
7
13
|
- For long retrieved sessions, use `walle_get_session` to inspect the specific source/session instead of relying on a short snippet.
|
|
@@ -6,6 +6,33 @@ const { getAllowedOrigin, isAuthorizedRequest } = require('./http/auth');
|
|
|
6
6
|
const PORT = parseInt(process.env.WALL_E_PORT) || 3457;
|
|
7
7
|
const HOST = process.env.WALL_E_HOST || '127.0.0.1';
|
|
8
8
|
|
|
9
|
+
function isMcpAutoConfigDisabled() {
|
|
10
|
+
const value = String(process.env.WALLE_MCP_AUTO_CONFIG || '').toLowerCase();
|
|
11
|
+
return value === '0' || value === 'false' || value === 'off';
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function autoConfigureWallEMcp() {
|
|
15
|
+
if (isMcpAutoConfigDisabled()) return;
|
|
16
|
+
try {
|
|
17
|
+
const { ensureMcpIntegrations } = require('./lib/mcp-integration');
|
|
18
|
+
const results = ensureMcpIntegrations(PORT);
|
|
19
|
+
const changed = results.filter(r => r.kind === 'mcp_config' && (r.action === 'added' || r.action === 'updated'));
|
|
20
|
+
const instructionChanged = results.filter(r => r.kind === 'agent_instructions' && (r.action === 'added' || r.action === 'updated'));
|
|
21
|
+
const errors = results.filter(r => r.action === 'error');
|
|
22
|
+
if (changed.length) {
|
|
23
|
+
console.log(`[wall-e] Auto-configured Wall-E MCP for ${changed.length} AI tool(s)`);
|
|
24
|
+
}
|
|
25
|
+
if (instructionChanged.length) {
|
|
26
|
+
console.log(`[wall-e] Updated Wall-E memory-routing instructions for ${instructionChanged.length} AI agent(s)`);
|
|
27
|
+
}
|
|
28
|
+
if (errors.length) {
|
|
29
|
+
console.warn(`[wall-e] Wall-E MCP auto-config skipped ${errors.length} invalid config file(s): ${errors.map(r => r.tool).join(', ')}`);
|
|
30
|
+
}
|
|
31
|
+
} catch (err) {
|
|
32
|
+
console.warn(`[wall-e] Wall-E MCP auto-config failed: ${err.message}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
9
36
|
function startServer(options = {}) {
|
|
10
37
|
const server = http.createServer(async (req, res) => {
|
|
11
38
|
const url = new URL(req.url, `http://${req.headers.host}`);
|
|
@@ -120,6 +147,8 @@ function startServer(options = {}) {
|
|
|
120
147
|
if (retryCount > 0) console.log(`[wall-e] Port ${PORT} freed after ${retryCount} retries`);
|
|
121
148
|
console.log(`[wall-e] HTTP server listening on ${HOST}:${PORT}`);
|
|
122
149
|
readyResolve();
|
|
150
|
+
if (typeof setImmediate === 'function') setImmediate(autoConfigureWallEMcp);
|
|
151
|
+
else setTimeout(autoConfigureWallEMcp, 0);
|
|
123
152
|
});
|
|
124
153
|
}
|
|
125
154
|
|
|
@@ -147,4 +176,4 @@ function startServer(options = {}) {
|
|
|
147
176
|
return server;
|
|
148
177
|
}
|
|
149
178
|
|
|
150
|
-
module.exports = { startServer };
|
|
179
|
+
module.exports = { startServer, autoConfigureWallEMcp };
|
|
@@ -49,7 +49,14 @@ is being sought. Identify:
|
|
|
49
49
|
### 2. Execute Searches
|
|
50
50
|
Use `search_memories` with MULTIPLE queries in the SAME turn:
|
|
51
51
|
|
|
52
|
+
**For private/work-context queries:**
|
|
53
|
+
- If MCP `walle_lookup_context` is available, call it first to route the request and gather memory/entity/session context together.
|
|
54
|
+
- Treat WALL-E's brain as the primary source for remembered user context before public web search.
|
|
55
|
+
- Search prior conversations, decisions, preferences, project/task names, tool names, Slack/email/calendar terms, and any error text or session id the user provides.
|
|
56
|
+
- Use public web search only for public/current facts, after memory has no useful hits, or when the user explicitly asks for public information.
|
|
57
|
+
|
|
52
58
|
**For people-related queries:**
|
|
59
|
+
- Use `lookup_person` or `entity_search` first when available; note that MCP `entity_search` takes `name`, not `query`.
|
|
53
60
|
- Search by person's name
|
|
54
61
|
- Search by their common topics or projects
|
|
55
62
|
- Search in Slack specifically (`source: "slack"`)
|
|
@@ -87,6 +94,7 @@ Produce a structured summary:
|
|
|
87
94
|
## Guidelines
|
|
88
95
|
|
|
89
96
|
- Always cite sources: include timestamps and channel names
|
|
97
|
+
- For private work/person context, summarize minimally and do not expose emails, meeting links, or private document URLs unless needed
|
|
90
98
|
- Translate Chinese content -- it often contains the most candid opinions
|
|
91
99
|
- Distinguish between what the owner SAID vs what others SAID ABOUT/TO them
|
|
92
100
|
- When evidence is thin, say so explicitly rather than speculating
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scan-ctm-sessions
|
|
3
|
+
description: Deterministically ingest Claude Code session JSONL files into Wall-E memory
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
author: wall-e
|
|
6
|
+
execution: script
|
|
7
|
+
entry: run.js
|
|
8
|
+
trigger:
|
|
9
|
+
type: interval
|
|
10
|
+
interval_ms: 60000
|
|
11
|
+
retry:
|
|
12
|
+
backoff_schedule_ms: [5000, 15000, 60000, 300000]
|
|
13
|
+
tags: [ctm, claude-code, sessions, memory]
|
|
14
|
+
permissions:
|
|
15
|
+
- filesystem:read
|
|
16
|
+
- brain:write
|
|
17
|
+
---
|
|
18
|
+
# Scan CTM Sessions
|
|
19
|
+
|
|
20
|
+
Reads Claude Code JSONL files from `~/.claude/projects` and ingests them through Wall-E's deterministic CTM adapter.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
const brain = require(path.resolve(__dirname, '..', '..', '..', 'brain'));
|
|
7
|
+
const CtmAdapter = require(path.resolve(__dirname, '..', '..', '..', 'adapters', 'ctm'));
|
|
8
|
+
const ingest = require(path.resolve(__dirname, '..', '..', '..', 'loops', 'ingest'));
|
|
9
|
+
|
|
10
|
+
const standalone = require.main === module;
|
|
11
|
+
|
|
12
|
+
function ensureDb() {
|
|
13
|
+
try {
|
|
14
|
+
brain.getDb();
|
|
15
|
+
} catch {
|
|
16
|
+
brain.initDb();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function main() {
|
|
21
|
+
ensureDb();
|
|
22
|
+
const adapter = new CtmAdapter();
|
|
23
|
+
const result = await ingest.runOnce([adapter]);
|
|
24
|
+
const checkpoint = brain.getCheckpoint(ingest.checkpointName(adapter));
|
|
25
|
+
const output = {
|
|
26
|
+
ok: true,
|
|
27
|
+
messagesIngested: result.memoriesIngested || 0,
|
|
28
|
+
memoriesIngested: result.memoriesIngested || 0,
|
|
29
|
+
checkpoint: checkpoint?.last_memory_at || null,
|
|
30
|
+
};
|
|
31
|
+
console.log(JSON.stringify(output));
|
|
32
|
+
if (standalone) brain.closeDb();
|
|
33
|
+
return output;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = { run: main };
|
|
37
|
+
|
|
38
|
+
if (require.main === module) {
|
|
39
|
+
main().catch((err) => {
|
|
40
|
+
console.error(JSON.stringify({ ok: false, error: err.message }));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
});
|
|
43
|
+
}
|