@agentuity/cli 1.0.12 → 1.0.13

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.
Files changed (79) hide show
  1. package/dist/cmd/ai/opencode/dashboard.d.ts +3 -0
  2. package/dist/cmd/ai/opencode/dashboard.d.ts.map +1 -0
  3. package/dist/cmd/ai/opencode/dashboard.js +580 -0
  4. package/dist/cmd/ai/opencode/dashboard.js.map +1 -0
  5. package/dist/cmd/ai/opencode/db.d.ts +11 -0
  6. package/dist/cmd/ai/opencode/db.d.ts.map +1 -0
  7. package/dist/cmd/ai/opencode/db.js +63 -0
  8. package/dist/cmd/ai/opencode/db.js.map +1 -0
  9. package/dist/cmd/ai/opencode/index.d.ts.map +1 -1
  10. package/dist/cmd/ai/opencode/index.js +17 -1
  11. package/dist/cmd/ai/opencode/index.js.map +1 -1
  12. package/dist/cmd/ai/opencode/inspect.d.ts +3 -0
  13. package/dist/cmd/ai/opencode/inspect.d.ts.map +1 -0
  14. package/dist/cmd/ai/opencode/inspect.js +405 -0
  15. package/dist/cmd/ai/opencode/inspect.js.map +1 -0
  16. package/dist/cmd/build/ast.js +1 -1
  17. package/dist/cmd/build/ast.js.map +1 -1
  18. package/dist/cmd/cloud/db/list.d.ts.map +1 -1
  19. package/dist/cmd/cloud/db/list.js +10 -7
  20. package/dist/cmd/cloud/db/list.js.map +1 -1
  21. package/dist/cmd/cloud/keyvalue/stats.d.ts.map +1 -1
  22. package/dist/cmd/cloud/keyvalue/stats.js +78 -5
  23. package/dist/cmd/cloud/keyvalue/stats.js.map +1 -1
  24. package/dist/cmd/cloud/queue/list.d.ts.map +1 -1
  25. package/dist/cmd/cloud/queue/list.js +15 -9
  26. package/dist/cmd/cloud/queue/list.js.map +1 -1
  27. package/dist/cmd/cloud/sandbox/list.d.ts.map +1 -1
  28. package/dist/cmd/cloud/sandbox/list.js +10 -9
  29. package/dist/cmd/cloud/sandbox/list.js.map +1 -1
  30. package/dist/cmd/cloud/sandbox/runtime/list.d.ts.map +1 -1
  31. package/dist/cmd/cloud/sandbox/runtime/list.js +1 -4
  32. package/dist/cmd/cloud/sandbox/runtime/list.js.map +1 -1
  33. package/dist/cmd/cloud/sandbox/snapshot/list.d.ts.map +1 -1
  34. package/dist/cmd/cloud/sandbox/snapshot/list.js +2 -5
  35. package/dist/cmd/cloud/sandbox/snapshot/list.js.map +1 -1
  36. package/dist/cmd/cloud/session/list.d.ts.map +1 -1
  37. package/dist/cmd/cloud/session/list.js +1 -4
  38. package/dist/cmd/cloud/session/list.js.map +1 -1
  39. package/dist/cmd/cloud/storage/list.d.ts.map +1 -1
  40. package/dist/cmd/cloud/storage/list.js +16 -9
  41. package/dist/cmd/cloud/storage/list.js.map +1 -1
  42. package/dist/cmd/cloud/stream/list.d.ts.map +1 -1
  43. package/dist/cmd/cloud/stream/list.js +8 -9
  44. package/dist/cmd/cloud/stream/list.js.map +1 -1
  45. package/dist/cmd/cloud/thread/list.d.ts.map +1 -1
  46. package/dist/cmd/cloud/thread/list.js +1 -4
  47. package/dist/cmd/cloud/thread/list.js.map +1 -1
  48. package/dist/cmd/cloud/vector/stats.d.ts.map +1 -1
  49. package/dist/cmd/cloud/vector/stats.js +28 -4
  50. package/dist/cmd/cloud/vector/stats.js.map +1 -1
  51. package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
  52. package/dist/cmd/dev/file-watcher.js +42 -0
  53. package/dist/cmd/dev/file-watcher.js.map +1 -1
  54. package/dist/cmd/upgrade/index.d.ts.map +1 -1
  55. package/dist/cmd/upgrade/index.js.map +1 -1
  56. package/dist/cmd/upgrade/npm-availability.d.ts.map +1 -1
  57. package/dist/cmd/upgrade/npm-availability.js.map +1 -1
  58. package/dist/cmd/upgrade/npm-availability.test.js.map +1 -1
  59. package/package.json +6 -6
  60. package/src/cmd/ai/opencode/dashboard.ts +772 -0
  61. package/src/cmd/ai/opencode/db.ts +66 -0
  62. package/src/cmd/ai/opencode/index.ts +17 -1
  63. package/src/cmd/ai/opencode/inspect.ts +516 -0
  64. package/src/cmd/build/ast.ts +1 -1
  65. package/src/cmd/cloud/db/list.ts +10 -7
  66. package/src/cmd/cloud/keyvalue/stats.ts +105 -11
  67. package/src/cmd/cloud/queue/list.ts +15 -9
  68. package/src/cmd/cloud/sandbox/list.ts +10 -9
  69. package/src/cmd/cloud/sandbox/runtime/list.ts +1 -4
  70. package/src/cmd/cloud/sandbox/snapshot/list.ts +2 -5
  71. package/src/cmd/cloud/session/list.ts +17 -20
  72. package/src/cmd/cloud/storage/list.ts +16 -9
  73. package/src/cmd/cloud/stream/list.ts +18 -19
  74. package/src/cmd/cloud/thread/list.ts +8 -11
  75. package/src/cmd/cloud/vector/stats.ts +39 -4
  76. package/src/cmd/dev/file-watcher.ts +44 -0
  77. package/src/cmd/upgrade/index.ts +1 -3
  78. package/src/cmd/upgrade/npm-availability.test.ts +12 -20
  79. package/src/cmd/upgrade/npm-availability.ts +1 -3
@@ -0,0 +1,63 @@
1
+ import { homedir, platform } from 'node:os';
2
+ import { join } from 'node:path';
3
+ export const REQUIRED_TABLES = new Set(['session', 'message', 'part', 'todo']);
4
+ export function isMemoryPath(path) {
5
+ return path === ':memory:' || path.includes('mode=memory');
6
+ }
7
+ export function getDefaultDBCandidates() {
8
+ const home = homedir();
9
+ const candidates = [];
10
+ const currentPlatform = platform();
11
+ if (currentPlatform === 'darwin') {
12
+ candidates.push(join(home, 'Library', 'Application Support', 'opencode', 'opencode.db'));
13
+ }
14
+ if (currentPlatform === 'win32') {
15
+ const appData = process.env.APPDATA ?? join(home, 'AppData', 'Roaming');
16
+ const localAppData = process.env.LOCALAPPDATA ?? join(home, 'AppData', 'Local');
17
+ candidates.push(join(appData, 'opencode', 'opencode.db'));
18
+ candidates.push(join(localAppData, 'opencode', 'opencode.db'));
19
+ }
20
+ candidates.push(join(home, '.local', 'share', 'opencode', 'opencode.db'));
21
+ return candidates;
22
+ }
23
+ export async function resolveOpenCodeDBPath() {
24
+ const envPath = process.env.OPENCODE_DB_PATH;
25
+ if (envPath) {
26
+ if (isMemoryPath(envPath))
27
+ return envPath;
28
+ if (await Bun.file(envPath).exists())
29
+ return envPath;
30
+ }
31
+ const candidates = getDefaultDBCandidates();
32
+ for (const candidate of candidates) {
33
+ if (await Bun.file(candidate).exists()) {
34
+ return candidate;
35
+ }
36
+ }
37
+ return null;
38
+ }
39
+ /**
40
+ * Parse display title from session title JSON.
41
+ * OpenCode stores titles as JSON strings like: {"title":"Some Title"}
42
+ * Falls back to the raw title if parsing fails.
43
+ */
44
+ export function parseDisplayTitle(title) {
45
+ if (!title)
46
+ return '';
47
+ try {
48
+ const parsed = JSON.parse(title);
49
+ if (typeof parsed === 'object' && parsed !== null) {
50
+ if (typeof parsed.description === 'string')
51
+ return parsed.description;
52
+ if (typeof parsed.title === 'string')
53
+ return parsed.title;
54
+ if (typeof parsed.name === 'string')
55
+ return parsed.name;
56
+ }
57
+ }
58
+ catch {
59
+ // Not JSON, return as-is
60
+ }
61
+ return title;
62
+ }
63
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../../src/cmd/ai/opencode/db.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/ai/opencode/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,sCAmBlB,CAAC;AAEH,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/ai/opencode/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,OAAO,sCAiClB,CAAC;AAEH,eAAe,OAAO,CAAC"}
@@ -2,6 +2,8 @@ import { createCommand } from '../../../types';
2
2
  import { installSubcommand } from './install';
3
3
  import { uninstallSubcommand } from './uninstall';
4
4
  import { runSubcommand } from './run';
5
+ import { dashboardSubcommand } from './dashboard';
6
+ import { inspectSubcommand } from './inspect';
5
7
  import { getCommand } from '../../../command-prefix';
6
8
  export const command = createCommand({
7
9
  name: 'opencode',
@@ -20,8 +22,22 @@ export const command = createCommand({
20
22
  command: getCommand('ai opencode run "implement dark mode"'),
21
23
  description: 'Run a task with the Agentuity Coder agent team',
22
24
  },
25
+ {
26
+ command: getCommand('ai opencode dashboard'),
27
+ description: 'View Coder session dashboard',
28
+ },
29
+ {
30
+ command: getCommand('ai opencode inspect ses_abc123'),
31
+ description: 'Inspect a specific session in detail',
32
+ },
33
+ ],
34
+ subcommands: [
35
+ installSubcommand,
36
+ uninstallSubcommand,
37
+ runSubcommand,
38
+ dashboardSubcommand,
39
+ inspectSubcommand,
23
40
  ],
24
- subcommands: [installSubcommand, uninstallSubcommand, runSubcommand],
25
41
  });
26
42
  export default command;
27
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/ai/opencode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,mDAAmD;IAChE,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC;YAC1C,WAAW,EAAE,oCAAoC;SACjD;QACD;YACC,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC;YAC5C,WAAW,EAAE,sCAAsC;SACnD;QACD;YACC,OAAO,EAAE,UAAU,CAAC,uCAAuC,CAAC;YAC5D,WAAW,EAAE,gDAAgD;SAC7D;KACD;IACD,WAAW,EAAE,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,CAAC;CACpE,CAAC,CAAC;AAEH,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/ai/opencode/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,mDAAmD;IAChE,IAAI,EAAE,CAAC,MAAM,CAAC;IACd,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC;YAC1C,WAAW,EAAE,oCAAoC;SACjD;QACD;YACC,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC;YAC5C,WAAW,EAAE,sCAAsC;SACnD;QACD;YACC,OAAO,EAAE,UAAU,CAAC,uCAAuC,CAAC;YAC5D,WAAW,EAAE,gDAAgD;SAC7D;QACD;YACC,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC;YAC5C,WAAW,EAAE,8BAA8B;SAC3C;QACD;YACC,OAAO,EAAE,UAAU,CAAC,gCAAgC,CAAC;YACrD,WAAW,EAAE,sCAAsC;SACnD;KACD;IACD,WAAW,EAAE;QACZ,iBAAiB;QACjB,mBAAmB;QACnB,aAAa;QACb,mBAAmB;QACnB,iBAAiB;KACjB;CACD,CAAC,CAAC;AAEH,eAAe,OAAO,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const inspectSubcommand: import("../../..").SubcommandDefinition;
2
+ export default inspectSubcommand;
3
+ //# sourceMappingURL=inspect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../../../src/cmd/ai/opencode/inspect.ts"],"names":[],"mappings":"AAkHA,eAAO,MAAM,iBAAiB,yCA+Y5B,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,405 @@
1
+ import { Database } from 'bun:sqlite';
2
+ import { createSubcommand } from '../../../types';
3
+ import * as tui from '../../../tui';
4
+ import { getCommand } from '../../../command-prefix';
5
+ import { isJSONMode, outputJSON } from '../../../output';
6
+ import { z } from 'zod';
7
+ import { REQUIRED_TABLES, isMemoryPath, getDefaultDBCandidates, resolveOpenCodeDBPath, parseDisplayTitle, } from './db';
8
+ const InspectArgsSchema = z.object({
9
+ session: z.string().describe('Session ID to inspect'),
10
+ });
11
+ const InspectOptionsSchema = z.object({
12
+ json: z.boolean().optional().describe('Output JSON format'),
13
+ });
14
+ function toISO(epochMs) {
15
+ return new Date(epochMs).toISOString();
16
+ }
17
+ function computeSessionStatus(session, latestError, activeToolCount) {
18
+ if (session.time_archived)
19
+ return 'archived';
20
+ if (session.time_compacting)
21
+ return 'compacting';
22
+ if (latestError)
23
+ return 'error';
24
+ if (activeToolCount > 0)
25
+ return 'active';
26
+ return 'idle';
27
+ }
28
+ function formatRelativeTime(epochMs) {
29
+ const now = Date.now();
30
+ const diffMs = now - epochMs;
31
+ if (diffMs < 60 * 1000)
32
+ return 'just now';
33
+ if (diffMs < 60 * 60 * 1000) {
34
+ const minutes = Math.floor(diffMs / (60 * 1000));
35
+ return `${minutes}m ago`;
36
+ }
37
+ if (diffMs < 24 * 60 * 60 * 1000) {
38
+ const hours = Math.floor(diffMs / (60 * 60 * 1000));
39
+ return `${hours}h ago`;
40
+ }
41
+ if (diffMs < 7 * 24 * 60 * 60 * 1000) {
42
+ const days = Math.floor(diffMs / (24 * 60 * 60 * 1000));
43
+ return `${days}d ago`;
44
+ }
45
+ const date = new Date(epochMs);
46
+ const yyyy = date.getFullYear();
47
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
48
+ const dd = String(date.getDate()).padStart(2, '0');
49
+ return `${yyyy}-${mm}-${dd}`;
50
+ }
51
+ export const inspectSubcommand = createSubcommand({
52
+ name: 'inspect',
53
+ description: 'Inspect a specific session in detail',
54
+ tags: ['read-only', 'fast'],
55
+ schema: {
56
+ args: InspectArgsSchema,
57
+ options: InspectOptionsSchema,
58
+ },
59
+ examples: [
60
+ {
61
+ command: getCommand('ai opencode inspect ses_abc123'),
62
+ description: 'Inspect a specific session in detail',
63
+ },
64
+ {
65
+ command: getCommand('ai opencode inspect ses_abc123 --json'),
66
+ description: 'Inspect session as JSON',
67
+ },
68
+ ],
69
+ async handler(ctx) {
70
+ const { options, opts, args } = ctx;
71
+ const jsonMode = isJSONMode(options) || opts?.json === true;
72
+ const sessionId = args.session;
73
+ const resolvedDbPath = await resolveOpenCodeDBPath();
74
+ if (!resolvedDbPath) {
75
+ const candidates = getDefaultDBCandidates();
76
+ if (jsonMode) {
77
+ outputJSON({
78
+ error: 'db_not_found',
79
+ message: 'OpenCode database not found.',
80
+ expectedLocations: candidates,
81
+ });
82
+ }
83
+ else {
84
+ tui.newline();
85
+ tui.output(`${tui.ICONS.info} OpenCode database not found.`);
86
+ tui.newline();
87
+ tui.output('The inspect command requires OpenCode v1.2.0+ with SQLite storage.');
88
+ if (candidates.length > 0) {
89
+ tui.output('Expected locations:');
90
+ for (const path of candidates) {
91
+ tui.output(` ${tui.ICONS.bullet} ${path}`);
92
+ }
93
+ }
94
+ tui.newline();
95
+ tui.output('Tip: Set OPENCODE_DB_PATH to override the database location.');
96
+ }
97
+ return { success: false };
98
+ }
99
+ const isMemory = isMemoryPath(resolvedDbPath);
100
+ let db = null;
101
+ try {
102
+ db = new Database(resolvedDbPath, isMemory ? undefined : { readonly: true });
103
+ // Validate schema
104
+ const tableRows = db
105
+ .query("SELECT name FROM sqlite_master WHERE type = 'table'")
106
+ .all();
107
+ const foundTables = new Set(tableRows.map((row) => row.name));
108
+ for (const table of REQUIRED_TABLES) {
109
+ if (!foundTables.has(table)) {
110
+ const msg = 'OpenCode database schema is missing required tables.';
111
+ if (jsonMode) {
112
+ outputJSON({ error: 'schema', message: msg });
113
+ }
114
+ else {
115
+ tui.error(msg);
116
+ }
117
+ return { success: false };
118
+ }
119
+ }
120
+ // Query session
121
+ const session = db
122
+ .query(`SELECT id, project_id, parent_id, title, time_created, time_updated, time_compacting, time_archived
123
+ FROM session WHERE id = ?`)
124
+ .get(sessionId);
125
+ if (!session) {
126
+ const msg = `Session ${sessionId} not found in database.`;
127
+ if (jsonMode) {
128
+ outputJSON({ error: 'not_found', message: msg });
129
+ }
130
+ else {
131
+ tui.error(msg);
132
+ }
133
+ return { success: false };
134
+ }
135
+ // Query messages
136
+ const messages = db
137
+ .query(`SELECT m.id as id,
138
+ m.session_id as session_id,
139
+ CASE WHEN json_valid(m.data) THEN json_extract(m.data, '$.role') END as role,
140
+ m.time_created as time_created,
141
+ CASE WHEN json_valid(m.data) THEN json_extract(m.data, '$.agent') END as agent,
142
+ CASE WHEN json_valid(m.data) THEN json_extract(m.data, '$.model') END as model,
143
+ CASE WHEN json_valid(m.data) THEN json_extract(m.data, '$.cost') END as cost,
144
+ CASE WHEN json_valid(m.data) THEN json_extract(m.data, '$.error') END as error
145
+ FROM message m
146
+ WHERE m.session_id = ?
147
+ ORDER BY m.time_created ASC`)
148
+ .all(sessionId);
149
+ // Get latest error for status computation
150
+ const latestError = messages.length > 0 ? (messages[messages.length - 1]?.error ?? null) : null;
151
+ // Query active tools
152
+ const activeToolRows = db
153
+ .query(`SELECT json_extract(p.data, '$.tool') as tool,
154
+ json_extract(p.data, '$.state.status') as status,
155
+ COALESCE(json_extract(p.data, '$.callID'), json_extract(p.data, '$.callId')) as call_id
156
+ FROM part p
157
+ WHERE p.session_id = ?
158
+ AND json_valid(p.data)
159
+ AND json_extract(p.data, '$.type') IN ('tool-invocation', 'tool')
160
+ AND json_extract(p.data, '$.state.status') IN ('running', 'pending')`)
161
+ .all(sessionId);
162
+ const activeTools = activeToolRows.map((row) => ({
163
+ tool: row.tool ?? 'unknown',
164
+ status: row.status ?? 'unknown',
165
+ callId: row.call_id ?? null,
166
+ }));
167
+ // Query recent tool history (last 20 completed tools)
168
+ const recentToolRows = db
169
+ .query(`SELECT json_extract(p.data, '$.tool') as tool,
170
+ json_extract(p.data, '$.state.status') as status,
171
+ COALESCE(json_extract(p.data, '$.callID'), json_extract(p.data, '$.callId')) as call_id
172
+ FROM part p
173
+ WHERE p.session_id = ?
174
+ AND json_valid(p.data)
175
+ AND json_extract(p.data, '$.type') IN ('tool-invocation', 'tool')
176
+ AND json_extract(p.data, '$.state.status') NOT IN ('running', 'pending')
177
+ ORDER BY p.time_created DESC
178
+ LIMIT 20`)
179
+ .all(sessionId);
180
+ const recentTools = recentToolRows.map((row) => ({
181
+ tool: row.tool ?? 'unknown',
182
+ status: row.status ?? 'unknown',
183
+ callId: row.call_id ?? null,
184
+ }));
185
+ // Query todos
186
+ const todoRows = db
187
+ .query('SELECT content, status, priority FROM todo WHERE session_id = ? ORDER BY position')
188
+ .all(sessionId);
189
+ const todos = todoRows.map((row) => ({
190
+ content: row.content,
191
+ status: row.status,
192
+ priority: row.priority ?? undefined,
193
+ }));
194
+ // Query cost
195
+ const costRow = db
196
+ .query(`SELECT SUM(json_extract(m.data, '$.cost')) as total_cost,
197
+ SUM(
198
+ COALESCE(json_extract(m.data, '$.tokens.input'), 0) +
199
+ COALESCE(json_extract(m.data, '$.tokens.output'), 0)
200
+ ) as total_tokens,
201
+ SUM(COALESCE(json_extract(m.data, '$.tokens.input'), 0)) as input_tokens,
202
+ SUM(COALESCE(json_extract(m.data, '$.tokens.output'), 0)) as output_tokens
203
+ FROM message m
204
+ WHERE m.session_id = ?
205
+ AND json_valid(m.data)
206
+ AND json_extract(m.data, '$.cost') IS NOT NULL`)
207
+ .get(sessionId);
208
+ const cost = {
209
+ totalCost: costRow?.total_cost ?? 0,
210
+ totalTokens: costRow?.total_tokens ?? 0,
211
+ inputTokens: costRow?.input_tokens ?? 0,
212
+ outputTokens: costRow?.output_tokens ?? 0,
213
+ };
214
+ // Query child sessions
215
+ const childRows = db
216
+ .query(`SELECT id, title, parent_id, time_created, time_updated, time_compacting, time_archived
217
+ FROM session
218
+ WHERE parent_id = ?
219
+ ORDER BY time_updated DESC`)
220
+ .all(sessionId);
221
+ const status = computeSessionStatus(session, latestError, activeTools.length);
222
+ const displayTitle = parseDisplayTitle(session.title);
223
+ // Build result
224
+ const result = {
225
+ session: {
226
+ id: session.id,
227
+ title: session.title,
228
+ displayTitle,
229
+ status,
230
+ projectId: session.project_id,
231
+ parentId: session.parent_id,
232
+ timeCreated: session.time_created,
233
+ timeUpdated: session.time_updated,
234
+ timeCreatedISO: toISO(session.time_created),
235
+ timeUpdatedISO: toISO(session.time_updated),
236
+ },
237
+ cost,
238
+ messages: messages.map((m) => ({
239
+ id: m.id,
240
+ role: m.role ?? 'unknown',
241
+ agent: m.agent ?? null,
242
+ model: m.model ?? null,
243
+ cost: m.cost ?? null,
244
+ error: m.error ?? null,
245
+ timeCreated: m.time_created,
246
+ timeCreatedISO: toISO(m.time_created),
247
+ })),
248
+ activeTools,
249
+ recentTools,
250
+ todos,
251
+ children: childRows.map((child) => {
252
+ const childDisplayTitle = parseDisplayTitle(child.title);
253
+ let childStatus = 'idle';
254
+ if (child.time_archived)
255
+ childStatus = 'archived';
256
+ else if (child.time_compacting)
257
+ childStatus = 'compacting';
258
+ return {
259
+ id: child.id,
260
+ title: child.title,
261
+ displayTitle: childDisplayTitle,
262
+ status: childStatus,
263
+ timeCreated: child.time_created,
264
+ timeUpdated: child.time_updated,
265
+ timeCreatedISO: toISO(child.time_created),
266
+ timeUpdatedISO: toISO(child.time_updated),
267
+ };
268
+ }),
269
+ };
270
+ if (jsonMode) {
271
+ outputJSON(result);
272
+ return { success: true };
273
+ }
274
+ // Human-readable output
275
+ tui.newline();
276
+ tui.output(tui.bold('Session Info'));
277
+ tui.output('────────────');
278
+ tui.table([
279
+ {
280
+ Field: 'ID',
281
+ Value: result.session.id,
282
+ },
283
+ {
284
+ Field: 'Title',
285
+ Value: result.session.displayTitle || result.session.title,
286
+ },
287
+ {
288
+ Field: 'Status',
289
+ Value: result.session.status,
290
+ },
291
+ {
292
+ Field: 'Project',
293
+ Value: result.session.projectId,
294
+ },
295
+ {
296
+ Field: 'Parent',
297
+ Value: result.session.parentId ?? '(root)',
298
+ },
299
+ {
300
+ Field: 'Created',
301
+ Value: `${result.session.timeCreatedISO} (${formatRelativeTime(result.session.timeCreated)})`,
302
+ },
303
+ {
304
+ Field: 'Updated',
305
+ Value: `${result.session.timeUpdatedISO} (${formatRelativeTime(result.session.timeUpdated)})`,
306
+ },
307
+ ], ['Field', 'Value']);
308
+ tui.newline();
309
+ tui.output(tui.bold('Cost Summary'));
310
+ tui.output('────────────');
311
+ tui.table([
312
+ {
313
+ Metric: 'Total Cost',
314
+ Value: cost.totalCost > 0 ? `$${cost.totalCost.toFixed(4)}` : '$0.00',
315
+ },
316
+ { Metric: 'Total Tokens', Value: String(cost.totalTokens) },
317
+ { Metric: 'Input Tokens', Value: String(cost.inputTokens) },
318
+ { Metric: 'Output Tokens', Value: String(cost.outputTokens) },
319
+ ], ['Metric', 'Value']);
320
+ tui.newline();
321
+ tui.output(tui.bold(`Messages (${messages.length})`));
322
+ tui.output('────────────');
323
+ if (messages.length === 0) {
324
+ tui.output(tui.muted('No messages'));
325
+ }
326
+ else {
327
+ const msgRows = result.messages.map((m) => ({
328
+ Role: m.role,
329
+ Agent: m.agent ?? '',
330
+ Model: m.model ?? '',
331
+ Cost: m.cost != null ? `$${m.cost.toFixed(4)}` : '',
332
+ Error: m.error ? 'yes' : '',
333
+ Time: formatRelativeTime(m.timeCreated),
334
+ }));
335
+ tui.table(msgRows, ['Role', 'Agent', 'Model', 'Cost', 'Error', 'Time']);
336
+ }
337
+ if (activeTools.length > 0) {
338
+ tui.newline();
339
+ tui.output(tui.bold(`Active Tools (${activeTools.length})`));
340
+ tui.output('────────────');
341
+ const toolRows = activeTools.map((t) => ({
342
+ Tool: t.tool,
343
+ Status: t.status,
344
+ 'Call ID': t.callId ?? '',
345
+ }));
346
+ tui.table(toolRows, ['Tool', 'Status', 'Call ID']);
347
+ }
348
+ if (recentTools.length > 0) {
349
+ tui.newline();
350
+ tui.output(tui.bold(`Recent Tools (${recentTools.length})`));
351
+ tui.output('────────────');
352
+ const toolRows = recentTools.map((t) => ({
353
+ Tool: t.tool,
354
+ Status: t.status,
355
+ 'Call ID': t.callId ?? '',
356
+ }));
357
+ tui.table(toolRows, ['Tool', 'Status', 'Call ID']);
358
+ }
359
+ tui.newline();
360
+ tui.output(tui.bold(`Todos (${todos.length})`));
361
+ tui.output('────────────');
362
+ if (todos.length === 0) {
363
+ tui.output(tui.muted('No todos'));
364
+ }
365
+ else {
366
+ for (const todo of todos) {
367
+ const checked = todo.status === 'completed' ? 'x' : ' ';
368
+ const priorityTag = todo.priority ? ` [${todo.priority}]` : '';
369
+ tui.output(`- [${checked}]${priorityTag} ${todo.content}`);
370
+ }
371
+ }
372
+ if (result.children.length > 0) {
373
+ tui.newline();
374
+ tui.output(tui.bold(`Children (${result.children.length})`));
375
+ tui.output('────────────');
376
+ const childTableRows = result.children.map((c) => ({
377
+ ID: c.id,
378
+ Title: c.displayTitle || c.title,
379
+ Status: c.status,
380
+ Updated: formatRelativeTime(c.timeUpdated),
381
+ }));
382
+ tui.table(childTableRows, ['ID', 'Title', 'Status', 'Updated']);
383
+ }
384
+ tui.newline();
385
+ return { success: true };
386
+ }
387
+ catch (error) {
388
+ const msg = error instanceof Error ? error.message : 'Failed to inspect session.';
389
+ if (jsonMode) {
390
+ outputJSON({ error: 'query_failed', message: msg });
391
+ }
392
+ else {
393
+ tui.error(msg);
394
+ }
395
+ return { success: false };
396
+ }
397
+ finally {
398
+ if (db) {
399
+ db.close();
400
+ }
401
+ }
402
+ },
403
+ });
404
+ export default inspectSubcommand;
405
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../../src/cmd/ai/opencode/inspect.ts"],"names":[],"mappings":"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"}
@@ -1214,7 +1214,7 @@ export async function parseRoute(rootDir, filename, projectId, deploymentId, vis
1214
1214
  routeSuffix = routeSuffix.slice(subBasePath.length) || '/';
1215
1215
  }
1216
1216
  const fullPath = joinMountAndRoute(combinedBase, routeSuffix);
1217
- const id = generateRouteId(projectId, deploymentId, subRoute.type, subRoute.method, rel, fullPath, version);
1217
+ const id = generateRouteId(projectId, deploymentId, subRoute.type, subRoute.method, rel, fullPath, subRoute.version);
1218
1218
  routes.push({
1219
1219
  ...subRoute,
1220
1220
  id,