argos-ai 0.1.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/README.md +15 -0
- package/dist/commands/default.d.ts +9 -0
- package/dist/commands/default.d.ts.map +1 -0
- package/dist/commands/default.js +241 -0
- package/dist/commands/default.js.map +1 -0
- package/dist/commands/hook.d.ts +7 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +171 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/logout.d.ts +5 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +34 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/status.d.ts +5 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +51 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +9 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +54 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/auth-flow.d.ts +12 -0
- package/dist/lib/auth-flow.d.ts.map +1 -0
- package/dist/lib/auth-flow.js +80 -0
- package/dist/lib/auth-flow.js.map +1 -0
- package/dist/lib/config.d.ts +12 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +48 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/hooks-inject.d.ts +8 -0
- package/dist/lib/hooks-inject.d.ts.map +1 -0
- package/dist/lib/hooks-inject.js +50 -0
- package/dist/lib/hooks-inject.js.map +1 -0
- package/dist/lib/project.d.ts +21 -0
- package/dist/lib/project.d.ts.map +1 -0
- package/dist/lib/project.js +52 -0
- package/dist/lib/project.js.map +1 -0
- package/dist/lib/transcript.d.ts +41 -0
- package/dist/lib/transcript.d.ts.map +1 -0
- package/dist/lib/transcript.js +110 -0
- package/dist/lib/transcript.js.map +1 -0
- package/package.json +29 -0
package/README.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface DefaultCommandOptions {
|
|
2
|
+
apiUrl?: string;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Main command - detects context and runs appropriate flow
|
|
6
|
+
*/
|
|
7
|
+
export declare function defaultCommand(options: DefaultCommandOptions): Promise<void>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=default.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/commands/default.ts"],"names":[],"mappings":"AAWA,UAAU,qBAAqB;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAID;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAelF"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { input } from '@inquirer/prompts';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { readConfig, writeConfig } from '../lib/config.js';
|
|
6
|
+
import { findProjectConfig, writeProjectConfig } from '../lib/project.js';
|
|
7
|
+
import { injectHooks } from '../lib/hooks-inject.js';
|
|
8
|
+
import { runLoginFlow } from '../lib/auth-flow.js';
|
|
9
|
+
import { apiRequest } from '../lib/api-client.js';
|
|
10
|
+
const DEFAULT_API_URL = 'https://api.argos.sh';
|
|
11
|
+
/**
|
|
12
|
+
* Main command - detects context and runs appropriate flow
|
|
13
|
+
*/
|
|
14
|
+
export async function defaultCommand(options) {
|
|
15
|
+
const config = readConfig();
|
|
16
|
+
const project = findProjectConfig();
|
|
17
|
+
const apiUrl = options.apiUrl || DEFAULT_API_URL;
|
|
18
|
+
// 4-way branch based on config and project presence
|
|
19
|
+
if (!config && !project) {
|
|
20
|
+
await runFullSetup(apiUrl);
|
|
21
|
+
}
|
|
22
|
+
else if (!config && project) {
|
|
23
|
+
await runLoginAndJoin(project, apiUrl);
|
|
24
|
+
}
|
|
25
|
+
else if (config && !project) {
|
|
26
|
+
await runProjectInit(config, apiUrl);
|
|
27
|
+
}
|
|
28
|
+
else if (config && project) {
|
|
29
|
+
await ensureOrgMembershipAndShowStatus(config, project);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Flow 1: Full setup (login + create project + inject hooks)
|
|
34
|
+
*/
|
|
35
|
+
async function runFullSetup(apiUrl) {
|
|
36
|
+
console.log(chalk.bold('Argos 초기 설정'));
|
|
37
|
+
console.log();
|
|
38
|
+
// Step 1: Login
|
|
39
|
+
console.log(chalk.dim('→ 로그인'));
|
|
40
|
+
let spinner = ora('로그인 중...').start();
|
|
41
|
+
let loginResponse;
|
|
42
|
+
try {
|
|
43
|
+
loginResponse = await runLoginFlow(apiUrl);
|
|
44
|
+
spinner.succeed(chalk.green(`✓ 로그인 완료 (${loginResponse.user.email})`));
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
spinner.fail(chalk.red('✗ 로그인 실패'));
|
|
48
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
// Save config
|
|
52
|
+
writeConfig({
|
|
53
|
+
token: loginResponse.token,
|
|
54
|
+
apiUrl,
|
|
55
|
+
userId: loginResponse.user.id,
|
|
56
|
+
email: loginResponse.user.email,
|
|
57
|
+
});
|
|
58
|
+
// Step 2: Create project
|
|
59
|
+
console.log();
|
|
60
|
+
console.log(chalk.dim('→ 프로젝트 생성'));
|
|
61
|
+
const currentDirName = process.cwd().split('/').pop() || 'my-project';
|
|
62
|
+
const projectName = await input({
|
|
63
|
+
message: '프로젝트 이름을 입력하세요:',
|
|
64
|
+
default: currentDirName,
|
|
65
|
+
});
|
|
66
|
+
spinner = ora('프로젝트 생성 중...').start();
|
|
67
|
+
let projectResponse;
|
|
68
|
+
try {
|
|
69
|
+
projectResponse = await apiRequest(`${apiUrl}/api/projects`, {
|
|
70
|
+
method: 'POST',
|
|
71
|
+
body: JSON.stringify({ name: projectName }),
|
|
72
|
+
token: loginResponse.token,
|
|
73
|
+
baseUrl: '',
|
|
74
|
+
});
|
|
75
|
+
spinner.succeed(chalk.green(`✓ 프로젝트 생성: ${projectResponse.projectName}`));
|
|
76
|
+
console.log(chalk.dim(` 조직: ${projectResponse.orgName}`));
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
spinner.fail(chalk.red('✗ 프로젝트 생성 실패'));
|
|
80
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
// Step 3: Write project config
|
|
84
|
+
writeProjectConfig({
|
|
85
|
+
projectId: projectResponse.projectId,
|
|
86
|
+
orgId: projectResponse.orgId,
|
|
87
|
+
orgName: projectResponse.orgName,
|
|
88
|
+
projectName: projectResponse.projectName,
|
|
89
|
+
apiUrl,
|
|
90
|
+
});
|
|
91
|
+
console.log(chalk.green('✓ .argos/project.json 작성'));
|
|
92
|
+
// Step 4: Inject hooks
|
|
93
|
+
const settingsPath = join(process.cwd(), '.claude', 'settings.json');
|
|
94
|
+
const hookResult = injectHooks(settingsPath);
|
|
95
|
+
if (hookResult === 'injected') {
|
|
96
|
+
console.log(chalk.green('✓ Claude Code hooks 설치 완료'));
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.log(chalk.yellow('✓ Claude Code hooks 이미 설치됨'));
|
|
100
|
+
}
|
|
101
|
+
// Success message
|
|
102
|
+
console.log();
|
|
103
|
+
console.log(chalk.bold.green('✓ 설정 완료!'));
|
|
104
|
+
console.log();
|
|
105
|
+
console.log(chalk.dim('다음 단계:'));
|
|
106
|
+
console.log(' git add .argos/project.json .claude/settings.json');
|
|
107
|
+
console.log(' git commit -m "chore: add argos tracking"');
|
|
108
|
+
console.log();
|
|
109
|
+
console.log(chalk.dim('팀원들이 이 저장소를 clone한 뒤 argos를 실행하면 자동으로 팀에 합류됩니다.'));
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Flow 2: Login and join existing org (project.json exists, but not logged in)
|
|
113
|
+
*/
|
|
114
|
+
async function runLoginAndJoin(project, apiUrl) {
|
|
115
|
+
console.log(chalk.bold('Argos 로그인'));
|
|
116
|
+
console.log(chalk.dim(`프로젝트: ${project.projectName}`));
|
|
117
|
+
console.log();
|
|
118
|
+
let spinner = ora('로그인 중...').start();
|
|
119
|
+
let loginResponse;
|
|
120
|
+
try {
|
|
121
|
+
loginResponse = await runLoginFlow(project.apiUrl || apiUrl);
|
|
122
|
+
spinner.succeed(chalk.green(`✓ 로그인 완료 (${loginResponse.user.email})`));
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
spinner.fail(chalk.red('✗ 로그인 실패'));
|
|
126
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
// Save config
|
|
130
|
+
writeConfig({
|
|
131
|
+
token: loginResponse.token,
|
|
132
|
+
apiUrl: project.apiUrl || apiUrl,
|
|
133
|
+
userId: loginResponse.user.id,
|
|
134
|
+
email: loginResponse.user.email,
|
|
135
|
+
});
|
|
136
|
+
// Join org
|
|
137
|
+
spinner = ora('조직 합류 중...').start();
|
|
138
|
+
try {
|
|
139
|
+
await apiRequest(`${project.apiUrl || apiUrl}/api/orgs/${project.orgId}/members`, {
|
|
140
|
+
method: 'POST',
|
|
141
|
+
token: loginResponse.token,
|
|
142
|
+
baseUrl: '',
|
|
143
|
+
});
|
|
144
|
+
spinner.succeed(chalk.green(`✓ 조직 합류: ${project.orgName}`));
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
spinner.fail(chalk.red('✗ 조직 합류 실패'));
|
|
148
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
console.log();
|
|
152
|
+
console.log(chalk.bold.green('✓ 설정 완료!'));
|
|
153
|
+
console.log();
|
|
154
|
+
console.log('트래킹이 활성화되었습니다. Claude Code를 사용하면 자동으로 기록됩니다.');
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Flow 3: Create project (already logged in, but no project.json)
|
|
158
|
+
*/
|
|
159
|
+
async function runProjectInit(config, apiUrl) {
|
|
160
|
+
console.log(chalk.green(`✓ 로그인됨: ${config.email}`));
|
|
161
|
+
console.log(chalk.dim('→ 이 디렉토리는 아직 Argos 프로젝트가 아닙니다.'));
|
|
162
|
+
console.log();
|
|
163
|
+
const currentDirName = process.cwd().split('/').pop() || 'my-project';
|
|
164
|
+
const projectName = await input({
|
|
165
|
+
message: '프로젝트 이름을 입력하세요:',
|
|
166
|
+
default: currentDirName,
|
|
167
|
+
});
|
|
168
|
+
const spinner = ora('프로젝트 생성 중...').start();
|
|
169
|
+
let projectResponse;
|
|
170
|
+
try {
|
|
171
|
+
projectResponse = await apiRequest(`${config.apiUrl || apiUrl}/api/projects`, {
|
|
172
|
+
method: 'POST',
|
|
173
|
+
body: JSON.stringify({ name: projectName }),
|
|
174
|
+
token: config.token,
|
|
175
|
+
baseUrl: '',
|
|
176
|
+
});
|
|
177
|
+
spinner.succeed(chalk.green(`✓ 프로젝트 생성: ${projectResponse.projectName}`));
|
|
178
|
+
console.log(chalk.dim(` 조직: ${projectResponse.orgName}`));
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
spinner.fail(chalk.red('✗ 프로젝트 생성 실패'));
|
|
182
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
// Write project config
|
|
186
|
+
writeProjectConfig({
|
|
187
|
+
projectId: projectResponse.projectId,
|
|
188
|
+
orgId: projectResponse.orgId,
|
|
189
|
+
orgName: projectResponse.orgName,
|
|
190
|
+
projectName: projectResponse.projectName,
|
|
191
|
+
apiUrl: config.apiUrl || apiUrl,
|
|
192
|
+
});
|
|
193
|
+
console.log(chalk.green('✓ .argos/project.json 작성'));
|
|
194
|
+
// Inject hooks
|
|
195
|
+
const settingsPath = join(process.cwd(), '.claude', 'settings.json');
|
|
196
|
+
const hookResult = injectHooks(settingsPath);
|
|
197
|
+
if (hookResult === 'injected') {
|
|
198
|
+
console.log(chalk.green('✓ Claude Code hooks 설치 완료'));
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
console.log(chalk.yellow('✓ Claude Code hooks 이미 설치됨'));
|
|
202
|
+
}
|
|
203
|
+
console.log();
|
|
204
|
+
console.log(chalk.bold.green('✓ 설정 완료!'));
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Flow 4: Everything is set up - just verify membership and show status
|
|
208
|
+
*/
|
|
209
|
+
async function ensureOrgMembershipAndShowStatus(config, project) {
|
|
210
|
+
// Check if user is already a member
|
|
211
|
+
const spinner = ora('멤버십 확인 중...').start();
|
|
212
|
+
try {
|
|
213
|
+
await apiRequest(`${project.apiUrl || config.apiUrl}/api/orgs/${project.orgId}/members`, {
|
|
214
|
+
method: 'POST',
|
|
215
|
+
token: config.token,
|
|
216
|
+
baseUrl: '',
|
|
217
|
+
});
|
|
218
|
+
spinner.stop();
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
spinner.stop();
|
|
222
|
+
// Ignore error - user might already be a member
|
|
223
|
+
}
|
|
224
|
+
// Show status
|
|
225
|
+
console.log(chalk.bold.green('✓ 모두 준비되어 있습니다.'));
|
|
226
|
+
console.log();
|
|
227
|
+
console.log(chalk.dim('사용자: ') + config.email);
|
|
228
|
+
console.log(chalk.dim('프로젝트:') + ` ${project.projectName} (${project.projectId})`);
|
|
229
|
+
console.log(chalk.dim('조직: ') + project.orgName);
|
|
230
|
+
console.log(chalk.dim('API: ') + (project.apiUrl || config.apiUrl));
|
|
231
|
+
// Check hooks
|
|
232
|
+
const settingsPath = join(process.cwd(), '.claude', 'settings.json');
|
|
233
|
+
const hookResult = injectHooks(settingsPath);
|
|
234
|
+
if (hookResult === 'injected') {
|
|
235
|
+
console.log(chalk.dim('Hooks: ') + chalk.green('✓ .claude/settings.json에 설치됨'));
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
console.log(chalk.dim('Hooks: ') + chalk.green('✓ .claude/settings.json에 설치됨'));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/commands/default.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"AAoIA;;;;GAIG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAsEjD"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { homedir } from 'os';
|
|
2
|
+
import { appendFileSync, existsSync, mkdirSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { readConfig } from '../lib/config.js';
|
|
5
|
+
import { findProjectConfig } from '../lib/project.js';
|
|
6
|
+
import { extractUsageFromTranscript, detectSlashCommand, extractMessages } from '../lib/transcript.js';
|
|
7
|
+
/**
|
|
8
|
+
* Read stdin with timeout
|
|
9
|
+
* Returns null if stdin is TTY (user running manually) or if timeout expires
|
|
10
|
+
*/
|
|
11
|
+
async function readStdinWithTimeout(timeoutMs) {
|
|
12
|
+
// If stdin is a TTY, return immediately (user ran command manually)
|
|
13
|
+
if (process.stdin.isTTY) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
return new Promise((resolve) => {
|
|
17
|
+
let data = '';
|
|
18
|
+
let timeoutId = null;
|
|
19
|
+
let completed = false;
|
|
20
|
+
const complete = (result) => {
|
|
21
|
+
if (completed)
|
|
22
|
+
return;
|
|
23
|
+
completed = true;
|
|
24
|
+
if (timeoutId)
|
|
25
|
+
clearTimeout(timeoutId);
|
|
26
|
+
process.stdin.removeAllListeners();
|
|
27
|
+
resolve(result);
|
|
28
|
+
};
|
|
29
|
+
timeoutId = setTimeout(() => complete(null), timeoutMs);
|
|
30
|
+
process.stdin.setEncoding('utf8');
|
|
31
|
+
process.stdin.on('data', (chunk) => {
|
|
32
|
+
data += chunk;
|
|
33
|
+
});
|
|
34
|
+
process.stdin.on('end', () => {
|
|
35
|
+
complete(data || null);
|
|
36
|
+
});
|
|
37
|
+
process.stdin.on('error', () => {
|
|
38
|
+
complete(null);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Debug log - only writes if ARGOS_DEBUG=1
|
|
44
|
+
*/
|
|
45
|
+
function debugLog(message) {
|
|
46
|
+
if (process.env.ARGOS_DEBUG !== '1')
|
|
47
|
+
return;
|
|
48
|
+
try {
|
|
49
|
+
const argosDir = join(homedir(), '.argos');
|
|
50
|
+
if (!existsSync(argosDir)) {
|
|
51
|
+
mkdirSync(argosDir, { recursive: true });
|
|
52
|
+
}
|
|
53
|
+
const logPath = join(argosDir, 'hook-debug.log');
|
|
54
|
+
const timestamp = new Date().toISOString();
|
|
55
|
+
const logMessage = `[${timestamp}] ${JSON.stringify(message, null, 2)}\n`;
|
|
56
|
+
appendFileSync(logPath, logMessage, 'utf8');
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// Ignore logging errors
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Convert snake_case hook_event_name to SCREAMING_SNAKE_CASE EventType
|
|
64
|
+
*/
|
|
65
|
+
function convertEventType(hookEventName) {
|
|
66
|
+
// SessionStart -> SESSION_START
|
|
67
|
+
// PreToolUse -> PRE_TOOL_USE
|
|
68
|
+
// PostToolUse -> POST_TOOL_USE
|
|
69
|
+
// Stop -> STOP
|
|
70
|
+
// SubagentStop -> SUBAGENT_STOP
|
|
71
|
+
return hookEventName.replace(/([a-z])([A-Z])/g, '$1_$2').toUpperCase();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build IngestEventPayload from hook stdin data
|
|
75
|
+
*/
|
|
76
|
+
function buildPayload(event, project, config) {
|
|
77
|
+
const payload = {
|
|
78
|
+
projectId: project.projectId,
|
|
79
|
+
sessionId: event.session_id || '',
|
|
80
|
+
hookEventName: convertEventType(event.hook_event_name || ''),
|
|
81
|
+
};
|
|
82
|
+
// Add optional fields
|
|
83
|
+
if (event.tool_name) {
|
|
84
|
+
payload.toolName = event.tool_name;
|
|
85
|
+
}
|
|
86
|
+
if (event.tool_input) {
|
|
87
|
+
payload.toolInput = event.tool_input;
|
|
88
|
+
}
|
|
89
|
+
if (event.tool_response) {
|
|
90
|
+
// Truncate to 2000 characters
|
|
91
|
+
payload.toolResponse = event.tool_response.slice(0, 2000);
|
|
92
|
+
}
|
|
93
|
+
if (event.exit_code !== undefined) {
|
|
94
|
+
payload.exitCode = event.exit_code;
|
|
95
|
+
}
|
|
96
|
+
if (event.agent_id) {
|
|
97
|
+
payload.agentId = event.agent_id;
|
|
98
|
+
}
|
|
99
|
+
return payload;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Hook command handler
|
|
103
|
+
* This is called by Claude Code hooks via stdin
|
|
104
|
+
* MUST always exit with code 0
|
|
105
|
+
*/
|
|
106
|
+
export async function hookCommand() {
|
|
107
|
+
try {
|
|
108
|
+
// Read stdin with 100ms timeout
|
|
109
|
+
const raw = await readStdinWithTimeout(100);
|
|
110
|
+
if (!raw) {
|
|
111
|
+
process.exit(0);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Parse hook event
|
|
115
|
+
const event = JSON.parse(raw);
|
|
116
|
+
// Find project config
|
|
117
|
+
const project = findProjectConfig(process.cwd());
|
|
118
|
+
if (!project) {
|
|
119
|
+
process.exit(0);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Read user config
|
|
123
|
+
const config = readConfig();
|
|
124
|
+
if (!config) {
|
|
125
|
+
process.exit(0);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// Build base payload
|
|
129
|
+
const payload = buildPayload(event, project, config);
|
|
130
|
+
// SessionStart: detect slash command
|
|
131
|
+
if (event.hook_event_name === 'SessionStart' && event.transcript_path) {
|
|
132
|
+
const slashSkill = await detectSlashCommand(event.transcript_path);
|
|
133
|
+
if (slashSkill) {
|
|
134
|
+
payload.isSlashCommand = true;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Stop/SubagentStop: extract usage and messages from transcript
|
|
138
|
+
if (event.hook_event_name === 'Stop' || event.hook_event_name === 'SubagentStop') {
|
|
139
|
+
const transcriptPath = event.transcript_path || event.agent_transcript_path;
|
|
140
|
+
if (transcriptPath) {
|
|
141
|
+
const usage = await extractUsageFromTranscript(transcriptPath);
|
|
142
|
+
if (usage) {
|
|
143
|
+
payload.usage = usage;
|
|
144
|
+
}
|
|
145
|
+
const messages = await extractMessages(transcriptPath);
|
|
146
|
+
if (messages.length > 0) {
|
|
147
|
+
payload.messages = messages;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Send to API with 3 second hard timeout
|
|
152
|
+
const apiUrl = project.apiUrl || config.apiUrl;
|
|
153
|
+
await fetch(`${apiUrl}/api/events`, {
|
|
154
|
+
method: 'POST',
|
|
155
|
+
headers: {
|
|
156
|
+
'Content-Type': 'application/json',
|
|
157
|
+
Authorization: `Bearer ${config.token}`,
|
|
158
|
+
},
|
|
159
|
+
body: JSON.stringify(payload),
|
|
160
|
+
signal: AbortSignal.timeout(3000),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
debugLog(err);
|
|
165
|
+
}
|
|
166
|
+
finally {
|
|
167
|
+
// ALWAYS exit with 0 - never block Claude Code
|
|
168
|
+
process.exit(0);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=hook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook.js","sourceRoot":"","sources":["../../src/commands/hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BnD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { readConfig, deleteConfig } from '../lib/config.js';
|
|
4
|
+
import { apiRequest } from '../lib/api-client.js';
|
|
5
|
+
/**
|
|
6
|
+
* Logout command - revoke token and delete local config
|
|
7
|
+
*/
|
|
8
|
+
export async function logoutCommand() {
|
|
9
|
+
const config = readConfig();
|
|
10
|
+
if (!config) {
|
|
11
|
+
console.log(chalk.yellow('⚠ 로그인 상태가 아닙니다.'));
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const spinner = ora('로그아웃 중...').start();
|
|
15
|
+
try {
|
|
16
|
+
// Try to revoke token on server
|
|
17
|
+
await apiRequest(`${config.apiUrl}/api/auth/logout`, {
|
|
18
|
+
method: 'POST',
|
|
19
|
+
token: config.token,
|
|
20
|
+
baseUrl: '',
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
// Ignore API errors - still delete local config
|
|
25
|
+
spinner.warn(chalk.yellow('서버에서 토큰을 취소하는데 실패했지만 로컬 설정은 삭제됩니다.'));
|
|
26
|
+
}
|
|
27
|
+
// Delete local config
|
|
28
|
+
deleteConfig();
|
|
29
|
+
spinner.succeed(chalk.green('✓ 로그아웃 완료'));
|
|
30
|
+
console.log();
|
|
31
|
+
console.log('로컬 인증 정보가 삭제되었습니다.');
|
|
32
|
+
console.log(chalk.dim('다시 로그인하려면 argos를 실행하세요.'));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAA;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAA;QAC5C,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAA;IAExC,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,kBAAkB,EAAE;YACnD,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,EAAE;SACZ,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gDAAgD;QAChD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAA;IAClE,CAAC;IAED,sBAAsB;IACtB,YAAY,EAAE,CAAA;IACd,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAEzC,OAAO,CAAC,GAAG,EAAE,CAAA;IACb,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;IACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA4CnD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { readConfig } from '../lib/config.js';
|
|
5
|
+
import { findProjectConfig } from '../lib/project.js';
|
|
6
|
+
/**
|
|
7
|
+
* Status command - show current configuration
|
|
8
|
+
*/
|
|
9
|
+
export async function statusCommand() {
|
|
10
|
+
const config = readConfig();
|
|
11
|
+
const project = findProjectConfig();
|
|
12
|
+
console.log(chalk.bold('Argos 상태'));
|
|
13
|
+
console.log();
|
|
14
|
+
// Login status
|
|
15
|
+
if (config) {
|
|
16
|
+
console.log(chalk.green('✓ 로그인됨'));
|
|
17
|
+
console.log(chalk.dim(' 이메일: ') + config.email);
|
|
18
|
+
console.log(chalk.dim(' 사용자: ') + config.userId);
|
|
19
|
+
console.log(chalk.dim(' API URL: ') + config.apiUrl);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(chalk.red('✗ 로그인 안 됨'));
|
|
23
|
+
console.log(chalk.dim(' argos를 실행하여 로그인하세요.'));
|
|
24
|
+
}
|
|
25
|
+
console.log();
|
|
26
|
+
// Project status
|
|
27
|
+
if (project) {
|
|
28
|
+
console.log(chalk.green('✓ 프로젝트 설정됨'));
|
|
29
|
+
console.log(chalk.dim(' 프로젝트: ') + project.projectName);
|
|
30
|
+
console.log(chalk.dim(' 조직: ') + project.orgName);
|
|
31
|
+
console.log(chalk.dim(' ID: ') + project.projectId);
|
|
32
|
+
console.log(chalk.dim(' API URL: ') + project.apiUrl);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
console.log(chalk.red('✗ 프로젝트 없음'));
|
|
36
|
+
console.log(chalk.dim(' 이 디렉토리는 Argos 프로젝트가 아닙니다.'));
|
|
37
|
+
console.log(chalk.dim(' argos를 실행하여 프로젝트를 생성하세요.'));
|
|
38
|
+
}
|
|
39
|
+
console.log();
|
|
40
|
+
// Hooks status
|
|
41
|
+
const settingsPath = join(process.cwd(), '.claude', 'settings.json');
|
|
42
|
+
if (existsSync(settingsPath)) {
|
|
43
|
+
console.log(chalk.green('✓ Claude Code hooks 설정 파일 존재'));
|
|
44
|
+
console.log(chalk.dim(' 경로: ') + settingsPath);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.log(chalk.yellow('⚠ Claude Code hooks 설정 파일 없음'));
|
|
48
|
+
console.log(chalk.dim(' argos를 실행하여 hooks를 설치하세요.'));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { readFileSync } from 'fs';
|
|
4
|
+
import { join, dirname } from 'path';
|
|
5
|
+
import { fileURLToPath } from 'url';
|
|
6
|
+
import { defaultCommand } from './commands/default.js';
|
|
7
|
+
import { hookCommand } from './commands/hook.js';
|
|
8
|
+
import { statusCommand } from './commands/status.js';
|
|
9
|
+
import { logoutCommand } from './commands/logout.js';
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
// Read package.json for version
|
|
13
|
+
const pkgPath = join(__dirname, '..', 'package.json');
|
|
14
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
15
|
+
const program = new Command()
|
|
16
|
+
.name('argos')
|
|
17
|
+
.description('Claude Code observability for AI-native teams')
|
|
18
|
+
.version(pkg.version)
|
|
19
|
+
.option('--api-url <url>', 'API URL override (for self-hosting)');
|
|
20
|
+
// Default command (argos without subcommand)
|
|
21
|
+
program.action(defaultCommand);
|
|
22
|
+
// Hook command (internal - called by Claude Code)
|
|
23
|
+
program
|
|
24
|
+
.command('hook')
|
|
25
|
+
.description('[internal] process hook event from stdin')
|
|
26
|
+
.action(hookCommand);
|
|
27
|
+
// Status command
|
|
28
|
+
program
|
|
29
|
+
.command('status')
|
|
30
|
+
.description('show current setup status')
|
|
31
|
+
.action(statusCommand);
|
|
32
|
+
// Logout command
|
|
33
|
+
program
|
|
34
|
+
.command('logout')
|
|
35
|
+
.description('log out and remove local credentials')
|
|
36
|
+
.action(logoutCommand);
|
|
37
|
+
// Parse and execute
|
|
38
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
39
|
+
console.error('Error:', err.message);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAEpD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAErC,gCAAgC;AAChC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAA;AACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;KAC1B,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+CAA+C,CAAC;KAC5D,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,iBAAiB,EAAE,qCAAqC,CAAC,CAAA;AAEnE,6CAA6C;AAC7C,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;AAE9B,kDAAkD;AAClD,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,WAAW,CAAC,CAAA;AAEtB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,aAAa,CAAC,CAAA;AAExB,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|