@grimoire-cc/cli 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +4 -26
- package/dist/bin.js.map +1 -1
- package/dist/commands/remove.d.ts +2 -14
- package/dist/commands/remove.d.ts.map +1 -1
- package/dist/commands/remove.js +28 -58
- package/dist/commands/remove.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/prompt.d.ts +4 -4
- package/dist/prompt.d.ts.map +1 -1
- package/dist/prompt.js +10 -59
- package/dist/prompt.js.map +1 -1
- package/dist/remove.js +2 -2
- package/dist/remove.js.map +1 -1
- package/dist/types.d.ts +4 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/packs/dev-pack/agents/gr.code-reviewer.md +1 -1
- package/packs/dev-pack/agents/gr.tdd-specialist.md +3 -3
- package/packs/dev-pack/grimoire.json +4 -4
- package/packs/dev-pack/skills/gr.conventional-commit/SKILL.md +3 -3
- package/packs/dev-pack/skills/gr.tdd-specialist/SKILL.md +2 -2
- package/packs/dev-pack/skills/gr.tdd-specialist/reference/language-frameworks.md +1 -1
- package/packs/docs-pack/grimoire.json +1 -1
- package/packs/docs-pack/skills/gr.business-logic-docs/SKILL.md +1 -1
- package/packs/dotnet-pack/agents/gr.csharp-code-reviewer.md +1 -1
- package/packs/dotnet-pack/agents/gr.csharp-coder.md +2 -2
- package/packs/dotnet-pack/agents/gr.dotnet-architect.md +2 -2
- package/packs/dotnet-pack/agents/gr.dotnet-unit-test-writer.md +2 -2
- package/packs/dotnet-pack/grimoire.json +6 -25
- package/packs/dotnet-pack/skills/gr.dotnet-feature-workflow/SKILL.md +3 -3
- package/packs/essentials-pack/agents/gr.fact-checker.md +2 -2
- package/packs/essentials-pack/grimoire.json +1 -1
- package/packs/meta-pack/grimoire.json +3 -3
- package/packs/meta-pack/skills/gr.context-file-guide/SKILL.md +1 -1
- package/packs/meta-pack/skills/gr.readme-guide/SKILL.md +2 -2
- package/packs/meta-pack/skills/gr.skill-developer/SKILL.md +3 -3
- package/packs/ts-pack/grimoire.json +1 -1
- package/packs/ts-pack/skills/gr.modern-typescript/SKILL.md +1 -1
package/dist/bin.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { defineCommand, runMain } from 'citty';
|
|
4
4
|
import { runAdd } from './commands/add.js';
|
|
5
|
-
import {
|
|
5
|
+
import { runRemoveInteractive } from './commands/remove.js';
|
|
6
6
|
import { runLogs } from './commands/logs.js';
|
|
7
7
|
const require = createRequire(import.meta.url);
|
|
8
8
|
const { version } = require('../package.json');
|
|
@@ -18,32 +18,10 @@ const addCommand = defineCommand({
|
|
|
18
18
|
const removeCommand = defineCommand({
|
|
19
19
|
meta: {
|
|
20
20
|
name: 'remove',
|
|
21
|
-
description: '
|
|
21
|
+
description: 'Interactively remove installed agents and skills',
|
|
22
22
|
},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
type: 'positional',
|
|
26
|
-
description: 'Item name to remove',
|
|
27
|
-
required: false,
|
|
28
|
-
},
|
|
29
|
-
pack: {
|
|
30
|
-
type: 'string',
|
|
31
|
-
description: 'Remove all items from a pack',
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
async run({ args }) {
|
|
35
|
-
if (args.pack && args.name) {
|
|
36
|
-
throw new Error('Cannot use --pack with a positional item name');
|
|
37
|
-
}
|
|
38
|
-
if (args.pack) {
|
|
39
|
-
await runRemovePack(args.pack, process.cwd());
|
|
40
|
-
}
|
|
41
|
-
else if (args.name) {
|
|
42
|
-
await runRemove(args.name, process.cwd());
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
await runRemoveInteractive(process.cwd());
|
|
46
|
-
}
|
|
23
|
+
async run() {
|
|
24
|
+
await runRemoveInteractive(process.cwd());
|
|
47
25
|
},
|
|
48
26
|
});
|
|
49
27
|
const logsCommand = defineCommand({
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE/C,MAAM,UAAU,GAAG,aAAa,CAAC;IAC/B,IAAI,EAAE;QACJ,IAAI,EAAE,KAAK;QACX,WAAW,EAAE,sEAAsE;KACpF;IACD,KAAK,CAAC,GAAG;QACP,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,aAAa,CAAC;IAClC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kDAAkD;KAChE;IACD,KAAK,CAAC,GAAG;QACP,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,6CAA6C;KAC3D;IACD,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,+DAA+D;SAC7E;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,yCAAyC;SACvD;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;YAC1C,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,SAAS;YAC/B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAChD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,0CAA0C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,aAAa,CAAC;IACzB,IAAI,EAAE;QACJ,IAAI,EAAE,UAAU;QAChB,OAAO;QACP,WAAW,EAAE,wDAAwD;KACtE;IACD,WAAW,EAAE;QACX,GAAG,EAAE,UAAU;QACf,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,WAAW;KAClB;CACF,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -1,21 +1,9 @@
|
|
|
1
1
|
import type { RemoveSummary } from '../types.js';
|
|
2
2
|
/**
|
|
3
|
-
* Runs the
|
|
4
|
-
*
|
|
5
|
-
* @param itemName - Name of the agent or skill to remove
|
|
6
|
-
* @param cwd - Target project directory (defaults to process.cwd())
|
|
7
|
-
* @returns The remove summary
|
|
8
|
-
*/
|
|
9
|
-
export declare function runRemove(itemName: string, cwd?: string | undefined): Promise<RemoveSummary>;
|
|
10
|
-
/**
|
|
11
|
-
* Runs the interactive removal wizard: loads packs, cross-references with
|
|
12
|
-
* installed items, lets user select what to remove.
|
|
3
|
+
* Runs the interactive removal wizard: scans all installed items, lets user
|
|
4
|
+
* select what to remove.
|
|
13
5
|
*/
|
|
14
6
|
export declare function runRemoveInteractive(cwd?: string | undefined): Promise<RemoveSummary>;
|
|
15
|
-
/**
|
|
16
|
-
* Removes all items from a pack and cleans up the manifest.
|
|
17
|
-
*/
|
|
18
|
-
export declare function runRemovePack(packName: string, cwd?: string | undefined): Promise<RemoveSummary>;
|
|
19
7
|
export declare function printRemoveSummary(results: readonly {
|
|
20
8
|
item: {
|
|
21
9
|
type: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GACvB,OAAO,CAAC,aAAa,CAAC,CA2CxB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,EAAE,GAC7E,IAAI,CAWN"}
|
package/dist/commands/remove.js
CHANGED
|
@@ -1,74 +1,44 @@
|
|
|
1
1
|
import { scanInstalled, removeItems, cleanManifest, resolvePackItems } from '../remove.js';
|
|
2
|
-
import {
|
|
3
|
-
import { loadManifest } from '../manifest.js';
|
|
2
|
+
import { loadAllPacks } from '../resolve.js';
|
|
4
3
|
import { runRemoveWizard } from '../prompt.js';
|
|
5
4
|
/**
|
|
6
|
-
* Runs the
|
|
7
|
-
*
|
|
8
|
-
* @param itemName - Name of the agent or skill to remove
|
|
9
|
-
* @param cwd - Target project directory (defaults to process.cwd())
|
|
10
|
-
* @returns The remove summary
|
|
5
|
+
* Runs the interactive removal wizard: scans all installed items, lets user
|
|
6
|
+
* select what to remove.
|
|
11
7
|
*/
|
|
12
|
-
export async function
|
|
8
|
+
export async function runRemoveInteractive(cwd) {
|
|
13
9
|
const projectDir = cwd ?? process.cwd();
|
|
14
10
|
const installed = scanInstalled(projectDir);
|
|
15
11
|
if (installed.length === 0) {
|
|
16
12
|
throw new Error('No agents or skills installed in this project');
|
|
17
13
|
}
|
|
18
|
-
|
|
19
|
-
if (selected.length === 0) {
|
|
20
|
-
const available = installed.map((i) => i.name).join(', ');
|
|
21
|
-
throw new Error(`Item not found: "${itemName}". Available items: ${available}`);
|
|
22
|
-
}
|
|
23
|
-
const results = removeItems(selected, projectDir);
|
|
24
|
-
cleanManifest(selected, projectDir);
|
|
25
|
-
printRemoveSummary(results.filter((r) => r.removed));
|
|
26
|
-
return { results };
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Runs the interactive removal wizard: loads packs, cross-references with
|
|
30
|
-
* installed items, lets user select what to remove.
|
|
31
|
-
*/
|
|
32
|
-
export async function runRemoveInteractive(cwd) {
|
|
33
|
-
const projectDir = cwd ?? process.cwd();
|
|
14
|
+
// Augment items with pack name (for display) and manifestName (for manifest cleanup)
|
|
34
15
|
const packs = loadAllPacks();
|
|
35
|
-
const
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
16
|
+
const packByName = new Map();
|
|
17
|
+
const manifestNameByFsName = new Map();
|
|
18
|
+
for (const pack of packs) {
|
|
19
|
+
for (const item of resolvePackItems(pack.manifest)) {
|
|
20
|
+
packByName.set(item.name, pack.name);
|
|
21
|
+
}
|
|
22
|
+
for (const agent of pack.manifest.agents) {
|
|
23
|
+
const fsName = agent.path.replace(/^agents\//, '').replace(/\.md$/, '');
|
|
24
|
+
manifestNameByFsName.set(fsName, agent.name);
|
|
25
|
+
}
|
|
39
26
|
}
|
|
40
|
-
const
|
|
41
|
-
|
|
27
|
+
const augmented = installed.map((item) => {
|
|
28
|
+
const pack = packByName.get(item.name);
|
|
29
|
+
const manifestName = item.type === 'agent' ? manifestNameByFsName.get(item.name) : undefined;
|
|
30
|
+
return {
|
|
31
|
+
...item,
|
|
32
|
+
...(pack !== undefined && { pack }),
|
|
33
|
+
...(manifestName !== undefined && { manifestName }),
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
const wizard = await runRemoveWizard(augmented);
|
|
37
|
+
if (wizard.items.length === 0) {
|
|
42
38
|
return { results: [] };
|
|
43
39
|
}
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
const results = removeItems(selection.items, projectDir);
|
|
47
|
-
allResults.push(...results);
|
|
48
|
-
const agentNames = selection.manifest.agents.map((a) => a.name);
|
|
49
|
-
const skillNames = selection.manifest.skills.map((s) => s.name);
|
|
50
|
-
cleanManifest(selection.items, projectDir, { agentNames, skillNames });
|
|
51
|
-
}
|
|
52
|
-
printRemoveSummary(allResults.filter((r) => r.removed));
|
|
53
|
-
return { results: allResults };
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Removes all items from a pack and cleans up the manifest.
|
|
57
|
-
*/
|
|
58
|
-
export async function runRemovePack(packName, cwd) {
|
|
59
|
-
const projectDir = cwd ?? process.cwd();
|
|
60
|
-
const packDir = resolvePackDir(packName);
|
|
61
|
-
const packManifest = loadManifest(packDir);
|
|
62
|
-
const packItems = resolvePackItems(packManifest);
|
|
63
|
-
// Only remove items that are actually installed
|
|
64
|
-
const installed = scanInstalled(projectDir);
|
|
65
|
-
const installedNames = new Set(installed.map((i) => i.name));
|
|
66
|
-
const toRemove = packItems.filter((i) => installedNames.has(i.name));
|
|
67
|
-
const results = removeItems(toRemove, projectDir);
|
|
68
|
-
// Collect pack manifest names for proper manifest cleanup
|
|
69
|
-
const agentNames = packManifest.agents.map((a) => a.name);
|
|
70
|
-
const skillNames = packManifest.skills.map((s) => s.name);
|
|
71
|
-
cleanManifest(toRemove, projectDir, { agentNames, skillNames });
|
|
40
|
+
const results = removeItems(wizard.items, projectDir);
|
|
41
|
+
cleanManifest(wizard.items, projectDir);
|
|
72
42
|
printRemoveSummary(results.filter((r) => r.removed));
|
|
73
43
|
return { results };
|
|
74
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,5 @@ export { runLogs } from './commands/logs.js';
|
|
|
8
8
|
export type { LogsOptions } from './commands/logs.js';
|
|
9
9
|
export { mergeSettings, mergeManifest, setupRouter } from './setup.js';
|
|
10
10
|
export { scanInstalled, removeItems, cleanManifest } from './remove.js';
|
|
11
|
-
export { runRemove } from './commands/remove.js';
|
|
12
11
|
export type { PackSkillTriggers, PackAgentEntry, PackSkillEntry, PackManifest, PackOption, WizardResult, InstallItem, InstallResult, InstallSummary, RemoveResult, RemoveSummary, } from './types.js';
|
|
13
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,5 +7,4 @@ export { runAdd } from './commands/add.js';
|
|
|
7
7
|
export { runLogs } from './commands/logs.js';
|
|
8
8
|
export { mergeSettings, mergeManifest, setupRouter } from './setup.js';
|
|
9
9
|
export { scanInstalled, removeItems, cleanManifest } from './remove.js';
|
|
10
|
-
export { runRemove } from './commands/remove.js';
|
|
11
10
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/prompt.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PackOption, WizardResult, RemoveWizardResult } from './types.js';
|
|
1
|
+
import type { PackOption, InstallItem, WizardResult, RemoveWizardResult } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Runs a 3-step interactive wizard:
|
|
4
4
|
* 1. Select packs to install
|
|
@@ -10,10 +10,10 @@ import type { PackOption, WizardResult, RemoveWizardResult } from './types.js';
|
|
|
10
10
|
export declare function runWizard(packs: readonly PackOption[]): Promise<WizardResult>;
|
|
11
11
|
/**
|
|
12
12
|
* Runs an interactive removal wizard:
|
|
13
|
-
* 1. Shows all installed
|
|
13
|
+
* 1. Shows all installed items in a multiselect (unchecked by default)
|
|
14
14
|
* 2. Confirms removal
|
|
15
15
|
*
|
|
16
|
-
* @returns The wizard result with selected items
|
|
16
|
+
* @returns The wizard result with selected items, or empty on cancel
|
|
17
17
|
*/
|
|
18
|
-
export declare function runRemoveWizard(
|
|
18
|
+
export declare function runRemoveWizard(installedItems: readonly InstallItem[]): Promise<RemoveWizardResult>;
|
|
19
19
|
//# sourceMappingURL=prompt.d.ts.map
|
package/dist/prompt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE5F;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAqHnF;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,SAAS,WAAW,EAAE,GACrC,OAAO,CAAC,kBAAkB,CAAC,CA2C7B"}
|
package/dist/prompt.js
CHANGED
|
@@ -111,58 +111,19 @@ export async function runWizard(packs) {
|
|
|
111
111
|
}
|
|
112
112
|
/**
|
|
113
113
|
* Runs an interactive removal wizard:
|
|
114
|
-
* 1. Shows all installed
|
|
114
|
+
* 1. Shows all installed items in a multiselect (unchecked by default)
|
|
115
115
|
* 2. Confirms removal
|
|
116
116
|
*
|
|
117
|
-
* @returns The wizard result with selected items
|
|
117
|
+
* @returns The wizard result with selected items, or empty on cancel
|
|
118
118
|
*/
|
|
119
|
-
export async function runRemoveWizard(
|
|
120
|
-
const empty = {
|
|
119
|
+
export async function runRemoveWizard(installedItems) {
|
|
120
|
+
const empty = { items: [] };
|
|
121
121
|
clack.intro('Grimoire Remover');
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
if (!installedNames.has(fsName))
|
|
128
|
-
continue;
|
|
129
|
-
itemOptions.push({
|
|
130
|
-
label: `[${pack.name} | agent] ${agent.name}`,
|
|
131
|
-
value: {
|
|
132
|
-
pack,
|
|
133
|
-
item: {
|
|
134
|
-
type: 'agent',
|
|
135
|
-
name: fsName,
|
|
136
|
-
sourcePath: agent.path,
|
|
137
|
-
description: agent.description,
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
|
-
hint: agent.description,
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
for (const skill of pack.manifest.skills) {
|
|
144
|
-
const fsName = skill.path.replace(/^skills\//, '');
|
|
145
|
-
if (!installedNames.has(fsName))
|
|
146
|
-
continue;
|
|
147
|
-
itemOptions.push({
|
|
148
|
-
label: `[${pack.name} | skill] ${skill.name}`,
|
|
149
|
-
value: {
|
|
150
|
-
pack,
|
|
151
|
-
item: {
|
|
152
|
-
type: 'skill',
|
|
153
|
-
name: fsName,
|
|
154
|
-
sourcePath: skill.path,
|
|
155
|
-
description: skill.description,
|
|
156
|
-
},
|
|
157
|
-
},
|
|
158
|
-
hint: skill.description,
|
|
159
|
-
});
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
if (itemOptions.length === 0) {
|
|
163
|
-
clack.outro('No installed pack items found.');
|
|
164
|
-
return empty;
|
|
165
|
-
}
|
|
122
|
+
const itemOptions = installedItems.map((item) => ({
|
|
123
|
+
label: item.pack ? `[${item.pack} | ${item.type}] ${item.name}` : `[${item.type}] ${item.name}`,
|
|
124
|
+
value: item,
|
|
125
|
+
hint: item.description,
|
|
126
|
+
}));
|
|
166
127
|
const selectedItems = await clack.multiselect({
|
|
167
128
|
message: 'Select items to remove (Space to toggle, Enter to confirm):',
|
|
168
129
|
options: itemOptions,
|
|
@@ -187,16 +148,6 @@ export async function runRemoveWizard(packs, installedNames) {
|
|
|
187
148
|
return empty;
|
|
188
149
|
}
|
|
189
150
|
clack.outro('Selection complete.');
|
|
190
|
-
|
|
191
|
-
const groupMap = new Map();
|
|
192
|
-
for (const { pack, item } of chosenItems) {
|
|
193
|
-
let group = groupMap.get(pack.name);
|
|
194
|
-
if (!group) {
|
|
195
|
-
group = { packDir: pack.dir, manifest: pack.manifest, items: [] };
|
|
196
|
-
groupMap.set(pack.name, group);
|
|
197
|
-
}
|
|
198
|
-
group.items.push(item);
|
|
199
|
-
}
|
|
200
|
-
return { selections: [...groupMap.values()] };
|
|
151
|
+
return { items: chosenItems };
|
|
201
152
|
}
|
|
202
153
|
//# sourceMappingURL=prompt.js.map
|
package/dist/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/remove.js
CHANGED
|
@@ -87,8 +87,8 @@ export function cleanManifest(items, projectDir, manifestNames) {
|
|
|
87
87
|
const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
88
88
|
// Build path-based removal set for skills
|
|
89
89
|
const removedSkillPaths = new Set(items.filter((i) => i.type === 'skill').map((i) => `.claude/skills/${i.name}`));
|
|
90
|
-
// Build agent removal set
|
|
91
|
-
const removedAgentNames = new Set(items.filter((i) => i.type === 'agent').map((i) => i.name));
|
|
90
|
+
// Build agent removal set: prefer manifestName (display key) over filesystem name
|
|
91
|
+
const removedAgentNames = new Set(items.filter((i) => i.type === 'agent').map((i) => i.manifestName ?? i.name));
|
|
92
92
|
if (manifestNames?.agentNames) {
|
|
93
93
|
for (const name of manifestNames.agentNames) {
|
|
94
94
|
removedAgentNames.add(name);
|
package/dist/remove.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../src/remove.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../src/remove.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -26,6 +26,9 @@ export interface InstallItem {
|
|
|
26
26
|
readonly name: string;
|
|
27
27
|
readonly sourcePath: string;
|
|
28
28
|
readonly description: string;
|
|
29
|
+
readonly pack?: string;
|
|
30
|
+
/** Display name used as key in skills-manifest.json agents (may differ from filesystem name) */
|
|
31
|
+
readonly manifestName?: string;
|
|
29
32
|
}
|
|
30
33
|
export interface PackOption {
|
|
31
34
|
readonly name: string;
|
|
@@ -60,10 +63,6 @@ export interface RemoveSummary {
|
|
|
60
63
|
readonly results: readonly RemoveResult[];
|
|
61
64
|
}
|
|
62
65
|
export interface RemoveWizardResult {
|
|
63
|
-
readonly
|
|
64
|
-
readonly packDir: string;
|
|
65
|
-
readonly manifest: PackManifest;
|
|
66
|
-
readonly items: readonly InstallItem[];
|
|
67
|
-
}>;
|
|
66
|
+
readonly items: readonly InstallItem[];
|
|
68
67
|
}
|
|
69
68
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,gGAAgG;IAChG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;QACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;QAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;KACxC,CAAC,CAAC;IACH,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC"}
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.code-reviewer
|
|
3
3
|
description: "Language-agnostic code review specialist. Use immediately after writing or modifying code, or when explicitly requested to review code quality, security, performance, and best practices. Works with any programming language — detects language automatically and applies idiomatic conventions."
|
|
4
4
|
tools: Bash, Glob, Grep, Read
|
|
5
5
|
model: inherit
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.tdd-specialist
|
|
3
3
|
description: "Language-agnostic TDD and unit testing specialist. Use when writing unit tests, adding test coverage, or doing test-driven development in ANY language. Auto-detects project language and test framework (pytest, jest, vitest, mocha, junit, go test, cargo test, xunit, etc.). Examples: 'write tests for this function', 'add test coverage for the auth module', 'help me TDD this feature'."
|
|
4
4
|
tools: Read, Edit, Write, Grep, Glob, Skill, Bash
|
|
5
5
|
model: inherit
|
|
@@ -11,7 +11,7 @@ You are a language-agnostic test-driven development expert. You write clean, mai
|
|
|
11
11
|
|
|
12
12
|
## MANDATORY: Load Skill First
|
|
13
13
|
|
|
14
|
-
**IMMEDIATELY** invoke `Skill(grimoire
|
|
14
|
+
**IMMEDIATELY** invoke `Skill(grimoire.tdd-specialist)` at the start of every task. This skill contains all testing patterns, framework detection logic, language-specific templates, and TDD principles you must follow.
|
|
15
15
|
|
|
16
16
|
The skill provides:
|
|
17
17
|
|
|
@@ -41,4 +41,4 @@ After loading the skill:
|
|
|
41
41
|
- ALWAYS follow the patterns and templates from the skill
|
|
42
42
|
- ALWAYS detect and match existing project conventions
|
|
43
43
|
- ONLY write test code, never production implementations
|
|
44
|
-
- For C#/.NET projects, check if `grimoire
|
|
44
|
+
- For C#/.NET projects, check if `grimoire.dotnet-unit-testing` skill is available and defer to it
|
|
@@ -3,19 +3,19 @@
|
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"agents": [
|
|
5
5
|
{
|
|
6
|
-
"name": "grimoire
|
|
6
|
+
"name": "grimoire.code-reviewer",
|
|
7
7
|
"path": "agents/gr.code-reviewer.md",
|
|
8
8
|
"description": "Language-agnostic code review specialist. Use immediately after writing or modifying code, or when explicitly requested to review code quality, security, performance, and best practices. Works with any programming language — detects language automatically and applies idiomatic conventions."
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
|
-
"name": "grimoire
|
|
11
|
+
"name": "grimoire.tdd-specialist",
|
|
12
12
|
"path": "agents/gr.tdd-specialist.md",
|
|
13
13
|
"description": "Language-agnostic TDD and unit testing specialist. Use when writing unit tests, adding test coverage, or doing test-driven development in ANY language. Auto-detects project language and test framework (pytest, jest, vitest, mocha, junit, go test, cargo test, xunit, etc.). Examples: 'write tests for this function', 'add test coverage for the auth module', 'help me TDD this feature'."
|
|
14
14
|
}
|
|
15
15
|
],
|
|
16
16
|
"skills": [
|
|
17
17
|
{
|
|
18
|
-
"name": "grimoire
|
|
18
|
+
"name": "grimoire.tdd-specialist",
|
|
19
19
|
"path": "skills/gr.tdd-specialist",
|
|
20
20
|
"description": "Language-agnostic TDD and unit testing specialist. Use when writing unit tests, adding test coverage, doing test-driven development, or setting up test infrastructure in ANY language. Auto-detects project language and test framework.",
|
|
21
21
|
"triggers": {
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
"name": "grimoire
|
|
55
|
+
"name": "grimoire.conventional-commit",
|
|
56
56
|
"path": "skills/gr.conventional-commit",
|
|
57
57
|
"description": "Generate git commits following Conventional Commits 1.0.0. Use for /conventional-commit, git commit, or when committing changes.",
|
|
58
58
|
"triggers": {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.conventional-commit
|
|
3
3
|
description: "Generate git commits following Conventional Commits 1.0.0. Use for /conventional-commit, git commit, or when committing changes."
|
|
4
|
-
|
|
5
|
-
disable-model-invocation:
|
|
4
|
+
user-invokable: true
|
|
5
|
+
disable-model-invocation: false
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Git Commit Generator
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.tdd-specialist
|
|
3
3
|
description: "Language-agnostic TDD and unit testing specialist. Use when writing unit tests, adding test coverage, doing test-driven development, or setting up test infrastructure in ANY language. Auto-detects project language and test framework. Supports pytest, jest, vitest, mocha, junit, go test, cargo test, xunit, and more. Triggers: tdd, test-driven, unit test, write tests, test coverage, red-green-refactor."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -40,7 +40,7 @@ If no existing tests, infer from config:
|
|
|
40
40
|
- **Python**: Check for `pytest` in dependencies or `[tool.pytest]` in `pyproject.toml`. Default: pytest.
|
|
41
41
|
- **Go**: Built-in `testing` package. Check for `testify` in `go.mod`.
|
|
42
42
|
- **Rust**: Built-in `#[test]`. Check for `mockall` in `Cargo.toml`.
|
|
43
|
-
- **C#/.NET**: Check `.csproj` for xUnit/NUnit/MSTest references. **If `grimoire
|
|
43
|
+
- **C#/.NET**: Check `.csproj` for xUnit/NUnit/MSTest references. **If `grimoire.dotnet-unit-testing` skill is available, defer to it.**
|
|
44
44
|
- **Java/Kotlin**: Check for JUnit 5 (`junit-jupiter`), Mockito in build files. Default: JUnit 5 + Mockito.
|
|
45
45
|
- **Ruby**: Check for `rspec` or `minitest` in Gemfile. Default: RSpec.
|
|
46
46
|
|
|
@@ -294,7 +294,7 @@ class OrderServiceTest {
|
|
|
294
294
|
|
|
295
295
|
## C# / .NET
|
|
296
296
|
|
|
297
|
-
**If the `grimoire
|
|
297
|
+
**If the `grimoire.dotnet-unit-testing` skill is available, defer to it for full C#/.NET guidance.** It provides comprehensive xUnit, TUnit, Moq, and NSubstitute patterns.
|
|
298
298
|
|
|
299
299
|
### Quick Reference (when dotnet skill is unavailable)
|
|
300
300
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"agents": [],
|
|
5
5
|
"skills": [
|
|
6
6
|
{
|
|
7
|
-
"name": "grimoire
|
|
7
|
+
"name": "grimoire.business-logic-docs",
|
|
8
8
|
"path": "skills/gr.business-logic-docs",
|
|
9
9
|
"description": "Create and maintain structured business logic documentation for AI assistants and developers. Use when documenting business rules, domain knowledge, invariants, workflows, state machines, entity relationships, decision logs, or building a business logic knowledge base.",
|
|
10
10
|
"triggers": {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.business-logic-docs
|
|
3
3
|
description: "Create, update, and audit structured business logic documentation for AI assistants and developers. Use when documenting business rules, domain knowledge, invariants, workflows, state machines, entity relationships, decision logs, building a business logic knowledge base, or reviewing docs for staleness."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.csharp-code-reviewer
|
|
3
3
|
description: "Expert C#/.NET code review specialist. Use immediately after writing or modifying C# code, or when explicitly requested to review C#/.NET code quality, security, performance, and best practices. ONLY reviews C# and .NET code - declines reviews of other languages."
|
|
4
4
|
tools: Bash, Glob, Grep, Read, Skill
|
|
5
5
|
model: inherit
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
3
|
-
description: "Use this agent to implement C# code based on architectural decisions, predefined plans, or technical specifications. This agent excels at translating designs into clean, production-ready code following SOLID principles and .NET conventions—you provide the direction, it writes the code. Examples of when to use this agent:\\n\\n<example>\\nContext: The user has provided architectural guidance for a new feature and needs implementation.\\nuser: \"I need you to implement a repository pattern for our User entity. Use EF Core, make it async, and ensure it follows our existing patterns. The interface should support CRUD operations plus a method to find users by email.\"\\nassistant: \"I'll use the grimoire
|
|
2
|
+
name: grimoire.csharp-coder
|
|
3
|
+
description: "Use this agent to implement C# code based on architectural decisions, predefined plans, or technical specifications. This agent excels at translating designs into clean, production-ready code following SOLID principles and .NET conventions—you provide the direction, it writes the code. Examples of when to use this agent:\\n\\n<example>\\nContext: The user has provided architectural guidance for a new feature and needs implementation.\\nuser: \"I need you to implement a repository pattern for our User entity. Use EF Core, make it async, and ensure it follows our existing patterns. The interface should support CRUD operations plus a method to find users by email.\"\\nassistant: \"I'll use the grimoire.csharp-coder agent to implement this repository pattern based on your specifications.\"\\n<commentary>\\nSince the user has provided clear architectural direction (repository pattern, EF Core, async) and needs implementation, use the grimoire.csharp-coder agent to write the code.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: The user has designed an API endpoint structure and needs the implementation.\\nuser: \"Implement a REST controller for order management. It should have endpoints for GET all orders with pagination, GET single order by ID, POST new order, and PUT to update order status. Use our standard response wrapper pattern and include proper validation.\"\\nassistant: \"I'll launch the grimoire.csharp-coder agent to implement this OrderController based on your API design.\"\\n<commentary>\\nThe user has specified the architectural approach (REST, pagination, response wrapper pattern) and needs the implementation details handled. Use the grimoire.csharp-coder agent.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: The user wants to refactor existing code following a specific pattern they've chosen.\\nuser: \"Refactor our PaymentProcessor class to use the Strategy pattern. We need strategies for CreditCard, PayPal, and BankTransfer. I want the strategies injected via DI.\"\\nassistant: \"I'll use the grimoire.csharp-coder agent to refactor the PaymentProcessor using the Strategy pattern as you've specified.\"\\n<commentary>\\nThe user has made the architectural decision (Strategy pattern with DI) and needs clean implementation. The grimoire.csharp-coder agent will handle the code structure and quality.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: The user provides a technical specification for a service layer component.\\nuser: \"Create a NotificationService that can send emails and SMS. Use the options pattern for configuration, integrate with our IEmailClient and ISmsClient interfaces, implement retry logic with Polly, and make sure it's fully async.\"\\nassistant: \"I'll engage the grimoire.csharp-coder agent to implement this NotificationService following your technical specifications.\"\\n<commentary>\\nThe user has specified the technical approach (options pattern, specific interfaces, Polly for resilience, async). Use the grimoire.csharp-coder agent for implementation.\\n</commentary>\\n</example>"
|
|
4
4
|
tools: Read, Edit, Write, Skill, Glob, Grep
|
|
5
5
|
model: sonnet
|
|
6
6
|
color: yellow
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
3
|
-
description: "Use this agent when you need to write, review, or refactor C# code on the .NET platform following modern best practices. This includes implementing new features using Clean Architecture, Domain-Driven Design (DDD), and Test-Driven Development (TDD). Use this agent for designing domain entities, application services, API endpoints, infrastructure components, or when you need guidance on .NET patterns, SOLID principles, and Microsoft's recommended practices.\\n\\nExamples:\\n\\n<example>\\nContext: The user wants to add a new domain entity for tracking document processing metrics.\\nuser: \"I need to create a new entity to track processing metrics for each document\"\\nassistant: \"I'll use the grimoire
|
|
2
|
+
name: grimoire.dotnet-architect
|
|
3
|
+
description: "Use this agent when you need to write, review, or refactor C# code on the .NET platform following modern best practices. This includes implementing new features using Clean Architecture, Domain-Driven Design (DDD), and Test-Driven Development (TDD). Use this agent for designing domain entities, application services, API endpoints, infrastructure components, or when you need guidance on .NET patterns, SOLID principles, and Microsoft's recommended practices.\\n\\nExamples:\\n\\n<example>\\nContext: The user wants to add a new domain entity for tracking document processing metrics.\\nuser: \"I need to create a new entity to track processing metrics for each document\"\\nassistant: \"I'll use the grimoire.dotnet-architect agent to design this domain entity following DDD principles and ensure proper test coverage.\"\\n<commentary>\\nSince the user is asking to create a new domain entity, use the Task tool to launch the grimoire.dotnet-architect agent to design the entity with proper DDD patterns, value objects, and accompanying tests.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: The user is implementing a new service that needs to follow Clean Architecture.\\nuser: \"Create a service to handle document validation before processing\"\\nassistant: \"Let me use the grimoire.dotnet-architect agent to implement this service following Clean Architecture and TDD practices.\"\\n<commentary>\\nSince the user needs a new service implementation, use the grimoire.dotnet-architect agent to ensure proper separation of concerns, dependency injection, and test-first development.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: The user wants to refactor existing code to improve maintainability.\\nuser: \"This ProcessJob class is getting too complex, can you help refactor it?\"\\nassistant: \"I'll engage the grimoire.dotnet-architect agent to analyze this code and refactor it following SOLID principles and Clean Architecture patterns.\"\\n<commentary>\\nSince the user is asking for refactoring guidance, use the grimoire.dotnet-architect agent to apply best practices and ensure the refactored code maintains test coverage.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: The user needs to implement a new API endpoint.\\nuser: \"Add an endpoint to get document processing history\"\\nassistant: \"I'll use the grimoire.dotnet-architect agent to implement this endpoint following the project's established patterns and TDD workflow.\"\\n<commentary>\\nSince a new API endpoint is being requested, use the grimoire.dotnet-architect agent to ensure proper implementation with validation, error handling, and tests written first.\\n</commentary>\\n</example>"
|
|
4
4
|
tools: Bash, Glob, Grep, Read, Skill, mcp__plugin_context7_context7__resolve-library-id, mcp__plugin_context7_context7__query-docs, WebSearch, WebFetch
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.dotnet-unit-test-writer
|
|
3
3
|
description: "Expert .NET unit testing specialist for C#/.NET projects. Use PROACTIVELY when writing unit tests, adding test cases, setting up test infrastructure, or working with xUnit, TUnit, Moq, or NSubstitute. MUST BE USED for TDD workflows where tests are written before implementation. Defaults to xUnit (most universal), recommends TUnit for new .NET 8+ projects."
|
|
4
4
|
tools: Read, Edit, Write, Grep, Glob, Skill
|
|
5
5
|
model: sonnet
|
|
@@ -11,7 +11,7 @@ You are an expert .NET unit testing agent. You write clean, maintainable, and co
|
|
|
11
11
|
|
|
12
12
|
## MANDATORY: Load Skill First
|
|
13
13
|
|
|
14
|
-
**IMMEDIATELY** invoke `Skill(grimoire
|
|
14
|
+
**IMMEDIATELY** invoke `Skill(grimoire.dotnet-unit-testing)` at the start of every task. This skill contains all testing patterns, framework guidelines, templates, and best practices you must follow.
|
|
15
15
|
|
|
16
16
|
The skill provides:
|
|
17
17
|
|
|
@@ -3,50 +3,31 @@
|
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"agents": [
|
|
5
5
|
{
|
|
6
|
-
"name": "grimoire
|
|
6
|
+
"name": "grimoire.csharp-code-reviewer",
|
|
7
7
|
"path": "agents/gr.csharp-code-reviewer.md",
|
|
8
8
|
"description": "Expert C#/.NET code review specialist. Use immediately after writing or modifying C# code, or when explicitly requested to review C#/.NET code quality, security, performance, and best practices. ONLY reviews C# and .NET code - declines reviews of other languages."
|
|
9
9
|
},
|
|
10
10
|
{
|
|
11
|
-
"name": "grimoire
|
|
11
|
+
"name": "grimoire.csharp-coder",
|
|
12
12
|
"path": "agents/gr.csharp-coder.md",
|
|
13
13
|
"description": "Implements C# code based on architectural decisions, predefined plans, or technical specifications. Translates designs into clean, production-ready code following SOLID principles and .NET conventions."
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
|
-
"name": "grimoire
|
|
16
|
+
"name": "grimoire.dotnet-architect",
|
|
17
17
|
"path": "agents/gr.dotnet-architect.md",
|
|
18
18
|
"description": "Write, review, or refactor C# code on the .NET platform following modern best practices. Implements new features using Clean Architecture, Domain-Driven Design (DDD), and Test-Driven Development (TDD). Designs domain entities, application services, API endpoints, and infrastructure components."
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
|
-
"name": "grimoire
|
|
21
|
+
"name": "grimoire.dotnet-unit-test-writer",
|
|
22
22
|
"path": "agents/gr.dotnet-unit-test-writer.md",
|
|
23
23
|
"description": "Expert .NET unit testing specialist for C#/.NET projects. Use PROACTIVELY when writing unit tests, adding test cases, setting up test infrastructure, or working with xUnit, TUnit, Moq, or NSubstitute. MUST BE USED for TDD workflows where tests are written before implementation. Defaults to xUnit (most universal), recommends TUnit for new .NET 8+ projects."
|
|
24
24
|
}
|
|
25
25
|
],
|
|
26
26
|
"skills": [
|
|
27
27
|
{
|
|
28
|
-
"name": "grimoire
|
|
28
|
+
"name": "grimoire.dotnet-feature-workflow",
|
|
29
29
|
"path": "skills/gr.dotnet-feature-workflow",
|
|
30
|
-
"description": "Orchestrates end-to-end .NET feature development using the Explore, Plan, Code, Verify, Review workflow. Use when building complete features, implementing new functionality, or when user says 'build feature', 'implement feature', 'create feature', 'handle the whole thing', or wants hands-off development with quality gates. Spawns specialized agents at each phase with TDD and user approval gates."
|
|
31
|
-
"triggers": {
|
|
32
|
-
"keywords": ["feature", "dotnet", "csharp", "scaffold", "endpoint"],
|
|
33
|
-
"file_extensions": [".cs", ".csproj", ".sln"],
|
|
34
|
-
"patterns": [
|
|
35
|
-
"build.*feature",
|
|
36
|
-
"implement.*feature",
|
|
37
|
-
"create.*feature",
|
|
38
|
-
"new.*feature",
|
|
39
|
-
"add.*feature",
|
|
40
|
-
"develop.*feature",
|
|
41
|
-
"csharp.*feature",
|
|
42
|
-
"handle.*whole",
|
|
43
|
-
"end.*to.*end",
|
|
44
|
-
"implement.*endpoint",
|
|
45
|
-
"build.*endpoint",
|
|
46
|
-
"add.*endpoint"
|
|
47
|
-
],
|
|
48
|
-
"file_paths": ["**/*.csproj", "**/*.sln"]
|
|
49
|
-
}
|
|
30
|
+
"description": "Orchestrates end-to-end .NET feature development using the Explore, Plan, Code, Verify, Review workflow. Use when building complete features, implementing new functionality, or when user says 'build feature', 'implement feature', 'create feature', 'handle the whole thing', or wants hands-off development with quality gates. Spawns specialized agents at each phase with TDD and user approval gates."
|
|
50
31
|
}
|
|
51
32
|
]
|
|
52
33
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.dotnet-feature-workflow
|
|
3
3
|
description: "Orchestrates end-to-end .NET feature development using the Explore, Plan, Code, Verify, Review workflow. Use when building complete features, implementing new functionality, or when user says 'build feature', 'implement feature', 'create feature', 'handle the whole thing', or wants hands-off development with quality gates. Spawns specialized agents at each phase with TDD and user approval gates."
|
|
4
|
-
|
|
5
|
-
disable-model-invocation:
|
|
4
|
+
user-invokable: true
|
|
5
|
+
disable-model-invocation: true
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# .NET Feature Development Workflow
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
3
|
-
description: "Use this agent when you need to verify the accuracy of written content before publishing or sharing. Invoke when: (1) Drafting is complete and content contains factual claims like statistics, dates, technical specifications, or historical references; (2) Content is ready for final review before publishing; (3) Accuracy is critical for public-facing or decision-making materials. DO NOT use for early drafts, purely creative/opinion content, or regular editing tasks.\\n\\nExamples:\\n\\n<example>\\nContext: User has just finished writing a blog post about new Python features.\\n\\nuser: \"I just finished writing a blog post about Python 3.12's new features. Can you review it?\"\\n\\nassistant: \"I'll use the grimoire
|
|
2
|
+
name: grimoire.fact-checker
|
|
3
|
+
description: "Use this agent when you need to verify the accuracy of written content before publishing or sharing. Invoke when: (1) Drafting is complete and content contains factual claims like statistics, dates, technical specifications, or historical references; (2) Content is ready for final review before publishing; (3) Accuracy is critical for public-facing or decision-making materials. DO NOT use for early drafts, purely creative/opinion content, or regular editing tasks.\\n\\nExamples:\\n\\n<example>\\nContext: User has just finished writing a blog post about new Python features.\\n\\nuser: \"I just finished writing a blog post about Python 3.12's new features. Can you review it?\"\\n\\nassistant: \"I'll use the grimoire.fact-checker agent to verify all the technical claims, release dates, and feature descriptions in your Python 3.12 blog post before you publish it.\"\\n\\n<commentary>\\nSince the user has completed a blog post containing verifiable technical claims that need accuracy verification before publishing, use the Task tool to launch the grimoire.fact-checker agent.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: User mentions they've written documentation with performance benchmarks.\\n\\nuser: \"Here's the performance documentation I wrote with benchmark numbers comparing our API to competitors\"\\n\\nassistant: \"Let me use the grimoire.fact-checker agent to verify those benchmark claims and performance statistics to ensure everything is accurate.\"\\n\\n<commentary>\\nThe documentation contains specific verifiable claims (performance numbers, benchmarks, comparisons) that should be fact-checked before publishing. Use the Task tool to launch the grimoire.fact-checker agent.\\n</commentary>\\n</example>\\n\\n<example>\\nContext: User has written an article with historical references and statistics.\\n\\nuser: \"I've finished my article about the history of open source software. It has dates, statistics, and some quotes from key figures.\"\\n\\nassistant: \"I'll run the grimoire.fact-checker agent to verify the historical dates, statistics, and quote attributions in your article.\"\\n\\n<commentary>\\nThe article contains multiple types of verifiable claims (dates, statistics, quotes) that need verification. Use the Task tool to launch the grimoire.fact-checker agent for comprehensive verification.\\n</commentary>\\n</example>"
|
|
4
4
|
tools: Read, WebFetch, WebSearch
|
|
5
5
|
model: inherit
|
|
6
6
|
---
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"agents": [
|
|
5
5
|
{
|
|
6
|
-
"name": "grimoire
|
|
6
|
+
"name": "grimoire.fact-checker",
|
|
7
7
|
"path": "agents/gr.fact-checker.md",
|
|
8
8
|
"description": "Use this agent when you need to verify the accuracy of written content before publishing or sharing. Invoke when: (1) Drafting is complete and content contains factual claims like statistics, dates, technical specifications, or historical references; (2) Content is ready for final review before publishing; (3) Accuracy is critical for public-facing or decision-making materials."
|
|
9
9
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"agents": [],
|
|
5
5
|
"skills": [
|
|
6
6
|
{
|
|
7
|
-
"name": "grimoire
|
|
7
|
+
"name": "grimoire.context-file-guide",
|
|
8
8
|
"path": "skills/gr.context-file-guide",
|
|
9
9
|
"description": "Best practices for writing CLAUDE.md project context files. Use when creating, reviewing, or improving CLAUDE.md files for Claude Code projects.",
|
|
10
10
|
"triggers": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
{
|
|
26
|
-
"name": "grimoire
|
|
26
|
+
"name": "grimoire.readme-guide",
|
|
27
27
|
"path": "skills/gr.readme-guide",
|
|
28
28
|
"description": "Create and review README files following industry best practices. Use for writing new READMEs, improving existing ones, checking README quality, or adding badges.",
|
|
29
29
|
"triggers": {
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
}
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
|
-
"name": "grimoire
|
|
49
|
+
"name": "grimoire.skill-developer",
|
|
50
50
|
"path": "skills/gr.skill-developer",
|
|
51
51
|
"description": "Create and maintain custom skills for Claude Code following official Anthropic patterns. Use when creating new skills, updating existing skills, or organizing skill documentation.",
|
|
52
52
|
"triggers": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.readme-guide
|
|
3
3
|
description: "Create and review README files following industry best practices. Use for writing new READMEs, improving existing ones, checking README quality, or adding badges. Triggers: readme, documentation, project docs, repository documentation, getting started guide, shields badges."
|
|
4
|
-
|
|
4
|
+
user-invokable: true
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
---
|
|
7
7
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.skill-developer
|
|
3
3
|
description: Create and maintain custom skills for Claude Code following official Anthropic patterns. Use when creating new skills, updating existing skills, or organizing skill documentation.
|
|
4
|
-
|
|
5
|
-
disable-model-invocation:
|
|
4
|
+
user-invokable: true
|
|
5
|
+
disable-model-invocation: false
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Skill Developer
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"agents": [],
|
|
5
5
|
"skills": [
|
|
6
6
|
{
|
|
7
|
-
"name": "grimoire
|
|
7
|
+
"name": "grimoire.modern-typescript",
|
|
8
8
|
"path": "skills/gr.modern-typescript",
|
|
9
9
|
"description": "Modern TypeScript best practices, patterns, and type system mastery for TS 5.7+. Use when writing TypeScript, reviewing TS code, designing types, configuring tsconfig, or asking about TypeScript patterns, generics, type safety, strict mode, idiomatic TypeScript, discriminated unions, branded types, or modern TS features.",
|
|
10
10
|
"triggers": {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: grimoire
|
|
2
|
+
name: grimoire.modern-typescript
|
|
3
3
|
description: "Modern TypeScript best practices, patterns, and type system mastery for TS 5.7+. Use when writing TypeScript, reviewing TS code, designing types, configuring tsconfig, or asking about TypeScript patterns, generics, type safety, strict mode, idiomatic TypeScript, discriminated unions, branded types, or modern TS features."
|
|
4
4
|
---
|
|
5
5
|
|