@proletariat/cli 0.3.58 → 0.3.59

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 (189) hide show
  1. package/dist/commands/{spec → dashboard}/index.d.ts +4 -4
  2. package/dist/commands/dashboard/index.js +117 -0
  3. package/dist/commands/dashboard/index.js.map +1 -0
  4. package/dist/commands/execution/config.js +5 -4
  5. package/dist/commands/execution/config.js.map +1 -1
  6. package/dist/commands/execution/stop.js +4 -2
  7. package/dist/commands/execution/stop.js.map +1 -1
  8. package/dist/commands/execution/view.js +3 -0
  9. package/dist/commands/execution/view.js.map +1 -1
  10. package/dist/commands/init.d.ts +1 -0
  11. package/dist/commands/init.js +40 -3
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/mcp-server.js +1 -2
  14. package/dist/commands/mcp-server.js.map +1 -1
  15. package/dist/commands/{spec/link/index.d.ts → session/exec.d.ts} +5 -3
  16. package/dist/commands/session/exec.js +205 -0
  17. package/dist/commands/session/exec.js.map +1 -0
  18. package/dist/commands/session/index.js +12 -0
  19. package/dist/commands/session/index.js.map +1 -1
  20. package/dist/commands/{spec/delete.d.ts → session/inspect.d.ts} +3 -3
  21. package/dist/commands/session/inspect.js +316 -0
  22. package/dist/commands/session/inspect.js.map +1 -0
  23. package/dist/commands/session/peek.d.ts +15 -0
  24. package/dist/commands/session/peek.js +141 -8
  25. package/dist/commands/session/peek.js.map +1 -1
  26. package/dist/commands/session/poke.d.ts +4 -1
  27. package/dist/commands/session/poke.js +175 -20
  28. package/dist/commands/session/poke.js.map +1 -1
  29. package/dist/commands/{spec/link/depends.d.ts → session/restart.d.ts} +6 -4
  30. package/dist/commands/session/restart.js +320 -0
  31. package/dist/commands/session/restart.js.map +1 -0
  32. package/dist/commands/tools/add.d.ts +20 -0
  33. package/dist/commands/tools/add.js +129 -0
  34. package/dist/commands/tools/add.js.map +1 -0
  35. package/dist/commands/tools/check.d.ts +10 -0
  36. package/dist/commands/tools/check.js +75 -0
  37. package/dist/commands/tools/check.js.map +1 -0
  38. package/dist/commands/tools/detect.d.ts +11 -0
  39. package/dist/commands/tools/detect.js +107 -0
  40. package/dist/commands/tools/detect.js.map +1 -0
  41. package/dist/commands/tools/index.d.ts +11 -0
  42. package/dist/commands/tools/index.js +87 -0
  43. package/dist/commands/tools/index.js.map +1 -0
  44. package/dist/commands/tools/remove.d.ts +13 -0
  45. package/dist/commands/tools/remove.js +55 -0
  46. package/dist/commands/tools/remove.js.map +1 -0
  47. package/dist/commands/{spec/view.d.ts → trello/configure.d.ts} +6 -6
  48. package/dist/commands/trello/configure.js +259 -0
  49. package/dist/commands/trello/configure.js.map +1 -0
  50. package/dist/commands/{spec/plan.d.ts → trello/import.d.ts} +3 -5
  51. package/dist/commands/trello/import.js +241 -0
  52. package/dist/commands/trello/import.js.map +1 -0
  53. package/dist/commands/{spec/ticket.d.ts → trello/sync.d.ts} +5 -6
  54. package/dist/commands/trello/sync.js +190 -0
  55. package/dist/commands/trello/sync.js.map +1 -0
  56. package/dist/commands/work/start.d.ts +1 -0
  57. package/dist/commands/work/start.js +17 -39
  58. package/dist/commands/work/start.js.map +1 -1
  59. package/dist/lib/dashboard/data.d.ts +64 -0
  60. package/dist/lib/dashboard/data.js +259 -0
  61. package/dist/lib/dashboard/data.js.map +1 -0
  62. package/dist/lib/dashboard/html.d.ts +7 -0
  63. package/dist/lib/dashboard/html.js +682 -0
  64. package/dist/lib/dashboard/html.js.map +1 -0
  65. package/dist/lib/dashboard/server.d.ts +20 -0
  66. package/dist/lib/dashboard/server.js +114 -0
  67. package/dist/lib/dashboard/server.js.map +1 -0
  68. package/dist/lib/execution/config.d.ts +8 -0
  69. package/dist/lib/execution/config.js +83 -4
  70. package/dist/lib/execution/config.js.map +1 -1
  71. package/dist/lib/execution/runners.d.ts +36 -3
  72. package/dist/lib/execution/runners.js +216 -35
  73. package/dist/lib/execution/runners.js.map +1 -1
  74. package/dist/lib/execution/spawner.d.ts +2 -0
  75. package/dist/lib/execution/spawner.js +22 -31
  76. package/dist/lib/execution/spawner.js.map +1 -1
  77. package/dist/lib/execution/types.d.ts +26 -5
  78. package/dist/lib/execution/types.js +24 -0
  79. package/dist/lib/execution/types.js.map +1 -1
  80. package/dist/lib/external-issues/adapters.d.ts +17 -0
  81. package/dist/lib/external-issues/adapters.js +88 -0
  82. package/dist/lib/external-issues/adapters.js.map +1 -1
  83. package/dist/lib/external-issues/mapping-store.js +1 -1
  84. package/dist/lib/external-issues/trello.d.ts +80 -0
  85. package/dist/lib/external-issues/trello.js +266 -0
  86. package/dist/lib/external-issues/trello.js.map +1 -0
  87. package/dist/lib/external-issues/types.d.ts +3 -3
  88. package/dist/lib/external-issues/types.js +1 -1
  89. package/dist/lib/external-issues/types.js.map +1 -1
  90. package/dist/lib/linear/client.d.ts +4 -3
  91. package/dist/lib/linear/client.js +185 -122
  92. package/dist/lib/linear/client.js.map +1 -1
  93. package/dist/lib/mcp/tools/cli-passthrough.js +77 -0
  94. package/dist/lib/mcp/tools/cli-passthrough.js.map +1 -1
  95. package/dist/lib/mcp/tools/index.d.ts +0 -1
  96. package/dist/lib/mcp/tools/index.js +0 -1
  97. package/dist/lib/mcp/tools/index.js.map +1 -1
  98. package/dist/lib/onboarding/detect-tools.d.ts +15 -0
  99. package/dist/lib/onboarding/detect-tools.js +44 -0
  100. package/dist/lib/onboarding/detect-tools.js.map +1 -0
  101. package/dist/lib/onboarding/index.d.ts +2 -0
  102. package/dist/lib/onboarding/index.js +3 -0
  103. package/dist/lib/onboarding/index.js.map +1 -0
  104. package/dist/lib/onboarding/wizard.d.ts +25 -0
  105. package/dist/lib/onboarding/wizard.js +156 -0
  106. package/dist/lib/onboarding/wizard.js.map +1 -0
  107. package/dist/lib/pmo/schema.d.ts +2 -1
  108. package/dist/lib/pmo/schema.js +3 -1
  109. package/dist/lib/pmo/schema.js.map +1 -1
  110. package/dist/lib/runners/claude-code-runner.js +6 -0
  111. package/dist/lib/runners/claude-code-runner.js.map +1 -1
  112. package/dist/lib/tool-registry/detect.d.ts +20 -0
  113. package/dist/lib/tool-registry/detect.js +95 -0
  114. package/dist/lib/tool-registry/detect.js.map +1 -0
  115. package/dist/lib/tool-registry/index.d.ts +10 -0
  116. package/dist/lib/tool-registry/index.js +13 -0
  117. package/dist/lib/tool-registry/index.js.map +1 -0
  118. package/dist/lib/tool-registry/policy.d.ts +32 -0
  119. package/dist/lib/tool-registry/policy.js +97 -0
  120. package/dist/lib/tool-registry/policy.js.map +1 -0
  121. package/dist/lib/tool-registry/registry.d.ts +42 -0
  122. package/dist/lib/tool-registry/registry.js +120 -0
  123. package/dist/lib/tool-registry/registry.js.map +1 -0
  124. package/dist/lib/tool-registry/spawn.d.ts +50 -0
  125. package/dist/lib/tool-registry/spawn.js +103 -0
  126. package/dist/lib/tool-registry/spawn.js.map +1 -0
  127. package/dist/lib/tool-registry/types.d.ts +56 -0
  128. package/dist/lib/tool-registry/types.js +109 -0
  129. package/dist/lib/tool-registry/types.js.map +1 -0
  130. package/dist/lib/trello/client.d.ts +23 -0
  131. package/dist/lib/trello/client.js +114 -0
  132. package/dist/lib/trello/client.js.map +1 -0
  133. package/dist/lib/trello/config.d.ts +55 -0
  134. package/dist/lib/trello/config.js +127 -0
  135. package/dist/lib/trello/config.js.map +1 -0
  136. package/dist/lib/trello/index.d.ts +5 -0
  137. package/dist/lib/trello/index.js +5 -0
  138. package/dist/lib/trello/index.js.map +1 -0
  139. package/dist/lib/trello/mapper.d.ts +13 -0
  140. package/dist/lib/trello/mapper.js +71 -0
  141. package/dist/lib/trello/mapper.js.map +1 -0
  142. package/dist/lib/trello/sync.d.ts +13 -0
  143. package/dist/lib/trello/sync.js +38 -0
  144. package/dist/lib/trello/sync.js.map +1 -0
  145. package/dist/lib/trello/types.d.ts +53 -0
  146. package/dist/lib/trello/types.js +2 -0
  147. package/dist/lib/trello/types.js.map +1 -0
  148. package/dist/lib/work-source/client.js +17 -0
  149. package/dist/lib/work-source/client.js.map +1 -1
  150. package/dist/lib/work-source/config.d.ts +1 -1
  151. package/dist/lib/work-source/config.js +11 -1
  152. package/dist/lib/work-source/config.js.map +1 -1
  153. package/oclif.manifest.json +3460 -3476
  154. package/package.json +6 -2
  155. package/dist/commands/spec/create.d.ts +0 -20
  156. package/dist/commands/spec/create.js +0 -171
  157. package/dist/commands/spec/create.js.map +0 -1
  158. package/dist/commands/spec/delete.js +0 -112
  159. package/dist/commands/spec/delete.js.map +0 -1
  160. package/dist/commands/spec/edit.d.ts +0 -23
  161. package/dist/commands/spec/edit.js +0 -262
  162. package/dist/commands/spec/edit.js.map +0 -1
  163. package/dist/commands/spec/index.js +0 -88
  164. package/dist/commands/spec/index.js.map +0 -1
  165. package/dist/commands/spec/link/depends.js +0 -87
  166. package/dist/commands/spec/link/depends.js.map +0 -1
  167. package/dist/commands/spec/link/index.js +0 -93
  168. package/dist/commands/spec/link/index.js.map +0 -1
  169. package/dist/commands/spec/link/remove.d.ts +0 -18
  170. package/dist/commands/spec/link/remove.js +0 -91
  171. package/dist/commands/spec/link/remove.js.map +0 -1
  172. package/dist/commands/spec/list.d.ts +0 -14
  173. package/dist/commands/spec/list.js +0 -101
  174. package/dist/commands/spec/list.js.map +0 -1
  175. package/dist/commands/spec/plan.js +0 -102
  176. package/dist/commands/spec/plan.js.map +0 -1
  177. package/dist/commands/spec/ticket.js +0 -144
  178. package/dist/commands/spec/ticket.js.map +0 -1
  179. package/dist/commands/spec/view.js +0 -202
  180. package/dist/commands/spec/view.js.map +0 -1
  181. package/dist/lib/mcp/tools/spec.d.ts +0 -6
  182. package/dist/lib/mcp/tools/spec.js +0 -197
  183. package/dist/lib/mcp/tools/spec.js.map +0 -1
  184. package/dist/lib/pmo/spec-parser.d.ts +0 -25
  185. package/dist/lib/pmo/spec-parser.js +0 -206
  186. package/dist/lib/pmo/spec-parser.js.map +0 -1
  187. package/dist/lib/pmo/spec-types.d.ts +0 -43
  188. package/dist/lib/pmo/spec-types.js +0 -8
  189. package/dist/lib/pmo/spec-types.js.map +0 -1
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Tool Policy — Per-agent access control for tools
3
+ *
4
+ * Policy profiles are defined in YAML files under .proletariat/policies/.
5
+ * Each profile specifies which MCP servers and CLI tools an agent can access.
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import yaml from 'js-yaml';
10
+ import { BUILTIN_PRLT_TOOL } from './types.js';
11
+ const POLICIES_DIR = 'policies';
12
+ /**
13
+ * Get path to the policies directory.
14
+ */
15
+ export function getPoliciesDir(hqPath) {
16
+ return path.join(hqPath, '.proletariat', POLICIES_DIR);
17
+ }
18
+ /**
19
+ * Load a tool policy by name.
20
+ * Looks in .proletariat/policies/{name}.yaml
21
+ */
22
+ export function loadToolPolicy(hqPath, policyName) {
23
+ const policyPath = path.join(getPoliciesDir(hqPath), `${policyName}.yaml`);
24
+ if (!fs.existsSync(policyPath)) {
25
+ return null;
26
+ }
27
+ try {
28
+ const content = fs.readFileSync(policyPath, 'utf-8');
29
+ const parsed = yaml.load(content);
30
+ return parsed?.tools ?? null;
31
+ }
32
+ catch {
33
+ return null;
34
+ }
35
+ }
36
+ /**
37
+ * Save a tool policy.
38
+ */
39
+ export function saveToolPolicy(hqPath, policyName, policy) {
40
+ const policiesDir = getPoliciesDir(hqPath);
41
+ fs.mkdirSync(policiesDir, { recursive: true });
42
+ const policyPath = path.join(policiesDir, `${policyName}.yaml`);
43
+ const content = yaml.dump({ tools: policy }, {
44
+ indent: 2,
45
+ lineWidth: 120,
46
+ noRefs: true,
47
+ });
48
+ fs.writeFileSync(policyPath, content, 'utf-8');
49
+ }
50
+ /**
51
+ * List all available policy profiles.
52
+ */
53
+ export function listPolicies(hqPath) {
54
+ const policiesDir = getPoliciesDir(hqPath);
55
+ if (!fs.existsSync(policiesDir))
56
+ return [];
57
+ return fs.readdirSync(policiesDir)
58
+ .filter(f => f.endsWith('.yaml') || f.endsWith('.yml'))
59
+ .map(f => f.replace(/\.(yaml|yml)$/, ''));
60
+ }
61
+ /**
62
+ * Filter registry by policy — returns only the tools the agent is allowed to use.
63
+ * If no policy is provided, returns all registered tools.
64
+ */
65
+ export function filterByPolicy(registry, policy) {
66
+ const allMcp = Object.entries(registry['mcp-servers']);
67
+ const allCli = Object.entries(registry['cli-tools']);
68
+ // No policy = full access
69
+ if (!policy) {
70
+ return {
71
+ mcpServers: allMcp.map(([name, config]) => ({ name, ...config })),
72
+ cliTools: [
73
+ ...allCli.map(([name, config]) => ({ name, ...config })),
74
+ // Always include prlt
75
+ ...(allCli.some(([name]) => name === 'prlt') ? [] : [BUILTIN_PRLT_TOOL]),
76
+ ],
77
+ };
78
+ }
79
+ // Filter MCP servers
80
+ const allowedMcp = new Set(policy.mcp || []);
81
+ const mcpServers = allMcp
82
+ .filter(([name]) => allowedMcp.has(name))
83
+ .map(([name, config]) => ({ name, ...config }));
84
+ // Filter CLI tools
85
+ const allowedCli = new Set(policy.cli || []);
86
+ // Always allow prlt
87
+ allowedCli.add('prlt');
88
+ const cliTools = allCli
89
+ .filter(([name]) => allowedCli.has(name))
90
+ .map(([name, config]) => ({ name, ...config }));
91
+ // Ensure prlt is always present
92
+ if (!cliTools.some(t => t.name === 'prlt')) {
93
+ cliTools.push(BUILTIN_PRLT_TOOL);
94
+ }
95
+ return { mcpServers, cliTools };
96
+ }
97
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/lib/tool-registry/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Tool Registry — Load, save, and manage tools.yaml config
3
+ *
4
+ * The tools.yaml file lives at .proletariat/tools.yaml in the HQ root.
5
+ * It registers MCP servers and CLI tools that agents can use.
6
+ */
7
+ import type { ToolRegistry, McpServerConfig, CliToolConfig } from './types.js';
8
+ /**
9
+ * Get the path to the tools.yaml file for a given HQ root.
10
+ */
11
+ export declare function getToolsConfigPath(hqPath: string): string;
12
+ /**
13
+ * Load the tool registry from .proletariat/tools.yaml.
14
+ * Returns an empty registry if the file doesn't exist.
15
+ */
16
+ export declare function loadToolRegistry(hqPath: string): ToolRegistry;
17
+ /**
18
+ * Save the tool registry to .proletariat/tools.yaml.
19
+ */
20
+ export declare function saveToolRegistry(hqPath: string, registry: ToolRegistry): void;
21
+ /**
22
+ * Get all MCP servers from the registry, hydrated with their names.
23
+ */
24
+ export declare function getMcpServers(registry: ToolRegistry): McpServerConfig[];
25
+ /**
26
+ * Get all CLI tools from the registry, hydrated with their names.
27
+ * Always includes the built-in prlt tool.
28
+ */
29
+ export declare function getCliTools(registry: ToolRegistry): CliToolConfig[];
30
+ /**
31
+ * Add an MCP server to the registry.
32
+ */
33
+ export declare function addMcpServer(hqPath: string, name: string, config: Omit<McpServerConfig, 'name'>): void;
34
+ /**
35
+ * Add a CLI tool to the registry.
36
+ */
37
+ export declare function addCliTool(hqPath: string, name: string, config: Omit<CliToolConfig, 'name'>): void;
38
+ /**
39
+ * Remove a tool (MCP or CLI) from the registry.
40
+ * Returns true if the tool was found and removed.
41
+ */
42
+ export declare function removeTool(hqPath: string, name: string): boolean;
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Tool Registry — Load, save, and manage tools.yaml config
3
+ *
4
+ * The tools.yaml file lives at .proletariat/tools.yaml in the HQ root.
5
+ * It registers MCP servers and CLI tools that agents can use.
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import yaml from 'js-yaml';
10
+ import { BUILTIN_PRLT_TOOL } from './types.js';
11
+ const TOOLS_FILENAME = 'tools.yaml';
12
+ /**
13
+ * Get the path to the tools.yaml file for a given HQ root.
14
+ */
15
+ export function getToolsConfigPath(hqPath) {
16
+ return path.join(hqPath, '.proletariat', TOOLS_FILENAME);
17
+ }
18
+ /**
19
+ * Load the tool registry from .proletariat/tools.yaml.
20
+ * Returns an empty registry if the file doesn't exist.
21
+ */
22
+ export function loadToolRegistry(hqPath) {
23
+ const configPath = getToolsConfigPath(hqPath);
24
+ const empty = {
25
+ 'mcp-servers': {},
26
+ 'cli-tools': {},
27
+ };
28
+ if (!fs.existsSync(configPath)) {
29
+ return empty;
30
+ }
31
+ try {
32
+ const content = fs.readFileSync(configPath, 'utf-8');
33
+ const parsed = yaml.load(content);
34
+ return {
35
+ 'mcp-servers': parsed?.['mcp-servers'] ?? {},
36
+ 'cli-tools': parsed?.['cli-tools'] ?? {},
37
+ };
38
+ }
39
+ catch {
40
+ return empty;
41
+ }
42
+ }
43
+ /**
44
+ * Save the tool registry to .proletariat/tools.yaml.
45
+ */
46
+ export function saveToolRegistry(hqPath, registry) {
47
+ const configPath = getToolsConfigPath(hqPath);
48
+ const dir = path.dirname(configPath);
49
+ fs.mkdirSync(dir, { recursive: true });
50
+ const content = yaml.dump(registry, {
51
+ indent: 2,
52
+ lineWidth: 120,
53
+ noRefs: true,
54
+ sortKeys: true,
55
+ });
56
+ fs.writeFileSync(configPath, content, 'utf-8');
57
+ }
58
+ /**
59
+ * Get all MCP servers from the registry, hydrated with their names.
60
+ */
61
+ export function getMcpServers(registry) {
62
+ return Object.entries(registry['mcp-servers']).map(([name, config]) => ({
63
+ name,
64
+ ...config,
65
+ }));
66
+ }
67
+ /**
68
+ * Get all CLI tools from the registry, hydrated with their names.
69
+ * Always includes the built-in prlt tool.
70
+ */
71
+ export function getCliTools(registry) {
72
+ const tools = Object.entries(registry['cli-tools']).map(([name, config]) => ({
73
+ name,
74
+ ...config,
75
+ }));
76
+ // Ensure prlt is always present
77
+ if (!tools.some(t => t.name === 'prlt')) {
78
+ tools.push(BUILTIN_PRLT_TOOL);
79
+ }
80
+ return tools;
81
+ }
82
+ /**
83
+ * Add an MCP server to the registry.
84
+ */
85
+ export function addMcpServer(hqPath, name, config) {
86
+ const registry = loadToolRegistry(hqPath);
87
+ registry['mcp-servers'][name] = config;
88
+ saveToolRegistry(hqPath, registry);
89
+ }
90
+ /**
91
+ * Add a CLI tool to the registry.
92
+ */
93
+ export function addCliTool(hqPath, name, config) {
94
+ const registry = loadToolRegistry(hqPath);
95
+ registry['cli-tools'][name] = config;
96
+ saveToolRegistry(hqPath, registry);
97
+ }
98
+ /**
99
+ * Remove a tool (MCP or CLI) from the registry.
100
+ * Returns true if the tool was found and removed.
101
+ */
102
+ export function removeTool(hqPath, name) {
103
+ const registry = loadToolRegistry(hqPath);
104
+ if (name in registry['mcp-servers']) {
105
+ delete registry['mcp-servers'][name];
106
+ saveToolRegistry(hqPath, registry);
107
+ return true;
108
+ }
109
+ if (name in registry['cli-tools']) {
110
+ const tool = registry['cli-tools'][name];
111
+ if (tool.builtin) {
112
+ return false; // Can't remove built-in tools
113
+ }
114
+ delete registry['cli-tools'][name];
115
+ saveToolRegistry(hqPath, registry);
116
+ return true;
117
+ }
118
+ return false;
119
+ }
120
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/lib/tool-registry/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Tool Registry — Spawn-time integration
3
+ *
4
+ * At agent spawn time:
5
+ * 1. Load tool registry and policy profile
6
+ * 2. Filter tools by policy
7
+ * 3. Generate mcp-config.json for MCP servers (passed to Claude Code via --mcp-config)
8
+ * 4. Build tools section for agent prompt (CLI tools + MCP descriptions)
9
+ */
10
+ import type { McpServerConfig, CliToolConfig } from './types.js';
11
+ interface McpConfigEntry {
12
+ url?: string;
13
+ command?: string;
14
+ args?: string[];
15
+ env?: Record<string, string>;
16
+ }
17
+ interface McpConfigJson {
18
+ mcpServers: Record<string, McpConfigEntry>;
19
+ }
20
+ /**
21
+ * Generate mcp-config.json content from a list of MCP servers.
22
+ * This JSON is passed to Claude Code via the --mcp-config flag.
23
+ */
24
+ export declare function generateMcpConfig(servers: McpServerConfig[]): McpConfigJson;
25
+ /**
26
+ * Write mcp-config.json to a temporary location and return the path.
27
+ * Returns null if there are no MCP servers to configure.
28
+ */
29
+ export declare function writeMcpConfigFile(servers: McpServerConfig[], outputDir: string): string | null;
30
+ /**
31
+ * Build the AVAILABLE TOOLS section for agent prompts.
32
+ * Describes MCP servers and CLI tools the agent has access to.
33
+ */
34
+ export declare function buildToolsPromptSection(mcpServers: McpServerConfig[], cliTools: CliToolConfig[]): string;
35
+ export interface SpawnToolsResult {
36
+ mcpConfigPath: string | null;
37
+ promptSection: string;
38
+ mcpServers: McpServerConfig[];
39
+ cliTools: CliToolConfig[];
40
+ }
41
+ /**
42
+ * Resolve tools for an agent spawn.
43
+ * Loads registry, applies policy, generates MCP config, builds prompt section.
44
+ *
45
+ * @param hqPath - HQ root path
46
+ * @param policyName - Optional policy profile name (e.g., "code-agent")
47
+ * @param outputDir - Directory for writing mcp-config.json
48
+ */
49
+ export declare function resolveToolsForSpawn(hqPath: string, policyName: string | undefined, outputDir: string): SpawnToolsResult;
50
+ export {};
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Tool Registry — Spawn-time integration
3
+ *
4
+ * At agent spawn time:
5
+ * 1. Load tool registry and policy profile
6
+ * 2. Filter tools by policy
7
+ * 3. Generate mcp-config.json for MCP servers (passed to Claude Code via --mcp-config)
8
+ * 4. Build tools section for agent prompt (CLI tools + MCP descriptions)
9
+ */
10
+ import * as fs from 'node:fs';
11
+ import * as path from 'node:path';
12
+ import { loadToolRegistry } from './registry.js';
13
+ import { loadToolPolicy, filterByPolicy } from './policy.js';
14
+ /**
15
+ * Generate mcp-config.json content from a list of MCP servers.
16
+ * This JSON is passed to Claude Code via the --mcp-config flag.
17
+ */
18
+ export function generateMcpConfig(servers) {
19
+ const mcpServers = {};
20
+ for (const server of servers) {
21
+ const entry = {};
22
+ if (server.url) {
23
+ entry.url = server.url;
24
+ }
25
+ if (server.command) {
26
+ const parts = server.command.split(/\s+/);
27
+ entry.command = parts[0];
28
+ if (parts.length > 1 || server.args) {
29
+ entry.args = [...parts.slice(1), ...(server.args || [])];
30
+ }
31
+ }
32
+ if (server.auth) {
33
+ // Resolve ${ENV_VAR} references
34
+ const envVar = server.auth.replace(/^\$\{(.+)\}$/, '$1');
35
+ const value = process.env[envVar];
36
+ if (value) {
37
+ entry.env = { [envVar]: value };
38
+ }
39
+ }
40
+ mcpServers[server.name] = entry;
41
+ }
42
+ return { mcpServers };
43
+ }
44
+ /**
45
+ * Write mcp-config.json to a temporary location and return the path.
46
+ * Returns null if there are no MCP servers to configure.
47
+ */
48
+ export function writeMcpConfigFile(servers, outputDir) {
49
+ if (servers.length === 0)
50
+ return null;
51
+ const config = generateMcpConfig(servers);
52
+ fs.mkdirSync(outputDir, { recursive: true });
53
+ const configPath = path.join(outputDir, 'mcp-config.json');
54
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf-8');
55
+ return configPath;
56
+ }
57
+ // =============================================================================
58
+ // Agent Prompt Injection
59
+ // =============================================================================
60
+ /**
61
+ * Build the AVAILABLE TOOLS section for agent prompts.
62
+ * Describes MCP servers and CLI tools the agent has access to.
63
+ */
64
+ export function buildToolsPromptSection(mcpServers, cliTools) {
65
+ if (mcpServers.length === 0 && cliTools.length === 0)
66
+ return '';
67
+ let section = `## Available Tools\n\n`;
68
+ if (mcpServers.length > 0) {
69
+ section += `**MCP Servers:**\n`;
70
+ for (const server of mcpServers) {
71
+ section += `- ${server.name} (${server.description})\n`;
72
+ }
73
+ section += `\n`;
74
+ }
75
+ if (cliTools.length > 0) {
76
+ section += `**CLI Tools:**\n`;
77
+ for (const tool of cliTools) {
78
+ section += `- ${tool.command} — ${tool.description}\n`;
79
+ }
80
+ section += `\n`;
81
+ }
82
+ section += `Use these tools for external interactions. Prefer registered tools over raw curl or API calls.\n\n`;
83
+ return section;
84
+ }
85
+ /**
86
+ * Resolve tools for an agent spawn.
87
+ * Loads registry, applies policy, generates MCP config, builds prompt section.
88
+ *
89
+ * @param hqPath - HQ root path
90
+ * @param policyName - Optional policy profile name (e.g., "code-agent")
91
+ * @param outputDir - Directory for writing mcp-config.json
92
+ */
93
+ export function resolveToolsForSpawn(hqPath, policyName, outputDir) {
94
+ const registry = loadToolRegistry(hqPath);
95
+ const policy = policyName
96
+ ? loadToolPolicy(hqPath, policyName)
97
+ : null;
98
+ const { mcpServers, cliTools } = filterByPolicy(registry, policy);
99
+ const mcpConfigPath = writeMcpConfigFile(mcpServers, outputDir);
100
+ const promptSection = buildToolsPromptSection(mcpServers, cliTools);
101
+ return { mcpConfigPath, promptSection, mcpServers, cliTools };
102
+ }
103
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../../src/lib/tool-registry/spawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Tool Registry Types
3
+ *
4
+ * Types for MCP servers and CLI tools as pluggable integration providers
5
+ * with per-agent access control via policy profiles.
6
+ */
7
+ export interface McpServerConfig {
8
+ /** Server name (unique identifier) */
9
+ name: string;
10
+ /** URL for remote MCP servers */
11
+ url?: string;
12
+ /** Command for local MCP servers (e.g., "node ./tools/my-mcp-server.js") */
13
+ command?: string;
14
+ /** Args for local MCP server command */
15
+ args?: string[];
16
+ /** Environment variable name for auth token (e.g., "${ARCADE_API_KEY}") */
17
+ auth?: string;
18
+ /** Human-readable description */
19
+ description: string;
20
+ }
21
+ export interface CliToolConfig {
22
+ /** Tool name (unique identifier) */
23
+ name: string;
24
+ /** The command/binary to invoke */
25
+ command: string;
26
+ /** Human-readable description */
27
+ description: string;
28
+ /** Shell command to detect if tool is installed (e.g., "which gh") */
29
+ detect?: string;
30
+ /** Shell command to install the tool (e.g., "brew install gh") */
31
+ install?: string;
32
+ /** Whether this is a built-in tool (always available, no config needed) */
33
+ builtin?: boolean;
34
+ }
35
+ export interface ToolRegistry {
36
+ 'mcp-servers': Record<string, Omit<McpServerConfig, 'name'>>;
37
+ 'cli-tools': Record<string, Omit<CliToolConfig, 'name'>>;
38
+ }
39
+ export interface ToolPolicy {
40
+ mcp: string[];
41
+ cli: string[];
42
+ /** Per-MCP-server fine-grained access (e.g., arcade: { allow: ['asana', 'slack'] }) */
43
+ [serverName: string]: string[] | {
44
+ allow: string[];
45
+ } | undefined;
46
+ }
47
+ export interface ToolCheckResult {
48
+ name: string;
49
+ type: 'mcp' | 'cli';
50
+ available: boolean;
51
+ error?: string;
52
+ installHint?: string;
53
+ }
54
+ export declare const COMMON_CLI_TOOLS: CliToolConfig[];
55
+ /** Default built-in tool (prlt itself) */
56
+ export declare const BUILTIN_PRLT_TOOL: CliToolConfig;
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Tool Registry Types
3
+ *
4
+ * Types for MCP servers and CLI tools as pluggable integration providers
5
+ * with per-agent access control via policy profiles.
6
+ */
7
+ // =============================================================================
8
+ // Common CLI tools for auto-detection
9
+ // =============================================================================
10
+ export const COMMON_CLI_TOOLS = [
11
+ {
12
+ name: 'gh',
13
+ command: 'gh',
14
+ description: 'GitHub CLI — PRs, issues, releases',
15
+ detect: 'which gh',
16
+ install: 'brew install gh',
17
+ },
18
+ {
19
+ name: 'jq',
20
+ command: 'jq',
21
+ description: 'JSON processor',
22
+ detect: 'which jq',
23
+ install: 'brew install jq',
24
+ },
25
+ {
26
+ name: 'ffmpeg',
27
+ command: 'ffmpeg',
28
+ description: 'Video/audio processing',
29
+ detect: 'which ffmpeg',
30
+ install: 'brew install ffmpeg',
31
+ },
32
+ {
33
+ name: 'aws',
34
+ command: 'aws',
35
+ description: 'AWS CLI',
36
+ detect: 'which aws',
37
+ install: 'brew install awscli',
38
+ },
39
+ {
40
+ name: 'gcloud',
41
+ command: 'gcloud',
42
+ description: 'Google Cloud CLI',
43
+ detect: 'which gcloud',
44
+ },
45
+ {
46
+ name: 'kubectl',
47
+ command: 'kubectl',
48
+ description: 'Kubernetes CLI',
49
+ detect: 'which kubectl',
50
+ install: 'brew install kubectl',
51
+ },
52
+ {
53
+ name: 'terraform',
54
+ command: 'terraform',
55
+ description: 'Infrastructure as Code',
56
+ detect: 'which terraform',
57
+ install: 'brew install terraform',
58
+ },
59
+ {
60
+ name: 'docker',
61
+ command: 'docker',
62
+ description: 'Container runtime',
63
+ detect: 'which docker',
64
+ install: 'brew install --cask docker',
65
+ },
66
+ {
67
+ name: 'node',
68
+ command: 'node',
69
+ description: 'Node.js runtime',
70
+ detect: 'which node',
71
+ install: 'brew install node',
72
+ },
73
+ {
74
+ name: 'python3',
75
+ command: 'python3',
76
+ description: 'Python 3 runtime',
77
+ detect: 'which python3',
78
+ install: 'brew install python',
79
+ },
80
+ {
81
+ name: 'curl',
82
+ command: 'curl',
83
+ description: 'URL transfer tool',
84
+ detect: 'which curl',
85
+ },
86
+ {
87
+ name: 'git',
88
+ command: 'git',
89
+ description: 'Version control',
90
+ detect: 'which git',
91
+ install: 'brew install git',
92
+ },
93
+ {
94
+ name: 'ripgrep',
95
+ command: 'rg',
96
+ description: 'Fast search (ripgrep)',
97
+ detect: 'which rg',
98
+ install: 'brew install ripgrep',
99
+ },
100
+ ];
101
+ /** Default built-in tool (prlt itself) */
102
+ export const BUILTIN_PRLT_TOOL = {
103
+ name: 'prlt',
104
+ command: 'prlt',
105
+ description: 'Proletariat CLI (always available)',
106
+ detect: 'which prlt',
107
+ builtin: true,
108
+ };
109
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/tool-registry/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAwEH,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAEhF,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C;QACE,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,oCAAoC;QACjD,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,iBAAiB;KAC3B;IACD;QACE,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,gBAAgB;QAC7B,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,iBAAiB;KAC3B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,wBAAwB;QACrC,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,qBAAqB;KAC/B;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,SAAS;QACtB,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,qBAAqB;KAC/B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,kBAAkB;QAC/B,MAAM,EAAE,cAAc;KACvB;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,gBAAgB;QAC7B,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,sBAAsB;KAChC;IACD;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,wBAAwB;QACrC,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,wBAAwB;KAClC;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,QAAQ;QACjB,WAAW,EAAE,mBAAmB;QAChC,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,4BAA4B;KACtC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,iBAAiB;QAC9B,MAAM,EAAE,YAAY;QACpB,OAAO,EAAE,mBAAmB;KAC7B;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,kBAAkB;QAC/B,MAAM,EAAE,eAAe;QACvB,OAAO,EAAE,qBAAqB;KAC/B;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,mBAAmB;QAChC,MAAM,EAAE,YAAY;KACrB;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,iBAAiB;QAC9B,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,kBAAkB;KAC5B;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,uBAAuB;QACpC,MAAM,EAAE,UAAU;QAClB,OAAO,EAAE,sBAAsB;KAChC;CACF,CAAA;AAED,0CAA0C;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAkB;IAC9C,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,oCAAoC;IACjD,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,IAAI;CACd,CAAA"}
@@ -0,0 +1,23 @@
1
+ import type { TrelloBoard, TrelloCard, TrelloCardUpsertInput, TrelloList, TrelloMember } from './types.js';
2
+ export declare class TrelloClient {
3
+ private apiKey;
4
+ private apiToken;
5
+ private readonly baseUrl;
6
+ constructor(apiKey: string, apiToken: string);
7
+ private request;
8
+ verify(): Promise<TrelloMember>;
9
+ getCard(cardId: string): Promise<TrelloCard | null>;
10
+ searchCards(query: string, options?: {
11
+ limit?: number;
12
+ boardId?: string;
13
+ }): Promise<TrelloCard[]>;
14
+ getBoard(boardId: string): Promise<TrelloBoard | null>;
15
+ getBoardLists(boardId: string): Promise<TrelloList[]>;
16
+ getBoardCards(boardId: string, options?: {
17
+ limit?: number;
18
+ filter?: string;
19
+ }): Promise<TrelloCard[]>;
20
+ getBoards(): Promise<TrelloBoard[]>;
21
+ createCard(input: TrelloCardUpsertInput): Promise<TrelloCard>;
22
+ updateCard(cardId: string, input: TrelloCardUpsertInput): Promise<TrelloCard>;
23
+ }