aemeathcli 1.0.11 → 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 -21
- package/README.md +620 -609
- package/dist/{App-YAHJUWCX.js → App-JQ622M66.js} +209 -52
- package/dist/App-JQ622M66.js.map +1 -0
- package/dist/agent-store/architect.md +32 -32
- package/dist/agent-store/debugger.md +32 -32
- package/dist/agent-store/developer.md +29 -29
- package/dist/agent-store/documenter.md +30 -30
- package/dist/agent-store/researcher.md +31 -31
- package/dist/agent-store/reviewer.md +28 -28
- package/dist/agent-store/supervisor.md +37 -37
- package/dist/agent-store/tester.md +30 -30
- package/dist/api-key-fallback-RJLPM3KH.js +11 -0
- package/dist/{api-key-fallback-UN3TJEOO.js.map → api-key-fallback-RJLPM3KH.js.map} +1 -1
- package/dist/auth-status-JQJOKUPF.js +13 -0
- package/dist/{auth-status-EIM5A5KL.js.map → auth-status-JQJOKUPF.js.map} +1 -1
- package/dist/{chunk-P66WDACW.js → chunk-2KMA5RBC.js} +18 -42
- package/dist/chunk-2KMA5RBC.js.map +1 -0
- package/dist/{chunk-2GKOK6T7.js → chunk-2Y7TR6BS.js} +2 -2
- package/dist/chunk-2Y7TR6BS.js.map +1 -0
- package/dist/{chunk-ONQ4WCUI.js → chunk-2ZYK5IJG.js} +6 -6
- package/dist/chunk-2ZYK5IJG.js.map +1 -0
- package/dist/{chunk-OCJPQFOR.js → chunk-36RXCZOV.js} +4 -4
- package/dist/chunk-36RXCZOV.js.map +1 -0
- package/dist/{chunk-H2SYKIMI.js → chunk-7EBLXPL4.js} +10 -10
- package/dist/chunk-7EBLXPL4.js.map +1 -0
- package/dist/{chunk-IARA5XYP.js → chunk-BIMQL4AG.js} +4 -4
- package/dist/chunk-BIMQL4AG.js.map +1 -0
- package/dist/{chunk-BY4DAKUU.js → chunk-D275MCIH.js} +2 -2
- package/dist/chunk-D275MCIH.js.map +1 -0
- package/dist/{chunk-SOQFMNQC.js → chunk-FFS4T7BZ.js} +5 -5
- package/dist/chunk-FFS4T7BZ.js.map +1 -0
- package/dist/{chunk-LDVY5ELP.js → chunk-GXAJGP2T.js} +5 -5
- package/dist/chunk-GXAJGP2T.js.map +1 -0
- package/dist/{chunk-62HSGYQD.js → chunk-HCIHOHLX.js} +2 -2
- package/dist/chunk-HCIHOHLX.js.map +1 -0
- package/dist/{chunk-6GUD7QIM.js → chunk-HESQLCLU.js} +4 -4
- package/dist/chunk-HESQLCLU.js.map +1 -0
- package/dist/{chunk-HEKFAKVH.js → chunk-IR5HLBMH.js} +2 -2
- package/dist/chunk-IR5HLBMH.js.map +1 -0
- package/dist/{chunk-2LF7ALGR.js → chunk-K2FCMRXH.js} +4 -4
- package/dist/chunk-K2FCMRXH.js.map +1 -0
- package/dist/{chunk-2NWNIKBK.js → chunk-KIC7UI5U.js} +4 -4
- package/dist/chunk-KIC7UI5U.js.map +1 -0
- package/dist/{chunk-YPFOE2QJ.js → chunk-KMOAJRDE.js} +5 -5
- package/dist/chunk-KMOAJRDE.js.map +1 -0
- package/dist/{chunk-RP2TAL3J.js → chunk-LQBALETG.js} +2 -2
- package/dist/chunk-LQBALETG.js.map +1 -0
- package/dist/{chunk-CC7MGWYY.js → chunk-M3FPQSRU.js} +2 -2
- package/dist/chunk-M3FPQSRU.js.map +1 -0
- package/dist/{chunk-3TSPZRGM.js → chunk-NQEUK763.js} +3 -3
- package/dist/chunk-NQEUK763.js.map +1 -0
- package/dist/{chunk-VBLLDY4R.js → chunk-OPWAFS6Y.js} +2 -2
- package/dist/chunk-OPWAFS6Y.js.map +1 -0
- package/dist/{chunk-RYOB3TLZ.js → chunk-PS4WEFW6.js} +6 -6
- package/dist/chunk-PS4WEFW6.js.map +1 -0
- package/dist/{chunk-LCYH4T6N.js → chunk-QK7TKNHV.js} +6 -6
- package/dist/chunk-QK7TKNHV.js.map +1 -0
- package/dist/{chunk-QCRK4QEL.js → chunk-RADJSEG5.js} +3 -3
- package/dist/chunk-RADJSEG5.js.map +1 -0
- package/dist/{chunk-AQ23TYSQ.js → chunk-SNWPI6XJ.js} +4 -4
- package/dist/chunk-SNWPI6XJ.js.map +1 -0
- package/dist/{chunk-TDFTX32B.js → chunk-UM7MSLOV.js} +4 -4
- package/dist/chunk-UM7MSLOV.js.map +1 -0
- package/dist/{chunk-FIC7AK4Q.js → chunk-VNZ3YTQD.js} +5 -5
- package/dist/chunk-VNZ3YTQD.js.map +1 -0
- package/dist/{chunk-5XFSV6PF.js → chunk-WXIN65UG.js} +6 -6
- package/dist/chunk-WXIN65UG.js.map +1 -0
- package/dist/{chunk-WC72BRHR.js → chunk-XEXWX7C7.js} +3 -3
- package/dist/chunk-XEXWX7C7.js.map +1 -0
- package/dist/{chunk-VJNQJALF.js → chunk-YCCYXDW7.js} +4 -4
- package/dist/chunk-YCCYXDW7.js.map +1 -0
- package/dist/{chunk-ROJPFPJ7.js → chunk-YL5XFHR3.js} +2 -2
- package/dist/chunk-YL5XFHR3.js.map +1 -0
- package/dist/{chunk-GU33WKPG.js → chunk-YPQ2MLAV.js} +5 -5
- package/dist/chunk-YPQ2MLAV.js.map +1 -0
- package/dist/{chunk-WAYSJMPS.js → chunk-ZCOVMVK4.js} +2 -2
- package/dist/chunk-ZCOVMVK4.js.map +1 -0
- package/dist/{chunk-473JN6M5.js → chunk-ZGOHARPV.js} +2 -2
- package/dist/chunk-ZGOHARPV.js.map +1 -0
- package/dist/{claude-login-IS5WTBMP.js → claude-login-AIFIWTYF.js} +10 -10
- package/dist/claude-login-AIFIWTYF.js.map +1 -0
- package/dist/cli.js +30 -30
- package/dist/cli.js.map +1 -1
- package/dist/{codex-login-GMPF64MR.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-POB6I37G.js.map → config-store-NF56VHFU.js.map} +1 -1
- package/dist/conversation-store-7GRDQZD2.js +4 -0
- package/dist/{conversation-store-PRBHWQMJ.js.map → conversation-store-7GRDQZD2.js.map} +1 -1
- package/dist/detect-providers-QICJ5U3R.js +4 -0
- package/dist/{detect-providers-C4SVQHFF.js.map → detect-providers-QICJ5U3R.js.map} +1 -1
- package/dist/executor-FTABX2AW.js +4 -0
- package/dist/{executor-RUX7VK3T.js.map → executor-FTABX2AW.js.map} +1 -1
- package/dist/{first-run-GDEVRFPO.js → first-run-ADROZVYF.js} +13 -13
- package/dist/first-run-ADROZVYF.js.map +1 -0
- package/dist/{gemini-login-KE224MSW.js → gemini-login-TST454MX.js} +10 -10
- package/dist/gemini-login-TST454MX.js.map +1 -0
- package/dist/index.d.ts +2 -56
- package/dist/index.js +30 -34
- package/dist/index.js.map +1 -1
- package/dist/{input-history-MIOO3FIW.js → input-history-BEICE7PT.js} +3 -3
- package/dist/input-history-BEICE7PT.js.map +1 -0
- package/dist/kimi-adapter-7FYOAKOI.js +6 -0
- package/dist/{kimi-adapter-UODMNX6K.js.map → kimi-adapter-7FYOAKOI.js.map} +1 -1
- package/dist/{kimi-login-DNT5YBKX.js → kimi-login-3IGVOBJI.js} +10 -10
- package/dist/kimi-login-3IGVOBJI.js.map +1 -0
- package/dist/logger-KGHUQ4VE.js +3 -0
- package/dist/{logger-PLPDWACQ.js.map → logger-KGHUQ4VE.js.map} +1 -1
- package/dist/model-discovery-AAJDHRFO.js +6 -0
- package/dist/{model-discovery-O64ZWPX5.js.map → model-discovery-AAJDHRFO.js.map} +1 -1
- package/dist/native-cli-adapters-CLONTZOA.js +8 -0
- package/dist/{native-cli-adapters-JMZX2C2C.js.map → native-cli-adapters-CLONTZOA.js.map} +1 -1
- package/dist/ollama-adapter-2N5OQIEV.js +5 -0
- package/dist/{ollama-adapter-GE67BNSS.js.map → ollama-adapter-2N5OQIEV.js.map} +1 -1
- package/dist/{pathResolver-A6IXQQFE.js → pathResolver-UVAB2FCW.js} +3 -3
- package/dist/{pathResolver-A6IXQQFE.js.map → pathResolver-UVAB2FCW.js.map} +1 -1
- package/dist/{profile-loader-TNAXBLDX.js → profile-loader-EMLV4J7S.js} +4 -4
- package/dist/profile-loader-EMLV4J7S.js.map +1 -0
- package/dist/registry-LRURZVUL.js +5 -0
- package/dist/{registry-3NHVCXCZ.js.map → registry-LRURZVUL.js.map} +1 -1
- package/dist/registry-MVNSXCEF.js +6 -0
- package/dist/{registry-7CQ3NCAD.js.map → registry-MVNSXCEF.js.map} +1 -1
- package/dist/server-manager-THGZBBZB.js +5 -0
- package/dist/{server-manager-DES23IBQ.js.map → server-manager-THGZBBZB.js.map} +1 -1
- package/dist/session-manager-X3DXT53M.js +12 -0
- package/dist/{session-manager-EHD7GWM2.js.map → session-manager-X3DXT53M.js.map} +1 -1
- package/dist/skills/built-in/code-review/SKILL.md +85 -85
- package/dist/skills/built-in/commit/SKILL.md +83 -83
- package/dist/skills/built-in/debug/SKILL.md +119 -119
- package/dist/skills/built-in/plan/SKILL.md +123 -123
- package/dist/skills/built-in/refactor/SKILL.md +132 -132
- package/dist/skills/built-in/test/SKILL.md +128 -128
- package/dist/sqlite-store-7OECRTXM.js +5 -0
- package/dist/{sqlite-store-7ZIVOUNI.js.map → sqlite-store-7OECRTXM.js.map} +1 -1
- package/dist/team-manager-2VSMALAA.js +11 -0
- package/dist/{team-manager-6DCNLGTC.js.map → team-manager-2VSMALAA.js.map} +1 -1
- package/dist/team-state-HZNVMQHT.js +3 -0
- package/dist/{team-state-R2D7DT5M.js.map → team-state-HZNVMQHT.js.map} +1 -1
- package/dist/tmux-manager-57QCUVHU.js +6 -0
- package/dist/{tmux-manager-WBKHUHDT.js.map → tmux-manager-57QCUVHU.js.map} +1 -1
- package/dist/tools-KWFSYT56.js +6 -0
- package/dist/{tools-I6XCTEZY.js.map → tools-KWFSYT56.js.map} +1 -1
- package/package.json +89 -93
- package/dist/App-YAHJUWCX.js.map +0 -1
- package/dist/api-key-fallback-UN3TJEOO.js +0 -11
- package/dist/auth-status-EIM5A5KL.js +0 -13
- package/dist/chunk-25UNNEHN.js +0 -140
- package/dist/chunk-25UNNEHN.js.map +0 -1
- package/dist/chunk-2GKOK6T7.js.map +0 -1
- package/dist/chunk-2LF7ALGR.js.map +0 -1
- package/dist/chunk-2NWNIKBK.js.map +0 -1
- package/dist/chunk-3TSPZRGM.js.map +0 -1
- package/dist/chunk-473JN6M5.js.map +0 -1
- package/dist/chunk-5XFSV6PF.js.map +0 -1
- package/dist/chunk-62HSGYQD.js.map +0 -1
- package/dist/chunk-6GUD7QIM.js.map +0 -1
- package/dist/chunk-AQ23TYSQ.js.map +0 -1
- package/dist/chunk-BY4DAKUU.js.map +0 -1
- package/dist/chunk-CC7MGWYY.js.map +0 -1
- package/dist/chunk-CTFZTARK.js +0 -155
- package/dist/chunk-CTFZTARK.js.map +0 -1
- package/dist/chunk-FIC7AK4Q.js.map +0 -1
- package/dist/chunk-GU33WKPG.js.map +0 -1
- package/dist/chunk-H2SYKIMI.js.map +0 -1
- package/dist/chunk-HEKFAKVH.js.map +0 -1
- package/dist/chunk-IARA5XYP.js.map +0 -1
- package/dist/chunk-LCYH4T6N.js.map +0 -1
- package/dist/chunk-LDVY5ELP.js.map +0 -1
- package/dist/chunk-OCJPQFOR.js.map +0 -1
- package/dist/chunk-ODBY7S4X.js +0 -141
- package/dist/chunk-ODBY7S4X.js.map +0 -1
- package/dist/chunk-ONQ4WCUI.js.map +0 -1
- package/dist/chunk-P5TKZM3T.js +0 -159
- package/dist/chunk-P5TKZM3T.js.map +0 -1
- package/dist/chunk-P66WDACW.js.map +0 -1
- package/dist/chunk-QCRK4QEL.js.map +0 -1
- package/dist/chunk-ROJPFPJ7.js.map +0 -1
- package/dist/chunk-RP2TAL3J.js.map +0 -1
- package/dist/chunk-RYOB3TLZ.js.map +0 -1
- package/dist/chunk-SOQFMNQC.js.map +0 -1
- package/dist/chunk-TDFTX32B.js.map +0 -1
- package/dist/chunk-VBLLDY4R.js.map +0 -1
- package/dist/chunk-VJNQJALF.js.map +0 -1
- package/dist/chunk-WAYSJMPS.js.map +0 -1
- package/dist/chunk-WC72BRHR.js.map +0 -1
- package/dist/chunk-YPFOE2QJ.js.map +0 -1
- package/dist/claude-adapter-6P4SJH7P.js +0 -7
- package/dist/claude-adapter-6P4SJH7P.js.map +0 -1
- package/dist/claude-login-IS5WTBMP.js.map +0 -1
- package/dist/codex-login-GMPF64MR.js.map +0 -1
- package/dist/config-store-POB6I37G.js +0 -7
- package/dist/conversation-store-PRBHWQMJ.js +0 -4
- package/dist/detect-providers-C4SVQHFF.js +0 -4
- package/dist/executor-RUX7VK3T.js +0 -4
- package/dist/first-run-GDEVRFPO.js.map +0 -1
- package/dist/gemini-adapter-MV3U4QFH.js +0 -7
- package/dist/gemini-adapter-MV3U4QFH.js.map +0 -1
- package/dist/gemini-login-KE224MSW.js.map +0 -1
- package/dist/input-history-MIOO3FIW.js.map +0 -1
- package/dist/kimi-adapter-UODMNX6K.js +0 -6
- package/dist/kimi-login-DNT5YBKX.js.map +0 -1
- package/dist/logger-PLPDWACQ.js +0 -3
- package/dist/model-discovery-O64ZWPX5.js +0 -6
- package/dist/native-cli-adapters-JMZX2C2C.js +0 -8
- package/dist/ollama-adapter-GE67BNSS.js +0 -5
- package/dist/openai-adapter-SHPLK77L.js +0 -7
- package/dist/openai-adapter-SHPLK77L.js.map +0 -1
- package/dist/profile-loader-TNAXBLDX.js.map +0 -1
- package/dist/registry-3NHVCXCZ.js +0 -6
- package/dist/registry-7CQ3NCAD.js +0 -5
- package/dist/server-manager-DES23IBQ.js +0 -5
- package/dist/session-manager-EHD7GWM2.js +0 -12
- package/dist/sqlite-store-7ZIVOUNI.js +0 -5
- package/dist/team-manager-6DCNLGTC.js +0 -11
- package/dist/team-state-R2D7DT5M.js +0 -3
- package/dist/tmux-manager-WBKHUHDT.js +0 -6
- package/dist/tools-I6XCTEZY.js +0 -6
|
@@ -1,128 +1,128 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: test
|
|
3
|
-
description: "Generate comprehensive test suites with unit, integration, and edge case coverage"
|
|
4
|
-
version: "1.0.0"
|
|
5
|
-
allowed-tools:
|
|
6
|
-
- read
|
|
7
|
-
- grep
|
|
8
|
-
- glob
|
|
9
|
-
- bash
|
|
10
|
-
triggers:
|
|
11
|
-
- "test"
|
|
12
|
-
- "$test"
|
|
13
|
-
model-requirements:
|
|
14
|
-
preferred-role: testing
|
|
15
|
-
min-context: 32000
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# Test Generation Skill
|
|
19
|
-
|
|
20
|
-
You are a test engineering specialist. Generate thorough, maintainable test suites that catch real bugs.
|
|
21
|
-
|
|
22
|
-
## Process
|
|
23
|
-
|
|
24
|
-
### Step 1 — Analyze the Target
|
|
25
|
-
|
|
26
|
-
1. Use `read` to examine the code under test completely.
|
|
27
|
-
2. Identify:
|
|
28
|
-
- Public API surface (exported functions, class methods, types).
|
|
29
|
-
- Input parameters and their types/constraints.
|
|
30
|
-
- Return values and side effects.
|
|
31
|
-
- Dependencies and external interactions (database, API, filesystem).
|
|
32
|
-
- Error paths and exception conditions.
|
|
33
|
-
3. Use `grep` to find existing tests for related modules to match patterns.
|
|
34
|
-
4. Use `glob` to locate the test configuration (vitest.config, jest.config, etc.).
|
|
35
|
-
|
|
36
|
-
### Step 2 — Determine Test Framework & Patterns
|
|
37
|
-
|
|
38
|
-
1. Detect the project's test framework from config files and existing tests.
|
|
39
|
-
2. Match the existing test style:
|
|
40
|
-
- `describe`/`it` vs `test` blocks
|
|
41
|
-
- Assertion style (`expect(...).toBe(...)` vs `assert.*`)
|
|
42
|
-
- Mock patterns (`vi.mock`, `jest.mock`, manual stubs)
|
|
43
|
-
- File naming convention (`.test.ts`, `.spec.ts`, `__tests__/`)
|
|
44
|
-
3. Identify the test runner command (e.g., `vitest run`, `jest`, `npm test`).
|
|
45
|
-
|
|
46
|
-
### Step 3 — Design Test Cases
|
|
47
|
-
|
|
48
|
-
Organize tests into categories:
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
describe('FunctionName', () => {
|
|
52
|
-
// Happy path — normal expected usage
|
|
53
|
-
describe('when given valid input', () => {
|
|
54
|
-
it('should return expected output', ...);
|
|
55
|
-
it('should handle typical use case', ...);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
// Edge cases — boundary conditions
|
|
59
|
-
describe('edge cases', () => {
|
|
60
|
-
it('should handle empty input', ...);
|
|
61
|
-
it('should handle maximum values', ...);
|
|
62
|
-
it('should handle null/undefined', ...);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
// Error cases — expected failure modes
|
|
66
|
-
describe('error handling', () => {
|
|
67
|
-
it('should throw on invalid input', ...);
|
|
68
|
-
it('should handle network failure', ...);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
// Integration — interactions with dependencies
|
|
72
|
-
describe('integration', () => {
|
|
73
|
-
it('should call dependency correctly', ...);
|
|
74
|
-
it('should handle dependency failure', ...);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### Step 4 — Write Tests
|
|
80
|
-
|
|
81
|
-
For each test case:
|
|
82
|
-
|
|
83
|
-
1. Follow Arrange-Act-Assert (AAA) pattern.
|
|
84
|
-
2. Use descriptive test names that read like sentences.
|
|
85
|
-
3. Keep each test focused on a single behavior.
|
|
86
|
-
4. Mock external dependencies, not internal implementation.
|
|
87
|
-
5. Use realistic test data, not placeholder values.
|
|
88
|
-
6. Type test data correctly (no `as any` casting).
|
|
89
|
-
|
|
90
|
-
### Step 5 — Verify Tests
|
|
91
|
-
|
|
92
|
-
1. Run the generated tests with `bash` to confirm they pass.
|
|
93
|
-
2. If any test fails:
|
|
94
|
-
- Determine if it's a test bug or a code bug.
|
|
95
|
-
- Fix test bugs immediately.
|
|
96
|
-
- Report code bugs as findings.
|
|
97
|
-
3. Run with coverage if available to identify untested paths.
|
|
98
|
-
|
|
99
|
-
## Output Format
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
// file: tests/module-name.test.ts
|
|
103
|
-
|
|
104
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
105
|
-
import { TargetFunction } from '../src/module-name.js';
|
|
106
|
-
|
|
107
|
-
describe('TargetFunction', () => {
|
|
108
|
-
// ... organized test cases
|
|
109
|
-
});
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## Coverage Guidelines
|
|
113
|
-
|
|
114
|
-
| Code Type | Target Coverage | Focus |
|
|
115
|
-
|-----------|----------------|-------|
|
|
116
|
-
| Pure functions | 95%+ | All input combinations |
|
|
117
|
-
| Class methods | 85%+ | Public API, state transitions |
|
|
118
|
-
| Error handlers | 80%+ | Every catch block, every error type |
|
|
119
|
-
| Integration | 70%+ | Happy path + primary failure modes |
|
|
120
|
-
|
|
121
|
-
## Rules
|
|
122
|
-
|
|
123
|
-
- Never write tests that test implementation details (private methods, internal state).
|
|
124
|
-
- Never write tests that are coupled to the mock setup rather than the behavior.
|
|
125
|
-
- Use `beforeEach` for shared setup, not copy-pasted initialization.
|
|
126
|
-
- Prefer `toEqual` for object comparison, `toBe` for primitives.
|
|
127
|
-
- Each test file should be independently runnable.
|
|
128
|
-
- If the code is untestable, suggest refactoring to improve testability.
|
|
1
|
+
---
|
|
2
|
+
name: test
|
|
3
|
+
description: "Generate comprehensive test suites with unit, integration, and edge case coverage"
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- read
|
|
7
|
+
- grep
|
|
8
|
+
- glob
|
|
9
|
+
- bash
|
|
10
|
+
triggers:
|
|
11
|
+
- "test"
|
|
12
|
+
- "$test"
|
|
13
|
+
model-requirements:
|
|
14
|
+
preferred-role: testing
|
|
15
|
+
min-context: 32000
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
# Test Generation Skill
|
|
19
|
+
|
|
20
|
+
You are a test engineering specialist. Generate thorough, maintainable test suites that catch real bugs.
|
|
21
|
+
|
|
22
|
+
## Process
|
|
23
|
+
|
|
24
|
+
### Step 1 — Analyze the Target
|
|
25
|
+
|
|
26
|
+
1. Use `read` to examine the code under test completely.
|
|
27
|
+
2. Identify:
|
|
28
|
+
- Public API surface (exported functions, class methods, types).
|
|
29
|
+
- Input parameters and their types/constraints.
|
|
30
|
+
- Return values and side effects.
|
|
31
|
+
- Dependencies and external interactions (database, API, filesystem).
|
|
32
|
+
- Error paths and exception conditions.
|
|
33
|
+
3. Use `grep` to find existing tests for related modules to match patterns.
|
|
34
|
+
4. Use `glob` to locate the test configuration (vitest.config, jest.config, etc.).
|
|
35
|
+
|
|
36
|
+
### Step 2 — Determine Test Framework & Patterns
|
|
37
|
+
|
|
38
|
+
1. Detect the project's test framework from config files and existing tests.
|
|
39
|
+
2. Match the existing test style:
|
|
40
|
+
- `describe`/`it` vs `test` blocks
|
|
41
|
+
- Assertion style (`expect(...).toBe(...)` vs `assert.*`)
|
|
42
|
+
- Mock patterns (`vi.mock`, `jest.mock`, manual stubs)
|
|
43
|
+
- File naming convention (`.test.ts`, `.spec.ts`, `__tests__/`)
|
|
44
|
+
3. Identify the test runner command (e.g., `vitest run`, `jest`, `npm test`).
|
|
45
|
+
|
|
46
|
+
### Step 3 — Design Test Cases
|
|
47
|
+
|
|
48
|
+
Organize tests into categories:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
describe('FunctionName', () => {
|
|
52
|
+
// Happy path — normal expected usage
|
|
53
|
+
describe('when given valid input', () => {
|
|
54
|
+
it('should return expected output', ...);
|
|
55
|
+
it('should handle typical use case', ...);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
// Edge cases — boundary conditions
|
|
59
|
+
describe('edge cases', () => {
|
|
60
|
+
it('should handle empty input', ...);
|
|
61
|
+
it('should handle maximum values', ...);
|
|
62
|
+
it('should handle null/undefined', ...);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// Error cases — expected failure modes
|
|
66
|
+
describe('error handling', () => {
|
|
67
|
+
it('should throw on invalid input', ...);
|
|
68
|
+
it('should handle network failure', ...);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
// Integration — interactions with dependencies
|
|
72
|
+
describe('integration', () => {
|
|
73
|
+
it('should call dependency correctly', ...);
|
|
74
|
+
it('should handle dependency failure', ...);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Step 4 — Write Tests
|
|
80
|
+
|
|
81
|
+
For each test case:
|
|
82
|
+
|
|
83
|
+
1. Follow Arrange-Act-Assert (AAA) pattern.
|
|
84
|
+
2. Use descriptive test names that read like sentences.
|
|
85
|
+
3. Keep each test focused on a single behavior.
|
|
86
|
+
4. Mock external dependencies, not internal implementation.
|
|
87
|
+
5. Use realistic test data, not placeholder values.
|
|
88
|
+
6. Type test data correctly (no `as any` casting).
|
|
89
|
+
|
|
90
|
+
### Step 5 — Verify Tests
|
|
91
|
+
|
|
92
|
+
1. Run the generated tests with `bash` to confirm they pass.
|
|
93
|
+
2. If any test fails:
|
|
94
|
+
- Determine if it's a test bug or a code bug.
|
|
95
|
+
- Fix test bugs immediately.
|
|
96
|
+
- Report code bugs as findings.
|
|
97
|
+
3. Run with coverage if available to identify untested paths.
|
|
98
|
+
|
|
99
|
+
## Output Format
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
// file: tests/module-name.test.ts
|
|
103
|
+
|
|
104
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
105
|
+
import { TargetFunction } from '../src/module-name.js';
|
|
106
|
+
|
|
107
|
+
describe('TargetFunction', () => {
|
|
108
|
+
// ... organized test cases
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Coverage Guidelines
|
|
113
|
+
|
|
114
|
+
| Code Type | Target Coverage | Focus |
|
|
115
|
+
|-----------|----------------|-------|
|
|
116
|
+
| Pure functions | 95%+ | All input combinations |
|
|
117
|
+
| Class methods | 85%+ | Public API, state transitions |
|
|
118
|
+
| Error handlers | 80%+ | Every catch block, every error type |
|
|
119
|
+
| Integration | 70%+ | Happy path + primary failure modes |
|
|
120
|
+
|
|
121
|
+
## Rules
|
|
122
|
+
|
|
123
|
+
- Never write tests that test implementation details (private methods, internal state).
|
|
124
|
+
- Never write tests that are coupled to the mock setup rather than the behavior.
|
|
125
|
+
- Use `beforeEach` for shared setup, not copy-pasted initialization.
|
|
126
|
+
- Prefer `toEqual` for object comparison, `toBe` for primitives.
|
|
127
|
+
- Each test file should be independently runnable.
|
|
128
|
+
- If the code is untestable, suggest refactoring to improve testability.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"sqlite-store-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"sqlite-store-7OECRTXM.js"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { TeamManager } from './chunk-QK7TKNHV.js';
|
|
2
|
+
import './chunk-YL5XFHR3.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=team-manager-2VSMALAA.js.map
|
|
11
|
+
//# sourceMappingURL=team-manager-2VSMALAA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"team-manager-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"team-manager-2VSMALAA.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"team-state-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"team-state-HZNVMQHT.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"tmux-manager-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"tmux-manager-57QCUVHU.js"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ToolRegistry, createBashTool, createDefaultRegistry, createEditTool, createGitTool, createGlobTool, createGrepTool, createReadTool, createWebFetchTool, createWebSearchTool, createWriteTool, setWebSearchProvider } from './chunk-FFS4T7BZ.js';
|
|
2
|
+
import './chunk-OPWAFS6Y.js';
|
|
3
|
+
import './chunk-ZGOHARPV.js';
|
|
4
|
+
import './chunk-IR5HLBMH.js';
|
|
5
|
+
//# sourceMappingURL=tools-KWFSYT56.js.map
|
|
6
|
+
//# sourceMappingURL=tools-KWFSYT56.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"tools-
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"tools-KWFSYT56.js"}
|
package/package.json
CHANGED
|
@@ -1,93 +1,89 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "aemeathcli",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Next-generation multi-model CLI coding tool with agent teams and split-panel coordination",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"aemeathcli": "./dist/cli.js",
|
|
8
|
-
"ac": "./dist/cli.js"
|
|
9
|
-
},
|
|
10
|
-
"main": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"exports": {
|
|
13
|
-
".": {
|
|
14
|
-
"import": "./dist/index.js",
|
|
15
|
-
"types": "./dist/index.d.ts"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
"engines": {
|
|
19
|
-
"node": ">=20.0.0"
|
|
20
|
-
},
|
|
21
|
-
"scripts": {
|
|
22
|
-
"build": "tsup && node ./scripts/copy-agent-store.mjs",
|
|
23
|
-
"dev": "tsup --watch",
|
|
24
|
-
"typecheck": "tsc --noEmit",
|
|
25
|
-
"lint": "eslint src/",
|
|
26
|
-
"lint:fix": "eslint src/ --fix",
|
|
27
|
-
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
28
|
-
"format:check": "prettier --check \"src/**/*.{ts,tsx}\"",
|
|
29
|
-
"test": "vitest run",
|
|
30
|
-
"test:watch": "vitest",
|
|
31
|
-
"test:coverage": "vitest run --coverage",
|
|
32
|
-
"clean": "node ./scripts/clean.mjs",
|
|
33
|
-
"prepublishOnly": "npm run clean && npm run typecheck && npm run lint && npm run test && npm run build"
|
|
34
|
-
},
|
|
35
|
-
"keywords": [
|
|
36
|
-
"cli",
|
|
37
|
-
"ai",
|
|
38
|
-
"multi-model",
|
|
39
|
-
"claude",
|
|
40
|
-
"openai",
|
|
41
|
-
"gemini",
|
|
42
|
-
"coding",
|
|
43
|
-
"agent",
|
|
44
|
-
"terminal"
|
|
45
|
-
],
|
|
46
|
-
"author": "AemeathCLI Team",
|
|
47
|
-
"license": "MIT",
|
|
48
|
-
"dependencies": {
|
|
49
|
-
"@
|
|
50
|
-
"@
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
"@
|
|
72
|
-
"@
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
"
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
"README.md",
|
|
91
|
-
"LICENSE"
|
|
92
|
-
]
|
|
93
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "aemeathcli",
|
|
3
|
+
"version": "1.0.12",
|
|
4
|
+
"description": "Next-generation multi-model CLI coding tool with agent teams and split-panel coordination",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"aemeathcli": "./dist/cli.js",
|
|
8
|
+
"ac": "./dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"engines": {
|
|
19
|
+
"node": ">=20.0.0"
|
|
20
|
+
},
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsup && node ./scripts/copy-agent-store.mjs",
|
|
23
|
+
"dev": "tsup --watch",
|
|
24
|
+
"typecheck": "tsc --noEmit",
|
|
25
|
+
"lint": "eslint src/",
|
|
26
|
+
"lint:fix": "eslint src/ --fix",
|
|
27
|
+
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
28
|
+
"format:check": "prettier --check \"src/**/*.{ts,tsx}\"",
|
|
29
|
+
"test": "vitest run",
|
|
30
|
+
"test:watch": "vitest",
|
|
31
|
+
"test:coverage": "vitest run --coverage",
|
|
32
|
+
"clean": "node ./scripts/clean.mjs",
|
|
33
|
+
"prepublishOnly": "npm run clean && npm run typecheck && npm run lint && npm run test && npm run build"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"cli",
|
|
37
|
+
"ai",
|
|
38
|
+
"multi-model",
|
|
39
|
+
"claude",
|
|
40
|
+
"openai",
|
|
41
|
+
"gemini",
|
|
42
|
+
"coding",
|
|
43
|
+
"agent",
|
|
44
|
+
"terminal"
|
|
45
|
+
],
|
|
46
|
+
"author": "AemeathCLI Team",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@inquirer/prompts": "^7.0.0",
|
|
50
|
+
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
51
|
+
"better-sqlite3": "^11.0.0",
|
|
52
|
+
"commander": "^13.0.0",
|
|
53
|
+
"execa": "^9.0.0",
|
|
54
|
+
"fast-glob": "^3.3.0",
|
|
55
|
+
"ink": "^5.0.0",
|
|
56
|
+
"ink-spinner": "^5.0.0",
|
|
57
|
+
"node-pty": "^1.1.0",
|
|
58
|
+
"open": "^10.0.0",
|
|
59
|
+
"picocolors": "^1.1.0",
|
|
60
|
+
"pino": "^9.0.0",
|
|
61
|
+
"react": "^18.3.0",
|
|
62
|
+
"update-notifier": "^7.0.0",
|
|
63
|
+
"yaml": "^2.4.0",
|
|
64
|
+
"zod": "^3.25.76"
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@testing-library/react": "^15.0.0",
|
|
68
|
+
"@types/better-sqlite3": "^7.6.0",
|
|
69
|
+
"@types/node": "^22.0.0",
|
|
70
|
+
"@types/react": "^18.3.0",
|
|
71
|
+
"@types/update-notifier": "^6.0.0",
|
|
72
|
+
"@vitest/coverage-v8": "^3.0.0",
|
|
73
|
+
"eslint": "^9.0.0",
|
|
74
|
+
"ink-testing-library": "^4.0.0",
|
|
75
|
+
"prettier": "^3.4.0",
|
|
76
|
+
"tsup": "^8.0.0",
|
|
77
|
+
"typescript": "^5.7.0",
|
|
78
|
+
"typescript-eslint": "^8.0.0",
|
|
79
|
+
"vitest": "^3.0.0"
|
|
80
|
+
},
|
|
81
|
+
"optionalDependencies": {
|
|
82
|
+
"keytar": "^7.9.0"
|
|
83
|
+
},
|
|
84
|
+
"files": [
|
|
85
|
+
"dist",
|
|
86
|
+
"README.md",
|
|
87
|
+
"LICENSE"
|
|
88
|
+
]
|
|
89
|
+
}
|