@goondan/cli 0.0.3-alpha16 → 0.0.3-alpha18

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.
@@ -4,12 +4,20 @@ export async function handleLogs({ cmd, deps, globals }) {
4
4
  const processName = cmd.process;
5
5
  const result = await deps.logs.read({
6
6
  instanceKey: cmd.instanceKey ?? undefined,
7
+ agent: cmd.agent ?? undefined,
8
+ trace: cmd.trace ?? undefined,
7
9
  process: processName,
8
10
  stream,
9
11
  lines,
10
12
  stateRoot: globals.stateRoot ?? undefined,
11
13
  });
12
- deps.io.out(`Logs instance=${result.instanceKey} process=${result.process} stream=${stream} lines=${lines}`);
14
+ const filters = [];
15
+ if (cmd.agent)
16
+ filters.push(`agent=${cmd.agent}`);
17
+ if (cmd.trace)
18
+ filters.push(`trace=${cmd.trace}`);
19
+ const filterLabel = filters.length > 0 ? ` [${filters.join(', ')}]` : '';
20
+ deps.io.out(`Logs instance=${result.instanceKey} process=${result.process} stream=${stream} lines=${lines}${filterLabel}`);
13
21
  for (const chunk of result.chunks) {
14
22
  deps.io.out(`--- ${chunk.stream} (${chunk.path}) ---`);
15
23
  if (chunk.lines.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAe;IAClE,MAAM,MAAM,GAAc,GAAG,CAAC,MAAM,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,OAAO,EAAE,WAAW;QACpB,MAAM;QACN,KAAK;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,YAAY,MAAM,CAAC,OAAO,WAAW,MAAM,UAAU,KAAK,EAAE,CAAC,CAAC;IAC7G,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAe;IAClE,MAAM,MAAM,GAAc,GAAG,CAAC,MAAM,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,WAAW,EAAE,GAAG,CAAC,WAAW,IAAI,SAAS;QACzC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,OAAO,EAAE,WAAW;QACpB,MAAM;QACN,KAAK;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAClD,IAAI,GAAG,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,YAAY,MAAM,CAAC,OAAO,WAAW,MAAM,UAAU,KAAK,GAAG,WAAW,EAAE,CAAC,CAAC;IAC3H,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -1,14 +1,20 @@
1
1
  export async function handleRestart({ cmd, deps, globals }) {
2
+ const agent = cmd.agent ?? undefined;
3
+ const fresh = cmd.fresh ?? false;
2
4
  const result = await deps.runtime.restart({
3
- agent: cmd.agent ?? undefined,
4
- fresh: cmd.fresh ?? false,
5
+ agent,
6
+ fresh,
5
7
  stateRoot: globals.stateRoot ?? undefined,
6
8
  });
7
9
  if (result.instanceKey && typeof result.pid === 'number') {
8
- deps.io.out(`Orchestrator restarted: ${result.instanceKey} (pid: ${result.pid})`);
10
+ const target = agent ? `agent "${agent}"` : 'Orchestrator';
11
+ const freshLabel = fresh ? ' (fresh, state cleared)' : '';
12
+ deps.io.out(`${target} restarted: ${result.instanceKey} (pid: ${result.pid})${freshLabel}`);
9
13
  return 0;
10
14
  }
11
- deps.io.out(`Restart requested for: ${result.restarted.join(', ')}`);
15
+ const target = agent ? `agent "${agent}"` : result.restarted.join(', ');
16
+ const freshLabel = fresh ? ' (fresh, state cleared)' : '';
17
+ deps.io.out(`Restart requested for: ${target}${freshLabel}`);
12
18
  return 0;
13
19
  }
14
20
  //# sourceMappingURL=restart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAkB;IACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,SAAS;QAC7B,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,KAAK;QACzB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,WAAW,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,WAAW,UAAU,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,0BAA0B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrE,OAAO,CAAC,CAAC;AACX,CAAC"}
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAkB;IACxE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,SAAS,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;IAEjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACxC,KAAK;QACL,KAAK;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;KAC1C,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,WAAW,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACzD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC;QAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,eAAe,MAAM,CAAC,WAAW,UAAU,MAAM,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC,CAAC;QAC5F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,0BAA0B,MAAM,GAAG,UAAU,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC;AACX,CAAC"}
package/dist/parser.d.ts CHANGED
@@ -76,6 +76,8 @@ export declare const gdnParser: import("@optique/core/parser").Parser<"sync", {
76
76
  } | {
77
77
  readonly action: "logs";
78
78
  readonly instanceKey: string | undefined;
79
+ readonly agent: string | undefined;
80
+ readonly trace: string | undefined;
79
81
  readonly process: string;
80
82
  readonly stream: "stdout" | "stderr" | "both";
81
83
  readonly lines: number;
package/dist/parser.js CHANGED
@@ -102,6 +102,8 @@ const doctorCommand = command('doctor', object({
102
102
  const logsCommand = command('logs', object({
103
103
  action: constant('logs'),
104
104
  instanceKey: optional(option('-i', '--instance-key', string({ metavar: 'KEY' }))),
105
+ agent: optional(option('-a', '--agent', string({ metavar: 'NAME' }))),
106
+ trace: optional(option('--trace', string({ metavar: 'TRACE_ID' }))),
105
107
  process: withDefault(option('-p', '--process', string({ metavar: 'NAME' })), 'orchestrator'),
106
108
  stream: withDefault(option('--stream', choice(['stdout', 'stderr', 'both'])), 'both'),
107
109
  lines: withDefault(option('-l', '--lines', integer({ min: 1 })), 200),
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -10,34 +10,38 @@ function resolveEnvFilePath(projectRoot, inputPath) {
10
10
  return path.resolve(projectRoot, inputPath);
11
11
  }
12
12
  function buildEnvFileQueue(projectRoot, envFile) {
13
- const queue = [];
13
+ // Precedence (higher wins):
14
+ // --env-file > .env.local > .env > system env
15
+ // Implementation strategy:
16
+ // - Start from system env
17
+ // - Apply low-precedence dotenv files first, then override upward
18
+ const queue = [
19
+ {
20
+ filePath: path.join(projectRoot, '.env'),
21
+ required: false,
22
+ },
23
+ {
24
+ filePath: path.join(projectRoot, '.env.local'),
25
+ required: false,
26
+ },
27
+ ];
14
28
  if (envFile && envFile.trim().length > 0) {
15
29
  queue.push({
16
30
  filePath: resolveEnvFilePath(projectRoot, envFile.trim()),
17
31
  required: true,
18
32
  });
19
33
  }
20
- queue.push({
21
- filePath: path.join(projectRoot, '.env.local'),
22
- required: false,
23
- }, {
24
- filePath: path.join(projectRoot, '.env'),
25
- required: false,
26
- });
27
- const deduped = new Set();
28
- const uniqueQueue = [];
34
+ // Dedupe while keeping the last occurrence (so a user-provided --env-file
35
+ // can replace the default path and still be treated as required).
36
+ const byPath = new Map();
29
37
  for (const item of queue) {
30
- if (deduped.has(item.filePath)) {
31
- continue;
32
- }
33
- deduped.add(item.filePath);
34
- uniqueQueue.push(item);
38
+ byPath.set(item.filePath, item);
35
39
  }
36
- return uniqueQueue;
40
+ return [...byPath.values()];
37
41
  }
38
42
  function mergeDotEnvValues(target, parsed) {
39
43
  for (const [key, value] of Object.entries(parsed)) {
40
- if (target[key] !== undefined || value === undefined) {
44
+ if (value === undefined) {
41
45
  continue;
42
46
  }
43
47
  target[key] = value;
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/services/env.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/services/env.ts"],"names":[],"mappings":"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"}
@@ -87,6 +87,53 @@ async function readChunk(stream, filePath, maxLines) {
87
87
  lines: tailLines(raw, maxLines),
88
88
  };
89
89
  }
90
+ function matchesEventFilter(line, filter) {
91
+ try {
92
+ const parsed = JSON.parse(line);
93
+ if (!isObjectRecord(parsed)) {
94
+ return false;
95
+ }
96
+ if (filter.agent) {
97
+ const agentName = parsed['agentName'];
98
+ if (typeof agentName !== 'string' || agentName !== filter.agent) {
99
+ return false;
100
+ }
101
+ }
102
+ if (filter.trace) {
103
+ const traceId = parsed['traceId'];
104
+ if (typeof traceId !== 'string' || traceId !== filter.trace) {
105
+ return false;
106
+ }
107
+ }
108
+ return true;
109
+ }
110
+ catch {
111
+ return false;
112
+ }
113
+ }
114
+ function filterAndTailLines(content, maxLines, filter) {
115
+ const lines = content
116
+ .split('\n')
117
+ .map((line) => line.replace(/\r$/, ''))
118
+ .filter((line) => line.length > 0);
119
+ const filtered = lines.filter((line) => matchesEventFilter(line, filter));
120
+ if (filtered.length <= maxLines) {
121
+ return filtered;
122
+ }
123
+ return filtered.slice(filtered.length - maxLines);
124
+ }
125
+ async function readRuntimeEventsChunk(filePath, maxLines, filter) {
126
+ const hasFile = await exists(filePath);
127
+ if (!hasFile) {
128
+ return undefined;
129
+ }
130
+ const raw = await readFile(filePath, 'utf8');
131
+ return {
132
+ stream: 'stdout',
133
+ path: filePath,
134
+ lines: filterAndTailLines(raw, maxLines, filter),
135
+ };
136
+ }
90
137
  export class FileLogService {
91
138
  env;
92
139
  constructor(env) {
@@ -103,6 +150,24 @@ export class FileLogService {
103
150
  if (!instanceKey) {
104
151
  throw configError('실행 중인 인스턴스를 찾지 못했습니다.', 'gdn run으로 먼저 실행하거나 --instance-key를 지정하세요.');
105
152
  }
153
+ const hasEventFilter = Boolean(request.agent) || Boolean(request.trace);
154
+ // agent/trace 필터가 있으면 runtime-events.jsonl에서 필터링
155
+ if (hasEventFilter) {
156
+ const filter = {
157
+ agent: request.agent,
158
+ trace: request.trace,
159
+ };
160
+ const eventsPath = path.join(stateRoot, 'workspaces', instanceKey, 'messages', 'runtime-events.jsonl');
161
+ const chunk = await readRuntimeEventsChunk(eventsPath, maxLines, filter);
162
+ if (!chunk) {
163
+ throw configError(`런타임 이벤트 파일을 찾을 수 없습니다. (instance=${instanceKey})`, 'gdn run을 다시 실행한 뒤 gdn logs를 사용하세요.');
164
+ }
165
+ return {
166
+ instanceKey,
167
+ process: processName,
168
+ chunks: [chunk],
169
+ };
170
+ }
106
171
  const fromActive = active?.logs.find((item) => item.process === processName);
107
172
  const resolvedPaths = fromActive ?? resolveFallbackLogPaths(stateRoot, instanceKey, processName);
108
173
  const chunks = [];
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/services/logs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAa/C,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAE/B,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5F,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO;QACP,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,GAAW;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAoB,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,WAAW;YACX,IAAI;SACL,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,QAAgB;IAClD,MAAM,KAAK,GAAG,OAAO;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;SACtC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErC,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAiB,EAAE,WAAmB,EAAE,WAAmB;IAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;IACpE,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,aAAa,CAAC;QACtD,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,aAAa,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,WAAmB;IAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,WAAW,CAAC,2BAA2B,EAAE,0BAA0B,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAA2B,EAAE,QAAgB,EAAE,QAAgB;IACtF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO;QACL,MAAM;QACN,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,cAAc;IACR,GAAG,CAAoB;IAExC,YAAY,GAAsB;QAChC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAuB;QAChC,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,WAAW,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAE/F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnG,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,MAAM,EAAE,WAAW,CAAC;QAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,WAAW,CAAC,uBAAuB,EAAE,2CAA2C,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC;QAC7E,MAAM,aAAa,GAAG,UAAU,IAAI,uBAAuB,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;QAEjG,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACxE,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,WAAW,CACf,+BAA+B,WAAW,aAAa,WAAW,GAAG,EACrE,oCAAoC,CACrC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,WAAW;YACX,OAAO,EAAE,WAAW;YACpB,MAAM;SACP,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/services/logs.ts"],"names":[],"mappings":"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"}
@@ -279,7 +279,7 @@ function fromMessageToRoute(message, instanceKey, defaultAgentId, state) {
279
279
  const inbound = message.inboundContext;
280
280
  if (inbound) {
281
281
  const fromId = `${inbound.sourceKind}:${inbound.sourceName}`;
282
- state.replyTargetId = fromId;
282
+ state.lastInboundSourceId = fromId;
283
283
  return {
284
284
  from: fromId,
285
285
  to: defaultAgentId,
@@ -287,7 +287,7 @@ function fromMessageToRoute(message, instanceKey, defaultAgentId, state) {
287
287
  detail: message.content,
288
288
  };
289
289
  }
290
- state.replyTargetId = userId;
290
+ state.lastInboundSourceId = userId;
291
291
  return {
292
292
  from: userId,
293
293
  to: defaultAgentId,
@@ -321,13 +321,37 @@ function fromMessageToRoute(message, instanceKey, defaultAgentId, state) {
321
321
  detail: message.content,
322
322
  };
323
323
  }
324
+ // assistant 메시지: inbound context로부터 마지막 소스를 target으로 사용
324
325
  return {
325
326
  from: defaultAgentId,
326
- to: state.replyTargetId,
327
+ to: state.lastInboundSourceId,
327
328
  kind: 'message.assistant',
328
329
  detail: message.content,
329
330
  };
330
331
  }
332
+ function parseTokenUsage(value) {
333
+ if (!isObjectRecord(value)) {
334
+ return undefined;
335
+ }
336
+ const promptTokens = value['promptTokens'];
337
+ const completionTokens = value['completionTokens'];
338
+ const totalTokens = value['totalTokens'];
339
+ if (typeof promptTokens !== 'number' ||
340
+ typeof completionTokens !== 'number' ||
341
+ typeof totalTokens !== 'number') {
342
+ return undefined;
343
+ }
344
+ return { promptTokens, completionTokens, totalTokens };
345
+ }
346
+ function extractTraceContext(event) {
347
+ const traceId = typeof event['traceId'] === 'string' ? event['traceId'] : undefined;
348
+ const spanId = typeof event['spanId'] === 'string' ? event['spanId'] : undefined;
349
+ const parentSpanId = typeof event['parentSpanId'] === 'string' ? event['parentSpanId'] : undefined;
350
+ const instanceKey = typeof event['instanceKey'] === 'string' ? event['instanceKey'] : undefined;
351
+ const duration = typeof event['duration'] === 'number' ? event['duration'] : undefined;
352
+ const tokenUsage = parseTokenUsage(event['tokenUsage']);
353
+ return { traceId, spanId, parentSpanId, instanceKey, duration, tokenUsage };
354
+ }
331
355
  function runtimeEventRoute(event) {
332
356
  const type = event['type'];
333
357
  const agentName = event['agentName'];
@@ -335,12 +359,16 @@ function runtimeEventRoute(event) {
335
359
  return undefined;
336
360
  }
337
361
  const agentId = `agent:${agentName}`;
362
+ const llmInputMessages = parseLlmInputMessages(event['llmInputMessages']);
363
+ const trace = extractTraceContext(event);
338
364
  if (type === 'tool.called') {
339
365
  const toolName = event['toolName'];
340
366
  return {
341
367
  from: agentId,
342
368
  to: `tool:${typeof toolName === 'string' ? toolName : 'unknown'}`,
343
369
  detail: typeof toolName === 'string' ? toolName : '',
370
+ llmInputMessages,
371
+ ...trace,
344
372
  };
345
373
  }
346
374
  if (type === 'tool.completed' || type === 'tool.failed') {
@@ -351,14 +379,36 @@ function runtimeEventRoute(event) {
351
379
  from: `tool:${typeof toolName === 'string' ? toolName : 'unknown'}`,
352
380
  to: agentId,
353
381
  detail: `${typeof toolName === 'string' ? toolName : 'unknown'}${suffix}`,
382
+ llmInputMessages,
383
+ ...trace,
354
384
  };
355
385
  }
356
386
  return {
357
387
  from: agentId,
358
388
  to: 'system:runtime',
359
389
  detail: type,
390
+ llmInputMessages,
391
+ ...trace,
360
392
  };
361
393
  }
394
+ function parseLlmInputMessages(value) {
395
+ if (!Array.isArray(value)) {
396
+ return undefined;
397
+ }
398
+ const messages = [];
399
+ for (const item of value) {
400
+ if (!isObjectRecord(item)) {
401
+ continue;
402
+ }
403
+ const role = item['role'];
404
+ const content = item['content'];
405
+ if (typeof role !== 'string' || role.length === 0 || typeof content !== 'string') {
406
+ continue;
407
+ }
408
+ messages.push({ role, content });
409
+ }
410
+ return messages.length > 0 ? messages : undefined;
411
+ }
362
412
  function parseConnectorLogLine(line, fallbackEpochMs) {
363
413
  const pattern = /\[goondan-runtime\]\[([^/\]]+)\/([^\]]+)\] emitted event name=([^\s]+) instanceKey=([^\s]+)/u;
364
414
  const match = pattern.exec(line);
@@ -573,6 +623,113 @@ function writeText(res, statusCode, contentType, body) {
573
623
  res.setHeader('cache-control', 'no-store');
574
624
  res.end(body);
575
625
  }
626
+ function buildTraces(entries) {
627
+ const traceMap = new Map();
628
+ // First pass: collect all spans from runtime events with trace info
629
+ for (const entry of entries) {
630
+ if (!entry.traceId || !entry.spanId) {
631
+ continue;
632
+ }
633
+ let traceData = traceMap.get(entry.traceId);
634
+ if (!traceData) {
635
+ traceData = {
636
+ spans: new Map(),
637
+ agentNames: new Set(),
638
+ startedAt: entry.at,
639
+ };
640
+ traceMap.set(entry.traceId, traceData);
641
+ }
642
+ const agentName = entry.source.startsWith('agent:')
643
+ ? entry.source.slice(6)
644
+ : entry.target?.startsWith('agent:')
645
+ ? entry.target.slice(6)
646
+ : undefined;
647
+ if (agentName) {
648
+ traceData.agentNames.add(agentName);
649
+ }
650
+ const existingSpan = traceData.spans.get(entry.spanId);
651
+ if (existingSpan) {
652
+ // Update existing span with completion info
653
+ if (entry.subtype.endsWith('.completed') || entry.subtype.endsWith('.failed')) {
654
+ existingSpan.completedAt = entry.at;
655
+ existingSpan.status = entry.subtype.endsWith('.failed') ? 'failed' : 'completed';
656
+ if (entry.duration !== undefined) {
657
+ existingSpan.duration = entry.duration;
658
+ }
659
+ if (entry.tokenUsage) {
660
+ existingSpan.tokenUsage = entry.tokenUsage;
661
+ }
662
+ }
663
+ }
664
+ else {
665
+ const status = entry.subtype.endsWith('.completed')
666
+ ? 'completed'
667
+ : entry.subtype.endsWith('.failed')
668
+ ? 'failed'
669
+ : 'started';
670
+ traceData.spans.set(entry.spanId, {
671
+ spanId: entry.spanId,
672
+ parentSpanId: entry.parentSpanId,
673
+ traceId: entry.traceId,
674
+ type: entry.subtype,
675
+ agentName: agentName ?? 'unknown',
676
+ instanceKey: entry.instanceKey ?? '',
677
+ startedAt: entry.at,
678
+ completedAt: status !== 'started' ? entry.at : undefined,
679
+ duration: entry.duration,
680
+ status,
681
+ children: [],
682
+ tokenUsage: entry.tokenUsage,
683
+ detail: entry.detail,
684
+ });
685
+ }
686
+ // Track trace time boundaries
687
+ if (toMillis(entry.at) < toMillis(traceData.startedAt)) {
688
+ traceData.startedAt = entry.at;
689
+ }
690
+ if (!traceData.completedAt || toMillis(entry.at) > toMillis(traceData.completedAt)) {
691
+ traceData.completedAt = entry.at;
692
+ }
693
+ }
694
+ // Second pass: build tree structure
695
+ const traces = [];
696
+ for (const [traceId, traceData] of traceMap) {
697
+ const rootSpans = [];
698
+ for (const span of traceData.spans.values()) {
699
+ if (span.parentSpanId) {
700
+ const parent = traceData.spans.get(span.parentSpanId);
701
+ if (parent) {
702
+ parent.children.push(span);
703
+ continue;
704
+ }
705
+ }
706
+ rootSpans.push(span);
707
+ }
708
+ // Sort children by startedAt
709
+ const sortSpanChildren = (span) => {
710
+ span.children.sort((a, b) => toMillis(a.startedAt) - toMillis(b.startedAt));
711
+ for (const child of span.children) {
712
+ sortSpanChildren(child);
713
+ }
714
+ };
715
+ for (const root of rootSpans) {
716
+ sortSpanChildren(root);
717
+ }
718
+ rootSpans.sort((a, b) => toMillis(a.startedAt) - toMillis(b.startedAt));
719
+ const startMs = toMillis(traceData.startedAt);
720
+ const endMs = traceData.completedAt ? toMillis(traceData.completedAt) : undefined;
721
+ traces.push({
722
+ traceId,
723
+ rootSpans,
724
+ agentNames: [...traceData.agentNames],
725
+ startedAt: traceData.startedAt,
726
+ completedAt: traceData.completedAt,
727
+ totalDuration: endMs !== undefined ? endMs - startMs : undefined,
728
+ });
729
+ }
730
+ traces.sort((a, b) => toMillis(a.startedAt) - toMillis(b.startedAt));
731
+ return traces;
732
+ }
576
733
  function notFound(res) {
577
734
  writeJson(res, 404, {
578
735
  error: 'not_found',
@@ -624,7 +781,7 @@ export class DefaultStudioService {
624
781
  const runtimeFallbackMs = (await stat(runtimeEventsPath).catch(() => undefined))?.mtimeMs ?? 0;
625
782
  const baseRows = await readJsonLines(basePath);
626
783
  const routeState = {
627
- replyTargetId: `user:${request.instanceKey}`,
784
+ lastInboundSourceId: `user:${request.instanceKey}`,
628
785
  };
629
786
  for (const row of baseRows) {
630
787
  const message = messageFromUnknown(row);
@@ -715,6 +872,13 @@ export class DefaultStudioService {
715
872
  target: routed.to,
716
873
  subtype,
717
874
  detail: routed.detail,
875
+ llmInputMessages: routed.llmInputMessages,
876
+ traceId: routed.traceId,
877
+ spanId: routed.spanId,
878
+ parentSpanId: routed.parentSpanId,
879
+ instanceKey: routed.instanceKey,
880
+ duration: routed.duration,
881
+ tokenUsage: routed.tokenUsage,
718
882
  }, sequence);
719
883
  sequence += 1;
720
884
  }
@@ -744,12 +908,14 @@ export class DefaultStudioService {
744
908
  const entries = timeline.map((item) => item.entry);
745
909
  const recentLimit = request.maxRecentEvents ?? 20;
746
910
  const recentEvents = entries.slice(Math.max(0, entries.length - recentLimit));
911
+ const traces = buildTraces(entries);
747
912
  return {
748
913
  instanceKey: request.instanceKey,
749
914
  participants: finalizeParticipants(participants),
750
915
  interactions: finalizeInteractions(interactions),
751
916
  timeline: entries,
752
917
  recentEvents,
918
+ traces,
753
919
  };
754
920
  }
755
921
  async startServer(request) {