codeam-cli 2.23.32 → 2.23.33
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/CHANGELOG.md +7 -0
- package/dist/index.js +71 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,13 @@ All notable changes to `codeam-cli` are documented here.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [2.23.32] — 2026-05-31
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **shared:** Add CommitEntry + BlameLine wire types for git enrichment
|
|
12
|
+
- **cli:** Capture git log + blame per changed file at turn end
|
|
13
|
+
|
|
7
14
|
## [2.23.31] — 2026-05-30
|
|
8
15
|
|
|
9
16
|
### Fixed
|
package/dist/index.js
CHANGED
|
@@ -441,7 +441,7 @@ var import_qrcode_terminal = __toESM(require("qrcode-terminal"));
|
|
|
441
441
|
// package.json
|
|
442
442
|
var package_default = {
|
|
443
443
|
name: "codeam-cli",
|
|
444
|
-
version: "2.23.
|
|
444
|
+
version: "2.23.33",
|
|
445
445
|
description: "Workflow-continuity bridge for AI coding agents. Wrap Claude Code or Codex in a PTY and supervise, approve, and redirect the session from any device \u2014 async. The terminal companion for CodeAgent Mobile.",
|
|
446
446
|
type: "commonjs",
|
|
447
447
|
main: "dist/index.js",
|
|
@@ -5774,7 +5774,7 @@ function readAnonId() {
|
|
|
5774
5774
|
}
|
|
5775
5775
|
function superProperties() {
|
|
5776
5776
|
return {
|
|
5777
|
-
cliVersion: true ? "2.23.
|
|
5777
|
+
cliVersion: true ? "2.23.33" : "0.0.0-dev",
|
|
5778
5778
|
nodeVersion: process.version,
|
|
5779
5779
|
platform: process.platform,
|
|
5780
5780
|
arch: process.arch,
|
|
@@ -12825,6 +12825,8 @@ function _post2(url, headers, payload) {
|
|
|
12825
12825
|
// src/services/file-watcher.service.ts
|
|
12826
12826
|
var API_BASE5 = resolveApiBaseUrl();
|
|
12827
12827
|
var DEBOUNCE_MS = 250;
|
|
12828
|
+
var COALESCE_WINDOW_MS = 250;
|
|
12829
|
+
var COALESCE_MAX_HOLD_MS = 2e3;
|
|
12828
12830
|
var MAX_RETRIES = 2;
|
|
12829
12831
|
var RETRY_BACKOFF_MS = 300;
|
|
12830
12832
|
var HISTORY_MAX_COMMITS = 50;
|
|
@@ -12908,6 +12910,17 @@ var FileWatcherService = class {
|
|
|
12908
12910
|
*/
|
|
12909
12911
|
gitRootByDir = /* @__PURE__ */ new Map();
|
|
12910
12912
|
stopped = false;
|
|
12913
|
+
/**
|
|
12914
|
+
* Cross-file coalescing buffer. Keyed by absPath so multiple
|
|
12915
|
+
* scheduled emits for the same file collapse to the latest
|
|
12916
|
+
* `changeType`. The buffer drains via `coalesceTimer` after
|
|
12917
|
+
* `COALESCE_WINDOW_MS` of quiescence, or forcibly after
|
|
12918
|
+
* `COALESCE_MAX_HOLD_MS` so the UI never starves during a long
|
|
12919
|
+
* continuous edit.
|
|
12920
|
+
*/
|
|
12921
|
+
coalesceBuffer = /* @__PURE__ */ new Map();
|
|
12922
|
+
coalesceTimer = null;
|
|
12923
|
+
coalesceMaxHoldTimer = null;
|
|
12911
12924
|
/**
|
|
12912
12925
|
* Start watching `opts.workingDir`. Idempotent (second call is a
|
|
12913
12926
|
* no-op). Resolves once chokidar's initial scan completes; that
|
|
@@ -13009,6 +13022,15 @@ var FileWatcherService = class {
|
|
|
13009
13022
|
clearTimeout(entry.timer);
|
|
13010
13023
|
}
|
|
13011
13024
|
this.pending.clear();
|
|
13025
|
+
if (this.coalesceTimer) {
|
|
13026
|
+
clearTimeout(this.coalesceTimer);
|
|
13027
|
+
this.coalesceTimer = null;
|
|
13028
|
+
}
|
|
13029
|
+
if (this.coalesceMaxHoldTimer) {
|
|
13030
|
+
clearTimeout(this.coalesceMaxHoldTimer);
|
|
13031
|
+
this.coalesceMaxHoldTimer = null;
|
|
13032
|
+
}
|
|
13033
|
+
this.coalesceBuffer.clear();
|
|
13012
13034
|
if (this.watcher) {
|
|
13013
13035
|
try {
|
|
13014
13036
|
await this.watcher.close();
|
|
@@ -13036,7 +13058,7 @@ var FileWatcherService = class {
|
|
|
13036
13058
|
if (existing) clearTimeout(existing.timer);
|
|
13037
13059
|
const timer = setTimeout(() => {
|
|
13038
13060
|
this.pending.delete(absPath);
|
|
13039
|
-
|
|
13061
|
+
this.enqueueForCoalesce(absPath, changeType);
|
|
13040
13062
|
}, DEBOUNCE_MS);
|
|
13041
13063
|
this.pending.set(absPath, {
|
|
13042
13064
|
lastEventAt: Date.now(),
|
|
@@ -13044,6 +13066,49 @@ var FileWatcherService = class {
|
|
|
13044
13066
|
changeType
|
|
13045
13067
|
});
|
|
13046
13068
|
}
|
|
13069
|
+
/**
|
|
13070
|
+
* Drop the file into the cross-file coalescing buffer. The buffer
|
|
13071
|
+
* flushes after `COALESCE_WINDOW_MS` of quiescence (resets on each
|
|
13072
|
+
* new enqueue) or after `COALESCE_MAX_HOLD_MS` regardless. Same
|
|
13073
|
+
* file enqueued twice in a row keeps only the latest `changeType`
|
|
13074
|
+
* (typically the most recent FS event wins).
|
|
13075
|
+
*/
|
|
13076
|
+
enqueueForCoalesce(absPath, changeType) {
|
|
13077
|
+
if (this.stopped) return;
|
|
13078
|
+
this.coalesceBuffer.set(absPath, { absPath, changeType });
|
|
13079
|
+
if (this.coalesceTimer) clearTimeout(this.coalesceTimer);
|
|
13080
|
+
this.coalesceTimer = setTimeout(() => {
|
|
13081
|
+
void this.flushCoalesceBuffer();
|
|
13082
|
+
}, COALESCE_WINDOW_MS);
|
|
13083
|
+
if (!this.coalesceMaxHoldTimer) {
|
|
13084
|
+
this.coalesceMaxHoldTimer = setTimeout(() => {
|
|
13085
|
+
void this.flushCoalesceBuffer();
|
|
13086
|
+
}, COALESCE_MAX_HOLD_MS);
|
|
13087
|
+
}
|
|
13088
|
+
}
|
|
13089
|
+
/**
|
|
13090
|
+
* Drain the coalesce buffer. Snapshots the entries up-front so any
|
|
13091
|
+
* emissions that arrive mid-flush (chokidar fires again, agent
|
|
13092
|
+
* keeps writing) land in a fresh buffer rather than competing with
|
|
13093
|
+
* the in-flight one.
|
|
13094
|
+
*/
|
|
13095
|
+
async flushCoalesceBuffer() {
|
|
13096
|
+
if (this.coalesceTimer) {
|
|
13097
|
+
clearTimeout(this.coalesceTimer);
|
|
13098
|
+
this.coalesceTimer = null;
|
|
13099
|
+
}
|
|
13100
|
+
if (this.coalesceMaxHoldTimer) {
|
|
13101
|
+
clearTimeout(this.coalesceMaxHoldTimer);
|
|
13102
|
+
this.coalesceMaxHoldTimer = null;
|
|
13103
|
+
}
|
|
13104
|
+
if (this.coalesceBuffer.size === 0) return;
|
|
13105
|
+
const entries = Array.from(this.coalesceBuffer.values());
|
|
13106
|
+
this.coalesceBuffer.clear();
|
|
13107
|
+
for (const entry of entries) {
|
|
13108
|
+
if (this.stopped) return;
|
|
13109
|
+
await this.emitForFile(entry.absPath, entry.changeType);
|
|
13110
|
+
}
|
|
13111
|
+
}
|
|
13047
13112
|
/**
|
|
13048
13113
|
* Visible for tests — lets vitest pump a synthetic file event
|
|
13049
13114
|
* through the debounce + diff + emit pipeline without spinning up
|
|
@@ -19106,7 +19171,7 @@ function checkChokidar() {
|
|
|
19106
19171
|
}
|
|
19107
19172
|
async function doctor(args2 = []) {
|
|
19108
19173
|
const json = args2.includes("--json");
|
|
19109
|
-
const cliVersion = true ? "2.23.
|
|
19174
|
+
const cliVersion = true ? "2.23.33" : "0.0.0-dev";
|
|
19110
19175
|
const apiBase = resolveApiBaseUrl();
|
|
19111
19176
|
const diagnosticId = (0, import_node_crypto6.randomUUID)();
|
|
19112
19177
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -19305,7 +19370,7 @@ async function completion(args2) {
|
|
|
19305
19370
|
// src/commands/version.ts
|
|
19306
19371
|
var import_picocolors13 = __toESM(require("picocolors"));
|
|
19307
19372
|
function version2() {
|
|
19308
|
-
const v = true ? "2.23.
|
|
19373
|
+
const v = true ? "2.23.33" : "unknown";
|
|
19309
19374
|
console.log(`${import_picocolors13.default.bold("codeam-cli")} ${import_picocolors13.default.cyan(v)}`);
|
|
19310
19375
|
}
|
|
19311
19376
|
|
|
@@ -19533,7 +19598,7 @@ function checkForUpdates() {
|
|
|
19533
19598
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
19534
19599
|
if (process.env.CI) return;
|
|
19535
19600
|
if (!process.stdout.isTTY) return;
|
|
19536
|
-
const current = true ? "2.23.
|
|
19601
|
+
const current = true ? "2.23.33" : null;
|
|
19537
19602
|
if (!current) return;
|
|
19538
19603
|
const cache = readCache();
|
|
19539
19604
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.23.
|
|
3
|
+
"version": "2.23.33",
|
|
4
4
|
"description": "Workflow-continuity bridge for AI coding agents. Wrap Claude Code or Codex in a PTY and supervise, approve, and redirect the session from any device — async. The terminal companion for CodeAgent Mobile.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/index.js",
|