baselineos 0.2.0-beta.1

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 (64) hide show
  1. package/LICENSE +17 -0
  2. package/README.md +198 -0
  3. package/dist/__evals__/runner.d.ts +2 -0
  4. package/dist/__evals__/runner.js +14687 -0
  5. package/dist/__evals__/runner.js.map +1 -0
  6. package/dist/api/server.d.ts +21 -0
  7. package/dist/api/server.js +1007 -0
  8. package/dist/api/server.js.map +1 -0
  9. package/dist/cli/bin.d.ts +1 -0
  10. package/dist/cli/bin.js +8427 -0
  11. package/dist/cli/bin.js.map +1 -0
  12. package/dist/core/agent-bus.d.ts +110 -0
  13. package/dist/core/agent-bus.js +242 -0
  14. package/dist/core/agent-bus.js.map +1 -0
  15. package/dist/core/cache.d.ts +66 -0
  16. package/dist/core/cache.js +160 -0
  17. package/dist/core/cache.js.map +1 -0
  18. package/dist/core/config.d.ts +1002 -0
  19. package/dist/core/config.js +429 -0
  20. package/dist/core/config.js.map +1 -0
  21. package/dist/core/indexer.d.ts +152 -0
  22. package/dist/core/indexer.js +481 -0
  23. package/dist/core/indexer.js.map +1 -0
  24. package/dist/core/llm-tracer.d.ts +2 -0
  25. package/dist/core/llm-tracer.js +241 -0
  26. package/dist/core/llm-tracer.js.map +1 -0
  27. package/dist/core/memory.d.ts +86 -0
  28. package/dist/core/memory.js +346 -0
  29. package/dist/core/memory.js.map +1 -0
  30. package/dist/core/opa-client.d.ts +51 -0
  31. package/dist/core/opa-client.js +157 -0
  32. package/dist/core/opa-client.js.map +1 -0
  33. package/dist/core/opa-policy-gate.d.ts +133 -0
  34. package/dist/core/opa-policy-gate.js +454 -0
  35. package/dist/core/opa-policy-gate.js.map +1 -0
  36. package/dist/core/orchestrator.d.ts +14 -0
  37. package/dist/core/orchestrator.js +1297 -0
  38. package/dist/core/orchestrator.js.map +1 -0
  39. package/dist/core/pii-detector.d.ts +82 -0
  40. package/dist/core/pii-detector.js +126 -0
  41. package/dist/core/pii-detector.js.map +1 -0
  42. package/dist/core/rag-engine.d.ts +121 -0
  43. package/dist/core/rag-engine.js +504 -0
  44. package/dist/core/rag-engine.js.map +1 -0
  45. package/dist/core/task-queue.d.ts +69 -0
  46. package/dist/core/task-queue.js +124 -0
  47. package/dist/core/task-queue.js.map +1 -0
  48. package/dist/core/telemetry.d.ts +56 -0
  49. package/dist/core/telemetry.js +94 -0
  50. package/dist/core/telemetry.js.map +1 -0
  51. package/dist/core/types.d.ts +328 -0
  52. package/dist/core/types.js +24 -0
  53. package/dist/core/types.js.map +1 -0
  54. package/dist/index.d.ts +21 -0
  55. package/dist/index.js +12444 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/llm-tracer-CIIujuO-.d.ts +493 -0
  58. package/dist/mcp/server.d.ts +2651 -0
  59. package/dist/mcp/server.js +676 -0
  60. package/dist/mcp/server.js.map +1 -0
  61. package/dist/orchestrator-DF89k_AK.d.ts +506 -0
  62. package/package.json +157 -0
  63. package/templates/README.md +7 -0
  64. package/templates/baseline.config.ts +207 -0
@@ -0,0 +1,429 @@
1
+ import { cosmiconfig } from 'cosmiconfig';
2
+ import { z } from 'zod';
3
+ import { join } from 'path';
4
+ import { existsSync } from 'fs';
5
+
6
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
7
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
8
+ }) : x)(function(x) {
9
+ if (typeof require !== "undefined") return require.apply(this, arguments);
10
+ throw Error('Dynamic require of "' + x + '" is not supported');
11
+ });
12
+ var OrchestratorConfigSchema = z.object({
13
+ /** Tasks above this complexity require human approval */
14
+ maxAutonomousComplexity: z.enum(["trivial", "simple", "moderate", "complex", "epic"]).default("complex"),
15
+ /** Require self-verification at every step */
16
+ selfVerificationRequired: z.boolean().default(true),
17
+ /** Confidence threshold for supervisor review (0-1) */
18
+ supervisorReviewThreshold: z.number().min(0).max(1).default(0.7),
19
+ /** Percentage of tasks to quality review */
20
+ qualityReviewSampleRate: z.number().min(0).max(1).default(0.1),
21
+ /** Default trust score for new agents */
22
+ defaultTrustScore: z.number().min(0).max(100).default(70),
23
+ /** Max retry attempts per task */
24
+ defaultMaxAttempts: z.number().min(1).default(3),
25
+ /** Max tokens per task */
26
+ maxTokensPerTask: z.number().default(1e5),
27
+ /** Max concurrent agents */
28
+ maxConcurrentAgents: z.number().default(10),
29
+ /** Trust growth rate (asymptotic) */
30
+ trustGrowthRate: z.number().default(0.02),
31
+ /** Trust decay rate (proportional) */
32
+ trustDecayRate: z.number().default(0.05)
33
+ });
34
+ var CacheConfigSchema = z.object({
35
+ /** Cache TTL in milliseconds */
36
+ ttl: z.number().default(864e5),
37
+ // 24 hours
38
+ /** Max cache entries */
39
+ maxSize: z.number().default(1e4),
40
+ /** Similarity threshold for semantic cache hits */
41
+ similarityThreshold: z.number().min(0).max(1).default(0.92)
42
+ });
43
+ var PathsConfigSchema = z.object({
44
+ /** Directory for BaselineOS data */
45
+ data: z.string().default(".baseline"),
46
+ /** Directory for knowledge index */
47
+ index: z.string().default(".baseline/index"),
48
+ /** Directory for checkpoints */
49
+ checkpoints: z.string().default(".baseline/checkpoints")
50
+ });
51
+ var LLMConfigSchema = z.object({
52
+ /** LLM provider */
53
+ provider: z.enum(["anthropic", "openai", "local"]).default("anthropic"),
54
+ /** Model to use */
55
+ model: z.string().default("claude-sonnet-4-20250514"),
56
+ /** API key (or use env var) */
57
+ apiKey: z.string().optional(),
58
+ /** Max tokens per request */
59
+ maxTokens: z.number().default(8e3)
60
+ });
61
+ var WorkflowBudgetSchema = z.object({
62
+ maxTokens: z.number().optional(),
63
+ maxCostUsd: z.number().optional(),
64
+ costPer1kTokensUsd: z.number().optional(),
65
+ maxSteps: z.number().optional(),
66
+ maxDurationMs: z.number().optional(),
67
+ maxAttempts: z.number().optional()
68
+ });
69
+ var WorkflowStepSchema = z.object({
70
+ id: z.string(),
71
+ title: z.string(),
72
+ description: z.string(),
73
+ action: z.object({
74
+ type: z.enum(["llm", "tool", "human", "composite"]),
75
+ operation: z.string(),
76
+ parameters: z.record(z.unknown()).default({}),
77
+ timeout: z.number().optional()
78
+ }),
79
+ verificationCriteria: z.array(z.string()).optional()
80
+ });
81
+ var WorkflowSchema = z.object({
82
+ id: z.string(),
83
+ name: z.string(),
84
+ description: z.string().optional(),
85
+ steps: z.array(WorkflowStepSchema),
86
+ requiredCapabilities: z.array(z.string()).optional(),
87
+ budget: WorkflowBudgetSchema.optional()
88
+ });
89
+ var RetrievalBudgetSchema = z.object({
90
+ /** Max tokens for retrieval context */
91
+ maxTokens: z.number().optional(),
92
+ /** Max cost in USD for retrieval (requires costPer1kTokensUsd) */
93
+ maxCostUsd: z.number().optional(),
94
+ /** Cost per 1k tokens in USD */
95
+ costPer1kTokensUsd: z.number().optional()
96
+ });
97
+ var RAGConfigSchema = z.object({
98
+ /** Default retrieval budget */
99
+ budget: RetrievalBudgetSchema.default({}),
100
+ /** ChromaDB host for vector search (optional — BM25 works without it) */
101
+ chromaHost: z.string().default("localhost"),
102
+ /** ChromaDB port */
103
+ chromaPort: z.number().default(8e3),
104
+ /** OpenAI API key for embeddings (optional — reads OPENAI_API_KEY env var) */
105
+ openaiApiKey: z.string().optional(),
106
+ /** Chunk size in characters for ingestion */
107
+ chunkSize: z.number().default(1500),
108
+ /** Chunk overlap in characters */
109
+ chunkOverlap: z.number().default(200),
110
+ /** Max chunks per collection */
111
+ maxChunksPerCollection: z.number().default(1e3),
112
+ /** ABAC role profiles for policy-filtered retrieval */
113
+ roles: z.record(z.object({
114
+ collections: z.array(z.string()).default([]),
115
+ sensitivity: z.enum(["public", "internal", "restricted"]).default("public"),
116
+ repos: z.array(z.string()).default([]),
117
+ scopes: z.array(z.string()).default([])
118
+ })).default({})
119
+ });
120
+ var BaselineConfigSchema = z.object({
121
+ /** Project root directory */
122
+ projectRoot: z.string().default(process.cwd()),
123
+ /** Project name */
124
+ name: z.string().optional(),
125
+ /** Knowledge paths to index (relative to projectRoot) */
126
+ knowledge: z.array(z.string()).default(["./docs", "./knowledge", "./specs"]),
127
+ /** File patterns to include */
128
+ include: z.array(z.string()).default([
129
+ "**/*.md",
130
+ "**/*.ts",
131
+ "**/*.py",
132
+ "**/*.json"
133
+ ]),
134
+ /** File patterns to exclude */
135
+ exclude: z.array(z.string()).default([
136
+ "**/node_modules/**",
137
+ "**/dist/**",
138
+ "**/.git/**",
139
+ "**/coverage/**"
140
+ ]),
141
+ /** Orchestrator settings */
142
+ orchestrator: OrchestratorConfigSchema.default({}),
143
+ /** Cache settings */
144
+ cache: CacheConfigSchema.default({}),
145
+ /** Path settings */
146
+ paths: PathsConfigSchema.default({}),
147
+ /** LLM settings */
148
+ llm: LLMConfigSchema.default({}),
149
+ /** Workflows (AMP/Ralph registry) */
150
+ workflows: z.array(WorkflowSchema).default([]),
151
+ /** RAG settings */
152
+ rag: RAGConfigSchema.default({}),
153
+ /** Custom agents */
154
+ agents: z.array(z.object({
155
+ id: z.string(),
156
+ name: z.string(),
157
+ role: z.enum(["planner", "executor", "supervisor", "quality", "specialist"]),
158
+ capabilities: z.array(z.string()),
159
+ domains: z.array(z.string())
160
+ })).default([]),
161
+ /** Governance rules */
162
+ governance: z.object({
163
+ /** Actions that require approval */
164
+ requireApproval: z.array(z.string()).default([]),
165
+ /** Resources that are restricted */
166
+ restricted: z.array(z.string()).default([]),
167
+ /** Audit level */
168
+ auditLevel: z.enum(["none", "basic", "full"]).default("basic"),
169
+ /** Governance pillar validators — enable/configure each pillar */
170
+ validators: z.object({
171
+ /** Policy enforcement — evaluate and enforce governance policies */
172
+ policy: z.object({
173
+ enabled: z.boolean().default(true),
174
+ enforcement: z.enum(["advisory", "warn", "block"]).default("warn")
175
+ }).default({}),
176
+ /** Risk assessment — evaluate complexity/impact before execution */
177
+ risk: z.object({
178
+ enabled: z.boolean().default(true),
179
+ blockOnCritical: z.boolean().default(true)
180
+ }).default({}),
181
+ /** Compliance checks — validate against standards (ISO 27001, NDPC, AfCFTA) */
182
+ compliance: z.object({
183
+ enabled: z.boolean().default(true),
184
+ standards: z.array(z.string()).default([])
185
+ }).default({}),
186
+ /** Approval workflows — require human sign-off for high-impact actions */
187
+ approval: z.object({
188
+ enabled: z.boolean().default(true),
189
+ requiredApprovers: z.array(z.string()).default([])
190
+ }).default({}),
191
+ /** Permission gating — ABAC-based resource access control */
192
+ permission: z.object({
193
+ enabled: z.boolean().default(true)
194
+ }).default({}),
195
+ /** Cost tracking — monitor and enforce token/resource budgets */
196
+ cost: z.object({
197
+ enabled: z.boolean().default(true),
198
+ maxBudgetUsd: z.number().optional()
199
+ }).default({}),
200
+ /** Evidence production — generate exportable governance bundles */
201
+ evidence: z.object({
202
+ enabled: z.boolean().default(true),
203
+ autoExport: z.boolean().default(false),
204
+ exportPath: z.string().default(".baseline/evidence")
205
+ }).default({})
206
+ }).default({})
207
+ }).default({})
208
+ });
209
+ var ConfigLoader = class {
210
+ static explorer = cosmiconfig("baseline", {
211
+ searchPlaces: [
212
+ "baseline.config.ts",
213
+ "baseline.config.js",
214
+ "baseline.config.mjs",
215
+ "baseline.config.json",
216
+ ".baselinerc",
217
+ ".baselinerc.json",
218
+ "package.json"
219
+ ]
220
+ });
221
+ /**
222
+ * Load configuration from file.
223
+ */
224
+ static async load(cwd = process.cwd()) {
225
+ const result = await this.explorer.search(cwd);
226
+ if (result?.config) {
227
+ return this.resolve(result.config);
228
+ }
229
+ return this.resolve({});
230
+ }
231
+ /**
232
+ * Load configuration synchronously (for CLI).
233
+ */
234
+ static loadSync(cwd = process.cwd()) {
235
+ const configFiles = [
236
+ "baseline.config.js",
237
+ "baseline.config.json",
238
+ ".baselinerc.json"
239
+ ];
240
+ for (const file of configFiles) {
241
+ const path = join(cwd, file);
242
+ if (existsSync(path)) {
243
+ try {
244
+ const config = __require(path);
245
+ return this.resolve(config.default || config);
246
+ } catch (err) {
247
+ process.stderr.write(`[baseline:config] Failed to load ${file}: ${err.message}
248
+ `);
249
+ continue;
250
+ }
251
+ }
252
+ }
253
+ return this.resolve({});
254
+ }
255
+ /**
256
+ * Resolve and validate configuration.
257
+ */
258
+ static resolve(config) {
259
+ const withDefaults = {
260
+ projectRoot: process.cwd(),
261
+ ...config
262
+ };
263
+ if (withDefaults.paths) {
264
+ withDefaults.paths = {
265
+ data: join(withDefaults.projectRoot, withDefaults.paths.data || ".baseline"),
266
+ index: join(withDefaults.projectRoot, withDefaults.paths.index || ".baseline/index"),
267
+ checkpoints: join(withDefaults.projectRoot, withDefaults.paths.checkpoints || ".baseline/checkpoints")
268
+ };
269
+ }
270
+ return BaselineConfigSchema.parse(withDefaults);
271
+ }
272
+ /**
273
+ * Generate a config file template.
274
+ */
275
+ static generateTemplate(format = "ts") {
276
+ if (format === "json") {
277
+ return JSON.stringify(
278
+ {
279
+ name: "my-project",
280
+ knowledge: ["./docs", "./specs"],
281
+ orchestrator: {
282
+ maxAutonomousComplexity: "complex",
283
+ selfVerificationRequired: true
284
+ },
285
+ llm: {
286
+ provider: "anthropic",
287
+ model: "claude-sonnet-4-20250514"
288
+ },
289
+ workflows: [],
290
+ rag: {
291
+ budget: {
292
+ maxTokens: 1200
293
+ // maxCostUsd: 0.05,
294
+ // costPer1kTokensUsd: 0.003,
295
+ }
296
+ }
297
+ },
298
+ null,
299
+ 2
300
+ );
301
+ }
302
+ const isTS = format === "ts";
303
+ return `${isTS ? "import type { BaselineConfig } from 'baselineos';\n\n" : ""}${isTS ? "const config: BaselineConfig = " : "module.exports = "}{
304
+ /**
305
+ * Project name (optional)
306
+ */
307
+ name: 'my-project',
308
+
309
+ /**
310
+ * Paths to index for knowledge retrieval.
311
+ * BaselineOS will index markdown, code, and other files from these paths.
312
+ */
313
+ knowledge: [
314
+ './docs',
315
+ './specs',
316
+ './knowledge',
317
+ ],
318
+
319
+ /**
320
+ * Orchestrator configuration.
321
+ * Controls autonomous task execution behavior.
322
+ */
323
+ orchestrator: {
324
+ /**
325
+ * Tasks above this complexity require human approval.
326
+ * Options: 'trivial' | 'simple' | 'moderate' | 'complex' | 'epic'
327
+ */
328
+ maxAutonomousComplexity: 'complex',
329
+
330
+ /**
331
+ * Require self-verification at every step.
332
+ */
333
+ selfVerificationRequired: true,
334
+
335
+ /**
336
+ * Confidence threshold below which supervisor review is triggered.
337
+ */
338
+ supervisorReviewThreshold: 0.7,
339
+
340
+ /**
341
+ * Percentage of tasks to send through quality review.
342
+ */
343
+ qualityReviewSampleRate: 0.1,
344
+ },
345
+
346
+ /**
347
+ * LLM configuration.
348
+ */
349
+ llm: {
350
+ provider: 'anthropic',
351
+ model: 'claude-sonnet-4-20250514',
352
+ // apiKey: process.env.ANTHROPIC_API_KEY, // Or set via env
353
+ },
354
+
355
+ /**
356
+ * RAG retrieval budget (optional).
357
+ * Enforces token/cost ceilings during context assembly.
358
+ */
359
+ rag: {
360
+ budget: {
361
+ maxTokens: 1200,
362
+ // maxCostUsd: 0.05,
363
+ // costPer1kTokensUsd: 0.003,
364
+ },
365
+ },
366
+
367
+ /**
368
+ * Custom agents (optional).
369
+ * Add domain-specific executor agents.
370
+ */
371
+ agents: [
372
+ // {
373
+ // id: 'backend-expert',
374
+ // name: 'Backend Developer',
375
+ // role: 'executor',
376
+ // capabilities: ['typescript', 'nodejs', 'postgresql'],
377
+ // domains: ['api', 'database', 'backend'],
378
+ // },
379
+ ],
380
+
381
+ /**
382
+ * Workflows (optional).
383
+ * AMP/Ralph-style workflow registry with budgets.
384
+ */
385
+ workflows: [
386
+ // {
387
+ // id: 'spec-review',
388
+ // name: 'Spec Review',
389
+ // description: 'Review a spec and provide feedback',
390
+ // budget: { maxSteps: 5, maxDurationMs: 600000 },
391
+ // steps: [
392
+ // {
393
+ // id: 'read',
394
+ // title: 'Read spec',
395
+ // description: 'Load the spec and identify key requirements',
396
+ // action: { type: 'llm', operation: 'analyze', parameters: {} },
397
+ // },
398
+ // ],
399
+ // },
400
+ ],
401
+
402
+ /**
403
+ * Governance rules (optional).
404
+ */
405
+ governance: {
406
+ requireApproval: [],
407
+ restricted: [],
408
+ auditLevel: 'basic',
409
+ },
410
+ }${isTS ? ";\n\nexport default config;" : ";"}
411
+ `;
412
+ }
413
+ };
414
+ /**
415
+ * BaselineOS Configuration
416
+ *
417
+ * Projects configure BaselineOS via:
418
+ * 1. baseline.config.ts (recommended)
419
+ * 2. baseline.config.js
420
+ * 3. baseline.config.json
421
+ * 4. package.json "baseline" field
422
+ * 5. Programmatic config
423
+ *
424
+ * @license Apache-2.0
425
+ */
426
+
427
+ export { BaselineConfigSchema, ConfigLoader };
428
+ //# sourceMappingURL=config.js.map
429
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/config.ts"],"names":[],"mappings":"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","file":"config.js","sourcesContent":["/**\n * BaselineOS Configuration\n * \n * Projects configure BaselineOS via:\n * 1. baseline.config.ts (recommended)\n * 2. baseline.config.js\n * 3. baseline.config.json\n * 4. package.json \"baseline\" field\n * 5. Programmatic config\n * \n * @license Apache-2.0\n */\n\nimport { cosmiconfig } from 'cosmiconfig';\nimport { z } from 'zod';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\n\n// ─── Schema ──────────────────────────────────────────────────────────────────\n\nconst OrchestratorConfigSchema = z.object({\n /** Tasks above this complexity require human approval */\n maxAutonomousComplexity: z.enum(['trivial', 'simple', 'moderate', 'complex', 'epic']).default('complex'),\n \n /** Require self-verification at every step */\n selfVerificationRequired: z.boolean().default(true),\n \n /** Confidence threshold for supervisor review (0-1) */\n supervisorReviewThreshold: z.number().min(0).max(1).default(0.7),\n \n /** Percentage of tasks to quality review */\n qualityReviewSampleRate: z.number().min(0).max(1).default(0.1),\n \n /** Default trust score for new agents */\n defaultTrustScore: z.number().min(0).max(100).default(70),\n \n /** Max retry attempts per task */\n defaultMaxAttempts: z.number().min(1).default(3),\n \n /** Max tokens per task */\n maxTokensPerTask: z.number().default(100000),\n \n /** Max concurrent agents */\n maxConcurrentAgents: z.number().default(10),\n\n /** Trust growth rate (asymptotic) */\n trustGrowthRate: z.number().default(0.02),\n\n /** Trust decay rate (proportional) */\n trustDecayRate: z.number().default(0.05),\n});\n\nconst CacheConfigSchema = z.object({\n /** Cache TTL in milliseconds */\n ttl: z.number().default(86400000), // 24 hours\n \n /** Max cache entries */\n maxSize: z.number().default(10000),\n \n /** Similarity threshold for semantic cache hits */\n similarityThreshold: z.number().min(0).max(1).default(0.92),\n});\n\nconst PathsConfigSchema = z.object({\n /** Directory for BaselineOS data */\n data: z.string().default('.baseline'),\n \n /** Directory for knowledge index */\n index: z.string().default('.baseline/index'),\n \n /** Directory for checkpoints */\n checkpoints: z.string().default('.baseline/checkpoints'),\n});\n\nconst LLMConfigSchema = z.object({\n /** LLM provider */\n provider: z.enum(['anthropic', 'openai', 'local']).default('anthropic'),\n \n /** Model to use */\n model: z.string().default('claude-sonnet-4-20250514'),\n \n /** API key (or use env var) */\n apiKey: z.string().optional(),\n \n /** Max tokens per request */\n maxTokens: z.number().default(8000),\n});\n\nconst WorkflowBudgetSchema = z.object({\n maxTokens: z.number().optional(),\n maxCostUsd: z.number().optional(),\n costPer1kTokensUsd: z.number().optional(),\n maxSteps: z.number().optional(),\n maxDurationMs: z.number().optional(),\n maxAttempts: z.number().optional(),\n});\n\nconst WorkflowStepSchema = z.object({\n id: z.string(),\n title: z.string(),\n description: z.string(),\n action: z.object({\n type: z.enum(['llm', 'tool', 'human', 'composite']),\n operation: z.string(),\n parameters: z.record(z.unknown()).default({}),\n timeout: z.number().optional(),\n }),\n verificationCriteria: z.array(z.string()).optional(),\n});\n\nconst WorkflowSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional(),\n steps: z.array(WorkflowStepSchema),\n requiredCapabilities: z.array(z.string()).optional(),\n budget: WorkflowBudgetSchema.optional(),\n});\n\nconst RetrievalBudgetSchema = z.object({\n /** Max tokens for retrieval context */\n maxTokens: z.number().optional(),\n\n /** Max cost in USD for retrieval (requires costPer1kTokensUsd) */\n maxCostUsd: z.number().optional(),\n\n /** Cost per 1k tokens in USD */\n costPer1kTokensUsd: z.number().optional(),\n});\n\nconst RAGConfigSchema = z.object({\n /** Default retrieval budget */\n budget: RetrievalBudgetSchema.default({}),\n /** ChromaDB host for vector search (optional — BM25 works without it) */\n chromaHost: z.string().default('localhost'),\n /** ChromaDB port */\n chromaPort: z.number().default(8000),\n /** OpenAI API key for embeddings (optional — reads OPENAI_API_KEY env var) */\n openaiApiKey: z.string().optional(),\n /** Chunk size in characters for ingestion */\n chunkSize: z.number().default(1500),\n /** Chunk overlap in characters */\n chunkOverlap: z.number().default(200),\n /** Max chunks per collection */\n maxChunksPerCollection: z.number().default(1000),\n /** ABAC role profiles for policy-filtered retrieval */\n roles: z.record(z.object({\n collections: z.array(z.string()).default([]),\n sensitivity: z.enum(['public', 'internal', 'restricted']).default('public'),\n repos: z.array(z.string()).default([]),\n scopes: z.array(z.string()).default([]),\n })).default({}),\n});\n\nexport const BaselineConfigSchema = z.object({\n /** Project root directory */\n projectRoot: z.string().default(process.cwd()),\n \n /** Project name */\n name: z.string().optional(),\n \n /** Knowledge paths to index (relative to projectRoot) */\n knowledge: z.array(z.string()).default(['./docs', './knowledge', './specs']),\n \n /** File patterns to include */\n include: z.array(z.string()).default([\n '**/*.md',\n '**/*.ts',\n '**/*.py',\n '**/*.json',\n ]),\n \n /** File patterns to exclude */\n exclude: z.array(z.string()).default([\n '**/node_modules/**',\n '**/dist/**',\n '**/.git/**',\n '**/coverage/**',\n ]),\n \n /** Orchestrator settings */\n orchestrator: OrchestratorConfigSchema.default({}),\n \n /** Cache settings */\n cache: CacheConfigSchema.default({}),\n \n /** Path settings */\n paths: PathsConfigSchema.default({}),\n \n /** LLM settings */\n llm: LLMConfigSchema.default({}),\n\n /** Workflows (AMP/Ralph registry) */\n workflows: z.array(WorkflowSchema).default([]),\n\n /** RAG settings */\n rag: RAGConfigSchema.default({}),\n \n /** Custom agents */\n agents: z.array(z.object({\n id: z.string(),\n name: z.string(),\n role: z.enum(['planner', 'executor', 'supervisor', 'quality', 'specialist']),\n capabilities: z.array(z.string()),\n domains: z.array(z.string()),\n })).default([]),\n \n /** Governance rules */\n governance: z.object({\n /** Actions that require approval */\n requireApproval: z.array(z.string()).default([]),\n\n /** Resources that are restricted */\n restricted: z.array(z.string()).default([]),\n\n /** Audit level */\n auditLevel: z.enum(['none', 'basic', 'full']).default('basic'),\n\n /** Governance pillar validators — enable/configure each pillar */\n validators: z.object({\n /** Policy enforcement — evaluate and enforce governance policies */\n policy: z.object({\n enabled: z.boolean().default(true),\n enforcement: z.enum(['advisory', 'warn', 'block']).default('warn'),\n }).default({}),\n /** Risk assessment — evaluate complexity/impact before execution */\n risk: z.object({\n enabled: z.boolean().default(true),\n blockOnCritical: z.boolean().default(true),\n }).default({}),\n /** Compliance checks — validate against standards (ISO 27001, NDPC, AfCFTA) */\n compliance: z.object({\n enabled: z.boolean().default(true),\n standards: z.array(z.string()).default([]),\n }).default({}),\n /** Approval workflows — require human sign-off for high-impact actions */\n approval: z.object({\n enabled: z.boolean().default(true),\n requiredApprovers: z.array(z.string()).default([]),\n }).default({}),\n /** Permission gating — ABAC-based resource access control */\n permission: z.object({\n enabled: z.boolean().default(true),\n }).default({}),\n /** Cost tracking — monitor and enforce token/resource budgets */\n cost: z.object({\n enabled: z.boolean().default(true),\n maxBudgetUsd: z.number().optional(),\n }).default({}),\n /** Evidence production — generate exportable governance bundles */\n evidence: z.object({\n enabled: z.boolean().default(true),\n autoExport: z.boolean().default(false),\n exportPath: z.string().default('.baseline/evidence'),\n }).default({}),\n }).default({}),\n }).default({}),\n});\n\nexport type BaselineConfig = z.infer<typeof BaselineConfigSchema>;\nexport type OrchestratorConfig = z.infer<typeof OrchestratorConfigSchema>;\nexport type CacheConfig = z.infer<typeof CacheConfigSchema>;\nexport type LLMConfig = z.infer<typeof LLMConfigSchema>;\nexport type RAGConfig = z.infer<typeof RAGConfigSchema>;\n\n// ─── Config Loader ───────────────────────────────────────────────────────────\n\nexport class ConfigLoader {\n private static explorer = cosmiconfig('baseline', {\n searchPlaces: [\n 'baseline.config.ts',\n 'baseline.config.js',\n 'baseline.config.mjs',\n 'baseline.config.json',\n '.baselinerc',\n '.baselinerc.json',\n 'package.json',\n ],\n });\n\n /**\n * Load configuration from file.\n */\n static async load(cwd: string = process.cwd()): Promise<BaselineConfig> {\n const result = await this.explorer.search(cwd);\n \n if (result?.config) {\n return this.resolve(result.config);\n }\n \n // Return defaults\n return this.resolve({});\n }\n\n /**\n * Load configuration synchronously (for CLI).\n */\n static loadSync(cwd: string = process.cwd()): BaselineConfig {\n // Try common config files\n const configFiles = [\n 'baseline.config.js',\n 'baseline.config.json',\n '.baselinerc.json',\n ];\n\n for (const file of configFiles) {\n const path = join(cwd, file);\n if (existsSync(path)) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const config = require(path);\n return this.resolve(config.default || config);\n } catch (err) {\n process.stderr.write(`[baseline:config] Failed to load ${file}: ${(err as Error).message}\\n`);\n continue;\n }\n }\n }\n\n return this.resolve({});\n }\n\n /**\n * Resolve and validate configuration.\n */\n static resolve(config: Partial<BaselineConfig>): BaselineConfig {\n // Set defaults\n const withDefaults = {\n projectRoot: process.cwd(),\n ...config,\n };\n\n // Resolve relative paths\n if (withDefaults.paths) {\n withDefaults.paths = {\n data: join(withDefaults.projectRoot, withDefaults.paths.data || '.baseline'),\n index: join(withDefaults.projectRoot, withDefaults.paths.index || '.baseline/index'),\n checkpoints: join(withDefaults.projectRoot, withDefaults.paths.checkpoints || '.baseline/checkpoints'),\n };\n }\n\n // Validate\n return BaselineConfigSchema.parse(withDefaults);\n }\n\n /**\n * Generate a config file template.\n */\n static generateTemplate(format: 'ts' | 'js' | 'json' = 'ts'): string {\n if (format === 'json') {\n return JSON.stringify(\n {\n name: 'my-project',\n knowledge: ['./docs', './specs'],\n orchestrator: {\n maxAutonomousComplexity: 'complex',\n selfVerificationRequired: true,\n },\n llm: {\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n },\n workflows: [],\n rag: {\n budget: {\n maxTokens: 1200,\n // maxCostUsd: 0.05,\n // costPer1kTokensUsd: 0.003,\n },\n },\n },\n null,\n 2\n );\n }\n\n const isTS = format === 'ts';\n \n return `${isTS ? \"import type { BaselineConfig } from 'baselineos';\\n\\n\" : ''}${isTS ? 'const config: BaselineConfig = ' : 'module.exports = '}{\n /**\n * Project name (optional)\n */\n name: 'my-project',\n\n /**\n * Paths to index for knowledge retrieval.\n * BaselineOS will index markdown, code, and other files from these paths.\n */\n knowledge: [\n './docs',\n './specs',\n './knowledge',\n ],\n\n /**\n * Orchestrator configuration.\n * Controls autonomous task execution behavior.\n */\n orchestrator: {\n /**\n * Tasks above this complexity require human approval.\n * Options: 'trivial' | 'simple' | 'moderate' | 'complex' | 'epic'\n */\n maxAutonomousComplexity: 'complex',\n\n /**\n * Require self-verification at every step.\n */\n selfVerificationRequired: true,\n\n /**\n * Confidence threshold below which supervisor review is triggered.\n */\n supervisorReviewThreshold: 0.7,\n\n /**\n * Percentage of tasks to send through quality review.\n */\n qualityReviewSampleRate: 0.1,\n },\n\n /**\n * LLM configuration.\n */\n llm: {\n provider: 'anthropic',\n model: 'claude-sonnet-4-20250514',\n // apiKey: process.env.ANTHROPIC_API_KEY, // Or set via env\n },\n\n /**\n * RAG retrieval budget (optional).\n * Enforces token/cost ceilings during context assembly.\n */\n rag: {\n budget: {\n maxTokens: 1200,\n // maxCostUsd: 0.05,\n // costPer1kTokensUsd: 0.003,\n },\n },\n\n /**\n * Custom agents (optional).\n * Add domain-specific executor agents.\n */\n agents: [\n // {\n // id: 'backend-expert',\n // name: 'Backend Developer',\n // role: 'executor',\n // capabilities: ['typescript', 'nodejs', 'postgresql'],\n // domains: ['api', 'database', 'backend'],\n // },\n ],\n\n /**\n * Workflows (optional).\n * AMP/Ralph-style workflow registry with budgets.\n */\n workflows: [\n // {\n // id: 'spec-review',\n // name: 'Spec Review',\n // description: 'Review a spec and provide feedback',\n // budget: { maxSteps: 5, maxDurationMs: 600000 },\n // steps: [\n // {\n // id: 'read',\n // title: 'Read spec',\n // description: 'Load the spec and identify key requirements',\n // action: { type: 'llm', operation: 'analyze', parameters: {} },\n // },\n // ],\n // },\n ],\n\n /**\n * Governance rules (optional).\n */\n governance: {\n requireApproval: [],\n restricted: [],\n auditLevel: 'basic',\n },\n}${isTS ? ';\\n\\nexport default config;' : ';'}\n`;\n }\n}\n"]}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * BaselineOS Knowledge Indexer
3
+ *
4
+ * Indexes project knowledge for RAG retrieval with hierarchical compression.
5
+ *
6
+ * Key Innovation: Pre-computed compressions at 5 levels allow token-optimized
7
+ * context loading. Request `summary` (100 tokens) instead of `full` (10K).
8
+ *
9
+ * @license Apache-2.0
10
+ */
11
+ type ContextLevel = 'oneliner' | 'summary' | 'working' | 'full' | 'expanded';
12
+ type Overlay = 'org' | 'repo' | 'public';
13
+ type Sensitivity = 'public' | 'internal' | 'restricted';
14
+ interface RetrievalBudget {
15
+ /** Max tokens allowed for retrieval context */
16
+ maxTokens?: number;
17
+ /** Max cost in USD (requires costPer1kTokensUsd) */
18
+ maxCostUsd?: number;
19
+ /** Cost per 1k tokens in USD */
20
+ costPer1kTokensUsd?: number;
21
+ }
22
+ interface IndexerConfig {
23
+ projectRoot: string;
24
+ knowledgePaths: string[];
25
+ indexPath: string;
26
+ includePatterns?: string[];
27
+ excludePatterns?: string[];
28
+ repo?: string;
29
+ defaultOverlay?: Overlay;
30
+ defaultSensitivity?: Sensitivity;
31
+ }
32
+ interface SearchResult {
33
+ id: string;
34
+ title: string;
35
+ content: string;
36
+ score: number;
37
+ source: string;
38
+ tokenCount: number;
39
+ type: DocumentType;
40
+ repo?: string;
41
+ overlay?: Overlay;
42
+ sensitivity?: Sensitivity;
43
+ }
44
+ interface Context {
45
+ content: string;
46
+ tokenCount: number;
47
+ source: string;
48
+ level: ContextLevel;
49
+ documents: string[];
50
+ budget?: {
51
+ maxTokens?: number;
52
+ maxCostUsd?: number;
53
+ costPer1kTokensUsd?: number;
54
+ consumedTokens: number;
55
+ consumedCostUsd?: number;
56
+ };
57
+ contract?: RetrievalContract;
58
+ provenance?: Array<{
59
+ id: string;
60
+ source: string;
61
+ repo?: string;
62
+ overlay?: Overlay;
63
+ sensitivity?: Sensitivity;
64
+ hash?: string;
65
+ }>;
66
+ }
67
+ interface RetrievalContract {
68
+ claims: Array<{
69
+ text: string;
70
+ sourceId: string;
71
+ confidence: number;
72
+ }>;
73
+ sources: Context['provenance'];
74
+ confidence: number;
75
+ }
76
+ type DocumentType = 'doc' | 'code' | 'config' | 'spec' | 'api';
77
+ interface IndexedDocument {
78
+ id: string;
79
+ title: string;
80
+ content: string;
81
+ tokenCount: number;
82
+ source: string;
83
+ type: DocumentType;
84
+ hash: string;
85
+ indexedAt: number;
86
+ metadata: Record<string, unknown>;
87
+ repo?: string;
88
+ overlay?: Overlay;
89
+ sensitivity?: Sensitivity;
90
+ scopes?: string[];
91
+ roles?: string[];
92
+ compressions: {
93
+ oneliner: string;
94
+ summary: string;
95
+ working: string;
96
+ };
97
+ }
98
+ interface PolicyFilter {
99
+ repo?: string[];
100
+ overlays?: Overlay[];
101
+ sensitivity?: Sensitivity;
102
+ scopes?: string[];
103
+ roles?: string[];
104
+ }
105
+ declare class KnowledgeIndexer {
106
+ private config;
107
+ private documents;
108
+ private initialized;
109
+ private indexVersion;
110
+ constructor(config?: Partial<IndexerConfig>);
111
+ initialize(): Promise<void>;
112
+ indexAll(): Promise<{
113
+ indexed: number;
114
+ errors: number;
115
+ skipped: number;
116
+ changed: string[];
117
+ removed: string[];
118
+ }>;
119
+ private indexFile;
120
+ clear(): Promise<void>;
121
+ search(query: string, options?: {
122
+ limit?: number;
123
+ types?: DocumentType[];
124
+ policy?: PolicyFilter;
125
+ }): Promise<SearchResult[]>;
126
+ getContext(subject: string, level?: ContextLevel, options?: {
127
+ policy?: PolicyFilter;
128
+ overlayOrder?: Overlay[];
129
+ budget?: RetrievalBudget;
130
+ }): Promise<Context | null>;
131
+ getContextDelta(subject: string, level?: ContextLevel, options?: {
132
+ policy?: PolicyFilter;
133
+ overlayOrder?: Overlay[];
134
+ known?: Array<{
135
+ id: string;
136
+ hash?: string;
137
+ }>;
138
+ budget?: RetrievalBudget;
139
+ }): Promise<Context | null>;
140
+ private buildContextFromResults;
141
+ getDocument(id: string): IndexedDocument | undefined;
142
+ private getMaxTokensForLevel;
143
+ private persist;
144
+ getStats(): {
145
+ documents: number;
146
+ types: number;
147
+ compressions: number;
148
+ byType: Record<string, number>;
149
+ };
150
+ }
151
+
152
+ export { type Context, type ContextLevel, type IndexerConfig, KnowledgeIndexer, type Overlay, type PolicyFilter, type RetrievalBudget, type RetrievalContract, type SearchResult, type Sensitivity };