codeam-cli 2.61.45 → 2.61.47
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 +12 -0
- package/dist/index.js +108 -13
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ 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.61.46] — 2026-07-26
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **shared,cli:** Datadog integration + httpUrl templating (2 keys + regional site)
|
|
12
|
+
|
|
13
|
+
## [2.61.45] — 2026-07-26
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- **shared,cli:** PostHog integration + mcp-shim HTTP transport
|
|
18
|
+
|
|
7
19
|
## [2.61.44] — 2026-07-25
|
|
8
20
|
|
|
9
21
|
### Added
|
package/dist/index.js
CHANGED
|
@@ -93,15 +93,19 @@ var require_src = __commonJS({
|
|
|
93
93
|
var http_relay_exports = {};
|
|
94
94
|
__export(http_relay_exports, {
|
|
95
95
|
buildHttpHeaders: () => buildHttpHeaders,
|
|
96
|
+
fillTemplate: () => fillTemplate,
|
|
96
97
|
runHttpRelay: () => runHttpRelay
|
|
97
98
|
});
|
|
99
|
+
function fillTemplate(template, token) {
|
|
100
|
+
return template.replace(/\{(\w+)\}/g, (_m, field) => {
|
|
101
|
+
const v = token[field];
|
|
102
|
+
return typeof v === "string" ? v : "";
|
|
103
|
+
});
|
|
104
|
+
}
|
|
98
105
|
function buildHttpHeaders(httpHeaders, token) {
|
|
99
106
|
const headers = {};
|
|
100
107
|
for (const [name, template] of Object.entries(httpHeaders ?? {})) {
|
|
101
|
-
headers[name] = template
|
|
102
|
-
const v = token[field];
|
|
103
|
-
return typeof v === "string" ? v : "";
|
|
104
|
-
});
|
|
108
|
+
headers[name] = fillTemplate(template, token);
|
|
105
109
|
}
|
|
106
110
|
return headers;
|
|
107
111
|
}
|
|
@@ -110,7 +114,8 @@ async function runHttpRelay(delivery, client3, id) {
|
|
|
110
114
|
const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
|
|
111
115
|
const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
112
116
|
const token = await client3.getToken(id);
|
|
113
|
-
const
|
|
117
|
+
const url2 = new URL(fillTemplate(delivery.httpUrl, token));
|
|
118
|
+
const httpTransport = new StreamableHTTPClientTransport(url2, {
|
|
114
119
|
requestInit: { headers: buildHttpHeaders(delivery.httpHeaders, token) }
|
|
115
120
|
});
|
|
116
121
|
const stdioTransport = new StdioServerTransport();
|
|
@@ -956,6 +961,60 @@ var INTEGRATION_REGISTRY = {
|
|
|
956
961
|
}
|
|
957
962
|
}
|
|
958
963
|
},
|
|
964
|
+
datadog: {
|
|
965
|
+
id: "datadog",
|
|
966
|
+
name: "Datadog",
|
|
967
|
+
icon: "datadog",
|
|
968
|
+
category: "observability",
|
|
969
|
+
// LIVE — api_key: the user pastes a Datadog API key (org-scoped) + an
|
|
970
|
+
// Application key (user-scoped, grants the read scopes) + their regional
|
|
971
|
+
// site. Datadog's OFFICIAL hosted MCP (mcp.<site>) accepts these as headers
|
|
972
|
+
// headless (verified) — no OAuth, no GSM secret. Delivery uses the shim's
|
|
973
|
+
// HTTP transport with the site templated into the URL and both keys sent as
|
|
974
|
+
// DD-API-KEY / DD-APPLICATION-KEY headers.
|
|
975
|
+
enabled: true,
|
|
976
|
+
auth: {
|
|
977
|
+
kind: "api_key",
|
|
978
|
+
fields: [
|
|
979
|
+
{
|
|
980
|
+
key: "accessToken",
|
|
981
|
+
label: "API Key",
|
|
982
|
+
placeholder: "Datadog API key",
|
|
983
|
+
secret: true,
|
|
984
|
+
help: "Organization API key \u2014 Datadog \u2192 Organization Settings \u2192 API Keys."
|
|
985
|
+
},
|
|
986
|
+
{
|
|
987
|
+
key: "appKey",
|
|
988
|
+
label: "Application Key",
|
|
989
|
+
placeholder: "Datadog application key",
|
|
990
|
+
secret: true,
|
|
991
|
+
help: "User Application key (grants the read scopes) \u2014 Datadog \u2192 Organization Settings \u2192 Application Keys."
|
|
992
|
+
},
|
|
993
|
+
{
|
|
994
|
+
key: "host",
|
|
995
|
+
label: "Site",
|
|
996
|
+
placeholder: "datadoghq.com",
|
|
997
|
+
secret: false,
|
|
998
|
+
help: "Your Datadog site \u2014 US1: datadoghq.com \xB7 EU: datadoghq.eu \xB7 US3: us3.datadoghq.com \xB7 US5: us5.datadoghq.com \xB7 AP1: ap1.datadoghq.com."
|
|
999
|
+
}
|
|
1000
|
+
]
|
|
1001
|
+
},
|
|
1002
|
+
delivery: {
|
|
1003
|
+
mcp: {
|
|
1004
|
+
// HTTP transport — the shim relays to Datadog's hosted MCP for the
|
|
1005
|
+
// user's site, with both keys as headers. Keys stay server-side of the
|
|
1006
|
+
// shim, never on argv.
|
|
1007
|
+
command: "",
|
|
1008
|
+
args: [],
|
|
1009
|
+
envMapping: {},
|
|
1010
|
+
httpUrl: "https://mcp.{host}/api/unstable/mcp-server/mcp",
|
|
1011
|
+
httpHeaders: {
|
|
1012
|
+
"DD-API-KEY": "{accessToken}",
|
|
1013
|
+
"DD-APPLICATION-KEY": "{appKey}"
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
},
|
|
959
1018
|
notion: {
|
|
960
1019
|
id: "notion",
|
|
961
1020
|
name: "Notion",
|
|
@@ -1079,6 +1138,42 @@ var INTEGRATION_REGISTRY = {
|
|
|
1079
1138
|
}
|
|
1080
1139
|
}
|
|
1081
1140
|
}
|
|
1141
|
+
},
|
|
1142
|
+
stitch: {
|
|
1143
|
+
id: "stitch",
|
|
1144
|
+
name: "Stitch",
|
|
1145
|
+
icon: "stitch",
|
|
1146
|
+
category: "design",
|
|
1147
|
+
// LIVE — api_key: the user pastes a Stitch API key (Google Stitch →
|
|
1148
|
+
// Settings → API Key). Stitch's MCP is hosted-only (stitch.googleapis.com)
|
|
1149
|
+
// and accepts the key as the `X-Goog-Api-Key` header headless (verified) —
|
|
1150
|
+
// no OAuth, no GSM secret. Delivery uses the shim's HTTP transport.
|
|
1151
|
+
// (Stitch ALSO supports Google OAuth 2.0, but that's a follow-up — our model
|
|
1152
|
+
// is one auth kind per integration and api_key is the simple, headless path.)
|
|
1153
|
+
enabled: true,
|
|
1154
|
+
auth: {
|
|
1155
|
+
kind: "api_key",
|
|
1156
|
+
fields: [
|
|
1157
|
+
{
|
|
1158
|
+
key: "accessToken",
|
|
1159
|
+
label: "API Key",
|
|
1160
|
+
placeholder: "Stitch API key",
|
|
1161
|
+
secret: true,
|
|
1162
|
+
help: "Google Stitch \u2192 profile menu \u2192 Stitch Settings \u2192 API Key \u2192 Create Key."
|
|
1163
|
+
}
|
|
1164
|
+
]
|
|
1165
|
+
},
|
|
1166
|
+
delivery: {
|
|
1167
|
+
mcp: {
|
|
1168
|
+
// HTTP transport — the shim relays to Stitch's hosted MCP with the key
|
|
1169
|
+
// as the X-Goog-Api-Key header. Key stays server-side of the shim.
|
|
1170
|
+
command: "",
|
|
1171
|
+
args: [],
|
|
1172
|
+
envMapping: {},
|
|
1173
|
+
httpUrl: "https://stitch.googleapis.com/mcp",
|
|
1174
|
+
httpHeaders: { "X-Goog-Api-Key": "{accessToken}" }
|
|
1175
|
+
}
|
|
1176
|
+
}
|
|
1082
1177
|
}
|
|
1083
1178
|
};
|
|
1084
1179
|
function getIntegration(id) {
|
|
@@ -6524,7 +6619,7 @@ function readAnonId() {
|
|
|
6524
6619
|
}
|
|
6525
6620
|
function superProperties() {
|
|
6526
6621
|
return {
|
|
6527
|
-
cliVersion: true ? "2.61.
|
|
6622
|
+
cliVersion: true ? "2.61.47" : "0.0.0-dev",
|
|
6528
6623
|
nodeVersion: process.version,
|
|
6529
6624
|
platform: process.platform,
|
|
6530
6625
|
arch: process.arch,
|
|
@@ -6705,7 +6800,7 @@ var os4 = __toESM(require("os"));
|
|
|
6705
6800
|
// package.json
|
|
6706
6801
|
var package_default = {
|
|
6707
6802
|
name: "codeam-cli",
|
|
6708
|
-
version: "2.61.
|
|
6803
|
+
version: "2.61.47",
|
|
6709
6804
|
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.",
|
|
6710
6805
|
type: "commonjs",
|
|
6711
6806
|
main: "dist/index.js",
|
|
@@ -7877,7 +7972,7 @@ var CommandRelayService = class _CommandRelayService {
|
|
|
7877
7972
|
// fresh + clear the "CLI update available" banner after a self-update
|
|
7878
7973
|
// (a codespace that reinstalls @latest reconnects via heartbeat, not
|
|
7879
7974
|
// pair/reconnect). Older backends ignore the extra field.
|
|
7880
|
-
..."2.61.
|
|
7975
|
+
..."2.61.47" ? { ideVersion: "2.61.47" } : {}
|
|
7881
7976
|
}).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
|
|
7882
7977
|
}
|
|
7883
7978
|
/**
|
|
@@ -18862,7 +18957,7 @@ async function autoUpgradeBeforeCriticalCommand() {
|
|
|
18862
18957
|
if (process.env.NODE_ENV === "test") return;
|
|
18863
18958
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
18864
18959
|
if (process.env.CI) return;
|
|
18865
|
-
const current = true ? "2.61.
|
|
18960
|
+
const current = true ? "2.61.47" : null;
|
|
18866
18961
|
if (!current) return;
|
|
18867
18962
|
const cache = readCache();
|
|
18868
18963
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -18879,7 +18974,7 @@ function checkForUpdates() {
|
|
|
18879
18974
|
if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
|
|
18880
18975
|
if (process.env.CI) return;
|
|
18881
18976
|
if (!process.stdout.isTTY) return;
|
|
18882
|
-
const current = true ? "2.61.
|
|
18977
|
+
const current = true ? "2.61.47" : null;
|
|
18883
18978
|
if (!current) return;
|
|
18884
18979
|
const cache = readCache();
|
|
18885
18980
|
const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
|
|
@@ -18899,7 +18994,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
|
|
|
18899
18994
|
var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
|
|
18900
18995
|
var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
|
|
18901
18996
|
function currentCliVersion() {
|
|
18902
|
-
return true ? "2.61.
|
|
18997
|
+
return true ? "2.61.47" : null;
|
|
18903
18998
|
}
|
|
18904
18999
|
function runCmd(cmd, args2, timeoutMs) {
|
|
18905
19000
|
return new Promise((resolve8) => {
|
|
@@ -39025,7 +39120,7 @@ function checkChokidar() {
|
|
|
39025
39120
|
}
|
|
39026
39121
|
async function doctor(args2 = []) {
|
|
39027
39122
|
const json = args2.includes("--json");
|
|
39028
|
-
const cliVersion = true ? "2.61.
|
|
39123
|
+
const cliVersion = true ? "2.61.47" : "0.0.0-dev";
|
|
39029
39124
|
const apiBase2 = resolveApiBaseUrl();
|
|
39030
39125
|
const diagnosticId = (0, import_node_crypto13.randomUUID)();
|
|
39031
39126
|
log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
|
|
@@ -39547,7 +39642,7 @@ async function mcpRun(args2) {
|
|
|
39547
39642
|
// src/commands/version.ts
|
|
39548
39643
|
var import_picocolors15 = __toESM(require("picocolors"));
|
|
39549
39644
|
function version2() {
|
|
39550
|
-
const v = true ? "2.61.
|
|
39645
|
+
const v = true ? "2.61.47" : "unknown";
|
|
39551
39646
|
console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
|
|
39552
39647
|
}
|
|
39553
39648
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeam-cli",
|
|
3
|
-
"version": "2.61.
|
|
3
|
+
"version": "2.61.47",
|
|
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",
|