@critical-path/svelte 0.19.5 → 0.19.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @critical-path/svelte
2
2
 
3
+ ## 0.19.6
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [224ad51]
8
+ - @critical-path/core@0.57.0
9
+ - @critical-path/mcp@0.24.0
10
+ - @critical-path/client@0.27.1
11
+
3
12
  ## 0.19.5
4
13
 
5
14
  ### Patch Changes
package/dist/index.js CHANGED
@@ -4532,6 +4532,7 @@ var Sn = (e, t) => {
4532
4532
  assigneeId: X(I()),
4533
4533
  dueDate: X(I()),
4534
4534
  deadline: X(I()).describe("Latest acceptable finish, enforced by critical path analysis"),
4535
+ earliestStart: X(I()).describe("Earliest the task may start, enforced by critical path analysis"),
4535
4536
  isMilestone: X(R()).describe("A zero-duration checkpoint"),
4536
4537
  estimatedHours: X(L()),
4537
4538
  loggedHours: X(L()),
@@ -4549,7 +4550,8 @@ var Sn = (e, t) => {
4549
4550
  id: I(),
4550
4551
  taskId: I().describe("The task that waits"),
4551
4552
  dependsOnTaskId: I().describe("The task it waits for"),
4552
- type: I().describe("blocking or relates_to")
4553
+ type: I().describe("blocking or relates_to"),
4554
+ lagHours: X(L()).describe("Working hours the waiting task waits after the other finishes")
4553
4555
  }).describe("A dependency between two tasks"), An = Y({
4554
4556
  id: I(),
4555
4557
  projectId: I(),
@@ -4712,7 +4714,7 @@ var Sn = (e, t) => {
4712
4714
  {
4713
4715
  name: "plan-project",
4714
4716
  description: "Turn a goal, brief or feature list into a Critical Path project with deliverables, estimated and prioritized tasks, and the dependencies between them. Use when the user asks to plan, scope or break down work.",
4715
- content: "---\nname: plan-project\ndescription: Turn a goal, brief or feature list into a Critical Path project with deliverables, estimated and prioritized tasks, and the dependencies between them. Use when the user asks to plan, scope or break down work.\n---\n\n# Plan a project\n\nTurn a goal into deliverables (dated outcomes), tasks (estimated units of work) and dependencies (which task waits for which) the scheduler can use.\n\n## 1. Find or create the project\n\n1. Call `list_projects`. If a project already matches the goal, use it and read it with `get_project` to learn its workflow status keys and custom fields.\n2. Only if none fits, and the user wants a new one, call `create_project` with a `name` and a short `key`.\n3. Call `list_tasks` with the `projectId` and `list_deliverables` to see what already exists. Do not recreate it.\n\n## 2. Draft the plan before writing anything\n\nBreak the goal down in your reply first and show it to the user:\n\n- **Deliverables**: 2-6 outcomes someone could accept or reject, each with a due date if the user gave one.\n- **Milestones** for dated checkpoints (a release, a sign-off, a review): a task with `isMilestone: true`, a `deadline` if the date is fixed, and dependencies on the tasks that must finish first. The schedule then reports whether each date will be met.\n- **Tasks** under each deliverable. Each task:\n - starts with a verb and is small enough for one person (about 2-24 hours);\n - has `estimatedHours` (effort, not elapsed time);\n - has a `priority`: `urgent` only for work that blocks others now, `high` for the critical outcome, `medium` by default, `low` for nice-to-haves;\n - lists the tasks it must wait for (its dependencies). Only add a dependency when the work truly cannot start earlier; every extra one lengthens the schedule.\n- Note anything you assumed (team size, dates, scope) as a question.\n\nAsk the user to confirm or adjust before creating anything. A plan is cheap to change in chat and tedious to change once created.\n\n## 3. Create it\n\n1. Create tasks with `create_task` (`projectId`, `title`, `description` with acceptance criteria, `estimatedHours`, `priority`, `assigneeId` if known). Leave `status` out so tasks start in the workflow's default status.\n2. Create each deliverable with `create_deliverable`, passing the ids of its tasks in `taskIds`.\n3. Add each dependency from your plan with `add_dependency`: `taskId` is the task that waits, `dependsOnTaskId` the task that must finish first. Use the ids `create_task` returned. If one is refused as circular, your plan has a loop: fix the order with the user instead of retrying.\n4. If the project already had tasks, check what they wait for with `get_task` and `includeDependencies: true` before linking new work to them.\n\n## 4. Check the result\n\n1. Call `calculate_critical_path` for the project and report the forecast `projectEndDate` and the `criticalTaskIds` (by title). If every task is critical or the end date looks too early, a dependency is probably missing or reversed.\n2. If the end date misses a deliverable's due date, or `missedDeadlineTaskIds` is not empty, say so and suggest what to cut, split or reassign. The `analyze-schedule` skill covers this in depth.\n\n## Guardrails\n\n- Never invent user ids for `assigneeId`. Leave tasks unassigned unless the user named the person and you have their id.\n- Keep the plan to what the user asked for; propose extra work as suggestions, not tasks.\n"
4717
+ content: "---\nname: plan-project\ndescription: Turn a goal, brief or feature list into a Critical Path project with deliverables, estimated and prioritized tasks, and the dependencies between them. Use when the user asks to plan, scope or break down work.\n---\n\n# Plan a project\n\nTurn a goal into deliverables (dated outcomes), tasks (estimated units of work) and dependencies (which task waits for which) the scheduler can use.\n\n## 1. Find or create the project\n\n1. Call `list_projects`. If a project already matches the goal, use it and read it with `get_project` to learn its workflow status keys and custom fields.\n2. Only if none fits, and the user wants a new one, call `create_project` with a `name` and a short `key`.\n3. Call `list_tasks` with the `projectId` and `list_deliverables` to see what already exists. Do not recreate it.\n\n## 2. Draft the plan before writing anything\n\nBreak the goal down in your reply first and show it to the user:\n\n- **Deliverables**: 2-6 outcomes someone could accept or reject, each with a due date if the user gave one.\n- **Waits and fixed start dates**: a dependency's `lagHours` for a wait between tasks (curing, review turnaround), and a task's `earliestStart` when it cannot begin before a date. Do not invent placeholder tasks for these.\n- **Milestones** for dated checkpoints (a release, a sign-off, a review): a task with `isMilestone: true`, a `deadline` if the date is fixed, and dependencies on the tasks that must finish first. The schedule then reports whether each date will be met.\n- **Tasks** under each deliverable. Each task:\n - starts with a verb and is small enough for one person (about 2-24 hours);\n - has `estimatedHours` (effort, not elapsed time);\n - has a `priority`: `urgent` only for work that blocks others now, `high` for the critical outcome, `medium` by default, `low` for nice-to-haves;\n - lists the tasks it must wait for (its dependencies). Only add a dependency when the work truly cannot start earlier; every extra one lengthens the schedule.\n- Note anything you assumed (team size, dates, scope) as a question.\n\nAsk the user to confirm or adjust before creating anything. A plan is cheap to change in chat and tedious to change once created.\n\n## 3. Create it\n\n1. Create tasks with `create_task` (`projectId`, `title`, `description` with acceptance criteria, `estimatedHours`, `priority`, `assigneeId` if known). Leave `status` out so tasks start in the workflow's default status.\n2. Create each deliverable with `create_deliverable`, passing the ids of its tasks in `taskIds`.\n3. Add each dependency from your plan with `add_dependency`: `taskId` is the task that waits, `dependsOnTaskId` the task that must finish first. Use the ids `create_task` returned. If one is refused as circular, your plan has a loop: fix the order with the user instead of retrying.\n4. If the project already had tasks, check what they wait for with `get_task` and `includeDependencies: true` before linking new work to them.\n\n## 4. Check the result\n\n1. Call `calculate_critical_path` for the project and report the forecast `projectEndDate` and the `criticalTaskIds` (by title). If every task is critical or the end date looks too early, a dependency is probably missing or reversed.\n2. If the end date misses a deliverable's due date, or `missedDeadlineTaskIds` is not empty, say so and suggest what to cut, split or reassign. The `analyze-schedule` skill covers this in depth.\n\n## Guardrails\n\n- Never invent user ids for `assigneeId`. Leave tasks unassigned unless the user named the person and you have their id.\n- Keep the plan to what the user asked for; propose extra work as suggestions, not tasks.\n"
4716
4718
  },
4717
4719
  {
4718
4720
  name: "report-status",
@@ -4927,6 +4929,7 @@ var ir = $({
4927
4929
  assigneeId: I().optional().describe("User ID to assign task to"),
4928
4930
  dueDate: I().optional().describe("Due date (ISO string)"),
4929
4931
  deadline: I().optional().describe("Latest acceptable finish (YYYY-MM-DD for the end of that working day, or an ISO date-time). Critical path analysis reports a miss as negative slack"),
4932
+ earliestStart: I().optional().describe("Earliest the task may start (YYYY-MM-DD for the start of that day, or an ISO date-time), e.g. when something from outside the project arrives"),
4930
4933
  isMilestone: R().optional().describe("Mark the task as a milestone: a zero-duration checkpoint (release, sign-off) fed by dependencies; its estimate is ignored"),
4931
4934
  tags: z(I()).optional().describe("Tags for categorization"),
4932
4935
  estimatedHours: L().optional().describe("Estimated hours to complete"),
@@ -4947,6 +4950,7 @@ var ir = $({
4947
4950
  assigneeId: e.assigneeId,
4948
4951
  dueDate: e.dueDate,
4949
4952
  deadline: e.deadline,
4953
+ earliestStart: e.earliestStart,
4950
4954
  isMilestone: e.isMilestone,
4951
4955
  tags: e.tags || [],
4952
4956
  estimatedHours: e.estimatedHours,
@@ -4978,6 +4982,7 @@ var ir = $({
4978
4982
  assigneeId: I().optional().describe("User ID to assign the task to"),
4979
4983
  dueDate: I().optional().describe("Due date (ISO string)"),
4980
4984
  deadline: I().optional().describe("Latest acceptable finish (YYYY-MM-DD for the end of that working day, or an ISO date-time). Critical path analysis reports a miss as negative slack"),
4985
+ earliestStart: I().optional().describe("Earliest the task may start (YYYY-MM-DD for the start of that day, or an ISO date-time), e.g. when something from outside the project arrives"),
4981
4986
  isMilestone: R().optional().describe("Mark the task as a milestone: a zero-duration checkpoint (release, sign-off) fed by dependencies; its estimate is ignored"),
4982
4987
  tags: z(I()).optional().describe("Replaces all tags"),
4983
4988
  estimatedHours: L().optional().describe("Estimated effort in hours"),
@@ -5056,18 +5061,21 @@ var ir = $({
5056
5061
  zodSchema: B({
5057
5062
  taskId: I().describe("The task that waits"),
5058
5063
  dependsOnTaskId: I().describe("The task that must finish first"),
5059
- type: H(["blocking", "relates_to"]).optional().describe("'blocking' (default) affects the schedule; 'relates_to' only links the tasks for reference")
5064
+ type: H(["blocking", "relates_to"]).optional().describe("'blocking' (default) affects the schedule; 'relates_to' only links the tasks for reference"),
5065
+ lagHours: L().optional().describe("Working hours to wait after the other task finishes, e.g. 16 for two working days of curing; negative to start that much earlier")
5060
5066
  }),
5061
5067
  annotations: { idempotentHint: !0 },
5062
5068
  execute: async (e, t) => {
5063
- let n = e.type ?? "blocking", { isEngine: r } = await Yn(t);
5064
- return r ? t.addDependency({
5069
+ let n = e.type ?? "blocking", r = e.lagHours === void 0 ? {} : { lagHours: e.lagHours }, { isEngine: i } = await Yn(t);
5070
+ return i ? t.addDependency({
5065
5071
  taskId: e.taskId,
5066
5072
  dependsOnTaskId: e.dependsOnTaskId,
5067
- type: n
5073
+ type: n,
5074
+ ...r
5068
5075
  }) : t.addDependency(e.taskId, {
5069
5076
  dependsOnTaskId: e.dependsOnTaskId,
5070
- type: n
5077
+ type: n,
5078
+ ...r
5071
5079
  });
5072
5080
  }
5073
5081
  }), dr = $({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@critical-path/svelte",
3
- "version": "0.19.5",
3
+ "version": "0.19.6",
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.27.0",
22
- "@critical-path/core": "0.56.0",
23
- "@critical-path/mcp": "0.23.0"
21
+ "@critical-path/client": "0.27.1",
22
+ "@critical-path/core": "0.57.0",
23
+ "@critical-path/mcp": "0.24.0"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "svelte": "^5.57.2"