teamshare-bridge 0.2.0 → 0.2.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.
Files changed (78) hide show
  1. package/README.md +42 -13
  2. package/dist/bridge/daemon.js +56 -17
  3. package/dist/bridge/daemon.js.map +1 -1
  4. package/dist/bridge/spawn.d.ts +12 -0
  5. package/dist/bridge/spawn.js +11 -5
  6. package/dist/bridge/spawn.js.map +1 -1
  7. package/dist/cli/args.d.ts +8 -0
  8. package/dist/cli/args.js +38 -0
  9. package/dist/cli/args.js.map +1 -0
  10. package/dist/cli/commands/build.d.ts +1 -0
  11. package/dist/cli/commands/build.js +385 -0
  12. package/dist/cli/commands/build.js.map +1 -0
  13. package/dist/cli/commands/chat.d.ts +1 -0
  14. package/dist/cli/commands/chat.js +113 -0
  15. package/dist/cli/commands/chat.js.map +1 -0
  16. package/dist/cli/commands/connect.d.ts +1 -0
  17. package/dist/cli/commands/connect.js +23 -0
  18. package/dist/cli/commands/connect.js.map +1 -0
  19. package/dist/cli/commands/doc.d.ts +1 -0
  20. package/dist/cli/commands/doc.js +109 -0
  21. package/dist/cli/commands/doc.js.map +1 -0
  22. package/dist/cli/commands/harness.d.ts +10 -0
  23. package/dist/cli/commands/harness.js +93 -0
  24. package/dist/cli/commands/harness.js.map +1 -0
  25. package/dist/cli/commands/key.d.ts +2 -0
  26. package/dist/cli/commands/key.js +126 -0
  27. package/dist/cli/commands/key.js.map +1 -0
  28. package/dist/cli/commands/link.d.ts +2 -0
  29. package/dist/cli/commands/link.js +93 -0
  30. package/dist/cli/commands/link.js.map +1 -0
  31. package/dist/cli/commands/run.d.ts +1 -0
  32. package/dist/cli/commands/run.js +219 -0
  33. package/dist/cli/commands/run.js.map +1 -0
  34. package/dist/cli/commands/shared.d.ts +6 -0
  35. package/dist/cli/commands/shared.js +51 -0
  36. package/dist/cli/commands/shared.js.map +1 -0
  37. package/dist/cli/commands/skills.d.ts +1 -0
  38. package/dist/cli/commands/skills.js +29 -0
  39. package/dist/cli/commands/skills.js.map +1 -0
  40. package/dist/cli/commands/usage.d.ts +1 -0
  41. package/dist/cli/commands/usage.js +78 -0
  42. package/dist/cli/commands/usage.js.map +1 -0
  43. package/dist/cli/index.js +49 -1500
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/cli/utils.d.ts +38 -0
  46. package/dist/cli/utils.js +139 -0
  47. package/dist/cli/utils.js.map +1 -0
  48. package/dist/lib/api.d.ts +15 -2
  49. package/dist/lib/api.js +8 -4
  50. package/dist/lib/api.js.map +1 -1
  51. package/dist/lib/brief.js +19 -3
  52. package/dist/lib/brief.js.map +1 -1
  53. package/dist/lib/config.d.ts +3 -1
  54. package/dist/lib/config.js +4 -2
  55. package/dist/lib/config.js.map +1 -1
  56. package/dist/lib/harness.d.ts +1 -1
  57. package/dist/lib/harness.js +3 -2
  58. package/dist/lib/harness.js.map +1 -1
  59. package/dist/lib/llm.js +8 -7
  60. package/dist/lib/llm.js.map +1 -1
  61. package/dist/lib/models.d.ts +6 -0
  62. package/dist/lib/models.js +25 -0
  63. package/dist/lib/models.js.map +1 -1
  64. package/dist/lib/orchestrator/client.d.ts +38 -4
  65. package/dist/lib/orchestrator/client.js +390 -22
  66. package/dist/lib/orchestrator/client.js.map +1 -1
  67. package/dist/lib/orchestrator/index.d.ts +1 -1
  68. package/dist/lib/orchestrator/index.js +5 -1
  69. package/dist/lib/orchestrator/index.js.map +1 -1
  70. package/dist/lib/orchestrator/worktree.d.ts +52 -0
  71. package/dist/lib/orchestrator/worktree.js +250 -6
  72. package/dist/lib/orchestrator/worktree.js.map +1 -1
  73. package/dist/lib/skills.d.ts +2 -2
  74. package/dist/lib/skills.js +2 -1
  75. package/dist/lib/skills.js.map +1 -1
  76. package/package.json +1 -1
  77. package/skills/teamshare-auth-rbac/SKILL.md +1 -1
  78. package/skills/teamshare-orchestrator-ask/SKILL.md +63 -0
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.cmdRun = cmdRun;
37
+ /**
38
+ * `run` command: fetch task brief, work it with harness or headless LLM.
39
+ * Includes auto-resolve + force-resolve to prevent task stall.
40
+ */
41
+ const node_path_1 = require("node:path");
42
+ const node_os_1 = require("node:os");
43
+ const node_fs_1 = require("node:fs");
44
+ const api_1 = require("../../lib/api");
45
+ const brief_1 = require("../../lib/brief");
46
+ const llm_1 = require("../../lib/llm");
47
+ const lock_1 = require("../../lib/lock");
48
+ const session_stream_1 = require("../../lib/session-stream");
49
+ const config_1 = require("../../lib/config");
50
+ const utils_1 = require("../utils");
51
+ const harness_1 = require("./harness");
52
+ const shared_1 = require("./shared");
53
+ const WS_DEFAULT = process.env.TEAMSHARE_WS_URL ?? 'wss://teamshare-backend.onrender.com';
54
+ async function cmdRun(flags) {
55
+ const agentId = (0, utils_1.need)(flags, 'agent');
56
+ const apiKey = (0, utils_1.need)(flags, 'key');
57
+ let selfMode = flags.get('self') === 'true';
58
+ const noReport = flags.get('no-report') === 'true';
59
+ const api = new api_1.TeamshareApi(process.env.TEAMSHARE_API_URL, apiKey);
60
+ const settings = await (0, utils_1.fetchAgentSettings)(api, agentId, (0, utils_1.makeLog)(null));
61
+ const harness = (0, utils_1.harnessOf)(flags, settings);
62
+ const modelSpec = (0, utils_1.modelOf)(flags);
63
+ const modelResolved = (await Promise.resolve().then(() => __importStar(require('../../lib/models')))).resolveModel(modelSpec, process.env.LLM_BASE_URL);
64
+ if (modelResolved.harnessOnly && selfMode) {
65
+ console.log(`[model] "${modelSpec}" is harness-native - switching from --self to harness mode`);
66
+ selfMode = false;
67
+ }
68
+ const lock = await (0, lock_1.acquireLock)(agentId, 'task', {
69
+ taskId: flags.get('task') ?? undefined,
70
+ }, {
71
+ onWaiting: (busy) => console.log(`[lock] agent ${agentId} is busy (pid ${busy.pid}, since ${busy.startedAt}, ${busy.kind}) - waiting for it to finish...`),
72
+ });
73
+ if (!lock) {
74
+ console.error(`[lock] gave up waiting for agent ${agentId} - try again later`);
75
+ return;
76
+ }
77
+ let exitCode = 0;
78
+ let heartbeatTimer;
79
+ let claimedTaskId;
80
+ const sessionId = flags.get('session') ?? (0, session_stream_1.newSessionId)();
81
+ const stream = new session_stream_1.SessionStream({ sessionId, agentId, mode: 'run' });
82
+ const log = (0, utils_1.makeLog)(stream);
83
+ (0, utils_1.applyOpenCodeKey)(agentId, log, settings);
84
+ try {
85
+ let taskId = flags.get('task');
86
+ if (taskId && !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(taskId)) {
87
+ log(`[pickup] --task ignored (not a UUID: "${taskId}") - picking the next assigned task`, 'stderr');
88
+ taskId = undefined;
89
+ }
90
+ if (!taskId) {
91
+ const picked = await (0, shared_1.pickNextTask)(api, agentId, log);
92
+ if (!picked) {
93
+ log('[pickup] no assigned tasks to work - nothing to do');
94
+ return;
95
+ }
96
+ taskId = picked;
97
+ }
98
+ const task = await api.getTask(taskId).catch((err) => {
99
+ log(`[guard] FAILED to fetch task ${taskId}: ${err.message ?? err}`, 'stderr');
100
+ return null;
101
+ });
102
+ if (!task) {
103
+ log(`[guard] Cannot access task ${taskId} - stopping. Verify project membership.`, 'stderr');
104
+ exitCode = 1;
105
+ return;
106
+ }
107
+ stream.meta.projectId = task.projectId ?? undefined;
108
+ stream.meta.taskId = taskId;
109
+ stream.connect(WS_DEFAULT.replace(/\/$/, '') + '/agents', apiKey);
110
+ const cwd = (0, shared_1.resolveWorkingDir)(flags, task?.projectId ?? null, log);
111
+ if (!cwd) {
112
+ exitCode = 1;
113
+ return;
114
+ }
115
+ try {
116
+ const claim = await api.claimTask(taskId);
117
+ claimedTaskId = taskId;
118
+ log(`[claim] task ${taskId} claimed - lease until ${claim.claimExpiresAt}`);
119
+ }
120
+ catch (err) {
121
+ const e = err;
122
+ if (['TASK_CLAIMED_BY', 'AGENT_TASK_LOCKED', 'AGENT_UNASSIGNED_BLOCKED'].includes(e.code ?? '')) {
123
+ log(`[claim] cannot work task ${taskId}: ${e.message ?? e.code}`, 'stderr');
124
+ exitCode = 1;
125
+ return;
126
+ }
127
+ log(`[claim] warning: could not claim task ${taskId}: ${e.message ?? e.code}`, 'stderr');
128
+ }
129
+ log(`[teamshare-agent] task ${taskId} as agent ${agentId} (${selfMode ? 'headless' : harness}) in ${cwd}`);
130
+ await (0, brief_1.reportStatus)(api, agentId, 'working', taskId, sessionId);
131
+ heartbeatTimer = setInterval(() => {
132
+ void (0, brief_1.reportStatus)(api, agentId, 'working', taskId, sessionId);
133
+ }, 60_000);
134
+ const brief = await (0, brief_1.fetchTaskBrief)(api, taskId);
135
+ const briefPath = (0, node_path_1.join)((0, node_os_1.tmpdir)(), `teamshare-task-${taskId}.md`);
136
+ (0, node_fs_1.writeFileSync)(briefPath, brief, 'utf8');
137
+ log(`[brief] written to ${briefPath} (${brief.length} chars)`);
138
+ log('[brief] --- preview ---');
139
+ for (const line of brief.split('\n').slice(0, 24))
140
+ log(line);
141
+ log('[brief] --- end preview ---');
142
+ let summary = '';
143
+ if (selfMode) {
144
+ const llmApiKey = (0, utils_1.sessionLlmApiKey)(settings);
145
+ if (!llmApiKey) {
146
+ log('--self requires a provider API key (set it on the agent in TeamShare, or LLM_API_KEY env)', 'stderr');
147
+ exitCode = 1;
148
+ return;
149
+ }
150
+ log('[session] starting headless LLM loop...');
151
+ if (flags.get('ask-timeout')) {
152
+ process.env.TEAMSHARE_ASK_TIMEOUT = flags.get('ask-timeout') ?? '';
153
+ }
154
+ const endpoint = (0, utils_1.llmEndpoint)(flags, settings);
155
+ log(`[model] ${endpoint.model} @ ${endpoint.baseUrl}`);
156
+ const taskObj = await api.getTask(taskId).catch(() => null);
157
+ const result = await (0, llm_1.runLlmSession)(api, taskId, brief, {
158
+ baseUrl: endpoint.baseUrl, apiKey: llmApiKey, model: endpoint.model,
159
+ agentName: agentId, systemPrompt: (0, utils_1.systemPromptOf)(flags, settings),
160
+ temperature: (0, utils_1.temperatureOf)(flags, settings), maxTokens: (0, utils_1.maxTokensOf)(flags, settings),
161
+ continue: flags.get('continue') === 'true', agentUserId: settings.userId ?? undefined,
162
+ }, taskObj?.projectId);
163
+ summary = result.summary || `Agent run finished after ${result.iterations} iterations (${result.tokensUsed} tokens).`;
164
+ log(`[session] done: ${result.finishedBy} | ${result.iterations} iterations | ${result.tokensUsed} tokens`);
165
+ }
166
+ else {
167
+ const systemPrompt = (0, utils_1.systemPromptOf)(flags, settings);
168
+ const prompt = `Work on the TeamShare task described in ${briefPath} using the teamshare MCP tools. ` +
169
+ `Break the task down first: create concrete subtasks with create_subtask, then check each off ` +
170
+ `(update_subtask with done: true) as you complete it. ` +
171
+ (settings.userId
172
+ ? `Your TeamShare user id is ${settings.userId} - when a task or the brief asks you to assign a task to yourself, pass assigneeId "me" (resolves to your user id).\n`
173
+ : '') +
174
+ `For web research use the teamshare web_fetch MCP tool (browser-like headers + reader-proxy fallback) instead of the built-in WebFetch tool, which many sites block (403/406).\n` +
175
+ (systemPrompt ? `Follow these instructions: ${systemPrompt}\n\n` : '') +
176
+ `Keep the human informed with progress comments on the task. When done, post a detailed ` +
177
+ `summary comment (mention the subtask progress) and move the task to in_review (or resolved if you are confident).`;
178
+ exitCode = await (0, harness_1.spawnHarness)(harness, prompt, log, {
179
+ model: (0, utils_1.modelOf)(flags, settings), temperature: (0, utils_1.temperatureOf)(flags, settings),
180
+ cwd, timeoutMin: (0, utils_1.sessionTimeoutMin)(flags),
181
+ title: `TeamShare task ${taskId} (agent ${agentId})`,
182
+ agentKey: api.apiKey, apiBaseUrl: api.baseUrl,
183
+ });
184
+ summary = `Harness (${harness}) finished the session - see the task comments.`;
185
+ }
186
+ if (!noReport)
187
+ await (0, brief_1.postClosingComment)(api, taskId, summary);
188
+ // Auto-resolve if LLM didn't (prevents stall)
189
+ // Forces task to resolved so orchestrator polling triggers the git pipeline
190
+ const currentTask = await api.getTask(taskId).catch(() => null);
191
+ if (currentTask && !['resolved', 'closed'].includes(currentTask.status)) {
192
+ log(`[auto-resolve] task ${taskId} still ${currentTask.status} — resolving`);
193
+ await api.updateTask(taskId, { status: 'resolved' }).catch((err) => log(`[auto-resolve] failed: ${(0, config_1.msg)(err)}`, 'stderr'));
194
+ }
195
+ const taskFinal = await (0, brief_1.waitForTaskCompletion)(api, taskId, 15_000, 20 * 60_000, (s) => log(`[status] ${s}`));
196
+ // Safety net: force-resolve after wait if still open
197
+ if (['open', 'in_progress'].includes(taskFinal.status)) {
198
+ log(`[force-resolve] task ${taskId} still ${taskFinal.status} after wait — force resolving`);
199
+ await api.updateTask(taskId, { status: 'resolved' }).catch(() => { });
200
+ }
201
+ log(`[done] task ${taskId} final status: ${taskFinal.status}`);
202
+ await (0, brief_1.reportStatus)(api, agentId, 'online', taskId, sessionId);
203
+ }
204
+ catch (err) {
205
+ log(`[error] ${(0, config_1.msg)(err)}`, 'stderr');
206
+ exitCode = 1;
207
+ }
208
+ finally {
209
+ if (heartbeatTimer)
210
+ clearInterval(heartbeatTimer);
211
+ if (claimedTaskId) {
212
+ await api.releaseTask(claimedTaskId).catch(() => undefined);
213
+ log(`[claim] task ${claimedTaskId} released`);
214
+ }
215
+ (0, lock_1.releaseLock)(agentId);
216
+ await stream.end(exitCode);
217
+ }
218
+ }
219
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { TeamshareApi } from '../../lib/api';
2
+ import type { LogFn } from '../utils';
3
+ /** Resolve the working folder for a session (project guard). */
4
+ export declare function resolveWorkingDir(flags: Map<string, string>, projectId: string | null | undefined, log: LogFn): string | null;
5
+ /** Pick the agent's next assigned task from inbox. */
6
+ export declare function pickNextTask(api: TeamshareApi, agentId: string, log: (text: string, level?: 'stdout' | 'stderr') => void): Promise<string | null>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveWorkingDir = resolveWorkingDir;
4
+ exports.pickNextTask = pickNextTask;
5
+ /**
6
+ * Shared CLI utilities: project guard, task pickup.
7
+ */
8
+ const node_fs_1 = require("node:fs");
9
+ const config_1 = require("../../lib/config");
10
+ const DONE_STATUSES = new Set(['in_review', 'resolved', 'closed']);
11
+ const PRIORITY_RANK = { urgent: 0, high: 1, medium: 2, low: 3 };
12
+ /** Resolve the working folder for a session (project guard). */
13
+ function resolveWorkingDir(flags, projectId, log) {
14
+ const explicit = flags.get('cwd');
15
+ if (explicit) {
16
+ const abs = require('node:path').resolve(explicit);
17
+ if (!(0, node_fs_1.existsSync)(abs) || !(0, node_fs_1.statSync)(abs).isDirectory()) {
18
+ log(`[guard] --cwd is not an existing folder: ${abs}`, 'stderr');
19
+ return null;
20
+ }
21
+ log(`[guard] working folder: ${abs}`);
22
+ return abs;
23
+ }
24
+ const cwd = projectId ? (0, config_1.projectCwd)(projectId) : null;
25
+ if (!cwd) {
26
+ log(projectId
27
+ ? `[guard] BLOCKED - project ${projectId} has no linked folder.\n Link one first:\n ${(0, config_1.linkHint)(projectId)}`
28
+ : `[guard] BLOCKED - could not determine the project; no folder to work in.\n Link one first:\n teamshare-agent link --project <projectId> --path C:\\path\\to\\folder`, 'stderr');
29
+ return null;
30
+ }
31
+ log(`[guard] working folder: ${cwd}`);
32
+ return cwd;
33
+ }
34
+ /** Pick the agent's next assigned task from inbox. */
35
+ async function pickNextTask(api, agentId, log) {
36
+ const inbox = await api.inbox(agentId);
37
+ const pick = inbox.tasks
38
+ .filter((task) => !DONE_STATUSES.has(String(task.status)))
39
+ .sort((a, b) => {
40
+ const pa = PRIORITY_RANK[String(a.priority)] ?? 9;
41
+ const pb = PRIORITY_RANK[String(b.priority)] ?? 9;
42
+ if (pa !== pb)
43
+ return pa - pb;
44
+ return String(a.createdAt).localeCompare(String(b.createdAt));
45
+ })[0];
46
+ if (!pick)
47
+ return null;
48
+ log(`[pickup] picked task ${String(pick.id)}: "${String(pick.title)}" (${String(pick.priority)}, ${String(pick.status)})`);
49
+ return String(pick.id);
50
+ }
51
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/cli/commands/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function cmdSkills(action: string): Promise<void>;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cmdSkills = cmdSkills;
4
+ /**
5
+ * `skills` command: install/list/uninstall agent skills.
6
+ */
7
+ const skills_1 = require("../../lib/skills");
8
+ async function cmdSkills(action) {
9
+ if (action === 'list') {
10
+ const { available, installed, target } = (0, skills_1.listSkills)();
11
+ console.log(`Skills directory: ${target}`);
12
+ console.log(`Shipped with this bridge: ${available.join(', ') || '(none found)'}`);
13
+ console.log(`Installed: ${installed.join(', ') || '(none - run "teamshare-agent skills install")'}`);
14
+ return;
15
+ }
16
+ if (action === 'install') {
17
+ const { copied, target } = (0, skills_1.installSkills)();
18
+ console.log(`[skills] installed ${copied.join(', ') || '(nothing to copy)'} -> ${target}`);
19
+ return;
20
+ }
21
+ if (action === 'uninstall') {
22
+ const { removed, target } = (0, skills_1.uninstallSkills)();
23
+ console.log(`[skills] removed ${removed.join(', ') || '(nothing installed)'} from ${target}`);
24
+ return;
25
+ }
26
+ console.error('skills requires one of: install | list | uninstall');
27
+ process.exitCode = 2;
28
+ }
29
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":";;AAKA,8BAoBC;AAzBD;;GAEG;AACH,6CAA8E;AAEvE,KAAK,UAAU,SAAS,CAAC,MAAc;IAC5C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAA,mBAAU,GAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,6BAA6B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,CAAC,cAAc,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,+CAA+C,EAAE,CAAC,CAAC;QACrG,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,sBAAa,GAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,mBAAmB,OAAO,MAAM,EAAE,CAAC,CAAC;QAC3F,OAAO;IACT,CAAC;IACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,wBAAe,GAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,qBAAqB,SAAS,MAAM,EAAE,CAAC,CAAC;QAC9F,OAAO;IACT,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACpE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function cmdUsage(flags: Map<string, string>): Promise<void>;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.cmdUsage = cmdUsage;
37
+ /**
38
+ * `usage` command: read-only daily spend report.
39
+ */
40
+ const usage_1 = require("../../lib/usage");
41
+ async function cmdUsage(flags) {
42
+ try {
43
+ const report = (0, usage_1.runUsageReport)({
44
+ day: flags.get('day') ?? undefined,
45
+ agent: flags.get('agent') ?? undefined,
46
+ });
47
+ console.log(`Agent spend report - ${report.day} (local time)`);
48
+ console.log(`Source: ${report.dbPath} (read-only)`);
49
+ console.log(`Total: $${report.totalCost.toFixed(4)} across ${report.sessionCount} sessions`);
50
+ console.log(` your own windows : $${report.userCost.toFixed(4)}`);
51
+ console.log(` agent sessions : $${report.agentCost.toFixed(4)} (of which TeamShare $${report.teamshareCost.toFixed(4)})`);
52
+ const t = report.tokens;
53
+ console.log(`Tokens: ${t.input.toLocaleString()} in / ${t.output.toLocaleString()} out / ${t.reasoning.toLocaleString()} reasoning / ${t.cacheRead.toLocaleString()} cache-read`);
54
+ if (report.sessions.length === 0) {
55
+ console.log('No cost-bearing sessions for this day.');
56
+ return;
57
+ }
58
+ console.log('');
59
+ console.log('time dur cost src model title');
60
+ console.log('-'.repeat(120));
61
+ for (const s of report.sessions) {
62
+ const src = s.attribution === 'user' ? 'user' : s.teamshare ? 'teamshare' : 'agent';
63
+ const start = new Date(s.timeCreated).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
64
+ const end = new Date(s.timeUpdated).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
65
+ const model = `${s.providerID}/${s.model}`.slice(0, 34);
66
+ console.log(`${start}-${end} ${String(s.durationMin.toFixed(1)).padStart(5)}m ` +
67
+ `${s.cost.toFixed(4).padStart(7)} ${src.padEnd(9)} ${model.padEnd(34)} ${s.title.slice(0, 60)}`);
68
+ }
69
+ console.log('');
70
+ console.log(`Takeaway: agents cost $${report.agentCost.toFixed(4)} vs your own windows $${report.userCost.toFixed(4)} on ${report.day}.`);
71
+ }
72
+ catch (err) {
73
+ const { msg } = await Promise.resolve().then(() => __importStar(require('../../lib/config')));
74
+ console.error(`[usage] ${msg(err)}`);
75
+ process.exitCode = 1;
76
+ }
77
+ }
78
+ //# sourceMappingURL=usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usage.js","sourceRoot":"","sources":["../../../src/cli/commands/usage.ts"],"names":[],"mappings":"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"}