@phantomind/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/dist/adapters/aider.d.ts +12 -0
  2. package/dist/adapters/aider.d.ts.map +1 -0
  3. package/dist/adapters/aider.js +24 -0
  4. package/dist/adapters/aider.js.map +1 -0
  5. package/dist/adapters/base.d.ts +21 -0
  6. package/dist/adapters/base.d.ts.map +1 -0
  7. package/dist/adapters/base.js +83 -0
  8. package/dist/adapters/base.js.map +1 -0
  9. package/dist/adapters/claude-code.d.ts +12 -0
  10. package/dist/adapters/claude-code.d.ts.map +1 -0
  11. package/dist/adapters/claude-code.js +31 -0
  12. package/dist/adapters/claude-code.js.map +1 -0
  13. package/dist/adapters/cline.d.ts +12 -0
  14. package/dist/adapters/cline.d.ts.map +1 -0
  15. package/dist/adapters/cline.js +32 -0
  16. package/dist/adapters/cline.js.map +1 -0
  17. package/dist/adapters/codex.d.ts +18 -0
  18. package/dist/adapters/codex.d.ts.map +1 -0
  19. package/dist/adapters/codex.js +38 -0
  20. package/dist/adapters/codex.js.map +1 -0
  21. package/dist/adapters/continue.d.ts +12 -0
  22. package/dist/adapters/continue.d.ts.map +1 -0
  23. package/dist/adapters/continue.js +29 -0
  24. package/dist/adapters/continue.js.map +1 -0
  25. package/dist/adapters/copilot.d.ts +12 -0
  26. package/dist/adapters/copilot.d.ts.map +1 -0
  27. package/dist/adapters/copilot.js +31 -0
  28. package/dist/adapters/copilot.js.map +1 -0
  29. package/dist/adapters/cursor.d.ts +12 -0
  30. package/dist/adapters/cursor.d.ts.map +1 -0
  31. package/dist/adapters/cursor.js +34 -0
  32. package/dist/adapters/cursor.js.map +1 -0
  33. package/dist/adapters/index.d.ts +32 -0
  34. package/dist/adapters/index.d.ts.map +1 -0
  35. package/dist/adapters/index.js +64 -0
  36. package/dist/adapters/index.js.map +1 -0
  37. package/dist/adapters/windsurf.d.ts +12 -0
  38. package/dist/adapters/windsurf.d.ts.map +1 -0
  39. package/dist/adapters/windsurf.js +32 -0
  40. package/dist/adapters/windsurf.js.map +1 -0
  41. package/dist/adapters/zed.d.ts +12 -0
  42. package/dist/adapters/zed.d.ts.map +1 -0
  43. package/dist/adapters/zed.js +27 -0
  44. package/dist/adapters/zed.js.map +1 -0
  45. package/dist/agent/decomposer.d.ts +55 -0
  46. package/dist/agent/decomposer.d.ts.map +1 -0
  47. package/dist/agent/decomposer.js +172 -0
  48. package/dist/agent/decomposer.js.map +1 -0
  49. package/dist/agent/executor.d.ts +33 -0
  50. package/dist/agent/executor.d.ts.map +1 -0
  51. package/dist/agent/executor.js +260 -0
  52. package/dist/agent/executor.js.map +1 -0
  53. package/dist/agent/index.d.ts +8 -0
  54. package/dist/agent/index.d.ts.map +1 -0
  55. package/dist/agent/index.js +8 -0
  56. package/dist/agent/index.js.map +1 -0
  57. package/dist/agent/memory.d.ts +95 -0
  58. package/dist/agent/memory.d.ts.map +1 -0
  59. package/dist/agent/memory.js +211 -0
  60. package/dist/agent/memory.js.map +1 -0
  61. package/dist/agent/orchestrator.d.ts +54 -0
  62. package/dist/agent/orchestrator.d.ts.map +1 -0
  63. package/dist/agent/orchestrator.js +190 -0
  64. package/dist/agent/orchestrator.js.map +1 -0
  65. package/dist/agent/queue.d.ts +95 -0
  66. package/dist/agent/queue.d.ts.map +1 -0
  67. package/dist/agent/queue.js +231 -0
  68. package/dist/agent/queue.js.map +1 -0
  69. package/dist/agent/retry.d.ts +61 -0
  70. package/dist/agent/retry.d.ts.map +1 -0
  71. package/dist/agent/retry.js +162 -0
  72. package/dist/agent/retry.js.map +1 -0
  73. package/dist/agent/roles.d.ts +35 -0
  74. package/dist/agent/roles.d.ts.map +1 -0
  75. package/dist/agent/roles.js +269 -0
  76. package/dist/agent/roles.js.map +1 -0
  77. package/dist/cli/agent.d.ts +12 -0
  78. package/dist/cli/agent.d.ts.map +1 -0
  79. package/dist/cli/agent.js +85 -0
  80. package/dist/cli/agent.js.map +1 -0
  81. package/dist/cli/audit.d.ts +11 -0
  82. package/dist/cli/audit.d.ts.map +1 -0
  83. package/dist/cli/audit.js +63 -0
  84. package/dist/cli/audit.js.map +1 -0
  85. package/dist/cli/eval.d.ts +11 -0
  86. package/dist/cli/eval.d.ts.map +1 -0
  87. package/dist/cli/eval.js +79 -0
  88. package/dist/cli/eval.js.map +1 -0
  89. package/dist/cli/index.d.ts +9 -0
  90. package/dist/cli/index.d.ts.map +1 -0
  91. package/dist/cli/index.js +9 -0
  92. package/dist/cli/index.js.map +1 -0
  93. package/dist/cli/init.d.ts +13 -0
  94. package/dist/cli/init.d.ts.map +1 -0
  95. package/dist/cli/init.js +157 -0
  96. package/dist/cli/init.js.map +1 -0
  97. package/dist/cli/main.d.ts +7 -0
  98. package/dist/cli/main.d.ts.map +1 -0
  99. package/dist/cli/main.js +153 -0
  100. package/dist/cli/main.js.map +1 -0
  101. package/dist/cli/serve.d.ts +11 -0
  102. package/dist/cli/serve.d.ts.map +1 -0
  103. package/dist/cli/serve.js +23 -0
  104. package/dist/cli/serve.js.map +1 -0
  105. package/dist/cli/stats.d.ts +10 -0
  106. package/dist/cli/stats.d.ts.map +1 -0
  107. package/dist/cli/stats.js +68 -0
  108. package/dist/cli/stats.js.map +1 -0
  109. package/dist/cli/sync.d.ts +11 -0
  110. package/dist/cli/sync.d.ts.map +1 -0
  111. package/dist/cli/sync.js +49 -0
  112. package/dist/cli/sync.js.map +1 -0
  113. package/dist/cli/validate.d.ts +13 -0
  114. package/dist/cli/validate.d.ts.map +1 -0
  115. package/dist/cli/validate.js +125 -0
  116. package/dist/cli/validate.js.map +1 -0
  117. package/dist/config/index.d.ts +2 -0
  118. package/dist/config/index.d.ts.map +1 -0
  119. package/dist/config/index.js +2 -0
  120. package/dist/config/index.js.map +1 -0
  121. package/dist/config/loader.d.ts +25 -0
  122. package/dist/config/loader.d.ts.map +1 -0
  123. package/dist/config/loader.js +190 -0
  124. package/dist/config/loader.js.map +1 -0
  125. package/dist/context/embedder.d.ts +53 -0
  126. package/dist/context/embedder.d.ts.map +1 -0
  127. package/dist/context/embedder.js +235 -0
  128. package/dist/context/embedder.js.map +1 -0
  129. package/dist/context/engine.d.ts +82 -0
  130. package/dist/context/engine.d.ts.map +1 -0
  131. package/dist/context/engine.js +343 -0
  132. package/dist/context/engine.js.map +1 -0
  133. package/dist/context/index.d.ts +5 -0
  134. package/dist/context/index.d.ts.map +1 -0
  135. package/dist/context/index.js +5 -0
  136. package/dist/context/index.js.map +1 -0
  137. package/dist/context/learner.d.ts +44 -0
  138. package/dist/context/learner.d.ts.map +1 -0
  139. package/dist/context/learner.js +246 -0
  140. package/dist/context/learner.js.map +1 -0
  141. package/dist/context/versioning.d.ts +29 -0
  142. package/dist/context/versioning.d.ts.map +1 -0
  143. package/dist/context/versioning.js +81 -0
  144. package/dist/context/versioning.js.map +1 -0
  145. package/dist/index.d.ts +169 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +285 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/mcp/index.d.ts +2 -0
  150. package/dist/mcp/index.d.ts.map +1 -0
  151. package/dist/mcp/index.js +2 -0
  152. package/dist/mcp/index.js.map +1 -0
  153. package/dist/mcp/server.d.ts +31 -0
  154. package/dist/mcp/server.d.ts.map +1 -0
  155. package/dist/mcp/server.js +334 -0
  156. package/dist/mcp/server.js.map +1 -0
  157. package/dist/observability/audit.d.ts +61 -0
  158. package/dist/observability/audit.d.ts.map +1 -0
  159. package/dist/observability/audit.js +168 -0
  160. package/dist/observability/audit.js.map +1 -0
  161. package/dist/observability/cost-tracker.d.ts +71 -0
  162. package/dist/observability/cost-tracker.d.ts.map +1 -0
  163. package/dist/observability/cost-tracker.js +206 -0
  164. package/dist/observability/cost-tracker.js.map +1 -0
  165. package/dist/observability/dashboard.d.ts +52 -0
  166. package/dist/observability/dashboard.d.ts.map +1 -0
  167. package/dist/observability/dashboard.js +134 -0
  168. package/dist/observability/dashboard.js.map +1 -0
  169. package/dist/observability/index.d.ts +4 -0
  170. package/dist/observability/index.d.ts.map +1 -0
  171. package/dist/observability/index.js +4 -0
  172. package/dist/observability/index.js.map +1 -0
  173. package/dist/providers/anthropic.d.ts +14 -0
  174. package/dist/providers/anthropic.d.ts.map +1 -0
  175. package/dist/providers/anthropic.js +99 -0
  176. package/dist/providers/anthropic.js.map +1 -0
  177. package/dist/providers/base.d.ts +52 -0
  178. package/dist/providers/base.d.ts.map +1 -0
  179. package/dist/providers/base.js +68 -0
  180. package/dist/providers/base.js.map +1 -0
  181. package/dist/providers/deepseek.d.ts +15 -0
  182. package/dist/providers/deepseek.d.ts.map +1 -0
  183. package/dist/providers/deepseek.js +99 -0
  184. package/dist/providers/deepseek.js.map +1 -0
  185. package/dist/providers/gemini.d.ts +15 -0
  186. package/dist/providers/gemini.d.ts.map +1 -0
  187. package/dist/providers/gemini.js +118 -0
  188. package/dist/providers/gemini.js.map +1 -0
  189. package/dist/providers/groq.d.ts +15 -0
  190. package/dist/providers/groq.d.ts.map +1 -0
  191. package/dist/providers/groq.js +101 -0
  192. package/dist/providers/groq.js.map +1 -0
  193. package/dist/providers/index.d.ts +11 -0
  194. package/dist/providers/index.d.ts.map +1 -0
  195. package/dist/providers/index.js +11 -0
  196. package/dist/providers/index.js.map +1 -0
  197. package/dist/providers/mistral.d.ts +15 -0
  198. package/dist/providers/mistral.d.ts.map +1 -0
  199. package/dist/providers/mistral.js +99 -0
  200. package/dist/providers/mistral.js.map +1 -0
  201. package/dist/providers/ollama.d.ts +14 -0
  202. package/dist/providers/ollama.d.ts.map +1 -0
  203. package/dist/providers/ollama.js +122 -0
  204. package/dist/providers/ollama.js.map +1 -0
  205. package/dist/providers/openai.d.ts +14 -0
  206. package/dist/providers/openai.d.ts.map +1 -0
  207. package/dist/providers/openai.js +80 -0
  208. package/dist/providers/openai.js.map +1 -0
  209. package/dist/providers/openrouter.d.ts +15 -0
  210. package/dist/providers/openrouter.d.ts.map +1 -0
  211. package/dist/providers/openrouter.js +101 -0
  212. package/dist/providers/openrouter.js.map +1 -0
  213. package/dist/providers/router.d.ts +51 -0
  214. package/dist/providers/router.d.ts.map +1 -0
  215. package/dist/providers/router.js +198 -0
  216. package/dist/providers/router.js.map +1 -0
  217. package/dist/quality/anomaly.d.ts +32 -0
  218. package/dist/quality/anomaly.d.ts.map +1 -0
  219. package/dist/quality/anomaly.js +126 -0
  220. package/dist/quality/anomaly.js.map +1 -0
  221. package/dist/quality/consistency.d.ts +26 -0
  222. package/dist/quality/consistency.d.ts.map +1 -0
  223. package/dist/quality/consistency.js +156 -0
  224. package/dist/quality/consistency.js.map +1 -0
  225. package/dist/quality/dual-verifier.d.ts +22 -0
  226. package/dist/quality/dual-verifier.d.ts.map +1 -0
  227. package/dist/quality/dual-verifier.js +137 -0
  228. package/dist/quality/dual-verifier.js.map +1 -0
  229. package/dist/quality/hallucination-guard.d.ts +57 -0
  230. package/dist/quality/hallucination-guard.d.ts.map +1 -0
  231. package/dist/quality/hallucination-guard.js +245 -0
  232. package/dist/quality/hallucination-guard.js.map +1 -0
  233. package/dist/quality/index.d.ts +7 -0
  234. package/dist/quality/index.d.ts.map +1 -0
  235. package/dist/quality/index.js +7 -0
  236. package/dist/quality/index.js.map +1 -0
  237. package/dist/quality/regression.d.ts +44 -0
  238. package/dist/quality/regression.d.ts.map +1 -0
  239. package/dist/quality/regression.js +181 -0
  240. package/dist/quality/regression.js.map +1 -0
  241. package/dist/quality/secret-scanner.d.ts +36 -0
  242. package/dist/quality/secret-scanner.d.ts.map +1 -0
  243. package/dist/quality/secret-scanner.js +187 -0
  244. package/dist/quality/secret-scanner.js.map +1 -0
  245. package/dist/schemas/index.d.ts +2 -0
  246. package/dist/schemas/index.d.ts.map +1 -0
  247. package/dist/schemas/index.js +2 -0
  248. package/dist/schemas/index.js.map +1 -0
  249. package/dist/schemas/registry.d.ts +72 -0
  250. package/dist/schemas/registry.d.ts.map +1 -0
  251. package/dist/schemas/registry.js +483 -0
  252. package/dist/schemas/registry.js.map +1 -0
  253. package/dist/templates/engine.d.ts +70 -0
  254. package/dist/templates/engine.d.ts.map +1 -0
  255. package/dist/templates/engine.js +71 -0
  256. package/dist/templates/engine.js.map +1 -0
  257. package/dist/templates/index.d.ts +2 -0
  258. package/dist/templates/index.d.ts.map +1 -0
  259. package/dist/templates/index.js +2 -0
  260. package/dist/templates/index.js.map +1 -0
  261. package/dist/types.d.ts +912 -0
  262. package/dist/types.d.ts.map +1 -0
  263. package/dist/types.js +75 -0
  264. package/dist/types.js.map +1 -0
  265. package/package.json +85 -0
@@ -0,0 +1,157 @@
1
+ /**
2
+ * PhantomMindAI — CLI Init Command
3
+ * Interactive project initialization.
4
+ */
5
+ import { writeFile, mkdir } from 'node:fs/promises';
6
+ import { existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import { getDefaultConfig } from '../config/loader.js';
9
+ export async function initCommand(projectRoot, options) {
10
+ const chalk = (await import('chalk')).default;
11
+ const ora = (await import('ora')).default;
12
+ console.log(chalk.bold.cyan('\nšŸ”® PhantomMindAI — Project Initialization\n'));
13
+ const spinner = ora('Setting up PhantomMindAI...').start();
14
+ try {
15
+ // Create .phantomind directory
16
+ const phantomDir = join(projectRoot, '.phantomind');
17
+ const dirs = [
18
+ phantomDir,
19
+ join(phantomDir, 'memory'),
20
+ join(phantomDir, 'cache'),
21
+ join(phantomDir, 'audit'),
22
+ join(phantomDir, 'schemas'),
23
+ ];
24
+ for (const dir of dirs) {
25
+ if (!existsSync(dir)) {
26
+ await mkdir(dir, { recursive: true });
27
+ }
28
+ }
29
+ spinner.text = 'Generating configuration...';
30
+ // Build config
31
+ const config = {
32
+ ...getDefaultConfig(),
33
+ };
34
+ if (options.provider) {
35
+ config.providers = {
36
+ ...config.providers,
37
+ primary: {
38
+ ...config.providers.primary,
39
+ name: options.provider,
40
+ },
41
+ };
42
+ }
43
+ if (options.model) {
44
+ config.providers = {
45
+ ...config.providers,
46
+ primary: {
47
+ ...config.providers.primary,
48
+ model: options.model,
49
+ },
50
+ };
51
+ }
52
+ if (options.adapters) {
53
+ config.adapters = options.adapters;
54
+ }
55
+ // Write config file
56
+ const configPath = join(projectRoot, 'phantomind.config.json');
57
+ if (!existsSync(configPath)) {
58
+ await writeFile(configPath, JSON.stringify(config, null, 2));
59
+ spinner.succeed('Created phantomind.config.json');
60
+ }
61
+ else {
62
+ spinner.info('phantomind.config.json already exists, skipping');
63
+ }
64
+ // Create SKILLS.md
65
+ const skillsPath = join(phantomDir, 'SKILLS.md');
66
+ if (!existsSync(skillsPath)) {
67
+ const skillsContent = [
68
+ `# ${detectProjectName(projectRoot)} — AI Skills & Context`,
69
+ '',
70
+ '> Auto-generated by PhantomMindAI. Customize to improve AI assistance.',
71
+ '',
72
+ '## Project Overview',
73
+ `- **Root**: ${projectRoot}`,
74
+ `- **Initialized**: ${new Date().toISOString()}`,
75
+ '',
76
+ '## Tech Stack',
77
+ '<!-- Add your tech stack here -->',
78
+ '',
79
+ '## Coding Conventions',
80
+ '<!-- Add your conventions here -->',
81
+ '',
82
+ '## Key Files',
83
+ '<!-- Add important files here -->',
84
+ '',
85
+ ].join('\n');
86
+ await writeFile(skillsPath, skillsContent);
87
+ }
88
+ // Create RULES.md
89
+ const rulesPath = join(phantomDir, 'RULES.md');
90
+ if (!existsSync(rulesPath)) {
91
+ const rulesContent = [
92
+ `# ${detectProjectName(projectRoot)} — AI Rules`,
93
+ '',
94
+ '> Auto-generated by PhantomMindAI. Customize to set boundaries.',
95
+ '',
96
+ '## General Rules',
97
+ '1. Follow the existing code style',
98
+ '2. Never hardcode secrets or credentials',
99
+ '3. Always handle errors appropriately',
100
+ '4. Write self-documenting code',
101
+ '5. Keep functions focused and small',
102
+ '',
103
+ '## Forbidden Patterns',
104
+ '- Do not use `any` type in TypeScript',
105
+ '- Do not use `console.log` for production logging',
106
+ '- Do not commit commented-out code',
107
+ '',
108
+ ].join('\n');
109
+ await writeFile(rulesPath, rulesContent);
110
+ }
111
+ // Create .env.example
112
+ const envExamplePath = join(projectRoot, '.env.phantomind.example');
113
+ if (!existsSync(envExamplePath)) {
114
+ const envContent = [
115
+ '# PhantomMindAI Environment Variables',
116
+ '# Copy to .env.phantomind and fill in your values',
117
+ '',
118
+ '# Provider API Keys (set the ones you need)',
119
+ 'ANTHROPIC_API_KEY=',
120
+ 'OPENAI_API_KEY=',
121
+ 'GOOGLE_API_KEY=',
122
+ 'GROQ_API_KEY=',
123
+ 'MISTRAL_API_KEY=',
124
+ 'DEEPSEEK_API_KEY=',
125
+ 'OPENROUTER_API_KEY=',
126
+ '',
127
+ '# Optional: Ollama (local models)',
128
+ '# OLLAMA_HOST=http://localhost:11434',
129
+ '',
130
+ ].join('\n');
131
+ await writeFile(envExamplePath, envContent);
132
+ }
133
+ console.log('');
134
+ console.log(chalk.green('āœ… PhantomMindAI initialized successfully!'));
135
+ console.log('');
136
+ console.log(chalk.dim('Next steps:'));
137
+ console.log(chalk.dim(` 1. Copy ${chalk.white('.env.phantomind.example')} to ${chalk.white('.env.phantomind')} and add your API keys`));
138
+ console.log(chalk.dim(` 2. Customize ${chalk.white('.phantomind/SKILLS.md')} with your project context`));
139
+ console.log(chalk.dim(` 3. Run ${chalk.white('phantomind sync')} to generate adapter configs`));
140
+ console.log(chalk.dim(` 4. Run ${chalk.white('phantomind serve')} to start the MCP server`));
141
+ console.log('');
142
+ }
143
+ catch (error) {
144
+ spinner.fail('Initialization failed');
145
+ throw error;
146
+ }
147
+ }
148
+ function detectProjectName(root) {
149
+ try {
150
+ const pkg = require(join(root, 'package.json'));
151
+ return pkg.name ?? root.split('/').pop() ?? 'project';
152
+ }
153
+ catch {
154
+ return root.split('/').pop() ?? 'project';
155
+ }
156
+ }
157
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PhantomMindAI — CLI Entry Point
4
+ * Universal AI development enhancement layer.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
@@ -0,0 +1,153 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PhantomMindAI — CLI Entry Point
4
+ * Universal AI development enhancement layer.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { readFileSync } from 'node:fs';
8
+ import { join, dirname } from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
10
+ const __dirname = dirname(fileURLToPath(import.meta.url));
11
+ function getVersion() {
12
+ try {
13
+ const pkg = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
14
+ return pkg.version ?? '0.1.0';
15
+ }
16
+ catch {
17
+ return '0.1.0';
18
+ }
19
+ }
20
+ const program = new Command();
21
+ program
22
+ .name('phantomind')
23
+ .description('šŸ”® PhantomMindAI — Universal AI Development Enhancement Layer')
24
+ .version(getVersion());
25
+ // phantomind init
26
+ program
27
+ .command('init')
28
+ .description('Initialize PhantomMindAI in your project')
29
+ .option('-a, --adapters <adapters...>', 'Target adapters (copilot, cursor, cline, etc.)')
30
+ .option('-p, --provider <provider>', 'Primary LLM provider')
31
+ .option('-m, --model <model>', 'Default model to use')
32
+ .option('-y, --yes', 'Skip interactive prompts')
33
+ .action(async (options) => {
34
+ const { initCommand } = await import('./init.js');
35
+ await initCommand(process.cwd(), options);
36
+ });
37
+ // phantomind sync
38
+ program
39
+ .command('sync')
40
+ .description('Sync adapter configurations for AI tools')
41
+ .option('-a, --adapters <adapters...>', 'Target adapters to sync')
42
+ .option('-d, --dry-run', 'Show what would change without writing')
43
+ .option('-v, --verbose', 'Show detailed output')
44
+ .action(async (options) => {
45
+ const { syncCommand } = await import('./sync.js');
46
+ await syncCommand(process.cwd(), options);
47
+ });
48
+ // phantomind serve
49
+ program
50
+ .command('serve')
51
+ .description('Start the MCP server')
52
+ .option('-p, --port <port>', 'Server port (for HTTP transport)', '3100')
53
+ .option('-t, --transport <type>', 'Transport type (stdio, http)', 'stdio')
54
+ .option('-v, --verbose', 'Verbose logging')
55
+ .action(async (options) => {
56
+ const { serveCommand } = await import('./serve.js');
57
+ await serveCommand(process.cwd(), options);
58
+ });
59
+ // phantomind eval
60
+ program
61
+ .command('eval')
62
+ .description('Evaluate AI provider connection and response')
63
+ .option('-p, --provider <provider>', 'Provider to test')
64
+ .option('-m, --model <model>', 'Model to test')
65
+ .option('--prompt <prompt>', 'Custom test prompt')
66
+ .action(async (options) => {
67
+ const { evalCommand } = await import('./eval.js');
68
+ await evalCommand(process.cwd(), options);
69
+ });
70
+ // phantomind validate
71
+ program
72
+ .command('validate')
73
+ .description('Validate code for quality issues')
74
+ .argument('[files...]', 'Files to validate')
75
+ .option('--no-secrets', 'Skip secret scanning')
76
+ .option('--no-hallucinations', 'Skip hallucination checking')
77
+ .option('--no-consistency', 'Skip consistency checking')
78
+ .option('--fix', 'Auto-fix issues where possible')
79
+ .action(async (files, options) => {
80
+ const { validateCommand } = await import('./validate.js');
81
+ await validateCommand(process.cwd(), { ...options, files });
82
+ });
83
+ // phantomind audit
84
+ program
85
+ .command('audit')
86
+ .description('View audit trail and analytics')
87
+ .option('-p, --period <period>', 'Time period (today, week, month, all)', 'today')
88
+ .option('-f, --format <format>', 'Output format (terminal, markdown, json)', 'terminal')
89
+ .option('-t, --type <type>', 'Report type (dashboard, costs, actions)', 'dashboard')
90
+ .action(async (options) => {
91
+ const { auditCommand } = await import('./audit.js');
92
+ await auditCommand(process.cwd(), options);
93
+ });
94
+ // phantomind stats
95
+ program
96
+ .command('stats')
97
+ .description('Show project statistics and context info')
98
+ .option('-v, --verbose', 'Detailed output')
99
+ .option('-l, --learn', 'Run pattern learning')
100
+ .action(async (options) => {
101
+ const { statsCommand } = await import('./stats.js');
102
+ await statsCommand(process.cwd(), options);
103
+ });
104
+ // phantomind agent
105
+ program
106
+ .command('agent <task>')
107
+ .description('Run an agentic task')
108
+ .option('-r, --role <role>', 'Agent role (architect, implementer, securityReviewer, testWriter, documentWriter)', 'implementer')
109
+ .option('-o, --orchestrate', 'Use multi-agent orchestration')
110
+ .option('--roles <roles...>', 'Roles for orchestration')
111
+ .option('--max-steps <steps>', 'Maximum execution steps', '30')
112
+ .action(async (task, options) => {
113
+ const { agentCommand } = await import('./agent.js');
114
+ await agentCommand(process.cwd(), task, {
115
+ ...options,
116
+ maxSteps: parseInt(options.maxSteps, 10),
117
+ });
118
+ });
119
+ // phantomind schema
120
+ program
121
+ .command('schema [name]')
122
+ .description('List or show schema definitions')
123
+ .option('-l, --list', 'List all schemas')
124
+ .option('-s, --search <query>', 'Search schemas')
125
+ .action(async (name, options) => {
126
+ const { SchemaRegistry } = await import('../schemas/index.js');
127
+ const registry = new SchemaRegistry(process.cwd());
128
+ await registry.loadCustomSchemas();
129
+ if (options.list || !name) {
130
+ const schemas = options.search
131
+ ? registry.search(options.search)
132
+ : registry.list();
133
+ console.log(`\nAvailable Schemas (${schemas.length}):\n`);
134
+ for (const s of schemas) {
135
+ console.log(` ${s.name} — ${s.description} ${s.tags ? `[${s.tags.join(', ')}]` : ''}`);
136
+ }
137
+ console.log('');
138
+ }
139
+ else {
140
+ const schema = registry.get(name);
141
+ if (schema) {
142
+ console.log(`\n${schema.name} — ${schema.description}\n`);
143
+ console.log(JSON.stringify(schema.schema, null, 2));
144
+ console.log('');
145
+ }
146
+ else {
147
+ console.error(`Schema '${name}' not found`);
148
+ process.exit(1);
149
+ }
150
+ }
151
+ });
152
+ program.parse();
153
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * PhantomMindAI — CLI Serve Command
3
+ * Starts the MCP server for AI tool integration.
4
+ */
5
+ export interface ServeOptions {
6
+ port?: number;
7
+ transport?: 'stdio' | 'http';
8
+ verbose?: boolean;
9
+ }
10
+ export declare function serveCommand(projectRoot: string, options: ServeOptions): Promise<void>;
11
+ //# sourceMappingURL=serve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/cli/serve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * PhantomMindAI — CLI Serve Command
3
+ * Starts the MCP server for AI tool integration.
4
+ */
5
+ export async function serveCommand(projectRoot, options) {
6
+ const chalk = (await import('chalk')).default;
7
+ console.log(chalk.bold.cyan('\n🌐 PhantomMindAI — MCP Server\n'));
8
+ try {
9
+ const { startMCPServer } = await import('../mcp/index.js');
10
+ console.log(chalk.dim(` Transport: ${options.transport ?? 'stdio'}`));
11
+ console.log(chalk.dim(` Project: ${projectRoot}`));
12
+ console.log('');
13
+ console.log(chalk.green('Starting MCP server...'));
14
+ console.log(chalk.dim('Press Ctrl+C to stop'));
15
+ console.log('');
16
+ await startMCPServer();
17
+ }
18
+ catch (error) {
19
+ console.error(chalk.red('Failed to start MCP server:'), error.message);
20
+ process.exit(1);
21
+ }
22
+ }
23
+ //# sourceMappingURL=serve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/cli/serve.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,OAAqB;IAErB,MAAM,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAE9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAE3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * PhantomMindAI — CLI Stats Command
3
+ * Display project statistics and context info.
4
+ */
5
+ export interface StatsOptions {
6
+ verbose?: boolean;
7
+ learn?: boolean;
8
+ }
9
+ export declare function statsCommand(projectRoot: string, options: StatsOptions): Promise<void>;
10
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAqEf"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * PhantomMindAI — CLI Stats Command
3
+ * Display project statistics and context info.
4
+ */
5
+ import { loadConfig } from '../config/loader.js';
6
+ import { ContextEngine } from '../context/engine.js';
7
+ import { CodebaseEmbedder } from '../context/embedder.js';
8
+ import { ContextLearner } from '../context/learner.js';
9
+ export async function statsCommand(projectRoot, options) {
10
+ const chalk = (await import('chalk')).default;
11
+ const ora = (await import('ora')).default;
12
+ console.log(chalk.bold.cyan('\nšŸ“ˆ PhantomMindAI — Project Stats\n'));
13
+ const spinner = ora('Analyzing project...').start();
14
+ try {
15
+ const config = await loadConfig(projectRoot);
16
+ // Context Engine stats
17
+ spinner.text = 'Gathering context...';
18
+ const engine = new ContextEngine(config, projectRoot);
19
+ const context = await engine.getProjectContext({ maxTokens: 5000 });
20
+ // Codebase embeddings stats
21
+ spinner.text = 'Analyzing codebase...';
22
+ const embedder = new CodebaseEmbedder(projectRoot);
23
+ await embedder.build();
24
+ spinner.stop();
25
+ console.log(chalk.bold('Project Context:'));
26
+ console.log(` Layers: ${context.layers.length}`);
27
+ console.log(` Total Tokens: ~${context.totalTokens.toLocaleString()}`);
28
+ console.log('');
29
+ for (const layer of context.layers) {
30
+ const tokenCount = Math.ceil(layer.content.length / 4);
31
+ console.log(` ${chalk.dim('─')} ${chalk.cyan(layer.type)} (relevance: ${layer.relevanceScore.toFixed(2)}, ~${tokenCount} tokens)`);
32
+ }
33
+ console.log('');
34
+ console.log(chalk.bold('Codebase Index:'));
35
+ console.log(` Status: built`);
36
+ console.log('');
37
+ // Learn patterns
38
+ if (options.learn) {
39
+ spinner.start('Learning project patterns...');
40
+ const learner = new ContextLearner(projectRoot);
41
+ await learner.learn();
42
+ const learnedSkills = learner.generateSkillsContent();
43
+ spinner.stop();
44
+ console.log(chalk.bold('Learned Patterns:'));
45
+ const lines = learnedSkills.split('\n').slice(0, 20);
46
+ for (const line of lines) {
47
+ console.log(` ${line}`);
48
+ }
49
+ if (learnedSkills.split('\n').length > 20) {
50
+ console.log(chalk.dim(` ... and ${learnedSkills.split('\n').length - 20} more lines`));
51
+ }
52
+ console.log('');
53
+ }
54
+ // Config summary
55
+ console.log(chalk.bold('Configuration:'));
56
+ console.log(` Primary Provider: ${config.providers?.primary?.name ?? 'none'}`);
57
+ console.log(` Adapters: ${config.adapters?.join(', ') ?? 'none'}`);
58
+ console.log(` MCP Server: ${config.mcp?.enabled ? 'enabled' : 'disabled'}`);
59
+ console.log(` Budget (daily): ${config.budget?.maxCostPerDay ? `$${config.budget.maxCostPerDay}` : 'unlimited'}`);
60
+ console.log('');
61
+ }
62
+ catch (error) {
63
+ spinner.fail('Stats collection failed');
64
+ console.error(chalk.red(error.message));
65
+ process.exit(1);
66
+ }
67
+ }
68
+ //# sourceMappingURL=stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * PhantomMindAI — CLI Sync Command
3
+ * Generates and syncs adapter configurations for all AI tools.
4
+ */
5
+ export interface SyncOptions {
6
+ adapters?: string[];
7
+ dryRun?: boolean;
8
+ verbose?: boolean;
9
+ }
10
+ export declare function syncCommand(projectRoot: string, options: SyncOptions): Promise<void>;
11
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA0Df"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * PhantomMindAI — CLI Sync Command
3
+ * Generates and syncs adapter configurations for all AI tools.
4
+ */
5
+ import { loadConfig } from '../config/loader.js';
6
+ import { ContextEngine } from '../context/engine.js';
7
+ import { syncAllAdapters } from '../adapters/index.js';
8
+ export async function syncCommand(projectRoot, options) {
9
+ const chalk = (await import('chalk')).default;
10
+ const ora = (await import('ora')).default;
11
+ console.log(chalk.bold.cyan('\nšŸ”„ PhantomMindAI — Sync Adapters\n'));
12
+ const spinner = ora('Loading configuration...').start();
13
+ try {
14
+ const config = await loadConfig(projectRoot);
15
+ spinner.text = 'Building project context...';
16
+ const engine = new ContextEngine(config, projectRoot);
17
+ await engine.getProjectContext({ maxTokens: 4000 });
18
+ spinner.text = 'Syncing adapters...';
19
+ // Filter adapters if specific ones requested
20
+ let syncConfig = config;
21
+ if (options.adapters && options.adapters.length > 0) {
22
+ syncConfig = { ...config, adapters: options.adapters };
23
+ }
24
+ const results = await syncAllAdapters(projectRoot, syncConfig, options.dryRun ?? false);
25
+ spinner.stop();
26
+ console.log('');
27
+ for (const result of results) {
28
+ const icon = result.success ? chalk.green('āœ“') : chalk.red('āœ—');
29
+ const status = options.dryRun ? chalk.yellow('[dry-run]') : '';
30
+ console.log(` ${icon} ${chalk.bold(result.adapter)} ${status}`);
31
+ if (options.verbose && result.changed) {
32
+ console.log(chalk.dim(` → ${result.outputPath}`));
33
+ }
34
+ if (!result.success && result.error) {
35
+ console.log(chalk.red(` Error: ${result.error}`));
36
+ }
37
+ }
38
+ const successCount = results.filter(r => r.success).length;
39
+ console.log('');
40
+ console.log(chalk.green(`āœ… Synced ${successCount}/${results.length} adapters successfully`));
41
+ console.log('');
42
+ }
43
+ catch (error) {
44
+ spinner.fail('Sync failed');
45
+ console.error(error.message);
46
+ process.exit(1);
47
+ }
48
+ }
49
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * PhantomMindAI — CLI Validate Command
3
+ * Validate code output for quality issues.
4
+ */
5
+ export interface ValidateOptions {
6
+ files?: string[];
7
+ secrets?: boolean;
8
+ hallucinations?: boolean;
9
+ consistency?: boolean;
10
+ fix?: boolean;
11
+ }
12
+ export declare function validateCommand(projectRoot: string, options: ValidateOptions): Promise<void>;
13
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/cli/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CAkIf"}