@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.
- package/dist/adapters/aider.d.ts +12 -0
- package/dist/adapters/aider.d.ts.map +1 -0
- package/dist/adapters/aider.js +24 -0
- package/dist/adapters/aider.js.map +1 -0
- package/dist/adapters/base.d.ts +21 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +83 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +12 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +31 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/cline.d.ts +12 -0
- package/dist/adapters/cline.d.ts.map +1 -0
- package/dist/adapters/cline.js +32 -0
- package/dist/adapters/cline.js.map +1 -0
- package/dist/adapters/codex.d.ts +18 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +38 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/continue.d.ts +12 -0
- package/dist/adapters/continue.d.ts.map +1 -0
- package/dist/adapters/continue.js +29 -0
- package/dist/adapters/continue.js.map +1 -0
- package/dist/adapters/copilot.d.ts +12 -0
- package/dist/adapters/copilot.d.ts.map +1 -0
- package/dist/adapters/copilot.js +31 -0
- package/dist/adapters/copilot.js.map +1 -0
- package/dist/adapters/cursor.d.ts +12 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +34 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/index.d.ts +32 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +64 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/windsurf.d.ts +12 -0
- package/dist/adapters/windsurf.d.ts.map +1 -0
- package/dist/adapters/windsurf.js +32 -0
- package/dist/adapters/windsurf.js.map +1 -0
- package/dist/adapters/zed.d.ts +12 -0
- package/dist/adapters/zed.d.ts.map +1 -0
- package/dist/adapters/zed.js +27 -0
- package/dist/adapters/zed.js.map +1 -0
- package/dist/agent/decomposer.d.ts +55 -0
- package/dist/agent/decomposer.d.ts.map +1 -0
- package/dist/agent/decomposer.js +172 -0
- package/dist/agent/decomposer.js.map +1 -0
- package/dist/agent/executor.d.ts +33 -0
- package/dist/agent/executor.d.ts.map +1 -0
- package/dist/agent/executor.js +260 -0
- package/dist/agent/executor.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/memory.d.ts +95 -0
- package/dist/agent/memory.d.ts.map +1 -0
- package/dist/agent/memory.js +211 -0
- package/dist/agent/memory.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +54 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +190 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/agent/queue.d.ts +95 -0
- package/dist/agent/queue.d.ts.map +1 -0
- package/dist/agent/queue.js +231 -0
- package/dist/agent/queue.js.map +1 -0
- package/dist/agent/retry.d.ts +61 -0
- package/dist/agent/retry.d.ts.map +1 -0
- package/dist/agent/retry.js +162 -0
- package/dist/agent/retry.js.map +1 -0
- package/dist/agent/roles.d.ts +35 -0
- package/dist/agent/roles.d.ts.map +1 -0
- package/dist/agent/roles.js +269 -0
- package/dist/agent/roles.js.map +1 -0
- package/dist/cli/agent.d.ts +12 -0
- package/dist/cli/agent.d.ts.map +1 -0
- package/dist/cli/agent.js +85 -0
- package/dist/cli/agent.js.map +1 -0
- package/dist/cli/audit.d.ts +11 -0
- package/dist/cli/audit.d.ts.map +1 -0
- package/dist/cli/audit.js +63 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/eval.d.ts +11 -0
- package/dist/cli/eval.d.ts.map +1 -0
- package/dist/cli/eval.js +79 -0
- package/dist/cli/eval.js.map +1 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +9 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +13 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +157 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/main.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +153 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/serve.d.ts +11 -0
- package/dist/cli/serve.d.ts.map +1 -0
- package/dist/cli/serve.js +23 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/stats.d.ts +10 -0
- package/dist/cli/stats.d.ts.map +1 -0
- package/dist/cli/stats.js +68 -0
- package/dist/cli/stats.js.map +1 -0
- package/dist/cli/sync.d.ts +11 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +49 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/cli/validate.d.ts +13 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +125 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +25 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +190 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/context/embedder.d.ts +53 -0
- package/dist/context/embedder.d.ts.map +1 -0
- package/dist/context/embedder.js +235 -0
- package/dist/context/embedder.js.map +1 -0
- package/dist/context/engine.d.ts +82 -0
- package/dist/context/engine.d.ts.map +1 -0
- package/dist/context/engine.js +343 -0
- package/dist/context/engine.js.map +1 -0
- package/dist/context/index.d.ts +5 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +5 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/learner.d.ts +44 -0
- package/dist/context/learner.d.ts.map +1 -0
- package/dist/context/learner.js +246 -0
- package/dist/context/learner.js.map +1 -0
- package/dist/context/versioning.d.ts +29 -0
- package/dist/context/versioning.d.ts.map +1 -0
- package/dist/context/versioning.js +81 -0
- package/dist/context/versioning.js.map +1 -0
- package/dist/index.d.ts +169 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +285 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +31 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +334 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/observability/audit.d.ts +61 -0
- package/dist/observability/audit.d.ts.map +1 -0
- package/dist/observability/audit.js +168 -0
- package/dist/observability/audit.js.map +1 -0
- package/dist/observability/cost-tracker.d.ts +71 -0
- package/dist/observability/cost-tracker.d.ts.map +1 -0
- package/dist/observability/cost-tracker.js +206 -0
- package/dist/observability/cost-tracker.js.map +1 -0
- package/dist/observability/dashboard.d.ts +52 -0
- package/dist/observability/dashboard.d.ts.map +1 -0
- package/dist/observability/dashboard.js +134 -0
- package/dist/observability/dashboard.js.map +1 -0
- package/dist/observability/index.d.ts +4 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +4 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/providers/anthropic.d.ts +14 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +99 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +52 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +68 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/deepseek.d.ts +15 -0
- package/dist/providers/deepseek.d.ts.map +1 -0
- package/dist/providers/deepseek.js +99 -0
- package/dist/providers/deepseek.js.map +1 -0
- package/dist/providers/gemini.d.ts +15 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +118 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/groq.d.ts +15 -0
- package/dist/providers/groq.d.ts.map +1 -0
- package/dist/providers/groq.js +101 -0
- package/dist/providers/groq.js.map +1 -0
- package/dist/providers/index.d.ts +11 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +11 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mistral.d.ts +15 -0
- package/dist/providers/mistral.d.ts.map +1 -0
- package/dist/providers/mistral.js +99 -0
- package/dist/providers/mistral.js.map +1 -0
- package/dist/providers/ollama.d.ts +14 -0
- package/dist/providers/ollama.d.ts.map +1 -0
- package/dist/providers/ollama.js +122 -0
- package/dist/providers/ollama.js.map +1 -0
- package/dist/providers/openai.d.ts +14 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +80 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +15 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +101 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/providers/router.d.ts +51 -0
- package/dist/providers/router.d.ts.map +1 -0
- package/dist/providers/router.js +198 -0
- package/dist/providers/router.js.map +1 -0
- package/dist/quality/anomaly.d.ts +32 -0
- package/dist/quality/anomaly.d.ts.map +1 -0
- package/dist/quality/anomaly.js +126 -0
- package/dist/quality/anomaly.js.map +1 -0
- package/dist/quality/consistency.d.ts +26 -0
- package/dist/quality/consistency.d.ts.map +1 -0
- package/dist/quality/consistency.js +156 -0
- package/dist/quality/consistency.js.map +1 -0
- package/dist/quality/dual-verifier.d.ts +22 -0
- package/dist/quality/dual-verifier.d.ts.map +1 -0
- package/dist/quality/dual-verifier.js +137 -0
- package/dist/quality/dual-verifier.js.map +1 -0
- package/dist/quality/hallucination-guard.d.ts +57 -0
- package/dist/quality/hallucination-guard.d.ts.map +1 -0
- package/dist/quality/hallucination-guard.js +245 -0
- package/dist/quality/hallucination-guard.js.map +1 -0
- package/dist/quality/index.d.ts +7 -0
- package/dist/quality/index.d.ts.map +1 -0
- package/dist/quality/index.js +7 -0
- package/dist/quality/index.js.map +1 -0
- package/dist/quality/regression.d.ts +44 -0
- package/dist/quality/regression.d.ts.map +1 -0
- package/dist/quality/regression.js +181 -0
- package/dist/quality/regression.js.map +1 -0
- package/dist/quality/secret-scanner.d.ts +36 -0
- package/dist/quality/secret-scanner.d.ts.map +1 -0
- package/dist/quality/secret-scanner.js +187 -0
- package/dist/quality/secret-scanner.js.map +1 -0
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +2 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/registry.d.ts +72 -0
- package/dist/schemas/registry.d.ts.map +1 -0
- package/dist/schemas/registry.js +483 -0
- package/dist/schemas/registry.js.map +1 -0
- package/dist/templates/engine.d.ts +70 -0
- package/dist/templates/engine.d.ts.map +1 -0
- package/dist/templates/engine.js +71 -0
- package/dist/templates/engine.js.map +1 -0
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +2 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/types.d.ts +912 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +75 -0
- package/dist/types.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI ā Agent Roles
|
|
3
|
+
* Persona & role system with specialized system prompts.
|
|
4
|
+
*/
|
|
5
|
+
const ROLE_DEFINITIONS = {
|
|
6
|
+
architect: {
|
|
7
|
+
name: 'architect',
|
|
8
|
+
displayName: 'Software Architect',
|
|
9
|
+
description: 'Designs system architecture, reviews design decisions, and ensures structural integrity.',
|
|
10
|
+
temperature: 0.3,
|
|
11
|
+
focus: [
|
|
12
|
+
'System design and architecture',
|
|
13
|
+
'Design patterns and best practices',
|
|
14
|
+
'Scalability and maintainability',
|
|
15
|
+
'Module boundaries and interfaces',
|
|
16
|
+
'Technology selection',
|
|
17
|
+
],
|
|
18
|
+
constraints: [
|
|
19
|
+
'Always consider separation of concerns',
|
|
20
|
+
'Prefer composition over inheritance',
|
|
21
|
+
'Design for testability',
|
|
22
|
+
'Follow SOLID principles',
|
|
23
|
+
'Consider backward compatibility',
|
|
24
|
+
],
|
|
25
|
+
systemPrompt: `You are a Senior Software Architect. Your primary responsibility is designing robust, scalable, and maintainable software systems.
|
|
26
|
+
|
|
27
|
+
## Your Expertise
|
|
28
|
+
- System design and architecture patterns (MVC, CQRS, Event Sourcing, Hexagonal, etc.)
|
|
29
|
+
- Microservices and monolith architecture decisions
|
|
30
|
+
- API design (REST, GraphQL, gRPC)
|
|
31
|
+
- Database design and data modeling
|
|
32
|
+
- Performance optimization and scalability planning
|
|
33
|
+
- Security architecture
|
|
34
|
+
|
|
35
|
+
## Your Approach
|
|
36
|
+
1. Understand the full requirements before proposing solutions
|
|
37
|
+
2. Consider multiple architectural approaches and their trade-offs
|
|
38
|
+
3. Design clear module boundaries and interfaces
|
|
39
|
+
4. Ensure the architecture supports future extensibility
|
|
40
|
+
5. Document key architectural decisions with rationale
|
|
41
|
+
|
|
42
|
+
## Constraints
|
|
43
|
+
- Always justify architectural decisions with reasoning
|
|
44
|
+
- Prefer proven patterns over novel approaches
|
|
45
|
+
- Consider the team's skill level and project timeline
|
|
46
|
+
- Design for testability from the start
|
|
47
|
+
- Never sacrifice security for convenience`,
|
|
48
|
+
},
|
|
49
|
+
implementer: {
|
|
50
|
+
name: 'implementer',
|
|
51
|
+
displayName: 'Implementation Engineer',
|
|
52
|
+
description: 'Writes production-quality code following best practices and project conventions.',
|
|
53
|
+
temperature: 0.2,
|
|
54
|
+
focus: [
|
|
55
|
+
'Writing clean, efficient code',
|
|
56
|
+
'Following project conventions',
|
|
57
|
+
'Error handling and edge cases',
|
|
58
|
+
'Type safety and correctness',
|
|
59
|
+
'Performance-conscious implementation',
|
|
60
|
+
],
|
|
61
|
+
constraints: [
|
|
62
|
+
'Follow existing code style and conventions',
|
|
63
|
+
'Write self-documenting code',
|
|
64
|
+
'Handle errors appropriately',
|
|
65
|
+
'Never hardcode secrets or credentials',
|
|
66
|
+
'Keep functions focused and small',
|
|
67
|
+
],
|
|
68
|
+
systemPrompt: `You are an Expert Implementation Engineer. Your primary responsibility is writing high-quality, production-ready code.
|
|
69
|
+
|
|
70
|
+
## Your Expertise
|
|
71
|
+
- Writing clean, maintainable, and efficient code
|
|
72
|
+
- Deep knowledge of language idioms and best practices
|
|
73
|
+
- Strong understanding of data structures and algorithms
|
|
74
|
+
- Performance optimization techniques
|
|
75
|
+
- Comprehensive error handling
|
|
76
|
+
|
|
77
|
+
## Your Approach
|
|
78
|
+
1. Understand the existing codebase conventions before writing code
|
|
79
|
+
2. Write code that reads like documentation
|
|
80
|
+
3. Handle edge cases and error conditions
|
|
81
|
+
4. Use appropriate abstractions (not too many, not too few)
|
|
82
|
+
5. Write code that is easy to test
|
|
83
|
+
|
|
84
|
+
## Constraints
|
|
85
|
+
- Follow the project's existing coding style exactly
|
|
86
|
+
- Never introduce dependencies without justification
|
|
87
|
+
- Always handle errors ā never use bare catches or ignore them
|
|
88
|
+
- Never hardcode secrets, credentials, or environment-specific values
|
|
89
|
+
- Keep functions under 50 lines when possible
|
|
90
|
+
- Use meaningful variable and function names`,
|
|
91
|
+
},
|
|
92
|
+
securityReviewer: {
|
|
93
|
+
name: 'securityReviewer',
|
|
94
|
+
displayName: 'Security Reviewer',
|
|
95
|
+
description: 'Reviews code for security vulnerabilities and ensures compliance with security best practices.',
|
|
96
|
+
temperature: 0.1,
|
|
97
|
+
focus: [
|
|
98
|
+
'OWASP Top 10 vulnerabilities',
|
|
99
|
+
'Input validation and sanitization',
|
|
100
|
+
'Authentication and authorization',
|
|
101
|
+
'Data encryption and protection',
|
|
102
|
+
'Secure dependency management',
|
|
103
|
+
],
|
|
104
|
+
constraints: [
|
|
105
|
+
'Never approve code with known vulnerabilities',
|
|
106
|
+
'Always recommend the most secure approach',
|
|
107
|
+
'Flag any hardcoded credentials immediately',
|
|
108
|
+
'Consider the principle of least privilege',
|
|
109
|
+
'Verify input validation at all boundaries',
|
|
110
|
+
],
|
|
111
|
+
systemPrompt: `You are a Senior Security Engineer reviewing code for vulnerabilities. Your primary responsibility is ensuring code security.
|
|
112
|
+
|
|
113
|
+
## Your Expertise
|
|
114
|
+
- OWASP Top 10 vulnerability detection
|
|
115
|
+
- Injection attacks (SQL, XSS, Command, LDAP)
|
|
116
|
+
- Authentication and session management
|
|
117
|
+
- Cryptographic best practices
|
|
118
|
+
- Secure API design
|
|
119
|
+
- Supply chain security
|
|
120
|
+
- Data protection and privacy (GDPR, CCPA)
|
|
121
|
+
|
|
122
|
+
## Your Approach
|
|
123
|
+
1. Scan for common vulnerability patterns
|
|
124
|
+
2. Check input validation at all trust boundaries
|
|
125
|
+
3. Verify authentication and authorization logic
|
|
126
|
+
4. Review cryptographic implementations
|
|
127
|
+
5. Check for information disclosure
|
|
128
|
+
6. Analyze dependency security
|
|
129
|
+
|
|
130
|
+
## Severity Classification
|
|
131
|
+
- CRITICAL: Remote code execution, SQL injection, authentication bypass
|
|
132
|
+
- HIGH: XSS, CSRF, insecure deserialization, path traversal
|
|
133
|
+
- MEDIUM: Information disclosure, weak cryptography, missing rate limiting
|
|
134
|
+
- LOW: Missing security headers, verbose error messages
|
|
135
|
+
|
|
136
|
+
## Constraints
|
|
137
|
+
- Never mark code as secure if you have any doubts
|
|
138
|
+
- Always provide remediation guidance with findings
|
|
139
|
+
- Consider both server-side and client-side security
|
|
140
|
+
- Check for hardcoded secrets and credentials
|
|
141
|
+
- Verify secure communication (TLS/HTTPS)`,
|
|
142
|
+
},
|
|
143
|
+
documentWriter: {
|
|
144
|
+
name: 'documentWriter',
|
|
145
|
+
displayName: 'Documentation Writer',
|
|
146
|
+
description: 'Creates and maintains comprehensive project documentation.',
|
|
147
|
+
temperature: 0.4,
|
|
148
|
+
focus: [
|
|
149
|
+
'API documentation',
|
|
150
|
+
'Architecture documentation',
|
|
151
|
+
'User guides and tutorials',
|
|
152
|
+
'README and getting started guides',
|
|
153
|
+
'Code comments and JSDoc',
|
|
154
|
+
],
|
|
155
|
+
constraints: [
|
|
156
|
+
'Documentation must be accurate and up-to-date',
|
|
157
|
+
'Use clear, concise language',
|
|
158
|
+
'Include practical examples',
|
|
159
|
+
'Follow the project documentation standards',
|
|
160
|
+
'Keep documentation DRY ā reference, dont repeat',
|
|
161
|
+
],
|
|
162
|
+
systemPrompt: `You are a Technical Documentation Writer. Your primary responsibility is creating clear, comprehensive, and accurate documentation.
|
|
163
|
+
|
|
164
|
+
## Your Expertise
|
|
165
|
+
- Technical writing and communication
|
|
166
|
+
- API documentation (OpenAPI/Swagger, JSDoc, TSDoc)
|
|
167
|
+
- Architecture Decision Records (ADRs)
|
|
168
|
+
- User guides and tutorials
|
|
169
|
+
- README files and getting started guides
|
|
170
|
+
|
|
171
|
+
## Your Approach
|
|
172
|
+
1. Understand the audience (developers, users, operators)
|
|
173
|
+
2. Structure information logically (overview ā details ā examples)
|
|
174
|
+
3. Use consistent formatting and terminology
|
|
175
|
+
4. Include practical, working examples
|
|
176
|
+
5. Keep documentation concise but complete
|
|
177
|
+
|
|
178
|
+
## Constraints
|
|
179
|
+
- Always verify technical accuracy before documenting
|
|
180
|
+
- Use active voice and present tense
|
|
181
|
+
- Include code examples that actually work
|
|
182
|
+
- Document the "why" not just the "what"
|
|
183
|
+
- Follow existing documentation patterns in the project`,
|
|
184
|
+
},
|
|
185
|
+
testWriter: {
|
|
186
|
+
name: 'testWriter',
|
|
187
|
+
displayName: 'Test Engineer',
|
|
188
|
+
description: 'Writes comprehensive test suites with high coverage and meaningful assertions.',
|
|
189
|
+
temperature: 0.2,
|
|
190
|
+
focus: [
|
|
191
|
+
'Unit testing',
|
|
192
|
+
'Integration testing',
|
|
193
|
+
'Edge case coverage',
|
|
194
|
+
'Test readability and maintainability',
|
|
195
|
+
'Mock and stub strategies',
|
|
196
|
+
],
|
|
197
|
+
constraints: [
|
|
198
|
+
'Tests must be deterministic',
|
|
199
|
+
'Each test should test one thing',
|
|
200
|
+
'Use descriptive test names',
|
|
201
|
+
'Avoid testing implementation details',
|
|
202
|
+
'Mock external dependencies, not internal ones',
|
|
203
|
+
],
|
|
204
|
+
systemPrompt: `You are a Senior Test Engineer. Your primary responsibility is writing comprehensive, reliable test suites.
|
|
205
|
+
|
|
206
|
+
## Your Expertise
|
|
207
|
+
- Unit testing with assertion libraries
|
|
208
|
+
- Integration and end-to-end testing
|
|
209
|
+
- Test-Driven Development (TDD)
|
|
210
|
+
- Mocking, stubbing, and faking strategies
|
|
211
|
+
- Property-based testing
|
|
212
|
+
- Performance and load testing
|
|
213
|
+
|
|
214
|
+
## Your Approach
|
|
215
|
+
1. Follow Arrange-Act-Assert (AAA) pattern
|
|
216
|
+
2. Test behavior, not implementation
|
|
217
|
+
3. Cover happy paths, edge cases, and error conditions
|
|
218
|
+
4. Use meaningful test descriptions (should... when...)
|
|
219
|
+
5. Keep tests independent and deterministic
|
|
220
|
+
|
|
221
|
+
## Test Naming Convention
|
|
222
|
+
describe('ClassName / functionName', () => {
|
|
223
|
+
it('should [expected behavior] when [condition]', () => {})
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
## Constraints
|
|
227
|
+
- Every test must be deterministic (no flaky tests)
|
|
228
|
+
- Each test should assert one logical concept
|
|
229
|
+
- Use descriptive names that explain the scenario
|
|
230
|
+
- Avoid testing private methods directly
|
|
231
|
+
- Mock at boundaries (APIs, databases, file system)
|
|
232
|
+
- Dont test framework code ā trust the framework`,
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* Get the system prompt for a role
|
|
237
|
+
*/
|
|
238
|
+
export function getRoleSystemPrompt(role) {
|
|
239
|
+
return ROLE_DEFINITIONS[role]?.systemPrompt ?? ROLE_DEFINITIONS.implementer.systemPrompt;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get the full role definition
|
|
243
|
+
*/
|
|
244
|
+
export function getRoleDefinition(role) {
|
|
245
|
+
return ROLE_DEFINITIONS[role] ?? ROLE_DEFINITIONS.implementer;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Get all available roles
|
|
249
|
+
*/
|
|
250
|
+
export function getAvailableRoles() {
|
|
251
|
+
return Object.values(ROLE_DEFINITIONS);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get recommended temperature for a role
|
|
255
|
+
*/
|
|
256
|
+
export function getRoleTemperature(role) {
|
|
257
|
+
return ROLE_DEFINITIONS[role]?.temperature ?? 0.2;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Build a composite system prompt from multiple roles
|
|
261
|
+
*/
|
|
262
|
+
export function buildMultiRolePrompt(roles) {
|
|
263
|
+
const prompts = roles.map(role => {
|
|
264
|
+
const def = ROLE_DEFINITIONS[role];
|
|
265
|
+
return def ? `## Role: ${def.displayName}\n${def.systemPrompt}` : '';
|
|
266
|
+
}).filter(Boolean);
|
|
267
|
+
return `You are a multi-disciplinary AI assistant with the following roles:\n\n${prompts.join('\n\n---\n\n')}`;
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../src/agent/roles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI ā CLI Agent Command
|
|
3
|
+
* Run agentic tasks from the command line.
|
|
4
|
+
*/
|
|
5
|
+
export interface AgentOptions {
|
|
6
|
+
role?: string;
|
|
7
|
+
orchestrate?: boolean;
|
|
8
|
+
roles?: string[];
|
|
9
|
+
maxSteps?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function agentCommand(projectRoot: string, task: string, options: AgentOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/cli/agent.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAyFf"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI ā CLI Agent Command
|
|
3
|
+
* Run agentic tasks from the command line.
|
|
4
|
+
*/
|
|
5
|
+
import { loadConfig } from '../config/loader.js';
|
|
6
|
+
import { ContextEngine } from '../context/engine.js';
|
|
7
|
+
import { ProviderRouter } from '../providers/router.js';
|
|
8
|
+
import { AgentExecutor } from '../agent/executor.js';
|
|
9
|
+
import { AgentOrchestrator } from '../agent/orchestrator.js';
|
|
10
|
+
export async function agentCommand(projectRoot, task, options) {
|
|
11
|
+
const chalk = (await import('chalk')).default;
|
|
12
|
+
const ora = (await import('ora')).default;
|
|
13
|
+
console.log(chalk.bold.cyan('\nš¤ PhantomMindAI ā Agent Execution\n'));
|
|
14
|
+
const spinner = ora('Initializing agent...').start();
|
|
15
|
+
try {
|
|
16
|
+
const config = await loadConfig(projectRoot);
|
|
17
|
+
const contextEngine = new ContextEngine(config, projectRoot);
|
|
18
|
+
const router = new ProviderRouter(config.providers, config.budget ? {
|
|
19
|
+
maxCostPerDay: config.budget.maxCostPerDay,
|
|
20
|
+
warningAt: config.budget.warningAt,
|
|
21
|
+
fallbackOnBudget: config.budget.fallbackOnBudget,
|
|
22
|
+
} : undefined);
|
|
23
|
+
if (options.orchestrate) {
|
|
24
|
+
// Multi-agent orchestration
|
|
25
|
+
const roles = (options.roles ?? ['architect', 'implementer', 'securityReviewer']);
|
|
26
|
+
spinner.text = `Orchestrating ${roles.join(', ')}...`;
|
|
27
|
+
const orchestrator = new AgentOrchestrator(router, contextEngine, projectRoot);
|
|
28
|
+
orchestrator.on('orchestration:phase', ({ phase }) => {
|
|
29
|
+
spinner.text = `Phase: ${phase}...`;
|
|
30
|
+
});
|
|
31
|
+
spinner.stop();
|
|
32
|
+
console.log(chalk.dim(` Task: ${task}`));
|
|
33
|
+
console.log(chalk.dim(` Roles: ${roles.join(', ')}`));
|
|
34
|
+
console.log(chalk.dim(` Mode: orchestrated`));
|
|
35
|
+
console.log('');
|
|
36
|
+
const spinnerRun = ora('Running orchestration...').start();
|
|
37
|
+
const result = await orchestrator.orchestrate(task, roles);
|
|
38
|
+
spinnerRun.stop();
|
|
39
|
+
console.log(chalk.bold(`Result: ${result.success ? chalk.green('Success') : chalk.red('Failed')}`));
|
|
40
|
+
console.log(` Duration: ${(result.duration / 1000).toFixed(1)}s`);
|
|
41
|
+
console.log(` Cost: $${result.totalUsage.estimatedCost.toFixed(4)}`);
|
|
42
|
+
console.log(` Phases: ${result.phases.length}`);
|
|
43
|
+
for (const phase of result.phases) {
|
|
44
|
+
console.log(`\n ${chalk.bold(phase.name)}:`);
|
|
45
|
+
console.log(` ${phase.aggregatedOutput.slice(0, 200)}...`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Single agent execution
|
|
50
|
+
const role = (options.role ?? 'implementer');
|
|
51
|
+
spinner.text = `Running ${role} agent...`;
|
|
52
|
+
const executor = new AgentExecutor(router, contextEngine, projectRoot, {
|
|
53
|
+
role,
|
|
54
|
+
maxSteps: options.maxSteps ?? 30,
|
|
55
|
+
});
|
|
56
|
+
executor.on('agent:step', ({ step }) => {
|
|
57
|
+
spinner.text = `Step: ${step.action}...`;
|
|
58
|
+
});
|
|
59
|
+
spinner.stop();
|
|
60
|
+
console.log(chalk.dim(` Task: ${task}`));
|
|
61
|
+
console.log(chalk.dim(` Role: ${role}`));
|
|
62
|
+
console.log('');
|
|
63
|
+
const spinnerRun = ora('Executing task...').start();
|
|
64
|
+
const result = await executor.run(task);
|
|
65
|
+
spinnerRun.stop();
|
|
66
|
+
console.log(chalk.bold(`Result: ${result.success ? chalk.green('Success') : chalk.red('Failed')}`));
|
|
67
|
+
console.log(` ${result.summary}`);
|
|
68
|
+
console.log(` Duration: ${(result.duration / 1000).toFixed(1)}s`);
|
|
69
|
+
console.log(` Cost: $${result.totalTokenUsage.estimatedCost.toFixed(4)}`);
|
|
70
|
+
if (result.filesChanged.length > 0) {
|
|
71
|
+
console.log(` Files Changed:`);
|
|
72
|
+
for (const f of result.filesChanged) {
|
|
73
|
+
console.log(` - ${f}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
console.log('');
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
spinner.fail('Agent execution failed');
|
|
81
|
+
console.error(chalk.red(error.message));
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/cli/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI ā CLI Audit Command
|
|
3
|
+
* View audit trail and cost reports.
|
|
4
|
+
*/
|
|
5
|
+
export interface AuditOptions {
|
|
6
|
+
period?: 'today' | 'week' | 'month' | 'all';
|
|
7
|
+
format?: 'terminal' | 'markdown' | 'json';
|
|
8
|
+
type?: 'costs' | 'actions' | 'dashboard';
|
|
9
|
+
}
|
|
10
|
+
export declare function auditCommand(projectRoot: string, options: AuditOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IAC5C,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;IAC1C,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;CAC1C;AAED,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CA+Df"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI ā CLI Audit Command
|
|
3
|
+
* View audit trail and cost reports.
|
|
4
|
+
*/
|
|
5
|
+
import { AuditTrail } from '../observability/audit.js';
|
|
6
|
+
import { CostTracker } from '../observability/cost-tracker.js';
|
|
7
|
+
import { AnalyticsDashboard } from '../observability/dashboard.js';
|
|
8
|
+
import { loadConfig } from '../config/loader.js';
|
|
9
|
+
export async function auditCommand(projectRoot, options) {
|
|
10
|
+
const chalk = (await import('chalk')).default;
|
|
11
|
+
const ora = (await import('ora')).default;
|
|
12
|
+
console.log(chalk.bold.cyan('\nš PhantomMindAI ā Audit & Analytics\n'));
|
|
13
|
+
const spinner = ora('Loading audit data...').start();
|
|
14
|
+
try {
|
|
15
|
+
const config = await loadConfig(projectRoot);
|
|
16
|
+
const auditTrail = new AuditTrail(projectRoot);
|
|
17
|
+
const costTracker = new CostTracker(projectRoot, {
|
|
18
|
+
daily: config.budget?.maxCostPerDay,
|
|
19
|
+
});
|
|
20
|
+
await auditTrail.loadFromDisk();
|
|
21
|
+
await costTracker.load();
|
|
22
|
+
spinner.stop();
|
|
23
|
+
const type = options.type ?? 'dashboard';
|
|
24
|
+
const period = options.period ?? 'today';
|
|
25
|
+
if (type === 'dashboard' || type === 'costs') {
|
|
26
|
+
const dashboard = new AnalyticsDashboard(costTracker, auditTrail);
|
|
27
|
+
if (options.format === 'json') {
|
|
28
|
+
console.log(JSON.stringify(dashboard.toJSON(), null, 2));
|
|
29
|
+
}
|
|
30
|
+
else if (options.format === 'markdown') {
|
|
31
|
+
console.log(dashboard.formatMarkdown());
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(dashboard.formatTerminal());
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (type === 'costs') {
|
|
38
|
+
console.log('');
|
|
39
|
+
console.log(costTracker.formatMarkdown(period));
|
|
40
|
+
}
|
|
41
|
+
if (type === 'actions') {
|
|
42
|
+
const entries = auditTrail.getRecent(50);
|
|
43
|
+
console.log(chalk.bold(`Recent Actions (${entries.length}):\n`));
|
|
44
|
+
for (const entry of entries) {
|
|
45
|
+
const time = new Date(entry.timestamp).toLocaleTimeString();
|
|
46
|
+
console.log(` ${chalk.dim(time)} ${chalk.cyan(entry.action)} ${chalk.dim(`by ${entry.agent}`)}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Budget check
|
|
50
|
+
const budgetCheck = costTracker.checkBudget();
|
|
51
|
+
if (budgetCheck.exceeded) {
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(chalk.red.bold(`ā ļø Budget exceeded! (${budgetCheck.type}: $${budgetCheck.spent.toFixed(4)} / $${budgetCheck.limit?.toFixed(4)})`));
|
|
54
|
+
}
|
|
55
|
+
console.log('');
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
spinner.fail('Audit failed');
|
|
59
|
+
console.error(chalk.red(error.message));
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/cli/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI ā CLI Eval Command
|
|
3
|
+
* Evaluate and test AI provider connections.
|
|
4
|
+
*/
|
|
5
|
+
export interface EvalOptions {
|
|
6
|
+
provider?: string;
|
|
7
|
+
model?: string;
|
|
8
|
+
prompt?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function evalCommand(projectRoot: string, options: EvalOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=eval.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../src/cli/eval.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAoFf"}
|
package/dist/cli/eval.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI ā CLI Eval Command
|
|
3
|
+
* Evaluate and test AI provider connections.
|
|
4
|
+
*/
|
|
5
|
+
import { loadConfig } from '../config/loader.js';
|
|
6
|
+
import { createProvider } from '../providers/index.js';
|
|
7
|
+
export async function evalCommand(projectRoot, options) {
|
|
8
|
+
const chalk = (await import('chalk')).default;
|
|
9
|
+
const ora = (await import('ora')).default;
|
|
10
|
+
console.log(chalk.bold.cyan('\nš§Ŗ PhantomMindAI ā Provider Evaluation\n'));
|
|
11
|
+
const spinner = ora('Loading configuration...').start();
|
|
12
|
+
try {
|
|
13
|
+
const config = await loadConfig(projectRoot);
|
|
14
|
+
const providerConfig = config.providers.primary;
|
|
15
|
+
const providerName = providerConfig.name;
|
|
16
|
+
spinner.text = `Connecting to ${providerName}...`;
|
|
17
|
+
const resolvedConfig = options.model
|
|
18
|
+
? { ...providerConfig, model: options.model }
|
|
19
|
+
: providerConfig;
|
|
20
|
+
const provider = createProvider(resolvedConfig);
|
|
21
|
+
// Check availability
|
|
22
|
+
const available = await provider.isAvailable();
|
|
23
|
+
if (!available) {
|
|
24
|
+
spinner.fail(`Provider ${providerName} is not available. Check your API key.`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
spinner.succeed(`Connected to ${providerName}`);
|
|
28
|
+
// Run test prompt
|
|
29
|
+
const testPrompt = options.prompt ?? 'Say "PhantomMindAI is ready!" in one short sentence.';
|
|
30
|
+
const model = resolvedConfig.model;
|
|
31
|
+
console.log('');
|
|
32
|
+
console.log(chalk.dim(` Provider: ${providerName}`));
|
|
33
|
+
console.log(chalk.dim(` Model: ${model}`));
|
|
34
|
+
console.log(chalk.dim(` Prompt: ${testPrompt}`));
|
|
35
|
+
console.log('');
|
|
36
|
+
const evalSpinner = ora('Generating response...').start();
|
|
37
|
+
const startTime = Date.now();
|
|
38
|
+
const response = await provider.complete({
|
|
39
|
+
prompt: testPrompt,
|
|
40
|
+
temperature: 0.7,
|
|
41
|
+
maxTokens: 200,
|
|
42
|
+
});
|
|
43
|
+
const duration = Date.now() - startTime;
|
|
44
|
+
evalSpinner.stop();
|
|
45
|
+
console.log(chalk.bold('Response:'));
|
|
46
|
+
console.log(chalk.white(` ${response.content}`));
|
|
47
|
+
console.log('');
|
|
48
|
+
console.log(chalk.dim('ā'.repeat(50)));
|
|
49
|
+
console.log(chalk.dim(` Model: ${response.model}`));
|
|
50
|
+
console.log(chalk.dim(` Provider: ${response.provider}`));
|
|
51
|
+
console.log(chalk.dim(` Tokens: ${response.usage.inputTokens} in / ${response.usage.outputTokens} out`));
|
|
52
|
+
console.log(chalk.dim(` Cost: $${response.usage.estimatedCost.toFixed(6)}`));
|
|
53
|
+
console.log(chalk.dim(` Duration: ${duration}ms`));
|
|
54
|
+
console.log('');
|
|
55
|
+
// List available models
|
|
56
|
+
try {
|
|
57
|
+
const models = await provider.listModels();
|
|
58
|
+
if (models.length > 0) {
|
|
59
|
+
console.log(chalk.dim('Available models:'));
|
|
60
|
+
for (const m of models.slice(0, 10)) {
|
|
61
|
+
console.log(chalk.dim(` - ${m}`));
|
|
62
|
+
}
|
|
63
|
+
if (models.length > 10) {
|
|
64
|
+
console.log(chalk.dim(` ... and ${models.length - 10} more`));
|
|
65
|
+
}
|
|
66
|
+
console.log('');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Not all providers support listing models
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
spinner.fail('Evaluation failed');
|
|
75
|
+
console.error(chalk.red(error.message));
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=eval.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/cli/eval.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { initCommand, type InitOptions } from './init.js';
|
|
2
|
+
export { syncCommand, type SyncOptions } from './sync.js';
|
|
3
|
+
export { serveCommand, type ServeOptions } from './serve.js';
|
|
4
|
+
export { evalCommand, type EvalOptions } from './eval.js';
|
|
5
|
+
export { validateCommand, type ValidateOptions } from './validate.js';
|
|
6
|
+
export { auditCommand, type AuditOptions } from './audit.js';
|
|
7
|
+
export { statsCommand, type StatsOptions } from './stats.js';
|
|
8
|
+
export { agentCommand, type AgentOptions } from './agent.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { initCommand } from './init.js';
|
|
2
|
+
export { syncCommand } from './sync.js';
|
|
3
|
+
export { serveCommand } from './serve.js';
|
|
4
|
+
export { evalCommand } from './eval.js';
|
|
5
|
+
export { validateCommand } from './validate.js';
|
|
6
|
+
export { auditCommand } from './audit.js';
|
|
7
|
+
export { statsCommand } from './stats.js';
|
|
8
|
+
export { agentCommand } from './agent.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAwB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAqB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhantomMindAI ā CLI Init Command
|
|
3
|
+
* Interactive project initialization.
|
|
4
|
+
*/
|
|
5
|
+
export interface InitOptions {
|
|
6
|
+
adapters?: string[];
|
|
7
|
+
provider?: string;
|
|
8
|
+
model?: string;
|
|
9
|
+
yes?: boolean;
|
|
10
|
+
interactive?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export declare function initCommand(projectRoot: string, options: InitOptions): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAsJf"}
|