@cliangdev/conductor 0.1.2

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 (130) hide show
  1. package/README.md +141 -0
  2. package/assets/claude/agents/researcher.md +147 -0
  3. package/assets/claude/commands/conductor/implement.md +393 -0
  4. package/assets/claude/commands/conductor/prd.md +291 -0
  5. package/assets/claude/skills/conductor-coder/SKILL.md +214 -0
  6. package/assets/claude/skills/ux-ui-design/SKILL.md +346 -0
  7. package/assets/claude/skills/ux-ui-design/references/design-tokens.md +359 -0
  8. package/dist/commands/config.d.ts +3 -0
  9. package/dist/commands/config.d.ts.map +1 -0
  10. package/dist/commands/config.js +106 -0
  11. package/dist/commands/config.js.map +1 -0
  12. package/dist/commands/dashboard.d.ts +9 -0
  13. package/dist/commands/dashboard.d.ts.map +1 -0
  14. package/dist/commands/dashboard.js +159 -0
  15. package/dist/commands/dashboard.js.map +1 -0
  16. package/dist/commands/doctor.d.ts +6 -0
  17. package/dist/commands/doctor.d.ts.map +1 -0
  18. package/dist/commands/doctor.js +126 -0
  19. package/dist/commands/doctor.js.map +1 -0
  20. package/dist/commands/init.d.ts +19 -0
  21. package/dist/commands/init.d.ts.map +1 -0
  22. package/dist/commands/init.js +276 -0
  23. package/dist/commands/init.js.map +1 -0
  24. package/dist/commands/login.d.ts +3 -0
  25. package/dist/commands/login.d.ts.map +1 -0
  26. package/dist/commands/login.js +161 -0
  27. package/dist/commands/login.js.map +1 -0
  28. package/dist/commands/logout.d.ts +3 -0
  29. package/dist/commands/logout.d.ts.map +1 -0
  30. package/dist/commands/logout.js +14 -0
  31. package/dist/commands/logout.js.map +1 -0
  32. package/dist/commands/mcp.d.ts +3 -0
  33. package/dist/commands/mcp.d.ts.map +1 -0
  34. package/dist/commands/mcp.js +10 -0
  35. package/dist/commands/mcp.js.map +1 -0
  36. package/dist/commands/start.d.ts +7 -0
  37. package/dist/commands/start.d.ts.map +1 -0
  38. package/dist/commands/start.js +74 -0
  39. package/dist/commands/start.js.map +1 -0
  40. package/dist/commands/status.d.ts +9 -0
  41. package/dist/commands/status.d.ts.map +1 -0
  42. package/dist/commands/status.js +126 -0
  43. package/dist/commands/status.js.map +1 -0
  44. package/dist/commands/stop.d.ts +4 -0
  45. package/dist/commands/stop.d.ts.map +1 -0
  46. package/dist/commands/stop.js +30 -0
  47. package/dist/commands/stop.js.map +1 -0
  48. package/dist/daemon/poller.d.ts +18 -0
  49. package/dist/daemon/poller.d.ts.map +1 -0
  50. package/dist/daemon/poller.js +96 -0
  51. package/dist/daemon/poller.js.map +1 -0
  52. package/dist/daemon/run-lifecycle.d.ts +21 -0
  53. package/dist/daemon/run-lifecycle.d.ts.map +1 -0
  54. package/dist/daemon/run-lifecycle.js +53 -0
  55. package/dist/daemon/run-lifecycle.js.map +1 -0
  56. package/dist/daemon/run-queue.d.ts +12 -0
  57. package/dist/daemon/run-queue.d.ts.map +1 -0
  58. package/dist/daemon/run-queue.js +59 -0
  59. package/dist/daemon/run-queue.js.map +1 -0
  60. package/dist/daemon/runner.d.ts +31 -0
  61. package/dist/daemon/runner.d.ts.map +1 -0
  62. package/dist/daemon/runner.js +91 -0
  63. package/dist/daemon/runner.js.map +1 -0
  64. package/dist/daemon/state.d.ts +22 -0
  65. package/dist/daemon/state.d.ts.map +1 -0
  66. package/dist/daemon/state.js +29 -0
  67. package/dist/daemon/state.js.map +1 -0
  68. package/dist/daemon/watcher.d.ts +26 -0
  69. package/dist/daemon/watcher.d.ts.map +1 -0
  70. package/dist/daemon/watcher.js +330 -0
  71. package/dist/daemon/watcher.js.map +1 -0
  72. package/dist/index.d.ts +3 -0
  73. package/dist/index.d.ts.map +1 -0
  74. package/dist/index.js +44 -0
  75. package/dist/index.js.map +1 -0
  76. package/dist/lib/api.d.ts +8 -0
  77. package/dist/lib/api.d.ts.map +1 -0
  78. package/dist/lib/api.js +55 -0
  79. package/dist/lib/api.js.map +1 -0
  80. package/dist/lib/config.d.ts +16 -0
  81. package/dist/lib/config.d.ts.map +1 -0
  82. package/dist/lib/config.js +48 -0
  83. package/dist/lib/config.js.map +1 -0
  84. package/dist/lib/next-steps.d.ts +2 -0
  85. package/dist/lib/next-steps.d.ts.map +1 -0
  86. package/dist/lib/next-steps.js +11 -0
  87. package/dist/lib/next-steps.js.map +1 -0
  88. package/dist/lib/oauth-server.d.ts +10 -0
  89. package/dist/lib/oauth-server.d.ts.map +1 -0
  90. package/dist/lib/oauth-server.js +67 -0
  91. package/dist/lib/oauth-server.js.map +1 -0
  92. package/dist/lib/plugin-assets.d.ts +19 -0
  93. package/dist/lib/plugin-assets.d.ts.map +1 -0
  94. package/dist/lib/plugin-assets.js +121 -0
  95. package/dist/lib/plugin-assets.js.map +1 -0
  96. package/dist/mcp/api.d.ts +7 -0
  97. package/dist/mcp/api.d.ts.map +1 -0
  98. package/dist/mcp/api.js +36 -0
  99. package/dist/mcp/api.js.map +1 -0
  100. package/dist/mcp/config.d.ts +11 -0
  101. package/dist/mcp/config.d.ts.map +1 -0
  102. package/dist/mcp/config.js +31 -0
  103. package/dist/mcp/config.js.map +1 -0
  104. package/dist/mcp/files.d.ts +9 -0
  105. package/dist/mcp/files.d.ts.map +1 -0
  106. package/dist/mcp/files.js +43 -0
  107. package/dist/mcp/files.js.map +1 -0
  108. package/dist/mcp/index.d.ts +3 -0
  109. package/dist/mcp/index.d.ts.map +1 -0
  110. package/dist/mcp/index.js +234 -0
  111. package/dist/mcp/index.js.map +1 -0
  112. package/dist/mcp/queue.d.ts +8 -0
  113. package/dist/mcp/queue.d.ts.map +1 -0
  114. package/dist/mcp/queue.js +19 -0
  115. package/dist/mcp/queue.js.map +1 -0
  116. package/dist/mcp/tools/comments.d.ts +6 -0
  117. package/dist/mcp/tools/comments.d.ts.map +1 -0
  118. package/dist/mcp/tools/comments.js +21 -0
  119. package/dist/mcp/tools/comments.js.map +1 -0
  120. package/dist/mcp/tools/documents.d.ts +11 -0
  121. package/dist/mcp/tools/documents.d.ts.map +1 -0
  122. package/dist/mcp/tools/documents.js +44 -0
  123. package/dist/mcp/tools/documents.js.map +1 -0
  124. package/dist/mcp/tools/issues.d.ts +23 -0
  125. package/dist/mcp/tools/issues.d.ts.map +1 -0
  126. package/dist/mcp/tools/issues.js +141 -0
  127. package/dist/mcp/tools/issues.js.map +1 -0
  128. package/package.json +40 -0
  129. package/scripts/postinstall.js +81 -0
  130. package/scripts/preuninstall.js +175 -0
@@ -0,0 +1,10 @@
1
+ import type { Ora } from 'ora';
2
+ export interface OAuthCallbackPayload {
3
+ apiKey: string;
4
+ projectId: string;
5
+ projectName: string;
6
+ email: string;
7
+ }
8
+ export declare function findAvailablePort(): Promise<number>;
9
+ export declare function waitForOAuthCallback(port: number, spinner: Ora, timeoutMs?: number): Promise<OAuthCallbackPayload>;
10
+ //# sourceMappingURL=oauth-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../src/lib/oauth-server.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAM9B,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;CACd;AAaD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAMzD;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,GAAG,EACZ,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,oBAAoB,CAAC,CAqD/B"}
@@ -0,0 +1,67 @@
1
+ import * as http from 'http';
2
+ import * as net from 'net';
3
+ const PORT_MIN = 3131;
4
+ const PORT_MAX = 3199;
5
+ const DEFAULT_TIMEOUT_MS = 120000;
6
+ function isPortAvailable(port) {
7
+ return new Promise((resolve) => {
8
+ const server = net.createServer();
9
+ server.once('error', () => resolve(false));
10
+ server.once('listening', () => {
11
+ server.close(() => resolve(true));
12
+ });
13
+ server.listen(port);
14
+ });
15
+ }
16
+ export async function findAvailablePort() {
17
+ for (let port = PORT_MIN; port <= PORT_MAX; port++) {
18
+ const available = await isPortAvailable(port);
19
+ if (available)
20
+ return port;
21
+ }
22
+ throw new Error(`No available port found in range ${PORT_MIN}-${PORT_MAX}`);
23
+ }
24
+ export async function waitForOAuthCallback(port, spinner, timeoutMs = DEFAULT_TIMEOUT_MS) {
25
+ return new Promise((resolve, reject) => {
26
+ const server = http.createServer((req, res) => {
27
+ const url = new URL(req.url ?? '/', `http://localhost:${port}`);
28
+ if (url.pathname !== '/oauth/callback') {
29
+ res.writeHead(404);
30
+ res.end('Not found');
31
+ return;
32
+ }
33
+ const apiKey = url.searchParams.get('apiKey');
34
+ const projectId = url.searchParams.get('projectId');
35
+ const projectName = url.searchParams.get('projectName');
36
+ const email = url.searchParams.get('email');
37
+ if (!apiKey || !projectId || !projectName || !email) {
38
+ res.writeHead(400);
39
+ res.end('Missing required parameters');
40
+ cleanup();
41
+ reject(new Error('OAuth callback missing required parameters'));
42
+ return;
43
+ }
44
+ res.writeHead(200, { 'Content-Type': 'text/html' });
45
+ res.end('<html><body><h1>Authentication successful!</h1><p>You can close this tab and return to the terminal.</p></body></html>');
46
+ cleanup();
47
+ resolve({ apiKey, projectId, projectName, email });
48
+ });
49
+ server.listen(port);
50
+ const timeout = setTimeout(() => {
51
+ cleanup();
52
+ reject(new Error('Authentication timed out after 120 seconds'));
53
+ }, timeoutMs);
54
+ const sigintHandler = () => {
55
+ cleanup();
56
+ spinner.fail('Cancelled');
57
+ process.exit(1);
58
+ };
59
+ process.on('SIGINT', sigintHandler);
60
+ function cleanup() {
61
+ clearTimeout(timeout);
62
+ process.off('SIGINT', sigintHandler);
63
+ server.close();
64
+ }
65
+ });
66
+ }
67
+ //# sourceMappingURL=oauth-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/lib/oauth-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare function getAssetSrcDir(): string;
2
+ export type InstallStatus = 'installed' | 'updated' | 'current';
3
+ /**
4
+ * Install or update conductor Claude plugin assets into targetDir.
5
+ *
6
+ * @param targetDir Destination .claude/ directory (e.g. ~/.claude/ or projectRoot/.claude/)
7
+ * @param assetSrcDir Source assets/claude/ directory from the CLI package
8
+ * @param mcpJsonPath Optional path to .mcp.json to merge; omit if caller handles it separately
9
+ */
10
+ export declare function installPluginAssets(targetDir: string, assetSrcDir: string, mcpJsonPath?: string): InstallStatus;
11
+ /**
12
+ * Return the plugin install status without writing any files.
13
+ * Used by `conductor doctor`.
14
+ */
15
+ export declare function getPluginInstallStatus(assetSrcDir: string, globalClaudeDir: string, localClaudeDir: string): {
16
+ location: 'global' | 'local' | 'none';
17
+ outdated: boolean;
18
+ };
19
+ //# sourceMappingURL=plugin-assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-assets.d.ts","sourceRoot":"","sources":["../../src/lib/plugin-assets.ts"],"names":[],"mappings":"AAiCA,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAmCD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,CAuCf;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB;IAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CA0B9D"}
@@ -0,0 +1,121 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ const PLUGIN_FILES = [
5
+ 'commands/conductor/prd.md',
6
+ 'commands/conductor/implement.md',
7
+ 'agents/researcher.md',
8
+ 'skills/ux-ui-design/SKILL.md',
9
+ 'skills/ux-ui-design/references/design-tokens.md',
10
+ 'skills/conductor-coder/SKILL.md',
11
+ ];
12
+ const CONDUCTOR_PERMISSIONS = ['mcp__conductor__*'];
13
+ export function getAssetSrcDir() {
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = path.dirname(__filename);
16
+ // Compiled to dist/lib/plugin-assets.js; assets/claude/ is at ../../assets/claude
17
+ return path.join(__dirname, '..', '..', 'assets', 'claude');
18
+ }
19
+ function mergeSettingsJson(settingsPath) {
20
+ let settings = {};
21
+ try {
22
+ settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
23
+ }
24
+ catch { /* file doesn't exist or invalid JSON — start fresh */ }
25
+ const existingAllow = settings.permissions?.allow ?? [];
26
+ const newAllow = [...new Set([...existingAllow, ...CONDUCTOR_PERMISSIONS])];
27
+ settings.permissions = {
28
+ ...(settings.permissions ?? {}),
29
+ allow: newAllow,
30
+ };
31
+ fs.mkdirSync(path.dirname(settingsPath), { recursive: true });
32
+ fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
33
+ }
34
+ function mergeMcpJson(mcpPath) {
35
+ let mcp = {};
36
+ try {
37
+ mcp = JSON.parse(fs.readFileSync(mcpPath, 'utf8'));
38
+ }
39
+ catch { /* file doesn't exist — start fresh */ }
40
+ mcp.mcpServers = {
41
+ ...(mcp.mcpServers ?? {}),
42
+ conductor: { command: 'conductor', args: ['mcp'] },
43
+ };
44
+ fs.mkdirSync(path.dirname(mcpPath), { recursive: true });
45
+ fs.writeFileSync(mcpPath, JSON.stringify(mcp, null, 2) + '\n', 'utf8');
46
+ }
47
+ /**
48
+ * Install or update conductor Claude plugin assets into targetDir.
49
+ *
50
+ * @param targetDir Destination .claude/ directory (e.g. ~/.claude/ or projectRoot/.claude/)
51
+ * @param assetSrcDir Source assets/claude/ directory from the CLI package
52
+ * @param mcpJsonPath Optional path to .mcp.json to merge; omit if caller handles it separately
53
+ */
54
+ export function installPluginAssets(targetDir, assetSrcDir, mcpJsonPath) {
55
+ let anyNew = false;
56
+ let anyUpdated = false;
57
+ for (const file of PLUGIN_FILES) {
58
+ const srcPath = path.join(assetSrcDir, file);
59
+ const destPath = path.join(targetDir, file);
60
+ let srcContent;
61
+ try {
62
+ srcContent = fs.readFileSync(srcPath, 'utf8');
63
+ }
64
+ catch {
65
+ continue;
66
+ }
67
+ let destContent = null;
68
+ try {
69
+ destContent = fs.readFileSync(destPath, 'utf8');
70
+ }
71
+ catch { /* doesn't exist yet */ }
72
+ if (destContent === null) {
73
+ anyNew = true;
74
+ fs.mkdirSync(path.dirname(destPath), { recursive: true });
75
+ fs.writeFileSync(destPath, srcContent, 'utf8');
76
+ }
77
+ else if (destContent !== srcContent) {
78
+ anyUpdated = true;
79
+ fs.writeFileSync(destPath, srcContent, 'utf8');
80
+ }
81
+ }
82
+ mergeSettingsJson(path.join(targetDir, 'settings.json'));
83
+ if (mcpJsonPath) {
84
+ mergeMcpJson(mcpJsonPath);
85
+ }
86
+ if (anyNew)
87
+ return 'installed';
88
+ if (anyUpdated)
89
+ return 'updated';
90
+ return 'current';
91
+ }
92
+ /**
93
+ * Return the plugin install status without writing any files.
94
+ * Used by `conductor doctor`.
95
+ */
96
+ export function getPluginInstallStatus(assetSrcDir, globalClaudeDir, localClaudeDir) {
97
+ const bundledPrdPath = path.join(assetSrcDir, 'commands', 'conductor', 'prd.md');
98
+ const globalPrdPath = path.join(globalClaudeDir, 'commands', 'conductor', 'prd.md');
99
+ const localPrdPath = path.join(localClaudeDir, 'commands', 'conductor', 'prd.md');
100
+ let installedPath = null;
101
+ let location = 'none';
102
+ if (fs.existsSync(globalPrdPath)) {
103
+ installedPath = globalPrdPath;
104
+ location = 'global';
105
+ }
106
+ else if (fs.existsSync(localPrdPath)) {
107
+ installedPath = localPrdPath;
108
+ location = 'local';
109
+ }
110
+ let outdated = false;
111
+ if (installedPath) {
112
+ try {
113
+ const installed = fs.readFileSync(installedPath, 'utf8');
114
+ const bundled = fs.readFileSync(bundledPrdPath, 'utf8');
115
+ outdated = installed !== bundled;
116
+ }
117
+ catch { /* assume current if can't compare */ }
118
+ }
119
+ return { location, outdated };
120
+ }
121
+ //# sourceMappingURL=plugin-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-assets.js","sourceRoot":"","sources":["../../src/lib/plugin-assets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Config } from './config.js';
2
+ export declare function apiGet<T>(urlPath: string, config: Config): Promise<T>;
3
+ export declare function apiPost<T>(urlPath: string, body: unknown, config: Config): Promise<T>;
4
+ export declare function apiPatch<T>(urlPath: string, body: unknown, config: Config): Promise<T>;
5
+ export declare function apiPut<T>(urlPath: string, body: unknown, config: Config): Promise<T>;
6
+ export declare function apiDelete(urlPath: string, config: Config): Promise<void>;
7
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/mcp/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAgCzC,wBAAsB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3E;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3F;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE5F;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE1F;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E"}
@@ -0,0 +1,36 @@
1
+ async function request(method, urlPath, body, config) {
2
+ const url = `${config.apiUrl}${urlPath}`;
3
+ const headers = {
4
+ Authorization: `Bearer ${config.apiKey}`,
5
+ 'Content-Type': 'application/json',
6
+ };
7
+ const response = await fetch(url, {
8
+ method,
9
+ headers,
10
+ body: body !== undefined ? JSON.stringify(body) : undefined,
11
+ });
12
+ if (!response.ok) {
13
+ const text = await response.text().catch(() => '');
14
+ throw new Error(`API error ${response.status}: ${text}`);
15
+ }
16
+ if (method === 'DELETE') {
17
+ return undefined;
18
+ }
19
+ return response.json();
20
+ }
21
+ export async function apiGet(urlPath, config) {
22
+ return request('GET', urlPath, undefined, config);
23
+ }
24
+ export async function apiPost(urlPath, body, config) {
25
+ return request('POST', urlPath, body, config);
26
+ }
27
+ export async function apiPatch(urlPath, body, config) {
28
+ return request('PATCH', urlPath, body, config);
29
+ }
30
+ export async function apiPut(urlPath, body, config) {
31
+ return request('PUT', urlPath, body, config);
32
+ }
33
+ export async function apiDelete(urlPath, config) {
34
+ await request('DELETE', urlPath, undefined, config);
35
+ }
36
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/mcp/api.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,OAAO,CACpB,MAAc,EACd,OAAe,EACf,IAAyB,EACzB,MAAc;IAEd,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE,CAAA;IACxC,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,MAAM,CAAC,MAAM,EAAE;QACxC,cAAc,EAAE,kBAAkB;KACnC,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM;QACN,OAAO;QACP,IAAI,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5D,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAClD,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,SAAc,CAAA;IACvB,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAA;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAI,OAAe,EAAE,MAAc;IAC7D,OAAO,OAAO,CAAI,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAI,OAAe,EAAE,IAAa,EAAE,MAAc;IAC7E,OAAO,OAAO,CAAI,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,OAAe,EAAE,IAAa,EAAE,MAAc;IAC9E,OAAO,OAAO,CAAI,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAI,OAAe,EAAE,IAAa,EAAE,MAAc;IAC5E,OAAO,OAAO,CAAI,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,MAAc;IAC7D,MAAM,OAAO,CAAO,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AAC3D,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface Config {
2
+ apiKey: string;
3
+ projectId: string;
4
+ projectName: string;
5
+ email: string;
6
+ apiUrl: string;
7
+ localPath?: string;
8
+ }
9
+ export declare const CONFIG_PATH: string;
10
+ export declare function getConfig(): Config;
11
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,eAAO,MAAM,WAAW,QAAuD,CAAA;AAc/E,wBAAgB,SAAS,IAAI,MAAM,CAclC"}
@@ -0,0 +1,31 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import * as os from 'os';
4
+ export const CONFIG_PATH = path.join(os.homedir(), '.conductor', 'config.json');
5
+ function isConfig(value) {
6
+ if (typeof value !== 'object' || value === null)
7
+ return false;
8
+ const obj = value;
9
+ return (typeof obj['apiKey'] === 'string' &&
10
+ typeof obj['projectId'] === 'string' &&
11
+ typeof obj['projectName'] === 'string' &&
12
+ typeof obj['email'] === 'string' &&
13
+ typeof obj['apiUrl'] === 'string');
14
+ }
15
+ export function getConfig() {
16
+ try {
17
+ const raw = fs.readFileSync(CONFIG_PATH, 'utf8');
18
+ const parsed = JSON.parse(raw);
19
+ if (!isConfig(parsed)) {
20
+ throw new Error('Invalid config: missing required fields');
21
+ }
22
+ return parsed;
23
+ }
24
+ catch (err) {
25
+ if (err instanceof Error && err.message.startsWith('Invalid config')) {
26
+ throw err;
27
+ }
28
+ throw new Error('Config not found — run conductor login');
29
+ }
30
+ }
31
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAWxB,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,aAAa,CAAC,CAAA;AAE/E,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,MAAM,GAAG,GAAG,KAAgC,CAAA;IAC5C,OAAO,CACL,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ;QACjC,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,QAAQ;QACpC,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,QAAQ;QACtC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ;QAChC,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAClC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAA;QACzC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAA;QAC5D,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrE,MAAM,GAAG,CAAA;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Config } from './config.js';
2
+ export declare function getLocalIssueDir(config: Config, issueId: string): string;
3
+ export declare function issueFilePath(config: Config, issueId: string): string;
4
+ export declare function documentFilePath(config: Config, issueId: string, filename: string): string;
5
+ export declare function writeIssueFile(config: Config, issueId: string, content: string): void;
6
+ export declare function readIssueFile(config: Config, issueId: string): string | null;
7
+ export declare function writeDocumentFile(config: Config, issueId: string, filename: string, content: string): void;
8
+ export declare function deleteDocumentFile(config: Config, issueId: string, filename: string): void;
9
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/mcp/files.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAKxE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAErE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIrF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAI1G;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAO1F"}
@@ -0,0 +1,43 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ export function getLocalIssueDir(config, issueId) {
4
+ if (!config.localPath) {
5
+ throw new Error('Run conductor init to set up local project directory');
6
+ }
7
+ return path.join(config.localPath, '.conductor', 'issues', issueId);
8
+ }
9
+ export function issueFilePath(config, issueId) {
10
+ return path.join(getLocalIssueDir(config, issueId), 'issue.md');
11
+ }
12
+ export function documentFilePath(config, issueId, filename) {
13
+ return path.join(getLocalIssueDir(config, issueId), filename);
14
+ }
15
+ export function writeIssueFile(config, issueId, content) {
16
+ const filePath = issueFilePath(config, issueId);
17
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
18
+ fs.writeFileSync(filePath, content, 'utf8');
19
+ }
20
+ export function readIssueFile(config, issueId) {
21
+ const filePath = issueFilePath(config, issueId);
22
+ try {
23
+ return fs.readFileSync(filePath, 'utf8');
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ export function writeDocumentFile(config, issueId, filename, content) {
30
+ const filePath = documentFilePath(config, issueId, filename);
31
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
32
+ fs.writeFileSync(filePath, content, 'utf8');
33
+ }
34
+ export function deleteDocumentFile(config, issueId, filename) {
35
+ const filePath = documentFilePath(config, issueId, filename);
36
+ try {
37
+ fs.unlinkSync(filePath);
38
+ }
39
+ catch {
40
+ // File may not exist; that's fine
41
+ }
42
+ }
43
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/mcp/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAG5B,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAAe;IAC9D,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAe;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,CAAA;AACjE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB;IAChF,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe,EAAE,OAAe;IAC7E,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,OAAe;IAC3D,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/C,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB,EAAE,OAAe;IAClG,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC5D,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB;IAClF,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC5D,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,kCAAkC;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export declare function runMcpServer(): Promise<void>;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":";AAkJA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAkHlD"}