@codedrifters/configulator 0.0.182 → 0.0.183
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 +22 -1
- package/lib/index.d.ts +22 -1
- package/lib/index.js +316 -8
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +314 -8
- package/lib/index.mjs.map +1 -1
- package/package.json +1 -1
package/lib/index.mjs
CHANGED
|
@@ -197,6 +197,17 @@ var AGENT_MODEL = {
|
|
|
197
197
|
BALANCED: "balanced",
|
|
198
198
|
POWERFUL: "powerful"
|
|
199
199
|
};
|
|
200
|
+
function resolveModelAlias(model) {
|
|
201
|
+
if (!model || model === AGENT_MODEL.INHERIT) {
|
|
202
|
+
return void 0;
|
|
203
|
+
}
|
|
204
|
+
const mapping = {
|
|
205
|
+
[AGENT_MODEL.POWERFUL]: "opus",
|
|
206
|
+
[AGENT_MODEL.BALANCED]: "sonnet",
|
|
207
|
+
[AGENT_MODEL.FAST]: "haiku"
|
|
208
|
+
};
|
|
209
|
+
return mapping[model] ?? model;
|
|
210
|
+
}
|
|
200
211
|
var MCP_TRANSPORT = {
|
|
201
212
|
STDIO: "stdio",
|
|
202
213
|
HTTP: "http",
|
|
@@ -943,6 +954,297 @@ var jestBundle = {
|
|
|
943
954
|
}
|
|
944
955
|
};
|
|
945
956
|
|
|
957
|
+
// src/agent/bundles/meeting-analysis.ts
|
|
958
|
+
var meetingAnalystSubAgent = {
|
|
959
|
+
name: "meeting-analyst",
|
|
960
|
+
description: "Processes meeting transcripts through a 4-phase pipeline: extract, notes, draft, and link",
|
|
961
|
+
model: AGENT_MODEL.POWERFUL,
|
|
962
|
+
maxTurns: 80,
|
|
963
|
+
platforms: { cursor: { exclude: true } },
|
|
964
|
+
prompt: [
|
|
965
|
+
"# Meeting Analyst Agent",
|
|
966
|
+
"",
|
|
967
|
+
"You process meeting transcripts through a structured 4-phase pipeline.",
|
|
968
|
+
"Each phase runs as a **separate agent session**, triggered by its own",
|
|
969
|
+
"GitHub issue with a `meeting:*` phase label. You handle exactly **one",
|
|
970
|
+
"phase per session** \u2014 read the issue to determine which phase to execute.",
|
|
971
|
+
"",
|
|
972
|
+
"## Execution Model",
|
|
973
|
+
"",
|
|
974
|
+
"1. Each meeting produces up to 4 GitHub issues (one per phase)",
|
|
975
|
+
"2. Each issue carries a `meeting:*` label identifying the phase",
|
|
976
|
+
"3. You pick up one issue, execute that phase, commit/push, then close the issue",
|
|
977
|
+
"4. Phase 1 (Extract) creates the downstream phase issues for phases 2-4",
|
|
978
|
+
"5. Each downstream issue includes `Depends on: #N` linking to its predecessor",
|
|
979
|
+
"",
|
|
980
|
+
"## Design Principles",
|
|
981
|
+
"",
|
|
982
|
+
"1. **Extract, don't interpret.** Capture what was said and decided. Flag",
|
|
983
|
+
" ambiguity as open items rather than resolving it.",
|
|
984
|
+
"2. **Route to the right category.** Meeting content maps to requirements,",
|
|
985
|
+
" ADRs, product docs, and business strategy. Each output goes to the",
|
|
986
|
+
" correct location per the project's taxonomy.",
|
|
987
|
+
"3. **Preserve provenance.** Every extracted item links back to the meeting",
|
|
988
|
+
" source so reviewers can check context.",
|
|
989
|
+
"4. **Create issues, not documents.** For requirements and ADRs, create",
|
|
990
|
+
" GitHub issues that other agents or humans will pick up. Do not write",
|
|
991
|
+
" final requirement documents yourself.",
|
|
992
|
+
"5. **Bi-directional traceability.** Every document and issue created by",
|
|
993
|
+
" this pipeline must link back to the meeting source, and the meeting",
|
|
994
|
+
" source documents must link forward to everything created from them.",
|
|
995
|
+
"",
|
|
996
|
+
"---",
|
|
997
|
+
"",
|
|
998
|
+
"## Traceability",
|
|
999
|
+
"",
|
|
1000
|
+
"All outputs must be bi-directionally linked so any artifact can be traced",
|
|
1001
|
+
"back to the meeting that produced it and forward to everything it spawned.",
|
|
1002
|
+
"",
|
|
1003
|
+
"### Backward links (created artifact \u2192 meeting source)",
|
|
1004
|
+
"",
|
|
1005
|
+
"Every GitHub issue and document created by this pipeline must include a",
|
|
1006
|
+
"`## Traceability` section with:",
|
|
1007
|
+
"",
|
|
1008
|
+
"```markdown",
|
|
1009
|
+
"## Traceability",
|
|
1010
|
+
"",
|
|
1011
|
+
"- **Source meeting:** <path to transcript or meeting notes>",
|
|
1012
|
+
"- **Extraction:** <path to extraction file>",
|
|
1013
|
+
"- **Phase issue:** #<N> (the phase issue that created this artifact)",
|
|
1014
|
+
"```",
|
|
1015
|
+
"",
|
|
1016
|
+
"### Forward links (meeting source \u2192 created artifacts)",
|
|
1017
|
+
"",
|
|
1018
|
+
"After Phase 4 (Link) creates all follow-up issues and documents:",
|
|
1019
|
+
"",
|
|
1020
|
+
"1. **Update the extraction file** with a `## Downstream Artifacts` section",
|
|
1021
|
+
" listing every issue and document created from this meeting:",
|
|
1022
|
+
"",
|
|
1023
|
+
" ```markdown",
|
|
1024
|
+
" ## Downstream Artifacts",
|
|
1025
|
+
"",
|
|
1026
|
+
" | Artifact | Type | Issue/Path |",
|
|
1027
|
+
" |----------|------|------------|",
|
|
1028
|
+
" | <title> | requirement / ADR / action-item / profile | #<N> or <path> |",
|
|
1029
|
+
" ```",
|
|
1030
|
+
"",
|
|
1031
|
+
"2. **Update the meeting notes** with a similar `## Related Issues` section",
|
|
1032
|
+
" listing all issues created from this meeting.",
|
|
1033
|
+
"",
|
|
1034
|
+
"3. **Comment on the extract issue** with a summary linking to all created",
|
|
1035
|
+
" artifacts.",
|
|
1036
|
+
"",
|
|
1037
|
+
"### Within-pipeline links",
|
|
1038
|
+
"",
|
|
1039
|
+
"- Phase issues link to predecessors via `Depends on: #N`",
|
|
1040
|
+
"- Phase issues reference the extraction file path in their body",
|
|
1041
|
+
"- Draft documents reference both the extraction and the meeting notes",
|
|
1042
|
+
"",
|
|
1043
|
+
"---",
|
|
1044
|
+
"",
|
|
1045
|
+
"## Phase 1: Extract (`meeting:extract`)",
|
|
1046
|
+
"",
|
|
1047
|
+
"**Goal:** Read the meeting transcript and categorize all substantive content.",
|
|
1048
|
+
"",
|
|
1049
|
+
"### Steps",
|
|
1050
|
+
"",
|
|
1051
|
+
"1. Read the transcript file specified in the issue body.",
|
|
1052
|
+
"2. Identify and categorize content into these buckets:",
|
|
1053
|
+
"",
|
|
1054
|
+
" | Bucket | What to look for |",
|
|
1055
|
+
" |--------|-----------------|",
|
|
1056
|
+
` | **Decisions** | "We decided...", "Let's go with...", explicit choices |`,
|
|
1057
|
+
' | **Requirements** | Feature descriptions, acceptance criteria, "it should..." |',
|
|
1058
|
+
" | **Technology discussions** | Platform comparisons, architecture options, tool evaluations |",
|
|
1059
|
+
' | **Action items** | "[Person] will...", "Next step is...", assigned tasks |',
|
|
1060
|
+
' | **Open questions** | "We need to figure out...", unresolved debates |',
|
|
1061
|
+
" | **People of interest** | Industry contacts, domain experts mentioned |",
|
|
1062
|
+
" | **Companies of interest** | Competitors, vendors, partners discussed |",
|
|
1063
|
+
" | **Strategic direction** | Business model changes, market positioning |",
|
|
1064
|
+
" | **Product direction** | Roadmap changes, feature prioritization |",
|
|
1065
|
+
"",
|
|
1066
|
+
"3. Write the extraction to a markdown file with structured sections:",
|
|
1067
|
+
" - Attendees",
|
|
1068
|
+
" - Decisions Made (with category and confidence: Firm / Tentative / Needs confirmation)",
|
|
1069
|
+
" - Requirements Identified (with category and priority estimate)",
|
|
1070
|
+
" - Technology Discussions (with status: Decided / Leaning toward / Open)",
|
|
1071
|
+
" - Action Items (with assignee and due date if stated)",
|
|
1072
|
+
" - Open Questions",
|
|
1073
|
+
" - People of Interest (with context and whether a profile exists)",
|
|
1074
|
+
" - Companies of Interest (with type and context)",
|
|
1075
|
+
" - Strategic / Product Direction",
|
|
1076
|
+
"",
|
|
1077
|
+
"4. **Create downstream phase issues** using `gh issue create`:",
|
|
1078
|
+
" - Always create a `meeting:notes` issue (blocked on this extract issue)",
|
|
1079
|
+
" - If requirements OR decisions/ADRs identified, create a `meeting:draft` issue",
|
|
1080
|
+
" (blocked on the notes issue)",
|
|
1081
|
+
" - Always create a `meeting:link` issue \u2014 blocked on the draft issue if one",
|
|
1082
|
+
" was created, otherwise blocked on the notes issue",
|
|
1083
|
+
"",
|
|
1084
|
+
"5. Commit, push, and close the extract issue.",
|
|
1085
|
+
"",
|
|
1086
|
+
"---",
|
|
1087
|
+
"",
|
|
1088
|
+
"## Phase 2: Notes (`meeting:notes`)",
|
|
1089
|
+
"",
|
|
1090
|
+
"**Goal:** Transform the extraction into structured meeting notes.",
|
|
1091
|
+
"",
|
|
1092
|
+
"### Steps",
|
|
1093
|
+
"",
|
|
1094
|
+
"1. Read the extraction file referenced in the issue body (output of Phase 1).",
|
|
1095
|
+
"2. Write structured meeting notes with these sections:",
|
|
1096
|
+
" - Meeting metadata (title, date, attendees)",
|
|
1097
|
+
" - Agenda / topics covered",
|
|
1098
|
+
" - Key Discussion Points (organized by topic)",
|
|
1099
|
+
" - Decisions (numbered, with rationale)",
|
|
1100
|
+
" - Action Items (table: who, what, when)",
|
|
1101
|
+
" - Open Questions",
|
|
1102
|
+
" - Follow-up items",
|
|
1103
|
+
"3. Commit, push, and close the notes issue.",
|
|
1104
|
+
"",
|
|
1105
|
+
"---",
|
|
1106
|
+
"",
|
|
1107
|
+
"## Phase 3: Draft (`meeting:draft`)",
|
|
1108
|
+
"",
|
|
1109
|
+
"**Goal:** Draft proposals for requirements, ADRs, and product/strategy updates.",
|
|
1110
|
+
"",
|
|
1111
|
+
"This phase only exists if the extraction identified requirements, architectural",
|
|
1112
|
+
"decisions, or strategy changes. If this issue exists, execute it.",
|
|
1113
|
+
"",
|
|
1114
|
+
"### Steps",
|
|
1115
|
+
"",
|
|
1116
|
+
"1. Read the extraction file from Phase 1.",
|
|
1117
|
+
"2. Check existing requirement registries and ADR registries for duplicates.",
|
|
1118
|
+
"3. Draft requirement proposals with:",
|
|
1119
|
+
" - Category (FR, BR, NFR, etc.)",
|
|
1120
|
+
" - Summary (2-3 sentences)",
|
|
1121
|
+
" - Draft acceptance criteria",
|
|
1122
|
+
" - Related existing requirements",
|
|
1123
|
+
"4. Draft ADR proposals for technology decisions with:",
|
|
1124
|
+
" - Context and problem statement",
|
|
1125
|
+
" - Options discussed",
|
|
1126
|
+
" - Stated preferences or decisions",
|
|
1127
|
+
" - Status: Proposed or Decided",
|
|
1128
|
+
"5. Summarize product/strategy document updates needed.",
|
|
1129
|
+
"6. Commit, push, and close the draft issue.",
|
|
1130
|
+
"",
|
|
1131
|
+
"---",
|
|
1132
|
+
"",
|
|
1133
|
+
"## Phase 4: Link (`meeting:link`)",
|
|
1134
|
+
"",
|
|
1135
|
+
"**Goal:** Create GitHub issues for follow-up work, cross-reference the",
|
|
1136
|
+
"meeting into existing documentation, and complete bi-directional traceability.",
|
|
1137
|
+
"",
|
|
1138
|
+
"### Steps",
|
|
1139
|
+
"",
|
|
1140
|
+
"1. Read the drafts from Phase 3 (if they exist) and the extraction from Phase 1.",
|
|
1141
|
+
"2. Create requirement issues using `gh issue create` with appropriate labels.",
|
|
1142
|
+
" Include a `## Traceability` section in each issue body linking back to",
|
|
1143
|
+
" the source meeting and extraction file.",
|
|
1144
|
+
"3. Create ADR issues if technology decisions need formal records.",
|
|
1145
|
+
" Include a `## Traceability` section in each.",
|
|
1146
|
+
"4. Create action item issues for tasks that are not document-related.",
|
|
1147
|
+
" Include a `## Traceability` section in each.",
|
|
1148
|
+
"5. Cross-reference the meeting in any existing documents that were discussed.",
|
|
1149
|
+
"6. Apply direct product/strategy doc updates for items flagged as **Firm**",
|
|
1150
|
+
" confidence in the extraction.",
|
|
1151
|
+
"7. **Update the extraction file** with a `## Downstream Artifacts` section",
|
|
1152
|
+
" listing every issue and document created from this meeting.",
|
|
1153
|
+
"8. **Update the meeting notes** with a `## Related Issues` section listing",
|
|
1154
|
+
" all issues created from this meeting.",
|
|
1155
|
+
"9. Comment on the parent extract issue with a summary linking to all",
|
|
1156
|
+
" created artifacts.",
|
|
1157
|
+
"10. Commit and push (if any file changes were made), then close the link issue.",
|
|
1158
|
+
"",
|
|
1159
|
+
"---",
|
|
1160
|
+
"",
|
|
1161
|
+
"## GitHub Integration",
|
|
1162
|
+
"",
|
|
1163
|
+
"- Use `gh` CLI for all GitHub operations",
|
|
1164
|
+
"- Apply the appropriate `meeting:*` phase label to each phase issue",
|
|
1165
|
+
"- Use `type:docs` for documentation-producing issues, `type:chore` for",
|
|
1166
|
+
" maintenance/organizational tasks",
|
|
1167
|
+
"- Use `status:` labels to track progress (`status:ready`, `status:in-progress`, `status:done`)",
|
|
1168
|
+
"- Reference the source meeting transcript in all created issues",
|
|
1169
|
+
"- Link phase issues with `Depends on: #N` to enforce ordering",
|
|
1170
|
+
"",
|
|
1171
|
+
"## When to Shorten the Pipeline",
|
|
1172
|
+
"",
|
|
1173
|
+
"- **Short meetings** (<30 min, <2000 words): combine extract + notes into one session",
|
|
1174
|
+
"- **No requirements or decisions**: Phase 1 skips creating the `meeting:draft` issue",
|
|
1175
|
+
"- **Only action items**: extract + notes + link (3 phase issues)"
|
|
1176
|
+
].join("\n")
|
|
1177
|
+
};
|
|
1178
|
+
var processMeetingSkill = {
|
|
1179
|
+
name: "process-meeting",
|
|
1180
|
+
description: "Process a meeting transcript through the 4-phase meeting analysis pipeline",
|
|
1181
|
+
disableModelInvocation: true,
|
|
1182
|
+
userInvocable: true,
|
|
1183
|
+
context: "fork",
|
|
1184
|
+
agent: "meeting-analyst",
|
|
1185
|
+
platforms: { cursor: { exclude: true } },
|
|
1186
|
+
instructions: [
|
|
1187
|
+
"# Process Meeting Transcript",
|
|
1188
|
+
"",
|
|
1189
|
+
"Kick off meeting transcript processing by executing Phase 1 (Extract)",
|
|
1190
|
+
"and creating downstream phase issues for the remaining phases.",
|
|
1191
|
+
"",
|
|
1192
|
+
"## Usage",
|
|
1193
|
+
"",
|
|
1194
|
+
"/process-meeting <path-to-transcript>",
|
|
1195
|
+
"",
|
|
1196
|
+
"## Steps",
|
|
1197
|
+
"",
|
|
1198
|
+
"1. Read the provided transcript file",
|
|
1199
|
+
"2. Execute Phase 1 (Extract) \u2014 categorize transcript content into",
|
|
1200
|
+
" decisions, requirements, action items, open questions, and more",
|
|
1201
|
+
"3. Write the extraction to a markdown file",
|
|
1202
|
+
"4. Create downstream phase issues using `gh issue create`:",
|
|
1203
|
+
" - `meeting:notes` issue (always)",
|
|
1204
|
+
" - `meeting:draft` issue (if requirements or decisions were found)",
|
|
1205
|
+
" - `meeting:link` issue (always)",
|
|
1206
|
+
"5. Each downstream issue includes `Depends on:` linking to its predecessor",
|
|
1207
|
+
"6. Commit and push the extraction file",
|
|
1208
|
+
"",
|
|
1209
|
+
"## Input",
|
|
1210
|
+
"",
|
|
1211
|
+
"Provide a path to a meeting transcript file (text or markdown).",
|
|
1212
|
+
"The transcript should contain speaker-attributed dialogue.",
|
|
1213
|
+
"",
|
|
1214
|
+
"## Output",
|
|
1215
|
+
"",
|
|
1216
|
+
"- An extraction markdown file with categorized meeting content",
|
|
1217
|
+
"- Phase issues with `meeting:*` labels for downstream agent sessions",
|
|
1218
|
+
" to pick up (notes, draft, link)"
|
|
1219
|
+
].join("\n")
|
|
1220
|
+
};
|
|
1221
|
+
var meetingAnalysisBundle = {
|
|
1222
|
+
name: "meeting-analysis",
|
|
1223
|
+
description: "Meeting transcript processing workflow with 4-phase pipeline (extract, notes, draft, link)",
|
|
1224
|
+
appliesWhen: () => true,
|
|
1225
|
+
rules: [
|
|
1226
|
+
{
|
|
1227
|
+
name: "meeting-processing-workflow",
|
|
1228
|
+
description: "Describes the 4-phase meeting processing pipeline, extraction taxonomy, and labeling conventions",
|
|
1229
|
+
scope: AGENT_RULE_SCOPE.ALWAYS,
|
|
1230
|
+
content: [
|
|
1231
|
+
"# Meeting Processing Workflow",
|
|
1232
|
+
"",
|
|
1233
|
+
"Use `/process-meeting <path>` to process a meeting transcript through a",
|
|
1234
|
+
"4-phase pipeline (extract \u2192 notes \u2192 draft \u2192 link). Each phase runs as a",
|
|
1235
|
+
"separate agent session tracked by a GitHub issue with a `meeting:*` label.",
|
|
1236
|
+
"See the `meeting-analyst` agent definition for full workflow details."
|
|
1237
|
+
].join("\n"),
|
|
1238
|
+
platforms: {
|
|
1239
|
+
cursor: { exclude: true }
|
|
1240
|
+
},
|
|
1241
|
+
tags: ["workflow"]
|
|
1242
|
+
}
|
|
1243
|
+
],
|
|
1244
|
+
skills: [processMeetingSkill],
|
|
1245
|
+
subAgents: [meetingAnalystSubAgent]
|
|
1246
|
+
};
|
|
1247
|
+
|
|
946
1248
|
// src/pnpm/pnpm-workspace.ts
|
|
947
1249
|
import { relative } from "path";
|
|
948
1250
|
import { Component, YamlFile } from "projen";
|
|
@@ -1959,7 +2261,8 @@ var BUILT_IN_BUNDLES = [
|
|
|
1959
2261
|
awsCdkBundle,
|
|
1960
2262
|
projenBundle,
|
|
1961
2263
|
githubWorkflowBundle,
|
|
1962
|
-
slackBundle
|
|
2264
|
+
slackBundle,
|
|
2265
|
+
meetingAnalysisBundle
|
|
1963
2266
|
];
|
|
1964
2267
|
|
|
1965
2268
|
// src/agent/bundles/scope.ts
|
|
@@ -2291,6 +2594,7 @@ var ClaudeRenderer = class _ClaudeRenderer {
|
|
|
2291
2594
|
}
|
|
2292
2595
|
static renderSkills(component, skills) {
|
|
2293
2596
|
for (const skill of skills) {
|
|
2597
|
+
if (skill.platforms?.claude?.exclude) continue;
|
|
2294
2598
|
const lines = [];
|
|
2295
2599
|
lines.push("---");
|
|
2296
2600
|
lines.push(`name: "${skill.name}"`);
|
|
@@ -2301,8 +2605,9 @@ var ClaudeRenderer = class _ClaudeRenderer {
|
|
|
2301
2605
|
if (skill.userInvocable === false) {
|
|
2302
2606
|
lines.push(`user-invocable: false`);
|
|
2303
2607
|
}
|
|
2304
|
-
|
|
2305
|
-
|
|
2608
|
+
const resolvedSkillModel = resolveModelAlias(skill.model);
|
|
2609
|
+
if (resolvedSkillModel) {
|
|
2610
|
+
lines.push(`model: "${resolvedSkillModel}"`);
|
|
2306
2611
|
}
|
|
2307
2612
|
if (skill.effort) {
|
|
2308
2613
|
lines.push(`effort: "${skill.effort}"`);
|
|
@@ -2344,8 +2649,9 @@ var ClaudeRenderer = class _ClaudeRenderer {
|
|
|
2344
2649
|
lines.push(`name: ${agent.name}`);
|
|
2345
2650
|
lines.push(`description: >-`);
|
|
2346
2651
|
lines.push(` ${agent.description}`);
|
|
2347
|
-
|
|
2348
|
-
|
|
2652
|
+
const resolvedModel = resolveModelAlias(agent.model);
|
|
2653
|
+
if (resolvedModel) {
|
|
2654
|
+
lines.push(`model: ${resolvedModel}`);
|
|
2349
2655
|
}
|
|
2350
2656
|
if (agent.tools && agent.tools.length > 0) {
|
|
2351
2657
|
lines.push(`tools:`);
|
|
@@ -2458,6 +2764,7 @@ var CursorRenderer = class _CursorRenderer {
|
|
|
2458
2764
|
}
|
|
2459
2765
|
static renderSkills(component, skills) {
|
|
2460
2766
|
for (const skill of skills) {
|
|
2767
|
+
if (skill.platforms?.cursor?.exclude) continue;
|
|
2461
2768
|
const lines = [];
|
|
2462
2769
|
lines.push("---");
|
|
2463
2770
|
lines.push(`name: "${skill.name}"`);
|
|
@@ -2499,9 +2806,6 @@ var CursorRenderer = class _CursorRenderer {
|
|
|
2499
2806
|
lines.push(`name: ${agent.name}`);
|
|
2500
2807
|
lines.push(`description: >-`);
|
|
2501
2808
|
lines.push(` ${agent.description}`);
|
|
2502
|
-
if (agent.model) {
|
|
2503
|
-
lines.push(`model: ${agent.model}`);
|
|
2504
|
-
}
|
|
2505
2809
|
if (agent.platforms?.cursor?.readonly) {
|
|
2506
2810
|
lines.push(`readonly: true`);
|
|
2507
2811
|
}
|
|
@@ -4663,8 +4967,10 @@ export {
|
|
|
4663
4967
|
getLatestEligibleVersion,
|
|
4664
4968
|
githubWorkflowBundle,
|
|
4665
4969
|
jestBundle,
|
|
4970
|
+
meetingAnalysisBundle,
|
|
4666
4971
|
pnpmBundle,
|
|
4667
4972
|
projenBundle,
|
|
4973
|
+
resolveModelAlias,
|
|
4668
4974
|
resolveTemplateVariables,
|
|
4669
4975
|
slackBundle,
|
|
4670
4976
|
turborepoBundle,
|