@nepopsx/cli 0.0.19 → 0.0.21
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/catalog.d.ts +19 -0
- package/dist/agents/catalog.d.ts.map +1 -0
- package/dist/agents/catalog.js +45 -0
- package/dist/agents/catalog.js.map +1 -0
- package/dist/agents/configuration.d.ts +1 -0
- package/dist/agents/configuration.d.ts.map +1 -1
- package/dist/agents/configuration.js +36 -0
- package/dist/agents/configuration.js.map +1 -1
- package/dist/agents/configuration.test.d.ts +2 -0
- package/dist/agents/configuration.test.d.ts.map +1 -0
- package/dist/agents/configuration.test.js +32 -0
- package/dist/agents/configuration.test.js.map +1 -0
- package/dist/commands/capture.d.ts +19 -0
- package/dist/commands/capture.d.ts.map +1 -0
- package/dist/commands/capture.js +105 -0
- package/dist/commands/capture.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +11 -30
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +86 -15
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.d.ts +8 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +169 -80
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/push-learnings.d.ts.map +1 -1
- package/dist/commands/push-learnings.js +95 -63
- package/dist/commands/push-learnings.js.map +1 -1
- package/dist/commands/sync.d.ts +4 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +120 -64
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/up.d.ts +23 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +263 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/enrichment/workflow.d.ts +1 -0
- package/dist/enrichment/workflow.d.ts.map +1 -1
- package/dist/enrichment/workflow.js +13 -0
- package/dist/enrichment/workflow.js.map +1 -1
- package/dist/generator/preview.d.ts +13 -0
- package/dist/generator/preview.d.ts.map +1 -0
- package/dist/generator/preview.js +242 -0
- package/dist/generator/preview.js.map +1 -0
- package/dist/generator/preview.test.d.ts +19 -0
- package/dist/generator/preview.test.d.ts.map +1 -0
- package/dist/generator/preview.test.js +289 -0
- package/dist/generator/preview.test.js.map +1 -0
- package/dist/generator/render.d.ts +2 -2
- package/dist/generator/render.d.ts.map +1 -1
- package/dist/generator/render.js +37 -18
- package/dist/generator/render.js.map +1 -1
- package/dist/generator/writer.d.ts +15 -1
- package/dist/generator/writer.d.ts.map +1 -1
- package/dist/generator/writer.js +41 -3
- package/dist/generator/writer.js.map +1 -1
- package/dist/hooks/capture-hooks.d.ts +9 -0
- package/dist/hooks/capture-hooks.d.ts.map +1 -0
- package/dist/hooks/capture-hooks.js +100 -0
- package/dist/hooks/capture-hooks.js.map +1 -0
- package/dist/hooks/capture-hooks.test.d.ts +2 -0
- package/dist/hooks/capture-hooks.test.d.ts.map +1 -0
- package/dist/hooks/capture-hooks.test.js +50 -0
- package/dist/hooks/capture-hooks.test.js.map +1 -0
- package/dist/index.js +26 -3
- package/dist/index.js.map +1 -1
- package/dist/learnings/yaml-learnings.d.ts +16 -2
- package/dist/learnings/yaml-learnings.d.ts.map +1 -1
- package/dist/learnings/yaml-learnings.js +43 -8
- package/dist/learnings/yaml-learnings.js.map +1 -1
- package/dist/learnings/yaml-learnings.test.d.ts +2 -0
- package/dist/learnings/yaml-learnings.test.d.ts.map +1 -0
- package/dist/learnings/yaml-learnings.test.js +39 -0
- package/dist/learnings/yaml-learnings.test.js.map +1 -0
- package/dist/licensing/installer.d.ts +2 -2
- package/dist/licensing/installer.d.ts.map +1 -1
- package/dist/licensing/installer.js +3 -1
- package/dist/licensing/installer.js.map +1 -1
- package/dist/licensing/template-fetch.d.ts +2 -2
- package/dist/licensing/template-fetch.d.ts.map +1 -1
- package/dist/licensing/template-fetch.js +4 -1
- package/dist/licensing/template-fetch.js.map +1 -1
- package/dist/mcp/config-generator.d.ts +42 -0
- package/dist/mcp/config-generator.d.ts.map +1 -0
- package/dist/mcp/config-generator.js +55 -0
- package/dist/mcp/config-generator.js.map +1 -0
- package/dist/mcp/config-generator.test.d.ts +7 -0
- package/dist/mcp/config-generator.test.d.ts.map +1 -0
- package/dist/mcp/config-generator.test.js +79 -0
- package/dist/mcp/config-generator.test.js.map +1 -0
- package/dist/ruflo/config-generator.d.ts +22 -0
- package/dist/ruflo/config-generator.d.ts.map +1 -0
- package/dist/ruflo/config-generator.js +89 -0
- package/dist/ruflo/config-generator.js.map +1 -0
- package/dist/ruflo/config-generator.test.d.ts +2 -0
- package/dist/ruflo/config-generator.test.d.ts.map +1 -0
- package/dist/ruflo/config-generator.test.js +18 -0
- package/dist/ruflo/config-generator.test.js.map +1 -0
- package/dist/ruflo/detect.d.ts +11 -0
- package/dist/ruflo/detect.d.ts.map +1 -0
- package/dist/ruflo/detect.js +30 -0
- package/dist/ruflo/detect.js.map +1 -0
- package/dist/ruflo/index.d.ts +3 -0
- package/dist/ruflo/index.d.ts.map +1 -0
- package/dist/ruflo/index.js +3 -0
- package/dist/ruflo/index.js.map +1 -0
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/integrity.d.ts +8 -0
- package/dist/security/integrity.d.ts.map +1 -1
- package/dist/security/integrity.js +28 -0
- package/dist/security/integrity.js.map +1 -1
- package/package.json +5 -3
- package/dist/generator/package-renderer.d.ts +0 -38
- package/dist/generator/package-renderer.d.ts.map +0 -1
- package/dist/generator/package-renderer.js +0 -181
- package/dist/generator/package-renderer.js.map +0 -1
- package/dist/generator/provider-transform.d.ts +0 -15
- package/dist/generator/provider-transform.d.ts.map +0 -1
- package/dist/generator/provider-transform.js +0 -163
- package/dist/generator/provider-transform.js.map +0 -1
- package/dist/licensing/fingerprint.test.d.ts +0 -2
- package/dist/licensing/fingerprint.test.d.ts.map +0 -1
- package/dist/licensing/fingerprint.test.js +0 -41
- package/dist/licensing/fingerprint.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-generator.test.d.ts","sourceRoot":"","sources":["../../src/ruflo/config-generator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// @nepopsx/cli — ruflo binding builder tests
|
|
2
|
+
import { strict as assert } from 'node:assert';
|
|
3
|
+
import { describe, it } from 'node:test';
|
|
4
|
+
import { buildRufloBinding } from './config-generator.js';
|
|
5
|
+
describe('buildRufloBinding', () => {
|
|
6
|
+
it('builds an enabled binding with an <org>/<workspace> namespace', () => {
|
|
7
|
+
assert.deepEqual(buildRufloBinding('acme', 'web'), {
|
|
8
|
+
enabled: true,
|
|
9
|
+
namespace: 'acme/web',
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
it('joins org and workspace slugs verbatim', () => {
|
|
13
|
+
const binding = buildRufloBinding('nepse-labs', 'opsx-frontend');
|
|
14
|
+
assert.equal(binding.namespace, 'nepse-labs/opsx-frontend');
|
|
15
|
+
assert.equal(binding.enabled, true);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=config-generator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-generator.test.js","sourceRoot":"","sources":["../../src/ruflo/config-generator.test.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YACjD,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,UAAU;SACtB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QACjE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface RufloDetectionResult {
|
|
2
|
+
available: boolean;
|
|
3
|
+
version: string | null;
|
|
4
|
+
hasLocalConfig: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Detect whether Ruflo (claude-flow) is installed and usable.
|
|
8
|
+
* Checks for the `ruflo` CLI binary via `npx ruflo --version`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function detectRuflo(rootDir: string): RufloDetectionResult;
|
|
11
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/ruflo/detect.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,CAwBjE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { execSync } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* Detect whether Ruflo (claude-flow) is installed and usable.
|
|
6
|
+
* Checks for the `ruflo` CLI binary via `npx ruflo --version`.
|
|
7
|
+
*/
|
|
8
|
+
export function detectRuflo(rootDir) {
|
|
9
|
+
let version = null;
|
|
10
|
+
try {
|
|
11
|
+
const raw = execSync("npx ruflo --version 2>/dev/null", {
|
|
12
|
+
timeout: 10_000,
|
|
13
|
+
encoding: "utf-8",
|
|
14
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
15
|
+
}).trim();
|
|
16
|
+
// Parse version string (e.g., "ruflo v3.7.0" or "3.7.0")
|
|
17
|
+
const match = raw.match(/(\d+\.\d+\.\d+)/);
|
|
18
|
+
version = match?.[1] ?? raw;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// ruflo not available
|
|
22
|
+
}
|
|
23
|
+
const hasLocalConfig = existsSync(join(rootDir, ".claude-flow"));
|
|
24
|
+
return {
|
|
25
|
+
available: version !== null,
|
|
26
|
+
version,
|
|
27
|
+
hasLocalConfig,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/ruflo/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,IAAI,OAAO,GAAkB,IAAI,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,iCAAiC,EAAE;YACtD,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEV,yDAAyD;QACzD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC3C,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IAED,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IAEjE,OAAO;QACL,SAAS,EAAE,OAAO,KAAK,IAAI;QAC3B,OAAO;QACP,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ruflo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,iBAAiB,GACvB,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ruflo/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA6B,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,uBAAuB,CAAC"}
|
package/dist/security/index.d.ts
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { scanForInjection, scanForSecrets, scanCustomInstructions, scanPhilosophyCustom, scanConfigForSecrets, formatThreats, type ScanThreat, type ScanResult, } from './scanner.js';
|
|
5
5
|
export { validateAgentPackage, type AgentValidationResult, } from './agent-validator.js';
|
|
6
|
-
export { generateManifest, verifyManifest, type ManifestEntry, type IntegrityResult, } from './integrity.js';
|
|
6
|
+
export { generateManifest, verifyManifest, readManifest, hashFileIfExists, type ManifestEntry, type IntegrityResult, } from './integrity.js';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC"}
|
package/dist/security/index.js
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export { scanForInjection, scanForSecrets, scanCustomInstructions, scanPhilosophyCustom, scanConfigForSecrets, formatThreats, } from './scanner.js';
|
|
5
5
|
export { validateAgentPackage, } from './agent-validator.js';
|
|
6
|
-
export { generateManifest, verifyManifest, } from './integrity.js';
|
|
6
|
+
export { generateManifest, verifyManifest, readManifest, hashFileIfExists, } from './integrity.js';
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,GAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,GAGd,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,gBAAgB,GAGjB,MAAM,gBAAgB,CAAC"}
|
|
@@ -20,6 +20,14 @@ export declare function generateManifest(rootDir: string, generatedFiles: Array<
|
|
|
20
20
|
path: string;
|
|
21
21
|
content: string;
|
|
22
22
|
}>): ManifestEntry[];
|
|
23
|
+
/**
|
|
24
|
+
* Read the last-written manifest as a `path → sha256` map. Empty map when no
|
|
25
|
+
* manifest exists yet (first sync). Used by the writer to tell a NEPOPSX-managed
|
|
26
|
+
* file at its last-synced state (safe to overwrite) from a hand-edited one.
|
|
27
|
+
*/
|
|
28
|
+
export declare function readManifest(rootDir: string): Map<string, string>;
|
|
29
|
+
/** SHA-256 of an on-disk file, or null if it doesn't exist. */
|
|
30
|
+
export declare function hashFileIfExists(rootDir: string, filePath: string): string | null;
|
|
23
31
|
/**
|
|
24
32
|
* Verify the integrity of generated files against the manifest.
|
|
25
33
|
* Returns which files have been tampered with or are missing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../../src/security/integrity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AASD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACvD,aAAa,EAAE,CA2BjB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CA6C/D"}
|
|
1
|
+
{"version":3,"file":"integrity.d.ts","sourceRoot":"","sources":["../../src/security/integrity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AASD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACvD,aAAa,EAAE,CA2BjB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAajE;AAED,+DAA+D;AAC/D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIjF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CA6C/D"}
|
|
@@ -39,6 +39,34 @@ export function generateManifest(rootDir, generatedFiles) {
|
|
|
39
39
|
writeFileSync(manifestPath, manifestContent, 'utf-8');
|
|
40
40
|
return entries;
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Read the last-written manifest as a `path → sha256` map. Empty map when no
|
|
44
|
+
* manifest exists yet (first sync). Used by the writer to tell a NEPOPSX-managed
|
|
45
|
+
* file at its last-synced state (safe to overwrite) from a hand-edited one.
|
|
46
|
+
*/
|
|
47
|
+
export function readManifest(rootDir) {
|
|
48
|
+
const manifestPath = join(rootDir, MANIFEST_DIR, MANIFEST_FILE);
|
|
49
|
+
const map = new Map();
|
|
50
|
+
if (!existsSync(manifestPath))
|
|
51
|
+
return map;
|
|
52
|
+
const content = readFileSync(manifestPath, 'utf-8');
|
|
53
|
+
for (const line of content.trim().split('\n')) {
|
|
54
|
+
if (!line.trim())
|
|
55
|
+
continue;
|
|
56
|
+
const match = line.match(/^([a-f0-9]{64})\s{2}(.+)$/);
|
|
57
|
+
if (!match)
|
|
58
|
+
continue;
|
|
59
|
+
map.set(match[2], match[1]);
|
|
60
|
+
}
|
|
61
|
+
return map;
|
|
62
|
+
}
|
|
63
|
+
/** SHA-256 of an on-disk file, or null if it doesn't exist. */
|
|
64
|
+
export function hashFileIfExists(rootDir, filePath) {
|
|
65
|
+
const fullPath = join(rootDir, filePath);
|
|
66
|
+
if (!existsSync(fullPath))
|
|
67
|
+
return null;
|
|
68
|
+
return sha256(readFileSync(fullPath, 'utf-8'));
|
|
69
|
+
}
|
|
42
70
|
/**
|
|
43
71
|
* Verify the integrity of generated files against the manifest.
|
|
44
72
|
* Returns which files have been tampered with or are missing.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity.js","sourceRoot":"","sources":["../../src/security/integrity.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"integrity.js","sourceRoot":"","sources":["../../src/security/integrity.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nepopsx/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.21",
|
|
4
4
|
"description": "NEPOPSX CLI — generate AI agent workspaces from configuration",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -18,19 +18,21 @@
|
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"@inquirer/prompts": "^8.4.1",
|
|
21
|
-
"@nepopsx/core": "^0.0.10",
|
|
22
21
|
"archiver": "^7.0.1",
|
|
23
22
|
"chalk": "^5.4.1",
|
|
24
23
|
"commander": "^13.1.0",
|
|
24
|
+
"diff": "^5.2.0",
|
|
25
25
|
"glob": "^11.0.1",
|
|
26
26
|
"handlebars": "^4.7.8",
|
|
27
27
|
"ignore": "^7.0.0",
|
|
28
28
|
"inquirer": "^12.3.2",
|
|
29
29
|
"ora": "^8.2.0",
|
|
30
|
-
"yaml": "^2.7.0"
|
|
30
|
+
"yaml": "^2.7.0",
|
|
31
|
+
"@nepopsx/core": "^0.0.11"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@types/archiver": "^7.0.0",
|
|
35
|
+
"@types/diff": "^5.2.0",
|
|
34
36
|
"@types/node": "^22.0.0",
|
|
35
37
|
"typescript": "^5.7.0"
|
|
36
38
|
},
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Package renderer — maps already-rendered agent bundles into WriteOperations.
|
|
3
|
-
*
|
|
4
|
-
* Two rendering modes:
|
|
5
|
-
* renderBundleForInstall — all files land under .github/ (preserves bundle layout)
|
|
6
|
-
* renderAgentBundle — remaps schemas to openspec/ (used by sync)
|
|
7
|
-
*
|
|
8
|
-
* Multi-provider support:
|
|
9
|
-
* Both functions accept an optional `providers` array. For each provider:
|
|
10
|
-
* - github-copilot: agents/ → .github/agents/, prompts/ → .github/prompts/, etc.
|
|
11
|
-
* - claude-code: agents/ → .claude/agents/ (frontmatter transformed, orchestrators skipped),
|
|
12
|
-
* claude-commands/ → .claude/commands/ (purpose-built command files)
|
|
13
|
-
* - Other providers: TBD — currently no output.
|
|
14
|
-
*
|
|
15
|
-
* Backend bundles are already rendered server-side. The CLI remaps paths and
|
|
16
|
-
* transforms agent frontmatter per provider.
|
|
17
|
-
*/
|
|
18
|
-
import { type OutputProvider } from '@nepopsx/core';
|
|
19
|
-
import type { TemplateBundle } from '../licensing/index.js';
|
|
20
|
-
import type { WriteOperation } from './writer.js';
|
|
21
|
-
/**
|
|
22
|
-
* Render a downloaded agent bundle for `nepopsx install`.
|
|
23
|
-
*
|
|
24
|
-
* For github-copilot: all files land under `.github/<relativePath>` with .hbs stripped.
|
|
25
|
-
* For claude-code: agent files are frontmatter-transformed → `.claude/agents/`,
|
|
26
|
-
* claude-commands/ → `.claude/commands/`.
|
|
27
|
-
*
|
|
28
|
-
* Decrypted .hbs source is kept in memory only — never touches disk.
|
|
29
|
-
*/
|
|
30
|
-
export declare function renderBundleForInstall(bundle: TemplateBundle, providers?: OutputProvider[]): WriteOperation[];
|
|
31
|
-
/**
|
|
32
|
-
* Render all templates from an agent bundle for `nepopsx sync`.
|
|
33
|
-
*
|
|
34
|
-
* Uses prefix-based remapping so schemas land in openspec/ and
|
|
35
|
-
* generated agent/prompt files land under provider-specific directories.
|
|
36
|
-
*/
|
|
37
|
-
export declare function renderAgentBundle(bundle: TemplateBundle, providers?: OutputProvider[]): WriteOperation[];
|
|
38
|
-
//# sourceMappingURL=package-renderer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package-renderer.d.ts","sourceRoot":"","sources":["../../src/generator/package-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,KAAK,cAAc,EAAqB,MAAM,eAAe,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAMlD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,cAAc,EACtB,SAAS,GAAE,cAAc,EAAsB,GAC9C,cAAc,EAAE,CA+BlB;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,cAAc,EACtB,SAAS,GAAE,cAAc,EAAsB,GAC9C,cAAc,EAAE,CAmElB"}
|
|
@@ -1,181 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Package renderer — maps already-rendered agent bundles into WriteOperations.
|
|
3
|
-
*
|
|
4
|
-
* Two rendering modes:
|
|
5
|
-
* renderBundleForInstall — all files land under .github/ (preserves bundle layout)
|
|
6
|
-
* renderAgentBundle — remaps schemas to openspec/ (used by sync)
|
|
7
|
-
*
|
|
8
|
-
* Multi-provider support:
|
|
9
|
-
* Both functions accept an optional `providers` array. For each provider:
|
|
10
|
-
* - github-copilot: agents/ → .github/agents/, prompts/ → .github/prompts/, etc.
|
|
11
|
-
* - claude-code: agents/ → .claude/agents/ (frontmatter transformed, orchestrators skipped),
|
|
12
|
-
* claude-commands/ → .claude/commands/ (purpose-built command files)
|
|
13
|
-
* - Other providers: TBD — currently no output.
|
|
14
|
-
*
|
|
15
|
-
* Backend bundles are already rendered server-side. The CLI remaps paths and
|
|
16
|
-
* transforms agent frontmatter per provider.
|
|
17
|
-
*/
|
|
18
|
-
import { basename, join } from 'node:path';
|
|
19
|
-
import { DEFAULT_PROVIDERS } from '@nepopsx/core';
|
|
20
|
-
import { isReservedBundleRootPath } from '../agents/configuration.js';
|
|
21
|
-
import { transformAgentForProvider } from './provider-transform.js';
|
|
22
|
-
// ─── Install mode ───────────────────────────────────────────
|
|
23
|
-
/**
|
|
24
|
-
* Render a downloaded agent bundle for `nepopsx install`.
|
|
25
|
-
*
|
|
26
|
-
* For github-copilot: all files land under `.github/<relativePath>` with .hbs stripped.
|
|
27
|
-
* For claude-code: agent files are frontmatter-transformed → `.claude/agents/`,
|
|
28
|
-
* claude-commands/ → `.claude/commands/`.
|
|
29
|
-
*
|
|
30
|
-
* Decrypted .hbs source is kept in memory only — never touches disk.
|
|
31
|
-
*/
|
|
32
|
-
export function renderBundleForInstall(bundle, providers = DEFAULT_PROVIDERS) {
|
|
33
|
-
const operations = [];
|
|
34
|
-
const providerSet = new Set(providers);
|
|
35
|
-
for (const [relativePath, rawContent] of Object.entries(bundle.templates)) {
|
|
36
|
-
if (isReservedBundleRootPath(relativePath))
|
|
37
|
-
continue;
|
|
38
|
-
if (rawContent.trim().length === 0)
|
|
39
|
-
continue;
|
|
40
|
-
const isHbs = relativePath.endsWith('.hbs');
|
|
41
|
-
const cleanPath = isHbs ? relativePath.replace(/\.hbs$/, '') : relativePath;
|
|
42
|
-
// GitHub Copilot: everything under .github/ (except schemas — those go to openspec/)
|
|
43
|
-
if (providerSet.has('github-copilot') && !relativePath.startsWith('claude-') && !relativePath.startsWith('schemas/')) {
|
|
44
|
-
operations.push({
|
|
45
|
-
path: join('.github', cleanPath),
|
|
46
|
-
content: rawContent,
|
|
47
|
-
source: `remote:${bundle.agent}/${relativePath}`,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
// Claude Code: transform agents, map commands
|
|
51
|
-
if (providerSet.has('claude-code')) {
|
|
52
|
-
const claudeOps = renderForClaudeCode(relativePath, rawContent, bundle.agent);
|
|
53
|
-
operations.push(...claudeOps);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Schema files always land in openspec/ (same as sync mode)
|
|
57
|
-
copySyncSchemaFiles(bundle.templates, bundle.agent, operations);
|
|
58
|
-
return operations;
|
|
59
|
-
}
|
|
60
|
-
// ─── Sync mode ──────────────────────────────────────────────
|
|
61
|
-
/**
|
|
62
|
-
* Render all templates from an agent bundle for `nepopsx sync`.
|
|
63
|
-
*
|
|
64
|
-
* Uses prefix-based remapping so schemas land in openspec/ and
|
|
65
|
-
* generated agent/prompt files land under provider-specific directories.
|
|
66
|
-
*/
|
|
67
|
-
export function renderAgentBundle(bundle, providers = DEFAULT_PROVIDERS) {
|
|
68
|
-
const operations = [];
|
|
69
|
-
const handledPaths = new Set();
|
|
70
|
-
const providerSet = new Set(providers);
|
|
71
|
-
// GitHub Copilot prefix mappings
|
|
72
|
-
if (providerSet.has('github-copilot')) {
|
|
73
|
-
const copilotDirs = [
|
|
74
|
-
{ prefix: 'agents/', output: '.github/agents' },
|
|
75
|
-
{ prefix: 'prompts/', output: '.github/prompts' },
|
|
76
|
-
{ prefix: 'instructions/', output: '.github/instructions' },
|
|
77
|
-
{ prefix: 'skills/', output: '.github/skills' },
|
|
78
|
-
{ prefix: 'partials/', output: '.github/partials' },
|
|
79
|
-
];
|
|
80
|
-
for (const { prefix, output } of copilotDirs) {
|
|
81
|
-
for (const [relativePath, templateSource] of Object.entries(bundle.templates)) {
|
|
82
|
-
if (!relativePath.startsWith(prefix))
|
|
83
|
-
continue;
|
|
84
|
-
const outputFileName = relativePath.slice(prefix.length).replace(/\.hbs$/, '');
|
|
85
|
-
if (templateSource.trim().length === 0)
|
|
86
|
-
continue;
|
|
87
|
-
handledPaths.add(relativePath);
|
|
88
|
-
operations.push({
|
|
89
|
-
path: join(output, outputFileName),
|
|
90
|
-
content: templateSource,
|
|
91
|
-
source: `remote:${bundle.agent}/${relativePath}`,
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
// Claude Code: transform agents + map commands
|
|
97
|
-
if (providerSet.has('claude-code')) {
|
|
98
|
-
for (const [relativePath, rawContent] of Object.entries(bundle.templates)) {
|
|
99
|
-
if (rawContent.trim().length === 0)
|
|
100
|
-
continue;
|
|
101
|
-
const claudeOps = renderForClaudeCode(relativePath, rawContent, bundle.agent);
|
|
102
|
-
if (claudeOps.length > 0) {
|
|
103
|
-
operations.push(...claudeOps);
|
|
104
|
-
handledPaths.add(relativePath);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// Schema files always go to openspec/ regardless of provider
|
|
109
|
-
copySyncSchemaFiles(bundle.templates, bundle.agent, operations);
|
|
110
|
-
// Remaining unhandled files (excluding schemas and provider-specific prefixes)
|
|
111
|
-
for (const [relativePath, rawContent] of Object.entries(bundle.templates)) {
|
|
112
|
-
if (handledPaths.has(relativePath) || isReservedBundleRootPath(relativePath)) {
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
if (relativePath.startsWith('schemas/'))
|
|
116
|
-
continue;
|
|
117
|
-
if (relativePath.startsWith('claude-'))
|
|
118
|
-
continue;
|
|
119
|
-
const outputPath = relativePath.replace(/\.hbs$/, '');
|
|
120
|
-
if (rawContent.trim().length === 0)
|
|
121
|
-
continue;
|
|
122
|
-
operations.push({
|
|
123
|
-
path: outputPath,
|
|
124
|
-
content: rawContent,
|
|
125
|
-
source: `remote:${bundle.agent}/${relativePath}`,
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
return operations;
|
|
129
|
-
}
|
|
130
|
-
// ─── Claude Code rendering ──────────────────────────────────
|
|
131
|
-
/**
|
|
132
|
-
* Render a single bundle file for Claude Code provider.
|
|
133
|
-
*
|
|
134
|
-
* - agents/ files: frontmatter transformed (model/tools/agents stripped, name/color added).
|
|
135
|
-
* Orchestrator agents (those with `agents:` in frontmatter) are skipped — they become commands.
|
|
136
|
-
* - claude-commands/ files: mapped directly to .claude/commands/
|
|
137
|
-
* - Other prefixes: ignored for Claude Code.
|
|
138
|
-
*/
|
|
139
|
-
function renderForClaudeCode(relativePath, rawContent, agentName) {
|
|
140
|
-
const cleanPath = relativePath.replace(/\.hbs$/, '');
|
|
141
|
-
// Transform agent files
|
|
142
|
-
if (relativePath.startsWith('agents/')) {
|
|
143
|
-
const fileName = basename(cleanPath);
|
|
144
|
-
const transformed = transformAgentForProvider(rawContent, fileName, 'claude-code');
|
|
145
|
-
if (transformed === null)
|
|
146
|
-
return []; // Orchestrator — skipped
|
|
147
|
-
const outputFileName = cleanPath.slice('agents/'.length);
|
|
148
|
-
return [{
|
|
149
|
-
path: join('.claude/agents', outputFileName),
|
|
150
|
-
content: transformed,
|
|
151
|
-
source: `remote:${agentName}/${relativePath}`,
|
|
152
|
-
}];
|
|
153
|
-
}
|
|
154
|
-
// Claude-specific command files
|
|
155
|
-
if (relativePath.startsWith('claude-commands/')) {
|
|
156
|
-
const outputFileName = cleanPath.slice('claude-commands/'.length);
|
|
157
|
-
return [{
|
|
158
|
-
path: join('.claude/commands', outputFileName),
|
|
159
|
-
content: rawContent,
|
|
160
|
-
source: `remote:${agentName}/${relativePath}`,
|
|
161
|
-
}];
|
|
162
|
-
}
|
|
163
|
-
return [];
|
|
164
|
-
}
|
|
165
|
-
// ─── Internals ──────────────────────────────────────────────
|
|
166
|
-
function copySyncSchemaFiles(templateMap, agentName, operations) {
|
|
167
|
-
for (const [relativePath, rawContent] of Object.entries(templateMap)) {
|
|
168
|
-
if (!relativePath.startsWith('schemas/'))
|
|
169
|
-
continue;
|
|
170
|
-
const outputName = relativePath.slice('schemas/'.length).replace(/\.hbs$/, '');
|
|
171
|
-
const content = rawContent;
|
|
172
|
-
if (content.trim().length === 0)
|
|
173
|
-
continue;
|
|
174
|
-
operations.push({
|
|
175
|
-
path: `openspec/schemas/${agentName}/${outputName}`,
|
|
176
|
-
content,
|
|
177
|
-
source: `remote:${agentName}/${relativePath}`,
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
//# sourceMappingURL=package-renderer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"package-renderer.js","sourceRoot":"","sources":["../../src/generator/package-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Transforms agent markdown frontmatter for different AI editor providers.
|
|
3
|
-
*
|
|
4
|
-
* GitHub Copilot agents use full frontmatter (model, tools, agents, handoffs).
|
|
5
|
-
* Claude Code agents use minimal frontmatter (name, description, user-invocable, color).
|
|
6
|
-
* Other providers TBD — fall through with no transformation.
|
|
7
|
-
*/
|
|
8
|
-
import type { OutputProvider } from '@nepopsx/core';
|
|
9
|
-
/**
|
|
10
|
-
* Transform an agent file's content for the target provider.
|
|
11
|
-
* Returns the transformed content, or null if the file should be skipped
|
|
12
|
-
* (e.g., orchestrators in Claude Code — they become commands).
|
|
13
|
-
*/
|
|
14
|
-
export declare function transformAgentForProvider(content: string, fileName: string, provider: OutputProvider): string | null;
|
|
15
|
-
//# sourceMappingURL=provider-transform.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"provider-transform.d.ts","sourceRoot":"","sources":["../../src/generator/provider-transform.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AA8JpD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc,GACvB,MAAM,GAAG,IAAI,CASf"}
|