Feature/memory pr (#894)
* feat: multi-turn context and conversation arc memory PR 2E - Section 2.9, 2.10: - Add multiTurnContext.ts with turn tracking and state preservation - Add conversationArc.ts with goal/decision/milestone tracking - Wire into query.ts after tool execution - Feature-flags: MULTI_TURN_CONTEXT, CONVERSATION_ARC - Add comprehensive tests (22 passing) * feat(cli): add /knowledge command to manage native memory - Add /knowledge enable <yes|no> to toggle Knowledge Graph learning\n- Add /knowledge clear to reset memory\n- Add persistent knowledgeGraphEnabled setting to global config\n- Integrated user setting into the query execution loop * feat(cli): add /knowledge command (stable local-jsx version) - Resolve conflicts between .ts and .tsx files\n- Align with LocalJSXCommandCall signature\n- Fix onDone and args errors * test(cli): fix knowledge command tests by properly isolating global config * fix(cli): make knowledge command defensive against undefined args and leaky tests * fix(cli): correct data source for entity count and fix test isolation * fix(cli): reinforce knowledge test by explicitly defining property on test config * fix(cli): explicitly define property in test config to avoid undefined in CI * fix(cli): make knowledge tests resistant to global config mocks in CI * chore(memory): surgical improvements from architectural audit - Fix: Implement entity deduplication in Knowledge Graph\n- Fix: Ensure fact extraction from user messages in query loop\n- Fix: Refine regexes for better quality learning (less noise) --------- Co-authored-by: LifeJiggy <Bloomtonjovish@gmail.com>
This commit is contained in:
61
src/commands/knowledge/knowledge.ts
Normal file
61
src/commands/knowledge/knowledge.ts
Normal file
@@ -0,0 +1,61 @@
|
||||
import type { LocalCommandCall } from '../../types/command.js';
|
||||
import { getArcSummary, resetArc, getArcStats, getArc } from '../../utils/conversationArc.js';
|
||||
import { getGlobalConfig, saveGlobalConfig } from '../../utils/config.js';
|
||||
import chalk from 'chalk';
|
||||
|
||||
export const call: LocalCommandCall = async (args, _context) => {
|
||||
const arg = (args ? String(args) : '').trim().toLowerCase();
|
||||
const splitArgs = arg.split(/\s+/).filter(Boolean);
|
||||
const subCommand = splitArgs[0];
|
||||
|
||||
if (!subCommand || subCommand === 'status') {
|
||||
const config = getGlobalConfig();
|
||||
const stats = getArcStats();
|
||||
const arc = getArc();
|
||||
const entityCount = Object.keys(arc?.knowledgeGraph.entities || {}).length;
|
||||
|
||||
const statusText = (config.knowledgeGraphEnabled !== false)
|
||||
? chalk.green('ENABLED')
|
||||
: chalk.red('DISABLED');
|
||||
|
||||
let output = `${chalk.bold('Knowledge Graph Engine')}: ${statusText}\n`;
|
||||
if (stats) {
|
||||
output += `• Stats: ${stats.goalCount} goals, ${stats.milestoneCount} milestones, ${entityCount} technical facts learned`;
|
||||
}
|
||||
|
||||
return { type: 'text', value: output };
|
||||
}
|
||||
|
||||
if (subCommand === 'enable') {
|
||||
const val = splitArgs[1];
|
||||
const isEnabled = val === 'yes' || val === 'true';
|
||||
const isDisabled = val === 'no' || val === 'false';
|
||||
|
||||
if (!isEnabled && !isDisabled) {
|
||||
return { type: 'text', value: 'Usage: /knowledge enable <yes|no>' };
|
||||
}
|
||||
|
||||
saveGlobalConfig(current => ({ ...current, knowledgeGraphEnabled: isEnabled }));
|
||||
return {
|
||||
type: 'text',
|
||||
value: `✨ Knowledge Graph engine ${isEnabled ? chalk.green('enabled') : chalk.red('disabled')}.`
|
||||
};
|
||||
}
|
||||
|
||||
if (subCommand === 'clear') {
|
||||
resetArc();
|
||||
return {
|
||||
type: 'text',
|
||||
value: '🗑️ Knowledge graph memory has been cleared for this session.'
|
||||
};
|
||||
}
|
||||
|
||||
if (subCommand === 'list') {
|
||||
return { type: 'text', value: getArcSummary() };
|
||||
}
|
||||
|
||||
return {
|
||||
type: 'text',
|
||||
value: `Unknown subcommand: ${subCommand}. Available: enable, clear, status, list`
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user