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.
Files changed (184) hide show
  1. package/LICENSE +69 -0
  2. package/README.md +251 -0
  3. package/dist/audit/index.d.ts +109 -0
  4. package/dist/audit/index.d.ts.map +1 -0
  5. package/dist/audit/index.js +144 -0
  6. package/dist/audit/index.js.map +1 -0
  7. package/dist/cli/commands/compile.d.ts +14 -0
  8. package/dist/cli/commands/compile.d.ts.map +1 -0
  9. package/dist/cli/commands/compile.js +89 -0
  10. package/dist/cli/commands/compile.js.map +1 -0
  11. package/dist/cli/commands/epigenetic.d.ts +20 -0
  12. package/dist/cli/commands/epigenetic.d.ts.map +1 -0
  13. package/dist/cli/commands/epigenetic.js +112 -0
  14. package/dist/cli/commands/epigenetic.js.map +1 -0
  15. package/dist/cli/commands/evolve.d.ts +12 -0
  16. package/dist/cli/commands/evolve.d.ts.map +1 -0
  17. package/dist/cli/commands/evolve.js +52 -0
  18. package/dist/cli/commands/evolve.js.map +1 -0
  19. package/dist/cli/commands/guard.d.ts +22 -0
  20. package/dist/cli/commands/guard.d.ts.map +1 -0
  21. package/dist/cli/commands/guard.js +257 -0
  22. package/dist/cli/commands/guard.js.map +1 -0
  23. package/dist/cli/commands/import.d.ts +71 -0
  24. package/dist/cli/commands/import.d.ts.map +1 -0
  25. package/dist/cli/commands/import.js +428 -0
  26. package/dist/cli/commands/import.js.map +1 -0
  27. package/dist/cli/commands/init.d.ts +13 -0
  28. package/dist/cli/commands/init.d.ts.map +1 -0
  29. package/dist/cli/commands/init.js +171 -0
  30. package/dist/cli/commands/init.js.map +1 -0
  31. package/dist/cli/commands/run.d.ts +59 -0
  32. package/dist/cli/commands/run.d.ts.map +1 -0
  33. package/dist/cli/commands/run.js +350 -0
  34. package/dist/cli/commands/run.js.map +1 -0
  35. package/dist/cli/commands/show.d.ts +12 -0
  36. package/dist/cli/commands/show.d.ts.map +1 -0
  37. package/dist/cli/commands/show.js +78 -0
  38. package/dist/cli/commands/show.js.map +1 -0
  39. package/dist/cli/commands/sync.d.ts +31 -0
  40. package/dist/cli/commands/sync.d.ts.map +1 -0
  41. package/dist/cli/commands/sync.js +307 -0
  42. package/dist/cli/commands/sync.js.map +1 -0
  43. package/dist/cli/commands/validate.d.ts +11 -0
  44. package/dist/cli/commands/validate.d.ts.map +1 -0
  45. package/dist/cli/commands/validate.js +30 -0
  46. package/dist/cli/commands/validate.js.map +1 -0
  47. package/dist/cli/commands/verify.d.ts +33 -0
  48. package/dist/cli/commands/verify.d.ts.map +1 -0
  49. package/dist/cli/commands/verify.js +102 -0
  50. package/dist/cli/commands/verify.js.map +1 -0
  51. package/dist/cli/index.d.ts +15 -0
  52. package/dist/cli/index.d.ts.map +1 -0
  53. package/dist/cli/index.js +358 -0
  54. package/dist/cli/index.js.map +1 -0
  55. package/dist/cli/util/format.d.ts +24 -0
  56. package/dist/cli/util/format.d.ts.map +1 -0
  57. package/dist/cli/util/format.js +67 -0
  58. package/dist/cli/util/format.js.map +1 -0
  59. package/dist/cli/util/prompt.d.ts +11 -0
  60. package/dist/cli/util/prompt.d.ts.map +1 -0
  61. package/dist/cli/util/prompt.js +51 -0
  62. package/dist/cli/util/prompt.js.map +1 -0
  63. package/dist/compiler/activate.d.ts +29 -0
  64. package/dist/compiler/activate.d.ts.map +1 -0
  65. package/dist/compiler/activate.js +141 -0
  66. package/dist/compiler/activate.js.map +1 -0
  67. package/dist/compiler/cascade.d.ts +27 -0
  68. package/dist/compiler/cascade.d.ts.map +1 -0
  69. package/dist/compiler/cascade.js +124 -0
  70. package/dist/compiler/cascade.js.map +1 -0
  71. package/dist/compiler/compile.d.ts +17 -0
  72. package/dist/compiler/compile.d.ts.map +1 -0
  73. package/dist/compiler/compile.js +219 -0
  74. package/dist/compiler/compile.js.map +1 -0
  75. package/dist/compiler/index.d.ts +28 -0
  76. package/dist/compiler/index.d.ts.map +1 -0
  77. package/dist/compiler/index.js +51 -0
  78. package/dist/compiler/index.js.map +1 -0
  79. package/dist/compiler/workflow.d.ts +37 -0
  80. package/dist/compiler/workflow.d.ts.map +1 -0
  81. package/dist/compiler/workflow.js +274 -0
  82. package/dist/compiler/workflow.js.map +1 -0
  83. package/dist/evolution/collector.d.ts +52 -0
  84. package/dist/evolution/collector.d.ts.map +1 -0
  85. package/dist/evolution/collector.js +72 -0
  86. package/dist/evolution/collector.js.map +1 -0
  87. package/dist/evolution/fitness.d.ts +33 -0
  88. package/dist/evolution/fitness.d.ts.map +1 -0
  89. package/dist/evolution/fitness.js +96 -0
  90. package/dist/evolution/fitness.js.map +1 -0
  91. package/dist/evolution/index.d.ts +53 -0
  92. package/dist/evolution/index.d.ts.map +1 -0
  93. package/dist/evolution/index.js +69 -0
  94. package/dist/evolution/index.js.map +1 -0
  95. package/dist/evolution/marker-gen.d.ts +31 -0
  96. package/dist/evolution/marker-gen.d.ts.map +1 -0
  97. package/dist/evolution/marker-gen.js +141 -0
  98. package/dist/evolution/marker-gen.js.map +1 -0
  99. package/dist/evolution/store.d.ts +24 -0
  100. package/dist/evolution/store.d.ts.map +1 -0
  101. package/dist/evolution/store.js +78 -0
  102. package/dist/evolution/store.js.map +1 -0
  103. package/dist/evolution/types.d.ts +73 -0
  104. package/dist/evolution/types.d.ts.map +1 -0
  105. package/dist/evolution/types.js +14 -0
  106. package/dist/evolution/types.js.map +1 -0
  107. package/dist/index.d.ts +4 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +4 -0
  110. package/dist/index.js.map +1 -0
  111. package/dist/log/logger.d.ts +15 -0
  112. package/dist/log/logger.d.ts.map +1 -0
  113. package/dist/log/logger.js +36 -0
  114. package/dist/log/logger.js.map +1 -0
  115. package/dist/runtime/agent-md.d.ts +56 -0
  116. package/dist/runtime/agent-md.d.ts.map +1 -0
  117. package/dist/runtime/agent-md.js +257 -0
  118. package/dist/runtime/agent-md.js.map +1 -0
  119. package/dist/runtime/claude-sdk.d.ts +51 -0
  120. package/dist/runtime/claude-sdk.d.ts.map +1 -0
  121. package/dist/runtime/claude-sdk.js +78 -0
  122. package/dist/runtime/claude-sdk.js.map +1 -0
  123. package/dist/runtime/hooks.d.ts +67 -0
  124. package/dist/runtime/hooks.d.ts.map +1 -0
  125. package/dist/runtime/hooks.js +645 -0
  126. package/dist/runtime/hooks.js.map +1 -0
  127. package/dist/runtime/index.d.ts +9 -0
  128. package/dist/runtime/index.d.ts.map +1 -0
  129. package/dist/runtime/index.js +5 -0
  130. package/dist/runtime/index.js.map +1 -0
  131. package/dist/runtime/markdown.d.ts +36 -0
  132. package/dist/runtime/markdown.d.ts.map +1 -0
  133. package/dist/runtime/markdown.js +214 -0
  134. package/dist/runtime/markdown.js.map +1 -0
  135. package/dist/runtime/settings-adapter.d.ts +33 -0
  136. package/dist/runtime/settings-adapter.d.ts.map +1 -0
  137. package/dist/runtime/settings-adapter.js +78 -0
  138. package/dist/runtime/settings-adapter.js.map +1 -0
  139. package/dist/runtime/skill-adapter.d.ts +22 -0
  140. package/dist/runtime/skill-adapter.d.ts.map +1 -0
  141. package/dist/runtime/skill-adapter.js +170 -0
  142. package/dist/runtime/skill-adapter.js.map +1 -0
  143. package/dist/runtime/workflow-runner.d.ts +53 -0
  144. package/dist/runtime/workflow-runner.d.ts.map +1 -0
  145. package/dist/runtime/workflow-runner.js +420 -0
  146. package/dist/runtime/workflow-runner.js.map +1 -0
  147. package/dist/schema/index.d.ts +2 -0
  148. package/dist/schema/index.d.ts.map +1 -0
  149. package/dist/schema/index.js +2 -0
  150. package/dist/schema/index.js.map +1 -0
  151. package/dist/schema/types.d.ts +275 -0
  152. package/dist/schema/types.d.ts.map +1 -0
  153. package/dist/schema/types.js +11 -0
  154. package/dist/schema/types.js.map +1 -0
  155. package/dist/schema/validate.d.ts +20 -0
  156. package/dist/schema/validate.d.ts.map +1 -0
  157. package/dist/schema/validate.js +379 -0
  158. package/dist/schema/validate.js.map +1 -0
  159. package/dist/schema/yaml-parser.d.ts +12 -0
  160. package/dist/schema/yaml-parser.d.ts.map +1 -0
  161. package/dist/schema/yaml-parser.js +298 -0
  162. package/dist/schema/yaml-parser.js.map +1 -0
  163. package/dist/species/default.dna.json +62 -0
  164. package/dist/templates/api-backend.dna.yaml +77 -0
  165. package/dist/templates/brainstorming-first.dna.yaml +71 -0
  166. package/dist/templates/branch-finishing.dna.yaml +54 -0
  167. package/dist/templates/code-review-pipeline.dna.yaml +91 -0
  168. package/dist/templates/devops-cicd.dna.yaml +67 -0
  169. package/dist/templates/documentation-writer.dna.yaml +71 -0
  170. package/dist/templates/enterprise-baseline.dna.yaml +66 -0
  171. package/dist/templates/frontend-quality.dna.yaml +88 -0
  172. package/dist/templates/full-pipeline.dna.yaml +129 -0
  173. package/dist/templates/mobile-dev.dna.yaml +68 -0
  174. package/dist/templates/monorepo-governance.dna.yaml +60 -0
  175. package/dist/templates/multi-perspective-review.dna.yaml +109 -0
  176. package/dist/templates/pr-submitter.dna.yaml +55 -0
  177. package/dist/templates/safe-refactoring.dna.yaml +65 -0
  178. package/dist/templates/secure-dev.dna.yaml +90 -0
  179. package/dist/templates/subagent-parallel.dna.yaml +98 -0
  180. package/dist/templates/systematic-debugging.dna.yaml +55 -0
  181. package/dist/templates/tdd-strict.dna.yaml +69 -0
  182. package/dist/templates/verification-loop.dna.yaml +53 -0
  183. package/dist/templates/yolo-with-guardrails.dna.yaml +56 -0
  184. 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":"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"}
@@ -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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"}