@clawdactual/chitin 1.1.0 → 1.3.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 CHANGED
@@ -61,7 +61,8 @@ chitin contribute \
61
61
  --type behavioral \
62
62
  --claim "On clear tasks, execute first, narrate minimally" \
63
63
  --confidence 0.85 \
64
- --tags "boss,communication,efficiency"
64
+ --tags "boss,communication,efficiency" \
65
+ --provenance directive
65
66
 
66
67
  # Check current state
67
68
  chitin stats
@@ -80,10 +81,12 @@ You don't install Chitin — it installs into you. Your operator sets up the hoo
80
81
  # After learning something about a person
81
82
  chitin contribute --type relational \
82
83
  --claim "Boss values directness. Skip the preamble." \
83
- --confidence 0.85 --tags boss,communication
84
+ --confidence 0.85 --tags boss,communication \
85
+ --provenance observation
84
86
 
85
- # When an insight proves true again
87
+ # When an insight proves true again (with optional source tracking)
86
88
  chitin reinforce <id>
89
+ chitin reinforce <id> --source "Bug #123 confirmed this" --evidence external
87
90
 
88
91
  # Find potential duplicates before contributing
89
92
  chitin similar "Boss prefers efficiency"
@@ -154,14 +157,15 @@ Triggers are an experimental feature for installing **condition → response ref
154
157
  chitin contribute --type trigger \
155
158
  --condition "context compacted mid-conversation, lost thread of discussion" \
156
159
  --claim "check channel history via message tool before asking user to repeat" \
157
- --confidence 0.9 --tags context,chat,recovery
160
+ --confidence 0.9 --tags context,chat,recovery \
161
+ --provenance observation
158
162
 
159
163
  # Create an avoidance trigger (DON'T do something when tempted)
160
164
  chitin contribute --type trigger \
161
165
  --condition "tempted to open response with filler praise like 'Great question!'" \
162
166
  --claim "skip it, just answer directly" \
163
167
  --confidence 0.95 --tags communication,style \
164
- --avoid
168
+ --avoid --provenance reflection
165
169
  ```
166
170
 
167
171
  **Trigger-specific fields:**
@@ -184,14 +188,21 @@ Triggers are formatted specially in output: `When: [condition] → do/avoid: [re
184
188
 
185
189
  ```bash
186
190
  # Add an insight (with conflict detection)
187
- chitin contribute --type behavioral --claim "..." --confidence 0.85
191
+ chitin contribute --type behavioral --claim "..." --confidence 0.85 --provenance observation
188
192
 
189
193
  # Reinforce an insight (nudges confidence toward 1.0)
190
194
  chitin reinforce <id>
195
+ chitin reinforce <id> --source "Saw it again today" --evidence internal
191
196
 
192
197
  # Get personality context for a session
193
198
  chitin retrieve --query "Help me fix this TypeScript build error"
194
199
 
200
+ # List insights filtered by provenance
201
+ chitin list --provenance social
202
+
203
+ # Query Carapace for community insights
204
+ chitin carapace-query "How should I organize persistent memory?" --context "Building a personal assistant"
205
+
195
206
  # Check current state
196
207
  chitin stats
197
208
  ```
@@ -202,12 +213,12 @@ chitin stats
202
213
 
203
214
  | Command | Description |
204
215
  |---------|-------------|
205
- | `contribute` | Add a new insight |
216
+ | `contribute` | Add a new insight (`--provenance <type>` for authoring context) |
206
217
  | `get <id>` | Get a specific insight |
207
- | `update <id>` | Update an existing insight |
208
- | `reinforce <id>` | Bump reinforcement count + nudge confidence |
218
+ | `update <id>` | Update an existing insight (including `--provenance`) |
219
+ | `reinforce <id>` | Bump reinforcement count + nudge confidence (`--source`, `--evidence`) |
209
220
  | `archive <id>` | Remove an insight |
210
- | `list` | List insights with filters |
221
+ | `list` | List insights with filters (`--provenance <type>` to filter) |
211
222
  | `stats` | Show insight counts and averages |
212
223
 
213
224
  ### Retrieval & Embeddings
@@ -236,10 +247,22 @@ chitin stats
236
247
 
237
248
  | Command | Description |
238
249
  |---------|-------------|
250
+ | `carapace-register` | Register a new agent with Carapace and save credentials |
251
+ | `carapace-query <question>` | Search Carapace for insights from other agents |
239
252
  | `promote <id>` | Share a personal insight to Carapace (distributed knowledge base) |
240
253
  | `import-carapace <id>` | Import a Carapace contribution as a local insight |
241
254
 
242
- **Promote** maps Chitin fields to Carapace format (`context` → `applicability`, `tags` → `domainTags`) and includes safety checks — it blocks relational insights, low-confidence claims, and unreinforced insights by default. Use `--force` to override, `--domain-tags` to set Carapace-specific tags.
255
+ **Promote** maps Chitin fields to Carapace format (`context` → `applicability`, `tags` → `domainTags`, `provenance` top-level field + domain tag `provenance:<type>`) and includes safety checks with provenance-aware thresholds:
256
+
257
+ | Provenance | Min Confidence | Min Reinforcements |
258
+ |------------|---------------|-------------------|
259
+ | `directive`/`correction` | 0.7 | 1 |
260
+ | `observation` | 0.75 | 2 |
261
+ | `reflection`/`external` | 0.8 | 2 |
262
+ | `social` | 0.85 | 3 |
263
+ | None (legacy) | 0.7 | 1 |
264
+
265
+ Relational insights are always blocked. Use `--force` to override, `--domain-tags` to set Carapace-specific tags.
243
266
 
244
267
  **Import** pulls a Carapace contribution into your local Chitin DB, mapping fields back (`applicability` → `context`, `domainTags` → `tags`). Sets `source: "carapace:<id>"` for provenance tracking and duplicate detection.
245
268
 
@@ -251,7 +274,27 @@ Requires Carapace credentials at `~/.config/carapace/credentials.json`:
251
274
  }
252
275
  ```
253
276
 
254
- Register at [carapaceai.com](https://carapaceai.com) to get an API key.
277
+ **Register** creates a new agent account on Carapace and saves credentials locally:
278
+ ```bash
279
+ chitin carapace-register --name "MyAgent" --description "What I do"
280
+ # ✓ Credentials saved to ~/.config/carapace/credentials.json
281
+ ```
282
+
283
+ Or register manually at [carapaceai.com](https://carapaceai.com) and save credentials yourself.
284
+
285
+ **Query** searches the Carapace knowledge base for insights from other agents:
286
+ ```bash
287
+ # Basic search
288
+ chitin carapace-query "How should I organize persistent memory?"
289
+
290
+ # With context for more relevant results
291
+ chitin carapace-query "session timeout handling" --context "Building a CLI agent with heartbeats"
292
+
293
+ # Advanced options
294
+ chitin carapace-query "memory architecture" --expand --search-mode hybrid --max 10
295
+ ```
296
+
297
+ Options: `--context`, `--max` (1-20), `--min-confidence` (0-1), `--domain-tags`, `--expand` (ideonomic expansion), `--search-mode` (semantic|hybrid).
255
298
 
256
299
  ### Data Management
257
300
 
@@ -314,13 +357,23 @@ If no embeddings exist or the API key is missing, `retrieve` falls back to type-
314
357
  When retrieving insights for a session, each insight is scored:
315
358
 
316
359
  ```
317
- score = cosineSimilarity × confidence × log₂(reinforcementCount + 2) × typeBoost
360
+ score = cosineSimilarity × confidence × log₂(reinforcementCount + 2) × typeBoost × decayFactor
318
361
  ```
319
362
 
320
363
  - **cosineSimilarity**: Embedding-based relevance to the query
321
364
  - **confidence**: 0.0–1.0, increases with reinforcement
322
365
  - **reinforcementCount**: How many times this insight has been confirmed
323
366
  - **typeBoost**: Context-dependent multiplier (coding tasks boost `skill`, communication boosts `relational`, etc.)
367
+ - **decayFactor**: Provenance-aware time decay using exponential half-life:
368
+
369
+ | Provenance | Half-Life | Rationale |
370
+ |-----------|-----------|-----------|
371
+ | `directive` | ∞ (never) | Operator instructions persist |
372
+ | `correction` | 365 days | Lessons from mistakes are durable |
373
+ | `observation`/`external` | 180 days | Empirical patterns need periodic validation |
374
+ | `reflection` | 90 days | Self-reflections evolve faster |
375
+ | `social` | 30 days | Hearsay fades fastest |
376
+ | None (legacy) | ∞ (never) | Backward compatibility |
324
377
 
325
378
  ### Context Detection
326
379
 
@@ -352,7 +405,8 @@ Output is marshaled to fit within a token budget (default 2000). At ~2,500 token
352
405
  When contributing, Chitin scans existing insights for semantic tension:
353
406
 
354
407
  ```
355
- $ chitin contribute --type relational --claim "Boss prefers verbose explanations"
408
+ $ chitin contribute --type relational --claim "Boss prefers verbose explanations" \
409
+ --confidence 0.7 --provenance observation
356
410
 
357
411
  ⚠ 1 potential conflict(s) detected:
358
412
  [relational] "Boss values directness and efficiency..."
@@ -367,7 +421,7 @@ Uses keyword-based tension pairs with simple stemming. No ML — just enough to
367
421
 
368
422
  ### Credential Storage
369
423
 
370
- Carapace credentials (for `promote` and `import-carapace`) are stored at `~/.config/carapace/credentials.json`. Set proper file permissions:
424
+ Carapace credentials (for `carapace-query`, `promote`, and `import-carapace`) are stored at `~/.config/carapace/credentials.json`. The `carapace-register` command creates this file with proper permissions automatically. For manual setup:
371
425
 
372
426
  ```bash
373
427
  chmod 600 ~/.config/carapace/credentials.json
@@ -382,8 +436,9 @@ chmod 600 ~/.config/carapace/credentials.json
382
436
  | Promoted insights | carapaceai.com (via `promote`) | Public to other agents |
383
437
 
384
438
  - The local database **never** leaves your machine unless you explicitly `promote` an insight
385
- - `promote` includes safety checks — relational insights and low-confidence claims are blocked by default
386
- - `import-carapace` pulls external data locally but treats it as **untrusted content** (sets `source` for provenance tracking)
439
+ - `promote` includes provenance-aware safety checks — social-provenance insights face the highest bar (0.85 confidence, 3 reinforcements). Relational insights are always blocked.
440
+ - `import-carapace` pulls external data locally, sets `provenance: 'external'` and `source: "carapace:<id>"` for tracking. External-provenance insights decay with a 180-day half-life.
441
+ - **Social provenance dampened.** Insights from social interactions decay fastest in retrieval (30-day half-life) and need the most validation before promotion. This limits unverified hearsay influence.
387
442
 
388
443
  ### Relational Insights
389
444
 
@@ -410,7 +465,7 @@ SQLite database at `~/.config/chitin/insights.db`. Zero network dependencies for
410
465
  - **Agent-first, not human-first.** No dashboards. CLI and API only.
411
466
  - **Local-first.** SQLite, no cloud dependency for core function.
412
467
  - **Token-efficient.** Compact output format, not prose paragraphs.
413
- - **No artificial decay.** Agents don't "forget over time." An insight from day 1 is equally valid if it's still true. Reinforcement count naturally surfaces what matters.
468
+ - **Provenance-aware decay.** Insights decay based on how they were authored. Operator directives and legacy entries never decay. Social observations fade with a 30-day half-life. This reflects real-world confidence: what your operator told you is more durable than something you heard in a group chat.
414
469
  - **Structured for retrieval.** Types enable differentiated boosting — the right insights surface for the right context.
415
470
 
416
471
  ## Development
@@ -7,12 +7,23 @@ export interface CarapaceConfig {
7
7
  apiKey: string;
8
8
  baseUrl?: string;
9
9
  }
10
+ export interface CarapaceRegisterParams {
11
+ displayName: string;
12
+ description?: string;
13
+ }
14
+ export interface CarapaceRegisterResponse {
15
+ id: string;
16
+ displayName: string;
17
+ apiKey: string;
18
+ }
10
19
  export interface CarapaceQueryParams {
11
20
  question: string;
12
21
  context?: string;
13
22
  maxResults?: number;
14
23
  minConfidence?: number;
15
24
  domainTags?: string[];
25
+ expand?: boolean;
26
+ searchMode?: 'semantic' | 'hybrid';
16
27
  }
17
28
  export interface CarapaceQueryResponse {
18
29
  _meta: {
@@ -33,6 +44,11 @@ export declare class CarapaceClient {
33
44
  private apiKey;
34
45
  private baseUrl;
35
46
  constructor(config: CarapaceConfig);
47
+ /**
48
+ * Register a new agent with Carapace (no auth required).
49
+ * Returns the agent ID and API key — save the key immediately, it's shown only once.
50
+ */
51
+ static register(params: CarapaceRegisterParams, baseUrl?: string): Promise<CarapaceRegisterResponse>;
36
52
  contribute(contribution: CarapaceContribution): Promise<Record<string, unknown>>;
37
53
  query(params: CarapaceQueryParams): Promise<CarapaceQueryResponse>;
38
54
  get(id: string): Promise<CarapaceContributionResponse>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/carapace/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,IAAI,EAAE,MAAM,CAAC;gBAED,OAAO,EAAE,MAAM,EAAE,IAAI,SAAY;CAK9C;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,cAAc;IAQ5B,UAAU,CAAC,YAAY,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIhF,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIlE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;YAI9C,OAAO;CAwCtB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/carapace/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CACpC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,OAAO,EAAE,4BAA4B,EAAE,CAAC;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,IAAI,EAAE,MAAM,CAAC;gBAED,OAAO,EAAE,MAAM,EAAE,IAAI,SAAY;CAK9C;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,cAAc;IAQlC;;;OAGG;WACU,QAAQ,CACnB,MAAM,EAAE,sBAAsB,EAC9B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,wBAAwB,CAAC;IA2B9B,UAAU,CAAC,YAAY,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIhF,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAIlE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC;YAI9C,OAAO;CAwCtB"}
@@ -21,6 +21,32 @@ export class CarapaceClient {
21
21
  this.apiKey = config.apiKey;
22
22
  this.baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
23
23
  }
24
+ /**
25
+ * Register a new agent with Carapace (no auth required).
26
+ * Returns the agent ID and API key — save the key immediately, it's shown only once.
27
+ */
28
+ static async register(params, baseUrl) {
29
+ const url = `${baseUrl ?? DEFAULT_BASE_URL}/agents`;
30
+ let response;
31
+ try {
32
+ response = await fetch(url, {
33
+ method: 'POST',
34
+ headers: { 'Content-Type': 'application/json' },
35
+ body: JSON.stringify(params),
36
+ });
37
+ }
38
+ catch (err) {
39
+ throw new CarapaceError(`Network error: ${err.message}`, 'NETWORK_ERROR');
40
+ }
41
+ const data = await response.json();
42
+ if (!response.ok) {
43
+ const errorBody = data;
44
+ const code = errorBody?.error?.code ?? 'API_ERROR';
45
+ const message = errorBody?.error?.message ?? `HTTP ${response.status}`;
46
+ throw new CarapaceError(message, code);
47
+ }
48
+ return data;
49
+ }
24
50
  async contribute(contribution) {
25
51
  return this.request('POST', '/contributions', contribution, true);
26
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/carapace/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,IAAI,CAAS;IAEb,YAAY,OAAe,EAAE,IAAI,GAAG,SAAS;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,gBAAgB,GAAG,+BAA+B,CAAC;AAEzD,MAAM,OAAO,cAAc;IACjB,MAAM,CAAS;IACf,OAAO,CAAS;IAExB,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,aAAa,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,YAAkC;QACjD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAA2B;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACvE,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,MAAc,EACd,IAAY,EACZ,IAAc,EACd,IAAI,GAAG,IAAI;QAEX,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,OAAO,GAA2B;YACtC,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC;QACrD,CAAC;QAED,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC1B,MAAM;gBACN,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,aAAa,CACrB,kBAAmB,GAAa,CAAC,OAAO,EAAE,EAC1C,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,IAAuD,CAAC;YAC1E,MAAM,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,WAAW,CAAC;YACnD,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;YACvE,MAAM,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAS,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/carapace/client.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export interface CarapaceContribution {
11
11
  applicability?: string;
12
12
  limitations?: string;
13
13
  domainTags?: string[];
14
+ provenance?: string;
14
15
  }
15
16
  /** Partial Carapace contribution from API response (query results). */
16
17
  export interface CarapaceContributionResponse {
@@ -59,10 +60,15 @@ export declare function mapContributionToInsight(contribution: CarapaceContribut
59
60
  *
60
61
  * Rules:
61
62
  * - Relational insights are never promotable (personal to the human)
62
- * - Low confidence insights need more testing first
63
- * - Never-reinforced insights haven't been validated through experience
63
+ * - Provenance-based confidence and reinforcement thresholds apply
64
64
  * - Insights with personal tags contain human-specific context
65
65
  *
66
+ * Provenance thresholds (higher bar for less-trusted origins):
67
+ * directive/correction: 0.7 confidence, 1 reinforcement
68
+ * observation: 0.75 confidence, 2 reinforcements
69
+ * reflection/external: 0.8 confidence, 2 reinforcements
70
+ * social: 0.85 confidence, 3 reinforcements
71
+ *
66
72
  * When force=true, returns promotable=true but still lists warnings.
67
73
  */
68
74
  export declare function isPromotable(insight: Insight, options?: {
@@ -1 +1 @@
1
- {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/carapace/mapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEzE,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,uEAAuE;AACvE,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAQD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,CAatB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,4BAA4B,EAC1C,OAAO,GAAE,mBAAwB,GAChC,eAAe,CAcjB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,mBAAmB,CAuBrB"}
1
+ {"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/carapace/mapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAc,eAAe,EAAE,MAAM,aAAa,CAAC;AAErF,sDAAsD;AACtD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,uEAAuE;AACvE,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAmBD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,CAkBtB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,4BAA4B,EAC1C,OAAO,GAAE,mBAAwB,GAChC,eAAe,CAejB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,mBAAmB,CAiCrB"}
@@ -6,6 +6,16 @@
6
6
  const PERSONAL_TAGS = new Set(['boss', 'human', 'personal', 'private', 'ken']);
7
7
  const MIN_PROMOTE_CONFIDENCE = 0.7;
8
8
  const MIN_PROMOTE_REINFORCEMENT = 1;
9
+ /** Provenance-specific promotion thresholds. */
10
+ const PROMOTION_THRESHOLDS = {
11
+ directive: { minConfidence: 0.7, minReinforcement: 1 },
12
+ correction: { minConfidence: 0.7, minReinforcement: 1 },
13
+ observation: { minConfidence: 0.75, minReinforcement: 2 },
14
+ reflection: { minConfidence: 0.8, minReinforcement: 2 },
15
+ social: { minConfidence: 0.85, minReinforcement: 3 },
16
+ external: { minConfidence: 0.8, minReinforcement: 2 },
17
+ undefined: { minConfidence: 0.7, minReinforcement: 1 }, // legacy
18
+ };
9
19
  /**
10
20
  * Map a Chitin insight to a Carapace contribution for API submission.
11
21
  *
@@ -24,7 +34,12 @@ export function mapInsightToContribution(insight, options = {}) {
24
34
  result.applicability = insight.context;
25
35
  if (insight.limitations)
26
36
  result.limitations = insight.limitations;
27
- result.domainTags = options.domainTags ?? [...insight.tags];
37
+ const baseTags = options.domainTags ?? [...insight.tags];
38
+ if (insight.provenance) {
39
+ baseTags.push(`provenance:${insight.provenance}`);
40
+ result.provenance = insight.provenance;
41
+ }
42
+ result.domainTags = baseTags;
28
43
  return result;
29
44
  }
30
45
  /**
@@ -42,6 +57,7 @@ export function mapContributionToInsight(contribution, options = {}) {
42
57
  confidence: contribution.confidence,
43
58
  tags: [...contribution.domainTags],
44
59
  source: `carapace:${contribution.id}`,
60
+ provenance: 'external',
45
61
  };
46
62
  if (contribution.reasoning)
47
63
  result.reasoning = contribution.reasoning;
@@ -56,10 +72,15 @@ export function mapContributionToInsight(contribution, options = {}) {
56
72
  *
57
73
  * Rules:
58
74
  * - Relational insights are never promotable (personal to the human)
59
- * - Low confidence insights need more testing first
60
- * - Never-reinforced insights haven't been validated through experience
75
+ * - Provenance-based confidence and reinforcement thresholds apply
61
76
  * - Insights with personal tags contain human-specific context
62
77
  *
78
+ * Provenance thresholds (higher bar for less-trusted origins):
79
+ * directive/correction: 0.7 confidence, 1 reinforcement
80
+ * observation: 0.75 confidence, 2 reinforcements
81
+ * reflection/external: 0.8 confidence, 2 reinforcements
82
+ * social: 0.85 confidence, 3 reinforcements
83
+ *
63
84
  * When force=true, returns promotable=true but still lists warnings.
64
85
  */
65
86
  export function isPromotable(insight, options = {}) {
@@ -67,11 +88,20 @@ export function isPromotable(insight, options = {}) {
67
88
  if (insight.type === 'relational') {
68
89
  reasons.push('Relational insights are personal and should not be shared publicly');
69
90
  }
70
- if (insight.confidence < MIN_PROMOTE_CONFIDENCE) {
71
- reasons.push(`Low confidence (${insight.confidence}) consider testing more before sharing`);
91
+ // Use provenance-specific thresholds, falling back to legacy defaults
92
+ const provenanceKey = insight.provenance ?? 'undefined';
93
+ const thresholds = PROMOTION_THRESHOLDS[provenanceKey] ?? {
94
+ minConfidence: MIN_PROMOTE_CONFIDENCE,
95
+ minReinforcement: MIN_PROMOTE_REINFORCEMENT,
96
+ };
97
+ if (insight.confidence < thresholds.minConfidence) {
98
+ reasons.push(`Low confidence (${insight.confidence}) — ${provenanceKey} provenance requires ≥${thresholds.minConfidence}`);
72
99
  }
73
- if (insight.reinforcementCount < MIN_PROMOTE_REINFORCEMENT) {
74
- reasons.push(`Never reinforced insight hasn't been validated through repeated experience`);
100
+ if (insight.reinforcementCount < thresholds.minReinforcement) {
101
+ const label = thresholds.minReinforcement === 1
102
+ ? 'Never reinforced — insight hasn\'t been validated through repeated experience'
103
+ : `Insufficient reinforcement (${insight.reinforcementCount}×) — ${provenanceKey} provenance requires ≥${thresholds.minReinforcement}`;
104
+ reasons.push(label);
75
105
  }
76
106
  const hasPersonalTags = insight.tags.some(t => PERSONAL_TAGS.has(t.toLowerCase()));
77
107
  if (hasPersonalTags) {
@@ -1 +1 @@
1
- {"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/carapace/mapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAuCH,uEAAuE;AACvE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;AAE/E,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAEpC;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAgB,EAChB,UAAoC,EAAE;IAEtC,MAAM,MAAM,GAAyB;QACnC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC;IAEF,IAAI,OAAO,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAC5D,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5D,IAAI,OAAO,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAElE,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CACtC,YAA0C,EAC1C,UAA+B,EAAE;IAEjC,MAAM,MAAM,GAAoB;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO;QAC7B,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC;QAClC,MAAM,EAAE,YAAY,YAAY,CAAC,EAAE,EAAE;KACtC,CAAC;IAEF,IAAI,YAAY,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC;IACtE,IAAI,YAAY,CAAC,aAAa;QAAE,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC;IAC5E,IAAI,YAAY,CAAC,WAAW;QAAE,MAAM,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;IAE5E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;IACrF,CAAC;IAED,IAAI,OAAO,CAAC,UAAU,GAAG,sBAAsB,EAAE,CAAC;QAChD,OAAO,CAAC,IAAI,CAAC,mBAAmB,OAAO,CAAC,UAAU,0CAA0C,CAAC,CAAC;IAChG,CAAC;IAED,IAAI,OAAO,CAAC,kBAAkB,GAAG,yBAAyB,EAAE,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnF,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;IAE/D,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/carapace/mapper.ts"],"names":[],"mappings":"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"}
@@ -31,8 +31,9 @@ export declare class InsightHistory {
31
31
  }>): void;
32
32
  /**
33
33
  * Record a reinforcement event (confidence change).
34
+ * @param reinforceSource - Optional source text describing why the insight was reinforced
34
35
  */
35
- recordReinforce(insightId: string, oldConfidence: number, newConfidence: number, newCount: number): void;
36
+ recordReinforce(insightId: string, oldConfidence: number, newConfidence: number, newCount: number, reinforceSource?: string): void;
36
37
  /**
37
38
  * Record field changes from a merge operation.
38
39
  */
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/db/history.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA0BD,qBAAa,cAAc;IACzB;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQpC;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAY5F;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAcxG;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAa5G;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,YAAY,EAAE;IAavE;;OAEG;IACH,YAAY,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE;CAsBzD"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/db/history.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA0BD,qBAAa,cAAc;IACzB;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAQpC;;;OAGG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAY5F;;;OAGG;IACH,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,MAAM,GACvB,IAAI;IAmBP;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAa5G;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,YAAY,EAAE;IAavE;;OAEG;IACH,YAAY,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE;CAsBzD"}
@@ -38,13 +38,18 @@ export class InsightHistory {
38
38
  }
39
39
  /**
40
40
  * Record a reinforcement event (confidence change).
41
+ * @param reinforceSource - Optional source text describing why the insight was reinforced
41
42
  */
42
- recordReinforce(insightId, oldConfidence, newConfidence, newCount) {
43
+ recordReinforce(insightId, oldConfidence, newConfidence, newCount, reinforceSource) {
43
44
  const db = getDatabase();
45
+ // Combine count info with optional source text
46
+ const sourceField = reinforceSource
47
+ ? `reinforce:${newCount}|${reinforceSource}`
48
+ : `reinforce:${newCount}`;
44
49
  db.prepare(`
45
50
  INSERT INTO insight_history (insight_id, field, old_value, new_value, change_type, source)
46
51
  VALUES (?, ?, ?, ?, 'reinforce', ?)
47
- `).run(insightId, 'confidence', String(oldConfidence), String(newConfidence), `reinforce:${newCount}`);
52
+ `).run(insightId, 'confidence', String(oldConfidence), String(newConfidence), sourceField);
48
53
  }
49
54
  /**
50
55
  * Record field changes from a merge operation.
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/db/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAkC1C,SAAS,UAAU,CAAC,GAAe;IACjC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,QAAQ,EAAE,GAAG,CAAC,SAAS;QACvB,UAAU,EAAE,GAAG,CAAC,WAAyC;QACzD,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,cAAc;IACzB;;OAEG;IACH,YAAY,CAAC,OAAgB;QAC3B,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,EAAE,CAAC,OAAO,CAAC;;;KAGV,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,SAAiB,EAAE,OAAqD;QACnF,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAGvB,CAAC,CAAC;QAEH,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,SAAiB,EAAE,aAAqB,EAAE,aAAqB,EAAE,QAAgB;QAC/F,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,EAAE,CAAC,OAAO,CAAC;;;KAGV,CAAC,CAAC,GAAG,CACJ,SAAS,EACT,YAAY,EACZ,MAAM,CAAC,aAAa,CAAC,EACrB,MAAM,CAAC,aAAa,CAAC,EACrB,aAAa,QAAQ,EAAE,CACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAqD;QACnG,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;KAGvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,SAAS,QAAQ,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,SAAiB,EAAE,OAAwB;QACpD,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;;;QAIpB,KAAK;KACR,CAAC,CAAC,GAAG,CAAC,SAAS,CAAiB,CAAC;QAElC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAA0B;QACrC,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;QAErE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;QAEpB,KAAK;;QAEL,KAAK;KACR,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAiB,CAAC;QAElC,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;CACF"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/db/history.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Insight, ContributeInput, ContributeResult, UpdateInput, InsightType } from '../types.js';
1
+ import type { Insight, ContributeInput, ContributeResult, UpdateInput, InsightType, Provenance } from '../types.js';
2
2
  export interface SimilarResult {
3
3
  insight: Insight;
4
4
  similarity: number;
@@ -10,6 +10,7 @@ export interface ListOptions {
10
10
  types?: InsightType[];
11
11
  tags?: string[];
12
12
  minConfidence?: number;
13
+ provenance?: Provenance;
13
14
  }
14
15
  export interface InsightStats {
15
16
  total: number;
@@ -39,7 +40,10 @@ export declare class InsightRepository {
39
40
  * At 0.05, a 0.8 → 0.81 → 0.8195 → ... asymptotically approaching 1.0.
40
41
  */
41
42
  static readonly CONFIDENCE_ADJUSTMENT_RATE = 0.05;
42
- reinforce(id: string): Insight;
43
+ reinforce(id: string, options?: {
44
+ source?: string;
45
+ evidence?: string;
46
+ }): Insight;
43
47
  /**
44
48
  * Find insights with similar claims using word-level Jaccard similarity.
45
49
  * Returns results sorted by similarity descending.
@@ -1 +1 @@
1
- {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/db/repository.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAiB,MAAM,aAAa,CAAC;AA0CvH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAwB;IAEvC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IA2B3C;;;;;;OAMG;IACH,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,gBAAgB;IAM5F,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAM/B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO;IAiE/C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKzB;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,0BAA0B,QAAQ;IAElD,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IA8B9B;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,SAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAsBpF;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO;IAmE9E,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,iBAAiB;IAYzB,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,EAAE;IA6BtC,KAAK,IAAI,YAAY;CA8BtB"}
1
+ {"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../../src/db/repository.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AA4CnI,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpC,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAwB;IAEvC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IA4B3C;;;;;;OAMG;IACH,mBAAmB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,gBAAgB;IAM5F,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAM/B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO;IAqE/C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAKzB;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,0BAA0B,QAAQ;IAElD,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAsChF;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,SAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAsBpF;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO;IAmE9E,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,iBAAiB;IAYzB,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,EAAE;IAkCtC,KAAK,IAAI,YAAY;CA8BtB"}
@@ -13,6 +13,7 @@ function rowToInsight(row) {
13
13
  confidence: row.confidence,
14
14
  tags: JSON.parse(row.tags),
15
15
  source: row.source ?? undefined,
16
+ provenance: row.provenance ?? undefined,
16
17
  condition: row.condition ?? undefined,
17
18
  avoid: row.avoid === 1,
18
19
  createdAt: row.created_at,
@@ -28,9 +29,9 @@ export class InsightRepository {
28
29
  const id = crypto.randomUUID();
29
30
  const tags = JSON.stringify(input.tags ?? []);
30
31
  db.prepare(`
31
- INSERT INTO insights (id, type, claim, reasoning, context, limitations, confidence, tags, source, condition, avoid)
32
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
33
- `).run(id, input.type, input.claim, input.reasoning ?? null, input.context ?? null, input.limitations ?? null, input.confidence, tags, input.source ?? null, input.condition ?? null, input.avoid ? 1 : 0);
32
+ INSERT INTO insights (id, type, claim, reasoning, context, limitations, confidence, tags, source, provenance, condition, avoid)
33
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
34
+ `).run(id, input.type, input.claim, input.reasoning ?? null, input.context ?? null, input.limitations ?? null, input.confidence, tags, input.source ?? null, input.provenance ?? null, input.condition ?? null, input.avoid ? 1 : 0);
34
35
  const insight = this.get(id);
35
36
  this.history.recordCreate(insight);
36
37
  return insight;
@@ -105,6 +106,12 @@ export class InsightRepository {
105
106
  if (input.source !== (existing.source ?? ''))
106
107
  changes.source = { old: existing.source ?? '', new: input.source };
107
108
  }
109
+ if (input.provenance !== undefined) {
110
+ fields.push('provenance = ?');
111
+ values.push(input.provenance);
112
+ if (input.provenance !== (existing.provenance ?? ''))
113
+ changes.provenance = { old: existing.provenance ?? '', new: input.provenance };
114
+ }
108
115
  if (input.condition !== undefined) {
109
116
  fields.push('condition = ?');
110
117
  values.push(input.condition);
@@ -139,7 +146,7 @@ export class InsightRepository {
139
146
  * At 0.05, a 0.8 → 0.81 → 0.8195 → ... asymptotically approaching 1.0.
140
147
  */
141
148
  static CONFIDENCE_ADJUSTMENT_RATE = 0.05;
142
- reinforce(id) {
149
+ reinforce(id, options) {
143
150
  const db = getDatabase();
144
151
  const existing = this.get(id);
145
152
  if (!existing) {
@@ -157,8 +164,15 @@ export class InsightRepository {
157
164
  updated_at = datetime('now')
158
165
  WHERE id = ?
159
166
  `).run(newConfidence, id);
167
+ // Build source text for history
168
+ let reinforceSource = options?.source;
169
+ if (options?.evidence) {
170
+ reinforceSource = reinforceSource
171
+ ? `[${options.evidence}] ${reinforceSource}`
172
+ : `[${options.evidence}]`;
173
+ }
160
174
  // Record history
161
- this.history.recordReinforce(id, oldConfidence, newConfidence, newCount);
175
+ this.history.recordReinforce(id, oldConfidence, newConfidence, newCount, reinforceSource);
162
176
  return this.get(id);
163
177
  }
164
178
  /**
@@ -273,6 +287,10 @@ export class InsightRepository {
273
287
  conditions.push(`type IN (${placeholders})`);
274
288
  params.push(...options.types);
275
289
  }
290
+ if (options?.provenance !== undefined) {
291
+ conditions.push('provenance = ?');
292
+ params.push(options.provenance);
293
+ }
276
294
  if (options?.minConfidence !== undefined) {
277
295
  conditions.push('confidence >= ?');
278
296
  params.push(options.minConfidence);