@codedrifters/configulator 0.0.181 → 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 +73 -1
- package/lib/index.d.ts +74 -2
- package/lib/index.js +529 -15
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +523 -15
- 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
|
}
|
|
@@ -3816,6 +4120,198 @@ function addBuildCompleteJob(buildWorkflow) {
|
|
|
3816
4120
|
});
|
|
3817
4121
|
}
|
|
3818
4122
|
|
|
4123
|
+
// src/workflows/sync-labels.ts
|
|
4124
|
+
import { Component as Component14, YamlFile as YamlFile2 } from "projen";
|
|
4125
|
+
import { JobPermission as JobPermission4 } from "projen/lib/github/workflows-model";
|
|
4126
|
+
var DEFAULT_STATUS_LABELS = [
|
|
4127
|
+
{
|
|
4128
|
+
name: "status:ready",
|
|
4129
|
+
color: "0E8A16",
|
|
4130
|
+
description: "Task is ready for pickup"
|
|
4131
|
+
},
|
|
4132
|
+
{
|
|
4133
|
+
name: "status:in-progress",
|
|
4134
|
+
color: "FBCA04",
|
|
4135
|
+
description: "Actively being worked on"
|
|
4136
|
+
},
|
|
4137
|
+
{
|
|
4138
|
+
name: "status:blocked",
|
|
4139
|
+
color: "D93F0B",
|
|
4140
|
+
description: "Blocked on a dependency or question"
|
|
4141
|
+
},
|
|
4142
|
+
{
|
|
4143
|
+
name: "status:done",
|
|
4144
|
+
color: "6F42C1",
|
|
4145
|
+
description: "Task completed and closed"
|
|
4146
|
+
},
|
|
4147
|
+
{
|
|
4148
|
+
name: "status:deferred",
|
|
4149
|
+
color: "C2E0C6",
|
|
4150
|
+
description: "Intentionally parked \u2014 not ready for pickup"
|
|
4151
|
+
},
|
|
4152
|
+
{
|
|
4153
|
+
name: "status:needs-attention",
|
|
4154
|
+
color: "FF0000",
|
|
4155
|
+
description: "Requires human review"
|
|
4156
|
+
}
|
|
4157
|
+
];
|
|
4158
|
+
var DEFAULT_PRIORITY_LABELS = [
|
|
4159
|
+
{
|
|
4160
|
+
name: "priority:critical",
|
|
4161
|
+
color: "B60205",
|
|
4162
|
+
description: "Critical priority \u2014 address immediately"
|
|
4163
|
+
},
|
|
4164
|
+
{
|
|
4165
|
+
name: "priority:high",
|
|
4166
|
+
color: "D93F0B",
|
|
4167
|
+
description: "High priority \u2014 pick before normal"
|
|
4168
|
+
},
|
|
4169
|
+
{
|
|
4170
|
+
name: "priority:medium",
|
|
4171
|
+
color: "E4E669",
|
|
4172
|
+
description: "Medium priority"
|
|
4173
|
+
},
|
|
4174
|
+
{
|
|
4175
|
+
name: "priority:low",
|
|
4176
|
+
color: "D4C5F9",
|
|
4177
|
+
description: "Low priority \u2014 skip if higher-priority work exists"
|
|
4178
|
+
},
|
|
4179
|
+
{
|
|
4180
|
+
name: "priority:trivial",
|
|
4181
|
+
color: "EDEDED",
|
|
4182
|
+
description: "Trivial priority \u2014 address when convenient"
|
|
4183
|
+
}
|
|
4184
|
+
];
|
|
4185
|
+
var DEFAULT_TYPE_LABELS = [
|
|
4186
|
+
{
|
|
4187
|
+
name: "type:feat",
|
|
4188
|
+
color: "1D76DB",
|
|
4189
|
+
description: "New feature or functionality"
|
|
4190
|
+
},
|
|
4191
|
+
{
|
|
4192
|
+
name: "type:fix",
|
|
4193
|
+
color: "D73A4A",
|
|
4194
|
+
description: "Bug fix"
|
|
4195
|
+
},
|
|
4196
|
+
{
|
|
4197
|
+
name: "type:docs",
|
|
4198
|
+
color: "0075CA",
|
|
4199
|
+
description: "Documentation only"
|
|
4200
|
+
},
|
|
4201
|
+
{
|
|
4202
|
+
name: "type:style",
|
|
4203
|
+
color: "BFD4F2",
|
|
4204
|
+
description: "Code style (formatting, whitespace) \u2014 no logic change"
|
|
4205
|
+
},
|
|
4206
|
+
{
|
|
4207
|
+
name: "type:refactor",
|
|
4208
|
+
color: "A2EEEF",
|
|
4209
|
+
description: "Code restructure \u2014 no feature or fix"
|
|
4210
|
+
},
|
|
4211
|
+
{
|
|
4212
|
+
name: "type:perf",
|
|
4213
|
+
color: "F9D0C4",
|
|
4214
|
+
description: "Performance improvement"
|
|
4215
|
+
},
|
|
4216
|
+
{
|
|
4217
|
+
name: "type:test",
|
|
4218
|
+
color: "BFD4F2",
|
|
4219
|
+
description: "Adding or updating tests"
|
|
4220
|
+
},
|
|
4221
|
+
{
|
|
4222
|
+
name: "type:build",
|
|
4223
|
+
color: "E6CCF5",
|
|
4224
|
+
description: "Build system or external dependencies"
|
|
4225
|
+
},
|
|
4226
|
+
{
|
|
4227
|
+
name: "type:ci",
|
|
4228
|
+
color: "D4C5F9",
|
|
4229
|
+
description: "CI configuration changes"
|
|
4230
|
+
},
|
|
4231
|
+
{
|
|
4232
|
+
name: "type:chore",
|
|
4233
|
+
color: "E6E6E6",
|
|
4234
|
+
description: "Maintenance tasks (deps, tooling, config)"
|
|
4235
|
+
},
|
|
4236
|
+
{
|
|
4237
|
+
name: "type:revert",
|
|
4238
|
+
color: "EDEDED",
|
|
4239
|
+
description: "Revert a previous commit"
|
|
4240
|
+
},
|
|
4241
|
+
{
|
|
4242
|
+
name: "type:release",
|
|
4243
|
+
color: "0E8A16",
|
|
4244
|
+
description: "Release preparation and version bumps"
|
|
4245
|
+
},
|
|
4246
|
+
{
|
|
4247
|
+
name: "type:hotfix",
|
|
4248
|
+
color: "B60205",
|
|
4249
|
+
description: "Urgent production fix"
|
|
4250
|
+
}
|
|
4251
|
+
];
|
|
4252
|
+
var DEFAULT_WORKFLOW_NAME2 = "sync-labels";
|
|
4253
|
+
var LABELS_CONFIG_PATH = ".github/labels.yml";
|
|
4254
|
+
function addSyncLabelsWorkflow(project, options) {
|
|
4255
|
+
const workflowName = options.workflowName ?? DEFAULT_WORKFLOW_NAME2;
|
|
4256
|
+
const deleteOtherLabels = options.deleteOtherLabels ?? true;
|
|
4257
|
+
const allLabels = [
|
|
4258
|
+
...DEFAULT_STATUS_LABELS,
|
|
4259
|
+
...DEFAULT_PRIORITY_LABELS,
|
|
4260
|
+
...DEFAULT_TYPE_LABELS,
|
|
4261
|
+
...options.labels ?? []
|
|
4262
|
+
];
|
|
4263
|
+
new LabelsFile(project, allLabels);
|
|
4264
|
+
const workflow = project.github?.addWorkflow(workflowName);
|
|
4265
|
+
if (!workflow) {
|
|
4266
|
+
return;
|
|
4267
|
+
}
|
|
4268
|
+
workflow.on({
|
|
4269
|
+
push: {
|
|
4270
|
+
branches: ["main"],
|
|
4271
|
+
paths: [LABELS_CONFIG_PATH]
|
|
4272
|
+
},
|
|
4273
|
+
workflowDispatch: {}
|
|
4274
|
+
});
|
|
4275
|
+
workflow.addJobs({
|
|
4276
|
+
sync: {
|
|
4277
|
+
name: "Sync labels",
|
|
4278
|
+
runsOn: ["ubuntu-latest"],
|
|
4279
|
+
permissions: {
|
|
4280
|
+
contents: JobPermission4.READ,
|
|
4281
|
+
issues: JobPermission4.WRITE
|
|
4282
|
+
},
|
|
4283
|
+
steps: [
|
|
4284
|
+
{
|
|
4285
|
+
name: "Checkout",
|
|
4286
|
+
uses: "actions/checkout@v6"
|
|
4287
|
+
},
|
|
4288
|
+
{
|
|
4289
|
+
name: "Sync labels",
|
|
4290
|
+
uses: "EndBug/label-sync@v2",
|
|
4291
|
+
with: {
|
|
4292
|
+
"config-file": LABELS_CONFIG_PATH,
|
|
4293
|
+
"delete-other-labels": deleteOtherLabels,
|
|
4294
|
+
token: "${{ secrets.GITHUB_TOKEN }}"
|
|
4295
|
+
}
|
|
4296
|
+
}
|
|
4297
|
+
]
|
|
4298
|
+
}
|
|
4299
|
+
});
|
|
4300
|
+
}
|
|
4301
|
+
var LabelsFile = class extends Component14 {
|
|
4302
|
+
constructor(project, labels) {
|
|
4303
|
+
super(project);
|
|
4304
|
+
new YamlFile2(project, LABELS_CONFIG_PATH, {
|
|
4305
|
+
obj: labels.map((l) => ({
|
|
4306
|
+
name: l.name,
|
|
4307
|
+
color: l.color,
|
|
4308
|
+
description: l.description
|
|
4309
|
+
})),
|
|
4310
|
+
committed: true
|
|
4311
|
+
});
|
|
4312
|
+
}
|
|
4313
|
+
};
|
|
4314
|
+
|
|
3819
4315
|
// src/projects/monorepo-project.ts
|
|
3820
4316
|
var CONFIGULATOR_PACKAGE_NAME = "@codedrifters/configulator";
|
|
3821
4317
|
var postInstallDependenciesMap = /* @__PURE__ */ new WeakMap();
|
|
@@ -4065,6 +4561,12 @@ var MonorepoProject = class extends TypeScriptAppProject {
|
|
|
4065
4561
|
typeof options.agentConfig === "object" ? options.agentConfig : {}
|
|
4066
4562
|
);
|
|
4067
4563
|
}
|
|
4564
|
+
if (options.syncLabels !== false) {
|
|
4565
|
+
addSyncLabelsWorkflow(
|
|
4566
|
+
this,
|
|
4567
|
+
typeof options.syncLabels === "object" ? options.syncLabels : {}
|
|
4568
|
+
);
|
|
4569
|
+
}
|
|
4068
4570
|
if (this.buildWorkflow) {
|
|
4069
4571
|
addBuildCompleteJob(this.buildWorkflow);
|
|
4070
4572
|
}
|
|
@@ -4123,9 +4625,9 @@ var MonorepoProject = class extends TypeScriptAppProject {
|
|
|
4123
4625
|
|
|
4124
4626
|
// src/typescript/typescript-config.ts
|
|
4125
4627
|
import { relative as relative4 } from "path";
|
|
4126
|
-
import { Component as
|
|
4628
|
+
import { Component as Component15 } from "projen";
|
|
4127
4629
|
import { ensureRelativePathStartsWithDot } from "projen/lib/util/path";
|
|
4128
|
-
var TypeScriptConfig = class extends
|
|
4630
|
+
var TypeScriptConfig = class extends Component15 {
|
|
4129
4631
|
constructor(project) {
|
|
4130
4632
|
super(project);
|
|
4131
4633
|
let tsPaths = {};
|
|
@@ -4153,12 +4655,12 @@ var TypeScriptConfig = class extends Component14 {
|
|
|
4153
4655
|
|
|
4154
4656
|
// src/workflows/aws-deploy-workflow.ts
|
|
4155
4657
|
var import_utils11 = __toESM(require_lib());
|
|
4156
|
-
import { Component as
|
|
4658
|
+
import { Component as Component16 } from "projen";
|
|
4157
4659
|
import { BuildWorkflow } from "projen/lib/build";
|
|
4158
4660
|
import { GitHub as GitHub2 } from "projen/lib/github";
|
|
4159
|
-
import { JobPermission as
|
|
4661
|
+
import { JobPermission as JobPermission5 } from "projen/lib/github/workflows-model";
|
|
4160
4662
|
var PROD_DEPLOY_NAME = "prod-deploy";
|
|
4161
|
-
var AwsDeployWorkflow = class _AwsDeployWorkflow extends
|
|
4663
|
+
var AwsDeployWorkflow = class _AwsDeployWorkflow extends Component16 {
|
|
4162
4664
|
constructor(project, options = {}) {
|
|
4163
4665
|
super(project);
|
|
4164
4666
|
this.project = project;
|
|
@@ -4385,8 +4887,8 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends Component15 {
|
|
|
4385
4887
|
],
|
|
4386
4888
|
runsOn: ["ubuntu-latest"],
|
|
4387
4889
|
permissions: {
|
|
4388
|
-
contents:
|
|
4389
|
-
idToken:
|
|
4890
|
+
contents: JobPermission5.READ,
|
|
4891
|
+
idToken: JobPermission5.WRITE
|
|
4390
4892
|
},
|
|
4391
4893
|
concurrency: deployJobName,
|
|
4392
4894
|
if: jobCondition,
|
|
@@ -4432,6 +4934,9 @@ export {
|
|
|
4432
4934
|
BUILT_IN_BUNDLES,
|
|
4433
4935
|
CLAUDE_RULE_TARGET,
|
|
4434
4936
|
COMPLETE_JOB_ID,
|
|
4937
|
+
DEFAULT_PRIORITY_LABELS,
|
|
4938
|
+
DEFAULT_STATUS_LABELS,
|
|
4939
|
+
DEFAULT_TYPE_LABELS,
|
|
4435
4940
|
JsiiFaker,
|
|
4436
4941
|
MCP_TRANSPORT,
|
|
4437
4942
|
MERGE_METHODS,
|
|
@@ -4456,13 +4961,16 @@ export {
|
|
|
4456
4961
|
Vitest,
|
|
4457
4962
|
addApproveMergeUpgradeWorkflow,
|
|
4458
4963
|
addBuildCompleteJob,
|
|
4964
|
+
addSyncLabelsWorkflow,
|
|
4459
4965
|
awsCdkBundle,
|
|
4460
4966
|
baseBundle,
|
|
4461
4967
|
getLatestEligibleVersion,
|
|
4462
4968
|
githubWorkflowBundle,
|
|
4463
4969
|
jestBundle,
|
|
4970
|
+
meetingAnalysisBundle,
|
|
4464
4971
|
pnpmBundle,
|
|
4465
4972
|
projenBundle,
|
|
4973
|
+
resolveModelAlias,
|
|
4466
4974
|
resolveTemplateVariables,
|
|
4467
4975
|
slackBundle,
|
|
4468
4976
|
turborepoBundle,
|