@dataworks-technology/cli 1.4.0 → 1.4.1

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/README.md CHANGED
@@ -154,6 +154,28 @@ Dataworks plugin for each detected client and reports the reload or restart step
154
154
  If an old marketplace registration points to a different CLI installation, rerun
155
155
  with `--force`.
156
156
 
157
+ ### Keeping the plugin current
158
+
159
+ Agent clients copy the plugin into a version-pinned directory rather than reading
160
+ the installed npm package, so upgrading the CLI does not by itself update the
161
+ skill an agent loads. The MCP server does move with the CLI, because it is
162
+ launched as `dw-mcp` from `PATH` — leaving a new server driven by an older skill
163
+ until the plugin is refreshed.
164
+
165
+ Global installs and upgrades refresh it automatically: the postinstall hook runs
166
+ `dw agents install --refresh`, which updates only clients that already have
167
+ Dataworks and configures nothing new. Reload the client afterwards with
168
+ `/reload-plugins` in Claude Code, or a new Codex thread.
169
+
170
+ When that cannot run — an install with `--ignore-scripts`, or a CLI reinstalled
171
+ under a different Node version — `dw` prints a reminder at most once a day
172
+ telling you the plugin is behind, and naming both steps needed to fix it.
173
+ Refresh with `dw agents install`, adding `--force` if the marketplace still
174
+ points at the previous installation, then reload the client.
175
+
176
+ Reloading matters either way: a client already running keeps the plugin copy it
177
+ loaded at start-up, so refreshing alone changes nothing in the current session.
178
+
157
179
  Successful setup automatically disables the periodic CLI reminder. To opt out
158
180
  without installing an agent integration, run `dw agents reminder disable`.
159
181
 
@@ -17,7 +17,27 @@ if (
17
17
  "Dataworks CLI installed, but Bash autocomplete setup could not be prepared. Run `dw autocomplete bash` to retry.\n",
18
18
  );
19
19
  }
20
+
21
+ // Agent clients copy the plugin into a version-pinned directory instead of
22
+ // reading this package, so an upgrade leaves them on the previous skill while
23
+ // the MCP server moves forward with the CLI. Refresh clients that already have
24
+ // Dataworks; --refresh configures nothing new, so this cannot opt anyone in.
25
+ const refresh = spawnSync(
26
+ process.execPath,
27
+ [runPath, "agents", "install", "--refresh", "--json"],
28
+ { stdio: ["ignore", "pipe", "pipe"], encoding: "utf8" },
29
+ );
30
+ if (refresh.error || refresh.status !== 0) {
31
+ process.stderr.write(
32
+ "Dataworks CLI installed, but the agent plugin could not be refreshed automatically. Run `dw agents install` to update it.\n",
33
+ );
34
+ } else if ((refresh.stdout ?? "").includes('"status"')) {
35
+ process.stdout.write(
36
+ "Refreshed the Dataworks agent plugin. Run `/reload-plugins` in Claude Code, or start a new Codex thread.\n",
37
+ );
38
+ }
39
+
20
40
  process.stdout.write(
21
- "To use Dataworks from Codex or Claude Code, run `dw agents install` once.\n",
41
+ "To use Dataworks from Codex or Claude Code, run `dw agents install`. Rerun it after upgrading if the plugin is not refreshed automatically.\n",
22
42
  );
23
43
  }
@@ -10,6 +10,7 @@ export default class AgentsInstall extends DataworksCommand {
10
10
  };
11
11
  static flags: {
12
12
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ refresh: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
14
  json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
15
  };
15
16
  run(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/agents/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AASxD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,gBAAgB;IACzD,OAAgB,WAAW,SAC2D;IACtF,OAAgB,QAAQ;;;QAiBtB;IACF,OAAgB,IAAI;;MAMlB;IACF,OAAgB,KAAK;;;MAKnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4BlC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/agents/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAUxD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,gBAAgB;IACzD,OAAgB,WAAW,SAC2D;IACtF,OAAgB,QAAQ;;;QAqBtB;IACF,OAAgB,IAAI;;MAMlB;IACF,OAAgB,KAAK;;;;MASnB;IAEW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiClC"}
@@ -1,6 +1,6 @@
1
1
  import { Args, Flags } from "@oclif/core";
2
2
  import { DataworksCommand } from "../../lib/command.js";
3
- import { installAgentIntegration, supportedAgentClients, } from "../../lib/agent-install.js";
3
+ import { installAgentIntegration, refreshAgentIntegrations, supportedAgentClients, } from "../../lib/agent-install.js";
4
4
  import { writeResult } from "../../lib/output.js";
5
5
  import { configureAgentReminder } from "../../lib/agent-reminder.js";
6
6
  export default class AgentsInstall extends DataworksCommand {
@@ -22,6 +22,10 @@ export default class AgentsInstall extends DataworksCommand {
22
22
  description: "Replace a stale Dataworks marketplace registration",
23
23
  command: "dw agents install codex --force",
24
24
  },
25
+ {
26
+ description: "Update clients that already have Dataworks, and skip the rest",
27
+ command: "dw agents install --refresh",
28
+ },
25
29
  ];
26
30
  static args = {
27
31
  client: Args.string({
@@ -34,14 +38,19 @@ export default class AgentsInstall extends DataworksCommand {
34
38
  force: Flags.boolean({
35
39
  description: "Replace an existing Dataworks marketplace registration",
36
40
  }),
41
+ refresh: Flags.boolean({
42
+ description: "Only update clients that already have Dataworks installed; configure nothing new",
43
+ }),
37
44
  json: Flags.boolean({ description: "Emit stable JSON output" }),
38
45
  };
39
46
  async run() {
40
47
  const { args, flags } = await this.parse(AgentsInstall);
41
48
  const clients = args.client ? [args.client] : supportedAgentClients;
42
- const results = clients.map((client) => installAgentIntegration(client, { force: flags.force }));
49
+ const results = flags.refresh
50
+ ? refreshAgentIntegrations({ force: flags.force }).filter(({ client }) => clients.includes(client))
51
+ : clients.map((client) => installAgentIntegration(client, { force: flags.force }));
43
52
  if (results.some(({ status }) => status === "installed" || status === "updated")) {
44
- await configureAgentReminder("configured");
53
+ await configureAgentReminder("configured", this.config.version);
45
54
  }
46
55
  writeResult({ integrations: results }, {
47
56
  json: flags.json,
@@ -49,7 +58,8 @@ export default class AgentsInstall extends DataworksCommand {
49
58
  restartRequired: results.some(({ status }) => status === "installed" || status === "updated"),
50
59
  },
51
60
  });
52
- if (results.every(({ status }) => status === "unavailable" || status === "failed")) {
61
+ if (results.length > 0 &&
62
+ results.every(({ status }) => status === "unavailable" || status === "failed")) {
53
63
  process.exitCode = 1;
54
64
  }
55
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/agents/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,gBAAgB;IACzD,MAAM,CAAU,WAAW,GACzB,mFAAmF,CAAC;IACtF,MAAM,CAAU,QAAQ,GAAG;QACzB;YACE,WAAW,EAAE,2DAA2D;YACxE,OAAO,EAAE,mBAAmB;SAC7B;QACD;YACE,WAAW,EAAE,mBAAmB;YAChC,OAAO,EAAE,yBAAyB;SACnC;QACD;YACE,WAAW,EAAE,yBAAyB;YACtC,OAAO,EAAE,+BAA+B;SACzC;QACD;YACE,WAAW,EAAE,oDAAoD;YACjE,OAAO,EAAE,iCAAiC;SAC3C;KACF,CAAC;IACF,MAAM,CAAU,IAAI,GAAG;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;YAClB,WAAW,EAAE,8DAA8D;YAC3E,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;YACjC,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH,CAAC;IACF,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,WAAW,EAAE,wDAAwD;SACtE,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,CAAC;KAChE,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAqB,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;QACnF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACrC,uBAAuB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CACxD,CAAC;QACF,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;YACjF,MAAM,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC7C,CAAC;QAED,WAAW,CACT,EAAE,YAAY,EAAE,OAAO,EAAE,EACzB;YACE,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE;gBACJ,eAAe,EAAE,OAAO,CAAC,IAAI,CAC3B,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,SAAS,CAC/D;aACF;SACF,CACF,CAAC;QAEF,IACE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,QAAQ,CAAC,EAC9E,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/agents/install.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,11 @@ export interface AgentInstallResult {
5
5
  status: AgentInstallStatus;
6
6
  message: string;
7
7
  nextStep: string;
8
+ /**
9
+ * Set when the failure is a marketplace registration pointing somewhere else,
10
+ * so a caller can retry with force instead of matching on message text.
11
+ */
12
+ reason?: "stale-marketplace";
8
13
  }
9
14
  export interface ProcessResult {
10
15
  status: number | null;
@@ -21,4 +26,22 @@ export interface AgentInstallOptions {
21
26
  export declare const supportedAgentClients: readonly AgentClient[];
22
27
  export declare function dataworksPackageRoot(): string;
23
28
  export declare function installAgentIntegration(client: AgentClient, options?: AgentInstallOptions): AgentInstallResult;
29
+ export interface AgentIntegrationState {
30
+ client: AgentClient;
31
+ installed: boolean;
32
+ /** Plugin version the client currently has, when it reports one. */
33
+ version?: string;
34
+ }
35
+ /** Report whether a client already has the Dataworks plugin, without changing anything. */
36
+ export declare function agentIntegrationState(client: AgentClient, options?: AgentInstallOptions): AgentIntegrationState;
37
+ /**
38
+ * Reinstall the plugin for every client that already has it, and leave clients
39
+ * that never opted in untouched.
40
+ *
41
+ * Agent clients copy the plugin into a version-pinned directory rather than
42
+ * reading the npm package, so upgrading the CLI leaves them on the previous
43
+ * skill while the MCP server — resolved as `dw-mcp` on PATH — moves forward.
44
+ * The npm postinstall hook calls this so that split cannot happen silently.
45
+ */
46
+ export declare function refreshAgentIntegrations(options?: AgentInstallOptions): AgentInstallResult[];
24
47
  //# sourceMappingURL=agent-install.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-install.d.ts","sourceRoot":"","sources":["../../src/lib/agent-install.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEpF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,aAAa,CAAC;AAExF,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB;AAKD,eAAO,MAAM,qBAAqB,EAAE,SAAS,WAAW,EAA6B,CAAC;AAEtF,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AA0PD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAUpB"}
1
+ {"version":3,"file":"agent-install.d.ts","sourceRoot":"","sources":["../../src/lib/agent-install.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEpF,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,aAAa,CAAC;AAExF,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB;AAKD,eAAO,MAAM,qBAAqB,EAAE,SAAS,WAAW,EAA6B,CAAC;AAEtF,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C;AAmQD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAUpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,mBAAwB,GAChC,qBAAqB,CAcvB;AAED;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,EAAE,CAatB"}
@@ -58,13 +58,13 @@ function claudeMarketplace(payload) {
58
58
  root: entry?.path ?? entry?.installLocation,
59
59
  };
60
60
  }
61
- function pluginIsInstalled(client, payload) {
61
+ function findPluginEntry(client, payload) {
62
62
  const entries = client === "codex" && payload && typeof payload === "object"
63
63
  ? payload.installed
64
64
  : payload;
65
65
  if (!Array.isArray(entries))
66
- return false;
67
- return entries.some((entry) => {
66
+ return undefined;
67
+ return entries.find((entry) => {
68
68
  if (!entry || typeof entry !== "object")
69
69
  return false;
70
70
  const item = entry;
@@ -75,6 +75,9 @@ function pluginIsInstalled(client, payload) {
75
75
  item.marketplaceName === marketplaceName)));
76
76
  });
77
77
  }
78
+ function pluginIsInstalled(client, payload) {
79
+ return findPluginEntry(client, payload) !== undefined;
80
+ }
78
81
  function unavailable(client) {
79
82
  const binary = executable(client);
80
83
  return {
@@ -105,6 +108,7 @@ function installCodex(options) {
105
108
  return {
106
109
  client: "codex",
107
110
  status: "failed",
111
+ reason: "stale-marketplace",
108
112
  message: `The ${marketplaceName} marketplace already points to ${currentRoot}.`,
109
113
  nextStep: "Run `dw agents install codex --force` to replace the stale marketplace registration.",
110
114
  };
@@ -151,6 +155,7 @@ function installClaudeCode(options) {
151
155
  return {
152
156
  client: "claude-code",
153
157
  status: "failed",
158
+ reason: "stale-marketplace",
154
159
  message: `The ${marketplaceName} marketplace already points to ${currentRoot}.`,
155
160
  nextStep: "Run `dw agents install claude-code --force` to replace the stale marketplace registration.",
156
161
  };
@@ -193,4 +198,47 @@ export function installAgentIntegration(client, options = {}) {
193
198
  return unavailable(client);
194
199
  return client === "codex" ? installCodex(resolved) : installClaudeCode(resolved);
195
200
  }
201
+ /** Report whether a client already has the Dataworks plugin, without changing anything. */
202
+ export function agentIntegrationState(client, options = {}) {
203
+ const run = options.run ?? defaultRunner;
204
+ const binary = executable(client);
205
+ const detected = run(binary, ["--version"]);
206
+ if (detected.status !== 0 || detected.error)
207
+ return { client, installed: false };
208
+ const list = run(binary, ["plugin", "list", "--json"]);
209
+ if (list.status !== 0)
210
+ return { client, installed: false };
211
+ const entry = findPluginEntry(client, parseJson(list.stdout));
212
+ if (!entry)
213
+ return { client, installed: false };
214
+ return {
215
+ client,
216
+ installed: true,
217
+ version: typeof entry.version === "string" ? entry.version : undefined,
218
+ };
219
+ }
220
+ /**
221
+ * Reinstall the plugin for every client that already has it, and leave clients
222
+ * that never opted in untouched.
223
+ *
224
+ * Agent clients copy the plugin into a version-pinned directory rather than
225
+ * reading the npm package, so upgrading the CLI leaves them on the previous
226
+ * skill while the MCP server — resolved as `dw-mcp` on PATH — moves forward.
227
+ * The npm postinstall hook calls this so that split cannot happen silently.
228
+ */
229
+ export function refreshAgentIntegrations(options = {}) {
230
+ const results = [];
231
+ for (const client of supportedAgentClients) {
232
+ if (!agentIntegrationState(client, options).installed)
233
+ continue;
234
+ let result = installAgentIntegration(client, options);
235
+ // A CLI reinstalled under a different Node version lives at a new path, which
236
+ // is precisely the case a refresh must repair rather than report.
237
+ if (result.reason === "stale-marketplace") {
238
+ result = installAgentIntegration(client, { ...options, force: true });
239
+ }
240
+ results.push(result);
241
+ }
242
+ return results;
243
+ }
196
244
  //# sourceMappingURL=agent-install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-install.js","sourceRoot":"","sources":["../../src/lib/agent-install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-install.js","sourceRoot":"","sources":["../../src/lib/agent-install.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,14 @@ export interface AgentReminderPreferences {
2
2
  disabled: boolean;
3
3
  configured: boolean;
4
4
  lastShownAt?: string;
5
+ /**
6
+ * CLI version in effect when the agent integration was last installed. Agent
7
+ * clients copy the plugin into a version-pinned directory, so upgrading the npm
8
+ * package leaves the skill they load behind until `dw agents install` runs
9
+ * again. Comparing this against the running version detects that without
10
+ * shelling out to every client on a hot path.
11
+ */
12
+ configuredVersion?: string;
5
13
  }
6
14
  export interface AgentReminderContext {
7
15
  argv: readonly string[];
@@ -12,6 +20,20 @@ export interface AgentReminderContext {
12
20
  export declare function agentReminderPath(): string;
13
21
  export declare function readAgentReminderPreferences(): Promise<AgentReminderPreferences>;
14
22
  export declare function shouldShowAgentReminder(preferences: AgentReminderPreferences, context: AgentReminderContext): boolean;
15
- export declare function maybeShowAgentReminder(argv: readonly string[]): Promise<void>;
16
- export declare function configureAgentReminder(action: "disable" | "enable" | "configured"): Promise<AgentReminderPreferences>;
23
+ /**
24
+ * The installed agent plugin is a copy taken at install time, so a CLI upgrade
25
+ * leaves agents reading the previous skill. `dw agents install` normally reruns
26
+ * itself from the npm postinstall hook; this covers the cases where it cannot,
27
+ * such as `--ignore-scripts` or a non-global install.
28
+ */
29
+ export declare function shouldShowAgentUpgradeReminder(preferences: AgentReminderPreferences, context: AgentReminderContext, currentVersion: string): boolean;
30
+ /**
31
+ * Refreshing the plugin is only half the fix: a client that is already running
32
+ * keeps the copy it loaded at start-up, so the reminder has to name the reload
33
+ * step too. Otherwise a user reruns the install, sees no change, and concludes
34
+ * the refresh did not work.
35
+ */
36
+ export declare function agentUpgradeReminderMessage(installedVersion: string, currentVersion: string): string;
37
+ export declare function maybeShowAgentReminder(argv: readonly string[], currentVersion?: string): Promise<void>;
38
+ export declare function configureAgentReminder(action: "disable" | "enable" | "configured", configuredVersion?: string): Promise<AgentReminderPreferences>;
17
39
  //# sourceMappingURL=agent-reminder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-reminder.d.ts","sourceRoot":"","sources":["../../src/lib/agent-reminder.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAOD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAetF;AAYD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,wBAAwB,EACrC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAUT;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBnF;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY,GAC1C,OAAO,CAAC,wBAAwB,CAAC,CAUnC"}
1
+ {"version":3,"file":"agent-reminder.d.ts","sourceRoot":"","sources":["../../src/lib/agent-reminder.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAOD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAmBtF;AA2BD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,wBAAwB,EACrC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAGT;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,wBAAwB,EACrC,OAAO,EAAE,oBAAoB,EAC7B,cAAc,EAAE,MAAM,GACrB,OAAO,CAOT;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,GACrB,MAAM,CAOR;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC,CAiCf;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY,EAC3C,iBAAiB,CAAC,EAAE,MAAM,GACzB,OAAO,CAAC,wBAAwB,CAAC,CAUnC"}
@@ -16,6 +16,9 @@ export async function readAgentReminderPreferences() {
16
16
  disabled: stored.disabled === true,
17
17
  configured: stored.configured === true,
18
18
  lastShownAt: typeof stored.lastShownAt === "string" ? stored.lastShownAt : undefined,
19
+ configuredVersion: typeof stored.configuredVersion === "string"
20
+ ? stored.configuredVersion
21
+ : undefined,
19
22
  };
20
23
  }
21
24
  catch (error) {
@@ -31,10 +34,10 @@ async function writeAgentReminderPreferences(preferences) {
31
34
  mode: 0o600,
32
35
  });
33
36
  }
34
- export function shouldShowAgentReminder(preferences, context) {
37
+ function reminderIsAllowed(preferences, context) {
35
38
  if (!context.isTTY || context.disabledByEnvironment)
36
39
  return false;
37
- if (preferences.disabled || preferences.configured)
40
+ if (preferences.disabled)
38
41
  return false;
39
42
  if (context.argv.includes("--json"))
40
43
  return false;
@@ -47,18 +50,61 @@ export function shouldShowAgentReminder(preferences, context) {
47
50
  return true;
48
51
  return (context.now ?? new Date()).getTime() - lastShown >= reminderIntervalMs;
49
52
  }
50
- export async function maybeShowAgentReminder(argv) {
53
+ export function shouldShowAgentReminder(preferences, context) {
54
+ if (preferences.configured)
55
+ return false;
56
+ return reminderIsAllowed(preferences, context);
57
+ }
58
+ /**
59
+ * The installed agent plugin is a copy taken at install time, so a CLI upgrade
60
+ * leaves agents reading the previous skill. `dw agents install` normally reruns
61
+ * itself from the npm postinstall hook; this covers the cases where it cannot,
62
+ * such as `--ignore-scripts` or a non-global install.
63
+ */
64
+ export function shouldShowAgentUpgradeReminder(preferences, context, currentVersion) {
65
+ if (!preferences.configured)
66
+ return false;
67
+ // Absent on installs predating version tracking; assume current rather than
68
+ // nagging every user once on upgrade to this release.
69
+ if (!preferences.configuredVersion)
70
+ return false;
71
+ if (preferences.configuredVersion === currentVersion)
72
+ return false;
73
+ return reminderIsAllowed(preferences, context);
74
+ }
75
+ /**
76
+ * Refreshing the plugin is only half the fix: a client that is already running
77
+ * keeps the copy it loaded at start-up, so the reminder has to name the reload
78
+ * step too. Otherwise a user reruns the install, sees no change, and concludes
79
+ * the refresh did not work.
80
+ */
81
+ export function agentUpgradeReminderMessage(installedVersion, currentVersion) {
82
+ return (`Dataworks CLI is ${currentVersion}, but the agent plugin was installed from ` +
83
+ `${installedVersion}. Agents are reading the older skill.\n` +
84
+ "Refresh it with `dw agents install`, then reload the client: run " +
85
+ "`/reload-plugins` in Claude Code, or start a new Codex thread.\n");
86
+ }
87
+ export async function maybeShowAgentReminder(argv, currentVersion) {
51
88
  try {
52
89
  const preferences = await readAgentReminderPreferences();
53
- if (!shouldShowAgentReminder(preferences, {
90
+ const context = {
54
91
  argv,
55
92
  isTTY: process.stderr.isTTY === true,
56
93
  disabledByEnvironment: process.env.DW_NO_AGENT_REMINDER === "1",
57
- })) {
58
- return;
94
+ };
95
+ let message;
96
+ if (shouldShowAgentReminder(preferences, context)) {
97
+ message =
98
+ "Tip: enable Dataworks in Codex or Claude Code with `dw agents install`.\n" +
99
+ "Hide this reminder with `dw agents reminder disable`.\n";
100
+ }
101
+ else if (currentVersion &&
102
+ shouldShowAgentUpgradeReminder(preferences, context, currentVersion)) {
103
+ message = agentUpgradeReminderMessage(preferences.configuredVersion ?? "an earlier version", currentVersion);
59
104
  }
60
- process.stderr.write("Tip: enable Dataworks in Codex or Claude Code with `dw agents install`.\n" +
61
- "Hide this reminder with `dw agents reminder disable`.\n");
105
+ if (!message)
106
+ return;
107
+ process.stderr.write(message);
62
108
  await writeAgentReminderPreferences({
63
109
  ...preferences,
64
110
  lastShownAt: new Date().toISOString(),
@@ -68,12 +114,12 @@ export async function maybeShowAgentReminder(argv) {
68
114
  // A reminder must never block or fail the requested CLI command.
69
115
  }
70
116
  }
71
- export async function configureAgentReminder(action) {
117
+ export async function configureAgentReminder(action, configuredVersion) {
72
118
  const current = await readAgentReminderPreferences();
73
119
  const preferences = action === "disable"
74
120
  ? { ...current, disabled: true }
75
121
  : action === "configured"
76
- ? { ...current, configured: true }
122
+ ? { ...current, configured: true, configuredVersion }
77
123
  : { disabled: false, configured: false };
78
124
  await writeAgentReminderPreferences(preferences);
79
125
  return preferences;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-reminder.js","sourceRoot":"","sources":["../../src/lib/agent-reminder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-reminder.js","sourceRoot":"","sources":["../../src/lib/agent-reminder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAuB/C,MAAM,kBAAkB,GAA6B;IACnD,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,KAAK;CAClB,CAAC;AAEF,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,qBAAqB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,4BAA4B;IAChD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,MAAM,QAAQ,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAAC,CACP,CAAC;QACvC,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI;YAClC,UAAU,EAAE,MAAM,CAAC,UAAU,KAAK,IAAI;YACtC,WAAW,EACT,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YACzE,iBAAiB,EACf,OAAO,MAAM,CAAC,iBAAiB,KAAK,QAAQ;gBAC1C,CAAC,CAAC,MAAM,CAAC,iBAAiB;gBAC1B,CAAC,CAAC,SAAS;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAC/D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC1C,WAAqC;IAErC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACjE,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CACxB,WAAqC,EACrC,OAA6B;IAE7B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,qBAAqB;QAAE,OAAO,KAAK,CAAC;IAClE,IAAI,WAAW,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAClD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE/C,IAAI,CAAC,WAAW,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,IAAI,kBAAkB,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,WAAqC,EACrC,OAA6B;IAE7B,IAAI,WAAW,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IACzC,OAAO,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAC5C,WAAqC,EACrC,OAA6B,EAC7B,cAAsB;IAEtB,IAAI,CAAC,WAAW,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAC1C,4EAA4E;IAC5E,sDAAsD;IACtD,IAAI,CAAC,WAAW,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IACjD,IAAI,WAAW,CAAC,iBAAiB,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IACnE,OAAO,iBAAiB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,gBAAwB,EACxB,cAAsB;IAEtB,OAAO,CACL,oBAAoB,cAAc,4CAA4C;QAC9E,GAAG,gBAAgB,yCAAyC;QAC5D,mEAAmE;QACnE,kEAAkE,CACnE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAuB,EACvB,cAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,4BAA4B,EAAE,CAAC;QACzD,MAAM,OAAO,GAAyB;YACpC,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI;YACpC,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG;SAChE,CAAC;QAEF,IAAI,OAA2B,CAAC;QAChC,IAAI,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;YAClD,OAAO;gBACL,2EAA2E;oBAC3E,yDAAyD,CAAC;QAC9D,CAAC;aAAM,IACL,cAAc;YACd,8BAA8B,CAAC,WAAW,EAAE,OAAO,EAAE,cAAc,CAAC,EACpE,CAAC;YACD,OAAO,GAAG,2BAA2B,CACnC,WAAW,CAAC,iBAAiB,IAAI,oBAAoB,EACrD,cAAc,CACf,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,6BAA6B,CAAC;YAClC,GAAG,WAAW;YACd,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAA2C,EAC3C,iBAA0B;IAE1B,MAAM,OAAO,GAAG,MAAM,4BAA4B,EAAE,CAAC;IACrD,MAAM,WAAW,GACf,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;QAChC,CAAC,CAAC,MAAM,KAAK,YAAY;YACvB,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE;YACrD,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC/C,MAAM,6BAA6B,CAAC,WAAW,CAAC,CAAC;IACjD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -4,7 +4,7 @@ import { maybeShowAgentReminder } from "./agent-reminder.js";
4
4
  export class DataworksCommand extends Command {
5
5
  async init() {
6
6
  await super.init();
7
- await maybeShowAgentReminder(this.argv);
7
+ await maybeShowAgentReminder(this.argv, this.config.version);
8
8
  }
9
9
  async catch(error) {
10
10
  const cliError = toCliError(error);
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/lib/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,OAAgB,gBAAiB,SAAQ,OAAO;IACjC,KAAK,CAAC,IAAI;QAC3B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAEkB,KAAK,CAAC,KAAK,CAAC,KAAmB;QAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B;aACF,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACvC,CAAC;CACF"}
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/lib/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,OAAgB,gBAAiB,SAAQ,OAAO;IACjC,KAAK,CAAC,IAAI;QAC3B,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,sBAAsB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAEkB,KAAK,CAAC,KAAK,CAAC,KAAmB;QAChD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;iBAC1B;aACF,CAAC,IAAI,CACP,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;IACvC,CAAC;CACF"}
@@ -189,6 +189,10 @@
189
189
  {
190
190
  "description": "Replace a stale Dataworks marketplace registration",
191
191
  "command": "dw agents install codex --force"
192
+ },
193
+ {
194
+ "description": "Update clients that already have Dataworks, and skip the rest",
195
+ "command": "dw agents install --refresh"
192
196
  }
193
197
  ],
194
198
  "flags": {
@@ -198,6 +202,12 @@
198
202
  "allowNo": false,
199
203
  "type": "boolean"
200
204
  },
205
+ "refresh": {
206
+ "description": "Only update clients that already have Dataworks installed; configure nothing new",
207
+ "name": "refresh",
208
+ "allowNo": false,
209
+ "type": "boolean"
210
+ },
201
211
  "json": {
202
212
  "description": "Emit stable JSON output",
203
213
  "name": "json",
@@ -3732,24 +3742,10 @@
3732
3742
  "update.js"
3733
3743
  ]
3734
3744
  },
3735
- "data:data-explorer:execute": {
3745
+ "data:composable-engine-type:get": {
3736
3746
  "aliases": [],
3737
3747
  "args": {},
3738
- "description": "Query Data Explorer metrics with explicit columns, optional filters, ordering, aggregation, and row limits.",
3739
- "examples": [
3740
- {
3741
- "description": "Run a complete query from a reusable input file",
3742
- "command": "dw data data-explorer execute --input @data-explorer-query.json --json"
3743
- },
3744
- {
3745
- "description": "Return the latest 30 rows from a metric category",
3746
- "command": "dw data data-explorer execute --columns '[\"timestamp\",\"athletepublicid\",\"metric\",\"current\"]' --metric-category METRICS_TYPE_A --limit 30 --order-by timestamp --order-direction DESC --json"
3747
- },
3748
- {
3749
- "description": "Return the latest 30 GPS positions for one athlete",
3750
- "command": "dw data data-explorer execute --input @gps-query.json --json"
3751
- }
3752
- ],
3748
+ "description": "Run the getComposableEngineType GraphQL query",
3753
3749
  "flags": {
3754
3750
  "input": {
3755
3751
  "description": "Input JSON, @file, or - for stdin",
@@ -3791,72 +3787,9 @@
3791
3787
  "allowNo": false,
3792
3788
  "type": "boolean"
3793
3789
  },
3794
- "aggregate": {
3795
- "description": "GraphQL aggregate",
3796
- "name": "aggregate",
3797
- "hasDynamicHelp": false,
3798
- "multiple": false,
3799
- "type": "option"
3800
- },
3801
- "aggregate-field": {
3802
- "description": "GraphQL aggregateField",
3803
- "name": "aggregate-field",
3804
- "hasDynamicHelp": false,
3805
- "multiple": false,
3806
- "type": "option"
3807
- },
3808
- "columns": {
3809
- "description": "Required JSON array of category columns; base columns are timestamp, datasetdatasourcepublicid, eventpublicid, athletepublicid, metric, and current",
3810
- "name": "columns",
3811
- "hasDynamicHelp": false,
3812
- "multiple": false,
3813
- "type": "option"
3814
- },
3815
- "filter-rules": {
3816
- "description": "AWSJSON string shaped as {combinator,rules:[{field,operator,value}]}; operators include =, !=, >, <, >=, <=, contains, and in",
3817
- "name": "filter-rules",
3818
- "hasDynamicHelp": false,
3819
- "multiple": false,
3820
- "type": "option"
3821
- },
3822
- "group-by": {
3823
- "description": "GraphQL groupBy",
3824
- "name": "group-by",
3825
- "hasDynamicHelp": false,
3826
- "multiple": false,
3827
- "type": "option"
3828
- },
3829
- "limit": {
3830
- "description": "Maximum number of rows to return",
3831
- "name": "limit",
3832
- "hasDynamicHelp": false,
3833
- "multiple": false,
3834
- "type": "option"
3835
- },
3836
- "metric-category": {
3837
- "description": "Metric category: METRICS_TYPE_A for GPS/position/timing, METRICS_TYPE_B for speed/altitude/cadence, or METRICS_TYPE_C for heart rate/power/zones",
3838
- "name": "metric-category",
3839
- "hasDynamicHelp": false,
3840
- "multiple": false,
3841
- "type": "option"
3842
- },
3843
- "order-by": {
3844
- "description": "Column used to order rows",
3845
- "name": "order-by",
3846
- "hasDynamicHelp": false,
3847
- "multiple": false,
3848
- "type": "option"
3849
- },
3850
- "order-direction": {
3851
- "description": "Sort direction: ASC or DESC",
3852
- "name": "order-direction",
3853
- "hasDynamicHelp": false,
3854
- "multiple": false,
3855
- "type": "option"
3856
- },
3857
- "query-execution-id": {
3858
- "description": "Existing asynchronous query execution ID to poll",
3859
- "name": "query-execution-id",
3790
+ "public-id": {
3791
+ "description": "GraphQL publicId",
3792
+ "name": "public-id",
3860
3793
  "hasDynamicHelp": false,
3861
3794
  "multiple": false,
3862
3795
  "type": "option"
@@ -3864,7 +3797,7 @@
3864
3797
  },
3865
3798
  "hasDynamicHelp": false,
3866
3799
  "hiddenAliases": [],
3867
- "id": "data:data-explorer:execute",
3800
+ "id": "data:composable-engine-type:get",
3868
3801
  "pluginAlias": "@dataworks-technology/cli",
3869
3802
  "pluginName": "@dataworks-technology/cli",
3870
3803
  "pluginType": "core",
@@ -3874,14 +3807,14 @@
3874
3807
  "dist",
3875
3808
  "commands",
3876
3809
  "data",
3877
- "data-explorer",
3878
- "execute.js"
3810
+ "composable-engine-type",
3811
+ "get.js"
3879
3812
  ]
3880
3813
  },
3881
- "data:composable-engine-type:get": {
3814
+ "data:composable-engine-type:list": {
3882
3815
  "aliases": [],
3883
3816
  "args": {},
3884
- "description": "Run the getComposableEngineType GraphQL query",
3817
+ "description": "Run the listComposableEngineTypes GraphQL query",
3885
3818
  "flags": {
3886
3819
  "input": {
3887
3820
  "description": "Input JSON, @file, or - for stdin",
@@ -3923,9 +3856,23 @@
3923
3856
  "allowNo": false,
3924
3857
  "type": "boolean"
3925
3858
  },
3926
- "public-id": {
3927
- "description": "GraphQL publicId",
3928
- "name": "public-id",
3859
+ "filter": {
3860
+ "description": "GraphQL filter",
3861
+ "name": "filter",
3862
+ "hasDynamicHelp": false,
3863
+ "multiple": false,
3864
+ "type": "option"
3865
+ },
3866
+ "limit": {
3867
+ "description": "GraphQL limit",
3868
+ "name": "limit",
3869
+ "hasDynamicHelp": false,
3870
+ "multiple": false,
3871
+ "type": "option"
3872
+ },
3873
+ "next-token": {
3874
+ "description": "GraphQL nextToken",
3875
+ "name": "next-token",
3929
3876
  "hasDynamicHelp": false,
3930
3877
  "multiple": false,
3931
3878
  "type": "option"
@@ -3933,7 +3880,7 @@
3933
3880
  },
3934
3881
  "hasDynamicHelp": false,
3935
3882
  "hiddenAliases": [],
3936
- "id": "data:composable-engine-type:get",
3883
+ "id": "data:composable-engine-type:list",
3937
3884
  "pluginAlias": "@dataworks-technology/cli",
3938
3885
  "pluginName": "@dataworks-technology/cli",
3939
3886
  "pluginType": "core",
@@ -3944,13 +3891,27 @@
3944
3891
  "commands",
3945
3892
  "data",
3946
3893
  "composable-engine-type",
3947
- "get.js"
3894
+ "list.js"
3948
3895
  ]
3949
3896
  },
3950
- "data:composable-engine-type:list": {
3897
+ "data:data-explorer:execute": {
3951
3898
  "aliases": [],
3952
3899
  "args": {},
3953
- "description": "Run the listComposableEngineTypes GraphQL query",
3900
+ "description": "Query Data Explorer metrics with explicit columns, optional filters, ordering, aggregation, and row limits.",
3901
+ "examples": [
3902
+ {
3903
+ "description": "Run a complete query from a reusable input file",
3904
+ "command": "dw data data-explorer execute --input @data-explorer-query.json --json"
3905
+ },
3906
+ {
3907
+ "description": "Return the latest 30 rows from a metric category",
3908
+ "command": "dw data data-explorer execute --columns '[\"timestamp\",\"athletepublicid\",\"metric\",\"current\"]' --metric-category METRICS_TYPE_A --limit 30 --order-by timestamp --order-direction DESC --json"
3909
+ },
3910
+ {
3911
+ "description": "Return the latest 30 GPS positions for one athlete",
3912
+ "command": "dw data data-explorer execute --input @gps-query.json --json"
3913
+ }
3914
+ ],
3954
3915
  "flags": {
3955
3916
  "input": {
3956
3917
  "description": "Input JSON, @file, or - for stdin",
@@ -3992,23 +3953,72 @@
3992
3953
  "allowNo": false,
3993
3954
  "type": "boolean"
3994
3955
  },
3995
- "filter": {
3996
- "description": "GraphQL filter",
3997
- "name": "filter",
3956
+ "aggregate": {
3957
+ "description": "GraphQL aggregate",
3958
+ "name": "aggregate",
3959
+ "hasDynamicHelp": false,
3960
+ "multiple": false,
3961
+ "type": "option"
3962
+ },
3963
+ "aggregate-field": {
3964
+ "description": "GraphQL aggregateField",
3965
+ "name": "aggregate-field",
3966
+ "hasDynamicHelp": false,
3967
+ "multiple": false,
3968
+ "type": "option"
3969
+ },
3970
+ "columns": {
3971
+ "description": "Required JSON array of category columns; base columns are timestamp, datasetdatasourcepublicid, eventpublicid, athletepublicid, metric, and current",
3972
+ "name": "columns",
3973
+ "hasDynamicHelp": false,
3974
+ "multiple": false,
3975
+ "type": "option"
3976
+ },
3977
+ "filter-rules": {
3978
+ "description": "AWSJSON string shaped as {combinator,rules:[{field,operator,value}]}; operators include =, !=, >, <, >=, <=, contains, and in",
3979
+ "name": "filter-rules",
3980
+ "hasDynamicHelp": false,
3981
+ "multiple": false,
3982
+ "type": "option"
3983
+ },
3984
+ "group-by": {
3985
+ "description": "GraphQL groupBy",
3986
+ "name": "group-by",
3998
3987
  "hasDynamicHelp": false,
3999
3988
  "multiple": false,
4000
3989
  "type": "option"
4001
3990
  },
4002
3991
  "limit": {
4003
- "description": "GraphQL limit",
3992
+ "description": "Maximum number of rows to return",
4004
3993
  "name": "limit",
4005
3994
  "hasDynamicHelp": false,
4006
3995
  "multiple": false,
4007
3996
  "type": "option"
4008
3997
  },
4009
- "next-token": {
4010
- "description": "GraphQL nextToken",
4011
- "name": "next-token",
3998
+ "metric-category": {
3999
+ "description": "Metric category: METRICS_TYPE_A for GPS/position/timing, METRICS_TYPE_B for speed/altitude/cadence, or METRICS_TYPE_C for heart rate/power/zones",
4000
+ "name": "metric-category",
4001
+ "hasDynamicHelp": false,
4002
+ "multiple": false,
4003
+ "type": "option"
4004
+ },
4005
+ "order-by": {
4006
+ "description": "Column used to order rows",
4007
+ "name": "order-by",
4008
+ "hasDynamicHelp": false,
4009
+ "multiple": false,
4010
+ "type": "option"
4011
+ },
4012
+ "order-direction": {
4013
+ "description": "Sort direction: ASC or DESC",
4014
+ "name": "order-direction",
4015
+ "hasDynamicHelp": false,
4016
+ "multiple": false,
4017
+ "type": "option"
4018
+ },
4019
+ "query-execution-id": {
4020
+ "description": "Existing asynchronous query execution ID to poll",
4021
+ "name": "query-execution-id",
4012
4022
  "hasDynamicHelp": false,
4013
4023
  "multiple": false,
4014
4024
  "type": "option"
@@ -4016,7 +4026,7 @@
4016
4026
  },
4017
4027
  "hasDynamicHelp": false,
4018
4028
  "hiddenAliases": [],
4019
- "id": "data:composable-engine-type:list",
4029
+ "id": "data:data-explorer:execute",
4020
4030
  "pluginAlias": "@dataworks-technology/cli",
4021
4031
  "pluginName": "@dataworks-technology/cli",
4022
4032
  "pluginType": "core",
@@ -4026,8 +4036,8 @@
4026
4036
  "dist",
4027
4037
  "commands",
4028
4038
  "data",
4029
- "composable-engine-type",
4030
- "list.js"
4039
+ "data-explorer",
4040
+ "execute.js"
4031
4041
  ]
4032
4042
  },
4033
4043
  "data:dataset:create": {
@@ -11709,5 +11719,5 @@
11709
11719
  ]
11710
11720
  }
11711
11721
  },
11712
- "version": "1.4.0"
11722
+ "version": "1.4.1"
11713
11723
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dataworks-technology/cli",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "The official command-line interface for the Dataworks Data Engine",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dataworks",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Query athlete metrics from Dataworks using the authenticated local CLI session.",
5
5
  "author": { "name": "Dataworks Technology" },
6
6
  "homepage": "https://github.com/Dataworks-Technology/Dataworks-CLI",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dataworks",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Query athlete metrics from Dataworks using the authenticated local CLI session.",
5
5
  "author": { "name": "Dataworks Technology", "url": "https://dataworks.live/" },
6
6
  "homepage": "https://github.com/Dataworks-Technology/Dataworks-CLI",