@togglhq/cli 1.11.223 → 1.11.225

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/build/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as CommanderError, i as shutdownCliTelemetry, n as captureCliException, r as initCliTelemetry, t as createProgram } from "./program-5e7huSjO.js";
2
+ import { a as CommanderError, i as shutdownCliTelemetry, n as captureCliException, r as initCliTelemetry, t as createProgram } from "./program-Dd98SRJu.js";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { dirname, join } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
package/build/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as createProgram } from "./program-5e7huSjO.js";
1
+ import { t as createProgram } from "./program-Dd98SRJu.js";
2
2
  export { createProgram };
@@ -7916,7 +7916,7 @@ const TaskCreatePayloadSchema = /* @__PURE__ */ object({
7916
7916
  color: /* @__PURE__ */ optional(/* @__PURE__ */ string()),
7917
7917
  custom_fields: /* @__PURE__ */ optional(/* @__PURE__ */ record(/* @__PURE__ */ string(), /* @__PURE__ */ unknown())),
7918
7918
  description: /* @__PURE__ */ optional(/* @__PURE__ */ string()),
7919
- end_date: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate())),
7919
+ end_date: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate()), /* @__PURE__ */ description("Send together with start_date; must be on or after start_date."))),
7920
7920
  estimate_type: /* @__PURE__ */ optional(/* @__PURE__ */ picklist(["daily", "total"])),
7921
7921
  estimated_mins: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ number(), /* @__PURE__ */ minValue(0))),
7922
7922
  notes: /* @__PURE__ */ optional(/* @__PURE__ */ string()),
@@ -7934,7 +7934,7 @@ const TaskCreatePayloadSchema = /* @__PURE__ */ object({
7934
7934
  project_id: /* @__PURE__ */ optional(/* @__PURE__ */ number()),
7935
7935
  rollup_enabled: /* @__PURE__ */ optional(/* @__PURE__ */ boolean()),
7936
7936
  rrule: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ string())),
7937
- start_date: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate())),
7937
+ start_date: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate()), /* @__PURE__ */ description("Send together with end_date; a date without the other is rejected."))),
7938
7938
  status_id: /* @__PURE__ */ optional(/* @__PURE__ */ number()),
7939
7939
  tag_ids: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ array(/* @__PURE__ */ number()))),
7940
7940
  team_assignee_ids: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ array(/* @__PURE__ */ number())))
@@ -7956,7 +7956,7 @@ const TaskPartialUpdatePayloadSchema = /* @__PURE__ */ object({
7956
7956
  color: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ string())),
7957
7957
  custom_fields: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ object({}))),
7958
7958
  description: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ string())),
7959
- end_date: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate()))),
7959
+ end_date: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate())), /* @__PURE__ */ description("Send together with start_date; must be on or after start_date."))),
7960
7960
  estimate_type: /* @__PURE__ */ optional(/* @__PURE__ */ picklist(["daily", "total"])),
7961
7961
  estimated_mins: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ number(), /* @__PURE__ */ minValue(0)))),
7962
7962
  name: /* @__PURE__ */ optional(/* @__PURE__ */ string()),
@@ -7979,7 +7979,7 @@ const TaskPartialUpdatePayloadSchema = /* @__PURE__ */ object({
7979
7979
  repeat_planned_time_entry_id: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ nullable(/* @__PURE__ */ number()), /* @__PURE__ */ description("RepeatPlannedTimeEntryID is the declared initial-selection input that will start a series from an existing planned entry (PR 11). Any supplied value — an ID or JSON null — is rejected until then; the contract is declared in docs/recurring-pr2a-additive-schema.md. json.RawMessage keeps absent distinguishable from explicit null on decode and is omitted on marshal when never set."))),
7980
7980
  rollup_enabled: /* @__PURE__ */ optional(/* @__PURE__ */ boolean()),
7981
7981
  rrule: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ string())),
7982
- start_date: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate()))),
7982
+ start_date: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate())), /* @__PURE__ */ description("Send together with end_date; a date without the other is rejected."))),
7983
7983
  status_id: /* @__PURE__ */ optional(/* @__PURE__ */ number()),
7984
7984
  tag_ids: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ array(/* @__PURE__ */ number()))),
7985
7985
  team_assignee_ids: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ array(/* @__PURE__ */ number())))
@@ -7994,7 +7994,7 @@ const TaskPartialUpdatePayloadWithIDSchema = /* @__PURE__ */ object({
7994
7994
  color: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ string())),
7995
7995
  custom_fields: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ object({}))),
7996
7996
  description: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ string())),
7997
- end_date: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate()))),
7997
+ end_date: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate())), /* @__PURE__ */ description("Send together with start_date; must be on or after start_date."))),
7998
7998
  estimate_type: /* @__PURE__ */ optional(/* @__PURE__ */ picklist(["daily", "total"])),
7999
7999
  estimated_mins: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ number(), /* @__PURE__ */ minValue(0)))),
8000
8000
  name: /* @__PURE__ */ optional(/* @__PURE__ */ string()),
@@ -8016,7 +8016,7 @@ const TaskPartialUpdatePayloadWithIDSchema = /* @__PURE__ */ object({
8016
8016
  repeat_planned_time_entry_id: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ nullable(/* @__PURE__ */ number()), /* @__PURE__ */ description("RepeatPlannedTimeEntryID is the declared initial-selection input that will start a series from an existing planned entry (PR 11). Any supplied value — an ID or JSON null — is rejected until then; the contract is declared in docs/recurring-pr2a-additive-schema.md. json.RawMessage keeps absent distinguishable from explicit null on decode and is omitted on marshal when never set."))),
8017
8017
  rollup_enabled: /* @__PURE__ */ optional(/* @__PURE__ */ boolean()),
8018
8018
  rrule: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ string())),
8019
- start_date: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate()))),
8019
+ start_date: /* @__PURE__ */ optional(/* @__PURE__ */ pipe(/* @__PURE__ */ nullable(/* @__PURE__ */ pipe(/* @__PURE__ */ string(), /* @__PURE__ */ isoDate())), /* @__PURE__ */ description("Send together with end_date; a date without the other is rejected."))),
8020
8020
  status_id: /* @__PURE__ */ optional(/* @__PURE__ */ number()),
8021
8021
  tag_ids: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ array(/* @__PURE__ */ number()))),
8022
8022
  team_assignee_ids: /* @__PURE__ */ optional(/* @__PURE__ */ nullable(/* @__PURE__ */ array(/* @__PURE__ */ number())))
@@ -13156,7 +13156,7 @@ async function runSkillSetup(options) {
13156
13156
  });
13157
13157
  }
13158
13158
  //#endregion
13159
- //#region ../operations/build/validation-CLozpAO5.js
13159
+ //#region ../operations/build/validation-B7kaDM75.js
13160
13160
  const optionalNumber = /* @__PURE__ */ optional$1(/* @__PURE__ */ number$2());
13161
13161
  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})`)));
13162
13162
  const perPageSchema = perPageField(100);
@@ -13438,6 +13438,107 @@ const rateOverrides = {
13438
13438
  "focus.rates.labor-upsert-workspace-labor-cost-rate": { agentGuidance: RATE_SCHEDULE_GUIDANCE },
13439
13439
  "focus.rates.labor-upsert-workspace-user-labor-cost-rate": { agentGuidance: RATE_SCHEDULE_GUIDANCE }
13440
13440
  };
13441
+ const TASK_DATES_RULE = "Send start_date and end_date together, with end_date on or after start_date";
13442
+ const TASK_DATES_CREATE_GUIDANCE = `${TASK_DATES_RULE}; for a single due date, send both as that day.`;
13443
+ const taskOverrides = {
13444
+ "focus.tasks.list": {
13445
+ aliases: ["ls"],
13446
+ agentGuidance: "Filter by start_date/end_date (ISO 8601, e.g. '2025-04-27') for date ranges, project_id, status_id, or assignee_user_id. Returns paginated results — use page/per_page for more. Use parent_task_id to list subtasks. Priority values: none, low, medium, high.",
13447
+ examples: [
13448
+ {
13449
+ description: "List tasks due today",
13450
+ data: {
13451
+ start_date: "2025-04-27",
13452
+ end_date: "2025-04-27"
13453
+ }
13454
+ },
13455
+ {
13456
+ description: "List tasks for a project",
13457
+ data: { project_id: 123456 }
13458
+ },
13459
+ {
13460
+ description: "List high-priority open tasks",
13461
+ data: { priority: "high" }
13462
+ }
13463
+ ]
13464
+ },
13465
+ "focus.tasks.get": { agentGuidance: "Fetch a single task with full detail including subtasks and time estimates." },
13466
+ "focus.tasks.create": {
13467
+ agentGuidance: `Required: name. Strongly recommended: project_id, status_id, assignee_user_ids. Use start_date/end_date for scheduling as date-only YYYY-MM-DD values; never pass RFC 3339 datetimes. ${TASK_DATES_CREATE_GUIDANCE} Set estimated_mins for time estimates.`,
13468
+ examples: [{
13469
+ description: "Create a minimal task",
13470
+ data: { name: "Dogfood the CLI" }
13471
+ }, {
13472
+ description: "Create a task with full metadata",
13473
+ data: {
13474
+ name: "Review PR",
13475
+ project_id: 123456,
13476
+ assignee_user_ids: [789],
13477
+ estimated_mins: 30
13478
+ }
13479
+ }]
13480
+ },
13481
+ "focus.tasks.update": {
13482
+ agentGuidance: `Partial update — only include fields to change in payload. Provide task_id at top level and the fields to update under payload. custom_fields writes values as a map keyed by custom field ID; reads return the same data as custom_field_values[], so the write shape is not the read shape. ${TASK_DATES_RULE}; to move one date, resend the task's current other date; if the task has none, or that breaks the order, send the new date as both.`,
13483
+ examples: [
13484
+ {
13485
+ description: "Change task status",
13486
+ data: {
13487
+ task_id: 12345,
13488
+ payload: { status_id: 456789 }
13489
+ }
13490
+ },
13491
+ {
13492
+ description: "Assign to a user and update estimate",
13493
+ data: {
13494
+ task_id: 12345,
13495
+ payload: {
13496
+ assignee_user_ids: [789],
13497
+ estimated_mins: 60
13498
+ }
13499
+ }
13500
+ },
13501
+ {
13502
+ description: "Set a select custom field value",
13503
+ data: {
13504
+ task_id: 12345,
13505
+ payload: { custom_fields: { "406": [1639] } }
13506
+ }
13507
+ }
13508
+ ]
13509
+ },
13510
+ "focus.tasks.full-update": { agentGuidance: "Follow the update action's date guidance." },
13511
+ "focus.tasks.delete": { agentGuidance: "Permanently deletes the task and all its subtasks. Cannot be undone." },
13512
+ "focus.tasks.bulk-patch": {
13513
+ agentGuidance: "Prefer over many single updates: pass a JSON array of { id: taskId, ...partial fields }. Same field names and date guidance as single task update.",
13514
+ examples: [{
13515
+ description: "Set status on two tasks",
13516
+ data: [{
13517
+ id: 111,
13518
+ status_id: 456789
13519
+ }, {
13520
+ id: 222,
13521
+ status_id: 456789
13522
+ }]
13523
+ }, {
13524
+ description: "Set a select custom field value on two tasks",
13525
+ data: [{
13526
+ id: 111,
13527
+ custom_fields: { "406": [1639] }
13528
+ }, {
13529
+ id: 222,
13530
+ custom_fields: { "406": [1640] }
13531
+ }]
13532
+ }]
13533
+ },
13534
+ "focus.tasks.bulk-delete": {
13535
+ agentGuidance: "Deletes all listed task IDs in one HTTP call. Requires confirm flow like single delete.",
13536
+ examples: [{
13537
+ description: "Delete two tasks",
13538
+ data: { ids: [111, 222] }
13539
+ }]
13540
+ }
13541
+ };
13441
13542
  const compositeOverrides = {
13442
13543
  "focus.composite.create-project": {
13443
13544
  description: "Create a project with related data such as members, milestones, rates, and billable rates.",
@@ -13451,6 +13552,7 @@ const compositeOverrides = {
13451
13552
  },
13452
13553
  "focus.composite.create-task": {
13453
13554
  description: "Create a task with related data such as subtasks and an initial time entry.",
13555
+ agentGuidance: `For payload.task and each payload.subtasks[] item: ${TASK_DATES_CREATE_GUIDANCE}`,
13454
13556
  cli: {
13455
13557
  group: ["tasks"],
13456
13558
  command: "create-with-children",
@@ -13941,104 +14043,6 @@ const tagOverrides = {
13941
14043
  }]
13942
14044
  }
13943
14045
  };
13944
- const taskOverrides = {
13945
- "focus.tasks.list": {
13946
- aliases: ["ls"],
13947
- agentGuidance: "Filter by start_date/end_date (ISO 8601, e.g. '2025-04-27') for date ranges, project_id, status_id, or assignee_user_id. Returns paginated results — use page/per_page for more. Use parent_task_id to list subtasks. Priority values: none, low, medium, high.",
13948
- examples: [
13949
- {
13950
- description: "List tasks due today",
13951
- data: {
13952
- start_date: "2025-04-27",
13953
- end_date: "2025-04-27"
13954
- }
13955
- },
13956
- {
13957
- description: "List tasks for a project",
13958
- data: { project_id: 123456 }
13959
- },
13960
- {
13961
- description: "List high-priority open tasks",
13962
- data: { priority: "high" }
13963
- }
13964
- ]
13965
- },
13966
- "focus.tasks.get": { agentGuidance: "Fetch a single task with full detail including subtasks and time estimates." },
13967
- "focus.tasks.create": {
13968
- agentGuidance: "Required: name. Strongly recommended: project_id, status_id, assignee_user_ids. Use start_date/end_date for scheduling as date-only YYYY-MM-DD values; never pass RFC 3339 datetimes. Set estimated_mins for time estimates.",
13969
- examples: [{
13970
- description: "Create a minimal task",
13971
- data: { name: "Dogfood the CLI" }
13972
- }, {
13973
- description: "Create a task with full metadata",
13974
- data: {
13975
- name: "Review PR",
13976
- project_id: 123456,
13977
- assignee_user_ids: [789],
13978
- estimated_mins: 30
13979
- }
13980
- }]
13981
- },
13982
- "focus.tasks.update": {
13983
- agentGuidance: "Partial update — only include fields to change in payload. Provide task_id at top level and the fields to update under payload. custom_fields writes values as a map keyed by custom field ID; reads return the same data as custom_field_values[], so the write shape is not the read shape.",
13984
- examples: [
13985
- {
13986
- description: "Change task status",
13987
- data: {
13988
- task_id: 12345,
13989
- payload: { status_id: 456789 }
13990
- }
13991
- },
13992
- {
13993
- description: "Assign to a user and update estimate",
13994
- data: {
13995
- task_id: 12345,
13996
- payload: {
13997
- assignee_user_ids: [789],
13998
- estimated_mins: 60
13999
- }
14000
- }
14001
- },
14002
- {
14003
- description: "Set a select custom field value",
14004
- data: {
14005
- task_id: 12345,
14006
- payload: { custom_fields: { "406": [1639] } }
14007
- }
14008
- }
14009
- ]
14010
- },
14011
- "focus.tasks.delete": { agentGuidance: "Permanently deletes the task and all its subtasks. Cannot be undone." },
14012
- "focus.tasks.bulk-patch": {
14013
- agentGuidance: "Prefer over many single updates: pass a JSON array of { id: taskId, ...partial fields }. Same field names as single task update.",
14014
- examples: [{
14015
- description: "Set status on two tasks",
14016
- data: [{
14017
- id: 111,
14018
- status_id: 456789
14019
- }, {
14020
- id: 222,
14021
- status_id: 456789
14022
- }]
14023
- }, {
14024
- description: "Set a select custom field value on two tasks",
14025
- data: [{
14026
- id: 111,
14027
- custom_fields: { "406": [1639] }
14028
- }, {
14029
- id: 222,
14030
- custom_fields: { "406": [1640] }
14031
- }]
14032
- }]
14033
- },
14034
- "focus.tasks.bulk-delete": {
14035
- agentGuidance: "Deletes all listed task IDs in one HTTP call. Requires confirm flow like single delete.",
14036
- examples: [{
14037
- description: "Delete two tasks",
14038
- data: { ids: [111, 222] }
14039
- }]
14040
- }
14041
- };
14042
14046
  const timeEntryOverrides = {
14043
14047
  "focus.time-entries.list": {
14044
14048
  agentGuidance: "Returns tracked time entries in a date range, including taskless entries (tracked on a project with no task). Requires date_from and date_to. Accepts date-only strings (YYYY-MM-DD) or RFC3339 datetimes — date-only is automatically expanded: date_from to T00:00:00Z, date_to to T23:59:59Z. Optional project_id keeps only entries on that project (sent to the API; client also scans up to 50 list pages of 100, then slices page/per_page; not a full workspace scan). If truncated is true, more unfiltered rows exist than were scanned — narrow date_from/date_to. Pass include_taskless:false to hide taskless rows. Includes task and project context.",
@@ -28191,14 +28195,11 @@ function collectRegexRequirements(schema) {
28191
28195
  visit(n.wrapped);
28192
28196
  return;
28193
28197
  }
28194
- if (n.type === "string" && Array.isArray(n.pipe)) {
28195
- for (const step of n.pipe) {
28196
- const v = step;
28197
- if (v.kind === "validation" && v.type === "regex" && v.requirement instanceof RegExp) found.push(v.requirement);
28198
- }
28199
- return;
28198
+ if (Array.isArray(n.pipe)) for (const step of n.pipe) {
28199
+ visit(step);
28200
+ const v = step;
28201
+ if (v.kind === "validation" && v.type === "regex" && v.requirement instanceof RegExp) found.push(v.requirement);
28200
28202
  }
28201
- if (n.type === "pipe" && Array.isArray(n.pipe)) for (const step of n.pipe) visit(step);
28202
28203
  }
28203
28204
  visit(schema);
28204
28205
  return found;
@@ -28212,14 +28213,7 @@ function collectStringValidationKinds(schema) {
28212
28213
  visit(n.wrapped);
28213
28214
  return;
28214
28215
  }
28215
- if (n.type === "string" && Array.isArray(n.pipe)) {
28216
- for (const step of n.pipe) {
28217
- const v = step;
28218
- if (v.kind === "validation" && typeof v.type === "string") found.add(v.type);
28219
- }
28220
- return;
28221
- }
28222
- if (n.type === "pipe" && Array.isArray(n.pipe)) for (const step of n.pipe) {
28216
+ if (Array.isArray(n.pipe)) for (const step of n.pipe) {
28223
28217
  visit(step);
28224
28218
  const v = step;
28225
28219
  if (v.kind === "validation" && typeof v.type === "string") found.add(v.type);
@@ -29298,4 +29292,4 @@ Common commands:
29298
29292
  //#endregion
29299
29293
  export { CommanderError as a, shutdownCliTelemetry as i, captureCliException as n, initCliTelemetry as r, createProgram as t };
29300
29294
 
29301
- //# sourceMappingURL=program-5e7huSjO.js.map
29295
+ //# sourceMappingURL=program-Dd98SRJu.js.map
package/build/program.js CHANGED
@@ -1,2 +1,2 @@
1
- import { t as createProgram } from "./program-5e7huSjO.js";
1
+ import { t as createProgram } from "./program-Dd98SRJu.js";
2
2
  export { createProgram };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@togglhq/cli",
3
- "version": "1.11.223",
3
+ "version": "1.11.225",
4
4
  "description": "Toggl CLI for Toggl 2.0 API operations.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",