@togglhq/mcp 1.6.16 → 1.7.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.
@@ -11521,7 +11521,7 @@ const _safeParse = (_Err) => (schema, value, _ctx) => {
11521
11521
  data: result.value
11522
11522
  };
11523
11523
  };
11524
- const safeParse$2 = /* @__PURE__ */ _safeParse($ZodRealError);
11524
+ const safeParse$3 = /* @__PURE__ */ _safeParse($ZodRealError);
11525
11525
  const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {
11526
11526
  const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };
11527
11527
  let result = schema._zod.run({
@@ -12101,7 +12101,7 @@ const $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
12101
12101
  defineLazy(inst, "~standard", () => ({
12102
12102
  validate: (value) => {
12103
12103
  try {
12104
- const r = safeParse$2(inst, value);
12104
+ const r = safeParse$3(inst, value);
12105
12105
  return r.success ? { value: r.data } : { issues: r.error?.issues };
12106
12106
  } catch (_) {
12107
12107
  return safeParseAsync$1(inst, value).then((r) => r.success ? { value: r.data } : { issues: r.error?.issues });
@@ -14440,9 +14440,9 @@ $constructor("ZodError", initializer);
14440
14440
  const ZodRealError = $constructor("ZodError", initializer, { Parent: Error });
14441
14441
  //#endregion
14442
14442
  //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js
14443
- const parse$1 = /* @__PURE__ */ _parse(ZodRealError);
14443
+ const parse = /* @__PURE__ */ _parse(ZodRealError);
14444
14444
  const parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
14445
- const safeParse$1 = /* @__PURE__ */ _safeParse(ZodRealError);
14445
+ const safeParse$2 = /* @__PURE__ */ _safeParse(ZodRealError);
14446
14446
  const safeParseAsync = /* @__PURE__ */ _safeParseAsync(ZodRealError);
14447
14447
  const encode = /* @__PURE__ */ _encode(ZodRealError);
14448
14448
  const decode = /* @__PURE__ */ _decode(ZodRealError);
@@ -14478,8 +14478,8 @@ const ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
14478
14478
  reg.add(inst, meta);
14479
14479
  return inst;
14480
14480
  });
14481
- inst.parse = (data, params) => parse$1(inst, data, params, { callee: inst.parse });
14482
- inst.safeParse = (data, params) => safeParse$1(inst, data, params);
14481
+ inst.parse = (data, params) => parse(inst, data, params, { callee: inst.parse });
14482
+ inst.safeParse = (data, params) => safeParse$2(inst, data, params);
14483
14483
  inst.parseAsync = async (data, params) => parseAsync(inst, data, params, { callee: inst.parseAsync });
14484
14484
  inst.safeParseAsync = async (data, params) => safeParseAsync(inst, data, params);
14485
14485
  inst.spa = inst.safeParseAsync;
@@ -16640,7 +16640,7 @@ function assertCompleteRequestResourceTemplate(request) {
16640
16640
  * Returns a discriminated union with success/error.
16641
16641
  */
16642
16642
  function parseSchema(schema, data) {
16643
- return safeParse$1(schema, data);
16643
+ return safeParse$2(schema, data);
16644
16644
  }
16645
16645
  /**
16646
16646
  * Checks if a task status represents a terminal state.
@@ -25636,6 +25636,46 @@ function minValue$1(requirement, message$1) {
25636
25636
  }
25637
25637
  };
25638
25638
  }
25639
+ /**
25640
+ * Checks if a dataset is partially typed.
25641
+ *
25642
+ * @param dataset The dataset to check.
25643
+ * @param paths The paths to check.
25644
+ *
25645
+ * @returns Whether it is partially typed.
25646
+ *
25647
+ * @internal
25648
+ */
25649
+ /* @__NO_SIDE_EFFECTS__ */
25650
+ function _isPartiallyTyped(dataset, paths) {
25651
+ if (dataset.issues) for (const path of paths) for (const issue of dataset.issues) {
25652
+ let typed = false;
25653
+ const bound = Math.min(path.length, issue.path?.length ?? 0);
25654
+ for (let index = 0; index < bound; index++) if (path[index] !== issue.path[index].key && (path[index] !== "$" || issue.path[index].type !== "array")) {
25655
+ typed = true;
25656
+ break;
25657
+ }
25658
+ if (!typed) return false;
25659
+ }
25660
+ return true;
25661
+ }
25662
+ /* @__NO_SIDE_EFFECTS__ */
25663
+ function partialCheck(paths, requirement, message$1) {
25664
+ return {
25665
+ kind: "validation",
25666
+ type: "partial_check",
25667
+ reference: partialCheck,
25668
+ async: false,
25669
+ expects: null,
25670
+ paths,
25671
+ requirement,
25672
+ message: message$1,
25673
+ "~run"(dataset, config$1) {
25674
+ if ((dataset.typed || /* @__PURE__ */ _isPartiallyTyped(dataset, paths)) && !this.requirement(dataset.value)) _addIssue$1(this, "input", dataset, config$1);
25675
+ return dataset;
25676
+ }
25677
+ };
25678
+ }
25639
25679
  /* @__NO_SIDE_EFFECTS__ */
25640
25680
  function regex(requirement, message$1) {
25641
25681
  return {
@@ -25653,6 +25693,24 @@ function regex(requirement, message$1) {
25653
25693
  };
25654
25694
  }
25655
25695
  /**
25696
+ * Creates a to upper case transformation action.
25697
+ *
25698
+ * @returns A to upper case action.
25699
+ */
25700
+ /* @__NO_SIDE_EFFECTS__ */
25701
+ function toUpperCase() {
25702
+ return {
25703
+ kind: "transformation",
25704
+ type: "to_upper_case",
25705
+ reference: toUpperCase,
25706
+ async: false,
25707
+ "~run"(dataset) {
25708
+ dataset.value = dataset.value.toUpperCase();
25709
+ return dataset;
25710
+ }
25711
+ };
25712
+ }
25713
+ /**
25656
25714
  * Creates a custom transformation action.
25657
25715
  *
25658
25716
  * @param operation The transformation operation.
@@ -25674,6 +25732,24 @@ function transform$1(operation) {
25674
25732
  };
25675
25733
  }
25676
25734
  /**
25735
+ * Creates a trim transformation action.
25736
+ *
25737
+ * @returns A trim action.
25738
+ */
25739
+ /* @__NO_SIDE_EFFECTS__ */
25740
+ function trim() {
25741
+ return {
25742
+ kind: "transformation",
25743
+ type: "trim",
25744
+ reference: trim,
25745
+ async: false,
25746
+ "~run"(dataset) {
25747
+ dataset.value = dataset.value.trim();
25748
+ return dataset;
25749
+ }
25750
+ };
25751
+ }
25752
+ /**
25677
25753
  * Returns the fallback value of the schema.
25678
25754
  *
25679
25755
  * @param schema The schema to get it from.
@@ -25687,6 +25763,44 @@ function getFallback$1(schema, dataset, config$1) {
25687
25763
  return typeof schema.fallback === "function" ? schema.fallback(dataset, config$1) : schema.fallback;
25688
25764
  }
25689
25765
  /**
25766
+ * Forwards the issues of the passed validation action.
25767
+ *
25768
+ * @param action The validation action.
25769
+ * @param path The path to forward the issues to.
25770
+ *
25771
+ * @returns The modified action.
25772
+ */
25773
+ /* @__NO_SIDE_EFFECTS__ */
25774
+ function forward(action, path) {
25775
+ return {
25776
+ ...action,
25777
+ "~run"(dataset, config$1) {
25778
+ const prevIssues = dataset.issues && [...dataset.issues];
25779
+ dataset = action["~run"](dataset, config$1);
25780
+ if (dataset.issues) {
25781
+ for (const issue of dataset.issues) if (!prevIssues?.includes(issue)) {
25782
+ let pathInput = dataset.value;
25783
+ for (const key of path) {
25784
+ const pathValue = pathInput[key];
25785
+ const pathItem = {
25786
+ type: "unknown",
25787
+ origin: "value",
25788
+ input: pathInput,
25789
+ key,
25790
+ value: pathValue
25791
+ };
25792
+ if (issue.path) issue.path.push(pathItem);
25793
+ else issue.path = [pathItem];
25794
+ if (!pathValue) break;
25795
+ pathInput = pathValue;
25796
+ }
25797
+ }
25798
+ }
25799
+ return dataset;
25800
+ }
25801
+ };
25802
+ }
25803
+ /**
25690
25804
  * Returns the default value of the schema.
25691
25805
  *
25692
25806
  * @param schema The schema to get it from.
@@ -26140,6 +26254,87 @@ function record$1(key, value$1, message$1) {
26140
26254
  };
26141
26255
  }
26142
26256
  /* @__NO_SIDE_EFFECTS__ */
26257
+ function strictObject(entries$1, message$1) {
26258
+ return {
26259
+ kind: "schema",
26260
+ type: "strict_object",
26261
+ reference: strictObject,
26262
+ expects: "Object",
26263
+ async: false,
26264
+ entries: entries$1,
26265
+ message: message$1,
26266
+ get "~standard"() {
26267
+ return /* @__PURE__ */ _getStandardProps$1(this);
26268
+ },
26269
+ "~run"(dataset, config$1) {
26270
+ const input = dataset.value;
26271
+ if (input && typeof input === "object") {
26272
+ dataset.typed = true;
26273
+ dataset.value = {};
26274
+ for (const key in this.entries) {
26275
+ const valueSchema = this.entries[key];
26276
+ if (key in input || (valueSchema.type === "exact_optional" || valueSchema.type === "optional" || valueSchema.type === "nullish") && valueSchema.default !== void 0) {
26277
+ const value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault$1(valueSchema);
26278
+ const valueDataset = valueSchema["~run"]({ value: value$1 }, config$1);
26279
+ if (valueDataset.issues) {
26280
+ const pathItem = {
26281
+ type: "object",
26282
+ origin: "value",
26283
+ input,
26284
+ key,
26285
+ value: value$1
26286
+ };
26287
+ for (const issue of valueDataset.issues) {
26288
+ if (issue.path) issue.path.unshift(pathItem);
26289
+ else issue.path = [pathItem];
26290
+ dataset.issues?.push(issue);
26291
+ }
26292
+ if (!dataset.issues) dataset.issues = valueDataset.issues;
26293
+ if (config$1.abortEarly) {
26294
+ dataset.typed = false;
26295
+ break;
26296
+ }
26297
+ }
26298
+ if (!valueDataset.typed) dataset.typed = false;
26299
+ dataset.value[key] = valueDataset.value;
26300
+ } else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback$1(valueSchema);
26301
+ else if (valueSchema.type !== "exact_optional" && valueSchema.type !== "optional" && valueSchema.type !== "nullish") {
26302
+ _addIssue$1(this, "key", dataset, config$1, {
26303
+ input: void 0,
26304
+ expected: `"${key}"`,
26305
+ path: [{
26306
+ type: "object",
26307
+ origin: "key",
26308
+ input,
26309
+ key,
26310
+ value: input[key]
26311
+ }]
26312
+ });
26313
+ if (config$1.abortEarly) break;
26314
+ }
26315
+ }
26316
+ if (!dataset.issues || !config$1.abortEarly) {
26317
+ for (const key in input) if (!(key in this.entries)) {
26318
+ _addIssue$1(this, "key", dataset, config$1, {
26319
+ input: key,
26320
+ expected: "never",
26321
+ path: [{
26322
+ type: "object",
26323
+ origin: "key",
26324
+ input,
26325
+ key,
26326
+ value: input[key]
26327
+ }]
26328
+ });
26329
+ break;
26330
+ }
26331
+ }
26332
+ } else _addIssue$1(this, "type", dataset, config$1);
26333
+ return dataset;
26334
+ }
26335
+ };
26336
+ }
26337
+ /* @__NO_SIDE_EFFECTS__ */
26143
26338
  function string$1(message$1) {
26144
26339
  return {
26145
26340
  kind: "schema",
@@ -26277,7 +26472,7 @@ function pipe$2(...pipe$1) {
26277
26472
  * @returns The parse result.
26278
26473
  */
26279
26474
  /* @__NO_SIDE_EFFECTS__ */
26280
- function safeParse(schema, input, config$1) {
26475
+ function safeParse$1(schema, input, config$1) {
26281
26476
  const dataset = schema["~run"]({ value: input }, /* @__PURE__ */ getGlobalConfig$1(config$1));
26282
26477
  return {
26283
26478
  typed: dataset.typed,
@@ -28227,21 +28422,6 @@ function _joinExpects(values$1, separator) {
28227
28422
  return list[0] ?? "never";
28228
28423
  }
28229
28424
  /**
28230
- * A Valibot error with useful information.
28231
- */
28232
- var ValiError = class extends Error {
28233
- /**
28234
- * Creates a Valibot error with useful information.
28235
- *
28236
- * @param issues The error issues.
28237
- */
28238
- constructor(issues) {
28239
- super(issues[0].message);
28240
- this.name = "ValiError";
28241
- this.issues = issues;
28242
- }
28243
- };
28244
- /**
28245
28425
  * [Email address](https://en.wikipedia.org/wiki/Email_address) regex.
28246
28426
  */
28247
28427
  const EMAIL_REGEX = /^[\w+-]+(?:\.[\w+-]+)*@[\da-z]+(?:[.-][\da-z]+)*\.[a-z]{2,}$/iu;
@@ -28893,20 +29073,6 @@ function unknown() {
28893
29073
  }
28894
29074
  };
28895
29075
  }
28896
- /**
28897
- * Parses an unknown input based on a schema.
28898
- *
28899
- * @param schema The schema to be used.
28900
- * @param input The input to be parsed.
28901
- * @param config The parse configuration.
28902
- *
28903
- * @returns The parsed input.
28904
- */
28905
- function parse(schema, input, config$1) {
28906
- const dataset = schema["~run"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));
28907
- if (dataset.issues) throw new ValiError(dataset.issues);
28908
- return dataset.value;
28909
- }
28910
29076
  /* @__NO_SIDE_EFFECTS__ */
28911
29077
  function pipe(...pipe$1) {
28912
29078
  return {
@@ -28927,6 +29093,25 @@ function pipe(...pipe$1) {
28927
29093
  }
28928
29094
  };
28929
29095
  }
29096
+ /**
29097
+ * Parses an unknown input based on a schema.
29098
+ *
29099
+ * @param schema The schema to be used.
29100
+ * @param input The input to be parsed.
29101
+ * @param config The parse configuration.
29102
+ *
29103
+ * @returns The parse result.
29104
+ */
29105
+ /* @__NO_SIDE_EFFECTS__ */
29106
+ function safeParse(schema, input, config$1) {
29107
+ const dataset = schema["~run"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));
29108
+ return {
29109
+ typed: dataset.typed,
29110
+ success: !dataset.issues,
29111
+ output: dataset.value,
29112
+ issues: dataset.issues
29113
+ };
29114
+ }
28930
29115
  //#endregion
28931
29116
  //#region ../focus-queries/dist/schemas/index.ts
28932
29117
  const ClientLiteSchema = /* @__PURE__ */ object({
@@ -30767,7 +30952,7 @@ const PublicMeEntryRequestSchema = /* @__PURE__ */ object$2({
30767
30952
  ]))
30768
30953
  });
30769
30954
  //#endregion
30770
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/org/invitation/requests.mjs
30955
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/org/invitation/requests.mjs
30771
30956
  async function getInvitations(httpClient, signal) {
30772
30957
  return (await httpClient.get(`invitations`, { signal })).json();
30773
30958
  }
@@ -30784,7 +30969,7 @@ async function resendInvitation(httpClient, organization_id, organization_user_i
30784
30969
  return (await httpClient.post(`organizations/${organization_id}/invitations/${organization_user_id}/resend`, { signal })).json();
30785
30970
  }
30786
30971
  //#endregion
30787
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/org/utils/requests.mjs
30972
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/org/utils/requests.mjs
30788
30973
  function buildSearchParams$1(params, flattenArrays = false) {
30789
30974
  const searchParams = new URLSearchParams();
30790
30975
  Object.entries(params).forEach(([key, value]) => {
@@ -30796,7 +30981,7 @@ function buildSearchParams$1(params, flattenArrays = false) {
30796
30981
  return searchParams;
30797
30982
  }
30798
30983
  //#endregion
30799
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/org/organization-user/requests.mjs
30984
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/org/organization-user/requests.mjs
30800
30985
  async function getOrganizationUser(httpClient, organization_id, organization_user_id, signal) {
30801
30986
  return (await httpClient.get(`organizations/${organization_id}/users/${organization_user_id}`, { signal })).json();
30802
30987
  }
@@ -30810,7 +30995,7 @@ async function patchOrganizationUserActive(httpClient, organization_id, organiza
30810
30995
  return (await httpClient.patch(`organizations/${organization_id}/users/${organization_user_id}/active_status/${status}`, { signal })).json();
30811
30996
  }
30812
30997
  //#endregion
30813
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/org/workspace/requests.mjs
30998
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/org/workspace/requests.mjs
30814
30999
  async function getWorkspaces(httpClient, organization_id, signal) {
30815
31000
  return (await httpClient.get(`organizations/${organization_id}/workspaces`, { signal })).json();
30816
31001
  }
@@ -30830,7 +31015,7 @@ const WorkingHoursUpdateInputSchema = /* @__PURE__ */ object$2({
30830
31015
  });
30831
31016
  const StatusOKSchema = /* @__PURE__ */ object$2({ status: /* @__PURE__ */ string$1() });
30832
31017
  //#endregion
30833
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/shared-data/utils/requests.mjs
31018
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/shared-data/utils/requests.mjs
30834
31019
  const META_SYMBOL = Symbol.for("querygen:response:meta");
30835
31020
  function withResponseMeta(data, headers, status) {
30836
31021
  if (!data) return data;
@@ -30857,7 +31042,7 @@ function buildSearchParams(params, flattenArrays = false) {
30857
31042
  return searchParams;
30858
31043
  }
30859
31044
  //#endregion
30860
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/shared-data/public-holidays/requests.mjs
31045
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/shared-data/public-holidays/requests.mjs
30861
31046
  async function getPublicHolidays(httpClient, year, { country, organization_id } = {}, signal) {
30862
31047
  const response = await httpClient.get(`shared_data/api/publicholidays/${year}`, {
30863
31048
  signal,
@@ -30869,12 +31054,12 @@ async function getPublicHolidays(httpClient, year, { country, organization_id }
30869
31054
  return withResponseMeta(await response.json(), response.headers, response.status);
30870
31055
  }
30871
31056
  //#endregion
30872
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/shared-data/status/requests.mjs
31057
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/shared-data/status/requests.mjs
30873
31058
  async function getStatus(httpClient, signal) {
30874
31059
  return (await httpClient.get(`shared_data/api/status`, { signal })).json();
30875
31060
  }
30876
31061
  //#endregion
30877
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/org/timeoff/requests.mjs
31062
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/org/timeoff/requests.mjs
30878
31063
  async function timeoffListMyEntries(httpClient, organization_id, { from, to }, signal) {
30879
31064
  return (await httpClient.get(`timeoff/organizations/${organization_id}/me`, {
30880
31065
  signal,
@@ -30902,7 +31087,7 @@ async function timeoffDeleteMyEntry(httpClient, organization_id, id, signal) {
30902
31087
  return response.json();
30903
31088
  }
30904
31089
  //#endregion
30905
- //#region ../../node_modules/.pnpm/@toggl+queries@2.1.194_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_cf1b2da807173ec251cc74d839ac4fe6/node_modules/@toggl/queries/dist/shared-data/working-hours/requests.mjs
31090
+ //#region ../../node_modules/.pnpm/@toggl+queries@2.1.212_@tanstack+react-query@5.99.0_react@19.2.5__@toggl+sync@0.2.4_rea_d4c0aa64421be7eab39751554cfd6b93/node_modules/@toggl/queries/dist/shared-data/working-hours/requests.mjs
30906
31091
  async function getMyWorkingHours(httpClient, organization_id, signal) {
30907
31092
  return (await httpClient.get(`shared_data/api/workinghours/${organization_id}/me`, { signal })).json();
30908
31093
  }
@@ -31063,7 +31248,7 @@ function validationErrorMessage(issues) {
31063
31248
  return issues.map((issue) => issue.message ?? "invalid").join("; ");
31064
31249
  }
31065
31250
  function validateOutput(schema, data, label) {
31066
- const result = /* @__PURE__ */ safeParse(schema, data);
31251
+ const result = /* @__PURE__ */ safeParse$1(schema, data);
31067
31252
  if (!result.success) return {
31068
31253
  ok: false,
31069
31254
  status: 422,
@@ -32668,7 +32853,7 @@ function createAuthenticatedClientProxy() {
32668
32853
  } });
32669
32854
  }
32670
32855
  //#endregion
32671
- //#region ../operations/build/safety-DUCLJgdI.js
32856
+ //#region ../operations/build/validation-v3-RQf0k.js
32672
32857
  const optionalNumber = /* @__PURE__ */ optional$1(/* @__PURE__ */ number$2());
32673
32858
  const perPageField = (max) => /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ number$2(), /* @__PURE__ */ integer(), /* @__PURE__ */ minValue$1(1), /* @__PURE__ */ maxValue$1(max), /* @__PURE__ */ description$1(`Results per page (1-${max})`)));
32674
32859
  const perPageSchema = perPageField(100);
@@ -32676,6 +32861,13 @@ const orgUserPerPageSchema = perPageField(200);
32676
32861
  const DATE_FIELD_RE = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2}))?$/;
32677
32862
  const dateField = (description) => /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ regex(DATE_FIELD_RE, "must be YYYY-MM-DD or RFC3339 datetime (e.g. '2025-01-01' or '2025-01-01T00:00:00Z')"), /* @__PURE__ */ description$1(description));
32678
32863
  const apiDateTimeString = /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoTimestamp());
32864
+ const rateDateSchema = /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1());
32865
+ const rateSchedulePayloadSchema = /* @__PURE__ */ pipe$2(/* @__PURE__ */ strictObject({
32866
+ currency: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ trim(), /* @__PURE__ */ toUpperCase(), /* @__PURE__ */ regex(/^[A-Z]{3}$/, "must be exactly three A-Z letters")),
32867
+ hourly_rate: /* @__PURE__ */ pipe$2(/* @__PURE__ */ number$2(), /* @__PURE__ */ minValue$1(0)),
32868
+ start_date: rateDateSchema,
32869
+ end_date: /* @__PURE__ */ optional$1(rateDateSchema)
32870
+ }), /* @__PURE__ */ forward(/* @__PURE__ */ partialCheck([["start_date"], ["end_date"]], ({ start_date, end_date }) => end_date === void 0 || end_date >= start_date, "must be on or after start_date"), ["end_date"]));
32679
32871
  const tagIdFilterSchema = /* @__PURE__ */ union$1([/* @__PURE__ */ pipe$2(/* @__PURE__ */ number$2(), /* @__PURE__ */ transform$1((tagId) => [tagId])), /* @__PURE__ */ pipe$2(/* @__PURE__ */ array$1(/* @__PURE__ */ number$2()), /* @__PURE__ */ minLength$1(1))]);
32680
32872
  const timeBlockListSchema = /* @__PURE__ */ object$2({
32681
32873
  date_from: dateField("Range start — date-only (e.g. '2025-01-01') or RFC3339 datetime. Date-only is expanded to T00:00:00Z."),
@@ -32912,10 +33104,58 @@ const clientOverrides = { "focus.clients.list": {
32912
33104
  }],
32913
33105
  aliases: ["ls"]
32914
33106
  } };
33107
+ const RATE_CONFLICT_CHECK = {
33108
+ safety: "read",
33109
+ destructive: false
33110
+ };
33111
+ const RATE_SCHEDULE_GUIDANCE = "hourly_rate is in the currency's smallest unit, so it depends on the currency: two-decimal currencies like USD/EUR use cents (5000 = 50.00), zero-decimal ones like JPY/KRW use whole units (5000 = 5000), three-decimal ones like KWD/BHD use thousandths. Reads return the same unit. Omit end_date for an open-ended schedule; when set it must be on or after start_date.";
33112
+ const rateOverrides = {
33113
+ "focus.rates.create-project": { mcp: { entityTool: void 0 } },
33114
+ "focus.rates.billable-check-project-billable-rate-conflicts": {
33115
+ ...RATE_CONFLICT_CHECK,
33116
+ agentGuidance: RATE_SCHEDULE_GUIDANCE
33117
+ },
33118
+ "focus.rates.billable-check-project-user-billable-rate-conflicts": {
33119
+ ...RATE_CONFLICT_CHECK,
33120
+ agentGuidance: RATE_SCHEDULE_GUIDANCE
33121
+ },
33122
+ "focus.rates.billable-check-workspace-billable-rate-conflicts": {
33123
+ ...RATE_CONFLICT_CHECK,
33124
+ agentGuidance: RATE_SCHEDULE_GUIDANCE
33125
+ },
33126
+ "focus.rates.billable-check-workspace-user-billable-rate-conflicts": {
33127
+ ...RATE_CONFLICT_CHECK,
33128
+ agentGuidance: RATE_SCHEDULE_GUIDANCE
33129
+ },
33130
+ "focus.rates.billable-upsert-project": { agentGuidance: RATE_SCHEDULE_GUIDANCE },
33131
+ "focus.rates.billable-upsert-project-user": { agentGuidance: RATE_SCHEDULE_GUIDANCE },
33132
+ "focus.rates.billable-upsert-workspace": { agentGuidance: RATE_SCHEDULE_GUIDANCE },
33133
+ "focus.rates.billable-upsert-workspace-user": { agentGuidance: RATE_SCHEDULE_GUIDANCE },
33134
+ "focus.rates.labor-check-project-labor-cost-conflicts": {
33135
+ ...RATE_CONFLICT_CHECK,
33136
+ agentGuidance: RATE_SCHEDULE_GUIDANCE
33137
+ },
33138
+ "focus.rates.labor-check-project-user-labor-cost-conflicts": {
33139
+ ...RATE_CONFLICT_CHECK,
33140
+ agentGuidance: RATE_SCHEDULE_GUIDANCE
33141
+ },
33142
+ "focus.rates.labor-check-workspace-labor-cost-conflicts": {
33143
+ ...RATE_CONFLICT_CHECK,
33144
+ agentGuidance: RATE_SCHEDULE_GUIDANCE
33145
+ },
33146
+ "focus.rates.labor-check-workspace-user-labor-cost-conflicts": {
33147
+ ...RATE_CONFLICT_CHECK,
33148
+ agentGuidance: RATE_SCHEDULE_GUIDANCE
33149
+ },
33150
+ "focus.rates.labor-upsert-project-labor-cost-rate": { agentGuidance: RATE_SCHEDULE_GUIDANCE },
33151
+ "focus.rates.labor-upsert-project-user-labor-cost-rate": { agentGuidance: RATE_SCHEDULE_GUIDANCE },
33152
+ "focus.rates.labor-upsert-workspace-labor-cost-rate": { agentGuidance: RATE_SCHEDULE_GUIDANCE },
33153
+ "focus.rates.labor-upsert-workspace-user-labor-cost-rate": { agentGuidance: RATE_SCHEDULE_GUIDANCE }
33154
+ };
32915
33155
  const compositeOverrides = {
32916
33156
  "focus.composite.create-project": {
32917
33157
  description: "Create a project with related data such as members, milestones, rates, and billable rates.",
32918
- agentGuidance: "Follow the create action's privacy and billable guidance. Project fields go under payload.project.",
33158
+ agentGuidance: `Follow the create action's privacy and billable guidance. Project fields go under payload.project. Set rates through payload.billable_rates, not the legacy payload.rates (start_at/end_at). For payload.billable_rates: ${RATE_SCHEDULE_GUIDANCE}`,
32919
33159
  cli: {
32920
33160
  group: ["projects"],
32921
33161
  command: "create-advanced",
@@ -33282,6 +33522,18 @@ const projectOverrides = {
33282
33522
  }
33283
33523
  };
33284
33524
  const publicHolidayOverrides = { "focus.public-holidays.get-by-user-ids": { cli: { interactive: "hidden" } } };
33525
+ const readOnlyPostOverrides = Object.fromEntries([
33526
+ "focus.reports.get-flexq-data",
33527
+ "focus.reports.get-flexq-dictionary",
33528
+ "focus.reports.get-workload",
33529
+ "focus.tasks.suggestions-get-project-suggestion-for-atask",
33530
+ "focus.tasks.suggestions-get-project-suggestions-for-multiple-tasks",
33531
+ "focus.time-log-suggestions.get-for-acalendar-event-title",
33532
+ "focus.time-log-suggestions.get-for-multiple-calendar-event-titles"
33533
+ ].map((id) => [id, {
33534
+ safety: "read",
33535
+ destructive: false
33536
+ }]));
33285
33537
  const savedViewOverrides = {
33286
33538
  "focus.saved-views.list": {
33287
33539
  agentGuidance: "Saved views are per-user, so results belong to the authenticated user. Filter by type (inbox, archive, board, timeline, project, project.tasks, project.board, project.timeline, projects) or by partial name match. pinned=true entries are the user's starred views.",
@@ -34055,6 +34307,41 @@ const orgSharedOperations = [
34055
34307
  function operationRequiresConfirmation(operation) {
34056
34308
  return operation.destructive || operation.safety !== "read";
34057
34309
  }
34310
+ const MAX_ERROR_LENGTH = 200;
34311
+ const MAX_RECEIVED_LENGTH = 40;
34312
+ function formatIssueMessage(issue) {
34313
+ if (issue.message.includes("but received undefined")) return "required";
34314
+ if (issue.received.length <= MAX_RECEIVED_LENGTH) return issue.message;
34315
+ const index = issue.message.lastIndexOf(issue.received);
34316
+ if (index === -1) return issue.message;
34317
+ const closer = issue.received.startsWith("\"") && issue.received.endsWith("\"") ? "\"" : "";
34318
+ const received = `${issue.received.slice(0, MAX_RECEIVED_LENGTH - 3 - closer.length)}...${closer}`;
34319
+ return issue.message.slice(0, index) + received + issue.message.slice(index + issue.received.length);
34320
+ }
34321
+ function formatValibotError(issues, maxLength = MAX_ERROR_LENGTH) {
34322
+ const messages = issues.map((issue) => {
34323
+ const path = issue.path?.map((segment) => String(segment.key)).join(".") ?? "";
34324
+ const message = formatIssueMessage(issue);
34325
+ return path ? `${path}: ${message}` : message;
34326
+ });
34327
+ if (messages.length === 0) return "";
34328
+ const separators = (messages.length - 1) * 2;
34329
+ if (messages.reduce((sum, message) => sum + message.length, separators) <= maxLength) return messages.join("; ");
34330
+ let included = 0;
34331
+ let length = 0;
34332
+ for (const message of messages) {
34333
+ const next = length + (included === 0 ? 0 : 2) + message.length;
34334
+ if (next + `; (+${messages.length - included - 1} more)`.length > maxLength) break;
34335
+ length = next;
34336
+ included += 1;
34337
+ }
34338
+ if (included === 0) {
34339
+ const suffix = messages.length > 1 ? `; (+${messages.length - 1} more)` : "";
34340
+ if (suffix.length >= maxLength) return messages[0].slice(0, Math.max(maxLength, 1));
34341
+ return messages[0].slice(0, maxLength - suffix.length) + suffix;
34342
+ }
34343
+ return [...messages.slice(0, included), `(+${messages.length - included} more)`].join("; ");
34344
+ }
34058
34345
  //#endregion
34059
34346
  //#region ../focus-queries/dist/audit-log/requests.ts
34060
34347
  async function getAuditLog(httpClient, organization_id, workspace_id, from, to, { entity_type, entity_id, action, user_id, page_size, page_number, export: export_ } = {}, signal) {
@@ -34674,14 +34961,17 @@ async function updateASavedView(httpClient, workspace_id, id, data, signal) {
34674
34961
  }
34675
34962
  //#endregion
34676
34963
  //#region ../focus-queries/dist/search/requests.ts
34677
- async function search(httpClient, organization_id, workspace_id, { keyword, per_group, assignee_user_id, include_drafts }, signal) {
34964
+ async function search(httpClient, organization_id, workspace_id, { keyword, per_group, assignee_user_id, project_id, task_id, include_drafts, exclude_calendar_events }, signal) {
34678
34965
  return await httpClient.get(`organizations/${organization_id}/workspaces/${workspace_id}/search`, {
34679
34966
  signal,
34680
34967
  searchParams: buildSearchParams$3({
34681
34968
  keyword,
34682
34969
  per_group,
34683
34970
  assignee_user_id,
34684
- include_drafts
34971
+ project_id,
34972
+ task_id,
34973
+ include_drafts,
34974
+ exclude_calendar_events
34685
34975
  })
34686
34976
  }).json();
34687
34977
  }
@@ -35231,7 +35521,7 @@ const generatedFocusOperations = [
35231
35521
  action: "get-computations",
35232
35522
  title: "Get Computations Capacities",
35233
35523
  description: "Get Computations Capacities.",
35234
- safety: "update",
35524
+ safety: "read",
35235
35525
  destructive: false,
35236
35526
  cli: {
35237
35527
  group: ["capacities"],
@@ -35437,12 +35727,7 @@ const generatedFocusOperations = [
35437
35727
  rrule: /* @__PURE__ */ optional$1(/* @__PURE__ */ string$1()),
35438
35728
  start_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
35439
35729
  }),
35440
- billable_rates: /* @__PURE__ */ optional$1(/* @__PURE__ */ array$1(/* @__PURE__ */ looseObject({
35441
- currency: /* @__PURE__ */ string$1(),
35442
- hourly_rate: /* @__PURE__ */ number$2(),
35443
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
35444
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
35445
- }))),
35730
+ billable_rates: /* @__PURE__ */ optional$1(/* @__PURE__ */ array$1(rateSchedulePayloadSchema)),
35446
35731
  members: /* @__PURE__ */ optional$1(/* @__PURE__ */ looseObject({
35447
35732
  role_id: /* @__PURE__ */ number$2(),
35448
35733
  group_ids: /* @__PURE__ */ optional$1(/* @__PURE__ */ array$1(/* @__PURE__ */ number$2())),
@@ -36865,12 +37150,12 @@ const generatedFocusOperations = [
36865
37150
  action: "complete",
36866
37151
  title: "Complete Projects",
36867
37152
  description: "Complete Projects.",
36868
- safety: "read",
37153
+ safety: "update",
36869
37154
  destructive: false,
36870
37155
  cli: {
36871
37156
  group: ["projects"],
36872
37157
  command: "complete",
36873
- interactive: "available"
37158
+ interactive: "default"
36874
37159
  },
36875
37160
  mcp: { entityTool: "projects" },
36876
37161
  inputSchema: /* @__PURE__ */ looseObject({ project_id: /* @__PURE__ */ number$2() }),
@@ -37529,12 +37814,12 @@ const generatedFocusOperations = [
37529
37814
  action: "pin",
37530
37815
  title: "Pin Projects",
37531
37816
  description: "Pin Projects.",
37532
- safety: "read",
37817
+ safety: "update",
37533
37818
  destructive: false,
37534
37819
  cli: {
37535
37820
  group: ["projects"],
37536
37821
  command: "pin",
37537
- interactive: "available"
37822
+ interactive: "default"
37538
37823
  },
37539
37824
  mcp: { entityTool: "projects" },
37540
37825
  inputSchema: /* @__PURE__ */ looseObject({ project_id: /* @__PURE__ */ number$2() }),
@@ -37556,12 +37841,12 @@ const generatedFocusOperations = [
37556
37841
  action: "remove-project-member",
37557
37842
  title: "Remove Project Member Projects",
37558
37843
  description: "Remove Project Member Projects.",
37559
- safety: "read",
37560
- destructive: false,
37844
+ safety: "delete",
37845
+ destructive: true,
37561
37846
  cli: {
37562
37847
  group: ["projects"],
37563
37848
  command: "remove-project-member",
37564
- interactive: "available"
37849
+ interactive: "default"
37565
37850
  },
37566
37851
  mcp: { entityTool: "projects" },
37567
37852
  inputSchema: /* @__PURE__ */ looseObject({
@@ -37644,12 +37929,12 @@ const generatedFocusOperations = [
37644
37929
  action: "uncomplete",
37645
37930
  title: "Uncomplete Projects",
37646
37931
  description: "Uncomplete Projects.",
37647
- safety: "read",
37932
+ safety: "update",
37648
37933
  destructive: false,
37649
37934
  cli: {
37650
37935
  group: ["projects"],
37651
37936
  command: "uncomplete",
37652
- interactive: "available"
37937
+ interactive: "default"
37653
37938
  },
37654
37939
  mcp: { entityTool: "projects" },
37655
37940
  inputSchema: /* @__PURE__ */ looseObject({ project_id: /* @__PURE__ */ number$2() }),
@@ -37671,12 +37956,12 @@ const generatedFocusOperations = [
37671
37956
  action: "unpin",
37672
37957
  title: "Unpin Projects",
37673
37958
  description: "Unpin Projects.",
37674
- safety: "read",
37675
- destructive: false,
37959
+ safety: "delete",
37960
+ destructive: true,
37676
37961
  cli: {
37677
37962
  group: ["projects"],
37678
37963
  command: "unpin",
37679
- interactive: "available"
37964
+ interactive: "default"
37680
37965
  },
37681
37966
  mcp: { entityTool: "projects" },
37682
37967
  inputSchema: /* @__PURE__ */ looseObject({ project_id: /* @__PURE__ */ number$2() }),
@@ -37842,21 +38127,16 @@ const generatedFocusOperations = [
37842
38127
  action: "billable-check-project-billable-rate-conflicts",
37843
38128
  title: "Billable Check Project Billable Rate Conflicts Rates",
37844
38129
  description: "Billable Check Project Billable Rate Conflicts Rates.",
37845
- safety: "read",
38130
+ safety: "update",
37846
38131
  destructive: false,
37847
38132
  cli: {
37848
38133
  group: ["rates", "billable"],
37849
38134
  command: "check-project-billable-rate-conflicts",
37850
- interactive: "available"
38135
+ interactive: "default"
37851
38136
  },
37852
38137
  mcp: { entityTool: "rates" },
37853
38138
  inputSchema: /* @__PURE__ */ looseObject({
37854
- payload: /* @__PURE__ */ looseObject({
37855
- currency: /* @__PURE__ */ string$1(),
37856
- hourly_rate: /* @__PURE__ */ number$2(),
37857
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
37858
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
37859
- }),
38139
+ payload: rateSchedulePayloadSchema,
37860
38140
  project_id: /* @__PURE__ */ number$2()
37861
38141
  }),
37862
38142
  execute: (input, { client }) => {
@@ -37878,21 +38158,16 @@ const generatedFocusOperations = [
37878
38158
  action: "billable-check-project-user-billable-rate-conflicts",
37879
38159
  title: "Billable Check Project User Billable Rate Conflicts Rates",
37880
38160
  description: "Billable Check Project User Billable Rate Conflicts Rates.",
37881
- safety: "read",
38161
+ safety: "update",
37882
38162
  destructive: false,
37883
38163
  cli: {
37884
38164
  group: ["rates", "billable"],
37885
38165
  command: "check-project-user-billable-rate-conflicts",
37886
- interactive: "available"
38166
+ interactive: "default"
37887
38167
  },
37888
38168
  mcp: { entityTool: "rates" },
37889
38169
  inputSchema: /* @__PURE__ */ looseObject({
37890
- payload: /* @__PURE__ */ looseObject({
37891
- currency: /* @__PURE__ */ string$1(),
37892
- hourly_rate: /* @__PURE__ */ number$2(),
37893
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
37894
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
37895
- }),
38170
+ payload: rateSchedulePayloadSchema,
37896
38171
  project_id: /* @__PURE__ */ number$2(),
37897
38172
  user_id: /* @__PURE__ */ number$2()
37898
38173
  }),
@@ -37916,20 +38191,15 @@ const generatedFocusOperations = [
37916
38191
  action: "billable-check-workspace-billable-rate-conflicts",
37917
38192
  title: "Billable Check Workspace Billable Rate Conflicts Rates",
37918
38193
  description: "Billable Check Workspace Billable Rate Conflicts Rates.",
37919
- safety: "read",
38194
+ safety: "update",
37920
38195
  destructive: false,
37921
38196
  cli: {
37922
38197
  group: ["rates", "billable"],
37923
38198
  command: "check-workspace-billable-rate-conflicts",
37924
- interactive: "available"
38199
+ interactive: "default"
37925
38200
  },
37926
38201
  mcp: { entityTool: "rates" },
37927
- inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({
37928
- currency: /* @__PURE__ */ string$1(),
37929
- hourly_rate: /* @__PURE__ */ number$2(),
37930
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
37931
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
37932
- }) }),
38202
+ inputSchema: /* @__PURE__ */ looseObject({ payload: rateSchedulePayloadSchema }),
37933
38203
  execute: (input, { client }) => {
37934
38204
  const data = input;
37935
38205
  return client.runGeneratedRequest("checkWorkspaceBillableRateConflicts", () => callGeneratedRequest(checkWorkspaceBillableRateConflicts, [
@@ -37948,21 +38218,16 @@ const generatedFocusOperations = [
37948
38218
  action: "billable-check-workspace-user-billable-rate-conflicts",
37949
38219
  title: "Billable Check Workspace User Billable Rate Conflicts Rates",
37950
38220
  description: "Billable Check Workspace User Billable Rate Conflicts Rates.",
37951
- safety: "read",
38221
+ safety: "update",
37952
38222
  destructive: false,
37953
38223
  cli: {
37954
38224
  group: ["rates", "billable"],
37955
38225
  command: "check-workspace-user-billable-rate-conflicts",
37956
- interactive: "available"
38226
+ interactive: "default"
37957
38227
  },
37958
38228
  mcp: { entityTool: "rates" },
37959
38229
  inputSchema: /* @__PURE__ */ looseObject({
37960
- payload: /* @__PURE__ */ looseObject({
37961
- currency: /* @__PURE__ */ string$1(),
37962
- hourly_rate: /* @__PURE__ */ number$2(),
37963
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
37964
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
37965
- }),
38230
+ payload: rateSchedulePayloadSchema,
37966
38231
  user_id: /* @__PURE__ */ number$2()
37967
38232
  }),
37968
38233
  execute: (input, { client }) => {
@@ -38366,12 +38631,7 @@ const generatedFocusOperations = [
38366
38631
  },
38367
38632
  mcp: { entityTool: "rates" },
38368
38633
  inputSchema: /* @__PURE__ */ looseObject({
38369
- payload: /* @__PURE__ */ looseObject({
38370
- currency: /* @__PURE__ */ string$1(),
38371
- hourly_rate: /* @__PURE__ */ number$2(),
38372
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
38373
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
38374
- }),
38634
+ payload: rateSchedulePayloadSchema,
38375
38635
  project_id: /* @__PURE__ */ number$2()
38376
38636
  }),
38377
38637
  execute: (input, { client }) => {
@@ -38402,12 +38662,7 @@ const generatedFocusOperations = [
38402
38662
  },
38403
38663
  mcp: { entityTool: "rates" },
38404
38664
  inputSchema: /* @__PURE__ */ looseObject({
38405
- payload: /* @__PURE__ */ looseObject({
38406
- currency: /* @__PURE__ */ string$1(),
38407
- hourly_rate: /* @__PURE__ */ number$2(),
38408
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
38409
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
38410
- }),
38665
+ payload: rateSchedulePayloadSchema,
38411
38666
  project_id: /* @__PURE__ */ number$2(),
38412
38667
  user_id: /* @__PURE__ */ number$2()
38413
38668
  }),
@@ -38439,12 +38694,7 @@ const generatedFocusOperations = [
38439
38694
  interactive: "default"
38440
38695
  },
38441
38696
  mcp: { entityTool: "rates" },
38442
- inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({
38443
- currency: /* @__PURE__ */ string$1(),
38444
- hourly_rate: /* @__PURE__ */ number$2(),
38445
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
38446
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
38447
- }) }),
38697
+ inputSchema: /* @__PURE__ */ looseObject({ payload: rateSchedulePayloadSchema }),
38448
38698
  execute: (input, { client }) => {
38449
38699
  const data = input;
38450
38700
  return client.runGeneratedRequest("upsertWorkspaceBillableRate", () => callGeneratedRequest(upsertWorkspaceBillableRate, [
@@ -38472,12 +38722,7 @@ const generatedFocusOperations = [
38472
38722
  },
38473
38723
  mcp: { entityTool: "rates" },
38474
38724
  inputSchema: /* @__PURE__ */ looseObject({
38475
- payload: /* @__PURE__ */ looseObject({
38476
- currency: /* @__PURE__ */ string$1(),
38477
- hourly_rate: /* @__PURE__ */ number$2(),
38478
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
38479
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
38480
- }),
38725
+ payload: rateSchedulePayloadSchema,
38481
38726
  user_id: /* @__PURE__ */ number$2()
38482
38727
  }),
38483
38728
  execute: (input, { client }) => {
@@ -38689,21 +38934,16 @@ const generatedFocusOperations = [
38689
38934
  action: "labor-check-project-labor-cost-conflicts",
38690
38935
  title: "Labor Check Project Labor Cost Conflicts Rates",
38691
38936
  description: "Labor Check Project Labor Cost Conflicts Rates.",
38692
- safety: "read",
38937
+ safety: "update",
38693
38938
  destructive: false,
38694
38939
  cli: {
38695
38940
  group: ["rates", "labor"],
38696
38941
  command: "check-project-labor-cost-conflicts",
38697
- interactive: "available"
38942
+ interactive: "default"
38698
38943
  },
38699
38944
  mcp: { entityTool: "rates" },
38700
38945
  inputSchema: /* @__PURE__ */ looseObject({
38701
- payload: /* @__PURE__ */ looseObject({
38702
- currency: /* @__PURE__ */ string$1(),
38703
- hourly_rate: /* @__PURE__ */ number$2(),
38704
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
38705
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
38706
- }),
38946
+ payload: rateSchedulePayloadSchema,
38707
38947
  project_id: /* @__PURE__ */ number$2()
38708
38948
  }),
38709
38949
  execute: (input, { client }) => {
@@ -38725,21 +38965,16 @@ const generatedFocusOperations = [
38725
38965
  action: "labor-check-project-user-labor-cost-conflicts",
38726
38966
  title: "Labor Check Project User Labor Cost Conflicts Rates",
38727
38967
  description: "Labor Check Project User Labor Cost Conflicts Rates.",
38728
- safety: "read",
38968
+ safety: "update",
38729
38969
  destructive: false,
38730
38970
  cli: {
38731
38971
  group: ["rates", "labor"],
38732
38972
  command: "check-project-user-labor-cost-conflicts",
38733
- interactive: "available"
38973
+ interactive: "default"
38734
38974
  },
38735
38975
  mcp: { entityTool: "rates" },
38736
38976
  inputSchema: /* @__PURE__ */ looseObject({
38737
- payload: /* @__PURE__ */ looseObject({
38738
- currency: /* @__PURE__ */ string$1(),
38739
- hourly_rate: /* @__PURE__ */ number$2(),
38740
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
38741
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
38742
- }),
38977
+ payload: rateSchedulePayloadSchema,
38743
38978
  project_id: /* @__PURE__ */ number$2(),
38744
38979
  user_id: /* @__PURE__ */ number$2()
38745
38980
  }),
@@ -38763,20 +38998,15 @@ const generatedFocusOperations = [
38763
38998
  action: "labor-check-workspace-labor-cost-conflicts",
38764
38999
  title: "Labor Check Workspace Labor Cost Conflicts Rates",
38765
39000
  description: "Labor Check Workspace Labor Cost Conflicts Rates.",
38766
- safety: "read",
39001
+ safety: "update",
38767
39002
  destructive: false,
38768
39003
  cli: {
38769
39004
  group: ["rates", "labor"],
38770
39005
  command: "check-workspace-labor-cost-conflicts",
38771
- interactive: "available"
39006
+ interactive: "default"
38772
39007
  },
38773
39008
  mcp: { entityTool: "rates" },
38774
- inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({
38775
- currency: /* @__PURE__ */ string$1(),
38776
- hourly_rate: /* @__PURE__ */ number$2(),
38777
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
38778
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
38779
- }) }),
39009
+ inputSchema: /* @__PURE__ */ looseObject({ payload: rateSchedulePayloadSchema }),
38780
39010
  execute: (input, { client }) => {
38781
39011
  const data = input;
38782
39012
  return client.runGeneratedRequest("checkWorkspaceLaborCostConflicts", () => callGeneratedRequest(checkWorkspaceLaborCostConflicts, [
@@ -38795,21 +39025,16 @@ const generatedFocusOperations = [
38795
39025
  action: "labor-check-workspace-user-labor-cost-conflicts",
38796
39026
  title: "Labor Check Workspace User Labor Cost Conflicts Rates",
38797
39027
  description: "Labor Check Workspace User Labor Cost Conflicts Rates.",
38798
- safety: "read",
39028
+ safety: "update",
38799
39029
  destructive: false,
38800
39030
  cli: {
38801
39031
  group: ["rates", "labor"],
38802
39032
  command: "check-workspace-user-labor-cost-conflicts",
38803
- interactive: "available"
39033
+ interactive: "default"
38804
39034
  },
38805
39035
  mcp: { entityTool: "rates" },
38806
39036
  inputSchema: /* @__PURE__ */ looseObject({
38807
- payload: /* @__PURE__ */ looseObject({
38808
- currency: /* @__PURE__ */ string$1(),
38809
- hourly_rate: /* @__PURE__ */ number$2(),
38810
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
38811
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
38812
- }),
39037
+ payload: rateSchedulePayloadSchema,
38813
39038
  user_id: /* @__PURE__ */ number$2()
38814
39039
  }),
38815
39040
  execute: (input, { client }) => {
@@ -39183,12 +39408,7 @@ const generatedFocusOperations = [
39183
39408
  },
39184
39409
  mcp: { entityTool: "rates" },
39185
39410
  inputSchema: /* @__PURE__ */ looseObject({
39186
- payload: /* @__PURE__ */ looseObject({
39187
- currency: /* @__PURE__ */ string$1(),
39188
- hourly_rate: /* @__PURE__ */ number$2(),
39189
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
39190
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
39191
- }),
39411
+ payload: rateSchedulePayloadSchema,
39192
39412
  project_id: /* @__PURE__ */ number$2()
39193
39413
  }),
39194
39414
  execute: (input, { client }) => {
@@ -39219,12 +39439,7 @@ const generatedFocusOperations = [
39219
39439
  },
39220
39440
  mcp: { entityTool: "rates" },
39221
39441
  inputSchema: /* @__PURE__ */ looseObject({
39222
- payload: /* @__PURE__ */ looseObject({
39223
- currency: /* @__PURE__ */ string$1(),
39224
- hourly_rate: /* @__PURE__ */ number$2(),
39225
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
39226
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
39227
- }),
39442
+ payload: rateSchedulePayloadSchema,
39228
39443
  project_id: /* @__PURE__ */ number$2(),
39229
39444
  user_id: /* @__PURE__ */ number$2()
39230
39445
  }),
@@ -39256,12 +39471,7 @@ const generatedFocusOperations = [
39256
39471
  interactive: "default"
39257
39472
  },
39258
39473
  mcp: { entityTool: "rates" },
39259
- inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({
39260
- currency: /* @__PURE__ */ string$1(),
39261
- hourly_rate: /* @__PURE__ */ number$2(),
39262
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
39263
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
39264
- }) }),
39474
+ inputSchema: /* @__PURE__ */ looseObject({ payload: rateSchedulePayloadSchema }),
39265
39475
  execute: (input, { client }) => {
39266
39476
  const data = input;
39267
39477
  return client.runGeneratedRequest("upsertWorkspaceLaborCostRate", () => callGeneratedRequest(upsertWorkspaceLaborCostRate, [
@@ -39289,12 +39499,7 @@ const generatedFocusOperations = [
39289
39499
  },
39290
39500
  mcp: { entityTool: "rates" },
39291
39501
  inputSchema: /* @__PURE__ */ looseObject({
39292
- payload: /* @__PURE__ */ looseObject({
39293
- currency: /* @__PURE__ */ string$1(),
39294
- hourly_rate: /* @__PURE__ */ number$2(),
39295
- start_date: /* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()),
39296
- end_date: /* @__PURE__ */ optional$1(/* @__PURE__ */ pipe$2(/* @__PURE__ */ string$1(), /* @__PURE__ */ isoDate$1()))
39297
- }),
39502
+ payload: rateSchedulePayloadSchema,
39298
39503
  user_id: /* @__PURE__ */ number$2()
39299
39504
  }),
39300
39505
  execute: (input, { client }) => {
@@ -39316,7 +39521,7 @@ const generatedFocusOperations = [
39316
39521
  action: "get-flexq-data",
39317
39522
  title: "Get Flexq Data Reports",
39318
39523
  description: "Get Flexq Data Reports.",
39319
- safety: "read",
39524
+ safety: "update",
39320
39525
  destructive: false,
39321
39526
  cli: {
39322
39527
  group: ["reports"],
@@ -39385,7 +39590,7 @@ const generatedFocusOperations = [
39385
39590
  action: "get-flexq-dictionary",
39386
39591
  title: "Get Flexq Dictionary Reports",
39387
39592
  description: "Get Flexq Dictionary Reports.",
39388
- safety: "read",
39593
+ safety: "update",
39389
39594
  destructive: false,
39390
39595
  cli: {
39391
39596
  group: ["reports"],
@@ -39411,7 +39616,7 @@ const generatedFocusOperations = [
39411
39616
  action: "get-workload",
39412
39617
  title: "Get Workload Reports",
39413
39618
  description: "Get Workload Reports.",
39414
- safety: "read",
39619
+ safety: "update",
39415
39620
  destructive: false,
39416
39621
  cli: {
39417
39622
  group: ["reports"],
@@ -40893,12 +41098,12 @@ const generatedFocusOperations = [
40893
41098
  action: "suggestions-get-project-suggestion-for-atask",
40894
41099
  title: "Suggestions Get Project Suggestion For Atask Tasks",
40895
41100
  description: "Suggestions Get Project Suggestion For Atask Tasks.",
40896
- safety: "read",
41101
+ safety: "update",
40897
41102
  destructive: false,
40898
41103
  cli: {
40899
41104
  group: ["tasks", "suggestions"],
40900
41105
  command: "get-project-suggestion-for-atask",
40901
- interactive: "available"
41106
+ interactive: "default"
40902
41107
  },
40903
41108
  mcp: { entityTool: "tasks" },
40904
41109
  inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({ task_id: /* @__PURE__ */ number$2() }) }),
@@ -40920,12 +41125,12 @@ const generatedFocusOperations = [
40920
41125
  action: "suggestions-get-project-suggestions-for-multiple-tasks",
40921
41126
  title: "Suggestions Get Project Suggestions For Multiple Tasks Tasks",
40922
41127
  description: "Suggestions Get Project Suggestions For Multiple Tasks Tasks.",
40923
- safety: "read",
41128
+ safety: "update",
40924
41129
  destructive: false,
40925
41130
  cli: {
40926
41131
  group: ["tasks", "suggestions"],
40927
41132
  command: "get-project-suggestions-for-multiple-tasks",
40928
- interactive: "available"
41133
+ interactive: "default"
40929
41134
  },
40930
41135
  mcp: { entityTool: "tasks" },
40931
41136
  inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({ task_ids: /* @__PURE__ */ array$1(/* @__PURE__ */ number$2()) }) }),
@@ -41561,7 +41766,7 @@ const generatedFocusOperations = [
41561
41766
  action: "bulk-set-day-duration",
41562
41767
  title: "Bulk Set Day Duration Time Entries",
41563
41768
  description: "Bulk Set Day Duration Time Entries.",
41564
- safety: "read",
41769
+ safety: "update",
41565
41770
  destructive: false,
41566
41771
  cli: {
41567
41772
  group: ["time-entries", "bulk"],
@@ -42057,12 +42262,12 @@ const generatedFocusOperations = [
42057
42262
  action: "tracking-start-tracking-from-description",
42058
42263
  title: "Tracking Start Tracking From Description Time Entries",
42059
42264
  description: "Tracking Start Tracking From Description Time Entries.",
42060
- safety: "read",
42265
+ safety: "update",
42061
42266
  destructive: false,
42062
42267
  cli: {
42063
42268
  group: ["time-entries", "tracking"],
42064
42269
  command: "start-tracking-from-description",
42065
- interactive: "available"
42270
+ interactive: "default"
42066
42271
  },
42067
42272
  mcp: { entityTool: "time-entries" },
42068
42273
  inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({
@@ -42163,12 +42368,12 @@ const generatedFocusOperations = [
42163
42368
  action: "get-for-acalendar-event-title",
42164
42369
  title: "Get For Acalendar Event Title Time Log Suggestions",
42165
42370
  description: "Get For Acalendar Event Title Time Log Suggestions.",
42166
- safety: "read",
42371
+ safety: "update",
42167
42372
  destructive: false,
42168
42373
  cli: {
42169
42374
  group: ["time-log-suggestions"],
42170
42375
  command: "get-for-acalendar-event-title",
42171
- interactive: "available"
42376
+ interactive: "default"
42172
42377
  },
42173
42378
  mcp: { entityTool: "time-log-suggestions" },
42174
42379
  inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({ title: /* @__PURE__ */ string$1() }) }),
@@ -42190,12 +42395,12 @@ const generatedFocusOperations = [
42190
42395
  action: "get-for-multiple-calendar-event-titles",
42191
42396
  title: "Get For Multiple Calendar Event Titles Time Log Suggestions",
42192
42397
  description: "Get For Multiple Calendar Event Titles Time Log Suggestions.",
42193
- safety: "read",
42398
+ safety: "update",
42194
42399
  destructive: false,
42195
42400
  cli: {
42196
42401
  group: ["time-log-suggestions"],
42197
42402
  command: "get-for-multiple-calendar-event-titles",
42198
- interactive: "available"
42403
+ interactive: "default"
42199
42404
  },
42200
42405
  mcp: { entityTool: "time-log-suggestions" },
42201
42406
  inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({ items: /* @__PURE__ */ array$1(/* @__PURE__ */ looseObject({
@@ -42565,12 +42770,12 @@ const generatedFocusOperations = [
42565
42770
  action: "approve",
42566
42771
  title: "Approve Timesheets",
42567
42772
  description: "Approve Timesheets.",
42568
- safety: "read",
42773
+ safety: "update",
42569
42774
  destructive: false,
42570
42775
  cli: {
42571
42776
  group: ["timesheets"],
42572
42777
  command: "approve",
42573
- interactive: "available"
42778
+ interactive: "default"
42574
42779
  },
42575
42780
  mcp: { entityTool: "timesheets" },
42576
42781
  inputSchema: /* @__PURE__ */ looseObject({
@@ -42598,12 +42803,12 @@ const generatedFocusOperations = [
42598
42803
  action: "bulk-approve",
42599
42804
  title: "Bulk Approve Timesheets",
42600
42805
  description: "Bulk Approve Timesheets.",
42601
- safety: "read",
42806
+ safety: "update",
42602
42807
  destructive: false,
42603
42808
  cli: {
42604
42809
  group: ["timesheets", "bulk"],
42605
42810
  command: "approve",
42606
- interactive: "available"
42811
+ interactive: "default"
42607
42812
  },
42608
42813
  mcp: { entityTool: "timesheets" },
42609
42814
  inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({ keys: /* @__PURE__ */ array$1(/* @__PURE__ */ looseObject({
@@ -42629,12 +42834,12 @@ const generatedFocusOperations = [
42629
42834
  action: "bulk-request-changes",
42630
42835
  title: "Bulk Request Changes Timesheets",
42631
42836
  description: "Bulk Request Changes Timesheets.",
42632
- safety: "read",
42837
+ safety: "update",
42633
42838
  destructive: false,
42634
42839
  cli: {
42635
42840
  group: ["timesheets", "bulk"],
42636
42841
  command: "request-changes",
42637
- interactive: "available"
42842
+ interactive: "default"
42638
42843
  },
42639
42844
  mcp: { entityTool: "timesheets" },
42640
42845
  inputSchema: /* @__PURE__ */ looseObject({ payload: /* @__PURE__ */ looseObject({
@@ -42855,12 +43060,12 @@ const generatedFocusOperations = [
42855
43060
  action: "remove-timesheet-flag",
42856
43061
  title: "Remove Timesheet Flag Timesheets",
42857
43062
  description: "Remove Timesheet Flag Timesheets.",
42858
- safety: "read",
42859
- destructive: false,
43063
+ safety: "delete",
43064
+ destructive: true,
42860
43065
  cli: {
42861
43066
  group: ["timesheets"],
42862
43067
  command: "remove-timesheet-flag",
42863
- interactive: "available"
43068
+ interactive: "default"
42864
43069
  },
42865
43070
  mcp: { entityTool: "timesheets" },
42866
43071
  inputSchema: /* @__PURE__ */ looseObject({ flag_id: /* @__PURE__ */ number$2() }),
@@ -42882,12 +43087,12 @@ const generatedFocusOperations = [
42882
43087
  action: "request-changes",
42883
43088
  title: "Request Changes Timesheets",
42884
43089
  description: "Request Changes Timesheets.",
42885
- safety: "read",
43090
+ safety: "update",
42886
43091
  destructive: false,
42887
43092
  cli: {
42888
43093
  group: ["timesheets"],
42889
43094
  command: "request-changes",
42890
- interactive: "available"
43095
+ interactive: "default"
42891
43096
  },
42892
43097
  mcp: { entityTool: "timesheets" },
42893
43098
  inputSchema: /* @__PURE__ */ looseObject({
@@ -42917,12 +43122,12 @@ const generatedFocusOperations = [
42917
43122
  action: "resubmit",
42918
43123
  title: "Resubmit Timesheets",
42919
43124
  description: "Resubmit Timesheets.",
42920
- safety: "read",
43125
+ safety: "update",
42921
43126
  destructive: false,
42922
43127
  cli: {
42923
43128
  group: ["timesheets"],
42924
43129
  command: "resubmit",
42925
- interactive: "available"
43130
+ interactive: "default"
42926
43131
  },
42927
43132
  mcp: { entityTool: "timesheets" },
42928
43133
  inputSchema: /* @__PURE__ */ looseObject({
@@ -43017,12 +43222,12 @@ const generatedFocusOperations = [
43017
43222
  action: "setups-discontinue",
43018
43223
  title: "Setups Discontinue Timesheets",
43019
43224
  description: "Setups Discontinue Timesheets.",
43020
- safety: "read",
43225
+ safety: "update",
43021
43226
  destructive: false,
43022
43227
  cli: {
43023
43228
  group: ["timesheets", "setups"],
43024
43229
  command: "discontinue",
43025
- interactive: "available"
43230
+ interactive: "default"
43026
43231
  },
43027
43232
  mcp: { entityTool: "timesheets" },
43028
43233
  inputSchema: /* @__PURE__ */ looseObject({
@@ -43203,12 +43408,12 @@ const generatedFocusOperations = [
43203
43408
  action: "submit",
43204
43409
  title: "Submit Timesheets",
43205
43410
  description: "Submit Timesheets.",
43206
- safety: "read",
43411
+ safety: "update",
43207
43412
  destructive: false,
43208
43413
  cli: {
43209
43414
  group: ["timesheets"],
43210
43415
  command: "submit",
43211
- interactive: "available"
43416
+ interactive: "default"
43212
43417
  },
43213
43418
  mcp: { entityTool: "timesheets" },
43214
43419
  inputSchema: /* @__PURE__ */ looseObject({
@@ -43236,12 +43441,12 @@ const generatedFocusOperations = [
43236
43441
  action: "withdraw",
43237
43442
  title: "Withdraw Timesheets",
43238
43443
  description: "Withdraw Timesheets.",
43239
- safety: "read",
43444
+ safety: "update",
43240
43445
  destructive: false,
43241
43446
  cli: {
43242
43447
  group: ["timesheets"],
43243
43448
  command: "withdraw",
43244
- interactive: "available"
43449
+ interactive: "default"
43245
43450
  },
43246
43451
  mcp: { entityTool: "timesheets" },
43247
43452
  inputSchema: /* @__PURE__ */ looseObject({
@@ -43769,6 +43974,8 @@ const focusOperationOverrides = {
43769
43974
  ...taskAttachmentOverrides,
43770
43975
  ...projectOverrides,
43771
43976
  ...projectAttachmentOverrides,
43977
+ ...rateOverrides,
43978
+ ...readOnlyPostOverrides,
43772
43979
  ...timeBlockOverrides,
43773
43980
  ...timeEntryOverrides,
43774
43981
  ...statusOverrides,
@@ -44461,6 +44668,15 @@ function mcpText(text) {
44461
44668
  text
44462
44669
  }] };
44463
44670
  }
44671
+ function mcpFailure(text) {
44672
+ return {
44673
+ content: [{
44674
+ type: "text",
44675
+ text
44676
+ }],
44677
+ isError: true
44678
+ };
44679
+ }
44464
44680
  //#endregion
44465
44681
  //#region src/runtime/safety/mutation-gate.ts
44466
44682
  var MutationConfirmationRequired = class extends Error {
@@ -44883,29 +45099,44 @@ function inputFor(operations) {
44883
45099
  if (!first) throw new Error("Entity tool has no operations");
44884
45100
  return rest.length === 0 ? buildSingleActionInput(first) : buildMultiActionInput(operations);
44885
45101
  }
44886
- /**
44887
- * Render an operation's parameters as a compact, human-readable summary for the
44888
- * tool description. Required fields are suffixed with `*`. Falls back gracefully
44889
- * for array payloads or schemas that cannot be converted to JSON Schema.
44890
- */
45102
+ const MAX_INLINE_OBJECT_KEYS = 12;
44891
45103
  function summarizeParams(operation) {
44892
45104
  try {
44893
45105
  const schema = toJsonSchema(operation.inputSchema, { errorMode: "ignore" });
44894
45106
  if (schema.type === "array") return "array payload";
44895
- const keys = Object.keys(schema.properties ?? {});
45107
+ const properties = schema.properties ?? {};
45108
+ const keys = Object.keys(properties);
44896
45109
  if (keys.length === 0) return "none";
44897
45110
  const required = new Set(schema.required ?? []);
44898
- return keys.map((key) => required.has(key) ? `${key}*` : key).join(", ");
45111
+ return keys.map((key) => {
45112
+ const label = required.has(key) ? `${key}*` : key;
45113
+ const property = properties[key];
45114
+ if (property?.type !== "object") return label;
45115
+ const nestedKeys = Object.keys(property.properties ?? {});
45116
+ if (nestedKeys.length === 0) return label;
45117
+ if (nestedKeys.length > MAX_INLINE_OBJECT_KEYS) return `${label}{...}`;
45118
+ const nestedRequired = new Set(property.required ?? []);
45119
+ return `${label}{${nestedKeys.map((nestedKey) => nestedRequired.has(nestedKey) ? `${nestedKey}*` : nestedKey).join(", ")}}`;
45120
+ }).join(", ");
44899
45121
  } catch {
44900
45122
  return "see API docs";
44901
45123
  }
44902
45124
  }
44903
45125
  function buildToolDescription(entityTool, operations) {
45126
+ const byGuidance = /* @__PURE__ */ new Map();
45127
+ for (const op of operations) {
45128
+ if (!op.agentGuidance) continue;
45129
+ const actions = byGuidance.get(op.agentGuidance);
45130
+ if (actions) actions.push(op.action);
45131
+ else byGuidance.set(op.agentGuidance, [op.action]);
45132
+ }
45133
+ const shared = new Map([...byGuidance].filter(([, actions]) => actions.length > 1));
44904
45134
  const lines = [`Manage Focus ${entityTool} with the following actions:`, ""];
44905
45135
  for (const op of operations) {
44906
- const guidance = op.agentGuidance ? ` ${op.agentGuidance}` : "";
44907
- lines.push(`- **${op.action}**: ${op.description}${guidance} (data: ${summarizeParams(op)})`);
45136
+ const inline = op.agentGuidance && !shared.has(op.agentGuidance) ? ` ${op.agentGuidance}` : "";
45137
+ lines.push(`- **${op.action}**: ${op.description}${inline} (data: ${summarizeParams(op)})`);
44908
45138
  }
45139
+ for (const [guidance, actions] of shared) lines.push("", `Applies to ${actions.join(", ")}: ${guidance}`);
44909
45140
  lines.push("", "Pass the action-specific fields under `data` (required fields are marked with *).", "Mutations require a confirm_token handshake: call without confirm_token first to receive a token, then call again with the token to confirm.", "Optional dry_run: true validates input and returns { dry_run, operation, input } without calling the API.");
44910
45141
  return lines.join("\n");
44911
45142
  }
@@ -44933,7 +45164,9 @@ async function runOperation(operation, data, client, confirmToken, dryRun) {
44933
45164
  status: 403,
44934
45165
  message: `Operation '${operation.id}' is not available in this build.`
44935
45166
  });
44936
- const input = parse(operation.inputSchema, coercePayload(data) ?? {});
45167
+ const parseResult = /* @__PURE__ */ safeParse(operation.inputSchema, coercePayload(data) ?? {});
45168
+ if (!parseResult.success) return mcpFailure(`Invalid input: ${formatValibotError(parseResult.issues)}`);
45169
+ const input = parseResult.output;
44937
45170
  if (dryRun) return mcpText(JSON.stringify({
44938
45171
  dry_run: true,
44939
45172
  operation: operation.id,
@@ -44983,7 +45216,7 @@ import_main.default.config({
44983
45216
  quiet: true,
44984
45217
  ignore: ["MISSING_ENV_FILE"]
44985
45218
  });
44986
- const packageVersion = "1.6.16";
45219
+ const packageVersion = "1.7.1";
44987
45220
  function resolvePublicUrls() {
44988
45221
  return {
44989
45222
  focusApiUrl: process.env.TOGGL_FOCUS_API_URL ?? "https://focus.toggl.com",
@@ -45047,4 +45280,4 @@ function bootstrapServer(options = {}) {
45047
45280
  //#endregion
45048
45281
  export { runMcpCli as n, bootstrapServer as t };
45049
45282
 
45050
- //# sourceMappingURL=src-DO6utvuq.js.map
45283
+ //# sourceMappingURL=src-uEpTijXT.js.map