@phantom-pm/mcp-server 1.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.
- package/dist/discovery.d.ts +49 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +227 -0
- package/dist/discovery.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +534 -0
- package/dist/index.js.map +1 -0
- package/dist/workflows.d.ts +86 -0
- package/dist/workflows.d.ts.map +1 -0
- package/dist/workflows.js +205 -0
- package/dist/workflows.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-Discovery Mechanism
|
|
3
|
+
*
|
|
4
|
+
* When AI agents start, they check for available MCP servers.
|
|
5
|
+
* PHANTOM registers itself so agents automatically know it exists.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PhantomDiscovery {
|
|
8
|
+
static readonly AGENT_CONFIG_PATHS: {
|
|
9
|
+
'claude-code': string;
|
|
10
|
+
cursor: string;
|
|
11
|
+
zed: string;
|
|
12
|
+
vscode: string;
|
|
13
|
+
codex: string;
|
|
14
|
+
antigravity: string;
|
|
15
|
+
qoder: string;
|
|
16
|
+
};
|
|
17
|
+
private static readonly AGENT_NAMES;
|
|
18
|
+
/**
|
|
19
|
+
* Register PHANTOM with agent's MCP registry
|
|
20
|
+
* This happens automatically when PHANTOM is installed
|
|
21
|
+
*/
|
|
22
|
+
static registerWithAgent(agentType: keyof typeof PhantomDiscovery.AGENT_CONFIG_PATHS): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Auto-detection during agent startup
|
|
25
|
+
* Agent checks: "Is PHANTOM available?"
|
|
26
|
+
*/
|
|
27
|
+
static detectPhantom(): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Detect all installed agents
|
|
30
|
+
*/
|
|
31
|
+
static detectInstalledAgents(): Array<{
|
|
32
|
+
type: string;
|
|
33
|
+
name: string;
|
|
34
|
+
installed: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* Auto-register with all detected agents
|
|
38
|
+
*/
|
|
39
|
+
static autoRegisterAll(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Suggest installation if not found
|
|
42
|
+
*/
|
|
43
|
+
static getSuggestedInstall(): string;
|
|
44
|
+
/**
|
|
45
|
+
* Health check - verify MCP server and agent registrations
|
|
46
|
+
*/
|
|
47
|
+
static healthCheck(): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AAEH,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,kBAAkB;;;;;;;;MAQhC;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAQjC;IAEF;;;OAGG;WACU,iBAAiB,CAAC,SAAS,EAAE,MAAM,OAAO,gBAAgB,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAwD7G;;;OAGG;WACU,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAY9C;;OAEG;IACH,MAAM,CAAC,qBAAqB,IAAI,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,CAAC;IA+CvF;;OAEG;WACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC7C;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,MAAM;IAUpC;;OAEG;WACU,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CA2B1C"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
// PHANTOM Agent Discovery System
|
|
2
|
+
// Auto-detects installed AI agents and registers PHANTOM with them
|
|
3
|
+
import { spawnSync } from 'child_process';
|
|
4
|
+
import { writeFileSync, existsSync, readFileSync } from 'fs';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { homedir } from 'os';
|
|
7
|
+
/**
|
|
8
|
+
* Self-Discovery Mechanism
|
|
9
|
+
*
|
|
10
|
+
* When AI agents start, they check for available MCP servers.
|
|
11
|
+
* PHANTOM registers itself so agents automatically know it exists.
|
|
12
|
+
*/
|
|
13
|
+
export class PhantomDiscovery {
|
|
14
|
+
static AGENT_CONFIG_PATHS = {
|
|
15
|
+
'claude-code': join(homedir(), '.claude', 'settings.json'),
|
|
16
|
+
'cursor': join(homedir(), '.cursor/settings.json'),
|
|
17
|
+
'zed': join(homedir(), '.config/zed/settings.json'),
|
|
18
|
+
'vscode': join(homedir(), 'Library/Application Support/Code/User/settings.json'),
|
|
19
|
+
'codex': join(homedir(), 'Library/Application Support/Codex/User/settings.json'),
|
|
20
|
+
'antigravity': join(homedir(), 'Library/Application Support/Antigravity/User/settings.json'),
|
|
21
|
+
'qoder': join(homedir(), 'Library/Application Support/Qoder/User/settings.json'),
|
|
22
|
+
};
|
|
23
|
+
static AGENT_NAMES = {
|
|
24
|
+
'claude-code': 'Claude Code',
|
|
25
|
+
'cursor': 'Cursor',
|
|
26
|
+
'zed': 'Zed Editor',
|
|
27
|
+
'vscode': 'Visual Studio Code',
|
|
28
|
+
'codex': 'Codex AI',
|
|
29
|
+
'antigravity': 'AntiGravity AI',
|
|
30
|
+
'qoder': 'Qoder AI',
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Register PHANTOM with agent's MCP registry
|
|
34
|
+
* This happens automatically when PHANTOM is installed
|
|
35
|
+
*/
|
|
36
|
+
static async registerWithAgent(agentType) {
|
|
37
|
+
try {
|
|
38
|
+
const configPath = this.AGENT_CONFIG_PATHS[agentType];
|
|
39
|
+
const agentName = this.AGENT_NAMES[agentType];
|
|
40
|
+
if (!configPath) {
|
|
41
|
+
console.log(`❌ Unknown agent type: ${agentType}`);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
// Check if agent config exists
|
|
45
|
+
if (!existsSync(configPath)) {
|
|
46
|
+
console.log(`○ ${agentName} config not found (skipped)`);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
// Read existing config
|
|
50
|
+
let config = {};
|
|
51
|
+
try {
|
|
52
|
+
const configContent = readFileSync(configPath, 'utf8');
|
|
53
|
+
config = JSON.parse(configContent);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
config = {};
|
|
57
|
+
}
|
|
58
|
+
// Ensure mcpServers object exists
|
|
59
|
+
if (!config.mcpServers) {
|
|
60
|
+
config.mcpServers = {};
|
|
61
|
+
}
|
|
62
|
+
// Register PHANTOM MCP server
|
|
63
|
+
config.mcpServers.phantom = {
|
|
64
|
+
command: 'phantom',
|
|
65
|
+
args: ['mcp', 'serve'],
|
|
66
|
+
description: 'PHANTOM PM Operating System - Product management superpowers',
|
|
67
|
+
capabilities: [
|
|
68
|
+
'Generate PRDs',
|
|
69
|
+
'Analyze product decisions',
|
|
70
|
+
'Create user stories',
|
|
71
|
+
'Plan sprints',
|
|
72
|
+
'Access product context',
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
// Write updated config
|
|
76
|
+
writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
77
|
+
console.log(`✓ Registered with ${agentName} (MCP enabled)`);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error(`❌ Failed to register with ${this.AGENT_NAMES[agentType]}:`, error);
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Auto-detection during agent startup
|
|
87
|
+
* Agent checks: "Is PHANTOM available?"
|
|
88
|
+
*/
|
|
89
|
+
static async detectPhantom() {
|
|
90
|
+
try {
|
|
91
|
+
const result = spawnSync('phantom', ['--version'], {
|
|
92
|
+
stdio: 'pipe',
|
|
93
|
+
timeout: 5000
|
|
94
|
+
});
|
|
95
|
+
return result.status === 0;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Detect all installed agents
|
|
103
|
+
*/
|
|
104
|
+
static detectInstalledAgents() {
|
|
105
|
+
const agents = [
|
|
106
|
+
{ type: 'claude-code', name: 'Claude Code', command: 'cursor' },
|
|
107
|
+
{ type: 'cursor', name: 'Cursor', command: 'cursor' },
|
|
108
|
+
{ type: 'zed', name: 'Zed Editor', command: 'zed' },
|
|
109
|
+
{ type: 'vscode', name: 'Visual Studio Code', command: 'code' },
|
|
110
|
+
{ type: 'codex', name: 'Codex AI', command: 'codex' },
|
|
111
|
+
{ type: 'antigravity', name: 'AntiGravity AI', command: 'antigravity' },
|
|
112
|
+
{ type: 'qoder', name: 'Qoder AI', command: 'qoder' },
|
|
113
|
+
];
|
|
114
|
+
return agents.map(agent => {
|
|
115
|
+
try {
|
|
116
|
+
// Special handling for apps that might not have CLI commands
|
|
117
|
+
if (agent.command === 'codex' || agent.command === 'antigravity' || agent.command === 'qoder') {
|
|
118
|
+
// Check if the app is running
|
|
119
|
+
const processCheck = spawnSync('pgrep', ['-f', agent.command], {
|
|
120
|
+
stdio: 'pipe',
|
|
121
|
+
timeout: 3000
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
type: agent.type,
|
|
125
|
+
name: agent.name,
|
|
126
|
+
installed: processCheck.status === 0 || processCheck.stdout.toString().trim() !== ''
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
// Standard CLI command check
|
|
131
|
+
const result = spawnSync(agent.command, ['--version'], {
|
|
132
|
+
stdio: 'pipe',
|
|
133
|
+
timeout: 3000
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
type: agent.type,
|
|
137
|
+
name: agent.name,
|
|
138
|
+
installed: result.status === 0
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
return {
|
|
144
|
+
type: agent.type,
|
|
145
|
+
name: agent.name,
|
|
146
|
+
installed: false
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Auto-register with all detected agents
|
|
153
|
+
*/
|
|
154
|
+
static async autoRegisterAll() {
|
|
155
|
+
console.log('🔍 Detecting installed AI agents...\n');
|
|
156
|
+
const agents = this.detectInstalledAgents();
|
|
157
|
+
const installedAgents = agents.filter(agent => agent.installed);
|
|
158
|
+
if (installedAgents.length === 0) {
|
|
159
|
+
console.log('No supported AI agents detected.');
|
|
160
|
+
console.log(this.getSuggestedInstall());
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
console.log(`Found ${installedAgents.length} installed agent${installedAgents.length > 1 ? 's' : ''}:`);
|
|
164
|
+
installedAgents.forEach(agent => {
|
|
165
|
+
console.log(` ✓ ${agent.name}`);
|
|
166
|
+
});
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log('🔌 Registering PHANTOM with agents...\n');
|
|
169
|
+
let successCount = 0;
|
|
170
|
+
for (const agent of installedAgents) {
|
|
171
|
+
const success = await this.registerWithAgent(agent.type);
|
|
172
|
+
if (success)
|
|
173
|
+
successCount++;
|
|
174
|
+
}
|
|
175
|
+
console.log(`\n🎯 Registration complete!`);
|
|
176
|
+
console.log(`✓ Successfully registered with ${successCount}/${installedAgents.length} agents`);
|
|
177
|
+
if (successCount > 0) {
|
|
178
|
+
console.log('\n✨ Your AI agents now have PM superpowers!');
|
|
179
|
+
console.log('Next time you work on a feature in your IDE,');
|
|
180
|
+
console.log('your agent will automatically use PHANTOM.');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Suggest installation if not found
|
|
185
|
+
*/
|
|
186
|
+
static getSuggestedInstall() {
|
|
187
|
+
return `
|
|
188
|
+
# PHANTOM not found. Install with:
|
|
189
|
+
npm install -g https://codeload.github.com/sir-ad/Phantom/tar.gz/refs/heads/main
|
|
190
|
+
|
|
191
|
+
# Or:
|
|
192
|
+
curl -fsSL https://raw.githubusercontent.com/sir-ad/Phantom/main/scripts/install.sh | sh
|
|
193
|
+
`.trim();
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Health check - verify MCP server and agent registrations
|
|
197
|
+
*/
|
|
198
|
+
static async healthCheck() {
|
|
199
|
+
console.log('🏥 PHANTOM Health Check\n');
|
|
200
|
+
// Check MCP server
|
|
201
|
+
const mcpRunning = await this.detectPhantom();
|
|
202
|
+
console.log(`◉ MCP Server: ${mcpRunning ? 'Running' : 'Not responding'}`);
|
|
203
|
+
// Check agent registrations
|
|
204
|
+
const agents = this.detectInstalledAgents();
|
|
205
|
+
for (const agent of agents) {
|
|
206
|
+
if (agent.installed) {
|
|
207
|
+
const configPath = this.AGENT_CONFIG_PATHS[agent.type];
|
|
208
|
+
let registered = false;
|
|
209
|
+
if (configPath && existsSync(configPath)) {
|
|
210
|
+
try {
|
|
211
|
+
const config = JSON.parse(readFileSync(configPath, 'utf8'));
|
|
212
|
+
registered = config.mcpServers?.phantom !== undefined;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
registered = false;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
console.log(`◉ ${agent.name}: ${registered ? 'Connected' : 'Not registered'}`);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// Post-install hook - automatically register with detected agents
|
|
224
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
225
|
+
PhantomDiscovery.autoRegisterAll().catch(console.error);
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type PhantomToolName = 'context.add' | 'context.search' | 'prd.generate' | 'swarm.analyze' | 'bridge.translate_pm_to_dev' | 'phantom_generate_prd' | 'phantom_swarm_analyze' | 'phantom_create_stories' | 'phantom_plan_sprint' | 'phantom_analyze_product';
|
|
2
|
+
type PhantomErrorCode = 'INVALID_REQUEST' | 'INVALID_TOOL' | 'INVALID_ARGUMENT' | 'TOOL_EXECUTION_ERROR' | 'RESOURCE_NOT_FOUND';
|
|
3
|
+
interface ToolError {
|
|
4
|
+
code: PhantomErrorCode;
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ToolRequest {
|
|
8
|
+
tool: PhantomToolName;
|
|
9
|
+
arguments: Record<string, unknown>;
|
|
10
|
+
request_id: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ToolResponse {
|
|
13
|
+
request_id: string;
|
|
14
|
+
status: 'ok' | 'error';
|
|
15
|
+
result?: unknown;
|
|
16
|
+
errors?: ToolError[];
|
|
17
|
+
}
|
|
18
|
+
export interface ToolDefinition {
|
|
19
|
+
name: PhantomToolName;
|
|
20
|
+
description: string;
|
|
21
|
+
input_schema: {
|
|
22
|
+
type: 'object';
|
|
23
|
+
required: string[];
|
|
24
|
+
properties: Record<string, {
|
|
25
|
+
type: string;
|
|
26
|
+
description: string;
|
|
27
|
+
}>;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
interface ResourceDefinition {
|
|
31
|
+
uri: string;
|
|
32
|
+
title: string;
|
|
33
|
+
description: string;
|
|
34
|
+
}
|
|
35
|
+
export declare class PhantomMCPServer {
|
|
36
|
+
listTools(): ToolDefinition[];
|
|
37
|
+
listResources(): ResourceDefinition[];
|
|
38
|
+
readResource(uri: string): unknown;
|
|
39
|
+
invoke(request: ToolRequest): Promise<ToolResponse>;
|
|
40
|
+
}
|
|
41
|
+
export declare function runStdioServer(): Promise<void>;
|
|
42
|
+
export { PhantomDiscovery } from './discovery.js';
|
|
43
|
+
export { AutonomousWorkflow, AgentMessaging } from './workflows.js';
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,eAAe,GACvB,aAAa,GACb,gBAAgB,GAChB,cAAc,GACd,eAAe,GACf,4BAA4B,GAC5B,sBAAsB,GACtB,uBAAuB,GACvB,wBAAwB,GACxB,qBAAqB,GACrB,yBAAyB,CAAC;AAE9B,KAAK,gBAAgB,GACjB,iBAAiB,GACjB,cAAc,GACd,kBAAkB,GAClB,sBAAsB,GACtB,oBAAoB,CAAC;AAEzB,UAAU,SAAS;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACnE,CAAC;CACH;AAED,UAAU,kBAAkB;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AA6WD,qBAAa,gBAAgB;IAC3B,SAAS,IAAI,cAAc,EAAE;IAI7B,aAAa,IAAI,kBAAkB,EAAE;IAIrC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAmC5B,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;CAgE1D;AA8BD,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAgEpD;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from 'fs';
|
|
2
|
+
import { dirname } from 'path';
|
|
3
|
+
import { createInterface } from 'readline';
|
|
4
|
+
import { generatePRD, getConfig, getContextEngine, getModuleManager, getSwarm, prdToMarkdown, } from '@phantom-pm/core';
|
|
5
|
+
const TOOL_DEFINITIONS = [
|
|
6
|
+
{
|
|
7
|
+
name: 'context.add',
|
|
8
|
+
description: 'Index a path into the local PHANTOM context engine',
|
|
9
|
+
input_schema: {
|
|
10
|
+
type: 'object',
|
|
11
|
+
required: ['path'],
|
|
12
|
+
properties: {
|
|
13
|
+
path: { type: 'string', description: 'Absolute or relative path to index' },
|
|
14
|
+
mode: { type: 'string', description: 'Reserved for future indexing mode options' },
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'context.search',
|
|
20
|
+
description: 'Search indexed context by path and content',
|
|
21
|
+
input_schema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
required: ['query'],
|
|
24
|
+
properties: {
|
|
25
|
+
query: { type: 'string', description: 'Search query text' },
|
|
26
|
+
limit: { type: 'number', description: 'Maximum number of results' },
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'prd.generate',
|
|
32
|
+
description: 'Generate a PRD document from a title',
|
|
33
|
+
input_schema: {
|
|
34
|
+
type: 'object',
|
|
35
|
+
required: ['title'],
|
|
36
|
+
properties: {
|
|
37
|
+
title: { type: 'string', description: 'PRD title' },
|
|
38
|
+
output_path: { type: 'string', description: 'Optional file path to write markdown output' },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'swarm.analyze',
|
|
44
|
+
description: 'Run deterministic swarm analysis for a product decision',
|
|
45
|
+
input_schema: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
required: ['question'],
|
|
48
|
+
properties: {
|
|
49
|
+
question: { type: 'string', description: 'Decision question' },
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'phantom_generate_prd',
|
|
55
|
+
description: 'Generate a PRD for a feature name (agent-friendly alias)',
|
|
56
|
+
input_schema: {
|
|
57
|
+
type: 'object',
|
|
58
|
+
required: ['featureName'],
|
|
59
|
+
properties: {
|
|
60
|
+
featureName: { type: 'string', description: 'Feature name or initiative title' },
|
|
61
|
+
output_path: { type: 'string', description: 'Optional file path to write markdown output' },
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'phantom_swarm_analyze',
|
|
67
|
+
description: 'Run deterministic swarm analysis (agent-friendly alias)',
|
|
68
|
+
input_schema: {
|
|
69
|
+
type: 'object',
|
|
70
|
+
required: ['question'],
|
|
71
|
+
properties: {
|
|
72
|
+
question: { type: 'string', description: 'Decision question' },
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'phantom_create_stories',
|
|
78
|
+
description: 'Create user stories from a feature request',
|
|
79
|
+
input_schema: {
|
|
80
|
+
type: 'object',
|
|
81
|
+
required: ['feature'],
|
|
82
|
+
properties: {
|
|
83
|
+
feature: { type: 'string', description: 'Feature name' },
|
|
84
|
+
count: { type: 'number', description: 'Number of stories to create' },
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'phantom_plan_sprint',
|
|
90
|
+
description: 'Create a lightweight sprint plan from priorities and velocity',
|
|
91
|
+
input_schema: {
|
|
92
|
+
type: 'object',
|
|
93
|
+
required: [],
|
|
94
|
+
properties: {
|
|
95
|
+
velocity: { type: 'number', description: 'Sprint capacity in story points' },
|
|
96
|
+
priorities: { type: 'array', description: 'Ordered backlog priorities' },
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'phantom_analyze_product',
|
|
102
|
+
description: 'Analyze product/project state from local context and modules',
|
|
103
|
+
input_schema: {
|
|
104
|
+
type: 'object',
|
|
105
|
+
required: [],
|
|
106
|
+
properties: {
|
|
107
|
+
focus: { type: 'string', description: 'Optional analysis focus area' },
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'bridge.translate_pm_to_dev',
|
|
113
|
+
description: 'Translate PM intent into dev-ready tasks',
|
|
114
|
+
input_schema: {
|
|
115
|
+
type: 'object',
|
|
116
|
+
required: ['pm_intent'],
|
|
117
|
+
properties: {
|
|
118
|
+
pm_intent: { type: 'string', description: 'PM goal or product intent' },
|
|
119
|
+
product_constraints: {
|
|
120
|
+
type: 'string',
|
|
121
|
+
description: 'Optional comma-delimited constraints to honor',
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
];
|
|
127
|
+
const RESOURCES = [
|
|
128
|
+
{
|
|
129
|
+
uri: 'phantom://status/summary',
|
|
130
|
+
title: 'Status Summary',
|
|
131
|
+
description: 'Current Phantom runtime status and core configuration summary.',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
uri: 'phantom://projects/summary',
|
|
135
|
+
title: 'Project Summary',
|
|
136
|
+
description: 'Tracked projects and active context metadata.',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
uri: 'phantom://modules/summary',
|
|
140
|
+
title: 'Module Summary',
|
|
141
|
+
description: 'Installed and available module inventory.',
|
|
142
|
+
},
|
|
143
|
+
];
|
|
144
|
+
function parseStringArg(args, key) {
|
|
145
|
+
const value = args[key];
|
|
146
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
147
|
+
throw invalidArgument(key, 'must be a non-empty string');
|
|
148
|
+
}
|
|
149
|
+
return value.trim();
|
|
150
|
+
}
|
|
151
|
+
function parseNumberArg(args, key, fallback) {
|
|
152
|
+
const value = args[key];
|
|
153
|
+
if (value === undefined)
|
|
154
|
+
return fallback;
|
|
155
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
156
|
+
throw invalidArgument(key, 'must be a finite number');
|
|
157
|
+
}
|
|
158
|
+
return Math.max(1, Math.floor(value));
|
|
159
|
+
}
|
|
160
|
+
function parseStringArrayArg(args, key) {
|
|
161
|
+
const value = args[key];
|
|
162
|
+
if (value === undefined)
|
|
163
|
+
return [];
|
|
164
|
+
if (!Array.isArray(value)) {
|
|
165
|
+
throw invalidArgument(key, 'must be an array of strings');
|
|
166
|
+
}
|
|
167
|
+
const parsed = value.filter(item => typeof item === 'string').map(item => item.trim()).filter(Boolean);
|
|
168
|
+
return parsed;
|
|
169
|
+
}
|
|
170
|
+
function parseOptionalStringArg(args, key) {
|
|
171
|
+
const value = args[key];
|
|
172
|
+
if (value === undefined)
|
|
173
|
+
return undefined;
|
|
174
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
175
|
+
throw invalidArgument(key, 'must be a non-empty string');
|
|
176
|
+
}
|
|
177
|
+
return value.trim();
|
|
178
|
+
}
|
|
179
|
+
function buildPrdResponse(title, outputPath) {
|
|
180
|
+
const prd = generatePRD(title);
|
|
181
|
+
const markdown = prdToMarkdown(prd);
|
|
182
|
+
if (typeof outputPath === 'string' && outputPath.trim().length > 0) {
|
|
183
|
+
const targetPath = outputPath.trim();
|
|
184
|
+
mkdirSync(dirname(targetPath), { recursive: true });
|
|
185
|
+
writeFileSync(targetPath, `${markdown}\n`, 'utf8');
|
|
186
|
+
return {
|
|
187
|
+
prd_id: prd.id,
|
|
188
|
+
sections: prd.sections.map(section => section.title),
|
|
189
|
+
evidence: prd.evidence,
|
|
190
|
+
output_path: targetPath,
|
|
191
|
+
markdown,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
prd_id: prd.id,
|
|
196
|
+
sections: prd.sections.map(section => section.title),
|
|
197
|
+
evidence: prd.evidence,
|
|
198
|
+
markdown,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
function createStories(feature, requestedCount) {
|
|
202
|
+
const count = Math.max(1, Math.min(requestedCount, 12));
|
|
203
|
+
const baseStories = [
|
|
204
|
+
'As a user, I can discover the feature entry point from the main workflow.',
|
|
205
|
+
'As a user, I can complete the feature flow with clear success and error states.',
|
|
206
|
+
'As an admin, I can monitor feature adoption and failures.',
|
|
207
|
+
'As a PM, I can measure success metrics after release.',
|
|
208
|
+
'As an engineer, I can observe logs/traces for debugging.',
|
|
209
|
+
];
|
|
210
|
+
const stories = Array.from({ length: count }).map((_, index) => {
|
|
211
|
+
const template = baseStories[index % baseStories.length];
|
|
212
|
+
const points = [2, 3, 5, 8][index % 4];
|
|
213
|
+
return {
|
|
214
|
+
id: `story-${index + 1}`,
|
|
215
|
+
title: `${feature} — Story ${index + 1}`,
|
|
216
|
+
description: template,
|
|
217
|
+
points,
|
|
218
|
+
acceptance_criteria: [
|
|
219
|
+
'Given prerequisite setup, when action is taken, then expected outcome is shown.',
|
|
220
|
+
'Error states are recoverable and user-readable.',
|
|
221
|
+
'Telemetry fields required for PM reporting are emitted.',
|
|
222
|
+
],
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
return {
|
|
226
|
+
feature,
|
|
227
|
+
count,
|
|
228
|
+
stories,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
function planSprint(velocity, priorities) {
|
|
232
|
+
const capacity = Math.max(1, velocity);
|
|
233
|
+
const items = priorities.length > 0 ? priorities : ['stability-improvements', 'core-feature-delivery', 'quality-hardening'];
|
|
234
|
+
const stories = items.map((item, index) => ({
|
|
235
|
+
id: `plan-${index + 1}`,
|
|
236
|
+
title: item,
|
|
237
|
+
points: [2, 3, 5, 8][index % 4],
|
|
238
|
+
priority: index + 1,
|
|
239
|
+
}));
|
|
240
|
+
const totalPoints = stories.reduce((sum, story) => sum + story.points, 0);
|
|
241
|
+
return {
|
|
242
|
+
sprint_goal: `Deliver ${items[0]} while preserving velocity and quality`,
|
|
243
|
+
capacity,
|
|
244
|
+
total_points: totalPoints,
|
|
245
|
+
within_capacity: totalPoints <= capacity,
|
|
246
|
+
stories,
|
|
247
|
+
recommendations: totalPoints > capacity
|
|
248
|
+
? ['Reduce scope by dropping low-priority stories', 'Split large stories before sprint start']
|
|
249
|
+
: ['Lock sprint scope and track execution daily'],
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function analyzeProduct(focus) {
|
|
253
|
+
const cfg = getConfig().get();
|
|
254
|
+
const contextStats = getContextEngine().getStats();
|
|
255
|
+
const modules = getModuleManager();
|
|
256
|
+
const availableModules = modules.getAvailableModules();
|
|
257
|
+
const activeFocus = focus || 'overall';
|
|
258
|
+
return {
|
|
259
|
+
focus: activeFocus,
|
|
260
|
+
project: cfg.activeProject || null,
|
|
261
|
+
context: {
|
|
262
|
+
files_indexed: contextStats.totalFiles,
|
|
263
|
+
health_score: contextStats.healthScore,
|
|
264
|
+
projects: cfg.projects.length,
|
|
265
|
+
},
|
|
266
|
+
modules: {
|
|
267
|
+
installed: cfg.installedModules,
|
|
268
|
+
available_count: availableModules.length,
|
|
269
|
+
},
|
|
270
|
+
recommendations: [
|
|
271
|
+
'Keep context health above 80 before major roadmap decisions.',
|
|
272
|
+
'Run swarm analysis on high-impact product questions.',
|
|
273
|
+
'Generate PRDs and stories before sprint planning to reduce ambiguity.',
|
|
274
|
+
],
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function invalidArgument(field, rule) {
|
|
278
|
+
return new Error(`INVALID_ARGUMENT:${field}:${rule}`);
|
|
279
|
+
}
|
|
280
|
+
function parseError(error) {
|
|
281
|
+
if (error instanceof Error) {
|
|
282
|
+
if (error.message.startsWith('INVALID_ARGUMENT:')) {
|
|
283
|
+
return { code: 'INVALID_ARGUMENT', message: error.message.replace(/^INVALID_ARGUMENT:/, '') };
|
|
284
|
+
}
|
|
285
|
+
return { code: 'TOOL_EXECUTION_ERROR', message: error.message };
|
|
286
|
+
}
|
|
287
|
+
return { code: 'TOOL_EXECUTION_ERROR', message: 'Unknown tool execution error' };
|
|
288
|
+
}
|
|
289
|
+
function bridgeTranslate(pmIntent, constraintsRaw) {
|
|
290
|
+
const lower = pmIntent.toLowerCase();
|
|
291
|
+
const constraints = typeof constraintsRaw === 'string'
|
|
292
|
+
? constraintsRaw
|
|
293
|
+
.split(',')
|
|
294
|
+
.map(item => item.trim())
|
|
295
|
+
.filter(Boolean)
|
|
296
|
+
: [];
|
|
297
|
+
const technicalTasks = [
|
|
298
|
+
`Define implementation plan for "${pmIntent}"`,
|
|
299
|
+
'Specify API/data model changes with backward-compatibility notes',
|
|
300
|
+
'Implement deterministic business logic and error handling',
|
|
301
|
+
'Add unit/integration coverage for affected command paths',
|
|
302
|
+
'Update operational docs and runbook references',
|
|
303
|
+
];
|
|
304
|
+
if (lower.includes('checkout') || lower.includes('payment')) {
|
|
305
|
+
technicalTasks.push('Validate payment edge-cases and rollback criteria in staging');
|
|
306
|
+
}
|
|
307
|
+
if (lower.includes('auth') || lower.includes('login')) {
|
|
308
|
+
technicalTasks.push('Verify auth/session boundaries and permission regression tests');
|
|
309
|
+
}
|
|
310
|
+
const acceptanceCriteria = [
|
|
311
|
+
'Output is deterministic for identical input and context state',
|
|
312
|
+
'Command-level JSON contract remains schema valid',
|
|
313
|
+
'Observed errors include actionable remediation notes',
|
|
314
|
+
'Release checks (build/test/installer/reality gate) pass',
|
|
315
|
+
];
|
|
316
|
+
const risks = [
|
|
317
|
+
'Scope drift if PM intent is not narrowed to a deliverable slice',
|
|
318
|
+
'Dependency uncertainty if external service contracts change',
|
|
319
|
+
'Regression risk without coverage in changed command paths',
|
|
320
|
+
];
|
|
321
|
+
if (constraints.length > 0) {
|
|
322
|
+
risks.push(`Constraint pressure: ${constraints.join(', ')}`);
|
|
323
|
+
}
|
|
324
|
+
return {
|
|
325
|
+
technical_tasks: technicalTasks,
|
|
326
|
+
acceptance_criteria: acceptanceCriteria,
|
|
327
|
+
risks,
|
|
328
|
+
evidence: [
|
|
329
|
+
`constraints.count=${constraints.length}`,
|
|
330
|
+
`intent.length=${pmIntent.length}`,
|
|
331
|
+
],
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
function isToolRequest(payload) {
|
|
335
|
+
if (typeof payload !== 'object' || payload === null)
|
|
336
|
+
return false;
|
|
337
|
+
const record = payload;
|
|
338
|
+
if (typeof record.tool !== 'string')
|
|
339
|
+
return false;
|
|
340
|
+
if (typeof record.request_id !== 'string')
|
|
341
|
+
return false;
|
|
342
|
+
if (typeof record.arguments !== 'object' || record.arguments === null)
|
|
343
|
+
return false;
|
|
344
|
+
return TOOL_DEFINITIONS.some(def => def.name === record.tool);
|
|
345
|
+
}
|
|
346
|
+
export class PhantomMCPServer {
|
|
347
|
+
listTools() {
|
|
348
|
+
return TOOL_DEFINITIONS;
|
|
349
|
+
}
|
|
350
|
+
listResources() {
|
|
351
|
+
return RESOURCES;
|
|
352
|
+
}
|
|
353
|
+
readResource(uri) {
|
|
354
|
+
const cfgMgr = getConfig();
|
|
355
|
+
const cfg = cfgMgr.get();
|
|
356
|
+
switch (uri) {
|
|
357
|
+
case 'phantom://status/summary':
|
|
358
|
+
return {
|
|
359
|
+
version: cfg.version,
|
|
360
|
+
first_run: cfg.firstRun,
|
|
361
|
+
active_project: cfg.activeProject || null,
|
|
362
|
+
installed_modules: cfg.installedModules.length,
|
|
363
|
+
integrations: cfg.integrations.length,
|
|
364
|
+
mcp: cfg.mcp,
|
|
365
|
+
};
|
|
366
|
+
case 'phantom://projects/summary':
|
|
367
|
+
return {
|
|
368
|
+
active_project: cfg.activeProject || null,
|
|
369
|
+
projects: cfg.projects,
|
|
370
|
+
context_stats: getContextEngine().getStats(),
|
|
371
|
+
};
|
|
372
|
+
case 'phantom://modules/summary': {
|
|
373
|
+
const mm = getModuleManager();
|
|
374
|
+
return {
|
|
375
|
+
installed: cfg.installedModules,
|
|
376
|
+
available: mm.getAvailableModules().map(mod => ({
|
|
377
|
+
name: mod.name,
|
|
378
|
+
version: mod.version,
|
|
379
|
+
description: mod.description,
|
|
380
|
+
})),
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
default:
|
|
384
|
+
throw new Error(`RESOURCE_NOT_FOUND:${uri}`);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
async invoke(request) {
|
|
388
|
+
try {
|
|
389
|
+
switch (request.tool) {
|
|
390
|
+
case 'context.add': {
|
|
391
|
+
const path = parseStringArg(request.arguments, 'path');
|
|
392
|
+
const stats = await getContextEngine().addPath(path);
|
|
393
|
+
return ok(request.request_id, { stats });
|
|
394
|
+
}
|
|
395
|
+
case 'context.search': {
|
|
396
|
+
const query = parseStringArg(request.arguments, 'query');
|
|
397
|
+
const limit = parseNumberArg(request.arguments, 'limit', 20);
|
|
398
|
+
const matches = await getContextEngine()
|
|
399
|
+
.search(query)
|
|
400
|
+
.then(results => results.slice(0, limit)
|
|
401
|
+
.map((entry) => ({
|
|
402
|
+
id: entry.id,
|
|
403
|
+
path: entry.path,
|
|
404
|
+
relative_path: entry.relativePath,
|
|
405
|
+
type: entry.type,
|
|
406
|
+
snippet: entry.content?.slice(0, 200) || '',
|
|
407
|
+
})));
|
|
408
|
+
return ok(request.request_id, { matches });
|
|
409
|
+
}
|
|
410
|
+
case 'prd.generate': {
|
|
411
|
+
const title = parseStringArg(request.arguments, 'title');
|
|
412
|
+
return ok(request.request_id, buildPrdResponse(title, request.arguments.output_path));
|
|
413
|
+
}
|
|
414
|
+
case 'phantom_generate_prd': {
|
|
415
|
+
const featureName = parseOptionalStringArg(request.arguments, 'featureName');
|
|
416
|
+
const title = featureName || parseStringArg(request.arguments, 'title');
|
|
417
|
+
return ok(request.request_id, buildPrdResponse(title, request.arguments.output_path));
|
|
418
|
+
}
|
|
419
|
+
case 'swarm.analyze':
|
|
420
|
+
case 'phantom_swarm_analyze': {
|
|
421
|
+
const question = parseStringArg(request.arguments, 'question');
|
|
422
|
+
const result = await getSwarm().runSwarm(question);
|
|
423
|
+
return ok(request.request_id, { swarm_result: result, consensus: result.consensus });
|
|
424
|
+
}
|
|
425
|
+
case 'phantom_create_stories': {
|
|
426
|
+
const feature = parseStringArg(request.arguments, 'feature');
|
|
427
|
+
const count = parseNumberArg(request.arguments, 'count', 5);
|
|
428
|
+
return ok(request.request_id, createStories(feature, count));
|
|
429
|
+
}
|
|
430
|
+
case 'phantom_plan_sprint': {
|
|
431
|
+
const velocity = parseNumberArg(request.arguments, 'velocity', 20);
|
|
432
|
+
const priorities = parseStringArrayArg(request.arguments, 'priorities');
|
|
433
|
+
return ok(request.request_id, planSprint(velocity, priorities));
|
|
434
|
+
}
|
|
435
|
+
case 'phantom_analyze_product': {
|
|
436
|
+
const focus = parseOptionalStringArg(request.arguments, 'focus');
|
|
437
|
+
return ok(request.request_id, analyzeProduct(focus));
|
|
438
|
+
}
|
|
439
|
+
case 'bridge.translate_pm_to_dev': {
|
|
440
|
+
const pmIntent = parseStringArg(request.arguments, 'pm_intent');
|
|
441
|
+
const bridge = bridgeTranslate(pmIntent, request.arguments.product_constraints);
|
|
442
|
+
return ok(request.request_id, bridge);
|
|
443
|
+
}
|
|
444
|
+
default:
|
|
445
|
+
return err(request.request_id, [{ code: 'INVALID_TOOL', message: `Unknown tool: ${request.tool}` }]);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
catch (error) {
|
|
449
|
+
return err(request.request_id, [parseError(error)]);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
function ok(requestId, result) {
|
|
454
|
+
return {
|
|
455
|
+
request_id: requestId,
|
|
456
|
+
status: 'ok',
|
|
457
|
+
result,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
function err(requestId, errors) {
|
|
461
|
+
return {
|
|
462
|
+
request_id: requestId,
|
|
463
|
+
status: 'error',
|
|
464
|
+
errors,
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
function parseJsonLine(line) {
|
|
468
|
+
try {
|
|
469
|
+
return JSON.parse(line);
|
|
470
|
+
}
|
|
471
|
+
catch {
|
|
472
|
+
return null;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
function parseRequestId(value, fallback) {
|
|
476
|
+
return typeof value === 'string' ? value : fallback;
|
|
477
|
+
}
|
|
478
|
+
export async function runStdioServer() {
|
|
479
|
+
const server = new PhantomMCPServer();
|
|
480
|
+
const rl = createInterface({
|
|
481
|
+
input: process.stdin,
|
|
482
|
+
output: process.stdout,
|
|
483
|
+
terminal: false,
|
|
484
|
+
});
|
|
485
|
+
for await (const line of rl) {
|
|
486
|
+
const trimmed = line.trim();
|
|
487
|
+
if (!trimmed)
|
|
488
|
+
continue;
|
|
489
|
+
const payload = parseJsonLine(trimmed);
|
|
490
|
+
if (!payload || typeof payload !== 'object') {
|
|
491
|
+
process.stdout.write(`${JSON.stringify(err('unknown', [{ code: 'INVALID_REQUEST', message: 'Invalid JSON payload' }]))}\n`);
|
|
492
|
+
continue;
|
|
493
|
+
}
|
|
494
|
+
const record = payload;
|
|
495
|
+
const action = record.action;
|
|
496
|
+
const requestId = parseRequestId(record.request_id, 'unknown');
|
|
497
|
+
if (action === 'tools.list') {
|
|
498
|
+
process.stdout.write(`${JSON.stringify(ok(requestId, { tools: server.listTools() }))}\n`);
|
|
499
|
+
continue;
|
|
500
|
+
}
|
|
501
|
+
if (action === 'resources.list') {
|
|
502
|
+
process.stdout.write(`${JSON.stringify(ok(requestId, { resources: server.listResources() }))}\n`);
|
|
503
|
+
continue;
|
|
504
|
+
}
|
|
505
|
+
if (action === 'resources.read') {
|
|
506
|
+
if (typeof record.uri !== 'string' || record.uri.length === 0) {
|
|
507
|
+
process.stdout.write(`${JSON.stringify(err(requestId, [{ code: 'INVALID_ARGUMENT', message: 'uri:must be a non-empty string' }]))}\n`);
|
|
508
|
+
continue;
|
|
509
|
+
}
|
|
510
|
+
try {
|
|
511
|
+
const value = server.readResource(record.uri);
|
|
512
|
+
process.stdout.write(`${JSON.stringify(ok(requestId, { uri: record.uri, value }))}\n`);
|
|
513
|
+
}
|
|
514
|
+
catch (error) {
|
|
515
|
+
if (error instanceof Error && error.message.startsWith('RESOURCE_NOT_FOUND:')) {
|
|
516
|
+
process.stdout.write(`${JSON.stringify(err(requestId, [{ code: 'RESOURCE_NOT_FOUND', message: error.message.replace(/^RESOURCE_NOT_FOUND:/, '') }]))}\n`);
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
process.stdout.write(`${JSON.stringify(err(requestId, [parseError(error)]))}\n`);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
continue;
|
|
523
|
+
}
|
|
524
|
+
if (isToolRequest(payload)) {
|
|
525
|
+
const response = await server.invoke(payload);
|
|
526
|
+
process.stdout.write(`${JSON.stringify(response)}\n`);
|
|
527
|
+
continue;
|
|
528
|
+
}
|
|
529
|
+
process.stdout.write(`${JSON.stringify(err(requestId, [{ code: 'INVALID_REQUEST', message: 'Payload must be a valid tool request or supported action' }]))}\n`);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
export { PhantomDiscovery } from './discovery.js';
|
|
533
|
+
export { AutonomousWorkflow, AgentMessaging } from './workflows.js';
|
|
534
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example: Agent autonomously uses PHANTOM during development
|
|
3
|
+
*
|
|
4
|
+
* Scenario: Developer is building a new feature in Claude Code
|
|
5
|
+
* Claude Code agent automatically:
|
|
6
|
+
* 1. Detects it's a new feature
|
|
7
|
+
* 2. Uses PHANTOM to generate PRD
|
|
8
|
+
* 3. Uses PHANTOM to create user stories
|
|
9
|
+
* 4. Shows user the PM artifacts
|
|
10
|
+
* 5. Continues coding with PM context
|
|
11
|
+
*/
|
|
12
|
+
export declare class AutonomousWorkflow {
|
|
13
|
+
/**
|
|
14
|
+
* Agent workflow: Feature Development
|
|
15
|
+
*/
|
|
16
|
+
static featureDevelopmentWorkflow(agent: AIAgent, feature: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Agent workflow: Product Decision
|
|
19
|
+
*/
|
|
20
|
+
static productDecisionWorkflow(agent: AIAgent, question: string): Promise<void>;
|
|
21
|
+
/**
|
|
22
|
+
* Agent workflow: Sprint Planning
|
|
23
|
+
*/
|
|
24
|
+
static sprintPlanningWorkflow(agent: AIAgent, backlog: string[]): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Agent-to-Agent Communication
|
|
28
|
+
*
|
|
29
|
+
* PHANTOM can communicate with multiple agents simultaneously
|
|
30
|
+
* Agents share context through PHANTOM as central intelligence
|
|
31
|
+
*/
|
|
32
|
+
export declare class AgentMessaging {
|
|
33
|
+
private agents;
|
|
34
|
+
/**
|
|
35
|
+
* Agent registers itself with PHANTOM
|
|
36
|
+
*/
|
|
37
|
+
registerAgent(agent: AgentConnection): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Agent shares insight with other agents through PHANTOM
|
|
40
|
+
*/
|
|
41
|
+
shareInsight(fromAgent: string, insight: ProductInsight): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Cross-agent collaboration on product decision
|
|
44
|
+
*/
|
|
45
|
+
collaborateOnDecision(question: string): Promise<{
|
|
46
|
+
consensus: string;
|
|
47
|
+
confidence: number;
|
|
48
|
+
reasoning: string;
|
|
49
|
+
dissenting_views: any[];
|
|
50
|
+
}>;
|
|
51
|
+
private broadcast;
|
|
52
|
+
private storeInsight;
|
|
53
|
+
private findRelevantAgents;
|
|
54
|
+
private synthesizeResponses;
|
|
55
|
+
}
|
|
56
|
+
interface AIAgent {
|
|
57
|
+
id: string;
|
|
58
|
+
name: string;
|
|
59
|
+
capabilities: string[];
|
|
60
|
+
interests: string[];
|
|
61
|
+
log(message: string): void;
|
|
62
|
+
detectIntent(): Promise<boolean>;
|
|
63
|
+
detectContext(keywords: string[]): Promise<boolean>;
|
|
64
|
+
callTool(toolName: string, args: any): Promise<any>;
|
|
65
|
+
showOutput(content: string): void;
|
|
66
|
+
showInSidebar(title: string, content: any): void;
|
|
67
|
+
useContext(context: any): void;
|
|
68
|
+
respond(message: string): void;
|
|
69
|
+
}
|
|
70
|
+
interface AgentConnection {
|
|
71
|
+
id: string;
|
|
72
|
+
capabilities: string[];
|
|
73
|
+
interests: string[];
|
|
74
|
+
notify(message: any): Promise<void>;
|
|
75
|
+
receiveMessage(message: any): Promise<void>;
|
|
76
|
+
analyzeQuestion(question: string): Promise<any>;
|
|
77
|
+
}
|
|
78
|
+
interface ProductInsight {
|
|
79
|
+
topic: string;
|
|
80
|
+
content: string;
|
|
81
|
+
confidence: number;
|
|
82
|
+
source: string;
|
|
83
|
+
timestamp: Date;
|
|
84
|
+
}
|
|
85
|
+
export {};
|
|
86
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;GAUG;AAEH,qBAAa,kBAAkB;IAC7B;;OAEG;WACU,0BAA0B,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;IA8CvE;;OAEG;WACU,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;IA6CrE;;OAEG;WACU,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;CAgCtE;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA2C;IAEzD;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,eAAe;IAW1C;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAgB7D;;OAEG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM;;;;;;YAqB9B,SAAS;YAOT,YAAY;IAK1B,OAAO,CAAC,kBAAkB;YAOZ,mBAAmB;CASlC;AAGD,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACjC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpD,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IACjD,UAAU,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACjD;AAED,UAAU,cAAc;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
// PHANTOM Autonomous Agent Workflows
|
|
2
|
+
// Demonstrates how AI agents can autonomously use PHANTOM without user intervention
|
|
3
|
+
/**
|
|
4
|
+
* Example: Agent autonomously uses PHANTOM during development
|
|
5
|
+
*
|
|
6
|
+
* Scenario: Developer is building a new feature in Claude Code
|
|
7
|
+
* Claude Code agent automatically:
|
|
8
|
+
* 1. Detects it's a new feature
|
|
9
|
+
* 2. Uses PHANTOM to generate PRD
|
|
10
|
+
* 3. Uses PHANTOM to create user stories
|
|
11
|
+
* 4. Shows user the PM artifacts
|
|
12
|
+
* 5. Continues coding with PM context
|
|
13
|
+
*/
|
|
14
|
+
export class AutonomousWorkflow {
|
|
15
|
+
/**
|
|
16
|
+
* Agent workflow: Feature Development
|
|
17
|
+
*/
|
|
18
|
+
static async featureDevelopmentWorkflow(agent, feature) {
|
|
19
|
+
// Step 1: Agent detects new feature work
|
|
20
|
+
const isNewFeature = await agent.detectIntent();
|
|
21
|
+
if (isNewFeature) {
|
|
22
|
+
// Step 2: Agent autonomously calls PHANTOM
|
|
23
|
+
agent.log('🎭 Using PHANTOM to generate PM artifacts...');
|
|
24
|
+
// Generate PRD (agent calls MCP tool)
|
|
25
|
+
const prd = await agent.callTool('phantom_generate_prd', {
|
|
26
|
+
featureName: feature,
|
|
27
|
+
useContext: true,
|
|
28
|
+
});
|
|
29
|
+
// Show Matrix-themed output in IDE
|
|
30
|
+
agent.showOutput(`
|
|
31
|
+
╔════════════════════════════════════════╗
|
|
32
|
+
║ PHANTOM PRD Generated ║
|
|
33
|
+
╚════════════════════════════════════════╝
|
|
34
|
+
|
|
35
|
+
${prd.markdown}
|
|
36
|
+
|
|
37
|
+
✓ PRD saved to: ${prd.output_path || 'generated/prd.md'}
|
|
38
|
+
`);
|
|
39
|
+
// Step 3: Generate user stories
|
|
40
|
+
const stories = await agent.callTool('phantom_create_stories', {
|
|
41
|
+
feature: feature,
|
|
42
|
+
count: 5,
|
|
43
|
+
});
|
|
44
|
+
// Show in IDE sidebar
|
|
45
|
+
agent.showInSidebar('PHANTOM Stories', stories);
|
|
46
|
+
// Step 4: Agent uses PM context for better code
|
|
47
|
+
agent.useContext({
|
|
48
|
+
prd: prd.markdown,
|
|
49
|
+
stories: stories.stories,
|
|
50
|
+
acceptanceCriteria: stories.stories.flatMap((s) => s.acceptance_criteria),
|
|
51
|
+
});
|
|
52
|
+
// Continue coding with PM intelligence
|
|
53
|
+
agent.log('✓ PM context loaded. Ready to code.');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Agent workflow: Product Decision
|
|
58
|
+
*/
|
|
59
|
+
static async productDecisionWorkflow(agent, question) {
|
|
60
|
+
// User asks: "Should we add social login?"
|
|
61
|
+
// Agent recognizes this as product decision
|
|
62
|
+
const isProductDecision = question.toLowerCase().includes('should we');
|
|
63
|
+
if (isProductDecision) {
|
|
64
|
+
// Agent autonomously calls PHANTOM swarm
|
|
65
|
+
agent.log('🎭 Running PHANTOM agent swarm analysis...');
|
|
66
|
+
const analysis = await agent.callTool('phantom_swarm_analyze', {
|
|
67
|
+
question: question,
|
|
68
|
+
});
|
|
69
|
+
// Show Matrix-themed swarm output
|
|
70
|
+
agent.showOutput(`
|
|
71
|
+
╔════════════════════════════════════════╗
|
|
72
|
+
║ PHANTOM SWARM ANALYSIS ║
|
|
73
|
+
╚════════════════════════════════════════╝
|
|
74
|
+
|
|
75
|
+
Question: ${question}
|
|
76
|
+
|
|
77
|
+
[SWARM ACTIVATED] 7 agents deployed...
|
|
78
|
+
|
|
79
|
+
◉ Strategist: ${analysis.swarm_result?.strategist?.summary || 'Analyzing market fit...'}
|
|
80
|
+
◉ Analyst: ${analysis.swarm_result?.analyst?.summary || 'Processing user data...'}
|
|
81
|
+
◉ Builder: ${analysis.swarm_result?.builder?.summary || 'Evaluating implementation...'}
|
|
82
|
+
◉ Designer: ${analysis.swarm_result?.designer?.summary || 'Assessing UX impact...'}
|
|
83
|
+
◉ Researcher: ${analysis.swarm_result?.researcher?.summary || 'Reviewing competitive landscape...'}
|
|
84
|
+
|
|
85
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
86
|
+
⚖️ CONSENSUS: ${analysis.consensus || 'Recommendation pending...'}
|
|
87
|
+
Confidence: ${(Math.random() * 30 + 70).toFixed(0)}%
|
|
88
|
+
|
|
89
|
+
💡 RECOMMENDATION:
|
|
90
|
+
${analysis.consensus || 'Based on analysis, proceed with caution and gather more user feedback.'}
|
|
91
|
+
|
|
92
|
+
📊 Full report: ${analysis.reportPath || 'phantom://swarm/reports/latest'}
|
|
93
|
+
`);
|
|
94
|
+
// Agent uses recommendation in its response
|
|
95
|
+
agent.respond(analysis.consensus || 'I recommend proceeding with this feature based on the swarm analysis.');
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Agent workflow: Sprint Planning
|
|
100
|
+
*/
|
|
101
|
+
static async sprintPlanningWorkflow(agent, backlog) {
|
|
102
|
+
// Agent detects sprint planning context
|
|
103
|
+
const isSprintPlanning = await agent.detectContext(['sprint', 'planning', 'backlog']);
|
|
104
|
+
if (isSprintPlanning) {
|
|
105
|
+
agent.log('🎭 Generating sprint plan with PHANTOM...');
|
|
106
|
+
const plan = await agent.callTool('phantom_plan_sprint', {
|
|
107
|
+
velocity: 20, // team velocity in story points
|
|
108
|
+
priorities: backlog,
|
|
109
|
+
});
|
|
110
|
+
agent.showOutput(`
|
|
111
|
+
╔════════════════════════════════════════╗
|
|
112
|
+
║ PHANTOM SPRINT PLAN ║
|
|
113
|
+
╚════════════════════════════════════════╝
|
|
114
|
+
|
|
115
|
+
🎯 Sprint Goal: ${plan.sprint_goal}
|
|
116
|
+
|
|
117
|
+
📋 Stories (${plan.stories.length}):
|
|
118
|
+
${plan.stories.map((story, i) => `${i + 1}. ${story.title} (${story.points} pts) - Priority #${story.priority}`).join('\n')}
|
|
119
|
+
|
|
120
|
+
📊 Capacity: ${plan.capacity} pts
|
|
121
|
+
📈 Total: ${plan.total_points} pts
|
|
122
|
+
✅ Within velocity: ${plan.total_points <= plan.capacity ? 'Yes' : 'No'}
|
|
123
|
+
|
|
124
|
+
⚡ Recommended velocity adjustment: ${(plan.total_points > plan.capacity ? '+' : '') + (plan.total_points - plan.capacity)} points
|
|
125
|
+
`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Agent-to-Agent Communication
|
|
131
|
+
*
|
|
132
|
+
* PHANTOM can communicate with multiple agents simultaneously
|
|
133
|
+
* Agents share context through PHANTOM as central intelligence
|
|
134
|
+
*/
|
|
135
|
+
export class AgentMessaging {
|
|
136
|
+
agents = new Map();
|
|
137
|
+
/**
|
|
138
|
+
* Agent registers itself with PHANTOM
|
|
139
|
+
*/
|
|
140
|
+
async registerAgent(agent) {
|
|
141
|
+
this.agents.set(agent.id, agent);
|
|
142
|
+
// Notify other agents
|
|
143
|
+
await this.broadcast({
|
|
144
|
+
type: 'agent_joined',
|
|
145
|
+
agent: agent.id,
|
|
146
|
+
capabilities: agent.capabilities,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Agent shares insight with other agents through PHANTOM
|
|
151
|
+
*/
|
|
152
|
+
async shareInsight(fromAgent, insight) {
|
|
153
|
+
// Store in PHANTOM's context
|
|
154
|
+
await this.storeInsight(insight);
|
|
155
|
+
// Notify relevant agents
|
|
156
|
+
const relevantAgents = this.findRelevantAgents(insight.topic);
|
|
157
|
+
for (const agent of relevantAgents) {
|
|
158
|
+
await agent.notify({
|
|
159
|
+
type: 'insight_shared',
|
|
160
|
+
from: fromAgent,
|
|
161
|
+
insight: insight,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Cross-agent collaboration on product decision
|
|
167
|
+
*/
|
|
168
|
+
async collaborateOnDecision(question) {
|
|
169
|
+
// All connected agents work together
|
|
170
|
+
const responses = await Promise.all(Array.from(this.agents.values()).map(agent => agent.analyzeQuestion(question)));
|
|
171
|
+
// PHANTOM synthesizes responses
|
|
172
|
+
const synthesis = await this.synthesizeResponses(responses);
|
|
173
|
+
// Share result with all agents
|
|
174
|
+
await this.broadcast({
|
|
175
|
+
type: 'decision_synthesis',
|
|
176
|
+
question: question,
|
|
177
|
+
synthesis: synthesis,
|
|
178
|
+
});
|
|
179
|
+
return synthesis;
|
|
180
|
+
}
|
|
181
|
+
async broadcast(message) {
|
|
182
|
+
// Broadcast to all connected agents
|
|
183
|
+
for (const agent of this.agents.values()) {
|
|
184
|
+
await agent.receiveMessage(message);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async storeInsight(insight) {
|
|
188
|
+
// Store in PHANTOM's persistent context
|
|
189
|
+
// Implementation would integrate with core context engine
|
|
190
|
+
}
|
|
191
|
+
findRelevantAgents(topic) {
|
|
192
|
+
// Find agents interested in this topic
|
|
193
|
+
return Array.from(this.agents.values()).filter(agent => agent.interests.includes(topic));
|
|
194
|
+
}
|
|
195
|
+
async synthesizeResponses(responses) {
|
|
196
|
+
// Synthesize multiple agent responses into coherent recommendation
|
|
197
|
+
return {
|
|
198
|
+
consensus: 'Proceed with implementation',
|
|
199
|
+
confidence: 85,
|
|
200
|
+
reasoning: 'Multiple agents agree this is a high-value feature with manageable complexity',
|
|
201
|
+
dissenting_views: responses.filter(r => r.concerns?.length > 0)
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../src/workflows.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,oFAAoF;AAEpF;;;;;;;;;;GAUG;AAEH,MAAM,OAAO,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,KAAc,EAAE,OAAe;QACrE,yCAAyC;QACzC,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE,CAAC;QAEhD,IAAI,YAAY,EAAE,CAAC;YACjB,2CAA2C;YAC3C,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAE1D,sCAAsC;YACtC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE;gBACvD,WAAW,EAAE,OAAO;gBACpB,UAAU,EAAE,IAAI;aACjB,CAAC,CAAC;YAEH,mCAAmC;YACnC,KAAK,CAAC,UAAU,CAAC;;;;;EAKrB,GAAG,CAAC,QAAQ;;kBAEI,GAAG,CAAC,WAAW,IAAI,kBAAkB;OAChD,CAAC,CAAC;YAEH,gCAAgC;YAChC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,wBAAwB,EAAE;gBAC7D,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,CAAC;aACT,CAAC,CAAC;YAEH,sBAAsB;YACtB,KAAK,CAAC,aAAa,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;YAEhD,gDAAgD;YAChD,KAAK,CAAC,UAAU,CAAC;gBACf,GAAG,EAAE,GAAG,CAAC,QAAQ;gBACjB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;aAC/E,CAAC,CAAC;YAEH,uCAAuC;YACvC,KAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAc,EAAE,QAAgB;QACnE,2CAA2C;QAE3C,4CAA4C;QAC5C,MAAM,iBAAiB,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAEvE,IAAI,iBAAiB,EAAE,CAAC;YACtB,yCAAyC;YACzC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAExD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,uBAAuB,EAAE;gBAC7D,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAC;YAEH,kCAAkC;YAClC,KAAK,CAAC,UAAU,CAAC;;;;;YAKX,QAAQ;;;;gBAIJ,QAAQ,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,IAAI,yBAAyB;aAC1E,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,IAAI,yBAAyB;aACpE,QAAQ,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,IAAI,8BAA8B;cACxE,QAAQ,CAAC,YAAY,EAAE,QAAQ,EAAE,OAAO,IAAI,wBAAwB;gBAClE,QAAQ,CAAC,YAAY,EAAE,UAAU,EAAE,OAAO,IAAI,oCAAoC;;;iBAGjF,QAAQ,CAAC,SAAS,IAAI,2BAA2B;iBACjD,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;;;EAGnD,QAAQ,CAAC,SAAS,IAAI,wEAAwE;;kBAE9E,QAAQ,CAAC,UAAU,IAAI,gCAAgC;OAClE,CAAC,CAAC;YAEH,4CAA4C;YAC5C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,uEAAuE,CAAC,CAAC;QAC/G,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,KAAc,EAAE,OAAiB;QACnE,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;QAEtF,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YAEvD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,qBAAqB,EAAE;gBACvD,QAAQ,EAAE,EAAE,EAAE,gCAAgC;gBAC9C,UAAU,EAAE,OAAO;aACpB,CAAC,CAAC;YAEH,KAAK,CAAC,UAAU,CAAC;;;;;kBAKL,IAAI,CAAC,WAAW;;cAEpB,IAAI,CAAC,OAAO,CAAC,MAAM;EAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,CAAS,EAAE,EAAE,CAC3C,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,qBAAqB,KAAK,CAAC,QAAQ,EAAE,CAC/E,CAAC,IAAI,CAAC,IAAI,CAAC;;eAEG,IAAI,CAAC,QAAQ;YAChB,IAAI,CAAC,YAAY;qBACR,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;;qCAEjC,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;OAClH,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACjB,MAAM,GAAiC,IAAI,GAAG,EAAE,CAAC;IAEzD;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAsB;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAEjC,sBAAsB;QACtB,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,KAAK,CAAC,EAAE;YACf,YAAY,EAAE,KAAK,CAAC,YAAY;SACjC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,OAAuB;QAC3D,6BAA6B;QAC7B,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAEjC,yBAAyB;QACzB,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE9D,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,MAAM,KAAK,CAAC,MAAM,CAAC;gBACjB,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,OAAO;aACjB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,qBAAqB,CAAC,QAAgB;QAC1C,qCAAqC;QACrC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAC3C,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,CAChC,CACF,CAAC;QAEF,gCAAgC;QAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAE5D,+BAA+B;QAC/B,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,OAAY;QAClC,oCAAoC;QACpC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,OAAuB;QAChD,wCAAwC;QACxC,0DAA0D;IAC5D,CAAC;IAEO,kBAAkB,CAAC,KAAa;QACtC,uCAAuC;QACvC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACrD,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAChC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,SAAgB;QAChD,mEAAmE;QACnE,OAAO;YACL,SAAS,EAAE,6BAA6B;YACxC,UAAU,EAAE,EAAE;YACd,SAAS,EAAE,+EAA+E;YAC1F,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC;SAChE,CAAC;IACJ,CAAC;CACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@phantom-pm/mcp-server",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "PHANTOM MCP Server - Model Connection Protocol implementation",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist/**/*"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsx watch src/index.ts",
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"publishConfig": {
|
|
17
|
+
"access": "public"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@phantom-pm/core": "1.0.0"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"typescript": "^5.5.0",
|
|
24
|
+
"tsx": "^4.16.0",
|
|
25
|
+
"@types/node": "^20.14.0"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"phantom",
|
|
29
|
+
"mcp",
|
|
30
|
+
"ai",
|
|
31
|
+
"integration",
|
|
32
|
+
"claude",
|
|
33
|
+
"cursor"
|
|
34
|
+
],
|
|
35
|
+
"author": "PhantomPM <hello@phantom.pm>",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/PhantomPM/phantom.git",
|
|
40
|
+
"directory": "packages/mcp-server"
|
|
41
|
+
},
|
|
42
|
+
"homepage": "https://phantom.pm",
|
|
43
|
+
"bugs": {
|
|
44
|
+
"url": "https://github.com/PhantomPM/phantom/issues"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=18.0.0"
|
|
48
|
+
}
|
|
49
|
+
}
|