arggon-harness 0.1.0 → 0.1.2
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/README.md +52 -0
- package/config/default-opencode.json +8 -0
- package/dist/init.js +149 -5
- package/dist/init.js.map +1 -1
- package/dist/plugin/engine/types.d.ts +2 -139
- package/dist/plugin/engine/types.d.ts.map +1 -1
- package/dist/plugin/engine/validator.d.ts +0 -12
- package/dist/plugin/engine/validator.d.ts.map +1 -1
- package/dist/plugin/engine/validator.js +0 -187
- package/dist/plugin/engine/validator.js.map +1 -1
- package/dist/plugin/index.d.ts +0 -4
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +4 -6
- package/dist/plugin/index.js.map +1 -1
- package/dist/plugin/tools/spec-design-hifi.d.ts +0 -1
- package/dist/plugin/tools/spec-design-hifi.d.ts.map +1 -1
- package/dist/plugin/tools/spec-design-hifi.js +3 -271
- package/dist/plugin/tools/spec-design-hifi.js.map +1 -1
- package/dist/plugin/tools/spec-design-wireframe.d.ts +2 -3
- package/dist/plugin/tools/spec-design-wireframe.d.ts.map +1 -1
- package/dist/plugin/tools/spec-design-wireframe.js +2 -118
- package/dist/plugin/tools/spec-design-wireframe.js.map +1 -1
- package/dist/plugin/tools/spec-schema-list.d.ts.map +1 -1
- package/dist/plugin/tools/spec-schema-list.js +6 -2
- package/dist/plugin/tools/spec-schema-list.js.map +1 -1
- package/dist/plugin/tools/spec-validate.d.ts.map +1 -1
- package/dist/plugin/tools/spec-validate.js +0 -2
- package/dist/plugin/tools/spec-validate.js.map +1 -1
- package/dist/plugin/tools/util.d.ts +1 -1
- package/dist/plugin/tools/util.d.ts.map +1 -1
- package/dist/plugin/tools/util.js +35 -2
- package/dist/plugin/tools/util.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/orchestrator.md +39 -0
- package/src/agents/spec-propose.md +17 -0
- package/src/schemas/hybrid.yaml +0 -49
- package/src/schemas/spec-driven.yaml +0 -49
- package/src/schemas/tdd.yaml +0 -49
- package/src/schemas/ui-driven.yaml +104 -0
- package/src/skills/cbm-index-repo/SKILL.md +39 -0
- package/src/templates/AGENTS.md +37 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-schema-list.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-schema-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAGxD,wBAAsB,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"spec-schema-list.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-schema-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAGxD,wBAAsB,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BrF"}
|
|
@@ -9,11 +9,15 @@ export async function specSchemaList(_args, ctx) {
|
|
|
9
9
|
if (file.endsWith(".yaml")) {
|
|
10
10
|
const content = await fs.readFile(`${schemasDir}/${file}`, "utf-8");
|
|
11
11
|
const schema = parseYaml(content);
|
|
12
|
-
|
|
12
|
+
const entry = {
|
|
13
13
|
name: schema.name,
|
|
14
14
|
version: schema.version,
|
|
15
15
|
description: schema.description
|
|
16
|
-
}
|
|
16
|
+
};
|
|
17
|
+
if (schema.extends) {
|
|
18
|
+
entry.extends = schema.extends;
|
|
19
|
+
}
|
|
20
|
+
schemas.push(entry);
|
|
17
21
|
}
|
|
18
22
|
}
|
|
19
23
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-schema-list.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-schema-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAS,EAAE,GAAgB;IAC9D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAA;QACxD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAE1C,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;gBACnE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;gBACjC,
|
|
1
|
+
{"version":3,"file":"spec-schema-list.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-schema-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAS,EAAE,GAAgB;IAC9D,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAA;QACxD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAE1C,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;gBACnE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;gBACjC,MAAM,KAAK,GAAQ;oBACjB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;iBAChC,CAAA;gBACD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;gBAChC,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,QAAQ,EAAE,EAAE,OAAO,EAAE;SACtB,CAAA;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAA;IACzE,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-validate.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"spec-validate.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-validate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAgBxD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA4GhG;AAID,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IACnD,OAAO,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAA;IACnC,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB"}
|
|
@@ -9,8 +9,6 @@ const VALIDATORS = {
|
|
|
9
9
|
proposal: Validator.validateProposal,
|
|
10
10
|
specs: Validator.validateSpecs,
|
|
11
11
|
"design-tech": Validator.validateDesignTech,
|
|
12
|
-
"design-wireframe": Validator.validateDesignWireframe,
|
|
13
|
-
"design-hifi": Validator.validateDesignHiFi,
|
|
14
12
|
tasks: Validator.validateTasks,
|
|
15
13
|
};
|
|
16
14
|
export async function specValidate(args, ctx) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-validate.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,aAAa,MAAM,6BAA6B,CAAA;AAC5D,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAGvD,MAAM,UAAU,GAAoD;IAClE,QAAQ,EAAE,SAAS,CAAC,gBAAgB;IACpC,KAAK,EAAE,SAAS,CAAC,aAAa;IAC9B,aAAa,EAAE,SAAS,CAAC,kBAAkB;IAC3C,
|
|
1
|
+
{"version":3,"file":"spec-validate.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,5 +21,5 @@ export declare function parseYaml(content: string): any;
|
|
|
21
21
|
* schemas/, templates/, skills/, commands/, and agents/.
|
|
22
22
|
*/
|
|
23
23
|
export declare const assetRoot: (pluginDir: string) => string;
|
|
24
|
-
export declare function loadSchema(pluginDir: string, schemaName: string): Promise<Schema>;
|
|
24
|
+
export declare function loadSchema(pluginDir: string, schemaName: string, seen?: Set<string>): Promise<Schema>;
|
|
25
25
|
//# sourceMappingURL=util.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAE9C;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,KAAG,MAQ7C,CAAA;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC9B;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAE9C;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,KAAG,MAQ7C,CAAA;AAED,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAyC3G"}
|
|
@@ -25,9 +25,42 @@ export const assetRoot = (pluginDir) => {
|
|
|
25
25
|
// Dev mode: pluginDir = <root>/src/plugin/ → <root>/src
|
|
26
26
|
return parent;
|
|
27
27
|
};
|
|
28
|
-
export async function loadSchema(pluginDir, schemaName) {
|
|
28
|
+
export async function loadSchema(pluginDir, schemaName, seen) {
|
|
29
|
+
// Circular dependency detection
|
|
30
|
+
if (!seen)
|
|
31
|
+
seen = new Set();
|
|
32
|
+
if (seen.has(schemaName)) {
|
|
33
|
+
const chain = Array.from(seen).join(" -> ");
|
|
34
|
+
throw new Error(`Circular schema inheritance detected: ${chain} -> ${schemaName}`);
|
|
35
|
+
}
|
|
36
|
+
seen.add(schemaName);
|
|
29
37
|
const schemaPath = path.join(assetRoot(pluginDir), "schemas", `${schemaName}.yaml`);
|
|
30
38
|
const content = await fs.readFile(schemaPath, "utf-8");
|
|
31
|
-
|
|
39
|
+
const raw = parseYaml(content);
|
|
40
|
+
if (raw.extends) {
|
|
41
|
+
// Recursively load parent schema
|
|
42
|
+
const parent = await loadSchema(pluginDir, raw.extends, seen);
|
|
43
|
+
// Merge: start from a shallow copy of parent, then override with child values
|
|
44
|
+
const merged = {
|
|
45
|
+
name: raw.name,
|
|
46
|
+
version: raw.version,
|
|
47
|
+
description: raw.description || parent.description,
|
|
48
|
+
artifacts: [...parent.artifacts],
|
|
49
|
+
apply: raw.apply || parent.apply,
|
|
50
|
+
extends: raw.extends,
|
|
51
|
+
};
|
|
52
|
+
// Merge artifacts: child overrides matching ids, appends new ones
|
|
53
|
+
for (const childArtifact of raw.artifacts) {
|
|
54
|
+
const existingIndex = merged.artifacts.findIndex(a => a.id === childArtifact.id);
|
|
55
|
+
if (existingIndex >= 0) {
|
|
56
|
+
merged.artifacts[existingIndex] = childArtifact;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
merged.artifacts.push(childArtifact);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return merged;
|
|
63
|
+
}
|
|
64
|
+
return raw;
|
|
32
65
|
}
|
|
33
66
|
//# sourceMappingURL=util.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAA;AAa1B,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAU,EAAE;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;QACrC,8DAA8D;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAChD,CAAC;IACD,wDAAwD;IACxD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,UAAkB;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/plugin/tools/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,IAAI,MAAM,SAAS,CAAA;AAa1B,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAC3B,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAU,EAAE;IACrD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;QACrC,8DAA8D;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IAChD,CAAC;IACD,wDAAwD;IACxD,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,SAAiB,EAAE,UAAkB,EAAE,IAAkB;IACxF,gCAAgC;IAChC,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IACnC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3C,MAAM,IAAI,KAAK,CAAC,yCAAyC,KAAK,OAAO,UAAU,EAAE,CAAC,CAAA;IACpF,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,UAAU,OAAO,CAAC,CAAA;IACnF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IACtD,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAW,CAAA;IAExC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,iCAAiC;QACjC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAE7D,8EAA8E;QAC9E,MAAM,MAAM,GAAW;YACrB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW;YAClD,SAAS,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;YAChC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;YAChC,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAA;QAED,kEAAkE;QAClE,KAAK,MAAM,aAAa,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,aAAa,CAAC,EAAE,CAAC,CAAA;YAChF,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,aAAa,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;YACtC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -14,6 +14,7 @@ permission:
|
|
|
14
14
|
spec_change_status: allow
|
|
15
15
|
spec_task_progress: allow
|
|
16
16
|
spec_validate: allow
|
|
17
|
+
codebase-memory-mcp_*: allow
|
|
17
18
|
external_directory:
|
|
18
19
|
"/run/media/arggon/HDD/src/externals/opencode/**": allow
|
|
19
20
|
"/run/media/arggon/HDD/src/externals/open-design/**": allow
|
|
@@ -73,6 +74,44 @@ You manage the Harness workflow: explore → propose → apply → verify → ar
|
|
|
73
74
|
- **Verify phase** → delegate to `spec-verify` subagent
|
|
74
75
|
- **Archive phase** → delegate to `spec-archive` subagent
|
|
75
76
|
|
|
77
|
+
### Schema with Design Artifacts (Staged Propose Workflow)
|
|
78
|
+
|
|
79
|
+
When a change's schema includes a `design-html` artifact (visible via `spec_change_status` artifact lists), the propose phase is split into two stages with a human review gate:
|
|
80
|
+
|
|
81
|
+
**Stage 1 — Propose (partial):**
|
|
82
|
+
Delegate to `spec-propose` as usual. The propose agent creates:
|
|
83
|
+
1. proposal.yaml
|
|
84
|
+
2. specs/*.yaml
|
|
85
|
+
3. design-tech.yaml
|
|
86
|
+
4. design.html
|
|
87
|
+
|
|
88
|
+
(Only for schemas that include design-html. For schemas without,
|
|
89
|
+
the propose agent creates all artifacts in a single pass as normal.)
|
|
90
|
+
|
|
91
|
+
The propose agent then returns control to you (the orchestrator).
|
|
92
|
+
|
|
93
|
+
**Stage 2 — Human Review:**
|
|
94
|
+
After the propose agent returns:
|
|
95
|
+
1. Read the generated `design.html` file from the change directory
|
|
96
|
+
2. Present the design to the user using the question tool:
|
|
97
|
+
- Show key details about the design (pages, sections, color direction)
|
|
98
|
+
- Ask: "Do you like the design.html? Should we proceed to wireframe/hifi formalization?"
|
|
99
|
+
- Options: "Yes, looks good" / "No, iterate on it"
|
|
100
|
+
3. If the user says No:
|
|
101
|
+
- Ask for specific feedback: "What would you like changed?"
|
|
102
|
+
- Continue the propose agent task with the feedback to regenerate design.html
|
|
103
|
+
- Loop back to step 2
|
|
104
|
+
4. If the user says Yes:
|
|
105
|
+
- Continue the propose agent to create design-wireframe.yaml, design-hifi.yaml, and tasks.yaml
|
|
106
|
+
- Verify completion with spec_change_status
|
|
107
|
+
|
|
108
|
+
**Schema detection:**
|
|
109
|
+
- Call `spec_change_status` on the change to see its artifact list
|
|
110
|
+
- Check if `design-html` appears in the required artifact list
|
|
111
|
+
- If the schema has a `design-html` artifact, follow the staged workflow above
|
|
112
|
+
- If the schema does NOT have `design-html`, use the standard single-pass propose workflow
|
|
113
|
+
- This works for ANY schema with design-html, not just ui-driven
|
|
114
|
+
|
|
76
115
|
### Explore Phase: Direct Interaction
|
|
77
116
|
|
|
78
117
|
You are a **thinking partner**, not a task executor. Handle this phase directly — do NOT delegate to a subagent.
|
|
@@ -106,6 +106,23 @@ Before generating any artifact, read `spec/config.yaml` for:
|
|
|
106
106
|
- Define acceptance criteria
|
|
107
107
|
- Order by dependency
|
|
108
108
|
|
|
109
|
+
### Design-html Detection (Staged Propose Support)
|
|
110
|
+
|
|
111
|
+
After creating each artifact, check the schema's artifact list (via spec_change_status).
|
|
112
|
+
|
|
113
|
+
If the schema has a `design-html` artifact AND you have just created it:
|
|
114
|
+
1. Signal to the orchestrator: "design.html created, ready for human review"
|
|
115
|
+
2. Do NOT continue to design-wireframe, design-hifi, or tasks
|
|
116
|
+
3. Return control to the orchestrator — the human will review design.html
|
|
117
|
+
4. The orchestrator will call back to continue when approved
|
|
118
|
+
|
|
119
|
+
This is artifact-based detection — it works for ANY schema that includes
|
|
120
|
+
`design-html` in its artifact list (ui-driven, or any future schema).
|
|
121
|
+
|
|
122
|
+
For schemas without `design-html`:
|
|
123
|
+
- Continue creating artifacts as normal until `isComplete: true`
|
|
124
|
+
- Single-pass propose as usual
|
|
125
|
+
|
|
109
126
|
## Guardrails
|
|
110
127
|
|
|
111
128
|
- Read dependency artifacts before creating new ones
|
package/src/schemas/hybrid.yaml
CHANGED
|
@@ -50,55 +50,6 @@ artifacts:
|
|
|
50
50
|
- Practical implementation concerns
|
|
51
51
|
requires: [specs]
|
|
52
52
|
|
|
53
|
-
- id: design-wireframe
|
|
54
|
-
generates: design-wireframe.yaml
|
|
55
|
-
description: Page wireframes with layouts, component placements, user flows, and annotations
|
|
56
|
-
template: design-wireframe.yaml
|
|
57
|
-
optional: true
|
|
58
|
-
instruction: |
|
|
59
|
-
Create wireframe specifications for the change's UI pages.
|
|
60
|
-
|
|
61
|
-
Only create this artifact if the change involves user-facing UI changes.
|
|
62
|
-
If the change is backend-only, infrastructure, or has no visual component,
|
|
63
|
-
skip this artifact.
|
|
64
|
-
|
|
65
|
-
Include:
|
|
66
|
-
1. Pages - list all UI pages/screens with their layout regions
|
|
67
|
-
2. Layout - define regions (header, sidebar, main, footer) with ordering
|
|
68
|
-
3. Components - place UI components (buttons, cards, inputs, etc.) in regions with positions and sizes
|
|
69
|
-
4. Flows - document user navigation paths between pages
|
|
70
|
-
5. Annotations - add notes about constraints, edge cases, design decisions
|
|
71
|
-
|
|
72
|
-
Use kebab-case for page IDs, component IDs, and flow IDs.
|
|
73
|
-
Position coordinates use a 12-column grid system (0-11).
|
|
74
|
-
|
|
75
|
-
The optional html_preview flag generates a visual wireframe preview.
|
|
76
|
-
requires: [design-tech]
|
|
77
|
-
|
|
78
|
-
- id: design-hifi
|
|
79
|
-
generates: design-hifi.yaml
|
|
80
|
-
description: High-fidelity design system specification with color, typography, spacing, and components
|
|
81
|
-
template: design-hifi.yaml
|
|
82
|
-
optional: true
|
|
83
|
-
instruction: |
|
|
84
|
-
Create a high-fidelity design system specification.
|
|
85
|
-
|
|
86
|
-
Only create this artifact if the change requires visual design decisions.
|
|
87
|
-
Can be created directly after wireframes, or skipped if only wireframes are needed.
|
|
88
|
-
|
|
89
|
-
Include:
|
|
90
|
-
1. Color Palette - primary, secondary, accent, neutral, semantic, and surface colors with hex values
|
|
91
|
-
2. Typography - font families, type scale with sizes/weights/line-heights, hierarchy roles
|
|
92
|
-
3. Spacing - base unit and spacing scale
|
|
93
|
-
4. Component Library - button, card, input, and navigation variants with states
|
|
94
|
-
5. Breakpoints - responsive breakpoints with column counts and rules
|
|
95
|
-
|
|
96
|
-
Use hex format (#RRGGBB) for all colors.
|
|
97
|
-
The type scale should cover h1-h6, body, caption, and small roles.
|
|
98
|
-
|
|
99
|
-
The optional html_preview flag generates a visual style guide preview.
|
|
100
|
-
requires: [design-wireframe]
|
|
101
|
-
|
|
102
53
|
- id: tasks
|
|
103
54
|
generates: tasks.yaml
|
|
104
55
|
description: Tasks organized by feature with optional TDD phases
|
|
@@ -63,55 +63,6 @@ artifacts:
|
|
|
63
63
|
For simple changes, you can skip this artifact.
|
|
64
64
|
requires: [proposal]
|
|
65
65
|
|
|
66
|
-
- id: design-wireframe
|
|
67
|
-
generates: design-wireframe.yaml
|
|
68
|
-
description: Page wireframes with layouts, component placements, user flows, and annotations
|
|
69
|
-
template: design-wireframe.yaml
|
|
70
|
-
optional: true
|
|
71
|
-
instruction: |
|
|
72
|
-
Create wireframe specifications for the change's UI pages.
|
|
73
|
-
|
|
74
|
-
Only create this artifact if the change involves user-facing UI changes.
|
|
75
|
-
If the change is backend-only, infrastructure, or has no visual component,
|
|
76
|
-
skip this artifact.
|
|
77
|
-
|
|
78
|
-
Include:
|
|
79
|
-
1. Pages - list all UI pages/screens with their layout regions
|
|
80
|
-
2. Layout - define regions (header, sidebar, main, footer) with ordering
|
|
81
|
-
3. Components - place UI components (buttons, cards, inputs, etc.) in regions with positions and sizes
|
|
82
|
-
4. Flows - document user navigation paths between pages
|
|
83
|
-
5. Annotations - add notes about constraints, edge cases, design decisions
|
|
84
|
-
|
|
85
|
-
Use kebab-case for page IDs, component IDs, and flow IDs.
|
|
86
|
-
Position coordinates use a 12-column grid system (0-11).
|
|
87
|
-
|
|
88
|
-
The optional html_preview flag generates a visual wireframe preview.
|
|
89
|
-
requires: [design-tech]
|
|
90
|
-
|
|
91
|
-
- id: design-hifi
|
|
92
|
-
generates: design-hifi.yaml
|
|
93
|
-
description: High-fidelity design system specification with color, typography, spacing, and components
|
|
94
|
-
template: design-hifi.yaml
|
|
95
|
-
optional: true
|
|
96
|
-
instruction: |
|
|
97
|
-
Create a high-fidelity design system specification.
|
|
98
|
-
|
|
99
|
-
Only create this artifact if the change requires visual design decisions.
|
|
100
|
-
Can be created directly after wireframes, or skipped if only wireframes are needed.
|
|
101
|
-
|
|
102
|
-
Include:
|
|
103
|
-
1. Color Palette - primary, secondary, accent, neutral, semantic, and surface colors with hex values
|
|
104
|
-
2. Typography - font families, type scale with sizes/weights/line-heights, hierarchy roles
|
|
105
|
-
3. Spacing - base unit and spacing scale
|
|
106
|
-
4. Component Library - button, card, input, and navigation variants with states
|
|
107
|
-
5. Breakpoints - responsive breakpoints with column counts and rules
|
|
108
|
-
|
|
109
|
-
Use hex format (#RRGGBB) for all colors.
|
|
110
|
-
The type scale should cover h1-h6, body, caption, and small roles.
|
|
111
|
-
|
|
112
|
-
The optional html_preview flag generates a visual style guide preview.
|
|
113
|
-
requires: [design-wireframe]
|
|
114
|
-
|
|
115
66
|
- id: tasks
|
|
116
67
|
generates: tasks.yaml
|
|
117
68
|
description: Implementation task list with dependencies
|
package/src/schemas/tdd.yaml
CHANGED
|
@@ -80,55 +80,6 @@ artifacts:
|
|
|
80
80
|
- Keep surface area small
|
|
81
81
|
requires: [specs]
|
|
82
82
|
|
|
83
|
-
- id: design-wireframe
|
|
84
|
-
generates: design-wireframe.yaml
|
|
85
|
-
description: Page wireframes with layouts, component placements, user flows, and annotations
|
|
86
|
-
template: design-wireframe.yaml
|
|
87
|
-
optional: true
|
|
88
|
-
instruction: |
|
|
89
|
-
Create wireframe specifications for the change's UI pages.
|
|
90
|
-
|
|
91
|
-
Only create this artifact if the change involves user-facing UI changes.
|
|
92
|
-
If the change is backend-only, infrastructure, or has no visual component,
|
|
93
|
-
skip this artifact.
|
|
94
|
-
|
|
95
|
-
Include:
|
|
96
|
-
1. Pages - list all UI pages/screens with their layout regions
|
|
97
|
-
2. Layout - define regions (header, sidebar, main, footer) with ordering
|
|
98
|
-
3. Components - place UI components (buttons, cards, inputs, etc.) in regions with positions and sizes
|
|
99
|
-
4. Flows - document user navigation paths between pages
|
|
100
|
-
5. Annotations - add notes about constraints, edge cases, design decisions
|
|
101
|
-
|
|
102
|
-
Use kebab-case for page IDs, component IDs, and flow IDs.
|
|
103
|
-
Position coordinates use a 12-column grid system (0-11).
|
|
104
|
-
|
|
105
|
-
The optional html_preview flag generates a visual wireframe preview.
|
|
106
|
-
requires: [design-tech]
|
|
107
|
-
|
|
108
|
-
- id: design-hifi
|
|
109
|
-
generates: design-hifi.yaml
|
|
110
|
-
description: High-fidelity design system specification with color, typography, spacing, and components
|
|
111
|
-
template: design-hifi.yaml
|
|
112
|
-
optional: true
|
|
113
|
-
instruction: |
|
|
114
|
-
Create a high-fidelity design system specification.
|
|
115
|
-
|
|
116
|
-
Only create this artifact if the change requires visual design decisions.
|
|
117
|
-
Can be created directly after wireframes, or skipped if only wireframes are needed.
|
|
118
|
-
|
|
119
|
-
Include:
|
|
120
|
-
1. Color Palette - primary, secondary, accent, neutral, semantic, and surface colors with hex values
|
|
121
|
-
2. Typography - font families, type scale with sizes/weights/line-heights, hierarchy roles
|
|
122
|
-
3. Spacing - base unit and spacing scale
|
|
123
|
-
4. Component Library - button, card, input, and navigation variants with states
|
|
124
|
-
5. Breakpoints - responsive breakpoints with column counts and rules
|
|
125
|
-
|
|
126
|
-
Use hex format (#RRGGBB) for all colors.
|
|
127
|
-
The type scale should cover h1-h6, body, caption, and small roles.
|
|
128
|
-
|
|
129
|
-
The optional html_preview flag generates a visual style guide preview.
|
|
130
|
-
requires: [design-wireframe]
|
|
131
|
-
|
|
132
83
|
- id: tasks
|
|
133
84
|
generates: tasks.yaml
|
|
134
85
|
description: Vertical slice tasks in RED-GREEN-REFACTOR cycles
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
name: ui-driven
|
|
2
|
+
version: 1
|
|
3
|
+
description: Spec-driven workflow for frontend/UI work with required design artifacts
|
|
4
|
+
extends: spec-driven
|
|
5
|
+
|
|
6
|
+
artifacts:
|
|
7
|
+
- id: design-html
|
|
8
|
+
generates: design.html
|
|
9
|
+
description: Visual design mockup as a standalone HTML file serving as the design source of truth
|
|
10
|
+
instruction: |
|
|
11
|
+
Create a complete visual design mockup as a standalone HTML file.
|
|
12
|
+
|
|
13
|
+
Include:
|
|
14
|
+
1. Layout - page structure with regions (header, hero, features, footer, etc.)
|
|
15
|
+
2. Color scheme - visual color application throughout the design
|
|
16
|
+
3. Typography - font choices and text hierarchy
|
|
17
|
+
4. Component styling - buttons, cards, navigation, inputs
|
|
18
|
+
5. Spacing and rhythm - visual breathing room between sections
|
|
19
|
+
|
|
20
|
+
The HTML should be self-contained (inline styles, no external deps).
|
|
21
|
+
This is the primary visual artifact that the human reviews before formalization.
|
|
22
|
+
Design it to be visually compelling and production-quality.
|
|
23
|
+
|
|
24
|
+
After creating this artifact, return control to the orchestrator
|
|
25
|
+
for human review feedback before proceeding with wireframe/hifi.
|
|
26
|
+
requires: [design-tech]
|
|
27
|
+
|
|
28
|
+
- id: design-wireframe
|
|
29
|
+
generates: design-wireframe.yaml
|
|
30
|
+
description: Page wireframes with structured layout, component placements, user flows, and annotations derived from the approved design HTML
|
|
31
|
+
template: design-wireframe.yaml
|
|
32
|
+
instruction: |
|
|
33
|
+
Create a structured wireframe specification derived from the approved design.html.
|
|
34
|
+
|
|
35
|
+
Extract from the design HTML:
|
|
36
|
+
1. Pages - identify each distinct page/screen, define layout regions (header, sidebar, main, footer, hero, section)
|
|
37
|
+
2. Layout - map each page's regions with display ordering
|
|
38
|
+
3. Components - identify UI components (buttons, cards, inputs, navigation, etc.) with their region, grid position, and size
|
|
39
|
+
4. Flows - document user navigation paths between pages with trigger actions
|
|
40
|
+
5. Annotations - add notes about constraints, edge cases, design decisions
|
|
41
|
+
|
|
42
|
+
Use kebab-case for page IDs, component IDs, and flow IDs.
|
|
43
|
+
Position coordinates use a 12-column grid system (0-11).
|
|
44
|
+
requires: [design-html]
|
|
45
|
+
|
|
46
|
+
- id: design-hifi
|
|
47
|
+
generates: design-hifi.yaml
|
|
48
|
+
description: High-fidelity design system specification with color palette, typography, spacing, and component library derived from the approved design HTML
|
|
49
|
+
template: design-hifi.yaml
|
|
50
|
+
instruction: |
|
|
51
|
+
Create a structured high-fidelity design system specification derived from the approved design.html.
|
|
52
|
+
|
|
53
|
+
Extract from the design HTML:
|
|
54
|
+
1. Color Palette - primary, secondary, accent, neutral, semantic, and surface colors with hex values
|
|
55
|
+
2. Typography - font families with stacks, type scale with sizes/weights/line-heights, hierarchy roles
|
|
56
|
+
3. Spacing - base unit and spacing scale
|
|
57
|
+
4. Component Library - button, card, input, and navigation variants with states and properties
|
|
58
|
+
5. Breakpoints - responsive breakpoints with column counts and rules
|
|
59
|
+
|
|
60
|
+
Use hex format (#RRGGBB) for all colors.
|
|
61
|
+
The type scale should cover h1-h6, body, caption, and small roles.
|
|
62
|
+
requires: [design-wireframe]
|
|
63
|
+
|
|
64
|
+
- id: tasks
|
|
65
|
+
generates: tasks.yaml
|
|
66
|
+
description: Implementation task list with dependencies
|
|
67
|
+
template: tasks.yaml
|
|
68
|
+
instruction: |
|
|
69
|
+
Break the implementation into concrete tasks.
|
|
70
|
+
|
|
71
|
+
Each task must:
|
|
72
|
+
- Have a unique ID (t1, t2, t3, ...)
|
|
73
|
+
- Belong to a group (Database, Auth, API, UI, etc.)
|
|
74
|
+
- List dependencies (other task IDs)
|
|
75
|
+
- Estimate complexity (low/medium/high)
|
|
76
|
+
- Estimate time in minutes
|
|
77
|
+
- Reference specs (capability/requirement)
|
|
78
|
+
- List affected files
|
|
79
|
+
- Define acceptance criteria
|
|
80
|
+
|
|
81
|
+
Order tasks by dependency (what must be done first?).
|
|
82
|
+
Keep tasks small enough to complete in one session.
|
|
83
|
+
Each task should be independently verifiable.
|
|
84
|
+
requires: [specs, design-tech, design-hifi]
|
|
85
|
+
|
|
86
|
+
apply:
|
|
87
|
+
requires: [tasks]
|
|
88
|
+
tracks: tasks.yaml
|
|
89
|
+
instruction: |
|
|
90
|
+
Implement tasks in dependency order.
|
|
91
|
+
|
|
92
|
+
For each task:
|
|
93
|
+
1. Read the task details and acceptance criteria
|
|
94
|
+
2. Read referenced specs for context
|
|
95
|
+
3. Implement the changes
|
|
96
|
+
4. Verify acceptance criteria are met
|
|
97
|
+
5. Update task status to "done"
|
|
98
|
+
|
|
99
|
+
Pause if:
|
|
100
|
+
- Task is unclear (ask for clarification)
|
|
101
|
+
- Design issue discovered (suggest design update)
|
|
102
|
+
- Error or blocker (report and wait)
|
|
103
|
+
|
|
104
|
+
Keep changes minimal and scoped to the task.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cbm-index-repo
|
|
3
|
+
description: Re-index the codebase with codebase-memory-mcp to update the knowledge graph after code changes. Use this when the user says "re-index", "update the cbm graph", "reindex", or "index the codebase".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Re-Index Codebase Memory
|
|
7
|
+
|
|
8
|
+
Re-builds the knowledge graph for the current project using codebase-memory-mcp.
|
|
9
|
+
Run this after significant code changes so the graph stays fresh.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- User wants to re-index the codebase for the MCP knowledge graph
|
|
14
|
+
- User says "re-index", "reindex", "update the cbm graph", "index the codebase"
|
|
15
|
+
- After making significant code changes that the knowledge graph should reflect
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
codebase-memory-mcp index --path .
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Run this from the project root directory.
|
|
24
|
+
|
|
25
|
+
## Why
|
|
26
|
+
|
|
27
|
+
The knowledge graph enables structural queries (`search_graph`, `trace_path`, etc.)
|
|
28
|
+
instead of expensive `grep`/`glob`/`read` operations. Keeping it indexed saves tokens
|
|
29
|
+
and speeds up agent responses.
|
|
30
|
+
|
|
31
|
+
## After Indexing
|
|
32
|
+
|
|
33
|
+
Once indexed, agents can use the following tool priority for code understanding:
|
|
34
|
+
|
|
35
|
+
1. `search_graph` — find functions, classes, routes, variables by pattern
|
|
36
|
+
2. `trace_path` — trace callers or callees of a function
|
|
37
|
+
3. `get_code_snippet` — read specific function/class source code
|
|
38
|
+
4. `query_graph` — run Cypher queries for complex patterns
|
|
39
|
+
5. `get_architecture` — high-level project summary
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<!-- codebase-memory-mcp:start -->
|
|
2
|
+
# Codebase Knowledge Graph (codebase-memory-mcp)
|
|
3
|
+
|
|
4
|
+
This project uses codebase-memory-mcp to maintain a knowledge graph of the codebase.
|
|
5
|
+
ALWAYS prefer MCP graph tools over grep/glob/file-search for code discovery.
|
|
6
|
+
|
|
7
|
+
## Priority Order
|
|
8
|
+
1. `codebase-memory-mcp_search_graph` — find functions, classes, routes, variables by pattern
|
|
9
|
+
2. `codebase-memory-mcp_trace_path` — trace who calls a function or what it calls
|
|
10
|
+
3. `codebase-memory-mcp_get_code_snippet` — read specific function/class source code
|
|
11
|
+
4. `codebase-memory-mcp_query_graph` — run Cypher queries for complex patterns
|
|
12
|
+
5. `codebase-memory-mcp_get_architecture` — high-level project summary
|
|
13
|
+
|
|
14
|
+
## When to fall back to grep/glob
|
|
15
|
+
- Searching for string literals, error messages, config values
|
|
16
|
+
- Searching non-code files (Dockerfiles, shell scripts, configs)
|
|
17
|
+
- When MCP tools return insufficient results
|
|
18
|
+
|
|
19
|
+
## Examples
|
|
20
|
+
- Find a handler: `codebase-memory-mcp_search_graph(name_pattern=".*Handler.*")`
|
|
21
|
+
- Who calls it: `codebase-memory-mcp_trace_path(function_name="Handler", direction="inbound")`
|
|
22
|
+
- Read source: `codebase-memory-mcp_get_code_snippet(qualified_name="src/plugin/index")`
|
|
23
|
+
|
|
24
|
+
## CLI Usage (Bash fallback)
|
|
25
|
+
When native MCP tools are unavailable, use the CLI directly:
|
|
26
|
+
```bash
|
|
27
|
+
codebase-memory-mcp cli search_graph '{"name_pattern": ".*Handler.*"}'
|
|
28
|
+
codebase-memory-mcp cli trace_path '{"function_name": "Handler", "direction": "inbound"}'
|
|
29
|
+
codebase-memory-mcp cli get_code_snippet '{"qualified_name": "src/plugin/index"}'
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Re-indexing
|
|
33
|
+
After code changes, re-index to keep the graph up to date:
|
|
34
|
+
```bash
|
|
35
|
+
codebase-memory-mcp index --path .
|
|
36
|
+
```
|
|
37
|
+
<!-- codebase-memory-mcp:end -->
|