maskweaver 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agents/dummy-human.md +31 -0
- package/assets/agents/dummy-template.md +57 -0
- package/assets/agents/mask-master.md +225 -0
- package/assets/masks/ai-ml/andrew-ng.yaml +207 -0
- package/assets/masks/architecture/jeff-dean.yaml +208 -0
- package/assets/masks/index.json +65 -0
- package/assets/masks/software-engineering/dan-abramov.yaml +188 -0
- package/assets/masks/software-engineering/kent-beck.yaml +191 -0
- package/assets/masks/software-engineering/linus-torvalds.yaml +152 -0
- package/assets/masks/software-engineering/martin-fowler.yaml +173 -0
- package/dist/cli/install.d.ts +11 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +299 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/context/config.d.ts +38 -0
- package/dist/context/config.d.ts.map +1 -0
- package/dist/context/config.js +55 -0
- package/dist/context/config.js.map +1 -0
- package/dist/context/feature.d.ts +49 -0
- package/dist/context/feature.d.ts.map +1 -0
- package/dist/context/feature.js +290 -0
- package/dist/context/feature.js.map +1 -0
- package/dist/context/files.d.ts +17 -0
- package/dist/context/files.d.ts.map +1 -0
- package/dist/context/files.js +50 -0
- package/dist/context/files.js.map +1 -0
- package/dist/context/index.d.ts +14 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +18 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/project.d.ts +26 -0
- package/dist/context/project.d.ts.map +1 -0
- package/dist/context/project.js +95 -0
- package/dist/context/project.js.map +1 -0
- package/dist/context/types.d.ts +72 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +14 -0
- package/dist/context/types.js.map +1 -0
- package/dist/context/utils.d.ts +22 -0
- package/dist/context/utils.d.ts.map +1 -0
- package/dist/context/utils.js +40 -0
- package/dist/context/utils.js.map +1 -0
- package/dist/core/engine/promptBuilder.d.ts +32 -0
- package/dist/core/engine/promptBuilder.d.ts.map +1 -0
- package/dist/core/engine/promptBuilder.js +117 -0
- package/dist/core/engine/promptBuilder.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/loader/MaskLoader.d.ts +47 -0
- package/dist/core/loader/MaskLoader.d.ts.map +1 -0
- package/dist/core/loader/MaskLoader.js +132 -0
- package/dist/core/loader/MaskLoader.js.map +1 -0
- package/dist/core/schema/types.d.ts +128 -0
- package/dist/core/schema/types.d.ts.map +1 -0
- package/dist/core/schema/types.js +8 -0
- package/dist/core/schema/types.js.map +1 -0
- package/dist/core/schema/validator.d.ts +290 -0
- package/dist/core/schema/validator.d.ts.map +1 -0
- package/dist/core/schema/validator.js +105 -0
- package/dist/core/schema/validator.js.map +1 -0
- package/dist/i18n/index.d.ts +33 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +57 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.json +16 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/chunking.d.ts +35 -0
- package/dist/memory/chunking.d.ts.map +1 -0
- package/dist/memory/chunking.js +168 -0
- package/dist/memory/chunking.js.map +1 -0
- package/dist/memory/core.d.ts +73 -0
- package/dist/memory/core.d.ts.map +1 -0
- package/dist/memory/core.js +186 -0
- package/dist/memory/core.js.map +1 -0
- package/dist/memory/index.d.ts +21 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +22 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/indexer.d.ts +37 -0
- package/dist/memory/indexer.d.ts.map +1 -0
- package/dist/memory/indexer.js +162 -0
- package/dist/memory/indexer.js.map +1 -0
- package/dist/memory/providers/examples.d.ts +17 -0
- package/dist/memory/providers/examples.d.ts.map +1 -0
- package/dist/memory/providers/examples.js +271 -0
- package/dist/memory/providers/examples.js.map +1 -0
- package/dist/memory/providers/factory.d.ts +49 -0
- package/dist/memory/providers/factory.d.ts.map +1 -0
- package/dist/memory/providers/factory.js +111 -0
- package/dist/memory/providers/factory.js.map +1 -0
- package/dist/memory/providers/index.d.ts +34 -0
- package/dist/memory/providers/index.d.ts.map +1 -0
- package/dist/memory/providers/index.js +35 -0
- package/dist/memory/providers/index.js.map +1 -0
- package/dist/memory/providers/ollama.d.ts +18 -0
- package/dist/memory/providers/ollama.d.ts.map +1 -0
- package/dist/memory/providers/ollama.js +68 -0
- package/dist/memory/providers/ollama.js.map +1 -0
- package/dist/memory/providers/openai.d.ts +21 -0
- package/dist/memory/providers/openai.d.ts.map +1 -0
- package/dist/memory/providers/openai.js +91 -0
- package/dist/memory/providers/openai.js.map +1 -0
- package/dist/memory/providers/openrouter.d.ts +22 -0
- package/dist/memory/providers/openrouter.d.ts.map +1 -0
- package/dist/memory/providers/openrouter.js +89 -0
- package/dist/memory/providers/openrouter.js.map +1 -0
- package/dist/memory/providers/text-only.d.ts +20 -0
- package/dist/memory/providers/text-only.d.ts.map +1 -0
- package/dist/memory/providers/text-only.js +35 -0
- package/dist/memory/providers/text-only.js.map +1 -0
- package/dist/memory/providers/types.d.ts +63 -0
- package/dist/memory/providers/types.d.ts.map +1 -0
- package/dist/memory/providers/types.js +9 -0
- package/dist/memory/providers/types.js.map +1 -0
- package/dist/memory/providers/voyage.d.ts +39 -0
- package/dist/memory/providers/voyage.d.ts.map +1 -0
- package/dist/memory/providers/voyage.js +127 -0
- package/dist/memory/providers/voyage.js.map +1 -0
- package/dist/memory/search/hybrid.d.ts +12 -0
- package/dist/memory/search/hybrid.d.ts.map +1 -0
- package/dist/memory/search/hybrid.js +59 -0
- package/dist/memory/search/hybrid.js.map +1 -0
- package/dist/memory/store/sqlite.d.ts +86 -0
- package/dist/memory/store/sqlite.d.ts.map +1 -0
- package/dist/memory/store/sqlite.js +390 -0
- package/dist/memory/store/sqlite.js.map +1 -0
- package/dist/plugin/config/index.d.ts +148 -0
- package/dist/plugin/config/index.d.ts.map +1 -0
- package/dist/plugin/config/index.js +236 -0
- package/dist/plugin/config/index.js.map +1 -0
- package/dist/plugin/index.d.ts +19 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +811 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/tools/context.d.ts +36 -0
- package/dist/plugin/tools/context.d.ts.map +1 -0
- package/dist/plugin/tools/context.js +332 -0
- package/dist/plugin/tools/context.js.map +1 -0
- package/dist/plugin/tools/maskSave.d.ts +6 -0
- package/dist/plugin/tools/maskSave.d.ts.map +1 -0
- package/dist/plugin/tools/maskSave.js +42 -0
- package/dist/plugin/tools/maskSave.js.map +1 -0
- package/dist/plugin/tools/memoryGet.d.ts +21 -0
- package/dist/plugin/tools/memoryGet.d.ts.map +1 -0
- package/dist/plugin/tools/memoryGet.js +40 -0
- package/dist/plugin/tools/memoryGet.js.map +1 -0
- package/dist/plugin/tools/memoryIndexer.d.ts +6 -0
- package/dist/plugin/tools/memoryIndexer.d.ts.map +1 -0
- package/dist/plugin/tools/memoryIndexer.js +75 -0
- package/dist/plugin/tools/memoryIndexer.js.map +1 -0
- package/dist/plugin/tools/memorySearch.d.ts +74 -0
- package/dist/plugin/tools/memorySearch.d.ts.map +1 -0
- package/dist/plugin/tools/memorySearch.js +172 -0
- package/dist/plugin/tools/memorySearch.js.map +1 -0
- package/dist/plugin/tools/memoryWrite.d.ts +11 -0
- package/dist/plugin/tools/memoryWrite.d.ts.map +1 -0
- package/dist/plugin/tools/memoryWrite.js +161 -0
- package/dist/plugin/tools/memoryWrite.js.map +1 -0
- package/dist/plugin/tools/retrospect.d.ts +6 -0
- package/dist/plugin/tools/retrospect.d.ts.map +1 -0
- package/dist/plugin/tools/retrospect.js +46 -0
- package/dist/plugin/tools/retrospect.js.map +1 -0
- package/dist/plugin/types.d.ts +34 -0
- package/dist/plugin/types.d.ts.map +1 -0
- package/dist/plugin/types.js +7 -0
- package/dist/plugin/types.js.map +1 -0
- package/dist/retrospect/index.d.ts +14 -0
- package/dist/retrospect/index.d.ts.map +1 -0
- package/dist/retrospect/index.js +13 -0
- package/dist/retrospect/index.js.map +1 -0
- package/dist/retrospect/mask-save.d.ts +31 -0
- package/dist/retrospect/mask-save.d.ts.map +1 -0
- package/dist/retrospect/mask-save.js +263 -0
- package/dist/retrospect/mask-save.js.map +1 -0
- package/dist/retrospect/retrospect.d.ts +24 -0
- package/dist/retrospect/retrospect.d.ts.map +1 -0
- package/dist/retrospect/retrospect.js +165 -0
- package/dist/retrospect/retrospect.js.map +1 -0
- package/dist/retrospect/strategies/base.d.ts +20 -0
- package/dist/retrospect/strategies/base.d.ts.map +1 -0
- package/dist/retrospect/strategies/base.js +9 -0
- package/dist/retrospect/strategies/base.js.map +1 -0
- package/dist/retrospect/strategies/deep.d.ts +18 -0
- package/dist/retrospect/strategies/deep.d.ts.map +1 -0
- package/dist/retrospect/strategies/deep.js +105 -0
- package/dist/retrospect/strategies/deep.js.map +1 -0
- package/dist/retrospect/strategies/index.d.ts +20 -0
- package/dist/retrospect/strategies/index.d.ts.map +1 -0
- package/dist/retrospect/strategies/index.js +27 -0
- package/dist/retrospect/strategies/index.js.map +1 -0
- package/dist/retrospect/strategies/quick.d.ts +18 -0
- package/dist/retrospect/strategies/quick.d.ts.map +1 -0
- package/dist/retrospect/strategies/quick.js +55 -0
- package/dist/retrospect/strategies/quick.js.map +1 -0
- package/dist/retrospect/strategies/standard.d.ts +18 -0
- package/dist/retrospect/strategies/standard.d.ts.map +1 -0
- package/dist/retrospect/strategies/standard.js +66 -0
- package/dist/retrospect/strategies/standard.js.map +1 -0
- package/dist/retrospect/types.d.ts +34 -0
- package/dist/retrospect/types.d.ts.map +1 -0
- package/dist/retrospect/types.js +9 -0
- package/dist/retrospect/types.js.map +1 -0
- package/dist/shared/config.d.ts +130 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +12 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/errors.d.ts +36 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +57 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/index.d.ts +10 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +9 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/types.d.ts +34 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +5 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared-context/index.d.ts +11 -0
- package/dist/shared-context/index.d.ts.map +1 -0
- package/dist/shared-context/index.js +16 -0
- package/dist/shared-context/index.js.map +1 -0
- package/dist/shared-context/logger.d.ts +10 -0
- package/dist/shared-context/logger.d.ts.map +1 -0
- package/dist/shared-context/logger.js +28 -0
- package/dist/shared-context/logger.js.map +1 -0
- package/dist/shared-context/session.d.ts +23 -0
- package/dist/shared-context/session.d.ts.map +1 -0
- package/dist/shared-context/session.js +34 -0
- package/dist/shared-context/session.js.map +1 -0
- package/dist/shared-context/squad.d.ts +30 -0
- package/dist/shared-context/squad.d.ts.map +1 -0
- package/dist/shared-context/squad.js +66 -0
- package/dist/shared-context/squad.js.map +1 -0
- package/dist/shared-context/storage.d.ts +25 -0
- package/dist/shared-context/storage.d.ts.map +1 -0
- package/dist/shared-context/storage.js +66 -0
- package/dist/shared-context/storage.js.map +1 -0
- package/dist/shared-context/types.d.ts +107 -0
- package/dist/shared-context/types.d.ts.map +1 -0
- package/dist/shared-context/types.js +18 -0
- package/dist/shared-context/types.js.map +1 -0
- package/dist/verify/budget.d.ts +45 -0
- package/dist/verify/budget.d.ts.map +1 -0
- package/dist/verify/budget.js +89 -0
- package/dist/verify/budget.js.map +1 -0
- package/dist/verify/critical-files.d.ts +22 -0
- package/dist/verify/critical-files.d.ts.map +1 -0
- package/dist/verify/critical-files.js +130 -0
- package/dist/verify/critical-files.js.map +1 -0
- package/dist/verify/escalation.d.ts +27 -0
- package/dist/verify/escalation.d.ts.map +1 -0
- package/dist/verify/escalation.js +68 -0
- package/dist/verify/escalation.js.map +1 -0
- package/dist/verify/index.d.ts +13 -0
- package/dist/verify/index.d.ts.map +1 -0
- package/dist/verify/index.js +18 -0
- package/dist/verify/index.js.map +1 -0
- package/dist/verify/prompts.d.ts +27 -0
- package/dist/verify/prompts.d.ts.map +1 -0
- package/dist/verify/prompts.js +158 -0
- package/dist/verify/prompts.js.map +1 -0
- package/dist/verify/types.d.ts +80 -0
- package/dist/verify/types.d.ts.map +1 -0
- package/dist/verify/types.js +22 -0
- package/dist/verify/types.js.map +1 -0
- package/dist/verify/verifier.d.ts +47 -0
- package/dist/verify/verifier.d.ts.map +1 -0
- package/dist/verify/verifier.js +180 -0
- package/dist/verify/verifier.js.map +1 -0
- package/masks/ai-ml/andrew-ng.yaml +207 -0
- package/masks/architecture/jeff-dean.yaml +208 -0
- package/masks/index.json +65 -0
- package/masks/orchestration/squad-operator.yaml +205 -0
- package/masks/software-engineering/dan-abramov.yaml +188 -0
- package/masks/software-engineering/kent-beck.yaml +191 -0
- package/masks/software-engineering/linus-torvalds.yaml +152 -0
- package/masks/software-engineering/martin-fowler.yaml +173 -0
- package/package.json +111 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maskweaver - AI Expert Persona System
|
|
3
|
+
*
|
|
4
|
+
* 가면술사: AI 코딩 어시스턴트에게 전문가 인격을 부여하는 시스템
|
|
5
|
+
*
|
|
6
|
+
* @version 0.7.0
|
|
7
|
+
* @author ULJI SOFT <ulgerang@gmail.com>
|
|
8
|
+
* @license MIT
|
|
9
|
+
*/
|
|
10
|
+
export * as core from "./core/index.js";
|
|
11
|
+
export * as shared from "./shared/index.js";
|
|
12
|
+
export * as memory from "./memory/index.js";
|
|
13
|
+
export * as context from "./context/index.js";
|
|
14
|
+
export * as retrospect from "./retrospect/index.js";
|
|
15
|
+
export * as verify from "./verify/index.js";
|
|
16
|
+
export { MaskweaverPlugin, default } from "./plugin/index.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AAGxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAG5C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAG5C,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAG9C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AAGpD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAK5C,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maskweaver - AI Expert Persona System
|
|
3
|
+
*
|
|
4
|
+
* 가면술사: AI 코딩 어시스턴트에게 전문가 인격을 부여하는 시스템
|
|
5
|
+
*
|
|
6
|
+
* @version 0.7.0
|
|
7
|
+
* @author ULJI SOFT <ulgerang@gmail.com>
|
|
8
|
+
* @license MIT
|
|
9
|
+
*/
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Module Exports (use subpath imports for specific modules)
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// Core: Schema, validation, prompt builder
|
|
14
|
+
export * as core from "./core/index.js";
|
|
15
|
+
// Shared: Errors, types, config
|
|
16
|
+
export * as shared from "./shared/index.js";
|
|
17
|
+
// Memory: Embedding, vector search
|
|
18
|
+
export * as memory from "./memory/index.js";
|
|
19
|
+
// Context: Feature context management
|
|
20
|
+
export * as context from "./context/index.js";
|
|
21
|
+
// Retrospect: Session retrospective
|
|
22
|
+
export * as retrospect from "./retrospect/index.js";
|
|
23
|
+
// Verify: Code verification
|
|
24
|
+
export * as verify from "./verify/index.js";
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Plugin Exports (default export)
|
|
27
|
+
// ============================================================================
|
|
28
|
+
export { MaskweaverPlugin, default } from "./plugin/index.js";
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,+EAA+E;AAC/E,4DAA4D;AAC5D,+EAA+E;AAE/E,2CAA2C;AAC3C,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AAExC,gCAAgC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAE5C,mCAAmC;AACnC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAE5C,sCAAsC;AACtC,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAC;AAE9C,oCAAoC;AACpC,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AAEpD,4BAA4B;AAC5B,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAE5C,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Chunking - Break text into manageable pieces
|
|
3
|
+
*
|
|
4
|
+
* Simple line-based chunking with overlap.
|
|
5
|
+
* Preserves context at chunk boundaries.
|
|
6
|
+
*/
|
|
7
|
+
import { type Chunk } from './core.js';
|
|
8
|
+
/**
|
|
9
|
+
* Chunk text into overlapping segments.
|
|
10
|
+
*/
|
|
11
|
+
export declare function chunkText(text: string, filePath: string): Chunk[];
|
|
12
|
+
/**
|
|
13
|
+
* Estimate tokens in text.
|
|
14
|
+
*/
|
|
15
|
+
export declare function estimateTokens(text: string): number;
|
|
16
|
+
/**
|
|
17
|
+
* Split text into sentences.
|
|
18
|
+
* Handles both English and Korean.
|
|
19
|
+
*/
|
|
20
|
+
export declare function splitIntoSentences(text: string): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Markdown section parsing.
|
|
23
|
+
*/
|
|
24
|
+
export interface MarkdownSection {
|
|
25
|
+
header: string;
|
|
26
|
+
content: string;
|
|
27
|
+
level: number;
|
|
28
|
+
startLine: number;
|
|
29
|
+
endLine: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Parse markdown into sections.
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseMarkdownSections(content: string): MarkdownSection[];
|
|
35
|
+
//# sourceMappingURL=chunking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunking.d.ts","sourceRoot":"","sources":["../../src/memory/chunking.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAU,KAAK,KAAK,EAA8C,MAAM,WAAW,CAAC;AAE3F;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,CA6DjE;AAuCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAenD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAgBzD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAoDxE"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text Chunking - Break text into manageable pieces
|
|
3
|
+
*
|
|
4
|
+
* Simple line-based chunking with overlap.
|
|
5
|
+
* Preserves context at chunk boundaries.
|
|
6
|
+
*/
|
|
7
|
+
import { CONFIG, hashText, determineSource } from './core.js';
|
|
8
|
+
/**
|
|
9
|
+
* Chunk text into overlapping segments.
|
|
10
|
+
*/
|
|
11
|
+
export function chunkText(text, filePath) {
|
|
12
|
+
const { maxTokens, overlapTokens, charsPerToken } = CONFIG.chunking;
|
|
13
|
+
const source = determineSource(filePath);
|
|
14
|
+
const lines = text.split('\n');
|
|
15
|
+
const chunks = [];
|
|
16
|
+
const maxChars = maxTokens * charsPerToken;
|
|
17
|
+
const overlapChars = overlapTokens * charsPerToken;
|
|
18
|
+
let currentChunkLines = [];
|
|
19
|
+
let currentChunkStart = 1; // 1-based line number
|
|
20
|
+
let currentLength = 0;
|
|
21
|
+
for (let i = 0; i < lines.length; i++) {
|
|
22
|
+
const line = lines[i];
|
|
23
|
+
const lineLength = line.length + 1; // +1 for newline
|
|
24
|
+
if (currentLength + lineLength <= maxChars) {
|
|
25
|
+
currentChunkLines.push(line);
|
|
26
|
+
currentLength += lineLength;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
// Save current chunk
|
|
30
|
+
if (currentChunkLines.length > 0) {
|
|
31
|
+
const chunkText = currentChunkLines.join('\n');
|
|
32
|
+
if (chunkText.trim().length > 0) {
|
|
33
|
+
chunks.push(createChunk(filePath, currentChunkStart, currentChunkStart + currentChunkLines.length - 1, chunkText, source));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Calculate overlap
|
|
37
|
+
const overlapLines = calculateOverlapLines(currentChunkLines, overlapChars);
|
|
38
|
+
// Start new chunk
|
|
39
|
+
currentChunkStart = i + 1 - overlapLines.length;
|
|
40
|
+
currentChunkLines = [...overlapLines, line];
|
|
41
|
+
currentLength = currentChunkLines.join('\n').length;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Save last chunk
|
|
45
|
+
if (currentChunkLines.length > 0) {
|
|
46
|
+
const chunkText = currentChunkLines.join('\n');
|
|
47
|
+
if (chunkText.trim().length > 0) {
|
|
48
|
+
chunks.push(createChunk(filePath, currentChunkStart, currentChunkStart + currentChunkLines.length - 1, chunkText, source));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return chunks;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Calculate overlap lines from end of chunk.
|
|
55
|
+
*/
|
|
56
|
+
function calculateOverlapLines(lines, overlapChars) {
|
|
57
|
+
const result = [];
|
|
58
|
+
let length = 0;
|
|
59
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
60
|
+
const lineLength = lines[i].length + 1;
|
|
61
|
+
if (length + lineLength > overlapChars)
|
|
62
|
+
break;
|
|
63
|
+
result.unshift(lines[i]);
|
|
64
|
+
length += lineLength;
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create chunk object.
|
|
70
|
+
*/
|
|
71
|
+
function createChunk(path, startLine, endLine, text, source) {
|
|
72
|
+
return {
|
|
73
|
+
path,
|
|
74
|
+
startLine,
|
|
75
|
+
endLine,
|
|
76
|
+
text,
|
|
77
|
+
hash: hashText(text),
|
|
78
|
+
source,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Estimate tokens in text.
|
|
83
|
+
*/
|
|
84
|
+
export function estimateTokens(text) {
|
|
85
|
+
if (!text || text.length === 0)
|
|
86
|
+
return 0;
|
|
87
|
+
// Korean characters: ~2 tokens per char
|
|
88
|
+
const koreanChars = (text.match(/[\uAC00-\uD7A3]/g) || []).length;
|
|
89
|
+
// English words: ~1.3 tokens per word
|
|
90
|
+
const englishWords = (text.match(/[a-zA-Z]+/g) || []).length;
|
|
91
|
+
// Other chars
|
|
92
|
+
const otherChars = text.length - koreanChars - (englishWords * 5);
|
|
93
|
+
const koreanTokens = koreanChars * 2;
|
|
94
|
+
const englishTokens = englishWords * 1.3;
|
|
95
|
+
const otherTokens = Math.max(0, otherChars) / 4;
|
|
96
|
+
return Math.ceil(koreanTokens + englishTokens + otherTokens);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Split text into sentences.
|
|
100
|
+
* Handles both English and Korean.
|
|
101
|
+
*/
|
|
102
|
+
export function splitIntoSentences(text) {
|
|
103
|
+
const sentenceEnders = /([.!?。!?])\s+/g;
|
|
104
|
+
const sentences = [];
|
|
105
|
+
let lastIndex = 0;
|
|
106
|
+
let match;
|
|
107
|
+
while ((match = sentenceEnders.exec(text)) !== null) {
|
|
108
|
+
sentences.push(text.slice(lastIndex, match.index + match[1].length).trim());
|
|
109
|
+
lastIndex = match.index + match[0].length;
|
|
110
|
+
}
|
|
111
|
+
if (lastIndex < text.length) {
|
|
112
|
+
sentences.push(text.slice(lastIndex).trim());
|
|
113
|
+
}
|
|
114
|
+
return sentences.filter(s => s.length > 0);
|
|
115
|
+
}
|
|
116
|
+
const HEADER_REGEX = /^(#{1,6})\s+(.+)$/;
|
|
117
|
+
/**
|
|
118
|
+
* Parse markdown into sections.
|
|
119
|
+
*/
|
|
120
|
+
export function parseMarkdownSections(content) {
|
|
121
|
+
const lines = content.split('\n');
|
|
122
|
+
const sections = [];
|
|
123
|
+
let currentSection = null;
|
|
124
|
+
let currentLines = [];
|
|
125
|
+
let sectionStartLine = 1;
|
|
126
|
+
for (let i = 0; i < lines.length; i++) {
|
|
127
|
+
const line = lines[i];
|
|
128
|
+
const lineNumber = i + 1;
|
|
129
|
+
const headerMatch = line.match(HEADER_REGEX);
|
|
130
|
+
if (headerMatch) {
|
|
131
|
+
// Save previous section
|
|
132
|
+
if (currentSection !== null || currentLines.length > 0) {
|
|
133
|
+
sections.push({
|
|
134
|
+
header: currentSection?.header || '',
|
|
135
|
+
content: currentLines.join('\n'),
|
|
136
|
+
level: currentSection?.level || 0,
|
|
137
|
+
startLine: sectionStartLine,
|
|
138
|
+
endLine: lineNumber - 1
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// Start new section
|
|
142
|
+
currentSection = {
|
|
143
|
+
header: headerMatch[2],
|
|
144
|
+
content: '',
|
|
145
|
+
level: headerMatch[1].length,
|
|
146
|
+
startLine: lineNumber,
|
|
147
|
+
endLine: lineNumber
|
|
148
|
+
};
|
|
149
|
+
currentLines = [line];
|
|
150
|
+
sectionStartLine = lineNumber;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
currentLines.push(line);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Save last section
|
|
157
|
+
if (currentLines.length > 0) {
|
|
158
|
+
sections.push({
|
|
159
|
+
header: currentSection?.header || '',
|
|
160
|
+
content: currentLines.join('\n'),
|
|
161
|
+
level: currentSection?.level || 0,
|
|
162
|
+
startLine: sectionStartLine,
|
|
163
|
+
endLine: lines.length
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return sections;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=chunking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunking.js","sourceRoot":"","sources":["../../src/memory/chunking.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAA+B,QAAQ,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE3F;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,QAAgB;IACtD,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC;IAEpE,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,MAAM,QAAQ,GAAG,SAAS,GAAG,aAAa,CAAC;IAC3C,MAAM,YAAY,GAAG,aAAa,GAAG,aAAa,CAAC;IAEnD,IAAI,iBAAiB,GAAa,EAAE,CAAC;IACrC,IAAI,iBAAiB,GAAG,CAAC,CAAC,CAAC,sBAAsB;IACjD,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,iBAAiB;QAErD,IAAI,aAAa,GAAG,UAAU,IAAI,QAAQ,EAAE,CAAC;YAC3C,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,aAAa,IAAI,UAAU,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,qBAAqB;YACrB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,CAAC,WAAW,CACrB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAChD,SAAS,EACT,MAAM,CACP,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,MAAM,YAAY,GAAG,qBAAqB,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YAE5E,kBAAkB;YAClB,iBAAiB,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;YAChD,iBAAiB,GAAG,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,CAAC;YAC5C,aAAa,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QACtD,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,WAAW,CACrB,QAAQ,EACR,iBAAiB,EACjB,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAChD,SAAS,EACT,MAAM,CACP,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,KAAe,EAAE,YAAoB;IAClE,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,GAAG,UAAU,GAAG,YAAY;YAAE,MAAM;QAC9C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,UAAU,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAClB,IAAY,EACZ,SAAiB,EACjB,OAAe,EACf,IAAY,EACZ,MAAkB;IAElB,OAAO;QACL,IAAI;QACJ,SAAS;QACT,OAAO;QACP,IAAI;QACJ,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;QACpB,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEzC,wCAAwC;IACxC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAClE,sCAAsC;IACtC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAC7D,cAAc;IACd,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAElE,MAAM,YAAY,GAAG,WAAW,GAAG,CAAC,CAAC;IACrC,MAAM,aAAa,GAAG,YAAY,GAAG,GAAG,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IAEhD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,aAAa,GAAG,WAAW,CAAC,CAAC;AAC/D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,cAAc,GAAG,gBAAgB,CAAC;IACxC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,KAA6B,CAAC;IAElC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACpD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5E,SAAS,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IAED,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC7C,CAAC;AAaD,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IAEvC,IAAI,cAAc,GAA2B,IAAI,CAAC;IAClD,IAAI,YAAY,GAAa,EAAE,CAAC;IAChC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IAEzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAE7C,IAAI,WAAW,EAAE,CAAC;YAChB,wBAAwB;YACxB,IAAI,cAAc,KAAK,IAAI,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvD,QAAQ,CAAC,IAAI,CAAC;oBACZ,MAAM,EAAE,cAAc,EAAE,MAAM,IAAI,EAAE;oBACpC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;oBAChC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;oBACjC,SAAS,EAAE,gBAAgB;oBAC3B,OAAO,EAAE,UAAU,GAAG,CAAC;iBACxB,CAAC,CAAC;YACL,CAAC;YAED,oBAAoB;YACpB,cAAc,GAAG;gBACf,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM;gBAC5B,SAAS,EAAE,UAAU;gBACrB,OAAO,EAAE,UAAU;aACpB,CAAC;YACF,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,gBAAgB,GAAG,UAAU,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,cAAc,EAAE,MAAM,IAAI,EAAE;YACpC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAChC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;YACjC,SAAS,EAAE,gBAAgB;YAC3B,OAAO,EAAE,KAAK,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Core - Simple utilities for text processing
|
|
3
|
+
*
|
|
4
|
+
* Clear is better than clever.
|
|
5
|
+
*/
|
|
6
|
+
export declare const CONFIG: {
|
|
7
|
+
readonly chunking: {
|
|
8
|
+
readonly maxTokens: 400;
|
|
9
|
+
readonly overlapTokens: 80;
|
|
10
|
+
readonly charsPerToken: 4;
|
|
11
|
+
};
|
|
12
|
+
readonly paths: {
|
|
13
|
+
readonly memoryDir: ".opencode/memory";
|
|
14
|
+
readonly dataDir: ".opencode-data";
|
|
15
|
+
readonly dbFile: "memory.sqlite";
|
|
16
|
+
};
|
|
17
|
+
readonly search: {
|
|
18
|
+
readonly defaultMaxResults: 6;
|
|
19
|
+
readonly defaultMinScore: 0.35;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export type SourceType = 'daily' | 'memory' | 'masks' | 'retrospect' | 'user' | 'code';
|
|
23
|
+
export type MemoryType = 'daily' | 'memory' | 'masks' | 'retrospect' | 'user';
|
|
24
|
+
export interface Chunk {
|
|
25
|
+
id?: number;
|
|
26
|
+
path: string;
|
|
27
|
+
startLine: number;
|
|
28
|
+
endLine: number;
|
|
29
|
+
text: string;
|
|
30
|
+
hash: string;
|
|
31
|
+
source: SourceType;
|
|
32
|
+
createdAt?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface SearchResult {
|
|
35
|
+
chunk: Chunk;
|
|
36
|
+
score: number;
|
|
37
|
+
matchType: 'vector' | 'text' | 'hybrid';
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Hash text using djb2 algorithm.
|
|
41
|
+
* Simple, fast, good enough for our use case.
|
|
42
|
+
*/
|
|
43
|
+
export declare function hashText(text: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Estimate token count.
|
|
46
|
+
* Rough approximation: 4 chars ≈ 1 token
|
|
47
|
+
*/
|
|
48
|
+
export declare function estimateTokens(text: string): number;
|
|
49
|
+
/**
|
|
50
|
+
* Determine source type from file path.
|
|
51
|
+
*/
|
|
52
|
+
export declare function determineSource(filePath: string): SourceType;
|
|
53
|
+
/**
|
|
54
|
+
* Calculate cosine similarity between two vectors.
|
|
55
|
+
* Single pass for efficiency.
|
|
56
|
+
*/
|
|
57
|
+
export declare function cosineSimilarity(a: number[], b: number[]): number;
|
|
58
|
+
/**
|
|
59
|
+
* Float32 version - more memory efficient.
|
|
60
|
+
*/
|
|
61
|
+
export declare function cosineSimilarityFloat32(a: Float32Array, b: Float32Array): number;
|
|
62
|
+
export declare function toFloat32Array(embedding: number[]): Float32Array;
|
|
63
|
+
export declare function embeddingToBlob(embedding: number[]): Buffer;
|
|
64
|
+
export declare function blobToEmbedding(blob: Buffer): Float32Array;
|
|
65
|
+
export declare function blobToNumberArray(blob: Buffer): number[];
|
|
66
|
+
export declare function getTodayFileName(): string;
|
|
67
|
+
export declare function dateToFileName(date: Date): string;
|
|
68
|
+
export declare function getMemoryPath(type: MemoryType, basePath?: string): string;
|
|
69
|
+
export declare function getDbPath(basePath?: string): string;
|
|
70
|
+
export declare function getDataDir(basePath?: string): string;
|
|
71
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
72
|
+
export declare function getConfig(): typeof CONFIG;
|
|
73
|
+
//# sourceMappingURL=core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/memory/core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;CAeT,CAAC;AAMX,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AACvF,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC;AAE9E,MAAM,WAAW,KAAK;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;CACzC;AAMD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO7C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAoB5D;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAqBhF;AAMD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAEhE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAG3D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAGxD;AAMD,wBAAgB,gBAAgB,IAAI,MAAM,CAOzC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAMjD;AAMD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,QAAQ,GAAE,MAAsB,GAC/B,MAAM,CAiBR;AAED,wBAAgB,SAAS,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAElE;AAED,wBAAgB,UAAU,CAAC,QAAQ,GAAE,MAAsB,GAAG,MAAM,CAEnE;AAMD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,SAAS,IAAI,OAAO,MAAM,CAEzC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Core - Simple utilities for text processing
|
|
3
|
+
*
|
|
4
|
+
* Clear is better than clever.
|
|
5
|
+
*/
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Configuration
|
|
9
|
+
// ============================================================================
|
|
10
|
+
export const CONFIG = {
|
|
11
|
+
chunking: {
|
|
12
|
+
maxTokens: 400,
|
|
13
|
+
overlapTokens: 80,
|
|
14
|
+
charsPerToken: 4,
|
|
15
|
+
},
|
|
16
|
+
paths: {
|
|
17
|
+
memoryDir: ".opencode/memory",
|
|
18
|
+
dataDir: ".opencode-data",
|
|
19
|
+
dbFile: "memory.sqlite",
|
|
20
|
+
},
|
|
21
|
+
search: {
|
|
22
|
+
defaultMaxResults: 6,
|
|
23
|
+
defaultMinScore: 0.35,
|
|
24
|
+
},
|
|
25
|
+
};
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// Text Processing
|
|
28
|
+
// ============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* Hash text using djb2 algorithm.
|
|
31
|
+
* Simple, fast, good enough for our use case.
|
|
32
|
+
*/
|
|
33
|
+
export function hashText(text) {
|
|
34
|
+
let hash = 5381;
|
|
35
|
+
for (let i = 0; i < text.length; i++) {
|
|
36
|
+
hash = ((hash << 5) + hash) + text.charCodeAt(i);
|
|
37
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
38
|
+
}
|
|
39
|
+
return Math.abs(hash).toString(16);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Estimate token count.
|
|
43
|
+
* Rough approximation: 4 chars ≈ 1 token
|
|
44
|
+
*/
|
|
45
|
+
export function estimateTokens(text) {
|
|
46
|
+
return Math.ceil(text.length / CONFIG.chunking.charsPerToken);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Determine source type from file path.
|
|
50
|
+
*/
|
|
51
|
+
export function determineSource(filePath) {
|
|
52
|
+
const lower = filePath.toLowerCase().replace(/\\/g, '/');
|
|
53
|
+
if (lower.includes('/daily/') || (lower.endsWith('.md') && /\d{4}-\d{2}-\d{2}/.test(lower))) {
|
|
54
|
+
return 'daily';
|
|
55
|
+
}
|
|
56
|
+
if (lower.includes('masks') || lower.endsWith('masks.md')) {
|
|
57
|
+
return 'masks';
|
|
58
|
+
}
|
|
59
|
+
if (lower.includes('retrospect') || lower.endsWith('retrospect.md')) {
|
|
60
|
+
return 'retrospect';
|
|
61
|
+
}
|
|
62
|
+
if (lower.includes('user') || lower.endsWith('user.md')) {
|
|
63
|
+
return 'user';
|
|
64
|
+
}
|
|
65
|
+
if (lower.includes('memory') || lower.endsWith('memory.md')) {
|
|
66
|
+
return 'memory';
|
|
67
|
+
}
|
|
68
|
+
return 'code';
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// Similarity
|
|
72
|
+
// ============================================================================
|
|
73
|
+
/**
|
|
74
|
+
* Calculate cosine similarity between two vectors.
|
|
75
|
+
* Single pass for efficiency.
|
|
76
|
+
*/
|
|
77
|
+
export function cosineSimilarity(a, b) {
|
|
78
|
+
if (a.length !== b.length) {
|
|
79
|
+
throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
|
|
80
|
+
}
|
|
81
|
+
if (a.length === 0)
|
|
82
|
+
return 0;
|
|
83
|
+
let dotProduct = 0;
|
|
84
|
+
let magnitudeA = 0;
|
|
85
|
+
let magnitudeB = 0;
|
|
86
|
+
for (let i = 0; i < a.length; i++) {
|
|
87
|
+
const valA = a[i];
|
|
88
|
+
const valB = b[i];
|
|
89
|
+
dotProduct += valA * valB;
|
|
90
|
+
magnitudeA += valA * valA;
|
|
91
|
+
magnitudeB += valB * valB;
|
|
92
|
+
}
|
|
93
|
+
const magnitude = Math.sqrt(magnitudeA) * Math.sqrt(magnitudeB);
|
|
94
|
+
return magnitude === 0 ? 0 : dotProduct / magnitude;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Float32 version - more memory efficient.
|
|
98
|
+
*/
|
|
99
|
+
export function cosineSimilarityFloat32(a, b) {
|
|
100
|
+
if (a.length !== b.length) {
|
|
101
|
+
throw new Error(`Vector dimension mismatch: ${a.length} vs ${b.length}`);
|
|
102
|
+
}
|
|
103
|
+
if (a.length === 0)
|
|
104
|
+
return 0;
|
|
105
|
+
let dotProduct = 0;
|
|
106
|
+
let magnitudeA = 0;
|
|
107
|
+
let magnitudeB = 0;
|
|
108
|
+
for (let i = 0; i < a.length; i++) {
|
|
109
|
+
const valA = a[i];
|
|
110
|
+
const valB = b[i];
|
|
111
|
+
dotProduct += valA * valB;
|
|
112
|
+
magnitudeA += valA * valA;
|
|
113
|
+
magnitudeB += valB * valB;
|
|
114
|
+
}
|
|
115
|
+
const magnitude = Math.sqrt(magnitudeA) * Math.sqrt(magnitudeB);
|
|
116
|
+
return magnitude === 0 ? 0 : dotProduct / magnitude;
|
|
117
|
+
}
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// Embedding Conversion
|
|
120
|
+
// ============================================================================
|
|
121
|
+
export function toFloat32Array(embedding) {
|
|
122
|
+
return new Float32Array(embedding);
|
|
123
|
+
}
|
|
124
|
+
export function embeddingToBlob(embedding) {
|
|
125
|
+
const float32 = new Float32Array(embedding);
|
|
126
|
+
return Buffer.from(float32.buffer);
|
|
127
|
+
}
|
|
128
|
+
export function blobToEmbedding(blob) {
|
|
129
|
+
return new Float32Array(blob.buffer, blob.byteOffset, blob.byteLength / 4);
|
|
130
|
+
}
|
|
131
|
+
export function blobToNumberArray(blob) {
|
|
132
|
+
const float32 = new Float32Array(blob.buffer, blob.byteOffset, blob.byteLength / 4);
|
|
133
|
+
return Array.from(float32);
|
|
134
|
+
}
|
|
135
|
+
// ============================================================================
|
|
136
|
+
// Date Utilities
|
|
137
|
+
// ============================================================================
|
|
138
|
+
export function getTodayFileName() {
|
|
139
|
+
const now = new Date();
|
|
140
|
+
const year = now.getFullYear();
|
|
141
|
+
const month = String(now.getMonth() + 1).padStart(2, '0');
|
|
142
|
+
const day = String(now.getDate()).padStart(2, '0');
|
|
143
|
+
return `${year}-${month}-${day}.md`;
|
|
144
|
+
}
|
|
145
|
+
export function dateToFileName(date) {
|
|
146
|
+
const year = date.getFullYear();
|
|
147
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
148
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
149
|
+
return `${year}-${month}-${day}.md`;
|
|
150
|
+
}
|
|
151
|
+
// ============================================================================
|
|
152
|
+
// Path Utilities
|
|
153
|
+
// ============================================================================
|
|
154
|
+
export function getMemoryPath(type, basePath = process.cwd()) {
|
|
155
|
+
const memoryDir = join(basePath, CONFIG.paths.memoryDir);
|
|
156
|
+
switch (type) {
|
|
157
|
+
case 'daily':
|
|
158
|
+
return join(memoryDir, 'daily');
|
|
159
|
+
case 'memory':
|
|
160
|
+
return join(memoryDir, 'MEMORY.md');
|
|
161
|
+
case 'masks':
|
|
162
|
+
return join(memoryDir, 'MASKS.md');
|
|
163
|
+
case 'retrospect':
|
|
164
|
+
return join(memoryDir, 'RETROSPECT.md');
|
|
165
|
+
case 'user':
|
|
166
|
+
return join(memoryDir, 'USER.md');
|
|
167
|
+
default:
|
|
168
|
+
throw new Error(`Unknown memory type: ${type}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export function getDbPath(basePath = process.cwd()) {
|
|
172
|
+
return join(basePath, CONFIG.paths.dataDir, CONFIG.paths.dbFile);
|
|
173
|
+
}
|
|
174
|
+
export function getDataDir(basePath = process.cwd()) {
|
|
175
|
+
return join(basePath, CONFIG.paths.dataDir);
|
|
176
|
+
}
|
|
177
|
+
// ============================================================================
|
|
178
|
+
// Utilities
|
|
179
|
+
// ============================================================================
|
|
180
|
+
export function sleep(ms) {
|
|
181
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
182
|
+
}
|
|
183
|
+
export function getConfig() {
|
|
184
|
+
return CONFIG;
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/memory/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @maskweaver/memory
|
|
3
|
+
*
|
|
4
|
+
* Memory system with embeddings and vector search
|
|
5
|
+
*/
|
|
6
|
+
export type { SourceType, MemoryType, Chunk, SearchResult, } from "./core.js";
|
|
7
|
+
export { CONFIG, hashText, estimateTokens, determineSource, cosineSimilarity, cosineSimilarityFloat32, toFloat32Array, embeddingToBlob, blobToEmbedding, blobToNumberArray, getTodayFileName, dateToFileName, getMemoryPath, getDbPath, getDataDir, sleep, getConfig, } from "./core.js";
|
|
8
|
+
export type { Embedding, ProviderType, HealthCheckResult, ProviderConfig, IEmbeddingProvider, } from "./providers/types.js";
|
|
9
|
+
export { OllamaProvider } from "./providers/ollama.js";
|
|
10
|
+
export { OpenAIProvider } from "./providers/openai.js";
|
|
11
|
+
export { VoyageProvider } from "./providers/voyage.js";
|
|
12
|
+
export { OpenRouterProvider } from "./providers/openrouter.js";
|
|
13
|
+
export { TextOnlyProvider } from "./providers/text-only.js";
|
|
14
|
+
export { createProvider, selectBestProvider, getDefaultConfigs, } from "./providers/factory.js";
|
|
15
|
+
export { chunkText, parseMarkdownSections, splitIntoSentences } from "./chunking.js";
|
|
16
|
+
export { MemoryDatabase, initDatabase, getDatabase, upsertChunk, searchByVector, searchByText, deleteChunksByPath, getChunksByPath, } from "./store/sqlite.js";
|
|
17
|
+
export type { SearchOptions } from "./store/sqlite.js";
|
|
18
|
+
export { hybridSearch } from "./search/hybrid.js";
|
|
19
|
+
export { indexFile, reindexFile, indexAllMemoryFiles, classifySource, } from "./indexer.js";
|
|
20
|
+
export type { MarkdownSection } from "./indexer.js";
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,UAAU,EACV,UAAU,EACV,KAAK,EACL,YAAY,GACb,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,MAAM,EACN,QAAQ,EACR,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,SAAS,EACT,UAAU,EACV,KAAK,EACL,SAAS,GACV,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGrF,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,OAAO,EACL,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @maskweaver/memory
|
|
3
|
+
*
|
|
4
|
+
* Memory system with embeddings and vector search
|
|
5
|
+
*/
|
|
6
|
+
export { CONFIG, hashText, estimateTokens, determineSource, cosineSimilarity, cosineSimilarityFloat32, toFloat32Array, embeddingToBlob, blobToEmbedding, blobToNumberArray, getTodayFileName, dateToFileName, getMemoryPath, getDbPath, getDataDir, sleep, getConfig, } from "./core.js";
|
|
7
|
+
export { OllamaProvider } from "./providers/ollama.js";
|
|
8
|
+
export { OpenAIProvider } from "./providers/openai.js";
|
|
9
|
+
export { VoyageProvider } from "./providers/voyage.js";
|
|
10
|
+
export { OpenRouterProvider } from "./providers/openrouter.js";
|
|
11
|
+
export { TextOnlyProvider } from "./providers/text-only.js";
|
|
12
|
+
// Provider factory
|
|
13
|
+
export { createProvider, selectBestProvider, getDefaultConfigs, } from "./providers/factory.js";
|
|
14
|
+
// Chunking
|
|
15
|
+
export { chunkText, parseMarkdownSections, splitIntoSentences } from "./chunking.js";
|
|
16
|
+
// Storage
|
|
17
|
+
export { MemoryDatabase, initDatabase, getDatabase, upsertChunk, searchByVector, searchByText, deleteChunksByPath, getChunksByPath, } from "./store/sqlite.js";
|
|
18
|
+
// Search
|
|
19
|
+
export { hybridSearch } from "./search/hybrid.js";
|
|
20
|
+
// Indexing
|
|
21
|
+
export { indexFile, reindexFile, indexAllMemoryFiles, classifySource, } from "./indexer.js";
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EACL,MAAM,EACN,QAAQ,EACR,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,SAAS,EACT,UAAU,EACV,KAAK,EACL,SAAS,GACV,MAAM,WAAW,CAAC;AAWnB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC,WAAW;AACX,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAErF,UAAU;AACV,OAAO,EACL,cAAc,EACd,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAI3B,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,WAAW;AACX,OAAO,EACL,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,GACf,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Indexer - Process markdown files into searchable chunks
|
|
3
|
+
*
|
|
4
|
+
* Read file → Parse sections → Chunk → Hash → Embed → Store
|
|
5
|
+
*/
|
|
6
|
+
import { type SourceType } from './core.js';
|
|
7
|
+
type EmbeddingProvider = (text: string) => Promise<number[]>;
|
|
8
|
+
export interface MarkdownSection {
|
|
9
|
+
header: string;
|
|
10
|
+
content: string;
|
|
11
|
+
level: number;
|
|
12
|
+
startLine: number;
|
|
13
|
+
endLine: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Parse markdown into sections.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseMarkdownSections(content: string): MarkdownSection[];
|
|
19
|
+
/**
|
|
20
|
+
* Classify source from file path.
|
|
21
|
+
*/
|
|
22
|
+
export declare function classifySource(filePath: string): SourceType;
|
|
23
|
+
/**
|
|
24
|
+
* Index a single file.
|
|
25
|
+
* Only re-embeds chunks that changed (based on hash).
|
|
26
|
+
*/
|
|
27
|
+
export declare function indexFile(filePath: string, getEmbedding: EmbeddingProvider, basePath?: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Reindex file (delete all chunks and reindex).
|
|
30
|
+
*/
|
|
31
|
+
export declare function reindexFile(filePath: string, getEmbedding: EmbeddingProvider, basePath?: string): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Index all memory files in directory.
|
|
34
|
+
*/
|
|
35
|
+
export declare function indexAllMemoryFiles(baseDir: string, getEmbedding: EmbeddingProvider, basePath?: string): Promise<void>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=indexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/memory/indexer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAGnE,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAM7D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CAoDxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAW3D;AAkBD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA+Bf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAwBf"}
|