@memnexus-ai/mx-agent-cli 0.1.54 → 0.1.56
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/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +1 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +173 -4
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/sync.d.ts +18 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +89 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +2 -182
- package/dist/commands/usage.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/jsonl.d.ts +85 -0
- package/dist/lib/jsonl.d.ts.map +1 -0
- package/dist/lib/jsonl.js +302 -0
- package/dist/lib/jsonl.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA+BD,wBAAgB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAgFtD"}
|
package/dist/commands/config.js
CHANGED
|
@@ -13,6 +13,7 @@ import chalk from 'chalk';
|
|
|
13
13
|
import { loadConfig, setConfigValue, getConfigValue, deleteConfigValue } from '../lib/config.js';
|
|
14
14
|
const KNOWN_KEYS = {
|
|
15
15
|
'slack-webhook': 'Slack incoming webhook URL for pager notifications',
|
|
16
|
+
'observability-api-url': 'Observability API URL for mx-agent sync (default: http://localhost:3100)',
|
|
16
17
|
};
|
|
17
18
|
function validateKey(key) {
|
|
18
19
|
if (!KNOWN_KEYS[key]) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUjG,MAAM,UAAU,GAA2B;IACzC,eAAe,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAsVnE"}
|
package/dist/commands/start.js
CHANGED
|
@@ -64,6 +64,8 @@ export async function runStart(options) {
|
|
|
64
64
|
// ── 4. Rebase worktree onto latest origin/<baseBranch> ───────────
|
|
65
65
|
// Ensures the worktree has the latest roleguides, CLI fixes, and
|
|
66
66
|
// templates even if it was created before those commits landed.
|
|
67
|
+
// Rebase failure is blocking — a session must not start on stale state.
|
|
68
|
+
const DIVERGENCE_WARN_THRESHOLD = 20;
|
|
67
69
|
console.log(chalk.dim(` Syncing with origin/${cfg.baseBranch}...`));
|
|
68
70
|
const fetchResult = spawnSync('git', ['fetch', 'origin', cfg.baseBranch], {
|
|
69
71
|
cwd: worktreePath,
|
|
@@ -71,23 +73,190 @@ export async function runStart(options) {
|
|
|
71
73
|
encoding: 'utf-8',
|
|
72
74
|
});
|
|
73
75
|
if (fetchResult.status !== 0) {
|
|
76
|
+
// Fetch failure is non-fatal (offline / no remote) but surfaced clearly.
|
|
74
77
|
console.log(chalk.yellow(` ⚠ Could not fetch origin/${cfg.baseBranch} — starting with local state.`));
|
|
78
|
+
const fetchErr = fetchResult.stderr?.trim();
|
|
79
|
+
if (fetchErr)
|
|
80
|
+
console.log(chalk.dim(` ${fetchErr}`));
|
|
75
81
|
}
|
|
76
82
|
else {
|
|
83
|
+
// ── Divergence check ─────────────────────────────────────────
|
|
84
|
+
const behindR = spawnSync('git', ['rev-list', '--count', `HEAD..origin/${cfg.baseBranch}`], { cwd: worktreePath, stdio: 'pipe', encoding: 'utf-8' });
|
|
85
|
+
const aheadR = spawnSync('git', ['rev-list', '--count', `origin/${cfg.baseBranch}..HEAD`], { cwd: worktreePath, stdio: 'pipe', encoding: 'utf-8' });
|
|
86
|
+
const commitsBehind = parseInt(behindR.stdout.trim(), 10) || 0;
|
|
87
|
+
const commitsAhead = parseInt(aheadR.stdout.trim(), 10) || 0;
|
|
88
|
+
if (commitsBehind >= DIVERGENCE_WARN_THRESHOLD) {
|
|
89
|
+
console.log();
|
|
90
|
+
console.log(chalk.yellow(` ⚠ This branch is ${commitsBehind} commits behind origin/${cfg.baseBranch}.`));
|
|
91
|
+
if (commitsAhead > 0) {
|
|
92
|
+
console.log(chalk.yellow(` It also has ${commitsAhead} unmerged commit${commitsAhead === 1 ? '' : 's'}.`));
|
|
93
|
+
console.log(chalk.yellow(` Consider opening a PR for completed work before continuing to reduce conflict risk.`));
|
|
94
|
+
}
|
|
95
|
+
console.log();
|
|
96
|
+
}
|
|
97
|
+
// ── Auto-stash dirty worktree before rebase ─────────────────
|
|
98
|
+
const statusR = spawnSync('git', ['status', '--porcelain'], {
|
|
99
|
+
cwd: worktreePath, stdio: 'pipe', encoding: 'utf-8',
|
|
100
|
+
});
|
|
101
|
+
const hasDirtyFiles = statusR.stdout.trim().length > 0;
|
|
102
|
+
let didStash = false;
|
|
103
|
+
if (hasDirtyFiles) {
|
|
104
|
+
const stashR = spawnSync('git', ['stash', 'push', '-m', 'mx-agent-start: auto-stash before rebase'], {
|
|
105
|
+
cwd: worktreePath, stdio: 'pipe', encoding: 'utf-8',
|
|
106
|
+
});
|
|
107
|
+
if (stashR.status === 0 && !stashR.stdout.includes('No local changes')) {
|
|
108
|
+
didStash = true;
|
|
109
|
+
console.log(chalk.dim(' Stashed uncommitted changes before rebase.'));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ── Rebase with auto-skip for already-upstream commits ──────
|
|
77
113
|
const rebaseResult = spawnSync('git', ['rebase', `origin/${cfg.baseBranch}`], {
|
|
78
114
|
cwd: worktreePath,
|
|
79
115
|
stdio: 'pipe',
|
|
80
116
|
encoding: 'utf-8',
|
|
81
117
|
});
|
|
82
118
|
if (rebaseResult.status !== 0) {
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
119
|
+
// Rebase failed — try auto-skipping already-upstream commits.
|
|
120
|
+
// When a PR is squash-merged, the original branch commits still
|
|
121
|
+
// exist but their content is already on main. Git usually drops
|
|
122
|
+
// these ("patch contents already upstream") but if formatting
|
|
123
|
+
// differs slightly, it raises a conflict instead. We detect this
|
|
124
|
+
// by checking whether the conflicting commit's changes are already
|
|
125
|
+
// present in origin/main and auto-skip if so.
|
|
126
|
+
const MAX_AUTO_SKIP = 20; // safety cap
|
|
127
|
+
let skipped = 0;
|
|
128
|
+
let resolved = false;
|
|
129
|
+
for (let i = 0; i < MAX_AUTO_SKIP; i++) {
|
|
130
|
+
// Check if we're still mid-rebase
|
|
131
|
+
const rebaseHeadR = spawnSync('git', ['rev-parse', '--verify', 'REBASE_HEAD'], {
|
|
132
|
+
cwd: worktreePath, stdio: 'pipe', encoding: 'utf-8',
|
|
133
|
+
});
|
|
134
|
+
if (rebaseHeadR.status !== 0) {
|
|
135
|
+
// No longer in rebase — either resolved or something unexpected
|
|
136
|
+
resolved = true;
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
const rebaseHead = rebaseHeadR.stdout.trim();
|
|
140
|
+
// Check if this commit's patch-id matches any commit already on main.
|
|
141
|
+
// patch-id produces a content-based hash of the diff, ignoring whitespace.
|
|
142
|
+
// Uses array-form spawnSync + manual piping to avoid shell interpolation.
|
|
143
|
+
const showR = spawnSync('git', ['-C', worktreePath, 'show', rebaseHead], {
|
|
144
|
+
stdio: 'pipe',
|
|
145
|
+
});
|
|
146
|
+
const patchIdR = spawnSync('git', ['-C', worktreePath, 'patch-id', '--stable'], {
|
|
147
|
+
input: showR.stdout,
|
|
148
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
149
|
+
encoding: 'utf-8',
|
|
150
|
+
});
|
|
151
|
+
const branchPatchId = patchIdR.stdout.trim().split(/\s+/)[0] || '';
|
|
152
|
+
let isAlreadyUpstream = false;
|
|
153
|
+
if (branchPatchId) {
|
|
154
|
+
// Get patch-ids for recent main commits in one shot:
|
|
155
|
+
// `git log -100 -p` outputs all diffs, piped to `git patch-id --stable`
|
|
156
|
+
const logR = spawnSync('git', ['-C', worktreePath, 'log', '-100', '-p', `origin/${cfg.baseBranch}`], {
|
|
157
|
+
stdio: 'pipe',
|
|
158
|
+
});
|
|
159
|
+
const mainPatchR = spawnSync('git', ['-C', worktreePath, 'patch-id', '--stable'], {
|
|
160
|
+
input: logR.stdout,
|
|
161
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
162
|
+
encoding: 'utf-8',
|
|
163
|
+
});
|
|
164
|
+
const mainPatchIds = mainPatchR.stdout.trim().split('\n')
|
|
165
|
+
.map(line => line.split(/\s+/)[0])
|
|
166
|
+
.filter(Boolean);
|
|
167
|
+
isAlreadyUpstream = mainPatchIds.includes(branchPatchId);
|
|
168
|
+
}
|
|
169
|
+
if (!isAlreadyUpstream) {
|
|
170
|
+
// Also check: if we accept main's version for all conflicts,
|
|
171
|
+
// does the tree match main exactly? This catches squash-merged
|
|
172
|
+
// commits where patch-id differs due to combined squashing.
|
|
173
|
+
spawnSync('git', ['-C', worktreePath, 'checkout', '--theirs', '.'], {
|
|
174
|
+
stdio: 'pipe',
|
|
175
|
+
});
|
|
176
|
+
spawnSync('git', ['-C', worktreePath, 'add', '-A'], {
|
|
177
|
+
stdio: 'pipe',
|
|
178
|
+
});
|
|
179
|
+
const diffR = spawnSync('git', ['-C', worktreePath, 'diff', '--cached', '--stat', 'HEAD'], {
|
|
180
|
+
stdio: 'pipe', encoding: 'utf-8',
|
|
181
|
+
});
|
|
182
|
+
const diffAfterTheirs = diffR.stdout.trim();
|
|
183
|
+
if (diffAfterTheirs === '') {
|
|
184
|
+
// Tree is identical to main after accepting theirs — commit is redundant
|
|
185
|
+
isAlreadyUpstream = true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (isAlreadyUpstream) {
|
|
189
|
+
// Skip this commit — its changes are already on main
|
|
190
|
+
const skipR = spawnSync('git', ['rebase', '--skip'], {
|
|
191
|
+
cwd: worktreePath, stdio: 'pipe', encoding: 'utf-8',
|
|
192
|
+
});
|
|
193
|
+
skipped++;
|
|
194
|
+
if (skipR.status === 0) {
|
|
195
|
+
resolved = true;
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
// Skip succeeded but rebase continues with next commit — loop again
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
// Genuine conflict — not already upstream. Abort and block.
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
if (!resolved) {
|
|
205
|
+
// Genuine conflict that couldn't be auto-resolved.
|
|
206
|
+
const conflictR = spawnSync('git', ['diff', '--name-only', '--diff-filter=U'], { cwd: worktreePath, stdio: 'pipe', encoding: 'utf-8' });
|
|
207
|
+
const conflictFiles = conflictR.stdout.trim().split('\n').filter(Boolean);
|
|
208
|
+
spawnSync('git', ['rebase', '--abort'], { cwd: worktreePath, stdio: 'pipe' });
|
|
209
|
+
// Restore stash if we created one
|
|
210
|
+
if (didStash) {
|
|
211
|
+
spawnSync('git', ['stash', 'pop'], { cwd: worktreePath, stdio: 'pipe' });
|
|
212
|
+
}
|
|
213
|
+
console.error();
|
|
214
|
+
console.error(chalk.red.bold(` ✗ Rebase onto origin/${cfg.baseBranch} failed — session blocked.`));
|
|
215
|
+
console.error(chalk.dim(' ─────────────────────────────────────────────'));
|
|
216
|
+
if (conflictFiles.length > 0) {
|
|
217
|
+
console.error(chalk.red(` Conflicting files (${conflictFiles.length}):`));
|
|
218
|
+
for (const f of conflictFiles) {
|
|
219
|
+
console.error(chalk.dim(` • ${f}`));
|
|
220
|
+
}
|
|
221
|
+
console.error();
|
|
222
|
+
}
|
|
223
|
+
console.error(chalk.bold(' To resolve:'));
|
|
224
|
+
console.error(` 1. Run the rebase manually:`);
|
|
225
|
+
console.error(chalk.cyan(` git -C ${worktreePath} rebase origin/${cfg.baseBranch}`));
|
|
226
|
+
console.error(` 2. Fix each conflict, then stage the resolved files:`);
|
|
227
|
+
console.error(chalk.cyan(` git -C ${worktreePath} add <file>`));
|
|
228
|
+
console.error(` 3. Continue the rebase:`);
|
|
229
|
+
console.error(chalk.cyan(` git -C ${worktreePath} rebase --continue`));
|
|
230
|
+
console.error(` 4. Re-run:`);
|
|
231
|
+
console.error(chalk.cyan(` mx-agent start ${name}`));
|
|
232
|
+
console.error();
|
|
233
|
+
console.error(chalk.dim(` Tip: if this branch has completed work, open a PR first.`));
|
|
234
|
+
console.error(chalk.dim(` Smaller PRs merged frequently reduce conflict surface.`));
|
|
235
|
+
console.error();
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
if (skipped > 0) {
|
|
239
|
+
console.log(chalk.green(` ✓ Rebased onto origin/${cfg.baseBranch} (auto-skipped ${skipped} already-upstream commit${skipped === 1 ? '' : 's'})`));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
else if (commitsBehind > 0) {
|
|
243
|
+
console.log(chalk.green(` ✓ Rebased ${commitsBehind} commit${commitsBehind === 1 ? '' : 's'} from origin/${cfg.baseBranch}`));
|
|
87
244
|
}
|
|
88
245
|
else {
|
|
89
246
|
console.log(chalk.green(` ✓ Worktree up to date with origin/${cfg.baseBranch}`));
|
|
90
247
|
}
|
|
248
|
+
// ── Restore stashed changes ───────────────────────────────
|
|
249
|
+
if (didStash) {
|
|
250
|
+
const popR = spawnSync('git', ['stash', 'pop'], {
|
|
251
|
+
cwd: worktreePath, stdio: 'pipe', encoding: 'utf-8',
|
|
252
|
+
});
|
|
253
|
+
if (popR.status === 0) {
|
|
254
|
+
console.log(chalk.dim(' Restored stashed changes.'));
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
console.log(chalk.yellow(' ⚠ Could not restore stashed changes — run `git stash pop` manually.'));
|
|
258
|
+
}
|
|
259
|
+
}
|
|
91
260
|
}
|
|
92
261
|
console.log();
|
|
93
262
|
// ── 5. Sync Claude config from origin/<baseBranch> ────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mx-agent sync [--name <team>] [--api-url <url>]
|
|
3
|
+
*
|
|
4
|
+
* Reads local Claude session JSONL logs and ships them to the observability API.
|
|
5
|
+
* Designed to run at session end (via StopHook) to preserve data before container exits.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* mx-agent sync # sync all teams on this machine
|
|
9
|
+
* mx-agent sync --name retrieval # sync a specific team
|
|
10
|
+
* mx-agent sync --api-url http://observability.internal:3100
|
|
11
|
+
*/
|
|
12
|
+
export interface SyncOptions {
|
|
13
|
+
name?: string;
|
|
14
|
+
apiUrl?: string;
|
|
15
|
+
quiet?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare function runSync(options: SyncOptions): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAYH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EjE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mx-agent sync [--name <team>] [--api-url <url>]
|
|
3
|
+
*
|
|
4
|
+
* Reads local Claude session JSONL logs and ships them to the observability API.
|
|
5
|
+
* Designed to run at session end (via StopHook) to preserve data before container exits.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* mx-agent sync # sync all teams on this machine
|
|
9
|
+
* mx-agent sync --name retrieval # sync a specific team
|
|
10
|
+
* mx-agent sync --api-url http://observability.internal:3100
|
|
11
|
+
*/
|
|
12
|
+
import { join } from 'path';
|
|
13
|
+
import { homedir, hostname } from 'os';
|
|
14
|
+
import chalk from 'chalk';
|
|
15
|
+
import { findProjectRoot, findWorktreePath } from '../lib/worktree.js';
|
|
16
|
+
import { listTeams } from '../lib/catalog.js';
|
|
17
|
+
import { getConfigValue } from '../lib/config.js';
|
|
18
|
+
import { parseSessionRecords, pathToProjectDirName } from '../lib/jsonl.js';
|
|
19
|
+
const DEFAULT_API_URL = 'http://localhost:3100';
|
|
20
|
+
export async function runSync(options) {
|
|
21
|
+
const { name, quiet = false } = options;
|
|
22
|
+
const apiUrl = options.apiUrl
|
|
23
|
+
|| getConfigValue('observability-api-url')
|
|
24
|
+
|| DEFAULT_API_URL;
|
|
25
|
+
let projectRoot;
|
|
26
|
+
try {
|
|
27
|
+
projectRoot = findProjectRoot();
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
if (!quiet) {
|
|
31
|
+
console.error(chalk.red(`sync: ${err instanceof Error ? err.message : String(err)}`));
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const allTeams = listTeams(projectRoot);
|
|
36
|
+
const teams = name ? allTeams.filter((t) => t.slug === name) : allTeams;
|
|
37
|
+
if (teams.length === 0) {
|
|
38
|
+
if (!quiet) {
|
|
39
|
+
console.error(chalk.red(name ? `sync: team '${name}' not found` : 'sync: no teams found'));
|
|
40
|
+
}
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const projectsDir = join(homedir(), '.claude', 'projects');
|
|
44
|
+
const machine = hostname();
|
|
45
|
+
let totalSynced = 0;
|
|
46
|
+
for (const team of teams) {
|
|
47
|
+
const worktreePath = findWorktreePath(projectRoot, team.slug);
|
|
48
|
+
if (!worktreePath)
|
|
49
|
+
continue;
|
|
50
|
+
const worktreeDirName = worktreePath.split('/').pop();
|
|
51
|
+
const projectDirName = pathToProjectDirName(worktreePath);
|
|
52
|
+
const projectDir = join(projectsDir, projectDirName);
|
|
53
|
+
const sessions = parseSessionRecords(projectDir);
|
|
54
|
+
if (sessions.length === 0)
|
|
55
|
+
continue;
|
|
56
|
+
try {
|
|
57
|
+
const resp = await fetch(`${apiUrl}/v1/sessions/sync`, {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: { 'Content-Type': 'application/json' },
|
|
60
|
+
body: JSON.stringify({ team: team.slug, worktree: worktreeDirName, machine, sessions }),
|
|
61
|
+
signal: AbortSignal.timeout(10_000),
|
|
62
|
+
});
|
|
63
|
+
if (!resp.ok) {
|
|
64
|
+
if (!quiet) {
|
|
65
|
+
console.warn(chalk.yellow(`sync: ${team.slug}: HTTP ${resp.status} from ${apiUrl}`));
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const { synced } = await resp.json();
|
|
70
|
+
totalSynced += synced;
|
|
71
|
+
if (!quiet && synced > 0) {
|
|
72
|
+
console.log(chalk.green(`✓ sync: ${team.slug}: ${synced} session${synced !== 1 ? 's' : ''}`));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
// Network errors are non-fatal — the observability API may not be running
|
|
77
|
+
if (!quiet) {
|
|
78
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
79
|
+
if (!msg.includes('ECONNREFUSED') && !msg.includes('TimeoutError')) {
|
|
80
|
+
console.warn(chalk.yellow(`sync: ${team.slug}: ${msg}`));
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (!quiet && totalSynced === 0 && !name) {
|
|
86
|
+
// Silently succeed if nothing needed syncing (common case for StopHook)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/commands/usage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AA0cD,wBAAsB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkFnE"}
|
package/dist/commands/usage.js
CHANGED
|
@@ -6,55 +6,13 @@
|
|
|
6
6
|
* Subagent sessions are included in their team's totals.
|
|
7
7
|
*/
|
|
8
8
|
import { execSync } from 'child_process';
|
|
9
|
-
import { existsSync
|
|
9
|
+
import { existsSync } from 'fs';
|
|
10
10
|
import { join } from 'path';
|
|
11
11
|
import { homedir } from 'os';
|
|
12
12
|
import chalk from 'chalk';
|
|
13
13
|
import { findProjectRoot, findWorktreePath } from '../lib/worktree.js';
|
|
14
14
|
import { listTeams } from '../lib/catalog.js';
|
|
15
|
-
|
|
16
|
-
'claude-opus-4-6': { input: 5, output: 25, cacheRead: 0.50, cacheWrite: 6.25 },
|
|
17
|
-
'claude-opus-4-5': { input: 5, output: 25, cacheRead: 0.50, cacheWrite: 6.25 },
|
|
18
|
-
'claude-opus-4-1': { input: 15, output: 75, cacheRead: 1.50, cacheWrite: 18.75 },
|
|
19
|
-
'claude-sonnet-4-6': { input: 3, output: 15, cacheRead: 0.30, cacheWrite: 3.75 },
|
|
20
|
-
'claude-sonnet-4-5': { input: 3, output: 15, cacheRead: 0.30, cacheWrite: 3.75 },
|
|
21
|
-
'claude-haiku-4-5': { input: 1, output: 5, cacheRead: 0.10, cacheWrite: 1.25 },
|
|
22
|
-
};
|
|
23
|
-
/** Default rates when model is unknown — use Opus 4.6 as conservative estimate */
|
|
24
|
-
const DEFAULT_RATES = MODEL_PRICING['claude-opus-4-6'];
|
|
25
|
-
function getRates(model) {
|
|
26
|
-
return MODEL_PRICING[model] || DEFAULT_RATES;
|
|
27
|
-
}
|
|
28
|
-
function calcLineCost(input, output, cacheR, cacheW, rates) {
|
|
29
|
-
return (input / 1e6) * rates.input
|
|
30
|
-
+ (output / 1e6) * rates.output
|
|
31
|
-
+ (cacheR / 1e6) * rates.cacheRead
|
|
32
|
-
+ (cacheW / 1e6) * rates.cacheWrite;
|
|
33
|
-
}
|
|
34
|
-
function newTotals() {
|
|
35
|
-
return {
|
|
36
|
-
sessions: new Set(),
|
|
37
|
-
inputTokens: 0,
|
|
38
|
-
outputTokens: 0,
|
|
39
|
-
cacheReadTokens: 0,
|
|
40
|
-
cacheWriteTokens: 0,
|
|
41
|
-
cost: 0,
|
|
42
|
-
models: new Set(),
|
|
43
|
-
mxCalls: 0,
|
|
44
|
-
mxEstTokens: 0,
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
function addToTotals(dest, src) {
|
|
48
|
-
dest.inputTokens += src.inputTokens;
|
|
49
|
-
dest.outputTokens += src.outputTokens;
|
|
50
|
-
dest.cacheReadTokens += src.cacheReadTokens;
|
|
51
|
-
dest.cacheWriteTokens += src.cacheWriteTokens;
|
|
52
|
-
dest.cost += src.cost;
|
|
53
|
-
dest.mxCalls += src.mxCalls;
|
|
54
|
-
dest.mxEstTokens += src.mxEstTokens;
|
|
55
|
-
src.sessions.forEach((s) => dest.sessions.add(s));
|
|
56
|
-
src.models.forEach((m) => dest.models.add(m));
|
|
57
|
-
}
|
|
15
|
+
import { readProjectUsage, pathToProjectDirName, newTotals, addToTotals, } from '../lib/jsonl.js';
|
|
58
16
|
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
59
17
|
/**
|
|
60
18
|
* Parse a period string ("7d", "30d", "24h", "1w") into milliseconds.
|
|
@@ -72,17 +30,6 @@ function parsePeriodMs(period) {
|
|
|
72
30
|
default: return 30 * 24 * 60 * 60 * 1000;
|
|
73
31
|
}
|
|
74
32
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Map a worktree path to the Claude project directory name.
|
|
77
|
-
*
|
|
78
|
-
* Claude names project dirs by taking the cwd path, replacing "/" with "-"
|
|
79
|
-
* and stripping ".". For example:
|
|
80
|
-
* /workspace/.worktrees/code-context-20260223
|
|
81
|
-
* → -workspace--worktrees-code-context-20260223
|
|
82
|
-
*/
|
|
83
|
-
function pathToProjectDirName(worktreePath) {
|
|
84
|
-
return worktreePath.replace(/\//g, '-').replace(/\./g, '-');
|
|
85
|
-
}
|
|
86
33
|
/**
|
|
87
34
|
* Format a token count as a compact human-readable string.
|
|
88
35
|
*/
|
|
@@ -107,133 +54,6 @@ function fmtCost(n) {
|
|
|
107
54
|
return '<$0.01';
|
|
108
55
|
return `$${n.toFixed(2)}`;
|
|
109
56
|
}
|
|
110
|
-
// ── JSONL parsing ────────────────────────────────────────────────────────────
|
|
111
|
-
/**
|
|
112
|
-
* Collect all .jsonl file paths under a project dir, including subagents/.
|
|
113
|
-
*/
|
|
114
|
-
function collectJsonlFiles(projectDir) {
|
|
115
|
-
const files = [];
|
|
116
|
-
if (!existsSync(projectDir))
|
|
117
|
-
return files;
|
|
118
|
-
try {
|
|
119
|
-
for (const entry of readdirSync(projectDir)) {
|
|
120
|
-
const fullPath = join(projectDir, entry);
|
|
121
|
-
if (entry.endsWith('.jsonl')) {
|
|
122
|
-
files.push(fullPath);
|
|
123
|
-
}
|
|
124
|
-
else if (entry === 'subagents') {
|
|
125
|
-
try {
|
|
126
|
-
for (const sub of readdirSync(fullPath)) {
|
|
127
|
-
if (sub.endsWith('.jsonl'))
|
|
128
|
-
files.push(join(fullPath, sub));
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
catch { /* ignore */ }
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
catch { /* ignore */ }
|
|
136
|
-
return files;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Read a project dir's JSONL logs and return all-time and recent token totals.
|
|
140
|
-
*/
|
|
141
|
-
function readProjectUsage(projectDir, recentCutoffMs) {
|
|
142
|
-
const allTime = newTotals();
|
|
143
|
-
const recent = newTotals();
|
|
144
|
-
const cutoff = Date.now() - recentCutoffMs;
|
|
145
|
-
for (const filePath of collectJsonlFiles(projectDir)) {
|
|
146
|
-
let content;
|
|
147
|
-
try {
|
|
148
|
-
content = readFileSync(filePath, 'utf-8');
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
continue;
|
|
152
|
-
}
|
|
153
|
-
// Per-file map: tool_use_id → timestamp, for memnexus calls only.
|
|
154
|
-
// Populated when we see a tool_use, consumed when we see its tool_result.
|
|
155
|
-
const mxToolUseIds = new Map();
|
|
156
|
-
for (const line of content.split('\n')) {
|
|
157
|
-
if (!line.trim())
|
|
158
|
-
continue;
|
|
159
|
-
try {
|
|
160
|
-
const entry = JSON.parse(line);
|
|
161
|
-
const ts = entry?.timestamp ? new Date(entry.timestamp).getTime() : 0;
|
|
162
|
-
const role = entry?.message?.role;
|
|
163
|
-
const msgContent = entry?.message?.content;
|
|
164
|
-
// ── MemNexus tool tracking (runs regardless of usage presence) ──
|
|
165
|
-
// Covers two call paths:
|
|
166
|
-
// 1. MCP server: tool_use name starts with "mcp__memnexus__"
|
|
167
|
-
// 2. CLI via Bash: tool_use name is "Bash" and command matches
|
|
168
|
-
// `mx (memories|conversations|facts|topics)` pattern
|
|
169
|
-
if (role === 'assistant' && Array.isArray(msgContent)) {
|
|
170
|
-
for (const block of msgContent) {
|
|
171
|
-
if (block?.type !== 'tool_use' || typeof block.id !== 'string')
|
|
172
|
-
continue;
|
|
173
|
-
const toolName = typeof block.name === 'string' ? block.name : '';
|
|
174
|
-
const isMcp = toolName.startsWith('mcp__memnexus__');
|
|
175
|
-
const isCli = toolName === 'Bash' &&
|
|
176
|
-
/\bmx (memories|conversations|facts|topics)\b/.test(typeof block.input?.command === 'string' ? block.input.command : '');
|
|
177
|
-
if (isMcp || isCli) {
|
|
178
|
-
mxToolUseIds.set(block.id, ts);
|
|
179
|
-
allTime.mxCalls++;
|
|
180
|
-
if (ts >= cutoff)
|
|
181
|
-
recent.mxCalls++;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
if (role === 'user' && Array.isArray(msgContent)) {
|
|
186
|
-
for (const block of msgContent) {
|
|
187
|
-
if (block?.type === 'tool_result' &&
|
|
188
|
-
typeof block.tool_use_id === 'string' &&
|
|
189
|
-
mxToolUseIds.has(block.tool_use_id)) {
|
|
190
|
-
const origTs = mxToolUseIds.get(block.tool_use_id);
|
|
191
|
-
const estTokens = Math.round(JSON.stringify(block.content ?? '').length / 4);
|
|
192
|
-
allTime.mxEstTokens += estTokens;
|
|
193
|
-
if (origTs >= cutoff)
|
|
194
|
-
recent.mxEstTokens += estTokens;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
// ── Token usage (assistant messages with usage field only) ──────
|
|
199
|
-
const usage = entry?.message?.usage;
|
|
200
|
-
if (!usage || typeof usage !== 'object' || !('input_tokens' in usage))
|
|
201
|
-
continue;
|
|
202
|
-
const input = usage.input_tokens || 0;
|
|
203
|
-
const output = usage.output_tokens || 0;
|
|
204
|
-
const cacheR = usage.cache_read_input_tokens || 0;
|
|
205
|
-
const cacheW = usage.cache_creation_input_tokens || 0;
|
|
206
|
-
const model = entry?.message?.model || '';
|
|
207
|
-
const session = entry?.sessionId || '';
|
|
208
|
-
const lineCost = calcLineCost(input, output, cacheR, cacheW, getRates(model));
|
|
209
|
-
// All-time
|
|
210
|
-
allTime.inputTokens += input;
|
|
211
|
-
allTime.outputTokens += output;
|
|
212
|
-
allTime.cacheReadTokens += cacheR;
|
|
213
|
-
allTime.cacheWriteTokens += cacheW;
|
|
214
|
-
allTime.cost += lineCost;
|
|
215
|
-
if (session)
|
|
216
|
-
allTime.sessions.add(session);
|
|
217
|
-
if (model)
|
|
218
|
-
allTime.models.add(model);
|
|
219
|
-
// Recent window
|
|
220
|
-
if (ts >= cutoff) {
|
|
221
|
-
recent.inputTokens += input;
|
|
222
|
-
recent.outputTokens += output;
|
|
223
|
-
recent.cacheReadTokens += cacheR;
|
|
224
|
-
recent.cacheWriteTokens += cacheW;
|
|
225
|
-
recent.cost += lineCost;
|
|
226
|
-
if (session)
|
|
227
|
-
recent.sessions.add(session);
|
|
228
|
-
if (model)
|
|
229
|
-
recent.models.add(model);
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
catch { /* skip malformed line */ }
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
return { allTime, recent };
|
|
236
|
-
}
|
|
237
57
|
function totalInput(t) {
|
|
238
58
|
return t.inputTokens + t.cacheReadTokens + t.cacheWriteTokens;
|
|
239
59
|
}
|