@synthaer/resonance 0.1.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/README.md +19 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +40 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +44 -0
- package/dist/config.js.map +1 -0
- package/dist/contracts.d.ts +4 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -0
- package/dist/db/local.d.ts +21 -0
- package/dist/db/local.d.ts.map +1 -0
- package/dist/db/local.js +158 -0
- package/dist/db/local.js.map +1 -0
- package/dist/db-types.d.ts +14 -0
- package/dist/db-types.d.ts.map +1 -0
- package/dist/db-types.js +2 -0
- package/dist/db-types.js.map +1 -0
- package/dist/dikw-pipeline.d.ts +31 -0
- package/dist/dikw-pipeline.d.ts.map +1 -0
- package/dist/dikw-pipeline.js +130 -0
- package/dist/dikw-pipeline.js.map +1 -0
- package/dist/embedding-provider.d.ts +25 -0
- package/dist/embedding-provider.d.ts.map +1 -0
- package/dist/embedding-provider.js +62 -0
- package/dist/embedding-provider.js.map +1 -0
- package/dist/embeddings/local.d.ts +31 -0
- package/dist/embeddings/local.d.ts.map +1 -0
- package/dist/embeddings/local.js +72 -0
- package/dist/embeddings/local.js.map +1 -0
- package/dist/encryption.d.ts +22 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +39 -0
- package/dist/encryption.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +362 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +722 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/pki.d.ts +160 -0
- package/dist/pki.d.ts.map +1 -0
- package/dist/pki.js +502 -0
- package/dist/pki.js.map +1 -0
- package/dist/ratification.d.ts +125 -0
- package/dist/ratification.d.ts.map +1 -0
- package/dist/ratification.js +315 -0
- package/dist/ratification.js.map +1 -0
- package/dist/schema.d.ts +4 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +119 -0
- package/dist/schema.js.map +1 -0
- package/dist/search.d.ts +33 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +132 -0
- package/dist/search.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +297 -0
- package/dist/server.js.map +1 -0
- package/dist/store.d.ts +77 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +572 -0
- package/dist/store.js.map +1 -0
- package/dist/tools/cloud-gate.d.ts +72 -0
- package/dist/tools/cloud-gate.d.ts.map +1 -0
- package/dist/tools/cloud-gate.js +79 -0
- package/dist/tools/cloud-gate.js.map +1 -0
- package/dist/tools/experiences.d.ts +20 -0
- package/dist/tools/experiences.d.ts.map +1 -0
- package/dist/tools/experiences.js +135 -0
- package/dist/tools/experiences.js.map +1 -0
- package/dist/tools/knowledge.d.ts +37 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +213 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/sessions.d.ts +11 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +66 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/trust.d.ts +18 -0
- package/dist/tools/trust.d.ts.map +1 -0
- package/dist/tools/trust.js +42 -0
- package/dist/tools/trust.js.map +1 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @synthaer/resonance-local
|
|
2
|
+
|
|
3
|
+
Extracted local Resonance runtime package.
|
|
4
|
+
|
|
5
|
+
This package is the new home for the core local Resonance runtime that was previously defined under `apps/partitura/src/resonance/`.
|
|
6
|
+
|
|
7
|
+
Current scope:
|
|
8
|
+
|
|
9
|
+
- local Resonance store
|
|
10
|
+
- DIKW pipeline
|
|
11
|
+
- local schema
|
|
12
|
+
- hybrid search
|
|
13
|
+
- embedding provider
|
|
14
|
+
- sync sink contract
|
|
15
|
+
- transport-agnostic local MCP runtime + Express router
|
|
16
|
+
|
|
17
|
+
Still pending:
|
|
18
|
+
|
|
19
|
+
- Partitura HTTP router rewiring to import the runtime from this package
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @synthaer/resonance CLI entry point.
|
|
4
|
+
*
|
|
5
|
+
* When run via `npx @synthaer/resonance`, starts the MCP server on stdio.
|
|
6
|
+
* Prints a brief banner to stderr showing mode and data directory.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @synthaer/resonance CLI entry point.
|
|
4
|
+
*
|
|
5
|
+
* When run via `npx @synthaer/resonance`, starts the MCP server on stdio.
|
|
6
|
+
* Prints a brief banner to stderr showing mode and data directory.
|
|
7
|
+
*/
|
|
8
|
+
import { resolveMode, resolveDataDir, ensureDataDir } from './config.js';
|
|
9
|
+
import { initLocalDb } from './db/local.js';
|
|
10
|
+
import { LocalEmbeddingProvider } from './embeddings/local.js';
|
|
11
|
+
import { startServer } from './server.js';
|
|
12
|
+
import { join } from 'node:path';
|
|
13
|
+
const VERSION = '0.1.0';
|
|
14
|
+
async function main() {
|
|
15
|
+
const mode = resolveMode();
|
|
16
|
+
const dataDir = resolveDataDir();
|
|
17
|
+
// Banner goes to stderr so it doesn't interfere with stdio MCP transport
|
|
18
|
+
process.stderr.write(`\n`);
|
|
19
|
+
process.stderr.write(` Resonance v${VERSION}\n`);
|
|
20
|
+
process.stderr.write(` Mode: ${mode}\n`);
|
|
21
|
+
process.stderr.write(` Data: ${dataDir}\n`);
|
|
22
|
+
process.stderr.write(`\n`);
|
|
23
|
+
// Ensure data directories exist
|
|
24
|
+
await ensureDataDir(dataDir);
|
|
25
|
+
// Initialize the local PGlite database
|
|
26
|
+
process.stderr.write('[resonance] Initializing database...\n');
|
|
27
|
+
const db = await initLocalDb(dataDir);
|
|
28
|
+
process.stderr.write('[resonance] Database ready.\n');
|
|
29
|
+
// Create the embedding provider (lazy — model loads on first use)
|
|
30
|
+
const modelsDir = join(dataDir, 'models');
|
|
31
|
+
const embedder = new LocalEmbeddingProvider(modelsDir);
|
|
32
|
+
// Start the MCP server on stdio
|
|
33
|
+
process.stderr.write(`[resonance] Starting MCP server (${mode} mode, stdio transport)...\n`);
|
|
34
|
+
await startServer({ db, embedder, mode, dataDir });
|
|
35
|
+
}
|
|
36
|
+
main().catch((error) => {
|
|
37
|
+
process.stderr.write(`[resonance] Fatal error: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IAEjC,yEAAyE;IACzE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,OAAO,IAAI,CAAC,CAAC;IAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,OAAO,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE3B,gCAAgC;IAChC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAE7B,uCAAuC;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEtD,kEAAkE;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAEvD,gCAAgC;IAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,IAAI,8BAA8B,CAAC,CAAC;IAC7F,MAAM,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ResonanceMode = 'local' | 'cloud' | 'hybrid';
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the operating mode.
|
|
4
|
+
*
|
|
5
|
+
* Priority:
|
|
6
|
+
* 1. RESONANCE_MODE env var (explicit override)
|
|
7
|
+
* 2. Presence of cloud credentials -> hybrid
|
|
8
|
+
* 3. Default -> local
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveMode(): ResonanceMode;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the data directory for all Resonance state.
|
|
13
|
+
*
|
|
14
|
+
* Priority:
|
|
15
|
+
* 1. RESONANCE_DATA_DIR env var
|
|
16
|
+
* 2. XDG_DATA_HOME/resonance
|
|
17
|
+
* 3. ~/.local/share/resonance
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveDataDir(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Ensure the data directory and its subdirectories exist.
|
|
22
|
+
*/
|
|
23
|
+
export declare function ensureDataDir(dataDir: string): Promise<void>;
|
|
24
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEzD;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,aAAa,CAO3C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { mkdir } from 'node:fs/promises';
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the operating mode.
|
|
6
|
+
*
|
|
7
|
+
* Priority:
|
|
8
|
+
* 1. RESONANCE_MODE env var (explicit override)
|
|
9
|
+
* 2. Presence of cloud credentials -> hybrid
|
|
10
|
+
* 3. Default -> local
|
|
11
|
+
*/
|
|
12
|
+
export function resolveMode() {
|
|
13
|
+
const explicit = process.env['RESONANCE_MODE'];
|
|
14
|
+
if (explicit === 'local' || explicit === 'cloud' || explicit === 'hybrid') {
|
|
15
|
+
return explicit;
|
|
16
|
+
}
|
|
17
|
+
const hasCredentials = !!(process.env['SYNTHAER_API_KEY'] || process.env['SYNTHAER_TOKEN']);
|
|
18
|
+
return hasCredentials ? 'hybrid' : 'local';
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the data directory for all Resonance state.
|
|
22
|
+
*
|
|
23
|
+
* Priority:
|
|
24
|
+
* 1. RESONANCE_DATA_DIR env var
|
|
25
|
+
* 2. XDG_DATA_HOME/resonance
|
|
26
|
+
* 3. ~/.local/share/resonance
|
|
27
|
+
*/
|
|
28
|
+
export function resolveDataDir() {
|
|
29
|
+
const envDir = process.env['RESONANCE_DATA_DIR'];
|
|
30
|
+
if (envDir)
|
|
31
|
+
return envDir;
|
|
32
|
+
const xdg = process.env['XDG_DATA_HOME'];
|
|
33
|
+
if (xdg)
|
|
34
|
+
return join(xdg, 'resonance');
|
|
35
|
+
return join(homedir(), '.local', 'share', 'resonance');
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Ensure the data directory and its subdirectories exist.
|
|
39
|
+
*/
|
|
40
|
+
export async function ensureDataDir(dataDir) {
|
|
41
|
+
await mkdir(join(dataDir, 'pglite'), { recursive: true });
|
|
42
|
+
await mkdir(join(dataDir, 'models'), { recursive: true });
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIzC;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/C,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1E,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5F,OAAO,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACjD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACzC,IAAI,GAAG;QAAE,OAAO,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAEvC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CACL,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { PGlite } from '@electric-sql/pglite';
|
|
2
|
+
/**
|
|
3
|
+
* Initialize the local PGlite database with pgvector extension.
|
|
4
|
+
* Data is stored at `<dataDir>/pglite/`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function initLocalDb(dataDir: string): Promise<PGlite>;
|
|
7
|
+
/**
|
|
8
|
+
* Create HNSW vector indexes for semantic search.
|
|
9
|
+
* Deferred to after first data load for performance (building an HNSW index
|
|
10
|
+
* on an empty table is pointless; building it after initial data is faster).
|
|
11
|
+
*/
|
|
12
|
+
export declare function createVectorIndexes(instance: PGlite): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Get the current PGlite instance. Throws if not initialized.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getDb(): PGlite;
|
|
17
|
+
/**
|
|
18
|
+
* Close the database connection.
|
|
19
|
+
*/
|
|
20
|
+
export declare function closeDb(): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=local.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/db/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAiG9C;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAalE;AAmBD;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUzE;AAED;;GAEG;AACH,wBAAgB,KAAK,IAAI,MAAM,CAK9B;AAED;;GAEG;AACH,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAK7C"}
|
package/dist/db/local.js
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { PGlite } from '@electric-sql/pglite';
|
|
2
|
+
import { vector } from '@electric-sql/pglite/vector';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
let db = null;
|
|
5
|
+
const SCHEMA_SQL = `
|
|
6
|
+
CREATE EXTENSION IF NOT EXISTS vector;
|
|
7
|
+
|
|
8
|
+
CREATE TABLE IF NOT EXISTS meta (
|
|
9
|
+
key TEXT PRIMARY KEY,
|
|
10
|
+
value TEXT NOT NULL
|
|
11
|
+
);
|
|
12
|
+
|
|
13
|
+
INSERT INTO meta (key, value) VALUES ('schema_version', '1')
|
|
14
|
+
ON CONFLICT (key) DO NOTHING;
|
|
15
|
+
|
|
16
|
+
CREATE TABLE IF NOT EXISTS knowledge (
|
|
17
|
+
id TEXT PRIMARY KEY,
|
|
18
|
+
content TEXT NOT NULL,
|
|
19
|
+
kind INTEGER NOT NULL DEFAULT 1,
|
|
20
|
+
dikw_stage TEXT NOT NULL DEFAULT 'nascent',
|
|
21
|
+
strength REAL NOT NULL DEFAULT 0.5,
|
|
22
|
+
tags JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
23
|
+
context JSONB,
|
|
24
|
+
project_id TEXT,
|
|
25
|
+
source_agent TEXT,
|
|
26
|
+
source_count INTEGER NOT NULL DEFAULT 1,
|
|
27
|
+
context_count INTEGER NOT NULL DEFAULT 1,
|
|
28
|
+
endorsements INTEGER NOT NULL DEFAULT 0,
|
|
29
|
+
challenges INTEGER NOT NULL DEFAULT 0,
|
|
30
|
+
trust_score REAL NOT NULL DEFAULT 0.5,
|
|
31
|
+
decay_rate REAL NOT NULL DEFAULT 0.01,
|
|
32
|
+
local_embedding vector(384),
|
|
33
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
34
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
35
|
+
last_accessed_at TIMESTAMPTZ
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_knowledge_dikw_stage ON knowledge(dikw_stage);
|
|
39
|
+
CREATE INDEX IF NOT EXISTS idx_knowledge_project_id ON knowledge(project_id);
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_knowledge_kind ON knowledge(kind);
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_knowledge_strength ON knowledge(strength);
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_knowledge_updated_at ON knowledge(updated_at);
|
|
43
|
+
CREATE INDEX IF NOT EXISTS idx_knowledge_trust_score ON knowledge(trust_score);
|
|
44
|
+
|
|
45
|
+
CREATE TABLE IF NOT EXISTS experiences (
|
|
46
|
+
id TEXT PRIMARY KEY,
|
|
47
|
+
agent_id TEXT,
|
|
48
|
+
session_id TEXT,
|
|
49
|
+
content TEXT NOT NULL,
|
|
50
|
+
kind INTEGER NOT NULL DEFAULT 3,
|
|
51
|
+
project_id TEXT,
|
|
52
|
+
related_knowledge_ids JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
53
|
+
tags JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
54
|
+
local_embedding vector(384),
|
|
55
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
CREATE INDEX IF NOT EXISTS idx_experiences_project_id ON experiences(project_id);
|
|
59
|
+
CREATE INDEX IF NOT EXISTS idx_experiences_kind ON experiences(kind);
|
|
60
|
+
CREATE INDEX IF NOT EXISTS idx_experiences_session_id ON experiences(session_id);
|
|
61
|
+
CREATE INDEX IF NOT EXISTS idx_experiences_created_at ON experiences(created_at);
|
|
62
|
+
|
|
63
|
+
CREATE TABLE IF NOT EXISTS sessions (
|
|
64
|
+
id TEXT PRIMARY KEY,
|
|
65
|
+
agent_id TEXT,
|
|
66
|
+
project_id TEXT,
|
|
67
|
+
checkpoint JSONB,
|
|
68
|
+
memory JSONB NOT NULL DEFAULT '[]'::jsonb,
|
|
69
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
70
|
+
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_sessions_agent_project ON sessions(agent_id, project_id);
|
|
74
|
+
|
|
75
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
76
|
+
id TEXT PRIMARY KEY,
|
|
77
|
+
name TEXT,
|
|
78
|
+
model TEXT,
|
|
79
|
+
fingerprint TEXT,
|
|
80
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
CREATE TABLE IF NOT EXISTS maturation_log (
|
|
84
|
+
id SERIAL PRIMARY KEY,
|
|
85
|
+
knowledge_id TEXT NOT NULL REFERENCES knowledge(id) ON DELETE CASCADE,
|
|
86
|
+
from_stage TEXT NOT NULL,
|
|
87
|
+
to_stage TEXT NOT NULL,
|
|
88
|
+
reason TEXT,
|
|
89
|
+
triggered_by TEXT DEFAULT 'auto',
|
|
90
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_maturation_log_knowledge_id ON maturation_log(knowledge_id);
|
|
94
|
+
`;
|
|
95
|
+
/**
|
|
96
|
+
* Initialize the local PGlite database with pgvector extension.
|
|
97
|
+
* Data is stored at `<dataDir>/pglite/`.
|
|
98
|
+
*/
|
|
99
|
+
export async function initLocalDb(dataDir) {
|
|
100
|
+
if (db)
|
|
101
|
+
return db;
|
|
102
|
+
const dbPath = join(dataDir, 'pglite');
|
|
103
|
+
db = new PGlite(dbPath, {
|
|
104
|
+
extensions: { vector },
|
|
105
|
+
});
|
|
106
|
+
await db.waitReady;
|
|
107
|
+
await applySchema(db);
|
|
108
|
+
return db;
|
|
109
|
+
}
|
|
110
|
+
async function applySchema(instance) {
|
|
111
|
+
// Check if schema already applied
|
|
112
|
+
try {
|
|
113
|
+
const result = await instance.query(`SELECT value FROM meta WHERE key = 'schema_version'`);
|
|
114
|
+
if (result.rows.length > 0) {
|
|
115
|
+
// Schema already exists
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
// Table doesn't exist yet, apply full schema
|
|
121
|
+
}
|
|
122
|
+
await instance.exec(SCHEMA_SQL);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Create HNSW vector indexes for semantic search.
|
|
126
|
+
* Deferred to after first data load for performance (building an HNSW index
|
|
127
|
+
* on an empty table is pointless; building it after initial data is faster).
|
|
128
|
+
*/
|
|
129
|
+
export async function createVectorIndexes(instance) {
|
|
130
|
+
await instance.exec(`
|
|
131
|
+
CREATE INDEX IF NOT EXISTS idx_knowledge_local_embedding
|
|
132
|
+
ON knowledge USING hnsw (local_embedding vector_cosine_ops)
|
|
133
|
+
WITH (m = 16, ef_construction = 64);
|
|
134
|
+
|
|
135
|
+
CREATE INDEX IF NOT EXISTS idx_experiences_local_embedding
|
|
136
|
+
ON experiences USING hnsw (local_embedding vector_cosine_ops)
|
|
137
|
+
WITH (m = 16, ef_construction = 64);
|
|
138
|
+
`);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get the current PGlite instance. Throws if not initialized.
|
|
142
|
+
*/
|
|
143
|
+
export function getDb() {
|
|
144
|
+
if (!db) {
|
|
145
|
+
throw new Error('Database not initialized. Call initLocalDb() first.');
|
|
146
|
+
}
|
|
147
|
+
return db;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Close the database connection.
|
|
151
|
+
*/
|
|
152
|
+
export async function closeDb() {
|
|
153
|
+
if (db) {
|
|
154
|
+
await db.close();
|
|
155
|
+
db = null;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=local.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/db/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,IAAI,EAAE,GAAkB,IAAI,CAAC;AAE7B,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyFlB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAElB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAEvC,EAAE,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE;QACtB,UAAU,EAAE,EAAE,MAAM,EAAE;KACvB,CAAC,CAAC;IAEH,MAAM,EAAE,CAAC,SAAS,CAAC;IACnB,MAAM,WAAW,CAAC,EAAE,CAAC,CAAC;IAEtB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAgB;IACzC,kCAAkC;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,CACjC,qDAAqD,CACtD,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,wBAAwB;YACxB,OAAO;QACT,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IAED,MAAM,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,QAAgB;IACxD,MAAM,QAAQ,CAAC,IAAI,CAAC;;;;;;;;GAQnB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK;IACnB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACjB,EAAE,GAAG,IAAI,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface QueryResult<T = Record<string, unknown>> {
|
|
2
|
+
rows: T[];
|
|
3
|
+
rowCount: number;
|
|
4
|
+
}
|
|
5
|
+
export interface IAsyncDatabase {
|
|
6
|
+
query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<QueryResult<T>>;
|
|
7
|
+
exec(sql: string): Promise<void>;
|
|
8
|
+
transaction<T>(fn: (tx: IAsyncDatabase) => Promise<T>): Promise<T>;
|
|
9
|
+
close(): Promise<void>;
|
|
10
|
+
readonly dialect: 'pglite' | 'postgres';
|
|
11
|
+
setTenantContext?(firmId: string): Promise<void>;
|
|
12
|
+
resetTenantContext?(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=db-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-types.d.ts","sourceRoot":"","sources":["../src/db-types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,cAAc,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,UAAU,CAAC;IACxC,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,kBAAkB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC"}
|
package/dist/db-types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-types.js","sourceRoot":"","sources":["../src/db-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { KnowledgeItem, KnowledgeKind, DikwStage } from './types.js';
|
|
2
|
+
import type { ResonanceStore } from './store.js';
|
|
3
|
+
export declare class DikwPipeline {
|
|
4
|
+
private store;
|
|
5
|
+
constructor(store: ResonanceStore);
|
|
6
|
+
recordObservation(content: string, kind: KnowledgeKind, projectId?: string, tags?: string[]): Promise<string>;
|
|
7
|
+
evaluatePromotion(id: string): Promise<{
|
|
8
|
+
promoted: boolean;
|
|
9
|
+
from?: DikwStage;
|
|
10
|
+
to?: DikwStage;
|
|
11
|
+
}>;
|
|
12
|
+
runPromotionCycle(): Promise<{
|
|
13
|
+
promoted: number;
|
|
14
|
+
details: Array<{
|
|
15
|
+
id: string;
|
|
16
|
+
from: DikwStage;
|
|
17
|
+
to: DikwStage;
|
|
18
|
+
}>;
|
|
19
|
+
}>;
|
|
20
|
+
promoteToCanonical(id: string, reason: string): Promise<void>;
|
|
21
|
+
calculateStrength(item: KnowledgeItem): number;
|
|
22
|
+
applyDecay(): Promise<{
|
|
23
|
+
decayed: number;
|
|
24
|
+
archived: number;
|
|
25
|
+
}>;
|
|
26
|
+
recordReference(id: string, contextId?: string): Promise<void>;
|
|
27
|
+
private getNextStage;
|
|
28
|
+
private getPromotionReason;
|
|
29
|
+
private getDecayFactor;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=dikw-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dikw-pipeline.d.ts","sourceRoot":"","sources":["../src/dikw-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,YAAY;IACX,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAEnC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7G,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,SAAS,CAAC;QAAC,EAAE,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC;IAc/F,iBAAiB,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,SAAS,CAAC;YAAC,EAAE,EAAE,SAAS,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAgBlH,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnE,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IASxC,UAAU,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IA2B5D,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBpE,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;CAOvB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
export class DikwPipeline {
|
|
2
|
+
store;
|
|
3
|
+
constructor(store) {
|
|
4
|
+
this.store = store;
|
|
5
|
+
}
|
|
6
|
+
async recordObservation(content, kind, projectId, tags) {
|
|
7
|
+
return this.store.storeKnowledge({
|
|
8
|
+
content,
|
|
9
|
+
kind,
|
|
10
|
+
dikwStage: 'nascent',
|
|
11
|
+
strength: 0.5,
|
|
12
|
+
tags: tags ?? [],
|
|
13
|
+
sourceCount: 1,
|
|
14
|
+
contextCount: 1,
|
|
15
|
+
projectId,
|
|
16
|
+
decayRate: 0.01,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async evaluatePromotion(id) {
|
|
20
|
+
const item = await this.store.getKnowledge(id);
|
|
21
|
+
if (!item)
|
|
22
|
+
return { promoted: false };
|
|
23
|
+
const nextStage = this.getNextStage(item);
|
|
24
|
+
if (!nextStage)
|
|
25
|
+
return { promoted: false };
|
|
26
|
+
const from = item.dikwStage;
|
|
27
|
+
await this.store.updateKnowledge(id, { dikwStage: nextStage });
|
|
28
|
+
await this.store.logMaturation(id, from, nextStage, this.getPromotionReason(from, nextStage, item), 'auto');
|
|
29
|
+
return { promoted: true, from, to: nextStage };
|
|
30
|
+
}
|
|
31
|
+
async runPromotionCycle() {
|
|
32
|
+
const allKnowledge = await this.store.getAllKnowledge();
|
|
33
|
+
const details = [];
|
|
34
|
+
for (const item of allKnowledge) {
|
|
35
|
+
if (item.dikwStage === 'canonical')
|
|
36
|
+
continue;
|
|
37
|
+
const result = await this.evaluatePromotion(item.id);
|
|
38
|
+
if (result.promoted && result.from && result.to) {
|
|
39
|
+
details.push({ id: item.id, from: result.from, to: result.to });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { promoted: details.length, details };
|
|
43
|
+
}
|
|
44
|
+
async promoteToCanonical(id, reason) {
|
|
45
|
+
const item = await this.store.getKnowledge(id);
|
|
46
|
+
if (!item)
|
|
47
|
+
return;
|
|
48
|
+
const from = item.dikwStage;
|
|
49
|
+
await this.store.updateKnowledge(id, { dikwStage: 'canonical' });
|
|
50
|
+
await this.store.logMaturation(id, from, 'canonical', reason, 'human');
|
|
51
|
+
}
|
|
52
|
+
calculateStrength(item) {
|
|
53
|
+
const base = 0.5;
|
|
54
|
+
const sourceFactor = 1 + Math.log(Math.max(1, item.sourceCount));
|
|
55
|
+
const contextFactor = 1 + Math.log(Math.max(1, item.contextCount));
|
|
56
|
+
const decayFactor = this.getDecayFactor(item);
|
|
57
|
+
return base * sourceFactor * contextFactor * decayFactor;
|
|
58
|
+
}
|
|
59
|
+
async applyDecay() {
|
|
60
|
+
const allKnowledge = await this.store.getAllKnowledge();
|
|
61
|
+
let decayed = 0;
|
|
62
|
+
let archived = 0;
|
|
63
|
+
const now = new Date();
|
|
64
|
+
for (const item of allKnowledge) {
|
|
65
|
+
const newStrength = this.calculateStrength(item);
|
|
66
|
+
if (newStrength !== item.strength) {
|
|
67
|
+
await this.store.updateKnowledge(item.id, { strength: newStrength });
|
|
68
|
+
decayed++;
|
|
69
|
+
}
|
|
70
|
+
if (newStrength < 0.05 && item.lastAccessedAt) {
|
|
71
|
+
const lastAccessed = new Date(item.lastAccessedAt);
|
|
72
|
+
const daysSinceAccess = (now.getTime() - lastAccessed.getTime()) / (1000 * 60 * 60 * 24);
|
|
73
|
+
if (daysSinceAccess > 90) {
|
|
74
|
+
await this.store.deleteKnowledge(item.id);
|
|
75
|
+
archived++;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return { decayed, archived };
|
|
80
|
+
}
|
|
81
|
+
async recordReference(id, contextId) {
|
|
82
|
+
const item = await this.store.getKnowledge(id);
|
|
83
|
+
if (!item)
|
|
84
|
+
return;
|
|
85
|
+
const updates = {
|
|
86
|
+
sourceCount: item.sourceCount + 1,
|
|
87
|
+
lastAccessedAt: new Date().toISOString(),
|
|
88
|
+
};
|
|
89
|
+
if (contextId && contextId !== item.projectId) {
|
|
90
|
+
updates.contextCount = item.contextCount + 1;
|
|
91
|
+
}
|
|
92
|
+
await this.store.updateKnowledge(id, updates);
|
|
93
|
+
}
|
|
94
|
+
getNextStage(item) {
|
|
95
|
+
switch (item.dikwStage) {
|
|
96
|
+
case 'nascent':
|
|
97
|
+
if (item.sourceCount >= 2)
|
|
98
|
+
return 'emerging';
|
|
99
|
+
break;
|
|
100
|
+
case 'emerging':
|
|
101
|
+
if (item.sourceCount >= 5 && item.contextCount >= 3)
|
|
102
|
+
return 'established';
|
|
103
|
+
break;
|
|
104
|
+
case 'established':
|
|
105
|
+
break;
|
|
106
|
+
case 'canonical':
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
getPromotionReason(from, to, item) {
|
|
112
|
+
switch (`${from}->${to}`) {
|
|
113
|
+
case 'nascent->emerging':
|
|
114
|
+
return `Auto-promoted: sourceCount=${item.sourceCount} >= 2`;
|
|
115
|
+
case 'emerging->established':
|
|
116
|
+
return `Auto-promoted: sourceCount=${item.sourceCount} >= 5, contextCount=${item.contextCount} >= 3`;
|
|
117
|
+
default:
|
|
118
|
+
return `Promoted from ${from} to ${to}`;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
getDecayFactor(item) {
|
|
122
|
+
if (!item.lastAccessedAt)
|
|
123
|
+
return 1.0;
|
|
124
|
+
const now = new Date();
|
|
125
|
+
const lastAccessed = new Date(item.lastAccessedAt);
|
|
126
|
+
const daysSinceAccess = (now.getTime() - lastAccessed.getTime()) / (1000 * 60 * 60 * 24);
|
|
127
|
+
return Math.exp(-item.decayRate * daysSinceAccess);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=dikw-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dikw-pipeline.js","sourceRoot":"","sources":["../src/dikw-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface EmbeddingProvider {
|
|
2
|
+
embed(text: string): Promise<number[]>;
|
|
3
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
4
|
+
readonly dimensions: number;
|
|
5
|
+
readonly ready: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface LocalEmbeddingProviderOptions {
|
|
8
|
+
model?: string;
|
|
9
|
+
cacheDir?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare class LocalEmbeddingProvider implements EmbeddingProvider {
|
|
12
|
+
private _model;
|
|
13
|
+
private _cacheDir;
|
|
14
|
+
private _pipeline;
|
|
15
|
+
private _initPromise;
|
|
16
|
+
private _ready;
|
|
17
|
+
readonly dimensions = 384;
|
|
18
|
+
constructor(options?: LocalEmbeddingProviderOptions);
|
|
19
|
+
get ready(): boolean;
|
|
20
|
+
private ensureInitialized;
|
|
21
|
+
private _initialize;
|
|
22
|
+
embed(text: string): Promise<number[]>;
|
|
23
|
+
embedBatch(texts: string[]): Promise<number[][]>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=embedding-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../src/embedding-provider.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAMD,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,sBAAuB,YAAW,iBAAiB;IAC9D,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,MAAM,CAAS;IAEvB,QAAQ,CAAC,UAAU,OAAoB;gBAE3B,OAAO,CAAC,EAAE,6BAA6B;IAKnD,IAAI,KAAK,IAAI,OAAO,CAEnB;YAEa,iBAAiB;YAQjB,WAAW;IAcnB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAWtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CAevD"}
|