@useconductor/conductor 1.0.0 → 2.0.0

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 (145) hide show
  1. package/.github/README.md +374 -7
  2. package/.github/workflows/ci.yml +3 -1
  3. package/.github/workflows/claude-code-review.yml +1 -15
  4. package/.github/workflows/publish.yml +43 -0
  5. package/README.md +290 -121
  6. package/dist/cli/commands/audit.d.ts +40 -0
  7. package/dist/cli/commands/audit.d.ts.map +1 -0
  8. package/dist/cli/commands/audit.js +272 -0
  9. package/dist/cli/commands/audit.js.map +1 -0
  10. package/dist/cli/commands/circuit.d.ts +13 -0
  11. package/dist/cli/commands/circuit.d.ts.map +1 -0
  12. package/dist/cli/commands/circuit.js +53 -0
  13. package/dist/cli/commands/circuit.js.map +1 -0
  14. package/dist/cli/commands/config.d.ts +31 -0
  15. package/dist/cli/commands/config.d.ts.map +1 -0
  16. package/dist/cli/commands/config.js +152 -0
  17. package/dist/cli/commands/config.js.map +1 -0
  18. package/dist/cli/commands/init.d.ts +5 -8
  19. package/dist/cli/commands/init.d.ts.map +1 -1
  20. package/dist/cli/commands/init.js +86 -123
  21. package/dist/cli/commands/init.js.map +1 -1
  22. package/dist/cli/commands/marketplace.js +1 -1
  23. package/dist/cli/commands/onboard.d.ts.map +1 -1
  24. package/dist/cli/commands/onboard.js +33 -11
  25. package/dist/cli/commands/onboard.js.map +1 -1
  26. package/dist/cli/commands/release.d.ts.map +1 -1
  27. package/dist/cli/commands/release.js +1 -1
  28. package/dist/cli/commands/release.js.map +1 -1
  29. package/dist/cli/index.js +146 -10
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/core/audit.d.ts.map +1 -1
  32. package/dist/core/audit.js +5 -2
  33. package/dist/core/audit.js.map +1 -1
  34. package/dist/core/conductor.d.ts.map +1 -1
  35. package/dist/core/conductor.js +12 -0
  36. package/dist/core/conductor.js.map +1 -1
  37. package/dist/core/config.d.ts +3 -0
  38. package/dist/core/config.d.ts.map +1 -1
  39. package/dist/core/config.js +46 -2
  40. package/dist/core/config.js.map +1 -1
  41. package/dist/core/database.d.ts +3 -0
  42. package/dist/core/database.d.ts.map +1 -1
  43. package/dist/core/database.js +26 -0
  44. package/dist/core/database.js.map +1 -1
  45. package/dist/core/encryption.d.ts +34 -0
  46. package/dist/core/encryption.d.ts.map +1 -0
  47. package/dist/core/encryption.js +96 -0
  48. package/dist/core/encryption.js.map +1 -0
  49. package/dist/core/zero-config.d.ts.map +1 -1
  50. package/dist/core/zero-config.js +1 -4
  51. package/dist/core/zero-config.js.map +1 -1
  52. package/dist/dashboard/server.d.ts.map +1 -1
  53. package/dist/dashboard/server.js +112 -16
  54. package/dist/dashboard/server.js.map +1 -1
  55. package/dist/mcp/server.d.ts.map +1 -1
  56. package/dist/mcp/server.js +30 -2
  57. package/dist/mcp/server.js.map +1 -1
  58. package/dist/plugins/builtin/aws.d.ts +31 -0
  59. package/dist/plugins/builtin/aws.d.ts.map +1 -0
  60. package/dist/plugins/builtin/aws.js +149 -0
  61. package/dist/plugins/builtin/aws.js.map +1 -0
  62. package/dist/plugins/builtin/database.d.ts +1 -0
  63. package/dist/plugins/builtin/database.d.ts.map +1 -1
  64. package/dist/plugins/builtin/database.js +26 -1
  65. package/dist/plugins/builtin/database.js.map +1 -1
  66. package/dist/plugins/builtin/docker.d.ts +4 -0
  67. package/dist/plugins/builtin/docker.d.ts.map +1 -1
  68. package/dist/plugins/builtin/docker.js +20 -1
  69. package/dist/plugins/builtin/docker.js.map +1 -1
  70. package/dist/plugins/builtin/gcp.d.ts +28 -0
  71. package/dist/plugins/builtin/gcp.d.ts.map +1 -0
  72. package/dist/plugins/builtin/gcp.js +135 -0
  73. package/dist/plugins/builtin/gcp.js.map +1 -0
  74. package/dist/plugins/builtin/index.d.ts.map +1 -1
  75. package/dist/plugins/builtin/index.js +4 -0
  76. package/dist/plugins/builtin/index.js.map +1 -1
  77. package/dist/plugins/builtin/jira.d.ts.map +1 -1
  78. package/dist/plugins/builtin/jira.js +4 -2
  79. package/dist/plugins/builtin/jira.js.map +1 -1
  80. package/dist/plugins/builtin/linear.js +1 -1
  81. package/dist/plugins/builtin/linear.js.map +1 -1
  82. package/dist/plugins/builtin/shell.js +1 -1
  83. package/dist/plugins/builtin/shell.js.map +1 -1
  84. package/dist/plugins/builtin/slack.d.ts +1 -0
  85. package/dist/plugins/builtin/slack.d.ts.map +1 -1
  86. package/dist/plugins/builtin/slack.js +9 -1
  87. package/dist/plugins/builtin/slack.js.map +1 -1
  88. package/dist/plugins/builtin/spotify.js +1 -1
  89. package/dist/plugins/builtin/spotify.js.map +1 -1
  90. package/dist/plugins/builtin/vercel.d.ts.map +1 -1
  91. package/dist/plugins/builtin/vercel.js +3 -1
  92. package/dist/plugins/builtin/vercel.js.map +1 -1
  93. package/dist/security/sso.d.ts +37 -0
  94. package/dist/security/sso.d.ts.map +1 -0
  95. package/dist/security/sso.js +92 -0
  96. package/dist/security/sso.js.map +1 -0
  97. package/docs/deployment.md +201 -0
  98. package/docs/plugin-sdk.md +212 -0
  99. package/package.json +11 -8
  100. package/src/cli/commands/audit.ts +318 -0
  101. package/src/cli/commands/circuit.ts +63 -0
  102. package/src/cli/commands/config.ts +176 -0
  103. package/src/cli/commands/init.ts +87 -145
  104. package/src/cli/commands/marketplace.ts +1 -1
  105. package/src/cli/commands/onboard.ts +33 -11
  106. package/src/cli/commands/release.ts +13 -6
  107. package/src/cli/index.ts +165 -11
  108. package/src/core/audit.ts +5 -2
  109. package/src/core/conductor.ts +11 -0
  110. package/src/core/config.ts +47 -2
  111. package/src/core/database.ts +32 -0
  112. package/src/core/encryption.ts +110 -0
  113. package/src/core/zero-config.ts +1 -5
  114. package/src/dashboard/server.ts +135 -16
  115. package/src/mcp/server.ts +40 -2
  116. package/src/plugins/builtin/aws.ts +162 -0
  117. package/src/plugins/builtin/database.ts +19 -1
  118. package/src/plugins/builtin/docker.ts +17 -1
  119. package/src/plugins/builtin/gcp.ts +145 -0
  120. package/src/plugins/builtin/index.ts +4 -0
  121. package/src/plugins/builtin/jira.ts +23 -19
  122. package/src/plugins/builtin/linear.ts +1 -1
  123. package/src/plugins/builtin/shell.ts +1 -1
  124. package/src/plugins/builtin/slack.ts +6 -1
  125. package/src/plugins/builtin/spotify.ts +1 -1
  126. package/src/plugins/builtin/vercel.ts +3 -1
  127. package/src/security/sso.ts +124 -0
  128. package/tests/audit.test.ts +185 -0
  129. package/tests/circuit-breaker.test.ts +125 -0
  130. package/tests/docker.test.ts +244 -39
  131. package/tests/errors.test.ts +122 -0
  132. package/tests/github.test.ts.skip +392 -0
  133. package/tests/jira.test.ts +310 -0
  134. package/tests/linear.test.ts +366 -0
  135. package/tests/mcp.test.ts.skip +243 -0
  136. package/tests/notion.test.ts +257 -0
  137. package/tests/retry.test.ts +104 -0
  138. package/tests/shell.test.ts +262 -30
  139. package/tests/slack.test.ts +250 -0
  140. package/tests/stripe.test.ts +272 -0
  141. package/tests/validation.test.ts +173 -0
  142. package/tests/vercel.test.ts +368 -0
  143. package/tests/zero-config.test.ts +566 -0
  144. package/C.png +0 -0
  145. package/tests/mcp.test.ts +0 -14
package/.github/README.md CHANGED
@@ -1,13 +1,380 @@
1
- # .github
1
+ # Conductor
2
2
 
3
- GitHub configuration for the Conductor repository.
3
+ **One MCP server. 100+ tools. Every AI agent.**
4
4
 
5
- ## Contents
5
+ [![CI](https://github.com/useconductor/conductor/actions/workflows/ci.yml/badge.svg)](https://github.com/useconductor/conductor/actions/workflows/ci.yml)
6
+ [![npm](https://img.shields.io/npm/v/@useconductor/conductor)](https://www.npmjs.com/package/@useconductor/conductor)
7
+ [![Node](https://img.shields.io/badge/node-%3E%3D20.12-brightgreen)](https://nodejs.org)
8
+ [![License](https://img.shields.io/badge/license-Apache%202.0-blue)](./LICENSE)
6
9
 
7
- - `workflows/` - GitHub Actions CI/CD workflows
8
- - `ISSUE_TEMPLATE/` - Issue templates for bug reports and feature requests
9
- - `FUNDING.yml` - Sponsorship configuration
10
+ Conductor is a single [Model Context Protocol](https://modelcontextprotocol.io) server that gives any AI agent — Claude, Cursor, Cline, Copilot, and more — instant access to your entire toolkit through one connection. Install once, configure once, use everywhere.
11
+
12
+ ```bash
13
+ npm install -g @useconductor/conductor
14
+ conductor init
15
+ ```
16
+
17
+ ---
18
+
19
+ ## Why Conductor
20
+
21
+ Most MCP setups mean one server per tool — one for GitHub, one for Slack, one for your database. That's a dozen processes, a dozen configs, and a dozen things to break.
22
+
23
+ Conductor collapses all of that into a single server with a plugin system, security built in from the start, and a CLI that actually works.
24
+
25
+ - **100+ tools** across 35+ plugins, all in one process
26
+ - **Zero-config plugins** work instantly — no API keys, no setup
27
+ - **Secrets in the OS keychain** — never stored in config files
28
+ - **Circuit breakers + retry** on every tool call — failures don't cascade
29
+ - **SHA-256 chained audit log** — every action recorded, tamper-evident
30
+ - **One config block** in your AI client — that's the whole integration
31
+
32
+ ---
33
+
34
+ ## Quick start
35
+
36
+ ```bash
37
+ # Install
38
+ npm install -g @useconductor/conductor
39
+
40
+ # First-run wizard — AI provider, plugins, client config
41
+ conductor init
42
+ ```
43
+
44
+ ### Claude Desktop
45
+
46
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
47
+
48
+ ```json
49
+ {
50
+ "mcpServers": {
51
+ "conductor": {
52
+ "command": "conductor",
53
+ "args": ["mcp", "start"]
54
+ }
55
+ }
56
+ }
57
+ ```
58
+
59
+ Or skip the manual editing: `conductor mcp setup`
60
+
61
+ ### Cursor / Windsurf / Cline / Continue
62
+
63
+ Same config block — drop it in `.cursor/mcp.json`, `.codeium/windsurf/mcp_config.json`, or your client's MCP config file.
64
+
65
+ ### No global install
66
+
67
+ ```json
68
+ {
69
+ "mcpServers": {
70
+ "conductor": {
71
+ "command": "npx",
72
+ "args": ["-y", "@useconductor/conductor", "mcp", "start"]
73
+ }
74
+ }
75
+ }
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Plugins
81
+
82
+ ### Needs setup
83
+
84
+ | Plugin | What it does | Setup |
85
+ |---|---|---|
86
+ | `github` | Repos, issues, PRs, code search (20 tools) | `GITHUB_TOKEN` env var |
87
+ | `gmail` | Read, compose, send, search, label email | `conductor google` |
88
+ | `gcal` | Events, availability, scheduling | `conductor google` |
89
+ | `gdrive` | Search, read, upload files | `conductor google` |
90
+ | `notion` | Pages, databases, blocks, search | API key |
91
+ | `slack` | Messages, channels, search | `conductor slack setup` |
92
+ | `linear` | Issues, projects, cycles | API key |
93
+ | `jira` | Issues, projects, sprints | Domain + API token |
94
+ | `stripe` | Payments, customers, invoices | Secret key |
95
+ | `docker` | Containers, images, volumes, networks | Local Docker socket |
96
+ | `database` | Postgres, MySQL queries | Connection URL |
97
+ | `github-actions` | Trigger and monitor CI workflows | `GITHUB_TOKEN` |
98
+ | `vercel` | Deployments, logs, projects | API token |
99
+ | `n8n` | Trigger workflows, list executions | Base URL + API key |
100
+ | `spotify` | Playback, search, playlists | Client ID + secret |
101
+ | `x` | Post, search, timeline | API credentials |
102
+ | `homekit` | Lights, locks, thermostats via Homebridge | Base URL |
103
+ | `lumen` | Smart lighting control | Local setup |
104
+ | `todoist` | Tasks, projects, labels | API token |
105
+ | `shell` | Run allowlisted shell commands | Enabled by default |
106
+
107
+ ### Zero-config (works instantly)
108
+
109
+ | Plugin | What it does |
110
+ |---|---|
111
+ | `calculator` | Math expressions, unit conversions, date arithmetic |
112
+ | `colors` | Convert hex/RGB/HSL, generate palettes, WCAG contrast |
113
+ | `crypto` | Encrypt, decrypt, sign, verify |
114
+ | `hash` | SHA-256/MD5/SHA-512, base64, UUID, passwords |
115
+ | `text-tools` | JSON format, word count, regex test, case transform |
116
+ | `timezone` | Current time in any city, timezone conversion |
117
+ | `url-tools` | Expand short links, check status, inspect headers |
118
+ | `network` | Ping, DNS lookup, port check, IP info |
119
+ | `system` | CPU, memory, disk usage |
120
+ | `weather` | Current conditions and forecast by city |
121
+ | `translate` | Translate text between languages |
122
+ | `fun` | Jokes, trivia, quotes |
123
+ | `notes` | Local markdown notes |
124
+ | `memory` | Persistent key-value memory across sessions |
125
+ | `cron` | Schedule recurring tasks |
126
+
127
+ ---
128
+
129
+ ## CLI reference
130
+
131
+ ### Setup
132
+
133
+ ```bash
134
+ conductor init # First-run wizard
135
+ conductor mcp setup # Auto-configure Claude Desktop / Cursor
136
+ conductor mcp start # Start MCP server (stdio)
137
+ conductor mcp status # Show MCP server status
138
+ conductor doctor # Diagnose common issues
139
+ conductor health # System health report
140
+ conductor health --json # Machine-readable health output
141
+ ```
142
+
143
+ ### Plugins
144
+
145
+ ```bash
146
+ conductor plugins list # List all plugins (enabled/disabled)
147
+ conductor plugins enable <name> # Enable a plugin
148
+ conductor plugins disable <name> # Disable a plugin
149
+ conductor onboard # Interactive TUI plugin picker
150
+ conductor install <plugin> # Install from marketplace
151
+ conductor marketplace # Browse marketplace
152
+ conductor marketplace info <plugin> # Plugin details
153
+ conductor plugin create <name> # Scaffold a new plugin with tests
154
+ ```
155
+
156
+ ### Authentication
157
+
158
+ ```bash
159
+ conductor google # Browser-based Google OAuth (Gmail, Calendar, Drive)
160
+ conductor slack setup # Configure Slack bot + app tokens
161
+ conductor slack start # Start the Slack bot
162
+ conductor telegram setup # Configure Telegram bot token
163
+ conductor telegram start # Start the Telegram bot
164
+ conductor ai setup # Configure AI provider
165
+ conductor ai test # Test current AI provider
166
+ ```
167
+
168
+ ### Configuration
169
+
170
+ ```bash
171
+ conductor config list # Show all config keys and values
172
+ conductor config get <key> # Get a specific key (e.g. ai.provider)
173
+ conductor config set <key> <value> # Set a key (JSON or string)
174
+ conductor config path # Print config file path
175
+ conductor config export # Dump config as JSON
176
+ conductor config validate # Check config structure
177
+ conductor config reset # Reset to defaults
178
+ ```
179
+
180
+ ### Audit log
181
+
182
+ ```bash
183
+ conductor audit list # List recent entries
184
+ conductor audit list --actor user1 # Filter by actor
185
+ conductor audit list --result failure # Filter by result
186
+ conductor audit verify # Verify SHA-256 chain integrity
187
+ conductor audit tail # Stream in real time
188
+ conductor audit stats # Summary statistics
189
+ conductor audit export -o out.json # Export to file
190
+ conductor audit rotate # Manually rotate log file
191
+ ```
192
+
193
+ ### Circuit breakers
194
+
195
+ ```bash
196
+ conductor circuit list # Show state of all circuit breakers
197
+ conductor circuit reset <tool> # Reset a specific circuit to closed
198
+ ```
199
+
200
+ ### Autonomous + other
201
+
202
+ ```bash
203
+ conductor proactive start # Start autonomous reasoning loop
204
+ conductor dashboard # Open web dashboard (--port <n>)
205
+ conductor release # Bump version and publish to npm
206
+ ```
207
+
208
+ ---
209
+
210
+ ## Security model
211
+
212
+ Every tool call passes through a stack before reaching the handler:
213
+
214
+ ```
215
+ Request
216
+ → Zod input validation (schema-level type safety)
217
+ → RBAC permission check (role-based access control)
218
+ → Circuit breaker (opens after 5 failures, recovers in 30s)
219
+ → Retry with exponential backoff
220
+ → Handler
221
+ → Audit log entry (SHA-256 chained, append-only)
222
+ → Metrics
223
+ ```
224
+
225
+ **Secrets** are stored in the OS keychain (macOS Keychain, Linux Secret Service, Windows Credential Manager) via `@useconductor/conductor`'s keychain module — never in `config.json`.
226
+
227
+ **Shell commands** go through a strict allowlist. No `eval()`, no `exec()` with arbitrary input, no wildcards. The list covers standard dev tools: git, docker, node, npm, curl, psql, and ~50 others.
228
+
229
+ **Destructive tools** set `requiresApproval: true` — the AI agent must explicitly confirm before execution.
230
+
231
+ **Audit log** at `~/.conductor/audit/audit.log` is JSONL with a SHA-256 chain. Each entry hashes the previous entry's hash + its own content. Verify integrity anytime with `conductor audit verify`.
232
+
233
+ **Rate limiting** on all HTTP endpoints via `express-rate-limit`.
234
+
235
+ ---
10
236
 
11
237
  ## Architecture
12
238
 
13
- This directory contains GitHub-specific repository configuration. Workflows handle CI, releases, and automated tasks. Issue templates standardize how contributors report bugs and request features.
239
+ ```
240
+ src/
241
+ ├── cli/ Commander CLI — commands in src/cli/commands/
242
+ │ └── commands/ init, mcp, plugins, audit, config, circuit, auth, ...
243
+ ├── core/ Conductor orchestrator, config, database, audit, retry, circuit-breaker
244
+ ├── mcp/ MCP server — stdio + HTTP/SSE transports
245
+ ├── plugins/ Plugin manager, validation, 35 builtin plugins
246
+ │ └── builtin/ calculator, github, slack, gmail, docker, shell, ...
247
+ ├── ai/ Multi-provider AI (Claude, OpenAI, Gemini, Ollama, OpenRouter)
248
+ ├── bot/ Telegram + Slack bot runtimes
249
+ ├── dashboard/ Express web dashboard + REST API
250
+ └── security/ Keychain, RBAC, auth
251
+ ```
252
+
253
+ Config storage at `~/.conductor/`:
254
+
255
+ | Path | Contents |
256
+ |---|---|
257
+ | `config.json` | Non-secret settings |
258
+ | `conductor.db` | SQLite history + activity log |
259
+ | `audit/audit.log` | Tamper-evident audit chain (JSONL) |
260
+ | `plugins/` | External plugin `.js` files |
261
+ | `.key` | Machine-bound AES-256-GCM encryption key |
262
+
263
+ ---
264
+
265
+ ## Writing plugins
266
+
267
+ Install the SDK for types:
268
+
269
+ ```bash
270
+ npm install @useconductor/sdk
271
+ ```
272
+
273
+ ```typescript
274
+ import type { Plugin, PluginTool } from '@useconductor/sdk';
275
+
276
+ class MyPlugin implements Plugin {
277
+ name = 'my-plugin';
278
+ description = 'Does something useful';
279
+ version = '1.0.0';
280
+
281
+ async initialize(): Promise<void> {}
282
+ isConfigured(): boolean { return true; }
283
+
284
+ getTools(): PluginTool[] {
285
+ return [
286
+ {
287
+ name: 'my_tool',
288
+ description: 'Explain what this does in one sentence',
289
+ inputSchema: {
290
+ type: 'object',
291
+ properties: {
292
+ query: { type: 'string', description: 'The query to process' },
293
+ },
294
+ required: ['query'],
295
+ },
296
+ handler: async ({ query }) => {
297
+ return { result: `Processed: ${query}` };
298
+ },
299
+ },
300
+ ];
301
+ }
302
+ }
303
+
304
+ export default new MyPlugin();
305
+ ```
306
+
307
+ Compile to `~/.conductor/plugins/my-plugin.js` and it's immediately available.
308
+
309
+ Scaffold with tests:
310
+
311
+ ```bash
312
+ conductor plugin create my-plugin
313
+ ```
314
+
315
+ For plugins needing secrets, add a `configSchema` with `secret: true` fields — they get stored in the OS keychain automatically.
316
+
317
+ ---
318
+
319
+ ## Programmatic use
320
+
321
+ ```typescript
322
+ import { ConductorClient } from '@useconductor/sdk';
323
+
324
+ // stdio (local)
325
+ const client = new ConductorClient({ transport: 'stdio' });
326
+ await client.connect();
327
+
328
+ const tools = await client.listTools();
329
+ const result = await client.callText('calc_math', { expression: 'sqrt(144) + 8' });
330
+ console.log(result); // "20"
331
+
332
+ await client.disconnect();
333
+
334
+ // HTTP/SSE (remote)
335
+ const remote = new ConductorClient({
336
+ transport: 'http',
337
+ url: 'http://your-conductor-host:3000',
338
+ });
339
+ ```
340
+
341
+ ---
342
+
343
+ ## Supported clients
344
+
345
+ Works with any MCP-compatible client:
346
+
347
+ - [Claude Desktop](https://claude.ai/download)
348
+ - [Cursor](https://cursor.com)
349
+ - [Cline (VS Code)](https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev)
350
+ - [Windsurf](https://codeium.com/windsurf)
351
+ - [Continue.dev](https://continue.dev)
352
+ - [Zed](https://zed.dev)
353
+ - [Aider](https://aider.chat)
354
+ - [Roo Code](https://roocode.com)
355
+ - VS Code (GitHub Copilot)
356
+ - Any client supporting MCP stdio transport
357
+
358
+ ---
359
+
360
+ ## Contributing
361
+
362
+ ```bash
363
+ git clone https://github.com/useconductor/conductor
364
+ cd conductor
365
+ npm install
366
+ npm run dev # Watch mode
367
+ npm test # Run tests (Vitest)
368
+ npm run typecheck # Type check
369
+ npm run lint # ESLint (requires Node >= 20.12)
370
+ ```
371
+
372
+ Requirements: Node >= 20.12, npm >= 9.
373
+
374
+ ---
375
+
376
+ ## License
377
+
378
+ Apache 2.0 — see [LICENSE](./LICENSE)
379
+
380
+ Built by [Alexander Wondwossen](https://github.com/thealxlabs) and contributors.
@@ -12,7 +12,9 @@ jobs:
12
12
 
13
13
  strategy:
14
14
  matrix:
15
- node-version: [18, 20, 22]
15
+ # Node 18 reached EOL April 2025. ESLint 10 and Vitest/rolldown require
16
+ # util.styleText which was added in Node 20.12. Min supported: Node 20.
17
+ node-version: [20, 22]
16
18
 
17
19
  steps:
18
20
  - uses: actions/checkout@v4
@@ -3,22 +3,11 @@ name: Claude Code Review
3
3
  on:
4
4
  pull_request:
5
5
  types: [opened, synchronize, ready_for_review, reopened]
6
- # Optional: Only run on specific file changes
7
- # paths:
8
- # - "src/**/*.ts"
9
- # - "src/**/*.tsx"
10
- # - "src/**/*.js"
11
- # - "src/**/*.jsx"
12
6
 
13
7
  jobs:
14
8
  claude-review:
15
- # Optional: Filter by PR author
16
- # if: |
17
- # github.event.pull_request.user.login == 'external-contributor' ||
18
- # github.event.pull_request.user.login == 'new-developer' ||
19
- # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
20
-
21
9
  runs-on: ubuntu-latest
10
+ continue-on-error: true
22
11
  permissions:
23
12
  contents: read
24
13
  pull-requests: read
@@ -39,6 +28,3 @@ jobs:
39
28
  plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
40
29
  plugins: 'code-review@claude-code-plugins'
41
30
  prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
42
- # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
43
- # or https://code.claude.com/docs/en/cli-reference for available options
44
-
@@ -0,0 +1,43 @@
1
+ name: Publish to npm
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+ release:
8
+ types: [published]
9
+
10
+ jobs:
11
+ publish:
12
+ runs-on: ubuntu-latest
13
+ permissions:
14
+ contents: read
15
+ id-token: write # for npm provenance
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+
20
+ - name: Setup Node.js
21
+ uses: actions/setup-node@v4
22
+ with:
23
+ node-version: '20'
24
+ cache: 'npm'
25
+ registry-url: 'https://registry.npmjs.org'
26
+
27
+ - name: Install dependencies
28
+ run: npm ci
29
+
30
+ - name: Type check
31
+ run: npm run typecheck
32
+
33
+ - name: Run tests
34
+ run: npm test
35
+
36
+ - name: Build
37
+ run: npm run build
38
+
39
+ - name: Configure npm auth
40
+ run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc
41
+
42
+ - name: Publish to npm
43
+ run: npm publish --access public --ignore-scripts