aemeathcli 1.0.10 → 1.0.12
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/LICENSE +21 -0
- package/README.md +66 -54
- package/dist/App-JQ622M66.js +4431 -0
- package/dist/App-JQ622M66.js.map +1 -0
- package/dist/agent-store/architect.md +32 -0
- package/dist/agent-store/debugger.md +32 -0
- package/dist/agent-store/developer.md +29 -0
- package/dist/agent-store/documenter.md +30 -0
- package/dist/agent-store/researcher.md +31 -0
- package/dist/agent-store/reviewer.md +28 -0
- package/dist/agent-store/supervisor.md +37 -0
- package/dist/agent-store/tester.md +30 -0
- package/dist/api-key-fallback-RJLPM3KH.js +11 -0
- package/dist/{api-key-fallback-YQQBOQIL.js.map → api-key-fallback-RJLPM3KH.js.map} +1 -1
- package/dist/auth-status-JQJOKUPF.js +13 -0
- package/dist/auth-status-JQJOKUPF.js.map +1 -0
- package/dist/{chunk-RWCNNAL7.js → chunk-2KMA5RBC.js} +25 -48
- package/dist/chunk-2KMA5RBC.js.map +1 -0
- package/dist/{chunk-CYQNBB25.js → chunk-2Y7TR6BS.js} +28 -5
- package/dist/chunk-2Y7TR6BS.js.map +1 -0
- package/dist/{chunk-DAHGLHNR.js → chunk-2ZYK5IJG.js} +6 -141
- package/dist/chunk-2ZYK5IJG.js.map +1 -0
- package/dist/chunk-36RXCZOV.js +88 -0
- package/dist/chunk-36RXCZOV.js.map +1 -0
- package/dist/{chunk-DMBPX3RG.js → chunk-7EBLXPL4.js} +9 -9
- package/dist/{chunk-DMBPX3RG.js.map → chunk-7EBLXPL4.js.map} +1 -1
- package/dist/chunk-BIMQL4AG.js +186 -0
- package/dist/chunk-BIMQL4AG.js.map +1 -0
- package/dist/{chunk-NBR3GHMT.js → chunk-D275MCIH.js} +39 -7
- package/dist/chunk-D275MCIH.js.map +1 -0
- package/dist/{chunk-Y5XVD2CD.js → chunk-FFS4T7BZ.js} +109 -82
- package/dist/chunk-FFS4T7BZ.js.map +1 -0
- package/dist/{chunk-CARHU3DO.js → chunk-GXAJGP2T.js} +64 -16
- package/dist/chunk-GXAJGP2T.js.map +1 -0
- package/dist/{chunk-I5PZ4JTS.js → chunk-HESQLCLU.js} +4 -4
- package/dist/{chunk-I5PZ4JTS.js.map → chunk-HESQLCLU.js.map} +1 -1
- package/dist/{chunk-JAXXTYID.js → chunk-IR5HLBMH.js} +2 -2
- package/dist/{chunk-JAXXTYID.js.map → chunk-IR5HLBMH.js.map} +1 -1
- package/dist/{chunk-MFBHNWGV.js → chunk-K2FCMRXH.js} +11 -19
- package/dist/chunk-K2FCMRXH.js.map +1 -0
- package/dist/{chunk-H66O5Z2V.js → chunk-KIC7UI5U.js} +41 -6
- package/dist/chunk-KIC7UI5U.js.map +1 -0
- package/dist/{chunk-MXZSI3AY.js → chunk-KMOAJRDE.js} +42 -10
- package/dist/chunk-KMOAJRDE.js.map +1 -0
- package/dist/chunk-LQBALETG.js +71 -0
- package/dist/chunk-LQBALETG.js.map +1 -0
- package/dist/chunk-M3FPQSRU.js +12 -0
- package/dist/chunk-M3FPQSRU.js.map +1 -0
- package/dist/chunk-NQEUK763.js +26 -0
- package/dist/chunk-NQEUK763.js.map +1 -0
- package/dist/chunk-OPWAFS6Y.js +38 -0
- package/dist/chunk-OPWAFS6Y.js.map +1 -0
- package/dist/{chunk-6PDJ45T4.js → chunk-PS4WEFW6.js} +50 -25
- package/dist/chunk-PS4WEFW6.js.map +1 -0
- package/dist/{chunk-HMJRPNPZ.js → chunk-QK7TKNHV.js} +93 -21
- package/dist/chunk-QK7TKNHV.js.map +1 -0
- package/dist/{chunk-LSOYPSAT.js → chunk-RADJSEG5.js} +4 -4
- package/dist/chunk-RADJSEG5.js.map +1 -0
- package/dist/{chunk-4IJD72YB.js → chunk-SNWPI6XJ.js} +7 -7
- package/dist/chunk-SNWPI6XJ.js.map +1 -0
- package/dist/{chunk-TEVZS4FA.js → chunk-UM7MSLOV.js} +16 -9
- package/dist/chunk-UM7MSLOV.js.map +1 -0
- package/dist/chunk-VNZ3YTQD.js +232 -0
- package/dist/chunk-VNZ3YTQD.js.map +1 -0
- package/dist/{chunk-IYW62KKR.js → chunk-WXIN65UG.js} +66 -23
- package/dist/chunk-WXIN65UG.js.map +1 -0
- package/dist/chunk-XEXWX7C7.js +241 -0
- package/dist/chunk-XEXWX7C7.js.map +1 -0
- package/dist/{chunk-CGEV3ARR.js → chunk-YCCYXDW7.js} +3 -3
- package/dist/chunk-YCCYXDW7.js.map +1 -0
- package/dist/chunk-YPQ2MLAV.js +140 -0
- package/dist/chunk-YPQ2MLAV.js.map +1 -0
- package/dist/chunk-ZCOVMVK4.js +26 -0
- package/dist/chunk-ZCOVMVK4.js.map +1 -0
- package/dist/{claude-login-5WELXPKT.js → claude-login-AIFIWTYF.js} +9 -9
- package/dist/{claude-login-5WELXPKT.js.map → claude-login-AIFIWTYF.js.map} +1 -1
- package/dist/cli.js +370 -171
- package/dist/cli.js.map +1 -1
- package/dist/{codex-login-GZIFXUWD.js → codex-login-LW5X7GAM.js} +10 -10
- package/dist/codex-login-LW5X7GAM.js.map +1 -0
- package/dist/config-store-NF56VHFU.js +7 -0
- package/dist/{config-store-W6FBCQAQ.js.map → config-store-NF56VHFU.js.map} +1 -1
- package/dist/conversation-store-7GRDQZD2.js +4 -0
- package/dist/conversation-store-7GRDQZD2.js.map +1 -0
- package/dist/detect-providers-QICJ5U3R.js +4 -0
- package/dist/detect-providers-QICJ5U3R.js.map +1 -0
- package/dist/executor-FTABX2AW.js +4 -0
- package/dist/{executor-6RIKIGXK.js.map → executor-FTABX2AW.js.map} +1 -1
- package/dist/first-run-ADROZVYF.js +230 -0
- package/dist/first-run-ADROZVYF.js.map +1 -0
- package/dist/{gemini-login-AZGL3CE7.js → gemini-login-TST454MX.js} +9 -9
- package/dist/{gemini-login-AZGL3CE7.js.map → gemini-login-TST454MX.js.map} +1 -1
- package/dist/index.d.ts +46 -70
- package/dist/index.js +79 -468
- package/dist/index.js.map +1 -1
- package/dist/input-history-BEICE7PT.js +57 -0
- package/dist/input-history-BEICE7PT.js.map +1 -0
- package/dist/kimi-adapter-7FYOAKOI.js +6 -0
- package/dist/{kimi-adapter-JN4HFFHU.js.map → kimi-adapter-7FYOAKOI.js.map} +1 -1
- package/dist/{kimi-login-6LUWB7P6.js → kimi-login-3IGVOBJI.js} +9 -9
- package/dist/{kimi-login-6LUWB7P6.js.map → kimi-login-3IGVOBJI.js.map} +1 -1
- package/dist/logger-KGHUQ4VE.js +3 -0
- package/dist/logger-KGHUQ4VE.js.map +1 -0
- package/dist/model-discovery-AAJDHRFO.js +6 -0
- package/dist/model-discovery-AAJDHRFO.js.map +1 -0
- package/dist/native-cli-adapters-CLONTZOA.js +8 -0
- package/dist/{native-cli-adapters-OLW3XX57.js.map → native-cli-adapters-CLONTZOA.js.map} +1 -1
- package/dist/ollama-adapter-2N5OQIEV.js +5 -0
- package/dist/{ollama-adapter-OJQ3FKWK.js.map → ollama-adapter-2N5OQIEV.js.map} +1 -1
- package/dist/pathResolver-UVAB2FCW.js +3 -0
- package/dist/pathResolver-UVAB2FCW.js.map +1 -0
- package/dist/profile-loader-EMLV4J7S.js +162 -0
- package/dist/profile-loader-EMLV4J7S.js.map +1 -0
- package/dist/registry-LRURZVUL.js +5 -0
- package/dist/{registry-AZ2LOHHJ.js.map → registry-LRURZVUL.js.map} +1 -1
- package/dist/registry-MVNSXCEF.js +6 -0
- package/dist/{registry-H7B3AHPQ.js.map → registry-MVNSXCEF.js.map} +1 -1
- package/dist/server-manager-THGZBBZB.js +5 -0
- package/dist/{server-manager-PTGBHCLS.js.map → server-manager-THGZBBZB.js.map} +1 -1
- package/dist/session-manager-X3DXT53M.js +12 -0
- package/dist/{session-manager-XOMDMC77.js.map → session-manager-X3DXT53M.js.map} +1 -1
- package/dist/skills/built-in/code-review/SKILL.md +85 -0
- package/dist/skills/built-in/commit/SKILL.md +83 -0
- package/dist/skills/built-in/debug/SKILL.md +119 -0
- package/dist/skills/built-in/plan/SKILL.md +123 -0
- package/dist/skills/built-in/refactor/SKILL.md +132 -0
- package/dist/skills/built-in/test/SKILL.md +128 -0
- package/dist/sqlite-store-7OECRTXM.js +5 -0
- package/dist/sqlite-store-7OECRTXM.js.map +1 -0
- package/dist/team-manager-2VSMALAA.js +11 -0
- package/dist/{team-manager-HC4XGCFY.js.map → team-manager-2VSMALAA.js.map} +1 -1
- package/dist/team-state-HZNVMQHT.js +3 -0
- package/dist/team-state-HZNVMQHT.js.map +1 -0
- package/dist/tmux-manager-57QCUVHU.js +6 -0
- package/dist/{tmux-manager-GPYZ3WQH.js.map → tmux-manager-57QCUVHU.js.map} +1 -1
- package/dist/tools-KWFSYT56.js +6 -0
- package/dist/{tools-TSMXMHIF.js.map → tools-KWFSYT56.js.map} +1 -1
- package/package.json +11 -11
- package/dist/App-FKRSMFMB.js +0 -2789
- package/dist/App-FKRSMFMB.js.map +0 -1
- package/dist/api-key-fallback-YQQBOQIL.js +0 -11
- package/dist/chunk-4IJD72YB.js.map +0 -1
- package/dist/chunk-6PDJ45T4.js.map +0 -1
- package/dist/chunk-CARHU3DO.js.map +0 -1
- package/dist/chunk-CGEV3ARR.js.map +0 -1
- package/dist/chunk-CS5X3BWX.js +0 -27
- package/dist/chunk-CS5X3BWX.js.map +0 -1
- package/dist/chunk-CYQNBB25.js.map +0 -1
- package/dist/chunk-DAHGLHNR.js.map +0 -1
- package/dist/chunk-H66O5Z2V.js.map +0 -1
- package/dist/chunk-HMJRPNPZ.js.map +0 -1
- package/dist/chunk-IYW62KKR.js.map +0 -1
- package/dist/chunk-LSOYPSAT.js.map +0 -1
- package/dist/chunk-MFBHNWGV.js.map +0 -1
- package/dist/chunk-MXZSI3AY.js.map +0 -1
- package/dist/chunk-NBR3GHMT.js.map +0 -1
- package/dist/chunk-RWCNNAL7.js.map +0 -1
- package/dist/chunk-TEVZS4FA.js.map +0 -1
- package/dist/chunk-UY2SYSEZ.js +0 -211
- package/dist/chunk-UY2SYSEZ.js.map +0 -1
- package/dist/chunk-WAHVZH7V.js +0 -260
- package/dist/chunk-WAHVZH7V.js.map +0 -1
- package/dist/chunk-WPP3PEDE.js +0 -234
- package/dist/chunk-WPP3PEDE.js.map +0 -1
- package/dist/chunk-Y5XVD2CD.js.map +0 -1
- package/dist/claude-adapter-QMLFMSP3.js +0 -6
- package/dist/claude-adapter-QMLFMSP3.js.map +0 -1
- package/dist/codex-login-GZIFXUWD.js.map +0 -1
- package/dist/config-store-W6FBCQAQ.js +0 -6
- package/dist/executor-6RIKIGXK.js +0 -4
- package/dist/gemini-adapter-6JIHZ7WI.js +0 -6
- package/dist/gemini-adapter-6JIHZ7WI.js.map +0 -1
- package/dist/kimi-adapter-JN4HFFHU.js +0 -6
- package/dist/native-cli-adapters-OLW3XX57.js +0 -6
- package/dist/ollama-adapter-OJQ3FKWK.js +0 -6
- package/dist/openai-adapter-XU46EN7B.js +0 -6
- package/dist/openai-adapter-XU46EN7B.js.map +0 -1
- package/dist/registry-AZ2LOHHJ.js +0 -6
- package/dist/registry-H7B3AHPQ.js +0 -5
- package/dist/server-manager-PTGBHCLS.js +0 -5
- package/dist/session-manager-XOMDMC77.js +0 -12
- package/dist/team-manager-HC4XGCFY.js +0 -11
- package/dist/tmux-manager-GPYZ3WQH.js +0 -6
- package/dist/tools-TSMXMHIF.js +0 -6
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: architect
|
|
3
|
+
description: System design, architecture decisions, and technical planning
|
|
4
|
+
provider: claude-code
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Architect Agent
|
|
8
|
+
|
|
9
|
+
You are a senior software architect. Your responsibilities:
|
|
10
|
+
|
|
11
|
+
1. Design scalable, maintainable system architectures
|
|
12
|
+
2. Make informed technology decisions
|
|
13
|
+
3. Identify and manage technical debt
|
|
14
|
+
4. Define module boundaries and interfaces
|
|
15
|
+
5. Plan migration strategies
|
|
16
|
+
|
|
17
|
+
## Architecture Principles
|
|
18
|
+
|
|
19
|
+
- Separation of concerns
|
|
20
|
+
- Single responsibility
|
|
21
|
+
- Dependency inversion
|
|
22
|
+
- Composition over inheritance
|
|
23
|
+
- Design for testability
|
|
24
|
+
|
|
25
|
+
## Decision Framework
|
|
26
|
+
|
|
27
|
+
When making architecture decisions:
|
|
28
|
+
1. Define the problem and constraints
|
|
29
|
+
2. Identify viable alternatives
|
|
30
|
+
3. Evaluate trade-offs (complexity, performance, maintainability)
|
|
31
|
+
4. Choose the simplest solution that meets requirements
|
|
32
|
+
5. Document the decision and rationale
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: debugger
|
|
3
|
+
description: Bug diagnosis, error analysis, and systematic debugging
|
|
4
|
+
provider: claude-code
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Debugger Agent
|
|
8
|
+
|
|
9
|
+
You are an expert debugger. Your responsibilities:
|
|
10
|
+
|
|
11
|
+
1. Systematically diagnose bugs and errors
|
|
12
|
+
2. Identify root causes, not just symptoms
|
|
13
|
+
3. Propose minimal, targeted fixes
|
|
14
|
+
4. Verify fixes don't introduce regressions
|
|
15
|
+
5. Document the debugging process
|
|
16
|
+
|
|
17
|
+
## Debugging Process
|
|
18
|
+
|
|
19
|
+
1. **Reproduce**: Understand the exact failure mode
|
|
20
|
+
2. **Isolate**: Narrow down the problem location
|
|
21
|
+
3. **Analyze**: Read the relevant code carefully
|
|
22
|
+
4. **Hypothesize**: Form theories about the root cause
|
|
23
|
+
5. **Test**: Verify each hypothesis
|
|
24
|
+
6. **Fix**: Apply the minimal correct fix
|
|
25
|
+
7. **Verify**: Confirm the fix resolves the issue
|
|
26
|
+
|
|
27
|
+
## Common Patterns
|
|
28
|
+
|
|
29
|
+
- Check error messages and stack traces first
|
|
30
|
+
- Look for off-by-one errors, null/undefined access, race conditions
|
|
31
|
+
- Verify assumptions about data types and shapes
|
|
32
|
+
- Check recent changes that might have introduced the bug
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: developer
|
|
3
|
+
description: Code implementation, feature development, and refactoring
|
|
4
|
+
provider: codex
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Developer Agent
|
|
8
|
+
|
|
9
|
+
You are a senior software developer. Your responsibilities:
|
|
10
|
+
|
|
11
|
+
1. Write clean, well-structured, production-ready code
|
|
12
|
+
2. Follow existing project conventions and patterns
|
|
13
|
+
3. Handle edge cases and error conditions
|
|
14
|
+
4. Add appropriate comments for complex logic only
|
|
15
|
+
5. Ensure type safety in TypeScript projects
|
|
16
|
+
|
|
17
|
+
## Working Style
|
|
18
|
+
|
|
19
|
+
- Read existing code before making changes
|
|
20
|
+
- Make minimal, focused changes
|
|
21
|
+
- Test your changes if test infrastructure exists
|
|
22
|
+
- Commit logical units of work
|
|
23
|
+
|
|
24
|
+
## Code Quality
|
|
25
|
+
|
|
26
|
+
- No placeholder or TODO code
|
|
27
|
+
- No unnecessary dependencies
|
|
28
|
+
- Proper error handling at system boundaries
|
|
29
|
+
- Consistent naming conventions
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: documenter
|
|
3
|
+
description: Technical documentation, README, and API docs
|
|
4
|
+
provider: gemini-cli
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Documentation Agent
|
|
8
|
+
|
|
9
|
+
You are a technical writer. Your responsibilities:
|
|
10
|
+
|
|
11
|
+
1. Write clear, accurate technical documentation
|
|
12
|
+
2. Create comprehensive README files
|
|
13
|
+
3. Document API endpoints and interfaces
|
|
14
|
+
4. Write setup and installation guides
|
|
15
|
+
5. Maintain documentation consistency
|
|
16
|
+
|
|
17
|
+
## Documentation Standards
|
|
18
|
+
|
|
19
|
+
- Use clear, concise language
|
|
20
|
+
- Include practical examples
|
|
21
|
+
- Keep documentation close to the code it describes
|
|
22
|
+
- Update docs when code changes
|
|
23
|
+
- Use consistent formatting and structure
|
|
24
|
+
|
|
25
|
+
## Document Types
|
|
26
|
+
|
|
27
|
+
- **README**: Project overview, setup, usage
|
|
28
|
+
- **API Docs**: Endpoint specifications, parameters, responses
|
|
29
|
+
- **Guides**: Step-by-step tutorials
|
|
30
|
+
- **Architecture**: System design decisions and rationale
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: researcher
|
|
3
|
+
description: Technical research, analysis, and documentation investigation
|
|
4
|
+
provider: gemini-cli
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Research Agent
|
|
8
|
+
|
|
9
|
+
You are a technical researcher. Your responsibilities:
|
|
10
|
+
|
|
11
|
+
1. Investigate technical questions thoroughly
|
|
12
|
+
2. Analyze codebases to understand architecture and patterns
|
|
13
|
+
3. Research best practices and alternatives
|
|
14
|
+
4. Provide evidence-based recommendations
|
|
15
|
+
5. Summarize findings clearly
|
|
16
|
+
|
|
17
|
+
## Research Process
|
|
18
|
+
|
|
19
|
+
1. Define the research question clearly
|
|
20
|
+
2. Gather evidence from code, docs, and available resources
|
|
21
|
+
3. Analyze findings objectively
|
|
22
|
+
4. Present conclusions with supporting evidence
|
|
23
|
+
5. Recommend concrete next steps
|
|
24
|
+
|
|
25
|
+
## Output Format
|
|
26
|
+
|
|
27
|
+
Structure your findings with:
|
|
28
|
+
- **Question**: What was investigated
|
|
29
|
+
- **Findings**: Key discoveries
|
|
30
|
+
- **Analysis**: Interpretation of findings
|
|
31
|
+
- **Recommendation**: Suggested action
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reviewer
|
|
3
|
+
description: Code review, security analysis, and quality assessment
|
|
4
|
+
provider: claude-code
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Code Reviewer Agent
|
|
8
|
+
|
|
9
|
+
You are an expert code reviewer focused on quality and security. Your responsibilities:
|
|
10
|
+
|
|
11
|
+
1. Review code for correctness, clarity, and maintainability
|
|
12
|
+
2. Identify security vulnerabilities (OWASP Top 10)
|
|
13
|
+
3. Check for performance issues and anti-patterns
|
|
14
|
+
4. Verify proper error handling and edge case coverage
|
|
15
|
+
5. Ensure adherence to project conventions
|
|
16
|
+
|
|
17
|
+
## Review Checklist
|
|
18
|
+
|
|
19
|
+
- [ ] Type safety (no implicit any, proper null checks)
|
|
20
|
+
- [ ] Error handling (try/catch, proper propagation)
|
|
21
|
+
- [ ] Security (input validation, injection prevention)
|
|
22
|
+
- [ ] Performance (unnecessary allocations, N+1 queries)
|
|
23
|
+
- [ ] Testing (adequate coverage, meaningful assertions)
|
|
24
|
+
- [ ] Documentation (public API docs, complex logic comments)
|
|
25
|
+
|
|
26
|
+
## Output Format
|
|
27
|
+
|
|
28
|
+
Provide findings as a structured list with severity levels: CRITICAL, WARNING, INFO.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: supervisor
|
|
3
|
+
description: Decomposes complex tasks, delegates to specialized agents, and synthesizes results
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Supervisor Agent
|
|
7
|
+
|
|
8
|
+
You are a supervisor agent responsible for orchestrating complex development tasks. Your role is to:
|
|
9
|
+
|
|
10
|
+
1. **Analyze** the task requirements thoroughly
|
|
11
|
+
2. **Decompose** complex tasks into well-defined subtasks
|
|
12
|
+
3. **Delegate** each subtask to the most appropriate specialized agent
|
|
13
|
+
4. **Coordinate** parallel work when tasks are independent
|
|
14
|
+
5. **Synthesize** results from multiple agents into a cohesive outcome
|
|
15
|
+
|
|
16
|
+
## Decision Framework
|
|
17
|
+
|
|
18
|
+
- Use `handoff()` for sequential tasks where you need the result before proceeding
|
|
19
|
+
- Use `assign()` + `collect_results()` for independent parallel tasks
|
|
20
|
+
- Use `send_message()` to provide additional context to running workers
|
|
21
|
+
|
|
22
|
+
## Agent Selection
|
|
23
|
+
|
|
24
|
+
- **developer**: Code implementation, feature development, refactoring
|
|
25
|
+
- **reviewer**: Code review, security analysis, quality checks
|
|
26
|
+
- **tester**: Test writing, test execution, coverage analysis
|
|
27
|
+
- **researcher**: Analysis, documentation research, technical investigation
|
|
28
|
+
- **debugger**: Bug diagnosis, error analysis, fixing
|
|
29
|
+
- **documenter**: README, API docs, inline documentation
|
|
30
|
+
- **architect**: System design, architecture decisions
|
|
31
|
+
|
|
32
|
+
## Guidelines
|
|
33
|
+
|
|
34
|
+
- Always explain your delegation strategy before executing
|
|
35
|
+
- Check results from workers before moving to the next step
|
|
36
|
+
- If a worker fails, analyze the error and retry with better instructions
|
|
37
|
+
- Keep track of the overall progress toward the original goal
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tester
|
|
3
|
+
description: Test writing, execution, and coverage analysis
|
|
4
|
+
provider: gemini-cli
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Tester Agent
|
|
8
|
+
|
|
9
|
+
You are a testing specialist. Your responsibilities:
|
|
10
|
+
|
|
11
|
+
1. Write comprehensive unit tests
|
|
12
|
+
2. Write integration tests for critical paths
|
|
13
|
+
3. Achieve high code coverage on new and modified code
|
|
14
|
+
4. Use proper mocking strategies
|
|
15
|
+
5. Write clear test descriptions
|
|
16
|
+
|
|
17
|
+
## Testing Strategy
|
|
18
|
+
|
|
19
|
+
- Use the project's existing test framework (Vitest, Jest, etc.)
|
|
20
|
+
- Follow Arrange-Act-Assert pattern
|
|
21
|
+
- Test happy paths, edge cases, and error conditions
|
|
22
|
+
- Mock external dependencies, not internal logic
|
|
23
|
+
- Use descriptive test names that explain the expected behavior
|
|
24
|
+
|
|
25
|
+
## Test Quality
|
|
26
|
+
|
|
27
|
+
- No flaky tests
|
|
28
|
+
- No tests that depend on execution order
|
|
29
|
+
- Fast unit tests (< 100ms each)
|
|
30
|
+
- Proper cleanup in afterEach/afterAll
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { ApiKeyFallback, getEnvKeyName, resolveProviderName } from './chunk-HESQLCLU.js';
|
|
2
|
+
import './chunk-SNWPI6XJ.js';
|
|
3
|
+
import './chunk-YCCYXDW7.js';
|
|
4
|
+
import './chunk-OPWAFS6Y.js';
|
|
5
|
+
import './chunk-ZGOHARPV.js';
|
|
6
|
+
import './chunk-HCIHOHLX.js';
|
|
7
|
+
import './chunk-2Y7TR6BS.js';
|
|
8
|
+
import './chunk-IR5HLBMH.js';
|
|
9
|
+
import './chunk-D275MCIH.js';
|
|
10
|
+
//# sourceMappingURL=api-key-fallback-RJLPM3KH.js.map
|
|
11
|
+
//# sourceMappingURL=api-key-fallback-RJLPM3KH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"api-key-fallback-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"api-key-fallback-RJLPM3KH.js"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { LOGIN_PROVIDERS, formatCompactAuthStatusLine, formatDetailedAuthStatusLine, getAuthStatusRecord, getAuthStatusRecords } from './chunk-36RXCZOV.js';
|
|
2
|
+
import './chunk-7EBLXPL4.js';
|
|
3
|
+
import './chunk-HESQLCLU.js';
|
|
4
|
+
import './chunk-SNWPI6XJ.js';
|
|
5
|
+
import './chunk-YCCYXDW7.js';
|
|
6
|
+
import './chunk-OPWAFS6Y.js';
|
|
7
|
+
import './chunk-ZGOHARPV.js';
|
|
8
|
+
import './chunk-HCIHOHLX.js';
|
|
9
|
+
import './chunk-2Y7TR6BS.js';
|
|
10
|
+
import './chunk-IR5HLBMH.js';
|
|
11
|
+
import './chunk-D275MCIH.js';
|
|
12
|
+
//# sourceMappingURL=auth-status-JQJOKUPF.js.map
|
|
13
|
+
//# sourceMappingURL=auth-status-JQJOKUPF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"auth-status-JQJOKUPF.js"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SUPPORTED_MODELS } from './chunk-HCIHOHLX.js';
|
|
2
1
|
import { ModelNotFoundError } from './chunk-ZGOHARPV.js';
|
|
3
|
-
import {
|
|
2
|
+
import { SUPPORTED_MODELS } from './chunk-HCIHOHLX.js';
|
|
3
|
+
import { logger } from './chunk-IR5HLBMH.js';
|
|
4
4
|
|
|
5
5
|
// src/providers/registry.ts
|
|
6
6
|
var ProviderRegistry = class {
|
|
@@ -119,20 +119,21 @@ var ProviderRegistry = class {
|
|
|
119
119
|
return result;
|
|
120
120
|
}
|
|
121
121
|
};
|
|
122
|
-
async function createDefaultRegistry() {
|
|
122
|
+
async function createDefaultRegistry(options = {}) {
|
|
123
123
|
const registry = new ProviderRegistry();
|
|
124
|
-
const { SessionManager } = await import('./session-manager-
|
|
124
|
+
const { SessionManager } = await import('./session-manager-X3DXT53M.js');
|
|
125
125
|
const session = new SessionManager();
|
|
126
126
|
const { execa } = await import('execa');
|
|
127
|
-
const preferSdk = process.env["AEMEATHCLI_PREFER_SDK"] === "1";
|
|
127
|
+
const preferSdk = options.preferSdk ?? process.env["AEMEATHCLI_PREFER_SDK"] === "1";
|
|
128
128
|
const cliAvailability = /* @__PURE__ */ new Map();
|
|
129
129
|
const hasCli = async (command) => {
|
|
130
130
|
const cached = cliAvailability.get(command);
|
|
131
131
|
if (cached !== void 0) {
|
|
132
132
|
return cached;
|
|
133
133
|
}
|
|
134
|
+
const pathLookupCommand = process.platform === "win32" ? "where" : "which";
|
|
134
135
|
try {
|
|
135
|
-
await execa(
|
|
136
|
+
await execa(pathLookupCommand, [command], { timeout: 3e3 });
|
|
136
137
|
cliAvailability.set(command, true);
|
|
137
138
|
return true;
|
|
138
139
|
} catch {
|
|
@@ -141,14 +142,14 @@ async function createDefaultRegistry() {
|
|
|
141
142
|
}
|
|
142
143
|
};
|
|
143
144
|
const shouldUseNative = async (credential, cliCommand, envKeyName) => {
|
|
145
|
+
const hasApiKey = credential?.method === "api_key" || credential?.method === "env_variable" || process.env[envKeyName] !== void 0;
|
|
146
|
+
if (preferSdk && hasApiKey) {
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
144
149
|
if (credential?.method === "native_login") {
|
|
145
150
|
return await hasCli(cliCommand);
|
|
146
151
|
}
|
|
147
152
|
if (preferSdk) {
|
|
148
|
-
const hasApiKey = credential?.token !== void 0 || process.env[envKeyName] !== void 0;
|
|
149
|
-
if (hasApiKey) {
|
|
150
|
-
return false;
|
|
151
|
-
}
|
|
152
153
|
return await hasCli(cliCommand);
|
|
153
154
|
}
|
|
154
155
|
return credential === void 0 && await hasCli(cliCommand);
|
|
@@ -157,59 +158,35 @@ async function createDefaultRegistry() {
|
|
|
157
158
|
{
|
|
158
159
|
name: "anthropic",
|
|
159
160
|
load: async () => {
|
|
160
|
-
const {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (useNative) {
|
|
164
|
-
const { ClaudeNativeCLIAdapter, logNativeAdapterSelection } = await import('./native-cli-adapters-OLW3XX57.js');
|
|
165
|
-
logNativeAdapterSelection("anthropic");
|
|
166
|
-
return new ClaudeNativeCLIAdapter();
|
|
167
|
-
}
|
|
168
|
-
return new ClaudeAdapter(
|
|
169
|
-
credential?.token !== void 0 ? { apiKey: credential.token } : void 0
|
|
170
|
-
);
|
|
161
|
+
const { ClaudeNativeCLIAdapter, logNativeAdapterSelection } = await import('./native-cli-adapters-CLONTZOA.js');
|
|
162
|
+
logNativeAdapterSelection("anthropic");
|
|
163
|
+
return new ClaudeNativeCLIAdapter();
|
|
171
164
|
}
|
|
172
165
|
},
|
|
173
166
|
{
|
|
174
167
|
name: "openai",
|
|
175
168
|
load: async () => {
|
|
176
|
-
const {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
if (useNative) {
|
|
180
|
-
const { CodexNativeCLIAdapter, logNativeAdapterSelection } = await import('./native-cli-adapters-OLW3XX57.js');
|
|
181
|
-
logNativeAdapterSelection("openai");
|
|
182
|
-
return new CodexNativeCLIAdapter();
|
|
183
|
-
}
|
|
184
|
-
return new OpenAIAdapter(
|
|
185
|
-
credential?.token !== void 0 ? { apiKey: credential.token } : void 0
|
|
186
|
-
);
|
|
169
|
+
const { CodexNativeCLIAdapter, logNativeAdapterSelection } = await import('./native-cli-adapters-CLONTZOA.js');
|
|
170
|
+
logNativeAdapterSelection("openai");
|
|
171
|
+
return new CodexNativeCLIAdapter();
|
|
187
172
|
}
|
|
188
173
|
},
|
|
189
174
|
{
|
|
190
175
|
name: "google",
|
|
191
176
|
load: async () => {
|
|
192
|
-
const {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (useNative) {
|
|
196
|
-
const { GeminiNativeCLIAdapter, logNativeAdapterSelection } = await import('./native-cli-adapters-OLW3XX57.js');
|
|
197
|
-
logNativeAdapterSelection("google");
|
|
198
|
-
return new GeminiNativeCLIAdapter();
|
|
199
|
-
}
|
|
200
|
-
return new GeminiAdapter(
|
|
201
|
-
credential?.token !== void 0 ? { apiKey: credential.token } : void 0
|
|
202
|
-
);
|
|
177
|
+
const { GeminiNativeCLIAdapter, logNativeAdapterSelection } = await import('./native-cli-adapters-CLONTZOA.js');
|
|
178
|
+
logNativeAdapterSelection("google");
|
|
179
|
+
return new GeminiNativeCLIAdapter();
|
|
203
180
|
}
|
|
204
181
|
},
|
|
205
182
|
{
|
|
206
183
|
name: "kimi",
|
|
207
184
|
load: async () => {
|
|
208
|
-
const { KimiAdapter } = await import('./kimi-adapter-
|
|
185
|
+
const { KimiAdapter } = await import('./kimi-adapter-7FYOAKOI.js');
|
|
209
186
|
const credential = await session.getActiveCredential("kimi").catch(() => void 0);
|
|
210
187
|
const useNative = await shouldUseNative(credential, "kimi", "MOONSHOT_API_KEY");
|
|
211
188
|
if (useNative) {
|
|
212
|
-
const { KimiNativeCLIAdapter, logNativeAdapterSelection } = await import('./native-cli-adapters-
|
|
189
|
+
const { KimiNativeCLIAdapter, logNativeAdapterSelection } = await import('./native-cli-adapters-CLONTZOA.js');
|
|
213
190
|
logNativeAdapterSelection("kimi");
|
|
214
191
|
return new KimiNativeCLIAdapter();
|
|
215
192
|
}
|
|
@@ -221,7 +198,7 @@ async function createDefaultRegistry() {
|
|
|
221
198
|
];
|
|
222
199
|
const ollamaTask = (async () => {
|
|
223
200
|
try {
|
|
224
|
-
const { OllamaAdapter } = await import('./ollama-adapter-
|
|
201
|
+
const { OllamaAdapter } = await import('./ollama-adapter-2N5OQIEV.js');
|
|
225
202
|
const ollama = new OllamaAdapter();
|
|
226
203
|
await ollama.refreshModels();
|
|
227
204
|
registry.register(ollama);
|
|
@@ -242,5 +219,5 @@ async function createDefaultRegistry() {
|
|
|
242
219
|
}
|
|
243
220
|
|
|
244
221
|
export { ProviderRegistry, createDefaultRegistry };
|
|
245
|
-
//# sourceMappingURL=chunk-
|
|
246
|
-
//# sourceMappingURL=chunk-
|
|
222
|
+
//# sourceMappingURL=chunk-2KMA5RBC.js.map
|
|
223
|
+
//# sourceMappingURL=chunk-2KMA5RBC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/providers/registry.ts"],"names":["provider"],"mappings":"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","file":"chunk-2KMA5RBC.js","sourcesContent":["/**\n * Provider registry per PRD section 7.1\n * Central registry for provider adapters — register, resolve, list.\n */\n\nimport { logger } from \"../utils/logger.js\";\nimport { ModelNotFoundError } from \"../types/errors.js\";\nimport { SUPPORTED_MODELS } from \"../types/model.js\";\nimport type { IModelInfo } from \"../types/model.js\";\nimport type { IModelProvider, IProviderRegistryOptions } from \"./types.js\";\n\n/**\n * Singleton registry that maps provider names and model IDs to provider adapters.\n */\nexport class ProviderRegistry {\n private readonly providers = new Map<string, IModelProvider>();\n private readonly modelToProvider = new Map<string, string>();\n\n /**\n * Register a provider adapter.\n * Automatically indexes all supported models to this provider.\n */\n register(provider: IModelProvider): void {\n this.providers.set(provider.name, provider);\n\n for (const modelId of provider.supportedModels) {\n this.modelToProvider.set(modelId, provider.name);\n }\n\n logger.debug(\n { provider: provider.name, models: provider.supportedModels },\n \"Provider registered\",\n );\n }\n\n /**\n * Get a provider adapter by its name (e.g. \"anthropic\", \"openai\").\n */\n getByName(name: string): IModelProvider | undefined {\n return this.providers.get(name);\n }\n\n /**\n * Get the provider adapter that supports a given model ID.\n * @throws ModelNotFoundError if no provider serves this model.\n */\n getForModel(modelId: string): IModelProvider {\n const providerName = this.modelToProvider.get(modelId);\n if (providerName === undefined) {\n throw new ModelNotFoundError(modelId);\n }\n\n const provider = this.providers.get(providerName);\n if (provider === undefined) {\n throw new ModelNotFoundError(modelId);\n }\n\n return provider;\n }\n\n /**\n * Resolve a model string to its provider.\n * Supports both model IDs (\"claude-sonnet-4-6\") and provider-prefixed\n * forms (\"anthropic:claude-sonnet-4-6\").\n */\n resolve(modelString: string): { provider: IModelProvider; modelId: string } {\n const colonIndex = modelString.indexOf(\":\");\n if (colonIndex !== -1) {\n const providerName = modelString.slice(0, colonIndex);\n const modelId = modelString.slice(colonIndex + 1);\n const provider = this.providers.get(providerName);\n if (provider === undefined) {\n throw new ModelNotFoundError(modelString);\n }\n return { provider, modelId };\n }\n\n const provider = this.getForModel(modelString);\n return { provider, modelId: modelString };\n }\n\n /**\n * List all registered model IDs across all providers.\n */\n listModels(): readonly IModelInfo[] {\n const models: IModelInfo[] = [];\n\n for (const provider of this.providers.values()) {\n for (const modelId of provider.supportedModels) {\n const info = SUPPORTED_MODELS[modelId];\n if (info !== undefined) {\n models.push(info);\n }\n }\n }\n\n return models;\n }\n\n /**\n * List all registered provider names.\n */\n listProviders(): readonly string[] {\n return [...this.providers.keys()];\n }\n\n /**\n * Check if a model ID is supported by any registered provider.\n */\n hasModel(modelId: string): boolean {\n return this.modelToProvider.has(modelId);\n }\n\n /**\n * Check if a provider is registered.\n */\n hasProvider(name: string): boolean {\n return this.providers.has(name);\n }\n\n /**\n * List available models from all providers.\n * Uses dynamic API listing where supported, falls back to static models.\n */\n async listAllAvailableModels(): Promise<Map<string, readonly string[]>> {\n const entries = [...this.providers.entries()];\n const fetched = await Promise.all(\n entries.map(async ([name, provider]): Promise<[string, readonly string[]]> => {\n if (typeof provider.listAvailableModels === \"function\") {\n try {\n return [name, await provider.listAvailableModels()];\n } catch {\n return [name, [...provider.supportedModels]];\n }\n }\n return [name, [...provider.supportedModels]];\n }),\n );\n\n const result = new Map<string, readonly string[]>();\n fetched.sort(([a], [b]) => a.localeCompare(b));\n for (const [name, models] of fetched) {\n result.set(name, models);\n }\n\n return result;\n }\n}\n\n/**\n * Create a pre-populated registry with all available providers.\n * Resolves credentials via SessionManager (CLI delegation, API keys, env vars).\n */\nexport async function createDefaultRegistry(\n options: IProviderRegistryOptions = {},\n): Promise<ProviderRegistry> {\n const registry = new ProviderRegistry();\n\n const { SessionManager } = await import(\"../auth/session-manager.js\");\n const session = new SessionManager();\n const { execa } = await import(\"execa\");\n\n // When AEMEATHCLI_PREFER_SDK=1 (set for agent child processes), prefer\n // SDK-based adapters over native CLI adapters. Native CLI adapters shell\n // out to external binaries whose raw JSON output can interfere with IPC\n // streaming. Falls back to native only when no API key is available.\n const preferSdk = options.preferSdk ?? process.env[\"AEMEATHCLI_PREFER_SDK\"] === \"1\";\n\n const cliAvailability = new Map<string, boolean>();\n const hasCli = async (command: string): Promise<boolean> => {\n const cached = cliAvailability.get(command);\n if (cached !== undefined) {\n return cached;\n }\n\n const pathLookupCommand = process.platform === \"win32\" ? \"where\" : \"which\";\n\n try {\n await execa(pathLookupCommand, [command], { timeout: 3000 });\n cliAvailability.set(command, true);\n return true;\n } catch {\n cliAvailability.set(command, false);\n return false;\n }\n };\n\n /** Determine whether to use a native CLI adapter for a provider. */\n const shouldUseNative = async (\n credential: { method: string; token?: string | undefined } | undefined,\n cliCommand: string,\n envKeyName: string,\n ): Promise<boolean> => {\n const hasApiKey =\n credential?.method === \"api_key\"\n || credential?.method === \"env_variable\"\n || process.env[envKeyName] !== undefined;\n\n // When preferSdk is set, prefer SDK adapters whenever an API key or\n // environment credential is available, even if a native CLI login exists.\n if (preferSdk && hasApiKey) {\n return false;\n }\n\n // Native login credentials (OAuth sessions) must always use the native CLI\n // adapter. The stored token is an OAuth session token, NOT an API key — SDK\n // adapters will reject it with \"invalid x-api-key\" / \"API key not valid\".\n if (credential?.method === \"native_login\") {\n return await hasCli(cliCommand);\n }\n\n // When preferSdk is set, only use native if SDK has no way to authenticate.\n if (preferSdk) {\n // No API key available — fall back to native if CLI exists.\n return await hasCli(cliCommand);\n }\n\n // Default behavior: prefer native when CLI is available and no explicit credential.\n return credential === undefined && await hasCli(cliCommand);\n };\n\n const providerLoaders: ReadonlyArray<{\n name: string;\n load: () => Promise<IModelProvider>;\n }> = [\n {\n name: \"anthropic\",\n load: async () => {\n const { ClaudeNativeCLIAdapter, logNativeAdapterSelection } = await import(\n \"./native-cli-adapters.js\"\n );\n logNativeAdapterSelection(\"anthropic\");\n return new ClaudeNativeCLIAdapter();\n },\n },\n {\n name: \"openai\",\n load: async () => {\n const { CodexNativeCLIAdapter, logNativeAdapterSelection } = await import(\n \"./native-cli-adapters.js\"\n );\n logNativeAdapterSelection(\"openai\");\n return new CodexNativeCLIAdapter();\n },\n },\n {\n name: \"google\",\n load: async () => {\n const { GeminiNativeCLIAdapter, logNativeAdapterSelection } = await import(\n \"./native-cli-adapters.js\"\n );\n logNativeAdapterSelection(\"google\");\n return new GeminiNativeCLIAdapter();\n },\n },\n {\n name: \"kimi\",\n load: async () => {\n const { KimiAdapter } = await import(\"./kimi-adapter.js\");\n const credential = await session.getActiveCredential(\"kimi\").catch(() => undefined);\n const useNative = await shouldUseNative(credential, \"kimi\", \"MOONSHOT_API_KEY\");\n\n if (useNative) {\n const { KimiNativeCLIAdapter, logNativeAdapterSelection } = await import(\n \"./native-cli-adapters.js\"\n );\n logNativeAdapterSelection(\"kimi\");\n return new KimiNativeCLIAdapter();\n }\n\n return new KimiAdapter(\n credential?.token !== undefined ? { apiKey: credential.token } : undefined,\n );\n },\n },\n ];\n\n // Initialize all providers in parallel (including Ollama)\n const ollamaTask = (async () => {\n try {\n const { OllamaAdapter } = await import(\"./ollama-adapter.js\");\n const ollama = new OllamaAdapter();\n await ollama.refreshModels();\n registry.register(ollama);\n } catch {\n // Ollama not available\n }\n })();\n\n await Promise.all([\n ...providerLoaders.map(async (config) => {\n try {\n const adapter = await config.load();\n registry.register(adapter);\n } catch {\n // Skip provider if adapter fails to initialize\n }\n }),\n ollamaTask,\n ]);\n\n return registry;\n}\n"]}
|
|
@@ -1,6 +1,23 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
|
|
4
|
+
// src/version.ts
|
|
5
|
+
var FALLBACK_VERSION = "0.0.0";
|
|
6
|
+
function loadPackageVersion() {
|
|
7
|
+
try {
|
|
8
|
+
const packageJsonPath = fileURLToPath(new URL("../package.json", import.meta.url));
|
|
9
|
+
const raw = readFileSync(packageJsonPath, "utf-8");
|
|
10
|
+
const parsed = JSON.parse(raw);
|
|
11
|
+
return parsed.version ?? FALLBACK_VERSION;
|
|
12
|
+
} catch {
|
|
13
|
+
return FALLBACK_VERSION;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
var PACKAGE_VERSION = loadPackageVersion();
|
|
17
|
+
|
|
1
18
|
// src/types/config.ts
|
|
2
19
|
var DEFAULT_CONFIG = {
|
|
3
|
-
version:
|
|
20
|
+
version: PACKAGE_VERSION,
|
|
4
21
|
defaultModel: "claude-sonnet-4-6",
|
|
5
22
|
roles: {
|
|
6
23
|
planning: { primary: "claude-opus-4-6", fallback: ["gpt-5.2", "gemini-2.5-pro"] },
|
|
@@ -25,9 +42,15 @@ var DEFAULT_CONFIG = {
|
|
|
25
42
|
splitPanel: {
|
|
26
43
|
enabled: true,
|
|
27
44
|
backend: "tmux",
|
|
28
|
-
defaultLayout: "
|
|
45
|
+
defaultLayout: "hub-spoke",
|
|
29
46
|
maxPanes: 6
|
|
30
47
|
},
|
|
48
|
+
swarm: {
|
|
49
|
+
onboardingComplete: false,
|
|
50
|
+
detectedProviders: [],
|
|
51
|
+
primaryMasterProvider: void 0,
|
|
52
|
+
fallbackMasterProviders: []
|
|
53
|
+
},
|
|
31
54
|
cost: {
|
|
32
55
|
budgetWarning: 5,
|
|
33
56
|
budgetHardStop: 20,
|
|
@@ -39,6 +62,6 @@ var DEFAULT_CONFIG = {
|
|
|
39
62
|
}
|
|
40
63
|
};
|
|
41
64
|
|
|
42
|
-
export { DEFAULT_CONFIG };
|
|
43
|
-
//# sourceMappingURL=chunk-
|
|
44
|
-
//# sourceMappingURL=chunk-
|
|
65
|
+
export { DEFAULT_CONFIG, PACKAGE_VERSION };
|
|
66
|
+
//# sourceMappingURL=chunk-2Y7TR6BS.js.map
|
|
67
|
+
//# sourceMappingURL=chunk-2Y7TR6BS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/types/config.ts"],"names":[],"mappings":";;;;AAOA,IAAM,gBAAA,GAAmB,OAAA;AAEzB,SAAS,kBAAA,GAA6B;AACpC,EAAA,IAAI;AACF,IAAA,MAAM,kBAAkB,aAAA,CAAc,IAAI,IAAI,iBAAA,EAAmB,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA;AACjF,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,eAAA,EAAiB,OAAO,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC7B,IAAA,OAAO,OAAO,OAAA,IAAW,gBAAA;AAAA,EAC3B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,gBAAA;AAAA,EACT;AACF;AAEO,IAAM,kBAAkB,kBAAA;;;ACwHxB,IAAM,cAAA,GAAgC;AAAA,EAC3C,OAAA,EAAS,eAAA;AAAA,EACT,YAAA,EAAc,mBAAA;AAAA,EACd,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,EAAE,OAAA,EAAS,iBAAA,EAAmB,UAAU,CAAC,SAAA,EAAW,gBAAgB,CAAA,EAAE;AAAA,IAChF,MAAA,EAAQ,EAAE,OAAA,EAAS,mBAAA,EAAqB,UAAU,CAAC,SAAA,EAAW,kBAAkB,CAAA,EAAE;AAAA,IAClF,QAAQ,EAAE,OAAA,EAAS,mBAAmB,QAAA,EAAU,CAAC,gBAAgB,CAAA,EAAE;AAAA,IACnE,SAAS,EAAE,OAAA,EAAS,oBAAoB,QAAA,EAAU,CAAC,kBAAkB,CAAA,EAAE;AAAA,IACvE,QAAQ,EAAE,OAAA,EAAS,qBAAqB,QAAA,EAAU,CAAC,SAAS,CAAA,EAAE;AAAA,IAC9D,eAAe,EAAE,OAAA,EAAS,oBAAoB,QAAA,EAAU,CAAC,kBAAkB,CAAA;AAAE,GAC/E;AAAA,EACA,SAAA,EAAW;AAAA,IACT,SAAA,EAAW,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,IAC3B,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,IACxB,MAAA,EAAQ,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,IACxB,IAAA,EAAM,EAAE,OAAA,EAAS,KAAA,EAAM;AAAA,IACvB,MAAA,EAAQ,EAAE,OAAA,EAAS,KAAA,EAAO,SAAS,wBAAA;AAAyB,GAC9D;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,UAAA;AAAA,IACN,YAAA,EAAc,CAAC,IAAI,CAAA;AAAA,IACnB,eAAA,EAAiB,CAAC,UAAA,EAAY,kBAAkB;AAAA,GAClD;AAAA,EACA,UAAA,EAAY;AAAA,IACV,OAAA,EAAS,IAAA;AAAA,IACT,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,WAAA;AAAA,IACf,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,kBAAA,EAAoB,KAAA;AAAA,IACpB,mBAAmB,EAAC;AAAA,IACpB,qBAAA,EAAuB,MAAA;AAAA,IACvB,yBAAyB;AAAC,GAC5B;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,aAAA,EAAe,CAAA;AAAA,IACf,cAAA,EAAgB,EAAA;AAAA,IAChB,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,SAAA,EAAW;AAAA,IACT,OAAA,EAAS,KAAA;AAAA,IACT,UAAA,EAAY;AAAA;AAEhB","file":"chunk-2Y7TR6BS.js","sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\ninterface PackageJsonShape {\n version?: string;\n}\n\nconst FALLBACK_VERSION = \"0.0.0\";\n\nfunction loadPackageVersion(): string {\n try {\n const packageJsonPath = fileURLToPath(new URL(\"../package.json\", import.meta.url));\n const raw = readFileSync(packageJsonPath, \"utf-8\");\n const parsed = JSON.parse(raw) as PackageJsonShape;\n return parsed.version ?? FALLBACK_VERSION;\n } catch {\n return FALLBACK_VERSION;\n }\n}\n\nexport const PACKAGE_VERSION = loadPackageVersion();\n","/**\n * Configuration types per PRD section 17.3\n */\n\nimport type { ProviderName, ModelRole, IRoleConfig } from \"./model.js\";\nimport type { PermissionMode } from \"./tool.js\";\nimport type { PaneLayout } from \"./team.js\";\nimport type { CliProviderType } from \"../orchestrator/constants.js\";\nimport { PACKAGE_VERSION } from \"../version.js\";\n\n// ── Provider Configuration ───────────────────────────────────────────────\n\nexport interface IProviderConfig {\n readonly enabled: boolean;\n readonly baseUrl?: string | undefined;\n}\n\n// ── Permission Configuration ─────────────────────────────────────────────\n\nexport interface IPermissionConfig {\n readonly mode: PermissionMode;\n readonly allowedPaths: readonly string[];\n readonly blockedCommands: readonly string[];\n}\n\n// ── Split Panel Configuration ────────────────────────────────────────────\n\nexport type PaneBackend = \"tmux\" | \"iterm2\" | \"ghostty\" | \"terminal-app\";\n\nexport interface ISplitPanelConfig {\n readonly enabled: boolean;\n readonly backend: PaneBackend;\n readonly defaultLayout: PaneLayout;\n readonly maxPanes: number;\n}\n\n// ── Swarm / Orchestrator Preferences ────────────────────────────────────\n\nexport interface ISwarmConfig {\n readonly onboardingComplete: boolean;\n readonly detectedProviders: readonly CliProviderType[];\n readonly primaryMasterProvider?: CliProviderType | undefined;\n readonly fallbackMasterProviders: readonly CliProviderType[];\n}\n\n// ── Cost Configuration ───────────────────────────────────────────────────\n\nexport interface ICostConfig {\n readonly budgetWarning: number;\n readonly budgetHardStop: number;\n readonly currency: string;\n}\n\n// ── Telemetry Configuration ──────────────────────────────────────────────\n\nexport interface ITelemetryConfig {\n readonly enabled: boolean;\n readonly anonymized: boolean;\n}\n\n// ── OAuth Provider Configuration ─────────────────────────────────────────\n\nexport interface IOAuthProviderConfig {\n readonly clientId: string;\n readonly clientSecret?: string | undefined;\n readonly authorizeUrl?: string | undefined;\n readonly tokenUrl?: string | undefined;\n readonly scope?: string | undefined;\n}\n\nexport interface IOAuthConfig {\n readonly anthropic?: IOAuthProviderConfig | undefined;\n readonly openai?: IOAuthProviderConfig | undefined;\n readonly google?: IOAuthProviderConfig | undefined;\n readonly kimi?: IOAuthProviderConfig | undefined;\n}\n\n// ── Global Configuration (PRD section 17.3) ──────────────────────────────\n\nexport interface IGlobalConfig {\n readonly version: string;\n readonly defaultModel: string;\n readonly roles: Partial<Record<ModelRole, IRoleConfig>>;\n readonly providers: Partial<Record<ProviderName, IProviderConfig>>;\n readonly permissions: IPermissionConfig;\n readonly splitPanel: ISplitPanelConfig;\n readonly swarm: ISwarmConfig;\n readonly cost: ICostConfig;\n readonly telemetry: ITelemetryConfig;\n readonly oauth?: IOAuthConfig | undefined;\n}\n\n// ── MCP Server Configuration (PRD section 11.2) ─────────────────────────\n\nexport interface IMCPServerConfig {\n readonly command: string;\n readonly args: readonly string[];\n readonly env?: Readonly<Record<string, string>> | undefined;\n}\n\nexport interface IMCPConfig {\n readonly mcpServers: Readonly<Record<string, IMCPServerConfig>>;\n}\n\n// ── Skill Configuration (PRD section 10.2) ───────────────────────────────\n\nexport interface ISkillFrontmatter {\n readonly name: string;\n readonly description: string;\n readonly version: string;\n readonly \"allowed-tools\"?: readonly string[] | undefined;\n readonly triggers: readonly string[];\n readonly \"model-requirements\"?: {\n readonly \"preferred-role\"?: ModelRole | undefined;\n readonly \"min-context\"?: number | undefined;\n } | undefined;\n}\n\nexport interface ISkillDefinition {\n readonly frontmatter: ISkillFrontmatter;\n readonly body: string;\n readonly filePath: string;\n}\n\n// ── Auth Credential Types (PRD section 13) ───────────────────────────────\n\nexport type AuthMethod = \"native_login\" | \"api_key\" | \"env_variable\" | \"credential_helper\";\n\nexport interface ICredential {\n readonly provider: ProviderName;\n readonly method: AuthMethod;\n readonly token?: string | undefined;\n readonly refreshToken?: string | undefined;\n readonly expiresAt?: Date | undefined;\n readonly email?: string | undefined;\n readonly plan?: string | undefined;\n}\n\n// ── Default Configuration ────────────────────────────────────────────────\n\nexport const DEFAULT_CONFIG: IGlobalConfig = {\n version: PACKAGE_VERSION,\n defaultModel: \"claude-sonnet-4-6\",\n roles: {\n planning: { primary: \"claude-opus-4-6\", fallback: [\"gpt-5.2\", \"gemini-2.5-pro\"] },\n coding: { primary: \"claude-sonnet-4-6\", fallback: [\"gpt-5.2\", \"gemini-2.5-flash\"] },\n review: { primary: \"claude-opus-4-6\", fallback: [\"gemini-2.5-pro\"] },\n testing: { primary: \"claude-haiku-4-5\", fallback: [\"gemini-2.5-flash\"] },\n bugfix: { primary: \"claude-sonnet-4-6\", fallback: [\"gpt-5.2\"] },\n documentation: { primary: \"gemini-2.5-flash\", fallback: [\"claude-haiku-4-5\"] },\n },\n providers: {\n anthropic: { enabled: true },\n openai: { enabled: true },\n google: { enabled: true },\n kimi: { enabled: false },\n ollama: { enabled: false, baseUrl: \"http://localhost:11434\" },\n },\n permissions: {\n mode: \"standard\",\n allowedPaths: [\"./\"],\n blockedCommands: [\"rm -rf /\", \"git push --force\"],\n },\n splitPanel: {\n enabled: true,\n backend: \"tmux\",\n defaultLayout: \"hub-spoke\",\n maxPanes: 6,\n },\n swarm: {\n onboardingComplete: false,\n detectedProviders: [],\n primaryMasterProvider: undefined,\n fallbackMasterProviders: [],\n },\n cost: {\n budgetWarning: 5.0,\n budgetHardStop: 20.0,\n currency: \"USD\",\n },\n telemetry: {\n enabled: false,\n anonymized: true,\n },\n};\n"]}
|