@nepopsx/cli 0.0.4 → 0.0.5
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/dist/agents/configuration.d.ts +9 -0
- package/dist/agents/configuration.d.ts.map +1 -0
- package/dist/agents/configuration.js +57 -0
- package/dist/agents/configuration.js.map +1 -0
- package/dist/agents/remote-config.d.ts +30 -0
- package/dist/agents/remote-config.d.ts.map +1 -0
- package/dist/agents/remote-config.js +102 -0
- package/dist/agents/remote-config.js.map +1 -0
- package/dist/commands/activate.d.ts.map +1 -1
- package/dist/commands/activate.js +4 -3
- package/dist/commands/activate.js.map +1 -1
- package/dist/commands/decode.js +2 -2
- package/dist/commands/decode.js.map +1 -1
- package/dist/commands/doctor.js +16 -16
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +353 -18
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +157 -18
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.d.ts +0 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +3 -3
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/push-learnings.d.ts +14 -0
- package/dist/commands/push-learnings.d.ts.map +1 -0
- package/dist/commands/push-learnings.js +186 -0
- package/dist/commands/push-learnings.js.map +1 -0
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +130 -15
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +159 -138
- package/dist/commands/sync.js.map +1 -1
- package/dist/config/api-config.d.ts.map +1 -1
- package/dist/config/api-config.js +4 -0
- package/dist/config/api-config.js.map +1 -1
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +7 -0
- package/dist/constants.js.map +1 -0
- package/dist/customs/instructions.d.ts +3 -0
- package/dist/customs/instructions.d.ts.map +1 -0
- package/dist/customs/instructions.js +51 -0
- package/dist/customs/instructions.js.map +1 -0
- package/dist/enrichment/confirm.d.ts +17 -0
- package/dist/enrichment/confirm.d.ts.map +1 -0
- package/dist/enrichment/confirm.js +44 -0
- package/dist/enrichment/confirm.js.map +1 -0
- package/dist/enrichment/state.d.ts +8 -0
- package/dist/enrichment/state.d.ts.map +1 -0
- package/dist/enrichment/state.js +107 -0
- package/dist/enrichment/state.js.map +1 -0
- package/dist/enrichment/types.d.ts +13 -0
- package/dist/enrichment/types.d.ts.map +1 -0
- package/dist/enrichment/types.js +2 -0
- package/dist/enrichment/types.js.map +1 -0
- package/dist/enrichment/workflow.d.ts +35 -0
- package/dist/enrichment/workflow.d.ts.map +1 -0
- package/dist/enrichment/workflow.js +305 -0
- package/dist/enrichment/workflow.js.map +1 -0
- package/dist/generator/package-renderer.d.ts +4 -12
- package/dist/generator/package-renderer.d.ts.map +1 -1
- package/dist/generator/package-renderer.js +41 -61
- package/dist/generator/package-renderer.js.map +1 -1
- package/dist/generator/render.d.ts +5 -11
- package/dist/generator/render.d.ts.map +1 -1
- package/dist/generator/render.js +13 -3
- package/dist/generator/render.js.map +1 -1
- package/dist/index.js +13 -4
- package/dist/index.js.map +1 -1
- package/dist/licensing/installer.d.ts +9 -1
- package/dist/licensing/installer.d.ts.map +1 -1
- package/dist/licensing/installer.js +36 -22
- package/dist/licensing/installer.js.map +1 -1
- package/dist/licensing/license-manager.d.ts +6 -0
- package/dist/licensing/license-manager.d.ts.map +1 -1
- package/dist/licensing/license-manager.js +12 -35
- package/dist/licensing/license-manager.js.map +1 -1
- package/dist/licensing/template-fetch.d.ts +3 -2
- package/dist/licensing/template-fetch.d.ts.map +1 -1
- package/dist/licensing/template-fetch.js +10 -41
- package/dist/licensing/template-fetch.js.map +1 -1
- package/dist/scan/auto-bootstrap.d.ts +3 -0
- package/dist/scan/auto-bootstrap.d.ts.map +1 -0
- package/dist/scan/auto-bootstrap.js +30 -0
- package/dist/scan/auto-bootstrap.js.map +1 -0
- package/dist/scan/llm/anthropic.d.ts.map +1 -1
- package/dist/scan/llm/anthropic.js +1 -10
- package/dist/scan/llm/anthropic.js.map +1 -1
- package/dist/scan/llm/ollama.d.ts.map +1 -1
- package/dist/scan/llm/ollama.js +1 -10
- package/dist/scan/llm/ollama.js.map +1 -1
- package/dist/scan/llm/openai.d.ts.map +1 -1
- package/dist/scan/llm/openai.js +1 -10
- package/dist/scan/llm/openai.js.map +1 -1
- package/dist/utils/fetch.d.ts +9 -0
- package/dist/utils/fetch.d.ts.map +1 -0
- package/dist/utils/fetch.js +18 -0
- package/dist/utils/fetch.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/customs/instructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAG7B,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,YAAY,GAAwB,EAAE,CAAC;IAE7C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,YAAY,CAAC;IAEjD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAQ,EAAE;QACpC,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEhC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,WAAW;gBAAE,SAAS;YAE9D,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAErC,YAAY,CAAC,IAAI,CAAC;gBAChB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,UAAU;gBAC1C,KAAK,EAAE,MAAM,CAAC,WAAW,EAAE,KAAK;gBAChC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CAAC,UAAU,CAAC,CAAC;IACpB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,gBAAgB,GAAG,mCAAmC,CAAC;IAC7D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAE1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IACjC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YACxB,WAAW,EAAE;gBACX,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;gBACvF,KAAK,EAAE,OAAO,WAAW,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAC9E;SACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;IACjC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ConfigEnrichmentMetadata } from './types.js';
|
|
2
|
+
interface PendingPush {
|
|
3
|
+
label: string;
|
|
4
|
+
enrichment: ConfigEnrichmentMetadata;
|
|
5
|
+
}
|
|
6
|
+
export interface BackendPushManifest {
|
|
7
|
+
workspace: PendingPush | null;
|
|
8
|
+
agents: PendingPush[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Show a summary of what will be pushed to the backend and ask
|
|
12
|
+
* the user for confirmation. Returns `true` if the user confirms
|
|
13
|
+
* (or `--yes` was set), `false` if they decline.
|
|
14
|
+
*/
|
|
15
|
+
export declare function confirmBackendPush(manifest: BackendPushManifest, yes: boolean): Promise<boolean>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=confirm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm.d.ts","sourceRoot":"","sources":["../../src/enrichment/confirm.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3D,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,wBAAwB,CAAC;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,OAAO,CAAC,CAmDlB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { confirm } from '@inquirer/prompts';
|
|
3
|
+
/**
|
|
4
|
+
* Show a summary of what will be pushed to the backend and ask
|
|
5
|
+
* the user for confirmation. Returns `true` if the user confirms
|
|
6
|
+
* (or `--yes` was set), `false` if they decline.
|
|
7
|
+
*/
|
|
8
|
+
export async function confirmBackendPush(manifest, yes) {
|
|
9
|
+
const items = [];
|
|
10
|
+
if (manifest.workspace)
|
|
11
|
+
items.push(manifest.workspace);
|
|
12
|
+
items.push(...manifest.agents);
|
|
13
|
+
if (items.length === 0) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
console.log(chalk.bold.cyan('\n📤 Ready to push enriched configs to backend\n'));
|
|
17
|
+
if (manifest.workspace) {
|
|
18
|
+
const ws = manifest.workspace;
|
|
19
|
+
console.log(` Workspace: ${chalk.bold(ws.label)} ` +
|
|
20
|
+
chalk.dim(`(${ws.enrichment.status}, model: ${ws.enrichment.model ?? 'n/a'}, hash: ${ws.enrichment.configHash.slice(0, 8)}…)`));
|
|
21
|
+
}
|
|
22
|
+
if (manifest.agents.length > 0) {
|
|
23
|
+
console.log(' Agents:');
|
|
24
|
+
for (const agent of manifest.agents) {
|
|
25
|
+
console.log(` • ${chalk.bold(agent.label)} ` +
|
|
26
|
+
chalk.dim(`(${agent.enrichment.status}, model: ${agent.enrichment.model ?? 'n/a'})`));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
console.log(chalk.dim('\n This will update the backend\'s stored configs and mark them as\n' +
|
|
30
|
+
' enriched, enabling bundle delivery for install/sync.\n'));
|
|
31
|
+
if (yes) {
|
|
32
|
+
console.log(chalk.dim(' --yes flag set, skipping confirmation.\n'));
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
const ok = await confirm({
|
|
36
|
+
message: 'Push enriched configs to backend?',
|
|
37
|
+
default: true,
|
|
38
|
+
});
|
|
39
|
+
if (!ok) {
|
|
40
|
+
console.warn(chalk.yellow(' Push cancelled. Local files were still written.\n'));
|
|
41
|
+
}
|
|
42
|
+
return ok;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=confirm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm.js","sourceRoot":"","sources":["../../src/enrichment/confirm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAa5C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAA6B,EAC7B,GAAY;IAEZ,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,IAAI,QAAQ,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAEjF,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC9B,OAAO,CAAC,GAAG,CACT,gBAAgB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG;YACrC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,YAAY,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,KAAK,WAAW,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CACjI,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CACT,SAAS,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;gBACjC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,YAAY,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,CACvF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CACP,uEAAuE;QACrE,0DAA0D,CAC7D,CACF,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC;QACvB,OAAO,EAAE,mCAAmC;QAC5C,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ConfigEnrichmentMetadata, LocalEnrichmentState } from './types.js';
|
|
2
|
+
export declare function createEmptyEnrichmentState(): LocalEnrichmentState;
|
|
3
|
+
export declare function readLocalEnrichmentState(rootDir: string): LocalEnrichmentState;
|
|
4
|
+
export declare function writeLocalEnrichmentState(rootDir: string, state: LocalEnrichmentState): void;
|
|
5
|
+
export declare function hashRecord(record: Record<string, unknown>): string;
|
|
6
|
+
export declare function createEnrichmentMetadata(config: Record<string, unknown>, source: ConfigEnrichmentMetadata['source'], updatedAt: string, model?: string): ConfigEnrichmentMetadata;
|
|
7
|
+
export declare function retargetEnrichmentMetadata(base: ConfigEnrichmentMetadata, config: Record<string, unknown>): ConfigEnrichmentMetadata;
|
|
8
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/enrichment/state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAKpB,wBAAgB,0BAA0B,IAAI,oBAAoB,CAKjE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAe9E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAQ5F;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAIlE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,EAC1C,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,wBAAwB,CAQ1B;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,wBAAwB,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,wBAAwB,CAQ1B"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
const ENRICHMENT_STATE_DIR = '.nepopsx';
|
|
5
|
+
const ENRICHMENT_STATE_FILE = '.enrichment-state.json';
|
|
6
|
+
export function createEmptyEnrichmentState() {
|
|
7
|
+
return {
|
|
8
|
+
workspace: null,
|
|
9
|
+
agents: {},
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function readLocalEnrichmentState(rootDir) {
|
|
13
|
+
const filePath = join(rootDir, ENRICHMENT_STATE_DIR, ENRICHMENT_STATE_FILE);
|
|
14
|
+
if (!existsSync(filePath)) {
|
|
15
|
+
return createEmptyEnrichmentState();
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const raw = JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
19
|
+
return {
|
|
20
|
+
workspace: normalizeMetadata(raw.workspace),
|
|
21
|
+
agents: normalizeAgents(raw.agents),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return createEmptyEnrichmentState();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function writeLocalEnrichmentState(rootDir, state) {
|
|
29
|
+
const dir = join(rootDir, ENRICHMENT_STATE_DIR);
|
|
30
|
+
if (!existsSync(dir)) {
|
|
31
|
+
mkdirSync(dir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
const filePath = join(dir, ENRICHMENT_STATE_FILE);
|
|
34
|
+
writeFileSync(filePath, JSON.stringify(state, null, 2) + '\n', 'utf-8');
|
|
35
|
+
}
|
|
36
|
+
export function hashRecord(record) {
|
|
37
|
+
return createHash('sha256')
|
|
38
|
+
.update(JSON.stringify(normalizeHashValue(record)))
|
|
39
|
+
.digest('hex');
|
|
40
|
+
}
|
|
41
|
+
export function createEnrichmentMetadata(config, source, updatedAt, model) {
|
|
42
|
+
return {
|
|
43
|
+
status: 'enriched',
|
|
44
|
+
configHash: hashRecord(config),
|
|
45
|
+
updatedAt,
|
|
46
|
+
...(source ? { source } : {}),
|
|
47
|
+
...(model ? { model } : {}),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function retargetEnrichmentMetadata(base, config) {
|
|
51
|
+
return {
|
|
52
|
+
status: 'enriched',
|
|
53
|
+
configHash: hashRecord(config),
|
|
54
|
+
updatedAt: base.updatedAt,
|
|
55
|
+
...(base.source ? { source: base.source } : {}),
|
|
56
|
+
...(base.model ? { model: base.model } : {}),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function normalizeAgents(value) {
|
|
60
|
+
if (!value || typeof value !== 'object') {
|
|
61
|
+
return {};
|
|
62
|
+
}
|
|
63
|
+
const normalized = {};
|
|
64
|
+
for (const [agentName, metadata] of Object.entries(value)) {
|
|
65
|
+
const next = normalizeMetadata(metadata);
|
|
66
|
+
if (next) {
|
|
67
|
+
normalized[agentName] = next;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return normalized;
|
|
71
|
+
}
|
|
72
|
+
function normalizeMetadata(value) {
|
|
73
|
+
if (!value || typeof value !== 'object') {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
if (value.status !== 'default' && value.status !== 'enriched') {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
if (typeof value.configHash !== 'string' || typeof value.updatedAt !== 'string') {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
status: value.status,
|
|
84
|
+
configHash: value.configHash,
|
|
85
|
+
updatedAt: value.updatedAt,
|
|
86
|
+
...(value.source ? { source: value.source } : {}),
|
|
87
|
+
...(value.model ? { model: value.model } : {}),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function normalizeHashValue(value) {
|
|
91
|
+
if (Array.isArray(value)) {
|
|
92
|
+
return value.map((entry) => normalizeHashValue(entry));
|
|
93
|
+
}
|
|
94
|
+
if (!isRecord(value)) {
|
|
95
|
+
return value;
|
|
96
|
+
}
|
|
97
|
+
return Object.keys(value)
|
|
98
|
+
.sort()
|
|
99
|
+
.reduce((result, key) => {
|
|
100
|
+
result[key] = normalizeHashValue(value[key]);
|
|
101
|
+
return result;
|
|
102
|
+
}, {});
|
|
103
|
+
}
|
|
104
|
+
function isRecord(value) {
|
|
105
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/enrichment/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAMjC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AACxC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAEvD,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAe;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,CAAC;IAC5E,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,0BAA0B,EAAE,CAAC;IACtC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAkC,CAAC;QACzF,OAAO;YACL,SAAS,EAAE,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;YAC3C,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;SACpC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,0BAA0B,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAe,EAAE,KAA2B;IACpF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAClD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA+B;IACxD,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;SAClD,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAA+B,EAC/B,MAA0C,EAC1C,SAAiB,EACjB,KAAc;IAEd,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;QAC9B,SAAS;QACT,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,IAA8B,EAC9B,MAA+B;IAE/B,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC;QAC9B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,KAA0D;IAE1D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,UAAU,GAA6C,EAAE,CAAC;IAChE,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CACxB,KAA2D;IAE3D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;SACtB,IAAI,EAAE;SACN,MAAM,CAA0B,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;QAC/C,MAAM,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;AACX,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type EnrichmentStatus = 'default' | 'enriched';
|
|
2
|
+
export interface ConfigEnrichmentMetadata {
|
|
3
|
+
status: EnrichmentStatus;
|
|
4
|
+
configHash: string;
|
|
5
|
+
updatedAt: string;
|
|
6
|
+
source?: 'llm' | 'manual' | 'system';
|
|
7
|
+
model?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface LocalEnrichmentState {
|
|
10
|
+
workspace: ConfigEnrichmentMetadata | null;
|
|
11
|
+
agents: Record<string, ConfigEnrichmentMetadata>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/enrichment/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtD,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC3C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;CAClD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/enrichment/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type License, type WorkspaceConfig } from '@nepopsx/core';
|
|
2
|
+
import type { CustomInstruction } from '../generator/render.js';
|
|
3
|
+
import type { ConfigEnrichmentMetadata, LocalEnrichmentState } from './types.js';
|
|
4
|
+
import { createProvider } from '../scan/llm/factory.js';
|
|
5
|
+
export interface EnrichmentGateResult {
|
|
6
|
+
ready: boolean;
|
|
7
|
+
reason?: string;
|
|
8
|
+
localState: LocalEnrichmentState;
|
|
9
|
+
config: WorkspaceConfig;
|
|
10
|
+
workspaceEnrichment: ConfigEnrichmentMetadata | null;
|
|
11
|
+
}
|
|
12
|
+
export interface SingleAgentEnrichmentResult {
|
|
13
|
+
config: Record<string, unknown>;
|
|
14
|
+
enrichment: ConfigEnrichmentMetadata;
|
|
15
|
+
}
|
|
16
|
+
export interface ProviderRuntime {
|
|
17
|
+
model: string;
|
|
18
|
+
providerName: string;
|
|
19
|
+
chat: ReturnType<typeof createProvider>['chat'];
|
|
20
|
+
}
|
|
21
|
+
export declare function checkEnrichmentGate(rootDir: string): EnrichmentGateResult;
|
|
22
|
+
export declare function checkAgentEnrichmentGate(localState: LocalEnrichmentState, agentName: string, currentConfig: Record<string, unknown>): {
|
|
23
|
+
ready: boolean;
|
|
24
|
+
reason?: string;
|
|
25
|
+
enrichment?: ConfigEnrichmentMetadata;
|
|
26
|
+
};
|
|
27
|
+
export declare function enrichSingleAgent(rootDir: string, license: License, agentName: string, requestedVersion: string, workspaceConfig: WorkspaceConfig, localState: LocalEnrichmentState, workspaceEnrichment: ConfigEnrichmentMetadata, options: {
|
|
28
|
+
yes?: boolean;
|
|
29
|
+
}): Promise<SingleAgentEnrichmentResult>;
|
|
30
|
+
export declare function enrichAgentConfig(agentName: string, workspaceConfig: WorkspaceConfig, currentConfig: Record<string, unknown>, packageManifest: Record<string, unknown>, customInstructions: CustomInstruction[], provider: ProviderRuntime): Promise<Record<string, unknown>>;
|
|
31
|
+
export declare function buildAgentEnrichmentPrompt(agentName: string, workspaceConfig: WorkspaceConfig, currentConfig: Record<string, unknown>, packageManifest: Record<string, unknown>, customInstructions: CustomInstruction[]): string;
|
|
32
|
+
export declare function readWorkspaceConfig(rootDir: string): WorkspaceConfig;
|
|
33
|
+
export declare function writeAgentConfigFile(rootDir: string, relativePath: string, config: Record<string, unknown>): void;
|
|
34
|
+
export declare function buildConfigSchema(sample: Record<string, unknown>): Record<string, unknown>;
|
|
35
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/enrichment/workflow.ts"],"names":[],"mappings":"AAsBA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,eAAe,EAErB,MAAM,eAAe,CAAC;AAOvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAOhE,OAAO,KAAK,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGjF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAMxD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,oBAAoB,CAAC;IACjC,MAAM,EAAE,eAAe,CAAC;IACxB,mBAAmB,EAAE,wBAAwB,GAAG,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,EAAE,wBAAwB,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;CACjD;AAKD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAiCzE;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,oBAAoB,EAChC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACrC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,wBAAwB,CAAA;CAAE,CAmB5E;AAOD,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE,oBAAoB,EAChC,mBAAmB,EAAE,wBAAwB,EAC7C,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GACzB,OAAO,CAAC,2BAA2B,CAAC,CAoGtC;AAID,wBAAsB,iBAAiB,CACrC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,kBAAkB,EAAE,iBAAiB,EAAE,EACvC,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAiClC;AAID,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,kBAAkB,EAAE,iBAAiB,EAAE,GACtC,MAAM,CAwDR;AAID,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CASpE;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,IAAI,CAQN;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK1F"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
// @nepopsx/cli — Enrichment workflow: gate check + single-agent enrichment
|
|
2
|
+
//
|
|
3
|
+
// Architecture:
|
|
4
|
+
// scan command → full workspace + agent enrichment (the only enrichment surface)
|
|
5
|
+
// install command → checkEnrichmentGate() + enrichSingleAgent() if workspace already done
|
|
6
|
+
// sync command → checkEnrichmentGate() only (fail fast if not enriched)
|
|
7
|
+
//
|
|
8
|
+
// This module exports:
|
|
9
|
+
// checkEnrichmentGate — read-only check, no LLM, no push
|
|
10
|
+
// checkAgentEnrichmentGate — per-agent read-only check
|
|
11
|
+
// enrichSingleAgent — enriches one agent when workspace is already enriched
|
|
12
|
+
// enrichAgentConfig — raw LLM enrichment (also used by scan)
|
|
13
|
+
// buildAgentEnrichmentPrompt — prompt builder (also used by scan)
|
|
14
|
+
// readWorkspaceConfig — shared helper
|
|
15
|
+
// writeAgentConfigFile — shared helper
|
|
16
|
+
// buildConfigSchema — shared helper
|
|
17
|
+
import chalk from 'chalk';
|
|
18
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
19
|
+
import { resolve } from 'node:path';
|
|
20
|
+
import { parse, stringify } from 'yaml';
|
|
21
|
+
import { confirm } from '@inquirer/prompts';
|
|
22
|
+
import { validateWorkspaceConfig, } from '@nepopsx/core';
|
|
23
|
+
import { getAgentConfigPath } from '../agents/configuration.js';
|
|
24
|
+
import { loadLocalAgentConfig, pushRemoteAgentConfig, } from '../agents/remote-config.js';
|
|
25
|
+
import { loadCustomInstructions } from '../customs/instructions.js';
|
|
26
|
+
import { createEnrichmentMetadata, hashRecord, readLocalEnrichmentState, writeLocalEnrichmentState, } from './state.js';
|
|
27
|
+
import { downloadBootstrapConfig } from '../licensing/installer.js';
|
|
28
|
+
import { resolveScanConfig } from '../scan/config.js';
|
|
29
|
+
import { createProvider } from '../scan/llm/factory.js';
|
|
30
|
+
const WORKSPACE_CONFIG_PATH = '.nepopsx/workspace.yaml';
|
|
31
|
+
// ─── checkEnrichmentGate ─────────────────────────────────────
|
|
32
|
+
// Read-only check. Never runs LLM. Never pushes to backend.
|
|
33
|
+
export function checkEnrichmentGate(rootDir) {
|
|
34
|
+
const localState = readLocalEnrichmentState(rootDir);
|
|
35
|
+
const config = readWorkspaceConfig(rootDir);
|
|
36
|
+
const currentHash = hashRecord(config);
|
|
37
|
+
const workspaceEnrichment = localState.workspace;
|
|
38
|
+
if (!workspaceEnrichment || workspaceEnrichment.status !== 'enriched') {
|
|
39
|
+
return {
|
|
40
|
+
ready: false,
|
|
41
|
+
reason: 'Workspace has not been scanned yet. Run `nepopsx scan` first.',
|
|
42
|
+
localState,
|
|
43
|
+
config,
|
|
44
|
+
workspaceEnrichment: null,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (workspaceEnrichment.configHash !== currentHash) {
|
|
48
|
+
return {
|
|
49
|
+
ready: false,
|
|
50
|
+
reason: 'Workspace config has changed since the last scan. Run `nepopsx scan` to re-enrich.',
|
|
51
|
+
localState,
|
|
52
|
+
config,
|
|
53
|
+
workspaceEnrichment,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
ready: true,
|
|
58
|
+
localState,
|
|
59
|
+
config,
|
|
60
|
+
workspaceEnrichment,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function checkAgentEnrichmentGate(localState, agentName, currentConfig) {
|
|
64
|
+
const saved = localState.agents[agentName];
|
|
65
|
+
if (!saved || saved.status !== 'enriched') {
|
|
66
|
+
return {
|
|
67
|
+
ready: false,
|
|
68
|
+
reason: `Agent "${agentName}" has not been enriched yet.`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const currentHash = hashRecord(currentConfig);
|
|
72
|
+
if (saved.configHash !== currentHash) {
|
|
73
|
+
return {
|
|
74
|
+
ready: false,
|
|
75
|
+
reason: `Agent "${agentName}" config has changed since last enrichment. Re-run scan.`,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return { ready: true, enrichment: saved };
|
|
79
|
+
}
|
|
80
|
+
// ─── enrichSingleAgent ──────────────────────────────────────
|
|
81
|
+
// Called by `install` when workspace is already enriched but
|
|
82
|
+
// the specific agent hasn't been enriched yet. Asks for user
|
|
83
|
+
// confirmation before the LLM call and before the backend push.
|
|
84
|
+
export async function enrichSingleAgent(rootDir, license, agentName, requestedVersion, workspaceConfig, localState, workspaceEnrichment, options) {
|
|
85
|
+
const customInstructions = loadCustomInstructions(resolve(rootDir, workspaceConfig.customs_dir ?? 'customs'));
|
|
86
|
+
const bootstrap = await downloadBootstrapConfig(rootDir, license, agentName, requestedVersion, customInstructions);
|
|
87
|
+
const currentConfig = loadLocalAgentConfig(rootDir, agentName, workspaceConfig.agents?.[agentName]) ?? bootstrap.config;
|
|
88
|
+
const currentHash = hashRecord(currentConfig);
|
|
89
|
+
const defaultHash = hashRecord(bootstrap.config);
|
|
90
|
+
console.log(chalk.bold.cyan(`\n🧠 Enriching ${agentName} config with LLM...\n`));
|
|
91
|
+
if (!options.yes) {
|
|
92
|
+
const proceed = await confirm({
|
|
93
|
+
message: `Enrich ${agentName} config using your LLM provider?`,
|
|
94
|
+
default: true,
|
|
95
|
+
});
|
|
96
|
+
if (!proceed) {
|
|
97
|
+
throw new Error('Agent enrichment cancelled by user.');
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const resolvedScanConfig = await resolveScanConfig({ yes: true }, rootDir);
|
|
101
|
+
const provider = createProvider(resolvedScanConfig);
|
|
102
|
+
const providerRuntime = {
|
|
103
|
+
model: resolvedScanConfig.model,
|
|
104
|
+
providerName: provider.name,
|
|
105
|
+
chat: provider.chat.bind(provider),
|
|
106
|
+
};
|
|
107
|
+
console.log(chalk.dim(` Using ${providerRuntime.providerName} (${providerRuntime.model})...`));
|
|
108
|
+
const enrichedConfig = await enrichAgentConfig(agentName, workspaceConfig, currentConfig, bootstrap.package, customInstructions, providerRuntime);
|
|
109
|
+
const enrichedHash = hashRecord(enrichedConfig);
|
|
110
|
+
if (enrichedHash === currentHash && currentHash === defaultHash) {
|
|
111
|
+
throw new Error(`${agentName} config is still at its default shape after enrichment. Cannot proceed.`);
|
|
112
|
+
}
|
|
113
|
+
const configPath = getAgentConfigPath(agentName, workspaceConfig.agents?.[agentName]);
|
|
114
|
+
writeAgentConfigFile(rootDir, configPath, enrichedConfig);
|
|
115
|
+
const enrichment = createEnrichmentMetadata(enrichedConfig, 'llm', new Date().toISOString(), providerRuntime.model);
|
|
116
|
+
localState.agents[agentName] = enrichment;
|
|
117
|
+
writeLocalEnrichmentState(rootDir, localState);
|
|
118
|
+
console.log(chalk.green(` ✓ ${agentName} config enriched and saved locally.`));
|
|
119
|
+
// Backend push with confirmation
|
|
120
|
+
if (!options.yes) {
|
|
121
|
+
console.log(chalk.bold.cyan('\n📤 Push enriched agent config to backend?\n'));
|
|
122
|
+
console.log(` • ${chalk.bold(agentName)} ` +
|
|
123
|
+
chalk.dim(`(model: ${enrichment.model ?? 'n/a'}, hash: ${enrichment.configHash.slice(0, 8)}…)`));
|
|
124
|
+
const pushOk = await confirm({
|
|
125
|
+
message: 'Push to backend?',
|
|
126
|
+
default: true,
|
|
127
|
+
});
|
|
128
|
+
if (!pushOk) {
|
|
129
|
+
console.warn(chalk.yellow(' Push skipped. Local enrichment is saved — you can push later with `scan`.'));
|
|
130
|
+
return { config: enrichedConfig, enrichment };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
await pushRemoteAgentConfig(rootDir, license.key, agentName, enrichedConfig, license.workspace, enrichment);
|
|
134
|
+
console.log(chalk.green(` ✓ ${agentName} config pushed to backend.\n`));
|
|
135
|
+
return { config: enrichedConfig, enrichment };
|
|
136
|
+
}
|
|
137
|
+
// ─── enrichAgentConfig (shared with scan) ────────────────────
|
|
138
|
+
export async function enrichAgentConfig(agentName, workspaceConfig, currentConfig, packageManifest, customInstructions, provider) {
|
|
139
|
+
const schema = buildConfigSchema(currentConfig);
|
|
140
|
+
const response = await provider.chat({
|
|
141
|
+
systemPrompt: 'You are a senior AI agent configuration architect. Return ONLY valid JSON matching the provided schema exactly. Preserve the config structure, remove generic placeholders when they do not fit the repo, and specialize the config to the actual workspace.',
|
|
142
|
+
userPrompt: buildAgentEnrichmentPrompt(agentName, workspaceConfig, currentConfig, packageManifest, customInstructions),
|
|
143
|
+
jsonSchema: schema,
|
|
144
|
+
maxTokens: 4000,
|
|
145
|
+
temperature: 0.2,
|
|
146
|
+
});
|
|
147
|
+
let parsed;
|
|
148
|
+
try {
|
|
149
|
+
parsed = JSON.parse(stripCodeFences(response.content));
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
throw new Error(`Agent config enrichment for ${agentName} returned invalid JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
153
|
+
}
|
|
154
|
+
if (!isRecord(parsed)) {
|
|
155
|
+
throw new Error(`Agent config enrichment for ${agentName} returned a non-object payload.`);
|
|
156
|
+
}
|
|
157
|
+
const merged = mergeObjects(currentConfig, parsed);
|
|
158
|
+
ensureServiceScope(merged, workspaceConfig);
|
|
159
|
+
return merged;
|
|
160
|
+
}
|
|
161
|
+
// ─── Prompt builder (shared with scan) ───────────────────────
|
|
162
|
+
export function buildAgentEnrichmentPrompt(agentName, workspaceConfig, currentConfig, packageManifest, customInstructions) {
|
|
163
|
+
const serviceSummary = workspaceConfig.services
|
|
164
|
+
.map((service) => {
|
|
165
|
+
const commandSummary = service.commands
|
|
166
|
+
? Object.entries(service.commands)
|
|
167
|
+
.map(([name, value]) => `${name}: ${value}`)
|
|
168
|
+
.join(', ')
|
|
169
|
+
: 'no commands declared';
|
|
170
|
+
return `- ${service.name} (${service.language}${service.framework ? `/${service.framework}` : ''}) at ${service.path}; maturity=${service.maturity}; port=${service.port ?? 'n/a'}; commands=${commandSummary}`;
|
|
171
|
+
})
|
|
172
|
+
.join('\n');
|
|
173
|
+
const customBlock = customInstructions.length === 0
|
|
174
|
+
? 'None'
|
|
175
|
+
: customInstructions
|
|
176
|
+
.map((instruction) => {
|
|
177
|
+
const scope = instruction.scope ? ` scope=${instruction.scope}` : '';
|
|
178
|
+
const source = instruction.source ? ` source=${instruction.source}` : '';
|
|
179
|
+
return `- ${instruction.content}${scope}${source}`;
|
|
180
|
+
})
|
|
181
|
+
.join('\n');
|
|
182
|
+
return [
|
|
183
|
+
`Enrich the ${agentName} configuration for this workspace.`,
|
|
184
|
+
'Goal: produce a repo-specific config, not a default starter config.',
|
|
185
|
+
'Rules:',
|
|
186
|
+
'- Keep the same object shape and key structure as the current config.',
|
|
187
|
+
'- Use the actual workspace services, commands, maturity, ports, and conventions.',
|
|
188
|
+
'- Remove or replace generic placeholders when they are not justified by the workspace.',
|
|
189
|
+
'- Do not invent secrets, credentials, URLs, or commands that are not supported by the workspace context.',
|
|
190
|
+
'- If you cannot infer a field confidently, keep the current value rather than making up data.',
|
|
191
|
+
'- Prefer explicit scope.services over an empty list when the workspace already names services.',
|
|
192
|
+
'',
|
|
193
|
+
'Workspace config:',
|
|
194
|
+
'```yaml',
|
|
195
|
+
stringify(workspaceConfig, { lineWidth: 120 }).trimEnd(),
|
|
196
|
+
'```',
|
|
197
|
+
'',
|
|
198
|
+
'Service summary:',
|
|
199
|
+
serviceSummary,
|
|
200
|
+
'',
|
|
201
|
+
'Package manifest:',
|
|
202
|
+
'```json',
|
|
203
|
+
JSON.stringify(packageManifest, null, 2),
|
|
204
|
+
'```',
|
|
205
|
+
'',
|
|
206
|
+
'Current config:',
|
|
207
|
+
'```json',
|
|
208
|
+
JSON.stringify(currentConfig, null, 2),
|
|
209
|
+
'```',
|
|
210
|
+
'',
|
|
211
|
+
'Active custom instructions:',
|
|
212
|
+
customBlock,
|
|
213
|
+
'',
|
|
214
|
+
'Return the FULL enriched config as JSON only.',
|
|
215
|
+
].join('\n');
|
|
216
|
+
}
|
|
217
|
+
// ─── Shared helpers ──────────────────────────────────────────
|
|
218
|
+
export function readWorkspaceConfig(rootDir) {
|
|
219
|
+
const configPath = resolve(rootDir, WORKSPACE_CONFIG_PATH);
|
|
220
|
+
const raw = parse(readFileSync(configPath, 'utf-8'));
|
|
221
|
+
const validation = validateWorkspaceConfig(raw);
|
|
222
|
+
if (!validation.valid || !validation.config) {
|
|
223
|
+
throw new Error(`Workspace config is invalid: ${validation.errors.join('; ')}`);
|
|
224
|
+
}
|
|
225
|
+
return validation.config;
|
|
226
|
+
}
|
|
227
|
+
export function writeAgentConfigFile(rootDir, relativePath, config) {
|
|
228
|
+
const filePath = resolve(rootDir, relativePath);
|
|
229
|
+
const dirPath = resolve(filePath, '..');
|
|
230
|
+
if (!existsSync(dirPath)) {
|
|
231
|
+
mkdirSync(dirPath, { recursive: true });
|
|
232
|
+
}
|
|
233
|
+
writeFileSync(filePath, stringify(config, { lineWidth: 120 }).trimEnd() + '\n', 'utf-8');
|
|
234
|
+
}
|
|
235
|
+
export function buildConfigSchema(sample) {
|
|
236
|
+
return {
|
|
237
|
+
$schema: 'http://json-schema.org/draft-07/schema#',
|
|
238
|
+
...schemaFromValue(sample),
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
// ─── Internal helpers ────────────────────────────────────────
|
|
242
|
+
function isRecord(value) {
|
|
243
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
244
|
+
}
|
|
245
|
+
function stripCodeFences(content) {
|
|
246
|
+
return content.replace(/^```(?:json)?\s*/i, '').replace(/\s*```$/, '').trim();
|
|
247
|
+
}
|
|
248
|
+
function schemaFromValue(value) {
|
|
249
|
+
if (Array.isArray(value)) {
|
|
250
|
+
return {
|
|
251
|
+
type: 'array',
|
|
252
|
+
items: value.length > 0 ? schemaFromValue(value[0]) : {},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
if (typeof value === 'string') {
|
|
256
|
+
return { type: 'string' };
|
|
257
|
+
}
|
|
258
|
+
if (typeof value === 'number') {
|
|
259
|
+
return { type: Number.isInteger(value) ? 'integer' : 'number' };
|
|
260
|
+
}
|
|
261
|
+
if (typeof value === 'boolean') {
|
|
262
|
+
return { type: 'boolean' };
|
|
263
|
+
}
|
|
264
|
+
if (!isRecord(value)) {
|
|
265
|
+
return {};
|
|
266
|
+
}
|
|
267
|
+
const properties = {};
|
|
268
|
+
const required = [];
|
|
269
|
+
for (const [key, nestedValue] of Object.entries(value)) {
|
|
270
|
+
properties[key] = schemaFromValue(nestedValue);
|
|
271
|
+
required.push(key);
|
|
272
|
+
}
|
|
273
|
+
return {
|
|
274
|
+
type: 'object',
|
|
275
|
+
additionalProperties: false,
|
|
276
|
+
properties,
|
|
277
|
+
required,
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
function mergeObjects(base, override) {
|
|
281
|
+
const merged = { ...base };
|
|
282
|
+
for (const [key, value] of Object.entries(override)) {
|
|
283
|
+
if (isRecord(value) && isRecord(merged[key])) {
|
|
284
|
+
merged[key] = mergeObjects(merged[key], value);
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
merged[key] = value;
|
|
288
|
+
}
|
|
289
|
+
return merged;
|
|
290
|
+
}
|
|
291
|
+
function ensureServiceScope(config, workspaceConfig) {
|
|
292
|
+
const scope = isRecord(config.scope) ? config.scope : null;
|
|
293
|
+
if (!scope) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
const services = Array.isArray(scope.services)
|
|
297
|
+
? scope.services.filter((service) => typeof service === 'string' && service.length > 0)
|
|
298
|
+
: [];
|
|
299
|
+
if (services.length > 0 || workspaceConfig.services.length === 0) {
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
scope.services = workspaceConfig.services.map((service) => service.name);
|
|
303
|
+
config.scope = scope;
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/enrichment/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Package renderer —
|
|
2
|
+
* Package renderer — maps already-rendered agent bundles into WriteOperations.
|
|
3
3
|
*
|
|
4
4
|
* Two rendering modes:
|
|
5
5
|
* renderBundleForInstall — all files land under .github/ (preserves bundle layout)
|
|
6
6
|
* renderAgentBundle — remaps schemas to openspec/ (used by sync)
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
* Decrypted templates are never written to disk — only the final rendered output is.
|
|
8
|
+
* Backend bundles are already rendered server-side. The CLI only remaps paths.
|
|
10
9
|
*/
|
|
11
|
-
import type { WorkspaceConfig } from '@nepopsx/core';
|
|
12
10
|
import type { TemplateBundle } from '../licensing/index.js';
|
|
13
11
|
import type { WriteOperation } from './writer.js';
|
|
14
12
|
/**
|
|
@@ -20,18 +18,12 @@ import type { WriteOperation } from './writer.js';
|
|
|
20
18
|
*
|
|
21
19
|
* Decrypted .hbs source is kept in memory only — never touches disk.
|
|
22
20
|
*/
|
|
23
|
-
export declare function renderBundleForInstall(bundle: TemplateBundle
|
|
24
|
-
name: string;
|
|
25
|
-
version: string;
|
|
26
|
-
}): WriteOperation[];
|
|
21
|
+
export declare function renderBundleForInstall(bundle: TemplateBundle): WriteOperation[];
|
|
27
22
|
/**
|
|
28
23
|
* Render all templates from an agent bundle for `nepopsx sync`.
|
|
29
24
|
*
|
|
30
25
|
* Uses prefix-based remapping so schemas land in openspec/ and
|
|
31
26
|
* generated agent/prompt files land under .github/.
|
|
32
27
|
*/
|
|
33
|
-
export declare function renderAgentBundle(bundle: TemplateBundle
|
|
34
|
-
name: string;
|
|
35
|
-
version: string;
|
|
36
|
-
}): WriteOperation[];
|
|
28
|
+
export declare function renderAgentBundle(bundle: TemplateBundle): WriteOperation[];
|
|
37
29
|
//# sourceMappingURL=package-renderer.d.ts.map
|