@miller-tech/uap 1.40.0 → 1.41.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 (150) hide show
  1. package/README.md +109 -642
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/cli/deliver-defaults.d.ts +23 -0
  4. package/dist/cli/deliver-defaults.d.ts.map +1 -0
  5. package/dist/cli/deliver-defaults.js +121 -0
  6. package/dist/cli/deliver-defaults.js.map +1 -0
  7. package/dist/cli/init.d.ts.map +1 -1
  8. package/dist/cli/init.js +29 -0
  9. package/dist/cli/init.js.map +1 -1
  10. package/dist/cli/setup.d.ts.map +1 -1
  11. package/dist/cli/setup.js +19 -0
  12. package/dist/cli/setup.js.map +1 -1
  13. package/dist/policies/policy-tools.d.ts +7 -0
  14. package/dist/policies/policy-tools.d.ts.map +1 -1
  15. package/dist/policies/policy-tools.js +24 -2
  16. package/dist/policies/policy-tools.js.map +1 -1
  17. package/docs/INDEX.md +48 -286
  18. package/docs/architecture/OVERVIEW.md +328 -0
  19. package/docs/architecture/PROTOCOL.md +204 -0
  20. package/docs/benchmarks/README.md +17 -192
  21. package/docs/getting-started/CONFIGURATION.md +237 -0
  22. package/docs/getting-started/INSTALLATION.md +125 -0
  23. package/docs/getting-started/QUICKSTART.md +115 -0
  24. package/docs/guides/COORDINATION.md +162 -0
  25. package/docs/guides/DELIVER.md +115 -0
  26. package/docs/guides/DEPLOY_BATCHING.md +212 -0
  27. package/docs/guides/DROIDS_AND_SKILLS.md +202 -0
  28. package/docs/guides/LOCAL_MODELS.md +148 -0
  29. package/docs/guides/MCP_ROUTER.md +195 -0
  30. package/docs/guides/MEMORY.md +235 -0
  31. package/docs/guides/MULTI_MODEL.md +223 -0
  32. package/docs/guides/POLICIES.md +190 -0
  33. package/docs/guides/WORKTREE_WORKFLOW.md +185 -0
  34. package/docs/integrations/MCP_ROUTER.md +147 -0
  35. package/docs/integrations/RTK.md +102 -0
  36. package/docs/reference/API.md +485 -0
  37. package/docs/reference/CLI.md +719 -0
  38. package/docs/reference/CONFIGURATION.md +90 -193
  39. package/docs/reference/DATABASE_SCHEMA.md +110 -344
  40. package/docs/reference/FEATURES.md +176 -472
  41. package/docs/reference/PATTERNS.md +102 -0
  42. package/docs/reference/PLATFORMS.md +83 -0
  43. package/package.json +3 -1
  44. package/src/policies/enforcers/7ebbc721-7540-4e9f-879a-770e0213a09b_architecture_review.py +101 -0
  45. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  46. package/src/policies/enforcers/_common.py +100 -0
  47. package/src/policies/enforcers/artifact_hygiene.py +52 -0
  48. package/src/policies/enforcers/cluster_routing.py +63 -0
  49. package/src/policies/enforcers/codebase_read_before_plan.py +52 -0
  50. package/src/policies/enforcers/coord_overlap.py +81 -0
  51. package/src/policies/enforcers/delivery_enforcement.py +97 -0
  52. package/src/policies/enforcers/doc_live_over_report.py +50 -0
  53. package/src/policies/enforcers/expert_review_required.py +135 -0
  54. package/src/policies/enforcers/iac_parity.py +53 -0
  55. package/src/policies/enforcers/mcp_router_first.py +37 -0
  56. package/src/policies/enforcers/memory_before_plan.py +61 -0
  57. package/src/policies/enforcers/parallel_reads.py +50 -0
  58. package/src/policies/enforcers/rtk_wrap.py +44 -0
  59. package/src/policies/enforcers/schema_diff_gate.py +80 -0
  60. package/src/policies/enforcers/session_memory_write.py +52 -0
  61. package/src/policies/enforcers/task_required.py +131 -0
  62. package/src/policies/enforcers/test_gate.py +58 -0
  63. package/src/policies/enforcers/validate_plan_before_build.py +75 -0
  64. package/src/policies/enforcers/worktree_required.py +57 -0
  65. package/src/policies/schemas/policies/architecture-review.md +51 -0
  66. package/src/policies/schemas/policies/artifact-hygiene.md +29 -0
  67. package/src/policies/schemas/policies/cluster-routing.md +31 -0
  68. package/src/policies/schemas/policies/codebase-read-before-plan.md +30 -0
  69. package/src/policies/schemas/policies/coord-overlap.md +24 -0
  70. package/src/policies/schemas/policies/delivery-enforcement.md +45 -0
  71. package/src/policies/schemas/policies/doc-live-over-report.md +32 -0
  72. package/src/policies/schemas/policies/expert-review-required.md +60 -0
  73. package/src/policies/schemas/policies/iac-parity.md +31 -0
  74. package/src/policies/schemas/policies/mandatory-testing-deployment.md +147 -0
  75. package/src/policies/schemas/policies/mcp-router-first.md +24 -0
  76. package/src/policies/schemas/policies/memory-before-plan.md +24 -0
  77. package/src/policies/schemas/policies/merge-deploy-monitor-verify.md +145 -0
  78. package/src/policies/schemas/policies/parallel-reads.md +24 -0
  79. package/src/policies/schemas/policies/rtk-wrap.md +26 -0
  80. package/src/policies/schemas/policies/schema-diff-gate.md +30 -0
  81. package/src/policies/schemas/policies/session-memory-write.md +24 -0
  82. package/src/policies/schemas/policies/task-required.md +49 -0
  83. package/src/policies/schemas/policies/test-gate.md +24 -0
  84. package/src/policies/schemas/policies/validate-plan-before-build.md +28 -0
  85. package/src/policies/schemas/policies/worktree-required.md +28 -0
  86. package/templates/hooks/uap-policy-gate.sh +5 -0
  87. package/docs/AGENTS.md +0 -423
  88. package/docs/DOCUMENTATION_AUDIT_REPORT.md +0 -131
  89. package/docs/GETTING_STARTED.md +0 -288
  90. package/docs/PROJECT_ANALYSIS_REPORT.md +0 -510
  91. package/docs/architecture/COMPLETE_ARCHITECTURE.md +0 -748
  92. package/docs/architecture/EXPERT_STACK.md +0 -137
  93. package/docs/architecture/MULTI_MODEL.md +0 -224
  94. package/docs/architecture/PLATFORM_GATING.md +0 -68
  95. package/docs/architecture/SYSTEM_ANALYSIS.md +0 -334
  96. package/docs/architecture/UAP_COMPLIANCE.md +0 -217
  97. package/docs/architecture/UAP_PROTOCOL.md +0 -339
  98. package/docs/architecture/UAP_STRICT_DROIDS.md +0 -172
  99. package/docs/archive/BALLS_MODE_SELF_ANALYSIS.md +0 -260
  100. package/docs/archive/BENCHMARK_GAPS_AND_PLAN.md +0 -146
  101. package/docs/archive/FAILING_TASKS_SOLUTION_PLAN.md +0 -668
  102. package/docs/archive/JINJA2-SYSTEM-MESSAGE-FIX.md +0 -209
  103. package/docs/archive/MODEL_ROUTING_IMPLEMENTATION_SUMMARY.md +0 -281
  104. package/docs/archive/MODEL_ROUTING_OPTIMIZATION_PLAN.md +0 -320
  105. package/docs/archive/NPM-PUBLISH-V0.9.1.md +0 -240
  106. package/docs/archive/OPTIMIZATION_OPTIONS.md +0 -334
  107. package/docs/archive/PARALLELISM_GAPS_AND_OPTIONS.md +0 -422
  108. package/docs/archive/POLICY_GATE_IMPLEMENTATION.md +0 -245
  109. package/docs/archive/SETUP_IMPROVEMENTS.md +0 -213
  110. package/docs/archive/UAP_GENERIC_OPTIMIZATION_PLAN.md +0 -270
  111. package/docs/archive/UAP_OPTIMIZATION_PLAN.md +0 -701
  112. package/docs/archive/UAP_V103_PATTERN_DESIGN.md +0 -315
  113. package/docs/archive/UAP_V104_COMPLIANCE_DESIGN.md +0 -223
  114. package/docs/archive/changelog/2026-03-10_uap-100-compliance.md +0 -77
  115. package/docs/archive/changelog/2026-03-10_uap-full-system-verification.md +0 -109
  116. package/docs/archive/opencode-integration-guide.md +0 -740
  117. package/docs/archive/opencode-integration-quickref.md +0 -180
  118. package/docs/benchmarks/OVERNIGHT_RUNNER.md +0 -341
  119. package/docs/benchmarks/SPECULATIVE_DECODING_JOURNEY_2026-03.md +0 -221
  120. package/docs/benchmarks/VALIDATION_PLAN.md +0 -568
  121. package/docs/blog/SPECULATIVE_DECODING_PRODUCTION_PLAYBOOK.md +0 -139
  122. package/docs/blog/local-coding-agents.md +0 -266
  123. package/docs/blog/x-thread.md +0 -254
  124. package/docs/deployment/DEPLOYMENT.md +0 -895
  125. package/docs/deployment/DEPLOYMENT_STRATEGIES.md +0 -518
  126. package/docs/deployment/DEPLOY_BATCHER_ANALYSIS.md +0 -224
  127. package/docs/deployment/DEPLOY_BATCHING.md +0 -273
  128. package/docs/deployment/DEPLOY_BUCKETING_ANALYSIS.md +0 -420
  129. package/docs/deployment/QWEN35_LLAMA_CPP.md +0 -426
  130. package/docs/deployment/UAP_LLAMA_ANTHROPIC_PROXY_BOOTSTRAP.md +0 -279
  131. package/docs/getting-started/INTEGRATION.md +0 -628
  132. package/docs/getting-started/OVERVIEW.md +0 -324
  133. package/docs/getting-started/SETUP.md +0 -377
  134. package/docs/integrations/MCP_ROUTER_SETUP.md +0 -445
  135. package/docs/integrations/RTK_INTEGRATION.md +0 -468
  136. package/docs/operations/TROUBLESHOOTING.md +0 -660
  137. package/docs/pr/PR_SPECULATIVE_DOCS_TEMPLATE.md +0 -146
  138. package/docs/pr/UPSTREAM_PRS.md +0 -424
  139. package/docs/reference/API_REFERENCE.md +0 -903
  140. package/docs/reference/EXPERT_DROIDS.md +0 -219
  141. package/docs/reference/HARNESS-MATRIX.md +0 -318
  142. package/docs/reference/PATTERN_LIBRARY.md +0 -636
  143. package/docs/reference/UAP_CLI_REFERENCE.md +0 -620
  144. package/docs/research/BEHAVIORAL_PATTERNS.md +0 -228
  145. package/docs/research/DOMAIN_STRATEGIES.md +0 -316
  146. package/docs/research/MEMORY_SYSTEMS_COMPARISON.md +0 -812
  147. package/docs/research/PATTERN_ANALYSIS_2026-01-18.md +0 -436
  148. package/docs/research/PERFORMANCE_ANALYSIS_2026-01-18.md +0 -209
  149. package/docs/research/PERFORMANCE_TEST_PLAN.md +0 -383
  150. package/docs/research/TERMINAL_BENCH_LEARNINGS.md +0 -217
@@ -0,0 +1,485 @@
1
+ # UAP Programmatic API Reference
2
+
3
+ > Public API of the `@miller-tech/uap` package. Version v1.40.0.
4
+
5
+ Install and import:
6
+
7
+ ```bash
8
+ npm install @miller-tech/uap
9
+ ```
10
+
11
+ ```ts
12
+ import { analyzeProject, getHierarchicalMemoryManager, McpRouter } from '@miller-tech/uap';
13
+ ```
14
+
15
+ The package entry point is `dist/index.js` (`main`). Everything documented here
16
+ is re-exported from the package root unless noted otherwise.
17
+
18
+ > **Note on the delivery loop.** The convergence engine that powers
19
+ > `uap deliver` (`ConvergenceLoop`) lives in `src/delivery/` and is **not**
20
+ > re-exported from the package root, and the package defines no subpath
21
+ > `exports`. Drive the delivery loop through the [`uap deliver`](./CLI.md#deliver)
22
+ > CLI rather than importing it programmatically.
23
+
24
+ ## Contents
25
+
26
+ - [Project analysis & generation](#project-analysis--generation)
27
+ - [Multi-model architecture](#multi-model-architecture)
28
+ - [Memory system](#memory-system)
29
+ - [Knowledge graph (L4)](#knowledge-graph-l4)
30
+ - [MCP router](#mcp-router)
31
+ - [Coordination](#coordination)
32
+ - [Tasks](#tasks)
33
+ - [Utilities](#utilities)
34
+ - [Type modules](#type-modules)
35
+
36
+ ---
37
+
38
+ ## Project analysis & generation
39
+
40
+ ```ts
41
+ function analyzeProject(projectPath?: string): Promise<ProjectAnalysis>;
42
+ function generateClaudeMd(analysis: ProjectAnalysis, options?: GenerateOptions): string;
43
+ ```
44
+
45
+ - `analyzeProject` — inspect a project directory and return structured metadata
46
+ (languages, frameworks, structure) used to drive context generation.
47
+ - `generateClaudeMd` — render a CLAUDE.md document from an analysis result.
48
+
49
+ ---
50
+
51
+ ## Multi-model architecture
52
+
53
+ Imported from the package root (originating in `src/models/`). Routes tasks to
54
+ models by complexity, plans multi-step work, and executes plans with
55
+ retry/fallback.
56
+
57
+ ### Factory functions
58
+
59
+ ```ts
60
+ function createRouter(config: MultiModelConfig): ModelRouter;
61
+ function createCostOptimizedRouter(): ModelRouter;
62
+ function createPerformanceRouter(): ModelRouter;
63
+ function createPlanner(router: ModelRouter, config: MultiModelConfig, options?: PlannerOptions): TaskPlanner;
64
+ function createExecutor(router: ModelRouter, config: MultiModelConfig, client: ModelClient, options?: ExecutorOptions): TaskExecutor;
65
+ function createUnifiedRouter(config: MultiModelConfig, benchmarkConfig?: Partial<RoutingConfig>): UnifiedRoutingService;
66
+ function createPlanValidator(config?: PlanValidationConfig): PlanValidator;
67
+ function getModelAnalytics(): ModelAnalytics; // singleton
68
+ ```
69
+
70
+ ### `ModelRouter`
71
+
72
+ Classifies tasks and selects models per role.
73
+
74
+ ```ts
75
+ class ModelRouter {
76
+ constructor(config: MultiModelConfig);
77
+ classifyTask(taskDescription: string): TaskClassificationResult;
78
+ selectModel(complexity: TaskComplexity, taskType: string, keywords: string[]): ModelSelection;
79
+ estimateCost(model: ModelConfig, inputTokens: number, outputTokens: number): number;
80
+ getModel(modelId: string): ModelConfig | undefined;
81
+ getModelForRole(role: ModelRole): ModelConfig | undefined;
82
+ getAllModels(): ModelConfig[];
83
+ analyzeRouting(taskDescription: string): { classification: TaskClassificationResult; matchedRules: unknown[]; costComparison: Array<{ model: string; cost: number }> };
84
+ }
85
+ ```
86
+
87
+ ### `TaskPlanner`
88
+
89
+ Decomposes a task into an `ExecutionPlan`.
90
+
91
+ ```ts
92
+ class TaskPlanner {
93
+ constructor(router: ModelRouter, config: MultiModelConfig, options?: PlannerOptions);
94
+ createPlan(taskDescription: string): Promise<ExecutionPlan>;
95
+ getExecutionOrder(plan: ExecutionPlan): string[][];
96
+ visualizePlan(plan: ExecutionPlan): string;
97
+ }
98
+ ```
99
+
100
+ ### `TaskExecutor`
101
+
102
+ Executes a plan's subtasks against a `ModelClient`.
103
+
104
+ ```ts
105
+ class TaskExecutor {
106
+ constructor(router: ModelRouter, config: MultiModelConfig, client: ModelClient, options?: ExecutorOptions);
107
+ executePlan(plan: ExecutionPlan, planner: TaskPlanner, onResult?: (r: ExecutionResult) => void): Promise<ExecutionResult[]>;
108
+ executeSubtask(subtask: Subtask, plan: ExecutionPlan): Promise<ExecutionResult>;
109
+ getResults(planId: string): ExecutionResult[] | undefined;
110
+ getTotalCost(planId: string): number;
111
+ getSuccessRate(planId: string): number;
112
+ generateSummary(planId: string): string;
113
+ }
114
+ ```
115
+
116
+ ### `ModelClient` and `MockModelClient`
117
+
118
+ The seam executors call to reach an LLM.
119
+
120
+ ```ts
121
+ interface ModelClient {
122
+ complete(
123
+ model: ModelConfig,
124
+ prompt: string,
125
+ options?: { maxTokens?: number; timeout?: number; temperature?: number }
126
+ ): Promise<{ content: string; tokensUsed: { input: number; output: number }; latencyMs: number }>;
127
+ }
128
+
129
+ class MockModelClient implements ModelClient {
130
+ constructor(responses?: Record<string, string>, latency?: number);
131
+ }
132
+ ```
133
+
134
+ ### `ModelPresets`
135
+
136
+ A lookup record of built-in model configs (not a function), keyed by preset id
137
+ (e.g. `'opus-4.6'`, `'qwen35-a3b'`, `'haiku'`, `'gpt-5.4'`).
138
+
139
+ ```ts
140
+ const ModelPresets: Record<string, ModelConfig>;
141
+ ```
142
+
143
+ ### Execution profiles
144
+
145
+ ```ts
146
+ function getExecutionProfile(profileId: string): ExecutionProfile | undefined;
147
+ function detectExecutionProfile(modelName: string): ExecutionProfile;
148
+ function getExecutionConfig(modelName: string, userOverrides?: Partial<AgentExecutionConfig>): { profile: ExecutionProfile; config: AgentExecutionConfig };
149
+ function listExecutionProfiles(): ExecutionProfile[];
150
+ ```
151
+
152
+ ### `PlanValidator` and `ModelAnalytics`
153
+
154
+ ```ts
155
+ class PlanValidator {
156
+ constructor(config?: PlanValidationConfig);
157
+ validatePlan(plan: ExecutionPlan): Promise<PlanValidationResult>;
158
+ getConfig(): PlanValidationConfig;
159
+ updateConfig(config: PlanValidationConfig): void;
160
+ }
161
+
162
+ class ModelAnalytics {
163
+ constructor(dbPath?: string);
164
+ recordOutcome(outcome: TaskOutcome): void;
165
+ getSuccessRate(modelId: string, taskType?: string): number;
166
+ getAvgLatency(modelId: string, taskType?: string): number;
167
+ getMetrics(modelId?: string): ModelMetrics[];
168
+ getCostBreakdown(since?: Date): CostBreakdown[];
169
+ getSessionUsage(): SessionModelUsage[];
170
+ getOptimalRouting(): Record<string, string>;
171
+ getTotalCost(): number;
172
+ close(): void;
173
+ }
174
+ ```
175
+
176
+ ### Example
177
+
178
+ ```ts
179
+ import { createRouter, createPlanner, createExecutor, MockModelClient, ModelPresets } from '@miller-tech/uap';
180
+
181
+ const config = {
182
+ enabled: true,
183
+ models: ['opus-4.6', 'qwen35-a3b'],
184
+ roles: { planner: 'opus-4.6', executor: 'qwen35-a3b', fallback: 'qwen35-a3b' },
185
+ routingStrategy: 'balanced' as const,
186
+ };
187
+
188
+ const router = createRouter(config);
189
+ const planner = createPlanner(router, config);
190
+ const plan = await planner.createPlan('Add OAuth2 login with JWT and tests');
191
+
192
+ const executor = createExecutor(router, config, new MockModelClient());
193
+ const results = await executor.executePlan(plan, planner);
194
+ console.log(executor.generateSummary(plan.id));
195
+ ```
196
+
197
+ ---
198
+
199
+ ## Memory system
200
+
201
+ ### Embeddings
202
+
203
+ ```ts
204
+ function getEmbeddingService(): EmbeddingService; // honors UAP_EMBEDDING_ENDPOINT
205
+ function generateEmbedding(text: string): Promise<number[]>;
206
+ function generateEmbeddings(texts: string[]): Promise<number[][]>;
207
+
208
+ class OllamaEmbeddingProvider {
209
+ constructor(endpoint?: string, model?: string); // defaults: localhost:11434, nomic-embed-text (768-dim)
210
+ }
211
+ ```
212
+
213
+ ### Hierarchical (tiered) memory
214
+
215
+ Hot/warm/cold tiered store with automatic promotion, demotion, decay, and a
216
+ token budget.
217
+
218
+ ```ts
219
+ class HierarchicalMemoryManager {
220
+ constructor(config?: Partial<HierarchicalConfig>);
221
+ add(entry: Omit<MemoryEntry, 'accessCount' | 'lastAccessed' | 'tier'>): void;
222
+ access(id: string): MemoryEntry | null;
223
+ query(queryText: string, limit?: number): Promise<MemoryEntry[]>;
224
+ getHotContext(): { entries: MemoryEntry[]; tokens: number };
225
+ consolidate(): Promise<void>;
226
+ pruneStale(): number;
227
+ enforceTokenBudget(): number;
228
+ getStats(): { hot: { count: number; tokens: number }; warm: { count: number; tokens: number }; cold: { count: number; tokens: number }; total: { count: number; tokens: number } };
229
+ export(): TieredMemory;
230
+ import(data: TieredMemory): void;
231
+ }
232
+
233
+ function getHierarchicalMemoryManager(config?: Partial<HierarchicalConfig>, dbPath?: string): HierarchicalMemoryManager;
234
+ function saveHierarchicalMemory(dbPath?: string): void;
235
+ function persistToSQLite(manager: HierarchicalMemoryManager, dbPath: string): void;
236
+ function loadFromSQLite(dbPath: string): TieredMemory | null;
237
+ function calculateEffectiveImportance(entry: MemoryEntry, decayRate?: number): number;
238
+ ```
239
+
240
+ ```ts
241
+ interface MemoryEntry {
242
+ id: string;
243
+ content: string;
244
+ type: 'action' | 'observation' | 'thought' | 'goal';
245
+ timestamp: string;
246
+ importance: number;
247
+ accessCount: number;
248
+ lastAccessed: string;
249
+ embedding?: number[];
250
+ compressed?: string;
251
+ tier?: 'hot' | 'warm' | 'cold';
252
+ }
253
+
254
+ interface TieredMemory { hot: MemoryEntry[]; warm: MemoryEntry[]; cold: MemoryEntry[]; }
255
+ ```
256
+
257
+ ### Dynamic retrieval
258
+
259
+ ```ts
260
+ function retrieveDynamicMemoryContext(
261
+ taskInstruction: string,
262
+ projectRoot?: string,
263
+ options?: { maxTokens?: number; useSemanticCompression?: boolean; taskMetadata?: TaskMetadata }
264
+ ): Promise<DynamicMemoryContext>;
265
+ ```
266
+
267
+ Returns a token-budget-bounded memory context scaled to query complexity.
268
+
269
+ ### Write gate
270
+
271
+ Quality filter that decides whether a candidate memory is worth persisting.
272
+
273
+ ```ts
274
+ function evaluateWriteGate(content: string, config?: WriteGateConfig): WriteGateResult;
275
+ function formatGateResult(result: WriteGateResult): string;
276
+
277
+ interface WriteGateResult { passed: boolean; score: number; criteria: GateCriteria[]; rejectionReason?: string; }
278
+ interface WriteGateConfig { minScore: number; enableFuzzyMatching: boolean; } // default { minScore: 0.3, enableFuzzyMatching: true }
279
+ ```
280
+
281
+ ### Other memory exports
282
+
283
+ | Symbol | Kind | Purpose |
284
+ |--------|------|---------|
285
+ | `classifyTask`, `extractTaskEntities`, `getSuggestedMemoryQueries` | functions | Classify a task and derive memory queries |
286
+ | `compressMemoryEntry`, `compressMemoryBatch`, `summarizeMemories`, `estimateTokens`, `ContextBudget` | functions/class | Context compression and token budgeting |
287
+ | `extractAtomicFacts`, `compressToSemanticUnits`, `createSemanticUnit`, `serializeSemanticUnit` | functions | Semantic compression |
288
+ | `calculateEntropy`, `calculateInformationDensity` | functions | Entropy-aware compression metrics |
289
+ | `SpeculativeCache`, `getSpeculativeCache` | class/fn | Prefetch cache for likely-next memories |
290
+ | `MemoryConsolidator`, `getMemoryConsolidator`, `autoStartConsolidation` | class/fns | Background consolidation |
291
+ | `ServerlessQdrantManager`, `getServerlessQdrantManager`, `initServerlessQdrant` | class/fns | Embedded Qdrant management |
292
+ | `DailyLog`, `ensureDailyLogSchema` | class/fn | Staging area for memory writes |
293
+ | `propagateCorrection`, `getSupersededHistory` | functions | Correction propagation across tiers |
294
+ | `runMaintenance`, `getHealthSummary` | functions | Decay / prune / archive / dedupe |
295
+ | `PredictiveMemoryService`, `getPredictiveMemoryService` | class/fn | Predictive prefetch + learning |
296
+ | `ContextPruner` | class | Token-budget-aware context pruning |
297
+ | `detectAmbiguity`, `formatAmbiguityForContext` | functions | Ambiguity detection (P37 pattern) |
298
+ | `routeTaskToModel`, `recordTaskOutcome`, `explainRouting` | functions | Memory-layer model router with feedback |
299
+
300
+ ---
301
+
302
+ ## Knowledge graph (L4)
303
+
304
+ SQLite-backed entity/relationship graph.
305
+
306
+ ```ts
307
+ class KnowledgeGraph {
308
+ constructor(dbPath: string);
309
+ upsertEntity(type: string, name: string, description?: string): Entity;
310
+ getEntity(type: string, name: string): Entity | null;
311
+ getEntitiesByType(type: string, limit?: number): Entity[];
312
+ searchEntities(query: string, limit?: number): Entity[];
313
+ deleteEntity(id: number): boolean;
314
+ addRelationship(sourceId: number, targetId: number, relation: string, strength?: number): Relationship;
315
+ getRelationships(entityId: number): Relationship[];
316
+ queryEntityGraph(type: string, name: string): GraphQueryResult | null;
317
+ traverseGraph(entityId: number, maxDepth?: number): Entity[];
318
+ getStats(): { entityCount: number; relationshipCount: number; entityTypes: string[] };
319
+ close(): void;
320
+ }
321
+ ```
322
+
323
+ ---
324
+
325
+ ## MCP router
326
+
327
+ Hierarchical router exposing two meta-tools (discover + execute) for 98%+ token
328
+ reduction versus exposing every server's full tool list.
329
+
330
+ ```ts
331
+ class McpRouter {
332
+ constructor(options?: RouterOptions); // { configPath?, autoDiscover?, verbose? }
333
+ loadTools(): Promise<void>;
334
+ getToolDefinitions(): Array<ToolDefinition>;
335
+ handleToolCall(name: string, args: unknown): Promise<unknown>;
336
+ getStats(): RouterStats;
337
+ getConfig(): McpConfig;
338
+ shutdown(): Promise<void>;
339
+ }
340
+
341
+ function runStdioServer(options?: RouterOptions): Promise<void>;
342
+ function loadConfigFromPaths(): McpConfig; // merges known platform config paths
343
+ function loadConfigFromFile(path: string): McpConfig;
344
+ function mergeConfigs(...configs: McpConfig[]): McpConfig;
345
+ function handleDiscoverTools(args: DiscoverToolsArgs, searchIndex: ToolSearchIndex): { tools: ToolSearchResult[]; hint: string };
346
+ function handleExecuteTool(args: ExecuteToolArgs, searchIndex: ToolSearchIndex, clientPool: McpClientPool): Promise<unknown>;
347
+ ```
348
+
349
+ Also exported: `ToolSearchIndex`, `McpClient`, `McpClientPool`,
350
+ `DISCOVER_TOOLS_DEFINITION`, `EXECUTE_TOOL_DEFINITION`,
351
+ `estimateDiscoverToolsTokens`, `estimateExecuteToolTokens`.
352
+
353
+ ```ts
354
+ import { runStdioServer } from '@miller-tech/uap';
355
+ await runStdioServer({ configPath: './mcp.json', verbose: true });
356
+ ```
357
+
358
+ ---
359
+
360
+ ## Coordination
361
+
362
+ Imported from the package root (originating in `src/coordination/`). The main
363
+ class is `CoordinationService` — agent registry, resource claims, work
364
+ announcements, messaging, and deploy batching, all backed by SQLite.
365
+
366
+ ```ts
367
+ class CoordinationService {
368
+ constructor(config?: CoordinationServiceConfig);
369
+
370
+ // lifecycle
371
+ register(name: string, capabilities?: string[], worktreeBranch?: string, id?: string): string;
372
+ heartbeat(agentId: string): void;
373
+ updateStatus(agentId: string, status: AgentStatus, currentTask?: string): void;
374
+ deregister(agentId: string): void;
375
+ getActiveAgents(): AgentRegistryEntry[];
376
+ cleanupStaleAgents(): number;
377
+
378
+ // resource claims
379
+ claimResource(agentId: string, resource: string, claimType?: ClaimType): boolean;
380
+ releaseResource(agentId: string, resource: string): void;
381
+ isResourceClaimed(resource: string): string | null;
382
+
383
+ // work announcements & overlap
384
+ announceWork(...): void;
385
+ completeWork(agentId: string, resource: string): void;
386
+ getActiveWork(): WorkAnnouncement[];
387
+ detectOverlaps(resource: string, excludeAgentId?: string): WorkOverlap[];
388
+
389
+ // messaging
390
+ broadcast(...): void;
391
+ send(fromAgent: string, toAgent: string, payload: MessagePayload, priority?: number): void;
392
+ receive(agentId: string, channel?: MessageChannel, markAsRead?: boolean): AgentMessage[];
393
+
394
+ // deploy batching
395
+ queueDeploy(...): void;
396
+ getReadyDeploys(): DeployAction[];
397
+ flushDeploys(options?: { dryRun?: boolean }): Promise<{ executed: number; failed: number }>;
398
+
399
+ getStatus(): CoordinationStatus;
400
+ cleanup(): void;
401
+ }
402
+ ```
403
+
404
+ The coordination module also exports the deploy batcher, capability router,
405
+ auto-agent, and pattern router helpers (see `src/coordination/index.ts`).
406
+
407
+ ---
408
+
409
+ ## Tasks
410
+
411
+ Imported from the package root (originating in `src/tasks/`). The main class is
412
+ `TaskService`.
413
+
414
+ ```ts
415
+ class TaskService {
416
+ constructor(config?: TaskServiceConfig);
417
+ create(input: CreateTaskInput): Task;
418
+ get(id: string): Task | null;
419
+ getWithRelations(id: string): TaskWithRelations | null;
420
+ update(id: string, input: UpdateTaskInput): Task | null;
421
+ close(id: string, reason?: string): Task | null;
422
+ delete(id: string): boolean;
423
+ list(filter?: TaskFilter): Task[];
424
+ ready(): TaskWithRelations[];
425
+ blocked(): TaskWithRelations[];
426
+ addDependency(...): void;
427
+ removeDependency(fromTask: string, toTask: string): boolean;
428
+ getBlockers(taskId: string): Task[];
429
+ getHistory(taskId: string): TaskHistoryEntry[];
430
+ getStats(): TaskStats;
431
+ exportToJSONL(): string;
432
+ saveToJSONL(): void;
433
+ importFromJSONL(): number;
434
+ compact(olderThanDays?: number): TaskSummary | null;
435
+ }
436
+ ```
437
+
438
+ ### Task event bus
439
+
440
+ Pub/sub for task lifecycle events.
441
+
442
+ ```ts
443
+ class TaskEventBus {
444
+ on(type: TaskEventType, handler: TaskEventHandler): () => void;
445
+ onAny(handler: TaskEventHandler): () => void;
446
+ emit(event: TaskEvent): Promise<void>;
447
+ clear(): void;
448
+ listenerCount(type?: TaskEventType): number;
449
+ }
450
+
451
+ function getTaskEventBus(): TaskEventBus; // singleton
452
+ ```
453
+
454
+ ---
455
+
456
+ ## Utilities
457
+
458
+ | Symbol | Kind | Purpose |
459
+ |--------|------|---------|
460
+ | `jaccardSimilarity`, `cosineSimilarity`, `textSimilarity`, `fuzzyKeywordMatch`, `contentHash`, `simpleStem`, `estimateTokensAccurate` | functions | String / vector similarity helpers |
461
+ | `AdaptiveCache`, `createPatternCache` | class/fn | Adaptive TTL cache |
462
+ | `RateLimiter` | class | Token-bucket rate limiting |
463
+ | `PerformanceMonitor`, `getPerformanceMonitor`, `monitorFunction` | class/fns | Performance instrumentation |
464
+ | `retry`, `withTimeout`, `parallelWithFallback`, `concurrentMap`, `concurrentMapSettled` | functions | Concurrency helpers |
465
+ | `createLogger`, `logger`, `setLogLevel`, `getLogLevel` | fns/obj | Structured logging |
466
+ | `isPathInsideWorktree`, `isExemptFromWorktree` | functions | Worktree guard utilities |
467
+ | `WebBrowser`, `createWebBrowser` | class/fn | Browser automation wrapper |
468
+ | `getDashboardData`, `startDashboardServer` | functions | Dashboard data service + server |
469
+
470
+ ---
471
+
472
+ ## Type modules
473
+
474
+ The package re-exports its full type surface. Key barrels:
475
+
476
+ - `export * from './types/index.js'` — core config and domain types.
477
+ - `export * from './telemetry/index.js'` — telemetry types and helpers.
478
+ - `export * from './policies/index.js'` — policy enforcement (`getPolicyGate`,
479
+ `getPolicyMemoryManager`, `getPolicyToolRegistry`, and policy types).
480
+
481
+ Multi-model types available from the root include `MultiModelConfig`,
482
+ `ModelRole`, `TaskComplexity`, `TaskClassificationResult`, `ExecutionPlan`,
483
+ `Subtask`, `ExecutionResult`, `ModelSelection`, `PlannerOptions`,
484
+ `ExecutorOptions`, `ExecutionProfile`, `ModelMetrics`, `CostBreakdown`, and
485
+ `SessionModelUsage`.