@mrpatronz/nexusflow 2.7.0 → 2.8.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.
- package/README.md +16 -14
- package/dist/agent/ClaudeSdkAdapter.d.ts.map +1 -1
- package/dist/agent/ClaudeSdkAdapter.js +31 -8
- package/dist/agent/ClaudeSdkAdapter.js.map +1 -1
- package/dist/agent/ClaudeSdkAdapter.test.js +18 -6
- package/dist/agent/ClaudeSdkAdapter.test.js.map +1 -1
- package/dist/agent/CodexCliAdapter.d.ts +1 -1
- package/dist/agent/CodexCliAdapter.d.ts.map +1 -1
- package/dist/agent/CodexCliAdapter.js +5 -4
- package/dist/agent/CodexCliAdapter.js.map +1 -1
- package/dist/agent/CodexCliAdapter.test.js +16 -1
- package/dist/agent/CodexCliAdapter.test.js.map +1 -1
- package/dist/agent/CodexSdkAdapter.d.ts.map +1 -1
- package/dist/agent/CodexSdkAdapter.js +6 -0
- package/dist/agent/CodexSdkAdapter.js.map +1 -1
- package/dist/agent/ProviderRegistry.d.ts +5 -0
- package/dist/agent/ProviderRegistry.d.ts.map +1 -1
- package/dist/agent/ProviderRegistry.js +15 -0
- package/dist/agent/ProviderRegistry.js.map +1 -1
- package/dist/agent/ProviderRegistry.test.js +19 -0
- package/dist/agent/ProviderRegistry.test.js.map +1 -1
- package/dist/agent/adapters.d.ts.map +1 -1
- package/dist/agent/adapters.js +5 -0
- package/dist/agent/adapters.js.map +1 -1
- package/dist/agent/mcp-config.d.ts +16 -0
- package/dist/agent/mcp-config.d.ts.map +1 -0
- package/dist/agent/mcp-config.js +28 -0
- package/dist/agent/mcp-config.js.map +1 -0
- package/dist/agent/mcp-config.test.d.ts +2 -0
- package/dist/agent/mcp-config.test.d.ts.map +1 -0
- package/dist/agent/mcp-config.test.js +22 -0
- package/dist/agent/mcp-config.test.js.map +1 -0
- package/dist/agent/models.d.ts +10 -0
- package/dist/agent/models.d.ts.map +1 -0
- package/dist/agent/models.js +35 -0
- package/dist/agent/models.js.map +1 -0
- package/dist/agent/models.test.d.ts +2 -0
- package/dist/agent/models.test.d.ts.map +1 -0
- package/dist/agent/models.test.js +40 -0
- package/dist/agent/models.test.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +65 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +260 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/orchestrator.test.d.ts +2 -0
- package/dist/agent/orchestrator.test.d.ts.map +1 -0
- package/dist/agent/orchestrator.test.js +284 -0
- package/dist/agent/orchestrator.test.js.map +1 -0
- package/dist/agent/session.d.ts +1 -0
- package/dist/agent/session.d.ts.map +1 -1
- package/dist/agent/session.js +3 -2
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/session.test.js +9 -0
- package/dist/agent/session.test.js.map +1 -1
- package/dist/agent/smoke-chat.test.d.ts +2 -0
- package/dist/agent/smoke-chat.test.d.ts.map +1 -0
- package/dist/agent/smoke-chat.test.js +166 -0
- package/dist/agent/smoke-chat.test.js.map +1 -0
- package/dist/commands/commands.test.js +3 -0
- package/dist/commands/commands.test.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +2 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +3 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +9 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/knowledge.d.ts +9 -0
- package/dist/commands/knowledge.d.ts.map +1 -1
- package/dist/commands/knowledge.js +59 -2
- package/dist/commands/knowledge.js.map +1 -1
- package/dist/commands/knowledge.test.js +14 -1
- package/dist/commands/knowledge.test.js.map +1 -1
- package/dist/commands/mcp.d.ts +7 -1
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +7 -2
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/progress.d.ts +4 -0
- package/dist/commands/progress.d.ts.map +1 -0
- package/dist/commands/progress.js +33 -0
- package/dist/commands/progress.js.map +1 -0
- package/dist/commands/refresh.d.ts +1 -0
- package/dist/commands/refresh.d.ts.map +1 -1
- package/dist/commands/refresh.js +17 -2
- package/dist/commands/refresh.js.map +1 -1
- package/dist/commands/remote.d.ts +4 -0
- package/dist/commands/remote.d.ts.map +1 -0
- package/dist/commands/remote.js +28 -0
- package/dist/commands/remote.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +14 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/status.test.d.ts +2 -0
- package/dist/commands/status.test.d.ts.map +1 -0
- package/dist/commands/status.test.js +31 -0
- package/dist/commands/status.test.js.map +1 -0
- package/dist/core/analysis-cache.d.ts +13 -3
- package/dist/core/analysis-cache.d.ts.map +1 -1
- package/dist/core/analysis-cache.js +41 -31
- package/dist/core/analysis-cache.js.map +1 -1
- package/dist/core/analysis-cache.test.js +50 -8
- package/dist/core/analysis-cache.test.js.map +1 -1
- package/dist/core/doctor.d.ts.map +1 -1
- package/dist/core/doctor.js +61 -0
- package/dist/core/doctor.js.map +1 -1
- package/dist/core/generation-lock.d.ts +58 -0
- package/dist/core/generation-lock.d.ts.map +1 -0
- package/dist/core/generation-lock.js +233 -0
- package/dist/core/generation-lock.js.map +1 -0
- package/dist/core/generation-lock.test.d.ts +2 -0
- package/dist/core/generation-lock.test.d.ts.map +1 -0
- package/dist/core/generation-lock.test.js +134 -0
- package/dist/core/generation-lock.test.js.map +1 -0
- package/dist/core/isolate.test.js +30 -0
- package/dist/core/isolate.test.js.map +1 -1
- package/dist/core/knowledge.d.ts +20 -0
- package/dist/core/knowledge.d.ts.map +1 -1
- package/dist/core/knowledge.js +184 -36
- package/dist/core/knowledge.js.map +1 -1
- package/dist/core/knowledge.test.js +93 -15
- package/dist/core/knowledge.test.js.map +1 -1
- package/dist/core/locks.d.ts +4 -2
- package/dist/core/locks.d.ts.map +1 -1
- package/dist/core/locks.js +55 -7
- package/dist/core/locks.js.map +1 -1
- package/dist/core/locks.test.js +48 -0
- package/dist/core/locks.test.js.map +1 -1
- package/dist/core/progress.d.ts +21 -0
- package/dist/core/progress.d.ts.map +1 -0
- package/dist/core/progress.js +40 -0
- package/dist/core/progress.js.map +1 -0
- package/dist/core/progress.test.d.ts +2 -0
- package/dist/core/progress.test.d.ts.map +1 -0
- package/dist/core/progress.test.js +52 -0
- package/dist/core/progress.test.js.map +1 -0
- package/dist/core/refresh.d.ts +5 -0
- package/dist/core/refresh.d.ts.map +1 -1
- package/dist/core/refresh.js +25 -0
- package/dist/core/refresh.js.map +1 -1
- package/dist/core/refresh.test.js +20 -0
- package/dist/core/refresh.test.js.map +1 -1
- package/dist/core/status.d.ts +2 -0
- package/dist/core/status.d.ts.map +1 -1
- package/dist/core/status.js +6 -1
- package/dist/core/status.js.map +1 -1
- package/dist/core/sync.d.ts.map +1 -1
- package/dist/core/sync.js +22 -1
- package/dist/core/sync.js.map +1 -1
- package/dist/core/sync.test.js +27 -0
- package/dist/core/sync.test.js.map +1 -1
- package/dist/core/workspace-git.d.ts +15 -0
- package/dist/core/workspace-git.d.ts.map +1 -0
- package/dist/core/workspace-git.js +131 -0
- package/dist/core/workspace-git.js.map +1 -0
- package/dist/core/workspace-git.test.d.ts +2 -0
- package/dist/core/workspace-git.test.d.ts.map +1 -0
- package/dist/core/workspace-git.test.js +52 -0
- package/dist/core/workspace-git.test.js.map +1 -0
- package/dist/core/workspace-skills-workflow.integration.test.js +15 -0
- package/dist/core/workspace-skills-workflow.integration.test.js.map +1 -1
- package/dist/core/workspace.create.test.js +5 -2
- package/dist/core/workspace.create.test.js.map +1 -1
- package/dist/core/workspace.d.ts.map +1 -1
- package/dist/core/workspace.js +11 -6
- package/dist/core/workspace.js.map +1 -1
- package/dist/generators/antigravity.d.ts.map +1 -1
- package/dist/generators/antigravity.js +2 -1
- package/dist/generators/antigravity.js.map +1 -1
- package/dist/generators/base.d.ts.map +1 -1
- package/dist/generators/base.js +5 -3
- package/dist/generators/base.js.map +1 -1
- package/dist/generators/claude.d.ts.map +1 -1
- package/dist/generators/claude.js +4 -1
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/codex.d.ts.map +1 -1
- package/dist/generators/codex.js +2 -1
- package/dist/generators/codex.js.map +1 -1
- package/dist/generators/copilot.d.ts.map +1 -1
- package/dist/generators/copilot.js +4 -3
- package/dist/generators/copilot.js.map +1 -1
- package/dist/generators/cursor.d.ts.map +1 -1
- package/dist/generators/cursor.js +6 -3
- package/dist/generators/cursor.js.map +1 -1
- package/dist/generators/index.d.ts +2 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +79 -45
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/knowledge-migration.test.d.ts +2 -0
- package/dist/generators/knowledge-migration.test.d.ts.map +1 -0
- package/dist/generators/knowledge-migration.test.js +22 -0
- package/dist/generators/knowledge-migration.test.js.map +1 -0
- package/dist/generators/plan-generator.d.ts.map +1 -1
- package/dist/generators/plan-generator.js +18 -9
- package/dist/generators/plan-generator.js.map +1 -1
- package/dist/generators/plan-generator.test.js +4 -1
- package/dist/generators/plan-generator.test.js.map +1 -1
- package/dist/gui/assets/AgentsPage-B4fx43rd.js +3 -0
- package/dist/gui/assets/{CSPContext-BG7no5S_.js → CSPContext-DBUu9tE0.js} +1 -1
- package/dist/gui/assets/{DashboardPage-ByGTwAQa.js → DashboardPage-DH52G8IG.js} +1 -1
- package/dist/gui/assets/{GettingStartedPage-Xjx3M3RH.js → GettingStartedPage-BlTrQhvi.js} +1 -1
- package/dist/gui/assets/ProjectsPage-BPVSLPXv.js +1 -0
- package/dist/gui/assets/ScaffoldRepoInline-ywcpq9PX.js +1 -0
- package/dist/gui/assets/{SettingsPage-B9iN6hsv.js → SettingsPage-RQr8SalV.js} +1 -1
- package/dist/gui/assets/SkillsPage-CYoSRrwx.js +6 -0
- package/dist/gui/assets/StartWorkPage-DBKK4lFi.js +1 -0
- package/dist/gui/assets/{StrategiesPage-DDu3jwJx.js → StrategiesPage-C36TZgDX.js} +1 -1
- package/dist/gui/assets/WorkspacesPage-DxEONvSq.js +6 -0
- package/dist/gui/assets/{alert-dialog-CdqVrvZl.js → alert-dialog-CQAX2yRx.js} +1 -1
- package/dist/gui/assets/index-BF6pre6G.css +2 -0
- package/dist/gui/assets/index-C_rwnBzF.js +52 -0
- package/dist/gui/assets/isElementDisabled-uy_EOitH.js +1 -0
- package/dist/gui/assets/textarea-ByfoCb54.js +1 -0
- package/dist/gui/assets/{useAriaLabelledBy-DfRdwH8a.js → useAriaLabelledBy-ClesgjMe.js} +1 -1
- package/dist/gui/assets/useValueChanged-DeYvGnKs.js +1 -0
- package/dist/gui/assets/{vsc-D6UPv2ii.js → vsc-DFh0-53h.js} +1 -1
- package/dist/gui/index.html +5 -7
- package/dist/harness/claude.d.ts +3 -1
- package/dist/harness/claude.d.ts.map +1 -1
- package/dist/harness/claude.js +4 -2
- package/dist/harness/claude.js.map +1 -1
- package/dist/harness/codex.d.ts +3 -1
- package/dist/harness/codex.d.ts.map +1 -1
- package/dist/harness/codex.js +64 -12
- package/dist/harness/codex.js.map +1 -1
- package/dist/harness/contract.test.d.ts +2 -0
- package/dist/harness/contract.test.d.ts.map +1 -0
- package/dist/harness/contract.test.js +426 -0
- package/dist/harness/contract.test.js.map +1 -0
- package/dist/harness/harness.test.js +16 -1
- package/dist/harness/harness.test.js.map +1 -1
- package/dist/harness/types.d.ts +7 -1
- package/dist/harness/types.d.ts.map +1 -1
- package/dist/index.js +52 -5
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +8 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +11 -6
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +6 -2
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +232 -14
- package/dist/mcp/tools.js.map +1 -1
- package/dist/mcp/tools.test.js +130 -6
- package/dist/mcp/tools.test.js.map +1 -1
- package/dist/resources/materializer.d.ts.map +1 -1
- package/dist/resources/materializer.js +11 -3
- package/dist/resources/materializer.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +37 -6
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +37 -1
- package/dist/server.test.js.map +1 -1
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/gui/assets/AgentsPage-YyYRodOR.js +0 -3
- package/dist/gui/assets/ProjectsPage-BMdhqAGs.js +0 -1
- package/dist/gui/assets/ScaffoldRepoInline-gXyYSIz5.js +0 -1
- package/dist/gui/assets/SkillsPage-CxcsbIsQ.js +0 -6
- package/dist/gui/assets/StartWorkPage-DPVHcdy4.js +0 -1
- package/dist/gui/assets/WorkspacesPage-BWRmP0mY.js +0 -2
- package/dist/gui/assets/index-CZoZQkeC.css +0 -2
- package/dist/gui/assets/index-wy68EqfB.js +0 -50
- package/dist/gui/assets/isElementDisabled-D_fu2zfc.js +0 -1
- package/dist/gui/assets/store-D5DUHbxn.js +0 -3
- package/dist/gui/assets/styles-CVwNuFCx.js +0 -1
- package/dist/gui/assets/textarea-BNRuIXNs.js +0 -1
- package/dist/gui/assets/useValueChanged-CStSGSsD.js +0 -1
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import { constants } from 'node:fs';
|
|
3
|
+
import * as fs from 'node:fs/promises';
|
|
4
|
+
import * as os from 'node:os';
|
|
5
|
+
import * as path from 'node:path';
|
|
6
|
+
import fse from 'fs-extra';
|
|
7
|
+
import { execa } from 'execa';
|
|
8
|
+
import { captureGenerationSnapshot, checkGenerationLock, renderFreshnessBanner, writeGenerationLock, } from './generation-lock.js';
|
|
9
|
+
import { getStorageProvider, setActiveStorageProvider } from './adapters/registry.js';
|
|
10
|
+
describe('generation lock', () => {
|
|
11
|
+
let workspacePath;
|
|
12
|
+
let repoPath;
|
|
13
|
+
beforeEach(async () => {
|
|
14
|
+
setActiveStorageProvider(getStorageProvider('local'));
|
|
15
|
+
workspacePath = await fs.mkdtemp(path.join(os.tmpdir(), 'nexusflow-lock-'));
|
|
16
|
+
repoPath = path.join(workspacePath, 'repo');
|
|
17
|
+
await fs.mkdir(repoPath);
|
|
18
|
+
await execa('git', ['init'], { cwd: repoPath });
|
|
19
|
+
await execa('git', ['config', 'user.name', 'NexusFlow Test'], { cwd: repoPath });
|
|
20
|
+
await execa('git', ['config', 'user.email', 'nexusflow-test@local'], { cwd: repoPath });
|
|
21
|
+
await fs.writeFile(path.join(repoPath, 'README.md'), '# repo\n');
|
|
22
|
+
await execa('git', ['add', 'README.md'], { cwd: repoPath });
|
|
23
|
+
await execa('git', ['commit', '-m', 'fixture'], { cwd: repoPath });
|
|
24
|
+
await fs.writeFile(path.join(workspacePath, 'nexusflow.json'), JSON.stringify({
|
|
25
|
+
id: 'lock-test', mode: 'in-place', branchName: 'lock-test', description: 'test',
|
|
26
|
+
repos: [repoPath], assistants: [], workspacePath, createdAt: new Date().toISOString(),
|
|
27
|
+
}));
|
|
28
|
+
});
|
|
29
|
+
afterEach(async () => {
|
|
30
|
+
setActiveStorageProvider(getStorageProvider('local'));
|
|
31
|
+
await fse.remove(workspacePath);
|
|
32
|
+
});
|
|
33
|
+
async function createLock() {
|
|
34
|
+
const repos = [{ name: 'repo', path: repoPath, defaultBranch: 'main' }];
|
|
35
|
+
const snapshot = await captureGenerationSnapshot(repos);
|
|
36
|
+
await fs.writeFile(path.join(workspacePath, 'AGENTS.md'), `${renderFreshnessBanner(snapshot)}\n\n# Test\n`);
|
|
37
|
+
await writeGenerationLock(workspacePath, snapshot, [{ path: 'AGENTS.md', source: 'test' }]);
|
|
38
|
+
}
|
|
39
|
+
it('accepts the exact repo and generated-output snapshot', async () => {
|
|
40
|
+
await createLock();
|
|
41
|
+
await expect(checkGenerationLock(workspacePath)).resolves.toMatchObject({ fresh: true, drift: [] });
|
|
42
|
+
});
|
|
43
|
+
it('retains generatedAt when refresh reproduces the identical snapshot and outputs', async () => {
|
|
44
|
+
await createLock();
|
|
45
|
+
const before = JSON.parse(await fs.readFile(path.join(workspacePath, 'nexusflow.lock'), 'utf-8'));
|
|
46
|
+
const snapshot = await captureGenerationSnapshot([{ name: 'repo', path: repoPath, defaultBranch: 'main' }]);
|
|
47
|
+
snapshot.generatedAt = '2099-01-01T00:00:00.000Z';
|
|
48
|
+
await writeGenerationLock(workspacePath, snapshot, [{ path: 'AGENTS.md', source: 'test' }]);
|
|
49
|
+
const after = JSON.parse(await fs.readFile(path.join(workspacePath, 'nexusflow.lock'), 'utf-8'));
|
|
50
|
+
expect(after.generatedAt).toBe(before.generatedAt);
|
|
51
|
+
});
|
|
52
|
+
it('detects dirty repo state and injects a loud bounded banner', async () => {
|
|
53
|
+
await createLock();
|
|
54
|
+
await fs.writeFile(path.join(repoPath, 'README.md'), '# changed\n');
|
|
55
|
+
const result = await checkGenerationLock(workspacePath, { markDocuments: true });
|
|
56
|
+
expect(result.fresh).toBe(false);
|
|
57
|
+
expect(result.drift).toEqual(expect.arrayContaining([expect.objectContaining({ kind: 'repo', name: 'repo' })]));
|
|
58
|
+
expect(await fs.readFile(path.join(workspacePath, 'AGENTS.md'), 'utf-8')).toContain('STALE NEXUSFLOW CONTEXT');
|
|
59
|
+
});
|
|
60
|
+
it('keeps generation usable when dirty files cannot be safely fingerprinted', async () => {
|
|
61
|
+
await fs.writeFile(path.join(repoPath, 'README.md'), '# dirty\n');
|
|
62
|
+
const snapshot = await captureGenerationSnapshot([
|
|
63
|
+
{ name: 'repo', path: repoPath, defaultBranch: 'main' },
|
|
64
|
+
]);
|
|
65
|
+
if (typeof constants.O_NOFOLLOW === 'number') {
|
|
66
|
+
expect(snapshot.repos.repo.fingerprint).toContain('+');
|
|
67
|
+
expect(renderFreshnessBanner(snapshot)).not.toContain('CANNOT BE VERIFIED');
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
expect(snapshot.repos.repo.fingerprint).toMatch(/^uncacheable:/);
|
|
71
|
+
expect(renderFreshnessBanner(snapshot)).toContain('CANNOT BE VERIFIED');
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
it('detects edits outside the mutable freshness banner', async () => {
|
|
75
|
+
await createLock();
|
|
76
|
+
await fs.appendFile(path.join(workspacePath, 'AGENTS.md'), 'manual edit\n');
|
|
77
|
+
const result = await checkGenerationLock(workspacePath);
|
|
78
|
+
expect(result.drift).toEqual(expect.arrayContaining([expect.objectContaining({ kind: 'output', name: 'AGENTS.md' })]));
|
|
79
|
+
});
|
|
80
|
+
it('marks context stale when the generator version changes', async () => {
|
|
81
|
+
await createLock();
|
|
82
|
+
const lockPath = path.join(workspacePath, 'nexusflow.lock');
|
|
83
|
+
const lock = JSON.parse(await fs.readFile(lockPath, 'utf-8'));
|
|
84
|
+
lock.toolVersion = '0.0.0-old';
|
|
85
|
+
await fs.writeFile(lockPath, JSON.stringify(lock, null, 2) + '\n');
|
|
86
|
+
const result = await checkGenerationLock(workspacePath, { markDocuments: true });
|
|
87
|
+
expect(result.drift).toEqual(expect.arrayContaining([expect.objectContaining({ kind: 'tool' })]));
|
|
88
|
+
expect(await fs.readFile(path.join(workspacePath, 'AGENTS.md'), 'utf-8')).toContain('Generated with NexusFlow 0.0.0-old');
|
|
89
|
+
});
|
|
90
|
+
it('hashes local binary resource bytes without UTF-8 replacement collisions', async () => {
|
|
91
|
+
const assetPath = path.join(workspacePath, '.agents', 'skills', 'demo', 'assets', 'sample.bin');
|
|
92
|
+
await fs.mkdir(path.dirname(assetPath), { recursive: true });
|
|
93
|
+
await fs.writeFile(assetPath, Buffer.from([0x80]));
|
|
94
|
+
const snapshot = await captureGenerationSnapshot([{ name: 'repo', path: repoPath, defaultBranch: 'main' }]);
|
|
95
|
+
await writeGenerationLock(workspacePath, snapshot, [{
|
|
96
|
+
path: '.agents/skills/demo/assets/sample.bin',
|
|
97
|
+
source: 'test asset',
|
|
98
|
+
location: 'local',
|
|
99
|
+
}]);
|
|
100
|
+
await fs.writeFile(assetPath, Buffer.from([0x81]));
|
|
101
|
+
const result = await checkGenerationLock(workspacePath);
|
|
102
|
+
expect(result.drift).toEqual(expect.arrayContaining([
|
|
103
|
+
expect.objectContaining({ kind: 'output', name: '.agents/skills/demo/assets/sample.bin' }),
|
|
104
|
+
]));
|
|
105
|
+
});
|
|
106
|
+
it('reads workspace documents through the active storage adapter', async () => {
|
|
107
|
+
const documents = new Map([['AGENTS.md', '# Adapter context\n']]);
|
|
108
|
+
const adapter = {
|
|
109
|
+
meta: { name: 'memory', displayName: 'Memory', description: 'test', configFields: [] },
|
|
110
|
+
writeWorkspaceFile: async (_workspace, _feature, filename, content) => { documents.set(filename, content); },
|
|
111
|
+
readWorkspaceFile: async (_workspace, _feature, filename) => {
|
|
112
|
+
const content = documents.get(filename);
|
|
113
|
+
if (content === undefined)
|
|
114
|
+
throw new Error('missing');
|
|
115
|
+
return content;
|
|
116
|
+
},
|
|
117
|
+
workspaceFileExists: async (_workspace, _feature, filename) => documents.has(filename),
|
|
118
|
+
resolveWorkspaceFileUrl: (_workspace, _feature, filename) => `memory:${filename}`,
|
|
119
|
+
writeBaseFile: async () => { },
|
|
120
|
+
readBaseFile: async () => '',
|
|
121
|
+
baseFileExists: async () => false,
|
|
122
|
+
resolveBaseFileUrl: () => 'memory:base',
|
|
123
|
+
deleteWorkspace: async () => { },
|
|
124
|
+
};
|
|
125
|
+
setActiveStorageProvider(adapter);
|
|
126
|
+
const snapshot = await captureGenerationSnapshot([{ name: 'repo', path: repoPath, defaultBranch: 'main' }]);
|
|
127
|
+
await writeGenerationLock(workspacePath, snapshot, [{ path: 'AGENTS.md', source: 'test', location: 'workspace' }]);
|
|
128
|
+
await expect(checkGenerationLock(workspacePath)).resolves.toMatchObject({ fresh: true });
|
|
129
|
+
documents.set('AGENTS.md', '# Changed adapter context\n');
|
|
130
|
+
const result = await checkGenerationLock(workspacePath);
|
|
131
|
+
expect(result.drift).toEqual(expect.arrayContaining([expect.objectContaining({ kind: 'output', name: 'AGENTS.md' })]));
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
//# sourceMappingURL=generation-lock.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generation-lock.test.js","sourceRoot":"","sources":["../../src/core/generation-lock.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAGtF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,aAAqB,CAAC;IAC1B,IAAI,QAAgB,CAAC;IAErB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,wBAAwB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,aAAa,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC5E,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACzB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,gBAAgB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,sBAAsB,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACxF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;QACjE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACnE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;YAC5E,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM;YAC/E,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtF,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,wBAAwB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,MAAM,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,UAAU;QACvB,MAAM,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,GAAG,qBAAqB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC5G,MAAM,mBAAmB,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAA4B,CAAC;QAC7H,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5G,QAAQ,CAAC,WAAW,GAAG,0BAA0B,CAAC;QAClD,MAAM,mBAAmB,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAA4B,CAAC;QAE5H,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACjH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC;YAC/C,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE;SACxD,CAAC,CAAC;QAEH,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;YAC7C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAK,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACxD,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAClE,MAAM,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,eAAe,CAAC,CAAC;QAC5E,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,UAAU,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAA4B,CAAC;QACzF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAEnE,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAEjF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5H,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChG,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5G,MAAM,mBAAmB,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAClD,IAAI,EAAE,uCAAuC;gBAC7C,MAAM,EAAE,YAAY;gBACpB,QAAQ,EAAE,OAAO;aAClB,CAAC,CAAC,CAAC;QAEJ,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,CAAC,CAAC;QAExD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;YAClD,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,uCAAuC,EAAE,CAAC;SAC3F,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAiB,CAAC,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,OAAO,GAAgB;YAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;YACtF,kBAAkB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5G,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;gBAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACxC,IAAI,OAAO,KAAK,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;gBACtD,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,mBAAmB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;YACtF,uBAAuB,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,UAAU,QAAQ,EAAE;YACjF,aAAa,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;YAC7B,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;YAC5B,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK;YACjC,kBAAkB,EAAE,GAAG,EAAE,CAAC,aAAa;YACvC,eAAe,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;SAChC,CAAC;QACF,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,MAAM,yBAAyB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5G,MAAM,mBAAmB,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;QACnH,MAAM,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzF,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -286,5 +286,35 @@ describe('isolateWorkspaceRepo & on-demand worktree isolation', { timeout: 30000
|
|
|
286
286
|
expect(branchCheck?.status).toBe('pass');
|
|
287
287
|
expect(report.errors).toHaveLength(0);
|
|
288
288
|
});
|
|
289
|
+
it('doctor rejects explicit contract endpoints that do not exist', async () => {
|
|
290
|
+
const feature = {
|
|
291
|
+
id: 'contract-test', mode: 'in-place', branchName: 'contract-test', description: 'Contract test',
|
|
292
|
+
repos: [repo1Dir], originalRepos: [repo1Dir], assistants: [], workspacePath: workspaceDir,
|
|
293
|
+
createdAt: new Date().toISOString(),
|
|
294
|
+
contracts: [{ from: 'src/missing-bff', to: 'src/missing-spa', kind: 'http-envelope', entry: '2026-08-25-bff-errors' }],
|
|
295
|
+
};
|
|
296
|
+
await saveFeatureConfig(workspaceDir, feature);
|
|
297
|
+
await fs.writeFile(path.join(workspaceDir, 'nexusflow-knowledge.md'), '### 2026-08-25 — bff-errors\n**Gotcha:** Decode once.\n');
|
|
298
|
+
const report = await runDoctor(workspaceDir);
|
|
299
|
+
expect(report.checks).toEqual(expect.arrayContaining([
|
|
300
|
+
expect.objectContaining({ category: 'Explicit Contracts', status: 'fail' }),
|
|
301
|
+
]));
|
|
302
|
+
});
|
|
303
|
+
it('doctor accepts explicit contract endpoints backed by real paths and knowledge', async () => {
|
|
304
|
+
await fs.mkdir(path.join(repo1Dir, 'apps', 'bff'), { recursive: true });
|
|
305
|
+
await fs.mkdir(path.join(repo1Dir, 'apps', 'spa'), { recursive: true });
|
|
306
|
+
const feature = {
|
|
307
|
+
id: 'contract-test', mode: 'in-place', branchName: 'contract-test', description: 'Contract test',
|
|
308
|
+
repos: [repo1Dir], originalRepos: [repo1Dir], assistants: [], workspacePath: workspaceDir,
|
|
309
|
+
createdAt: new Date().toISOString(),
|
|
310
|
+
contracts: [{ from: 'apps/bff', to: 'apps/spa', kind: 'http-envelope', entry: '2026-08-25-bff-errors' }],
|
|
311
|
+
};
|
|
312
|
+
await saveFeatureConfig(workspaceDir, feature);
|
|
313
|
+
await fs.writeFile(path.join(workspaceDir, 'nexusflow-knowledge.md'), '### 2026-08-25 — bff-errors\n**Gotcha:** Decode once.\n');
|
|
314
|
+
const report = await runDoctor(workspaceDir);
|
|
315
|
+
expect(report.checks).toEqual(expect.arrayContaining([
|
|
316
|
+
expect.objectContaining({ category: 'Explicit Contracts', name: 'http-envelope', status: 'pass' }),
|
|
317
|
+
]));
|
|
318
|
+
});
|
|
289
319
|
});
|
|
290
320
|
//# sourceMappingURL=isolate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolate.test.js","sourceRoot":"","sources":["../../src/core/isolate.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"isolate.test.js","sourceRoot":"","sources":["../../src/core/isolate.test.ts"],"names":[],"mappings":"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"}
|
package/dist/core/knowledge.d.ts
CHANGED
|
@@ -23,6 +23,10 @@ export interface KnowledgeEntry {
|
|
|
23
23
|
message: string;
|
|
24
24
|
/** Short title, used for the heading of a `decision` entry. */
|
|
25
25
|
title?: string;
|
|
26
|
+
/** Optional applicability selector: repo:<name>, path:<repo/path>, or seam:<name>. */
|
|
27
|
+
scope?: string;
|
|
28
|
+
/** Optional short evidence pointer such as a commit SHA or repro document. */
|
|
29
|
+
evidence?: string;
|
|
26
30
|
/** ISO timestamp; defaults to now. */
|
|
27
31
|
timestamp?: string;
|
|
28
32
|
}
|
|
@@ -34,6 +38,14 @@ export interface KnowledgeWriteResult {
|
|
|
34
38
|
section: string;
|
|
35
39
|
/** True when the file did not exist and was created. */
|
|
36
40
|
createdFile: boolean;
|
|
41
|
+
/** True when an idempotent retry found the exact dated entry already present. */
|
|
42
|
+
duplicate?: boolean;
|
|
43
|
+
/** Git persistence result after the storage write succeeded. */
|
|
44
|
+
commit: KnowledgeCommitResult;
|
|
45
|
+
}
|
|
46
|
+
export interface KnowledgeCommitResult {
|
|
47
|
+
status: 'committed' | 'already-committed' | 'skipped' | 'failed';
|
|
48
|
+
message?: string;
|
|
37
49
|
}
|
|
38
50
|
/** A parsed existing entry, used when promoting learnings. */
|
|
39
51
|
export interface ParsedKnowledgeEntry {
|
|
@@ -55,7 +67,15 @@ export interface PromoteOptions {
|
|
|
55
67
|
export interface PromoteResult {
|
|
56
68
|
promotedCount: number;
|
|
57
69
|
baseLocation: string;
|
|
70
|
+
commitFailures?: string[];
|
|
71
|
+
}
|
|
72
|
+
/** Raised when base knowledge is addressed with a repo outside the workspace manifest. */
|
|
73
|
+
export declare class KnowledgeRepositoryError extends Error {
|
|
74
|
+
constructor(message: string);
|
|
58
75
|
}
|
|
76
|
+
export declare const MAX_TITLE_CHARS = 60;
|
|
77
|
+
export declare const MAX_EVIDENCE_CHARS = 200;
|
|
78
|
+
export declare function knowledgeTitleSlug(title: string): string;
|
|
59
79
|
/**
|
|
60
80
|
* Formats a {@link KnowledgeEntry} as the markdown snippet to insert.
|
|
61
81
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/core/knowledge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/core/knowledge.ts"],"names":[],"mappings":"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"}
|
package/dist/core/knowledge.js
CHANGED
|
@@ -19,8 +19,46 @@ import * as path from 'node:path';
|
|
|
19
19
|
import { loadFeatureConfig } from './workspace.js';
|
|
20
20
|
import { readWorkspaceFile, writeWorkspaceFile, workspaceFileExists, resolveWorkspaceFileUrl, readBaseFile, writeBaseFile, baseFileExists, resolveBaseFileUrl, } from './storage.js';
|
|
21
21
|
import { buildBaseKnowledgeContent } from '../generators/index.js';
|
|
22
|
+
import { slugify } from '../utils/slug.js';
|
|
23
|
+
import { commitExactWorkspaceArtifacts } from './workspace-git.js';
|
|
24
|
+
import * as fs from 'node:fs/promises';
|
|
25
|
+
import { getActiveStorageProvider } from './adapters/registry.js';
|
|
26
|
+
import { acquireLock } from './locks.js';
|
|
22
27
|
/** The knowledge filename used for both the workspace and base layers. */
|
|
23
28
|
const KNOWLEDGE_FILE = 'nexusflow-knowledge.md';
|
|
29
|
+
/** Raised when base knowledge is addressed with a repo outside the workspace manifest. */
|
|
30
|
+
export class KnowledgeRepositoryError extends Error {
|
|
31
|
+
constructor(message) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.name = 'KnowledgeRepositoryError';
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve a base-knowledge key from the manifest, never directly from caller
|
|
38
|
+
* input. Storage adapters commonly map this value to a directory name, so an
|
|
39
|
+
* unchecked slash, absolute path, or `..` would otherwise escape the base
|
|
40
|
+
* knowledge root.
|
|
41
|
+
*/
|
|
42
|
+
async function requireConfiguredRepoName(workspacePath, repoName) {
|
|
43
|
+
const candidate = repoName.trim();
|
|
44
|
+
if (!candidate || candidate.includes('/') || candidate.includes('\\') || candidate === '.' || candidate === '..') {
|
|
45
|
+
throw new KnowledgeRepositoryError(`Invalid repository name "${repoName}".`);
|
|
46
|
+
}
|
|
47
|
+
const feature = await loadFeatureConfig(workspacePath);
|
|
48
|
+
if (!feature) {
|
|
49
|
+
throw new KnowledgeRepositoryError(`Workspace configuration not found at ${workspacePath}.`);
|
|
50
|
+
}
|
|
51
|
+
const matches = feature.repos
|
|
52
|
+
.map((repoPath) => path.basename(repoPath))
|
|
53
|
+
.filter((name) => name === candidate);
|
|
54
|
+
if (matches.length === 0) {
|
|
55
|
+
throw new KnowledgeRepositoryError(`Repository "${candidate}" is not in this workspace.`);
|
|
56
|
+
}
|
|
57
|
+
if (matches.length > 1) {
|
|
58
|
+
throw new KnowledgeRepositoryError(`Repository name "${candidate}" is ambiguous in this workspace.`);
|
|
59
|
+
}
|
|
60
|
+
return matches[0];
|
|
61
|
+
}
|
|
24
62
|
/**
|
|
25
63
|
* Heading aliases per entry type for the workspace and base knowledge files.
|
|
26
64
|
* The first alias is the canonical heading used when the section is missing.
|
|
@@ -63,9 +101,40 @@ function isPlaceholder(line) {
|
|
|
63
101
|
function todayIso() {
|
|
64
102
|
return new Date().toISOString().slice(0, 10);
|
|
65
103
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
104
|
+
export const MAX_TITLE_CHARS = 60;
|
|
105
|
+
export const MAX_EVIDENCE_CHARS = 200;
|
|
106
|
+
export function knowledgeTitleSlug(title) {
|
|
107
|
+
const normalized = (title ?? '').replace(/\s+/g, ' ').trim();
|
|
108
|
+
if (!normalized)
|
|
109
|
+
throw new Error('Knowledge entry title is required.');
|
|
110
|
+
if (normalized.length > MAX_TITLE_CHARS) {
|
|
111
|
+
throw new Error(`Knowledge entry title is ${normalized.length} characters; the limit is ${MAX_TITLE_CHARS}. Titles are rejected rather than truncated.`);
|
|
112
|
+
}
|
|
113
|
+
const slug = slugify(normalized);
|
|
114
|
+
if (!slug)
|
|
115
|
+
throw new Error('Knowledge entry title must contain at least one letter or number.');
|
|
116
|
+
return slug;
|
|
117
|
+
}
|
|
118
|
+
function normaliseScope(scope) {
|
|
119
|
+
if (!scope)
|
|
120
|
+
return undefined;
|
|
121
|
+
const normalized = scope.replace(/\s+/g, ' ').trim();
|
|
122
|
+
if (!/^(repo|path|seam):[^\s].*$/i.test(normalized)) {
|
|
123
|
+
throw new Error('Knowledge scope must use repo:<name>, path:<repo/path>, or seam:<name>.');
|
|
124
|
+
}
|
|
125
|
+
if (normalized.includes('..') || path.isAbsolute(normalized.slice(normalized.indexOf(':') + 1))) {
|
|
126
|
+
throw new Error('Knowledge scope cannot contain parent traversal or an absolute path.');
|
|
127
|
+
}
|
|
128
|
+
return normalized;
|
|
129
|
+
}
|
|
130
|
+
function normaliseEvidence(evidence) {
|
|
131
|
+
if (!evidence)
|
|
132
|
+
return undefined;
|
|
133
|
+
const normalized = evidence.replace(/\s+/g, ' ').trim();
|
|
134
|
+
if (normalized.length > MAX_EVIDENCE_CHARS) {
|
|
135
|
+
throw new Error(`Knowledge evidence is ${normalized.length} characters; the limit is ${MAX_EVIDENCE_CHARS}.`);
|
|
136
|
+
}
|
|
137
|
+
return normalized || undefined;
|
|
69
138
|
}
|
|
70
139
|
/**
|
|
71
140
|
* Formats a {@link KnowledgeEntry} as the markdown snippet to insert.
|
|
@@ -76,29 +145,14 @@ function truncateHeading(text, max = 60) {
|
|
|
76
145
|
export function formatEntry(entry, _target) {
|
|
77
146
|
const date = (entry.timestamp ?? new Date().toISOString()).slice(0, 10);
|
|
78
147
|
const msg = entry.message.trim();
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
case 'assumption':
|
|
88
|
-
case 'question':
|
|
89
|
-
default: {
|
|
90
|
-
// Lead with the title when there is one, so the file stays skimmable: it
|
|
91
|
-
// only grows, and a reader must be able to judge relevance from the first
|
|
92
|
-
// few words rather than by reading every entry.
|
|
93
|
-
//
|
|
94
|
-
// Without a title, fall back to leading with the date. Deriving a label
|
|
95
|
-
// from the message instead printed its first 60 characters twice — once as
|
|
96
|
-
// the bold label and again in the body — which is pure waste in the one
|
|
97
|
-
// file this project is trying to keep small.
|
|
98
|
-
const title = entry.title?.trim();
|
|
99
|
-
return title ? `- **${title}** (${date}) — ${msg}` : `- **${date}:** ${msg}`;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
148
|
+
const slug = knowledgeTitleSlug(entry.title ?? '');
|
|
149
|
+
const label = entry.type[0].toUpperCase() + entry.type.slice(1);
|
|
150
|
+
const metadata = [];
|
|
151
|
+
if (entry.scope)
|
|
152
|
+
metadata.push(`**Scope:** \`${entry.scope}\``);
|
|
153
|
+
if (entry.evidence)
|
|
154
|
+
metadata.push(`**Evidence:** ${entry.evidence}`);
|
|
155
|
+
return [`### ${date} — ${slug}`, `**${label}:** ${msg}`, ...metadata].join('\n');
|
|
102
156
|
}
|
|
103
157
|
/**
|
|
104
158
|
* Inserts `entryMarkdown` under the first `## ` heading matching any of
|
|
@@ -255,6 +309,62 @@ function normaliseMessage(message) {
|
|
|
255
309
|
}
|
|
256
310
|
return normalised;
|
|
257
311
|
}
|
|
312
|
+
function validateNewEntry(entry) {
|
|
313
|
+
if (entry.type === 'progress') {
|
|
314
|
+
throw new Error('Progress is derived from live git state and cannot be authored as knowledge. Use `nexusflow progress`.');
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
...entry,
|
|
318
|
+
message: normaliseMessage(entry.message),
|
|
319
|
+
title: knowledgeTitleSlug(entry.title ?? ''),
|
|
320
|
+
scope: normaliseScope(entry.scope),
|
|
321
|
+
evidence: normaliseEvidence(entry.evidence),
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
function assertNoHeadingConflict(content, entryMarkdown) {
|
|
325
|
+
const heading = entryMarkdown.split(/\r?\n/, 1)[0] ?? '';
|
|
326
|
+
if (heading.startsWith('### ') && content.split(/\r?\n/).includes(heading) && !content.includes(entryMarkdown)) {
|
|
327
|
+
throw new Error(`Knowledge heading "${heading.slice(4)}" already exists with different content. Choose a distinct title.`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async function commitKnowledgeArtifact(workspacePath, message, relativePath) {
|
|
331
|
+
// A non-local adapter owns its own durability. Do not turn a successful
|
|
332
|
+
// adapter write into an error by trying to commit a different local path.
|
|
333
|
+
if (getActiveStorageProvider().meta.name !== 'local') {
|
|
334
|
+
return { status: 'skipped', message: 'Active storage adapter is not local; Git auto-commit was skipped.' };
|
|
335
|
+
}
|
|
336
|
+
try {
|
|
337
|
+
await fs.access(path.join(workspacePath, '.git'));
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT') {
|
|
341
|
+
return { status: 'skipped', message: 'Workspace artifact repository is not initialized.' };
|
|
342
|
+
}
|
|
343
|
+
return { status: 'failed', message: error instanceof Error ? error.message : String(error) };
|
|
344
|
+
}
|
|
345
|
+
try {
|
|
346
|
+
const result = await commitExactWorkspaceArtifacts(workspacePath, message, [relativePath]);
|
|
347
|
+
return { status: result.committed ? 'committed' : 'already-committed' };
|
|
348
|
+
}
|
|
349
|
+
catch (error) {
|
|
350
|
+
// The knowledge write is already durable. Returning its precise partial
|
|
351
|
+
// state prevents callers from retrying and appending a duplicate entry.
|
|
352
|
+
return { status: 'failed', message: error instanceof Error ? error.message : String(error) };
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
async function withKnowledgeLock(workspacePath, operation) {
|
|
356
|
+
const release = await acquireLock(path.join(workspacePath, '.nexusflow', 'knowledge.lock'), {
|
|
357
|
+
staleMs: 60_000,
|
|
358
|
+
timeoutMs: 30_000,
|
|
359
|
+
timeoutMessage: 'Another NexusFlow operation is updating workspace knowledge.',
|
|
360
|
+
});
|
|
361
|
+
try {
|
|
362
|
+
return await operation();
|
|
363
|
+
}
|
|
364
|
+
finally {
|
|
365
|
+
await release();
|
|
366
|
+
}
|
|
367
|
+
}
|
|
258
368
|
/** Reads the workspace knowledge file, or `null` when it does not exist. */
|
|
259
369
|
export async function readWorkspaceKnowledge(workspacePath) {
|
|
260
370
|
const featureId = await resolveFeatureId(workspacePath);
|
|
@@ -265,26 +375,38 @@ export async function readWorkspaceKnowledge(workspacePath) {
|
|
|
265
375
|
}
|
|
266
376
|
/** Reads a repo's base knowledge file, or `null` when it does not exist. */
|
|
267
377
|
export async function readBaseKnowledge(workspacePath, repoName) {
|
|
268
|
-
|
|
378
|
+
const configuredRepo = await requireConfiguredRepoName(workspacePath, repoName);
|
|
379
|
+
if (!(await baseFileExists(workspacePath, configuredRepo, KNOWLEDGE_FILE))) {
|
|
269
380
|
return null;
|
|
270
381
|
}
|
|
271
|
-
return readBaseFile(workspacePath,
|
|
382
|
+
return readBaseFile(workspacePath, configuredRepo, KNOWLEDGE_FILE);
|
|
272
383
|
}
|
|
273
384
|
/** Appends a formatted entry to the workspace knowledge file (creating it if missing). */
|
|
274
385
|
export async function addWorkspaceKnowledge(workspacePath, entry) {
|
|
275
|
-
|
|
386
|
+
return withKnowledgeLock(workspacePath, () => addWorkspaceKnowledgeUnlocked(workspacePath, entry));
|
|
387
|
+
}
|
|
388
|
+
async function addWorkspaceKnowledgeUnlocked(workspacePath, entry) {
|
|
389
|
+
const checked = validateNewEntry(entry);
|
|
276
390
|
const featureId = await resolveFeatureId(workspacePath);
|
|
277
391
|
const exists = await workspaceFileExists(workspacePath, featureId, KNOWLEDGE_FILE);
|
|
278
392
|
const content = exists
|
|
279
393
|
? await readWorkspaceFile(workspacePath, featureId, KNOWLEDGE_FILE)
|
|
280
394
|
: `# Workspace Knowledge — ${featureId}\n`;
|
|
281
395
|
const aliases = SECTION_ALIASES[checked.type].workspace;
|
|
282
|
-
const
|
|
283
|
-
|
|
396
|
+
const entryMarkdown = formatEntry(checked, 'workspace');
|
|
397
|
+
assertNoHeadingConflict(content, entryMarkdown);
|
|
398
|
+
const duplicate = content.includes(entryMarkdown);
|
|
399
|
+
if (!duplicate) {
|
|
400
|
+
const updated = insertUnderHeading(content, aliases, entryMarkdown);
|
|
401
|
+
await writeWorkspaceFile(workspacePath, featureId, KNOWLEDGE_FILE, updated);
|
|
402
|
+
}
|
|
403
|
+
const commit = await commitKnowledgeArtifact(workspacePath, `docs(knowledge): remember ${checked.title}`, KNOWLEDGE_FILE);
|
|
284
404
|
return {
|
|
285
405
|
location: resolveWorkspaceFileUrl(workspacePath, featureId, KNOWLEDGE_FILE),
|
|
286
406
|
section: aliases[0],
|
|
287
407
|
createdFile: !exists,
|
|
408
|
+
duplicate,
|
|
409
|
+
commit,
|
|
288
410
|
};
|
|
289
411
|
}
|
|
290
412
|
/**
|
|
@@ -300,18 +422,28 @@ async function insertIntoBase(workspacePath, repoName, type, entryMarkdown) {
|
|
|
300
422
|
const content = exists
|
|
301
423
|
? await readBaseFile(workspacePath, repoName, KNOWLEDGE_FILE)
|
|
302
424
|
: buildBaseKnowledgeContent(repoName);
|
|
303
|
-
|
|
304
|
-
|
|
425
|
+
assertNoHeadingConflict(content, entryMarkdown);
|
|
426
|
+
const duplicate = content.includes(entryMarkdown);
|
|
427
|
+
if (!duplicate) {
|
|
428
|
+
const updated = insertUnderHeading(content, aliases, entryMarkdown);
|
|
429
|
+
await writeBaseFile(workspacePath, repoName, KNOWLEDGE_FILE, updated);
|
|
430
|
+
}
|
|
431
|
+
const commit = await commitKnowledgeArtifact(workspacePath, `docs(knowledge): remember ${repoName} learning`, path.join('.nexusflow', 'base', repoName, KNOWLEDGE_FILE));
|
|
305
432
|
return {
|
|
306
433
|
location: resolveBaseFileUrl(workspacePath, repoName, KNOWLEDGE_FILE),
|
|
307
434
|
section: aliases[0],
|
|
308
435
|
createdFile: !exists,
|
|
436
|
+
duplicate,
|
|
437
|
+
commit,
|
|
309
438
|
};
|
|
310
439
|
}
|
|
311
440
|
/** Appends a formatted entry to a repo's base knowledge file (creating it if missing). */
|
|
312
441
|
export async function addBaseKnowledge(workspacePath, repoName, entry) {
|
|
313
|
-
const
|
|
314
|
-
return
|
|
442
|
+
const configuredRepo = await requireConfiguredRepoName(workspacePath, repoName);
|
|
443
|
+
return withKnowledgeLock(workspacePath, async () => {
|
|
444
|
+
const checked = validateNewEntry(entry);
|
|
445
|
+
return insertIntoBase(workspacePath, configuredRepo, checked.type, formatEntry(checked, 'base'));
|
|
446
|
+
});
|
|
315
447
|
}
|
|
316
448
|
/**
|
|
317
449
|
* Promotes selected workspace learnings into a repo's persistent base
|
|
@@ -320,9 +452,14 @@ export async function addBaseKnowledge(workspacePath, repoName, entry) {
|
|
|
320
452
|
* in the workspace file is replaced with an auditable "promoted" note.
|
|
321
453
|
*/
|
|
322
454
|
export async function promoteKnowledge(workspacePath, options) {
|
|
455
|
+
const repoName = await requireConfiguredRepoName(workspacePath, options.repoName);
|
|
456
|
+
return withKnowledgeLock(workspacePath, () => promoteKnowledgeUnlocked(workspacePath, { ...options, repoName }));
|
|
457
|
+
}
|
|
458
|
+
async function promoteKnowledgeUnlocked(workspacePath, options) {
|
|
323
459
|
const { repoName, entries, mode = 'copy' } = options;
|
|
324
460
|
const promotable = entries.filter((e) => e.type && SECTION_ALIASES[e.type].base);
|
|
325
461
|
let baseLocation = resolveBaseFileUrl(workspacePath, repoName, KNOWLEDGE_FILE);
|
|
462
|
+
const commitFailures = [];
|
|
326
463
|
for (const e of promotable) {
|
|
327
464
|
// Preserve the entry's original markdown rather than reformatting it: `text`
|
|
328
465
|
// is a whole bullet line or `### ` block, so running it back through
|
|
@@ -333,6 +470,9 @@ export async function promoteKnowledge(workspacePath, options) {
|
|
|
333
470
|
// free text rather than a parsed entry must cap it themselves.
|
|
334
471
|
const res = await insertIntoBase(workspacePath, repoName, e.type, e.text);
|
|
335
472
|
baseLocation = res.location;
|
|
473
|
+
if (res.commit.status === 'failed') {
|
|
474
|
+
commitFailures.push(res.commit.message ?? 'Base knowledge commit failed.');
|
|
475
|
+
}
|
|
336
476
|
}
|
|
337
477
|
if (mode === 'move' && promotable.length > 0) {
|
|
338
478
|
const featureId = await resolveFeatureId(workspacePath);
|
|
@@ -343,8 +483,16 @@ export async function promoteKnowledge(workspacePath, options) {
|
|
|
343
483
|
content = content.replace(e.text, `- Promoted to ${repoName} base knowledge on ${date}.`);
|
|
344
484
|
}
|
|
345
485
|
await writeWorkspaceFile(workspacePath, featureId, KNOWLEDGE_FILE, content);
|
|
486
|
+
const commit = await commitKnowledgeArtifact(workspacePath, `docs(knowledge): promote to ${repoName}`, KNOWLEDGE_FILE);
|
|
487
|
+
if (commit.status === 'failed') {
|
|
488
|
+
commitFailures.push(commit.message ?? 'Workspace knowledge commit failed.');
|
|
489
|
+
}
|
|
346
490
|
}
|
|
347
491
|
}
|
|
348
|
-
return {
|
|
492
|
+
return {
|
|
493
|
+
promotedCount: promotable.length,
|
|
494
|
+
baseLocation,
|
|
495
|
+
...(commitFailures.length ? { commitFailures } : {}),
|
|
496
|
+
};
|
|
349
497
|
}
|
|
350
498
|
//# sourceMappingURL=knowledge.js.map
|