codeam-cli 2.61.75 → 2.61.77

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 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.76] — 2026-07-30
8
+
9
+ ### Added
10
+
11
+ - **shared:** Add code-naming Agent Skill (CodeAesthetic naming guidelines) (#572)
12
+
13
+ ## [2.61.75] — 2026-07-29
14
+
15
+ ### Fixed
16
+
17
+ - **cli:** Stop misclassifying house-agent 403 usage-ceiling as an auth failure (#568)
18
+
7
19
  ## [2.61.74] — 2026-07-29
8
20
 
9
21
  ### Fixed
package/dist/index.js CHANGED
@@ -1516,6 +1516,41 @@ var INTEGRATION_REGISTRY = {
1516
1516
  }
1517
1517
  }
1518
1518
  },
1519
+ convex: {
1520
+ id: "convex",
1521
+ name: "Convex",
1522
+ icon: "convex",
1523
+ category: "database",
1524
+ // LIVE — OAuth 2.0 (authorization code, Confidential). authorize
1525
+ // dashboard.convex.dev/oauth/authorize/team (the scope is the URL PATH —
1526
+ // `team` for team-wide access — NOT a query param); token
1527
+ // api.convex.dev/oauth/token (form-urlencoded, client creds in the BODY).
1528
+ // ⚠️ Convex issues NO refresh token and the team-scoped application token
1529
+ // does not expire, so there is nothing to rotate (refresh() is a re-link
1530
+ // surface). The OAuth app (Team Settings → OAuth Applications) is registered
1531
+ // and CONVEX_OAUTH_CLIENT_ID/SECRET/REDIRECT_URI are in Secret Manager
1532
+ // (prod+dev); the config-gated 503 keeps this safe mid-rollout.
1533
+ enabled: true,
1534
+ auth: {
1535
+ kind: "oauth_redirect",
1536
+ // ⚠️ Convex's scope is the authorize URL path (`/team`), NOT sent in the
1537
+ // authorize URL as a query param — this list is informational.
1538
+ scopes: []
1539
+ },
1540
+ delivery: {
1541
+ mcp: {
1542
+ // Convex's OFFICIAL MCP server ships inside the `convex` npm package
1543
+ // (`convex mcp start`). The team-scoped OAuth application token doubles
1544
+ // as the CLI/MCP deploy key → fed via CONVEX_DEPLOY_KEY (env only, never
1545
+ // argv). Version PINNED; bump only after re-verifying headless.
1546
+ command: "npx",
1547
+ args: ["-y", "convex@1.42.3", "mcp", "start"],
1548
+ envMapping: {
1549
+ CONVEX_DEPLOY_KEY: "accessToken"
1550
+ }
1551
+ }
1552
+ }
1553
+ },
1519
1554
  confluence: {
1520
1555
  id: "confluence",
1521
1556
  name: "Confluence",
@@ -1830,11 +1865,110 @@ var specDrivenDevelopmentSkill = {
1830
1865
  }
1831
1866
  };
1832
1867
 
1868
+ // ../../packages/shared/src/skills/code-naming.ts
1869
+ var CODE_NAMING_BODY = `Use this skill when NAMING or RENAMING code \u2014 variables, functions, classes,
1870
+ interfaces, types, files, modules, components, hooks, constants \u2014 while writing
1871
+ new code, refactoring, or reviewing a diff. A name should reveal intent and
1872
+ domain meaning so a reader understands the code without translating it in their
1873
+ head, and so it needs fewer comments.
1874
+
1875
+ ## The five core rules (name the concept, not the implementation)
1876
+
1877
+ 1. **Don't abbreviate, and don't use single letters for meaningful values.**
1878
+ \`usr\`/\`cfg\`/\`authReq\` \u2192 \`user\`/\`config\`/\`authRequest\`; \`u\`/\`p\` \u2192 \`user\`/\`project\`.
1879
+ Abbreviations rely on context the next reader may not have. Allowed: standard
1880
+ acronyms the domain already uses (API, URL, HTTP, ID, UUID, CLI, SDK, PR, OAuth),
1881
+ loop indices \`i\`/\`j\`, coordinates \`x\`/\`y\`, and generic type params \`T\`/\`K\`/\`V\`.
1882
+
1883
+ 2. **Don't put the data TYPE in a variable name.** \`userList\` \u2192 \`users\`,
1884
+ \`nameString\` \u2192 \`displayName\`, \`isActiveBool\` \u2192 \`isActive\`, \`invoiceMap\` \u2192
1885
+ \`invoicesById\`. The type system and editor already show the type; the name
1886
+ should carry the meaning.
1887
+
1888
+ 3. **Include the UNIT when a number has one** (unless the type makes it
1889
+ unmistakable). \`timeout\` \u2192 \`timeoutMs\`, \`delay\` \u2192 \`retryDelaySeconds\`,
1890
+ \`size\` \u2192 \`fileSizeBytes\`, \`price\` \u2192 \`priceUsd\`. Especially time, distance,
1891
+ money, bytes, rates, percentages, token/rate limits.
1892
+
1893
+ 4. **Don't put the type CONSTRUCT in a type's name.** \`UserClass\` \u2192 \`User\`,
1894
+ \`PaymentInterface\`/\`IPayment\` \u2192 \`Payment\` (or a role like \`PaymentGateway\`),
1895
+ \`ConfigType\` \u2192 \`Config\`, \`StatusEnum\` \u2192 \`Status\`. Name the concept, not
1896
+ "what kind of programming thing it is."
1897
+
1898
+ 5. **Refactor when you're reaching for \`Utils\`/\`Helpers\`/\`Common\`.** A generic
1899
+ bucket usually hides a missing concept. Group by domain instead:
1900
+ \`utils/parseCookie\` \u2192 a \`cookies/\` module or a \`CookieStore\`/\`CookieJar\` class;
1901
+ \`utils/formatDate\` \u2192 \`dates/\` or a \`DateRangeFormatter\`. Same for vague
1902
+ \`Base\`/\`Abstract\`/\`Manager\`/\`Helper\` class names \u2014 prefer the role
1903
+ (\`Repository\`, \`BillingService\`, \`UserProvisioner\`) unless the project
1904
+ convention explicitly requires \`Base\`/\`Abstract\`.
1905
+
1906
+ ## Shape rules
1907
+
1908
+ - **Functions are verbs / verb phrases:** \`createInvoice()\`, \`sendPasswordResetEmail()\`,
1909
+ \`findRepositoryById()\`. Booleans read like a question in an \`if\`:
1910
+ \`isActive\`, \`hasAccess\`, \`canDeploy\`, \`shouldRetry\` (prefix \`is/has/can/should/needs\`).
1911
+ - **Classes / interfaces / types are nouns or roles:** \`Invoice\`, \`PaymentGateway\`,
1912
+ \`AgentSession\` \u2014 not \`InvoiceData\`, \`SubscriptionThing\`, \`AgentSessionType\`.
1913
+ - **Collections are plural, or \`\u2026ById\`/\`\u2026ByX\` when indexed:** \`users\`,
1914
+ \`activeSessions\`, \`invoicesByCustomerId\`.
1915
+ - **Don't encode a temporary implementation in a name that may change:**
1916
+ \`postgresUserRepository\` \u2192 \`userRepository\`, \`redisCache\` \u2192 \`cache\` \u2014 unless the
1917
+ implementation IS the meaningful distinction. Name the role, not today's backend.
1918
+ - **Follow the project's existing conventions** (casing, file naming, \`useX\`
1919
+ hooks, \`handleX\` handlers). Match the surrounding code; don't introduce a new
1920
+ style without a strong reason.
1921
+
1922
+ ## Words to distrust (infer the real role, then name it)
1923
+
1924
+ \`data\`, \`info\`, \`item\`, \`obj\`, \`temp\`, \`result\`, \`value\`, \`thing\`, \`stuff\`,
1925
+ \`manager\`, \`helper\`, \`utils\`, \`common\`, \`base\`, \`abstract\`, \`processor\`,
1926
+ \`handler\`, \`payload\`. They're acceptable only when the surrounding context makes
1927
+ them precise (e.g. \`config\` inside one \`DatabaseConnection\`); vague when passed
1928
+ across many layers.
1929
+
1930
+ ## Guardrails \u2014 this is a review/refactor guide, NOT a mass-rename mandate
1931
+
1932
+ - Names that are already clear and idiomatic are DONE \u2014 leave them.
1933
+ - Before renaming: read how the identifier is used and infer the real domain
1934
+ concept. Prefer the **smallest** clear rename.
1935
+ - Do NOT do large unrelated renames, and do NOT rename purely for personal
1936
+ preference. Stay inside the change you were asked to make.
1937
+ - Preserve public API / exported names unless the task explicitly allows a break;
1938
+ when you do rename, update every reference, tests, and docs in the same change.
1939
+ - No clever names, jokes, or metaphors in production code; don't make names
1940
+ needlessly long either.
1941
+
1942
+ When reviewing, raise a naming issue only when a clearer name would materially
1943
+ help a reader \u2014 one suggestion per finding: \`current \u2192 suggested \u2014 why\`.`;
1944
+ var CODE_NAMING_INSTRUCTION = `When naming or renaming code, name the domain concept, not the implementation:
1945
+ no abbreviations or single-letter names for meaningful values (standard acronyms
1946
+ like API/URL/ID/OAuth are fine); don't put the data type in a variable name
1947
+ (userList \u2192 users); include the unit when a number has one (timeout \u2192 timeoutMs);
1948
+ don't put the type construct in a type's name (IPayment \u2192 Payment); and refactor
1949
+ generic Utils/Helper/Manager/Base buckets into a domain module or a role-named
1950
+ class. Functions are verbs (createInvoice), booleans read like questions
1951
+ (isActive/hasAccess), classes/types are nouns/roles, collections are plural or
1952
+ \u2026ById. This is a review/refactor guide, not a mandate to mass-rename: leave
1953
+ already-clear names alone, prefer the smallest clear rename, don't rename
1954
+ unrelated code, and preserve public/exported names unless the task allows a break.`;
1955
+ var codeNamingSkill = {
1956
+ id: "code-naming",
1957
+ name: "Code Naming",
1958
+ description: `Naming review & refactor: name the domain concept, not the implementation \u2014 no abbreviations, no type-in-name, units when they matter, no Utils/Manager/Base buckets; rename minimally, never mass-rename.`,
1959
+ source: "curated",
1960
+ delivery: {
1961
+ skillFile: { body: CODE_NAMING_BODY },
1962
+ instruction: { body: CODE_NAMING_INSTRUCTION }
1963
+ }
1964
+ };
1965
+
1833
1966
  // ../../packages/shared/src/skills/registry.ts
1834
1967
  var SKILL_REGISTRY = {
1835
1968
  "code-review": codeReviewSkill,
1836
1969
  "resolve-conflicts": resolveConflictsSkill,
1837
- "spec-driven-development": specDrivenDevelopmentSkill
1970
+ "spec-driven-development": specDrivenDevelopmentSkill,
1971
+ "code-naming": codeNamingSkill
1838
1972
  };
1839
1973
  function isSkillId(id) {
1840
1974
  return Object.prototype.hasOwnProperty.call(SKILL_REGISTRY, id);
@@ -7074,7 +7208,7 @@ function readAnonId() {
7074
7208
  }
7075
7209
  function superProperties() {
7076
7210
  return {
7077
- cliVersion: true ? "2.61.75" : "0.0.0-dev",
7211
+ cliVersion: true ? "2.61.77" : "0.0.0-dev",
7078
7212
  nodeVersion: process.version,
7079
7213
  platform: process.platform,
7080
7214
  arch: process.arch,
@@ -7255,7 +7389,7 @@ var os4 = __toESM(require("os"));
7255
7389
  // package.json
7256
7390
  var package_default = {
7257
7391
  name: "codeam-cli",
7258
- version: "2.61.75",
7392
+ version: "2.61.77",
7259
7393
  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.",
7260
7394
  type: "commonjs",
7261
7395
  main: "dist/index.js",
@@ -8487,7 +8621,7 @@ var CommandRelayService = class _CommandRelayService {
8487
8621
  // fresh + clear the "CLI update available" banner after a self-update
8488
8622
  // (a codespace that reinstalls @latest reconnects via heartbeat, not
8489
8623
  // pair/reconnect). Older backends ignore the extra field.
8490
- ..."2.61.75" ? { ideVersion: "2.61.75" } : {}
8624
+ ..."2.61.77" ? { ideVersion: "2.61.77" } : {}
8491
8625
  }).then(() => log.trace("relay", `heartbeat ok online=${online}`)).catch((err) => log.trace("relay", `heartbeat failed online=${online}`, err));
8492
8626
  }
8493
8627
  /**
@@ -19601,7 +19735,7 @@ async function autoUpgradeBeforeCriticalCommand() {
19601
19735
  if (process.env.NODE_ENV === "test") return;
19602
19736
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
19603
19737
  if (process.env.CI) return;
19604
- const current = true ? "2.61.75" : null;
19738
+ const current = true ? "2.61.77" : null;
19605
19739
  if (!current) return;
19606
19740
  const cache = readCache();
19607
19741
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -19618,7 +19752,7 @@ function checkForUpdates() {
19618
19752
  if (process.env.CODEAM_DISABLE_UPDATE_CHECK === "1") return;
19619
19753
  if (process.env.CI) return;
19620
19754
  if (!process.stdout.isTTY) return;
19621
- const current = true ? "2.61.75" : null;
19755
+ const current = true ? "2.61.77" : null;
19622
19756
  if (!current) return;
19623
19757
  const cache = readCache();
19624
19758
  const fresh = cache && Date.now() - cache.fetchedAt < TTL_MS;
@@ -19638,7 +19772,7 @@ var SELF_UPDATE_INTERVAL_MS = 60 * 60 * 1e3;
19638
19772
  var SELF_UPDATE_VIEW_TIMEOUT_MS = 3e4;
19639
19773
  var SELF_UPDATE_INSTALL_TIMEOUT_MS = 18e4;
19640
19774
  function currentCliVersion() {
19641
- return true ? "2.61.75" : null;
19775
+ return true ? "2.61.77" : null;
19642
19776
  }
19643
19777
  function runCmd(cmd, args2, timeoutMs) {
19644
19778
  return new Promise((resolve9) => {
@@ -40121,7 +40255,7 @@ function checkChokidar() {
40121
40255
  }
40122
40256
  async function doctor(args2 = []) {
40123
40257
  const json = args2.includes("--json");
40124
- const cliVersion = true ? "2.61.75" : "0.0.0-dev";
40258
+ const cliVersion = true ? "2.61.77" : "0.0.0-dev";
40125
40259
  const apiBase2 = resolveApiBaseUrl();
40126
40260
  const diagnosticId = (0, import_node_crypto13.randomUUID)();
40127
40261
  log.info("doctor", `run id=${diagnosticId} cli=${cliVersion}`);
@@ -40643,7 +40777,7 @@ async function mcpRun(args2) {
40643
40777
  // src/commands/version.ts
40644
40778
  var import_picocolors15 = __toESM(require("picocolors"));
40645
40779
  function version2() {
40646
- const v = true ? "2.61.75" : "unknown";
40780
+ const v = true ? "2.61.77" : "unknown";
40647
40781
  console.log(`${import_picocolors15.default.bold("codeam-cli")} ${import_picocolors15.default.cyan(v)}`);
40648
40782
  }
40649
40783
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeam-cli",
3
- "version": "2.61.75",
3
+ "version": "2.61.77",
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",