opencode-plugin-team-agreements 0.1.0 → 0.1.4

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/CHANGELOG.md ADDED
@@ -0,0 +1,32 @@
1
+ # Changelog
2
+
3
+ ## [0.1.4](https://github.com/jwilger/opencode-plugin-team-agreements/compare/opencode-plugin-team-agreements-v0.1.3...opencode-plugin-team-agreements-v0.1.4) (2026-01-23)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * **ci:** Configure npm trusted publishing correctly ([#11](https://github.com/jwilger/opencode-plugin-team-agreements/issues/11)) ([bbddb8a](https://github.com/jwilger/opencode-plugin-team-agreements/commit/bbddb8aac6a10afd917668dba3750cd5464f941b))
9
+
10
+ ## [0.1.3](https://github.com/jwilger/opencode-plugin-team-agreements/compare/opencode-plugin-team-agreements-v0.1.2...opencode-plugin-team-agreements-v0.1.3) (2026-01-23)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * **ci:** Remove registry-url to allow pure OIDC npm publishing ([#8](https://github.com/jwilger/opencode-plugin-team-agreements/issues/8)) ([5e0ec78](https://github.com/jwilger/opencode-plugin-team-agreements/commit/5e0ec78dbc4b92bf7e03089c83e81761b12870aa))
16
+ * **ci:** Use GitHub App for release-please to enable signed commits ([#10](https://github.com/jwilger/opencode-plugin-team-agreements/issues/10)) ([281200a](https://github.com/jwilger/opencode-plugin-team-agreements/commit/281200a90d694d4b72b819dced74b405f93bfff5))
17
+
18
+ ## [0.1.2](https://github.com/jwilger/opencode-plugin-team-agreements/compare/opencode-plugin-team-agreements-v0.1.1...opencode-plugin-team-agreements-v0.1.2) (2026-01-23)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * **ci:** Remove NPM_TOKEN to allow OIDC auth ([ef64c15](https://github.com/jwilger/opencode-plugin-team-agreements/commit/ef64c1561f43b76107b8285a2c922b45332ee635))
24
+ * **ci:** Use PAT for release-please to trigger CI on release PRs ([#6](https://github.com/jwilger/opencode-plugin-team-agreements/issues/6)) ([4800212](https://github.com/jwilger/opencode-plugin-team-agreements/commit/48002121148635f4221ea455dc9088f3d9daf01c))
25
+ * Test isolation and add lefthook pre-commit hooks ([#5](https://github.com/jwilger/opencode-plugin-team-agreements/issues/5)) ([543a641](https://github.com/jwilger/opencode-plugin-team-agreements/commit/543a641605e7542e0d95bea9fe870fb6ace3985e))
26
+
27
+ ## [0.1.1](https://github.com/jwilger/opencode-plugin-team-agreements/compare/opencode-plugin-team-agreements-v0.1.0...opencode-plugin-team-agreements-v0.1.1) (2026-01-23)
28
+
29
+
30
+ ### Features
31
+
32
+ * Offer to set up automatic enforcement for team agreements ([#2](https://github.com/jwilger/opencode-plugin-team-agreements/issues/2)) ([2af3d4e](https://github.com/jwilger/opencode-plugin-team-agreements/commit/2af3d4e147d0acf9df3fb6eda04c05ea5dba5b26))
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { type Plugin } from "@opencode-ai/plugin";
2
2
  declare const PLUGIN_REPO = "jwilger/opencode-plugin-team-agreements";
3
- declare const COMMAND_TEMPLATE = "You are helping establish or review team agreements for this project. Team agreements define how humans and LLM agents collaborate on the codebase.\n\nUser's request: $ARGUMENTS\n\n## Instructions\n\n1. First, check if team agreements already exist at `docs/TEAM_AGREEMENTS.md`\n\n2. If agreements exist, present the user with options:\n - **Review**: Display the current agreements\n - **Amend**: Modify a specific section \n - **Start Over**: Begin fresh (with confirmation)\n\n3. If no agreements exist (or starting over), guide the user through establishing agreements one topic at a time. Start with these core topics:\n\n### Core Topics\n\n#### a. Storage Location\nAsk where team agreements should be stored. Suggest defaults:\n- Main file: `docs/TEAM_AGREEMENTS.md`\n- Supporting details: `docs/team_agreements/*.md`\n\n#### b. Programming Languages\n- What programming language(s) will be used in this project?\n- What is each language used for? (e.g., TypeScript for frontend, Rust for backend)\n- Are there specific versions or language-specific style guides to follow?\n\n#### c. Code Quality Standards\n- What does \"great code\" look like for this team?\n- How should we prioritize: readability vs. performance vs. simplicity?\n- Are there required patterns or anti-patterns to follow/avoid?\n- What about error handling conventions?\n- Naming conventions for files, functions, variables, types?\n\n#### d. Commit Message Conventions\n- What format should commit messages follow? (Conventional Commits, custom, freeform)\n- Are there required elements? (ticket numbers, scope, breaking change indicators)\n- Any rules on length, tense, capitalization?\n- Should commits be atomic (one logical change per commit)?\n\n#### e. Integration Workflow\n- Trunk-based development or feature branches?\n- Pull request requirements? (reviews, approvals, CI checks)\n- Who can merge to main/trunk?\n- What CI checks must pass before integration?\n- Any branch naming conventions?\n\n#### f. Testing Requirements\n- What testing is required before code is considered \"done\"?\n- Are there coverage thresholds?\n- What types of tests? (unit, integration, e2e, property-based)\n- When should tests be written? (TDD, after implementation, etc.)\n\n#### g. Amendment Process\n- How can these agreements be changed?\n- Who has authority to propose/approve changes?\n- What's the review/approval process for amendments?\n- How should changes be communicated to the team?\n\n4. For each topic:\n - Ask ONE question at a time\n - Discuss trade-offs when relevant\n - Confirm understanding before moving on\n - Record the team's decision clearly\n\n5. **After the core topics**, ask:\n \"Are there any additional topics you'd like to establish agreements for?\"\n \n Suggest potential additional topics if helpful:\n - **Architecture decisions** - How to document and track ADRs\n - **Dependency management** - How to evaluate and approve new dependencies\n - **Documentation standards** - What must be documented, where, in what format\n - **LLM autonomy boundaries** - What can LLMs do without asking? What requires human approval?\n - **Session handoff protocols** - How to summarize work for the next session/agent\n - **Code review process** - What reviewers should look for, turnaround expectations\n - **Planning and work breakdown** - How to break down work into tasks\n - **Information sharing** - How to share context across sessions and team members\n \n Continue asking about each additional topic the user wants to cover.\n \n After discussing additional topics, ask: \"Would you like to suggest any of these additional topics\n (or others you thought of) to be included as standard topics in the team-agreements plugin?\n I can file a GitHub issue for you if you'd like.\"\n \n If the user wants to suggest a topic, use the `suggest_team_agreement_topic` tool to file an issue.\n\n6. After ALL topics (core + additional) are covered:\n - Generate `docs/TEAM_AGREEMENTS.md` with all agreements organized by topic\n - If any topic needs detailed documentation, create supporting files in `docs/team_agreements/`\n - Update `opencode.json` to include `docs/TEAM_AGREEMENTS.md` in the `instructions` array\n - Summarize what was established\n\n## Output Format\n\nWhen generating the TEAM_AGREEMENTS.md file, use this structure:\n\n```markdown\n# Team Agreements\n\nThis document defines how our team (humans and LLM agents) collaborates on this codebase.\n\n## Table of Contents\n[Generate based on topics covered]\n\n## 1. Storage Location\n[Agreements about where documentation lives]\n\n## 2. Programming Languages\n[Agreements about languages and their usage]\n\n## 3. Code Quality Standards\n[Agreements about what makes good code]\n\n## 4. Commit Message Conventions\n[Agreements about commit message format]\n\n## 5. Integration Workflow\n[Agreements about how code gets integrated]\n\n## 6. Testing Requirements\n[Agreements about testing]\n\n## 7. Amendment Process\n[Agreements about changing these agreements]\n\n## Additional Topics\n[Any additional topics the team added]\n\n---\n*Last updated: [date]*\n*To amend these agreements, [process from amendment section]*\n```\n\n## Important\n\n- Be conversational and collaborative\n- ONE question at a time - don't overwhelm\n- Respect the user's expertise and preferences\n- If the user provides a specific request in their message, address that first\n- The core topics are a starting point, not an exhaustive list\n- Capture the \"why\" behind decisions, not just the \"what\"";
3
+ declare const COMMAND_TEMPLATE = "You are helping establish or review team agreements for this project. Team agreements define how humans and LLM agents collaborate on the codebase.\n\nUser's request: $ARGUMENTS\n\n## Instructions\n\n1. First, check if team agreements already exist at `docs/TEAM_AGREEMENTS.md`\n\n2. If agreements exist, present the user with options:\n - **Review**: Display the current agreements\n - **Amend**: Modify a specific section \n - **Start Over**: Begin fresh (with confirmation)\n\n3. If no agreements exist (or starting over), guide the user through establishing agreements one topic at a time. Start with these core topics:\n\n### Core Topics\n\n#### a. Storage Location\nAsk where team agreements should be stored. Suggest defaults:\n- Main file: `docs/TEAM_AGREEMENTS.md`\n- Supporting details: `docs/team_agreements/*.md`\n\n#### b. Programming Languages\n- What programming language(s) will be used in this project?\n- What is each language used for? (e.g., TypeScript for frontend, Rust for backend)\n- Are there specific versions or language-specific style guides to follow?\n\n#### c. Code Quality Standards\n- What does \"great code\" look like for this team?\n- How should we prioritize: readability vs. performance vs. simplicity?\n- Are there required patterns or anti-patterns to follow/avoid?\n- What about error handling conventions?\n- Naming conventions for files, functions, variables, types?\n\n#### d. Commit Message Conventions\n- What format should commit messages follow? (Conventional Commits, custom, freeform)\n- Are there required elements? (ticket numbers, scope, breaking change indicators)\n- Any rules on length, tense, capitalization?\n- Should commits be atomic (one logical change per commit)?\n\n#### e. Integration Workflow\n- Trunk-based development or feature branches?\n- Pull request requirements? (reviews, approvals, CI checks)\n- Who can merge to main/trunk?\n- What CI checks must pass before integration?\n- Any branch naming conventions?\n\n#### f. Testing Requirements\n- What testing is required before code is considered \"done\"?\n- Are there coverage thresholds?\n- What types of tests? (unit, integration, e2e, property-based)\n- When should tests be written? (TDD, after implementation, etc.)\n\n#### g. Amendment Process\n- How can these agreements be changed?\n- Who has authority to propose/approve changes?\n- What's the review/approval process for amendments?\n- How should changes be communicated to the team?\n\n4. For each topic:\n - Ask ONE question at a time\n - Discuss trade-offs when relevant\n - Confirm understanding before moving on\n - Record the team's decision clearly\n\n5. **After the core topics**, ask:\n \"Are there any additional topics you'd like to establish agreements for?\"\n \n Suggest potential additional topics if helpful:\n - **Architecture decisions** - How to document and track ADRs\n - **Dependency management** - How to evaluate and approve new dependencies\n - **Documentation standards** - What must be documented, where, in what format\n - **LLM autonomy boundaries** - What can LLMs do without asking? What requires human approval?\n - **Session handoff protocols** - How to summarize work for the next session/agent\n - **Code review process** - What reviewers should look for, turnaround expectations\n - **Planning and work breakdown** - How to break down work into tasks\n - **Information sharing** - How to share context across sessions and team members\n \n Continue asking about each additional topic the user wants to cover.\n \n After discussing additional topics, ask: \"Would you like to suggest any of these additional topics\n (or others you thought of) to be included as standard topics in the team-agreements plugin?\n I can file a GitHub issue for you if you'd like.\"\n \n If the user wants to suggest a topic, use the `suggest_team_agreement_topic` tool to file an issue.\n\n6. After ALL topics (core + additional) are covered:\n - Generate `docs/TEAM_AGREEMENTS.md` with all agreements organized by topic\n - If any topic needs detailed documentation, create supporting files in `docs/team_agreements/`\n - Update `opencode.json` to include `docs/TEAM_AGREEMENTS.md` in the `instructions` array\n - Summarize what was established\n\n7. **After generating the agreements**, use the `detect_enforcement_mechanisms` tool to check what enforcement is already in place, then offer to set up automatic enforcement for agreements that can be enforced programmatically.\n\n For each agreement that CAN be automatically enforced, ask the user if they'd like help setting it up. Here are the enforcement mechanisms to consider:\n\n ### Enforcement Mechanisms\n\n #### OpenCode Plugin Hooks\n Ideal for: LLM behavior guidance, context injection, custom commands\n - Can add validation in `tool.execute.before` hooks\n - Can transform messages via `experimental.chat.messages.transform`\n - Can inject reminders in `experimental.session.compacting`\n\n #### Pre-commit Hooks (husky, lefthook, pre-commit)\n Ideal for: Commit message validation, code formatting, linting, test execution\n - **Commit messages**: Use commitlint with husky for Conventional Commits or custom formats\n - **Code formatting**: Run prettier/eslint/biome on staged files\n - **Tests**: Run affected tests before allowing commits\n - **File restrictions**: Prevent commits to certain paths\n\n #### CI Workflows (GitHub Actions, etc.)\n Ideal for: Test coverage, build verification, security scanning, PR checks\n - **Testing requirements**: Enforce coverage thresholds, run full test suites\n - **Code quality**: Run linters, type checking, security audits\n - **Build verification**: Ensure the project builds successfully\n - **PR requirements**: Block merging until checks pass\n\n #### GitHub Rulesets / Branch Protection\n Ideal for: PR requirements, review policies, merge restrictions\n - **Required reviews**: Set minimum approvals before merge\n - **Required checks**: Specify which CI checks must pass\n - **Branch restrictions**: Control who can push to main/protected branches\n - **Commit signing**: Require verified commits\n\n #### Linting Rules (.eslintrc, biome.json, etc.)\n Ideal for: Code style, naming conventions, import organization, complexity limits\n - **Naming conventions**: Enforce variable/function/file naming patterns\n - **Code patterns**: Require/forbid certain coding patterns\n - **Import organization**: Enforce import ordering and restrictions\n\n ### Mapping Agreements to Enforcement\n\n | Agreement Topic | Possible Enforcement |\n |-----------------|---------------------|\n | Commit message conventions | commitlint + husky, GitHub Actions check |\n | Code quality standards | ESLint/Biome rules, pre-commit hooks, CI checks |\n | Testing requirements | CI workflow with coverage thresholds, pre-commit test runs |\n | Integration workflow | GitHub rulesets, required status checks, PR templates |\n | Programming language standards | Language-specific linters, compiler flags |\n\n ### When Offering Enforcement\n\n - Only offer enforcement for agreements that can actually be automated\n - Explain what the enforcement will do and how it works\n - Get explicit confirmation before making changes\n - If enforcement tooling already exists (detected by the tool), offer to update/extend it rather than replace it\n - Document what enforcement was set up in the TEAM_AGREEMENTS.md file\n\n## Output Format\n\nWhen generating the TEAM_AGREEMENTS.md file, use this structure:\n\n```markdown\n# Team Agreements\n\nThis document defines how our team (humans and LLM agents) collaborates on this codebase.\n\n## Table of Contents\n[Generate based on topics covered]\n\n## 1. Storage Location\n[Agreements about where documentation lives]\n\n## 2. Programming Languages\n[Agreements about languages and their usage]\n\n## 3. Code Quality Standards\n[Agreements about what makes good code]\n\n## 4. Commit Message Conventions\n[Agreements about commit message format]\n\n## 5. Integration Workflow\n[Agreements about how code gets integrated]\n\n## 6. Testing Requirements\n[Agreements about testing]\n\n## 7. Amendment Process\n[Agreements about changing these agreements]\n\n## Additional Topics\n[Any additional topics the team added]\n\n---\n*Last updated: [date]*\n*To amend these agreements, [process from amendment section]*\n```\n\n## Important\n\n- Be conversational and collaborative\n- ONE question at a time - don't overwhelm\n- Respect the user's expertise and preferences\n- If the user provides a specific request in their message, address that first\n- The core topics are a starting point, not an exhaustive list\n- Capture the \"why\" behind decisions, not just the \"what\"";
4
4
  /**
5
5
  * Check if a file exists at the given path.
6
6
  */
@@ -27,6 +27,24 @@ export declare function buildTopicIssueBody(args: {
27
27
  suggested_questions: string[];
28
28
  example_agreement?: string;
29
29
  }): string;
30
+ /**
31
+ * Enforcement mechanism detection result.
32
+ */
33
+ export interface EnforcementMechanism {
34
+ type: string;
35
+ name: string;
36
+ detected: boolean;
37
+ configFile?: string;
38
+ notes?: string;
39
+ }
40
+ /**
41
+ * Detect existing enforcement mechanisms in the project.
42
+ */
43
+ export declare function detectEnforcementMechanisms(directory: string): Promise<EnforcementMechanism[]>;
44
+ /**
45
+ * Format enforcement detection results as markdown.
46
+ */
47
+ export declare function formatEnforcementResults(mechanisms: EnforcementMechanism[]): string;
30
48
  export { COMMAND_TEMPLATE, PLUGIN_REPO };
31
49
  /**
32
50
  * TeamAgreementsPlugin - Helps teams establish and maintain shared agreements
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,qBAAqB,CAAA;AAQvD,QAAA,MAAM,WAAW,4CAA4C,CAAA;AAE7D,QAAA,MAAM,gBAAgB,0+KA4IoC,CAAA;AAE1D;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAOtD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASlF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,GAAG,MAAM,CAiBT;AAGD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAA;AAExC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAiGlC,CAAA;AAED,eAAe,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,qBAAqB,CAAA;AAQvD,QAAA,MAAM,WAAW,4CAA4C,CAAA;AAE7D,QAAA,MAAM,gBAAgB,4pRAqMoC,CAAA;AAE1D;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAOtD;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CASlF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,GAAG,MAAM,CAiBT;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA2LjC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAkEnF;AAGD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,CAAA;AAExC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAmHlC,CAAA;AAED,eAAe,oBAAoB,CAAA"}
package/dist/index.js CHANGED
@@ -97,6 +97,63 @@ Ask where team agreements should be stored. Suggest defaults:
97
97
  - Update \`opencode.json\` to include \`docs/TEAM_AGREEMENTS.md\` in the \`instructions\` array
98
98
  - Summarize what was established
99
99
 
100
+ 7. **After generating the agreements**, use the \`detect_enforcement_mechanisms\` tool to check what enforcement is already in place, then offer to set up automatic enforcement for agreements that can be enforced programmatically.
101
+
102
+ For each agreement that CAN be automatically enforced, ask the user if they'd like help setting it up. Here are the enforcement mechanisms to consider:
103
+
104
+ ### Enforcement Mechanisms
105
+
106
+ #### OpenCode Plugin Hooks
107
+ Ideal for: LLM behavior guidance, context injection, custom commands
108
+ - Can add validation in \`tool.execute.before\` hooks
109
+ - Can transform messages via \`experimental.chat.messages.transform\`
110
+ - Can inject reminders in \`experimental.session.compacting\`
111
+
112
+ #### Pre-commit Hooks (husky, lefthook, pre-commit)
113
+ Ideal for: Commit message validation, code formatting, linting, test execution
114
+ - **Commit messages**: Use commitlint with husky for Conventional Commits or custom formats
115
+ - **Code formatting**: Run prettier/eslint/biome on staged files
116
+ - **Tests**: Run affected tests before allowing commits
117
+ - **File restrictions**: Prevent commits to certain paths
118
+
119
+ #### CI Workflows (GitHub Actions, etc.)
120
+ Ideal for: Test coverage, build verification, security scanning, PR checks
121
+ - **Testing requirements**: Enforce coverage thresholds, run full test suites
122
+ - **Code quality**: Run linters, type checking, security audits
123
+ - **Build verification**: Ensure the project builds successfully
124
+ - **PR requirements**: Block merging until checks pass
125
+
126
+ #### GitHub Rulesets / Branch Protection
127
+ Ideal for: PR requirements, review policies, merge restrictions
128
+ - **Required reviews**: Set minimum approvals before merge
129
+ - **Required checks**: Specify which CI checks must pass
130
+ - **Branch restrictions**: Control who can push to main/protected branches
131
+ - **Commit signing**: Require verified commits
132
+
133
+ #### Linting Rules (.eslintrc, biome.json, etc.)
134
+ Ideal for: Code style, naming conventions, import organization, complexity limits
135
+ - **Naming conventions**: Enforce variable/function/file naming patterns
136
+ - **Code patterns**: Require/forbid certain coding patterns
137
+ - **Import organization**: Enforce import ordering and restrictions
138
+
139
+ ### Mapping Agreements to Enforcement
140
+
141
+ | Agreement Topic | Possible Enforcement |
142
+ |-----------------|---------------------|
143
+ | Commit message conventions | commitlint + husky, GitHub Actions check |
144
+ | Code quality standards | ESLint/Biome rules, pre-commit hooks, CI checks |
145
+ | Testing requirements | CI workflow with coverage thresholds, pre-commit test runs |
146
+ | Integration workflow | GitHub rulesets, required status checks, PR templates |
147
+ | Programming language standards | Language-specific linters, compiler flags |
148
+
149
+ ### When Offering Enforcement
150
+
151
+ - Only offer enforcement for agreements that can actually be automated
152
+ - Explain what the enforcement will do and how it works
153
+ - Get explicit confirmation before making changes
154
+ - If enforcement tooling already exists (detected by the tool), offer to update/extend it rather than replace it
155
+ - Document what enforcement was set up in the TEAM_AGREEMENTS.md file
156
+
100
157
  ## Output Format
101
158
 
102
159
  When generating the TEAM_AGREEMENTS.md file, use this structure:
@@ -210,6 +267,243 @@ ${args.example_agreement || "_No example provided_"}
210
267
  ## Additional Context
211
268
  _This issue was automatically created via the team-agreements plugin._`;
212
269
  }
270
+ /**
271
+ * Detect existing enforcement mechanisms in the project.
272
+ */
273
+ export async function detectEnforcementMechanisms(directory) {
274
+ const mechanisms = [];
275
+ // Pre-commit hooks
276
+ const huskyPath = join(directory, ".husky");
277
+ const lefthookPath = join(directory, "lefthook.yml");
278
+ const lefthookAltPath = join(directory, ".lefthook.yml");
279
+ const preCommitPath = join(directory, ".pre-commit-config.yaml");
280
+ if (await fileExists(huskyPath)) {
281
+ mechanisms.push({
282
+ type: "pre-commit",
283
+ name: "husky",
284
+ detected: true,
285
+ configFile: ".husky/",
286
+ notes: "Git hooks manager for Node.js projects",
287
+ });
288
+ }
289
+ if (await fileExists(lefthookPath)) {
290
+ mechanisms.push({
291
+ type: "pre-commit",
292
+ name: "lefthook",
293
+ detected: true,
294
+ configFile: "lefthook.yml",
295
+ notes: "Fast, cross-platform git hooks manager",
296
+ });
297
+ }
298
+ else if (await fileExists(lefthookAltPath)) {
299
+ mechanisms.push({
300
+ type: "pre-commit",
301
+ name: "lefthook",
302
+ detected: true,
303
+ configFile: ".lefthook.yml",
304
+ notes: "Fast, cross-platform git hooks manager",
305
+ });
306
+ }
307
+ if (await fileExists(preCommitPath)) {
308
+ mechanisms.push({
309
+ type: "pre-commit",
310
+ name: "pre-commit",
311
+ detected: true,
312
+ configFile: ".pre-commit-config.yaml",
313
+ notes: "Python-based pre-commit framework",
314
+ });
315
+ }
316
+ // Commit message validation
317
+ const commitlintPath = join(directory, "commitlint.config.js");
318
+ const commitlintCjsPath = join(directory, "commitlint.config.cjs");
319
+ const commitlintJsonPath = join(directory, ".commitlintrc.json");
320
+ if ((await fileExists(commitlintPath)) ||
321
+ (await fileExists(commitlintCjsPath)) ||
322
+ (await fileExists(commitlintJsonPath))) {
323
+ mechanisms.push({
324
+ type: "commit-validation",
325
+ name: "commitlint",
326
+ detected: true,
327
+ configFile: (await fileExists(commitlintPath))
328
+ ? "commitlint.config.js"
329
+ : (await fileExists(commitlintCjsPath))
330
+ ? "commitlint.config.cjs"
331
+ : ".commitlintrc.json",
332
+ notes: "Lint commit messages against conventional commit format",
333
+ });
334
+ }
335
+ // Linters
336
+ const eslintPath = join(directory, ".eslintrc.json");
337
+ const eslintJsPath = join(directory, "eslint.config.js");
338
+ const eslintMjsPath = join(directory, "eslint.config.mjs");
339
+ const biomePath = join(directory, "biome.json");
340
+ const biomeJsoncPath = join(directory, "biome.jsonc");
341
+ if ((await fileExists(eslintPath)) ||
342
+ (await fileExists(eslintJsPath)) ||
343
+ (await fileExists(eslintMjsPath))) {
344
+ mechanisms.push({
345
+ type: "linter",
346
+ name: "eslint",
347
+ detected: true,
348
+ configFile: (await fileExists(eslintPath))
349
+ ? ".eslintrc.json"
350
+ : (await fileExists(eslintJsPath))
351
+ ? "eslint.config.js"
352
+ : "eslint.config.mjs",
353
+ notes: "JavaScript/TypeScript linter",
354
+ });
355
+ }
356
+ if ((await fileExists(biomePath)) || (await fileExists(biomeJsoncPath))) {
357
+ mechanisms.push({
358
+ type: "linter",
359
+ name: "biome",
360
+ detected: true,
361
+ configFile: (await fileExists(biomePath)) ? "biome.json" : "biome.jsonc",
362
+ notes: "Fast formatter and linter for JS/TS/JSON",
363
+ });
364
+ }
365
+ // CI Workflows
366
+ const githubWorkflowsPath = join(directory, ".github", "workflows");
367
+ if (await fileExists(githubWorkflowsPath)) {
368
+ mechanisms.push({
369
+ type: "ci",
370
+ name: "github-actions",
371
+ detected: true,
372
+ configFile: ".github/workflows/",
373
+ notes: "GitHub Actions CI/CD workflows",
374
+ });
375
+ }
376
+ const gitlabCiPath = join(directory, ".gitlab-ci.yml");
377
+ if (await fileExists(gitlabCiPath)) {
378
+ mechanisms.push({
379
+ type: "ci",
380
+ name: "gitlab-ci",
381
+ detected: true,
382
+ configFile: ".gitlab-ci.yml",
383
+ notes: "GitLab CI/CD pipeline",
384
+ });
385
+ }
386
+ const circleCiPath = join(directory, ".circleci", "config.yml");
387
+ if (await fileExists(circleCiPath)) {
388
+ mechanisms.push({
389
+ type: "ci",
390
+ name: "circleci",
391
+ detected: true,
392
+ configFile: ".circleci/config.yml",
393
+ notes: "CircleCI pipeline",
394
+ });
395
+ }
396
+ // PR Templates
397
+ const prTemplatePath = join(directory, ".github", "pull_request_template.md");
398
+ const prTemplateAltPath = join(directory, ".github", "PULL_REQUEST_TEMPLATE.md");
399
+ if ((await fileExists(prTemplatePath)) || (await fileExists(prTemplateAltPath))) {
400
+ mechanisms.push({
401
+ type: "pr-template",
402
+ name: "github-pr-template",
403
+ detected: true,
404
+ configFile: (await fileExists(prTemplatePath))
405
+ ? ".github/pull_request_template.md"
406
+ : ".github/PULL_REQUEST_TEMPLATE.md",
407
+ notes: "GitHub Pull Request template",
408
+ });
409
+ }
410
+ // OpenCode configuration
411
+ const opencodePath = join(directory, "opencode.json");
412
+ if (await fileExists(opencodePath)) {
413
+ mechanisms.push({
414
+ type: "opencode",
415
+ name: "opencode-config",
416
+ detected: true,
417
+ configFile: "opencode.json",
418
+ notes: "OpenCode configuration with hooks and plugins",
419
+ });
420
+ }
421
+ // Formatters
422
+ const prettierPath = join(directory, ".prettierrc");
423
+ const prettierJsonPath = join(directory, ".prettierrc.json");
424
+ const prettierJsPath = join(directory, "prettier.config.js");
425
+ if ((await fileExists(prettierPath)) ||
426
+ (await fileExists(prettierJsonPath)) ||
427
+ (await fileExists(prettierJsPath))) {
428
+ mechanisms.push({
429
+ type: "formatter",
430
+ name: "prettier",
431
+ detected: true,
432
+ configFile: (await fileExists(prettierPath))
433
+ ? ".prettierrc"
434
+ : (await fileExists(prettierJsonPath))
435
+ ? ".prettierrc.json"
436
+ : "prettier.config.js",
437
+ notes: "Code formatter for JS/TS/CSS/HTML/JSON/MD",
438
+ });
439
+ }
440
+ return mechanisms;
441
+ }
442
+ /**
443
+ * Format enforcement detection results as markdown.
444
+ */
445
+ export function formatEnforcementResults(mechanisms) {
446
+ if (mechanisms.length === 0) {
447
+ return `## Detected Enforcement Mechanisms
448
+
449
+ No existing enforcement mechanisms detected. This is a great opportunity to set up automation for your team agreements!
450
+
451
+ ### Available Options
452
+
453
+ You can set up any of the following:
454
+
455
+ **Pre-commit Hooks**
456
+ - husky (Node.js projects)
457
+ - lefthook (cross-platform, fast)
458
+ - pre-commit (Python-based, language-agnostic)
459
+
460
+ **Commit Message Validation**
461
+ - commitlint (conventional commits)
462
+
463
+ **Linting/Formatting**
464
+ - ESLint (JavaScript/TypeScript)
465
+ - Biome (JS/TS/JSON, fast)
466
+ - Prettier (formatting)
467
+
468
+ **CI/CD**
469
+ - GitHub Actions
470
+ - GitLab CI
471
+ - CircleCI
472
+
473
+ **GitHub Features**
474
+ - Pull Request templates
475
+ - Branch protection rulesets`;
476
+ }
477
+ const byType = {};
478
+ for (const m of mechanisms) {
479
+ if (!byType[m.type])
480
+ byType[m.type] = [];
481
+ byType[m.type].push(m);
482
+ }
483
+ let result = `## Detected Enforcement Mechanisms
484
+
485
+ The following enforcement mechanisms are already in place:\n\n`;
486
+ const typeLabels = {
487
+ "pre-commit": "Pre-commit Hooks",
488
+ "commit-validation": "Commit Message Validation",
489
+ linter: "Linters",
490
+ ci: "CI/CD Pipelines",
491
+ "pr-template": "PR Templates",
492
+ opencode: "OpenCode Configuration",
493
+ formatter: "Formatters",
494
+ };
495
+ for (const [type, mechs] of Object.entries(byType)) {
496
+ result += `### ${typeLabels[type] || type}\n\n`;
497
+ for (const m of mechs) {
498
+ result += `- **${m.name}** (\`${m.configFile}\`): ${m.notes}\n`;
499
+ }
500
+ result += "\n";
501
+ }
502
+ result += `### Recommendations
503
+
504
+ Based on what's already set up, consider extending or integrating with these existing tools rather than adding new ones.`;
505
+ return result;
506
+ }
213
507
  // Export constants for testing
214
508
  export { COMMAND_TEMPLATE, PLUGIN_REPO };
215
509
  /**
@@ -245,9 +539,25 @@ export const TeamAgreementsPlugin = async (ctx) => {
245
539
  }
246
540
  },
247
541
  /**
248
- * Custom tool to suggest a topic for the team-agreements plugin
542
+ * Tools for team agreements management
249
543
  */
250
544
  tool: {
545
+ /**
546
+ * Detect existing enforcement mechanisms in the project
547
+ */
548
+ detect_enforcement_mechanisms: tool({
549
+ description: "Detect existing enforcement mechanisms in the project (pre-commit hooks, CI workflows, " +
550
+ "linters, formatters, etc.). Use this before offering to set up enforcement for team agreements " +
551
+ "to understand what's already in place and avoid duplicating or conflicting with existing tooling.",
552
+ args: {},
553
+ async execute() {
554
+ const mechanisms = await detectEnforcementMechanisms(directory);
555
+ return formatEnforcementResults(mechanisms);
556
+ },
557
+ }),
558
+ /**
559
+ * Suggest a new topic for the team-agreements plugin
560
+ */
251
561
  suggest_team_agreement_topic: tool({
252
562
  description: "Suggest a new topic to be added to the team-agreements plugin. " +
253
563
  "This will file a GitHub issue on the plugin repository. " +
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,11 @@ import { describe, it, expect, beforeEach, afterEach } from "vitest";
2
2
  import { mkdir, writeFile, rm } from "fs/promises";
3
3
  import { join } from "path";
4
4
  import { tmpdir } from "os";
5
- import { fileExists, loadTeamAgreements, formatQuestionsAsMarkdown, buildTopicIssueBody, COMMAND_TEMPLATE, PLUGIN_REPO, TeamAgreementsPlugin, } from "./index.js";
5
+ import { fileExists, loadTeamAgreements, formatQuestionsAsMarkdown, buildTopicIssueBody, detectEnforcementMechanisms, formatEnforcementResults, COMMAND_TEMPLATE, PLUGIN_REPO, TeamAgreementsPlugin, } from "./index.js";
6
6
  describe("fileExists", () => {
7
- const testDir = join(tmpdir(), "team-agreements-test-" + Date.now());
7
+ let testDir;
8
8
  beforeEach(async () => {
9
+ testDir = join(tmpdir(), "team-agreements-test-" + Date.now() + "-" + Math.random().toString(36).slice(2));
9
10
  await mkdir(testDir, { recursive: true });
10
11
  });
11
12
  afterEach(async () => {
@@ -25,8 +26,9 @@ describe("fileExists", () => {
25
26
  });
26
27
  });
27
28
  describe("loadTeamAgreements", () => {
28
- const testDir = join(tmpdir(), "team-agreements-test-" + Date.now());
29
+ let testDir;
29
30
  beforeEach(async () => {
31
+ testDir = join(tmpdir(), "team-agreements-test-" + Date.now() + "-" + Math.random().toString(36).slice(2));
30
32
  await mkdir(join(testDir, "docs"), { recursive: true });
31
33
  });
32
34
  afterEach(async () => {
@@ -118,6 +120,154 @@ describe("COMMAND_TEMPLATE", () => {
118
120
  it("mentions the suggestion tool", () => {
119
121
  expect(COMMAND_TEMPLATE).toContain("suggest_team_agreement_topic");
120
122
  });
123
+ it("contains enforcement section", () => {
124
+ expect(COMMAND_TEMPLATE).toContain("detect_enforcement_mechanisms");
125
+ expect(COMMAND_TEMPLATE).toContain("Enforcement Mechanisms");
126
+ expect(COMMAND_TEMPLATE).toContain("Pre-commit Hooks");
127
+ expect(COMMAND_TEMPLATE).toContain("CI Workflows");
128
+ expect(COMMAND_TEMPLATE).toContain("GitHub Rulesets");
129
+ expect(COMMAND_TEMPLATE).toContain("OpenCode Plugin Hooks");
130
+ });
131
+ });
132
+ describe("detectEnforcementMechanisms", () => {
133
+ let testDir;
134
+ beforeEach(async () => {
135
+ testDir = join(tmpdir(), "enforcement-test-" + Date.now() + "-" + Math.random().toString(36).slice(2));
136
+ await mkdir(testDir, { recursive: true });
137
+ });
138
+ afterEach(async () => {
139
+ await rm(testDir, { recursive: true, force: true });
140
+ });
141
+ it("returns empty array for project with no enforcement", async () => {
142
+ const result = await detectEnforcementMechanisms(testDir);
143
+ expect(result).toEqual([]);
144
+ });
145
+ it("detects husky pre-commit hooks", async () => {
146
+ await mkdir(join(testDir, ".husky"), { recursive: true });
147
+ const result = await detectEnforcementMechanisms(testDir);
148
+ expect(result).toContainEqual(expect.objectContaining({
149
+ type: "pre-commit",
150
+ name: "husky",
151
+ detected: true,
152
+ }));
153
+ });
154
+ it("detects lefthook", async () => {
155
+ await writeFile(join(testDir, "lefthook.yml"), "pre-commit:\n commands: []");
156
+ const result = await detectEnforcementMechanisms(testDir);
157
+ expect(result).toContainEqual(expect.objectContaining({
158
+ type: "pre-commit",
159
+ name: "lefthook",
160
+ detected: true,
161
+ }));
162
+ });
163
+ it("detects commitlint", async () => {
164
+ await writeFile(join(testDir, "commitlint.config.js"), "module.exports = { extends: ['@commitlint/config-conventional'] }");
165
+ const result = await detectEnforcementMechanisms(testDir);
166
+ expect(result).toContainEqual(expect.objectContaining({
167
+ type: "commit-validation",
168
+ name: "commitlint",
169
+ detected: true,
170
+ }));
171
+ });
172
+ it("detects eslint", async () => {
173
+ await writeFile(join(testDir, ".eslintrc.json"), '{ "extends": "eslint:recommended" }');
174
+ const result = await detectEnforcementMechanisms(testDir);
175
+ expect(result).toContainEqual(expect.objectContaining({
176
+ type: "linter",
177
+ name: "eslint",
178
+ detected: true,
179
+ }));
180
+ });
181
+ it("detects biome", async () => {
182
+ await writeFile(join(testDir, "biome.json"), '{ "formatter": { "enabled": true } }');
183
+ const result = await detectEnforcementMechanisms(testDir);
184
+ expect(result).toContainEqual(expect.objectContaining({
185
+ type: "linter",
186
+ name: "biome",
187
+ detected: true,
188
+ }));
189
+ });
190
+ it("detects GitHub Actions", async () => {
191
+ await mkdir(join(testDir, ".github", "workflows"), { recursive: true });
192
+ const result = await detectEnforcementMechanisms(testDir);
193
+ expect(result).toContainEqual(expect.objectContaining({
194
+ type: "ci",
195
+ name: "github-actions",
196
+ detected: true,
197
+ }));
198
+ });
199
+ it("detects GitHub PR templates", async () => {
200
+ await mkdir(join(testDir, ".github"), { recursive: true });
201
+ await writeFile(join(testDir, ".github", "pull_request_template.md"), "## Description");
202
+ const result = await detectEnforcementMechanisms(testDir);
203
+ expect(result).toContainEqual(expect.objectContaining({
204
+ type: "pr-template",
205
+ name: "github-pr-template",
206
+ detected: true,
207
+ }));
208
+ });
209
+ it("detects opencode.json", async () => {
210
+ await writeFile(join(testDir, "opencode.json"), '{ "instructions": [] }');
211
+ const result = await detectEnforcementMechanisms(testDir);
212
+ expect(result).toContainEqual(expect.objectContaining({
213
+ type: "opencode",
214
+ name: "opencode-config",
215
+ detected: true,
216
+ }));
217
+ });
218
+ it("detects prettier", async () => {
219
+ await writeFile(join(testDir, ".prettierrc"), '{ "semi": true }');
220
+ const result = await detectEnforcementMechanisms(testDir);
221
+ expect(result).toContainEqual(expect.objectContaining({
222
+ type: "formatter",
223
+ name: "prettier",
224
+ detected: true,
225
+ }));
226
+ });
227
+ it("detects multiple mechanisms", async () => {
228
+ await mkdir(join(testDir, ".husky"), { recursive: true });
229
+ await mkdir(join(testDir, ".github", "workflows"), { recursive: true });
230
+ await writeFile(join(testDir, "biome.json"), "{}");
231
+ const result = await detectEnforcementMechanisms(testDir);
232
+ expect(result.length).toBeGreaterThanOrEqual(3);
233
+ expect(result.map((m) => m.name)).toContain("husky");
234
+ expect(result.map((m) => m.name)).toContain("github-actions");
235
+ expect(result.map((m) => m.name)).toContain("biome");
236
+ });
237
+ });
238
+ describe("formatEnforcementResults", () => {
239
+ it("formats empty results with suggestions", () => {
240
+ const result = formatEnforcementResults([]);
241
+ expect(result).toContain("No existing enforcement mechanisms detected");
242
+ expect(result).toContain("Available Options");
243
+ expect(result).toContain("husky");
244
+ expect(result).toContain("commitlint");
245
+ expect(result).toContain("GitHub Actions");
246
+ });
247
+ it("formats detected mechanisms grouped by type", () => {
248
+ const result = formatEnforcementResults([
249
+ {
250
+ type: "pre-commit",
251
+ name: "husky",
252
+ detected: true,
253
+ configFile: ".husky/",
254
+ notes: "Git hooks manager",
255
+ },
256
+ {
257
+ type: "linter",
258
+ name: "eslint",
259
+ detected: true,
260
+ configFile: ".eslintrc.json",
261
+ notes: "JS linter",
262
+ },
263
+ ]);
264
+ expect(result).toContain("Detected Enforcement Mechanisms");
265
+ expect(result).toContain("Pre-commit Hooks");
266
+ expect(result).toContain("**husky**");
267
+ expect(result).toContain("Linters");
268
+ expect(result).toContain("**eslint**");
269
+ expect(result).toContain("Recommendations");
270
+ });
121
271
  });
122
272
  describe("PLUGIN_REPO", () => {
123
273
  it("has correct value", () => {
@@ -125,8 +275,9 @@ describe("PLUGIN_REPO", () => {
125
275
  });
126
276
  });
127
277
  describe("TeamAgreementsPlugin", () => {
128
- const testDir = join(tmpdir(), "team-agreements-plugin-test-" + Date.now());
278
+ let testDir;
129
279
  beforeEach(async () => {
280
+ testDir = join(tmpdir(), "team-agreements-plugin-test-" + Date.now() + "-" + Math.random().toString(36).slice(2));
130
281
  await mkdir(join(testDir, "docs"), { recursive: true });
131
282
  });
132
283
  afterEach(async () => {
@@ -242,5 +393,42 @@ describe("TeamAgreementsPlugin", () => {
242
393
  expect(hooks.tool.suggest_team_agreement_topic).toBeDefined();
243
394
  expect(hooks.tool.suggest_team_agreement_topic.description).toContain("Suggest a new topic");
244
395
  });
396
+ it("registers the detect_enforcement_mechanisms tool", async () => {
397
+ const mockCtx = {
398
+ directory: testDir,
399
+ client: {},
400
+ project: {},
401
+ worktree: testDir,
402
+ serverUrl: new URL("http://localhost"),
403
+ $: {},
404
+ };
405
+ const hooks = await TeamAgreementsPlugin(mockCtx);
406
+ expect(hooks.tool).toBeDefined();
407
+ expect(hooks.tool.detect_enforcement_mechanisms).toBeDefined();
408
+ expect(hooks.tool.detect_enforcement_mechanisms.description).toContain("enforcement mechanisms");
409
+ });
410
+ it("detect_enforcement_mechanisms tool returns formatted results", async () => {
411
+ await mkdir(join(testDir, ".husky"), { recursive: true });
412
+ const mockCtx = {
413
+ directory: testDir,
414
+ client: {},
415
+ project: {},
416
+ worktree: testDir,
417
+ serverUrl: new URL("http://localhost"),
418
+ $: {},
419
+ };
420
+ const mockToolContext = {
421
+ sessionID: "test-session",
422
+ messageID: "test-message",
423
+ agent: "test-agent",
424
+ abort: new AbortController().signal,
425
+ metadata: () => { },
426
+ ask: async () => { },
427
+ };
428
+ const hooks = await TeamAgreementsPlugin(mockCtx);
429
+ const result = await hooks.tool.detect_enforcement_mechanisms.execute({}, mockToolContext);
430
+ expect(result).toContain("Detected Enforcement Mechanisms");
431
+ expect(result).toContain("husky");
432
+ });
245
433
  });
246
434
  //# sourceMappingURL=index.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-plugin-team-agreements",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
4
  "description": "OpenCode plugin for establishing and maintaining team agreements for human-LLM collaboration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -16,7 +16,8 @@
16
16
  "clean": "rm -rf dist",
17
17
  "test": "vitest run",
18
18
  "test:watch": "vitest",
19
- "prepublishOnly": "npm run clean && npm run build"
19
+ "prepublishOnly": "npm run clean && npm run build",
20
+ "prepare": "lefthook install"
20
21
  },
21
22
  "keywords": [
22
23
  "opencode",
@@ -40,6 +41,7 @@
40
41
  "devDependencies": {
41
42
  "@opencode-ai/plugin": "^1.0.0",
42
43
  "@types/node": "^25.0.10",
44
+ "lefthook": "^2.0.15",
43
45
  "typescript": "^5.0.0",
44
46
  "vitest": "^4.0.18"
45
47
  },