@rubytech/taskmaster 1.17.5 → 1.17.6

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.17.5",
3
- "commit": "a8f722442ed79fe5f1a5e64bd066bc4ef1e7a6f1",
4
- "builtAt": "2026-03-05T14:01:37.198Z"
2
+ "version": "1.17.6",
3
+ "commit": "1f22ab0820d5ef0b02e53127897859386e2454a2",
4
+ "builtAt": "2026-03-05T15:08:07.106Z"
5
5
  }
@@ -171,15 +171,16 @@ const INDIVIDUAL_CONTROL_PANEL_TOOLS = [
171
171
  "logs_read",
172
172
  ];
173
173
  /**
174
- * Ensure admin agents use `group:control-panel` instead of individual control-panel tools.
174
+ * Ensure admin agents have `group:control-panel` in their allow list.
175
175
  *
176
- * Agents set up before `group:control-panel` was introduced have individual tool
177
- * entries in their explicit allow lists and therefore miss tools added to the group
178
- * later (e.g. `logs_read`). This reconciliation replaces those individual entries
179
- * with the group reference so the agent always sees the full, current set.
176
+ * Two cases handled:
177
+ * 1. Agent has individual control-panel tool entries (pre-group setup) replace them
178
+ * with the group so tools added to the group later (e.g. `logs_read`) are visible.
179
+ * 2. Agent has `message` but no `group:control-panel` at all (predates the group being
180
+ * added to ACCOUNT_ADMIN_TOOLS) — add the group directly.
180
181
  *
181
182
  * Runs unconditionally on gateway startup. Idempotent — skips agents that already
182
- * have `group:control-panel` or have no individual control-panel tools.
183
+ * have `group:control-panel`.
183
184
  */
184
185
  export function reconcileControlPanelTools(params) {
185
186
  const config = structuredClone(params.config);
@@ -196,21 +197,25 @@ export function reconcileControlPanelTools(params) {
196
197
  // Already using the group — nothing to do
197
198
  if (allow.includes("group:control-panel"))
198
199
  continue;
199
- // Check if any individual control-panel tools are present
200
- const hasAny = INDIVIDUAL_CONTROL_PANEL_TOOLS.some((t) => allow.includes(t));
201
- if (!hasAny)
202
- continue;
203
- // Remove individual entries, add group
204
- const removed = [];
205
- for (const tool of INDIVIDUAL_CONTROL_PANEL_TOOLS) {
206
- const idx = allow.indexOf(tool);
207
- if (idx !== -1) {
208
- allow.splice(idx, 1);
209
- removed.push(tool);
200
+ const hasIndividual = INDIVIDUAL_CONTROL_PANEL_TOOLS.some((t) => allow.includes(t));
201
+ if (hasIndividual) {
202
+ // Case 1: replace individual entries with the group
203
+ const removed = [];
204
+ for (const tool of INDIVIDUAL_CONTROL_PANEL_TOOLS) {
205
+ const idx = allow.indexOf(tool);
206
+ if (idx !== -1) {
207
+ allow.splice(idx, 1);
208
+ removed.push(tool);
209
+ }
210
210
  }
211
+ allow.push("group:control-panel");
212
+ changes.push(`Replaced ${removed.join(", ")} with group:control-panel in agent "${agent.id}" tools.allow.`);
213
+ }
214
+ else if (allow.includes("message")) {
215
+ // Case 2: group entirely absent on a full admin agent — add it
216
+ allow.push("group:control-panel");
217
+ changes.push(`Added group:control-panel to agent "${agent.id ?? "<unnamed>"}" tools.allow.`);
211
218
  }
212
- allow.push("group:control-panel");
213
- changes.push(`Replaced ${removed.join(", ")} with group:control-panel in agent "${agent.id}" tools.allow.`);
214
219
  }
215
220
  return { config, changes };
216
221
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/taskmaster",
3
- "version": "1.17.5",
3
+ "version": "1.17.6",
4
4
  "description": "AI-powered business assistant for small businesses",
5
5
  "publishConfig": {
6
6
  "access": "public"