aboutsummaryrefslogtreecommitdiff
path: root/modules/core/module-aiassist.js
diff options
context:
space:
mode:
authorAgando <roduccomm@gmail.com>2026-10-22 00:46:05 +0200
committerAgando <roduccomm@gmail.com>2026-10-22 00:46:05 +0200
commit70b9a2f8cc2b249362ca4893fdbb6703c0ea7b8a (patch)
treeb87027e9790b2bb0945f4192a5d08419fa58b478 /modules/core/module-aiassist.js
parent14c3cb36a3b037111a9fbdf8ff6ea32ee62b3be1 (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.js17
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':