@codedrifters/configulator 0.0.292 → 0.0.294
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/lib/index.d.mts +72 -9
- package/lib/index.d.ts +72 -9
- package/lib/index.js +327 -211
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +327 -211
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -4251,8 +4251,92 @@ function buildBaseBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
4251
4251
|
}
|
|
4252
4252
|
var baseBundle = buildBaseBundle();
|
|
4253
4253
|
|
|
4254
|
+
// src/agent/bundles/issue-defaults.ts
|
|
4255
|
+
var VALID_STATUS_VALUES = [
|
|
4256
|
+
"ready",
|
|
4257
|
+
"blocked",
|
|
4258
|
+
"in-progress",
|
|
4259
|
+
"ready-for-review",
|
|
4260
|
+
"needs-attention",
|
|
4261
|
+
"done",
|
|
4262
|
+
"deferred"
|
|
4263
|
+
];
|
|
4264
|
+
var VALID_PRIORITY_VALUES = [
|
|
4265
|
+
"critical",
|
|
4266
|
+
"high",
|
|
4267
|
+
"medium",
|
|
4268
|
+
"low",
|
|
4269
|
+
"trivial"
|
|
4270
|
+
];
|
|
4271
|
+
var DEFAULT_ISSUE_STATUS = "ready";
|
|
4272
|
+
var DEFAULT_ISSUE_PRIORITY = "medium";
|
|
4273
|
+
var DEFAULT_RESOLVED_ISSUE_DEFAULTS = {
|
|
4274
|
+
defaults: {
|
|
4275
|
+
status: DEFAULT_ISSUE_STATUS,
|
|
4276
|
+
priority: DEFAULT_ISSUE_PRIORITY
|
|
4277
|
+
},
|
|
4278
|
+
overrides: {}
|
|
4279
|
+
};
|
|
4280
|
+
function resolveIssueDefaults(config) {
|
|
4281
|
+
if (config === void 0) {
|
|
4282
|
+
return DEFAULT_RESOLVED_ISSUE_DEFAULTS;
|
|
4283
|
+
}
|
|
4284
|
+
const overrides = {};
|
|
4285
|
+
for (const [phaseLabel, override] of Object.entries(config)) {
|
|
4286
|
+
assertValidPhaseLabel(phaseLabel);
|
|
4287
|
+
assertValidOverride(phaseLabel, override);
|
|
4288
|
+
overrides[phaseLabel] = {
|
|
4289
|
+
status: override.status ?? DEFAULT_ISSUE_STATUS,
|
|
4290
|
+
priority: override.priority ?? DEFAULT_ISSUE_PRIORITY
|
|
4291
|
+
};
|
|
4292
|
+
}
|
|
4293
|
+
return {
|
|
4294
|
+
defaults: {
|
|
4295
|
+
status: DEFAULT_ISSUE_STATUS,
|
|
4296
|
+
priority: DEFAULT_ISSUE_PRIORITY
|
|
4297
|
+
},
|
|
4298
|
+
overrides
|
|
4299
|
+
};
|
|
4300
|
+
}
|
|
4301
|
+
function validateIssueDefaultsConfig(config) {
|
|
4302
|
+
return resolveIssueDefaults(config);
|
|
4303
|
+
}
|
|
4304
|
+
function labelsForPhase(resolved, phaseLabel) {
|
|
4305
|
+
return resolved.overrides[phaseLabel] ?? resolved.defaults;
|
|
4306
|
+
}
|
|
4307
|
+
function assertValidPhaseLabel(phaseLabel) {
|
|
4308
|
+
if (typeof phaseLabel !== "string" || phaseLabel.trim() === "") {
|
|
4309
|
+
throw new Error(
|
|
4310
|
+
"AgentConfigOptions.issueDefaults: phase-label keys must be non-empty strings (e.g. `people:research`)."
|
|
4311
|
+
);
|
|
4312
|
+
}
|
|
4313
|
+
}
|
|
4314
|
+
function assertValidOverride(phaseLabel, override) {
|
|
4315
|
+
if (override === null || typeof override !== "object" || Array.isArray(override)) {
|
|
4316
|
+
throw new Error(
|
|
4317
|
+
`AgentConfigOptions.issueDefaults["${phaseLabel}"] must be an object with optional \`status\` and \`priority\` fields.`
|
|
4318
|
+
);
|
|
4319
|
+
}
|
|
4320
|
+
const { status, priority } = override;
|
|
4321
|
+
if (status === void 0 && priority === void 0) {
|
|
4322
|
+
throw new Error(
|
|
4323
|
+
`AgentConfigOptions.issueDefaults["${phaseLabel}"] must declare at least one of \`status\` or \`priority\`. Empty entries are rejected because they are almost always a typo on the field name.`
|
|
4324
|
+
);
|
|
4325
|
+
}
|
|
4326
|
+
if (status !== void 0 && !VALID_STATUS_VALUES.includes(status)) {
|
|
4327
|
+
throw new Error(
|
|
4328
|
+
`AgentConfigOptions.issueDefaults["${phaseLabel}"].status="${status}" is not a recognised status value. Allowed values: ${VALID_STATUS_VALUES.join(", ")}.`
|
|
4329
|
+
);
|
|
4330
|
+
}
|
|
4331
|
+
if (priority !== void 0 && !VALID_PRIORITY_VALUES.includes(priority)) {
|
|
4332
|
+
throw new Error(
|
|
4333
|
+
`AgentConfigOptions.issueDefaults["${phaseLabel}"].priority="${priority}" is not a recognised priority value. Allowed values: ${VALID_PRIORITY_VALUES.join(", ")}.`
|
|
4334
|
+
);
|
|
4335
|
+
}
|
|
4336
|
+
}
|
|
4337
|
+
|
|
4254
4338
|
// src/agent/bundles/bcm-writer.ts
|
|
4255
|
-
function buildBcmWriterSubAgent(paths) {
|
|
4339
|
+
function buildBcmWriterSubAgent(paths, issueDefaults) {
|
|
4256
4340
|
return {
|
|
4257
4341
|
name: "bcm-writer",
|
|
4258
4342
|
description: "Writes BCM (Business Capability Model) capability-model documents through a 4-phase pipeline (outline \u2192 scaffold \u2192 context \u2192 connect), one phase per session, tracked by bcm:* GitHub issue labels with filesystem-based durability between phases. Produces BIZBOK-aligned capability documents \u2014 not requirement documents.",
|
|
@@ -4750,20 +4834,37 @@ function buildBcmWriterSubAgent(paths) {
|
|
|
4750
4834
|
" section of sibling/parent docs.",
|
|
4751
4835
|
"",
|
|
4752
4836
|
"5. **Create downstream research issues.** For each distinct item",
|
|
4753
|
-
" surfaced during authoring
|
|
4837
|
+
" surfaced during authoring, file one issue against the appropriate",
|
|
4838
|
+
" downstream bundle. Every handoff issue includes a brief scope",
|
|
4839
|
+
" statement, a link back to this BCM document for traceability, and",
|
|
4840
|
+
" a reference to the context-phase output that revealed the item.",
|
|
4841
|
+
"",
|
|
4842
|
+
" **Unfamiliar person (role holder, stakeholder).** Hand off to the",
|
|
4843
|
+
" `people-profile` bundle by creating a `people:research` issue.",
|
|
4844
|
+
" The issue must carry:",
|
|
4845
|
+
"",
|
|
4846
|
+
" - `type:people-profile`",
|
|
4847
|
+
" - `people:research`",
|
|
4848
|
+
` - \`priority:${labelsForPhase(issueDefaults, "people:research").priority}\``,
|
|
4849
|
+
` - \`status:${labelsForPhase(issueDefaults, "people:research").status}\``,
|
|
4850
|
+
"",
|
|
4851
|
+
" **Unfamiliar company (enabling vendor, partner, competitor).**",
|
|
4852
|
+
" Hand off to the `company-profile` bundle by creating a",
|
|
4853
|
+
" `company:research` issue. The issue must carry:",
|
|
4754
4854
|
"",
|
|
4755
|
-
"
|
|
4756
|
-
"
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
"
|
|
4855
|
+
" - `type:company-profile`",
|
|
4856
|
+
" - `company:research`",
|
|
4857
|
+
` - \`priority:${labelsForPhase(issueDefaults, "company:research").priority}\``,
|
|
4858
|
+
` - \`status:${labelsForPhase(issueDefaults, "company:research").status}\``,
|
|
4859
|
+
"",
|
|
4860
|
+
" **Missing research topic (value stream, market sizing, etc.).**",
|
|
4861
|
+
" Hand off to the `research-pipeline` bundle by creating a",
|
|
4862
|
+
" `research:scope` issue. The issue must carry:",
|
|
4760
4863
|
"",
|
|
4761
|
-
"
|
|
4762
|
-
" -
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
" document for traceability",
|
|
4766
|
-
" - Reference the context-phase output that revealed the item",
|
|
4864
|
+
" - `type:research`",
|
|
4865
|
+
" - `research:scope`",
|
|
4866
|
+
` - \`priority:${labelsForPhase(issueDefaults, "research:scope").priority}\``,
|
|
4867
|
+
` - \`status:${labelsForPhase(issueDefaults, "research:scope").status}\``,
|
|
4767
4868
|
"",
|
|
4768
4869
|
" This phase assumes the `people-profile`, `company-profile`, and",
|
|
4769
4870
|
" `research-pipeline` bundles are enabled in the consuming project.",
|
|
@@ -4839,7 +4940,7 @@ function buildBcmWriterSubAgent(paths) {
|
|
|
4839
4940
|
].join("\n")
|
|
4840
4941
|
};
|
|
4841
4942
|
}
|
|
4842
|
-
function buildWriteBcmSkill(paths) {
|
|
4943
|
+
function buildWriteBcmSkill(paths, issueDefaults) {
|
|
4843
4944
|
return {
|
|
4844
4945
|
name: "write-bcm",
|
|
4845
4946
|
description: "Kick off a BCM capability-model document authoring cycle. Creates a bcm:outline issue carrying the capability name and dispatches Phase 1 (Outline) in the bcm-writer agent.",
|
|
@@ -4884,9 +4985,11 @@ function buildWriteBcmSkill(paths) {
|
|
|
4884
4985
|
"## Steps",
|
|
4885
4986
|
"",
|
|
4886
4987
|
"1. Create a `bcm:outline` issue with `type:bcm-document`,",
|
|
4887
|
-
|
|
4988
|
+
` \`priority:${labelsForPhase(issueDefaults, "bcm:outline").priority}\`, and \`status:${labelsForPhase(issueDefaults, "bcm:outline").status}\`. Body must include the`,
|
|
4888
4989
|
" verbatim capability name and any overrides.",
|
|
4990
|
+
"",
|
|
4889
4991
|
"2. Execute Phase 1 (Outline) of the bcm-writer agent.",
|
|
4992
|
+
"",
|
|
4890
4993
|
"3. Phase 1 creates a `bcm:scaffold` issue, which Phase 2 follows with",
|
|
4891
4994
|
" `bcm:context`, then Phase 4 (`bcm:connect`). Each downstream issue",
|
|
4892
4995
|
" declares its `Depends on:` predecessor. Phase 4 creates downstream",
|
|
@@ -4905,7 +5008,7 @@ function buildWriteBcmSkill(paths) {
|
|
|
4905
5008
|
].join("\n")
|
|
4906
5009
|
};
|
|
4907
5010
|
}
|
|
4908
|
-
function buildBcmWriterBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
5011
|
+
function buildBcmWriterBundle(paths = DEFAULT_AGENT_PATHS, issueDefaults = DEFAULT_RESOLVED_ISSUE_DEFAULTS) {
|
|
4909
5012
|
return {
|
|
4910
5013
|
name: "bcm-writer",
|
|
4911
5014
|
description: "BCM (Business Capability Model) capability-model document authoring pipeline: outline, scaffold, context, connect. Enabled by default; BIZBOK-aligned; filesystem-durable between phases.",
|
|
@@ -4950,8 +5053,8 @@ function buildBcmWriterBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
4950
5053
|
tags: ["workflow"]
|
|
4951
5054
|
}
|
|
4952
5055
|
],
|
|
4953
|
-
skills: [buildWriteBcmSkill(paths)],
|
|
4954
|
-
subAgents: [buildBcmWriterSubAgent(paths)],
|
|
5056
|
+
skills: [buildWriteBcmSkill(paths, issueDefaults)],
|
|
5057
|
+
subAgents: [buildBcmWriterSubAgent(paths, issueDefaults)],
|
|
4955
5058
|
labels: [
|
|
4956
5059
|
{
|
|
4957
5060
|
name: "type:bcm-document",
|
|
@@ -5723,7 +5826,7 @@ function buildBusinessModelsAnalystSubAgent(paths) {
|
|
|
5723
5826
|
].join("\n")
|
|
5724
5827
|
};
|
|
5725
5828
|
}
|
|
5726
|
-
function buildScanBusinessModelsSkill(paths) {
|
|
5829
|
+
function buildScanBusinessModelsSkill(paths, issueDefaults) {
|
|
5727
5830
|
return {
|
|
5728
5831
|
name: "scan-business-models",
|
|
5729
5832
|
description: "Kick off the scan phase of a business-model analysis cycle. Creates a business-models:scan issue for the supplied industry and dispatches Phase 1 of the business-models-analyst, which reads industry-discovery output and identifies segments needing a canvas.",
|
|
@@ -5762,7 +5865,7 @@ function buildScanBusinessModelsSkill(paths) {
|
|
|
5762
5865
|
"## Steps",
|
|
5763
5866
|
"",
|
|
5764
5867
|
"1. Create a `business-models:scan` issue with `type:business-model`,",
|
|
5765
|
-
|
|
5868
|
+
` \`priority:${labelsForPhase(issueDefaults, "business-models:scan").priority}\`, and \`status:${labelsForPhase(issueDefaults, "business-models:scan").status}\`. The body must include the`,
|
|
5766
5869
|
" industry slug, the source plan path (if any), and any overrides.",
|
|
5767
5870
|
"2. Execute Phase 1 (Scan) of the business-models-analyst agent.",
|
|
5768
5871
|
"3. Phase 1 creates one `business-models:canvas` issue per in-scope",
|
|
@@ -5779,7 +5882,7 @@ function buildScanBusinessModelsSkill(paths) {
|
|
|
5779
5882
|
].join("\n")
|
|
5780
5883
|
};
|
|
5781
5884
|
}
|
|
5782
|
-
function buildCanvasBusinessModelSkill(paths) {
|
|
5885
|
+
function buildCanvasBusinessModelSkill(paths, issueDefaults) {
|
|
5783
5886
|
return {
|
|
5784
5887
|
name: "canvas-business-model",
|
|
5785
5888
|
description: "Kick off the canvas phase of a business-model analysis cycle. Creates a business-models:canvas issue for the supplied industry/segment and dispatches Phase 2 of the business-models-analyst, which researches and writes the Osterwalder nine-block canvas.",
|
|
@@ -5835,7 +5938,7 @@ function buildCanvasBusinessModelSkill(paths) {
|
|
|
5835
5938
|
"## Steps",
|
|
5836
5939
|
"",
|
|
5837
5940
|
"1. Create a `business-models:canvas` issue with",
|
|
5838
|
-
|
|
5941
|
+
` \`type:business-model\`, \`priority:${labelsForPhase(issueDefaults, "business-models:canvas").priority}\`, and \`status:${labelsForPhase(issueDefaults, "business-models:canvas").status}\`.`,
|
|
5839
5942
|
" The body must include the industry slug, segment slug, and any",
|
|
5840
5943
|
" scan-report reference.",
|
|
5841
5944
|
"2. Execute Phase 2 (Canvas) of the business-models-analyst agent.",
|
|
@@ -5851,7 +5954,7 @@ function buildCanvasBusinessModelSkill(paths) {
|
|
|
5851
5954
|
].join("\n")
|
|
5852
5955
|
};
|
|
5853
5956
|
}
|
|
5854
|
-
function buildCompleteBusinessModelSkill(paths) {
|
|
5957
|
+
function buildCompleteBusinessModelSkill(paths, issueDefaults) {
|
|
5855
5958
|
return {
|
|
5856
5959
|
name: "complete-business-model",
|
|
5857
5960
|
description: "Kick off the complete phase of a business-model analysis cycle. Creates a business-models:complete issue for an already-authored canvas and dispatches Phase 3 of the business-models-analyst, which derives BIZBOK value streams, documents variations, and hands off capability work to bcm-writer.",
|
|
@@ -5895,7 +5998,7 @@ function buildCompleteBusinessModelSkill(paths) {
|
|
|
5895
5998
|
"## Steps",
|
|
5896
5999
|
"",
|
|
5897
6000
|
"1. Create a `business-models:complete` issue with",
|
|
5898
|
-
|
|
6001
|
+
` \`type:business-model\`, \`priority:${labelsForPhase(issueDefaults, "business-models:complete").priority}\`, and \`status:${labelsForPhase(issueDefaults, "business-models:complete").status}\`.`,
|
|
5899
6002
|
" Body must include the canvas document path.",
|
|
5900
6003
|
"2. Execute Phase 3 (Complete) of the business-models-analyst agent.",
|
|
5901
6004
|
"",
|
|
@@ -5910,7 +6013,7 @@ function buildCompleteBusinessModelSkill(paths) {
|
|
|
5910
6013
|
].join("\n")
|
|
5911
6014
|
};
|
|
5912
6015
|
}
|
|
5913
|
-
function buildBusinessModelsBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
6016
|
+
function buildBusinessModelsBundle(paths = DEFAULT_AGENT_PATHS, issueDefaults = DEFAULT_RESOLVED_ISSUE_DEFAULTS) {
|
|
5914
6017
|
return {
|
|
5915
6018
|
name: "business-models",
|
|
5916
6019
|
description: "Business-model authoring pipeline: Osterwalder Business Model Canvas plus BIZBOK value streams per industry segment. 3 phases (scan, canvas, complete) with business-models:* phase labels. Sits between industry-discovery and bcm-writer in the research pipeline. Enabled by default; domain-neutral; filesystem-durable between phases.",
|
|
@@ -5962,9 +6065,9 @@ function buildBusinessModelsBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
5962
6065
|
}
|
|
5963
6066
|
],
|
|
5964
6067
|
skills: [
|
|
5965
|
-
buildScanBusinessModelsSkill(paths),
|
|
5966
|
-
buildCanvasBusinessModelSkill(paths),
|
|
5967
|
-
buildCompleteBusinessModelSkill(paths)
|
|
6068
|
+
buildScanBusinessModelsSkill(paths, issueDefaults),
|
|
6069
|
+
buildCanvasBusinessModelSkill(paths, issueDefaults),
|
|
6070
|
+
buildCompleteBusinessModelSkill(paths, issueDefaults)
|
|
5968
6071
|
],
|
|
5969
6072
|
subAgents: [buildBusinessModelsAnalystSubAgent(paths)],
|
|
5970
6073
|
labels: [
|
|
@@ -5993,90 +6096,6 @@ function buildBusinessModelsBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
5993
6096
|
}
|
|
5994
6097
|
var businessModelsBundle = buildBusinessModelsBundle();
|
|
5995
6098
|
|
|
5996
|
-
// src/agent/bundles/issue-defaults.ts
|
|
5997
|
-
var VALID_STATUS_VALUES = [
|
|
5998
|
-
"ready",
|
|
5999
|
-
"blocked",
|
|
6000
|
-
"in-progress",
|
|
6001
|
-
"ready-for-review",
|
|
6002
|
-
"needs-attention",
|
|
6003
|
-
"done",
|
|
6004
|
-
"deferred"
|
|
6005
|
-
];
|
|
6006
|
-
var VALID_PRIORITY_VALUES = [
|
|
6007
|
-
"critical",
|
|
6008
|
-
"high",
|
|
6009
|
-
"medium",
|
|
6010
|
-
"low",
|
|
6011
|
-
"trivial"
|
|
6012
|
-
];
|
|
6013
|
-
var DEFAULT_ISSUE_STATUS = "ready";
|
|
6014
|
-
var DEFAULT_ISSUE_PRIORITY = "medium";
|
|
6015
|
-
var DEFAULT_RESOLVED_ISSUE_DEFAULTS = {
|
|
6016
|
-
defaults: {
|
|
6017
|
-
status: DEFAULT_ISSUE_STATUS,
|
|
6018
|
-
priority: DEFAULT_ISSUE_PRIORITY
|
|
6019
|
-
},
|
|
6020
|
-
overrides: {}
|
|
6021
|
-
};
|
|
6022
|
-
function resolveIssueDefaults(config) {
|
|
6023
|
-
if (config === void 0) {
|
|
6024
|
-
return DEFAULT_RESOLVED_ISSUE_DEFAULTS;
|
|
6025
|
-
}
|
|
6026
|
-
const overrides = {};
|
|
6027
|
-
for (const [phaseLabel, override] of Object.entries(config)) {
|
|
6028
|
-
assertValidPhaseLabel(phaseLabel);
|
|
6029
|
-
assertValidOverride(phaseLabel, override);
|
|
6030
|
-
overrides[phaseLabel] = {
|
|
6031
|
-
status: override.status ?? DEFAULT_ISSUE_STATUS,
|
|
6032
|
-
priority: override.priority ?? DEFAULT_ISSUE_PRIORITY
|
|
6033
|
-
};
|
|
6034
|
-
}
|
|
6035
|
-
return {
|
|
6036
|
-
defaults: {
|
|
6037
|
-
status: DEFAULT_ISSUE_STATUS,
|
|
6038
|
-
priority: DEFAULT_ISSUE_PRIORITY
|
|
6039
|
-
},
|
|
6040
|
-
overrides
|
|
6041
|
-
};
|
|
6042
|
-
}
|
|
6043
|
-
function validateIssueDefaultsConfig(config) {
|
|
6044
|
-
return resolveIssueDefaults(config);
|
|
6045
|
-
}
|
|
6046
|
-
function labelsForPhase(resolved, phaseLabel) {
|
|
6047
|
-
return resolved.overrides[phaseLabel] ?? resolved.defaults;
|
|
6048
|
-
}
|
|
6049
|
-
function assertValidPhaseLabel(phaseLabel) {
|
|
6050
|
-
if (typeof phaseLabel !== "string" || phaseLabel.trim() === "") {
|
|
6051
|
-
throw new Error(
|
|
6052
|
-
"AgentConfigOptions.issueDefaults: phase-label keys must be non-empty strings (e.g. `people:research`)."
|
|
6053
|
-
);
|
|
6054
|
-
}
|
|
6055
|
-
}
|
|
6056
|
-
function assertValidOverride(phaseLabel, override) {
|
|
6057
|
-
if (override === null || typeof override !== "object" || Array.isArray(override)) {
|
|
6058
|
-
throw new Error(
|
|
6059
|
-
`AgentConfigOptions.issueDefaults["${phaseLabel}"] must be an object with optional \`status\` and \`priority\` fields.`
|
|
6060
|
-
);
|
|
6061
|
-
}
|
|
6062
|
-
const { status, priority } = override;
|
|
6063
|
-
if (status === void 0 && priority === void 0) {
|
|
6064
|
-
throw new Error(
|
|
6065
|
-
`AgentConfigOptions.issueDefaults["${phaseLabel}"] must declare at least one of \`status\` or \`priority\`. Empty entries are rejected because they are almost always a typo on the field name.`
|
|
6066
|
-
);
|
|
6067
|
-
}
|
|
6068
|
-
if (status !== void 0 && !VALID_STATUS_VALUES.includes(status)) {
|
|
6069
|
-
throw new Error(
|
|
6070
|
-
`AgentConfigOptions.issueDefaults["${phaseLabel}"].status="${status}" is not a recognised status value. Allowed values: ${VALID_STATUS_VALUES.join(", ")}.`
|
|
6071
|
-
);
|
|
6072
|
-
}
|
|
6073
|
-
if (priority !== void 0 && !VALID_PRIORITY_VALUES.includes(priority)) {
|
|
6074
|
-
throw new Error(
|
|
6075
|
-
`AgentConfigOptions.issueDefaults["${phaseLabel}"].priority="${priority}" is not a recognised priority value. Allowed values: ${VALID_PRIORITY_VALUES.join(", ")}.`
|
|
6076
|
-
);
|
|
6077
|
-
}
|
|
6078
|
-
}
|
|
6079
|
-
|
|
6080
6099
|
// src/agent/bundles/company-profile.ts
|
|
6081
6100
|
function buildCompanyProfileAnalystSubAgent(paths, issueDefaults) {
|
|
6082
6101
|
return {
|
|
@@ -7508,7 +7527,6 @@ var CUSTOMER_PROFILE_REFERENCE_FILES = [
|
|
|
7508
7527
|
}
|
|
7509
7528
|
];
|
|
7510
7529
|
function buildCustomerProfileAnalystSubAgent(paths, issueDefaults) {
|
|
7511
|
-
void issueDefaults;
|
|
7512
7530
|
return {
|
|
7513
7531
|
name: "customer-profile-analyst",
|
|
7514
7532
|
description: "Authors customer-archetype research through a 3-phase pipeline (discover \u2192 profile \u2192 competitors). Segments customer archetypes, profiles each archetype's goals, jobs-to-be-done, constraints, and buying process, then maps competitor features (from the shared software-profile feature matrix) to each archetype's needs and hands off unmet-need gaps to the requirements-analyst as req:scan seeds. One phase per session, tracked by customer:* GitHub issue labels with filesystem-based durability between phases.",
|
|
@@ -7832,12 +7850,23 @@ function buildCustomerProfileAnalystSubAgent(paths, issueDefaults) {
|
|
|
7832
7850
|
" customer organizations that do not already have a canonical",
|
|
7833
7851
|
" profile or an open `company:research` issue. The",
|
|
7834
7852
|
" `company-profile` bundle owns the downstream profile; this",
|
|
7835
|
-
" agent only hands off.",
|
|
7853
|
+
" agent only hands off. Each issue must carry:",
|
|
7854
|
+
"",
|
|
7855
|
+
" - `type:company-profile`",
|
|
7856
|
+
" - `company:research`",
|
|
7857
|
+
` - \`priority:${labelsForPhase(issueDefaults, "company:research").priority}\``,
|
|
7858
|
+
` - \`status:${labelsForPhase(issueDefaults, "company:research").status}\``,
|
|
7836
7859
|
"",
|
|
7837
7860
|
"9. **Create `people:research` issues** for notable contacts",
|
|
7838
7861
|
" (economic buyers, technical buyers, user champions) surfaced in",
|
|
7839
7862
|
" sources. Keep the list small \u2014 at most three individuals per",
|
|
7840
7863
|
" profile session \u2014 and skip anyone already profiled or queued.",
|
|
7864
|
+
" Each issue must carry:",
|
|
7865
|
+
"",
|
|
7866
|
+
" - `type:people-profile`",
|
|
7867
|
+
" - `people:research`",
|
|
7868
|
+
` - \`priority:${labelsForPhase(issueDefaults, "people:research").priority}\``,
|
|
7869
|
+
` - \`status:${labelsForPhase(issueDefaults, "people:research").status}\``,
|
|
7841
7870
|
"",
|
|
7842
7871
|
"10. **Verify all handoffs were created** before committing.",
|
|
7843
7872
|
"",
|
|
@@ -7933,21 +7962,39 @@ function buildCustomerProfileAnalystSubAgent(paths, issueDefaults) {
|
|
|
7933
7962
|
"7. **Create `req:scan` issues** for each unmet need. Each issue",
|
|
7934
7963
|
" hands off to the `requirements-analyst` bundle so its scan phase",
|
|
7935
7964
|
" can deduplicate and open `req:write` issues in the appropriate",
|
|
7936
|
-
" category. Each handoff issue
|
|
7937
|
-
"
|
|
7965
|
+
" category. Each handoff issue must carry:",
|
|
7966
|
+
"",
|
|
7967
|
+
" - `type:requirement`",
|
|
7968
|
+
" - `req:scan`",
|
|
7969
|
+
` - \`priority:${labelsForPhase(issueDefaults, "req:scan").priority}\``,
|
|
7970
|
+
` - \`status:${labelsForPhase(issueDefaults, "req:scan").status}\``,
|
|
7971
|
+
"",
|
|
7972
|
+
" The body must also:",
|
|
7938
7973
|
" - Link back to the archetype page and the competitor page",
|
|
7939
7974
|
" - Cite the specific unmet-need row and the originating job",
|
|
7940
|
-
" -
|
|
7941
|
-
" archetype is high-priority and the gap is a deal-breaker
|
|
7975
|
+
" - Escalate the priority above the bundle default when the",
|
|
7976
|
+
" archetype is high-priority and the gap is a deal-breaker",
|
|
7942
7977
|
"",
|
|
7943
7978
|
"8. **Create `company:research` issues** for competitor organizations",
|
|
7944
7979
|
" referenced in the analysis that do not already have a canonical",
|
|
7945
|
-
" profile or an open `company:research` issue.",
|
|
7980
|
+
" profile or an open `company:research` issue. Each issue must",
|
|
7981
|
+
" carry:",
|
|
7982
|
+
"",
|
|
7983
|
+
" - `type:company-profile`",
|
|
7984
|
+
" - `company:research`",
|
|
7985
|
+
` - \`priority:${labelsForPhase(issueDefaults, "company:research").priority}\``,
|
|
7986
|
+
` - \`status:${labelsForPhase(issueDefaults, "company:research").status}\``,
|
|
7946
7987
|
"",
|
|
7947
7988
|
"9. **Create `people:research` issues** for notable competitor",
|
|
7948
7989
|
" leadership or customer-advocacy figures surfaced in the analysis.",
|
|
7949
7990
|
" Keep this list small \u2014 at most three individuals per competitors",
|
|
7950
|
-
" session \u2014 and skip anyone already profiled or queued.",
|
|
7991
|
+
" session \u2014 and skip anyone already profiled or queued. Each",
|
|
7992
|
+
" issue must carry:",
|
|
7993
|
+
"",
|
|
7994
|
+
" - `type:people-profile`",
|
|
7995
|
+
" - `people:research`",
|
|
7996
|
+
` - \`priority:${labelsForPhase(issueDefaults, "people:research").priority}\``,
|
|
7997
|
+
` - \`status:${labelsForPhase(issueDefaults, "people:research").status}\``,
|
|
7951
7998
|
"",
|
|
7952
7999
|
"10. **Commit and push** the competitor-analysis page and the",
|
|
7953
8000
|
" updated archetype page. Close the competitors issue.",
|
|
@@ -10689,7 +10736,7 @@ function buildMaintenanceAuditSubAgent(paths) {
|
|
|
10689
10736
|
].join("\n")
|
|
10690
10737
|
};
|
|
10691
10738
|
}
|
|
10692
|
-
function buildMaintenanceAuditSkill(paths) {
|
|
10739
|
+
function buildMaintenanceAuditSkill(paths, issueDefaults) {
|
|
10693
10740
|
return {
|
|
10694
10741
|
name: "audit-docs",
|
|
10695
10742
|
description: "Kick off a documentation-maintenance audit cycle (scan \u2192 fix \u2192 verify). Creates a maint:scan issue for the supplied scope and dispatches Phase 1.",
|
|
@@ -10724,7 +10771,7 @@ function buildMaintenanceAuditSkill(paths) {
|
|
|
10724
10771
|
"## Steps",
|
|
10725
10772
|
"",
|
|
10726
10773
|
"1. Create a `maint:scan` issue with `type:maintenance`,",
|
|
10727
|
-
|
|
10774
|
+
` \`priority:${labelsForPhase(issueDefaults, "maint:scan").priority}\`, and \`status:${labelsForPhase(issueDefaults, "maint:scan").status}\`. Body must list:`,
|
|
10728
10775
|
" - `<DOCS_ROOT>` \u2014 the doc tree to audit",
|
|
10729
10776
|
" - `<AUDIT_ROOT>` \u2014 where to write the audit report",
|
|
10730
10777
|
" - `<AUDIT_SLUG>` \u2014 short identifier for this audit",
|
|
@@ -10746,7 +10793,7 @@ function buildMaintenanceAuditSkill(paths) {
|
|
|
10746
10793
|
].join("\n")
|
|
10747
10794
|
};
|
|
10748
10795
|
}
|
|
10749
|
-
function buildMaintenanceVerifySkill() {
|
|
10796
|
+
function buildMaintenanceVerifySkill(issueDefaults) {
|
|
10750
10797
|
return {
|
|
10751
10798
|
name: "verify-audit",
|
|
10752
10799
|
description: "Kick off the verify phase of a documentation-maintenance audit cycle. Creates a maint:verify issue that re-runs the scan checks scoped to the paths a fix phase touched, compares pre/post findings, and closes the parent maint:scan issue when clean or files a follow-up maint:scan for residual findings.",
|
|
@@ -10787,7 +10834,7 @@ function buildMaintenanceVerifySkill() {
|
|
|
10787
10834
|
"## Steps",
|
|
10788
10835
|
"",
|
|
10789
10836
|
"1. Create a `maint:verify` issue with `type:maintenance`,",
|
|
10790
|
-
|
|
10837
|
+
` \`priority:${labelsForPhase(issueDefaults, "maint:verify").priority}\`, and \`status:${labelsForPhase(issueDefaults, "maint:verify").status}\`. Body must list:`,
|
|
10791
10838
|
" - The parent `maint:scan` issue number",
|
|
10792
10839
|
" - The Phase 1 audit report path",
|
|
10793
10840
|
" - The Phase 2 fix report path (if one exists)",
|
|
@@ -10804,7 +10851,7 @@ function buildMaintenanceVerifySkill() {
|
|
|
10804
10851
|
].join("\n")
|
|
10805
10852
|
};
|
|
10806
10853
|
}
|
|
10807
|
-
function buildMaintenanceAuditBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
10854
|
+
function buildMaintenanceAuditBundle(paths = DEFAULT_AGENT_PATHS, issueDefaults = DEFAULT_RESOLVED_ISSUE_DEFAULTS) {
|
|
10808
10855
|
return {
|
|
10809
10856
|
name: "maintenance-audit",
|
|
10810
10857
|
description: "Documentation-maintenance agent bundle. 3-phase pipeline (scan, fix, verify) with maint:* phase labels for auditing registries and cross-references, applying idempotent fixes, and confirming the fixes cleared the originally-flagged findings. Enabled by default.",
|
|
@@ -10847,7 +10894,10 @@ function buildMaintenanceAuditBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
10847
10894
|
tags: ["workflow"]
|
|
10848
10895
|
}
|
|
10849
10896
|
],
|
|
10850
|
-
skills: [
|
|
10897
|
+
skills: [
|
|
10898
|
+
buildMaintenanceAuditSkill(paths, issueDefaults),
|
|
10899
|
+
buildMaintenanceVerifySkill(issueDefaults)
|
|
10900
|
+
],
|
|
10851
10901
|
subAgents: [buildMaintenanceAuditSubAgent(paths)],
|
|
10852
10902
|
labels: [
|
|
10853
10903
|
{
|
|
@@ -12179,6 +12229,27 @@ var DEFAULT_BUNDLE_OVERRIDES = {
|
|
|
12179
12229
|
},
|
|
12180
12230
|
"bcm:scaffold": {
|
|
12181
12231
|
acceptanceCriteria: { smallMax: 3, mediumMax: 12 }
|
|
12232
|
+
},
|
|
12233
|
+
"research:verify": {
|
|
12234
|
+
acceptanceCriteria: { smallMax: 3, mediumMax: 12 }
|
|
12235
|
+
},
|
|
12236
|
+
"software:profile": {
|
|
12237
|
+
acceptanceCriteria: { smallMax: 3, mediumMax: 14 }
|
|
12238
|
+
},
|
|
12239
|
+
"regulatory:research": {
|
|
12240
|
+
acceptanceCriteria: { smallMax: 3, mediumMax: 10 }
|
|
12241
|
+
},
|
|
12242
|
+
"software:map": {
|
|
12243
|
+
acceptanceCriteria: { smallMax: 3, mediumMax: 12 },
|
|
12244
|
+
sources: { smallMax: 2, mediumMax: 15 }
|
|
12245
|
+
},
|
|
12246
|
+
"bcm:connect": {
|
|
12247
|
+
acceptanceCriteria: { smallMax: 3, mediumMax: 12 },
|
|
12248
|
+
sources: { smallMax: 2, mediumMax: 8 }
|
|
12249
|
+
},
|
|
12250
|
+
"software:matrix": {
|
|
12251
|
+
acceptanceCriteria: { smallMax: 3, mediumMax: 12 },
|
|
12252
|
+
sources: { smallMax: 2, mediumMax: 15 }
|
|
12182
12253
|
}
|
|
12183
12254
|
};
|
|
12184
12255
|
var DEFAULT_DECOMPOSITION_TEMPLATE = [
|
|
@@ -17549,7 +17620,6 @@ var REGULATORY_RESEARCH_REFERENCE_FILES = [
|
|
|
17549
17620
|
}
|
|
17550
17621
|
];
|
|
17551
17622
|
function buildRegulatoryResearchAnalystSubAgent(paths, issueDefaults) {
|
|
17552
|
-
void issueDefaults;
|
|
17553
17623
|
return {
|
|
17554
17624
|
name: "regulatory-research-analyst",
|
|
17555
17625
|
description: "Authors jurisdictional compliance research through a 3-phase pipeline (scan \u2192 research \u2192 impact). Enumerates applicable regulations by jurisdiction and business activity, researches each in depth, and produces an impact analysis that hands off actionable obligations to the requirements-analyst as req:scan seeds in the SEC category. One phase per session, tracked by regulatory:* GitHub issue labels with filesystem-based durability between phases.",
|
|
@@ -17904,6 +17974,12 @@ function buildRegulatoryResearchAnalystSubAgent(paths, issueDefaults) {
|
|
|
17904
17974
|
" regulator agencies that do not already have a canonical profile",
|
|
17905
17975
|
" or an open `company:research` issue. The `company-profile`",
|
|
17906
17976
|
" bundle owns the downstream profile; this agent only hands off.",
|
|
17977
|
+
" Each issue must carry:",
|
|
17978
|
+
"",
|
|
17979
|
+
" - `type:company-profile`",
|
|
17980
|
+
" - `company:research`",
|
|
17981
|
+
` - \`priority:${labelsForPhase(issueDefaults, "company:research").priority}\``,
|
|
17982
|
+
` - \`status:${labelsForPhase(issueDefaults, "company:research").status}\``,
|
|
17907
17983
|
"",
|
|
17908
17984
|
"9. **Verify all handoffs were created** before committing.",
|
|
17909
17985
|
"",
|
|
@@ -17972,25 +18048,42 @@ function buildRegulatoryResearchAnalystSubAgent(paths, issueDefaults) {
|
|
|
17972
18048
|
"4. **Create `req:scan` issues** for each capability gap identified.",
|
|
17973
18049
|
" Each issue hands off to the `requirements-analyst` bundle so its",
|
|
17974
18050
|
" scan phase can deduplicate and open `req:write` issues in the",
|
|
17975
|
-
" SEC category.
|
|
17976
|
-
"
|
|
18051
|
+
" SEC category. Each issue must carry:",
|
|
18052
|
+
"",
|
|
18053
|
+
" - `type:requirement`",
|
|
18054
|
+
" - `req:scan`",
|
|
18055
|
+
` - \`priority:${labelsForPhase(issueDefaults, "req:scan").priority}\``,
|
|
18056
|
+
` - \`status:${labelsForPhase(issueDefaults, "req:scan").status}\``,
|
|
18057
|
+
"",
|
|
18058
|
+
" The body must also:",
|
|
17977
18059
|
" - Identify the target category as **SEC** (security & compliance)",
|
|
17978
18060
|
" in the body so the downstream writer phase picks up the right",
|
|
17979
18061
|
" template",
|
|
17980
18062
|
" - Link back to the regulation page and cite the triggering",
|
|
17981
18063
|
" requirement",
|
|
17982
|
-
" -
|
|
17983
|
-
" regulation is already in force and the gap is unmitigated
|
|
18064
|
+
" - Escalate the priority above the bundle default when the",
|
|
18065
|
+
" regulation is already in force and the gap is unmitigated",
|
|
17984
18066
|
"",
|
|
17985
18067
|
"5. **Create `company:research` issues** for any enforcement body",
|
|
17986
18068
|
" mentioned on the regulation page that does not already have a",
|
|
17987
|
-
" canonical profile or an open `company:research` issue.",
|
|
18069
|
+
" canonical profile or an open `company:research` issue. Each",
|
|
18070
|
+
" issue must carry:",
|
|
18071
|
+
"",
|
|
18072
|
+
" - `type:company-profile`",
|
|
18073
|
+
" - `company:research`",
|
|
18074
|
+
` - \`priority:${labelsForPhase(issueDefaults, "company:research").priority}\``,
|
|
18075
|
+
` - \`status:${labelsForPhase(issueDefaults, "company:research").status}\``,
|
|
17988
18076
|
"",
|
|
17989
18077
|
"6. **Create `people:research` issues** for notable regulatory",
|
|
17990
18078
|
" leaders (commissioners, agency directors, lead policy authors)",
|
|
17991
18079
|
" mentioned on the regulation page. Keep this list small \u2014 at most",
|
|
17992
18080
|
" three individuals per impact session \u2014 and skip anyone already",
|
|
17993
|
-
" profiled or queued.",
|
|
18081
|
+
" profiled or queued. Each issue must carry:",
|
|
18082
|
+
"",
|
|
18083
|
+
" - `type:people-profile`",
|
|
18084
|
+
" - `people:research`",
|
|
18085
|
+
` - \`priority:${labelsForPhase(issueDefaults, "people:research").priority}\``,
|
|
18086
|
+
` - \`status:${labelsForPhase(issueDefaults, "people:research").status}\``,
|
|
17994
18087
|
"",
|
|
17995
18088
|
"7. **Commit and push** the updated regulation page. Close the",
|
|
17996
18089
|
" impact issue.",
|
|
@@ -18519,7 +18612,7 @@ var REQ_WRITE_ISSUE_SCHEMA_SECTION = [
|
|
|
18519
18612
|
];
|
|
18520
18613
|
|
|
18521
18614
|
// src/agent/bundles/requirements-analyst.ts
|
|
18522
|
-
function buildRequirementsAnalystSubAgent(paths) {
|
|
18615
|
+
function buildRequirementsAnalystSubAgent(paths, issueDefaults) {
|
|
18523
18616
|
return {
|
|
18524
18617
|
name: "requirements-analyst",
|
|
18525
18618
|
description: "Discovers requirement gaps from BCM model docs, competitive analysis, product docs, and meeting extracts. Produces scan reports, proposals, and req:write issues for the downstream requirements-writer agent. Runs through a 2-phase pipeline (scan \u2192 draft-trace), one phase per session, tracked by req:* GitHub issue labels.",
|
|
@@ -18837,14 +18930,14 @@ function buildRequirementsAnalystSubAgent(paths) {
|
|
|
18837
18930
|
" `## Template: req:write` of",
|
|
18838
18931
|
" `docs/src/content/docs/agents/issue-templates.md`.",
|
|
18839
18932
|
"",
|
|
18840
|
-
|
|
18933
|
+
` All \`type:requirement\` issues default to \`priority:${labelsForPhase(issueDefaults, "req:write").priority}\` (override`,
|
|
18841
18934
|
" only if the proposal's priority was explicitly High or Low). Each",
|
|
18842
18935
|
" issue must also carry the `req:write` phase label plus the matching",
|
|
18843
18936
|
" `tier:*` label so the downstream `requirements-writer` bundle picks",
|
|
18844
18937
|
" it up with the correct tier. Concretely, the label list includes",
|
|
18845
18938
|
' `--label "type:requirement"`, `--label "req:write"`,',
|
|
18846
|
-
|
|
18847
|
-
|
|
18939
|
+
` \`--label "tier:<tier-slug>"\`, \`--label "status:${labelsForPhase(issueDefaults, "req:write").status}"\`, and`,
|
|
18940
|
+
` \`--label "priority:${labelsForPhase(issueDefaults, "req:write").priority}"\`.`,
|
|
18848
18941
|
"",
|
|
18849
18942
|
" The body must carry the three writer-required fields in an",
|
|
18850
18943
|
" `## Objective` block, written as bold-prefixed lines so the",
|
|
@@ -18861,7 +18954,7 @@ function buildRequirementsAnalystSubAgent(paths) {
|
|
|
18861
18954
|
"",
|
|
18862
18955
|
" When one of Category / Tier / Output Path could not be derived",
|
|
18863
18956
|
" from the proposal (for example, the proposal omitted the Tier",
|
|
18864
|
-
|
|
18957
|
+
` line), replace \`status:${labelsForPhase(issueDefaults, "req:write").status}\` with \`status:needs-attention\` in`,
|
|
18865
18958
|
" the label list and add a `Missing: <field> \u2014 <reason>` line",
|
|
18866
18959
|
" directly below the Output Path line in the body. Populate",
|
|
18867
18960
|
" whichever of the three fields **could** be derived so a human",
|
|
@@ -18927,48 +19020,50 @@ function buildRequirementsAnalystSubAgent(paths) {
|
|
|
18927
19020
|
].join("\n")
|
|
18928
19021
|
};
|
|
18929
19022
|
}
|
|
18930
|
-
|
|
18931
|
-
|
|
18932
|
-
|
|
18933
|
-
|
|
18934
|
-
|
|
18935
|
-
|
|
18936
|
-
|
|
18937
|
-
|
|
18938
|
-
|
|
18939
|
-
|
|
18940
|
-
|
|
18941
|
-
|
|
18942
|
-
|
|
18943
|
-
|
|
18944
|
-
|
|
18945
|
-
|
|
18946
|
-
|
|
18947
|
-
|
|
18948
|
-
|
|
18949
|
-
|
|
18950
|
-
|
|
18951
|
-
|
|
18952
|
-
|
|
18953
|
-
|
|
18954
|
-
|
|
18955
|
-
|
|
18956
|
-
|
|
18957
|
-
|
|
18958
|
-
|
|
18959
|
-
|
|
18960
|
-
|
|
18961
|
-
|
|
18962
|
-
|
|
18963
|
-
|
|
18964
|
-
|
|
18965
|
-
|
|
18966
|
-
|
|
18967
|
-
|
|
18968
|
-
|
|
18969
|
-
|
|
18970
|
-
|
|
18971
|
-
|
|
19023
|
+
function buildScanRequirementsSkill(issueDefaults) {
|
|
19024
|
+
return {
|
|
19025
|
+
name: "scan-requirements",
|
|
19026
|
+
description: "Kick off a requirements-analyst scan across BCM model docs, competitive analysis, product docs, or meeting extracts. Creates a req:scan issue and dispatches Phase 1.",
|
|
19027
|
+
disableModelInvocation: true,
|
|
19028
|
+
userInvocable: true,
|
|
19029
|
+
context: "fork",
|
|
19030
|
+
agent: "requirements-analyst",
|
|
19031
|
+
platforms: { cursor: { exclude: true } },
|
|
19032
|
+
instructions: [
|
|
19033
|
+
"# Scan Requirements",
|
|
19034
|
+
"",
|
|
19035
|
+
"Kick off a requirements-analyst scan cycle. Creates a `req:scan` issue",
|
|
19036
|
+
"targeted at the requested scope and dispatches Phase 1 (Scan) in the",
|
|
19037
|
+
"requirements-analyst agent.",
|
|
19038
|
+
"",
|
|
19039
|
+
"## Usage",
|
|
19040
|
+
"",
|
|
19041
|
+
"/scan-requirements <scope>",
|
|
19042
|
+
"",
|
|
19043
|
+
"Where `<scope>` is one of:",
|
|
19044
|
+
"- `bcm:<PREFIX-NNN>` \u2014 a single BCM model doc",
|
|
19045
|
+
"- `competitive:<slug>` \u2014 a single competitive analysis doc",
|
|
19046
|
+
"- `product-roadmap` \u2014 the prioritized feature roadmap",
|
|
19047
|
+
"- `entity-taxonomy` \u2014 the entity taxonomy doc",
|
|
19048
|
+
"- `meeting:<slug>` \u2014 a meeting extract",
|
|
19049
|
+
"- `all-bcm` / `all-competitive` \u2014 full sweep (long-running)",
|
|
19050
|
+
"",
|
|
19051
|
+
"## Steps",
|
|
19052
|
+
"",
|
|
19053
|
+
`1. Create a \`req:scan\` issue with \`type:requirement\`, \`priority:${labelsForPhase(issueDefaults, "req:scan").priority}\`,`,
|
|
19054
|
+
` and \`status:${labelsForPhase(issueDefaults, "req:scan").status}\`. Body must list the files to read and the scan scope.`,
|
|
19055
|
+
"2. Execute Phase 1 (Scan) of the requirements-analyst agent.",
|
|
19056
|
+
"3. If gaps are found, a `req:draft-trace` issue is created automatically.",
|
|
19057
|
+
"",
|
|
19058
|
+
"## Output",
|
|
19059
|
+
"",
|
|
19060
|
+
"- A `req-scan-<scope>-<YYYY-MM-DD>.md` file under the project's research",
|
|
19061
|
+
" requirements directory.",
|
|
19062
|
+
"- A `req:draft-trace` issue if any gaps were identified."
|
|
19063
|
+
].join("\n")
|
|
19064
|
+
};
|
|
19065
|
+
}
|
|
19066
|
+
function buildRequirementsAnalystBundle(paths = DEFAULT_AGENT_PATHS, issueDefaults = DEFAULT_RESOLVED_ISSUE_DEFAULTS) {
|
|
18972
19067
|
return {
|
|
18973
19068
|
name: "requirements-analyst",
|
|
18974
19069
|
description: "Requirements gap-discovery agent bundle for BCM-driven projects. 2-phase pipeline (scan, draft-trace) with req:* phase labels.",
|
|
@@ -19005,8 +19100,8 @@ function buildRequirementsAnalystBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
19005
19100
|
tags: ["workflow"]
|
|
19006
19101
|
}
|
|
19007
19102
|
],
|
|
19008
|
-
skills: [
|
|
19009
|
-
subAgents: [buildRequirementsAnalystSubAgent(paths)],
|
|
19103
|
+
skills: [buildScanRequirementsSkill(issueDefaults)],
|
|
19104
|
+
subAgents: [buildRequirementsAnalystSubAgent(paths, issueDefaults)],
|
|
19010
19105
|
labels: [
|
|
19011
19106
|
{
|
|
19012
19107
|
name: "type:requirement",
|
|
@@ -21507,7 +21602,7 @@ function buildRequirementsWriterSubAgent(paths) {
|
|
|
21507
21602
|
].join("\n")
|
|
21508
21603
|
};
|
|
21509
21604
|
}
|
|
21510
|
-
function buildWriteRequirementSkill(paths) {
|
|
21605
|
+
function buildWriteRequirementSkill(paths, issueDefaults) {
|
|
21511
21606
|
return {
|
|
21512
21607
|
name: WRITE_REQUIREMENT_SKILL_NAME,
|
|
21513
21608
|
description: "Write one formal requirement document (BR / FR / NFR / TR / ADR / SEC / DR / INT / OPS / UX / MT) using the shipped category template and decision-authority rules. Picks up a req:write issue created by the upstream requirements-analyst pipeline (or kicked off ad hoc) and dispatches the requirements-writer agent.",
|
|
@@ -21561,7 +21656,7 @@ function buildWriteRequirementSkill(paths) {
|
|
|
21561
21656
|
"## Steps",
|
|
21562
21657
|
"",
|
|
21563
21658
|
"1. Create a `req:write` issue with `type:requirement`,",
|
|
21564
|
-
|
|
21659
|
+
` \`priority:${labelsForPhase(issueDefaults, "req:write").priority}\`, \`status:${labelsForPhase(issueDefaults, "req:write").status}\`, and the matching \`tier:*\` label.`,
|
|
21565
21660
|
" Body must include the category, tier, output path, and a pointer",
|
|
21566
21661
|
" to the upstream proposal (or a direct user description if no",
|
|
21567
21662
|
" proposals file exists).",
|
|
@@ -21580,7 +21675,7 @@ function buildWriteRequirementSkill(paths) {
|
|
|
21580
21675
|
].join("\n")
|
|
21581
21676
|
};
|
|
21582
21677
|
}
|
|
21583
|
-
function buildRequirementsWriterBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
21678
|
+
function buildRequirementsWriterBundle(paths = DEFAULT_AGENT_PATHS, issueDefaults = DEFAULT_RESOLVED_ISSUE_DEFAULTS) {
|
|
21584
21679
|
return {
|
|
21585
21680
|
name: "requirements-writer",
|
|
21586
21681
|
description: "Requirements writer agent bundle. Authors formal requirement documents from upstream proposals using the 11-category taxonomy (BR, FR, NFR, TR, ADR, SEC, DR, INT, OPS, UX, MT), the four-tier classification, and decision-authority rules (direct-write vs. propose-only). Ships 13 templates plus a standards-and-frameworks reference.",
|
|
@@ -21628,7 +21723,7 @@ function buildRequirementsWriterBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
21628
21723
|
tags: ["workflow"]
|
|
21629
21724
|
}
|
|
21630
21725
|
],
|
|
21631
|
-
skills: [buildWriteRequirementSkill(paths)],
|
|
21726
|
+
skills: [buildWriteRequirementSkill(paths, issueDefaults)],
|
|
21632
21727
|
subAgents: [buildRequirementsWriterSubAgent(paths)],
|
|
21633
21728
|
labels: [
|
|
21634
21729
|
{
|
|
@@ -21662,7 +21757,7 @@ function buildRequirementsWriterBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
21662
21757
|
var requirementsWriterBundle = buildRequirementsWriterBundle();
|
|
21663
21758
|
|
|
21664
21759
|
// src/agent/bundles/requirements-reviewer.ts
|
|
21665
|
-
function buildRequirementsReviewerSubAgent(paths) {
|
|
21760
|
+
function buildRequirementsReviewerSubAgent(paths, issueDefaults) {
|
|
21666
21761
|
return {
|
|
21667
21762
|
name: "requirements-reviewer",
|
|
21668
21763
|
description: "Audits and deprecates existing requirement documents (BR, FR, NFR, TR, ADR, SEC, DR, INT, OPS, UX, MT). In `req:review` mode, runs the 12-check audit (structural compliance, categorization, traceability, cross-reference integrity, sequence integrity, content quality, registry sync, decision-authority compliance, tier classification, cross-referencing conventions, stale `Proposed` ADR/TR decisions) and produces a report grouped by Critical / Warning / Info (plus a dedicated Stale decisions section). In `req:deprecate` mode, transitions target documents to `Deprecated` or `Superseded`, updates the category index row, and files `req:write` follow-ups for every back-reference so the writer can rewrite them. One phase per session.",
|
|
@@ -22627,7 +22722,7 @@ function buildRequirementsReviewerSubAgent(paths) {
|
|
|
22627
22722
|
" reference).",
|
|
22628
22723
|
"- Labels: `type:requirement`, `req:write`, the matching",
|
|
22629
22724
|
" `tier:*` label derived from the referencing document's Tier,",
|
|
22630
|
-
|
|
22725
|
+
` \`priority:${labelsForPhase(issueDefaults, "req:write").priority}\`, \`status:${labelsForPhase(issueDefaults, "req:write").status}\`.`,
|
|
22631
22726
|
"- If any of Category / Tier / Output Path cannot be derived from",
|
|
22632
22727
|
" the referencing document, open the follow-up with",
|
|
22633
22728
|
" `status:needs-attention` and a `Missing:` line, per the same",
|
|
@@ -22717,7 +22812,7 @@ function buildRequirementsReviewerSubAgent(paths) {
|
|
|
22717
22812
|
].join("\n")
|
|
22718
22813
|
};
|
|
22719
22814
|
}
|
|
22720
|
-
function buildReviewRequirementsSkill(paths) {
|
|
22815
|
+
function buildReviewRequirementsSkill(paths, issueDefaults) {
|
|
22721
22816
|
return {
|
|
22722
22817
|
name: "review-requirements",
|
|
22723
22818
|
description: "Audit existing requirement documents (BR / FR / NFR / TR / ADR / SEC / DR / INT / OPS / UX / MT) for structural compliance, categorization, traceability, cross-reference integrity, sequence integrity, content quality, registry sync, decision-authority compliance, tier classification, cross-referencing conventions, and stale `Proposed` ADR/TR decisions. Supports four scopes (full audit, category, single document, targeted check) and dispatches the requirements-reviewer agent. Audits documents \u2014 never writes them. Soft dependency: expects requirement templates at `" + REQUIREMENTS_WRITER_PATHS.templatesRoot + "`, shipped by the requirements-writer bundle.",
|
|
@@ -22780,7 +22875,7 @@ function buildReviewRequirementsSkill(paths) {
|
|
|
22780
22875
|
"## Steps",
|
|
22781
22876
|
"",
|
|
22782
22877
|
"1. Create a `req:review` issue with `type:requirement`,",
|
|
22783
|
-
|
|
22878
|
+
` \`priority:${labelsForPhase(issueDefaults, "req:review").priority}\`, and \`status:${labelsForPhase(issueDefaults, "req:review").status}\`. Body must include the`,
|
|
22784
22879
|
" scope, the requirements root (or accept the default), and the",
|
|
22785
22880
|
" output path.",
|
|
22786
22881
|
"2. Execute the review phase of the requirements-reviewer agent.",
|
|
@@ -22819,7 +22914,7 @@ function buildReviewRequirementsSkill(paths) {
|
|
|
22819
22914
|
].join("\n")
|
|
22820
22915
|
};
|
|
22821
22916
|
}
|
|
22822
|
-
function buildDeprecateRequirementSkill(_paths) {
|
|
22917
|
+
function buildDeprecateRequirementSkill(_paths, issueDefaults) {
|
|
22823
22918
|
return {
|
|
22824
22919
|
name: "deprecate-requirement",
|
|
22825
22920
|
description: "Transition one or more requirement documents to `Deprecated` or `Superseded`. Creates a `req:deprecate` issue and dispatches the requirements-reviewer agent's deprecation phase, which edits the target document's Status, Revision History, Superseded-by traceability link, and category index row, then files `req:write` follow-ups for every back-reference so the requirements-writer can rewrite them. The deprecation phase pauses for explicit human confirmation before editing (unless the issue body pre-approves the change).",
|
|
@@ -22882,7 +22977,7 @@ function buildDeprecateRequirementSkill(_paths) {
|
|
|
22882
22977
|
"## Steps",
|
|
22883
22978
|
"",
|
|
22884
22979
|
"1. Create a `req:deprecate` issue with `type:requirement`,",
|
|
22885
|
-
|
|
22980
|
+
` \`priority:${labelsForPhase(issueDefaults, "req:deprecate").priority}\`, and \`status:${labelsForPhase(issueDefaults, "req:deprecate").status}\`. Body must include the`,
|
|
22886
22981
|
" Targets, Transition, and Reason sections above (optionally",
|
|
22887
22982
|
" `Pre-approved: yes`).",
|
|
22888
22983
|
"2. Execute the deprecation phase of the requirements-reviewer",
|
|
@@ -22923,7 +23018,7 @@ function buildDeprecateRequirementSkill(_paths) {
|
|
|
22923
23018
|
].join("\n")
|
|
22924
23019
|
};
|
|
22925
23020
|
}
|
|
22926
|
-
function buildRequirementsReviewerBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
23021
|
+
function buildRequirementsReviewerBundle(paths = DEFAULT_AGENT_PATHS, issueDefaults = DEFAULT_RESOLVED_ISSUE_DEFAULTS) {
|
|
22927
23022
|
return {
|
|
22928
23023
|
name: "requirements-reviewer",
|
|
22929
23024
|
description: "Requirements reviewer agent bundle. Audits existing requirement documents (BR, FR, NFR, TR, ADR, SEC, DR, INT, OPS, UX, MT) via the 12-check review phase (including Check 12: stale `Proposed` ADR/TR decisions), and transitions requirements to `Deprecated` or `Superseded` via the deprecation phase (narrow writes to Status, Revision History, Superseded-by, and category index row, with `req:write` follow-ups for every back-reference). Reads templates from the requirements-writer bundle's reference directory; ships no templates of its own.",
|
|
@@ -23036,10 +23131,10 @@ function buildRequirementsReviewerBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
23036
23131
|
}
|
|
23037
23132
|
],
|
|
23038
23133
|
skills: [
|
|
23039
|
-
buildReviewRequirementsSkill(paths),
|
|
23040
|
-
buildDeprecateRequirementSkill(paths)
|
|
23134
|
+
buildReviewRequirementsSkill(paths, issueDefaults),
|
|
23135
|
+
buildDeprecateRequirementSkill(paths, issueDefaults)
|
|
23041
23136
|
],
|
|
23042
|
-
subAgents: [buildRequirementsReviewerSubAgent(paths)],
|
|
23137
|
+
subAgents: [buildRequirementsReviewerSubAgent(paths, issueDefaults)],
|
|
23043
23138
|
labels: [
|
|
23044
23139
|
{
|
|
23045
23140
|
name: "req:review",
|
|
@@ -23413,7 +23508,7 @@ function buildResearchAnalystSubAgent(paths) {
|
|
|
23413
23508
|
].join("\n")
|
|
23414
23509
|
};
|
|
23415
23510
|
}
|
|
23416
|
-
function buildResearchSkill(paths) {
|
|
23511
|
+
function buildResearchSkill(paths, issueDefaults) {
|
|
23417
23512
|
return {
|
|
23418
23513
|
name: "research",
|
|
23419
23514
|
description: "Kick off a generic research micro-task pipeline. Creates a research:scope issue and dispatches Phase 1 (Scope) in the research-analyst agent.",
|
|
@@ -23453,7 +23548,7 @@ function buildResearchSkill(paths) {
|
|
|
23453
23548
|
"## Steps",
|
|
23454
23549
|
"",
|
|
23455
23550
|
"1. Create a `research:scope` issue with `type:research`,",
|
|
23456
|
-
|
|
23551
|
+
` \`priority:${labelsForPhase(issueDefaults, "research:scope").priority}\`, and \`status:${labelsForPhase(issueDefaults, "research:scope").status}\`. Body must include the`,
|
|
23457
23552
|
" verbatim question, authorized sources, and any overrides.",
|
|
23458
23553
|
"2. Execute Phase 1 (Scope) of the research-analyst agent.",
|
|
23459
23554
|
"3. Phase 1 creates `research:slice` issues (one per slice) and a",
|
|
@@ -23471,7 +23566,7 @@ function buildResearchSkill(paths) {
|
|
|
23471
23566
|
].join("\n")
|
|
23472
23567
|
};
|
|
23473
23568
|
}
|
|
23474
|
-
function buildResearchPipelineBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
23569
|
+
function buildResearchPipelineBundle(paths = DEFAULT_AGENT_PATHS, issueDefaults = DEFAULT_RESOLVED_ISSUE_DEFAULTS) {
|
|
23475
23570
|
return {
|
|
23476
23571
|
name: "research-pipeline",
|
|
23477
23572
|
description: "Generic research micro-task pipeline: scope, N-way slice search/synthesize, and verify. Enabled by default; domain-neutral; filesystem-durable between phases.",
|
|
@@ -23504,7 +23599,7 @@ function buildResearchPipelineBundle(paths = DEFAULT_AGENT_PATHS) {
|
|
|
23504
23599
|
tags: ["workflow"]
|
|
23505
23600
|
}
|
|
23506
23601
|
],
|
|
23507
|
-
skills: [buildResearchSkill(paths)],
|
|
23602
|
+
skills: [buildResearchSkill(paths, issueDefaults)],
|
|
23508
23603
|
subAgents: [buildResearchAnalystSubAgent(paths)],
|
|
23509
23604
|
labels: [
|
|
23510
23605
|
{
|
|
@@ -24848,7 +24943,6 @@ var STANDARDS_COMPARE_REFERENCE_FILES = [
|
|
|
24848
24943
|
}
|
|
24849
24944
|
];
|
|
24850
24945
|
function buildStandardsResearchAnalystSubAgent(paths, issueDefaults) {
|
|
24851
|
-
void issueDefaults;
|
|
24852
24946
|
return {
|
|
24853
24947
|
name: "standards-research-analyst",
|
|
24854
24948
|
description: "Authors version-aware interoperability standards research through a 5-phase pipeline (scope \u2192 research \u2192 compare \u2192 extension \u2192 organizations). Researches one standard version per session, synthesizes cross-version comparisons, profiles extensions/profiles/implementation guides, and profiles standards-body organizations. Hands off canonical company and people profiles to the company-profile and people-profile bundles via company:research and people:research issues. One phase per session, tracked by standards:* GitHub issue labels with filesystem-based durability between phases.",
|
|
@@ -25212,12 +25306,23 @@ function buildStandardsResearchAnalystSubAgent(paths, issueDefaults) {
|
|
|
25212
25306
|
" *Organizations of Interest* that does not already have a",
|
|
25213
25307
|
" canonical company profile or an open `company:research` issue.",
|
|
25214
25308
|
" The `company-profile` bundle owns the downstream profile; this",
|
|
25215
|
-
" agent only hands off.",
|
|
25309
|
+
" agent only hands off. Each issue must carry:",
|
|
25310
|
+
"",
|
|
25311
|
+
" - `type:company-profile`",
|
|
25312
|
+
" - `company:research`",
|
|
25313
|
+
` - \`priority:${labelsForPhase(issueDefaults, "company:research").priority}\``,
|
|
25314
|
+
` - \`status:${labelsForPhase(issueDefaults, "company:research").status}\``,
|
|
25216
25315
|
"",
|
|
25217
25316
|
"6. **Create `people:research` issues** for every entry in *People of",
|
|
25218
25317
|
" Interest* that does not already have a canonical person profile",
|
|
25219
25318
|
" or an open `people:research` issue. The `people-profile` bundle",
|
|
25220
|
-
" owns the downstream profile; this agent only hands off.",
|
|
25319
|
+
" owns the downstream profile; this agent only hands off. Each",
|
|
25320
|
+
" issue must carry:",
|
|
25321
|
+
"",
|
|
25322
|
+
" - `type:people-profile`",
|
|
25323
|
+
" - `people:research`",
|
|
25324
|
+
` - \`priority:${labelsForPhase(issueDefaults, "people:research").priority}\``,
|
|
25325
|
+
` - \`status:${labelsForPhase(issueDefaults, "people:research").status}\``,
|
|
25221
25326
|
"",
|
|
25222
25327
|
"7. **Verify all handoffs were created** before committing. For each",
|
|
25223
25328
|
" entity in both tables, confirm an existing profile or a fresh",
|
|
@@ -25504,12 +25609,23 @@ function buildStandardsResearchAnalystSubAgent(paths, issueDefaults) {
|
|
|
25504
25609
|
" `company:research` issue if no canonical profile exists and no",
|
|
25505
25610
|
" open `company:research` issue is already tracking this",
|
|
25506
25611
|
" organization. The `company-profile` bundle owns the downstream",
|
|
25507
|
-
" profile.",
|
|
25612
|
+
" profile. The issue must carry:",
|
|
25613
|
+
"",
|
|
25614
|
+
" - `type:company-profile`",
|
|
25615
|
+
" - `company:research`",
|
|
25616
|
+
` - \`priority:${labelsForPhase(issueDefaults, "company:research").priority}\``,
|
|
25617
|
+
` - \`status:${labelsForPhase(issueDefaults, "company:research").status}\``,
|
|
25508
25618
|
"",
|
|
25509
25619
|
"6. **Hand off canonical people profiles** by creating one",
|
|
25510
25620
|
" `people:research` issue per leadership entry that does not",
|
|
25511
25621
|
" already have a canonical profile or an open `people:research`",
|
|
25512
25622
|
" issue. The `people-profile` bundle owns the downstream profiles.",
|
|
25623
|
+
" Each issue must carry:",
|
|
25624
|
+
"",
|
|
25625
|
+
" - `type:people-profile`",
|
|
25626
|
+
" - `people:research`",
|
|
25627
|
+
` - \`priority:${labelsForPhase(issueDefaults, "people:research").priority}\``,
|
|
25628
|
+
` - \`status:${labelsForPhase(issueDefaults, "people:research").status}\``,
|
|
25513
25629
|
"",
|
|
25514
25630
|
"7. **Commit and push** the organization page. Close the",
|
|
25515
25631
|
" organizations issue.",
|
|
@@ -27286,20 +27402,20 @@ function buildBuiltInBundles(paths = DEFAULT_AGENT_PATHS, issueDefaults = DEFAUL
|
|
|
27286
27402
|
agendaBundle,
|
|
27287
27403
|
orchestratorBundle,
|
|
27288
27404
|
prReviewBundle,
|
|
27289
|
-
buildRequirementsAnalystBundle(paths),
|
|
27290
|
-
buildRequirementsWriterBundle(paths),
|
|
27291
|
-
buildRequirementsReviewerBundle(paths),
|
|
27292
|
-
buildResearchPipelineBundle(paths),
|
|
27405
|
+
buildRequirementsAnalystBundle(paths, issueDefaults),
|
|
27406
|
+
buildRequirementsWriterBundle(paths, issueDefaults),
|
|
27407
|
+
buildRequirementsReviewerBundle(paths, issueDefaults),
|
|
27408
|
+
buildResearchPipelineBundle(paths, issueDefaults),
|
|
27293
27409
|
buildCompanyProfileBundle(paths, issueDefaults),
|
|
27294
27410
|
buildCustomerProfileBundle(paths, issueDefaults),
|
|
27295
27411
|
buildPeopleProfileBundle(paths, issueDefaults),
|
|
27296
27412
|
buildSoftwareProfileBundle(paths, issueDefaults),
|
|
27297
27413
|
buildIndustryDiscoveryBundle(paths, issueDefaults),
|
|
27298
|
-
buildBusinessModelsBundle(paths),
|
|
27299
|
-
buildBcmWriterBundle(paths),
|
|
27414
|
+
buildBusinessModelsBundle(paths, issueDefaults),
|
|
27415
|
+
buildBcmWriterBundle(paths, issueDefaults),
|
|
27300
27416
|
buildStandardsResearchBundle(paths, issueDefaults),
|
|
27301
27417
|
buildRegulatoryResearchBundle(paths, issueDefaults),
|
|
27302
|
-
buildMaintenanceAuditBundle(paths),
|
|
27418
|
+
buildMaintenanceAuditBundle(paths, issueDefaults),
|
|
27303
27419
|
buildDocsSyncBundle(paths)
|
|
27304
27420
|
];
|
|
27305
27421
|
}
|