@grimoire-cc/cli 0.14.0 → 0.15.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.
Files changed (74) hide show
  1. package/dist/bin.js +15 -5
  2. package/dist/bin.js.map +1 -1
  3. package/dist/commands/add.d.ts.map +1 -1
  4. package/dist/commands/add.js +2 -0
  5. package/dist/commands/add.js.map +1 -1
  6. package/dist/commands/agent-paths.d.ts +11 -0
  7. package/dist/commands/agent-paths.d.ts.map +1 -0
  8. package/dist/commands/agent-paths.js +69 -0
  9. package/dist/commands/agent-paths.js.map +1 -0
  10. package/dist/commands/agent-skills.d.ts +10 -0
  11. package/dist/commands/agent-skills.d.ts.map +1 -0
  12. package/dist/commands/agent-skills.js +159 -0
  13. package/dist/commands/agent-skills.js.map +1 -0
  14. package/dist/commands/config.d.ts +7 -0
  15. package/dist/commands/config.d.ts.map +1 -0
  16. package/dist/commands/config.js +62 -0
  17. package/dist/commands/config.js.map +1 -0
  18. package/dist/commands/list.d.ts.map +1 -1
  19. package/dist/commands/list.js +237 -75
  20. package/dist/commands/list.js.map +1 -1
  21. package/dist/commands/remove.d.ts.map +1 -1
  22. package/dist/commands/remove.js +2 -0
  23. package/dist/commands/remove.js.map +1 -1
  24. package/dist/commands/update.d.ts +2 -2
  25. package/dist/commands/update.d.ts.map +1 -1
  26. package/dist/commands/update.js +29 -14
  27. package/dist/commands/update.js.map +1 -1
  28. package/dist/enforce.d.ts +8 -10
  29. package/dist/enforce.d.ts.map +1 -1
  30. package/dist/enforce.js +38 -17
  31. package/dist/enforce.js.map +1 -1
  32. package/dist/frontmatter.d.ts +16 -0
  33. package/dist/frontmatter.d.ts.map +1 -0
  34. package/dist/frontmatter.js +74 -0
  35. package/dist/frontmatter.js.map +1 -0
  36. package/dist/grimoire-config.d.ts +16 -0
  37. package/dist/grimoire-config.d.ts.map +1 -0
  38. package/dist/grimoire-config.js +63 -0
  39. package/dist/grimoire-config.js.map +1 -0
  40. package/dist/prompt.d.ts.map +1 -1
  41. package/dist/prompt.js +19 -14
  42. package/dist/prompt.js.map +1 -1
  43. package/dist/remove.d.ts +4 -0
  44. package/dist/remove.d.ts.map +1 -1
  45. package/dist/remove.js +10 -0
  46. package/dist/remove.js.map +1 -1
  47. package/dist/resolve.d.ts.map +1 -1
  48. package/dist/resolve.js +12 -5
  49. package/dist/resolve.js.map +1 -1
  50. package/dist/setup.d.ts.map +1 -1
  51. package/dist/setup.js +4 -8
  52. package/dist/setup.js.map +1 -1
  53. package/package.json +1 -1
  54. package/packs/dev-pack/agents/grimoire.code-reviewer.md +0 -1
  55. package/packs/dev-pack/agents/grimoire.tdd-specialist.md +0 -1
  56. package/packs/dev-pack/grimoire.json +1 -1
  57. package/packs/docs-pack/skills/grimoire.business-logic-docs/SKILL.md +0 -1
  58. package/packs/dotnet-pack/agents/grimoire.csharp-code-reviewer.md +0 -1
  59. package/packs/dotnet-pack/skills/grimoire.dotnet-feature-workflow/SKILL.md +0 -1
  60. package/packs/essentials-pack/agents/grimoire.fact-checker.md +0 -1
  61. package/packs/frontend-pack/agents/grimoire.angular-coder.md +193 -0
  62. package/packs/frontend-pack/grimoire.json +7 -0
  63. package/packs/meta-pack/skills/grimoire.context-file-guide/SKILL.md +0 -1
  64. package/packs/meta-pack/skills/grimoire.readme-guide/SKILL.md +0 -1
  65. package/packs/meta-pack/skills/grimoire.skill-developer/SKILL.md +0 -1
  66. package/packs/ts-pack/skills/grimoire.modern-typescript/SKILL.md +0 -1
  67. package/dist/commands/enforce-agent.d.ts +0 -5
  68. package/dist/commands/enforce-agent.d.ts.map +0 -1
  69. package/dist/commands/enforce-agent.js +0 -94
  70. package/dist/commands/enforce-agent.js.map +0 -1
  71. package/dist/version.d.ts +0 -5
  72. package/dist/version.d.ts.map +0 -1
  73. package/dist/version.js +0 -32
  74. package/dist/version.js.map +0 -1
package/dist/bin.js CHANGED
@@ -5,7 +5,8 @@ import { runAdd } from './commands/add.js';
5
5
  import { runRemoveInteractive } from './commands/remove.js';
6
6
  import { runUpdate } from './commands/update.js';
7
7
  import { runLogs } from './commands/logs.js';
8
- import { runEnforceAgent } from './commands/enforce-agent.js';
8
+ import { runConfig } from './commands/config.js';
9
+ import { runAgentSkills } from './commands/agent-skills.js';
9
10
  import { runList } from './commands/list.js';
10
11
  const require = createRequire(import.meta.url);
11
12
  const { version } = require('../package.json');
@@ -87,13 +88,22 @@ const main = defineCommand({
87
88
  await runList(process.cwd());
88
89
  },
89
90
  }),
90
- 'enforce-agent': defineCommand({
91
+ config: defineCommand({
91
92
  meta: {
92
- name: 'enforce-agent',
93
- description: 'Toggle agent enforcement — delegate file edits to specialist agents',
93
+ name: 'config',
94
+ description: 'Configure global Grimoire settings',
94
95
  },
95
96
  async run() {
96
- await runEnforceAgent(process.cwd());
97
+ await runConfig(process.cwd());
98
+ },
99
+ }),
100
+ 'agent-skills': defineCommand({
101
+ meta: {
102
+ name: 'agent-skills',
103
+ description: 'Manage skill assignments for agents',
104
+ },
105
+ async run() {
106
+ await runAgentSkills(process.cwd());
97
107
  },
98
108
  }),
99
109
  },
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,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,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,aAAa,GAAG,aAAa,CAAC;IAClC,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kDAAkD;KAChE;IACD,KAAK,CAAC,GAAG;QACP,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjC,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,aAAa,CAAC;IAChC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,yCAAyC;KACvD;IACD,IAAI,EAAE;QACJ,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,kEAAkE;SAChF;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,MAAM,EAAE,aAAa;QACrB,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,aAAa,CAAC;YAClB,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,sCAAsC;aACpD;YACD,KAAK,CAAC,GAAG;gBACP,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/B,CAAC;SACF,CAAC;QACF,eAAe,EAAE,aAAa,CAAC;YAC7B,IAAI,EAAE;gBACJ,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,qEAAqE;aACnF;YACD,KAAK,CAAC,GAAG;gBACP,MAAM,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACvC,CAAC;SACF,CAAC;KACH;CACF,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;GAMG;AACH,wBAAsB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAuC9E"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;GAMG;AACH,wBAAsB,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,CAwC9E"}
@@ -1,6 +1,7 @@
1
1
  import { loadAllPacks } from '../resolve.js';
2
2
  import { copyItems } from '../copy.js';
3
3
  import { printSummary } from '../summary.js';
4
+ import { recordInstalledVersions } from '../grimoire-config.js';
4
5
  import { runWizard } from '../prompt.js';
5
6
  import { setupRouter } from '../setup.js';
6
7
  /**
@@ -26,6 +27,7 @@ export async function runAdd(cwd) {
26
27
  for (const selection of wizard.selections) {
27
28
  const results = copyItems(selection.items, selection.packDir, projectDir);
28
29
  allResults.push(...results);
30
+ recordInstalledVersions(projectDir, selection.items);
29
31
  packInfo.push({
30
32
  name: selection.manifest.name,
31
33
  version: selection.manifest.version,
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAwB;IACnD,MAAM,UAAU,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAElD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAA6C,EAAE,CAAC;IAE9D,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1E,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;YAC7B,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO;SACpC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAmB;QAC9B,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,UAAU;KACpB,CAAC;IAEF,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAwB;IACnD,MAAM,UAAU,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAE7B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAElD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAA6C,EAAE,CAAC;IAE9D,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1E,UAAU,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAC5B,uBAAuB,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI;YAC7B,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO;SACpC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,WAAW,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAmB;QAC9B,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,UAAU;KACpB,CAAC;IAEF,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtB,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * `runAgentPathsFor` — manage enforcement file patterns for a specific agent.
3
+ * Reads/writes patterns in skills-manifest.json.
4
+ * Hook re-sync is the caller's responsibility.
5
+ */
6
+ /**
7
+ * Runs the path add/remove action for a specific agent.
8
+ * Used by the unified `list` flow.
9
+ */
10
+ export declare function runAgentPathsFor(projectDir: string, agentName: string): Promise<void>;
11
+ //# sourceMappingURL=agent-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-paths.d.ts","sourceRoot":"","sources":["../../src/commands/agent-paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8D3F"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * `runAgentPathsFor` — manage enforcement file patterns for a specific agent.
3
+ * Reads/writes patterns in skills-manifest.json.
4
+ * Hook re-sync is the caller's responsibility.
5
+ */
6
+ import * as clack from '@clack/prompts';
7
+ import { readManifest, writeManifest } from '../enforce.js';
8
+ /**
9
+ * Runs the path add/remove action for a specific agent.
10
+ * Used by the unified `list` flow.
11
+ */
12
+ export async function runAgentPathsFor(projectDir, agentName) {
13
+ const manifest = readManifest(projectDir);
14
+ const entry = manifest.agents[agentName];
15
+ const currentPaths = entry?.file_patterns ?? [];
16
+ if (currentPaths.length > 0) {
17
+ clack.log.info(`Current paths: ${currentPaths.join(', ')}`);
18
+ }
19
+ else {
20
+ clack.log.info('No enforcement paths configured.');
21
+ }
22
+ const action = await clack.select({
23
+ message: 'What would you like to do?',
24
+ options: [
25
+ { value: 'add', label: 'Add path', hint: 'e.g. *.ts, *.cs, **/*.vue, src/api/**' },
26
+ { value: 'remove', label: 'Remove paths', ...(currentPaths.length === 0 && { hint: 'none to remove' }) },
27
+ { value: 'done', label: 'Done' },
28
+ ],
29
+ });
30
+ if (clack.isCancel(action) || action === 'done')
31
+ return;
32
+ if (action === 'add') {
33
+ const pattern = await clack.text({
34
+ message: 'Enter a glob pattern (e.g. *.ts, **/*.vue):',
35
+ });
36
+ if (clack.isCancel(pattern))
37
+ return;
38
+ const trimmed = pattern.trim();
39
+ if (trimmed) {
40
+ if (!manifest.agents[agentName]) {
41
+ manifest.agents[agentName] = {};
42
+ }
43
+ manifest.agents[agentName].file_patterns = [...currentPaths, trimmed];
44
+ writeManifest(projectDir, manifest);
45
+ clack.log.success(`Added pattern: ${trimmed}`);
46
+ }
47
+ }
48
+ if (action === 'remove') {
49
+ if (currentPaths.length === 0) {
50
+ clack.log.warn('No paths to remove.');
51
+ return;
52
+ }
53
+ const selected = await clack.multiselect({
54
+ message: 'Select paths to remove:',
55
+ options: currentPaths.map((p) => ({ value: p, label: p })),
56
+ required: false,
57
+ });
58
+ if (clack.isCancel(selected))
59
+ return;
60
+ const toRemove = new Set(selected);
61
+ if (toRemove.size > 0) {
62
+ const remaining = currentPaths.filter((p) => !toRemove.has(p));
63
+ manifest.agents[agentName].file_patterns = remaining;
64
+ writeManifest(projectDir, manifest);
65
+ clack.log.success(`Removed ${toRemove.size} path(s).`);
66
+ }
67
+ }
68
+ }
69
+ //# sourceMappingURL=agent-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-paths.js","sourceRoot":"","sources":["../../src/commands/agent-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * `grimoire agent-skills` — manage skill assignments for agents.
3
+ */
4
+ export declare function runAgentSkills(projectDir: string): Promise<void>;
5
+ /**
6
+ * Runs the skill add/remove action loop for a specific agent.
7
+ * Used by both the standalone `agent-skills` command and the unified `list` flow.
8
+ */
9
+ export declare function runAgentSkillsFor(projectDir: string, agentName: string): Promise<void>;
10
+ //# sourceMappingURL=agent-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skills.d.ts","sourceRoot":"","sources":["../../src/commands/agent-skills.ts"],"names":[],"mappings":"AAAA;;GAEG;AAqCH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DtE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2E5F"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * `grimoire agent-skills` — manage skill assignments for agents.
3
+ */
4
+ import { existsSync, readdirSync, readFileSync, statSync, writeFileSync } from 'fs';
5
+ import { join, basename } from 'path';
6
+ import * as clack from '@clack/prompts';
7
+ import { readManifest, readAgentMeta } from '../enforce.js';
8
+ import { parseAgentSkills, updateAgentSkills } from '../frontmatter.js';
9
+ function readSkillDescription(skillMdPath) {
10
+ try {
11
+ const content = readFileSync(skillMdPath, 'utf-8');
12
+ const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
13
+ if (!fm?.[1])
14
+ return '';
15
+ return fm[1].match(/^description:\s*(.+)$/m)?.[1]?.trim().replace(/^["']|["']$/g, '') ?? '';
16
+ }
17
+ catch {
18
+ return '';
19
+ }
20
+ }
21
+ function scanAvailableSkills(projectDir) {
22
+ const skillsDir = join(projectDir, '.claude', 'skills');
23
+ if (!existsSync(skillsDir))
24
+ return [];
25
+ return readdirSync(skillsDir)
26
+ .filter((f) => {
27
+ const full = join(skillsDir, f);
28
+ return statSync(full).isDirectory() && existsSync(join(full, 'SKILL.md'));
29
+ })
30
+ .sort()
31
+ .map((name) => ({
32
+ name,
33
+ description: readSkillDescription(join(skillsDir, name, 'SKILL.md')),
34
+ }));
35
+ }
36
+ export async function runAgentSkills(projectDir) {
37
+ // Load manifest to filter to grimoire-managed agents
38
+ let manifest;
39
+ try {
40
+ manifest = readManifest(projectDir);
41
+ }
42
+ catch {
43
+ clack.log.error('No skills-manifest.json found. Run `grimoire add` first.');
44
+ process.exit(1);
45
+ }
46
+ const agentsDir = join(projectDir, '.claude', 'agents');
47
+ if (!existsSync(agentsDir)) {
48
+ clack.log.error('No agents installed. Run `grimoire add` first.');
49
+ process.exit(1);
50
+ }
51
+ // Build list of grimoire-managed agents
52
+ const managedNames = new Set(Object.keys(manifest.agents));
53
+ const agentFiles = readdirSync(agentsDir)
54
+ .filter((f) => f.endsWith('.md'))
55
+ .filter((f) => {
56
+ const fsName = f.replace(/\.md$/, '');
57
+ return managedNames.has(fsName) ||
58
+ [...managedNames].some((key) => key.endsWith(`.${fsName}`));
59
+ })
60
+ .sort();
61
+ if (agentFiles.length === 0) {
62
+ console.log('No grimoire-managed agents found. Run `grimoire add` to install agents.');
63
+ return;
64
+ }
65
+ clack.intro('Agent Skills');
66
+ // Select an agent
67
+ const agentOptions = agentFiles.map((f) => {
68
+ const fsName = f.replace(/\.md$/, '');
69
+ const meta = readAgentMeta(join(agentsDir, f));
70
+ return {
71
+ value: fsName,
72
+ label: fsName,
73
+ hint: meta.description.length > 80 ? meta.description.slice(0, 80) + '…' : meta.description,
74
+ };
75
+ });
76
+ const selectedAgent = await clack.select({
77
+ message: 'Select an agent to manage skills:',
78
+ options: agentOptions,
79
+ });
80
+ if (clack.isCancel(selectedAgent)) {
81
+ clack.cancel('Cancelled.');
82
+ return;
83
+ }
84
+ const agentName = selectedAgent;
85
+ await runAgentSkillsFor(projectDir, agentName);
86
+ clack.outro('Done.');
87
+ }
88
+ /**
89
+ * Runs the skill add/remove action loop for a specific agent.
90
+ * Used by both the standalone `agent-skills` command and the unified `list` flow.
91
+ */
92
+ export async function runAgentSkillsFor(projectDir, agentName) {
93
+ const agentPath = join(projectDir, '.claude', 'agents', `${agentName}.md`);
94
+ const content = readFileSync(agentPath, 'utf-8');
95
+ const currentSkills = parseAgentSkills(content);
96
+ if (currentSkills.length > 0) {
97
+ clack.log.info(`Current skills: ${currentSkills.join(', ')}`);
98
+ }
99
+ else {
100
+ clack.log.info('No skills assigned.');
101
+ }
102
+ const action = await clack.select({
103
+ message: 'What would you like to do?',
104
+ options: [
105
+ { value: 'add', label: 'Add skills' },
106
+ { value: 'remove', label: 'Remove skills', ...(currentSkills.length === 0 && { hint: 'none to remove' }) },
107
+ { value: 'done', label: 'Done' },
108
+ ],
109
+ });
110
+ if (clack.isCancel(action) || action === 'done')
111
+ return;
112
+ if (action === 'add') {
113
+ const available = scanAvailableSkills(projectDir);
114
+ const currentSet = new Set(currentSkills);
115
+ const addable = available.filter((s) => !currentSet.has(s.name));
116
+ if (addable.length === 0) {
117
+ clack.log.warn('No additional skills available to add.');
118
+ return;
119
+ }
120
+ const selected = await clack.multiselect({
121
+ message: 'Select skills to add:',
122
+ options: addable.map((s) => ({
123
+ value: s.name,
124
+ label: s.name,
125
+ hint: s.description.length > 80 ? s.description.slice(0, 80) + '…' : s.description,
126
+ })),
127
+ required: false,
128
+ });
129
+ if (clack.isCancel(selected))
130
+ return;
131
+ const toAdd = selected;
132
+ if (toAdd.length > 0) {
133
+ const updated = updateAgentSkills(content, [...currentSkills, ...toAdd]);
134
+ writeFileSync(agentPath, updated);
135
+ clack.log.success(`Added ${toAdd.length} skill(s).`);
136
+ }
137
+ }
138
+ if (action === 'remove') {
139
+ if (currentSkills.length === 0) {
140
+ clack.log.warn('No skills to remove.');
141
+ return;
142
+ }
143
+ const selected = await clack.multiselect({
144
+ message: 'Select skills to remove:',
145
+ options: currentSkills.map((s) => ({ value: s, label: s })),
146
+ required: false,
147
+ });
148
+ if (clack.isCancel(selected))
149
+ return;
150
+ const toRemove = new Set(selected);
151
+ if (toRemove.size > 0) {
152
+ const remaining = currentSkills.filter((s) => !toRemove.has(s));
153
+ const updated = updateAgentSkills(content, remaining);
154
+ writeFileSync(agentPath, updated);
155
+ clack.log.success(`Removed ${toRemove.size} skill(s).`);
156
+ }
157
+ }
158
+ }
159
+ //# sourceMappingURL=agent-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-skills.js","sourceRoot":"","sources":["../../src/commands/agent-skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `grimoire config` — interactive menu for global Grimoire settings.
3
+ */
4
+ export declare function runConfig(projectDir: string, options?: {
5
+ quiet?: boolean;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,wBAAsB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DhG"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * `grimoire config` — interactive menu for global Grimoire settings.
3
+ */
4
+ import * as clack from '@clack/prompts';
5
+ import { readGrimoireConfig, writeGrimoireConfig } from '../grimoire-config.js';
6
+ import { readManifest, ensureEnforceHooks, removeEnforceHooks } from '../enforce.js';
7
+ export async function runConfig(projectDir, options) {
8
+ if (!options?.quiet)
9
+ clack.intro('Grimoire configuration');
10
+ const config = readGrimoireConfig(projectDir);
11
+ // Collect agents with file_patterns for enforcement info
12
+ let agentsWithPatterns = [];
13
+ try {
14
+ const manifest = readManifest(projectDir);
15
+ agentsWithPatterns = Object.entries(manifest.agents)
16
+ .filter(([, entry]) => entry.file_patterns && entry.file_patterns.length > 0)
17
+ .map(([name]) => name);
18
+ }
19
+ catch {
20
+ // No manifest — enforcement won't list any agents
21
+ }
22
+ const enforcementHint = agentsWithPatterns.length > 0
23
+ ? `${agentsWithPatterns.length} agent(s) with file patterns`
24
+ : 'no agents with file patterns';
25
+ const selected = await clack.multiselect({
26
+ message: 'Toggle features',
27
+ options: [
28
+ {
29
+ value: 'enforcement',
30
+ label: 'Agent enforcement',
31
+ hint: enforcementHint,
32
+ },
33
+ ],
34
+ initialValues: config.enforcement ? ['enforcement'] : [],
35
+ required: false,
36
+ });
37
+ if (clack.isCancel(selected)) {
38
+ if (!options?.quiet)
39
+ clack.outro('Cancelled.');
40
+ return;
41
+ }
42
+ const enforcementEnabled = selected.includes('enforcement');
43
+ const changed = enforcementEnabled !== (config.enforcement ?? false);
44
+ if (!changed) {
45
+ if (!options?.quiet)
46
+ clack.outro('No changes.');
47
+ return;
48
+ }
49
+ config.enforcement = enforcementEnabled;
50
+ writeGrimoireConfig(projectDir, config);
51
+ if (enforcementEnabled) {
52
+ ensureEnforceHooks(projectDir, agentsWithPatterns);
53
+ clack.log.success('Enforcement enabled.');
54
+ }
55
+ else {
56
+ removeEnforceHooks(projectDir);
57
+ clack.log.success('Enforcement disabled.');
58
+ }
59
+ if (!options?.quiet)
60
+ clack.outro('Configuration saved.');
61
+ }
62
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAErF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAAkB,EAAE,OAA6B;IAC/E,IAAI,CAAC,OAAO,EAAE,KAAK;QAAE,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE9C,yDAAyD;IACzD,IAAI,kBAAkB,GAAa,EAAE,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAC1C,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;aACjD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;aAC5E,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;IAED,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC;QACnD,CAAC,CAAC,GAAG,kBAAkB,CAAC,MAAM,8BAA8B;QAC5D,CAAC,CAAC,8BAA8B,CAAC;IAEnC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC;QACvC,OAAO,EAAE,iBAAiB;QAC1B,OAAO,EAAE;YACP;gBACE,KAAK,EAAE,aAAsB;gBAC7B,KAAK,EAAE,mBAAmB;gBAC1B,IAAI,EAAE,eAAe;aACtB;SACF;QACD,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAsB,CAAC,CAAC,CAAC,CAAC,EAAE;QACjE,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,KAAK;YAAE,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC/C,OAAO;IACT,CAAC;IAED,MAAM,kBAAkB,GAAI,QAAqB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC1E,MAAM,OAAO,GAAG,kBAAkB,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC;IAErE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,EAAE,KAAK;YAAE,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAC;IACxC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAExC,IAAI,kBAAkB,EAAE,CAAC;QACvB,kBAAkB,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QACnD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/B,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,KAAK;QAAE,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAC3D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAgGA,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgI/D"}
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAsKA,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsM/D"}