@grimoire-cc/cli 0.12.2 → 0.13.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 CHANGED
@@ -83,8 +83,8 @@ const main = defineCommand({
83
83
  name: 'list',
84
84
  description: 'List all installed agents and skills',
85
85
  },
86
- run() {
87
- runList(process.cwd());
86
+ async run() {
87
+ await runList(process.cwd());
88
88
  },
89
89
  }),
90
90
  'enforce-agent': defineCommand({
package/dist/bin.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare function runList(projectDir: string): void;
1
+ export declare function runList(projectDir: string): Promise<void>;
2
2
  //# sourceMappingURL=list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAUA,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAqFhD"}
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,17 +1,85 @@
1
- import { existsSync, readdirSync, statSync } from 'fs';
1
+ import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
2
2
  import { basename, join } from 'path';
3
- import { readAgentMeta, readManifest } from '../enforce.js';
4
- const DESC_MAX = 60;
5
- function truncate(s) {
6
- return s.length > DESC_MAX ? s.slice(0, DESC_MAX - 1) + '…' : s;
3
+ import * as clack from '@clack/prompts';
4
+ import { readManifest } from '../enforce.js';
5
+ function readAgentFullMeta(agentPath) {
6
+ let content;
7
+ try {
8
+ content = readFileSync(agentPath, 'utf-8');
9
+ }
10
+ catch {
11
+ return { description: '', model: '', tools: '' };
12
+ }
13
+ const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
14
+ if (!fm?.[1])
15
+ return { description: '', model: '', tools: '' };
16
+ const block = fm[1];
17
+ const get = (key) => block.match(new RegExp(`^${key}:\\s*(.+)$`, 'm'))?.[1]?.trim().replace(/^["']|["']$/g, '') ??
18
+ '';
19
+ return {
20
+ description: get('description'),
21
+ model: get('model'),
22
+ tools: get('tools'),
23
+ };
24
+ }
25
+ function readSkillDescription(skillMdPath) {
26
+ let content;
27
+ try {
28
+ content = readFileSync(skillMdPath, 'utf-8');
29
+ }
30
+ catch {
31
+ return '';
32
+ }
33
+ const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
34
+ if (!fm?.[1])
35
+ return '';
36
+ const block = fm[1];
37
+ return (block.match(/^description:\s*(.+)$/m)?.[1]?.trim().replace(/^["']|["']$/g, '') ?? '');
7
38
  }
8
- export function runList(projectDir) {
39
+ function wrapText(text, maxWidth) {
40
+ if (maxWidth <= 0)
41
+ return text;
42
+ const words = text.split(' ');
43
+ const lines = [];
44
+ let current = '';
45
+ for (const word of words) {
46
+ if (!current) {
47
+ current = word;
48
+ }
49
+ else if (current.length + 1 + word.length <= maxWidth) {
50
+ current += ' ' + word;
51
+ }
52
+ else {
53
+ lines.push(current);
54
+ current = word;
55
+ }
56
+ }
57
+ if (current)
58
+ lines.push(current);
59
+ return lines.join('\n');
60
+ }
61
+ function formatDescription(raw) {
62
+ const maxWidth = Math.max(40, (process.stdout.columns ?? 80) - 4);
63
+ const unescaped = raw.replace(/\\n/g, '\n');
64
+ const stripped = unescaped.replace(/<example>[\s\S]*?<\/example>/g, '').trim();
65
+ return stripped
66
+ .split('\n')
67
+ .map((line) => (line.trim() === '' ? '' : wrapText(line, maxWidth)))
68
+ .join('\n')
69
+ .replace(/\n{3,}/g, '\n\n')
70
+ .trim();
71
+ }
72
+ // --- Main command ---
73
+ export async function runList(projectDir) {
9
74
  const agentsDir = join(projectDir, '.claude', 'agents');
10
75
  const skillsDir = join(projectDir, '.claude', 'skills');
11
- // Load manifest to determine which items grimoire manages
12
76
  let managedAgentNames = null;
13
77
  let managedSkillDirNames = null;
14
- let enforcedAgents = new Set();
78
+ const enforcedAgents = new Set();
79
+ const agentFilePatterns = new Map();
80
+ // skill triggers keyed by dir name
81
+ const skillTriggers = new Map();
82
+ const skillManifestDescs = new Map();
15
83
  try {
16
84
  const manifest = readManifest(projectDir);
17
85
  managedAgentNames = new Set(Object.keys(manifest.agents));
@@ -19,19 +87,26 @@ export function runList(projectDir) {
19
87
  for (const [name, entry] of Object.entries(manifest.agents)) {
20
88
  if (entry.enforce)
21
89
  enforcedAgents.add(name);
90
+ if (entry.file_patterns?.length)
91
+ agentFilePatterns.set(name, entry.file_patterns);
92
+ }
93
+ for (const skill of manifest.skills) {
94
+ const dirName = basename(skill.path);
95
+ if (skill['triggers'])
96
+ skillTriggers.set(dirName, skill['triggers']);
97
+ if (skill['description'])
98
+ skillManifestDescs.set(dirName, skill['description']);
22
99
  }
23
100
  }
24
101
  catch {
25
102
  // manifest absent — nothing was installed by grimoire
26
103
  }
27
- // Collect grimoire-managed agents
28
104
  const agentNames = managedAgentNames;
29
105
  const agentFiles = existsSync(agentsDir) && agentNames !== null
30
106
  ? readdirSync(agentsDir)
31
107
  .filter((f) => f.endsWith('.md') && agentNames.has(f.replace(/\.md$/, '')))
32
108
  .sort()
33
109
  : [];
34
- // Collect grimoire-managed skills (directories containing SKILL.md)
35
110
  const skillDirNames = managedSkillDirNames;
36
111
  const skillDirs = existsSync(skillsDir) && skillDirNames !== null
37
112
  ? readdirSync(skillsDir)
@@ -44,38 +119,66 @@ export function runList(projectDir) {
44
119
  .sort()
45
120
  : [];
46
121
  if (agentFiles.length === 0 && skillDirs.length === 0) {
47
- console.log('No agents or skills installed. Run `grimoire add` to get started.');
122
+ clack.log.warn('No grimoire-managed items found. Run `grimoire add` to get started.');
48
123
  return;
49
124
  }
50
- const agentRows = agentFiles.map((f) => {
125
+ // Build select options
126
+ const options = [];
127
+ for (const f of agentFiles) {
51
128
  const name = f.replace(/\.md$/, '');
52
- const meta = readAgentMeta(join(agentsDir, f));
53
- return { name, desc: meta.description, enforced: enforcedAgents.has(name) };
54
- });
55
- // Build skill rows
56
- const skillRows = skillDirs.map((d) => {
57
- const meta = readAgentMeta(join(skillsDir, d, 'SKILL.md'));
58
- return { name: d, desc: meta.description, enforced: false };
59
- });
60
- // Determine padding
61
- const allNames = [...agentRows, ...skillRows].map((r) => r.name);
62
- const pad = Math.max(...allNames.map((n) => n.length));
63
- if (agentRows.length > 0) {
64
- console.log(`Agents (${agentRows.length}):`);
65
- for (const row of agentRows) {
66
- const suffix = row.enforced ? ' [enforced]' : '';
67
- console.log(` ${row.name.padEnd(pad)} ${truncate(row.desc)}${suffix}`);
68
- }
129
+ const meta = readAgentFullMeta(join(agentsDir, f));
130
+ const desc = meta.description;
131
+ options.push({
132
+ value: { kind: 'agent', name },
133
+ label: `[agent] ${name}`,
134
+ ...(desc ? { hint: desc.length > 80 ? desc.slice(0, 79) + '' : desc } : {}),
135
+ });
69
136
  }
70
- if (skillRows.length > 0) {
71
- if (agentRows.length > 0)
72
- console.log('');
73
- console.log(`Skills (${skillRows.length}):`);
74
- for (const row of skillRows) {
75
- console.log(` ${row.name.padEnd(pad)} ${truncate(row.desc)}`);
137
+ for (const d of skillDirs) {
138
+ const desc = readSkillDescription(join(skillsDir, d, 'SKILL.md')) ||
139
+ skillManifestDescs.get(d) ||
140
+ '';
141
+ options.push({
142
+ value: { kind: 'skill', name: d },
143
+ label: `[skill] ${d}`,
144
+ ...(desc ? { hint: desc.length > 80 ? desc.slice(0, 79) + '…' : desc } : {}),
145
+ });
146
+ }
147
+ clack.intro('Grimoire — Installed Items');
148
+ while (true) {
149
+ const selected = await clack.select({
150
+ message: 'Select an item to view details (Ctrl+C to exit)',
151
+ options,
152
+ });
153
+ if (clack.isCancel(selected))
154
+ break;
155
+ if (selected.kind === 'agent') {
156
+ const meta = readAgentFullMeta(join(agentsDir, `${selected.name}.md`));
157
+ const enforced = enforcedAgents.has(selected.name);
158
+ const patterns = agentFilePatterns.get(selected.name);
159
+ const desc = formatDescription(meta.description || '');
160
+ clack.log.message(` Description:\n${desc.split('\n').map((l) => ` ${l}`).join('\n')}`);
161
+ clack.log.message(` Model: ${meta.model || 'inherit'}`);
162
+ clack.log.message(` Tools: ${meta.tools || '(not specified)'}`);
163
+ clack.log.message(` Enforce: ${enforced ? `yes (file patterns: ${patterns?.join(', ') ?? 'none'})` : 'no'}`);
164
+ }
165
+ else {
166
+ const rawDesc = readSkillDescription(join(skillsDir, selected.name, 'SKILL.md')) ||
167
+ skillManifestDescs.get(selected.name) ||
168
+ '';
169
+ const triggers = skillTriggers.get(selected.name);
170
+ const desc = formatDescription(rawDesc);
171
+ const kw = triggers?.keywords?.length ? triggers.keywords.join(', ') : '(none)';
172
+ const ext = triggers?.file_extensions?.length ? triggers.file_extensions.join(', ') : '(none)';
173
+ const pat = triggers?.patterns?.length ? triggers.patterns.join(', ') : '(none)';
174
+ const fp = triggers?.file_paths?.length ? triggers.file_paths.join(', ') : '(none)';
175
+ clack.log.message(` Description:\n${desc.split('\n').map((l) => ` ${l}`).join('\n')}`);
176
+ clack.log.message(` Keywords: ${kw}`);
177
+ clack.log.message(` File extensions: ${ext}`);
178
+ clack.log.message(` Patterns: ${pat}`);
179
+ clack.log.message(` File paths: ${fp}`);
76
180
  }
77
181
  }
78
- console.log('');
79
- console.log(`${agentRows.length} agent(s), ${skillRows.length} skill(s) installed.`);
182
+ clack.outro('Done.');
80
183
  }
81
184
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -342,6 +342,11 @@
342
342
  color: var(--cyan);
343
343
  }
344
344
 
345
+ .badge.blocked {
346
+ background: rgba(248, 81, 73, 0.15);
347
+ color: var(--red);
348
+ }
349
+
345
350
  .prompt-text {
346
351
  max-width: 400px;
347
352
  overflow: hidden;
@@ -583,6 +588,7 @@
583
588
  <option value="">All</option>
584
589
  <option value="activated">Activated</option>
585
590
  <option value="no_match">No Match</option>
591
+ <option value="blocked">Blocked</option>
586
592
  </select>
587
593
  </div>
588
594
  <div class="filter-group">
@@ -801,6 +807,7 @@
801
807
  const total = entries.length;
802
808
  const activated = entries.filter(e => e.outcome === 'activated').length;
803
809
  const noMatch = entries.filter(e => e.outcome === 'no_match').length;
810
+ const blocked = entries.filter(e => e.outcome === 'blocked').length;
804
811
  const promptHooks = entries.filter(e => !e.hook_event).length;
805
812
  const toolHooks = entries.filter(e => e.hook_event === 'PreToolUse').length;
806
813
  const avgMs = (entries.reduce((s, e) => s + (e.execution_time_ms ?? 0), 0) / total).toFixed(1);
@@ -810,6 +817,7 @@
810
817
  <div class="stat-card"><div class="value">${total}</div><div class="label">Total Events</div></div>
811
818
  <div class="stat-card activated"><div class="value">${activated}</div><div class="label">Activated (${(activated / total * 100).toFixed(0)}%)</div></div>
812
819
  <div class="stat-card no-match"><div class="value">${noMatch}</div><div class="label">No Match</div></div>
820
+ <div class="stat-card" style="border-color:var(--red)"><div class="value" style="color:var(--red)">${blocked}</div><div class="label">Enforce Blocks</div></div>
813
821
  <div class="stat-card"><div class="value">${promptHooks}</div><div class="label">Prompt Hooks</div></div>
814
822
  <div class="stat-card"><div class="value">${toolHooks}</div><div class="label">Tool Hooks</div></div>
815
823
  <div class="stat-card"><div class="value">${avgMs}ms</div><div class="label">Avg Exec Time</div></div>
@@ -904,6 +912,8 @@
904
912
  ...(e.skills_matched ?? []).map(s => s.name),
905
913
  ...(e.skills_matched ?? []).flatMap(s => (s.matched_signals ?? []).map(sig => sig.value)),
906
914
  e.tool_name ?? '',
915
+ e.file_basename ?? '',
916
+ ...(e.blocking_agents ?? []),
907
917
  ].join(' ').toLowerCase();
908
918
  if (!haystack.includes(search)) return false;
909
919
  }
@@ -939,11 +949,16 @@
939
949
  ? `<span class="badge hook-tool">${e.tool_name ?? 'PreToolUse'}</span>`
940
950
  : `<span class="badge hook-prompt">Prompt</span>`;
941
951
 
942
- const outcomeBadge = `<span class="badge ${e.outcome === 'activated' ? 'activated' : 'no-match'}">${e.outcome}</span>`;
952
+ const outcomeBadge = `<span class="badge ${
953
+ e.outcome === 'activated' ? 'activated' :
954
+ e.outcome === 'blocked' ? 'blocked' : 'no-match'
955
+ }">${e.outcome}</span>`;
943
956
 
944
- const prompt = e.hook_event
945
- ? (e.prompt_raw ?? '').replace(/^\[PreToolUse:\w+\]\s*/, '')
946
- : (e.prompt_raw ?? '');
957
+ const prompt = e.enforce_block
958
+ ? `${e.file_basename ?? '?'} \u2192 ${(e.blocking_agents ?? []).join(', ')}`
959
+ : e.hook_event
960
+ ? (e.prompt_raw ?? '').replace(/^\[PreToolUse:\w+\]\s*/, '')
961
+ : (e.prompt_raw ?? '');
947
962
 
948
963
  const skillsHtml = (e.skills_matched ?? []).length
949
964
  ? (e.skills_matched ?? []).map(s => `
@@ -342,6 +342,11 @@
342
342
  color: var(--cyan);
343
343
  }
344
344
 
345
+ .badge.blocked {
346
+ background: rgba(248, 81, 73, 0.15);
347
+ color: var(--red);
348
+ }
349
+
345
350
  .prompt-text {
346
351
  max-width: 400px;
347
352
  overflow: hidden;
@@ -583,6 +588,7 @@
583
588
  <option value="">All</option>
584
589
  <option value="activated">Activated</option>
585
590
  <option value="no_match">No Match</option>
591
+ <option value="blocked">Blocked</option>
586
592
  </select>
587
593
  </div>
588
594
  <div class="filter-group">
@@ -801,6 +807,7 @@
801
807
  const total = entries.length;
802
808
  const activated = entries.filter(e => e.outcome === 'activated').length;
803
809
  const noMatch = entries.filter(e => e.outcome === 'no_match').length;
810
+ const blocked = entries.filter(e => e.outcome === 'blocked').length;
804
811
  const promptHooks = entries.filter(e => !e.hook_event).length;
805
812
  const toolHooks = entries.filter(e => e.hook_event === 'PreToolUse').length;
806
813
  const avgMs = (entries.reduce((s, e) => s + (e.execution_time_ms ?? 0), 0) / total).toFixed(1);
@@ -810,6 +817,7 @@
810
817
  <div class="stat-card"><div class="value">${total}</div><div class="label">Total Events</div></div>
811
818
  <div class="stat-card activated"><div class="value">${activated}</div><div class="label">Activated (${(activated / total * 100).toFixed(0)}%)</div></div>
812
819
  <div class="stat-card no-match"><div class="value">${noMatch}</div><div class="label">No Match</div></div>
820
+ <div class="stat-card" style="border-color:var(--red)"><div class="value" style="color:var(--red)">${blocked}</div><div class="label">Enforce Blocks</div></div>
813
821
  <div class="stat-card"><div class="value">${promptHooks}</div><div class="label">Prompt Hooks</div></div>
814
822
  <div class="stat-card"><div class="value">${toolHooks}</div><div class="label">Tool Hooks</div></div>
815
823
  <div class="stat-card"><div class="value">${avgMs}ms</div><div class="label">Avg Exec Time</div></div>
@@ -904,6 +912,8 @@
904
912
  ...(e.skills_matched ?? []).map(s => s.name),
905
913
  ...(e.skills_matched ?? []).flatMap(s => (s.matched_signals ?? []).map(sig => sig.value)),
906
914
  e.tool_name ?? '',
915
+ e.file_basename ?? '',
916
+ ...(e.blocking_agents ?? []),
907
917
  ].join(' ').toLowerCase();
908
918
  if (!haystack.includes(search)) return false;
909
919
  }
@@ -939,11 +949,16 @@
939
949
  ? `<span class="badge hook-tool">${e.tool_name ?? 'PreToolUse'}</span>`
940
950
  : `<span class="badge hook-prompt">Prompt</span>`;
941
951
 
942
- const outcomeBadge = `<span class="badge ${e.outcome === 'activated' ? 'activated' : 'no-match'}">${e.outcome}</span>`;
952
+ const outcomeBadge = `<span class="badge ${
953
+ e.outcome === 'activated' ? 'activated' :
954
+ e.outcome === 'blocked' ? 'blocked' : 'no-match'
955
+ }">${e.outcome}</span>`;
943
956
 
944
- const prompt = e.hook_event
945
- ? (e.prompt_raw ?? '').replace(/^\[PreToolUse:\w+\]\s*/, '')
946
- : (e.prompt_raw ?? '');
957
+ const prompt = e.enforce_block
958
+ ? `${e.file_basename ?? '?'} \u2192 ${(e.blocking_agents ?? []).join(', ')}`
959
+ : e.hook_event
960
+ ? (e.prompt_raw ?? '').replace(/^\[PreToolUse:\w+\]\s*/, '')
961
+ : (e.prompt_raw ?? '');
947
962
 
948
963
  const skillsHtml = (e.skills_matched ?? []).length
949
964
  ? (e.skills_matched ?? []).map(s => `
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grimoire-cc/cli",
3
- "version": "0.12.2",
3
+ "version": "0.13.1",
4
4
  "description": "CLI tool for installing Grimoire agent and skill packs",
5
5
  "type": "module",
6
6
  "license": "MIT",