@soleri/core 2.1.0 → 2.5.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/dist/brain/brain.d.ts +10 -1
- package/dist/brain/brain.d.ts.map +1 -1
- package/dist/brain/brain.js +116 -13
- package/dist/brain/brain.js.map +1 -1
- package/dist/brain/intelligence.d.ts +36 -1
- package/dist/brain/intelligence.d.ts.map +1 -1
- package/dist/brain/intelligence.js +119 -14
- package/dist/brain/intelligence.js.map +1 -1
- package/dist/brain/types.d.ts +34 -2
- package/dist/brain/types.d.ts.map +1 -1
- package/dist/cognee/client.d.ts +3 -0
- package/dist/cognee/client.d.ts.map +1 -1
- package/dist/cognee/client.js +17 -0
- package/dist/cognee/client.js.map +1 -1
- package/dist/cognee/sync-manager.d.ts +94 -0
- package/dist/cognee/sync-manager.d.ts.map +1 -0
- package/dist/cognee/sync-manager.js +293 -0
- package/dist/cognee/sync-manager.js.map +1 -0
- package/dist/control/identity-manager.d.ts +22 -0
- package/dist/control/identity-manager.d.ts.map +1 -0
- package/dist/control/identity-manager.js +233 -0
- package/dist/control/identity-manager.js.map +1 -0
- package/dist/control/intent-router.d.ts +32 -0
- package/dist/control/intent-router.d.ts.map +1 -0
- package/dist/control/intent-router.js +242 -0
- package/dist/control/intent-router.js.map +1 -0
- package/dist/control/types.d.ts +68 -0
- package/dist/control/types.d.ts.map +1 -0
- package/dist/control/types.js +9 -0
- package/dist/control/types.js.map +1 -0
- package/dist/curator/curator.d.ts +37 -1
- package/dist/curator/curator.d.ts.map +1 -1
- package/dist/curator/curator.js +199 -1
- package/dist/curator/curator.js.map +1 -1
- package/dist/errors/classify.d.ts +13 -0
- package/dist/errors/classify.d.ts.map +1 -0
- package/dist/errors/classify.js +97 -0
- package/dist/errors/classify.js.map +1 -0
- package/dist/errors/index.d.ts +6 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +4 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/retry.d.ts +40 -0
- package/dist/errors/retry.d.ts.map +1 -0
- package/dist/errors/retry.js +97 -0
- package/dist/errors/retry.js.map +1 -0
- package/dist/errors/types.d.ts +48 -0
- package/dist/errors/types.d.ts.map +1 -0
- package/dist/errors/types.js +59 -0
- package/dist/errors/types.js.map +1 -0
- package/dist/facades/types.d.ts +1 -1
- package/dist/governance/governance.d.ts +42 -0
- package/dist/governance/governance.d.ts.map +1 -0
- package/dist/governance/governance.js +488 -0
- package/dist/governance/governance.js.map +1 -0
- package/dist/governance/index.d.ts +3 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +2 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/types.d.ts +102 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +3 -0
- package/dist/governance/types.js.map +1 -0
- package/dist/index.d.ts +52 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -1
- package/dist/index.js.map +1 -1
- package/dist/intake/content-classifier.d.ts +14 -0
- package/dist/intake/content-classifier.d.ts.map +1 -0
- package/dist/intake/content-classifier.js +125 -0
- package/dist/intake/content-classifier.js.map +1 -0
- package/dist/intake/dedup-gate.d.ts +17 -0
- package/dist/intake/dedup-gate.d.ts.map +1 -0
- package/dist/intake/dedup-gate.js +66 -0
- package/dist/intake/dedup-gate.js.map +1 -0
- package/dist/intake/intake-pipeline.d.ts +63 -0
- package/dist/intake/intake-pipeline.d.ts.map +1 -0
- package/dist/intake/intake-pipeline.js +373 -0
- package/dist/intake/intake-pipeline.js.map +1 -0
- package/dist/intake/types.d.ts +65 -0
- package/dist/intake/types.d.ts.map +1 -0
- package/dist/intake/types.js +3 -0
- package/dist/intake/types.js.map +1 -0
- package/dist/intelligence/loader.js +1 -1
- package/dist/intelligence/loader.js.map +1 -1
- package/dist/intelligence/types.d.ts +3 -1
- package/dist/intelligence/types.d.ts.map +1 -1
- package/dist/logging/logger.d.ts +37 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +145 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/logging/types.d.ts +19 -0
- package/dist/logging/types.d.ts.map +1 -0
- package/dist/logging/types.js +2 -0
- package/dist/logging/types.js.map +1 -0
- package/dist/loop/loop-manager.d.ts +100 -0
- package/dist/loop/loop-manager.d.ts.map +1 -0
- package/dist/loop/loop-manager.js +379 -0
- package/dist/loop/loop-manager.js.map +1 -0
- package/dist/loop/types.d.ts +103 -0
- package/dist/loop/types.d.ts.map +1 -0
- package/dist/loop/types.js +11 -0
- package/dist/loop/types.js.map +1 -0
- package/dist/persistence/index.d.ts +3 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +2 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/sqlite-provider.d.ts +25 -0
- package/dist/persistence/sqlite-provider.d.ts.map +1 -0
- package/dist/persistence/sqlite-provider.js +59 -0
- package/dist/persistence/sqlite-provider.js.map +1 -0
- package/dist/persistence/types.d.ts +36 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +8 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/planning/gap-analysis.d.ts +72 -0
- package/dist/planning/gap-analysis.d.ts.map +1 -0
- package/dist/planning/gap-analysis.js +442 -0
- package/dist/planning/gap-analysis.js.map +1 -0
- package/dist/planning/gap-types.d.ts +29 -0
- package/dist/planning/gap-types.d.ts.map +1 -0
- package/dist/planning/gap-types.js +28 -0
- package/dist/planning/gap-types.js.map +1 -0
- package/dist/planning/planner.d.ts +421 -4
- package/dist/planning/planner.d.ts.map +1 -1
- package/dist/planning/planner.js +949 -21
- package/dist/planning/planner.js.map +1 -1
- package/dist/playbooks/generic/brainstorming.d.ts +9 -0
- package/dist/playbooks/generic/brainstorming.d.ts.map +1 -0
- package/dist/playbooks/generic/brainstorming.js +105 -0
- package/dist/playbooks/generic/brainstorming.js.map +1 -0
- package/dist/playbooks/generic/code-review.d.ts +11 -0
- package/dist/playbooks/generic/code-review.d.ts.map +1 -0
- package/dist/playbooks/generic/code-review.js +176 -0
- package/dist/playbooks/generic/code-review.js.map +1 -0
- package/dist/playbooks/generic/subagent-execution.d.ts +9 -0
- package/dist/playbooks/generic/subagent-execution.d.ts.map +1 -0
- package/dist/playbooks/generic/subagent-execution.js +68 -0
- package/dist/playbooks/generic/subagent-execution.js.map +1 -0
- package/dist/playbooks/generic/systematic-debugging.d.ts +9 -0
- package/dist/playbooks/generic/systematic-debugging.d.ts.map +1 -0
- package/dist/playbooks/generic/systematic-debugging.js +87 -0
- package/dist/playbooks/generic/systematic-debugging.js.map +1 -0
- package/dist/playbooks/generic/tdd.d.ts +9 -0
- package/dist/playbooks/generic/tdd.d.ts.map +1 -0
- package/dist/playbooks/generic/tdd.js +70 -0
- package/dist/playbooks/generic/tdd.js.map +1 -0
- package/dist/playbooks/generic/verification.d.ts +9 -0
- package/dist/playbooks/generic/verification.d.ts.map +1 -0
- package/dist/playbooks/generic/verification.js +74 -0
- package/dist/playbooks/generic/verification.js.map +1 -0
- package/dist/playbooks/index.d.ts +4 -0
- package/dist/playbooks/index.d.ts.map +1 -0
- package/dist/playbooks/index.js +5 -0
- package/dist/playbooks/index.js.map +1 -0
- package/dist/playbooks/playbook-registry.d.ts +42 -0
- package/dist/playbooks/playbook-registry.d.ts.map +1 -0
- package/dist/playbooks/playbook-registry.js +227 -0
- package/dist/playbooks/playbook-registry.js.map +1 -0
- package/dist/playbooks/playbook-seeder.d.ts +47 -0
- package/dist/playbooks/playbook-seeder.d.ts.map +1 -0
- package/dist/playbooks/playbook-seeder.js +104 -0
- package/dist/playbooks/playbook-seeder.js.map +1 -0
- package/dist/playbooks/playbook-types.d.ts +132 -0
- package/dist/playbooks/playbook-types.d.ts.map +1 -0
- package/dist/playbooks/playbook-types.js +12 -0
- package/dist/playbooks/playbook-types.js.map +1 -0
- package/dist/project/project-registry.d.ts +79 -0
- package/dist/project/project-registry.d.ts.map +1 -0
- package/dist/project/project-registry.js +274 -0
- package/dist/project/project-registry.js.map +1 -0
- package/dist/project/types.d.ts +28 -0
- package/dist/project/types.d.ts.map +1 -0
- package/dist/project/types.js +5 -0
- package/dist/project/types.js.map +1 -0
- package/dist/prompts/index.d.ts +4 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +3 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/parser.d.ts +17 -0
- package/dist/prompts/parser.d.ts.map +1 -0
- package/dist/prompts/parser.js +47 -0
- package/dist/prompts/parser.js.map +1 -0
- package/dist/prompts/template-manager.d.ts +25 -0
- package/dist/prompts/template-manager.d.ts.map +1 -0
- package/dist/prompts/template-manager.js +71 -0
- package/dist/prompts/template-manager.js.map +1 -0
- package/dist/prompts/types.d.ts +26 -0
- package/dist/prompts/types.d.ts.map +1 -0
- package/dist/prompts/types.js +5 -0
- package/dist/prompts/types.js.map +1 -0
- package/dist/runtime/admin-extra-ops.d.ts +15 -0
- package/dist/runtime/admin-extra-ops.d.ts.map +1 -0
- package/dist/runtime/admin-extra-ops.js +595 -0
- package/dist/runtime/admin-extra-ops.js.map +1 -0
- package/dist/runtime/admin-ops.d.ts +15 -0
- package/dist/runtime/admin-ops.d.ts.map +1 -0
- package/dist/runtime/admin-ops.js +329 -0
- package/dist/runtime/admin-ops.js.map +1 -0
- package/dist/runtime/capture-ops.d.ts +15 -0
- package/dist/runtime/capture-ops.d.ts.map +1 -0
- package/dist/runtime/capture-ops.js +363 -0
- package/dist/runtime/capture-ops.js.map +1 -0
- package/dist/runtime/cognee-sync-ops.d.ts +12 -0
- package/dist/runtime/cognee-sync-ops.d.ts.map +1 -0
- package/dist/runtime/cognee-sync-ops.js +55 -0
- package/dist/runtime/cognee-sync-ops.js.map +1 -0
- package/dist/runtime/core-ops.d.ts +9 -3
- package/dist/runtime/core-ops.d.ts.map +1 -1
- package/dist/runtime/core-ops.js +693 -10
- package/dist/runtime/core-ops.js.map +1 -1
- package/dist/runtime/curator-extra-ops.d.ts +9 -0
- package/dist/runtime/curator-extra-ops.d.ts.map +1 -0
- package/dist/runtime/curator-extra-ops.js +71 -0
- package/dist/runtime/curator-extra-ops.js.map +1 -0
- package/dist/runtime/domain-ops.d.ts.map +1 -1
- package/dist/runtime/domain-ops.js +61 -15
- package/dist/runtime/domain-ops.js.map +1 -1
- package/dist/runtime/grading-ops.d.ts +14 -0
- package/dist/runtime/grading-ops.d.ts.map +1 -0
- package/dist/runtime/grading-ops.js +105 -0
- package/dist/runtime/grading-ops.js.map +1 -0
- package/dist/runtime/intake-ops.d.ts +14 -0
- package/dist/runtime/intake-ops.d.ts.map +1 -0
- package/dist/runtime/intake-ops.js +110 -0
- package/dist/runtime/intake-ops.js.map +1 -0
- package/dist/runtime/loop-ops.d.ts +14 -0
- package/dist/runtime/loop-ops.d.ts.map +1 -0
- package/dist/runtime/loop-ops.js +251 -0
- package/dist/runtime/loop-ops.js.map +1 -0
- package/dist/runtime/memory-cross-project-ops.d.ts +12 -0
- package/dist/runtime/memory-cross-project-ops.d.ts.map +1 -0
- package/dist/runtime/memory-cross-project-ops.js +165 -0
- package/dist/runtime/memory-cross-project-ops.js.map +1 -0
- package/dist/runtime/memory-extra-ops.d.ts +13 -0
- package/dist/runtime/memory-extra-ops.d.ts.map +1 -0
- package/dist/runtime/memory-extra-ops.js +173 -0
- package/dist/runtime/memory-extra-ops.js.map +1 -0
- package/dist/runtime/orchestrate-ops.d.ts +17 -0
- package/dist/runtime/orchestrate-ops.d.ts.map +1 -0
- package/dist/runtime/orchestrate-ops.js +246 -0
- package/dist/runtime/orchestrate-ops.js.map +1 -0
- package/dist/runtime/planning-extra-ops.d.ts +25 -0
- package/dist/runtime/planning-extra-ops.d.ts.map +1 -0
- package/dist/runtime/planning-extra-ops.js +663 -0
- package/dist/runtime/planning-extra-ops.js.map +1 -0
- package/dist/runtime/playbook-ops.d.ts +14 -0
- package/dist/runtime/playbook-ops.d.ts.map +1 -0
- package/dist/runtime/playbook-ops.js +141 -0
- package/dist/runtime/playbook-ops.js.map +1 -0
- package/dist/runtime/project-ops.d.ts +15 -0
- package/dist/runtime/project-ops.d.ts.map +1 -0
- package/dist/runtime/project-ops.js +186 -0
- package/dist/runtime/project-ops.js.map +1 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +65 -3
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/types.d.ts +29 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/vault-extra-ops.d.ts +10 -0
- package/dist/runtime/vault-extra-ops.d.ts.map +1 -0
- package/dist/runtime/vault-extra-ops.js +536 -0
- package/dist/runtime/vault-extra-ops.js.map +1 -0
- package/dist/telemetry/telemetry.d.ts +48 -0
- package/dist/telemetry/telemetry.d.ts.map +1 -0
- package/dist/telemetry/telemetry.js +87 -0
- package/dist/telemetry/telemetry.js.map +1 -0
- package/dist/vault/playbook.d.ts +34 -0
- package/dist/vault/playbook.d.ts.map +1 -0
- package/dist/vault/playbook.js +60 -0
- package/dist/vault/playbook.js.map +1 -0
- package/dist/vault/vault.d.ts +97 -4
- package/dist/vault/vault.d.ts.map +1 -1
- package/dist/vault/vault.js +424 -65
- package/dist/vault/vault.js.map +1 -1
- package/package.json +7 -3
- package/src/__tests__/admin-extra-ops.test.ts +467 -0
- package/src/__tests__/admin-ops.test.ts +271 -0
- package/src/__tests__/brain-intelligence.test.ts +205 -0
- package/src/__tests__/brain.test.ts +134 -3
- package/src/__tests__/capture-ops.test.ts +509 -0
- package/src/__tests__/cognee-integration.test.ts +80 -0
- package/src/__tests__/cognee-sync-manager.test.ts +103 -0
- package/src/__tests__/core-ops.test.ts +292 -2
- package/src/__tests__/curator-extra-ops.test.ts +381 -0
- package/src/__tests__/domain-ops.test.ts +66 -0
- package/src/__tests__/errors.test.ts +388 -0
- package/src/__tests__/governance.test.ts +522 -0
- package/src/__tests__/grading-ops.test.ts +361 -0
- package/src/__tests__/identity-manager.test.ts +243 -0
- package/src/__tests__/intake-pipeline.test.ts +162 -0
- package/src/__tests__/intent-router.test.ts +222 -0
- package/src/__tests__/logger.test.ts +200 -0
- package/src/__tests__/loop-ops.test.ts +469 -0
- package/src/__tests__/memory-cross-project-ops.test.ts +248 -0
- package/src/__tests__/memory-extra-ops.test.ts +352 -0
- package/src/__tests__/orchestrate-ops.test.ts +289 -0
- package/src/__tests__/persistence.test.ts +225 -0
- package/src/__tests__/planner.test.ts +416 -7
- package/src/__tests__/planning-extra-ops.test.ts +706 -0
- package/src/__tests__/playbook-registry.test.ts +326 -0
- package/src/__tests__/playbook-seeder.test.ts +163 -0
- package/src/__tests__/playbook.test.ts +389 -0
- package/src/__tests__/project-ops.test.ts +381 -0
- package/src/__tests__/template-manager.test.ts +222 -0
- package/src/__tests__/vault-extra-ops.test.ts +482 -0
- package/src/brain/brain.ts +185 -16
- package/src/brain/intelligence.ts +179 -10
- package/src/brain/types.ts +40 -2
- package/src/cognee/client.ts +18 -0
- package/src/cognee/sync-manager.ts +389 -0
- package/src/control/identity-manager.ts +354 -0
- package/src/control/intent-router.ts +326 -0
- package/src/control/types.ts +102 -0
- package/src/curator/curator.ts +295 -1
- package/src/errors/classify.ts +102 -0
- package/src/errors/index.ts +5 -0
- package/src/errors/retry.ts +132 -0
- package/src/errors/types.ts +81 -0
- package/src/governance/governance.ts +698 -0
- package/src/governance/index.ts +18 -0
- package/src/governance/types.ts +111 -0
- package/src/index.ts +213 -2
- package/src/intake/content-classifier.ts +146 -0
- package/src/intake/dedup-gate.ts +92 -0
- package/src/intake/intake-pipeline.ts +503 -0
- package/src/intake/types.ts +69 -0
- package/src/intelligence/loader.ts +1 -1
- package/src/intelligence/types.ts +3 -1
- package/src/logging/logger.ts +154 -0
- package/src/logging/types.ts +21 -0
- package/src/loop/loop-manager.ts +448 -0
- package/src/loop/types.ts +115 -0
- package/src/persistence/index.ts +7 -0
- package/src/persistence/sqlite-provider.ts +62 -0
- package/src/persistence/types.ts +44 -0
- package/src/planning/gap-analysis.ts +775 -0
- package/src/planning/gap-types.ts +61 -0
- package/src/planning/planner.ts +1273 -24
- package/src/playbooks/generic/brainstorming.ts +110 -0
- package/src/playbooks/generic/code-review.ts +181 -0
- package/src/playbooks/generic/subagent-execution.ts +74 -0
- package/src/playbooks/generic/systematic-debugging.ts +92 -0
- package/src/playbooks/generic/tdd.ts +75 -0
- package/src/playbooks/generic/verification.ts +79 -0
- package/src/playbooks/index.ts +27 -0
- package/src/playbooks/playbook-registry.ts +284 -0
- package/src/playbooks/playbook-seeder.ts +119 -0
- package/src/playbooks/playbook-types.ts +162 -0
- package/src/project/project-registry.ts +370 -0
- package/src/project/types.ts +31 -0
- package/src/prompts/index.ts +3 -0
- package/src/prompts/parser.ts +59 -0
- package/src/prompts/template-manager.ts +77 -0
- package/src/prompts/types.ts +28 -0
- package/src/runtime/admin-extra-ops.ts +652 -0
- package/src/runtime/admin-ops.ts +340 -0
- package/src/runtime/capture-ops.ts +404 -0
- package/src/runtime/cognee-sync-ops.ts +63 -0
- package/src/runtime/core-ops.ts +787 -9
- package/src/runtime/curator-extra-ops.ts +85 -0
- package/src/runtime/domain-ops.ts +67 -15
- package/src/runtime/grading-ops.ts +130 -0
- package/src/runtime/intake-ops.ts +126 -0
- package/src/runtime/loop-ops.ts +277 -0
- package/src/runtime/memory-cross-project-ops.ts +191 -0
- package/src/runtime/memory-extra-ops.ts +186 -0
- package/src/runtime/orchestrate-ops.ts +278 -0
- package/src/runtime/planning-extra-ops.ts +718 -0
- package/src/runtime/playbook-ops.ts +169 -0
- package/src/runtime/project-ops.ts +202 -0
- package/src/runtime/runtime.ts +77 -3
- package/src/runtime/types.ts +29 -0
- package/src/runtime/vault-extra-ops.ts +606 -0
- package/src/telemetry/telemetry.ts +118 -0
- package/src/vault/playbook.ts +87 -0
- package/src/vault/vault.ts +575 -98
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
// ─── Intake Pipeline ──────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// 6-stage pipeline for ingesting PDF books into the vault:
|
|
4
|
+
// 1. Parse PDF + compute hash + create chunks → job record
|
|
5
|
+
// 2. Extract page text for each chunk
|
|
6
|
+
// 3. Classify chunk text via LLM
|
|
7
|
+
// 4. Dedup classified items against vault
|
|
8
|
+
// 5. Store unique items in vault
|
|
9
|
+
// 6. Finalize job with aggregate stats
|
|
10
|
+
//
|
|
11
|
+
// SQLite-backed job tracking for resumable processing.
|
|
12
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
13
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
14
|
+
import { classifyChunk } from './content-classifier.js';
|
|
15
|
+
import { dedupItems } from './dedup-gate.js';
|
|
16
|
+
// =============================================================================
|
|
17
|
+
// CONSTANTS
|
|
18
|
+
// =============================================================================
|
|
19
|
+
const DEFAULT_CHUNK_SIZE = 10;
|
|
20
|
+
/**
|
|
21
|
+
* Map KnowledgeType → IntelligenceEntry.type.
|
|
22
|
+
* Only 'pattern' and 'anti-pattern' map directly; everything else becomes 'rule'.
|
|
23
|
+
*/
|
|
24
|
+
function mapKnowledgeType(kt) {
|
|
25
|
+
if (kt === 'pattern')
|
|
26
|
+
return 'pattern';
|
|
27
|
+
if (kt === 'anti-pattern')
|
|
28
|
+
return 'anti-pattern';
|
|
29
|
+
return 'rule';
|
|
30
|
+
}
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// HELPERS
|
|
33
|
+
// =============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Split concatenated PDF text into per-page segments.
|
|
36
|
+
*
|
|
37
|
+
* Strategy: split on form-feed characters first (common in pdf-parse output).
|
|
38
|
+
* If that yields fewer segments than expected, fall back to equal-length splits.
|
|
39
|
+
*/
|
|
40
|
+
export function splitIntoPages(text, numPages) {
|
|
41
|
+
if (numPages <= 0)
|
|
42
|
+
return [text];
|
|
43
|
+
// Try form-feed split first
|
|
44
|
+
const ffPages = text.split('\f');
|
|
45
|
+
if (ffPages.length >= numPages) {
|
|
46
|
+
return ffPages.slice(0, numPages);
|
|
47
|
+
}
|
|
48
|
+
// Fallback: equal-length chunks
|
|
49
|
+
const chunkSize = Math.ceil(text.length / numPages);
|
|
50
|
+
const pages = [];
|
|
51
|
+
for (let i = 0; i < text.length; i += chunkSize) {
|
|
52
|
+
pages.push(text.slice(i, i + chunkSize));
|
|
53
|
+
}
|
|
54
|
+
// Pad with empty strings if we somehow got fewer
|
|
55
|
+
while (pages.length < numPages) {
|
|
56
|
+
pages.push('');
|
|
57
|
+
}
|
|
58
|
+
return pages;
|
|
59
|
+
}
|
|
60
|
+
// =============================================================================
|
|
61
|
+
// PIPELINE
|
|
62
|
+
// =============================================================================
|
|
63
|
+
export class IntakePipeline {
|
|
64
|
+
provider;
|
|
65
|
+
vault;
|
|
66
|
+
llm;
|
|
67
|
+
constructor(provider, vault, llm) {
|
|
68
|
+
this.provider = provider;
|
|
69
|
+
this.vault = vault;
|
|
70
|
+
this.llm = llm;
|
|
71
|
+
this.initSchema();
|
|
72
|
+
}
|
|
73
|
+
// ─── Schema ──────────────────────────────────────────────────────
|
|
74
|
+
initSchema() {
|
|
75
|
+
this.provider.execSql(`
|
|
76
|
+
CREATE TABLE IF NOT EXISTS intake_jobs (
|
|
77
|
+
id TEXT PRIMARY KEY,
|
|
78
|
+
status TEXT NOT NULL,
|
|
79
|
+
config TEXT NOT NULL,
|
|
80
|
+
pdf_meta TEXT,
|
|
81
|
+
toc TEXT,
|
|
82
|
+
stats TEXT,
|
|
83
|
+
created_at INTEGER,
|
|
84
|
+
updated_at INTEGER,
|
|
85
|
+
completed_at INTEGER
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
CREATE TABLE IF NOT EXISTS intake_chunks (
|
|
89
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
90
|
+
job_id TEXT NOT NULL REFERENCES intake_jobs(id),
|
|
91
|
+
chunk_index INTEGER,
|
|
92
|
+
title TEXT,
|
|
93
|
+
page_start INTEGER,
|
|
94
|
+
page_end INTEGER,
|
|
95
|
+
status TEXT DEFAULT 'pending',
|
|
96
|
+
items_extracted INTEGER DEFAULT 0,
|
|
97
|
+
items_stored INTEGER DEFAULT 0,
|
|
98
|
+
items_deduped INTEGER DEFAULT 0,
|
|
99
|
+
error TEXT,
|
|
100
|
+
processed_at INTEGER
|
|
101
|
+
);
|
|
102
|
+
`);
|
|
103
|
+
}
|
|
104
|
+
// ─── Stage 1: Ingest Book ────────────────────────────────────────
|
|
105
|
+
/**
|
|
106
|
+
* Parse a PDF, compute its file hash, create fixed-size page chunks,
|
|
107
|
+
* and persist the job + chunk records to the database.
|
|
108
|
+
*/
|
|
109
|
+
async ingestBook(config) {
|
|
110
|
+
const jobId = randomUUID();
|
|
111
|
+
const now = Math.floor(Date.now() / 1000);
|
|
112
|
+
const chunkPageSize = config.chunkPageSize ?? DEFAULT_CHUNK_SIZE;
|
|
113
|
+
// Read file
|
|
114
|
+
const fileBuffer = readFileSync(config.pdfPath);
|
|
115
|
+
const fileSize = statSync(config.pdfPath).size;
|
|
116
|
+
const fileHash = createHash('sha256').update(fileBuffer).digest('hex');
|
|
117
|
+
// Dynamic import of pdf-parse
|
|
118
|
+
const pdfParse = (await import('pdf-parse')).default;
|
|
119
|
+
const pdfData = await pdfParse(fileBuffer);
|
|
120
|
+
const totalPages = pdfData.numpages;
|
|
121
|
+
const pdfMeta = { totalPages, fileHash, fileSize };
|
|
122
|
+
// Create chunk definitions (fixed N-page windows)
|
|
123
|
+
const numChunks = Math.ceil(totalPages / chunkPageSize);
|
|
124
|
+
this.provider.transaction(() => {
|
|
125
|
+
// Insert job
|
|
126
|
+
this.provider.run(`INSERT INTO intake_jobs (id, status, config, pdf_meta, toc, stats, created_at, updated_at, completed_at)
|
|
127
|
+
VALUES (@id, @status, @config, @pdfMeta, @toc, @stats, @createdAt, @updatedAt, @completedAt)`, {
|
|
128
|
+
id: jobId,
|
|
129
|
+
status: 'initialized',
|
|
130
|
+
config: JSON.stringify(config),
|
|
131
|
+
pdfMeta: JSON.stringify(pdfMeta),
|
|
132
|
+
toc: null,
|
|
133
|
+
stats: null,
|
|
134
|
+
createdAt: now,
|
|
135
|
+
updatedAt: now,
|
|
136
|
+
completedAt: null,
|
|
137
|
+
});
|
|
138
|
+
// Insert chunk records
|
|
139
|
+
for (let i = 0; i < numChunks; i++) {
|
|
140
|
+
const pageStart = i * chunkPageSize + 1;
|
|
141
|
+
const pageEnd = Math.min((i + 1) * chunkPageSize, totalPages);
|
|
142
|
+
const chunkTitle = `${config.title} — pages ${pageStart}-${pageEnd}`;
|
|
143
|
+
this.provider.run(`INSERT INTO intake_chunks (job_id, chunk_index, title, page_start, page_end, status)
|
|
144
|
+
VALUES (@jobId, @chunkIndex, @title, @pageStart, @pageEnd, @status)`, {
|
|
145
|
+
jobId,
|
|
146
|
+
chunkIndex: i,
|
|
147
|
+
title: chunkTitle,
|
|
148
|
+
pageStart,
|
|
149
|
+
pageEnd,
|
|
150
|
+
status: 'pending',
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
return this.getJob(jobId);
|
|
155
|
+
}
|
|
156
|
+
// ─── Stages 2-5: Process Chunks ──────────────────────────────────
|
|
157
|
+
/**
|
|
158
|
+
* Process up to `count` pending chunks for a job.
|
|
159
|
+
*
|
|
160
|
+
* For each chunk:
|
|
161
|
+
* 2. Extract page text from PDF
|
|
162
|
+
* 3. Classify via LLM
|
|
163
|
+
* 4. Dedup against vault
|
|
164
|
+
* 5. Store unique items
|
|
165
|
+
*
|
|
166
|
+
* When all chunks are done, finalizes the job (stage 6).
|
|
167
|
+
*/
|
|
168
|
+
async processChunks(jobId, count = 5) {
|
|
169
|
+
// Get pending chunks
|
|
170
|
+
const pendingChunks = this.provider.all(`SELECT * FROM intake_chunks WHERE job_id = @jobId AND status = 'pending' ORDER BY chunk_index ASC LIMIT @limit`, { jobId, limit: count });
|
|
171
|
+
if (pendingChunks.length === 0) {
|
|
172
|
+
const remaining = this.countPendingChunks(jobId);
|
|
173
|
+
return { processed: 0, itemsStored: 0, itemsDeduped: 0, remaining };
|
|
174
|
+
}
|
|
175
|
+
// Mark job as processing
|
|
176
|
+
this.provider.run(`UPDATE intake_jobs SET status = 'processing', updated_at = @now WHERE id = @id`, { id: jobId, now: Math.floor(Date.now() / 1000) });
|
|
177
|
+
// Re-read config and parse PDF
|
|
178
|
+
const job = this.getJob(jobId);
|
|
179
|
+
if (!job) {
|
|
180
|
+
return { processed: 0, itemsStored: 0, itemsDeduped: 0, remaining: 0 };
|
|
181
|
+
}
|
|
182
|
+
const fileBuffer = readFileSync(job.config.pdfPath);
|
|
183
|
+
const pdfParse = (await import('pdf-parse')).default;
|
|
184
|
+
const pdfData = await pdfParse(fileBuffer);
|
|
185
|
+
const totalPages = job.pdfMeta?.totalPages ?? pdfData.numpages;
|
|
186
|
+
const pages = splitIntoPages(pdfData.text, totalPages);
|
|
187
|
+
let totalStored = 0;
|
|
188
|
+
let totalDeduped = 0;
|
|
189
|
+
let processed = 0;
|
|
190
|
+
for (const chunkRow of pendingChunks) {
|
|
191
|
+
const chunkId = chunkRow.id;
|
|
192
|
+
const chunkIndex = chunkRow.chunk_index;
|
|
193
|
+
const pageStart = chunkRow.page_start;
|
|
194
|
+
const pageEnd = chunkRow.page_end;
|
|
195
|
+
try {
|
|
196
|
+
// Mark chunk processing
|
|
197
|
+
this.provider.run(`UPDATE intake_chunks SET status = 'processing' WHERE id = @id`, {
|
|
198
|
+
id: chunkId,
|
|
199
|
+
});
|
|
200
|
+
// Stage 2: Extract page text (1-indexed → 0-indexed)
|
|
201
|
+
const chunkText = pages.slice(pageStart - 1, pageEnd).join('\n\n');
|
|
202
|
+
const citation = `${job.config.title}, pages ${pageStart}-${pageEnd}`;
|
|
203
|
+
// Stage 3: Classify
|
|
204
|
+
const classifiedItems = await classifyChunk(this.llm, chunkText, citation);
|
|
205
|
+
// Stage 4: Dedup
|
|
206
|
+
const dedupResults = dedupItems(classifiedItems, this.vault);
|
|
207
|
+
const uniqueItems = dedupResults.filter((r) => !r.isDuplicate);
|
|
208
|
+
const dupCount = dedupResults.filter((r) => r.isDuplicate).length;
|
|
209
|
+
// Stage 5: Store unique items in vault
|
|
210
|
+
let storedCount = 0;
|
|
211
|
+
for (let itemIdx = 0; itemIdx < uniqueItems.length; itemIdx++) {
|
|
212
|
+
const result = uniqueItems[itemIdx];
|
|
213
|
+
const entry = classifiedItemToEntry(result.item, job.config.domain, jobId, chunkIndex, itemIdx, job.config.tags);
|
|
214
|
+
this.vault.add(entry);
|
|
215
|
+
storedCount++;
|
|
216
|
+
}
|
|
217
|
+
// Update chunk record
|
|
218
|
+
const now = Math.floor(Date.now() / 1000);
|
|
219
|
+
this.provider.run(`UPDATE intake_chunks
|
|
220
|
+
SET status = 'completed', items_extracted = @extracted, items_stored = @stored, items_deduped = @deduped, processed_at = @now
|
|
221
|
+
WHERE id = @id`, {
|
|
222
|
+
id: chunkId,
|
|
223
|
+
extracted: classifiedItems.length,
|
|
224
|
+
stored: storedCount,
|
|
225
|
+
deduped: dupCount,
|
|
226
|
+
now,
|
|
227
|
+
});
|
|
228
|
+
totalStored += storedCount;
|
|
229
|
+
totalDeduped += dupCount;
|
|
230
|
+
processed++;
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
// Graceful degradation: mark chunk as failed, continue with others
|
|
234
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
235
|
+
this.provider.run(`UPDATE intake_chunks SET status = 'failed', error = @error, processed_at = @now WHERE id = @id`, { id: chunkId, error: errorMsg, now: Math.floor(Date.now() / 1000) });
|
|
236
|
+
processed++;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Update job timestamp
|
|
240
|
+
this.provider.run(`UPDATE intake_jobs SET updated_at = @now WHERE id = @id`, {
|
|
241
|
+
id: jobId,
|
|
242
|
+
now: Math.floor(Date.now() / 1000),
|
|
243
|
+
});
|
|
244
|
+
// Check remaining
|
|
245
|
+
const remaining = this.countPendingChunks(jobId);
|
|
246
|
+
if (remaining === 0) {
|
|
247
|
+
this.finalizeJob(jobId);
|
|
248
|
+
}
|
|
249
|
+
return { processed, itemsStored: totalStored, itemsDeduped: totalDeduped, remaining };
|
|
250
|
+
}
|
|
251
|
+
// ─── Preview ─────────────────────────────────────────────────────
|
|
252
|
+
/**
|
|
253
|
+
* Parse a page range from a PDF and classify it without storing.
|
|
254
|
+
* Useful for previewing what the pipeline would extract.
|
|
255
|
+
*/
|
|
256
|
+
async preview(config, pageStart, pageEnd) {
|
|
257
|
+
const fileBuffer = readFileSync(config.pdfPath);
|
|
258
|
+
const pdfParse = (await import('pdf-parse')).default;
|
|
259
|
+
const pdfData = await pdfParse(fileBuffer);
|
|
260
|
+
const totalPages = pdfData.numpages;
|
|
261
|
+
const pages = splitIntoPages(pdfData.text, totalPages);
|
|
262
|
+
const chunkText = pages.slice(pageStart - 1, pageEnd).join('\n\n');
|
|
263
|
+
const citation = `${config.title}, pages ${pageStart}-${pageEnd}`;
|
|
264
|
+
const items = await classifyChunk(this.llm, chunkText, citation);
|
|
265
|
+
return {
|
|
266
|
+
items,
|
|
267
|
+
chunkText,
|
|
268
|
+
pageRange: { start: pageStart, end: pageEnd },
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
// ─── Queries ─────────────────────────────────────────────────────
|
|
272
|
+
/**
|
|
273
|
+
* Get a job record by ID.
|
|
274
|
+
*/
|
|
275
|
+
getJob(jobId) {
|
|
276
|
+
const row = this.provider.get('SELECT * FROM intake_jobs WHERE id = @id', { id: jobId });
|
|
277
|
+
return row ? rowToJobRecord(row) : null;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* List all intake jobs.
|
|
281
|
+
*/
|
|
282
|
+
listJobs() {
|
|
283
|
+
const rows = this.provider.all('SELECT * FROM intake_jobs ORDER BY created_at DESC');
|
|
284
|
+
return rows.map(rowToJobRecord);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get all chunks for a job.
|
|
288
|
+
*/
|
|
289
|
+
getChunks(jobId) {
|
|
290
|
+
const rows = this.provider.all('SELECT * FROM intake_chunks WHERE job_id = @jobId ORDER BY chunk_index ASC', { jobId });
|
|
291
|
+
return rows.map(rowToChunk);
|
|
292
|
+
}
|
|
293
|
+
// ─── Stage 6: Finalize ──────────────────────────────────────────
|
|
294
|
+
/**
|
|
295
|
+
* Sum stats from all chunks and mark the job as completed.
|
|
296
|
+
*/
|
|
297
|
+
finalizeJob(jobId) {
|
|
298
|
+
const chunks = this.provider.all('SELECT * FROM intake_chunks WHERE job_id = @jobId', { jobId });
|
|
299
|
+
let itemsExtracted = 0;
|
|
300
|
+
let itemsStored = 0;
|
|
301
|
+
let itemsDeduped = 0;
|
|
302
|
+
let itemsFailed = 0;
|
|
303
|
+
for (const chunk of chunks) {
|
|
304
|
+
const status = chunk.status;
|
|
305
|
+
if (status === 'completed') {
|
|
306
|
+
itemsExtracted += chunk.items_extracted ?? 0;
|
|
307
|
+
itemsStored += chunk.items_stored ?? 0;
|
|
308
|
+
itemsDeduped += chunk.items_deduped ?? 0;
|
|
309
|
+
}
|
|
310
|
+
else if (status === 'failed') {
|
|
311
|
+
itemsFailed++;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
const stats = { itemsExtracted, itemsStored, itemsDeduped, itemsFailed };
|
|
315
|
+
const now = Math.floor(Date.now() / 1000);
|
|
316
|
+
this.provider.run(`UPDATE intake_jobs SET status = 'completed', stats = @stats, updated_at = @now, completed_at = @now WHERE id = @id`, { id: jobId, stats: JSON.stringify(stats), now });
|
|
317
|
+
}
|
|
318
|
+
// ─── Private helpers ─────────────────────────────────────────────
|
|
319
|
+
countPendingChunks(jobId) {
|
|
320
|
+
const result = this.provider.get(`SELECT COUNT(*) as count FROM intake_chunks WHERE job_id = @jobId AND status = 'pending'`, { jobId });
|
|
321
|
+
return result?.count ?? 0;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// =============================================================================
|
|
325
|
+
// ROW MAPPERS
|
|
326
|
+
// =============================================================================
|
|
327
|
+
function rowToJobRecord(row) {
|
|
328
|
+
return {
|
|
329
|
+
id: row.id,
|
|
330
|
+
status: row.status,
|
|
331
|
+
config: JSON.parse(row.config),
|
|
332
|
+
pdfMeta: row.pdf_meta ? JSON.parse(row.pdf_meta) : null,
|
|
333
|
+
toc: row.toc ? JSON.parse(row.toc) : null,
|
|
334
|
+
stats: row.stats ? JSON.parse(row.stats) : null,
|
|
335
|
+
createdAt: row.created_at,
|
|
336
|
+
updatedAt: row.updated_at,
|
|
337
|
+
completedAt: row.completed_at ?? null,
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
function rowToChunk(row) {
|
|
341
|
+
return {
|
|
342
|
+
id: row.id,
|
|
343
|
+
jobId: row.job_id,
|
|
344
|
+
chunkIndex: row.chunk_index,
|
|
345
|
+
title: row.title ?? null,
|
|
346
|
+
pageStart: row.page_start,
|
|
347
|
+
pageEnd: row.page_end,
|
|
348
|
+
status: row.status,
|
|
349
|
+
itemsExtracted: row.items_extracted ?? 0,
|
|
350
|
+
itemsStored: row.items_stored ?? 0,
|
|
351
|
+
itemsDeduped: row.items_deduped ?? 0,
|
|
352
|
+
error: row.error ?? null,
|
|
353
|
+
processedAt: row.processed_at ?? null,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Convert a ClassifiedItem to an IntelligenceEntry for vault storage.
|
|
358
|
+
*/
|
|
359
|
+
function classifiedItemToEntry(item, domain, jobId, chunkIndex, itemIndex, extraTags) {
|
|
360
|
+
const entryType = mapKnowledgeType(item.type);
|
|
361
|
+
const tags = [...item.tags, ...(extraTags ?? [])];
|
|
362
|
+
return {
|
|
363
|
+
id: `intake-${jobId}-${chunkIndex}-${itemIndex}`,
|
|
364
|
+
type: entryType,
|
|
365
|
+
domain,
|
|
366
|
+
title: item.title,
|
|
367
|
+
severity: item.severity,
|
|
368
|
+
description: item.description,
|
|
369
|
+
context: item.citation,
|
|
370
|
+
tags,
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
//# sourceMappingURL=intake-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake-pipeline.js","sourceRoot":"","sources":["../../src/intake/intake-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export type IntakeJobStatus = 'initialized' | 'processing' | 'completed' | 'failed' | 'cancelled';
|
|
2
|
+
export type IntakeChunkStatus = 'pending' | 'processing' | 'completed' | 'failed' | 'skipped';
|
|
3
|
+
export type KnowledgeType = 'pattern' | 'anti-pattern' | 'principle' | 'concept' | 'reference' | 'workflow' | 'idea' | 'roadmap';
|
|
4
|
+
export interface IntakeConfig {
|
|
5
|
+
pdfPath: string;
|
|
6
|
+
title: string;
|
|
7
|
+
author?: string;
|
|
8
|
+
domain: string;
|
|
9
|
+
chunkPageSize?: number;
|
|
10
|
+
tags?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface IntakeChunk {
|
|
13
|
+
id: number;
|
|
14
|
+
jobId: string;
|
|
15
|
+
chunkIndex: number;
|
|
16
|
+
title: string | null;
|
|
17
|
+
pageStart: number;
|
|
18
|
+
pageEnd: number;
|
|
19
|
+
status: IntakeChunkStatus;
|
|
20
|
+
itemsExtracted: number;
|
|
21
|
+
itemsStored: number;
|
|
22
|
+
itemsDeduped: number;
|
|
23
|
+
error: string | null;
|
|
24
|
+
processedAt: number | null;
|
|
25
|
+
}
|
|
26
|
+
export interface ClassifiedItem {
|
|
27
|
+
type: KnowledgeType;
|
|
28
|
+
title: string;
|
|
29
|
+
description: string;
|
|
30
|
+
tags: string[];
|
|
31
|
+
severity: 'critical' | 'warning' | 'suggestion';
|
|
32
|
+
citation: string;
|
|
33
|
+
}
|
|
34
|
+
export interface IntakeJobRecord {
|
|
35
|
+
id: string;
|
|
36
|
+
status: IntakeJobStatus;
|
|
37
|
+
config: IntakeConfig;
|
|
38
|
+
pdfMeta: {
|
|
39
|
+
totalPages: number;
|
|
40
|
+
fileHash: string;
|
|
41
|
+
fileSize: number;
|
|
42
|
+
} | null;
|
|
43
|
+
toc: Array<{
|
|
44
|
+
title: string;
|
|
45
|
+
page: number;
|
|
46
|
+
}> | null;
|
|
47
|
+
stats: {
|
|
48
|
+
itemsExtracted: number;
|
|
49
|
+
itemsStored: number;
|
|
50
|
+
itemsDeduped: number;
|
|
51
|
+
itemsFailed: number;
|
|
52
|
+
} | null;
|
|
53
|
+
createdAt: number;
|
|
54
|
+
updatedAt: number;
|
|
55
|
+
completedAt: number | null;
|
|
56
|
+
}
|
|
57
|
+
export interface IntakePreviewResult {
|
|
58
|
+
items: ClassifiedItem[];
|
|
59
|
+
chunkText: string;
|
|
60
|
+
pageRange: {
|
|
61
|
+
start: number;
|
|
62
|
+
end: number;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/intake/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;AAClG,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC9F,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,cAAc,GACd,WAAW,GACX,SAAS,GACT,WAAW,GACX,UAAU,GACV,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3E,GAAG,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACnD,KAAK,EAAE;QACL,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/intake/types.ts"],"names":[],"mappings":"AAAA,qEAAqE"}
|
|
@@ -30,7 +30,7 @@ export function loadIntelligenceData(dataDir) {
|
|
|
30
30
|
function validateEntry(entry) {
|
|
31
31
|
return (typeof entry.id === 'string' &&
|
|
32
32
|
entry.id.length > 0 &&
|
|
33
|
-
['pattern', 'anti-pattern', 'rule'].includes(entry.type) &&
|
|
33
|
+
['pattern', 'anti-pattern', 'rule', 'playbook'].includes(entry.type) &&
|
|
34
34
|
typeof entry.title === 'string' &&
|
|
35
35
|
entry.title.length > 0 &&
|
|
36
36
|
typeof entry.description === 'string' &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/intelligence/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,OAAO,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,SAAS;YAChE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,aAAa,CAAC,KAAK,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAAwB;IAC7C,OAAO,CACL,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;QACnB,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/intelligence/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,yCAAyC,GAAG,OAAO,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,SAAS;YAChE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnC,IAAI,aAAa,CAAC,KAAK,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,KAAwB;IAC7C,OAAO,CACL,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC;QACnB,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACpE,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC/B,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACtB,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QACrC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QAC5B,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC9D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export interface IntelligenceEntry {
|
|
2
2
|
id: string;
|
|
3
|
-
type: 'pattern' | 'anti-pattern' | 'rule';
|
|
3
|
+
type: 'pattern' | 'anti-pattern' | 'rule' | 'playbook';
|
|
4
4
|
domain: string;
|
|
5
5
|
title: string;
|
|
6
6
|
severity: 'critical' | 'warning' | 'suggestion';
|
|
@@ -11,6 +11,8 @@ export interface IntelligenceEntry {
|
|
|
11
11
|
why?: string;
|
|
12
12
|
tags: string[];
|
|
13
13
|
appliesTo?: string[];
|
|
14
|
+
validFrom?: number;
|
|
15
|
+
validUntil?: number;
|
|
14
16
|
}
|
|
15
17
|
export interface IntelligenceBundle {
|
|
16
18
|
domain: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/intelligence/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/intelligence/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,GAAG,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logger for Soleri agents.
|
|
3
|
+
*
|
|
4
|
+
* All output routes through stderr (stdout is reserved for MCP JSON-RPC).
|
|
5
|
+
* Supports optional file logging with daily rotation and 7-day retention.
|
|
6
|
+
*
|
|
7
|
+
* Ported from Salvador MCP's src/utils/logger.ts.
|
|
8
|
+
*/
|
|
9
|
+
import type { LogContext, LoggerConfig } from './types.js';
|
|
10
|
+
export declare class Logger {
|
|
11
|
+
private readonly prefix;
|
|
12
|
+
private readonly minLevel;
|
|
13
|
+
private fileLogDir;
|
|
14
|
+
private fileLogPrefix;
|
|
15
|
+
private currentLogDate;
|
|
16
|
+
private currentLogPath;
|
|
17
|
+
constructor(config?: LoggerConfig);
|
|
18
|
+
/**
|
|
19
|
+
* Enable file-based logging. Output is teed to
|
|
20
|
+
* {dir}/{prefix}-YYYY-MM-DD.log in addition to stderr.
|
|
21
|
+
* Automatically prunes log files older than 7 days.
|
|
22
|
+
*/
|
|
23
|
+
enableFileLog(dir: string, prefix?: string): void;
|
|
24
|
+
debug(message: string, context?: LogContext): void;
|
|
25
|
+
info(message: string, context?: LogContext): void;
|
|
26
|
+
warn(message: string, context?: LogContext): void;
|
|
27
|
+
error(message: string, context?: LogContext): void;
|
|
28
|
+
private log;
|
|
29
|
+
private writeToFile;
|
|
30
|
+
/** Switch to a new log file if the date has changed */
|
|
31
|
+
private rotateFileIfNeeded;
|
|
32
|
+
/** Remove log files older than LOG_RETENTION_DAYS */
|
|
33
|
+
private pruneOldLogs;
|
|
34
|
+
}
|
|
35
|
+
/** Factory function for creating a logger. */
|
|
36
|
+
export declare function createLogger(config?: LoggerConfig): Logger;
|
|
37
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logging/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAY,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAgBrE,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAuB;gBAEjC,MAAM,CAAC,EAAE,YAAY;IAajC;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD,OAAO,CAAC,GAAG;IAkBX,OAAO,CAAC,WAAW;IAoBnB,uDAAuD;IACvD,OAAO,CAAC,kBAAkB;IAS1B,qDAAqD;IACrD,OAAO,CAAC,YAAY;CAsBrB;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE1D"}
|