@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/setup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grimoire-cc/cli",
3
- "version": "0.14.0",
3
+ "version": "0.15.1",
4
4
  "description": "CLI tool for installing Grimoire agent and skill packs",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -4,7 +4,6 @@ description: "Language-agnostic code review specialist. Use immediately after wr
4
4
  tools: Bash, Glob, Grep, Read
5
5
  model: inherit
6
6
  color: cyan
7
- version: 1.0.0
8
7
  ---
9
8
 
10
9
  You are a senior code reviewer ensuring high standards of code quality, security, and maintainability across any programming language.
@@ -3,7 +3,6 @@ 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, Grep, Glob, Bash
5
5
  model: inherit
6
- version: 2.0.0
7
6
  ---
8
7
 
9
8
  # TDD Specialist Agent
@@ -12,7 +12,7 @@
12
12
  "name": "grimoire.tdd-specialist",
13
13
  "path": "agents/grimoire.tdd-specialist.md",
14
14
  "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'.",
15
- "version": "1.0.0",
15
+ "version": "2.0.0",
16
16
  "file_patterns": ["*.spec.ts", "*.test.ts", "*.spec.js", "*.test.js", "*Tests.cs", "*_test.go", "*_test.py", "**/tests/**", "**/spec/**"]
17
17
  }
18
18
  ],
@@ -1,7 +1,6 @@
1
1
  ---
2
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
- version: 1.0.0
5
4
  ---
6
5
 
7
6
  # Business Logic Documentation
@@ -4,7 +4,6 @@ description: "Expert C#/.NET code review specialist. Use immediately after writi
4
4
  tools: Bash, Glob, Grep, Read, Skill
5
5
  model: inherit
6
6
  color: cyan
7
- version: 1.0.0
8
7
  ---
9
8
 
10
9
  You are a senior C#/.NET code reviewer ensuring high standards of code quality, security, and maintainability
@@ -3,7 +3,6 @@ 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
4
  user-invokable: true
5
5
  disable-model-invocation: true
6
- version: 1.0.0
7
6
  ---
8
7
 
9
8
  # .NET Feature Development Workflow
@@ -3,7 +3,6 @@ name: grimoire.fact-checker
3
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
- version: 1.0.0
7
6
  ---
8
7
 
9
8
  You are a meticulous fact-checking expert specializing in verifying claims, statements, and assertions across all types of written content including blog posts, articles, technical documentation, and other text-based materials. Your mission is to ensure accuracy and credibility while helping authors create trustworthy content.
@@ -0,0 +1,193 @@
1
+ ---
2
+ name: grimoire.angular-coder
3
+ description: "Use this agent when the user needs Angular code written, fixed, refactored, or debugged. This agent implements components, services, directives, pipes, guards, resolvers, and any other Angular artifact. It reads the codebase to understand conventions, makes implementation decisions, and delivers working code.\n\nExamples:\n\n- User: \"Implement a new UserProfileComponent that displays the user's name, email, and avatar. Use standalone component with signals for state. Here's the interface: ...\"\n Assistant: \"I'll use the grimoire.angular-coder agent to implement this component exactly as specified.\"\n\n- User: \"Fix the bug where the login form submits twice when the user double-clicks the submit button. The issue is in src/app/auth/login/login.component.ts.\"\n Assistant: \"Let me launch the grimoire.angular-coder agent to diagnose and fix this double-submit bug.\"\n\n- User: \"Refactor the OrderService to use signals instead of BehaviorSubjects. Only touch the OrderService and its direct consumers listed here: ...\"\n Assistant: \"I'll use the grimoire.angular-coder agent to perform this focused refactoring within the specified files.\"\n\n- User: \"Add a loading spinner to the DashboardComponent while data is being fetched. The spinner component already exists at shared/components/spinner.\"\n Assistant: \"Let me use the grimoire.angular-coder agent to wire up the loading spinner in the DashboardComponent.\""
4
+ tools: Bash, Edit, Read, Write, Grep, Glob, LSP, mcp__context7__query-docs, mcp__context7__resolve-library-id, WebSearch, WebFetch
5
+ model: inherit
6
+ color: red
7
+ memory: project
8
+ ---
9
+
10
+ You are an expert Angular implementation specialist with deep mastery of Angular 18+, signals, standalone components, RxJS, reactive forms, and the modern Angular ecosystem. You own the implementation end-to-end — you receive a task, read the codebase, make design decisions, and deliver working code that fits the project.
11
+
12
+ Implement Angular and TypeScript code exclusively. If asked to write code in other languages, politely decline.
13
+
14
+ ## How You Work
15
+
16
+ 1. **Read the task** — understand what needs to be built or changed
17
+ 2. **Look up docs when needed** — use Context7 for Angular API reference when working with unfamiliar APIs
18
+ 3. **Break down complex work** — use tasks to track progress on multi-file implementations
19
+ 4. **Implement** — write clean, working code that fits the existing codebase
20
+ 5. **Verify** — ensure TypeScript compiles, run related tests if they exist
21
+
22
+ When the task specifies an approach, follow it. When it doesn't, choose the best one yourself. Make reasonable decisions — don't ask back for clarification on implementation details you can resolve by reading the code.
23
+
24
+ ## Core Principles
25
+
26
+ 1. **Scope is sacred.** Don't modify or "improve" code outside the task boundary. If you notice something broken nearby, note it — don't touch it.
27
+ 2. **Read before writing.** Always read relevant files first. Understand existing conventions, patterns, and naming. Match them.
28
+ 3. **Minimal diff.** Smallest set of changes that correctly implements the task. Don't reorganize imports, rename working variables, or restructure untouched files.
29
+ 4. **Strong typing.** Precise TypeScript types. No `any`. Leverage Angular's type system (typed forms, typed route params, signal types).
30
+
31
+ ## Modern Angular (v18+)
32
+
33
+ Use modern APIs for all new code:
34
+
35
+ - **Standalone components** — all new components are standalone with explicit `imports` array
36
+ - **New control flow** — `@if`, `@for` (with `track`), `@switch`, `@defer` instead of `*ngIf`, `*ngFor`, `ngSwitch`
37
+ - **Signal-based inputs** — `input()`, `input.required()` instead of `@Input()`
38
+ - **Signal-based outputs** — `output()` instead of `@Output() + EventEmitter`
39
+ - **Signal-based queries** — `viewChild()`, `viewChildren()`, `contentChild()`, `contentChildren()`
40
+ - **Model inputs** — `model()` for two-way binding
41
+ - **`inject()` function** — not constructor injection
42
+ - **Functional guards/resolvers** — not class-based
43
+ - **`withComponentInputBinding()`** — for route params as signal inputs
44
+
45
+ ## Signals Architecture
46
+
47
+ Signals are the primary state primitive in modern Angular:
48
+
49
+ - `signal()` for mutable local state
50
+ - `computed()` for derived values (replaces most RxJS `combineLatest` + `map`)
51
+ - `effect()` for side effects (logging, analytics, sync) — not for state derivation
52
+ - `linkedSignal()` for derived mutable state (resettable computed)
53
+ - `toSignal()` / `toObservable()` for RxJS interop
54
+
55
+ ```typescript
56
+ @Component({
57
+ selector: 'app-user-card',
58
+ standalone: true,
59
+ changeDetection: ChangeDetectionStrategy.OnPush,
60
+ imports: [DatePipe],
61
+ template: `
62
+ @if (user(); as u) {
63
+ <h2>{{ u.name }}</h2>
64
+ <p>Joined {{ u.createdAt | date }}</p>
65
+ }
66
+ `,
67
+ })
68
+ export class UserCardComponent {
69
+ user = input.required<User>();
70
+ private router = inject(Router);
71
+
72
+ displayName = computed(() => this.user().name.toUpperCase());
73
+
74
+ navigate() {
75
+ this.router.navigate(['/users', this.user().id]);
76
+ }
77
+ }
78
+ ```
79
+
80
+ ## RxJS & Subscription Management
81
+
82
+ - Prefer signals over RxJS for component state — use RxJS for streams (HTTP, WebSocket, polling)
83
+ - `toSignal()` to convert observables into signals at the component level
84
+ - `takeUntilDestroyed()` with `inject(DestroyRef)` for manual subscriptions
85
+ - `async` pipe in templates when staying in Observable-land
86
+ - Never nest `.subscribe()` — use `switchMap`, `concatMap`, `exhaustMap`
87
+ - `exhaustMap` for form submissions (prevents double-submit)
88
+
89
+ ## Reactive Forms
90
+
91
+ Always use typed forms:
92
+
93
+ ```typescript
94
+ private fb = inject(NonNullableFormBuilder);
95
+
96
+ form = this.fb.group({
97
+ email: ['', [Validators.required, Validators.email]],
98
+ name: ['', Validators.required],
99
+ });
100
+ // form.value is { email: string; name: string }
101
+ ```
102
+
103
+ - `NonNullableFormBuilder` for reset-safe forms
104
+ - Typed `FormGroup` / `FormControl` — never `UntypedFormGroup`
105
+ - Custom validators as typed functions
106
+
107
+ ## Routing
108
+
109
+ - Lazy-load all route components: `loadComponent: () => import('./...')`
110
+ - Functional guards: `canActivate: [() => inject(AuthService).isAuthenticated()]`
111
+ - Route params via signal inputs (with `withComponentInputBinding()`) instead of `ActivatedRoute`
112
+ - `@defer` for heavy in-page content
113
+
114
+ ## NgRx Signal Store
115
+
116
+ For complex shared state (3+ components):
117
+
118
+ - `signalStore()` with `withState()`, `withComputed()`, `withMethods()`
119
+ - `patchState()` for immutable updates
120
+ - `rxMethod()` for async effects with RxJS
121
+ - Prefer local signals for component-scoped state
122
+
123
+ ## Decision Defaults
124
+
125
+ | Decision | Default | Deviate when |
126
+ |---|---|---|
127
+ | Component type | Standalone | Never for new code |
128
+ | Change detection | `OnPush` | Never |
129
+ | State primitive | `signal()` | Observable when streaming (WebSocket, polling) |
130
+ | DI style | `inject()` | Never for new code |
131
+ | Inputs/outputs | `input()` / `output()` | Existing decorator-based components |
132
+ | Control flow | `@if` / `@for` / `@switch` | Existing `*ngIf`/`*ngFor` components |
133
+ | Forms | Typed reactive | Template-driven only for trivial 1-2 field forms |
134
+ | State management | Local signals | Signal Store when shared across 3+ components |
135
+ | Route guards | Functional | Never for new code |
136
+
137
+ When the existing project uses older patterns, **match the project** for consistency in existing files but use modern patterns in new files.
138
+
139
+ ## What You Must NOT Do
140
+
141
+ - Refactor unrelated code or add unrequested features
142
+ - Reorganize project structure beyond what the task requires
143
+ - Update dependencies or config files unless the task requires it
144
+ - Change formatting/linting of untouched code
145
+ - Add comments explaining obvious code
146
+ - Create abstractions "for future use"
147
+
148
+ ## Self-Verification Checklist
149
+
150
+ Before delivering code, verify:
151
+ - [ ] All new components are standalone with `ChangeDetectionStrategy.OnPush`
152
+ - [ ] Signal-based inputs/outputs used in new components (not decorators)
153
+ - [ ] `inject()` used instead of constructor injection
154
+ - [ ] No raw `.subscribe()` without cleanup (`takeUntilDestroyed` or `async` pipe)
155
+ - [ ] Reactive forms are typed (no `UntypedFormGroup`)
156
+ - [ ] No nested subscribes — proper RxJS operator chains
157
+ - [ ] Route components lazy-loaded
158
+ - [ ] No `any` types — everything properly typed
159
+ - [ ] New control flow syntax used (`@if`, `@for` with `track`)
160
+ - [ ] Template logic extracted to component class or computed signals
161
+
162
+ # Persistent Agent Memory
163
+
164
+ Your `memory: project` setting gives you a persistent memory directory (under `.claude/agent-memory/grimoire.angular-coder/`). Contents persist across conversations.
165
+
166
+ Consult your memory files to build on previous experience. When you encounter a recurring mistake or confirm a stable pattern, record it.
167
+
168
+ Guidelines:
169
+ - `MEMORY.md` is always loaded into your system prompt — keep it under 200 lines
170
+ - Create separate topic files (e.g., `debugging.md`, `patterns.md`) for details and link from MEMORY.md
171
+ - Update or remove memories that turn out to be wrong or outdated
172
+ - Organize by topic, not chronologically
173
+
174
+ What to save:
175
+ - Stable patterns and conventions confirmed across multiple interactions
176
+ - Key architectural decisions, important file paths, and project structure
177
+ - User preferences for workflow, tools, and communication style
178
+ - Solutions to recurring problems and debugging insights
179
+
180
+ What NOT to save:
181
+ - Session-specific context (current task details, in-progress work)
182
+ - Information that might be incomplete — verify before writing
183
+ - Anything that duplicates existing CLAUDE.md instructions
184
+ - Speculative conclusions from reading a single file
185
+
186
+ **Update your agent memory** as you discover patterns in the user's codebase — component conventions, service patterns, store structure, routing configuration, and recurring style choices. This builds institutional knowledge across conversations.
187
+
188
+ Examples of what to record:
189
+ - Existing services and what they do (e.g., `AuthService` handles JWT refresh)
190
+ - Custom base components and their APIs (e.g., `BaseDialogComponent` expects a signal input)
191
+ - Store structure decisions (e.g., all stores use NgRx Signal Store with entity management)
192
+ - Routing patterns (e.g., all protected routes under `/app` with a functional guard)
193
+ - Styling conventions (e.g., project uses Tailwind with design token CSS variables)
@@ -2,6 +2,13 @@
2
2
  "name": "frontend-pack",
3
3
  "version": "1.0.0",
4
4
  "agents": [
5
+ {
6
+ "name": "grimoire.angular-coder",
7
+ "path": "agents/grimoire.angular-coder.md",
8
+ "description": "Use this agent when the user needs Angular code written, fixed, refactored, or debugged. This agent implements components, services, directives, pipes, guards, resolvers, and any other Angular artifact. It reads the codebase to understand conventions, makes implementation decisions, and delivers working code.",
9
+ "version": "1.0.0",
10
+ "file_patterns": ["*.component.ts", "*.service.ts", "*.directive.ts", "*.pipe.ts", "*.guard.ts", "*.resolver.ts", "*.module.ts"]
11
+ },
5
12
  {
6
13
  "name": "grimoire.vue3-coder",
7
14
  "path": "agents/grimoire.vue3-coder.md",
@@ -1,7 +1,6 @@
1
1
  ---
2
2
  name: grimoire.context-file-guide
3
3
  description: "Best practices for writing CLAUDE.md project context files. Use when creating, reviewing, or improving CLAUDE.md files for Claude Code projects."
4
- version: 1.0.0
5
4
  ---
6
5
 
7
6
  # CLAUDE.md Best Practices Guide
@@ -3,7 +3,6 @@ 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
- version: 1.0.0
7
6
  ---
8
7
 
9
8
  # README Guide
@@ -3,7 +3,6 @@ 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
4
  user-invokable: true
5
5
  disable-model-invocation: false
6
- version: 1.0.0
7
6
  ---
8
7
 
9
8
  # Skill Developer
@@ -1,7 +1,6 @@
1
1
  ---
2
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
- version: 1.0.0
5
4
  ---
6
5
 
7
6
  # Modern TypeScript
@@ -1,5 +0,0 @@
1
- /**
2
- * `grimoire enforce-agent` — interactive toggle for per-agent enforcement.
3
- */
4
- export declare function runEnforceAgent(projectDir: string): Promise<void>;
5
- //# sourceMappingURL=enforce-agent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enforce-agent.d.ts","sourceRoot":"","sources":["../../src/commands/enforce-agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHvE"}
@@ -1,94 +0,0 @@
1
- /**
2
- * `grimoire enforce-agent` — interactive toggle for per-agent enforcement.
3
- */
4
- import { existsSync, readdirSync } from 'fs';
5
- import { join, basename } from 'path';
6
- import * as clack from '@clack/prompts';
7
- import { readManifest, writeManifest, setEnforce, readAgentMeta, ensureEnforceHooks, removeEnforceHooks, } from '../enforce.js';
8
- export async function runEnforceAgent(projectDir) {
9
- // Load manifest
10
- let manifest;
11
- try {
12
- manifest = readManifest(projectDir);
13
- }
14
- catch {
15
- clack.log.error('No skills-manifest.json found. Run `grimoire add` first.');
16
- process.exit(1);
17
- }
18
- // Scan installed agents
19
- const agentsDir = join(projectDir, '.claude', 'agents');
20
- if (!existsSync(agentsDir)) {
21
- clack.log.error('No agents installed. Run `grimoire add` first.');
22
- process.exit(1);
23
- }
24
- // Build list of agents that have file_patterns in the manifest
25
- const agentFiles = readdirSync(agentsDir).filter((f) => f.endsWith('.md'));
26
- const enforceable = [];
27
- for (const file of agentFiles) {
28
- const agentPath = join(agentsDir, file);
29
- const fsName = basename(file, '.md');
30
- // Look up manifest entry by filesystem name or manifest name
31
- const manifestEntry = manifest.agents[fsName] ??
32
- Object.entries(manifest.agents).find(([key]) => key.endsWith(`.${fsName}`) || key === fsName)?.[1];
33
- const manifestName = Object.keys(manifest.agents).find((key) => key === fsName || key.endsWith(`.${fsName}`)) ?? fsName;
34
- if (!manifestEntry?.file_patterns?.length)
35
- continue;
36
- const meta = readAgentMeta(agentPath);
37
- enforceable.push({
38
- name: fsName,
39
- manifestName,
40
- description: meta.description || manifestName,
41
- currentlyEnforced: manifestEntry.enforce === true,
42
- });
43
- }
44
- if (enforceable.length === 0) {
45
- console.log('No enforceable agents found. Install a pack with file_patterns to enable enforcement.');
46
- return;
47
- }
48
- clack.intro('Agent Enforcement');
49
- const options = enforceable.map((a) => ({
50
- value: a.manifestName,
51
- label: a.manifestName,
52
- hint: a.description.length > 80 ? a.description.slice(0, 80) + '…' : a.description,
53
- }));
54
- const initialValues = enforceable
55
- .filter((a) => a.currentlyEnforced)
56
- .map((a) => a.manifestName);
57
- const selected = await clack.multiselect({
58
- message: 'Select agents Claude must delegate to:',
59
- options,
60
- initialValues,
61
- required: false,
62
- });
63
- if (clack.isCancel(selected)) {
64
- clack.cancel('Cancelled.');
65
- return;
66
- }
67
- const enabledNames = selected;
68
- const enabledSet = new Set(enabledNames);
69
- // Apply enforce flags
70
- for (const agent of enforceable) {
71
- try {
72
- setEnforce(manifest, agent.manifestName, enabledSet.has(agent.manifestName));
73
- }
74
- catch (err) {
75
- clack.log.warn(`Could not set enforcement for ${agent.manifestName}: ${err instanceof Error ? err.message : String(err)}`);
76
- }
77
- }
78
- writeManifest(projectDir, manifest);
79
- // Update hooks
80
- if (enabledNames.length > 0) {
81
- ensureEnforceHooks(projectDir, enabledNames);
82
- }
83
- else {
84
- removeEnforceHooks(projectDir);
85
- }
86
- const count = enabledNames.length;
87
- if (count > 0) {
88
- clack.outro(`Agent enforcement updated. ${count} agent(s) enforced.`);
89
- }
90
- else {
91
- clack.outro('Agent enforcement disabled.');
92
- }
93
- }
94
- //# sourceMappingURL=enforce-agent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"enforce-agent.js","sourceRoot":"","sources":["../../src/commands/enforce-agent.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts DELETED
@@ -1,5 +0,0 @@
1
- /** Reads `version` from YAML frontmatter. Returns undefined if absent/unreadable. */
2
- export declare function readFrontmatterVersion(filePath: string): string | undefined;
3
- /** Returns true if `available` semver is strictly newer than `installed`. */
4
- export declare function isNewer(available: string | undefined, installed: string | undefined): boolean;
5
- //# sourceMappingURL=version.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAW3E;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAU7F"}
package/dist/version.js DELETED
@@ -1,32 +0,0 @@
1
- import { readFileSync } from 'fs';
2
- /** Reads `version` from YAML frontmatter. Returns undefined if absent/unreadable. */
3
- export function readFrontmatterVersion(filePath) {
4
- let content;
5
- try {
6
- content = readFileSync(filePath, 'utf-8');
7
- }
8
- catch {
9
- return undefined;
10
- }
11
- const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
12
- if (!fm)
13
- return undefined;
14
- const m = fm[1]?.match(/^version:\s*(.+)$/m);
15
- return m?.[1]?.trim();
16
- }
17
- /** Returns true if `available` semver is strictly newer than `installed`. */
18
- export function isNewer(available, installed) {
19
- if (!available || !installed)
20
- return false;
21
- const parse = (v) => v.split('.').map((n) => parseInt(n, 10));
22
- const [a, b] = [parse(available), parse(installed)];
23
- for (let i = 0; i < Math.max(a.length, b.length); i++) {
24
- const diff = (a[i] ?? 0) - (b[i] ?? 0);
25
- if (diff > 0)
26
- return true;
27
- if (diff < 0)
28
- return false;
29
- }
30
- return false;
31
- }
32
- //# sourceMappingURL=version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAElC,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,SAA6B,EAAE,SAA6B;IAClF,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACtE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1B,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}