@howlil/ez-agents 3.1.0 → 3.4.2
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 +288 -718
- package/bin/install.js +438 -71
- package/commands/ez/auth.md +87 -0
- package/commands/ez/join-discord.md +18 -18
- package/ez-agents/bin/ez-tools.cjs +120 -2
- package/ez-agents/bin/lib/assistant-adapter.cjs +264 -205
- package/ez-agents/bin/lib/audit-exec.cjs +26 -9
- package/ez-agents/bin/lib/auth.cjs +2 -1
- package/ez-agents/bin/lib/circuit-breaker.cjs +118 -118
- package/ez-agents/bin/lib/commands.cjs +42 -23
- package/ez-agents/bin/lib/config.cjs +190 -183
- package/ez-agents/bin/lib/core.cjs +42 -25
- package/ez-agents/bin/lib/file-lock.cjs +236 -236
- package/ez-agents/bin/lib/frontmatter.cjs +299 -299
- package/ez-agents/bin/lib/fs-utils.cjs +153 -153
- package/ez-agents/bin/lib/git-utils.cjs +203 -203
- package/ez-agents/bin/lib/health-check.cjs +2 -3
- package/ez-agents/bin/lib/index.cjs +113 -113
- package/ez-agents/bin/lib/init.cjs +757 -710
- package/ez-agents/bin/lib/logger.cjs +52 -15
- package/ez-agents/bin/lib/milestone.cjs +241 -241
- package/ez-agents/bin/lib/model-provider.cjs +241 -146
- package/ez-agents/bin/lib/phase.cjs +925 -908
- package/ez-agents/bin/lib/planning-write.cjs +107 -0
- package/ez-agents/bin/lib/retry.cjs +119 -119
- package/ez-agents/bin/lib/roadmap.cjs +306 -305
- package/ez-agents/bin/lib/safe-exec.cjs +91 -5
- package/ez-agents/bin/lib/safe-path.cjs +130 -130
- package/ez-agents/bin/lib/state.cjs +736 -721
- package/ez-agents/bin/lib/temp-file.cjs +239 -239
- package/ez-agents/bin/lib/template.cjs +223 -222
- package/ez-agents/bin/lib/test-file-lock.cjs +112 -112
- package/ez-agents/bin/lib/test-graceful.cjs +93 -93
- package/ez-agents/bin/lib/test-logger.cjs +60 -60
- package/ez-agents/bin/lib/test-safe-exec.cjs +38 -38
- package/ez-agents/bin/lib/test-safe-path.cjs +33 -33
- package/ez-agents/bin/lib/test-temp-file.cjs +125 -125
- package/ez-agents/bin/lib/timeout-exec.cjs +63 -62
- package/ez-agents/bin/lib/verify.cjs +69 -26
- package/ez-agents/references/checkpoints.md +776 -776
- package/ez-agents/references/continuation-format.md +249 -249
- package/ez-agents/references/questioning.md +162 -162
- package/ez-agents/references/tdd.md +263 -263
- package/ez-agents/templates/codebase/concerns.md +310 -310
- package/ez-agents/templates/codebase/conventions.md +307 -307
- package/ez-agents/templates/codebase/integrations.md +280 -280
- package/ez-agents/templates/codebase/stack.md +186 -186
- package/ez-agents/templates/codebase/testing.md +480 -480
- package/ez-agents/templates/config.json +37 -37
- package/ez-agents/templates/continue-here.md +78 -78
- package/ez-agents/templates/milestone-archive.md +123 -123
- package/ez-agents/templates/milestone.md +115 -115
- package/ez-agents/templates/requirements.md +231 -231
- package/ez-agents/templates/research-project/ARCHITECTURE.md +204 -204
- package/ez-agents/templates/research-project/FEATURES.md +147 -147
- package/ez-agents/templates/research-project/PITFALLS.md +200 -200
- package/ez-agents/templates/research-project/STACK.md +120 -120
- package/ez-agents/templates/research-project/SUMMARY.md +170 -170
- package/ez-agents/templates/retrospective.md +54 -54
- package/ez-agents/templates/roadmap.md +202 -202
- package/ez-agents/templates/summary-minimal.md +41 -41
- package/ez-agents/templates/summary-standard.md +48 -48
- package/ez-agents/templates/summary.md +248 -248
- package/ez-agents/templates/user-setup.md +311 -311
- package/ez-agents/templates/verification-report.md +322 -322
- package/ez-agents/workflows/add-phase.md +112 -112
- package/ez-agents/workflows/add-tests.md +351 -351
- package/ez-agents/workflows/add-todo.md +158 -158
- package/ez-agents/workflows/audit-milestone.md +332 -332
- package/ez-agents/workflows/autonomous.md +743 -743
- package/ez-agents/workflows/check-todos.md +177 -177
- package/ez-agents/workflows/cleanup.md +152 -152
- package/ez-agents/workflows/complete-milestone.md +766 -766
- package/ez-agents/workflows/diagnose-issues.md +219 -219
- package/ez-agents/workflows/discovery-phase.md +289 -289
- package/ez-agents/workflows/discuss-phase.md +762 -762
- package/ez-agents/workflows/execute-phase.md +468 -468
- package/ez-agents/workflows/execute-plan.md +483 -483
- package/ez-agents/workflows/health.md +159 -159
- package/ez-agents/workflows/help.md +492 -492
- package/ez-agents/workflows/insert-phase.md +130 -130
- package/ez-agents/workflows/list-phase-assumptions.md +178 -178
- package/ez-agents/workflows/map-codebase.md +316 -316
- package/ez-agents/workflows/new-milestone.md +384 -384
- package/ez-agents/workflows/new-project.md +1113 -1111
- package/ez-agents/workflows/node-repair.md +92 -92
- package/ez-agents/workflows/pause-work.md +122 -122
- package/ez-agents/workflows/plan-milestone-gaps.md +274 -274
- package/ez-agents/workflows/plan-phase.md +651 -651
- package/ez-agents/workflows/progress.md +382 -382
- package/ez-agents/workflows/quick.md +610 -610
- package/ez-agents/workflows/remove-phase.md +155 -155
- package/ez-agents/workflows/research-phase.md +74 -74
- package/ez-agents/workflows/resume-project.md +307 -307
- package/ez-agents/workflows/set-profile.md +81 -81
- package/ez-agents/workflows/settings.md +242 -242
- package/ez-agents/workflows/stats.md +57 -57
- package/ez-agents/workflows/transition.md +544 -544
- package/ez-agents/workflows/ui-phase.md +290 -290
- package/ez-agents/workflows/ui-review.md +157 -157
- package/ez-agents/workflows/update.md +320 -320
- package/ez-agents/workflows/validate-phase.md +167 -167
- package/ez-agents/workflows/verify-phase.md +243 -243
- package/ez-agents/workflows/verify-work.md +584 -584
- package/package.json +2 -3
- package/scripts/build-hooks.js +43 -43
- package/scripts/fix-qwen-installation.js +144 -0
- package/scripts/run-tests.cjs +29 -29
- package/README.zh-CN.md +0 -702
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ez:auth
|
|
3
|
+
description: Manage API credentials securely (save, list, delete)
|
|
4
|
+
argument-hint: "<save|list|delete|test> [provider] [secret]"
|
|
5
|
+
agent: ez-helper
|
|
6
|
+
allowed-tools:
|
|
7
|
+
- Read
|
|
8
|
+
- Bash
|
|
9
|
+
---
|
|
10
|
+
<objective>
|
|
11
|
+
Manage API credentials securely using system keychain or fallback file storage
|
|
12
|
+
|
|
13
|
+
**Subcommands:**
|
|
14
|
+
- `ez:auth save <provider> <secret>` — Save credential for provider
|
|
15
|
+
- `ez:auth list` — List all stored providers
|
|
16
|
+
- `ez:auth delete <provider>` — Delete credential for provider
|
|
17
|
+
- `ez:auth test` — Test credential system and show keychain status
|
|
18
|
+
|
|
19
|
+
**Providers:** anthropic, moonshot, alibaba, qwen, openai
|
|
20
|
+
</objective>
|
|
21
|
+
|
|
22
|
+
<execution_context>
|
|
23
|
+
@~/.claude/ez-agents/workflows/ez-helper.md
|
|
24
|
+
</execution_context>
|
|
25
|
+
|
|
26
|
+
<context>
|
|
27
|
+
@.planning/PROJECT.md
|
|
28
|
+
@.planning/STATE.md
|
|
29
|
+
|
|
30
|
+
# Credential storage module:
|
|
31
|
+
@ez-agents/bin/lib/auth.cjs
|
|
32
|
+
|
|
33
|
+
# EZ tools CLI:
|
|
34
|
+
@ez-agents/bin/ez-tools.cjs
|
|
35
|
+
</context>
|
|
36
|
+
|
|
37
|
+
<process>
|
|
38
|
+
## Subcommand Routing
|
|
39
|
+
|
|
40
|
+
1. **Parse arguments** — First arg is subcommand (save/list/delete/test), remaining are parameters
|
|
41
|
+
2. **Route to handler** — Call appropriate auth function from ez-tools.cjs
|
|
42
|
+
3. **Output result** — Show success/failure with user-friendly messages
|
|
43
|
+
|
|
44
|
+
## Handlers
|
|
45
|
+
|
|
46
|
+
### save <provider> <secret>
|
|
47
|
+
1. Validate provider name against known providers
|
|
48
|
+
2. Call saveCredential(provider, secret)
|
|
49
|
+
3. Output: "✓ Credential saved for {provider}" or error message
|
|
50
|
+
|
|
51
|
+
### list
|
|
52
|
+
1. Call listProviders()
|
|
53
|
+
2. Check isKeychainAvailable()
|
|
54
|
+
3. Output table:
|
|
55
|
+
```
|
|
56
|
+
Provider Storage
|
|
57
|
+
─────────────────────────
|
|
58
|
+
anthropic Keychain ✓
|
|
59
|
+
qwen File (fallback)
|
|
60
|
+
```
|
|
61
|
+
4. If using file storage, show warning: "⚠ Using file storage — consider installing keytar for better security"
|
|
62
|
+
|
|
63
|
+
### delete <provider>
|
|
64
|
+
1. Validate provider exists
|
|
65
|
+
2. Confirm deletion (ask user or require --force)
|
|
66
|
+
3. Call deleteCredential(provider)
|
|
67
|
+
4. Output: "✓ Credential deleted for {provider}"
|
|
68
|
+
|
|
69
|
+
### test
|
|
70
|
+
1. Check isKeychainAvailable()
|
|
71
|
+
2. Output:
|
|
72
|
+
```
|
|
73
|
+
Credential System Test
|
|
74
|
+
|
|
75
|
+
Keychain (keytar): {Available | Unavailable}
|
|
76
|
+
Storage mode: {System keychain | Fallback file}
|
|
77
|
+
|
|
78
|
+
Stored providers: {count}
|
|
79
|
+
```
|
|
80
|
+
3. If keytar unavailable, show install hint: "npm install keytar"
|
|
81
|
+
|
|
82
|
+
## Error Handling
|
|
83
|
+
|
|
84
|
+
- **Invalid provider:** "Unknown provider '{name}'. Valid: anthropic, moonshot, alibaba, qwen, openai"
|
|
85
|
+
- **Credential not found:** "No credential found for {provider}. Use 'save' to add one."
|
|
86
|
+
- **Keychain error:** "Failed to access keychain: {error}. Using fallback storage."
|
|
87
|
+
</process>
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ez:join-discord
|
|
3
|
-
description: Join the EZ Agents Discord community
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
<objective>
|
|
7
|
-
Display the Discord invite link for the EZ Agents community server.
|
|
8
|
-
</objective>
|
|
9
|
-
|
|
10
|
-
<output>
|
|
11
|
-
# Join the EZ Agents Discord
|
|
12
|
-
|
|
13
|
-
Connect with other EZ Agents users, get help, share what you're building, and stay updated.
|
|
14
|
-
|
|
15
|
-
**Invite link:** https://discord.gg/
|
|
16
|
-
|
|
17
|
-
Click the link or paste it into your browser to join.
|
|
18
|
-
</output>
|
|
1
|
+
---
|
|
2
|
+
name: ez:join-discord
|
|
3
|
+
description: Join the EZ Agents Discord community
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<objective>
|
|
7
|
+
Display the Discord invite link for the EZ Agents community server.
|
|
8
|
+
</objective>
|
|
9
|
+
|
|
10
|
+
<output>
|
|
11
|
+
# Join the EZ Agents Discord
|
|
12
|
+
|
|
13
|
+
Connect with other EZ Agents users, get help, share what you're building, and stay updated.
|
|
14
|
+
|
|
15
|
+
**Invite link:** https://discord.gg/ez-agents
|
|
16
|
+
|
|
17
|
+
Click the link or paste it into your browser to join.
|
|
18
|
+
</output>
|
|
@@ -139,6 +139,8 @@ const milestone = require('./lib/milestone.cjs');
|
|
|
139
139
|
const commands = require('./lib/commands.cjs');
|
|
140
140
|
const init = require('./lib/init.cjs');
|
|
141
141
|
const frontmatter = require('./lib/frontmatter.cjs');
|
|
142
|
+
const HealthCheck = require('./lib/health-check.cjs');
|
|
143
|
+
const auth = require('./lib/auth.cjs');
|
|
142
144
|
|
|
143
145
|
// ─── CLI Router ───────────────────────────────────────────────────────────────
|
|
144
146
|
|
|
@@ -172,7 +174,7 @@ async function main() {
|
|
|
172
174
|
const command = args[0];
|
|
173
175
|
|
|
174
176
|
if (!command) {
|
|
175
|
-
error('Usage: ez-tools <command> [args] [--raw] [--cwd <path>]\nCommands: state, resolve-model, find-phase, commit, verify-summary, verify, frontmatter, template, generate-slug, current-timestamp, list-todos, verify-path-exists, config-ensure-section, init');
|
|
177
|
+
error('Usage: ez-tools <command> [args] [--raw] [--cwd <path>]\nCommands: state, resolve-model, find-phase, commit, verify-summary, verify, frontmatter, template, generate-slug, current-timestamp, list-todos, verify-path-exists, config-ensure-section, init, health');
|
|
176
178
|
}
|
|
177
179
|
|
|
178
180
|
switch (command) {
|
|
@@ -247,6 +249,122 @@ async function main() {
|
|
|
247
249
|
break;
|
|
248
250
|
}
|
|
249
251
|
|
|
252
|
+
case 'health': {
|
|
253
|
+
const health = new HealthCheck();
|
|
254
|
+
const result = health.runAll();
|
|
255
|
+
console.log(JSON.stringify(result, null, 2));
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
case 'auth': {
|
|
260
|
+
const subcommand = args[1];
|
|
261
|
+
if (!subcommand) {
|
|
262
|
+
error('Usage: ez-tools auth <save|list|delete|test> [provider] [secret]\nSubcommands: save, list, delete, test');
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
switch (subcommand) {
|
|
266
|
+
case 'save': {
|
|
267
|
+
const provider = args[2];
|
|
268
|
+
const secret = args[3];
|
|
269
|
+
if (!provider || !secret) {
|
|
270
|
+
error('Usage: ez-tools auth save <provider> <secret>');
|
|
271
|
+
}
|
|
272
|
+
const success = await auth.saveCredential(provider, secret);
|
|
273
|
+
if (success) {
|
|
274
|
+
console.log(`✓ Credential saved for ${provider}`);
|
|
275
|
+
} else {
|
|
276
|
+
console.error('Failed to save credential');
|
|
277
|
+
process.exit(1);
|
|
278
|
+
}
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
case 'list': {
|
|
283
|
+
const providers = await auth.listProviders();
|
|
284
|
+
const usingKeychain = auth.isKeychainAvailable();
|
|
285
|
+
|
|
286
|
+
console.log('');
|
|
287
|
+
console.log('Provider Storage');
|
|
288
|
+
console.log('─────────────────────────');
|
|
289
|
+
if (providers.length === 0) {
|
|
290
|
+
console.log('No credentials stored');
|
|
291
|
+
} else {
|
|
292
|
+
for (const p of providers) {
|
|
293
|
+
const storage = usingKeychain ? 'Keychain ✓' : 'File (fallback)';
|
|
294
|
+
console.log(`${p.padEnd(14)} ${storage}`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
if (!usingKeychain) {
|
|
298
|
+
console.log('');
|
|
299
|
+
console.log('⚠ Using file storage — consider installing keytar for better security');
|
|
300
|
+
}
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
case 'delete': {
|
|
305
|
+
const provider = args[2];
|
|
306
|
+
const force = args.includes('--force');
|
|
307
|
+
if (!provider) {
|
|
308
|
+
error('Usage: ez-tools auth delete <provider> [--force]');
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
if (!force) {
|
|
312
|
+
const readline = require('readline');
|
|
313
|
+
const rl = readline.createInterface({
|
|
314
|
+
input: process.stdin,
|
|
315
|
+
output: process.stdout
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
const answer = await new Promise(resolve => {
|
|
319
|
+
rl.question(`Delete credential for ${provider}? [y/N] `, resolve);
|
|
320
|
+
rl.close();
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
if (answer.toLowerCase() !== 'y') {
|
|
324
|
+
console.log('Delete cancelled');
|
|
325
|
+
break;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
const success = await auth.deleteCredential(provider);
|
|
330
|
+
if (success) {
|
|
331
|
+
console.log(`✓ Credential deleted for ${provider}`);
|
|
332
|
+
} else {
|
|
333
|
+
console.error(`No credential found for ${provider}`);
|
|
334
|
+
process.exit(1);
|
|
335
|
+
}
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
case 'test': {
|
|
340
|
+
const usingKeychain = auth.isKeychainAvailable();
|
|
341
|
+
const providers = await auth.listProviders();
|
|
342
|
+
|
|
343
|
+
console.log('');
|
|
344
|
+
console.log('Credential System Test');
|
|
345
|
+
console.log('══════════════════════');
|
|
346
|
+
console.log(`Keychain (keytar): ${usingKeychain ? 'Available ✓' : 'Unavailable'}`);
|
|
347
|
+
console.log(`Storage mode: ${usingKeychain ? 'System keychain' : 'Fallback file'}`);
|
|
348
|
+
console.log('');
|
|
349
|
+
console.log(`Stored providers: ${providers.length}`);
|
|
350
|
+
if (providers.length > 0) {
|
|
351
|
+
console.log(` ${providers.join(', ')}`);
|
|
352
|
+
}
|
|
353
|
+
if (!usingKeychain) {
|
|
354
|
+
console.log('');
|
|
355
|
+
console.log('Tip: Install keytar for better security:');
|
|
356
|
+
console.log(' npm install keytar');
|
|
357
|
+
}
|
|
358
|
+
break;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
default: {
|
|
362
|
+
error('Unknown auth subcommand: ' + subcommand + '\nValid: save, list, delete, test');
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
|
|
250
368
|
case 'resolve-model': {
|
|
251
369
|
commands.cmdResolveModel(cwd, args[1], raw);
|
|
252
370
|
break;
|
|
@@ -526,7 +644,7 @@ async function main() {
|
|
|
526
644
|
init.cmdInitPlanPhase(cwd, args[2], raw);
|
|
527
645
|
break;
|
|
528
646
|
case 'new-project':
|
|
529
|
-
init.cmdInitNewProject(cwd, raw);
|
|
647
|
+
await init.cmdInitNewProject(cwd, raw);
|
|
530
648
|
break;
|
|
531
649
|
case 'new-milestone':
|
|
532
650
|
init.cmdInitNewMilestone(cwd, raw);
|