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,132 @@
1
+ /**
2
+ * Wiki Package - Main API
3
+ *
4
+ * Implements LLM Wiki integration per wiki/llm-wiki-integration-minimax-plan.md
5
+ */
6
+ import { WikiStorage } from "./storage.js";
7
+ import type { WikiConfig, WikiPage, WikiPageFrontmatter, SourceSnapshot, WikiOperation, WikiSearchFilters, WikiSearchResult, LintFinding, StagedChange, WikiInitResult, PageStatus, PageKind } from "./types.js";
8
+ /**
9
+ * Check if wiki feature is enabled
10
+ */
11
+ export declare function isWikiEnabled(): boolean;
12
+ /**
13
+ * Wiki manager - main API for wiki operations
14
+ */
15
+ export declare class WikiManager {
16
+ private storage;
17
+ private config;
18
+ constructor(storage: WikiStorage);
19
+ /**
20
+ * Get wiki configuration
21
+ */
22
+ getConfig(): WikiConfig;
23
+ /**
24
+ * Initialize wiki structure
25
+ */
26
+ initialize(): WikiInitResult;
27
+ /**
28
+ * Check if wiki is initialized
29
+ */
30
+ isInitialized(): boolean;
31
+ /**
32
+ * Ingest a source file and create snapshot
33
+ */
34
+ ingestSource(sourcePath: string, requestId?: string): {
35
+ snapshot: SourceSnapshot;
36
+ operation: WikiOperation;
37
+ };
38
+ /**
39
+ * Get source snapshot
40
+ */
41
+ getSnapshot(snapshotId: string): SourceSnapshot | null;
42
+ /**
43
+ * Create a new wiki page
44
+ */
45
+ createPage(params: {
46
+ title: string;
47
+ kind: PageKind;
48
+ body: string;
49
+ sources?: SourceSnapshot[];
50
+ relatedPages?: string[];
51
+ codeVersion?: string;
52
+ }): WikiPage;
53
+ /**
54
+ * Update an existing page
55
+ */
56
+ updatePage(pageId: string, updates: Partial<{
57
+ title: string;
58
+ status: PageStatus;
59
+ body: string;
60
+ sources: SourceSnapshot[];
61
+ relatedPages: string[];
62
+ codeVersion: string;
63
+ verification: WikiPageFrontmatter["verification"];
64
+ }>): WikiPage;
65
+ /**
66
+ * Load a wiki page
67
+ */
68
+ loadPage(pageId: string): WikiPage | null;
69
+ /**
70
+ * Delete a wiki page
71
+ */
72
+ deletePage(pageId: string): void;
73
+ /**
74
+ * Get all pages
75
+ */
76
+ getAllPages(): WikiPage[];
77
+ /**
78
+ * Search wiki pages
79
+ */
80
+ search(query: string, filters?: WikiSearchFilters, limit?: number): WikiSearchResult[];
81
+ /**
82
+ * Get page index
83
+ */
84
+ getIndex(): import("./types.js").PageIndexEntry[];
85
+ /**
86
+ * Stage a change for later application
87
+ */
88
+ stageChange(pageId: string, expectedRevision: string, newContent: string): StagedChange;
89
+ /**
90
+ * Get staged change for a page
91
+ */
92
+ getStagedChange(pageId: string): StagedChange | undefined;
93
+ /**
94
+ * Clear staged change
95
+ */
96
+ clearStagedChange(pageId: string): void;
97
+ /**
98
+ * Apply staged change with conflict detection
99
+ */
100
+ applyChange(pageId: string, requestId?: string): WikiPage;
101
+ /**
102
+ * Run lint checks on wiki
103
+ */
104
+ lint(scope?: "all" | "pages" | "links" | "freshness"): LintFinding[];
105
+ /**
106
+ * Lint page structure
107
+ */
108
+ private lintPages;
109
+ /**
110
+ * Lint link validity
111
+ */
112
+ private lintLinks;
113
+ /**
114
+ * Lint freshness
115
+ */
116
+ private lintFreshness;
117
+ /**
118
+ * Get recent operations
119
+ */
120
+ getRecentOperations(limit?: number): WikiOperation[];
121
+ }
122
+ /**
123
+ * Create wiki manager for a workspace
124
+ */
125
+ export declare function createWikiManager(workspaceRoot: string, projectId: string): WikiManager;
126
+ export { WikiStorage, createWikiStorage } from "./storage.js";
127
+ /**
128
+ * Check if wiki exists in workspace
129
+ */
130
+ export declare function wikiExists(workspaceRoot: string): boolean;
131
+ export * from "./types.js";
132
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,448 @@
1
+ /**
2
+ * Wiki Package - Main API
3
+ *
4
+ * Implements LLM Wiki integration per wiki/llm-wiki-integration-minimax-plan.md
5
+ */
6
+ import { existsSync, readFileSync } from "node:fs";
7
+ import { join, resolve } from "node:path";
8
+ import { randomUUID } from "node:crypto";
9
+ import { createWikiStorage, computeHash, now, parseFrontmatter, } from "./storage.js";
10
+ import { toSourceRef } from "./types.js";
11
+ // ============================================================================
12
+ // Feature Flag
13
+ // ============================================================================
14
+ /**
15
+ * Check if wiki feature is enabled
16
+ */
17
+ export function isWikiEnabled() {
18
+ return process.env.HARNESS_KNOWLEDGE_WIKI === "1";
19
+ }
20
+ /**
21
+ * Require wiki to be enabled
22
+ */
23
+ function requireWiki() {
24
+ if (!isWikiEnabled()) {
25
+ throw new Error("Wiki feature is disabled. Set HARNESS_KNOWLEDGE_WIKI=1 to enable.");
26
+ }
27
+ }
28
+ // ============================================================================
29
+ // Wiki Manager
30
+ // ============================================================================
31
+ /**
32
+ * Wiki manager - main API for wiki operations
33
+ */
34
+ export class WikiManager {
35
+ storage;
36
+ config;
37
+ constructor(storage) {
38
+ this.storage = storage;
39
+ this.config = storage.getConfig();
40
+ }
41
+ /**
42
+ * Get wiki configuration
43
+ */
44
+ getConfig() {
45
+ return this.config;
46
+ }
47
+ // ========================================================================
48
+ // Initialization
49
+ // ========================================================================
50
+ /**
51
+ * Initialize wiki structure
52
+ */
53
+ initialize() {
54
+ requireWiki();
55
+ return this.storage.initialize();
56
+ }
57
+ /**
58
+ * Check if wiki is initialized
59
+ */
60
+ isInitialized() {
61
+ return existsSync(this.config.knowledgeDir);
62
+ }
63
+ // ========================================================================
64
+ // Source Ingestion
65
+ // ========================================================================
66
+ /**
67
+ * Ingest a source file and create snapshot
68
+ */
69
+ ingestSource(sourcePath, requestId) {
70
+ requireWiki();
71
+ // Validate source path
72
+ const resolvedPath = resolve(sourcePath);
73
+ if (!existsSync(resolvedPath)) {
74
+ throw new Error(`Source file not found: ${sourcePath}`);
75
+ }
76
+ // Read content
77
+ const content = readFileSync(resolvedPath, "utf8");
78
+ // Log operation
79
+ const operation = this.storage.logOperation("ingest", { sourcePath }, requestId);
80
+ try {
81
+ // Create snapshot
82
+ const snapshot = this.storage.createSnapshot(resolvedPath, content, operation.id);
83
+ // Complete operation
84
+ this.storage.completeOperation(operation.id, "success");
85
+ return { snapshot, operation };
86
+ }
87
+ catch (err) {
88
+ const error = err instanceof Error ? err.message : String(err);
89
+ this.storage.completeOperation(operation.id, "failed", error);
90
+ throw err;
91
+ }
92
+ }
93
+ /**
94
+ * Get source snapshot
95
+ */
96
+ getSnapshot(snapshotId) {
97
+ requireWiki();
98
+ return this.storage.getSnapshot(snapshotId);
99
+ }
100
+ // ========================================================================
101
+ // Page Operations
102
+ // ========================================================================
103
+ /**
104
+ * Create a new wiki page
105
+ */
106
+ createPage(params) {
107
+ requireWiki();
108
+ const id = `page-${randomUUID().slice(0, 8)}`;
109
+ const timestamp = now();
110
+ const frontmatter = {
111
+ id,
112
+ title: params.title,
113
+ kind: params.kind,
114
+ projectId: this.config.projectId,
115
+ status: "proposed",
116
+ createdAt: timestamp,
117
+ updatedAt: timestamp,
118
+ sources: (params.sources ?? []).map(toSourceRef),
119
+ relatedPages: params.relatedPages ?? [],
120
+ codeVersion: params.codeVersion,
121
+ };
122
+ const page = {
123
+ frontmatter,
124
+ body: params.body,
125
+ rawFrontmatter: "",
126
+ };
127
+ this.storage.savePage(page);
128
+ return page;
129
+ }
130
+ /**
131
+ * Update an existing page
132
+ */
133
+ updatePage(pageId, updates) {
134
+ requireWiki();
135
+ const existing = this.storage.loadPage(pageId);
136
+ if (!existing) {
137
+ throw new Error(`Page not found: ${pageId}`);
138
+ }
139
+ const updatedFrontmatter = {
140
+ ...existing.frontmatter,
141
+ ...updates,
142
+ sources: updates.sources ? updates.sources.map(toSourceRef) : existing.frontmatter.sources,
143
+ updatedAt: now(),
144
+ };
145
+ const page = {
146
+ frontmatter: updatedFrontmatter,
147
+ body: updates.body ?? existing.body,
148
+ rawFrontmatter: existing.rawFrontmatter,
149
+ };
150
+ this.storage.savePage(page);
151
+ return page;
152
+ }
153
+ /**
154
+ * Load a wiki page
155
+ */
156
+ loadPage(pageId) {
157
+ requireWiki();
158
+ return this.storage.loadPage(pageId);
159
+ }
160
+ /**
161
+ * Delete a wiki page
162
+ */
163
+ deletePage(pageId) {
164
+ requireWiki();
165
+ this.storage.deletePage(pageId);
166
+ }
167
+ /**
168
+ * Get all pages
169
+ */
170
+ getAllPages() {
171
+ requireWiki();
172
+ return this.storage.getAllPages();
173
+ }
174
+ // ========================================================================
175
+ // Search
176
+ // ========================================================================
177
+ /**
178
+ * Search wiki pages
179
+ */
180
+ search(query, filters, limit = 10) {
181
+ requireWiki();
182
+ return this.storage.search(query, filters, limit);
183
+ }
184
+ /**
185
+ * Get page index
186
+ */
187
+ getIndex() {
188
+ requireWiki();
189
+ return this.storage.getIndex();
190
+ }
191
+ // ========================================================================
192
+ // Staged Changes
193
+ // ========================================================================
194
+ /**
195
+ * Stage a change for later application
196
+ */
197
+ stageChange(pageId, expectedRevision, newContent) {
198
+ requireWiki();
199
+ const existing = this.storage.loadPage(pageId);
200
+ if (!existing) {
201
+ throw new Error(`Page not found: ${pageId}`);
202
+ }
203
+ const change = {
204
+ pageId,
205
+ expectedRevision,
206
+ newContent,
207
+ operationId: "",
208
+ };
209
+ this.storage.stageChange(change);
210
+ return change;
211
+ }
212
+ /**
213
+ * Get staged change for a page
214
+ */
215
+ getStagedChange(pageId) {
216
+ requireWiki();
217
+ return this.storage.getStagedChange(pageId);
218
+ }
219
+ /**
220
+ * Clear staged change
221
+ */
222
+ clearStagedChange(pageId) {
223
+ requireWiki();
224
+ this.storage.clearStagedChange(pageId);
225
+ }
226
+ // ========================================================================
227
+ // Apply Changes
228
+ // ========================================================================
229
+ /**
230
+ * Apply staged change with conflict detection
231
+ */
232
+ applyChange(pageId, requestId) {
233
+ requireWiki();
234
+ const staged = this.storage.getStagedChange(pageId);
235
+ if (!staged) {
236
+ throw new Error(`No staged change for page: ${pageId}`);
237
+ }
238
+ const existing = this.storage.loadPage(pageId);
239
+ if (!existing) {
240
+ throw new Error(`Page not found: ${pageId}`);
241
+ }
242
+ // Check for conflicts
243
+ const currentRevision = computeHash(existing.rawFrontmatter || "");
244
+ if (staged.expectedRevision !== currentRevision) {
245
+ throw new Error(`Conflict: page was modified. Expected revision ${staged.expectedRevision}, found ${currentRevision}`);
246
+ }
247
+ // Parse new content
248
+ const parsed = parseFrontmatter(staged.newContent);
249
+ if (!parsed.frontmatter) {
250
+ throw new Error("Invalid page content: missing frontmatter");
251
+ }
252
+ // Create updated page
253
+ const page = {
254
+ frontmatter: {
255
+ ...parsed.frontmatter,
256
+ id: pageId,
257
+ updatedAt: now(),
258
+ },
259
+ body: parsed.body,
260
+ rawFrontmatter: parsed.raw,
261
+ };
262
+ this.storage.savePage(page);
263
+ this.storage.clearStagedChange(pageId);
264
+ return page;
265
+ }
266
+ // ========================================================================
267
+ // Lint
268
+ // ========================================================================
269
+ /**
270
+ * Run lint checks on wiki
271
+ */
272
+ lint(scope) {
273
+ requireWiki();
274
+ const findings = [];
275
+ if (scope === undefined || scope === "all" || scope === "pages") {
276
+ findings.push(...this.lintPages());
277
+ }
278
+ if (scope === undefined || scope === "all" || scope === "links") {
279
+ findings.push(...this.lintLinks());
280
+ }
281
+ if (scope === undefined || scope === "all" || scope === "freshness") {
282
+ findings.push(...this.lintFreshness());
283
+ }
284
+ return findings;
285
+ }
286
+ /**
287
+ * Lint page structure
288
+ */
289
+ lintPages() {
290
+ const findings = [];
291
+ const pages = this.storage.getAllPages();
292
+ for (const page of pages) {
293
+ // Check required frontmatter fields
294
+ if (!page.frontmatter.id) {
295
+ findings.push({
296
+ severity: "error",
297
+ category: "structure",
298
+ pageId: page.frontmatter.id,
299
+ message: "Missing id in frontmatter",
300
+ });
301
+ }
302
+ if (!page.frontmatter.title) {
303
+ findings.push({
304
+ severity: "error",
305
+ category: "structure",
306
+ pageId: page.frontmatter.id,
307
+ message: "Missing title in frontmatter",
308
+ });
309
+ }
310
+ if (!page.frontmatter.kind) {
311
+ findings.push({
312
+ severity: "error",
313
+ category: "structure",
314
+ pageId: page.frontmatter.id,
315
+ message: "Missing kind in frontmatter",
316
+ });
317
+ }
318
+ // Check for missing sources in non-reference pages
319
+ if (page.frontmatter.kind !== "reference" &&
320
+ page.frontmatter.sources.length === 0) {
321
+ findings.push({
322
+ severity: "warning",
323
+ category: "evidence",
324
+ pageId: page.frontmatter.id,
325
+ message: "Page has no source citations",
326
+ });
327
+ }
328
+ // Check for verified status without evidence
329
+ if (page.frontmatter.status === "verified" && !page.frontmatter.verification) {
330
+ findings.push({
331
+ severity: "warning",
332
+ category: "evidence",
333
+ pageId: page.frontmatter.id,
334
+ message: "Page has 'verified' status but no verification evidence",
335
+ });
336
+ }
337
+ }
338
+ return findings;
339
+ }
340
+ /**
341
+ * Lint link validity
342
+ */
343
+ lintLinks() {
344
+ const findings = [];
345
+ const pages = this.storage.getAllPages();
346
+ const pageIds = new Set(pages.map((p) => p.frontmatter.id));
347
+ for (const page of pages) {
348
+ // Check related pages exist
349
+ for (const relatedId of page.frontmatter.relatedPages) {
350
+ if (!pageIds.has(relatedId)) {
351
+ findings.push({
352
+ severity: "warning",
353
+ category: "links",
354
+ pageId: page.frontmatter.id,
355
+ message: `Related page not found: ${relatedId}`,
356
+ });
357
+ }
358
+ }
359
+ // Check source snapshots exist
360
+ for (const source of page.frontmatter.sources) {
361
+ if (!this.storage.getSnapshot(source.sourceId)) {
362
+ findings.push({
363
+ severity: "warning",
364
+ category: "links",
365
+ pageId: page.frontmatter.id,
366
+ message: `Source snapshot not found: ${source.sourceId}`,
367
+ });
368
+ }
369
+ }
370
+ }
371
+ return findings;
372
+ }
373
+ /**
374
+ * Lint freshness
375
+ */
376
+ lintFreshness() {
377
+ const findings = [];
378
+ const pages = this.storage.getAllPages();
379
+ const nowTime = Date.now();
380
+ const staleThreshold = 30 * 24 * 60 * 60 * 1000; // 30 days
381
+ for (const page of pages) {
382
+ const updatedTime = new Date(page.frontmatter.updatedAt).getTime();
383
+ const age = nowTime - updatedTime;
384
+ // Flag old pages without verification
385
+ if (page.frontmatter.status !== "verified" &&
386
+ page.frontmatter.status !== "superseded" &&
387
+ age > staleThreshold) {
388
+ findings.push({
389
+ severity: "info",
390
+ category: "freshness",
391
+ pageId: page.frontmatter.id,
392
+ message: `Page has not been updated in ${Math.floor(age / (24 * 60 * 60 * 1000))} days`,
393
+ });
394
+ }
395
+ // Check if sources have changed
396
+ for (const source of page.frontmatter.sources) {
397
+ const snapshot = this.storage.getSnapshot(source.sourceId);
398
+ if (snapshot) {
399
+ const snapTime = new Date(snapshot.capturedAt).getTime();
400
+ if (snapTime < updatedTime) {
401
+ findings.push({
402
+ severity: "warning",
403
+ category: "freshness",
404
+ pageId: page.frontmatter.id,
405
+ message: `Source ${source.sourceId} was captured before page was last updated`,
406
+ suggestion: "Consider re-ingesting source to verify content is current",
407
+ });
408
+ }
409
+ }
410
+ }
411
+ }
412
+ return findings;
413
+ }
414
+ // ========================================================================
415
+ // Operations
416
+ // ========================================================================
417
+ /**
418
+ * Get recent operations
419
+ */
420
+ getRecentOperations(limit = 50) {
421
+ requireWiki();
422
+ return this.storage.getRecentOperations(limit);
423
+ }
424
+ }
425
+ // ============================================================================
426
+ // Factory
427
+ // ============================================================================
428
+ /**
429
+ * Create wiki manager for a workspace
430
+ */
431
+ export function createWikiManager(workspaceRoot, projectId) {
432
+ const storage = createWikiStorage(workspaceRoot, projectId);
433
+ return new WikiManager(storage);
434
+ }
435
+ // Re-export storage class
436
+ export { WikiStorage, createWikiStorage } from "./storage.js";
437
+ /**
438
+ * Check if wiki exists in workspace
439
+ */
440
+ export function wikiExists(workspaceRoot) {
441
+ const wikiRoot = join(workspaceRoot, "wiki");
442
+ return existsSync(join(wikiRoot, "knowledge"));
443
+ }
444
+ // ============================================================================
445
+ // Exports
446
+ // ============================================================================
447
+ export * from "./types.js";
448
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}