kagent-ts 0.1.4 → 0.1.5
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/LICENSE +68 -21
- package/README.md +27 -371
- package/dist/compression/progressive-compressor.d.ts +66 -0
- package/dist/compression/progressive-compressor.d.ts.map +1 -0
- package/dist/compression/progressive-compressor.js +367 -0
- package/dist/compression/progressive-compressor.js.map +1 -0
- package/dist/compression/types.d.ts +1 -5
- package/dist/compression/types.d.ts.map +1 -1
- package/dist/context/context-manager.d.ts +34 -15
- package/dist/context/context-manager.d.ts.map +1 -1
- package/dist/context/context-manager.js +78 -28
- package/dist/context/context-manager.js.map +1 -1
- package/dist/context/types.d.ts +20 -4
- package/dist/context/types.d.ts.map +1 -1
- package/dist/core/agent.d.ts +354 -25
- package/dist/core/agent.d.ts.map +1 -1
- package/dist/core/agent.js +646 -64
- package/dist/core/agent.js.map +1 -1
- package/dist/core/fusion-agent.d.ts +207 -0
- package/dist/core/fusion-agent.d.ts.map +1 -0
- package/dist/core/fusion-agent.js +769 -0
- package/dist/core/fusion-agent.js.map +1 -0
- package/dist/core/hooks.d.ts +19 -7
- package/dist/core/hooks.d.ts.map +1 -1
- package/dist/core/plan-solve-agent.d.ts +1 -15
- package/dist/core/plan-solve-agent.d.ts.map +1 -1
- package/dist/core/plan-solve-agent.js +142 -117
- package/dist/core/plan-solve-agent.js.map +1 -1
- package/dist/core/react-agent.d.ts +0 -13
- package/dist/core/react-agent.d.ts.map +1 -1
- package/dist/core/react-agent.js +127 -102
- package/dist/core/react-agent.js.map +1 -1
- package/dist/core/response-schema.d.ts +65 -0
- package/dist/core/response-schema.d.ts.map +1 -1
- package/dist/core/response-schema.js +174 -1
- package/dist/core/response-schema.js.map +1 -1
- package/dist/core/system-prompts.d.ts +27 -0
- package/dist/core/system-prompts.d.ts.map +1 -0
- package/dist/core/system-prompts.js +112 -0
- package/dist/core/system-prompts.js.map +1 -0
- package/dist/eval/benchmark.d.ts +81 -0
- package/dist/eval/benchmark.d.ts.map +1 -0
- package/dist/eval/benchmark.js +292 -0
- package/dist/eval/benchmark.js.map +1 -0
- package/dist/eval/eval-runner.d.ts +79 -0
- package/dist/eval/eval-runner.d.ts.map +1 -0
- package/dist/eval/eval-runner.js +252 -0
- package/dist/eval/eval-runner.js.map +1 -0
- package/dist/eval/index.d.ts +7 -0
- package/dist/eval/index.d.ts.map +1 -0
- package/dist/eval/index.js +13 -0
- package/dist/eval/index.js.map +1 -0
- package/dist/eval/tool-call-evaluator.d.ts +72 -0
- package/dist/eval/tool-call-evaluator.d.ts.map +1 -0
- package/dist/eval/tool-call-evaluator.js +265 -0
- package/dist/eval/tool-call-evaluator.js.map +1 -0
- package/dist/eval/types.d.ts +219 -0
- package/dist/eval/types.d.ts.map +1 -0
- package/dist/eval/types.js +3 -0
- package/dist/eval/types.js.map +1 -0
- package/dist/index.d.ts +58 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +116 -8
- package/dist/index.js.map +1 -1
- package/dist/llm/anthropic-provider.d.ts +141 -0
- package/dist/llm/anthropic-provider.d.ts.map +1 -0
- package/dist/llm/anthropic-provider.js +486 -0
- package/dist/llm/anthropic-provider.js.map +1 -0
- package/dist/llm/errors.d.ts +26 -0
- package/dist/llm/errors.d.ts.map +1 -0
- package/dist/llm/errors.js +19 -0
- package/dist/llm/errors.js.map +1 -0
- package/dist/llm/factory.d.ts +73 -0
- package/dist/llm/factory.d.ts.map +1 -0
- package/dist/llm/factory.js +77 -0
- package/dist/llm/factory.js.map +1 -0
- package/dist/llm/fallback-provider.d.ts +47 -0
- package/dist/llm/fallback-provider.d.ts.map +1 -0
- package/dist/llm/fallback-provider.js +91 -0
- package/dist/llm/fallback-provider.js.map +1 -0
- package/dist/llm/interface.d.ts +54 -11
- package/dist/llm/interface.d.ts.map +1 -1
- package/dist/llm/interface.js +34 -0
- package/dist/llm/interface.js.map +1 -1
- package/dist/llm/model-router.d.ts +126 -0
- package/dist/llm/model-router.d.ts.map +1 -0
- package/dist/llm/model-router.js +178 -0
- package/dist/llm/model-router.js.map +1 -0
- package/dist/llm/openai-provider.d.ts +8 -32
- package/dist/llm/openai-provider.d.ts.map +1 -1
- package/dist/llm/openai-provider.js +27 -60
- package/dist/llm/openai-provider.js.map +1 -1
- package/dist/llm/rate-limiter.d.ts +41 -0
- package/dist/llm/rate-limiter.d.ts.map +1 -0
- package/dist/llm/rate-limiter.js +93 -0
- package/dist/llm/rate-limiter.js.map +1 -0
- package/dist/llm/retry.d.ts +26 -0
- package/dist/llm/retry.d.ts.map +1 -0
- package/dist/llm/retry.js +44 -0
- package/dist/llm/retry.js.map +1 -0
- package/dist/llm/token-budget.d.ts +97 -0
- package/dist/llm/token-budget.d.ts.map +1 -0
- package/dist/llm/token-budget.js +115 -0
- package/dist/llm/token-budget.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +7 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.d.ts +38 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +34 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/mcp/mcp-client-manager.d.ts +10 -2
- package/dist/mcp/mcp-client-manager.d.ts.map +1 -1
- package/dist/mcp/mcp-client-manager.js +20 -9
- package/dist/mcp/mcp-client-manager.js.map +1 -1
- package/dist/memory/index.d.ts +3 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +6 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +119 -0
- package/dist/memory/memory-manager.d.ts.map +1 -0
- package/dist/memory/memory-manager.js +334 -0
- package/dist/memory/memory-manager.js.map +1 -0
- package/dist/messages/types.d.ts +2 -0
- package/dist/messages/types.d.ts.map +1 -1
- package/dist/orchestrator/index.d.ts +5 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +13 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/json-extractor.d.ts +18 -0
- package/dist/orchestrator/json-extractor.d.ts.map +1 -0
- package/dist/orchestrator/json-extractor.js +111 -0
- package/dist/orchestrator/json-extractor.js.map +1 -0
- package/dist/orchestrator/orchestrator-agent.d.ts +152 -0
- package/dist/orchestrator/orchestrator-agent.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator-agent.js +675 -0
- package/dist/orchestrator/orchestrator-agent.js.map +1 -0
- package/dist/orchestrator/orchestrator-response.d.ts +40 -0
- package/dist/orchestrator/orchestrator-response.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator-response.js +275 -0
- package/dist/orchestrator/orchestrator-response.js.map +1 -0
- package/dist/orchestrator/orchestrator-types.d.ts +116 -0
- package/dist/orchestrator/orchestrator-types.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator-types.js +3 -0
- package/dist/orchestrator/orchestrator-types.js.map +1 -0
- package/dist/preferences/preference-manager.d.ts +8 -3
- package/dist/preferences/preference-manager.d.ts.map +1 -1
- package/dist/preferences/preference-manager.js +17 -4
- package/dist/preferences/preference-manager.js.map +1 -1
- package/dist/rag/chroma-store.d.ts +52 -0
- package/dist/rag/chroma-store.d.ts.map +1 -0
- package/dist/rag/chroma-store.js +110 -0
- package/dist/rag/chroma-store.js.map +1 -0
- package/dist/rag/document-loader.d.ts +21 -0
- package/dist/rag/document-loader.d.ts.map +1 -0
- package/dist/rag/document-loader.js +129 -0
- package/dist/rag/document-loader.js.map +1 -0
- package/dist/rag/embedding-provider.d.ts +36 -0
- package/dist/rag/embedding-provider.d.ts.map +1 -0
- package/dist/rag/embedding-provider.js +74 -0
- package/dist/rag/embedding-provider.js.map +1 -0
- package/dist/rag/index.d.ts +17 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +27 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/rag/keyword-index.d.ts +53 -0
- package/dist/rag/keyword-index.d.ts.map +1 -0
- package/dist/rag/keyword-index.js +161 -0
- package/dist/rag/keyword-index.js.map +1 -0
- package/dist/rag/llm-reranker.d.ts +36 -0
- package/dist/rag/llm-reranker.d.ts.map +1 -0
- package/dist/rag/llm-reranker.js +95 -0
- package/dist/rag/llm-reranker.js.map +1 -0
- package/dist/rag/rag-manager.d.ts +54 -0
- package/dist/rag/rag-manager.d.ts.map +1 -0
- package/dist/rag/rag-manager.js +179 -0
- package/dist/rag/rag-manager.js.map +1 -0
- package/dist/rag/rag-types.d.ts +143 -0
- package/dist/rag/rag-types.d.ts.map +1 -0
- package/dist/rag/rag-types.js +9 -0
- package/dist/rag/rag-types.js.map +1 -0
- package/dist/rag/rrf.d.ts +47 -0
- package/dist/rag/rrf.d.ts.map +1 -0
- package/dist/rag/rrf.js +70 -0
- package/dist/rag/rrf.js.map +1 -0
- package/dist/rag/search-knowledge.d.ts +24 -0
- package/dist/rag/search-knowledge.d.ts.map +1 -0
- package/dist/rag/search-knowledge.js +86 -0
- package/dist/rag/search-knowledge.js.map +1 -0
- package/dist/rag/text-splitter.d.ts +25 -0
- package/dist/rag/text-splitter.d.ts.map +1 -0
- package/dist/rag/text-splitter.js +136 -0
- package/dist/rag/text-splitter.js.map +1 -0
- package/dist/rag/vector-store.d.ts +34 -0
- package/dist/rag/vector-store.d.ts.map +1 -0
- package/dist/rag/vector-store.js +73 -0
- package/dist/rag/vector-store.js.map +1 -0
- package/dist/reflection/error-notebook.d.ts +125 -0
- package/dist/reflection/error-notebook.d.ts.map +1 -0
- package/dist/reflection/error-notebook.js +368 -0
- package/dist/reflection/error-notebook.js.map +1 -0
- package/dist/reflection/index.d.ts +8 -0
- package/dist/reflection/index.d.ts.map +1 -0
- package/dist/reflection/index.js +12 -0
- package/dist/reflection/index.js.map +1 -0
- package/dist/reflection/memory-reflector.d.ts +97 -0
- package/dist/reflection/memory-reflector.d.ts.map +1 -0
- package/dist/reflection/memory-reflector.js +215 -0
- package/dist/reflection/memory-reflector.js.map +1 -0
- package/dist/reflection/reflection-agent.d.ts +105 -0
- package/dist/reflection/reflection-agent.d.ts.map +1 -0
- package/dist/reflection/reflection-agent.js +234 -0
- package/dist/reflection/reflection-agent.js.map +1 -0
- package/dist/reflection/reflection-hook.d.ts +50 -0
- package/dist/reflection/reflection-hook.d.ts.map +1 -0
- package/dist/reflection/reflection-hook.js +108 -0
- package/dist/reflection/reflection-hook.js.map +1 -0
- package/dist/rules/project-rules.d.ts +47 -0
- package/dist/rules/project-rules.d.ts.map +1 -0
- package/dist/rules/project-rules.js +166 -0
- package/dist/rules/project-rules.js.map +1 -0
- package/dist/security/boundaries.d.ts +81 -0
- package/dist/security/boundaries.d.ts.map +1 -0
- package/dist/security/boundaries.js +158 -0
- package/dist/security/boundaries.js.map +1 -0
- package/dist/security/index.d.ts +2 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +11 -0
- package/dist/security/index.js.map +1 -0
- package/dist/session/session-types.d.ts +25 -4
- package/dist/session/session-types.d.ts.map +1 -1
- package/dist/skills/file-skill-loader.d.ts +4 -6
- package/dist/skills/file-skill-loader.d.ts.map +1 -1
- package/dist/skills/file-skill-loader.js +8 -19
- package/dist/skills/file-skill-loader.js.map +1 -1
- package/dist/skills/index.d.ts +1 -1
- package/dist/skills/index.d.ts.map +1 -1
- package/dist/skills/index.js +1 -2
- package/dist/skills/index.js.map +1 -1
- package/dist/skills/skill-manager.d.ts +18 -8
- package/dist/skills/skill-manager.d.ts.map +1 -1
- package/dist/skills/skill-manager.js +58 -36
- package/dist/skills/skill-manager.js.map +1 -1
- package/dist/skills/types.d.ts +3 -8
- package/dist/skills/types.d.ts.map +1 -1
- package/dist/subagent/index.d.ts +4 -0
- package/dist/subagent/index.d.ts.map +1 -0
- package/dist/subagent/index.js +8 -0
- package/dist/subagent/index.js.map +1 -0
- package/dist/subagent/subagent-loader.d.ts +53 -0
- package/dist/subagent/subagent-loader.d.ts.map +1 -0
- package/dist/subagent/subagent-loader.js +155 -0
- package/dist/subagent/subagent-loader.js.map +1 -0
- package/dist/subagent/subagent-manager.d.ts +161 -0
- package/dist/subagent/subagent-manager.d.ts.map +1 -0
- package/dist/subagent/subagent-manager.js +468 -0
- package/dist/subagent/subagent-manager.js.map +1 -0
- package/dist/subagent/subagent-types.d.ts +77 -0
- package/dist/subagent/subagent-types.d.ts.map +1 -0
- package/dist/subagent/subagent-types.js +3 -0
- package/dist/subagent/subagent-types.js.map +1 -0
- package/dist/tools/builtin/bash.d.ts +3 -0
- package/dist/tools/builtin/bash.d.ts.map +1 -0
- package/dist/tools/builtin/bash.js +87 -0
- package/dist/tools/builtin/bash.js.map +1 -0
- package/dist/tools/builtin/edit-file.d.ts.map +1 -1
- package/dist/tools/builtin/edit-file.js +1 -0
- package/dist/tools/builtin/edit-file.js.map +1 -1
- package/dist/tools/builtin/index.d.ts +14 -0
- package/dist/tools/builtin/index.d.ts.map +1 -1
- package/dist/tools/builtin/index.js +45 -1
- package/dist/tools/builtin/index.js.map +1 -1
- package/dist/tools/builtin/list-errors.d.ts +7 -0
- package/dist/tools/builtin/list-errors.d.ts.map +1 -0
- package/dist/tools/builtin/list-errors.js +64 -0
- package/dist/tools/builtin/list-errors.js.map +1 -0
- package/dist/tools/builtin/list-subagents.d.ts +7 -0
- package/dist/tools/builtin/list-subagents.d.ts.map +1 -0
- package/dist/tools/builtin/list-subagents.js +21 -0
- package/dist/tools/builtin/list-subagents.js.map +1 -0
- package/dist/tools/builtin/recall.d.ts +11 -0
- package/dist/tools/builtin/recall.d.ts.map +1 -0
- package/dist/tools/builtin/recall.js +60 -0
- package/dist/tools/builtin/recall.js.map +1 -0
- package/dist/tools/builtin/remember.d.ts +12 -0
- package/dist/tools/builtin/remember.d.ts.map +1 -0
- package/dist/tools/builtin/remember.js +72 -0
- package/dist/tools/builtin/remember.js.map +1 -0
- package/dist/tools/builtin/skill.d.ts +14 -0
- package/dist/tools/builtin/skill.d.ts.map +1 -0
- package/dist/tools/builtin/skill.js +71 -0
- package/dist/tools/builtin/skill.js.map +1 -0
- package/dist/tools/builtin/spawn-subagent.d.ts +7 -0
- package/dist/tools/builtin/spawn-subagent.d.ts.map +1 -0
- package/dist/tools/builtin/spawn-subagent.js +43 -0
- package/dist/tools/builtin/spawn-subagent.js.map +1 -0
- package/dist/tools/builtin/web-fetch.d.ts +3 -0
- package/dist/tools/builtin/web-fetch.d.ts.map +1 -0
- package/dist/tools/builtin/web-fetch.js +101 -0
- package/dist/tools/builtin/web-fetch.js.map +1 -0
- package/dist/tools/builtin/write-file.d.ts.map +1 -1
- package/dist/tools/builtin/write-file.js +1 -0
- package/dist/tools/builtin/write-file.js.map +1 -1
- package/dist/tools/circuit-breaker.d.ts +19 -10
- package/dist/tools/circuit-breaker.d.ts.map +1 -1
- package/dist/tools/circuit-breaker.js +22 -11
- package/dist/tools/circuit-breaker.js.map +1 -1
- package/dist/tools/error-tracker.d.ts +28 -44
- package/dist/tools/error-tracker.d.ts.map +1 -1
- package/dist/tools/error-tracker.js +39 -156
- package/dist/tools/error-tracker.js.map +1 -1
- package/dist/tools/tool-filter.d.ts +70 -0
- package/dist/tools/tool-filter.d.ts.map +1 -0
- package/dist/tools/tool-filter.js +92 -0
- package/dist/tools/tool-filter.js.map +1 -0
- package/dist/tools/tool-output-truncator.d.ts +36 -0
- package/dist/tools/tool-output-truncator.d.ts.map +1 -0
- package/dist/tools/tool-output-truncator.js +117 -0
- package/dist/tools/tool-output-truncator.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +25 -9
- package/dist/tools/tool-registry.d.ts.map +1 -1
- package/dist/tools/tool-registry.js +77 -28
- package/dist/tools/tool-registry.js.map +1 -1
- package/dist/tools/tool-validator.d.ts +13 -0
- package/dist/tools/tool-validator.d.ts.map +1 -0
- package/dist/tools/tool-validator.js +116 -0
- package/dist/tools/tool-validator.js.map +1 -0
- package/dist/tools/types.d.ts +86 -3
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js +51 -2
- package/dist/tools/types.js.map +1 -1
- package/dist/trace/trace-logger.d.ts +30 -4
- package/dist/trace/trace-logger.d.ts.map +1 -1
- package/dist/trace/trace-logger.js +82 -6
- package/dist/trace/trace-logger.js.map +1 -1
- package/package.json +13 -4
- package/dist/compression/sliding-window.d.ts +0 -21
- package/dist/compression/sliding-window.d.ts.map +0 -1
- package/dist/compression/sliding-window.js +0 -44
- package/dist/compression/sliding-window.js.map +0 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/** Memory type. */
|
|
2
|
+
export type MemoryType = "rule" | "project";
|
|
3
|
+
/**
|
|
4
|
+
* A single memory entry.
|
|
5
|
+
*
|
|
6
|
+
* **Rule**: a constraint the user set — why they required it, and when it
|
|
7
|
+
* takes effect. Example: "Always use kebab-case for file names."
|
|
8
|
+
*
|
|
9
|
+
* **Project**: a fact or decision about the project — what happened, why
|
|
10
|
+
* (constraint / deadline that drove it), and how the agent should apply it.
|
|
11
|
+
* Example: "We switched from MySQL to PostgreSQL because of JSONB support."
|
|
12
|
+
*/
|
|
13
|
+
export interface Memory {
|
|
14
|
+
/** Slug (kebab-case, used as filename). */
|
|
15
|
+
name: string;
|
|
16
|
+
/** One-line summary shown in the index. */
|
|
17
|
+
description: string;
|
|
18
|
+
/** Memory type. */
|
|
19
|
+
type: MemoryType;
|
|
20
|
+
/** Markdown body. For rules: why + when. For projects: fact + why + how to apply. */
|
|
21
|
+
content: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Long-term memory manager (index + individual files).
|
|
25
|
+
*
|
|
26
|
+
* Storage layout:
|
|
27
|
+
* ```
|
|
28
|
+
* .memory/
|
|
29
|
+
* MEMORY.md ← index (200 lines + 25 KB dual limit)
|
|
30
|
+
* <name>.md ← individual memory files with frontmatter
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* Usage:
|
|
34
|
+
* ```ts
|
|
35
|
+
* const mem = new MemoryManager({ storageDir: ".memory" });
|
|
36
|
+
* mem.add({ name: "use-kebab-case", description: "File naming convention",
|
|
37
|
+
* type: "rule", content: "...why and when..." });
|
|
38
|
+
* // Later: inject into system prompt
|
|
39
|
+
* const hint = mem.buildPromptHint();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare class MemoryManager {
|
|
43
|
+
private index;
|
|
44
|
+
private storageDir;
|
|
45
|
+
private indexFile;
|
|
46
|
+
private lastLoadedMtime;
|
|
47
|
+
constructor(storageDir?: string);
|
|
48
|
+
/**
|
|
49
|
+
* Add or update a memory entry.
|
|
50
|
+
*
|
|
51
|
+
* If a memory with the same `name` already exists it is overwritten.
|
|
52
|
+
* When the index exceeds the 200-line / 25 KB limit, the oldest entries
|
|
53
|
+
* are silently removed to make room.
|
|
54
|
+
*/
|
|
55
|
+
add(memory: Memory): void;
|
|
56
|
+
/**
|
|
57
|
+
* Remove a memory by name.
|
|
58
|
+
*/
|
|
59
|
+
remove(name: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Check if a memory exists by name.
|
|
62
|
+
*/
|
|
63
|
+
has(name: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Get a single memory by name (loads full content from disk).
|
|
66
|
+
*/
|
|
67
|
+
get(name: string): Memory | null;
|
|
68
|
+
/**
|
|
69
|
+
* Get all memories (loads full content from disk).
|
|
70
|
+
*/
|
|
71
|
+
getAll(): Memory[];
|
|
72
|
+
/**
|
|
73
|
+
* Get memories by type.
|
|
74
|
+
*/
|
|
75
|
+
getByType(type: MemoryType): Memory[];
|
|
76
|
+
/**
|
|
77
|
+
* Total number of memories.
|
|
78
|
+
*/
|
|
79
|
+
get count(): number;
|
|
80
|
+
/**
|
|
81
|
+
* Build a compact system-prompt hint listing memory names + type badges.
|
|
82
|
+
*
|
|
83
|
+
* Full content is loaded on demand via the `recall` tool, keeping the
|
|
84
|
+
* system prompt lean. Each line is ~50 chars so the full index of 200
|
|
85
|
+
* entries stays under ~2500 tokens.
|
|
86
|
+
*
|
|
87
|
+
* The content is LLM-generated (via the `remember` tool), so it is
|
|
88
|
+
* wrapped with {@link wrapUntrusted} boundary markers and scanned for
|
|
89
|
+
* prompt-injection signatures before being returned. This prevents
|
|
90
|
+
* the LLM from accidentally poisoning its own system prompt via
|
|
91
|
+
* memory names.
|
|
92
|
+
*/
|
|
93
|
+
buildPromptHint(): string;
|
|
94
|
+
/**
|
|
95
|
+
* Re-read the MEMORY.md index from disk if it was modified since the
|
|
96
|
+
* last load. Returns true when a reload occurred.
|
|
97
|
+
*
|
|
98
|
+
* Individual memory files are NOT reloaded — the index is lightweight,
|
|
99
|
+
* and full memory content is fetched on demand via the `recall` tool.
|
|
100
|
+
*/
|
|
101
|
+
reloadIfChanged(): boolean;
|
|
102
|
+
private memoryPath;
|
|
103
|
+
private ensureDir;
|
|
104
|
+
private formatFile;
|
|
105
|
+
private loadFile;
|
|
106
|
+
private parseFile;
|
|
107
|
+
private persistIndex;
|
|
108
|
+
private loadIndex;
|
|
109
|
+
private parseIndex;
|
|
110
|
+
private inferType;
|
|
111
|
+
/**
|
|
112
|
+
* Silently remove the oldest entries until both the line and byte limits
|
|
113
|
+
* are satisfied. Index entries are ordered oldest-first, so we shift from
|
|
114
|
+
* the front until the computed index content fits.
|
|
115
|
+
*/
|
|
116
|
+
private pruneIfNeeded;
|
|
117
|
+
private buildIndexContent;
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=memory-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../../src/memory/memory-manager.ts"],"names":[],"mappings":"AAUA,mBAAmB;AACnB,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5C;;;;;;;;;GASG;AACH,MAAM,WAAW,MAAM;IACrB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAC;CACjB;AAgBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAa;gBAExB,UAAU,CAAC,EAAE,MAAM;IAS/B;;;;;;OAMG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAwBzB;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAa7B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMhC;;OAEG;IACH,MAAM,IAAI,MAAM,EAAE;IASlB;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE;IAIrC;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAID;;;;;;;;;;;;OAYG;IACH,eAAe,IAAI,MAAM;IAuBzB;;;;;;OAMG;IACH,eAAe,IAAI,OAAO;IAiB1B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,SAAS;IAuBjB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,SAAS;IAOjB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,iBAAiB;CAO1B"}
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MemoryManager = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const boundaries_1 = require("../security/boundaries");
|
|
40
|
+
// ─── Limits ──────────────────────────────────────────────────────────────────
|
|
41
|
+
const MAX_INDEX_LINES = 200;
|
|
42
|
+
const MAX_INDEX_BYTES = 25 * 1024; // 25 KB
|
|
43
|
+
// ─── MemoryManager ────────────────────────────────────────────────────────────
|
|
44
|
+
/**
|
|
45
|
+
* Long-term memory manager (index + individual files).
|
|
46
|
+
*
|
|
47
|
+
* Storage layout:
|
|
48
|
+
* ```
|
|
49
|
+
* .memory/
|
|
50
|
+
* MEMORY.md ← index (200 lines + 25 KB dual limit)
|
|
51
|
+
* <name>.md ← individual memory files with frontmatter
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* Usage:
|
|
55
|
+
* ```ts
|
|
56
|
+
* const mem = new MemoryManager({ storageDir: ".memory" });
|
|
57
|
+
* mem.add({ name: "use-kebab-case", description: "File naming convention",
|
|
58
|
+
* type: "rule", content: "...why and when..." });
|
|
59
|
+
* // Later: inject into system prompt
|
|
60
|
+
* const hint = mem.buildPromptHint();
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
class MemoryManager {
|
|
64
|
+
index = [];
|
|
65
|
+
storageDir;
|
|
66
|
+
indexFile;
|
|
67
|
+
lastLoadedMtime = 0;
|
|
68
|
+
constructor(storageDir) {
|
|
69
|
+
this.storageDir = path.resolve(storageDir ?? ".memory");
|
|
70
|
+
this.indexFile = path.join(this.storageDir, "MEMORY.md");
|
|
71
|
+
this.ensureDir();
|
|
72
|
+
this.loadIndex();
|
|
73
|
+
}
|
|
74
|
+
// ─── Write ──────────────────────────────────────────────────────────────
|
|
75
|
+
/**
|
|
76
|
+
* Add or update a memory entry.
|
|
77
|
+
*
|
|
78
|
+
* If a memory with the same `name` already exists it is overwritten.
|
|
79
|
+
* When the index exceeds the 200-line / 25 KB limit, the oldest entries
|
|
80
|
+
* are silently removed to make room.
|
|
81
|
+
*/
|
|
82
|
+
add(memory) {
|
|
83
|
+
// Write individual file
|
|
84
|
+
const filePath = this.memoryPath(memory.name);
|
|
85
|
+
const fileContent = this.formatFile(memory);
|
|
86
|
+
fs.writeFileSync(filePath, fileContent, "utf-8");
|
|
87
|
+
// Update in-memory index (upsert)
|
|
88
|
+
const existing = this.index.findIndex((e) => e.name === memory.name);
|
|
89
|
+
const entry = {
|
|
90
|
+
name: memory.name,
|
|
91
|
+
description: memory.description,
|
|
92
|
+
type: memory.type,
|
|
93
|
+
};
|
|
94
|
+
if (existing >= 0) {
|
|
95
|
+
this.index[existing] = entry;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.index.push(entry);
|
|
99
|
+
}
|
|
100
|
+
// Prune oldest if over limits
|
|
101
|
+
this.pruneIfNeeded();
|
|
102
|
+
this.persistIndex();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Remove a memory by name.
|
|
106
|
+
*/
|
|
107
|
+
remove(name) {
|
|
108
|
+
const idx = this.index.findIndex((e) => e.name === name);
|
|
109
|
+
if (idx === -1)
|
|
110
|
+
return false;
|
|
111
|
+
try {
|
|
112
|
+
fs.unlinkSync(this.memoryPath(name));
|
|
113
|
+
}
|
|
114
|
+
catch { /* already gone */ }
|
|
115
|
+
this.index.splice(idx, 1);
|
|
116
|
+
this.persistIndex();
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
// ─── Read ───────────────────────────────────────────────────────────────
|
|
120
|
+
/**
|
|
121
|
+
* Check if a memory exists by name.
|
|
122
|
+
*/
|
|
123
|
+
has(name) {
|
|
124
|
+
return this.index.some((e) => e.name === name);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get a single memory by name (loads full content from disk).
|
|
128
|
+
*/
|
|
129
|
+
get(name) {
|
|
130
|
+
const entry = this.index.find((e) => e.name === name);
|
|
131
|
+
if (!entry)
|
|
132
|
+
return null;
|
|
133
|
+
return this.loadFile(name);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get all memories (loads full content from disk).
|
|
137
|
+
*/
|
|
138
|
+
getAll() {
|
|
139
|
+
const results = [];
|
|
140
|
+
for (const e of this.index) {
|
|
141
|
+
const m = this.loadFile(e.name);
|
|
142
|
+
if (m)
|
|
143
|
+
results.push(m);
|
|
144
|
+
}
|
|
145
|
+
return results;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get memories by type.
|
|
149
|
+
*/
|
|
150
|
+
getByType(type) {
|
|
151
|
+
return this.getAll().filter((m) => m.type === type);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Total number of memories.
|
|
155
|
+
*/
|
|
156
|
+
get count() {
|
|
157
|
+
return this.index.length;
|
|
158
|
+
}
|
|
159
|
+
// ─── Prompt Injection ───────────────────────────────────────────────────
|
|
160
|
+
/**
|
|
161
|
+
* Build a compact system-prompt hint listing memory names + type badges.
|
|
162
|
+
*
|
|
163
|
+
* Full content is loaded on demand via the `recall` tool, keeping the
|
|
164
|
+
* system prompt lean. Each line is ~50 chars so the full index of 200
|
|
165
|
+
* entries stays under ~2500 tokens.
|
|
166
|
+
*
|
|
167
|
+
* The content is LLM-generated (via the `remember` tool), so it is
|
|
168
|
+
* wrapped with {@link wrapUntrusted} boundary markers and scanned for
|
|
169
|
+
* prompt-injection signatures before being returned. This prevents
|
|
170
|
+
* the LLM from accidentally poisoning its own system prompt via
|
|
171
|
+
* memory names.
|
|
172
|
+
*/
|
|
173
|
+
buildPromptHint() {
|
|
174
|
+
if (this.index.length === 0)
|
|
175
|
+
return "";
|
|
176
|
+
const names = this.index.map((e) => `- ${e.name} (\`${e.type}\`)`);
|
|
177
|
+
const body = "## Long-Term Memories (" +
|
|
178
|
+
this.index.length +
|
|
179
|
+
" entries — use the `recall` tool to load full content)\n" +
|
|
180
|
+
names.join("\n");
|
|
181
|
+
// Scan for prompt-injection signatures in LLM-generated content.
|
|
182
|
+
// Memory names and descriptions are authored by the LLM via the
|
|
183
|
+
// `remember` tool — they could contain injection text that would
|
|
184
|
+
// poison future runs when re-injected into the system prompt.
|
|
185
|
+
const patterns = (0, boundaries_1.detectInjectionSignatures)(body);
|
|
186
|
+
const warning = (0, boundaries_1.buildInjectionWarning)(patterns, "memory index");
|
|
187
|
+
// Wrap as untrusted data (LLM-authored, not user-authored)
|
|
188
|
+
const wrapped = (0, boundaries_1.wrapUntrusted)("memory-index", body);
|
|
189
|
+
return "\n\n" + warning + wrapped;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Re-read the MEMORY.md index from disk if it was modified since the
|
|
193
|
+
* last load. Returns true when a reload occurred.
|
|
194
|
+
*
|
|
195
|
+
* Individual memory files are NOT reloaded — the index is lightweight,
|
|
196
|
+
* and full memory content is fetched on demand via the `recall` tool.
|
|
197
|
+
*/
|
|
198
|
+
reloadIfChanged() {
|
|
199
|
+
try {
|
|
200
|
+
const stat = fs.statSync(this.indexFile);
|
|
201
|
+
if (stat.mtimeMs === this.lastLoadedMtime)
|
|
202
|
+
return false;
|
|
203
|
+
this.lastLoadedMtime = stat.mtimeMs;
|
|
204
|
+
const raw = fs.readFileSync(this.indexFile, "utf-8");
|
|
205
|
+
this.index = this.parseIndex(raw);
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
this.lastLoadedMtime = 0;
|
|
210
|
+
this.index = [];
|
|
211
|
+
return true; // file was deleted — prompt needs updating
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// ─── Persistence ────────────────────────────────────────────────────────
|
|
215
|
+
memoryPath(name) {
|
|
216
|
+
return path.join(this.storageDir, `${name}.md`);
|
|
217
|
+
}
|
|
218
|
+
ensureDir() {
|
|
219
|
+
if (!fs.existsSync(this.storageDir)) {
|
|
220
|
+
fs.mkdirSync(this.storageDir, { recursive: true });
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
formatFile(memory) {
|
|
224
|
+
return [
|
|
225
|
+
"---",
|
|
226
|
+
`name: ${memory.name}`,
|
|
227
|
+
`description: ${memory.description}`,
|
|
228
|
+
`type: ${memory.type}`,
|
|
229
|
+
"---",
|
|
230
|
+
"",
|
|
231
|
+
memory.content,
|
|
232
|
+
].join("\n");
|
|
233
|
+
}
|
|
234
|
+
loadFile(name) {
|
|
235
|
+
try {
|
|
236
|
+
const raw = fs.readFileSync(this.memoryPath(name), "utf-8");
|
|
237
|
+
return this.parseFile(raw);
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
parseFile(raw) {
|
|
244
|
+
const match = raw.match(/^---\n([\s\S]*?)\n---\n\n([\s\S]*)$/);
|
|
245
|
+
if (!match)
|
|
246
|
+
return null;
|
|
247
|
+
const frontmatter = {};
|
|
248
|
+
for (const line of match[1].split("\n")) {
|
|
249
|
+
const kv = line.match(/^(\w+):\s*(.+)$/);
|
|
250
|
+
if (kv)
|
|
251
|
+
frontmatter[kv[1]] = kv[2];
|
|
252
|
+
}
|
|
253
|
+
const name = frontmatter["name"];
|
|
254
|
+
const description = frontmatter["description"];
|
|
255
|
+
const type = frontmatter["type"];
|
|
256
|
+
const content = match[2];
|
|
257
|
+
if (!name || !description || !type)
|
|
258
|
+
return null;
|
|
259
|
+
if (type !== "rule" && type !== "project")
|
|
260
|
+
return null;
|
|
261
|
+
return { name, description, type, content };
|
|
262
|
+
}
|
|
263
|
+
// ─── Index Persistence ──────────────────────────────────────────────────
|
|
264
|
+
persistIndex() {
|
|
265
|
+
const lines = [];
|
|
266
|
+
for (const e of this.index) {
|
|
267
|
+
const line = `- [${e.name}](${e.name}.md) — ${e.description}`;
|
|
268
|
+
lines.push(line);
|
|
269
|
+
}
|
|
270
|
+
const content = lines.join("\n") + (lines.length > 0 ? "\n" : "");
|
|
271
|
+
fs.writeFileSync(this.indexFile, content, "utf-8");
|
|
272
|
+
}
|
|
273
|
+
loadIndex() {
|
|
274
|
+
try {
|
|
275
|
+
const stat = fs.statSync(this.indexFile);
|
|
276
|
+
this.lastLoadedMtime = stat.mtimeMs;
|
|
277
|
+
const raw = fs.readFileSync(this.indexFile, "utf-8");
|
|
278
|
+
this.index = this.parseIndex(raw);
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
this.lastLoadedMtime = 0;
|
|
282
|
+
this.index = [];
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
parseIndex(raw) {
|
|
286
|
+
const entries = [];
|
|
287
|
+
const lines = raw.split("\n");
|
|
288
|
+
for (const line of lines) {
|
|
289
|
+
const match = line.match(/^- \[(.+?)\]\((.+?)\.md\) — (.+)$/);
|
|
290
|
+
if (!match)
|
|
291
|
+
continue;
|
|
292
|
+
const name = match[1];
|
|
293
|
+
const description = match[3];
|
|
294
|
+
// Infer type from the individual file (fallback to "project" if unreadable)
|
|
295
|
+
const type = this.inferType(name);
|
|
296
|
+
entries.push({ name, description, type });
|
|
297
|
+
}
|
|
298
|
+
return entries;
|
|
299
|
+
}
|
|
300
|
+
inferType(name) {
|
|
301
|
+
const m = this.loadFile(name);
|
|
302
|
+
return m?.type ?? "project";
|
|
303
|
+
}
|
|
304
|
+
// ─── Limit Enforcement ──────────────────────────────────────────────────
|
|
305
|
+
/**
|
|
306
|
+
* Silently remove the oldest entries until both the line and byte limits
|
|
307
|
+
* are satisfied. Index entries are ordered oldest-first, so we shift from
|
|
308
|
+
* the front until the computed index content fits.
|
|
309
|
+
*/
|
|
310
|
+
pruneIfNeeded() {
|
|
311
|
+
let raw = this.buildIndexContent();
|
|
312
|
+
let lines = raw.split("\n").length;
|
|
313
|
+
let bytes = Buffer.byteLength(raw, "utf-8");
|
|
314
|
+
while (this.index.length > 0 && (lines > MAX_INDEX_LINES || bytes > MAX_INDEX_BYTES)) {
|
|
315
|
+
const removed = this.index.pop();
|
|
316
|
+
try {
|
|
317
|
+
fs.unlinkSync(this.memoryPath(removed.name));
|
|
318
|
+
}
|
|
319
|
+
catch { /* ok */ }
|
|
320
|
+
raw = this.buildIndexContent();
|
|
321
|
+
lines = raw.split("\n").length;
|
|
322
|
+
bytes = Buffer.byteLength(raw, "utf-8");
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
buildIndexContent() {
|
|
326
|
+
const lines = [];
|
|
327
|
+
for (const e of this.index) {
|
|
328
|
+
lines.push(`- [${e.name}](${e.name}.md) — ${e.description}`);
|
|
329
|
+
}
|
|
330
|
+
return lines.join("\n") + (lines.length > 0 ? "\n" : "");
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
exports.MemoryManager = MemoryManager;
|
|
334
|
+
//# sourceMappingURL=memory-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../src/memory/memory-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/messages/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/messages/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,IAAI;IACd,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/messages/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,IAAI;IACd,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,IAAI,SAAS;CACd;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { OrchestratorAgent } from "./orchestrator-agent";
|
|
2
|
+
export type { OrchestratorAgentConfig } from "./orchestrator-agent";
|
|
3
|
+
export type { TaskNode, TaskNodeStatus, TaskGraph, OrchestrationPlan, SynthesisResult, AdaptResult, OrchestratorSessionState, } from "./orchestrator-types";
|
|
4
|
+
export { parseDecomposeResponse, parseSynthesizeResponse, parseAdaptResponse, buildDecomposePrompt, buildSynthesizePrompt, buildAdaptPrompt, } from "./orchestrator-response";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildAdaptPrompt = exports.buildSynthesizePrompt = exports.buildDecomposePrompt = exports.parseAdaptResponse = exports.parseSynthesizeResponse = exports.parseDecomposeResponse = exports.OrchestratorAgent = void 0;
|
|
4
|
+
var orchestrator_agent_1 = require("./orchestrator-agent");
|
|
5
|
+
Object.defineProperty(exports, "OrchestratorAgent", { enumerable: true, get: function () { return orchestrator_agent_1.OrchestratorAgent; } });
|
|
6
|
+
var orchestrator_response_1 = require("./orchestrator-response");
|
|
7
|
+
Object.defineProperty(exports, "parseDecomposeResponse", { enumerable: true, get: function () { return orchestrator_response_1.parseDecomposeResponse; } });
|
|
8
|
+
Object.defineProperty(exports, "parseSynthesizeResponse", { enumerable: true, get: function () { return orchestrator_response_1.parseSynthesizeResponse; } });
|
|
9
|
+
Object.defineProperty(exports, "parseAdaptResponse", { enumerable: true, get: function () { return orchestrator_response_1.parseAdaptResponse; } });
|
|
10
|
+
Object.defineProperty(exports, "buildDecomposePrompt", { enumerable: true, get: function () { return orchestrator_response_1.buildDecomposePrompt; } });
|
|
11
|
+
Object.defineProperty(exports, "buildSynthesizePrompt", { enumerable: true, get: function () { return orchestrator_response_1.buildSynthesizePrompt; } });
|
|
12
|
+
Object.defineProperty(exports, "buildAdaptPrompt", { enumerable: true, get: function () { return orchestrator_response_1.buildAdaptPrompt; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/orchestrator/index.ts"],"names":[],"mappings":";;;AAAA,2DAAyD;AAAhD,uHAAA,iBAAiB,OAAA;AAW1B,iEAOiC;AAN/B,+HAAA,sBAAsB,OAAA;AACtB,gIAAA,uBAAuB,OAAA;AACvB,2HAAA,kBAAkB,OAAA;AAClB,6HAAA,oBAAoB,OAAA;AACpB,8HAAA,qBAAqB,OAAA;AACrB,yHAAA,gBAAgB,OAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared JSON extraction utility.
|
|
3
|
+
*
|
|
4
|
+
* Extracts a JSON object string from LLM output that may contain markdown
|
|
5
|
+
* fences, surrounding prose, or minor formatting issues.
|
|
6
|
+
*
|
|
7
|
+
* This is a copy of the logic in src/core/response-schema.ts kept here to
|
|
8
|
+
* avoid a circular dependency (response-schema.ts imports system-prompt
|
|
9
|
+
* fragments that the orchestrator does not need).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Try to extract a JSON object from a string that may contain
|
|
13
|
+
* markdown, extra text, malformed newlines, or other noise.
|
|
14
|
+
*
|
|
15
|
+
* Returns the JSON string if found, or null.
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractJSON(text: string): string | null;
|
|
18
|
+
//# sourceMappingURL=json-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-extractor.d.ts","sourceRoot":"","sources":["../../src/orchestrator/json-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBvD"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared JSON extraction utility.
|
|
4
|
+
*
|
|
5
|
+
* Extracts a JSON object string from LLM output that may contain markdown
|
|
6
|
+
* fences, surrounding prose, or minor formatting issues.
|
|
7
|
+
*
|
|
8
|
+
* This is a copy of the logic in src/core/response-schema.ts kept here to
|
|
9
|
+
* avoid a circular dependency (response-schema.ts imports system-prompt
|
|
10
|
+
* fragments that the orchestrator does not need).
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.extractJSON = extractJSON;
|
|
14
|
+
/**
|
|
15
|
+
* Try to extract a JSON object from a string that may contain
|
|
16
|
+
* markdown, extra text, malformed newlines, or other noise.
|
|
17
|
+
*
|
|
18
|
+
* Returns the JSON string if found, or null.
|
|
19
|
+
*/
|
|
20
|
+
function extractJSON(text) {
|
|
21
|
+
if (!text)
|
|
22
|
+
return null;
|
|
23
|
+
// Try with progressively more aggressive cleanup
|
|
24
|
+
const variants = [
|
|
25
|
+
text.trim(),
|
|
26
|
+
cleanupJSON(text.trim()),
|
|
27
|
+
text.trim().replace(/\n/g, " ").replace(/\r/g, ""),
|
|
28
|
+
];
|
|
29
|
+
// De-duplicate variants
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
const uniqueVariants = variants.filter((v) => {
|
|
32
|
+
if (seen.has(v))
|
|
33
|
+
return false;
|
|
34
|
+
seen.add(v);
|
|
35
|
+
return true;
|
|
36
|
+
});
|
|
37
|
+
for (const variant of uniqueVariants) {
|
|
38
|
+
const result = tryExtractJSON(variant);
|
|
39
|
+
if (result)
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
function tryExtractJSON(text) {
|
|
45
|
+
if (isValidJSON(text))
|
|
46
|
+
return text;
|
|
47
|
+
// Try extracting from markdown code blocks: ```json ... ```
|
|
48
|
+
const blockMatch = text.match(/```(?:json)?\s*(\{[\s\S]*?\})\s*```/);
|
|
49
|
+
if (blockMatch && isValidJSON(blockMatch[1]))
|
|
50
|
+
return blockMatch[1];
|
|
51
|
+
// Try finding the first { ... } with balanced braces
|
|
52
|
+
const braceStart = text.indexOf("{");
|
|
53
|
+
if (braceStart >= 0) {
|
|
54
|
+
const fromBrace = text.slice(braceStart);
|
|
55
|
+
const result = extractBalancedBraces(fromBrace);
|
|
56
|
+
if (result)
|
|
57
|
+
return result;
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
function extractBalancedBraces(text) {
|
|
62
|
+
let depth = 0;
|
|
63
|
+
let inString = false;
|
|
64
|
+
let escapeNext = false;
|
|
65
|
+
for (let i = 0; i < text.length; i++) {
|
|
66
|
+
const ch = text[i];
|
|
67
|
+
if (inString) {
|
|
68
|
+
if (escapeNext) {
|
|
69
|
+
escapeNext = false;
|
|
70
|
+
}
|
|
71
|
+
else if (ch === "\\") {
|
|
72
|
+
escapeNext = true;
|
|
73
|
+
}
|
|
74
|
+
else if (ch === '"') {
|
|
75
|
+
inString = false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
if (ch === '"') {
|
|
80
|
+
inString = true;
|
|
81
|
+
escapeNext = false;
|
|
82
|
+
}
|
|
83
|
+
else if (ch === "{") {
|
|
84
|
+
depth++;
|
|
85
|
+
}
|
|
86
|
+
else if (ch === "}") {
|
|
87
|
+
depth--;
|
|
88
|
+
if (depth === 0) {
|
|
89
|
+
const candidate = text.slice(0, i + 1);
|
|
90
|
+
if (isValidJSON(candidate))
|
|
91
|
+
return candidate;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
function cleanupJSON(text) {
|
|
100
|
+
return text.replace(/\r\n/g, "\n").replace(/\r/g, "");
|
|
101
|
+
}
|
|
102
|
+
function isValidJSON(text) {
|
|
103
|
+
try {
|
|
104
|
+
JSON.parse(text);
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=json-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-extractor.js","sourceRoot":"","sources":["../../src/orchestrator/json-extractor.ts"],"names":[],"mappings":"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"}
|