@rubytech/taskmaster 1.9.3 → 1.9.4

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.
@@ -134,7 +134,9 @@ function mergeAuthProfileStores(base, override) {
134
134
  !override.usageStats) {
135
135
  return base;
136
136
  }
137
- // Merge profiles, preferring the fresher credential for OAuth/token types
137
+ // Merge profiles, preferring the fresher credential for OAuth/token types.
138
+ // For api_key profiles, prefer base (main store) — centralized API key
139
+ // management writes there, and agent stores only have inherited copies.
138
140
  const mergedProfiles = { ...base.profiles };
139
141
  for (const [profileId, overrideCred] of Object.entries(override.profiles)) {
140
142
  const baseCred = base.profiles[profileId];
@@ -142,8 +144,14 @@ function mergeAuthProfileStores(base, override) {
142
144
  // No conflict — use override
143
145
  mergedProfiles[profileId] = overrideCred;
144
146
  }
147
+ else if (baseCred.type === "api_key" && overrideCred.type === "api_key") {
148
+ // API keys: base (main store) is authoritative — applyApiKeys() writes
149
+ // the centralized key there. Agent stores only have stale inherited
150
+ // copies. Always prefer base so key updates propagate immediately.
151
+ // (keep base — already in mergedProfiles)
152
+ }
145
153
  else {
146
- // Both have this profile — prefer the one with later expiry (fresher token)
154
+ // OAuth/token: prefer the one with later expiry (fresher token)
147
155
  const baseExpiry = getCredentialExpiry(baseCred);
148
156
  const overrideExpiry = getCredentialExpiry(overrideCred);
149
157
  if (overrideExpiry >= baseExpiry) {
@@ -1,11 +1,11 @@
1
1
  import { createSubsystemLogger } from "../../logging/subsystem.js";
2
2
  import { fetchWithTimeout, normalizeBaseUrl, readErrorResponse, } from "../../media-understanding/providers/shared.js";
3
3
  const log = createSubsystemLogger("image-gen");
4
- /** Show first 4 and last 4 characters of a key, mask everything in between. */
4
+ /** Show first 8 and last 4 characters of a key, mask everything in between. */
5
5
  function maskKey(key) {
6
- if (key.length <= 12)
6
+ if (key.length <= 16)
7
7
  return `${key.slice(0, 4)}...`;
8
- return `${key.slice(0, 4)}...${key.slice(-4)}`;
8
+ return `${key.slice(0, 8)}...${key.slice(-4)}`;
9
9
  }
10
10
  /* ------------------------------------------------------------------ */
11
11
  /* Constants */
@@ -10,11 +10,11 @@ const log = createSubsystemLogger("image-gen");
10
10
  /* ------------------------------------------------------------------ */
11
11
  /* Helpers */
12
12
  /* ------------------------------------------------------------------ */
13
- /** Show first 4 and last 4 characters of a key, mask everything in between. */
13
+ /** Show first 8 and last 4 characters of a key, mask everything in between. */
14
14
  function maskKey(key) {
15
- if (key.length <= 12)
15
+ if (key.length <= 16)
16
16
  return `${key.slice(0, 4)}...`;
17
- return `${key.slice(0, 4)}...${key.slice(-4)}`;
17
+ return `${key.slice(0, 8)}...${key.slice(-4)}`;
18
18
  }
19
19
  /* ------------------------------------------------------------------ */
20
20
  /* Constants */
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.9.3",
3
- "commit": "65d408bbe013355d2df19762fe1a745a98c3584e",
4
- "builtAt": "2026-02-27T07:59:49.321Z"
2
+ "version": "1.9.4",
3
+ "commit": "e9bf5d4257f77aff7d7c7c4e63905bd36b515877",
4
+ "builtAt": "2026-02-27T08:18:37.555Z"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/taskmaster",
3
- "version": "1.9.3",
3
+ "version": "1.9.4",
4
4
  "description": "AI-powered business assistant for small businesses",
5
5
  "publishConfig": {
6
6
  "access": "public"