@bicon/mcp-composer 0.5.0 → 0.6.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 +232 -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.6.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.")
4174
4174
  });
4175
4175
  var ListOrganizationMembersResponse = arrayType(ListOrganizationMembersResponseItem);
4176
4176
  var SyncOrganizationMembersResponse = objectType({
@@ -4180,18 +4180,18 @@ 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."),
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
4186
  var UpdateOrganizationMemberPermissionsParams = objectType({
4187
4187
  "userId": coerce.string().uuid()
4188
4188
  });
4189
4189
  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.")
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, manage_risks.")
4191
4191
  });
4192
4192
  var UpdateOrganizationMemberPermissionsResponse = objectType({
4193
4193
  "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.")
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, manage_risks.")
4195
4195
  });
4196
4196
  var ListPermissionProfilesResponseItem = objectType({
4197
4197
  "id": stringType().uuid(),
@@ -4286,6 +4286,18 @@ var listSnapshotsResponseInitiativesItemMilestonesItemForecastDateRegExp = new R
4286
4286
  var listSnapshotsResponseInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4287
4287
  var listSnapshotsResponseInitiativesItemMilestonesItemNoteMax = 1e4;
4288
4288
  var listSnapshotsResponseInitiativesItemMilestonesMax = 30;
4289
+ var listSnapshotsResponseInitiativesItemRisksItemTitleMax = 300;
4290
+ var listSnapshotsResponseInitiativesItemRisksItemProbabilityMax = 5;
4291
+ var listSnapshotsResponseInitiativesItemRisksItemImpactMax = 5;
4292
+ var listSnapshotsResponseInitiativesItemRisksItemResidualProbabilityMax = 5;
4293
+ var listSnapshotsResponseInitiativesItemRisksItemResidualImpactMax = 5;
4294
+ var listSnapshotsResponseInitiativesItemRisksItemOwnerMax = 300;
4295
+ var listSnapshotsResponseInitiativesItemRisksItemMitigationMax = 1e4;
4296
+ var listSnapshotsResponseInitiativesItemRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4297
+ var listSnapshotsResponseInitiativesItemRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4298
+ var listSnapshotsResponseInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4299
+ var listSnapshotsResponseInitiativesItemRisksItemNoteMax = 1e4;
4300
+ var listSnapshotsResponseInitiativesItemRisksMax = 50;
4289
4301
  var listSnapshotsResponseInitiativesItemDependsOnMax = 1e3;
4290
4302
  var listSnapshotsResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
4291
4303
  var listSnapshotsResponseInitiativesItemRequiredSkillsMax = 1e3;
@@ -4495,6 +4507,22 @@ var ListSnapshotsResponseItem = objectType({
4495
4507
  "doneDate": stringType().regex(listSnapshotsResponseInitiativesItemMilestonesItemDoneDateRegExp).optional(),
4496
4508
  "note": stringType().max(listSnapshotsResponseInitiativesItemMilestonesItemNoteMax).optional()
4497
4509
  }).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(),
4510
+ "risks": arrayType(objectType({
4511
+ "id": stringType(),
4512
+ "title": stringType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemTitleMax),
4513
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
4514
+ "probability": numberType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemProbabilityMax),
4515
+ "impact": numberType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemImpactMax),
4516
+ "residualProbability": numberType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemResidualProbabilityMax).optional(),
4517
+ "residualImpact": numberType().min(1).max(listSnapshotsResponseInitiativesItemRisksItemResidualImpactMax).optional(),
4518
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
4519
+ "owner": stringType().max(listSnapshotsResponseInitiativesItemRisksItemOwnerMax).optional(),
4520
+ "mitigation": stringType().max(listSnapshotsResponseInitiativesItemRisksItemMitigationMax).optional(),
4521
+ "raisedDate": stringType().regex(listSnapshotsResponseInitiativesItemRisksItemRaisedDateRegExp).optional(),
4522
+ "reviewDate": stringType().regex(listSnapshotsResponseInitiativesItemRisksItemReviewDateRegExp).optional(),
4523
+ "occurredDate": stringType().regex(listSnapshotsResponseInitiativesItemRisksItemOccurredDateRegExp).optional(),
4524
+ "note": stringType().max(listSnapshotsResponseInitiativesItemRisksItemNoteMax).optional()
4525
+ }).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(),
4498
4526
  "dependsOn": arrayType(stringType()).max(listSnapshotsResponseInitiativesItemDependsOnMax),
4499
4527
  "requiredSkills": arrayType(objectType({
4500
4528
  "skillId": stringType(),
@@ -4638,6 +4666,18 @@ var createSnapshotBodyInitiativesItemMilestonesItemForecastDateRegExp = new RegE
4638
4666
  var createSnapshotBodyInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4639
4667
  var createSnapshotBodyInitiativesItemMilestonesItemNoteMax = 1e4;
4640
4668
  var createSnapshotBodyInitiativesItemMilestonesMax = 30;
4669
+ var createSnapshotBodyInitiativesItemRisksItemTitleMax = 300;
4670
+ var createSnapshotBodyInitiativesItemRisksItemProbabilityMax = 5;
4671
+ var createSnapshotBodyInitiativesItemRisksItemImpactMax = 5;
4672
+ var createSnapshotBodyInitiativesItemRisksItemResidualProbabilityMax = 5;
4673
+ var createSnapshotBodyInitiativesItemRisksItemResidualImpactMax = 5;
4674
+ var createSnapshotBodyInitiativesItemRisksItemOwnerMax = 300;
4675
+ var createSnapshotBodyInitiativesItemRisksItemMitigationMax = 1e4;
4676
+ var createSnapshotBodyInitiativesItemRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4677
+ var createSnapshotBodyInitiativesItemRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4678
+ var createSnapshotBodyInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4679
+ var createSnapshotBodyInitiativesItemRisksItemNoteMax = 1e4;
4680
+ var createSnapshotBodyInitiativesItemRisksMax = 50;
4641
4681
  var createSnapshotBodyInitiativesItemDependsOnMax = 1e3;
4642
4682
  var createSnapshotBodyInitiativesItemRequiredSkillsItemRunFteMin = 0;
4643
4683
  var createSnapshotBodyInitiativesItemRequiredSkillsMax = 1e3;
@@ -4847,6 +4887,22 @@ var CreateSnapshotBody = objectType({
4847
4887
  "doneDate": stringType().regex(createSnapshotBodyInitiativesItemMilestonesItemDoneDateRegExp).optional(),
4848
4888
  "note": stringType().max(createSnapshotBodyInitiativesItemMilestonesItemNoteMax).optional()
4849
4889
  }).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(),
4890
+ "risks": arrayType(objectType({
4891
+ "id": stringType(),
4892
+ "title": stringType().min(1).max(createSnapshotBodyInitiativesItemRisksItemTitleMax),
4893
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
4894
+ "probability": numberType().min(1).max(createSnapshotBodyInitiativesItemRisksItemProbabilityMax),
4895
+ "impact": numberType().min(1).max(createSnapshotBodyInitiativesItemRisksItemImpactMax),
4896
+ "residualProbability": numberType().min(1).max(createSnapshotBodyInitiativesItemRisksItemResidualProbabilityMax).optional(),
4897
+ "residualImpact": numberType().min(1).max(createSnapshotBodyInitiativesItemRisksItemResidualImpactMax).optional(),
4898
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
4899
+ "owner": stringType().max(createSnapshotBodyInitiativesItemRisksItemOwnerMax).optional(),
4900
+ "mitigation": stringType().max(createSnapshotBodyInitiativesItemRisksItemMitigationMax).optional(),
4901
+ "raisedDate": stringType().regex(createSnapshotBodyInitiativesItemRisksItemRaisedDateRegExp).optional(),
4902
+ "reviewDate": stringType().regex(createSnapshotBodyInitiativesItemRisksItemReviewDateRegExp).optional(),
4903
+ "occurredDate": stringType().regex(createSnapshotBodyInitiativesItemRisksItemOccurredDateRegExp).optional(),
4904
+ "note": stringType().max(createSnapshotBodyInitiativesItemRisksItemNoteMax).optional()
4905
+ }).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(),
4850
4906
  "dependsOn": arrayType(stringType()).max(createSnapshotBodyInitiativesItemDependsOnMax),
4851
4907
  "requiredSkills": arrayType(objectType({
4852
4908
  "skillId": stringType(),
@@ -4996,6 +5052,18 @@ var renameSnapshotResponseInitiativesItemMilestonesItemForecastDateRegExp = new
4996
5052
  var renameSnapshotResponseInitiativesItemMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
4997
5053
  var renameSnapshotResponseInitiativesItemMilestonesItemNoteMax = 1e4;
4998
5054
  var renameSnapshotResponseInitiativesItemMilestonesMax = 30;
5055
+ var renameSnapshotResponseInitiativesItemRisksItemTitleMax = 300;
5056
+ var renameSnapshotResponseInitiativesItemRisksItemProbabilityMax = 5;
5057
+ var renameSnapshotResponseInitiativesItemRisksItemImpactMax = 5;
5058
+ var renameSnapshotResponseInitiativesItemRisksItemResidualProbabilityMax = 5;
5059
+ var renameSnapshotResponseInitiativesItemRisksItemResidualImpactMax = 5;
5060
+ var renameSnapshotResponseInitiativesItemRisksItemOwnerMax = 300;
5061
+ var renameSnapshotResponseInitiativesItemRisksItemMitigationMax = 1e4;
5062
+ var renameSnapshotResponseInitiativesItemRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5063
+ var renameSnapshotResponseInitiativesItemRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5064
+ var renameSnapshotResponseInitiativesItemRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5065
+ var renameSnapshotResponseInitiativesItemRisksItemNoteMax = 1e4;
5066
+ var renameSnapshotResponseInitiativesItemRisksMax = 50;
4999
5067
  var renameSnapshotResponseInitiativesItemDependsOnMax = 1e3;
5000
5068
  var renameSnapshotResponseInitiativesItemRequiredSkillsItemRunFteMin = 0;
5001
5069
  var renameSnapshotResponseInitiativesItemRequiredSkillsMax = 1e3;
@@ -5205,6 +5273,22 @@ var RenameSnapshotResponse = objectType({
5205
5273
  "doneDate": stringType().regex(renameSnapshotResponseInitiativesItemMilestonesItemDoneDateRegExp).optional(),
5206
5274
  "note": stringType().max(renameSnapshotResponseInitiativesItemMilestonesItemNoteMax).optional()
5207
5275
  }).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(),
5276
+ "risks": arrayType(objectType({
5277
+ "id": stringType(),
5278
+ "title": stringType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemTitleMax),
5279
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
5280
+ "probability": numberType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemProbabilityMax),
5281
+ "impact": numberType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemImpactMax),
5282
+ "residualProbability": numberType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemResidualProbabilityMax).optional(),
5283
+ "residualImpact": numberType().min(1).max(renameSnapshotResponseInitiativesItemRisksItemResidualImpactMax).optional(),
5284
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
5285
+ "owner": stringType().max(renameSnapshotResponseInitiativesItemRisksItemOwnerMax).optional(),
5286
+ "mitigation": stringType().max(renameSnapshotResponseInitiativesItemRisksItemMitigationMax).optional(),
5287
+ "raisedDate": stringType().regex(renameSnapshotResponseInitiativesItemRisksItemRaisedDateRegExp).optional(),
5288
+ "reviewDate": stringType().regex(renameSnapshotResponseInitiativesItemRisksItemReviewDateRegExp).optional(),
5289
+ "occurredDate": stringType().regex(renameSnapshotResponseInitiativesItemRisksItemOccurredDateRegExp).optional(),
5290
+ "note": stringType().max(renameSnapshotResponseInitiativesItemRisksItemNoteMax).optional()
5291
+ }).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(),
5208
5292
  "dependsOn": arrayType(stringType()).max(renameSnapshotResponseInitiativesItemDependsOnMax),
5209
5293
  "requiredSkills": arrayType(objectType({
5210
5294
  "skillId": stringType(),
@@ -5349,6 +5433,18 @@ var listInitiativesResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{4
5349
5433
  var listInitiativesResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5350
5434
  var listInitiativesResponseMilestonesItemNoteMax = 1e4;
5351
5435
  var listInitiativesResponseMilestonesMax = 30;
5436
+ var listInitiativesResponseRisksItemTitleMax = 300;
5437
+ var listInitiativesResponseRisksItemProbabilityMax = 5;
5438
+ var listInitiativesResponseRisksItemImpactMax = 5;
5439
+ var listInitiativesResponseRisksItemResidualProbabilityMax = 5;
5440
+ var listInitiativesResponseRisksItemResidualImpactMax = 5;
5441
+ var listInitiativesResponseRisksItemOwnerMax = 300;
5442
+ var listInitiativesResponseRisksItemMitigationMax = 1e4;
5443
+ var listInitiativesResponseRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5444
+ var listInitiativesResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5445
+ var listInitiativesResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5446
+ var listInitiativesResponseRisksItemNoteMax = 1e4;
5447
+ var listInitiativesResponseRisksMax = 50;
5352
5448
  var listInitiativesResponseDependsOnMax = 1e3;
5353
5449
  var listInitiativesResponseRequiredSkillsItemRunFteMin = 0;
5354
5450
  var listInitiativesResponseRequiredSkillsMax = 1e3;
@@ -5552,6 +5648,22 @@ var ListInitiativesResponseItem = objectType({
5552
5648
  "doneDate": stringType().regex(listInitiativesResponseMilestonesItemDoneDateRegExp).optional(),
5553
5649
  "note": stringType().max(listInitiativesResponseMilestonesItemNoteMax).optional()
5554
5650
  }).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(),
5651
+ "risks": arrayType(objectType({
5652
+ "id": stringType(),
5653
+ "title": stringType().min(1).max(listInitiativesResponseRisksItemTitleMax),
5654
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
5655
+ "probability": numberType().min(1).max(listInitiativesResponseRisksItemProbabilityMax),
5656
+ "impact": numberType().min(1).max(listInitiativesResponseRisksItemImpactMax),
5657
+ "residualProbability": numberType().min(1).max(listInitiativesResponseRisksItemResidualProbabilityMax).optional(),
5658
+ "residualImpact": numberType().min(1).max(listInitiativesResponseRisksItemResidualImpactMax).optional(),
5659
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
5660
+ "owner": stringType().max(listInitiativesResponseRisksItemOwnerMax).optional(),
5661
+ "mitigation": stringType().max(listInitiativesResponseRisksItemMitigationMax).optional(),
5662
+ "raisedDate": stringType().regex(listInitiativesResponseRisksItemRaisedDateRegExp).optional(),
5663
+ "reviewDate": stringType().regex(listInitiativesResponseRisksItemReviewDateRegExp).optional(),
5664
+ "occurredDate": stringType().regex(listInitiativesResponseRisksItemOccurredDateRegExp).optional(),
5665
+ "note": stringType().max(listInitiativesResponseRisksItemNoteMax).optional()
5666
+ }).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(),
5555
5667
  "dependsOn": arrayType(stringType()).max(listInitiativesResponseDependsOnMax),
5556
5668
  "requiredSkills": arrayType(objectType({
5557
5669
  "skillId": stringType(),
@@ -5692,6 +5804,18 @@ var createInitiativeBodyOneMilestonesItemForecastDateRegExp = new RegExp("^\\d{4
5692
5804
  var createInitiativeBodyOneMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5693
5805
  var createInitiativeBodyOneMilestonesItemNoteMax = 1e4;
5694
5806
  var createInitiativeBodyOneMilestonesMax = 30;
5807
+ var createInitiativeBodyOneRisksItemTitleMax = 300;
5808
+ var createInitiativeBodyOneRisksItemProbabilityMax = 5;
5809
+ var createInitiativeBodyOneRisksItemImpactMax = 5;
5810
+ var createInitiativeBodyOneRisksItemResidualProbabilityMax = 5;
5811
+ var createInitiativeBodyOneRisksItemResidualImpactMax = 5;
5812
+ var createInitiativeBodyOneRisksItemOwnerMax = 300;
5813
+ var createInitiativeBodyOneRisksItemMitigationMax = 1e4;
5814
+ var createInitiativeBodyOneRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5815
+ var createInitiativeBodyOneRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5816
+ var createInitiativeBodyOneRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
5817
+ var createInitiativeBodyOneRisksItemNoteMax = 1e4;
5818
+ var createInitiativeBodyOneRisksMax = 50;
5695
5819
  var createInitiativeBodyOneDependsOnMax = 1e3;
5696
5820
  var createInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
5697
5821
  var createInitiativeBodyOneRequiredSkillsMax = 1e3;
@@ -5895,6 +6019,22 @@ var CreateInitiativeBody = objectType({
5895
6019
  "doneDate": stringType().regex(createInitiativeBodyOneMilestonesItemDoneDateRegExp).optional(),
5896
6020
  "note": stringType().max(createInitiativeBodyOneMilestonesItemNoteMax).optional()
5897
6021
  }).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(),
6022
+ "risks": arrayType(objectType({
6023
+ "id": stringType(),
6024
+ "title": stringType().min(1).max(createInitiativeBodyOneRisksItemTitleMax),
6025
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
6026
+ "probability": numberType().min(1).max(createInitiativeBodyOneRisksItemProbabilityMax),
6027
+ "impact": numberType().min(1).max(createInitiativeBodyOneRisksItemImpactMax),
6028
+ "residualProbability": numberType().min(1).max(createInitiativeBodyOneRisksItemResidualProbabilityMax).optional(),
6029
+ "residualImpact": numberType().min(1).max(createInitiativeBodyOneRisksItemResidualImpactMax).optional(),
6030
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
6031
+ "owner": stringType().max(createInitiativeBodyOneRisksItemOwnerMax).optional(),
6032
+ "mitigation": stringType().max(createInitiativeBodyOneRisksItemMitigationMax).optional(),
6033
+ "raisedDate": stringType().regex(createInitiativeBodyOneRisksItemRaisedDateRegExp).optional(),
6034
+ "reviewDate": stringType().regex(createInitiativeBodyOneRisksItemReviewDateRegExp).optional(),
6035
+ "occurredDate": stringType().regex(createInitiativeBodyOneRisksItemOccurredDateRegExp).optional(),
6036
+ "note": stringType().max(createInitiativeBodyOneRisksItemNoteMax).optional()
6037
+ }).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(),
5898
6038
  "dependsOn": arrayType(stringType()).max(createInitiativeBodyOneDependsOnMax),
5899
6039
  "requiredSkills": arrayType(objectType({
5900
6040
  "skillId": stringType(),
@@ -6045,6 +6185,18 @@ var getInitiativeResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{4}-
6045
6185
  var getInitiativeResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6046
6186
  var getInitiativeResponseMilestonesItemNoteMax = 1e4;
6047
6187
  var getInitiativeResponseMilestonesMax = 30;
6188
+ var getInitiativeResponseRisksItemTitleMax = 300;
6189
+ var getInitiativeResponseRisksItemProbabilityMax = 5;
6190
+ var getInitiativeResponseRisksItemImpactMax = 5;
6191
+ var getInitiativeResponseRisksItemResidualProbabilityMax = 5;
6192
+ var getInitiativeResponseRisksItemResidualImpactMax = 5;
6193
+ var getInitiativeResponseRisksItemOwnerMax = 300;
6194
+ var getInitiativeResponseRisksItemMitigationMax = 1e4;
6195
+ var getInitiativeResponseRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6196
+ var getInitiativeResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6197
+ var getInitiativeResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6198
+ var getInitiativeResponseRisksItemNoteMax = 1e4;
6199
+ var getInitiativeResponseRisksMax = 50;
6048
6200
  var getInitiativeResponseDependsOnMax = 1e3;
6049
6201
  var getInitiativeResponseRequiredSkillsItemRunFteMin = 0;
6050
6202
  var getInitiativeResponseRequiredSkillsMax = 1e3;
@@ -6248,6 +6400,22 @@ var GetInitiativeResponse = objectType({
6248
6400
  "doneDate": stringType().regex(getInitiativeResponseMilestonesItemDoneDateRegExp).optional(),
6249
6401
  "note": stringType().max(getInitiativeResponseMilestonesItemNoteMax).optional()
6250
6402
  }).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(),
6403
+ "risks": arrayType(objectType({
6404
+ "id": stringType(),
6405
+ "title": stringType().min(1).max(getInitiativeResponseRisksItemTitleMax),
6406
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
6407
+ "probability": numberType().min(1).max(getInitiativeResponseRisksItemProbabilityMax),
6408
+ "impact": numberType().min(1).max(getInitiativeResponseRisksItemImpactMax),
6409
+ "residualProbability": numberType().min(1).max(getInitiativeResponseRisksItemResidualProbabilityMax).optional(),
6410
+ "residualImpact": numberType().min(1).max(getInitiativeResponseRisksItemResidualImpactMax).optional(),
6411
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
6412
+ "owner": stringType().max(getInitiativeResponseRisksItemOwnerMax).optional(),
6413
+ "mitigation": stringType().max(getInitiativeResponseRisksItemMitigationMax).optional(),
6414
+ "raisedDate": stringType().regex(getInitiativeResponseRisksItemRaisedDateRegExp).optional(),
6415
+ "reviewDate": stringType().regex(getInitiativeResponseRisksItemReviewDateRegExp).optional(),
6416
+ "occurredDate": stringType().regex(getInitiativeResponseRisksItemOccurredDateRegExp).optional(),
6417
+ "note": stringType().max(getInitiativeResponseRisksItemNoteMax).optional()
6418
+ }).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(),
6251
6419
  "dependsOn": arrayType(stringType()).max(getInitiativeResponseDependsOnMax),
6252
6420
  "requiredSkills": arrayType(objectType({
6253
6421
  "skillId": stringType(),
@@ -6390,6 +6558,18 @@ var updateInitiativeBodyOneMilestonesItemForecastDateRegExp = new RegExp("^\\d{4
6390
6558
  var updateInitiativeBodyOneMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6391
6559
  var updateInitiativeBodyOneMilestonesItemNoteMax = 1e4;
6392
6560
  var updateInitiativeBodyOneMilestonesMax = 30;
6561
+ var updateInitiativeBodyOneRisksItemTitleMax = 300;
6562
+ var updateInitiativeBodyOneRisksItemProbabilityMax = 5;
6563
+ var updateInitiativeBodyOneRisksItemImpactMax = 5;
6564
+ var updateInitiativeBodyOneRisksItemResidualProbabilityMax = 5;
6565
+ var updateInitiativeBodyOneRisksItemResidualImpactMax = 5;
6566
+ var updateInitiativeBodyOneRisksItemOwnerMax = 300;
6567
+ var updateInitiativeBodyOneRisksItemMitigationMax = 1e4;
6568
+ var updateInitiativeBodyOneRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6569
+ var updateInitiativeBodyOneRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6570
+ var updateInitiativeBodyOneRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6571
+ var updateInitiativeBodyOneRisksItemNoteMax = 1e4;
6572
+ var updateInitiativeBodyOneRisksMax = 50;
6393
6573
  var updateInitiativeBodyOneDependsOnMax = 1e3;
6394
6574
  var updateInitiativeBodyOneRequiredSkillsItemRunFteMin = 0;
6395
6575
  var updateInitiativeBodyOneRequiredSkillsMax = 1e3;
@@ -6593,6 +6773,22 @@ var UpdateInitiativeBody = objectType({
6593
6773
  "doneDate": stringType().regex(updateInitiativeBodyOneMilestonesItemDoneDateRegExp).optional(),
6594
6774
  "note": stringType().max(updateInitiativeBodyOneMilestonesItemNoteMax).optional()
6595
6775
  }).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(),
6776
+ "risks": arrayType(objectType({
6777
+ "id": stringType(),
6778
+ "title": stringType().min(1).max(updateInitiativeBodyOneRisksItemTitleMax),
6779
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
6780
+ "probability": numberType().min(1).max(updateInitiativeBodyOneRisksItemProbabilityMax),
6781
+ "impact": numberType().min(1).max(updateInitiativeBodyOneRisksItemImpactMax),
6782
+ "residualProbability": numberType().min(1).max(updateInitiativeBodyOneRisksItemResidualProbabilityMax).optional(),
6783
+ "residualImpact": numberType().min(1).max(updateInitiativeBodyOneRisksItemResidualImpactMax).optional(),
6784
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
6785
+ "owner": stringType().max(updateInitiativeBodyOneRisksItemOwnerMax).optional(),
6786
+ "mitigation": stringType().max(updateInitiativeBodyOneRisksItemMitigationMax).optional(),
6787
+ "raisedDate": stringType().regex(updateInitiativeBodyOneRisksItemRaisedDateRegExp).optional(),
6788
+ "reviewDate": stringType().regex(updateInitiativeBodyOneRisksItemReviewDateRegExp).optional(),
6789
+ "occurredDate": stringType().regex(updateInitiativeBodyOneRisksItemOccurredDateRegExp).optional(),
6790
+ "note": stringType().max(updateInitiativeBodyOneRisksItemNoteMax).optional()
6791
+ }).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(),
6596
6792
  "dependsOn": arrayType(stringType()).max(updateInitiativeBodyOneDependsOnMax),
6597
6793
  "requiredSkills": arrayType(objectType({
6598
6794
  "skillId": stringType(),
@@ -6740,6 +6936,18 @@ var updateInitiativeResponseMilestonesItemForecastDateRegExp = new RegExp("^\\d{
6740
6936
  var updateInitiativeResponseMilestonesItemDoneDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6741
6937
  var updateInitiativeResponseMilestonesItemNoteMax = 1e4;
6742
6938
  var updateInitiativeResponseMilestonesMax = 30;
6939
+ var updateInitiativeResponseRisksItemTitleMax = 300;
6940
+ var updateInitiativeResponseRisksItemProbabilityMax = 5;
6941
+ var updateInitiativeResponseRisksItemImpactMax = 5;
6942
+ var updateInitiativeResponseRisksItemResidualProbabilityMax = 5;
6943
+ var updateInitiativeResponseRisksItemResidualImpactMax = 5;
6944
+ var updateInitiativeResponseRisksItemOwnerMax = 300;
6945
+ var updateInitiativeResponseRisksItemMitigationMax = 1e4;
6946
+ var updateInitiativeResponseRisksItemRaisedDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6947
+ var updateInitiativeResponseRisksItemReviewDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6948
+ var updateInitiativeResponseRisksItemOccurredDateRegExp = new RegExp("^\\d{4}-\\d{2}-\\d{2}$");
6949
+ var updateInitiativeResponseRisksItemNoteMax = 1e4;
6950
+ var updateInitiativeResponseRisksMax = 50;
6743
6951
  var updateInitiativeResponseDependsOnMax = 1e3;
6744
6952
  var updateInitiativeResponseRequiredSkillsItemRunFteMin = 0;
6745
6953
  var updateInitiativeResponseRequiredSkillsMax = 1e3;
@@ -6943,6 +7151,22 @@ var UpdateInitiativeResponse = objectType({
6943
7151
  "doneDate": stringType().regex(updateInitiativeResponseMilestonesItemDoneDateRegExp).optional(),
6944
7152
  "note": stringType().max(updateInitiativeResponseMilestonesItemNoteMax).optional()
6945
7153
  }).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(),
7154
+ "risks": arrayType(objectType({
7155
+ "id": stringType(),
7156
+ "title": stringType().min(1).max(updateInitiativeResponseRisksItemTitleMax),
7157
+ "category": enumType(["delivery", "vendor", "data", "people", "regulatory", "technical", "financial"]),
7158
+ "probability": numberType().min(1).max(updateInitiativeResponseRisksItemProbabilityMax),
7159
+ "impact": numberType().min(1).max(updateInitiativeResponseRisksItemImpactMax),
7160
+ "residualProbability": numberType().min(1).max(updateInitiativeResponseRisksItemResidualProbabilityMax).optional(),
7161
+ "residualImpact": numberType().min(1).max(updateInitiativeResponseRisksItemResidualImpactMax).optional(),
7162
+ "status": enumType(["open", "mitigating", "closed", "occurred"]),
7163
+ "owner": stringType().max(updateInitiativeResponseRisksItemOwnerMax).optional(),
7164
+ "mitigation": stringType().max(updateInitiativeResponseRisksItemMitigationMax).optional(),
7165
+ "raisedDate": stringType().regex(updateInitiativeResponseRisksItemRaisedDateRegExp).optional(),
7166
+ "reviewDate": stringType().regex(updateInitiativeResponseRisksItemReviewDateRegExp).optional(),
7167
+ "occurredDate": stringType().regex(updateInitiativeResponseRisksItemOccurredDateRegExp).optional(),
7168
+ "note": stringType().max(updateInitiativeResponseRisksItemNoteMax).optional()
7169
+ }).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(),
6946
7170
  "dependsOn": arrayType(stringType()).max(updateInitiativeResponseDependsOnMax),
6947
7171
  "requiredSkills": arrayType(objectType({
6948
7172
  "skillId": stringType(),
@@ -10241,6 +10465,9 @@ function assembleInitiative(input, now = /* @__PURE__ */ new Date()) {
10241
10465
  if (updates && spec.milestones === void 0) {
10242
10466
  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
10467
  }
10468
+ if (updates) {
10469
+ 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.");
10470
+ }
10244
10471
  let businessUnit = spec.businessUnit;
10245
10472
  let aiCategory = spec.aiCategory;
10246
10473
  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.6.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",