intentdna 1.0.0
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/LICENSE +69 -0
- package/README.md +251 -0
- package/dist/audit/index.d.ts +109 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +144 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/cli/commands/compile.d.ts +14 -0
- package/dist/cli/commands/compile.d.ts.map +1 -0
- package/dist/cli/commands/compile.js +89 -0
- package/dist/cli/commands/compile.js.map +1 -0
- package/dist/cli/commands/epigenetic.d.ts +20 -0
- package/dist/cli/commands/epigenetic.d.ts.map +1 -0
- package/dist/cli/commands/epigenetic.js +112 -0
- package/dist/cli/commands/epigenetic.js.map +1 -0
- package/dist/cli/commands/evolve.d.ts +12 -0
- package/dist/cli/commands/evolve.d.ts.map +1 -0
- package/dist/cli/commands/evolve.js +52 -0
- package/dist/cli/commands/evolve.js.map +1 -0
- package/dist/cli/commands/guard.d.ts +22 -0
- package/dist/cli/commands/guard.d.ts.map +1 -0
- package/dist/cli/commands/guard.js +257 -0
- package/dist/cli/commands/guard.js.map +1 -0
- package/dist/cli/commands/import.d.ts +71 -0
- package/dist/cli/commands/import.d.ts.map +1 -0
- package/dist/cli/commands/import.js +428 -0
- package/dist/cli/commands/import.js.map +1 -0
- package/dist/cli/commands/init.d.ts +13 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +171 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/run.d.ts +59 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +350 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/show.d.ts +12 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +78 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +31 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +307 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +11 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +30 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +33 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +102 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +358 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/util/format.d.ts +24 -0
- package/dist/cli/util/format.d.ts.map +1 -0
- package/dist/cli/util/format.js +67 -0
- package/dist/cli/util/format.js.map +1 -0
- package/dist/cli/util/prompt.d.ts +11 -0
- package/dist/cli/util/prompt.d.ts.map +1 -0
- package/dist/cli/util/prompt.js +51 -0
- package/dist/cli/util/prompt.js.map +1 -0
- package/dist/compiler/activate.d.ts +29 -0
- package/dist/compiler/activate.d.ts.map +1 -0
- package/dist/compiler/activate.js +141 -0
- package/dist/compiler/activate.js.map +1 -0
- package/dist/compiler/cascade.d.ts +27 -0
- package/dist/compiler/cascade.d.ts.map +1 -0
- package/dist/compiler/cascade.js +124 -0
- package/dist/compiler/cascade.js.map +1 -0
- package/dist/compiler/compile.d.ts +17 -0
- package/dist/compiler/compile.d.ts.map +1 -0
- package/dist/compiler/compile.js +219 -0
- package/dist/compiler/compile.js.map +1 -0
- package/dist/compiler/index.d.ts +28 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +51 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/workflow.d.ts +37 -0
- package/dist/compiler/workflow.d.ts.map +1 -0
- package/dist/compiler/workflow.js +274 -0
- package/dist/compiler/workflow.js.map +1 -0
- package/dist/evolution/collector.d.ts +52 -0
- package/dist/evolution/collector.d.ts.map +1 -0
- package/dist/evolution/collector.js +72 -0
- package/dist/evolution/collector.js.map +1 -0
- package/dist/evolution/fitness.d.ts +33 -0
- package/dist/evolution/fitness.d.ts.map +1 -0
- package/dist/evolution/fitness.js +96 -0
- package/dist/evolution/fitness.js.map +1 -0
- package/dist/evolution/index.d.ts +53 -0
- package/dist/evolution/index.d.ts.map +1 -0
- package/dist/evolution/index.js +69 -0
- package/dist/evolution/index.js.map +1 -0
- package/dist/evolution/marker-gen.d.ts +31 -0
- package/dist/evolution/marker-gen.d.ts.map +1 -0
- package/dist/evolution/marker-gen.js +141 -0
- package/dist/evolution/marker-gen.js.map +1 -0
- package/dist/evolution/store.d.ts +24 -0
- package/dist/evolution/store.d.ts.map +1 -0
- package/dist/evolution/store.js +78 -0
- package/dist/evolution/store.js.map +1 -0
- package/dist/evolution/types.d.ts +73 -0
- package/dist/evolution/types.d.ts.map +1 -0
- package/dist/evolution/types.js +14 -0
- package/dist/evolution/types.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/log/logger.d.ts +15 -0
- package/dist/log/logger.d.ts.map +1 -0
- package/dist/log/logger.js +36 -0
- package/dist/log/logger.js.map +1 -0
- package/dist/runtime/agent-md.d.ts +56 -0
- package/dist/runtime/agent-md.d.ts.map +1 -0
- package/dist/runtime/agent-md.js +257 -0
- package/dist/runtime/agent-md.js.map +1 -0
- package/dist/runtime/claude-sdk.d.ts +51 -0
- package/dist/runtime/claude-sdk.d.ts.map +1 -0
- package/dist/runtime/claude-sdk.js +78 -0
- package/dist/runtime/claude-sdk.js.map +1 -0
- package/dist/runtime/hooks.d.ts +67 -0
- package/dist/runtime/hooks.d.ts.map +1 -0
- package/dist/runtime/hooks.js +645 -0
- package/dist/runtime/hooks.js.map +1 -0
- package/dist/runtime/index.d.ts +9 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +5 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/markdown.d.ts +36 -0
- package/dist/runtime/markdown.d.ts.map +1 -0
- package/dist/runtime/markdown.js +214 -0
- package/dist/runtime/markdown.js.map +1 -0
- package/dist/runtime/settings-adapter.d.ts +33 -0
- package/dist/runtime/settings-adapter.d.ts.map +1 -0
- package/dist/runtime/settings-adapter.js +78 -0
- package/dist/runtime/settings-adapter.js.map +1 -0
- package/dist/runtime/skill-adapter.d.ts +22 -0
- package/dist/runtime/skill-adapter.d.ts.map +1 -0
- package/dist/runtime/skill-adapter.js +170 -0
- package/dist/runtime/skill-adapter.js.map +1 -0
- package/dist/runtime/workflow-runner.d.ts +53 -0
- package/dist/runtime/workflow-runner.d.ts.map +1 -0
- package/dist/runtime/workflow-runner.js +420 -0
- package/dist/runtime/workflow-runner.js.map +1 -0
- package/dist/schema/index.d.ts +2 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +2 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/types.d.ts +275 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +11 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/schema/validate.d.ts +20 -0
- package/dist/schema/validate.d.ts.map +1 -0
- package/dist/schema/validate.js +379 -0
- package/dist/schema/validate.js.map +1 -0
- package/dist/schema/yaml-parser.d.ts +12 -0
- package/dist/schema/yaml-parser.d.ts.map +1 -0
- package/dist/schema/yaml-parser.js +298 -0
- package/dist/schema/yaml-parser.js.map +1 -0
- package/dist/species/default.dna.json +62 -0
- package/dist/templates/api-backend.dna.yaml +77 -0
- package/dist/templates/brainstorming-first.dna.yaml +71 -0
- package/dist/templates/branch-finishing.dna.yaml +54 -0
- package/dist/templates/code-review-pipeline.dna.yaml +91 -0
- package/dist/templates/devops-cicd.dna.yaml +67 -0
- package/dist/templates/documentation-writer.dna.yaml +71 -0
- package/dist/templates/enterprise-baseline.dna.yaml +66 -0
- package/dist/templates/frontend-quality.dna.yaml +88 -0
- package/dist/templates/full-pipeline.dna.yaml +129 -0
- package/dist/templates/mobile-dev.dna.yaml +68 -0
- package/dist/templates/monorepo-governance.dna.yaml +60 -0
- package/dist/templates/multi-perspective-review.dna.yaml +109 -0
- package/dist/templates/pr-submitter.dna.yaml +55 -0
- package/dist/templates/safe-refactoring.dna.yaml +65 -0
- package/dist/templates/secure-dev.dna.yaml +90 -0
- package/dist/templates/subagent-parallel.dna.yaml +98 -0
- package/dist/templates/systematic-debugging.dna.yaml +55 -0
- package/dist/templates/tdd-strict.dna.yaml +69 -0
- package/dist/templates/verification-loop.dna.yaml +53 -0
- package/dist/templates/yolo-with-guardrails.dna.yaml +56 -0
- package/package.json +43 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dna compile <files...> [--target claude-sdk] [--context <name>] [--output <path>] [--ir]
|
|
3
|
+
*
|
|
4
|
+
* Compile DNA files to framework-specific configuration.
|
|
5
|
+
*/
|
|
6
|
+
import { writeFile } from "node:fs/promises";
|
|
7
|
+
import { resolve, dirname } from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { compileFromFiles } from "../../compiler/index.js";
|
|
10
|
+
import { compileForClaude } from "../../runtime/claude-sdk.js";
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the species default DNA path relative to this module's location.
|
|
13
|
+
*/
|
|
14
|
+
function resolveSpeciesPath(ref) {
|
|
15
|
+
if (!ref.startsWith("species:"))
|
|
16
|
+
return null;
|
|
17
|
+
const name = ref.slice("species:".length);
|
|
18
|
+
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
// From dist/cli/commands/ -> dist/species/
|
|
20
|
+
return resolve(thisDir, "..", "..", "species", `${name}.dna.json`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Expand species references in file list and add species default if any DNA inherits it.
|
|
24
|
+
*/
|
|
25
|
+
async function expandFiles(files) {
|
|
26
|
+
const { readFile } = await import("node:fs/promises");
|
|
27
|
+
const expanded = [];
|
|
28
|
+
const seen = new Set();
|
|
29
|
+
// First pass: collect all files and check for species references
|
|
30
|
+
for (const file of files) {
|
|
31
|
+
const abs = resolve(file);
|
|
32
|
+
if (seen.has(abs))
|
|
33
|
+
continue;
|
|
34
|
+
seen.add(abs);
|
|
35
|
+
expanded.push(abs);
|
|
36
|
+
// Check if this DNA inherits from species
|
|
37
|
+
try {
|
|
38
|
+
const raw = await readFile(abs, "utf-8");
|
|
39
|
+
const dna = JSON.parse(raw);
|
|
40
|
+
for (const ref of dna.cascade?.inherits ?? []) {
|
|
41
|
+
const speciesPath = resolveSpeciesPath(ref);
|
|
42
|
+
if (speciesPath && !seen.has(speciesPath)) {
|
|
43
|
+
seen.add(speciesPath);
|
|
44
|
+
expanded.unshift(speciesPath); // species goes first (lowest priority)
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// Will fail later during compilation with proper error
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return expanded;
|
|
53
|
+
}
|
|
54
|
+
export async function runCompile(opts) {
|
|
55
|
+
if (opts.files.length === 0) {
|
|
56
|
+
process.stderr.write("Error: no files specified\n");
|
|
57
|
+
return 2;
|
|
58
|
+
}
|
|
59
|
+
const validTargets = ["claude-sdk"];
|
|
60
|
+
if (!opts.ir && !validTargets.includes(opts.target)) {
|
|
61
|
+
process.stderr.write(`Error: unknown target '${opts.target}'. Available: ${validTargets.join(", ")}\n`);
|
|
62
|
+
return 2;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const expandedFiles = await expandFiles(opts.files);
|
|
66
|
+
const ir = await compileFromFiles(expandedFiles, opts.context);
|
|
67
|
+
let output;
|
|
68
|
+
if (opts.ir) {
|
|
69
|
+
output = JSON.stringify(ir, null, 2);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const config = compileForClaude(ir);
|
|
73
|
+
output = JSON.stringify(config, null, 2);
|
|
74
|
+
}
|
|
75
|
+
if (opts.output) {
|
|
76
|
+
await writeFile(opts.output, output + "\n", "utf-8");
|
|
77
|
+
process.stderr.write(`Written to ${opts.output}\n`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
process.stdout.write(output + "\n");
|
|
81
|
+
}
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../src/cli/commands/compile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAU/D;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,2CAA2C;IAC3C,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,WAAW,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,KAAe;IACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,iEAAiE;IACjE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEnB,0CAA0C;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;gBAC9C,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC1C,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;oBACtB,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,uCAAuC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAoB;IACnD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACpD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,YAAY,GAAG,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,CAAC,MAAM,iBAAiB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/D,IAAI,MAAc,CAAC;QACnB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACpC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dna epigenetic <subcommand> <dna-id> [options]
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* record — Record an execution outcome
|
|
6
|
+
* summary — Show outcome summary for a DNA
|
|
7
|
+
* markers — Show current epigenetic markers
|
|
8
|
+
*/
|
|
9
|
+
export interface EpigeneticOptions {
|
|
10
|
+
subcommand: string;
|
|
11
|
+
dnaId: string;
|
|
12
|
+
storeDir?: string;
|
|
13
|
+
action?: string;
|
|
14
|
+
success?: boolean;
|
|
15
|
+
genes?: string[];
|
|
16
|
+
feedback?: string;
|
|
17
|
+
json?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function runEpigenetic(opts: EpigeneticOptions): Promise<number>;
|
|
20
|
+
//# sourceMappingURL=epigenetic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epigenetic.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/epigenetic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B5E"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dna epigenetic <subcommand> <dna-id> [options]
|
|
3
|
+
*
|
|
4
|
+
* Subcommands:
|
|
5
|
+
* record — Record an execution outcome
|
|
6
|
+
* summary — Show outcome summary for a DNA
|
|
7
|
+
* markers — Show current epigenetic markers
|
|
8
|
+
*/
|
|
9
|
+
import { EvolutionEngine } from "../../evolution/index.js";
|
|
10
|
+
import { bold, green, yellow, red, dim, cyan } from "../util/format.js";
|
|
11
|
+
import { computeMarkerStrength } from "../../evolution/fitness.js";
|
|
12
|
+
export async function runEpigenetic(opts) {
|
|
13
|
+
if (!opts.dnaId) {
|
|
14
|
+
process.stderr.write("Error: dna-id is required\n");
|
|
15
|
+
return 2;
|
|
16
|
+
}
|
|
17
|
+
const engine = new EvolutionEngine(opts.storeDir ? { store_dir: opts.storeDir } : undefined);
|
|
18
|
+
try {
|
|
19
|
+
switch (opts.subcommand) {
|
|
20
|
+
case "record":
|
|
21
|
+
return await doRecord(engine, opts);
|
|
22
|
+
case "summary":
|
|
23
|
+
return await doSummary(engine, opts);
|
|
24
|
+
case "markers":
|
|
25
|
+
return await doMarkers(engine, opts);
|
|
26
|
+
default:
|
|
27
|
+
process.stderr.write(`Unknown subcommand: ${opts.subcommand}\n`);
|
|
28
|
+
process.stderr.write("Available: record, summary, markers\n");
|
|
29
|
+
return 2;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
34
|
+
return 1;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async function doRecord(engine, opts) {
|
|
38
|
+
if (!opts.action) {
|
|
39
|
+
process.stderr.write("Error: --action is required for record\n");
|
|
40
|
+
return 2;
|
|
41
|
+
}
|
|
42
|
+
let constraintFeedback = [];
|
|
43
|
+
if (opts.feedback) {
|
|
44
|
+
try {
|
|
45
|
+
constraintFeedback = JSON.parse(opts.feedback);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
process.stderr.write("Error: --feedback must be valid JSON\n");
|
|
49
|
+
return 2;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const id = await engine.recordOutcome({
|
|
53
|
+
dna_id: opts.dnaId,
|
|
54
|
+
action: opts.action,
|
|
55
|
+
active_genes: opts.genes ?? [],
|
|
56
|
+
constraints_applied: [],
|
|
57
|
+
success: opts.success ?? true,
|
|
58
|
+
constraint_feedback: constraintFeedback,
|
|
59
|
+
});
|
|
60
|
+
process.stderr.write(`Recorded outcome: ${id}\n`);
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
63
|
+
async function doSummary(engine, opts) {
|
|
64
|
+
const summary = await engine.summary(opts.dnaId);
|
|
65
|
+
if (opts.json) {
|
|
66
|
+
process.stdout.write(JSON.stringify(summary, null, 2) + "\n");
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
process.stderr.write(bold(`Outcome Summary: ${opts.dnaId}`) + "\n\n");
|
|
70
|
+
process.stderr.write(` Total outcomes: ${summary.total_outcomes}\n`);
|
|
71
|
+
process.stderr.write(` Success: ${green(String(summary.success_count))}\n`);
|
|
72
|
+
process.stderr.write(` Failure: ${red(String(summary.failure_count))}\n`);
|
|
73
|
+
if (summary.oldest) {
|
|
74
|
+
process.stderr.write(` Period: ${dim(summary.oldest)} → ${dim(summary.newest)}\n`);
|
|
75
|
+
}
|
|
76
|
+
if (Object.keys(summary.gene_feedback).length > 0) {
|
|
77
|
+
process.stderr.write("\n Gene feedback:\n");
|
|
78
|
+
for (const [gene, stats] of Object.entries(summary.gene_feedback)) {
|
|
79
|
+
process.stderr.write(` ${cyan(gene)}: ${green(`+${stats.helped}`)} ${red(`-${stats.hindered}`)} ${dim(`~${stats.neutral}`)}\n`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return 0;
|
|
83
|
+
}
|
|
84
|
+
async function doMarkers(engine, opts) {
|
|
85
|
+
const markers = await engine.loadMarkers(opts.dnaId);
|
|
86
|
+
if (opts.json) {
|
|
87
|
+
process.stdout.write(JSON.stringify(markers, null, 2) + "\n");
|
|
88
|
+
return 0;
|
|
89
|
+
}
|
|
90
|
+
if (markers.length === 0) {
|
|
91
|
+
process.stderr.write("No epigenetic markers stored\n");
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
process.stderr.write(bold(`Epigenetic Markers: ${opts.dnaId}`) + "\n\n");
|
|
95
|
+
for (const marker of markers) {
|
|
96
|
+
const strength = computeMarkerStrength(marker);
|
|
97
|
+
const strengthLabel = strength >= 0.7 ? green("STRONG")
|
|
98
|
+
: strength >= 0.3 ? yellow("MODERATE")
|
|
99
|
+
: dim("WEAK");
|
|
100
|
+
process.stderr.write(` ${bold(marker.id)} ${strengthLabel} ${dim(`(${(strength * 100).toFixed(0)}%)`)}\n`);
|
|
101
|
+
process.stderr.write(` trigger: ${marker.trigger}\n`);
|
|
102
|
+
process.stderr.write(` count: ${marker.count ?? 1}\n`);
|
|
103
|
+
for (const effect of marker.effects) {
|
|
104
|
+
if (effect.gene && effect.action) {
|
|
105
|
+
process.stderr.write(` ${effect.action} ${cyan(effect.gene)} ×${(effect.factor ?? 1).toFixed(2)}\n`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
process.stderr.write("\n");
|
|
109
|
+
}
|
|
110
|
+
return 0;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=epigenetic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"epigenetic.js","sourceRoot":"","sources":["../../../src/cli/commands/epigenetic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dna evolve <dna-id> [--preview] [--store-dir <path>]
|
|
3
|
+
*
|
|
4
|
+
* Generate/update epigenetic markers from accumulated outcomes.
|
|
5
|
+
*/
|
|
6
|
+
export interface EvolveOptions {
|
|
7
|
+
dnaId: string;
|
|
8
|
+
preview: boolean;
|
|
9
|
+
storeDir?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function runEvolve(opts: EvolveOptions): Promise<number>;
|
|
12
|
+
//# sourceMappingURL=evolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evolve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/evolve.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDpE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dna evolve <dna-id> [--preview] [--store-dir <path>]
|
|
3
|
+
*
|
|
4
|
+
* Generate/update epigenetic markers from accumulated outcomes.
|
|
5
|
+
*/
|
|
6
|
+
import { EvolutionEngine } from "../../evolution/index.js";
|
|
7
|
+
import { bold, green, yellow, dim, cyan } from "../util/format.js";
|
|
8
|
+
export async function runEvolve(opts) {
|
|
9
|
+
if (!opts.dnaId) {
|
|
10
|
+
process.stderr.write("Error: dna-id is required\n");
|
|
11
|
+
return 2;
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const engine = new EvolutionEngine(opts.storeDir ? { store_dir: opts.storeDir } : undefined);
|
|
15
|
+
if (opts.preview) {
|
|
16
|
+
const changes = await engine.preview(opts.dnaId);
|
|
17
|
+
if (changes.length === 0) {
|
|
18
|
+
process.stderr.write("No marker changes to generate (no outcomes recorded)\n");
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
process.stderr.write(bold("Marker changes preview:") + "\n\n");
|
|
22
|
+
for (const change of changes) {
|
|
23
|
+
switch (change.type) {
|
|
24
|
+
case "create":
|
|
25
|
+
process.stderr.write(` ${green("+ CREATE")} ${cyan(change.gene)} → ${change.action} ×${change.factor.toFixed(2)} (${change.feedback_count} feedbacks)\n`);
|
|
26
|
+
break;
|
|
27
|
+
case "update":
|
|
28
|
+
process.stderr.write(` ${yellow("~ UPDATE")} ${cyan(change.gene)} → ${change.action} ×${change.factor.toFixed(2)} (${change.feedback_count} feedbacks)\n`);
|
|
29
|
+
break;
|
|
30
|
+
case "neutral":
|
|
31
|
+
process.stderr.write(` ${dim("= NEUTRAL")} ${cyan(change.gene)} ×${change.factor.toFixed(2)} (${change.feedback_count} feedbacks)\n`);
|
|
32
|
+
break;
|
|
33
|
+
case "insufficient_data":
|
|
34
|
+
process.stderr.write(` ${dim("? INSUFFICIENT")} ${cyan(change.gene)} (${change.feedback_count}/${change.needed} feedbacks needed)\n`);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
// Actually evolve
|
|
41
|
+
const markers = await engine.evolve(opts.dnaId);
|
|
42
|
+
process.stderr.write(`Evolved ${opts.dnaId}: ${markers.length} active markers\n`);
|
|
43
|
+
// Output markers as JSON
|
|
44
|
+
process.stdout.write(JSON.stringify(markers, null, 2) + "\n");
|
|
45
|
+
return 0;
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
49
|
+
return 1;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=evolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evolve.js","sourceRoot":"","sources":["../../../src/cli/commands/evolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dna guard [--level <level>] [--audit] [--remove]
|
|
3
|
+
*
|
|
4
|
+
* Zero-config guardrails for AI agents.
|
|
5
|
+
* Detects the current environment (Claude Code, Cursor, Cline),
|
|
6
|
+
* applies built-in guardrails DNA, and injects constraints.
|
|
7
|
+
*
|
|
8
|
+
* Levels:
|
|
9
|
+
* standard — Safety baseline (species:default genes)
|
|
10
|
+
* yolo — Maximum autonomy + safety net (hard limits on destructive ops)
|
|
11
|
+
* strict — All of standard + strict tool restrictions
|
|
12
|
+
*
|
|
13
|
+
* Reference: docs/references/harness-ecosystem-2026.md §6 (debate consensus #9)
|
|
14
|
+
*/
|
|
15
|
+
export type GuardLevel = "standard" | "yolo" | "strict";
|
|
16
|
+
export interface GuardOptions {
|
|
17
|
+
level: GuardLevel;
|
|
18
|
+
audit: boolean;
|
|
19
|
+
remove: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function runGuard(opts: GuardOptions): Promise<number>;
|
|
22
|
+
//# sourceMappingURL=guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;CACjB;AA8JD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAyGlE"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dna guard [--level <level>] [--audit] [--remove]
|
|
3
|
+
*
|
|
4
|
+
* Zero-config guardrails for AI agents.
|
|
5
|
+
* Detects the current environment (Claude Code, Cursor, Cline),
|
|
6
|
+
* applies built-in guardrails DNA, and injects constraints.
|
|
7
|
+
*
|
|
8
|
+
* Levels:
|
|
9
|
+
* standard — Safety baseline (species:default genes)
|
|
10
|
+
* yolo — Maximum autonomy + safety net (hard limits on destructive ops)
|
|
11
|
+
* strict — All of standard + strict tool restrictions
|
|
12
|
+
*
|
|
13
|
+
* Reference: docs/references/harness-ecosystem-2026.md §6 (debate consensus #9)
|
|
14
|
+
*/
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { readFile, writeFile, stat, readdir, rm } from "node:fs/promises";
|
|
17
|
+
import { tmpdir } from "node:os";
|
|
18
|
+
import { runSync } from "./sync.js";
|
|
19
|
+
async function fileExists(path) {
|
|
20
|
+
try {
|
|
21
|
+
await stat(path);
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
async function detectEnvironment(cwd) {
|
|
29
|
+
const [hasClaudeDir, hasClaudeMd, hasCursor, hasCline] = await Promise.all([
|
|
30
|
+
fileExists(join(cwd, ".claude")),
|
|
31
|
+
fileExists(join(cwd, "CLAUDE.md")),
|
|
32
|
+
fileExists(join(cwd, ".cursorrules")),
|
|
33
|
+
fileExists(join(cwd, ".clinerules")),
|
|
34
|
+
]);
|
|
35
|
+
return {
|
|
36
|
+
claudeCode: hasClaudeDir || hasClaudeMd,
|
|
37
|
+
cursor: hasCursor,
|
|
38
|
+
cline: hasCline,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// ── Built-in Guardrails DNA ─────────────────────────────────
|
|
42
|
+
function buildGuardrailsDNA(level) {
|
|
43
|
+
const base = {
|
|
44
|
+
version: "0.1.0",
|
|
45
|
+
id: `guardrails_${level}`,
|
|
46
|
+
name: `Guardrails (${level})`,
|
|
47
|
+
type: "personal",
|
|
48
|
+
genes: {
|
|
49
|
+
safety: {
|
|
50
|
+
description: "Prevent destructive operations",
|
|
51
|
+
codons: [
|
|
52
|
+
{ type: "threshold", condition: "production_delete == false" },
|
|
53
|
+
{ type: "threshold", condition: "env_file_delete == false" },
|
|
54
|
+
{ type: "threshold", condition: "force_push_main == false" },
|
|
55
|
+
{ type: "repel", target: "harmful_actions" },
|
|
56
|
+
{ type: "repel", target: "unsafe_operations" },
|
|
57
|
+
{ type: "sense", signal: "irreversible_action", response: "escalate_to_human" },
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
integrity: {
|
|
61
|
+
description: "Honesty and transparency",
|
|
62
|
+
codons: [
|
|
63
|
+
{ type: "threshold", condition: "deception == false" },
|
|
64
|
+
{ type: "threshold", condition: "manipulation == false" },
|
|
65
|
+
{ type: "attract", target: "transparency" },
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
contexts: {},
|
|
70
|
+
epigenetic: { markers: [] },
|
|
71
|
+
cascade: { inherits: ["species:default"], priority: 100 },
|
|
72
|
+
metadata: {
|
|
73
|
+
created: new Date().toISOString(),
|
|
74
|
+
updated: new Date().toISOString(),
|
|
75
|
+
experience_hours: 0,
|
|
76
|
+
gene_count: 2,
|
|
77
|
+
epigenetic_marker_count: 0,
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
if (level === "yolo") {
|
|
81
|
+
// YOLO: add autonomy gene, keep safety but lighter
|
|
82
|
+
base.genes.autonomy = {
|
|
83
|
+
description: "Maximum autonomy within safety boundaries",
|
|
84
|
+
codons: [
|
|
85
|
+
{ type: "attract", target: "autonomous_execution" },
|
|
86
|
+
{ type: "attract", target: "minimal_interruption" },
|
|
87
|
+
{ type: "weight", a: "autonomy", b: "safety", ratio: 0.7 },
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
base.genes.cost_control = {
|
|
91
|
+
description: "Prevent runaway API costs",
|
|
92
|
+
codons: [
|
|
93
|
+
{ type: "threshold", condition: "daily_spend <= 200" },
|
|
94
|
+
],
|
|
95
|
+
};
|
|
96
|
+
base.metadata.gene_count = 4;
|
|
97
|
+
}
|
|
98
|
+
if (level === "strict") {
|
|
99
|
+
// Strict: add accuracy + quality genes
|
|
100
|
+
base.genes.accuracy = {
|
|
101
|
+
description: "Verified, accurate information only",
|
|
102
|
+
codons: [
|
|
103
|
+
{ type: "attract", target: "verified_sources" },
|
|
104
|
+
{ type: "attract", target: "factual_accuracy" },
|
|
105
|
+
{ type: "repel", target: "unverified_claims" },
|
|
106
|
+
{ type: "weight", a: "accuracy", b: "speed", ratio: 0.8 },
|
|
107
|
+
{ type: "sense", signal: "uncertain_information", response: "verify_before_share" },
|
|
108
|
+
],
|
|
109
|
+
};
|
|
110
|
+
base.genes.quality = {
|
|
111
|
+
description: "Thoroughness over speed",
|
|
112
|
+
codons: [
|
|
113
|
+
{ type: "attract", target: "comprehensive_analysis" },
|
|
114
|
+
{ type: "repel", target: "superficial_answers" },
|
|
115
|
+
{ type: "weight", a: "quality", b: "speed", ratio: 0.7 },
|
|
116
|
+
],
|
|
117
|
+
};
|
|
118
|
+
base.metadata.gene_count = 4;
|
|
119
|
+
}
|
|
120
|
+
return base;
|
|
121
|
+
}
|
|
122
|
+
// ── Audit Log ───────────────────────────────────────────────
|
|
123
|
+
async function showAudit() {
|
|
124
|
+
const auditDir = join(process.env.HOME ?? "~", ".intentdna", "audit");
|
|
125
|
+
if (!(await fileExists(auditDir))) {
|
|
126
|
+
process.stderr.write("No audit logs found. Guardrails haven't blocked anything yet.\n");
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const files = await readdir(auditDir);
|
|
130
|
+
const logFiles = files
|
|
131
|
+
.filter(f => f.startsWith("violations-") && f.endsWith(".log"))
|
|
132
|
+
.sort()
|
|
133
|
+
.slice(-7);
|
|
134
|
+
if (logFiles.length === 0) {
|
|
135
|
+
process.stderr.write("No violations in the last 7 days.\n");
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
process.stderr.write("--- Intent DNA Audit Log (last 7 days) ---\n\n");
|
|
139
|
+
let totalViolations = 0;
|
|
140
|
+
for (const f of logFiles) {
|
|
141
|
+
const content = await readFile(join(auditDir, f), "utf-8");
|
|
142
|
+
const lines = content.trim().split("\n").filter(l => l.length > 0);
|
|
143
|
+
totalViolations += lines.length;
|
|
144
|
+
process.stderr.write(`${f} (${lines.length} violations)\n`);
|
|
145
|
+
for (const line of lines) {
|
|
146
|
+
process.stderr.write(` ${line}\n`);
|
|
147
|
+
}
|
|
148
|
+
process.stderr.write("\n");
|
|
149
|
+
}
|
|
150
|
+
process.stderr.write(`Total: ${totalViolations} violation(s) in ${logFiles.length} day(s)\n`);
|
|
151
|
+
}
|
|
152
|
+
// ── Main ────────────────────────────────────────────────────
|
|
153
|
+
export async function runGuard(opts) {
|
|
154
|
+
if (opts.audit) {
|
|
155
|
+
await showAudit();
|
|
156
|
+
return 0;
|
|
157
|
+
}
|
|
158
|
+
const cwd = process.cwd();
|
|
159
|
+
const env = await detectEnvironment(cwd);
|
|
160
|
+
const detected = [];
|
|
161
|
+
if (env.claudeCode)
|
|
162
|
+
detected.push("Claude Code");
|
|
163
|
+
if (env.cursor)
|
|
164
|
+
detected.push("Cursor");
|
|
165
|
+
if (env.cline)
|
|
166
|
+
detected.push("Cline");
|
|
167
|
+
if (detected.length === 0) {
|
|
168
|
+
detected.push("Claude Code");
|
|
169
|
+
env.claudeCode = true;
|
|
170
|
+
}
|
|
171
|
+
process.stderr.write(`Detected: ${detected.join(", ")}\n`);
|
|
172
|
+
process.stderr.write(`Level: ${opts.level}\n\n`);
|
|
173
|
+
// Handle --remove
|
|
174
|
+
if (opts.remove) {
|
|
175
|
+
let code = 0;
|
|
176
|
+
if (env.claudeCode) {
|
|
177
|
+
const r = await runSync({
|
|
178
|
+
files: [], target: "claude-md",
|
|
179
|
+
inject: join(cwd, "CLAUDE.md"),
|
|
180
|
+
hooksDir: join(cwd, ".claude", "hooks"),
|
|
181
|
+
evolve: false, remove: true,
|
|
182
|
+
});
|
|
183
|
+
if (r !== 0)
|
|
184
|
+
code = r;
|
|
185
|
+
}
|
|
186
|
+
if (env.cursor) {
|
|
187
|
+
const r = await runSync({
|
|
188
|
+
files: [], target: "cursorrules",
|
|
189
|
+
inject: join(cwd, ".cursorrules"),
|
|
190
|
+
evolve: false, remove: true,
|
|
191
|
+
});
|
|
192
|
+
if (r !== 0)
|
|
193
|
+
code = r;
|
|
194
|
+
}
|
|
195
|
+
if (env.cline) {
|
|
196
|
+
const r = await runSync({
|
|
197
|
+
files: [], target: "cursorrules",
|
|
198
|
+
inject: join(cwd, ".clinerules"),
|
|
199
|
+
evolve: false, remove: true,
|
|
200
|
+
});
|
|
201
|
+
if (r !== 0)
|
|
202
|
+
code = r;
|
|
203
|
+
}
|
|
204
|
+
return code;
|
|
205
|
+
}
|
|
206
|
+
// Build guardrails DNA and write to temp file
|
|
207
|
+
const dna = buildGuardrailsDNA(opts.level);
|
|
208
|
+
const tmpFile = join(tmpdir(), `intentdna-guard-${Date.now()}.json`);
|
|
209
|
+
await writeFile(tmpFile, JSON.stringify(dna, null, 2));
|
|
210
|
+
try {
|
|
211
|
+
let code = 0;
|
|
212
|
+
if (env.claudeCode) {
|
|
213
|
+
process.stderr.write("--- Claude Code ---\n");
|
|
214
|
+
const r = await runSync({
|
|
215
|
+
files: [tmpFile],
|
|
216
|
+
target: "claude-md",
|
|
217
|
+
inject: join(cwd, "CLAUDE.md"),
|
|
218
|
+
hooksDir: join(cwd, ".claude", "hooks"),
|
|
219
|
+
evolve: false, remove: false,
|
|
220
|
+
});
|
|
221
|
+
if (r !== 0)
|
|
222
|
+
code = r;
|
|
223
|
+
}
|
|
224
|
+
if (env.cursor) {
|
|
225
|
+
process.stderr.write("--- Cursor ---\n");
|
|
226
|
+
const r = await runSync({
|
|
227
|
+
files: [tmpFile],
|
|
228
|
+
target: "cursorrules",
|
|
229
|
+
inject: join(cwd, ".cursorrules"),
|
|
230
|
+
evolve: false, remove: false,
|
|
231
|
+
});
|
|
232
|
+
if (r !== 0)
|
|
233
|
+
code = r;
|
|
234
|
+
}
|
|
235
|
+
if (env.cline) {
|
|
236
|
+
process.stderr.write("--- Cline ---\n");
|
|
237
|
+
const r = await runSync({
|
|
238
|
+
files: [tmpFile],
|
|
239
|
+
target: "cursorrules",
|
|
240
|
+
inject: join(cwd, ".clinerules"),
|
|
241
|
+
evolve: false, remove: false,
|
|
242
|
+
});
|
|
243
|
+
if (r !== 0)
|
|
244
|
+
code = r;
|
|
245
|
+
}
|
|
246
|
+
if (code === 0) {
|
|
247
|
+
process.stderr.write("\nGuardrails active. Your agent now has safety boundaries.\n");
|
|
248
|
+
process.stderr.write("Run 'dna guard --audit' to check violation logs.\n");
|
|
249
|
+
process.stderr.write("Run 'dna guard --remove' to remove guardrails.\n");
|
|
250
|
+
}
|
|
251
|
+
return code;
|
|
252
|
+
}
|
|
253
|
+
finally {
|
|
254
|
+
await rm(tmpFile, { force: true });
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../../../src/cli/commands/guard.ts"],"names":[],"mappings":"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"}
|