@getplumb/core 0.1.6 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/README.md +2 -2
  2. package/dist/context-builder.d.ts +1 -7
  3. package/dist/context-builder.d.ts.map +1 -1
  4. package/dist/context-builder.js +7 -44
  5. package/dist/context-builder.js.map +1 -1
  6. package/dist/embedder.d.ts +16 -2
  7. package/dist/embedder.d.ts.map +1 -1
  8. package/dist/embedder.js +23 -4
  9. package/dist/embedder.js.map +1 -1
  10. package/dist/extraction-queue.d.ts +13 -3
  11. package/dist/extraction-queue.d.ts.map +1 -1
  12. package/dist/extraction-queue.js +21 -4
  13. package/dist/extraction-queue.js.map +1 -1
  14. package/dist/extractor.d.ts +2 -1
  15. package/dist/extractor.d.ts.map +1 -1
  16. package/dist/extractor.js +106 -7
  17. package/dist/extractor.js.map +1 -1
  18. package/dist/extractor.test.d.ts +2 -0
  19. package/dist/extractor.test.d.ts.map +1 -0
  20. package/dist/extractor.test.js +158 -0
  21. package/dist/extractor.test.js.map +1 -0
  22. package/dist/fact-search.d.ts +9 -5
  23. package/dist/fact-search.d.ts.map +1 -1
  24. package/dist/fact-search.js +25 -16
  25. package/dist/fact-search.js.map +1 -1
  26. package/dist/fact-search.test.d.ts +12 -0
  27. package/dist/fact-search.test.d.ts.map +1 -0
  28. package/dist/fact-search.test.js +117 -0
  29. package/dist/fact-search.test.js.map +1 -0
  30. package/dist/index.d.ts +6 -10
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -5
  33. package/dist/index.js.map +1 -1
  34. package/dist/llm-client.d.ts +11 -2
  35. package/dist/llm-client.d.ts.map +1 -1
  36. package/dist/llm-client.js +47 -3
  37. package/dist/llm-client.js.map +1 -1
  38. package/dist/local-store.d.ts +19 -63
  39. package/dist/local-store.d.ts.map +1 -1
  40. package/dist/local-store.js +353 -262
  41. package/dist/local-store.js.map +1 -1
  42. package/dist/local-store.test.d.ts +2 -0
  43. package/dist/local-store.test.d.ts.map +1 -0
  44. package/dist/local-store.test.js +146 -0
  45. package/dist/local-store.test.js.map +1 -0
  46. package/dist/raw-log-search.d.ts +9 -5
  47. package/dist/raw-log-search.d.ts.map +1 -1
  48. package/dist/raw-log-search.js +107 -29
  49. package/dist/raw-log-search.js.map +1 -1
  50. package/dist/raw-log-search.test.d.ts +12 -0
  51. package/dist/raw-log-search.test.d.ts.map +1 -0
  52. package/dist/raw-log-search.test.js +124 -0
  53. package/dist/raw-log-search.test.js.map +1 -0
  54. package/dist/read-path.d.ts +6 -23
  55. package/dist/read-path.d.ts.map +1 -1
  56. package/dist/read-path.js +9 -48
  57. package/dist/read-path.js.map +1 -1
  58. package/dist/read-path.test.d.ts +15 -0
  59. package/dist/read-path.test.d.ts.map +1 -0
  60. package/dist/read-path.test.js +393 -0
  61. package/dist/read-path.test.js.map +1 -0
  62. package/dist/schema.d.ts +4 -13
  63. package/dist/schema.d.ts.map +1 -1
  64. package/dist/schema.js +42 -52
  65. package/dist/schema.js.map +1 -1
  66. package/dist/scorer.d.ts +0 -9
  67. package/dist/scorer.d.ts.map +1 -1
  68. package/dist/scorer.js +1 -31
  69. package/dist/scorer.js.map +1 -1
  70. package/dist/scorer.test.d.ts +10 -0
  71. package/dist/scorer.test.d.ts.map +1 -0
  72. package/dist/scorer.test.js +169 -0
  73. package/dist/scorer.test.js.map +1 -0
  74. package/dist/store.d.ts +2 -14
  75. package/dist/store.d.ts.map +1 -1
  76. package/dist/types.d.ts +0 -25
  77. package/dist/types.d.ts.map +1 -1
  78. package/dist/types.js +1 -6
  79. package/dist/types.js.map +1 -1
  80. package/dist/wasm-db.d.ts +63 -8
  81. package/dist/wasm-db.d.ts.map +1 -1
  82. package/dist/wasm-db.js +124 -31
  83. package/dist/wasm-db.js.map +1 -1
  84. package/package.json +14 -2
package/dist/schema.d.ts CHANGED
@@ -1,29 +1,20 @@
1
1
  /**
2
2
  * SQLite schema for Plumb LocalStore.
3
3
  *
4
- * Two tables per user (scoped by user_id column, NOT separate tables per user):
5
- * - facts: Layer 2 structured fact graph (subject-predicate-object triples)
6
- * - raw_log: Layer 1 lossless conversation chunks
4
+ * Single table per user (scoped by user_id column):
5
+ * - raw_log: Lossless conversation chunks with vector embeddings
7
6
  *
8
7
  * Design principles:
9
- * - Soft deletes only: deleted_at timestamp, never hard delete
10
8
  * - Cross-session by design: session info stored as metadata, not as a boundary
11
- * - Indexes on high-cardinality query axes: user_id, session_id, timestamp, deleted_at
9
+ * - Indexes on high-cardinality query axes: user_id, session_id, timestamp
12
10
  */
13
- export declare const CREATE_FACTS_TABLE = "\n CREATE TABLE IF NOT EXISTS facts (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n confidence REAL NOT NULL,\n decay_rate TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n source_session_id TEXT NOT NULL,\n source_session_label TEXT,\n context TEXT,\n deleted_at TEXT\n )\n";
14
- export declare const CREATE_FACTS_INDEXES: string[];
15
- export declare const CREATE_RAW_LOG_TABLE = "\n CREATE TABLE IF NOT EXISTS raw_log (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n session_label TEXT,\n user_message TEXT NOT NULL,\n agent_response TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n source TEXT NOT NULL,\n chunk_text TEXT NOT NULL,\n chunk_index INTEGER NOT NULL,\n vec_rowid INTEGER,\n content_hash TEXT,\n UNIQUE(user_id, content_hash)\n )\n";
11
+ export declare const CREATE_RAW_LOG_TABLE = "\n CREATE TABLE IF NOT EXISTS raw_log (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n session_label TEXT,\n user_message TEXT NOT NULL,\n agent_response TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n source TEXT NOT NULL,\n chunk_text TEXT NOT NULL,\n chunk_index INTEGER NOT NULL,\n vec_rowid INTEGER,\n content_hash TEXT,\n embed_status TEXT NOT NULL DEFAULT 'pending',\n embed_error TEXT,\n embed_model TEXT,\n parent_id TEXT REFERENCES raw_log(id),\n UNIQUE(user_id, content_hash)\n )\n";
16
12
  export declare const CREATE_RAW_LOG_INDEXES: string[];
17
13
  /**
18
14
  * Embeddings table for vector search over raw_log chunks.
19
15
  * Stores embeddings as JSON arrays (WASM-compatible, no native extension needed).
20
16
  */
21
17
  export declare const CREATE_VEC_RAW_LOG = "\n CREATE TABLE IF NOT EXISTS vec_raw_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding TEXT NOT NULL\n )\n";
22
- /**
23
- * Embeddings table for vector search over facts.
24
- * Stores embeddings as JSON arrays (WASM-compatible, no native extension needed).
25
- */
26
- export declare const CREATE_VEC_FACTS = "\n CREATE TABLE IF NOT EXISTS vec_facts (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding TEXT NOT NULL\n )\n";
27
18
  /**
28
19
  * Nudge log table for tracking one-time upgrade prompts.
29
20
  * Each trigger type fires exactly once per install.
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,kBAAkB,0fAe9B,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAKhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,8dAgBhC,CAAC;AAEF,eAAO,MAAM,sBAAsB,UAIlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gIAK9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,8HAK5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,8JAMlC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,cAAc,EAAE,MAAM,GAAG,IAAI,CA8CnE"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,eAAO,MAAM,oBAAoB,onBAoBhC,CAAC;AAEF,eAAO,MAAM,sBAAsB,UAKlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gIAK9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,8JAMlC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,cAAc,EAAE,MAAM,GAAG,IAAI,CAoEnE"}
package/dist/schema.js CHANGED
@@ -1,37 +1,13 @@
1
1
  /**
2
2
  * SQLite schema for Plumb LocalStore.
3
3
  *
4
- * Two tables per user (scoped by user_id column, NOT separate tables per user):
5
- * - facts: Layer 2 structured fact graph (subject-predicate-object triples)
6
- * - raw_log: Layer 1 lossless conversation chunks
4
+ * Single table per user (scoped by user_id column):
5
+ * - raw_log: Lossless conversation chunks with vector embeddings
7
6
  *
8
7
  * Design principles:
9
- * - Soft deletes only: deleted_at timestamp, never hard delete
10
8
  * - Cross-session by design: session info stored as metadata, not as a boundary
11
- * - Indexes on high-cardinality query axes: user_id, session_id, timestamp, deleted_at
9
+ * - Indexes on high-cardinality query axes: user_id, session_id, timestamp
12
10
  */
13
- export const CREATE_FACTS_TABLE = `
14
- CREATE TABLE IF NOT EXISTS facts (
15
- id TEXT PRIMARY KEY,
16
- user_id TEXT NOT NULL,
17
- subject TEXT NOT NULL,
18
- predicate TEXT NOT NULL,
19
- object TEXT NOT NULL,
20
- confidence REAL NOT NULL,
21
- decay_rate TEXT NOT NULL,
22
- timestamp TEXT NOT NULL,
23
- source_session_id TEXT NOT NULL,
24
- source_session_label TEXT,
25
- context TEXT,
26
- deleted_at TEXT
27
- )
28
- `;
29
- export const CREATE_FACTS_INDEXES = [
30
- `CREATE INDEX IF NOT EXISTS idx_facts_user_id ON facts (user_id)`,
31
- `CREATE INDEX IF NOT EXISTS idx_facts_session_id ON facts (source_session_id)`,
32
- `CREATE INDEX IF NOT EXISTS idx_facts_timestamp ON facts (timestamp)`,
33
- `CREATE INDEX IF NOT EXISTS idx_facts_deleted_at ON facts (deleted_at)`,
34
- ];
35
11
  export const CREATE_RAW_LOG_TABLE = `
36
12
  CREATE TABLE IF NOT EXISTS raw_log (
37
13
  id TEXT PRIMARY KEY,
@@ -46,6 +22,10 @@ export const CREATE_RAW_LOG_TABLE = `
46
22
  chunk_index INTEGER NOT NULL,
47
23
  vec_rowid INTEGER,
48
24
  content_hash TEXT,
25
+ embed_status TEXT NOT NULL DEFAULT 'pending',
26
+ embed_error TEXT,
27
+ embed_model TEXT,
28
+ parent_id TEXT REFERENCES raw_log(id),
49
29
  UNIQUE(user_id, content_hash)
50
30
  )
51
31
  `;
@@ -53,6 +33,7 @@ export const CREATE_RAW_LOG_INDEXES = [
53
33
  `CREATE INDEX IF NOT EXISTS idx_raw_log_user_id ON raw_log (user_id)`,
54
34
  `CREATE INDEX IF NOT EXISTS idx_raw_log_session_id ON raw_log (session_id)`,
55
35
  `CREATE INDEX IF NOT EXISTS idx_raw_log_timestamp ON raw_log (timestamp)`,
36
+ `CREATE INDEX IF NOT EXISTS idx_raw_log_parent_id ON raw_log (parent_id)`,
56
37
  ];
57
38
  /**
58
39
  * Embeddings table for vector search over raw_log chunks.
@@ -64,16 +45,6 @@ export const CREATE_VEC_RAW_LOG = `
64
45
  embedding TEXT NOT NULL
65
46
  )
66
47
  `;
67
- /**
68
- * Embeddings table for vector search over facts.
69
- * Stores embeddings as JSON arrays (WASM-compatible, no native extension needed).
70
- */
71
- export const CREATE_VEC_FACTS = `
72
- CREATE TABLE IF NOT EXISTS vec_facts (
73
- id INTEGER PRIMARY KEY AUTOINCREMENT,
74
- embedding TEXT NOT NULL
75
- )
76
- `;
77
48
  /**
78
49
  * Nudge log table for tracking one-time upgrade prompts.
79
50
  * Each trigger type fires exactly once per install.
@@ -86,26 +57,11 @@ export const CREATE_NUDGE_LOG_TABLE = `
86
57
  )
87
58
  `;
88
59
  export function applySchema(db) {
89
- db.exec(CREATE_FACTS_TABLE);
90
- for (const idx of CREATE_FACTS_INDEXES) {
91
- db.exec(idx);
92
- }
93
60
  db.exec(CREATE_RAW_LOG_TABLE);
94
61
  for (const idx of CREATE_RAW_LOG_INDEXES) {
95
62
  db.exec(idx);
96
63
  }
97
64
  db.exec(CREATE_VEC_RAW_LOG);
98
- db.exec(CREATE_VEC_FACTS);
99
- // Conditional migration: add vec_rowid column to facts if it doesn't exist yet.
100
- const factsColumns = db.exec({
101
- sql: 'PRAGMA table_info(facts)',
102
- rowMode: 'object',
103
- returnValue: 'resultRows',
104
- });
105
- const hasVecRowid = factsColumns.some((c) => c.name === 'vec_rowid');
106
- if (!hasVecRowid) {
107
- db.exec('ALTER TABLE facts ADD COLUMN vec_rowid INTEGER');
108
- }
109
65
  // Conditional migration: add content_hash column to raw_log if it doesn't exist yet.
110
66
  const rawLogColumns = db.exec({
111
67
  sql: 'PRAGMA table_info(raw_log)',
@@ -128,5 +84,39 @@ export function applySchema(db) {
128
84
  if (tables.length === 0) {
129
85
  db.exec(CREATE_NUDGE_LOG_TABLE);
130
86
  }
87
+ // T-079: Conditional migration for processing state machine columns (embed only).
88
+ const rawLogColumns2 = db.exec({
89
+ sql: 'PRAGMA table_info(raw_log)',
90
+ rowMode: 'object',
91
+ returnValue: 'resultRows',
92
+ });
93
+ // Add embed columns to raw_log if they don't exist.
94
+ const hasEmbedStatus = rawLogColumns2.some((c) => c.name === 'embed_status');
95
+ if (!hasEmbedStatus) {
96
+ // Add embed columns with defaults.
97
+ db.exec('ALTER TABLE raw_log ADD COLUMN embed_status TEXT NOT NULL DEFAULT \'pending\'');
98
+ db.exec('ALTER TABLE raw_log ADD COLUMN embed_error TEXT');
99
+ db.exec('ALTER TABLE raw_log ADD COLUMN embed_model TEXT');
100
+ // Backfill embed_status for existing rows based on vec_rowid.
101
+ // Rows with vec_rowid already set -> embed_status='done', embed_model='Xenova/bge-small-en-v1.5'
102
+ db.exec(`
103
+ UPDATE raw_log
104
+ SET embed_status = 'done', embed_model = 'Xenova/bge-small-en-v1.5'
105
+ WHERE vec_rowid IS NOT NULL
106
+ `);
107
+ // Rows with vec_rowid=NULL remain embed_status='pending' (from DEFAULT).
108
+ }
109
+ // T-108: Add parent_id column to raw_log if it doesn't exist (for parent-child chunking).
110
+ const rawLogColumns3 = db.exec({
111
+ sql: 'PRAGMA table_info(raw_log)',
112
+ rowMode: 'object',
113
+ returnValue: 'resultRows',
114
+ });
115
+ const hasParentId = rawLogColumns3.some((c) => c.name === 'parent_id');
116
+ if (!hasParentId) {
117
+ db.exec('ALTER TABLE raw_log ADD COLUMN parent_id TEXT REFERENCES raw_log(id)');
118
+ db.exec('CREATE INDEX IF NOT EXISTS idx_raw_log_parent_id ON raw_log (parent_id)');
119
+ // Existing rows have parent_id=NULL (they are parent-only rows, treated as searchable fallback).
120
+ }
131
121
  }
132
122
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;CAejC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,iEAAiE;IACjE,8EAA8E;IAC9E,qEAAqE;IACrE,uEAAuE;CACxE,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;CAgBnC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,qEAAqE;IACrE,2EAA2E;IAC3E,yEAAyE;CAC1E,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;CAKjC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;CAK/B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;CAMrC,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAiC;IAC3D,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACvC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACzC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;IACD,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC5B,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE1B,gFAAgF;IAChF,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC;QAC3B,GAAG,EAAE,0BAA0B;QAC/B,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,YAAY;KAC1B,CAA4B,CAAC;IAC9B,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACrE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,EAAE,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC5D,CAAC;IAED,qFAAqF;IACrF,MAAM,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC;QAC5B,GAAG,EAAE,4BAA4B;QACjC,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,YAAY;KAC1B,CAA4B,CAAC;IAC9B,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IAC5E,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,EAAE,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QAC5D,uDAAuD;QACvD,2FAA2F;QAC3F,EAAE,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;IAC1G,CAAC;IAED,yEAAyE;IACzE,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,GAAG,EAAE,wEAAwE;QAC7E,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,YAAY;KAC1B,CAA4B,CAAC;IAC9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
package/dist/scorer.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { type Fact } from './types.js';
2
1
  export interface ScoreResult {
3
2
  readonly score: number;
4
3
  readonly isCold: boolean;
@@ -14,14 +13,6 @@ export interface RawLogChunk {
14
13
  * Computes the exponential decay multiplier: e^(-lambda × age_in_days).
15
14
  */
16
15
  export declare function computeDecay(lambda: number, ageInDays: number): number;
17
- /**
18
- * Scores a fact at read time using:
19
- * score = base_confidence × e^(-lambda × age_in_days) × retrieval_frequency_boost
20
- *
21
- * Returns a ScoreResult with the computed score (0–1) and an isCold flag.
22
- * Facts are never deleted — cold facts (score < 0.01) remain queryable.
23
- */
24
- export declare function scoreFact(fact: Fact, now?: Date): ScoreResult;
25
16
  /**
26
17
  * Scores a raw log chunk using medium decay (lambda = 0.012).
27
18
  * Raw chunks have no confidence field; decay is applied to a base of 1.0.
@@ -1 +1 @@
1
- {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAqBlD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,IAAiB,GAAG,WAAW,CAUzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,GAAG,GAAE,IAAiB,GACrB,WAAW,CAKb"}
1
+ {"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,WAAW,EAClB,GAAG,GAAE,IAAiB,GACrB,WAAW,CAKb"}
package/dist/scorer.js CHANGED
@@ -1,19 +1,6 @@
1
- import { DecayRate } from './types.js';
2
- /**
3
- * Lambda decay constants per decay rate.
4
- * These control how quickly a fact loses relevance over time.
5
- * slow (0.003): identity, stable preferences — half-life ~231 days
6
- * medium (0.012): tool prefs, project context — half-life ~58 days
7
- * fast (0.050): transient state — half-life ~14 days
8
- */
9
- const LAMBDA = {
10
- [DecayRate.slow]: 0.003,
11
- [DecayRate.medium]: 0.012,
12
- [DecayRate.fast]: 0.05,
13
- };
14
1
  /** Lambda applied to raw log chunks (medium decay). */
15
2
  const RAW_LOG_LAMBDA = 0.012;
16
- /** Cold score threshold — facts below this are flagged but never deleted. */
3
+ /** Cold score threshold — chunks below this are flagged. */
17
4
  const COLD_THRESHOLD = 0.01;
18
5
  /**
19
6
  * Computes the exponential decay multiplier: e^(-lambda × age_in_days).
@@ -21,23 +8,6 @@ const COLD_THRESHOLD = 0.01;
21
8
  export function computeDecay(lambda, ageInDays) {
22
9
  return Math.exp(-lambda * ageInDays);
23
10
  }
24
- /**
25
- * Scores a fact at read time using:
26
- * score = base_confidence × e^(-lambda × age_in_days) × retrieval_frequency_boost
27
- *
28
- * Returns a ScoreResult with the computed score (0–1) and an isCold flag.
29
- * Facts are never deleted — cold facts (score < 0.01) remain queryable.
30
- */
31
- export function scoreFact(fact, now = new Date()) {
32
- const ageInDays = (now.getTime() - fact.timestamp.getTime()) / (1_000 * 60 * 60 * 24);
33
- const lambda = LAMBDA[fact.decayRate];
34
- const decay = computeDecay(lambda, ageInDays);
35
- // TODO: retrieval_frequency_boost — track access frequency in T-008 read path;
36
- // for now we use 1.0 (no boost) as a placeholder.
37
- const boost = 1.0;
38
- const score = fact.confidence * decay * boost;
39
- return { score, isCold: score < COLD_THRESHOLD };
40
- }
41
11
  /**
42
12
  * Scores a raw log chunk using medium decay (lambda = 0.012).
43
13
  * Raw chunks have no confidence field; decay is applied to a base of 1.0.
@@ -1 +1 @@
1
- {"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,MAAM,GAA8B;IACxC,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK;IACvB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK;IACzB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI;CACvB,CAAC;AAEF,uDAAuD;AACvD,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,6EAA6E;AAC7E,MAAM,cAAc,GAAG,IAAI,CAAC;AAe5B;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,SAAiB;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAU,EAAE,MAAY,IAAI,IAAI,EAAE;IAC1D,MAAM,SAAS,GACb,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC9C,+EAA+E;IAC/E,wDAAwD;IACxD,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,cAAc,EAAE,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,KAAkB,EAClB,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,SAAS,GACb,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACtD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,cAAc,EAAE,CAAC;AACnD,CAAC"}
1
+ {"version":3,"file":"scorer.js","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,4DAA4D;AAC5D,MAAM,cAAc,GAAG,IAAI,CAAC;AAe5B;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,SAAiB;IAC5D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,KAAkB,EAClB,MAAY,IAAI,IAAI,EAAE;IAEtB,MAAM,SAAS,GACb,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACtD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,cAAc,EAAE,CAAC;AACnD,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * scorer.test.ts — decay curve verification for scoreFact() and scoreRawLog().
3
+ *
4
+ * Note on the "~0.31 at 49 days medium" reference in the architecture doc:
5
+ * With lambda=0.012 the correct value at 49 days is ~0.528 (confidence=0.95).
6
+ * The ~0.31 figure likely derives from an earlier lambda value (~0.023).
7
+ * These tests assert against the actual computed values for the specified lambdas.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=scorer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorer.test.d.ts","sourceRoot":"","sources":["../src/scorer.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * scorer.test.ts — decay curve verification for scoreFact() and scoreRawLog().
3
+ *
4
+ * Note on the "~0.31 at 49 days medium" reference in the architecture doc:
5
+ * With lambda=0.012 the correct value at 49 days is ~0.528 (confidence=0.95).
6
+ * The ~0.31 figure likely derives from an earlier lambda value (~0.023).
7
+ * These tests assert against the actual computed values for the specified lambdas.
8
+ */
9
+ import { strict as assert } from 'node:assert';
10
+ import { describe, it } from 'node:test';
11
+ import { DecayRate } from './types.js';
12
+ import { computeDecay, scoreFact, scoreRawLog } from './scorer.js';
13
+ /** Build a minimal Fact for testing. */
14
+ function makeFact(opts) {
15
+ const now = opts.now ?? new Date('2026-01-01T00:00:00.000Z');
16
+ const timestamp = new Date(now.getTime() - opts.ageInDays * 24 * 60 * 60 * 1_000);
17
+ return {
18
+ fact: {
19
+ id: 'test-id',
20
+ subject: 'test subject',
21
+ predicate: 'test predicate',
22
+ object: 'test object',
23
+ confidence: opts.confidence,
24
+ decayRate: opts.decayRate,
25
+ timestamp,
26
+ sourceSessionId: 'session-1',
27
+ },
28
+ now,
29
+ };
30
+ }
31
+ describe('computeDecay', () => {
32
+ it('returns 1.0 at age 0 regardless of lambda', () => {
33
+ assert.equal(computeDecay(0.003, 0), 1.0);
34
+ assert.equal(computeDecay(0.012, 0), 1.0);
35
+ assert.equal(computeDecay(0.05, 0), 1.0);
36
+ });
37
+ it('medium lambda at 49 days matches expected decay', () => {
38
+ const decay = computeDecay(0.012, 49);
39
+ // e^(-0.012 * 49) = e^(-0.588) ≈ 0.5557
40
+ assert.ok(decay > 0.55 && decay < 0.57, `expected ~0.5557, got ${decay}`);
41
+ });
42
+ it('fast lambda decays faster than slow at same age', () => {
43
+ assert.ok(computeDecay(0.05, 30) < computeDecay(0.003, 30));
44
+ });
45
+ });
46
+ describe('scoreFact — decay curves', () => {
47
+ it('age=0, slow decay, confidence=0.95 → ~0.95', () => {
48
+ const { fact, now } = makeFact({
49
+ confidence: 0.95,
50
+ decayRate: DecayRate.slow,
51
+ ageInDays: 0,
52
+ });
53
+ const result = scoreFact(fact, now);
54
+ assert.ok(result.score > 0.949 && result.score <= 0.95, `expected ~0.95, got ${result.score}`);
55
+ assert.equal(result.isCold, false);
56
+ });
57
+ it('age=49 days, medium decay, confidence=0.95 → ~0.528', () => {
58
+ const { fact, now } = makeFact({
59
+ confidence: 0.95,
60
+ decayRate: DecayRate.medium,
61
+ ageInDays: 49,
62
+ });
63
+ const result = scoreFact(fact, now);
64
+ // 0.95 × e^(-0.012 × 49) ≈ 0.5277
65
+ assert.ok(result.score > 0.52 && result.score < 0.54, `expected ~0.528, got ${result.score}`);
66
+ assert.equal(result.isCold, false);
67
+ });
68
+ it('age=365 days, medium decay, confidence=0.95 → ~0.012 (near cold)', () => {
69
+ const { fact, now } = makeFact({
70
+ confidence: 0.95,
71
+ decayRate: DecayRate.medium,
72
+ ageInDays: 365,
73
+ });
74
+ const result = scoreFact(fact, now);
75
+ // 0.95 × e^(-0.012 × 365) ≈ 0.01190
76
+ assert.ok(result.score > 0.01 && result.score < 0.02, `expected ~0.012, got ${result.score}`);
77
+ assert.equal(result.isCold, false);
78
+ });
79
+ it('age=400 days, medium decay, confidence=0.95 → isCold (score < 0.01)', () => {
80
+ const { fact, now } = makeFact({
81
+ confidence: 0.95,
82
+ decayRate: DecayRate.medium,
83
+ ageInDays: 400,
84
+ });
85
+ const result = scoreFact(fact, now);
86
+ // 0.95 × e^(-0.012 × 400) ≈ 0.00782
87
+ assert.ok(result.score < 0.01, `expected score < 0.01, got ${result.score}`);
88
+ assert.equal(result.isCold, true);
89
+ });
90
+ it('age=30 days, fast decay, confidence=0.95 → < 0.25', () => {
91
+ const { fact, now } = makeFact({
92
+ confidence: 0.95,
93
+ decayRate: DecayRate.fast,
94
+ ageInDays: 30,
95
+ });
96
+ const result = scoreFact(fact, now);
97
+ // 0.95 × e^(-0.05 × 30) ≈ 0.2120
98
+ assert.ok(result.score < 0.25, `expected < 0.25, got ${result.score}`);
99
+ assert.equal(result.isCold, false);
100
+ });
101
+ it('confidence=0 → score=0, isCold=true', () => {
102
+ const { fact, now } = makeFact({
103
+ confidence: 0,
104
+ decayRate: DecayRate.medium,
105
+ ageInDays: 49,
106
+ });
107
+ const result = scoreFact(fact, now);
108
+ assert.equal(result.score, 0);
109
+ assert.equal(result.isCold, true);
110
+ });
111
+ it('score is bounded between 0 and 1', () => {
112
+ const ages = [0, 1, 30, 100, 365, 730];
113
+ const rates = [DecayRate.slow, DecayRate.medium, DecayRate.fast];
114
+ for (const ageInDays of ages) {
115
+ for (const decayRate of rates) {
116
+ const { fact, now } = makeFact({ confidence: 0.95, decayRate, ageInDays });
117
+ const { score } = scoreFact(fact, now);
118
+ assert.ok(score >= 0 && score <= 1, `score out of range: ${score}`);
119
+ }
120
+ }
121
+ });
122
+ it('uses current time when now is omitted (smoke test)', () => {
123
+ const fact = {
124
+ id: 'x',
125
+ subject: 's',
126
+ predicate: 'p',
127
+ object: 'o',
128
+ confidence: 0.8,
129
+ decayRate: DecayRate.slow,
130
+ timestamp: new Date(),
131
+ sourceSessionId: 'sess',
132
+ };
133
+ // Should not throw; score should be close to 0.8 for age≈0
134
+ const { score } = scoreFact(fact);
135
+ assert.ok(score > 0.79 && score <= 0.8, `expected ~0.8, got ${score}`);
136
+ });
137
+ });
138
+ describe('scoreRawLog — medium decay', () => {
139
+ it('age=0 → score ≈ 1.0, not cold', () => {
140
+ const now = new Date('2026-01-01T00:00:00.000Z');
141
+ const chunk = { timestamp: now };
142
+ const result = scoreRawLog(chunk, now);
143
+ assert.equal(result.score, 1.0);
144
+ assert.equal(result.isCold, false);
145
+ });
146
+ it('age=49 days → score ~0.557 (medium decay on base 1.0)', () => {
147
+ const now = new Date('2026-01-01T00:00:00.000Z');
148
+ const timestamp = new Date(now.getTime() - 49 * 24 * 60 * 60 * 1_000);
149
+ const result = scoreRawLog({ timestamp }, now);
150
+ // e^(-0.012 × 49) ≈ 0.5557
151
+ assert.ok(result.score > 0.54 && result.score < 0.57, `expected ~0.556, got ${result.score}`);
152
+ assert.equal(result.isCold, false);
153
+ });
154
+ it('age=365 days → score ~0.0125, not yet cold', () => {
155
+ const now = new Date('2026-01-01T00:00:00.000Z');
156
+ const timestamp = new Date(now.getTime() - 365 * 24 * 60 * 60 * 1_000);
157
+ const result = scoreRawLog({ timestamp }, now);
158
+ assert.ok(result.score > 0.01 && result.score < 0.02, `expected ~0.0125, got ${result.score}`);
159
+ assert.equal(result.isCold, false);
160
+ });
161
+ it('age=400 days → isCold', () => {
162
+ const now = new Date('2026-01-01T00:00:00.000Z');
163
+ const timestamp = new Date(now.getTime() - 400 * 24 * 60 * 60 * 1_000);
164
+ const result = scoreRawLog({ timestamp }, now);
165
+ assert.ok(result.score < 0.01, `expected < 0.01, got ${result.score}`);
166
+ assert.equal(result.isCold, true);
167
+ });
168
+ });
169
+ //# sourceMappingURL=scorer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scorer.test.js","sourceRoot":"","sources":["../src/scorer.test.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -1,24 +1,12 @@
1
- import type { Fact, IngestResult, MessageExchange, SearchResult, StoreStatus } from './types.js';
1
+ import type { IngestResult, MessageExchange, StoreStatus } from './types.js';
2
2
  export interface MemoryStore {
3
- /**
4
- * Write a fact to the store. The store generates and returns the id.
5
- */
6
- store(fact: Omit<Fact, 'id'>): Promise<string>;
7
- /**
8
- * Search for facts matching the query. Returns ranked results with score and age.
9
- */
10
- search(query: string, limit?: number): Promise<readonly SearchResult[]>;
11
- /**
12
- * Delete a fact by id.
13
- */
14
- delete(id: string): Promise<void>;
15
3
  /**
16
4
  * Return current store statistics.
17
5
  */
18
6
  status(): Promise<StoreStatus>;
19
7
  /**
20
8
  * High-level entry point for ingesting a conversation exchange.
21
- * Triggers both Layer 1 (raw log) and Layer 2 (fact extraction) writes.
9
+ * Writes to raw_log table and enqueues embedding.
22
10
  */
23
11
  ingest(exchange: MessageExchange): Promise<IngestResult>;
24
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEjG,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/C;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAExE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElC;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAE/B;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1D"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAE/B;;;OAGG;IACH,MAAM,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC1D"}
package/dist/types.d.ts CHANGED
@@ -1,20 +1,3 @@
1
- export declare enum DecayRate {
2
- slow = "slow",
3
- medium = "medium",
4
- fast = "fast"
5
- }
6
- export interface Fact {
7
- readonly id: string;
8
- readonly subject: string;
9
- readonly predicate: string;
10
- readonly object: string;
11
- readonly confidence: number;
12
- readonly decayRate: DecayRate;
13
- readonly timestamp: Date;
14
- readonly sourceSessionId: string;
15
- readonly sourceSessionLabel?: string;
16
- readonly context?: string;
17
- }
18
1
  export interface MessageExchange {
19
2
  readonly userMessage: string;
20
3
  readonly agentResponse: string;
@@ -26,19 +9,11 @@ export interface MessageExchange {
26
9
  }
27
10
  export interface IngestResult {
28
11
  readonly rawLogId: string;
29
- readonly factsExtracted: number;
30
- readonly factIds: readonly string[];
31
12
  readonly skipped?: boolean;
32
13
  }
33
14
  export interface StoreStatus {
34
- readonly factCount: number;
35
15
  readonly rawLogCount: number;
36
16
  readonly lastIngestion: Date | null;
37
17
  readonly storageBytes: number;
38
18
  }
39
- export interface SearchResult {
40
- readonly fact: Fact;
41
- readonly score: number;
42
- readonly ageInDays: number;
43
- }
44
19
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACnB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,IAAI,SAAS;CACd;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,gBAAgB,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,aAAa,GAAG,gBAAgB,CAAC;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B"}
package/dist/types.js CHANGED
@@ -1,7 +1,2 @@
1
- export var DecayRate;
2
- (function (DecayRate) {
3
- DecayRate["slow"] = "slow";
4
- DecayRate["medium"] = "medium";
5
- DecayRate["fast"] = "fast";
6
- })(DecayRate || (DecayRate = {}));
1
+ export {};
7
2
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACnB,0BAAa,CAAA;IACb,8BAAiB,CAAA;IACjB,0BAAa,CAAA;AACf,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}