@bicon/mcp-composer 0.5.0 → 0.7.0

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.
Files changed (2) hide show
  1. package/dist/index.mjs +374 -5
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -12,7 +12,7 @@ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"
12
12
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
13
 
14
14
  // src/version.ts
15
- var COMPOSER_VERSION = true ? "0.5.0" : readPackageVersion();
15
+ var COMPOSER_VERSION = true ? "0.7.0" : readPackageVersion();
16
16
 
17
17
  // ../../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
18
18
  var external_exports = {};
@@ -4170,7 +4170,7 @@ var ListOrganizationMembersResponseItem = objectType({
4170
4170
  "email": stringType(),
4171
4171
  "displayName": stringType().nullable(),
4172
4172
  "role": enumType(["admin", "member", "viewer"]),
4173
- "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones.")
4173
+ "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks, manage_follow_ups.")
4174
4174
  });
4175
4175
  var ListOrganizationMembersResponse = arrayType(ListOrganizationMembersResponseItem);
4176
4176
  var SyncOrganizationMembersResponse = objectType({
@@ -4180,18 +4180,23 @@ var SyncOrganizationMembersResponse = objectType({
4180
4180
  var GetMyOrganizationAccessResponse = objectType({
4181
4181
  "userId": stringType().describe(`The caller's own local user id (matches AuthorRef.userId on initiatives), so the client can tell its own changes apart from a teammate's \u2014 e.g. to suppress the "updated by X" collaboration banner when an edit echoing back is the caller's own save.`),
4182
4182
  "role": enumType(["admin", "member", "viewer"]),
4183
- "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones."),
4183
+ "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks, manage_follow_ups."),
4184
4184
  "initiativeLimit": numberType().describe("The most initiatives this organisation may hold, archived ones included. Creating one more answers 507 with code initiative_limit_reached, so the client blocks New, Duplicate and Import up front.")
4185
4185
  });
4186
+ var ListOrganizationDirectoryResponseItem = objectType({
4187
+ "userId": stringType().uuid(),
4188
+ "name": stringType()
4189
+ });
4190
+ var ListOrganizationDirectoryResponse = arrayType(ListOrganizationDirectoryResponseItem);
4186
4191
  var UpdateOrganizationMemberPermissionsParams = objectType({
4187
4192
  "userId": coerce.string().uuid()
4188
4193
  });
4189
4194
  var UpdateOrganizationMemberPermissionsBody = objectType({
4190
- "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones.")
4195
+ "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks, manage_follow_ups.")
4191
4196
  });
4192
4197
  var UpdateOrganizationMemberPermissionsResponse = objectType({
4193
4198
  "userId": stringType().uuid(),
4194
- "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones.")
4199
+ "permissions": arrayType(stringType()).describe("App-managed permission overrides on top of the fixed role (free-form strings, not a closed enum). Known keys: manage_skills, manage_ai_act, manage_metadata, manage_stage_gate, manage_economics, manage_decision_log, manage_dependencies, manage_required_skills, manage_scoring, manage_status_report, manage_prioritisation, manage_capabilities, manage_capability_impact, manage_milestones, manage_risks, manage_follow_ups.")
4195
4200
  });
4196
4201
  var ListPermissionProfilesResponseItem = objectType({
4197
4202
  "id": stringType().uuid(),
@@ -4286,6 +4291,24 @@ var listSnapshotsResponseInitiativesItemMilestonesItemForecastDateRegExp = new R
4286
4291
  var listSnapshotsResponseInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4287
4292
  var listSnapshotsResponseInitiativesItemMilestonesItemNoteMax = 1e4;
4288
4293
  var listSnapshotsResponseInitiativesItemMilestonesMax = 30;
4294
+ var listSnapshotsResponseInitiativesItemRisksItemTitleMax = 300;
4295
+ var listSnapshotsResponseInitiativesItemRisksItemProbabilityMax = 5;
4296
+ var listSnapshotsResponseInitiativesItemRisksItemImpactMax = 5;
4297
+ var listSnapshotsResponseInitiativesItemRisksItemResidualProbabilityMax = 5;
4298
+ var listSnapshotsResponseInitiativesItemRisksItemResidualImpactMax = 5;
4299
+ var listSnapshotsResponseInitiativesItemRisksItemOwnerMax = 300;
4300
+ var listSnapshotsResponseInitiativesItemRisksItemMitigationMax = 1e4;
4301
+ var listSnapshotsResponseInitiativesItemRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4302
+ var listSnapshotsResponseInitiativesItemRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4303
+ var listSnapshotsResponseInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4304
+ var listSnapshotsResponseInitiativesItemRisksItemNoteMax = 1e4;
4305
+ var listSnapshotsResponseInitiativesItemRisksMax = 50;
4306
+ var listSnapshotsResponseInitiativesItemFollowUpsItemTitleMax = 300;
4307
+ var listSnapshotsResponseInitiativesItemFollowUpsItemAssigneeNameMax = 300;
4308
+ var listSnapshotsResponseInitiativesItemFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4309
+ var listSnapshotsResponseInitiativesItemFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4310
+ var listSnapshotsResponseInitiativesItemFollowUpsItemNoteMax = 1e4;
4311
+ var listSnapshotsResponseInitiativesItemFollowUpsMax = 50;
4289
4312
  var listSnapshotsResponseInitiativesItemDependsOnMax = 1e3;
4290
4313
  var listSnapshotsResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
4291
4314
  var listSnapshotsResponseInitiativesItemRequiredSkillsMax = 1e3;
@@ -4495,6 +4518,33 @@ var ListSnapshotsResponseItem = objectType({
4495
4518
  "doneDate": stringType().regex(listSnapshotsResponseInitiativesItemMilestonesItemDoneDateRegExp).optional(),
4496
4519
  "note": stringType().max(listSnapshotsResponseInitiativesItemMilestonesItemNoteMax).optional()
4497
4520
  }).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(listSnapshotsResponseInitiativesItemMilestonesMax).optional(),
4521
+ "risks": arrayType(objectType({
4522
+ "id": stringType(),
4523
+ "title": stringType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemTitleMax),
4524
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
4525
+ "probability": numberType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemProbabilityMax),
4526
+ "impact": numberType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemImpactMax),
4527
+ "residualProbability": numberType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemResidualProbabilityMax).optional(),
4528
+ "residualImpact": numberType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemResidualImpactMax).optional(),
4529
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
4530
+ "owner": stringType().max(listSnapshotsResponseInitiativesItemRisksItemOwnerMax).optional(),
4531
+ "mitigation": stringType().max(listSnapshotsResponseInitiativesItemRisksItemMitigationMax).optional(),
4532
+ "raisedDate": stringType().regex(listSnapshotsResponseInitiativesItemRisksItemRaisedDateRegExp).optional(),
4533
+ "reviewDate": stringType().regex(listSnapshotsResponseInitiativesItemRisksItemReviewDateRegExp).optional(),
4534
+ "occurredDate": stringType().regex(listSnapshotsResponseInitiativesItemRisksItemOccurredDateRegExp).optional(),
4535
+ "note": stringType().max(listSnapshotsResponseInitiativesItemRisksItemNoteMax).optional()
4536
+ }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(listSnapshotsResponseInitiativesItemRisksMax).optional(),
4537
+ "followUps": arrayType(objectType({
4538
+ "id": stringType(),
4539
+ "title": stringType().min(1).max(listSnapshotsResponseInitiativesItemFollowUpsItemTitleMax),
4540
+ "assigneeUserId": stringType().uuid().optional(),
4541
+ "assigneeName": stringType().max(listSnapshotsResponseInitiativesItemFollowUpsItemAssigneeNameMax).optional(),
4542
+ "dueDate": stringType().regex(listSnapshotsResponseInitiativesItemFollowUpsItemDueDateRegExp),
4543
+ "doneDate": stringType().regex(listSnapshotsResponseInitiativesItemFollowUpsItemDoneDateRegExp).optional(),
4544
+ "milestoneId": stringType().optional(),
4545
+ "riskId": stringType().optional(),
4546
+ "note": stringType().max(listSnapshotsResponseInitiativesItemFollowUpsItemNoteMax).optional()
4547
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(listSnapshotsResponseInitiativesItemFollowUpsMax).optional(),
4498
4548
  "dependsOn": arrayType(stringType()).max(listSnapshotsResponseInitiativesItemDependsOnMax),
4499
4549
  "requiredSkills": arrayType(objectType({
4500
4550
  "skillId": stringType(),
@@ -4638,6 +4688,24 @@ var createSnapshotBodyInitiativesItemMilestonesItemForecastDateRegExp = new RegE
4638
4688
  var createSnapshotBodyInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4639
4689
  var createSnapshotBodyInitiativesItemMilestonesItemNoteMax = 1e4;
4640
4690
  var createSnapshotBodyInitiativesItemMilestonesMax = 30;
4691
+ var createSnapshotBodyInitiativesItemRisksItemTitleMax = 300;
4692
+ var createSnapshotBodyInitiativesItemRisksItemProbabilityMax = 5;
4693
+ var createSnapshotBodyInitiativesItemRisksItemImpactMax = 5;
4694
+ var createSnapshotBodyInitiativesItemRisksItemResidualProbabilityMax = 5;
4695
+ var createSnapshotBodyInitiativesItemRisksItemResidualImpactMax = 5;
4696
+ var createSnapshotBodyInitiativesItemRisksItemOwnerMax = 300;
4697
+ var createSnapshotBodyInitiativesItemRisksItemMitigationMax = 1e4;
4698
+ var createSnapshotBodyInitiativesItemRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4699
+ var createSnapshotBodyInitiativesItemRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4700
+ var createSnapshotBodyInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4701
+ var createSnapshotBodyInitiativesItemRisksItemNoteMax = 1e4;
4702
+ var createSnapshotBodyInitiativesItemRisksMax = 50;
4703
+ var createSnapshotBodyInitiativesItemFollowUpsItemTitleMax = 300;
4704
+ var createSnapshotBodyInitiativesItemFollowUpsItemAssigneeNameMax = 300;
4705
+ var createSnapshotBodyInitiativesItemFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4706
+ var createSnapshotBodyInitiativesItemFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4707
+ var createSnapshotBodyInitiativesItemFollowUpsItemNoteMax = 1e4;
4708
+ var createSnapshotBodyInitiativesItemFollowUpsMax = 50;
4641
4709
  var createSnapshotBodyInitiativesItemDependsOnMax = 1e3;
4642
4710
  var createSnapshotBodyInitiativesItemRequiredSkillsItemRunFteMin = 0;
4643
4711
  var createSnapshotBodyInitiativesItemRequiredSkillsMax = 1e3;
@@ -4847,6 +4915,33 @@ var CreateSnapshotBody = objectType({
4847
4915
  "doneDate": stringType().regex(createSnapshotBodyInitiativesItemMilestonesItemDoneDateRegExp).optional(),
4848
4916
  "note": stringType().max(createSnapshotBodyInitiativesItemMilestonesItemNoteMax).optional()
4849
4917
  }).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(createSnapshotBodyInitiativesItemMilestonesMax).optional(),
4918
+ "risks": arrayType(objectType({
4919
+ "id": stringType(),
4920
+ "title": stringType().min(1).max(createSnapshotBodyInitiativesItemRisksItemTitleMax),
4921
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
4922
+ "probability": numberType().min(1).max(createSnapshotBodyInitiativesItemRisksItemProbabilityMax),
4923
+ "impact": numberType().min(1).max(createSnapshotBodyInitiativesItemRisksItemImpactMax),
4924
+ "residualProbability": numberType().min(1).max(createSnapshotBodyInitiativesItemRisksItemResidualProbabilityMax).optional(),
4925
+ "residualImpact": numberType().min(1).max(createSnapshotBodyInitiativesItemRisksItemResidualImpactMax).optional(),
4926
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
4927
+ "owner": stringType().max(createSnapshotBodyInitiativesItemRisksItemOwnerMax).optional(),
4928
+ "mitigation": stringType().max(createSnapshotBodyInitiativesItemRisksItemMitigationMax).optional(),
4929
+ "raisedDate": stringType().regex(createSnapshotBodyInitiativesItemRisksItemRaisedDateRegExp).optional(),
4930
+ "reviewDate": stringType().regex(createSnapshotBodyInitiativesItemRisksItemReviewDateRegExp).optional(),
4931
+ "occurredDate": stringType().regex(createSnapshotBodyInitiativesItemRisksItemOccurredDateRegExp).optional(),
4932
+ "note": stringType().max(createSnapshotBodyInitiativesItemRisksItemNoteMax).optional()
4933
+ }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(createSnapshotBodyInitiativesItemRisksMax).optional(),
4934
+ "followUps": arrayType(objectType({
4935
+ "id": stringType(),
4936
+ "title": stringType().min(1).max(createSnapshotBodyInitiativesItemFollowUpsItemTitleMax),
4937
+ "assigneeUserId": stringType().uuid().optional(),
4938
+ "assigneeName": stringType().max(createSnapshotBodyInitiativesItemFollowUpsItemAssigneeNameMax).optional(),
4939
+ "dueDate": stringType().regex(createSnapshotBodyInitiativesItemFollowUpsItemDueDateRegExp),
4940
+ "doneDate": stringType().regex(createSnapshotBodyInitiativesItemFollowUpsItemDoneDateRegExp).optional(),
4941
+ "milestoneId": stringType().optional(),
4942
+ "riskId": stringType().optional(),
4943
+ "note": stringType().max(createSnapshotBodyInitiativesItemFollowUpsItemNoteMax).optional()
4944
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(createSnapshotBodyInitiativesItemFollowUpsMax).optional(),
4850
4945
  "dependsOn": arrayType(stringType()).max(createSnapshotBodyInitiativesItemDependsOnMax),
4851
4946
  "requiredSkills": arrayType(objectType({
4852
4947
  "skillId": stringType(),
@@ -4996,6 +5091,24 @@ var renameSnapshotResponseInitiativesItemMilestonesItemForecastDateRegExp = new
4996
5091
  var renameSnapshotResponseInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4997
5092
  var renameSnapshotResponseInitiativesItemMilestonesItemNoteMax = 1e4;
4998
5093
  var renameSnapshotResponseInitiativesItemMilestonesMax = 30;
5094
+ var renameSnapshotResponseInitiativesItemRisksItemTitleMax = 300;
5095
+ var renameSnapshotResponseInitiativesItemRisksItemProbabilityMax = 5;
5096
+ var renameSnapshotResponseInitiativesItemRisksItemImpactMax = 5;
5097
+ var renameSnapshotResponseInitiativesItemRisksItemResidualProbabilityMax = 5;
5098
+ var renameSnapshotResponseInitiativesItemRisksItemResidualImpactMax = 5;
5099
+ var renameSnapshotResponseInitiativesItemRisksItemOwnerMax = 300;
5100
+ var renameSnapshotResponseInitiativesItemRisksItemMitigationMax = 1e4;
5101
+ var renameSnapshotResponseInitiativesItemRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5102
+ var renameSnapshotResponseInitiativesItemRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5103
+ var renameSnapshotResponseInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5104
+ var renameSnapshotResponseInitiativesItemRisksItemNoteMax = 1e4;
5105
+ var renameSnapshotResponseInitiativesItemRisksMax = 50;
5106
+ var renameSnapshotResponseInitiativesItemFollowUpsItemTitleMax = 300;
5107
+ var renameSnapshotResponseInitiativesItemFollowUpsItemAssigneeNameMax = 300;
5108
+ var renameSnapshotResponseInitiativesItemFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5109
+ var renameSnapshotResponseInitiativesItemFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5110
+ var renameSnapshotResponseInitiativesItemFollowUpsItemNoteMax = 1e4;
5111
+ var renameSnapshotResponseInitiativesItemFollowUpsMax = 50;
4999
5112
  var renameSnapshotResponseInitiativesItemDependsOnMax = 1e3;
5000
5113
  var renameSnapshotResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
5001
5114
  var renameSnapshotResponseInitiativesItemRequiredSkillsMax = 1e3;
@@ -5205,6 +5318,33 @@ var RenameSnapshotResponse = objectType({
5205
5318
  "doneDate": stringType().regex(renameSnapshotResponseInitiativesItemMilestonesItemDoneDateRegExp).optional(),
5206
5319
  "note": stringType().max(renameSnapshotResponseInitiativesItemMilestonesItemNoteMax).optional()
5207
5320
  }).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(renameSnapshotResponseInitiativesItemMilestonesMax).optional(),
5321
+ "risks": arrayType(objectType({
5322
+ "id": stringType(),
5323
+ "title": stringType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemTitleMax),
5324
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
5325
+ "probability": numberType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemProbabilityMax),
5326
+ "impact": numberType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemImpactMax),
5327
+ "residualProbability": numberType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemResidualProbabilityMax).optional(),
5328
+ "residualImpact": numberType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemResidualImpactMax).optional(),
5329
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
5330
+ "owner": stringType().max(renameSnapshotResponseInitiativesItemRisksItemOwnerMax).optional(),
5331
+ "mitigation": stringType().max(renameSnapshotResponseInitiativesItemRisksItemMitigationMax).optional(),
5332
+ "raisedDate": stringType().regex(renameSnapshotResponseInitiativesItemRisksItemRaisedDateRegExp).optional(),
5333
+ "reviewDate": stringType().regex(renameSnapshotResponseInitiativesItemRisksItemReviewDateRegExp).optional(),
5334
+ "occurredDate": stringType().regex(renameSnapshotResponseInitiativesItemRisksItemOccurredDateRegExp).optional(),
5335
+ "note": stringType().max(renameSnapshotResponseInitiativesItemRisksItemNoteMax).optional()
5336
+ }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(renameSnapshotResponseInitiativesItemRisksMax).optional(),
5337
+ "followUps": arrayType(objectType({
5338
+ "id": stringType(),
5339
+ "title": stringType().min(1).max(renameSnapshotResponseInitiativesItemFollowUpsItemTitleMax),
5340
+ "assigneeUserId": stringType().uuid().optional(),
5341
+ "assigneeName": stringType().max(renameSnapshotResponseInitiativesItemFollowUpsItemAssigneeNameMax).optional(),
5342
+ "dueDate": stringType().regex(renameSnapshotResponseInitiativesItemFollowUpsItemDueDateRegExp),
5343
+ "doneDate": stringType().regex(renameSnapshotResponseInitiativesItemFollowUpsItemDoneDateRegExp).optional(),
5344
+ "milestoneId": stringType().optional(),
5345
+ "riskId": stringType().optional(),
5346
+ "note": stringType().max(renameSnapshotResponseInitiativesItemFollowUpsItemNoteMax).optional()
5347
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(renameSnapshotResponseInitiativesItemFollowUpsMax).optional(),
5208
5348
  "dependsOn": arrayType(stringType()).max(renameSnapshotResponseInitiativesItemDependsOnMax),
5209
5349
  "requiredSkills": arrayType(objectType({
5210
5350
  "skillId": stringType(),
@@ -5349,6 +5489,24 @@ var listInitiativesResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{4
5349
5489
  var listInitiativesResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5350
5490
  var listInitiativesResponseMilestonesItemNoteMax = 1e4;
5351
5491
  var listInitiativesResponseMilestonesMax = 30;
5492
+ var listInitiativesResponseRisksItemTitleMax = 300;
5493
+ var listInitiativesResponseRisksItemProbabilityMax = 5;
5494
+ var listInitiativesResponseRisksItemImpactMax = 5;
5495
+ var listInitiativesResponseRisksItemResidualProbabilityMax = 5;
5496
+ var listInitiativesResponseRisksItemResidualImpactMax = 5;
5497
+ var listInitiativesResponseRisksItemOwnerMax = 300;
5498
+ var listInitiativesResponseRisksItemMitigationMax = 1e4;
5499
+ var listInitiativesResponseRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5500
+ var listInitiativesResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5501
+ var listInitiativesResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5502
+ var listInitiativesResponseRisksItemNoteMax = 1e4;
5503
+ var listInitiativesResponseRisksMax = 50;
5504
+ var listInitiativesResponseFollowUpsItemTitleMax = 300;
5505
+ var listInitiativesResponseFollowUpsItemAssigneeNameMax = 300;
5506
+ var listInitiativesResponseFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5507
+ var listInitiativesResponseFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5508
+ var listInitiativesResponseFollowUpsItemNoteMax = 1e4;
5509
+ var listInitiativesResponseFollowUpsMax = 50;
5352
5510
  var listInitiativesResponseDependsOnMax = 1e3;
5353
5511
  var listInitiativesResponseRequiredSkillsItemRunFteMin = 0;
5354
5512
  var listInitiativesResponseRequiredSkillsMax = 1e3;
@@ -5552,6 +5710,33 @@ var ListInitiativesResponseItem = objectType({
5552
5710
  "doneDate": stringType().regex(listInitiativesResponseMilestonesItemDoneDateRegExp).optional(),
5553
5711
  "note": stringType().max(listInitiativesResponseMilestonesItemNoteMax).optional()
5554
5712
  }).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(listInitiativesResponseMilestonesMax).optional(),
5713
+ "risks": arrayType(objectType({
5714
+ "id": stringType(),
5715
+ "title": stringType().min(1).max(listInitiativesResponseRisksItemTitleMax),
5716
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
5717
+ "probability": numberType().min(1).max(listInitiativesResponseRisksItemProbabilityMax),
5718
+ "impact": numberType().min(1).max(listInitiativesResponseRisksItemImpactMax),
5719
+ "residualProbability": numberType().min(1).max(listInitiativesResponseRisksItemResidualProbabilityMax).optional(),
5720
+ "residualImpact": numberType().min(1).max(listInitiativesResponseRisksItemResidualImpactMax).optional(),
5721
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
5722
+ "owner": stringType().max(listInitiativesResponseRisksItemOwnerMax).optional(),
5723
+ "mitigation": stringType().max(listInitiativesResponseRisksItemMitigationMax).optional(),
5724
+ "raisedDate": stringType().regex(listInitiativesResponseRisksItemRaisedDateRegExp).optional(),
5725
+ "reviewDate": stringType().regex(listInitiativesResponseRisksItemReviewDateRegExp).optional(),
5726
+ "occurredDate": stringType().regex(listInitiativesResponseRisksItemOccurredDateRegExp).optional(),
5727
+ "note": stringType().max(listInitiativesResponseRisksItemNoteMax).optional()
5728
+ }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(listInitiativesResponseRisksMax).optional(),
5729
+ "followUps": arrayType(objectType({
5730
+ "id": stringType(),
5731
+ "title": stringType().min(1).max(listInitiativesResponseFollowUpsItemTitleMax),
5732
+ "assigneeUserId": stringType().uuid().optional(),
5733
+ "assigneeName": stringType().max(listInitiativesResponseFollowUpsItemAssigneeNameMax).optional(),
5734
+ "dueDate": stringType().regex(listInitiativesResponseFollowUpsItemDueDateRegExp),
5735
+ "doneDate": stringType().regex(listInitiativesResponseFollowUpsItemDoneDateRegExp).optional(),
5736
+ "milestoneId": stringType().optional(),
5737
+ "riskId": stringType().optional(),
5738
+ "note": stringType().max(listInitiativesResponseFollowUpsItemNoteMax).optional()
5739
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(listInitiativesResponseFollowUpsMax).optional(),
5555
5740
  "dependsOn": arrayType(stringType()).max(listInitiativesResponseDependsOnMax),
5556
5741
  "requiredSkills": arrayType(objectType({
5557
5742
  "skillId": stringType(),
@@ -5692,6 +5877,24 @@ var createInitiativeBodyOneMilestonesItemForecastDateRegExp = new RegExp("^\\d{4
5692
5877
  var createInitiativeBodyOneMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5693
5878
  var createInitiativeBodyOneMilestonesItemNoteMax = 1e4;
5694
5879
  var createInitiativeBodyOneMilestonesMax = 30;
5880
+ var createInitiativeBodyOneRisksItemTitleMax = 300;
5881
+ var createInitiativeBodyOneRisksItemProbabilityMax = 5;
5882
+ var createInitiativeBodyOneRisksItemImpactMax = 5;
5883
+ var createInitiativeBodyOneRisksItemResidualProbabilityMax = 5;
5884
+ var createInitiativeBodyOneRisksItemResidualImpactMax = 5;
5885
+ var createInitiativeBodyOneRisksItemOwnerMax = 300;
5886
+ var createInitiativeBodyOneRisksItemMitigationMax = 1e4;
5887
+ var createInitiativeBodyOneRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5888
+ var createInitiativeBodyOneRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5889
+ var createInitiativeBodyOneRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5890
+ var createInitiativeBodyOneRisksItemNoteMax = 1e4;
5891
+ var createInitiativeBodyOneRisksMax = 50;
5892
+ var createInitiativeBodyOneFollowUpsItemTitleMax = 300;
5893
+ var createInitiativeBodyOneFollowUpsItemAssigneeNameMax = 300;
5894
+ var createInitiativeBodyOneFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5895
+ var createInitiativeBodyOneFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5896
+ var createInitiativeBodyOneFollowUpsItemNoteMax = 1e4;
5897
+ var createInitiativeBodyOneFollowUpsMax = 50;
5695
5898
  var createInitiativeBodyOneDependsOnMax = 1e3;
5696
5899
  var createInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
5697
5900
  var createInitiativeBodyOneRequiredSkillsMax = 1e3;
@@ -5895,6 +6098,33 @@ var CreateInitiativeBody = objectType({
5895
6098
  "doneDate": stringType().regex(createInitiativeBodyOneMilestonesItemDoneDateRegExp).optional(),
5896
6099
  "note": stringType().max(createInitiativeBodyOneMilestonesItemNoteMax).optional()
5897
6100
  }).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(createInitiativeBodyOneMilestonesMax).optional(),
6101
+ "risks": arrayType(objectType({
6102
+ "id": stringType(),
6103
+ "title": stringType().min(1).max(createInitiativeBodyOneRisksItemTitleMax),
6104
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
6105
+ "probability": numberType().min(1).max(createInitiativeBodyOneRisksItemProbabilityMax),
6106
+ "impact": numberType().min(1).max(createInitiativeBodyOneRisksItemImpactMax),
6107
+ "residualProbability": numberType().min(1).max(createInitiativeBodyOneRisksItemResidualProbabilityMax).optional(),
6108
+ "residualImpact": numberType().min(1).max(createInitiativeBodyOneRisksItemResidualImpactMax).optional(),
6109
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
6110
+ "owner": stringType().max(createInitiativeBodyOneRisksItemOwnerMax).optional(),
6111
+ "mitigation": stringType().max(createInitiativeBodyOneRisksItemMitigationMax).optional(),
6112
+ "raisedDate": stringType().regex(createInitiativeBodyOneRisksItemRaisedDateRegExp).optional(),
6113
+ "reviewDate": stringType().regex(createInitiativeBodyOneRisksItemReviewDateRegExp).optional(),
6114
+ "occurredDate": stringType().regex(createInitiativeBodyOneRisksItemOccurredDateRegExp).optional(),
6115
+ "note": stringType().max(createInitiativeBodyOneRisksItemNoteMax).optional()
6116
+ }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(createInitiativeBodyOneRisksMax).optional(),
6117
+ "followUps": arrayType(objectType({
6118
+ "id": stringType(),
6119
+ "title": stringType().min(1).max(createInitiativeBodyOneFollowUpsItemTitleMax),
6120
+ "assigneeUserId": stringType().uuid().optional(),
6121
+ "assigneeName": stringType().max(createInitiativeBodyOneFollowUpsItemAssigneeNameMax).optional(),
6122
+ "dueDate": stringType().regex(createInitiativeBodyOneFollowUpsItemDueDateRegExp),
6123
+ "doneDate": stringType().regex(createInitiativeBodyOneFollowUpsItemDoneDateRegExp).optional(),
6124
+ "milestoneId": stringType().optional(),
6125
+ "riskId": stringType().optional(),
6126
+ "note": stringType().max(createInitiativeBodyOneFollowUpsItemNoteMax).optional()
6127
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(createInitiativeBodyOneFollowUpsMax).optional(),
5898
6128
  "dependsOn": arrayType(stringType()).max(createInitiativeBodyOneDependsOnMax),
5899
6129
  "requiredSkills": arrayType(objectType({
5900
6130
  "skillId": stringType(),
@@ -6045,6 +6275,24 @@ var getInitiativeResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-
6045
6275
  var getInitiativeResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6046
6276
  var getInitiativeResponseMilestonesItemNoteMax = 1e4;
6047
6277
  var getInitiativeResponseMilestonesMax = 30;
6278
+ var getInitiativeResponseRisksItemTitleMax = 300;
6279
+ var getInitiativeResponseRisksItemProbabilityMax = 5;
6280
+ var getInitiativeResponseRisksItemImpactMax = 5;
6281
+ var getInitiativeResponseRisksItemResidualProbabilityMax = 5;
6282
+ var getInitiativeResponseRisksItemResidualImpactMax = 5;
6283
+ var getInitiativeResponseRisksItemOwnerMax = 300;
6284
+ var getInitiativeResponseRisksItemMitigationMax = 1e4;
6285
+ var getInitiativeResponseRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6286
+ var getInitiativeResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6287
+ var getInitiativeResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6288
+ var getInitiativeResponseRisksItemNoteMax = 1e4;
6289
+ var getInitiativeResponseRisksMax = 50;
6290
+ var getInitiativeResponseFollowUpsItemTitleMax = 300;
6291
+ var getInitiativeResponseFollowUpsItemAssigneeNameMax = 300;
6292
+ var getInitiativeResponseFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6293
+ var getInitiativeResponseFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6294
+ var getInitiativeResponseFollowUpsItemNoteMax = 1e4;
6295
+ var getInitiativeResponseFollowUpsMax = 50;
6048
6296
  var getInitiativeResponseDependsOnMax = 1e3;
6049
6297
  var getInitiativeResponseRequiredSkillsItemRunFteMin = 0;
6050
6298
  var getInitiativeResponseRequiredSkillsMax = 1e3;
@@ -6248,6 +6496,33 @@ var GetInitiativeResponse = objectType({
6248
6496
  "doneDate": stringType().regex(getInitiativeResponseMilestonesItemDoneDateRegExp).optional(),
6249
6497
  "note": stringType().max(getInitiativeResponseMilestonesItemNoteMax).optional()
6250
6498
  }).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(getInitiativeResponseMilestonesMax).optional(),
6499
+ "risks": arrayType(objectType({
6500
+ "id": stringType(),
6501
+ "title": stringType().min(1).max(getInitiativeResponseRisksItemTitleMax),
6502
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
6503
+ "probability": numberType().min(1).max(getInitiativeResponseRisksItemProbabilityMax),
6504
+ "impact": numberType().min(1).max(getInitiativeResponseRisksItemImpactMax),
6505
+ "residualProbability": numberType().min(1).max(getInitiativeResponseRisksItemResidualProbabilityMax).optional(),
6506
+ "residualImpact": numberType().min(1).max(getInitiativeResponseRisksItemResidualImpactMax).optional(),
6507
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
6508
+ "owner": stringType().max(getInitiativeResponseRisksItemOwnerMax).optional(),
6509
+ "mitigation": stringType().max(getInitiativeResponseRisksItemMitigationMax).optional(),
6510
+ "raisedDate": stringType().regex(getInitiativeResponseRisksItemRaisedDateRegExp).optional(),
6511
+ "reviewDate": stringType().regex(getInitiativeResponseRisksItemReviewDateRegExp).optional(),
6512
+ "occurredDate": stringType().regex(getInitiativeResponseRisksItemOccurredDateRegExp).optional(),
6513
+ "note": stringType().max(getInitiativeResponseRisksItemNoteMax).optional()
6514
+ }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(getInitiativeResponseRisksMax).optional(),
6515
+ "followUps": arrayType(objectType({
6516
+ "id": stringType(),
6517
+ "title": stringType().min(1).max(getInitiativeResponseFollowUpsItemTitleMax),
6518
+ "assigneeUserId": stringType().uuid().optional(),
6519
+ "assigneeName": stringType().max(getInitiativeResponseFollowUpsItemAssigneeNameMax).optional(),
6520
+ "dueDate": stringType().regex(getInitiativeResponseFollowUpsItemDueDateRegExp),
6521
+ "doneDate": stringType().regex(getInitiativeResponseFollowUpsItemDoneDateRegExp).optional(),
6522
+ "milestoneId": stringType().optional(),
6523
+ "riskId": stringType().optional(),
6524
+ "note": stringType().max(getInitiativeResponseFollowUpsItemNoteMax).optional()
6525
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(getInitiativeResponseFollowUpsMax).optional(),
6251
6526
  "dependsOn": arrayType(stringType()).max(getInitiativeResponseDependsOnMax),
6252
6527
  "requiredSkills": arrayType(objectType({
6253
6528
  "skillId": stringType(),
@@ -6390,6 +6665,24 @@ var updateInitiativeBodyOneMilestonesItemForecastDateRegExp = new RegExp("^\\d{4
6390
6665
  var updateInitiativeBodyOneMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6391
6666
  var updateInitiativeBodyOneMilestonesItemNoteMax = 1e4;
6392
6667
  var updateInitiativeBodyOneMilestonesMax = 30;
6668
+ var updateInitiativeBodyOneRisksItemTitleMax = 300;
6669
+ var updateInitiativeBodyOneRisksItemProbabilityMax = 5;
6670
+ var updateInitiativeBodyOneRisksItemImpactMax = 5;
6671
+ var updateInitiativeBodyOneRisksItemResidualProbabilityMax = 5;
6672
+ var updateInitiativeBodyOneRisksItemResidualImpactMax = 5;
6673
+ var updateInitiativeBodyOneRisksItemOwnerMax = 300;
6674
+ var updateInitiativeBodyOneRisksItemMitigationMax = 1e4;
6675
+ var updateInitiativeBodyOneRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6676
+ var updateInitiativeBodyOneRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6677
+ var updateInitiativeBodyOneRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6678
+ var updateInitiativeBodyOneRisksItemNoteMax = 1e4;
6679
+ var updateInitiativeBodyOneRisksMax = 50;
6680
+ var updateInitiativeBodyOneFollowUpsItemTitleMax = 300;
6681
+ var updateInitiativeBodyOneFollowUpsItemAssigneeNameMax = 300;
6682
+ var updateInitiativeBodyOneFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6683
+ var updateInitiativeBodyOneFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6684
+ var updateInitiativeBodyOneFollowUpsItemNoteMax = 1e4;
6685
+ var updateInitiativeBodyOneFollowUpsMax = 50;
6393
6686
  var updateInitiativeBodyOneDependsOnMax = 1e3;
6394
6687
  var updateInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
6395
6688
  var updateInitiativeBodyOneRequiredSkillsMax = 1e3;
@@ -6593,6 +6886,33 @@ var UpdateInitiativeBody = objectType({
6593
6886
  "doneDate": stringType().regex(updateInitiativeBodyOneMilestonesItemDoneDateRegExp).optional(),
6594
6887
  "note": stringType().max(updateInitiativeBodyOneMilestonesItemNoteMax).optional()
6595
6888
  }).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(updateInitiativeBodyOneMilestonesMax).optional(),
6889
+ "risks": arrayType(objectType({
6890
+ "id": stringType(),
6891
+ "title": stringType().min(1).max(updateInitiativeBodyOneRisksItemTitleMax),
6892
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
6893
+ "probability": numberType().min(1).max(updateInitiativeBodyOneRisksItemProbabilityMax),
6894
+ "impact": numberType().min(1).max(updateInitiativeBodyOneRisksItemImpactMax),
6895
+ "residualProbability": numberType().min(1).max(updateInitiativeBodyOneRisksItemResidualProbabilityMax).optional(),
6896
+ "residualImpact": numberType().min(1).max(updateInitiativeBodyOneRisksItemResidualImpactMax).optional(),
6897
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
6898
+ "owner": stringType().max(updateInitiativeBodyOneRisksItemOwnerMax).optional(),
6899
+ "mitigation": stringType().max(updateInitiativeBodyOneRisksItemMitigationMax).optional(),
6900
+ "raisedDate": stringType().regex(updateInitiativeBodyOneRisksItemRaisedDateRegExp).optional(),
6901
+ "reviewDate": stringType().regex(updateInitiativeBodyOneRisksItemReviewDateRegExp).optional(),
6902
+ "occurredDate": stringType().regex(updateInitiativeBodyOneRisksItemOccurredDateRegExp).optional(),
6903
+ "note": stringType().max(updateInitiativeBodyOneRisksItemNoteMax).optional()
6904
+ }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(updateInitiativeBodyOneRisksMax).optional(),
6905
+ "followUps": arrayType(objectType({
6906
+ "id": stringType(),
6907
+ "title": stringType().min(1).max(updateInitiativeBodyOneFollowUpsItemTitleMax),
6908
+ "assigneeUserId": stringType().uuid().optional(),
6909
+ "assigneeName": stringType().max(updateInitiativeBodyOneFollowUpsItemAssigneeNameMax).optional(),
6910
+ "dueDate": stringType().regex(updateInitiativeBodyOneFollowUpsItemDueDateRegExp),
6911
+ "doneDate": stringType().regex(updateInitiativeBodyOneFollowUpsItemDoneDateRegExp).optional(),
6912
+ "milestoneId": stringType().optional(),
6913
+ "riskId": stringType().optional(),
6914
+ "note": stringType().max(updateInitiativeBodyOneFollowUpsItemNoteMax).optional()
6915
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(updateInitiativeBodyOneFollowUpsMax).optional(),
6596
6916
  "dependsOn": arrayType(stringType()).max(updateInitiativeBodyOneDependsOnMax),
6597
6917
  "requiredSkills": arrayType(objectType({
6598
6918
  "skillId": stringType(),
@@ -6740,6 +7060,24 @@ var updateInitiativeResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{
6740
7060
  var updateInitiativeResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6741
7061
  var updateInitiativeResponseMilestonesItemNoteMax = 1e4;
6742
7062
  var updateInitiativeResponseMilestonesMax = 30;
7063
+ var updateInitiativeResponseRisksItemTitleMax = 300;
7064
+ var updateInitiativeResponseRisksItemProbabilityMax = 5;
7065
+ var updateInitiativeResponseRisksItemImpactMax = 5;
7066
+ var updateInitiativeResponseRisksItemResidualProbabilityMax = 5;
7067
+ var updateInitiativeResponseRisksItemResidualImpactMax = 5;
7068
+ var updateInitiativeResponseRisksItemOwnerMax = 300;
7069
+ var updateInitiativeResponseRisksItemMitigationMax = 1e4;
7070
+ var updateInitiativeResponseRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
7071
+ var updateInitiativeResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
7072
+ var updateInitiativeResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
7073
+ var updateInitiativeResponseRisksItemNoteMax = 1e4;
7074
+ var updateInitiativeResponseRisksMax = 50;
7075
+ var updateInitiativeResponseFollowUpsItemTitleMax = 300;
7076
+ var updateInitiativeResponseFollowUpsItemAssigneeNameMax = 300;
7077
+ var updateInitiativeResponseFollowUpsItemDueDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
7078
+ var updateInitiativeResponseFollowUpsItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
7079
+ var updateInitiativeResponseFollowUpsItemNoteMax = 1e4;
7080
+ var updateInitiativeResponseFollowUpsMax = 50;
6743
7081
  var updateInitiativeResponseDependsOnMax = 1e3;
6744
7082
  var updateInitiativeResponseRequiredSkillsItemRunFteMin = 0;
6745
7083
  var updateInitiativeResponseRequiredSkillsMax = 1e3;
@@ -6943,6 +7281,33 @@ var UpdateInitiativeResponse = objectType({
6943
7281
  "doneDate": stringType().regex(updateInitiativeResponseMilestonesItemDoneDateRegExp).optional(),
6944
7282
  "note": stringType().max(updateInitiativeResponseMilestonesItemNoteMax).optional()
6945
7283
  }).describe("A dated intermediate result (docs/milestones-concept-2026-10-17.md). baselineDate is the agreed plan, forecastDate today's expectation (absent = the baseline), doneDate marks it reached; all yyyy-mm-dd.")).max(updateInitiativeResponseMilestonesMax).optional(),
7284
+ "risks": arrayType(objectType({
7285
+ "id": stringType(),
7286
+ "title": stringType().min(1).max(updateInitiativeResponseRisksItemTitleMax),
7287
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
7288
+ "probability": numberType().min(1).max(updateInitiativeResponseRisksItemProbabilityMax),
7289
+ "impact": numberType().min(1).max(updateInitiativeResponseRisksItemImpactMax),
7290
+ "residualProbability": numberType().min(1).max(updateInitiativeResponseRisksItemResidualProbabilityMax).optional(),
7291
+ "residualImpact": numberType().min(1).max(updateInitiativeResponseRisksItemResidualImpactMax).optional(),
7292
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
7293
+ "owner": stringType().max(updateInitiativeResponseRisksItemOwnerMax).optional(),
7294
+ "mitigation": stringType().max(updateInitiativeResponseRisksItemMitigationMax).optional(),
7295
+ "raisedDate": stringType().regex(updateInitiativeResponseRisksItemRaisedDateRegExp).optional(),
7296
+ "reviewDate": stringType().regex(updateInitiativeResponseRisksItemReviewDateRegExp).optional(),
7297
+ "occurredDate": stringType().regex(updateInitiativeResponseRisksItemOccurredDateRegExp).optional(),
7298
+ "note": stringType().max(updateInitiativeResponseRisksItemNoteMax).optional()
7299
+ }).describe("A concrete project risk, or an issue when status is occurred (docs/risks-issues-follow-ups-concept-2026-10-19.md). Probability and impact are integers 1-5; the residual pair (after mitigation) is sent as a pair or not at all. Dates are yyyy-mm-dd.")).max(updateInitiativeResponseRisksMax).optional(),
7300
+ "followUps": arrayType(objectType({
7301
+ "id": stringType(),
7302
+ "title": stringType().min(1).max(updateInitiativeResponseFollowUpsItemTitleMax),
7303
+ "assigneeUserId": stringType().uuid().optional(),
7304
+ "assigneeName": stringType().max(updateInitiativeResponseFollowUpsItemAssigneeNameMax).optional(),
7305
+ "dueDate": stringType().regex(updateInitiativeResponseFollowUpsItemDueDateRegExp),
7306
+ "doneDate": stringType().regex(updateInitiativeResponseFollowUpsItemDoneDateRegExp).optional(),
7307
+ "milestoneId": stringType().optional(),
7308
+ "riskId": stringType().optional(),
7309
+ "note": stringType().max(updateInitiativeResponseFollowUpsItemNoteMax).optional()
7310
+ }).describe("An agreed next step: who does what by when (docs/risks-issues-follow-ups-concept-2026-10-19.md). assigneeUserId is a member of the org (an id that is not is dropped on save, the name kept); milestoneId and riskId name the same initiative's milestones and risks (a link that does not is cleared on save). Dates are yyyy-mm-dd.")).max(updateInitiativeResponseFollowUpsMax).optional(),
6946
7311
  "dependsOn": arrayType(stringType()).max(updateInitiativeResponseDependsOnMax),
6947
7312
  "requiredSkills": arrayType(objectType({
6948
7313
  "skillId": stringType(),
@@ -10241,6 +10606,10 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
10241
10606
  if (updates && spec.milestones === void 0) {
10242
10607
  warnings.push("milestones: none sent, and the app will offer this file as an update \u2014 it replaces the initiative's milestones, so any the app holds are removed. Send the full list to keep them.");
10243
10608
  }
10609
+ if (updates) {
10610
+ warnings.push("risks: this file cannot carry risks, and the app will offer it as an update \u2014 any risks the app holds for this initiative are removed. Re-enter them in the app after the import, or add the initiative's details there instead.");
10611
+ warnings.push("followUps: this file cannot carry follow-ups, and the app will offer it as an update \u2014 any follow-ups the app holds for this initiative are removed. Re-enter them in the app after the import, or add the initiative's details there instead.");
10612
+ }
10244
10613
  let businessUnit = spec.businessUnit;
10245
10614
  let aiCategory = spec.aiCategory;
10246
10615
  if (context) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bicon/mcp-composer",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "MCP server that helps an AI client compose a valid BICon portfolio initiative and hand it back as an import file (draft-first, no auth, no API calls).",
5
5
  "license": "UNLICENSED",
6
6
  "author": "BICon Establishment",