agent-termo 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/backend-architecture-designer.md +1250 -0
- package/.claude/agents/backend-expert.md +1731 -0
- package/.claude/agents/deployment-expert.md +1126 -0
- package/.claude/agents/dev-environment-initiator.md +788 -0
- package/.claude/agents/frontend-expert.md +1343 -0
- package/.claude/agents/frontend-planner.md +1044 -0
- package/.claude/agents/git-manager.md +811 -0
- package/.claude/agents/project-manager.md +843 -0
- package/.claude/agents/security-expert.md +835 -0
- package/.claude/agents/tech-stack-expert.md +1357 -0
- package/.claude/agents/test-agent.md +1372 -0
- package/.claude/agents/uiux-designer.md +955 -0
- package/.claude/commands/build.md +5 -0
- package/.claude/commands/deploy.md +3 -0
- package/.claude/commands/feature.md +3 -0
- package/.claude/commands/fix.md +3 -0
- package/.claude/skills/pdf-reader/.skillfish.json +10 -0
- package/.claude/skills/pdf-reader/SKILL.md +94 -0
- package/.claude/skills/pdf-reader/pdf-reader +203 -0
- package/README.md +169 -3
- package/dist/.claude/agents/backend-architecture-designer.md +1250 -0
- package/dist/.claude/agents/backend-expert.md +1731 -0
- package/dist/.claude/agents/deployment-expert.md +1126 -0
- package/dist/.claude/agents/dev-environment-initiator.md +788 -0
- package/dist/.claude/agents/frontend-expert.md +1343 -0
- package/dist/.claude/agents/frontend-planner.md +1044 -0
- package/dist/.claude/agents/git-manager.md +811 -0
- package/dist/.claude/agents/project-manager.md +843 -0
- package/dist/.claude/agents/security-expert.md +835 -0
- package/dist/.claude/agents/tech-stack-expert.md +1357 -0
- package/dist/.claude/agents/test-agent.md +1372 -0
- package/dist/.claude/agents/uiux-designer.md +955 -0
- package/dist/.claude/commands/build.md +5 -0
- package/dist/.claude/commands/deploy.md +3 -0
- package/dist/.claude/commands/feature.md +3 -0
- package/dist/.claude/commands/fix.md +3 -0
- package/dist/.claude/skills/pdf-reader/.skillfish.json +10 -0
- package/dist/.claude/skills/pdf-reader/SKILL.md +94 -0
- package/dist/.claude/skills/pdf-reader/pdf-reader +203 -0
- package/dist/cli.js +206 -0
- package/dist/cli.js.map +7 -0
- package/dist/main.js +173 -0
- package/dist/main.js.map +7 -0
- package/package.json +89 -5
- package/src/agents/index.ts +94 -0
- package/src/cli.ts +76 -0
- package/src/diff/index.ts +255 -0
- package/src/llm/client.ts +192 -0
- package/src/llm/tools.ts +206 -0
- package/src/main.ts +427 -0
- package/src/memory/index.ts +130 -0
- package/src/tools/index.ts +371 -0
- package/src/types/index.ts +151 -0
- package/src/ui/index.ts +519 -0
- package/src/utils/ansi.ts +134 -0
- package/src/utils/config.ts +75 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// =============================================================================
|
|
2
|
+
// Config Management
|
|
3
|
+
// =============================================================================
|
|
4
|
+
|
|
5
|
+
import { readFileSync } from 'node:fs';
|
|
6
|
+
import { resolve, dirname } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import type { AppConfig } from '../types/index.js';
|
|
9
|
+
|
|
10
|
+
// Find project root reliably (works even when cwd != project dir)
|
|
11
|
+
function getProjectRoot(): string {
|
|
12
|
+
// Try import.meta.url first (ESM)
|
|
13
|
+
try {
|
|
14
|
+
const thisFile = fileURLToPath(import.meta.url);
|
|
15
|
+
return dirname(dirname(thisFile)); // src/utils/ → src/ → project root
|
|
16
|
+
} catch {
|
|
17
|
+
// Fall back to process.cwd()
|
|
18
|
+
return process.cwd();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// Load .env files at startup
|
|
23
|
+
function loadEnvFile(envPath: string): void {
|
|
24
|
+
try {
|
|
25
|
+
const content = readFileSync(envPath, 'utf-8');
|
|
26
|
+
for (const line of content.split('\n')) {
|
|
27
|
+
const trimmed = line.trim();
|
|
28
|
+
if (!trimmed || trimmed.startsWith('#')) continue;
|
|
29
|
+
const eqIdx = trimmed.indexOf('=');
|
|
30
|
+
if (eqIdx === -1 || eqIdx === trimmed.length - 1) continue;
|
|
31
|
+
const key = trimmed.slice(0, eqIdx).trim();
|
|
32
|
+
const value = trimmed.slice(eqIdx + 1).trim().replace(/^["']|["']$/g, '');
|
|
33
|
+
if (!process.env[key]) process.env[key] = value;
|
|
34
|
+
}
|
|
35
|
+
} catch {
|
|
36
|
+
// file not found — continue silently
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Load .env from project root and current directory
|
|
41
|
+
const PROJECT_ROOT = getProjectRoot();
|
|
42
|
+
loadEnvFile(resolve(PROJECT_ROOT, '.env'));
|
|
43
|
+
loadEnvFile(resolve('.env')); // also try cwd
|
|
44
|
+
|
|
45
|
+
export { PROJECT_ROOT };
|
|
46
|
+
|
|
47
|
+
export function getAgentTermoDir(): string {
|
|
48
|
+
const envDir = process.env.AGENT_TERMO_DIR;
|
|
49
|
+
if (envDir) {
|
|
50
|
+
return resolve(process.env.HOME || process.env.USERPROFILE || '.', envDir);
|
|
51
|
+
}
|
|
52
|
+
return resolve(process.env.HOME || process.env.USERPROFILE || '.', '.agent-termo');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function getConfig(projectRoot: string): AppConfig {
|
|
56
|
+
loadEnvFile(resolve(projectRoot, '.env'));
|
|
57
|
+
|
|
58
|
+
return {
|
|
59
|
+
nimApiKey: process.env.NIM_API_KEY ?? '',
|
|
60
|
+
nimBaseUrl: process.env.NIM_BASE_URL ?? 'https://integrate.api.nvidia.com/v1',
|
|
61
|
+
nimModel: process.env.NIM_MODEL ?? 'stepfun-ai/step-3.7-flash',
|
|
62
|
+
agentTermoDir: process.env.AGENT_TERMO_DIR ?? '.claude',
|
|
63
|
+
logLevel: (process.env.LOG_LEVEL as AppConfig['logLevel']) || 'info',
|
|
64
|
+
confirmDestructive: process.env.CONFIRM_DESTRUCTIVE !== 'false',
|
|
65
|
+
allowedCommands: (
|
|
66
|
+
process.env.ALLOWED_COMMANDS ?? 'git,npm,node,pnpm,yarn,tsx,tsc,npx'
|
|
67
|
+
).split(','),
|
|
68
|
+
llmTimeout: parseInt(process.env.LLM_TIMEOUT ?? '120000', 10),
|
|
69
|
+
bashTimeout: parseInt(process.env.BASH_TIMEOUT ?? '300000', 10),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function resolveProjectRoot(cwd?: string): string {
|
|
74
|
+
return cwd || PROJECT_ROOT;
|
|
75
|
+
}
|