@critical-path/svelte 0.19.3 → 0.19.4

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/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @critical-path/svelte
2
2
 
3
+ ## 0.19.4
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [5dbf25b]
8
+ - @critical-path/core@0.55.0
9
+ - @critical-path/client@0.26.0
10
+ - @critical-path/mcp@0.22.0
11
+
3
12
  ## 0.19.3
4
13
 
5
14
  ### Patch Changes
package/dist/index.js CHANGED
@@ -4590,6 +4590,7 @@ var xn = (e, t) => {
4590
4590
  levelingDelayHours: X(I()).describe("With levelling: hours spent waiting for the assignee"),
4591
4591
  waitingOn: X(F()).describe("With levelling: the task this one waited for"),
4592
4592
  isMilestone: X(L()).describe("True for a milestone"),
4593
+ isSummary: X(L()).describe("True for a task with subtasks: its dates and slack are roll-ups of them"),
4593
4594
  deadlineDate: X(F()).describe("The task's deadline as an instant"),
4594
4595
  deadlineVarianceHours: X(I()).describe("Working hours from forecast finish to deadline; negative means it will be missed")
4595
4596
  }), Pn = Y({
@@ -4599,6 +4600,8 @@ var xn = (e, t) => {
4599
4600
  totalDurationHours: I(),
4600
4601
  criticalTaskIds: z(F()).describe("Tasks with zero or negative slack, in schedule order"),
4601
4602
  missedDeadlineTaskIds: X(z(F())).describe("Tasks forecast to finish after their deadline"),
4603
+ unestimatedTaskIds: X(z(F())).describe("Unfinished tasks with no estimate, scheduled for defaultEstimateHours"),
4604
+ cyclicTaskIds: X(z(F())).describe("Tasks on a dependency cycle; their dates are not reliable"),
4602
4605
  tasks: z(Nn),
4603
4606
  leveled: X(L()),
4604
4607
  unleveledProjectEndDate: X(F()).describe("With levelling: the end date before levelling"),
@@ -4698,7 +4701,7 @@ var xn = (e, t) => {
4698
4701
  {
4699
4702
  name: "analyze-schedule",
4700
4703
  description: "Find what drives a project's end date, how much each task can slip and where people are double-booked, then recommend fixes. Use for \"when will we finish?\", \"what is critical?\" or deadline-risk questions.",
4701
- content: "---\nname: analyze-schedule\ndescription: Find what drives a project's end date, how much each task can slip and where people are double-booked, then recommend fixes. Use for \"when will we finish?\", \"what is critical?\" or deadline-risk questions.\n---\n\n# Analyze the schedule\n\n## 1. Run the schedule\n\n1. Get the `projectId` (`list_projects`).\n2. Call `calculate_critical_path` with `calendars: \"assignee\"` and `levelResources: true`, so each person works on one task at a time on their own calendar. If the user wants the ideal schedule with unlimited people, call it with no options instead.\n3. If the question spans projects that share people, call `calculate_portfolio_critical_path` with their `projectIds` (and `projectOrder` if the user ranked them) instead.\n4. For in-flight projects, pass `effort: \"remaining\"` so finished hours are not scheduled again.\n\n## 2. Read the result\n\n- `projectEndDate` is the forecast finish. With levelling, compare it with `unleveledProjectEndDate`: the gap is time lost waiting for busy people.\n- `criticalTaskIds` are the tasks with zero or negative slack. Any delay to one of them moves the end date or misses a deadline.\n- `missedDeadlineTaskIds` lists tasks forecast to finish after their `deadline`. Their `deadlineVarianceHours` says by how much (negative working hours), and the negative `totalSlack` on the tasks before them shows which work drives the miss. Entries with `isMilestone: true` are checkpoints such as releases or sign-offs.\n- Each entry in `tasks` has `slackWorkingHours`: how many working hours the task can slip without moving the end. Under about 8 hours is near-critical.\n- `levelingDelayHours` and `waitingOn` show a task that waited for its assignee to finish another task.\n- `overallocations` lists periods where a person (`assigneeId`) or team (`teamId`) is booked above `capacity`; `allocation` 1.5 means 150%.\n\nLook up titles for the task ids you mention with `get_task` or `list_tasks`; report titles, not ids. To see why a critical task cannot start earlier, call `get_task` with `includeDependencies: true`: `dependencies.dependsOn` lists what it waits for and `dependencies.dependents` what waits for it.\n\n## 3. Recommend\n\nRank fixes by how much they pull the end date in:\n\n1. **Unblock critical tasks.** A critical task with `isBlocked: true` delays everything; say what it waits for.\n2. **Move work off the bottleneck person.** If critical tasks wait on one assignee (`waitingOn`), suggest reassigning a non-critical task of theirs.\n3. **Remove false dependencies.** A critical task waiting on work it does not really need (`dependencies.dependsOn`) can start earlier once the link is removed.\n4. **Split long critical tasks** so parts can run in parallel.\n5. **Cut or defer** tasks feeding late deliverables, if dates are fixed.\n\nShow the recommendation to the user. Change tasks (`update_task`) or dependencies (`add_dependency`, `remove_dependency`) only when they ask, then run the schedule again to show the effect.\n\n## Report format\n\n- Forecast finish date, and against any deadline the user gave. If the user gives a date that is not yet on a task, offer to record it as a `deadline` (on a milestone task with `isMilestone: true` if it is a checkpoint) so later runs track it.\n- Each milestone: forecast date against its deadline.\n- Critical path: task titles in order, with assignee.\n- Top risks: near-critical tasks, blocked critical tasks, over-allocations.\n- Recommended actions, each with its expected effect.\n"
4704
+ content: "---\nname: analyze-schedule\ndescription: Find what drives a project's end date, how much each task can slip and where people are double-booked, then recommend fixes. Use for \"when will we finish?\", \"what is critical?\" or deadline-risk questions.\n---\n\n# Analyze the schedule\n\n## 1. Run the schedule\n\n1. Get the `projectId` (`list_projects`).\n2. Call `calculate_critical_path` with `calendars: \"assignee\"` and `levelResources: true`, so each person works on one task at a time on their own calendar. If the user wants the ideal schedule with unlimited people, call it with no options instead.\n3. If the question spans projects that share people, call `calculate_portfolio_critical_path` with their `projectIds` (and `projectOrder` if the user ranked them) instead.\n4. For in-flight projects, pass `effort: \"remaining\"` so finished hours are not scheduled again.\n\n## 2. Read the result\n\n- `projectEndDate` is the forecast finish. With levelling, compare it with `unleveledProjectEndDate`: the gap is time lost waiting for busy people.\n- `criticalTaskIds` are the tasks with zero or negative slack. Any delay to one of them moves the end date or misses a deadline.\n- `unestimatedTaskIds` lists unfinished tasks with no estimate; each was assumed to take `defaultEstimateHours` (1 by default), so say the forecast is uncertain and suggest estimating them. Entries with `isSummary: true` are parent tasks shown as the span of their subtasks.\n- `missedDeadlineTaskIds` lists tasks forecast to finish after their `deadline`. Their `deadlineVarianceHours` says by how much (negative working hours), and the negative `totalSlack` on the tasks before them shows which work drives the miss. Entries with `isMilestone: true` are checkpoints such as releases or sign-offs.\n- Each entry in `tasks` has `slackWorkingHours`: how many working hours the task can slip without moving the end. Under about 8 hours is near-critical.\n- `levelingDelayHours` and `waitingOn` show a task that waited for its assignee to finish another task.\n- `overallocations` lists periods where a person (`assigneeId`) or team (`teamId`) is booked above `capacity`; `allocation` 1.5 means 150%.\n\nLook up titles for the task ids you mention with `get_task` or `list_tasks`; report titles, not ids. To see why a critical task cannot start earlier, call `get_task` with `includeDependencies: true`: `dependencies.dependsOn` lists what it waits for and `dependencies.dependents` what waits for it.\n\n## 3. Recommend\n\nRank fixes by how much they pull the end date in:\n\n1. **Unblock critical tasks.** A critical task with `isBlocked: true` delays everything; say what it waits for.\n2. **Move work off the bottleneck person.** If critical tasks wait on one assignee (`waitingOn`), suggest reassigning a non-critical task of theirs.\n3. **Remove false dependencies.** A critical task waiting on work it does not really need (`dependencies.dependsOn`) can start earlier once the link is removed.\n4. **Split long critical tasks** so parts can run in parallel.\n5. **Cut or defer** tasks feeding late deliverables, if dates are fixed.\n\nShow the recommendation to the user. Change tasks (`update_task`) or dependencies (`add_dependency`, `remove_dependency`) only when they ask, then run the schedule again to show the effect.\n\n## Report format\n\n- Forecast finish date, and against any deadline the user gave. If the user gives a date that is not yet on a task, offer to record it as a `deadline` (on a milestone task with `isMilestone: true` if it is a checkpoint) so later runs track it.\n- Each milestone: forecast date against its deadline.\n- Critical path: task titles in order, with assignee.\n- Top risks: near-critical tasks, blocked critical tasks, over-allocations.\n- Recommended actions, each with its expected effect.\n"
4702
4705
  },
4703
4706
  {
4704
4707
  name: "investigate-task",
@@ -5146,7 +5149,8 @@ var rr = $({
5146
5149
  "dueDate",
5147
5150
  "order"
5148
5151
  ]).optional().describe("Which ready task gets an assignee first when levelling (default: least slack, then task priority)"),
5149
- effort: H(["estimate", "remaining"]).optional().describe("'remaining' schedules only estimate minus logged hours for in-progress tasks (default: full estimates)")
5152
+ effort: H(["estimate", "remaining"]).optional().describe("'remaining' schedules only estimate minus logged hours for in-progress tasks (default: full estimates)"),
5153
+ defaultEstimateHours: I().nonnegative().optional().describe("Hours to assume for tasks with no estimate (default 1). They are listed in unestimatedTaskIds")
5150
5154
  }),
5151
5155
  annotations: { readOnlyHint: !0 },
5152
5156
  execute: async (e, t) => t.calculatePortfolioCriticalPath(e)
@@ -5182,18 +5186,20 @@ var rr = $({
5182
5186
  "dueDate",
5183
5187
  "order"
5184
5188
  ]).optional().describe("Which ready task gets an assignee first when levelling (default: least slack, then task priority)"),
5185
- effort: H(["estimate", "remaining"]).optional().describe("'remaining' schedules only estimate minus logged hours for in-progress tasks (default: full estimates)")
5189
+ effort: H(["estimate", "remaining"]).optional().describe("'remaining' schedules only estimate minus logged hours for in-progress tasks (default: full estimates)"),
5190
+ defaultEstimateHours: I().nonnegative().optional().describe("Hours to assume for tasks with no estimate (default 1). They are listed in unestimatedTaskIds")
5186
5191
  }),
5187
5192
  annotations: { readOnlyHint: !0 },
5188
5193
  execute: async (e, t, n) => {
5189
5194
  let r = e.projectId || n?.projectId;
5190
5195
  if (!r) throw Error("projectId is required to calculate the critical path. Find one with `list_projects`.");
5191
- let { calendars: i, levelResources: a, levelingPriority: o, effort: s } = e;
5196
+ let { calendars: i, levelResources: a, levelingPriority: o, effort: s, defaultEstimateHours: c } = e;
5192
5197
  return t.calculateCriticalPath(r, {
5193
5198
  calendars: i,
5194
5199
  levelResources: a,
5195
5200
  levelingPriority: o,
5196
- effort: s
5201
+ effort: s,
5202
+ defaultEstimateHours: c
5197
5203
  });
5198
5204
  }
5199
5205
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@critical-path/svelte",
3
- "version": "0.19.3",
3
+ "version": "0.19.4",
4
4
  "description": "Svelte 5 Runes state and reactive integrations for Critical Path headless project management framework",
5
5
  "author": "Jack James",
6
6
  "license": "MIT",
@@ -18,9 +18,9 @@
18
18
  }
19
19
  },
20
20
  "dependencies": {
21
- "@critical-path/client": "0.25.4",
22
- "@critical-path/core": "0.54.0",
23
- "@critical-path/mcp": "0.21.0"
21
+ "@critical-path/client": "0.26.0",
22
+ "@critical-path/core": "0.55.0",
23
+ "@critical-path/mcp": "0.22.0"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "svelte": "^5.57.2"