diff options
| author | Agando <roduccomm@gmail.com> | 2026-10-22 00:46:05 +0200 |
|---|---|---|
| committer | Agando <roduccomm@gmail.com> | 2026-10-22 00:46:05 +0200 |
| commit | 70b9a2f8cc2b249362ca4893fdbb6703c0ea7b8a (patch) | |
| tree | b87027e9790b2bb0945f4192a5d08419fa58b478 /modules/core/module-aiassist.js | |
| parent | 14c3cb36a3b037111a9fbdf8ff6ea32ee62b3be1 (diff) | |
feat(newos4): world-model-ask answers with the LLM, grounded in the model (v4.6.50)
`world-model-ask` was a 10-keyword lookup: any real question returned
"Unknown query. Try: modules, skills, ...". The documented example
("what changed since yesterday") compared nothing — it restated the current
snapshot.
- _modelDigest(): whitelisted snapshot (measured 942-965 chars on fixtures,
~3.3 KB live) + recent error sample + changesSinceLastSnapshot
- _buildAskPrompt(): "answer only from this JSON, never invent numbers, name the
command that would produce missing data"
- ask(): connects Ollama on demand, answers via chat(), falls back to the facts
path with a visible warning; --facts keeps the instant lookup
- _diffSincePrev(): keeps one previous snapshot in /system/world-model.prev.json
so "what changed" is a real diff (files 136 -> 140)
- world_model_query tool returns the snapshot (digest or detail:full) instead of
ten canned strings; no nested LLM call inside a tool call
- help text now says what it does; node test modules/test/test-world-model-ask.js
(11 assertions, runs the real class)
Verified live v4.6.50: facts "Loaded 46 modules" | LLM "The snapshot does not
contain information regarding the cause of memory growth ... use
world-model-refresh" | diff "files 136 -> 140" | tool snapshot 3,334 bytes.
Diffstat (limited to 'modules/core/module-aiassist.js')
| -rw-r--r-- | modules/core/module-aiassist.js | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/modules/core/module-aiassist.js b/modules/core/module-aiassist.js index f69494e..a8c0ae1 100644 --- a/modules/core/module-aiassist.js +++ b/modules/core/module-aiassist.js @@ -98,7 +98,7 @@ buildSystemPrompt() { + 'FS: list/read/write/delete | NVFS: nvfs-resolve | Web: search/fetch [POST=method+body] | Mod: view/edit/test/reload | Config | Skills | VaultMind | wallet-lookup | get_usage_stats\\n' + 'web_fetch: GET for pages, POST with method+body for JSON APIs. JS: node <file.js> or node -e "expr" (browser JS only).\n' + 'Other: floating, webdav, cron, vault, sandbox, agents, wpm, mindmap, memgraph, world-model, predict, guardrail, tar, secret-* — via help.\n' - + 'predict_task: estimate duration before complex tasks. world_model_query: ask about system state, changes, health.'; + + 'predict_task: estimate duration before complex tasks. world_model_query: read the system snapshot (modules, files, agents, telemetry, recent errors) and answer from it.'; if (profilePrompt) { base = profilePrompt + '\n\n' + base; } @@ -649,11 +649,12 @@ buildSystemPrompt() { type: 'function', function: { name: 'world_model_query', - description: 'Query the system world model for self-awareness: modules, skills, files, agents, health, memory graph, recent changes, active projects, telemetry. Ask questions like "what changed" or "how many modules".', + description: 'Read the synthesized system world model (modules, files, skills, agents, memory graph, telemetry, recent changes). Returns a JSON snapshot you can reason over; `facts` additionally carries the instant keyword answer. Ask detail:"full" for the complete model (~3 KB).', parameters: { type: 'object', properties: { - question: { type: 'string', description: 'What to ask: modules, skills, files, agents, health, memory, changes, projects, telemetry, summary' } + question: { type: 'string', description: 'What you want to know (used for the fast facts line)' }, + detail: { type: 'string', description: '"digest" (default) or "full"' } }, required: ['question'] } @@ -3035,8 +3036,14 @@ buildSystemPrompt() { var wm = this.terminal.moduleManager.modules['WorldModelModule']; if (!wm) return JSON.stringify({ error: 'WorldModelModule not loaded' }); if (!wm._model) return JSON.stringify({ error: 'World model not synthesized yet — run world-model-refresh' }); - var wmAnswer = wm._answerQuery(a.question || ''); - return JSON.stringify({ question: a.question, answer: wmAnswer, version: wm._model.version, synthesized: wm._model.synthesized }); + var wmOut = { + question: a.question, + facts: wm._answerQuery(a.question || ''), + version: wm._model.version, + synthesized: wm._model.synthesized, + snapshot: (a.detail === 'full') ? wm._model : JSON.parse(wm._modelDigest()) + }; + return JSON.stringify(wmOut); } case 'health_check': case 'diff_module': |