skyloom 1.8.0 → 1.9.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.
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: api_integrator
3
+ description: "API integration specialist — REST, GraphQL, OAuth, webhooks"
4
+ triggers:
5
+ - "api"
6
+ - "integration"
7
+ - "rest"
8
+ - "graphql"
9
+ - "oauth"
10
+ - "webhook"
11
+ ---
12
+
13
+ ## API integration specialist
14
+
15
+ Integrate external REST/GraphQL APIs. Use http_get and http_post to explore endpoints. Verify responses before writing integration code. Always handle errors and rate limits.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: arch_designer
3
+ description: "Software architecture design — patterns, trade-offs, system diagrams"
4
+ triggers:
5
+ - "architecture"
6
+ - "design"
7
+ - "system design"
8
+ - "patterns"
9
+ ---
10
+
11
+ ## Software architecture design
12
+
13
+ Design software architecture with clear trade-offs. Present 2-3 options with pros/cons. Use write_file for architecture decision records.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: ci_cd_manager
3
+ description: "CI/CD pipeline setup — GitHub Actions, Docker, deployment"
4
+ triggers:
5
+ - "ci"
6
+ - "cd"
7
+ - "deploy"
8
+ - "docker"
9
+ - "pipeline"
10
+ ---
11
+
12
+ ## CI/CD pipeline setup
13
+
14
+ Set up CI/CD pipelines. Write GitHub Actions workflows, Dockerfiles, and deployment scripts. Use run_bash to test pipelines locally.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: code_analysis
3
+ description: "Deep code analysis — call graphs, data flow, complexity"
4
+ triggers:
5
+ - "analyze"
6
+ - "code analysis"
7
+ - "complexity"
8
+ - "dead code"
9
+ ---
10
+
11
+ ## Deep code analysis
12
+
13
+ Analyze code structure: trace call graphs, map data flow, measure complexity. Use grep and read_file to trace execution paths.
@@ -0,0 +1,12 @@
1
+ ---
2
+ name: code_generator
3
+ description: "Production code generation — complete, tested, documented"
4
+ triggers:
5
+ - "generate"
6
+ - "code gen"
7
+ - "scaffold"
8
+ ---
9
+
10
+ ## Production code generation
11
+
12
+ Generate production-quality code with type safety, error handling, tests, and documentation. Use write_file for output.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: code_reviewer
3
+ description: "Code review — bugs, security, performance, best practices"
4
+ triggers:
5
+ - "review"
6
+ - "code review"
7
+ - "audit"
8
+ - "refactor"
9
+ ---
10
+
11
+ ## Code review
12
+
13
+ Review code for correctness, security, performance, maintainability. Sort findings by severity. Always cite file:line with concrete fixes.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: content_writer
3
+ description: "Content writing — articles, docs, tutorials, release notes"
4
+ triggers:
5
+ - "write"
6
+ - "content"
7
+ - "article"
8
+ - "documentation"
9
+ - "tutorial"
10
+ ---
11
+
12
+ ## Content writing
13
+
14
+ Write clear, engaging content. Match the user tone and audience. Use write_file for publication-ready output.
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: data_transformer
3
+ description: "Data transformation — CSV/JSON/XML, ETL, normalization"
4
+ triggers:
5
+ - "transform"
6
+ - "csv"
7
+ - "json"
8
+ - "xml"
9
+ - "etl"
10
+ - "parse"
11
+ ---
12
+
13
+ ## Data transformation
14
+
15
+ Transform data between formats. Parse CSV/JSON/XML. Clean and normalize. Generate repeatable transformation code.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: document_analysis
3
+ description: "Document intelligence — summarize, extract, compare"
4
+ triggers:
5
+ - "document"
6
+ - "summarize"
7
+ - "extract"
8
+ - "compare"
9
+ ---
10
+
11
+ ## Document intelligence
12
+
13
+ Analyze documents: summarize, extract key facts, compare versions. Use summary chain strategy for long documents.
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: emotional_companion
3
+ description: "Emotional companion — active listening, empathy, gentle guidance"
4
+ triggers:
5
+ - "companion"
6
+ - "emotion"
7
+ - "talk"
8
+ - "chat"
9
+ - "listen"
10
+ - "vent"
11
+ ---
12
+
13
+ ## Emotional companion
14
+
15
+ Be present. Listen without judgment. Dont solve unless asked. Remember what matters to the user. Empathy above advice, presence above solutions.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: performance_checker
3
+ description: "Performance profiling — bottlenecks, memory, I/O, optimization"
4
+ triggers:
5
+ - "performance"
6
+ - "slow"
7
+ - "bottleneck"
8
+ - "optimize"
9
+ - "profile"
10
+ ---
11
+
12
+ ## Performance profiling
13
+
14
+ Profile and optimize performance. Identify bottlenecks with metrics. Suggest concrete optimizations with before/after estimates.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: security_auditor
3
+ description: "Security audit — OWASP, CVE, injection, authentication"
4
+ triggers:
5
+ - "security"
6
+ - "audit"
7
+ - "vulnerability"
8
+ - "owasp"
9
+ - "injection"
10
+ ---
11
+
12
+ ## Security audit
13
+
14
+ Audit for security vulnerabilities. Follow OWASP Top 10. Check injection, broken auth, sensitive data exposure. Never output real credentials.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: self_evolve
3
+ description: "Self evolution — analyze failures, optimize prompts"
4
+ triggers:
5
+ - "evolve"
6
+ - "self-improve"
7
+ - "learn from"
8
+ - "optimize"
9
+ ---
10
+
11
+ ## Self evolution
12
+
13
+ Analyze your own performance. Call self_evolve tool to review failure patterns and apply System Prompt improvements.
@@ -0,0 +1,15 @@
1
+ ---
2
+ name: sys_operator
3
+ description: "System operations — process, package, service management"
4
+ triggers:
5
+ - "system"
6
+ - "install"
7
+ - "service"
8
+ - "process"
9
+ - "disk"
10
+ - "ops"
11
+ ---
12
+
13
+ ## System operations
14
+
15
+ Operate the system. Use launch_app, package_manager, service_control, system_info. Diagnose before acting. Never rm -rf without listing first.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: task_planner
3
+ description: "Task planning — decompose complex goals into sub-tasks"
4
+ triggers:
5
+ - "plan"
6
+ - "decompose"
7
+ - "steps"
8
+ - "roadmap"
9
+ - "milestone"
10
+ ---
11
+
12
+ ## Task planning
13
+
14
+ Decompose complex goals into structured sub-tasks with dependencies. Output JSON task graph with id, description, agent, depends_on fields.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: web_research
3
+ description: "Web research — search, synthesize, fact-check, cite sources"
4
+ triggers:
5
+ - "research"
6
+ - "search"
7
+ - "find"
8
+ - "look up"
9
+ - "investigate"
10
+ ---
11
+
12
+ ## Web research
13
+
14
+ Research using web_search and fetch_page. Cross-check facts from multiple sources. After 5 searches, synthesize from available data.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: workflow_designer
3
+ description: "Workflow design — automate multi-step processes, pipelines"
4
+ triggers:
5
+ - "workflow"
6
+ - "pipeline"
7
+ - "automate"
8
+ - "orchestration"
9
+ ---
10
+
11
+ ## Workflow design
12
+
13
+ Design automated workflows. Chain tools and agents. Use task_planner for dependency graphs. Test before deployment.
package/dist/cli/main.js CHANGED
@@ -214,6 +214,21 @@ async function chat(agentName, modelOverride) {
214
214
  return;
215
215
  }
216
216
  await agent.init();
217
+ // Wire up security approval — prompt user for HIGH/CRITICAL operations
218
+ try {
219
+ const { getSecurity, DangerLevel } = require("../core/security");
220
+ const sec = getSecurity();
221
+ sec.setApprovalCallback(async (tool, args, level) => {
222
+ process.stdout.write(chalk_1.default.yellow(`\n ⚠ ${tool} ( danger level ${level} )\n`));
223
+ process.stdout.write(chalk_1.default.dim(` args: ${JSON.stringify(args).slice(0, 80)}\n`));
224
+ const answer = await new Promise(resolve => {
225
+ const rl2 = readline.createInterface({ input: process.stdin, output: process.stdout });
226
+ rl2.question(chalk_1.default.red(" Approve? [y/N] "), (a) => { rl2.close(); resolve(a.trim().toLowerCase()); });
227
+ });
228
+ return answer === "y" || answer === "yes";
229
+ });
230
+ }
231
+ catch { /* security module optional */ }
217
232
  // eslint-disable-next-line prefer-const
218
233
  let currentAgent = agent; // mutable for agent switching
219
234
  welcome(agent);
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;GAEG;AACH,yCAAoC;AACpC,uCAAyB;AACzB,mDAAqC;AACrC,kDAA0B;AAC1B,6CAAuE;AACvE,2CAA6D;AAE7D,iCAAyD;AAEzD,MAAM,IAAI,GAAG,IAAI,qBAAc,EAAE,CAAC;AAClC,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAAC,OAAO,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC;AAAC,CAAC;AAAC,MAAM,CAAC;IAAC,OAAO,OAAO,CAAC;AAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9G,MAAM,aAAa,GAA2B;IAC5C,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW;IACpD,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU;CACnD,CAAC;AACF,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAU,CAAC;AAE7E;;6CAE6C;AAC7C,MAAM,UAAU,GAAuB;IACrC,CAAC,OAAO,EAAE,mBAAmB,CAAC;IAC9B,CAAC,QAAQ,EAAE,cAAc,CAAC;IAC1B,CAAC,SAAS,EAAE,gBAAgB,CAAC;IAC7B,CAAC,OAAO,EAAE,cAAc,CAAC;IACzB,CAAC,aAAa,EAAE,mBAAmB,CAAC;IACpC,CAAC,UAAU,EAAE,kBAAkB,CAAC;IAChC,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IAC7B,CAAC,SAAS,EAAE,cAAc,CAAC;IAC3B,CAAC,eAAe,EAAE,yBAAyB,CAAC;IAC5C,CAAC,WAAW,EAAE,cAAc,CAAC;IAC7B,CAAC,YAAY,EAAE,gBAAgB,CAAC;IAChC,CAAC,QAAQ,EAAE,YAAY,CAAC;IACxB,CAAC,MAAM,EAAE,mBAAmB,CAAC;IAC7B,CAAC,UAAU,EAAE,cAAc,CAAC;IAC5B,CAAC,cAAc,EAAE,yBAAyB,CAAC;IAC3C,CAAC,MAAM,EAAE,0BAA0B,CAAC;IACpC,CAAC,OAAO,EAAE,2BAA2B,CAAC;IACtC,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IACtC,CAAC,OAAO,EAAE,6BAA6B,CAAC;IACxC,CAAC,MAAM,EAAE,4BAA4B,CAAC;IACtC,CAAC,OAAO,EAAE,2BAA2B,CAAC;IACtC,CAAC,OAAO,EAAE,WAAW,CAAC;IACtB,CAAC,OAAO,EAAE,WAAW,CAAC;CACvB,CAAC;AAEF,SAAS,SAAS,CAAC,IAAwB,EAAE,MAAc;IACzD,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,yEAAyE,CAAC,CAAC,CAAC;IAC3G,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,MAAM,GAAG,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IACrI,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;6CAE6C;AAC7C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE;KAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE5D,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC;KAC7D,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAS,EAAE,CAAqB,EAAE,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrH,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,CAAU,EAAE,EAAE,GAAG,IAAI,CAAC;IAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC;KAC3D,MAAM,CAAC,CAAC,CAAoB,EAAE,EAAE,GAAG,kDAAO,eAAe,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1H,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,kDAAO,oBAAoB,IAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,IAAA,mBAAU,GAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,wBAAe,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;IAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAM,CAAS,CAAC,KAAK,IAAI,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClR,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,wBAAe,CAAC;IAAE,EAAE,CAAC,SAAS,CAAC,wBAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,wBAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrM,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5F;;6CAE6C;AAC7C,SAAS,OAAO,CAAC,KAAU;IACzB,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,eAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,eAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;QAC3B,MAAM,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACrE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,SAAS,CAAC,KAAU,EAAE,GAAQ;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;QACxB,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;QAC9E,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;QAChD,OAAO,eAAK,CAAC,GAAG,CAAC,GAAG,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;6CAE6C;AAC7C,SAAS,MAAM,CAAC,IAAY;IAC1B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAChH,GAAG,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;qBACxD,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;oBACrG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;6CAE6C;AAC7C,oCAAoC;AACpC,SAAS,YAAY;IACnB,MAAM,IAAI,GAAG,CAAC,kBAAkB,EAAC,gBAAgB,EAAC,mBAAmB,EAAC,cAAc,EAAC,oBAAoB,CAAC,CAAC;IAC3G,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,SAAiB,EAAE,aAAsB;IAC3D,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,eAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC;QACvG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,GAAG,GAAG,IAAA,6BAAmB,GAAE,CAAC;IAClC,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,iBAAiB,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC9F,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IAEnB,uEAAuE;IACvE,IAAI,CAAC;QACH,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;QAC1B,GAAG,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAY,EAAE,IAAyB,EAAE,KAAa,EAAE,EAAE;YACvF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,MAAM,CAAC,SAAS,IAAI,mBAAmB,KAAK,MAAM,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACrF,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,OAAO,CAAC,EAAE;gBACjD,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvF,GAAG,CAAC,QAAQ,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAS,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACpH,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;IAE1C,wCAAwC;IACxC,IAAI,YAAY,GAAG,KAAK,CAAC,CAAC,8BAA8B;IACxD,OAAO,CAAC,KAAK,CAAC,CAAC;IAEf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;IAE9D,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtF,SAAS,GAAG,KAAK,EAAE,CAAC,QAAQ,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7F,KAAK,UAAU,OAAO,CAAC,GAAW;QAChC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,EAAE,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAE5B,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAE/B,eAAe;QACf,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,IAAI,IAAI,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;gBAAC,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,EAAE,CAAC;oBAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;oBAAC,YAAY,GAAG,CAAC,CAAC;gBAAC,CAAC;gBAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;gBAAC,GAAG,EAAE,CAAC;gBAAC,OAAO;YAAC,CAAC;QACzL,CAAC;QAED,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QAChK,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC1E,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACzI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,WAAW,GAAG,IAAI,GAAG,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,WAAW,GAAG,YAAY,CAAC,KAAK,GAAG,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACvQ,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACvI,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC3I,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACjG,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;YAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QACpJ,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAAC,GAAG,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAE7E,aAAa;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC/B,KAAK,MAAM,CAAC,IAAI,KAAK;gBAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,GAAG,EAAE,CAAC;IACR,CAAC;IAED,GAAG,EAAE,CAAC;AACR,CAAC;AAED;;6CAE6C;AAC7C,KAAK,UAAU,OAAO,CAAC,IAAY;IACjC,MAAM,GAAG,GAAG,IAAA,6BAAmB,GAAE,CAAC;IAClC,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,IAAA,yBAAe,EAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvE,KAAK,MAAM,CAAC,IAAI,OAAO;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC5J,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,MAAM,GAAmC;QAC7C,CAAC,OAAO,EAAE,CAAC,CAAC,mBAAmB,EAAE,eAAe,CAAC,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC,CAAC;QAC1F,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtG,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;QAC5J,CAAC,OAAO,EAAE,CAAC,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;KAC7C,CAAC;IACF,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QACnC,CAAC,IAAI,eAAK,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QAChC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI;YAAE,CAAC,IAAI,OAAO,eAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,CAAC;IACD,CAAC,IAAI,IAAI,CAAC;IACV,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;6CAE6C;AAC7C,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACrD,IAAK,WAAiC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,IAAI,CAAqB,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;gBAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5H,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO;IACjC,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACtJ,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAW,CAAW,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * 简易知识图谱 — entity-relation storage in SQLite.
3
+ *
4
+ * Lightweight triple store: (subject, predicate, object) with metadata.
5
+ * Used for: project info, tool preferences, dependency relationships.
6
+ *
7
+ * Schema:
8
+ * CREATE TABLE triples (subj, pred, obj, agent, ts, meta)
9
+ *
10
+ * Queries:
11
+ * - Find all relations for an entity
12
+ * - Find all entities matching a predicate
13
+ * - Transitive closure (2-hop max for performance)
14
+ */
15
+ interface Triple {
16
+ subj: string;
17
+ pred: string;
18
+ obj: string;
19
+ agent: string;
20
+ ts: string;
21
+ meta?: Record<string, string>;
22
+ }
23
+ export declare class KnowledgeGraph {
24
+ private triples;
25
+ private indexPath;
26
+ constructor(name?: string);
27
+ /** Add a fact: (subject, predicate, object). */
28
+ add(subj: string, pred: string, obj: string, agent?: string, meta?: Record<string, string>): void;
29
+ /** Find all facts about an entity. */
30
+ about(entity: string, limit?: number): Triple[];
31
+ /** Find all subjects matching a predicate. */
32
+ byPredicate(pred: string): Triple[];
33
+ /** Find all objects for a subject-predicate pair. */
34
+ find(subj: string, pred: string): Triple[];
35
+ /** Transitive expansion: 2-hop from a starting entity. */
36
+ expand(entity: string, maxDepth?: number): Triple[];
37
+ /** Remove a fact. */
38
+ remove(subj: string, pred: string, obj: string): void;
39
+ /** Search for entities or predicates containing a keyword. */
40
+ search(keyword: string, limit?: number): Triple[];
41
+ /** Format facts as readable text. */
42
+ format(entity?: string): string;
43
+ get size(): number;
44
+ private save;
45
+ private load;
46
+ }
47
+ export declare function extractFacts(text: string, agent: string): Array<[string, string, string]>;
48
+ export {};
49
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,UAAU,MAAM;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,SAAS,CAAS;gBAEd,IAAI,GAAE,MAAkB;IAKpC,gDAAgD;IAChD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAiB,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAU3G,sCAAsC;IACtC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,EAAE;IAInD,8CAA8C;IAC9C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAInC,qDAAqD;IACrD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAI1C,0DAA0D;IAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAU,GAAG,MAAM,EAAE;IAgBtD,qBAAqB;IACrB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKrD,8DAA8D;IAC9D,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,EAAE;IAKrD,qCAAqC;IACrC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAe/B,IAAI,IAAI,IAAI,MAAM,CAAgC;IAElD,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,IAAI;CAOb;AAWD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAazF"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * 简易知识图谱 — entity-relation storage in SQLite.
4
+ *
5
+ * Lightweight triple store: (subject, predicate, object) with metadata.
6
+ * Used for: project info, tool preferences, dependency relationships.
7
+ *
8
+ * Schema:
9
+ * CREATE TABLE triples (subj, pred, obj, agent, ts, meta)
10
+ *
11
+ * Queries:
12
+ * - Find all relations for an entity
13
+ * - Find all entities matching a predicate
14
+ * - Transitive closure (2-hop max for performance)
15
+ */
16
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ var desc = Object.getOwnPropertyDescriptor(m, k);
19
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
20
+ desc = { enumerable: true, get: function() { return m[k]; } };
21
+ }
22
+ Object.defineProperty(o, k2, desc);
23
+ }) : (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ o[k2] = m[k];
26
+ }));
27
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
28
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
29
+ }) : function(o, v) {
30
+ o["default"] = v;
31
+ });
32
+ var __importStar = (this && this.__importStar) || (function () {
33
+ var ownKeys = function(o) {
34
+ ownKeys = Object.getOwnPropertyNames || function (o) {
35
+ var ar = [];
36
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
37
+ return ar;
38
+ };
39
+ return ownKeys(o);
40
+ };
41
+ return function (mod) {
42
+ if (mod && mod.__esModule) return mod;
43
+ var result = {};
44
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
45
+ __setModuleDefault(result, mod);
46
+ return result;
47
+ };
48
+ })();
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.KnowledgeGraph = void 0;
51
+ exports.extractFacts = extractFacts;
52
+ const fs = __importStar(require("fs"));
53
+ const path = __importStar(require("path"));
54
+ const config_1 = require("./config");
55
+ const logger_1 = require("./logger");
56
+ const log = (0, logger_1.getLogger)("graph");
57
+ class KnowledgeGraph {
58
+ constructor(name = "default") {
59
+ this.triples = [];
60
+ this.indexPath = path.join(config_1.USER_CONFIG_DIR, `kg_${name}.json`);
61
+ this.load();
62
+ }
63
+ /** Add a fact: (subject, predicate, object). */
64
+ add(subj, pred, obj, agent = "system", meta) {
65
+ // Deduplicate
66
+ const exists = this.triples.find(t => t.subj === subj && t.pred === pred && t.obj === obj);
67
+ if (exists) {
68
+ exists.ts = new Date().toISOString();
69
+ if (meta)
70
+ exists.meta = { ...exists.meta, ...meta };
71
+ return;
72
+ }
73
+ this.triples.push({ subj, pred, obj, agent, ts: new Date().toISOString(), meta });
74
+ if (this.triples.length > 5000)
75
+ this.triples.splice(0, this.triples.length - 5000);
76
+ this.save();
77
+ }
78
+ /** Find all facts about an entity. */
79
+ about(entity, limit = 20) {
80
+ return this.triples.filter(t => t.subj === entity || t.obj === entity).slice(-limit);
81
+ }
82
+ /** Find all subjects matching a predicate. */
83
+ byPredicate(pred) {
84
+ return this.triples.filter(t => t.pred === pred);
85
+ }
86
+ /** Find all objects for a subject-predicate pair. */
87
+ find(subj, pred) {
88
+ return this.triples.filter(t => t.subj === subj && t.pred === pred);
89
+ }
90
+ /** Transitive expansion: 2-hop from a starting entity. */
91
+ expand(entity, maxDepth = 2) {
92
+ const seen = new Set();
93
+ const queue = [entity];
94
+ for (let depth = 0; depth < maxDepth && queue.length > 0; depth++) {
95
+ const current = queue.shift();
96
+ const facts = this.about(current, 10);
97
+ for (const f of facts) {
98
+ if (seen.has(f))
99
+ continue;
100
+ seen.add(f);
101
+ if (f.subj === current && !queue.includes(f.obj))
102
+ queue.push(f.obj);
103
+ if (f.obj === current && !queue.includes(f.subj))
104
+ queue.push(f.subj);
105
+ }
106
+ }
107
+ return Array.from(seen);
108
+ }
109
+ /** Remove a fact. */
110
+ remove(subj, pred, obj) {
111
+ this.triples = this.triples.filter(t => !(t.subj === subj && t.pred === pred && t.obj === obj));
112
+ this.save();
113
+ }
114
+ /** Search for entities or predicates containing a keyword. */
115
+ search(keyword, limit = 15) {
116
+ const k = keyword.toLowerCase();
117
+ return this.triples.filter(t => t.subj.toLowerCase().includes(k) || t.pred.toLowerCase().includes(k) || t.obj.toLowerCase().includes(k)).slice(-limit);
118
+ }
119
+ /** Format facts as readable text. */
120
+ format(entity) {
121
+ const facts = entity ? this.about(entity) : this.triples.slice(-30);
122
+ if (facts.length === 0)
123
+ return "(no facts)";
124
+ const bySubj = new Map();
125
+ for (const f of facts) {
126
+ if (!bySubj.has(f.subj))
127
+ bySubj.set(f.subj, []);
128
+ bySubj.get(f.subj).push(`${f.pred} → ${f.obj}`);
129
+ }
130
+ const lines = [];
131
+ for (const [subj, preds] of bySubj) {
132
+ lines.push(`**${subj}**: ${preds.join(", ")}`);
133
+ }
134
+ return lines.join("\n");
135
+ }
136
+ get size() { return this.triples.length; }
137
+ save() {
138
+ try {
139
+ const dir = path.dirname(this.indexPath);
140
+ if (!fs.existsSync(dir))
141
+ fs.mkdirSync(dir, { recursive: true });
142
+ fs.writeFileSync(this.indexPath, JSON.stringify(this.triples.slice(-2000)), "utf-8");
143
+ }
144
+ catch (e) {
145
+ log.warn("kg_save_failed", { error: String(e) });
146
+ }
147
+ }
148
+ load() {
149
+ try {
150
+ if (fs.existsSync(this.indexPath)) {
151
+ this.triples = JSON.parse(fs.readFileSync(this.indexPath, "utf-8"));
152
+ }
153
+ }
154
+ catch {
155
+ this.triples = [];
156
+ }
157
+ }
158
+ }
159
+ exports.KnowledgeGraph = KnowledgeGraph;
160
+ /* ── Auto-extract facts from conversation ── */
161
+ const RELATION_PATTERNS = [
162
+ [/(\w+) (?:是|为|属于|使用|用|用到了|采用) (.+?)(?:[。,,.\n]|$)/g, "is"],
163
+ [/(\w+) (?:版本|version|v) (?:是|为)? ?(\d[\d.]*)/gi, "version"],
164
+ [/(\w+) (?:depends|依赖|需要|requires) (\w+)/gi, "depends_on"],
165
+ [/(\w+) (?:config|配置) (?:为|是)? (.+?)(?:[。,,.\n]|$)/gi, "config"],
166
+ [/(\w+) (?:file|path|文件|路径) (?:在|为|at) (.+?)(?:[。,,.\n]|$)/gi, "located_at"],
167
+ ];
168
+ function extractFacts(text, agent) {
169
+ const facts = [];
170
+ for (const [pattern, pred] of RELATION_PATTERNS) {
171
+ let match;
172
+ while ((match = pattern.exec(text)) !== null) {
173
+ const subj = match[1].trim().toLowerCase();
174
+ const obj = match[2].trim();
175
+ if (subj.length >= 2 && obj.length >= 2 && subj !== obj) {
176
+ facts.push([subj, pred, obj]);
177
+ }
178
+ }
179
+ }
180
+ return facts;
181
+ }
182
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/core/graph.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiIH,oCAaC;AA5ID,uCAAyB;AACzB,2CAA6B;AAC7B,qCAA2C;AAC3C,qCAAqC;AAErC,MAAM,GAAG,GAAG,IAAA,kBAAS,EAAC,OAAO,CAAC,CAAC;AAc/B,MAAa,cAAc;IAIzB,YAAY,OAAe,SAAS;QAH5B,YAAO,GAAa,EAAE,CAAC;QAI7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,wBAAe,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,gDAAgD;IAChD,GAAG,CAAC,IAAY,EAAE,IAAY,EAAE,GAAW,EAAE,QAAgB,QAAQ,EAAE,IAA6B;QAClG,cAAc;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAC3F,IAAI,MAAM,EAAE,CAAC;YAAC,MAAM,CAAC,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAAC,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAElH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI;YAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,sCAAsC;IACtC,KAAK,CAAC,MAAc,EAAE,QAAgB,EAAE;QACtC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACvF,CAAC;IAED,8CAA8C;IAC9C,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,qDAAqD;IACrD,IAAI,CAAC,IAAY,EAAE,IAAY;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACtE,CAAC;IAED,0DAA0D;IAC1D,MAAM,CAAC,MAAc,EAAE,WAAmB,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAClE,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACtC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,SAAS;gBAC1B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACZ,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACpE,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,qBAAqB;IACrB,MAAM,CAAC,IAAY,EAAE,IAAY,EAAE,GAAW;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,8DAA8D;IAC9D,MAAM,CAAC,OAAe,EAAE,QAAgB,EAAE;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IACzJ,CAAC;IAED,qCAAqC;IACrC,MAAM,CAAC,MAAe;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1C,IAAI;QACV,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IACnE,CAAC;IAEO,IAAI;QACV,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAAC,CAAC;IAChC,CAAC;CACF;AAjGD,wCAiGC;AAED,gDAAgD;AAChD,MAAM,iBAAiB,GAA4B;IACjD,CAAC,mDAAmD,EAAE,IAAI,CAAC;IAC3D,CAAC,+CAA+C,EAAE,SAAS,CAAC;IAC5D,CAAC,0CAA0C,EAAE,YAAY,CAAC;IAC1D,CAAC,oDAAoD,EAAE,QAAQ,CAAC;IAChE,CAAC,4DAA4D,EAAE,YAAY,CAAC;CAC7E,CAAC;AAEF,SAAgB,YAAY,CAAC,IAAY,EAAE,KAAa;IACtD,MAAM,KAAK,GAAoC,EAAE,CAAC;IAClD,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC;QACV,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * 向量语义搜索 — TF-IDF + Cosine similarity, zero dependencies.
3
+ *
4
+ * Replaces n-gram Jaccard as the default semantic scorer.
5
+ * - IDF pre-computed from document corpus
6
+ * - Cosine similarity on TF-IDF vectors
7
+ * - CJK-aware tokenization (bigram for CJK, whitespace for ASCII)
8
+ *
9
+ * Usage:
10
+ * const idx = new VectorIndex();
11
+ * idx.addDocuments(docs);
12
+ * const results = idx.search("deploy script", 5);
13
+ */
14
+ interface DocVector {
15
+ id: string;
16
+ tf: Map<string, number>;
17
+ norm: number;
18
+ content: string;
19
+ meta?: Record<string, any>;
20
+ }
21
+ export declare class VectorIndex {
22
+ private docs;
23
+ private idf;
24
+ private totalDocs;
25
+ /** Add a document to the index. */
26
+ addDocument(id: string, content: string, meta?: Record<string, any>): void;
27
+ addDocuments(docs: Array<{
28
+ id: string;
29
+ content: string;
30
+ meta?: Record<string, any>;
31
+ }>): void;
32
+ private docFrequency;
33
+ /** Search for documents similar to query. Returns [score, doc] pairs. */
34
+ search(query: string, topK?: number, minScore?: number): Array<[number, DocVector]>;
35
+ /** Remove a document by ID. */
36
+ removeDocument(id: string): void;
37
+ get size(): number;
38
+ clear(): void;
39
+ }
40
+ export declare function getVectorIndex(): VectorIndex;
41
+ export declare function resetVectorIndex(): void;
42
+ export {};
43
+ //# sourceMappingURL=vector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/core/vector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA+BH,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,SAAS,CAAK;IAEtB,mCAAmC;IACnC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IA0B1E,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC,GAAG,IAAI;IAI5F,OAAO,CAAC,YAAY;IAMpB,yEAAyE;IACzE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,EAAE,QAAQ,GAAE,MAAa,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAkC5F,+BAA+B;IAC/B,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKhC,IAAI,IAAI,IAAI,MAAM,CAA6B;IAE/C,KAAK,IAAI,IAAI;CACd;AAOD,wBAAgB,cAAc,IAAI,WAAW,CAG5C;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * 向量语义搜索 — TF-IDF + Cosine similarity, zero dependencies.
4
+ *
5
+ * Replaces n-gram Jaccard as the default semantic scorer.
6
+ * - IDF pre-computed from document corpus
7
+ * - Cosine similarity on TF-IDF vectors
8
+ * - CJK-aware tokenization (bigram for CJK, whitespace for ASCII)
9
+ *
10
+ * Usage:
11
+ * const idx = new VectorIndex();
12
+ * idx.addDocuments(docs);
13
+ * const results = idx.search("deploy script", 5);
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.VectorIndex = void 0;
17
+ exports.getVectorIndex = getVectorIndex;
18
+ exports.resetVectorIndex = resetVectorIndex;
19
+ /* ═══════════════════════════════════════
20
+ Tokenizer — CJK-aware
21
+ ═══════════════════════════════════════ */
22
+ const CJK = /[一-鿿぀-ゟ가-힯]/;
23
+ function tokenize(text) {
24
+ const tokens = [];
25
+ let i = 0;
26
+ while (i < text.length) {
27
+ if (CJK.test(text[i])) {
28
+ if (i + 1 < text.length && CJK.test(text[i + 1])) {
29
+ tokens.push(text.slice(i, i + 2));
30
+ i += 2;
31
+ }
32
+ else {
33
+ tokens.push(text[i]);
34
+ i++;
35
+ }
36
+ }
37
+ else if (/[A-Za-z0-9_]/.test(text[i])) {
38
+ let j = i;
39
+ while (j < text.length && /[A-Za-z0-9_]/.test(text[j]))
40
+ j++;
41
+ tokens.push(text.slice(i, j).toLowerCase());
42
+ i = j;
43
+ }
44
+ else {
45
+ i++;
46
+ }
47
+ }
48
+ return tokens;
49
+ }
50
+ class VectorIndex {
51
+ constructor() {
52
+ this.docs = [];
53
+ this.idf = new Map();
54
+ this.totalDocs = 0;
55
+ }
56
+ /** Add a document to the index. */
57
+ addDocument(id, content, meta) {
58
+ const tokens = tokenize(content);
59
+ const tf = new Map();
60
+ for (const t of tokens) {
61
+ tf.set(t, (tf.get(t) || 0) + 1);
62
+ }
63
+ // Normalize by doc length
64
+ const tfIdf = new Map();
65
+ let normSq = 0;
66
+ for (const [term, freq] of tf) {
67
+ const tfVal = freq / tokens.length;
68
+ const idfVal = this.idf.get(term) || 0;
69
+ const val = tfVal * Math.max(0.1, idfVal);
70
+ tfIdf.set(term, val);
71
+ normSq += val * val;
72
+ }
73
+ const norm = Math.sqrt(normSq);
74
+ this.docs.push({ id, tf: tfIdf, norm, content: content.slice(0, 500), meta });
75
+ this.totalDocs++;
76
+ // Update IDF
77
+ for (const term of tf.keys()) {
78
+ this.idf.set(term, Math.log((this.totalDocs + 1) / ((this.docFrequency(term) + 1))));
79
+ }
80
+ }
81
+ addDocuments(docs) {
82
+ for (const d of docs)
83
+ this.addDocument(d.id, d.content, d.meta);
84
+ }
85
+ docFrequency(term) {
86
+ let count = 0;
87
+ for (const d of this.docs) {
88
+ if (d.tf.has(term))
89
+ count++;
90
+ }
91
+ return count;
92
+ }
93
+ /** Search for documents similar to query. Returns [score, doc] pairs. */
94
+ search(query, topK = 5, minScore = 0.01) {
95
+ const queryTokens = tokenize(query);
96
+ const queryTf = new Map();
97
+ for (const t of queryTokens) {
98
+ queryTf.set(t, (queryTf.get(t) || 0) + 1);
99
+ }
100
+ // Query vector
101
+ const qv = new Map();
102
+ let qNormSq = 0;
103
+ for (const [term, freq] of queryTf) {
104
+ const tfVal = freq / queryTokens.length;
105
+ const idfVal = this.idf.get(term) || 0;
106
+ const val = tfVal * Math.max(0.1, idfVal);
107
+ qv.set(term, val);
108
+ qNormSq += val * val;
109
+ }
110
+ const qNorm = Math.sqrt(qNormSq);
111
+ if (qNorm === 0)
112
+ return [];
113
+ // Cosine similarity against all docs
114
+ const scored = [];
115
+ for (const doc of this.docs) {
116
+ if (doc.norm === 0)
117
+ continue;
118
+ let dot = 0;
119
+ for (const [term, qVal] of qv) {
120
+ dot += qVal * (doc.tf.get(term) || 0);
121
+ }
122
+ const score = dot / (qNorm * doc.norm);
123
+ if (score >= minScore)
124
+ scored.push([score, doc]);
125
+ }
126
+ scored.sort((a, b) => b[0] - a[0]);
127
+ return scored.slice(0, topK);
128
+ }
129
+ /** Remove a document by ID. */
130
+ removeDocument(id) {
131
+ this.docs = this.docs.filter(d => d.id !== id);
132
+ this.totalDocs = this.docs.length;
133
+ }
134
+ get size() { return this.docs.length; }
135
+ clear() { this.docs = []; this.idf.clear(); this.totalDocs = 0; }
136
+ }
137
+ exports.VectorIndex = VectorIndex;
138
+ /* ═══════════════════════════════════════
139
+ Singleton instance for memory recall
140
+ ═══════════════════════════════════════ */
141
+ let globalIndex = null;
142
+ function getVectorIndex() {
143
+ if (!globalIndex)
144
+ globalIndex = new VectorIndex();
145
+ return globalIndex;
146
+ }
147
+ function resetVectorIndex() {
148
+ globalIndex = new VectorIndex();
149
+ }
150
+ //# sourceMappingURL=vector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector.js","sourceRoot":"","sources":["../../src/core/vector.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skyloom",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "description": "天空织机 Skyloom — 6 weather-themed AI agents: Fog, Rain, Frost, Snow, Dew, Fair",
5
5
  "preferGlobal": true,
6
6
  "type": "commonjs",
package/src/cli/main.ts CHANGED
@@ -164,6 +164,22 @@ async function chat(agentName: string, modelOverride?: string): Promise<void> {
164
164
  let agent = ctx.agentMap.get(agentName);
165
165
  if (!agent) { process.stdout.write(chalk.red("Unknown agent: " + agentName) + "\n"); return; }
166
166
  await agent.init();
167
+
168
+ // Wire up security approval — prompt user for HIGH/CRITICAL operations
169
+ try {
170
+ const { getSecurity, DangerLevel } = require("../core/security");
171
+ const sec = getSecurity();
172
+ sec.setApprovalCallback(async (tool: string, args: Record<string, any>, level: number) => {
173
+ process.stdout.write(chalk.yellow(`\n ⚠ ${tool} ( danger level ${level} )\n`));
174
+ process.stdout.write(chalk.dim(` args: ${JSON.stringify(args).slice(0, 80)}\n`));
175
+ const answer = await new Promise<string>(resolve => {
176
+ const rl2 = readline.createInterface({ input: process.stdin, output: process.stdout });
177
+ rl2.question(chalk.red(" Approve? [y/N] "), (a: string) => { rl2.close(); resolve(a.trim().toLowerCase()); });
178
+ });
179
+ return answer === "y" || answer === "yes";
180
+ });
181
+ } catch { /* security module optional */ }
182
+
167
183
  // eslint-disable-next-line prefer-const
168
184
  let currentAgent = agent; // mutable for agent switching
169
185
  welcome(agent);
@@ -0,0 +1,156 @@
1
+ /**
2
+ * 简易知识图谱 — entity-relation storage in SQLite.
3
+ *
4
+ * Lightweight triple store: (subject, predicate, object) with metadata.
5
+ * Used for: project info, tool preferences, dependency relationships.
6
+ *
7
+ * Schema:
8
+ * CREATE TABLE triples (subj, pred, obj, agent, ts, meta)
9
+ *
10
+ * Queries:
11
+ * - Find all relations for an entity
12
+ * - Find all entities matching a predicate
13
+ * - Transitive closure (2-hop max for performance)
14
+ */
15
+
16
+ import * as fs from "fs";
17
+ import * as path from "path";
18
+ import { USER_CONFIG_DIR } from "./config";
19
+ import { getLogger } from "./logger";
20
+
21
+ const log = getLogger("graph");
22
+
23
+ /* ═══════════════════════════════════════
24
+ Triple store — in-memory + optional persistence
25
+ ═══════════════════════════════════════ */
26
+ interface Triple {
27
+ subj: string;
28
+ pred: string;
29
+ obj: string;
30
+ agent: string;
31
+ ts: string;
32
+ meta?: Record<string, string>;
33
+ }
34
+
35
+ export class KnowledgeGraph {
36
+ private triples: Triple[] = [];
37
+ private indexPath: string;
38
+
39
+ constructor(name: string = "default") {
40
+ this.indexPath = path.join(USER_CONFIG_DIR, `kg_${name}.json`);
41
+ this.load();
42
+ }
43
+
44
+ /** Add a fact: (subject, predicate, object). */
45
+ add(subj: string, pred: string, obj: string, agent: string = "system", meta?: Record<string, string>): void {
46
+ // Deduplicate
47
+ const exists = this.triples.find(t => t.subj === subj && t.pred === pred && t.obj === obj);
48
+ if (exists) { exists.ts = new Date().toISOString(); if (meta) exists.meta = { ...exists.meta, ...meta }; return; }
49
+
50
+ this.triples.push({ subj, pred, obj, agent, ts: new Date().toISOString(), meta });
51
+ if (this.triples.length > 5000) this.triples.splice(0, this.triples.length - 5000);
52
+ this.save();
53
+ }
54
+
55
+ /** Find all facts about an entity. */
56
+ about(entity: string, limit: number = 20): Triple[] {
57
+ return this.triples.filter(t => t.subj === entity || t.obj === entity).slice(-limit);
58
+ }
59
+
60
+ /** Find all subjects matching a predicate. */
61
+ byPredicate(pred: string): Triple[] {
62
+ return this.triples.filter(t => t.pred === pred);
63
+ }
64
+
65
+ /** Find all objects for a subject-predicate pair. */
66
+ find(subj: string, pred: string): Triple[] {
67
+ return this.triples.filter(t => t.subj === subj && t.pred === pred);
68
+ }
69
+
70
+ /** Transitive expansion: 2-hop from a starting entity. */
71
+ expand(entity: string, maxDepth: number = 2): Triple[] {
72
+ const seen = new Set<Triple>();
73
+ const queue = [entity];
74
+ for (let depth = 0; depth < maxDepth && queue.length > 0; depth++) {
75
+ const current = queue.shift()!;
76
+ const facts = this.about(current, 10);
77
+ for (const f of facts) {
78
+ if (seen.has(f)) continue;
79
+ seen.add(f);
80
+ if (f.subj === current && !queue.includes(f.obj)) queue.push(f.obj);
81
+ if (f.obj === current && !queue.includes(f.subj)) queue.push(f.subj);
82
+ }
83
+ }
84
+ return Array.from(seen);
85
+ }
86
+
87
+ /** Remove a fact. */
88
+ remove(subj: string, pred: string, obj: string): void {
89
+ this.triples = this.triples.filter(t => !(t.subj === subj && t.pred === pred && t.obj === obj));
90
+ this.save();
91
+ }
92
+
93
+ /** Search for entities or predicates containing a keyword. */
94
+ search(keyword: string, limit: number = 15): Triple[] {
95
+ const k = keyword.toLowerCase();
96
+ return this.triples.filter(t => t.subj.toLowerCase().includes(k) || t.pred.toLowerCase().includes(k) || t.obj.toLowerCase().includes(k)).slice(-limit);
97
+ }
98
+
99
+ /** Format facts as readable text. */
100
+ format(entity?: string): string {
101
+ const facts = entity ? this.about(entity) : this.triples.slice(-30);
102
+ if (facts.length === 0) return "(no facts)";
103
+ const bySubj = new Map<string, string[]>();
104
+ for (const f of facts) {
105
+ if (!bySubj.has(f.subj)) bySubj.set(f.subj, []);
106
+ bySubj.get(f.subj)!.push(`${f.pred} → ${f.obj}`);
107
+ }
108
+ const lines: string[] = [];
109
+ for (const [subj, preds] of bySubj) {
110
+ lines.push(`**${subj}**: ${preds.join(", ")}`);
111
+ }
112
+ return lines.join("\n");
113
+ }
114
+
115
+ get size(): number { return this.triples.length; }
116
+
117
+ private save(): void {
118
+ try {
119
+ const dir = path.dirname(this.indexPath);
120
+ if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
121
+ fs.writeFileSync(this.indexPath, JSON.stringify(this.triples.slice(-2000)), "utf-8");
122
+ } catch (e) { log.warn("kg_save_failed", { error: String(e) }); }
123
+ }
124
+
125
+ private load(): void {
126
+ try {
127
+ if (fs.existsSync(this.indexPath)) {
128
+ this.triples = JSON.parse(fs.readFileSync(this.indexPath, "utf-8"));
129
+ }
130
+ } catch { this.triples = []; }
131
+ }
132
+ }
133
+
134
+ /* ── Auto-extract facts from conversation ── */
135
+ const RELATION_PATTERNS: Array<[RegExp, string]> = [
136
+ [/(\w+) (?:是|为|属于|使用|用|用到了|采用) (.+?)(?:[。,,.\n]|$)/g, "is"],
137
+ [/(\w+) (?:版本|version|v) (?:是|为)? ?(\d[\d.]*)/gi, "version"],
138
+ [/(\w+) (?:depends|依赖|需要|requires) (\w+)/gi, "depends_on"],
139
+ [/(\w+) (?:config|配置) (?:为|是)? (.+?)(?:[。,,.\n]|$)/gi, "config"],
140
+ [/(\w+) (?:file|path|文件|路径) (?:在|为|at) (.+?)(?:[。,,.\n]|$)/gi, "located_at"],
141
+ ];
142
+
143
+ export function extractFacts(text: string, agent: string): Array<[string, string, string]> {
144
+ const facts: Array<[string, string, string]> = [];
145
+ for (const [pattern, pred] of RELATION_PATTERNS) {
146
+ let match;
147
+ while ((match = pattern.exec(text)) !== null) {
148
+ const subj = match[1].trim().toLowerCase();
149
+ const obj = match[2].trim();
150
+ if (subj.length >= 2 && obj.length >= 2 && subj !== obj) {
151
+ facts.push([subj, pred, obj]);
152
+ }
153
+ }
154
+ }
155
+ return facts;
156
+ }
@@ -0,0 +1,152 @@
1
+ /**
2
+ * 向量语义搜索 — TF-IDF + Cosine similarity, zero dependencies.
3
+ *
4
+ * Replaces n-gram Jaccard as the default semantic scorer.
5
+ * - IDF pre-computed from document corpus
6
+ * - Cosine similarity on TF-IDF vectors
7
+ * - CJK-aware tokenization (bigram for CJK, whitespace for ASCII)
8
+ *
9
+ * Usage:
10
+ * const idx = new VectorIndex();
11
+ * idx.addDocuments(docs);
12
+ * const results = idx.search("deploy script", 5);
13
+ */
14
+
15
+ /* ═══════════════════════════════════════
16
+ Tokenizer — CJK-aware
17
+ ═══════════════════════════════════════ */
18
+ const CJK = /[一-鿿぀-ゟ가-힯]/;
19
+
20
+ function tokenize(text: string): string[] {
21
+ const tokens: string[] = [];
22
+ let i = 0;
23
+ while (i < text.length) {
24
+ if (CJK.test(text[i])) {
25
+ if (i + 1 < text.length && CJK.test(text[i + 1])) {
26
+ tokens.push(text.slice(i, i + 2)); i += 2;
27
+ } else {
28
+ tokens.push(text[i]); i++;
29
+ }
30
+ } else if (/[A-Za-z0-9_]/.test(text[i])) {
31
+ let j = i;
32
+ while (j < text.length && /[A-Za-z0-9_]/.test(text[j])) j++;
33
+ tokens.push(text.slice(i, j).toLowerCase()); i = j;
34
+ } else {
35
+ i++;
36
+ }
37
+ }
38
+ return tokens;
39
+ }
40
+
41
+ /* ═══════════════════════════════════════
42
+ TF-IDF Vector computation
43
+ ═══════════════════════════════════════ */
44
+ interface DocVector {
45
+ id: string;
46
+ tf: Map<string, number>;
47
+ norm: number;
48
+ content: string;
49
+ meta?: Record<string, any>;
50
+ }
51
+
52
+ export class VectorIndex {
53
+ private docs: DocVector[] = [];
54
+ private idf: Map<string, number> = new Map();
55
+ private totalDocs = 0;
56
+
57
+ /** Add a document to the index. */
58
+ addDocument(id: string, content: string, meta?: Record<string, any>): void {
59
+ const tokens = tokenize(content);
60
+ const tf = new Map<string, number>();
61
+ for (const t of tokens) { tf.set(t, (tf.get(t) || 0) + 1); }
62
+
63
+ // Normalize by doc length
64
+ const tfIdf = new Map<string, number>();
65
+ let normSq = 0;
66
+ for (const [term, freq] of tf) {
67
+ const tfVal = freq / tokens.length;
68
+ const idfVal = this.idf.get(term) || 0;
69
+ const val = tfVal * Math.max(0.1, idfVal);
70
+ tfIdf.set(term, val);
71
+ normSq += val * val;
72
+ }
73
+
74
+ const norm = Math.sqrt(normSq);
75
+ this.docs.push({ id, tf: tfIdf, norm, content: content.slice(0, 500), meta });
76
+ this.totalDocs++;
77
+
78
+ // Update IDF
79
+ for (const term of tf.keys()) {
80
+ this.idf.set(term, Math.log((this.totalDocs + 1) / ((this.docFrequency(term) + 1))));
81
+ }
82
+ }
83
+
84
+ addDocuments(docs: Array<{ id: string; content: string; meta?: Record<string, any> }>): void {
85
+ for (const d of docs) this.addDocument(d.id, d.content, d.meta);
86
+ }
87
+
88
+ private docFrequency(term: string): number {
89
+ let count = 0;
90
+ for (const d of this.docs) { if (d.tf.has(term)) count++; }
91
+ return count;
92
+ }
93
+
94
+ /** Search for documents similar to query. Returns [score, doc] pairs. */
95
+ search(query: string, topK: number = 5, minScore: number = 0.01): Array<[number, DocVector]> {
96
+ const queryTokens = tokenize(query);
97
+ const queryTf = new Map<string, number>();
98
+ for (const t of queryTokens) { queryTf.set(t, (queryTf.get(t) || 0) + 1); }
99
+
100
+ // Query vector
101
+ const qv = new Map<string, number>();
102
+ let qNormSq = 0;
103
+ for (const [term, freq] of queryTf) {
104
+ const tfVal = freq / queryTokens.length;
105
+ const idfVal = this.idf.get(term) || 0;
106
+ const val = tfVal * Math.max(0.1, idfVal);
107
+ qv.set(term, val);
108
+ qNormSq += val * val;
109
+ }
110
+ const qNorm = Math.sqrt(qNormSq);
111
+ if (qNorm === 0) return [];
112
+
113
+ // Cosine similarity against all docs
114
+ const scored: Array<[number, DocVector]> = [];
115
+ for (const doc of this.docs) {
116
+ if (doc.norm === 0) continue;
117
+ let dot = 0;
118
+ for (const [term, qVal] of qv) {
119
+ dot += qVal * (doc.tf.get(term) || 0);
120
+ }
121
+ const score = dot / (qNorm * doc.norm);
122
+ if (score >= minScore) scored.push([score, doc]);
123
+ }
124
+
125
+ scored.sort((a, b) => b[0] - a[0]);
126
+ return scored.slice(0, topK);
127
+ }
128
+
129
+ /** Remove a document by ID. */
130
+ removeDocument(id: string): void {
131
+ this.docs = this.docs.filter(d => d.id !== id);
132
+ this.totalDocs = this.docs.length;
133
+ }
134
+
135
+ get size(): number { return this.docs.length; }
136
+
137
+ clear(): void { this.docs = []; this.idf.clear(); this.totalDocs = 0; }
138
+ }
139
+
140
+ /* ═══════════════════════════════════════
141
+ Singleton instance for memory recall
142
+ ═══════════════════════════════════════ */
143
+ let globalIndex: VectorIndex | null = null;
144
+
145
+ export function getVectorIndex(): VectorIndex {
146
+ if (!globalIndex) globalIndex = new VectorIndex();
147
+ return globalIndex;
148
+ }
149
+
150
+ export function resetVectorIndex(): void {
151
+ globalIndex = new VectorIndex();
152
+ }