thinkwork-cli 0.12.5 → 0.12.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.
package/dist/cli.js CHANGED
@@ -4643,6 +4643,8 @@ var CliScheduledJobsDocument = { "kind": "Document", "definitions": [{ "kind": "
4643
4643
  var CliScheduledJobDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "CliScheduledJob" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "ID" } } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "scheduledJob" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "id" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "id" } }, { "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "description" } }, { "kind": "Field", "name": { "kind": "Name", "value": "triggerType" } }, { "kind": "Field", "name": { "kind": "Name", "value": "agentId" } }, { "kind": "Field", "name": { "kind": "Name", "value": "routineId" } }, { "kind": "Field", "name": { "kind": "Name", "value": "prompt" } }, { "kind": "Field", "name": { "kind": "Name", "value": "scheduleType" } }, { "kind": "Field", "name": { "kind": "Name", "value": "scheduleExpression" } }, { "kind": "Field", "name": { "kind": "Name", "value": "timezone" } }, { "kind": "Field", "name": { "kind": "Name", "value": "enabled" } }, { "kind": "Field", "name": { "kind": "Name", "value": "ebScheduleName" } }, { "kind": "Field", "name": { "kind": "Name", "value": "lastRunAt" } }, { "kind": "Field", "name": { "kind": "Name", "value": "nextRunAt" } }, { "kind": "Field", "name": { "kind": "Name", "value": "createdAt" } }, { "kind": "Field", "name": { "kind": "Name", "value": "updatedAt" } }] } }] } }] };
4644
4644
  var CliCreateScheduledJobDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "mutation", "name": { "kind": "Name", "value": "CliCreateScheduledJob" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "input" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "CreateScheduledJobInput" } } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "createScheduledJob" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "input" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "input" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "id" } }, { "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "enabled" } }, { "kind": "Field", "name": { "kind": "Name", "value": "scheduleExpression" } }, { "kind": "Field", "name": { "kind": "Name", "value": "timezone" } }] } }] } }] };
4645
4645
  var CliDeleteScheduledJobDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "mutation", "name": { "kind": "Name", "value": "CliDeleteScheduledJob" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "ID" } } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "deleteScheduledJob" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "id" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "id" } }, { "kind": "Field", "name": { "kind": "Name", "value": "ok" } }] } }] } }] };
4646
+ var CliRunScheduledJobDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "mutation", "name": { "kind": "Name", "value": "CliRunScheduledJob" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "ID" } } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "runScheduledJob" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "id" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "id" } }, { "kind": "Field", "name": { "kind": "Name", "value": "dispatched" } }, { "kind": "Field", "name": { "kind": "Name", "value": "statusCode" } }, { "kind": "Field", "name": { "kind": "Name", "value": "errorMessage" } }] } }] } }] };
4647
+ var CliUpdateScheduledJobDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "mutation", "name": { "kind": "Name", "value": "CliUpdateScheduledJob" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "ID" } } } }, { "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "input" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "UpdateScheduledJobInput" } } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "updateScheduledJob" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "id" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "id" } } }, { "kind": "Argument", "name": { "kind": "Name", "value": "input" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "input" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "id" } }, { "kind": "Field", "name": { "kind": "Name", "value": "name" } }, { "kind": "Field", "name": { "kind": "Name", "value": "enabled" } }, { "kind": "Field", "name": { "kind": "Name", "value": "scheduleType" } }, { "kind": "Field", "name": { "kind": "Name", "value": "scheduleExpression" } }, { "kind": "Field", "name": { "kind": "Name", "value": "timezone" } }, { "kind": "Field", "name": { "kind": "Name", "value": "nextRunAt" } }, { "kind": "Field", "name": { "kind": "Name", "value": "updatedAt" } }] } }] } }] };
4646
4648
  var CliSchedJobTenantBySlugDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "CliSchedJobTenantBySlug" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "slug" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "String" } } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "tenantBySlug" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "slug" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "slug" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "id" } }] } }] } }] };
4647
4649
  var CliSkillCatalogDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "CliSkillCatalog" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "skillCatalog" }, "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "id" } }, { "kind": "Field", "name": { "kind": "Name", "value": "skillId" } }, { "kind": "Field", "name": { "kind": "Name", "value": "displayName" } }, { "kind": "Field", "name": { "kind": "Name", "value": "description" } }, { "kind": "Field", "name": { "kind": "Name", "value": "category" } }, { "kind": "Field", "name": { "kind": "Name", "value": "icon" } }, { "kind": "Field", "name": { "kind": "Name", "value": "source" } }, { "kind": "Field", "name": { "kind": "Name", "value": "enabled" } }] } }] } }] };
4648
4650
  var CliSkillTenantBySlugDocument = { "kind": "Document", "definitions": [{ "kind": "OperationDefinition", "operation": "query", "name": { "kind": "Name", "value": "CliSkillTenantBySlug" }, "variableDefinitions": [{ "kind": "VariableDefinition", "variable": { "kind": "Variable", "name": { "kind": "Name", "value": "slug" } }, "type": { "kind": "NonNullType", "type": { "kind": "NamedType", "name": { "kind": "Name", "value": "String" } } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "tenantBySlug" }, "arguments": [{ "kind": "Argument", "name": { "kind": "Name", "value": "slug" }, "value": { "kind": "Variable", "name": { "kind": "Name", "value": "slug" } } }], "selectionSet": { "kind": "SelectionSet", "selections": [{ "kind": "Field", "name": { "kind": "Name", "value": "id" } }] } }] } }] };
@@ -4820,6 +4822,8 @@ var documents = {
4820
4822
  "\n query CliScheduledJob($id: ID!) {\n scheduledJob(id: $id) {\n id\n name\n description\n triggerType\n agentId\n routineId\n prompt\n scheduleType\n scheduleExpression\n timezone\n enabled\n ebScheduleName\n lastRunAt\n nextRunAt\n createdAt\n updatedAt\n }\n }\n": CliScheduledJobDocument,
4821
4823
  "\n mutation CliCreateScheduledJob($input: CreateScheduledJobInput!) {\n createScheduledJob(input: $input) {\n id\n name\n enabled\n scheduleExpression\n timezone\n }\n }\n": CliCreateScheduledJobDocument,
4822
4824
  "\n mutation CliDeleteScheduledJob($id: ID!) {\n deleteScheduledJob(id: $id) {\n id\n ok\n }\n }\n": CliDeleteScheduledJobDocument,
4825
+ "\n mutation CliRunScheduledJob($id: ID!) {\n runScheduledJob(id: $id) {\n id\n dispatched\n statusCode\n errorMessage\n }\n }\n": CliRunScheduledJobDocument,
4826
+ "\n mutation CliUpdateScheduledJob($id: ID!, $input: UpdateScheduledJobInput!) {\n updateScheduledJob(id: $id, input: $input) {\n id\n name\n enabled\n scheduleType\n scheduleExpression\n timezone\n nextRunAt\n updatedAt\n }\n }\n": CliUpdateScheduledJobDocument,
4823
4827
  "\n query CliSchedJobTenantBySlug($slug: String!) {\n tenantBySlug(slug: $slug) {\n id\n }\n }\n": CliSchedJobTenantBySlugDocument,
4824
4828
  "\n query CliSkillCatalog {\n skillCatalog {\n id\n skillId\n displayName\n description\n category\n icon\n source\n enabled\n }\n }\n": CliSkillCatalogDocument,
4825
4829
  "\n query CliSkillTenantBySlug($slug: String!) {\n tenantBySlug(slug: $slug) {\n id\n }\n }\n": CliSkillTenantBySlugDocument,
@@ -9941,6 +9945,30 @@ var DeleteScheduledJobDoc = graphql(`
9941
9945
  }
9942
9946
  }
9943
9947
  `);
9948
+ var RunScheduledJobDoc = graphql(`
9949
+ mutation CliRunScheduledJob($id: ID!) {
9950
+ runScheduledJob(id: $id) {
9951
+ id
9952
+ dispatched
9953
+ statusCode
9954
+ errorMessage
9955
+ }
9956
+ }
9957
+ `);
9958
+ var UpdateScheduledJobDoc = graphql(`
9959
+ mutation CliUpdateScheduledJob($id: ID!, $input: UpdateScheduledJobInput!) {
9960
+ updateScheduledJob(id: $id, input: $input) {
9961
+ id
9962
+ name
9963
+ enabled
9964
+ scheduleType
9965
+ scheduleExpression
9966
+ timezone
9967
+ nextRunAt
9968
+ updatedAt
9969
+ }
9970
+ }
9971
+ `);
9944
9972
  var SchedJobTenantBySlugDoc = graphql(`
9945
9973
  query CliSchedJobTenantBySlug($slug: String!) {
9946
9974
  tenantBySlug(slug: $slug) {
@@ -10134,13 +10162,74 @@ async function runSchedDelete(id, opts) {
10134
10162
  );
10135
10163
  }
10136
10164
  }
10137
- function notYetImplementedAtApi(verb) {
10138
- printError(
10139
- `\`scheduled-job ${verb}\` is not yet implemented at the GraphQL API.
10140
- The server only exposes scheduledJobs / scheduledJob / createScheduledJob today.
10141
- Use the admin UI for update/delete/run operations; CLI parity is tracked as a Phase-3 follow-up.`
10165
+ async function runSchedUpdate(id, opts) {
10166
+ const ctx = await resolveSchedContext(opts);
10167
+ const input20 = {};
10168
+ if (opts.name !== void 0) input20.name = opts.name;
10169
+ if (opts.description !== void 0) input20.description = opts.description;
10170
+ if (opts.prompt !== void 0) input20.prompt = opts.prompt;
10171
+ if (opts.schedule !== void 0) {
10172
+ input20.scheduleExpression = opts.schedule;
10173
+ input20.scheduleType = opts.schedule.trim().startsWith("cron(") ? "cron" : "rate";
10174
+ }
10175
+ if (opts.timezone !== void 0) input20.timezone = opts.timezone;
10176
+ if (opts.payload !== void 0) {
10177
+ try {
10178
+ input20.config = JSON.stringify(JSON.parse(opts.payload));
10179
+ } catch (err) {
10180
+ printError(`--payload is not valid JSON: ${err.message}`);
10181
+ process.exit(1);
10182
+ }
10183
+ }
10184
+ if (opts.enable && opts.disable) {
10185
+ printError("--enable and --disable are mutually exclusive.");
10186
+ process.exit(1);
10187
+ }
10188
+ if (opts.enable) input20.enabled = true;
10189
+ if (opts.disable) input20.enabled = false;
10190
+ if (Object.keys(input20).length === 0) {
10191
+ printError(
10192
+ "Nothing to update. Pass at least one of --schedule, --timezone, --payload, --enable/--disable, --name, --description, --prompt."
10193
+ );
10194
+ process.exit(1);
10195
+ }
10196
+ const data = await gqlMutate(ctx.client, UpdateScheduledJobDoc, {
10197
+ id,
10198
+ input: input20
10199
+ });
10200
+ if (isJsonMode()) {
10201
+ printJson(data.updateScheduledJob);
10202
+ return;
10203
+ }
10204
+ const job = data.updateScheduledJob;
10205
+ printSuccess(
10206
+ `Updated scheduled job ${job.id} \u2014 ${job.name} (${job.scheduleExpression}, ${job.timezone}, ${job.enabled ? "enabled" : "disabled"}).`
10142
10207
  );
10143
- process.exit(2);
10208
+ }
10209
+ async function runSchedRun(id, opts) {
10210
+ const ctx = await resolveSchedContext(opts);
10211
+ const data = await gqlMutate(ctx.client, RunScheduledJobDoc, { id });
10212
+ const result = data.runScheduledJob;
10213
+ if (isJsonMode()) {
10214
+ printJson(result);
10215
+ if (!result.dispatched) process.exit(1);
10216
+ return;
10217
+ }
10218
+ if (result.dispatched) {
10219
+ printSuccess(
10220
+ `Dispatched scheduled job ${result.id} (status ${result.statusCode ?? "\u2014"}). Downstream side effects run asynchronously.`
10221
+ );
10222
+ if (opts.wait) {
10223
+ console.log(
10224
+ ` --wait is not yet implemented on the API side; check ${result.id}'s last_run_at via \`scheduled-job get\`.`
10225
+ );
10226
+ }
10227
+ } else {
10228
+ printError(
10229
+ `Dispatch failed: ${result.errorMessage ?? "unknown reason"} (status ${result.statusCode ?? "\u2014"}).`
10230
+ );
10231
+ process.exit(1);
10232
+ }
10144
10233
  }
10145
10234
  function registerScheduledJobCommand(program2) {
10146
10235
  const job = program2.command("scheduled-job").alias("cron").description("Manage AWS-Scheduler-backed recurring agent jobs (wakeups on a cadence).");
@@ -10157,11 +10246,15 @@ Examples:
10157
10246
  $ thinkwork scheduled-job create "Hourly check" --agent agt-check --schedule "rate(1 hour)"
10158
10247
  `
10159
10248
  ).action(runSchedCreate);
10160
- job.command("update <id>").description("Update a scheduled job. (API surface pending \u2014 currently a no-op.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--schedule <expr>").option("--timezone <tz>").option("--payload <json>").option("--enable").option("--disable").action(() => notYetImplementedAtApi("update"));
10249
+ job.command("update <id>").description(
10250
+ "Update a scheduled job. Changes the EventBridge schedule when --schedule / --timezone / --enable / --disable are passed; partial-update otherwise."
10251
+ ).option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--schedule <expr>", "EventBridge schedule (cron(\u2026) or rate(\u2026))").option("--timezone <tz>").option("--payload <json>", "Payload to pass to the agent/routine").option("--enable", "Re-enable a paused job").option("--disable", "Pause without deleting").option("--name <text>").option("--description <text>").option("--prompt <text>").action(runSchedUpdate);
10161
10252
  job.command("delete <id>").description(
10162
10253
  "Delete a scheduled job. Deprovisions the EventBridge schedule first, then removes the row."
10163
10254
  ).option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("-y, --yes", "Skip confirmation").action(runSchedDelete);
10164
- job.command("run <id>").description("Trigger a scheduled job immediately. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--wait", "Block until the run completes").action(() => notYetImplementedAtApi("run"));
10255
+ job.command("run <id>").description(
10256
+ "Fire a scheduled job once, immediately. Bypasses the EventBridge schedule; downstream side effects (thread turn, routine run) remain async."
10257
+ ).option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--wait", "(not yet supported server-side; reserved for future)").action(runSchedRun);
10165
10258
  }
10166
10259
 
10167
10260
  // src/commands/turn.ts
@@ -10918,7 +11011,7 @@ async function runWebhookDeliveries(id, opts) {
10918
11011
  ]
10919
11012
  );
10920
11013
  }
10921
- function notYetImplementedAtApi2(verb) {
11014
+ function notYetImplementedAtApi(verb) {
10922
11015
  printError(
10923
11016
  `\`webhook ${verb}\` is not yet implemented at the GraphQL API.
10924
11017
  Use admin UI for now; CLI parity is tracked as a Phase-3 follow-up.`
@@ -10938,7 +11031,7 @@ Examples:
10938
11031
  ).action(runWebhookCreate);
10939
11032
  wh.command("update <id>").description("Update a webhook's target, rate limit, or enabled state.").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--target-type <t>").option("--target-id <id>").option("--rate-limit <rpm>").option("--allowed-ips <csv>").option("--enable").option("--disable").action(runWebhookUpdate);
10940
11033
  wh.command("delete <id>").description("Delete a webhook (its URL stops working immediately).").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("-y, --yes", "Skip confirmation").action(runWebhookDelete);
10941
- wh.command("test <id>").description("Send a synthetic payload to the webhook. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--payload <json>").action(() => notYetImplementedAtApi2("test"));
11034
+ wh.command("test <id>").description("Send a synthetic payload to the webhook. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--payload <json>").action(() => notYetImplementedAtApi("test"));
10942
11035
  wh.command("rotate <id>").description("Generate a new token for an existing webhook.").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("-y, --yes", "Skip confirmation").action(runWebhookRotate);
10943
11036
  wh.command("deliveries <id>").description(
10944
11037
  "Show recent delivery attempts for a webhook (newest first). Default 25, max 500."
@@ -11246,7 +11339,7 @@ async function runSkillList(opts) {
11246
11339
  ]
11247
11340
  );
11248
11341
  }
11249
- function notYetImplementedAtApi3(verb) {
11342
+ function notYetImplementedAtApi2(verb) {
11250
11343
  printError(
11251
11344
  `\`skill ${verb}\` is not yet implemented at the GraphQL API.
11252
11345
  The current schema exposes skillCatalog (read), per-computer enableSkill/disableSkill,
@@ -11262,11 +11355,11 @@ function registerSkillCommand(program2) {
11262
11355
  );
11263
11356
  skill.command("catalog").description("Browse the skill catalog. Client-side filters --search and --tag are applied locally.").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--search <q>", "Filter by keyword").option("--tag <t>", "Filter by category").action(runSkillCatalog);
11264
11357
  skill.command("list").alias("ls").description("List skills available to the tenant.").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--custom-only", "Only show tenant-owned custom skills (source=tenant)").action(runSkillList);
11265
- skill.command("install <slug>").description("Install a public skill. (API surface pending \u2014 toggle per-agent via `agent skills set`.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--version <v>", "Pin to a specific version").action(() => notYetImplementedAtApi3("install"));
11266
- skill.command("upgrade <slug>").description("Upgrade an installed skill. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").action(() => notYetImplementedAtApi3("upgrade"));
11267
- skill.command("create [slug]").description("Publish a custom tenant-scoped skill. (Use `skill push <folder>` for now.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--name <n>").option("--description <text>").option("--manifest-file <path>", "Path to the MCP server manifest JSON").option("--endpoint <url>", "MCP server HTTP/SSE endpoint").action(() => notYetImplementedAtApi3("create"));
11268
- skill.command("update <slug>").description("Update a custom skill. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--name <n>").option("--description <text>").option("--manifest-file <path>").option("--endpoint <url>").action(() => notYetImplementedAtApi3("update"));
11269
- skill.command("delete <slug>").description("Delete a custom skill. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("-y, --yes", "Skip confirmation").action(() => notYetImplementedAtApi3("delete"));
11358
+ skill.command("install <slug>").description("Install a public skill. (API surface pending \u2014 toggle per-agent via `agent skills set`.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--version <v>", "Pin to a specific version").action(() => notYetImplementedAtApi2("install"));
11359
+ skill.command("upgrade <slug>").description("Upgrade an installed skill. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").action(() => notYetImplementedAtApi2("upgrade"));
11360
+ skill.command("create [slug]").description("Publish a custom tenant-scoped skill. (Use `skill push <folder>` for now.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--name <n>").option("--description <text>").option("--manifest-file <path>", "Path to the MCP server manifest JSON").option("--endpoint <url>", "MCP server HTTP/SSE endpoint").action(() => notYetImplementedAtApi2("create"));
11361
+ skill.command("update <slug>").description("Update a custom skill. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("--name <n>").option("--description <text>").option("--manifest-file <path>").option("--endpoint <url>").action(() => notYetImplementedAtApi2("update"));
11362
+ skill.command("delete <slug>").description("Delete a custom skill. (API surface pending.)").option("-s, --stage <name>", "Deployment stage").option("-t, --tenant <slug>", "Tenant slug").option("-y, --yes", "Skip confirmation").action(() => notYetImplementedAtApi2("delete"));
11270
11363
  skill.command("push <folder>").description(
11271
11364
  "Zip a local plugin folder and upload it to the tenant as a pending plugin."
11272
11365
  ).option("-s, --stage <name>", "Deployment stage").option("--region <name>", "AWS region", "us-east-1").addHelpText(
@@ -231,7 +231,8 @@ locals {
231
231
  ROUTINE_TASK_PYTHON_FUNCTION_NAME = "thinkwork-${var.stage}-api-routine-task-python"
232
232
  ADMIN_OPS_MCP_FUNCTION_NAME = "thinkwork-${var.stage}-api-admin-ops-mcp"
233
233
  SLACK_SEND_FUNCTION_NAME = "thinkwork-${var.stage}-api-slack-send"
234
- REQUESTER_IDLE_MEMORY_LEARNING_ENABLED = tostring(var.requester_idle_memory_learning_enabled)
234
+ # requester idle memory learning defaults on in API code so this
235
+ # env-heavy Lambda can stay below AWS's 4 KB environment limit.
235
236
  # Phase 3 U10 — compliance read resolvers (complianceEvents,
236
237
  # complianceEvent, complianceEventByHash) connect to Aurora as
237
238
  # the compliance_reader role. The existing lambda_secrets policy
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "thinkwork-cli",
3
- "version": "0.12.5",
3
+ "version": "0.12.6",
4
4
  "description": "Thinkwork CLI — deploy, manage, and interact with your Thinkwork stack",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",