@useconductor/conductor 1.0.0 → 1.0.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 (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/README.md CHANGED
@@ -1,16 +1,43 @@
1
1
  # Conductor
2
2
 
3
- **The AI Tool Hub.** One MCP server. 100+ tools. Every AI agent.
3
+ **One MCP server. Tools for every AI agent.**
4
4
 
5
- [![CI](https://github.com/conductor/conductor/actions/workflows/ci.yml/badge.svg)](https://github.com/conductor/conductor/actions/workflows/ci.yml)
6
- [![npm](https://img.shields.io/npm/v/@conductor/cli)](https://www.npmjs.com/package/@conductor/cli)
7
- [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)
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)
8
9
 
9
- ## One Connection. Every Tool.
10
+ Conductor is a single [Model Context Protocol](https://modelcontextprotocol.io) server that gives any AI agent — Claude, Cursor, Cline, Copilot, and more — access to your tools through one connection. Install once, configure once, use everywhere.
10
11
 
11
- Conductor is the single MCP server that gives **any AI agent** access to 100+ real-world tools. No more configuring 10 different MCP servers. No more managing 10 different auth flows. One line of config, everything works.
12
+ ```bash
13
+ npm install -g @useconductor/conductor
14
+ conductor init
15
+ ```
16
+
17
+ ---
18
+
19
+ ## Why Conductor
20
+
21
+ Running one MCP server per tool means one process, one config, and one potential failure per integration. Conductor collapses all of that into a single server with a consistent security layer and one config block in your AI client.
22
+
23
+ - **Single process** — GitHub, Docker, shell, databases, and more through one connection
24
+ - **Encrypted credential storage** — secrets encrypted with a machine-derived AES-256-GCM key, never in plain config files
25
+ - **Circuit breakers + retry** on every tool call — failures don't cascade
26
+ - **SHA-256 chained audit log** — every action recorded, tamper-evident
27
+ - **One config block** in your AI client
28
+
29
+ ---
30
+
31
+ ## Quick start
32
+
33
+ ```bash
34
+ npm install -g @useconductor/conductor
35
+ conductor init
36
+ ```
37
+
38
+ ### Claude Desktop
12
39
 
13
- Add this to your AI agent's MCP config:
40
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
14
41
 
15
42
  ```json
16
43
  {
@@ -23,157 +50,299 @@ Add this to your AI agent's MCP config:
23
50
  }
24
51
  ```
25
52
 
26
- Now **Claude Code**, **Cursor**, **Cline**, **Aider**, and every other MCP-compatible AI agent instantly gets access to:
53
+ Or skip the manual editing: `conductor mcp setup`
27
54
 
28
- | Category | Tools |
29
- |----------|-------|
30
- | **GitHub** | repos, issues, PRs, stars, trending, actions |
31
- | **Docker** | containers, images, volumes, networks, stats, run |
32
- | **Databases** | PostgreSQL, MySQL, MongoDB, Redis queries |
33
- | **File System** | read, write, list, search, grep |
34
- | **Shell** | safe command execution with approval workflow |
35
- | **Git** | status, diff, log, branch operations |
36
- | **Calculator** | math expressions, unit conversions, date math |
37
- | **Web** | search, scrape, URL tools, translate |
38
- | **System** | info, network, crypto, hash, colors |
39
- | **Google** | Gmail, Calendar, Drive |
40
- | **Productivity** | Notion, Todoist, Slack, notes, cron |
41
- | **And more** | Vercel, n8n, weather, timezone, memory |
55
+ ### Cursor / Windsurf / Cline / Continue
42
56
 
43
- ## Install
57
+ Same config block — drop it into `.cursor/mcp.json`, `.codeium/windsurf/mcp_config.json`, or your client's MCP config file.
58
+
59
+ ### No global install
60
+
61
+ ```json
62
+ {
63
+ "mcpServers": {
64
+ "conductor": {
65
+ "command": "npx",
66
+ "args": ["-y", "@useconductor/conductor", "mcp", "start"]
67
+ }
68
+ }
69
+ }
70
+ ```
71
+
72
+ ---
73
+
74
+ ## Plugins
75
+
76
+ ### Core (fully tested, production-ready)
77
+
78
+ | Plugin | What it does | Setup |
79
+ |---|---|---|
80
+ | `shell` | Safe shell execution, file read/write/search | Enabled by default |
81
+ | `github` | Repos, issues, PRs, code search (23 tools) | Optional `GITHUB_TOKEN` for private repos |
82
+ | `docker` | Containers, images, volumes, networks (16 tools) | Docker daemon running |
83
+ | `database` | PostgreSQL, MySQL, MongoDB, Redis queries | Connection URL |
84
+ | `slack` | Messages, channels, search, DMs | `conductor slack setup` |
85
+
86
+ ### Zero-config utilities (no setup required)
87
+
88
+ | Plugin | What it does |
89
+ |---|---|
90
+ | `calculator` | Math expressions, unit conversions, date arithmetic |
91
+ | `colors` | Convert hex/RGB/HSL, generate palettes, WCAG contrast |
92
+ | `hash` | SHA-256/MD5/SHA-512, base64, UUID, passwords |
93
+ | `text-tools` | JSON format, word count, regex test, case transform |
94
+ | `timezone` | Current time in any city, timezone conversion |
95
+ | `weather` | Current conditions and forecast by city (Open-Meteo, no key required) |
96
+ | `network` | Ping, DNS lookup, port check, IP info |
97
+ | `url-tools` | Expand short links, check status, inspect headers |
98
+ | `system` | CPU, memory, disk usage |
99
+ | `notes` | Local markdown notes |
100
+ | `memory` | Persistent key-value memory across sessions |
101
+ | `cron` | Schedule recurring tasks |
102
+ | `fun` | Jokes, trivia, quotes |
103
+
104
+ ### Additional (needs setup)
105
+
106
+ | Plugin | Setup |
107
+ |---|---|
108
+ | `gmail`, `gcal`, `gdrive` | `conductor google` |
109
+ | `notion` | API key |
110
+ | `linear` | API key |
111
+ | `jira` | Domain + API token |
112
+ | `stripe` | Secret key |
113
+ | `vercel` | API token |
114
+ | `n8n` | Base URL + API key |
115
+ | `spotify` | Client ID + secret |
116
+ | `x` | API credentials |
117
+ | `homekit` | Homebridge base URL |
118
+ | `todoist` | API token |
119
+ | `github-actions` | `GITHUB_TOKEN` |
120
+
121
+ ---
122
+
123
+ ## CLI reference
124
+
125
+ ### Setup
44
126
 
45
127
  ```bash
46
- npm install -g @conductor/cli
128
+ conductor init # First-run wizard
129
+ conductor mcp setup # Auto-configure Claude Desktop / Cursor
130
+ conductor mcp start # Start MCP server (stdio)
131
+ conductor mcp status # Show MCP server status
132
+ conductor doctor # Diagnose common issues
133
+ conductor health # System health report
134
+ conductor health --json # Machine-readable health output
47
135
  ```
48
136
 
49
- ## Quick Start
137
+ ### Plugins
50
138
 
51
139
  ```bash
52
- # Start the MCP server
53
- conductor mcp start
140
+ conductor plugins list # List all plugins (enabled/disabled)
141
+ conductor plugins enable <name> # Enable a plugin
142
+ conductor plugins disable <name> # Disable a plugin
143
+ conductor onboard # Interactive TUI plugin picker
144
+ conductor install <plugin> # Install from marketplace
145
+ conductor marketplace # Browse marketplace
146
+ conductor marketplace info <plugin> # Plugin details
147
+ conductor plugins create <name> # Scaffold a new plugin with tests
148
+ ```
149
+
150
+ ### Authentication
54
151
 
55
- # Enable plugins
56
- conductor plugins enable github
57
- conductor plugins enable docker
58
- conductor plugins enable shell
152
+ ```bash
153
+ conductor google # Browser-based Google OAuth (Gmail, Calendar, Drive)
154
+ conductor slack setup # Configure Slack bot token
155
+ conductor slack start # Start the Slack bot
156
+ conductor telegram setup # Configure Telegram bot token
157
+ conductor telegram start # Start the Telegram bot
158
+ conductor ai setup # Configure AI provider
159
+ conductor ai test # Test current AI provider
160
+ ```
59
161
 
60
- # Configure credentials
61
- conductor config set github.token ghp_your_token_here
162
+ ### Configuration
62
163
 
63
- # Check status
64
- conductor plugins list
164
+ ```bash
165
+ conductor config list # Show all config keys and values
166
+ conductor config get <key> # Get a specific key (e.g. ai.provider)
167
+ conductor config set <key> <value> # Set a key (JSON or string)
168
+ conductor config path # Print config file path
169
+ conductor config export # Dump config as JSON
170
+ conductor config validate # Check config structure
171
+ conductor config reset # Reset to defaults
172
+ ```
173
+
174
+ ### Audit log
175
+
176
+ ```bash
177
+ conductor audit list # List recent entries
178
+ conductor audit list --actor user1 # Filter by actor
179
+ conductor audit list --result failure # Filter by result
180
+ conductor audit verify # Verify SHA-256 chain integrity
181
+ conductor audit tail # Stream in real time
182
+ conductor audit stats # Summary statistics
183
+ conductor audit export -o out.json # Export to file
184
+ conductor audit rotate # Manually rotate log file
65
185
  ```
66
186
 
67
- ## Works With Every AI Agent
187
+ ### Circuit breakers
188
+
189
+ ```bash
190
+ conductor circuit list # Show state of all circuit breakers
191
+ conductor circuit reset <tool> # Reset a specific circuit to closed
192
+ ```
68
193
 
69
- Conductor connects to any MCP-compatible client:
194
+ ---
70
195
 
71
- - **Claude Desktop** — `conductor mcp setup`
72
- - **Claude Code** — add to `claude.json` MCP config
73
- - **Cursor** add to Cursor MCP settings
74
- - **Cline** — add to Cline MCP servers
75
- - **Aider** — configure as external tool
76
- - **Any MCP client** — stdio or HTTP transport
196
+ ## Security model
197
+
198
+ Every tool call passes through this stack:
199
+
200
+ ```
201
+ Request
202
+ → Zod input validation
203
+ → Circuit breaker (opens after 5 failures, recovers in 30s)
204
+ → Retry with exponential backoff
205
+ → Handler
206
+ → Audit log entry (SHA-256 chained, append-only)
207
+ → Metrics
208
+ ```
209
+
210
+ **Credentials** are encrypted with AES-256-GCM using a key derived from the machine's hardware ID (IOPlatformUUID on macOS, `/etc/machine-id` on Linux). They are stored in `~/.conductor/keychain/` as encrypted files — not in `config.json`, and never in plaintext.
211
+
212
+ **Shell commands** go through a strict allowlist (~50 standard dev tools). No `eval()`, no arbitrary execution.
213
+
214
+ **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`.
215
+
216
+ **Rate limiting** on all HTTP endpoints via `express-rate-limit`.
217
+
218
+ ---
77
219
 
78
220
  ## Architecture
79
221
 
80
222
  ```
81
- ┌─────────────────────────────────────────────────┐
82
- │ AI Agent (any MCP client) │
83
- Claude Code │ Cursor │ Cline │ Aider │
84
- └──────────────────────┬──────────────────────────┘
85
- MCP Protocol (stdio/HTTP)
86
-
87
- ┌─────────────────────────────────────────────────┐
88
- │ Conductor MCP Server │
89
- │ │
90
- │ ┌──────────┐ ┌──────────┐ ┌───────────────┐
91
- │ │ GitHub │ │ Docker │ │ Databases │
92
- │ │ Plugin │ │ Plugin │ │ Plugin │ │
93
- │ └──────────┘ └──────────┘ └───────────────┘ │
94
- │ ┌──────────┐ ┌──────────┐ ┌───────────────┐
95
- │ │ Shell │ │ Git │ │ Calculator │ │
96
- │ │ Plugin │ │ Plugin │ │ Plugin │
97
- │ └──────────┘ └──────────┘ └───────────────┘ │
98
- │ ┌──────────┐ ┌──────────┐ ┌───────────────┐
99
- │ │ Google │ │ Slack │ │ + 90 more │
100
- │ │ Plugin │ │ Plugin │ │ plugins │
101
- │ └──────────┘ └──────────┘ └───────────────┘
102
- │ │
103
- │ Encrypted Keychain │ Zod Validation │ Metrics │
104
- └─────────────────────────────────────────────────┘
105
- ```
106
-
107
- ## Security
108
-
109
- - **Encrypted keychain** — AES-256-GCM with machine-bound key derivation
110
- - **Zod validation** — every plugin input is validated before execution
111
- - **Safe shell** — whitelist-based command filtering, no `eval()`, no `exec()`
112
- - **Plugin sandboxing** — plugins run with minimal permissions
113
- - **Approval workflow** — dangerous operations require explicit user approval
114
- - **Rate limiting** — all endpoints protected against abuse
115
-
116
- ## Plugin System
117
-
118
- Build your own plugins. Drop a `.js` file in `~/.conductor/plugins/` and it's available via MCP.
223
+ src/
224
+ ├── cli/ Commander CLI
225
+ └── commands/ init, mcp, plugins, audit, config, circuit, auth, ...
226
+ ├── core/ Conductor orchestrator, config, database, audit, retry, circuit-breaker
227
+ ├── mcp/ MCP server stdio + HTTP/SSE transports
228
+ ├── plugins/ Plugin manager, validation, 35 builtin plugins
229
+ │ └── builtin/ shell, github, docker, database, slack, calculator, ...
230
+ ├── ai/ Multi-provider AI (Claude, OpenAI, Gemini, Ollama)
231
+ ├── bot/ Telegram + Slack bot runtimes
232
+ ├── dashboard/ Express web dashboard + REST API
233
+ └── security/ Credential storage, auth
234
+ ```
235
+
236
+ Config storage at `~/.conductor/`:
237
+
238
+ | Path | Contents |
239
+ |---|---|
240
+ | `config.json` | Non-secret settings |
241
+ | `conductor.db` | SQLite activity log and history |
242
+ | `audit/audit.log` | Tamper-evident audit chain (JSONL) |
243
+ | `keychain/` | AES-256-GCM encrypted credentials |
244
+ | `plugins/` | External plugin `.js` files |
245
+
246
+ ---
247
+
248
+ ## Writing plugins
119
249
 
120
250
  ```typescript
121
- import { Plugin, PluginTool } from '@conductor/cli';
251
+ import type { Plugin, PluginTool } from '@useconductor/sdk';
122
252
 
123
- export class MyPlugin implements Plugin {
253
+ class MyPlugin implements Plugin {
124
254
  name = 'my-plugin';
125
- description = 'My awesome plugin';
255
+ description = 'Does something useful';
126
256
  version = '1.0.0';
127
257
 
128
- async initialize() {}
129
- isConfigured() { return true; }
258
+ async initialize(): Promise<void> {}
259
+ isConfigured(): boolean { return true; }
130
260
 
131
261
  getTools(): PluginTool[] {
132
- return [{
133
- name: 'my_tool',
134
- description: 'Does something awesome',
135
- inputSchema: {
136
- type: 'object',
137
- properties: {
138
- input: { type: 'string', description: 'Your input' },
262
+ return [
263
+ {
264
+ name: 'my_tool',
265
+ description: 'Explain what this does in one sentence',
266
+ inputSchema: {
267
+ type: 'object',
268
+ properties: {
269
+ query: { type: 'string', description: 'The query to process' },
270
+ },
271
+ required: ['query'],
272
+ },
273
+ handler: async ({ query }) => {
274
+ return { result: `Processed: ${query}` };
139
275
  },
140
- required: ['input'],
141
- },
142
- handler: async (input: { input: string }) => {
143
- return { result: `You said: ${input.input}` };
144
276
  },
145
- }];
277
+ ];
146
278
  }
147
279
  }
280
+
281
+ export default new MyPlugin();
148
282
  ```
149
283
 
150
- ## Development
284
+ Place compiled output at `~/.conductor/plugins/my-plugin.js`. Scaffold with tests:
151
285
 
152
286
  ```bash
153
- git clone https://github.com/conductor/conductor.git
287
+ conductor plugins create my-plugin
288
+ ```
289
+
290
+ For plugins needing credentials, add a `configSchema` with `secret: true` fields — they get encrypted and stored automatically.
291
+
292
+ ---
293
+
294
+ ## Programmatic use
295
+
296
+ ```typescript
297
+ import { ConductorClient } from '@useconductor/sdk';
298
+
299
+ // stdio (local)
300
+ const client = new ConductorClient({ transport: 'stdio' });
301
+ await client.connect();
302
+ const result = await client.callText('calc_math', { expression: 'sqrt(144) + 8' });
303
+ console.log(result); // "20"
304
+ await client.disconnect();
305
+
306
+ // HTTP/SSE (remote)
307
+ const remote = new ConductorClient({
308
+ transport: 'http',
309
+ url: 'http://your-conductor-host:3000',
310
+ });
311
+ ```
312
+
313
+ ---
314
+
315
+ ## Supported clients
316
+
317
+ - [Claude Desktop](https://claude.ai/download)
318
+ - [Cursor](https://cursor.com)
319
+ - [Cline (VS Code)](https://marketplace.visualstudio.com/items?itemName=saoudrizwan.claude-dev)
320
+ - [Windsurf](https://codeium.com/windsurf)
321
+ - [Continue.dev](https://continue.dev)
322
+ - [Zed](https://zed.dev)
323
+ - [Aider](https://aider.chat)
324
+ - [Roo Code](https://roocode.com)
325
+ - VS Code (GitHub Copilot)
326
+ - Any client supporting MCP stdio transport
327
+
328
+ ---
329
+
330
+ ## Contributing
331
+
332
+ ```bash
333
+ git clone https://github.com/useconductor/conductor
154
334
  cd conductor
155
335
  npm install
156
- npm run build
157
- npm run dev # Watch mode
158
- npm test # Run tests
159
- npm run test:coverage # With coverage
160
- npm run lint # ESLint
161
- npm run format # Prettier
162
- ```
163
-
164
- ## CLI Commands
165
-
166
- | Command | Description |
167
- |---------|-------------|
168
- | `conductor mcp start` | Start MCP server (stdio) |
169
- | `conductor mcp setup` | Configure for Claude Desktop |
170
- | `conductor mcp status` | Show MCP status |
171
- | `conductor plugins list` | List all plugins |
172
- | `conductor plugins enable <name>` | Enable a plugin |
173
- | `conductor plugins disable <name>` | Disable a plugin |
174
- | `conductor ai setup` | Configure AI providers |
175
- | `conductor ai test` | Test AI provider |
336
+ npm run dev # Watch mode
337
+ npm test # Run tests (Vitest)
338
+ npm run typecheck # Type check
339
+ npm run lint # ESLint
340
+ ```
341
+
342
+ Requirements: Node >= 20.12, npm >= 9.
343
+
344
+ ---
176
345
 
177
346
  ## License
178
347
 
179
- Apache-2.0
348
+ Apache 2.0 — see [LICENSE](./LICENSE)
@@ -0,0 +1,40 @@
1
+ /**
2
+ * conductor audit — query and verify the tamper-evident audit log.
3
+ *
4
+ * Commands:
5
+ * conductor audit list — filter and display log entries
6
+ * conductor audit verify — verify SHA-256 chain integrity
7
+ * conductor audit tail — stream the log in real time
8
+ * conductor audit export — export entries to JSON or NDJSON
9
+ * conductor audit stats — show summary statistics
10
+ * conductor audit rotate — manually rotate the current log file
11
+ */
12
+ import type { Conductor } from '../../core/conductor.js';
13
+ export declare function auditList(conductor: Conductor, opts: {
14
+ actor?: string;
15
+ action?: string;
16
+ tool?: string;
17
+ result?: string;
18
+ since?: string;
19
+ until?: string;
20
+ limit?: string;
21
+ json?: boolean;
22
+ }): Promise<void>;
23
+ export declare function auditVerify(conductor: Conductor, opts: {
24
+ json?: boolean;
25
+ }): Promise<void>;
26
+ export declare function auditTail(conductor: Conductor, opts: {
27
+ json?: boolean;
28
+ lines?: string;
29
+ }): Promise<void>;
30
+ export declare function auditExport(conductor: Conductor, opts: {
31
+ output?: string;
32
+ format?: string;
33
+ since?: string;
34
+ until?: string;
35
+ }): Promise<void>;
36
+ export declare function auditStats(conductor: Conductor, opts: {
37
+ json?: boolean;
38
+ }): Promise<void>;
39
+ export declare function auditRotate(conductor: Conductor): Promise<void>;
40
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AA8CzD,wBAAsB,SAAS,CAC7B,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAiCf;AAID,wBAAsB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB/F;AAID,wBAAsB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwE7G;AAID,wBAAsB,WAAW,CAC/B,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE;IACJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,OAAO,CAAC,IAAI,CAAC,CAsBf;AAID,wBAAsB,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkD9F;AAID,wBAAsB,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAerE"}