@soleri/core 2.0.2 → 2.4.0
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/dist/brain/brain.d.ts +14 -50
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +207 -16
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/intelligence.d.ts +86 -0
- package/dist/brain/intelligence.d.ts.map +1 -0
- package/dist/brain/intelligence.js +771 -0
- package/dist/brain/intelligence.js.map +1 -0
- package/dist/brain/types.d.ts +197 -0
- package/dist/brain/types.d.ts.map +1 -0
- package/dist/brain/types.js +2 -0
- package/dist/brain/types.js.map +1 -0
- package/dist/cognee/client.d.ts +35 -0
- package/dist/cognee/client.d.ts.map +1 -0
- package/dist/cognee/client.js +291 -0
- package/dist/cognee/client.js.map +1 -0
- package/dist/cognee/types.d.ts +46 -0
- package/dist/cognee/types.d.ts.map +1 -0
- package/dist/cognee/types.js +3 -0
- package/dist/cognee/types.js.map +1 -0
- package/dist/control/identity-manager.d.ts +22 -0
- package/dist/control/identity-manager.d.ts.map +1 -0
- package/dist/control/identity-manager.js +233 -0
- package/dist/control/identity-manager.js.map +1 -0
- package/dist/control/intent-router.d.ts +32 -0
- package/dist/control/intent-router.d.ts.map +1 -0
- package/dist/control/intent-router.js +242 -0
- package/dist/control/intent-router.js.map +1 -0
- package/dist/control/types.d.ts +68 -0
- package/dist/control/types.d.ts.map +1 -0
- package/dist/control/types.js +9 -0
- package/dist/control/types.js.map +1 -0
- package/dist/curator/curator.d.ts +29 -0
- package/dist/curator/curator.d.ts.map +1 -1
- package/dist/curator/curator.js +142 -5
- package/dist/curator/curator.js.map +1 -1
- package/dist/facades/types.d.ts +1 -1
- package/dist/governance/governance.d.ts +42 -0
- package/dist/governance/governance.d.ts.map +1 -0
- package/dist/governance/governance.js +488 -0
- package/dist/governance/governance.js.map +1 -0
- package/dist/governance/index.d.ts +3 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +2 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/types.d.ts +102 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +3 -0
- package/dist/governance/types.js.map +1 -0
- package/dist/index.d.ts +35 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -1
- package/dist/index.js.map +1 -1
- package/dist/llm/llm-client.d.ts.map +1 -1
- package/dist/llm/llm-client.js +9 -2
- package/dist/llm/llm-client.js.map +1 -1
- package/dist/logging/logger.d.ts +37 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +145 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/logging/types.d.ts +19 -0
- package/dist/logging/types.d.ts.map +1 -0
- package/dist/logging/types.js +2 -0
- package/dist/logging/types.js.map +1 -0
- package/dist/loop/loop-manager.d.ts +49 -0
- package/dist/loop/loop-manager.d.ts.map +1 -0
- package/dist/loop/loop-manager.js +105 -0
- package/dist/loop/loop-manager.js.map +1 -0
- package/dist/loop/types.d.ts +35 -0
- package/dist/loop/types.d.ts.map +1 -0
- package/dist/loop/types.js +8 -0
- package/dist/loop/types.js.map +1 -0
- package/dist/planning/gap-analysis.d.ts +29 -0
- package/dist/planning/gap-analysis.d.ts.map +1 -0
- package/dist/planning/gap-analysis.js +265 -0
- package/dist/planning/gap-analysis.js.map +1 -0
- package/dist/planning/gap-types.d.ts +29 -0
- package/dist/planning/gap-types.d.ts.map +1 -0
- package/dist/planning/gap-types.js +28 -0
- package/dist/planning/gap-types.js.map +1 -0
- package/dist/planning/planner.d.ts +150 -1
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +365 -2
- package/dist/planning/planner.js.map +1 -1
- package/dist/project/project-registry.d.ts +79 -0
- package/dist/project/project-registry.d.ts.map +1 -0
- package/dist/project/project-registry.js +276 -0
- package/dist/project/project-registry.js.map +1 -0
- package/dist/project/types.d.ts +28 -0
- package/dist/project/types.d.ts.map +1 -0
- package/dist/project/types.js +5 -0
- package/dist/project/types.js.map +1 -0
- package/dist/runtime/admin-extra-ops.d.ts +13 -0
- package/dist/runtime/admin-extra-ops.d.ts.map +1 -0
- package/dist/runtime/admin-extra-ops.js +284 -0
- package/dist/runtime/admin-extra-ops.js.map +1 -0
- package/dist/runtime/admin-ops.d.ts +15 -0
- package/dist/runtime/admin-ops.d.ts.map +1 -0
- package/dist/runtime/admin-ops.js +322 -0
- package/dist/runtime/admin-ops.js.map +1 -0
- package/dist/runtime/capture-ops.d.ts +15 -0
- package/dist/runtime/capture-ops.d.ts.map +1 -0
- package/dist/runtime/capture-ops.js +345 -0
- package/dist/runtime/capture-ops.js.map +1 -0
- package/dist/runtime/core-ops.d.ts +7 -3
- package/dist/runtime/core-ops.d.ts.map +1 -1
- package/dist/runtime/core-ops.js +646 -15
- package/dist/runtime/core-ops.js.map +1 -1
- package/dist/runtime/curator-extra-ops.d.ts +9 -0
- package/dist/runtime/curator-extra-ops.d.ts.map +1 -0
- package/dist/runtime/curator-extra-ops.js +59 -0
- package/dist/runtime/curator-extra-ops.js.map +1 -0
- package/dist/runtime/domain-ops.d.ts.map +1 -1
- package/dist/runtime/domain-ops.js +59 -13
- package/dist/runtime/domain-ops.js.map +1 -1
- package/dist/runtime/grading-ops.d.ts +14 -0
- package/dist/runtime/grading-ops.d.ts.map +1 -0
- package/dist/runtime/grading-ops.js +105 -0
- package/dist/runtime/grading-ops.js.map +1 -0
- package/dist/runtime/loop-ops.d.ts +13 -0
- package/dist/runtime/loop-ops.d.ts.map +1 -0
- package/dist/runtime/loop-ops.js +179 -0
- package/dist/runtime/loop-ops.js.map +1 -0
- package/dist/runtime/memory-cross-project-ops.d.ts +12 -0
- package/dist/runtime/memory-cross-project-ops.d.ts.map +1 -0
- package/dist/runtime/memory-cross-project-ops.js +165 -0
- package/dist/runtime/memory-cross-project-ops.js.map +1 -0
- package/dist/runtime/memory-extra-ops.d.ts +13 -0
- package/dist/runtime/memory-extra-ops.d.ts.map +1 -0
- package/dist/runtime/memory-extra-ops.js +173 -0
- package/dist/runtime/memory-extra-ops.js.map +1 -0
- package/dist/runtime/orchestrate-ops.d.ts +17 -0
- package/dist/runtime/orchestrate-ops.d.ts.map +1 -0
- package/dist/runtime/orchestrate-ops.js +240 -0
- package/dist/runtime/orchestrate-ops.js.map +1 -0
- package/dist/runtime/planning-extra-ops.d.ts +17 -0
- package/dist/runtime/planning-extra-ops.d.ts.map +1 -0
- package/dist/runtime/planning-extra-ops.js +300 -0
- package/dist/runtime/planning-extra-ops.js.map +1 -0
- package/dist/runtime/project-ops.d.ts +15 -0
- package/dist/runtime/project-ops.d.ts.map +1 -0
- package/dist/runtime/project-ops.js +181 -0
- package/dist/runtime/project-ops.js.map +1 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +48 -1
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/types.d.ts +23 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-extra-ops.d.ts +9 -0
- package/dist/runtime/vault-extra-ops.d.ts.map +1 -0
- package/dist/runtime/vault-extra-ops.js +195 -0
- package/dist/runtime/vault-extra-ops.js.map +1 -0
- package/dist/telemetry/telemetry.d.ts +48 -0
- package/dist/telemetry/telemetry.d.ts.map +1 -0
- package/dist/telemetry/telemetry.js +87 -0
- package/dist/telemetry/telemetry.js.map +1 -0
- package/dist/vault/vault.d.ts +94 -0
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +340 -1
- package/dist/vault/vault.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/admin-extra-ops.test.ts +420 -0
- package/src/__tests__/admin-ops.test.ts +271 -0
- package/src/__tests__/brain-intelligence.test.ts +828 -0
- package/src/__tests__/brain.test.ts +396 -27
- package/src/__tests__/capture-ops.test.ts +509 -0
- package/src/__tests__/cognee-client.test.ts +524 -0
- package/src/__tests__/core-ops.test.ts +341 -49
- package/src/__tests__/curator-extra-ops.test.ts +359 -0
- package/src/__tests__/curator.test.ts +126 -31
- package/src/__tests__/domain-ops.test.ts +111 -9
- package/src/__tests__/governance.test.ts +522 -0
- package/src/__tests__/grading-ops.test.ts +340 -0
- package/src/__tests__/identity-manager.test.ts +243 -0
- package/src/__tests__/intent-router.test.ts +222 -0
- package/src/__tests__/logger.test.ts +200 -0
- package/src/__tests__/loop-ops.test.ts +398 -0
- package/src/__tests__/memory-cross-project-ops.test.ts +246 -0
- package/src/__tests__/memory-extra-ops.test.ts +352 -0
- package/src/__tests__/orchestrate-ops.test.ts +284 -0
- package/src/__tests__/planner.test.ts +331 -0
- package/src/__tests__/planning-extra-ops.test.ts +548 -0
- package/src/__tests__/project-ops.test.ts +367 -0
- package/src/__tests__/runtime.test.ts +13 -11
- package/src/__tests__/vault-extra-ops.test.ts +407 -0
- package/src/brain/brain.ts +308 -72
- package/src/brain/intelligence.ts +1230 -0
- package/src/brain/types.ts +214 -0
- package/src/cognee/client.ts +352 -0
- package/src/cognee/types.ts +62 -0
- package/src/control/identity-manager.ts +354 -0
- package/src/control/intent-router.ts +326 -0
- package/src/control/types.ts +102 -0
- package/src/curator/curator.ts +265 -15
- package/src/governance/governance.ts +698 -0
- package/src/governance/index.ts +18 -0
- package/src/governance/types.ts +111 -0
- package/src/index.ts +128 -3
- package/src/llm/llm-client.ts +18 -24
- package/src/logging/logger.ts +154 -0
- package/src/logging/types.ts +21 -0
- package/src/loop/loop-manager.ts +130 -0
- package/src/loop/types.ts +44 -0
- package/src/planning/gap-analysis.ts +506 -0
- package/src/planning/gap-types.ts +58 -0
- package/src/planning/planner.ts +478 -2
- package/src/project/project-registry.ts +358 -0
- package/src/project/types.ts +31 -0
- package/src/runtime/admin-extra-ops.ts +307 -0
- package/src/runtime/admin-ops.ts +329 -0
- package/src/runtime/capture-ops.ts +385 -0
- package/src/runtime/core-ops.ts +747 -26
- package/src/runtime/curator-extra-ops.ts +71 -0
- package/src/runtime/domain-ops.ts +65 -13
- package/src/runtime/grading-ops.ts +121 -0
- package/src/runtime/loop-ops.ts +194 -0
- package/src/runtime/memory-cross-project-ops.ts +192 -0
- package/src/runtime/memory-extra-ops.ts +186 -0
- package/src/runtime/orchestrate-ops.ts +272 -0
- package/src/runtime/planning-extra-ops.ts +327 -0
- package/src/runtime/project-ops.ts +196 -0
- package/src/runtime/runtime.ts +54 -1
- package/src/runtime/types.ts +23 -0
- package/src/runtime/vault-extra-ops.ts +225 -0
- package/src/telemetry/telemetry.ts +118 -0
- package/src/vault/vault.ts +412 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export interface CogneeConfig {
|
|
2
|
+
/** Base URL of the Cognee API (default: http://localhost:8000) */
|
|
3
|
+
baseUrl: string;
|
|
4
|
+
/** Dataset name for this agent's vault entries */
|
|
5
|
+
dataset: string;
|
|
6
|
+
/** Bearer token for Cognee API authentication (auto-acquired if not set) */
|
|
7
|
+
apiToken?: string;
|
|
8
|
+
/** Service account email for auto-login (default: soleri-agent@cognee.dev) */
|
|
9
|
+
serviceEmail?: string;
|
|
10
|
+
/** Service account password for auto-login */
|
|
11
|
+
servicePassword?: string;
|
|
12
|
+
/** Default request timeout in milliseconds (default: 30000) */
|
|
13
|
+
timeoutMs: number;
|
|
14
|
+
/** Search timeout in milliseconds — Ollama cold start can take 90s (default: 120000) */
|
|
15
|
+
searchTimeoutMs: number;
|
|
16
|
+
/** Health check timeout in milliseconds (default: 5000) */
|
|
17
|
+
healthTimeoutMs: number;
|
|
18
|
+
/** Health check cache TTL in milliseconds (default: 60000) */
|
|
19
|
+
healthCacheTtlMs: number;
|
|
20
|
+
/** Cognify debounce window in milliseconds (default: 30000) */
|
|
21
|
+
cognifyDebounceMs: number;
|
|
22
|
+
}
|
|
23
|
+
export interface CogneeSearchResult {
|
|
24
|
+
/** Vault entry ID (cross-reference key) */
|
|
25
|
+
id: string;
|
|
26
|
+
/** Relevance score (0–1). Position-based when Cognee omits scores. */
|
|
27
|
+
score: number;
|
|
28
|
+
/** Text content from Cognee */
|
|
29
|
+
text: string;
|
|
30
|
+
/** Cognee search type that produced this result */
|
|
31
|
+
searchType: CogneeSearchType;
|
|
32
|
+
}
|
|
33
|
+
export type CogneeSearchType = 'SUMMARIES' | 'CHUNKS' | 'RAG_COMPLETION' | 'TRIPLET_COMPLETION' | 'GRAPH_COMPLETION' | 'GRAPH_SUMMARY_COMPLETION' | 'NATURAL_LANGUAGE' | 'GRAPH_COMPLETION_COT' | 'FEELING_LUCKY' | 'CHUNKS_LEXICAL';
|
|
34
|
+
export interface CogneeStatus {
|
|
35
|
+
available: boolean;
|
|
36
|
+
url: string;
|
|
37
|
+
latencyMs: number;
|
|
38
|
+
error?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface CogneeAddResult {
|
|
41
|
+
added: number;
|
|
42
|
+
}
|
|
43
|
+
export interface CogneeCognifyResult {
|
|
44
|
+
status: string;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cognee/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,wFAAwF;IACxF,eAAe,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,gBAAgB,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,gBAAgB,GAChB,oBAAoB,GACpB,kBAAkB,GAClB,0BAA0B,GAC1B,kBAAkB,GAClB,sBAAsB,GACtB,eAAe,GACf,gBAAgB,CAAC;AAErB,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cognee/types.ts"],"names":[],"mappings":"AAAA,sEAAsE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IdentityManager — Agent identity CRUD with versioning and rollback.
|
|
3
|
+
*
|
|
4
|
+
* Follows the Curator/BrainIntelligence pattern: separate class, own SQLite
|
|
5
|
+
* tables, takes Vault as constructor dep. All methods synchronous (better-sqlite3).
|
|
6
|
+
*/
|
|
7
|
+
import type { Vault } from '../vault/vault.js';
|
|
8
|
+
import type { AgentIdentity, IdentityVersion, IdentityUpdateInput, Guideline, GuidelineInput, GuidelineCategory } from './types.js';
|
|
9
|
+
export declare class IdentityManager {
|
|
10
|
+
private vault;
|
|
11
|
+
constructor(vault: Vault);
|
|
12
|
+
private initializeTables;
|
|
13
|
+
getIdentity(agentId: string): AgentIdentity | null;
|
|
14
|
+
setIdentity(agentId: string, input: IdentityUpdateInput): AgentIdentity;
|
|
15
|
+
addGuideline(agentId: string, input: GuidelineInput): Guideline;
|
|
16
|
+
removeGuideline(guidelineId: string): boolean;
|
|
17
|
+
getGuidelines(agentId: string, category?: GuidelineCategory): Guideline[];
|
|
18
|
+
getVersionHistory(agentId: string, limit?: number): IdentityVersion[];
|
|
19
|
+
rollback(agentId: string, version: number): AgentIdentity;
|
|
20
|
+
renderIdentityMarkdown(agentId: string): string;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=identity-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-manager.d.ts","sourceRoot":"","sources":["../../src/control/identity-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,cAAc,EACd,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAIpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAQ;gBAET,KAAK,EAAE,KAAK;IAOxB,OAAO,CAAC,gBAAgB;IA2CxB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAWlD,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,aAAa;IAuDvE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,SAAS;IAc/D,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAM7C,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,EAAE;IAoBzE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,eAAe,EAAE;IAUjE,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa;IA6CzD,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAmChD"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IdentityManager — Agent identity CRUD with versioning and rollback.
|
|
3
|
+
*
|
|
4
|
+
* Follows the Curator/BrainIntelligence pattern: separate class, own SQLite
|
|
5
|
+
* tables, takes Vault as constructor dep. All methods synchronous (better-sqlite3).
|
|
6
|
+
*/
|
|
7
|
+
import { randomUUID } from 'node:crypto';
|
|
8
|
+
// ─── Class ──────────────────────────────────────────────────────────
|
|
9
|
+
export class IdentityManager {
|
|
10
|
+
vault;
|
|
11
|
+
constructor(vault) {
|
|
12
|
+
this.vault = vault;
|
|
13
|
+
this.initializeTables();
|
|
14
|
+
}
|
|
15
|
+
// ─── Table Initialization ───────────────────────────────────────────
|
|
16
|
+
initializeTables() {
|
|
17
|
+
const db = this.vault.getDb();
|
|
18
|
+
db.exec(`
|
|
19
|
+
CREATE TABLE IF NOT EXISTS agent_identity (
|
|
20
|
+
agent_id TEXT PRIMARY KEY,
|
|
21
|
+
name TEXT NOT NULL,
|
|
22
|
+
role TEXT NOT NULL DEFAULT '',
|
|
23
|
+
description TEXT NOT NULL DEFAULT '',
|
|
24
|
+
personality TEXT NOT NULL DEFAULT '[]',
|
|
25
|
+
version INTEGER NOT NULL DEFAULT 1,
|
|
26
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE TABLE IF NOT EXISTS agent_identity_versions (
|
|
30
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
31
|
+
agent_id TEXT NOT NULL,
|
|
32
|
+
version INTEGER NOT NULL,
|
|
33
|
+
snapshot TEXT NOT NULL,
|
|
34
|
+
changed_by TEXT NOT NULL DEFAULT 'system',
|
|
35
|
+
change_reason TEXT NOT NULL DEFAULT '',
|
|
36
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
37
|
+
UNIQUE(agent_id, version)
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE TABLE IF NOT EXISTS agent_guidelines (
|
|
41
|
+
id TEXT PRIMARY KEY,
|
|
42
|
+
agent_id TEXT NOT NULL,
|
|
43
|
+
category TEXT NOT NULL CHECK(category IN ('behavior', 'preference', 'restriction', 'style')),
|
|
44
|
+
text TEXT NOT NULL,
|
|
45
|
+
priority INTEGER NOT NULL DEFAULT 0,
|
|
46
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
47
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_guidelines_agent
|
|
51
|
+
ON agent_guidelines(agent_id);
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_identity_versions_agent
|
|
53
|
+
ON agent_identity_versions(agent_id, version);
|
|
54
|
+
`);
|
|
55
|
+
}
|
|
56
|
+
// ─── Identity CRUD ──────────────────────────────────────────────────
|
|
57
|
+
getIdentity(agentId) {
|
|
58
|
+
const db = this.vault.getDb();
|
|
59
|
+
const row = db.prepare('SELECT * FROM agent_identity WHERE agent_id = ?').get(agentId);
|
|
60
|
+
if (!row)
|
|
61
|
+
return null;
|
|
62
|
+
const guidelines = this.getGuidelines(agentId);
|
|
63
|
+
return rowToIdentity(row, guidelines);
|
|
64
|
+
}
|
|
65
|
+
setIdentity(agentId, input) {
|
|
66
|
+
const db = this.vault.getDb();
|
|
67
|
+
db.transaction(() => {
|
|
68
|
+
const existing = db.prepare('SELECT * FROM agent_identity WHERE agent_id = ?').get(agentId);
|
|
69
|
+
if (existing) {
|
|
70
|
+
// Snapshot current state before updating
|
|
71
|
+
const snapshot = JSON.stringify(rowToIdentitySnapshot(existing));
|
|
72
|
+
db.prepare(`INSERT INTO agent_identity_versions (agent_id, version, snapshot, changed_by, change_reason)
|
|
73
|
+
VALUES (?, ?, ?, ?, ?)`).run(agentId, existing.version, snapshot, input.changedBy ?? 'system', input.changeReason ?? '');
|
|
74
|
+
const newVersion = existing.version + 1;
|
|
75
|
+
const name = input.name ?? existing.name;
|
|
76
|
+
const role = input.role ?? existing.role;
|
|
77
|
+
const description = input.description ?? existing.description;
|
|
78
|
+
const personality = input.personality
|
|
79
|
+
? JSON.stringify(input.personality)
|
|
80
|
+
: existing.personality;
|
|
81
|
+
db.prepare(`UPDATE agent_identity
|
|
82
|
+
SET name = ?, role = ?, description = ?, personality = ?,
|
|
83
|
+
version = ?, updated_at = datetime('now')
|
|
84
|
+
WHERE agent_id = ?`).run(name, role, description, personality, newVersion, agentId);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
// First identity creation — version 1
|
|
88
|
+
const name = input.name ?? agentId;
|
|
89
|
+
const role = input.role ?? '';
|
|
90
|
+
const description = input.description ?? '';
|
|
91
|
+
const personality = JSON.stringify(input.personality ?? []);
|
|
92
|
+
db.prepare(`INSERT INTO agent_identity (agent_id, name, role, description, personality, version)
|
|
93
|
+
VALUES (?, ?, ?, ?, ?, 1)`).run(agentId, name, role, description, personality);
|
|
94
|
+
}
|
|
95
|
+
})();
|
|
96
|
+
return this.getIdentity(agentId);
|
|
97
|
+
}
|
|
98
|
+
// ─── Guidelines ─────────────────────────────────────────────────────
|
|
99
|
+
addGuideline(agentId, input) {
|
|
100
|
+
const db = this.vault.getDb();
|
|
101
|
+
const id = randomUUID();
|
|
102
|
+
const priority = input.priority ?? 0;
|
|
103
|
+
db.prepare(`INSERT INTO agent_guidelines (id, agent_id, category, text, priority)
|
|
104
|
+
VALUES (?, ?, ?, ?, ?)`).run(id, agentId, input.category, input.text, priority);
|
|
105
|
+
const row = db.prepare('SELECT * FROM agent_guidelines WHERE id = ?').get(id);
|
|
106
|
+
return rowToGuideline(row);
|
|
107
|
+
}
|
|
108
|
+
removeGuideline(guidelineId) {
|
|
109
|
+
const db = this.vault.getDb();
|
|
110
|
+
const result = db.prepare('DELETE FROM agent_guidelines WHERE id = ?').run(guidelineId);
|
|
111
|
+
return result.changes > 0;
|
|
112
|
+
}
|
|
113
|
+
getGuidelines(agentId, category) {
|
|
114
|
+
const db = this.vault.getDb();
|
|
115
|
+
if (category) {
|
|
116
|
+
const rows = db
|
|
117
|
+
.prepare('SELECT * FROM agent_guidelines WHERE agent_id = ? AND category = ? ORDER BY priority DESC, created_at ASC')
|
|
118
|
+
.all(agentId, category);
|
|
119
|
+
return rows.map(rowToGuideline);
|
|
120
|
+
}
|
|
121
|
+
const rows = db
|
|
122
|
+
.prepare('SELECT * FROM agent_guidelines WHERE agent_id = ? ORDER BY priority DESC, created_at ASC')
|
|
123
|
+
.all(agentId);
|
|
124
|
+
return rows.map(rowToGuideline);
|
|
125
|
+
}
|
|
126
|
+
// ─── Versioning ─────────────────────────────────────────────────────
|
|
127
|
+
getVersionHistory(agentId, limit = 20) {
|
|
128
|
+
const db = this.vault.getDb();
|
|
129
|
+
const rows = db
|
|
130
|
+
.prepare('SELECT * FROM agent_identity_versions WHERE agent_id = ? ORDER BY version DESC LIMIT ?')
|
|
131
|
+
.all(agentId, limit);
|
|
132
|
+
return rows.map(rowToVersion);
|
|
133
|
+
}
|
|
134
|
+
rollback(agentId, version) {
|
|
135
|
+
const db = this.vault.getDb();
|
|
136
|
+
db.transaction(() => {
|
|
137
|
+
const versionRow = db
|
|
138
|
+
.prepare('SELECT * FROM agent_identity_versions WHERE agent_id = ? AND version = ?')
|
|
139
|
+
.get(agentId, version);
|
|
140
|
+
if (!versionRow) {
|
|
141
|
+
throw new Error(`Version ${version} not found for agent ${agentId}`);
|
|
142
|
+
}
|
|
143
|
+
const snapshot = JSON.parse(versionRow.snapshot);
|
|
144
|
+
const current = db
|
|
145
|
+
.prepare('SELECT * FROM agent_identity WHERE agent_id = ?')
|
|
146
|
+
.get(agentId);
|
|
147
|
+
// Snapshot current state before rollback
|
|
148
|
+
const currentSnapshot = JSON.stringify(rowToIdentitySnapshot(current));
|
|
149
|
+
db.prepare(`INSERT INTO agent_identity_versions (agent_id, version, snapshot, changed_by, change_reason)
|
|
150
|
+
VALUES (?, ?, ?, ?, ?)`).run(agentId, current.version, currentSnapshot, 'system', `Before rollback to v${version}`);
|
|
151
|
+
const newVersion = current.version + 1;
|
|
152
|
+
db.prepare(`UPDATE agent_identity
|
|
153
|
+
SET name = ?, role = ?, description = ?, personality = ?,
|
|
154
|
+
version = ?, updated_at = datetime('now')
|
|
155
|
+
WHERE agent_id = ?`).run(snapshot.name, snapshot.role, snapshot.description, JSON.stringify(snapshot.personality), newVersion, agentId);
|
|
156
|
+
})();
|
|
157
|
+
return this.getIdentity(agentId);
|
|
158
|
+
}
|
|
159
|
+
// ─── Rendering ──────────────────────────────────────────────────────
|
|
160
|
+
renderIdentityMarkdown(agentId) {
|
|
161
|
+
const identity = this.getIdentity(agentId);
|
|
162
|
+
if (!identity)
|
|
163
|
+
return `# Unknown Agent\n\nNo identity found for ${agentId}.`;
|
|
164
|
+
const lines = [
|
|
165
|
+
`# ${identity.name}`,
|
|
166
|
+
'',
|
|
167
|
+
`**Role:** ${identity.role}`,
|
|
168
|
+
'',
|
|
169
|
+
identity.description,
|
|
170
|
+
'',
|
|
171
|
+
];
|
|
172
|
+
if (identity.personality.length > 0) {
|
|
173
|
+
lines.push('## Personality', '');
|
|
174
|
+
for (const trait of identity.personality) {
|
|
175
|
+
lines.push(`- ${trait}`);
|
|
176
|
+
}
|
|
177
|
+
lines.push('');
|
|
178
|
+
}
|
|
179
|
+
const categories = ['behavior', 'preference', 'restriction', 'style'];
|
|
180
|
+
for (const cat of categories) {
|
|
181
|
+
const guidelines = identity.guidelines.filter((g) => g.category === cat);
|
|
182
|
+
if (guidelines.length > 0) {
|
|
183
|
+
lines.push(`## ${cat.charAt(0).toUpperCase() + cat.slice(1)}s`, '');
|
|
184
|
+
for (const g of guidelines) {
|
|
185
|
+
lines.push(`- ${g.text}`);
|
|
186
|
+
}
|
|
187
|
+
lines.push('');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return lines.join('\n');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// ─── Row Converters ─────────────────────────────────────────────────
|
|
194
|
+
function rowToIdentity(row, guidelines) {
|
|
195
|
+
return {
|
|
196
|
+
agentId: row.agent_id,
|
|
197
|
+
name: row.name,
|
|
198
|
+
role: row.role,
|
|
199
|
+
description: row.description,
|
|
200
|
+
personality: JSON.parse(row.personality),
|
|
201
|
+
guidelines,
|
|
202
|
+
version: row.version,
|
|
203
|
+
updatedAt: row.updated_at,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function rowToIdentitySnapshot(row) {
|
|
207
|
+
return {
|
|
208
|
+
name: row.name,
|
|
209
|
+
role: row.role,
|
|
210
|
+
description: row.description,
|
|
211
|
+
personality: JSON.parse(row.personality),
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
function rowToGuideline(row) {
|
|
215
|
+
return {
|
|
216
|
+
id: row.id,
|
|
217
|
+
category: row.category,
|
|
218
|
+
text: row.text,
|
|
219
|
+
priority: row.priority,
|
|
220
|
+
createdAt: row.created_at,
|
|
221
|
+
updatedAt: row.updated_at,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
function rowToVersion(row) {
|
|
225
|
+
return {
|
|
226
|
+
version: row.version,
|
|
227
|
+
snapshot: row.snapshot,
|
|
228
|
+
changedBy: row.changed_by,
|
|
229
|
+
changeReason: row.change_reason,
|
|
230
|
+
createdAt: row.created_at,
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=identity-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity-manager.js","sourceRoot":"","sources":["../../src/control/identity-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IntentRouter — Keyword-based intent classification and operational mode management.
|
|
3
|
+
*
|
|
4
|
+
* Follows the Curator/BrainIntelligence pattern: separate class, own SQLite
|
|
5
|
+
* tables, takes Vault as constructor dep. All methods synchronous (better-sqlite3).
|
|
6
|
+
*
|
|
7
|
+
* 10 default modes seeded on first use via INSERT OR IGNORE.
|
|
8
|
+
* Agents can register custom modes at runtime.
|
|
9
|
+
*/
|
|
10
|
+
import type { Vault } from '../vault/vault.js';
|
|
11
|
+
import type { OperationalMode, IntentClassification, ModeConfig, MorphResult } from './types.js';
|
|
12
|
+
export declare class IntentRouter {
|
|
13
|
+
private vault;
|
|
14
|
+
private currentMode;
|
|
15
|
+
constructor(vault: Vault);
|
|
16
|
+
private initializeTables;
|
|
17
|
+
private seedDefaultModes;
|
|
18
|
+
routeIntent(prompt: string): IntentClassification;
|
|
19
|
+
private logRouting;
|
|
20
|
+
morph(mode: OperationalMode): MorphResult;
|
|
21
|
+
getCurrentMode(): OperationalMode;
|
|
22
|
+
getBehaviorRules(mode?: OperationalMode): string[];
|
|
23
|
+
getModes(): ModeConfig[];
|
|
24
|
+
registerMode(config: ModeConfig): void;
|
|
25
|
+
updateModeRules(mode: OperationalMode, rules: string[]): void;
|
|
26
|
+
getRoutingStats(): {
|
|
27
|
+
totalRouted: number;
|
|
28
|
+
byIntent: Record<string, number>;
|
|
29
|
+
byMode: Record<string, number>;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=intent-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-router.d.ts","sourceRoot":"","sources":["../../src/control/intent-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,EAEV,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,WAAW,EACZ,MAAM,YAAY,CAAC;AA+EpB,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,WAAW,CAAmC;gBAE1C,KAAK,EAAE,KAAK;IAQxB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,gBAAgB;IAmBxB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB;IA6CjD,OAAO,CAAC,UAAU;IAgBlB,KAAK,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW;IAiBzC,cAAc,IAAI,eAAe;IAIjC,gBAAgB,CAAC,IAAI,CAAC,EAAE,eAAe,GAAG,MAAM,EAAE;IAWlD,QAAQ,IAAI,UAAU,EAAE;IAMxB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IActC,eAAe,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAY7D,eAAe,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAChC;CAwBF"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IntentRouter — Keyword-based intent classification and operational mode management.
|
|
3
|
+
*
|
|
4
|
+
* Follows the Curator/BrainIntelligence pattern: separate class, own SQLite
|
|
5
|
+
* tables, takes Vault as constructor dep. All methods synchronous (better-sqlite3).
|
|
6
|
+
*
|
|
7
|
+
* 10 default modes seeded on first use via INSERT OR IGNORE.
|
|
8
|
+
* Agents can register custom modes at runtime.
|
|
9
|
+
*/
|
|
10
|
+
// ─── Default Mode Definitions ───────────────────────────────────────
|
|
11
|
+
const DEFAULT_MODES = [
|
|
12
|
+
{
|
|
13
|
+
mode: 'BUILD-MODE',
|
|
14
|
+
intent: 'build',
|
|
15
|
+
description: 'Creating new components, features, or scaffolding',
|
|
16
|
+
behaviorRules: ['Focus on clean architecture', 'Follow existing patterns', 'Write tests'],
|
|
17
|
+
keywords: ['build', 'create', 'add', 'implement', 'scaffold', 'generate', 'new', 'feature'],
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
mode: 'FIX-MODE',
|
|
21
|
+
intent: 'fix',
|
|
22
|
+
description: 'Fixing bugs, errors, and broken behavior',
|
|
23
|
+
behaviorRules: ['Identify root cause first', 'Verify fix with tests', 'Check for regressions'],
|
|
24
|
+
keywords: ['fix', 'bug', 'broken', 'error', 'crash', 'issue', 'debug', 'repair', 'janky'],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
mode: 'VALIDATE-MODE',
|
|
28
|
+
intent: 'validate',
|
|
29
|
+
description: 'Validating, checking, verifying, and testing code',
|
|
30
|
+
behaviorRules: ['Be thorough', 'Check edge cases', 'Report all findings'],
|
|
31
|
+
keywords: ['validate', 'check', 'verify', 'test', 'lint', 'audit'],
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
mode: 'DESIGN-MODE',
|
|
35
|
+
intent: 'design',
|
|
36
|
+
description: 'Visual design, styling, layout, and color decisions',
|
|
37
|
+
behaviorRules: ['Use semantic tokens', 'Check contrast ratios', 'Follow design system'],
|
|
38
|
+
keywords: ['design', 'style', 'layout', 'color', 'typography', 'spacing', 'visual', 'ui'],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
mode: 'IMPROVE-MODE',
|
|
42
|
+
intent: 'improve',
|
|
43
|
+
description: 'Refactoring, optimization, and code enhancement',
|
|
44
|
+
behaviorRules: ['Measure before optimizing', 'Keep changes minimal', 'Preserve behavior'],
|
|
45
|
+
keywords: ['improve', 'refactor', 'optimize', 'clean', 'enhance', 'simplify', 'faster'],
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
mode: 'DELIVER-MODE',
|
|
49
|
+
intent: 'deliver',
|
|
50
|
+
description: 'Deploying, shipping, releasing, and publishing',
|
|
51
|
+
behaviorRules: ['Run all checks first', 'Update changelog', 'Tag releases properly'],
|
|
52
|
+
keywords: ['deploy', 'ship', 'release', 'publish', 'merge', 'pr', 'push', 'package'],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
mode: 'EXPLORE-MODE',
|
|
56
|
+
intent: 'explore',
|
|
57
|
+
description: 'Exploring, searching, and understanding the codebase',
|
|
58
|
+
behaviorRules: ['Be thorough in search', 'Provide context', 'Map dependencies'],
|
|
59
|
+
keywords: ['explore', 'search', 'find', 'show', 'list', 'explain'],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
mode: 'PLAN-MODE',
|
|
63
|
+
intent: 'plan',
|
|
64
|
+
description: 'Planning, architecting, and strategy development',
|
|
65
|
+
behaviorRules: ['Consider trade-offs', 'Break into steps', 'Identify risks'],
|
|
66
|
+
keywords: ['plan', 'architect', 'strategy', 'approach', 'roadmap'],
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
mode: 'REVIEW-MODE',
|
|
70
|
+
intent: 'review',
|
|
71
|
+
description: 'Code review, feedback, and quality assessment',
|
|
72
|
+
behaviorRules: ['Be constructive', 'Focus on high-impact issues', 'Suggest alternatives'],
|
|
73
|
+
keywords: ['review', 'feedback', 'critique', 'assess', 'evaluate', 'quality'],
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
mode: 'GENERAL-MODE',
|
|
77
|
+
intent: 'general',
|
|
78
|
+
description: 'General-purpose fallback mode',
|
|
79
|
+
behaviorRules: ['Be helpful', 'Ask clarifying questions when needed'],
|
|
80
|
+
keywords: [],
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
// ─── Class ──────────────────────────────────────────────────────────
|
|
84
|
+
export class IntentRouter {
|
|
85
|
+
vault;
|
|
86
|
+
currentMode = 'GENERAL-MODE';
|
|
87
|
+
constructor(vault) {
|
|
88
|
+
this.vault = vault;
|
|
89
|
+
this.initializeTables();
|
|
90
|
+
this.seedDefaultModes();
|
|
91
|
+
}
|
|
92
|
+
// ─── Table Initialization ───────────────────────────────────────────
|
|
93
|
+
initializeTables() {
|
|
94
|
+
const db = this.vault.getDb();
|
|
95
|
+
db.exec(`
|
|
96
|
+
CREATE TABLE IF NOT EXISTS agent_modes (
|
|
97
|
+
mode TEXT PRIMARY KEY,
|
|
98
|
+
intent TEXT NOT NULL,
|
|
99
|
+
description TEXT NOT NULL DEFAULT '',
|
|
100
|
+
behavior_rules TEXT NOT NULL DEFAULT '[]',
|
|
101
|
+
keywords TEXT NOT NULL DEFAULT '[]'
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
CREATE TABLE IF NOT EXISTS agent_routing_log (
|
|
105
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
106
|
+
prompt TEXT NOT NULL,
|
|
107
|
+
intent TEXT NOT NULL,
|
|
108
|
+
mode TEXT NOT NULL,
|
|
109
|
+
confidence REAL NOT NULL,
|
|
110
|
+
matched_keywords TEXT NOT NULL DEFAULT '[]',
|
|
111
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
112
|
+
);
|
|
113
|
+
`);
|
|
114
|
+
}
|
|
115
|
+
seedDefaultModes() {
|
|
116
|
+
const db = this.vault.getDb();
|
|
117
|
+
const insert = db.prepare(`INSERT OR IGNORE INTO agent_modes (mode, intent, description, behavior_rules, keywords)
|
|
118
|
+
VALUES (?, ?, ?, ?, ?)`);
|
|
119
|
+
for (const m of DEFAULT_MODES) {
|
|
120
|
+
insert.run(m.mode, m.intent, m.description, JSON.stringify(m.behaviorRules), JSON.stringify(m.keywords));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// ─── Intent Classification ──────────────────────────────────────────
|
|
124
|
+
routeIntent(prompt) {
|
|
125
|
+
const tokens = new Set(prompt.toLowerCase().split(/\s+/).filter(Boolean));
|
|
126
|
+
const modes = this.getModes();
|
|
127
|
+
let bestMode = null;
|
|
128
|
+
let bestMatchCount = 0;
|
|
129
|
+
let bestMatchedKeywords = [];
|
|
130
|
+
for (const mode of modes) {
|
|
131
|
+
if (mode.keywords.length === 0)
|
|
132
|
+
continue;
|
|
133
|
+
const matched = mode.keywords.filter((kw) => tokens.has(kw));
|
|
134
|
+
if (matched.length > bestMatchCount) {
|
|
135
|
+
bestMatchCount = matched.length;
|
|
136
|
+
bestMode = mode;
|
|
137
|
+
bestMatchedKeywords = matched;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (!bestMode || bestMatchCount === 0) {
|
|
141
|
+
const classification = {
|
|
142
|
+
intent: 'general',
|
|
143
|
+
mode: 'GENERAL-MODE',
|
|
144
|
+
confidence: 0,
|
|
145
|
+
method: 'keyword',
|
|
146
|
+
matchedKeywords: [],
|
|
147
|
+
};
|
|
148
|
+
this.logRouting(prompt, classification);
|
|
149
|
+
this.currentMode = 'GENERAL-MODE';
|
|
150
|
+
return classification;
|
|
151
|
+
}
|
|
152
|
+
const confidence = Math.min(bestMatchCount / bestMode.keywords.length, 1.0);
|
|
153
|
+
const classification = {
|
|
154
|
+
intent: bestMode.intent,
|
|
155
|
+
mode: bestMode.mode,
|
|
156
|
+
confidence,
|
|
157
|
+
method: 'keyword',
|
|
158
|
+
matchedKeywords: bestMatchedKeywords,
|
|
159
|
+
};
|
|
160
|
+
this.logRouting(prompt, classification);
|
|
161
|
+
this.currentMode = bestMode.mode;
|
|
162
|
+
return classification;
|
|
163
|
+
}
|
|
164
|
+
logRouting(prompt, classification) {
|
|
165
|
+
const db = this.vault.getDb();
|
|
166
|
+
db.prepare(`INSERT INTO agent_routing_log (prompt, intent, mode, confidence, matched_keywords)
|
|
167
|
+
VALUES (?, ?, ?, ?, ?)`).run(prompt, classification.intent, classification.mode, classification.confidence, JSON.stringify(classification.matchedKeywords));
|
|
168
|
+
}
|
|
169
|
+
// ─── Mode Management ───────────────────────────────────────────────
|
|
170
|
+
morph(mode) {
|
|
171
|
+
const db = this.vault.getDb();
|
|
172
|
+
const row = db.prepare('SELECT * FROM agent_modes WHERE mode = ?').get(mode);
|
|
173
|
+
if (!row) {
|
|
174
|
+
throw new Error(`Unknown mode: ${mode}`);
|
|
175
|
+
}
|
|
176
|
+
const previousMode = this.currentMode;
|
|
177
|
+
this.currentMode = mode;
|
|
178
|
+
const behaviorRules = JSON.parse(row.behavior_rules);
|
|
179
|
+
return { previousMode, currentMode: mode, behaviorRules };
|
|
180
|
+
}
|
|
181
|
+
getCurrentMode() {
|
|
182
|
+
return this.currentMode;
|
|
183
|
+
}
|
|
184
|
+
getBehaviorRules(mode) {
|
|
185
|
+
const db = this.vault.getDb();
|
|
186
|
+
const target = mode ?? this.currentMode;
|
|
187
|
+
const row = db.prepare('SELECT behavior_rules FROM agent_modes WHERE mode = ?').get(target);
|
|
188
|
+
if (!row)
|
|
189
|
+
return [];
|
|
190
|
+
return JSON.parse(row.behavior_rules);
|
|
191
|
+
}
|
|
192
|
+
getModes() {
|
|
193
|
+
const db = this.vault.getDb();
|
|
194
|
+
const rows = db.prepare('SELECT * FROM agent_modes ORDER BY mode').all();
|
|
195
|
+
return rows.map(rowToModeConfig);
|
|
196
|
+
}
|
|
197
|
+
registerMode(config) {
|
|
198
|
+
const db = this.vault.getDb();
|
|
199
|
+
db.prepare(`INSERT OR REPLACE INTO agent_modes (mode, intent, description, behavior_rules, keywords)
|
|
200
|
+
VALUES (?, ?, ?, ?, ?)`).run(config.mode, config.intent, config.description, JSON.stringify(config.behaviorRules), JSON.stringify(config.keywords));
|
|
201
|
+
}
|
|
202
|
+
updateModeRules(mode, rules) {
|
|
203
|
+
const db = this.vault.getDb();
|
|
204
|
+
const result = db
|
|
205
|
+
.prepare('UPDATE agent_modes SET behavior_rules = ? WHERE mode = ?')
|
|
206
|
+
.run(JSON.stringify(rules), mode);
|
|
207
|
+
if (result.changes === 0) {
|
|
208
|
+
throw new Error(`Unknown mode: ${mode}`);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// ─── Analytics ──────────────────────────────────────────────────────
|
|
212
|
+
getRoutingStats() {
|
|
213
|
+
const db = this.vault.getDb();
|
|
214
|
+
const total = db.prepare('SELECT COUNT(*) as count FROM agent_routing_log').get().count;
|
|
215
|
+
const intentRows = db
|
|
216
|
+
.prepare('SELECT intent, COUNT(*) as count FROM agent_routing_log GROUP BY intent')
|
|
217
|
+
.all();
|
|
218
|
+
const byIntent = {};
|
|
219
|
+
for (const row of intentRows) {
|
|
220
|
+
byIntent[row.intent] = row.count;
|
|
221
|
+
}
|
|
222
|
+
const modeRows = db
|
|
223
|
+
.prepare('SELECT mode, COUNT(*) as count FROM agent_routing_log GROUP BY mode')
|
|
224
|
+
.all();
|
|
225
|
+
const byMode = {};
|
|
226
|
+
for (const row of modeRows) {
|
|
227
|
+
byMode[row.mode] = row.count;
|
|
228
|
+
}
|
|
229
|
+
return { totalRouted: total, byIntent, byMode };
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// ─── Row Converters ─────────────────────────────────────────────────
|
|
233
|
+
function rowToModeConfig(row) {
|
|
234
|
+
return {
|
|
235
|
+
mode: row.mode,
|
|
236
|
+
intent: row.intent,
|
|
237
|
+
description: row.description,
|
|
238
|
+
behaviorRules: JSON.parse(row.behavior_rules),
|
|
239
|
+
keywords: JSON.parse(row.keywords),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
//# sourceMappingURL=intent-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-router.js","sourceRoot":"","sources":["../../src/control/intent-router.ts"],"names":[],"mappings":"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"}
|