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.
Files changed (184) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +66 -54
  3. package/dist/App-JQ622M66.js +4431 -0
  4. package/dist/App-JQ622M66.js.map +1 -0
  5. package/dist/agent-store/architect.md +32 -0
  6. package/dist/agent-store/debugger.md +32 -0
  7. package/dist/agent-store/developer.md +29 -0
  8. package/dist/agent-store/documenter.md +30 -0
  9. package/dist/agent-store/researcher.md +31 -0
  10. package/dist/agent-store/reviewer.md +28 -0
  11. package/dist/agent-store/supervisor.md +37 -0
  12. package/dist/agent-store/tester.md +30 -0
  13. package/dist/api-key-fallback-RJLPM3KH.js +11 -0
  14. package/dist/{api-key-fallback-YQQBOQIL.js.map → api-key-fallback-RJLPM3KH.js.map} +1 -1
  15. package/dist/auth-status-JQJOKUPF.js +13 -0
  16. package/dist/auth-status-JQJOKUPF.js.map +1 -0
  17. package/dist/{chunk-RWCNNAL7.js → chunk-2KMA5RBC.js} +25 -48
  18. package/dist/chunk-2KMA5RBC.js.map +1 -0
  19. package/dist/{chunk-CYQNBB25.js → chunk-2Y7TR6BS.js} +28 -5
  20. package/dist/chunk-2Y7TR6BS.js.map +1 -0
  21. package/dist/{chunk-DAHGLHNR.js → chunk-2ZYK5IJG.js} +6 -141
  22. package/dist/chunk-2ZYK5IJG.js.map +1 -0
  23. package/dist/chunk-36RXCZOV.js +88 -0
  24. package/dist/chunk-36RXCZOV.js.map +1 -0
  25. package/dist/{chunk-DMBPX3RG.js → chunk-7EBLXPL4.js} +9 -9
  26. package/dist/{chunk-DMBPX3RG.js.map → chunk-7EBLXPL4.js.map} +1 -1
  27. package/dist/chunk-BIMQL4AG.js +186 -0
  28. package/dist/chunk-BIMQL4AG.js.map +1 -0
  29. package/dist/{chunk-NBR3GHMT.js → chunk-D275MCIH.js} +39 -7
  30. package/dist/chunk-D275MCIH.js.map +1 -0
  31. package/dist/{chunk-Y5XVD2CD.js → chunk-FFS4T7BZ.js} +109 -82
  32. package/dist/chunk-FFS4T7BZ.js.map +1 -0
  33. package/dist/{chunk-CARHU3DO.js → chunk-GXAJGP2T.js} +64 -16
  34. package/dist/chunk-GXAJGP2T.js.map +1 -0
  35. package/dist/{chunk-I5PZ4JTS.js → chunk-HESQLCLU.js} +4 -4
  36. package/dist/{chunk-I5PZ4JTS.js.map → chunk-HESQLCLU.js.map} +1 -1
  37. package/dist/{chunk-JAXXTYID.js → chunk-IR5HLBMH.js} +2 -2
  38. package/dist/{chunk-JAXXTYID.js.map → chunk-IR5HLBMH.js.map} +1 -1
  39. package/dist/{chunk-MFBHNWGV.js → chunk-K2FCMRXH.js} +11 -19
  40. package/dist/chunk-K2FCMRXH.js.map +1 -0
  41. package/dist/{chunk-H66O5Z2V.js → chunk-KIC7UI5U.js} +41 -6
  42. package/dist/chunk-KIC7UI5U.js.map +1 -0
  43. package/dist/{chunk-MXZSI3AY.js → chunk-KMOAJRDE.js} +42 -10
  44. package/dist/chunk-KMOAJRDE.js.map +1 -0
  45. package/dist/chunk-LQBALETG.js +71 -0
  46. package/dist/chunk-LQBALETG.js.map +1 -0
  47. package/dist/chunk-M3FPQSRU.js +12 -0
  48. package/dist/chunk-M3FPQSRU.js.map +1 -0
  49. package/dist/chunk-NQEUK763.js +26 -0
  50. package/dist/chunk-NQEUK763.js.map +1 -0
  51. package/dist/chunk-OPWAFS6Y.js +38 -0
  52. package/dist/chunk-OPWAFS6Y.js.map +1 -0
  53. package/dist/{chunk-6PDJ45T4.js → chunk-PS4WEFW6.js} +50 -25
  54. package/dist/chunk-PS4WEFW6.js.map +1 -0
  55. package/dist/{chunk-HMJRPNPZ.js → chunk-QK7TKNHV.js} +93 -21
  56. package/dist/chunk-QK7TKNHV.js.map +1 -0
  57. package/dist/{chunk-LSOYPSAT.js → chunk-RADJSEG5.js} +4 -4
  58. package/dist/chunk-RADJSEG5.js.map +1 -0
  59. package/dist/{chunk-4IJD72YB.js → chunk-SNWPI6XJ.js} +7 -7
  60. package/dist/chunk-SNWPI6XJ.js.map +1 -0
  61. package/dist/{chunk-TEVZS4FA.js → chunk-UM7MSLOV.js} +16 -9
  62. package/dist/chunk-UM7MSLOV.js.map +1 -0
  63. package/dist/chunk-VNZ3YTQD.js +232 -0
  64. package/dist/chunk-VNZ3YTQD.js.map +1 -0
  65. package/dist/{chunk-IYW62KKR.js → chunk-WXIN65UG.js} +66 -23
  66. package/dist/chunk-WXIN65UG.js.map +1 -0
  67. package/dist/chunk-XEXWX7C7.js +241 -0
  68. package/dist/chunk-XEXWX7C7.js.map +1 -0
  69. package/dist/{chunk-CGEV3ARR.js → chunk-YCCYXDW7.js} +3 -3
  70. package/dist/chunk-YCCYXDW7.js.map +1 -0
  71. package/dist/chunk-YPQ2MLAV.js +140 -0
  72. package/dist/chunk-YPQ2MLAV.js.map +1 -0
  73. package/dist/chunk-ZCOVMVK4.js +26 -0
  74. package/dist/chunk-ZCOVMVK4.js.map +1 -0
  75. package/dist/{claude-login-5WELXPKT.js → claude-login-AIFIWTYF.js} +9 -9
  76. package/dist/{claude-login-5WELXPKT.js.map → claude-login-AIFIWTYF.js.map} +1 -1
  77. package/dist/cli.js +370 -171
  78. package/dist/cli.js.map +1 -1
  79. package/dist/{codex-login-GZIFXUWD.js → codex-login-LW5X7GAM.js} +10 -10
  80. package/dist/codex-login-LW5X7GAM.js.map +1 -0
  81. package/dist/config-store-NF56VHFU.js +7 -0
  82. package/dist/{config-store-W6FBCQAQ.js.map → config-store-NF56VHFU.js.map} +1 -1
  83. package/dist/conversation-store-7GRDQZD2.js +4 -0
  84. package/dist/conversation-store-7GRDQZD2.js.map +1 -0
  85. package/dist/detect-providers-QICJ5U3R.js +4 -0
  86. package/dist/detect-providers-QICJ5U3R.js.map +1 -0
  87. package/dist/executor-FTABX2AW.js +4 -0
  88. package/dist/{executor-6RIKIGXK.js.map → executor-FTABX2AW.js.map} +1 -1
  89. package/dist/first-run-ADROZVYF.js +230 -0
  90. package/dist/first-run-ADROZVYF.js.map +1 -0
  91. package/dist/{gemini-login-AZGL3CE7.js → gemini-login-TST454MX.js} +9 -9
  92. package/dist/{gemini-login-AZGL3CE7.js.map → gemini-login-TST454MX.js.map} +1 -1
  93. package/dist/index.d.ts +46 -70
  94. package/dist/index.js +79 -468
  95. package/dist/index.js.map +1 -1
  96. package/dist/input-history-BEICE7PT.js +57 -0
  97. package/dist/input-history-BEICE7PT.js.map +1 -0
  98. package/dist/kimi-adapter-7FYOAKOI.js +6 -0
  99. package/dist/{kimi-adapter-JN4HFFHU.js.map → kimi-adapter-7FYOAKOI.js.map} +1 -1
  100. package/dist/{kimi-login-6LUWB7P6.js → kimi-login-3IGVOBJI.js} +9 -9
  101. package/dist/{kimi-login-6LUWB7P6.js.map → kimi-login-3IGVOBJI.js.map} +1 -1
  102. package/dist/logger-KGHUQ4VE.js +3 -0
  103. package/dist/logger-KGHUQ4VE.js.map +1 -0
  104. package/dist/model-discovery-AAJDHRFO.js +6 -0
  105. package/dist/model-discovery-AAJDHRFO.js.map +1 -0
  106. package/dist/native-cli-adapters-CLONTZOA.js +8 -0
  107. package/dist/{native-cli-adapters-OLW3XX57.js.map → native-cli-adapters-CLONTZOA.js.map} +1 -1
  108. package/dist/ollama-adapter-2N5OQIEV.js +5 -0
  109. package/dist/{ollama-adapter-OJQ3FKWK.js.map → ollama-adapter-2N5OQIEV.js.map} +1 -1
  110. package/dist/pathResolver-UVAB2FCW.js +3 -0
  111. package/dist/pathResolver-UVAB2FCW.js.map +1 -0
  112. package/dist/profile-loader-EMLV4J7S.js +162 -0
  113. package/dist/profile-loader-EMLV4J7S.js.map +1 -0
  114. package/dist/registry-LRURZVUL.js +5 -0
  115. package/dist/{registry-AZ2LOHHJ.js.map → registry-LRURZVUL.js.map} +1 -1
  116. package/dist/registry-MVNSXCEF.js +6 -0
  117. package/dist/{registry-H7B3AHPQ.js.map → registry-MVNSXCEF.js.map} +1 -1
  118. package/dist/server-manager-THGZBBZB.js +5 -0
  119. package/dist/{server-manager-PTGBHCLS.js.map → server-manager-THGZBBZB.js.map} +1 -1
  120. package/dist/session-manager-X3DXT53M.js +12 -0
  121. package/dist/{session-manager-XOMDMC77.js.map → session-manager-X3DXT53M.js.map} +1 -1
  122. package/dist/skills/built-in/code-review/SKILL.md +85 -0
  123. package/dist/skills/built-in/commit/SKILL.md +83 -0
  124. package/dist/skills/built-in/debug/SKILL.md +119 -0
  125. package/dist/skills/built-in/plan/SKILL.md +123 -0
  126. package/dist/skills/built-in/refactor/SKILL.md +132 -0
  127. package/dist/skills/built-in/test/SKILL.md +128 -0
  128. package/dist/sqlite-store-7OECRTXM.js +5 -0
  129. package/dist/sqlite-store-7OECRTXM.js.map +1 -0
  130. package/dist/team-manager-2VSMALAA.js +11 -0
  131. package/dist/{team-manager-HC4XGCFY.js.map → team-manager-2VSMALAA.js.map} +1 -1
  132. package/dist/team-state-HZNVMQHT.js +3 -0
  133. package/dist/team-state-HZNVMQHT.js.map +1 -0
  134. package/dist/tmux-manager-57QCUVHU.js +6 -0
  135. package/dist/{tmux-manager-GPYZ3WQH.js.map → tmux-manager-57QCUVHU.js.map} +1 -1
  136. package/dist/tools-KWFSYT56.js +6 -0
  137. package/dist/{tools-TSMXMHIF.js.map → tools-KWFSYT56.js.map} +1 -1
  138. package/package.json +11 -11
  139. package/dist/App-FKRSMFMB.js +0 -2789
  140. package/dist/App-FKRSMFMB.js.map +0 -1
  141. package/dist/api-key-fallback-YQQBOQIL.js +0 -11
  142. package/dist/chunk-4IJD72YB.js.map +0 -1
  143. package/dist/chunk-6PDJ45T4.js.map +0 -1
  144. package/dist/chunk-CARHU3DO.js.map +0 -1
  145. package/dist/chunk-CGEV3ARR.js.map +0 -1
  146. package/dist/chunk-CS5X3BWX.js +0 -27
  147. package/dist/chunk-CS5X3BWX.js.map +0 -1
  148. package/dist/chunk-CYQNBB25.js.map +0 -1
  149. package/dist/chunk-DAHGLHNR.js.map +0 -1
  150. package/dist/chunk-H66O5Z2V.js.map +0 -1
  151. package/dist/chunk-HMJRPNPZ.js.map +0 -1
  152. package/dist/chunk-IYW62KKR.js.map +0 -1
  153. package/dist/chunk-LSOYPSAT.js.map +0 -1
  154. package/dist/chunk-MFBHNWGV.js.map +0 -1
  155. package/dist/chunk-MXZSI3AY.js.map +0 -1
  156. package/dist/chunk-NBR3GHMT.js.map +0 -1
  157. package/dist/chunk-RWCNNAL7.js.map +0 -1
  158. package/dist/chunk-TEVZS4FA.js.map +0 -1
  159. package/dist/chunk-UY2SYSEZ.js +0 -211
  160. package/dist/chunk-UY2SYSEZ.js.map +0 -1
  161. package/dist/chunk-WAHVZH7V.js +0 -260
  162. package/dist/chunk-WAHVZH7V.js.map +0 -1
  163. package/dist/chunk-WPP3PEDE.js +0 -234
  164. package/dist/chunk-WPP3PEDE.js.map +0 -1
  165. package/dist/chunk-Y5XVD2CD.js.map +0 -1
  166. package/dist/claude-adapter-QMLFMSP3.js +0 -6
  167. package/dist/claude-adapter-QMLFMSP3.js.map +0 -1
  168. package/dist/codex-login-GZIFXUWD.js.map +0 -1
  169. package/dist/config-store-W6FBCQAQ.js +0 -6
  170. package/dist/executor-6RIKIGXK.js +0 -4
  171. package/dist/gemini-adapter-6JIHZ7WI.js +0 -6
  172. package/dist/gemini-adapter-6JIHZ7WI.js.map +0 -1
  173. package/dist/kimi-adapter-JN4HFFHU.js +0 -6
  174. package/dist/native-cli-adapters-OLW3XX57.js +0 -6
  175. package/dist/ollama-adapter-OJQ3FKWK.js +0 -6
  176. package/dist/openai-adapter-XU46EN7B.js +0 -6
  177. package/dist/openai-adapter-XU46EN7B.js.map +0 -1
  178. package/dist/registry-AZ2LOHHJ.js +0 -6
  179. package/dist/registry-H7B3AHPQ.js +0 -5
  180. package/dist/server-manager-PTGBHCLS.js +0 -5
  181. package/dist/session-manager-XOMDMC77.js +0 -12
  182. package/dist/team-manager-HC4XGCFY.js +0 -11
  183. package/dist/tmux-manager-GPYZ3WQH.js +0 -6
  184. 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-YQQBOQIL.js"}
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 { logger } from './chunk-JAXXTYID.js';
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-XOMDMC77.js');
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("which", [command], { timeout: 3e3 });
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 { ClaudeAdapter } = await import('./claude-adapter-QMLFMSP3.js');
161
- const credential = await session.getActiveCredential("anthropic").catch(() => void 0);
162
- const useNative = await shouldUseNative(credential, "claude", "ANTHROPIC_API_KEY");
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 { OpenAIAdapter } = await import('./openai-adapter-XU46EN7B.js');
177
- const credential = await session.getActiveCredential("openai").catch(() => void 0);
178
- const useNative = await shouldUseNative(credential, "codex", "OPENAI_API_KEY");
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 { GeminiAdapter } = await import('./gemini-adapter-6JIHZ7WI.js');
193
- const credential = await session.getActiveCredential("google").catch(() => void 0);
194
- const useNative = await shouldUseNative(credential, "gemini", "GOOGLE_API_KEY");
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-JN4HFFHU.js');
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-OLW3XX57.js');
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-OJQ3FKWK.js');
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-RWCNNAL7.js.map
246
- //# sourceMappingURL=chunk-RWCNNAL7.js.map
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: "1.0.0",
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: "auto",
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-CYQNBB25.js.map
44
- //# sourceMappingURL=chunk-CYQNBB25.js.map
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"]}