pi-harness-runtime 1.1.324 → 1.1.326

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 (125) hide show
  1. package/package.json +1 -1
  2. package/packages/a2a-adapter/package.json +1 -1
  3. package/packages/agent-policy/dist/policy-loader.d.ts +8 -1
  4. package/packages/agent-policy/dist/policy-loader.d.ts.map +1 -1
  5. package/packages/agent-policy/dist/policy-loader.js +23 -5
  6. package/packages/agent-policy/dist/policy-loader.js.map +1 -1
  7. package/packages/agent-policy/package.json +1 -1
  8. package/packages/agent-policy/src/policy-loader.ts +28 -7
  9. package/packages/agent-policy/test/policy-retention.test.ts +43 -1
  10. package/packages/agent-policy/test/policy.test.ts +7 -3
  11. package/packages/architecture-generator/package.json +1 -1
  12. package/packages/auth/package.json +1 -1
  13. package/packages/autonomous-refactor/package.json +1 -1
  14. package/packages/autonomous-runtime/package.json +1 -1
  15. package/packages/cache-strategy/package.json +1 -1
  16. package/packages/capability-registry/package.json +1 -1
  17. package/packages/checkpoint/package.json +1 -1
  18. package/packages/cli-plugin-sdk/package.json +1 -1
  19. package/packages/clipboard/package.json +1 -1
  20. package/packages/clipboard-plugin/package.json +1 -1
  21. package/packages/code-generation/package.json +1 -1
  22. package/packages/code-review/package.json +1 -1
  23. package/packages/codex-adapter/package.json +1 -1
  24. package/packages/codex-watcher/package.json +1 -1
  25. package/packages/config-capture/package.json +1 -1
  26. package/packages/context-compiler/package.json +1 -1
  27. package/packages/context-discovery/package.json +1 -1
  28. package/packages/context-manager/package.json +1 -1
  29. package/packages/cookie-sanitizer/package.json +1 -1
  30. package/packages/cost-optimizer/package.json +1 -1
  31. package/packages/dependency-analyzer/package.json +1 -1
  32. package/packages/django-plugin/package.json +1 -1
  33. package/packages/doc-generator/package.json +1 -1
  34. package/packages/durable-review/package.json +1 -1
  35. package/packages/e2e-tester/package.json +1 -1
  36. package/packages/evaluation-engine/package.json +1 -1
  37. package/packages/evaluation-runner/package.json +1 -1
  38. package/packages/event-bus/package.json +1 -1
  39. package/packages/event-store/package.json +1 -1
  40. package/packages/experience-replay/package.json +1 -1
  41. package/packages/feedback-collector/package.json +1 -1
  42. package/packages/file-copy-helper/package.json +1 -1
  43. package/packages/framework-detector/package.json +1 -1
  44. package/packages/framework-plugin-sdk/package.json +1 -1
  45. package/packages/frappe-plugin/package.json +1 -1
  46. package/packages/generic-web-plugin/package.json +1 -1
  47. package/packages/health-monitor/package.json +1 -1
  48. package/packages/intent-analyzer/package.json +1 -1
  49. package/packages/jev-judge/package.json +1 -1
  50. package/packages/knowledge-graph/package.json +1 -1
  51. package/packages/knowledge-retrieval/package.json +1 -1
  52. package/packages/laravel-plugin/package.json +1 -1
  53. package/packages/learning-engine/package.json +1 -1
  54. package/packages/mcp-adapter/package.json +1 -1
  55. package/packages/memory-engine/package.json +1 -1
  56. package/packages/milestone-manager/package.json +1 -1
  57. package/packages/model-registry/package.json +1 -1
  58. package/packages/nextjs-plugin/package.json +1 -1
  59. package/packages/notification/package.json +1 -1
  60. package/packages/observability/package.json +1 -1
  61. package/packages/okf-indexer/package.json +1 -1
  62. package/packages/paperclip-integration/package.json +1 -1
  63. package/packages/performance-optimizer/package.json +1 -1
  64. package/packages/privilege-broker/package.json +1 -1
  65. package/packages/project-analyzer/package.json +1 -1
  66. package/packages/project-bootstrap/package.json +1 -1
  67. package/packages/projection-engine/package.json +1 -1
  68. package/packages/prompt-compiler/package.json +1 -1
  69. package/packages/prompt-versioning/package.json +1 -1
  70. package/packages/provider-adapter-sdk/package.json +1 -1
  71. package/packages/provider-router/package.json +1 -1
  72. package/packages/provider-selector/package.json +1 -1
  73. package/packages/providers/package.json +1 -1
  74. package/packages/qdrant-skills/package.json +1 -1
  75. package/packages/quota-manager/package.json +1 -1
  76. package/packages/rate-limiter/package.json +1 -1
  77. package/packages/react-vite-plugin/package.json +1 -1
  78. package/packages/release-manager/package.json +1 -1
  79. package/packages/requirement-compiler/package.json +1 -1
  80. package/packages/runtime/package.json +1 -1
  81. package/packages/scheduler/package.json +1 -1
  82. package/packages/scheduler-adapter/package.json +1 -1
  83. package/packages/session/package.json +1 -1
  84. package/packages/session-api/package.json +1 -1
  85. package/packages/session-export/package.json +1 -1
  86. package/packages/shared-context/package.json +1 -1
  87. package/packages/skill-mcp-client/package.json +1 -1
  88. package/packages/skill-registry/package.json +1 -1
  89. package/packages/skills/package.json +1 -1
  90. package/packages/sprint-planner/package.json +1 -1
  91. package/packages/subscription-engine/package.json +1 -1
  92. package/packages/task-compiler/package.json +1 -1
  93. package/packages/telegram/package.json +1 -1
  94. package/packages/tencentdb-memory/package.json +1 -1
  95. package/packages/tencentdb-sync/package.json +1 -1
  96. package/packages/test-data-generator/package.json +1 -1
  97. package/packages/test-generator/package.json +1 -1
  98. package/packages/todo-bd-sync/package.json +1 -1
  99. package/packages/token-estimation/package.json +1 -1
  100. package/packages/token-optimizer/package.json +1 -1
  101. package/packages/trajectory/package.json +1 -1
  102. package/packages/tui/package.json +1 -1
  103. package/packages/types/package.json +1 -1
  104. package/packages/webmcp-tester/package.json +1 -1
  105. package/packages/wiki/dist/index.d.ts +132 -0
  106. package/packages/wiki/dist/index.d.ts.map +1 -0
  107. package/packages/wiki/dist/index.js +448 -0
  108. package/packages/wiki/dist/index.js.map +1 -0
  109. package/packages/wiki/dist/storage.d.ts +142 -0
  110. package/packages/wiki/dist/storage.d.ts.map +1 -0
  111. package/packages/wiki/dist/storage.js +603 -0
  112. package/packages/wiki/dist/storage.js.map +1 -0
  113. package/packages/wiki/dist/types.d.ts +189 -0
  114. package/packages/wiki/dist/types.d.ts.map +1 -0
  115. package/packages/wiki/dist/types.js +30 -0
  116. package/packages/wiki/dist/types.js.map +1 -0
  117. package/packages/wiki/package.json +22 -0
  118. package/packages/wiki/src/index.ts +578 -0
  119. package/packages/wiki/src/storage.ts +696 -0
  120. package/packages/wiki/src/types.ts +263 -0
  121. package/packages/wiki/test/basic.test.ts +242 -0
  122. package/packages/workflow-events/package.json +1 -1
  123. package/packages/workspace-scanner/package.json +1 -1
  124. package/packages/worktree/package.json +1 -1
  125. package/packages/write-review/package.json +1 -1
@@ -0,0 +1,603 @@
1
+ /**
2
+ * Wiki Storage - File-based persistence for wiki pages
3
+ *
4
+ * Handles atomic writes, transactions, and consistency.
5
+ */
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, renameSync, readdirSync, } from "node:fs";
7
+ import { join } from "node:path";
8
+ import { createHash, randomUUID } from "node:crypto";
9
+ // ============================================================================
10
+ // Utilities
11
+ // ============================================================================
12
+ /**
13
+ * Compute SHA-256 hash of content
14
+ */
15
+ export function computeHash(content) {
16
+ return createHash("sha256").update(content, "utf8").digest("hex");
17
+ }
18
+ /**
19
+ * Get current ISO timestamp
20
+ */
21
+ export function now() {
22
+ return new Date().toISOString();
23
+ }
24
+ /**
25
+ * Parse YAML frontmatter from markdown content
26
+ */
27
+ export function parseFrontmatter(content) {
28
+ const match = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
29
+ if (!match) {
30
+ return { frontmatter: null, body: content, raw: "" };
31
+ }
32
+ const [, yamlStr, body] = match;
33
+ const frontmatter = parseYaml(yamlStr);
34
+ return {
35
+ frontmatter: frontmatter,
36
+ body: body.trim(),
37
+ raw: yamlStr,
38
+ };
39
+ }
40
+ /**
41
+ * Simple YAML parser for frontmatter
42
+ * Handles: strings, booleans, numbers, arrays, nested objects
43
+ */
44
+ function parseYaml(yamlStr) {
45
+ const result = {};
46
+ const lines = yamlStr.split("\n");
47
+ let currentKey = "";
48
+ let currentIndent = 0;
49
+ const stack = [];
50
+ for (const line of lines) {
51
+ const trimmed = line.trim();
52
+ if (!trimmed || trimmed.startsWith("#"))
53
+ continue;
54
+ const indent = line.search(/\S/);
55
+ const colonIdx = trimmed.indexOf(":");
56
+ if (colonIdx === -1)
57
+ continue;
58
+ const key = trimmed.slice(0, colonIdx).trim();
59
+ let value = trimmed.slice(colonIdx + 1).trim();
60
+ // Pop stack while indent decreases
61
+ while (stack.length > 0 && indent <= stack[stack.length - 1].indent) {
62
+ stack.pop();
63
+ }
64
+ const parent = stack.length > 0 ? stack[stack.length - 1].obj : result;
65
+ // Parse value
66
+ if (value === "" || value === "null" || value === "~") {
67
+ value = null;
68
+ }
69
+ else if (value === "true") {
70
+ value = true;
71
+ }
72
+ else if (value === "false") {
73
+ value = false;
74
+ }
75
+ else if (/^-?\d+(\.\d+)?$/.test(value)) {
76
+ value = parseFloat(value);
77
+ }
78
+ else if (value.startsWith("[") && value.endsWith("]")) {
79
+ // Array
80
+ const arrContent = value.slice(1, -1);
81
+ value = arrContent
82
+ ? arrContent.split(",").map((s) => s.trim().replace(/^["']|["']$/g, ""))
83
+ : [];
84
+ }
85
+ else {
86
+ // String - remove quotes
87
+ value = value.replace(/^["']|["']$/g, "");
88
+ }
89
+ parent[key] = value;
90
+ currentKey = key;
91
+ currentIndent = indent;
92
+ }
93
+ return result;
94
+ }
95
+ /**
96
+ * Serialize frontmatter to YAML string
97
+ */
98
+ export function serializeFrontmatter(frontmatter) {
99
+ const lines = [];
100
+ for (const [key, value] of Object.entries(frontmatter)) {
101
+ if (value === undefined || value === null)
102
+ continue;
103
+ if (Array.isArray(value)) {
104
+ if (value.length === 0) {
105
+ lines.push(`${key}: []`);
106
+ }
107
+ else if (value.every((v) => typeof v === "object")) {
108
+ // Array of objects
109
+ lines.push(`${key}:`);
110
+ for (const item of value) {
111
+ lines.push(` - ${JSON.stringify(item)}`);
112
+ }
113
+ }
114
+ else {
115
+ lines.push(`${key}: [${value.join(", ")}]`);
116
+ }
117
+ }
118
+ else if (typeof value === "object") {
119
+ // Nested object
120
+ lines.push(`${key}:`);
121
+ for (const [k, v] of Object.entries(value)) {
122
+ lines.push(` ${k}: ${JSON.stringify(v)}`);
123
+ }
124
+ }
125
+ else if (typeof value === "boolean" || typeof value === "number") {
126
+ lines.push(`${key}: ${value}`);
127
+ }
128
+ else {
129
+ // String - quote if needed
130
+ const str = String(value);
131
+ if (str.includes(":") || str.includes("#") || str.includes("\n")) {
132
+ lines.push(`${key}: "${str.replace(/"/g, '\\"')}"`);
133
+ }
134
+ else {
135
+ lines.push(`${key}: ${str}`);
136
+ }
137
+ }
138
+ }
139
+ return lines.join("\n");
140
+ }
141
+ /**
142
+ * Combine frontmatter and body into full page content
143
+ */
144
+ export function combinePage(frontmatter, body) {
145
+ return `---\n${serializeFrontmatter(frontmatter)}\n---\n\n${body}`;
146
+ }
147
+ // ============================================================================
148
+ // Storage Implementation
149
+ // ============================================================================
150
+ /**
151
+ * Wiki storage manager
152
+ */
153
+ export class WikiStorage {
154
+ config;
155
+ index = new Map();
156
+ operations = [];
157
+ stagedChanges = new Map();
158
+ dirty = false;
159
+ constructor(config) {
160
+ this.config = config;
161
+ this.ensureStructure();
162
+ this.loadIndex();
163
+ this.loadOperations();
164
+ this.loadStaged();
165
+ }
166
+ /**
167
+ * Get wiki configuration
168
+ */
169
+ getConfig() {
170
+ return this.config;
171
+ }
172
+ /**
173
+ * Initialize wiki structure
174
+ */
175
+ initialize() {
176
+ const existing = existsSync(this.config.wikiRoot);
177
+ if (!existing) {
178
+ mkdirSync(this.config.wikiRoot, { recursive: true });
179
+ }
180
+ // Create subdirectories
181
+ for (const dir of [
182
+ this.config.rawDir,
183
+ this.config.knowledgeDir,
184
+ this.config.harnessDir,
185
+ ]) {
186
+ if (!existsSync(dir)) {
187
+ mkdirSync(dir, { recursive: true });
188
+ }
189
+ }
190
+ // Create schema file if not exists
191
+ if (!existsSync(this.config.schemaFile)) {
192
+ writeFileSync(this.config.schemaFile, `# Wiki Maintenance Conventions
193
+
194
+ ## Page Structure
195
+
196
+ Every wiki page must have:
197
+
198
+ \`\`\`yaml
199
+ ---
200
+ id: <uuid>
201
+ title: <human-readable title>
202
+ kind: <concept|decision|incident|plan|verification|reference>
203
+ projectId: <canonical project identifier>
204
+ status: <proposed|implemented|verified|stale|superseded>
205
+ createdAt: <ISO timestamp>
206
+ updatedAt: <ISO timestamp>
207
+ sources: []
208
+ relatedPages: []
209
+ ---
210
+ \`\`\`
211
+
212
+ ## Status Lifecycle
213
+
214
+ - \`proposed\`: Awaiting synthesis/verification
215
+ - \`implemented\`: Applied but not yet verified
216
+ - \`verified\`: Test/inspection evidence recorded
217
+ - \`stale\`: Source changed, needs review
218
+ - \`superseded\`: Replaced by another page
219
+
220
+ ## Source References
221
+
222
+ Always cite immutable snapshots, never live files:
223
+
224
+ \`\`\`yaml
225
+ sources:
226
+ - sourceId: <snapshot-id>
227
+ path: <original path>
228
+ contentHash: <sha256>
229
+ capturedAt: <ISO timestamp>
230
+ redacted: <true|false>
231
+ \`\`\`
232
+
233
+ ## Verification
234
+
235
+ A page is \`verified\` only with recorded evidence:
236
+
237
+ \`\`\`yaml
238
+ verification:
239
+ evidence: <test name or inspection reference>
240
+ scope: <what was verified>
241
+ version: <code version>
242
+ \`\`\`
243
+ `, "utf8");
244
+ }
245
+ return {
246
+ created: !existing,
247
+ existing,
248
+ config: this.config,
249
+ };
250
+ }
251
+ /**
252
+ * Ensure directory structure exists
253
+ */
254
+ ensureStructure() {
255
+ if (!existsSync(this.config.wikiRoot)) {
256
+ mkdirSync(this.config.wikiRoot, { recursive: true });
257
+ }
258
+ }
259
+ /**
260
+ * Load page index from disk
261
+ */
262
+ loadIndex() {
263
+ this.index.clear();
264
+ if (!existsSync(this.config.indexFile))
265
+ return;
266
+ try {
267
+ const content = readFileSync(this.config.indexFile, "utf8");
268
+ const entries = JSON.parse(content);
269
+ for (const entry of entries) {
270
+ this.index.set(entry.id, entry);
271
+ }
272
+ }
273
+ catch {
274
+ // Invalid index, rebuild
275
+ }
276
+ }
277
+ /**
278
+ * Save page index to disk (atomic)
279
+ */
280
+ saveIndex() {
281
+ const entries = Array.from(this.index.values());
282
+ const content = JSON.stringify(entries, null, 2);
283
+ const tmpFile = this.config.indexFile + ".tmp";
284
+ writeFileSync(tmpFile, content, "utf8");
285
+ renameSync(tmpFile, this.config.indexFile);
286
+ this.dirty = false;
287
+ }
288
+ /**
289
+ * Load operations from log
290
+ */
291
+ loadOperations() {
292
+ this.operations = [];
293
+ if (!existsSync(this.config.logFile))
294
+ return;
295
+ try {
296
+ const content = readFileSync(this.config.logFile, "utf8");
297
+ const lines = content.split("\n").filter((l) => l.trim());
298
+ for (const line of lines) {
299
+ try {
300
+ this.operations.push(JSON.parse(line));
301
+ }
302
+ catch {
303
+ // Skip invalid lines
304
+ }
305
+ }
306
+ }
307
+ catch {
308
+ // No log yet
309
+ }
310
+ }
311
+ /**
312
+ * Append operation to log
313
+ */
314
+ appendOperation(op) {
315
+ const line = JSON.stringify(op) + "\n";
316
+ writeFileSync(this.config.logFile, line, { flag: "a", encoding: "utf8" });
317
+ this.operations.push(op);
318
+ }
319
+ /**
320
+ * Load staged changes
321
+ */
322
+ loadStaged() {
323
+ this.stagedChanges.clear();
324
+ const stagedFile = join(this.config.harnessDir, "staged.json");
325
+ if (!existsSync(stagedFile))
326
+ return;
327
+ try {
328
+ const content = readFileSync(stagedFile, "utf8");
329
+ const changes = JSON.parse(content);
330
+ for (const change of changes) {
331
+ this.stagedChanges.set(change.pageId, change);
332
+ }
333
+ }
334
+ catch {
335
+ // Invalid staged file
336
+ }
337
+ }
338
+ /**
339
+ * Save staged changes (atomic)
340
+ */
341
+ saveStaged() {
342
+ const changes = Array.from(this.stagedChanges.values());
343
+ const stagedFile = join(this.config.harnessDir, "staged.json");
344
+ const content = JSON.stringify(changes, null, 2);
345
+ const tmpFile = stagedFile + ".tmp";
346
+ writeFileSync(tmpFile, content, "utf8");
347
+ renameSync(tmpFile, stagedFile);
348
+ }
349
+ // ========================================================================
350
+ // Source Snapshot Operations
351
+ // ========================================================================
352
+ /**
353
+ * Create immutable source snapshot
354
+ */
355
+ createSnapshot(originalPath, content, operationId) {
356
+ const id = `snap-${randomUUID().slice(0, 8)}`;
357
+ const snapshot = {
358
+ id,
359
+ originalPath,
360
+ contentHash: computeHash(content),
361
+ capturedAt: now(),
362
+ content,
363
+ redacted: false,
364
+ operationId,
365
+ };
366
+ // Save snapshot file
367
+ const snapFile = join(this.config.rawDir, `${id}.json`);
368
+ writeFileSync(snapFile, JSON.stringify(snapshot, null, 2), "utf8");
369
+ return snapshot;
370
+ }
371
+ /**
372
+ * Get source snapshot by ID
373
+ */
374
+ getSnapshot(snapshotId) {
375
+ const snapFile = join(this.config.rawDir, `${snapshotId}.json`);
376
+ if (!existsSync(snapFile))
377
+ return null;
378
+ try {
379
+ const content = readFileSync(snapFile, "utf8");
380
+ return JSON.parse(content);
381
+ }
382
+ catch {
383
+ return null;
384
+ }
385
+ }
386
+ // ========================================================================
387
+ // Page Operations
388
+ // ========================================================================
389
+ /**
390
+ * Save a wiki page
391
+ */
392
+ savePage(page) {
393
+ const content = combinePage(page.frontmatter, page.body);
394
+ const pageFile = join(this.config.knowledgeDir, `${page.frontmatter.id}.md`);
395
+ const tmpFile = pageFile + ".tmp";
396
+ writeFileSync(tmpFile, content, "utf8");
397
+ renameSync(tmpFile, pageFile);
398
+ // Update index
399
+ const entry = {
400
+ id: page.frontmatter.id,
401
+ title: page.frontmatter.title,
402
+ kind: page.frontmatter.kind,
403
+ status: page.frontmatter.status,
404
+ tags: [], // Extracted from body
405
+ summary: page.body.slice(0, 200),
406
+ updatedAt: page.frontmatter.updatedAt,
407
+ codeVersion: page.frontmatter.codeVersion,
408
+ };
409
+ this.index.set(entry.id, entry);
410
+ this.saveIndex();
411
+ this.dirty = true;
412
+ }
413
+ /**
414
+ * Load a wiki page
415
+ */
416
+ loadPage(pageId) {
417
+ const pageFile = join(this.config.knowledgeDir, `${pageId}.md`);
418
+ if (!existsSync(pageFile))
419
+ return null;
420
+ const content = readFileSync(pageFile, "utf8");
421
+ const { frontmatter, body, raw } = parseFrontmatter(content);
422
+ if (!frontmatter)
423
+ return null;
424
+ return { frontmatter, body, rawFrontmatter: raw };
425
+ }
426
+ /**
427
+ * Delete a wiki page
428
+ */
429
+ deletePage(pageId) {
430
+ const pageFile = join(this.config.knowledgeDir, `${pageId}.md`);
431
+ if (existsSync(pageFile)) {
432
+ unlinkSync(pageFile);
433
+ }
434
+ this.index.delete(pageId);
435
+ this.saveIndex();
436
+ this.stagedChanges.delete(pageId);
437
+ this.saveStaged();
438
+ }
439
+ /**
440
+ * Get all pages
441
+ */
442
+ getAllPages() {
443
+ const pages = [];
444
+ if (!existsSync(this.config.knowledgeDir))
445
+ return pages;
446
+ const files = readdirSync(this.config.knowledgeDir);
447
+ for (const file of files) {
448
+ if (!file.endsWith(".md"))
449
+ continue;
450
+ const pageId = file.replace(".md", "");
451
+ const page = this.loadPage(pageId);
452
+ if (page)
453
+ pages.push(page);
454
+ }
455
+ return pages;
456
+ }
457
+ // ========================================================================
458
+ // Staged Changes Operations
459
+ // ========================================================================
460
+ /**
461
+ * Stage a change for later application
462
+ */
463
+ stageChange(change) {
464
+ this.stagedChanges.set(change.pageId, change);
465
+ this.saveStaged();
466
+ }
467
+ /**
468
+ * Get staged change for a page
469
+ */
470
+ getStagedChange(pageId) {
471
+ return this.stagedChanges.get(pageId);
472
+ }
473
+ /**
474
+ * Clear staged change
475
+ */
476
+ clearStagedChange(pageId) {
477
+ this.stagedChanges.delete(pageId);
478
+ this.saveStaged();
479
+ }
480
+ /**
481
+ * Get all staged changes
482
+ */
483
+ getAllStagedChanges() {
484
+ return Array.from(this.stagedChanges.values());
485
+ }
486
+ // ========================================================================
487
+ // Operation Logging
488
+ // ========================================================================
489
+ /**
490
+ * Log an operation
491
+ */
492
+ logOperation(type, details, requestId) {
493
+ const op = {
494
+ id: `op-${randomUUID().slice(0, 8)}`,
495
+ type,
496
+ status: "pending",
497
+ startedAt: now(),
498
+ requestId,
499
+ details,
500
+ };
501
+ this.appendOperation(op);
502
+ return op;
503
+ }
504
+ /**
505
+ * Update operation status
506
+ */
507
+ completeOperation(opId, status, error) {
508
+ const opIndex = this.operations.findIndex((o) => o.id === opId);
509
+ if (opIndex === -1)
510
+ return;
511
+ this.operations[opIndex] = {
512
+ ...this.operations[opIndex],
513
+ status,
514
+ completedAt: now(),
515
+ error,
516
+ };
517
+ // Rewrite log with updated operation
518
+ const tmpFile = this.config.logFile + ".tmp";
519
+ const content = this.operations.map((o) => JSON.stringify(o)).join("\n") + "\n";
520
+ writeFileSync(tmpFile, content, "utf8");
521
+ renameSync(tmpFile, this.config.logFile);
522
+ }
523
+ /**
524
+ * Get recent operations
525
+ */
526
+ getRecentOperations(limit = 50) {
527
+ return this.operations.slice(-limit);
528
+ }
529
+ // ========================================================================
530
+ // Search
531
+ // ========================================================================
532
+ /**
533
+ * Search wiki pages
534
+ */
535
+ search(query, filters, limit = 10) {
536
+ const queryLower = query.toLowerCase();
537
+ const results = [];
538
+ for (const [id, entry] of this.index) {
539
+ // Apply filters
540
+ if (filters?.kinds?.length && !filters.kinds.includes(entry.kind))
541
+ continue;
542
+ if (filters?.statuses?.length && !filters.statuses.includes(entry.status))
543
+ continue;
544
+ if (filters?.updatedAfter && entry.updatedAt < filters.updatedAfter)
545
+ continue;
546
+ if (filters?.updatedBefore && entry.updatedAt > filters.updatedBefore)
547
+ continue;
548
+ // Calculate relevance
549
+ let relevance = 0;
550
+ const matchedOn = [];
551
+ if (entry.title.toLowerCase().includes(queryLower)) {
552
+ relevance += 0.5;
553
+ matchedOn.push("title");
554
+ }
555
+ if (entry.summary.toLowerCase().includes(queryLower)) {
556
+ relevance += 0.3;
557
+ matchedOn.push("body");
558
+ }
559
+ if (entry.tags.some((t) => t.toLowerCase().includes(queryLower))) {
560
+ relevance += 0.2;
561
+ matchedOn.push("tags");
562
+ }
563
+ if (relevance > 0) {
564
+ results.push({
565
+ page: entry,
566
+ relevance,
567
+ matchedOn,
568
+ snippets: [entry.summary],
569
+ });
570
+ }
571
+ }
572
+ // Sort by relevance and limit
573
+ results.sort((a, b) => b.relevance - a.relevance);
574
+ return results.slice(0, limit);
575
+ }
576
+ /**
577
+ * Get page index
578
+ */
579
+ getIndex() {
580
+ return Array.from(this.index.values());
581
+ }
582
+ }
583
+ // ============================================================================
584
+ // Factory
585
+ // ============================================================================
586
+ /**
587
+ * Create wiki storage for a workspace
588
+ */
589
+ export function createWikiStorage(workspaceRoot, projectId) {
590
+ const wikiRoot = join(workspaceRoot, "wiki");
591
+ const config = {
592
+ wikiRoot,
593
+ rawDir: join(wikiRoot, "raw"),
594
+ knowledgeDir: join(wikiRoot, "knowledge"),
595
+ harnessDir: join(wikiRoot, ".harness"),
596
+ indexFile: join(wikiRoot, ".harness", "index.json"),
597
+ logFile: join(wikiRoot, ".harness", "log.jsonl"),
598
+ schemaFile: join(wikiRoot, "SCHEMA.md"),
599
+ projectId,
600
+ };
601
+ return new WikiStorage(config);
602
+ }
603
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}