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,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intent DNA — Minimal YAML Parser
|
|
3
|
+
*
|
|
4
|
+
* Parses the YAML subset used by DNA templates and dna import output.
|
|
5
|
+
* Supports: scalars, arrays (inline and block), objects (indentation),
|
|
6
|
+
* comments, quoted strings. Does NOT support: anchors, aliases, tags,
|
|
7
|
+
* multi-line scalars (|, >), complex keys, merge keys.
|
|
8
|
+
*
|
|
9
|
+
* Zero external dependencies.
|
|
10
|
+
*/
|
|
11
|
+
export function parseYAML(input) {
|
|
12
|
+
const lines = input.split("\n");
|
|
13
|
+
const result = parseBlock(lines, 0, 0);
|
|
14
|
+
return result.value;
|
|
15
|
+
}
|
|
16
|
+
function parseBlock(lines, startLine, baseIndent) {
|
|
17
|
+
const obj = {};
|
|
18
|
+
let i = startLine;
|
|
19
|
+
while (i < lines.length) {
|
|
20
|
+
const line = lines[i];
|
|
21
|
+
const stripped = line.replace(/#.*$/, "").trimEnd();
|
|
22
|
+
// Skip empty lines and pure comments
|
|
23
|
+
if (stripped.trim() === "") {
|
|
24
|
+
i++;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const indent = getIndent(line);
|
|
28
|
+
// If dedented below our level, we're done with this block
|
|
29
|
+
if (indent < baseIndent) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
// Skip lines indented beyond our level (handled by recursion)
|
|
33
|
+
if (indent > baseIndent && Object.keys(obj).length > 0) {
|
|
34
|
+
// This shouldn't happen in well-structured YAML at this level
|
|
35
|
+
// but handle gracefully
|
|
36
|
+
i++;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const content = stripped.trim();
|
|
40
|
+
// Array item at this level
|
|
41
|
+
if (content.startsWith("- ")) {
|
|
42
|
+
// We're in an array context — parse as array
|
|
43
|
+
const arr = parseArray(lines, i, indent);
|
|
44
|
+
return { value: arr.value, nextLine: arr.nextLine };
|
|
45
|
+
}
|
|
46
|
+
// Key-value pair
|
|
47
|
+
const colonIdx = findKeyColon(content);
|
|
48
|
+
if (colonIdx > 0) {
|
|
49
|
+
const key = content.slice(0, colonIdx).trim();
|
|
50
|
+
const valueStr = content.slice(colonIdx + 1).trim();
|
|
51
|
+
if (valueStr === "" || valueStr === "|" || valueStr === ">") {
|
|
52
|
+
// Value is a nested block — check next line's indent
|
|
53
|
+
const nextNonEmpty = findNextNonEmptyLine(lines, i + 1);
|
|
54
|
+
if (nextNonEmpty < lines.length) {
|
|
55
|
+
const nextIndent = getIndent(lines[nextNonEmpty]);
|
|
56
|
+
if (nextIndent > indent) {
|
|
57
|
+
const nextContent = lines[nextNonEmpty].trim();
|
|
58
|
+
if (nextContent.startsWith("- ")) {
|
|
59
|
+
// Nested array
|
|
60
|
+
const arr = parseArray(lines, nextNonEmpty, nextIndent);
|
|
61
|
+
obj[key] = arr.value;
|
|
62
|
+
i = arr.nextLine;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// Nested object
|
|
66
|
+
const nested = parseBlock(lines, nextNonEmpty, nextIndent);
|
|
67
|
+
obj[key] = nested.value;
|
|
68
|
+
i = nested.nextLine;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
obj[key] = null;
|
|
73
|
+
i++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
obj[key] = null;
|
|
78
|
+
i++;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
// Inline value
|
|
83
|
+
obj[key] = parseScalar(valueStr);
|
|
84
|
+
i++;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
i++;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return { value: obj, nextLine: i };
|
|
92
|
+
}
|
|
93
|
+
function parseArray(lines, startLine, baseIndent) {
|
|
94
|
+
const arr = [];
|
|
95
|
+
let i = startLine;
|
|
96
|
+
while (i < lines.length) {
|
|
97
|
+
const line = lines[i];
|
|
98
|
+
const stripped = line.replace(/#.*$/, "").trimEnd();
|
|
99
|
+
if (stripped.trim() === "") {
|
|
100
|
+
i++;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const indent = getIndent(line);
|
|
104
|
+
if (indent < baseIndent) {
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
if (indent > baseIndent) {
|
|
108
|
+
// Continuation of previous array item (nested content)
|
|
109
|
+
i++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const content = stripped.trim();
|
|
113
|
+
if (!content.startsWith("- ")) {
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
const itemContent = content.slice(2).trim();
|
|
117
|
+
if (itemContent === "") {
|
|
118
|
+
// Nested block under array item
|
|
119
|
+
const nextNonEmpty = findNextNonEmptyLine(lines, i + 1);
|
|
120
|
+
if (nextNonEmpty < lines.length) {
|
|
121
|
+
const nextIndent = getIndent(lines[nextNonEmpty]);
|
|
122
|
+
if (nextIndent > baseIndent) {
|
|
123
|
+
const nested = parseBlock(lines, nextNonEmpty, nextIndent);
|
|
124
|
+
arr.push(nested.value);
|
|
125
|
+
i = nested.nextLine;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
arr.push(null);
|
|
129
|
+
i++;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
arr.push(null);
|
|
134
|
+
i++;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
// Check if there's a nested block under this item
|
|
139
|
+
const nextNonEmpty = findNextNonEmptyLine(lines, i + 1);
|
|
140
|
+
const hasNestedBlock = nextNonEmpty < lines.length && getIndent(lines[nextNonEmpty]) > baseIndent + 2;
|
|
141
|
+
if (hasNestedBlock && findKeyColon(itemContent) > 0) {
|
|
142
|
+
// Array item with key-value that has nested content
|
|
143
|
+
const colonIdx = findKeyColon(itemContent);
|
|
144
|
+
const key = itemContent.slice(0, colonIdx).trim();
|
|
145
|
+
const valStr = itemContent.slice(colonIdx + 1).trim();
|
|
146
|
+
const itemObj = {};
|
|
147
|
+
if (valStr) {
|
|
148
|
+
itemObj[key] = parseScalar(valStr);
|
|
149
|
+
}
|
|
150
|
+
// Parse additional nested keys
|
|
151
|
+
const nestedIndent = getIndent(lines[nextNonEmpty]);
|
|
152
|
+
const nested = parseBlock(lines, nextNonEmpty, nestedIndent);
|
|
153
|
+
if (typeof nested.value === "object" && nested.value !== null) {
|
|
154
|
+
Object.assign(itemObj, { [key]: valStr ? parseScalar(valStr) : null }, nested.value);
|
|
155
|
+
}
|
|
156
|
+
arr.push(itemObj);
|
|
157
|
+
i = nested.nextLine;
|
|
158
|
+
}
|
|
159
|
+
else if (findKeyColon(itemContent) > 0) {
|
|
160
|
+
// Array item that is an object (single line key: value)
|
|
161
|
+
// Check for more keys at indent+2
|
|
162
|
+
const nextNE = findNextNonEmptyLine(lines, i + 1);
|
|
163
|
+
if (nextNE < lines.length && getIndent(lines[nextNE]) === baseIndent + 2 && !lines[nextNE].trim().startsWith("- ")) {
|
|
164
|
+
// Multi-key object array item
|
|
165
|
+
const itemObj = {};
|
|
166
|
+
const colonIdx = findKeyColon(itemContent);
|
|
167
|
+
itemObj[itemContent.slice(0, colonIdx).trim()] = parseScalar(itemContent.slice(colonIdx + 1).trim());
|
|
168
|
+
const nested = parseBlock(lines, nextNE, baseIndent + 2);
|
|
169
|
+
if (typeof nested.value === "object" && nested.value !== null) {
|
|
170
|
+
Object.assign(itemObj, nested.value);
|
|
171
|
+
}
|
|
172
|
+
arr.push(itemObj);
|
|
173
|
+
i = nested.nextLine;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// Single key-value object
|
|
177
|
+
const itemObj = {};
|
|
178
|
+
const colonIdx = findKeyColon(itemContent);
|
|
179
|
+
itemObj[itemContent.slice(0, colonIdx).trim()] = parseScalar(itemContent.slice(colonIdx + 1).trim());
|
|
180
|
+
arr.push(itemObj);
|
|
181
|
+
i++;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
// Simple scalar array item
|
|
186
|
+
arr.push(parseScalar(itemContent));
|
|
187
|
+
i++;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return { value: arr, nextLine: i };
|
|
192
|
+
}
|
|
193
|
+
function parseScalar(s) {
|
|
194
|
+
if (s === "")
|
|
195
|
+
return null;
|
|
196
|
+
// Inline empty object: {}
|
|
197
|
+
if (s === "{}")
|
|
198
|
+
return {};
|
|
199
|
+
// Quoted string
|
|
200
|
+
if ((s.startsWith('"') && s.endsWith('"')) || (s.startsWith("'") && s.endsWith("'"))) {
|
|
201
|
+
return s.slice(1, -1).replace(/\\"/g, '"').replace(/\\'/g, "'").replace(/\\\\/g, "\\");
|
|
202
|
+
}
|
|
203
|
+
// Inline array: [a, b, c]
|
|
204
|
+
if (s.startsWith("[") && s.endsWith("]")) {
|
|
205
|
+
const inner = s.slice(1, -1).trim();
|
|
206
|
+
if (inner === "")
|
|
207
|
+
return [];
|
|
208
|
+
return splitInlineArray(inner).map((item) => parseScalar(item.trim()));
|
|
209
|
+
}
|
|
210
|
+
// Boolean
|
|
211
|
+
if (s === "true" || s === "True" || s === "TRUE")
|
|
212
|
+
return true;
|
|
213
|
+
if (s === "false" || s === "False" || s === "FALSE")
|
|
214
|
+
return false;
|
|
215
|
+
// Null
|
|
216
|
+
if (s === "null" || s === "~")
|
|
217
|
+
return null;
|
|
218
|
+
// Number
|
|
219
|
+
if (/^-?\d+$/.test(s))
|
|
220
|
+
return parseInt(s, 10);
|
|
221
|
+
if (/^-?\d+\.\d+$/.test(s))
|
|
222
|
+
return parseFloat(s);
|
|
223
|
+
// Plain string
|
|
224
|
+
return s;
|
|
225
|
+
}
|
|
226
|
+
function splitInlineArray(s) {
|
|
227
|
+
const result = [];
|
|
228
|
+
let current = "";
|
|
229
|
+
let inQuote = false;
|
|
230
|
+
let quoteChar = "";
|
|
231
|
+
for (let i = 0; i < s.length; i++) {
|
|
232
|
+
const ch = s[i];
|
|
233
|
+
if (inQuote) {
|
|
234
|
+
current += ch;
|
|
235
|
+
if (ch === quoteChar)
|
|
236
|
+
inQuote = false;
|
|
237
|
+
}
|
|
238
|
+
else if (ch === '"' || ch === "'") {
|
|
239
|
+
current += ch;
|
|
240
|
+
inQuote = true;
|
|
241
|
+
quoteChar = ch;
|
|
242
|
+
}
|
|
243
|
+
else if (ch === ",") {
|
|
244
|
+
result.push(current.trim());
|
|
245
|
+
current = "";
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
current += ch;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
if (current.trim())
|
|
252
|
+
result.push(current.trim());
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
function getIndent(line) {
|
|
256
|
+
let count = 0;
|
|
257
|
+
for (const ch of line) {
|
|
258
|
+
if (ch === " ")
|
|
259
|
+
count++;
|
|
260
|
+
else if (ch === "\t")
|
|
261
|
+
count += 2;
|
|
262
|
+
else
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
return count;
|
|
266
|
+
}
|
|
267
|
+
function findKeyColon(s) {
|
|
268
|
+
// Find first colon that's not inside quotes
|
|
269
|
+
let inQuote = false;
|
|
270
|
+
let quoteChar = "";
|
|
271
|
+
for (let i = 0; i < s.length; i++) {
|
|
272
|
+
const ch = s[i];
|
|
273
|
+
if (inQuote) {
|
|
274
|
+
if (ch === quoteChar)
|
|
275
|
+
inQuote = false;
|
|
276
|
+
}
|
|
277
|
+
else if (ch === '"' || ch === "'") {
|
|
278
|
+
inQuote = true;
|
|
279
|
+
quoteChar = ch;
|
|
280
|
+
}
|
|
281
|
+
else if (ch === ":") {
|
|
282
|
+
// Must be followed by space or end of string to be a key separator
|
|
283
|
+
if (i + 1 >= s.length || s[i + 1] === " ") {
|
|
284
|
+
return i;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return -1;
|
|
289
|
+
}
|
|
290
|
+
function findNextNonEmptyLine(lines, from) {
|
|
291
|
+
for (let i = from; i < lines.length; i++) {
|
|
292
|
+
const trimmed = lines[i].replace(/#.*$/, "").trim();
|
|
293
|
+
if (trimmed !== "")
|
|
294
|
+
return i;
|
|
295
|
+
}
|
|
296
|
+
return lines.length;
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=yaml-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-parser.js","sourceRoot":"","sources":["../../src/schema/yaml-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://intentdna.dev/schema/v0.1.json",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"id": "species:default",
|
|
5
|
+
"name": "Species Default DNA",
|
|
6
|
+
"type": "species",
|
|
7
|
+
|
|
8
|
+
"genes": {
|
|
9
|
+
"integrity": {
|
|
10
|
+
"description": "Never deceive or manipulate; always be transparent and honest",
|
|
11
|
+
"codons": [
|
|
12
|
+
{ "type": "threshold", "condition": "deception == false" },
|
|
13
|
+
{ "type": "threshold", "condition": "manipulation == false" },
|
|
14
|
+
{ "type": "attract", "target": "transparency" },
|
|
15
|
+
{ "type": "attract", "target": "honesty" },
|
|
16
|
+
{ "type": "sense", "signal": "ethical_ambiguity", "response": "escalate_to_human" }
|
|
17
|
+
],
|
|
18
|
+
"tags": ["ethics", "core"]
|
|
19
|
+
},
|
|
20
|
+
"safety": {
|
|
21
|
+
"description": "Avoid actions that could cause harm; escalate when uncertain",
|
|
22
|
+
"codons": [
|
|
23
|
+
{ "type": "threshold", "condition": "potential_harm == false" },
|
|
24
|
+
{ "type": "repel", "target": "harmful_actions" },
|
|
25
|
+
{ "type": "repel", "target": "unsafe_operations" },
|
|
26
|
+
{ "type": "sense", "signal": "safety_concern", "response": "escalate_to_human" },
|
|
27
|
+
{ "type": "sense", "signal": "irreversible_action", "response": "escalate_to_human" }
|
|
28
|
+
],
|
|
29
|
+
"tags": ["safety", "core"]
|
|
30
|
+
},
|
|
31
|
+
"accuracy": {
|
|
32
|
+
"description": "Provide accurate, verified information; acknowledge uncertainty",
|
|
33
|
+
"codons": [
|
|
34
|
+
{ "type": "attract", "target": "verified_sources" },
|
|
35
|
+
{ "type": "attract", "target": "factual_accuracy" },
|
|
36
|
+
{ "type": "repel", "target": "unverified_claims" },
|
|
37
|
+
{ "type": "sense", "signal": "uncertain_information", "response": "verify_before_share" },
|
|
38
|
+
{ "type": "weight", "a": "accuracy", "b": "speed", "ratio": 0.7 }
|
|
39
|
+
],
|
|
40
|
+
"tags": ["quality", "core"]
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
"contexts": {},
|
|
45
|
+
|
|
46
|
+
"epigenetic": {
|
|
47
|
+
"markers": []
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
"cascade": {
|
|
51
|
+
"inherits": [],
|
|
52
|
+
"priority": 0
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
"metadata": {
|
|
56
|
+
"created": "2026-03-21T00:00:00Z",
|
|
57
|
+
"updated": "2026-03-21T00:00:00Z",
|
|
58
|
+
"experience_hours": 0,
|
|
59
|
+
"gene_count": 3,
|
|
60
|
+
"epigenetic_marker_count": 0
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# api-backend: 后端 API 开发标准
|
|
2
|
+
# 参考 Superpowers: claude-api, mcp-builder
|
|
3
|
+
# 适用: Node.js/Python API 项目
|
|
4
|
+
|
|
5
|
+
version: "0.1.0"
|
|
6
|
+
id: template_api_backend
|
|
7
|
+
name: API Backend Standards
|
|
8
|
+
type: project
|
|
9
|
+
|
|
10
|
+
cascade:
|
|
11
|
+
inherits: ["species:default"]
|
|
12
|
+
priority: 100
|
|
13
|
+
|
|
14
|
+
genes:
|
|
15
|
+
api_security:
|
|
16
|
+
description: API security best practices
|
|
17
|
+
codons:
|
|
18
|
+
- type: repel
|
|
19
|
+
target: sql_injection
|
|
20
|
+
- type: repel
|
|
21
|
+
target: command_injection
|
|
22
|
+
- type: repel
|
|
23
|
+
target: hardcoded_secrets
|
|
24
|
+
- type: repel
|
|
25
|
+
target: cors_wildcard
|
|
26
|
+
- type: threshold
|
|
27
|
+
condition: "env_file_committed == false"
|
|
28
|
+
action: block
|
|
29
|
+
- type: threshold
|
|
30
|
+
condition: "secret_in_code == false"
|
|
31
|
+
action: block
|
|
32
|
+
|
|
33
|
+
api_quality:
|
|
34
|
+
description: API design quality
|
|
35
|
+
codons:
|
|
36
|
+
- type: attract
|
|
37
|
+
target: input_validation
|
|
38
|
+
- type: attract
|
|
39
|
+
target: error_handling
|
|
40
|
+
- type: attract
|
|
41
|
+
target: rate_limiting
|
|
42
|
+
- type: attract
|
|
43
|
+
target: request_logging
|
|
44
|
+
- type: repel
|
|
45
|
+
target: unvalidated_input
|
|
46
|
+
|
|
47
|
+
database_safety:
|
|
48
|
+
description: Database operation safety
|
|
49
|
+
codons:
|
|
50
|
+
- type: repel
|
|
51
|
+
target: raw_sql_queries
|
|
52
|
+
- type: threshold
|
|
53
|
+
condition: "drop_table == false"
|
|
54
|
+
action: block
|
|
55
|
+
- type: threshold
|
|
56
|
+
condition: "truncate_table == false"
|
|
57
|
+
action: block
|
|
58
|
+
- type: threshold
|
|
59
|
+
condition: "migration_without_backup == false"
|
|
60
|
+
action: escalate
|
|
61
|
+
|
|
62
|
+
contexts: {}
|
|
63
|
+
|
|
64
|
+
roles:
|
|
65
|
+
backend_dev:
|
|
66
|
+
description: Backend developer
|
|
67
|
+
tool_permissions:
|
|
68
|
+
allow: [Read, Edit, Write, Grep, Glob, Bash]
|
|
69
|
+
scope:
|
|
70
|
+
read: ["**/*"]
|
|
71
|
+
write: ["src/**", "test/**", "migrations/**"]
|
|
72
|
+
instructions:
|
|
73
|
+
- Validate all external input at API boundaries
|
|
74
|
+
- Use parameterized queries, never raw SQL
|
|
75
|
+
- Add rate limiting to public endpoints
|
|
76
|
+
- Log all requests with correlation IDs
|
|
77
|
+
- Never commit .env files or secrets
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# brainstorming-first: 先设计后编码
|
|
2
|
+
# 参考 Superpowers: brainstorming skill — Socratic questioning before any code
|
|
3
|
+
# 参考 Superpowers: writing-plans skill — task decomposition with 2-5 min chunks
|
|
4
|
+
# 适用: 任何需要"先想清楚再动手"的项目
|
|
5
|
+
|
|
6
|
+
version: "0.1.0"
|
|
7
|
+
id: template_brainstorming_first
|
|
8
|
+
name: Brainstorming First
|
|
9
|
+
type: project
|
|
10
|
+
|
|
11
|
+
cascade:
|
|
12
|
+
inherits: ["species:default"]
|
|
13
|
+
priority: 100
|
|
14
|
+
|
|
15
|
+
genes:
|
|
16
|
+
design_before_code:
|
|
17
|
+
description: No implementation before requirements are clear
|
|
18
|
+
codons:
|
|
19
|
+
- type: attract
|
|
20
|
+
target: requirements_clarification
|
|
21
|
+
- type: attract
|
|
22
|
+
target: design_document
|
|
23
|
+
- type: repel
|
|
24
|
+
target: premature_implementation
|
|
25
|
+
- type: threshold
|
|
26
|
+
condition: "code_without_plan == false"
|
|
27
|
+
action: block
|
|
28
|
+
|
|
29
|
+
socratic_refinement:
|
|
30
|
+
description: Ask questions to refine requirements, don't assume
|
|
31
|
+
codons:
|
|
32
|
+
- type: attract
|
|
33
|
+
target: clarifying_questions
|
|
34
|
+
- type: attract
|
|
35
|
+
target: assumption_validation
|
|
36
|
+
- type: repel
|
|
37
|
+
target: silent_assumptions
|
|
38
|
+
- type: sense
|
|
39
|
+
signal: ambiguous_requirement
|
|
40
|
+
response: escalate_to_human
|
|
41
|
+
|
|
42
|
+
task_decomposition:
|
|
43
|
+
description: Break work into small verifiable chunks
|
|
44
|
+
codons:
|
|
45
|
+
- type: attract
|
|
46
|
+
target: small_tasks
|
|
47
|
+
- type: attract
|
|
48
|
+
target: verifiable_deliverables
|
|
49
|
+
- type: repel
|
|
50
|
+
target: monolithic_changes
|
|
51
|
+
- type: weight
|
|
52
|
+
a: granularity
|
|
53
|
+
b: speed
|
|
54
|
+
ratio: 0.7
|
|
55
|
+
|
|
56
|
+
contexts: {}
|
|
57
|
+
|
|
58
|
+
roles:
|
|
59
|
+
planner:
|
|
60
|
+
description: Designs solution, decomposes tasks, never writes code
|
|
61
|
+
tool_permissions:
|
|
62
|
+
allow: [Read, Grep, Glob, Bash]
|
|
63
|
+
deny: [Edit, Write, NotebookEdit]
|
|
64
|
+
scope:
|
|
65
|
+
read: ["**/*"]
|
|
66
|
+
write: []
|
|
67
|
+
instructions:
|
|
68
|
+
- Ask Socratic questions to clarify requirements before proposing solutions
|
|
69
|
+
- Present design in sections for user to approve one at a time
|
|
70
|
+
- Decompose into tasks of 2-5 minutes each with exact file paths
|
|
71
|
+
- Never write implementation code — you are design-only
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# branch-finishing: 开发分支完成决策
|
|
2
|
+
# 参考 Superpowers: finishing-a-development-branch skill
|
|
3
|
+
# 参考 Superpowers: using-git-worktrees skill
|
|
4
|
+
# 适用: 功能完成后的 merge/PR/cleanup 决策
|
|
5
|
+
|
|
6
|
+
version: "0.1.0"
|
|
7
|
+
id: template_branch_finishing
|
|
8
|
+
name: Branch Finishing Workflow
|
|
9
|
+
type: project
|
|
10
|
+
|
|
11
|
+
cascade:
|
|
12
|
+
inherits: ["species:default"]
|
|
13
|
+
priority: 100
|
|
14
|
+
|
|
15
|
+
genes:
|
|
16
|
+
clean_finish:
|
|
17
|
+
description: Ensure branch is ready before merge
|
|
18
|
+
codons:
|
|
19
|
+
- type: attract
|
|
20
|
+
target: all_tests_passing
|
|
21
|
+
- type: attract
|
|
22
|
+
target: no_debug_artifacts
|
|
23
|
+
- type: repel
|
|
24
|
+
target: merge_with_failing_tests
|
|
25
|
+
- type: threshold
|
|
26
|
+
condition: "merge_with_conflicts == false"
|
|
27
|
+
action: block
|
|
28
|
+
|
|
29
|
+
proper_commit_history:
|
|
30
|
+
description: Clean, meaningful commit messages
|
|
31
|
+
codons:
|
|
32
|
+
- type: attract
|
|
33
|
+
target: descriptive_commits
|
|
34
|
+
- type: attract
|
|
35
|
+
target: atomic_commits
|
|
36
|
+
- type: repel
|
|
37
|
+
target: wip_commits_in_main
|
|
38
|
+
- type: repel
|
|
39
|
+
target: giant_single_commit
|
|
40
|
+
|
|
41
|
+
safe_merge:
|
|
42
|
+
description: Never force-push or destructive merge
|
|
43
|
+
codons:
|
|
44
|
+
- type: threshold
|
|
45
|
+
condition: "force_push_main == false"
|
|
46
|
+
action: block
|
|
47
|
+
- type: threshold
|
|
48
|
+
condition: "delete_branch_with_unmerged == false"
|
|
49
|
+
action: escalate
|
|
50
|
+
- type: sense
|
|
51
|
+
signal: irreversible_action
|
|
52
|
+
response: escalate_to_human
|
|
53
|
+
|
|
54
|
+
contexts: {}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# code-review-pipeline: 代码审查流水线
|
|
2
|
+
# 参考 Superpowers: requesting-code-review, receiving-code-review
|
|
3
|
+
# 适用: 需要结构化 agent 审查流程的团队
|
|
4
|
+
|
|
5
|
+
version: "0.1.0"
|
|
6
|
+
id: template_code_review_pipeline
|
|
7
|
+
name: Code Review Pipeline
|
|
8
|
+
type: project
|
|
9
|
+
|
|
10
|
+
cascade:
|
|
11
|
+
inherits: ["species:default"]
|
|
12
|
+
priority: 100
|
|
13
|
+
|
|
14
|
+
genes:
|
|
15
|
+
review_rigor:
|
|
16
|
+
description: Thorough code review standards
|
|
17
|
+
codons:
|
|
18
|
+
- type: attract
|
|
19
|
+
target: line_by_line_review
|
|
20
|
+
- type: attract
|
|
21
|
+
target: security_check
|
|
22
|
+
- type: attract
|
|
23
|
+
target: test_coverage_check
|
|
24
|
+
- type: repel
|
|
25
|
+
target: rubber_stamp_approval
|
|
26
|
+
- type: threshold
|
|
27
|
+
condition: "merge_without_review == false"
|
|
28
|
+
action: block
|
|
29
|
+
|
|
30
|
+
constructive_feedback:
|
|
31
|
+
description: Reviews should be actionable
|
|
32
|
+
codons:
|
|
33
|
+
- type: attract
|
|
34
|
+
target: specific_suggestions
|
|
35
|
+
- type: attract
|
|
36
|
+
target: code_references
|
|
37
|
+
- type: repel
|
|
38
|
+
target: vague_criticism
|
|
39
|
+
|
|
40
|
+
roles:
|
|
41
|
+
reviewer:
|
|
42
|
+
description: Code reviewer — read-only analysis
|
|
43
|
+
tool_permissions:
|
|
44
|
+
allow: [Read, Grep, Glob, Bash]
|
|
45
|
+
deny: [Edit, Write, NotebookEdit]
|
|
46
|
+
scope:
|
|
47
|
+
read: ["**/*"]
|
|
48
|
+
write: []
|
|
49
|
+
instructions:
|
|
50
|
+
- Check design compliance against task specification
|
|
51
|
+
- Verify test coverage for new functionality
|
|
52
|
+
- Look for security vulnerabilities (OWASP top 10)
|
|
53
|
+
- Check for breaking API changes
|
|
54
|
+
- Give clear PASS/FAIL verdict with line references
|
|
55
|
+
post_checks:
|
|
56
|
+
- vitest_run
|
|
57
|
+
- tsc_no_errors
|
|
58
|
+
|
|
59
|
+
implementer:
|
|
60
|
+
description: Code implementer — responds to review feedback
|
|
61
|
+
tool_permissions:
|
|
62
|
+
allow: [Read, Edit, Write, Grep, Glob, Bash]
|
|
63
|
+
scope:
|
|
64
|
+
read: ["**/*"]
|
|
65
|
+
write: ["src/**", "test/**"]
|
|
66
|
+
instructions:
|
|
67
|
+
- Address all CRITICAL issues from review before requesting re-review
|
|
68
|
+
- Add regression tests for every bugfix
|
|
69
|
+
- Run full test suite after changes
|
|
70
|
+
|
|
71
|
+
contexts: {}
|
|
72
|
+
|
|
73
|
+
workflow:
|
|
74
|
+
name: review-cycle
|
|
75
|
+
description: Implement then review with retry on failure
|
|
76
|
+
steps:
|
|
77
|
+
- id: implement
|
|
78
|
+
role: implementer
|
|
79
|
+
description: Implement the feature
|
|
80
|
+
prompt: "Implement task {{task_id}} according to the design document."
|
|
81
|
+
- id: review
|
|
82
|
+
role: reviewer
|
|
83
|
+
description: Review the implementation
|
|
84
|
+
prompt: "Review all changes for task {{task_id}}. Output PASS or FAIL."
|
|
85
|
+
transitions:
|
|
86
|
+
- from: review
|
|
87
|
+
to: implement
|
|
88
|
+
condition: fail
|
|
89
|
+
retry_policy:
|
|
90
|
+
max_retries: 2
|
|
91
|
+
retry_from: implement
|