@codedrifters/configulator 0.0.256 → 0.0.257

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 CHANGED
@@ -1120,6 +1120,164 @@ interface FocusConfig {
1120
1120
  */
1121
1121
  readonly agentExpansionRules?: AgentExpansionRules;
1122
1122
  }
1123
+ /*******************************************************************************
1124
+ *
1125
+ * Meetings Config
1126
+ *
1127
+ ******************************************************************************/
1128
+ /**
1129
+ * Scope classifier for a meeting type. Used by the `meeting-analysis`
1130
+ * bundle to reason about where a given meeting belongs (internal vs
1131
+ * external) and, for external meetings, the nature of the other party.
1132
+ *
1133
+ * - `internal-recurring` — recurring internal meeting (weekly standup,
1134
+ * team sync, planning cadence).
1135
+ * - `internal-oneoff` — one-off internal meeting (brainstorm, kickoff,
1136
+ * retro).
1137
+ * - `external-customer` — meeting with an existing paying customer.
1138
+ * - `external-prospect` — meeting with a sales prospect not yet under
1139
+ * contract.
1140
+ * - `external-partner` — meeting with a partner (integration, vendor,
1141
+ * channel).
1142
+ * - `external-other` — any external meeting that does not fit the
1143
+ * customer / prospect / partner buckets.
1144
+ */
1145
+ type MeetingScope = "internal-recurring" | "internal-oneoff" | "external-customer" | "external-prospect" | "external-partner" | "external-other";
1146
+ /**
1147
+ * A single meeting-type taxonomy entry declared by the consuming repo.
1148
+ * Each entry names a kind of meeting the project recognizes
1149
+ * (`founders-weekly`, `customer-discovery`, etc.) and supplies the
1150
+ * per-type metadata agents need to route, default, and template that
1151
+ * meeting.
1152
+ *
1153
+ * When `AgentConfigOptions.meetings.meetingTypes` is non-empty, the
1154
+ * `meeting-analysis` bundle renders a "Recognized meeting types"
1155
+ * subsection listing every declared type so agents pick from the
1156
+ * project's vocabulary rather than guessing.
1157
+ *
1158
+ * @see MeetingsConfig
1159
+ * @see ./bundles/meeting-types.ts#renderMeetingTypesSection
1160
+ */
1161
+ interface MeetingType {
1162
+ /**
1163
+ * Stable machine identifier for the meeting type. Used as the
1164
+ * `meeting_type` frontmatter value on meeting notes and as the key
1165
+ * that the future `agenda` bundle will look up when selecting a
1166
+ * pre-meeting template.
1167
+ * @example 'founders-weekly', 'customer-discovery', 'sprint-review'
1168
+ */
1169
+ readonly id: string;
1170
+ /** Human-readable label shown in generated rule content. */
1171
+ readonly label: string;
1172
+ /**
1173
+ * Scope classification — whether the meeting is internal (recurring
1174
+ * or one-off) or external (customer / prospect / partner / other).
1175
+ */
1176
+ readonly scope: MeetingScope;
1177
+ /**
1178
+ * Default scheduled duration in minutes. Optional; agents may use
1179
+ * this when proposing calendar holds or when validating a
1180
+ * transcript's recorded duration against the type's expected
1181
+ * duration.
1182
+ */
1183
+ readonly defaultDurationMinutes?: number;
1184
+ /**
1185
+ * Path to a pre-meeting agenda skeleton for this type, resolved
1186
+ * relative to `MeetingsConfig.agendaTemplateRoot`. Optional — a
1187
+ * type without a template simply has no canned agenda.
1188
+ * @example 'founders-weekly.md', 'customer-discovery/v2.md'
1189
+ */
1190
+ readonly agendaTemplatePath?: string;
1191
+ /**
1192
+ * Human-readable cadence descriptor. Free-form text — agents
1193
+ * surface the string verbatim rather than parsing it.
1194
+ * @example 'weekly', 'every 2 weeks', 'one-off'
1195
+ */
1196
+ readonly cadence?: string;
1197
+ }
1198
+ /**
1199
+ * A single meeting-area entry. Meeting areas provide a coarse
1200
+ * routing map from an `area` frontmatter value on a meeting note to
1201
+ * the sub-tree of the docs root where phase-4 direct edits should
1202
+ * land.
1203
+ *
1204
+ * Example: declaring `{ id: 'product-engineering', label: 'Product &
1205
+ * Engineering', docRoot: 'product' }` tells the `meeting-analysis`
1206
+ * bundle that a meeting whose frontmatter carries
1207
+ * `area: product-engineering` should have its direct edits routed
1208
+ * under `<docsRoot>/product/`.
1209
+ *
1210
+ * When `AgentConfigOptions.meetings.meetingAreas` is non-empty, the
1211
+ * `meeting-analysis` bundle renders an "Area → doc-root mapping"
1212
+ * subsection documenting every declared area and its resolved
1213
+ * destination.
1214
+ *
1215
+ * @see MeetingsConfig
1216
+ * @see ./bundles/meeting-types.ts#renderMeetingTypesSection
1217
+ */
1218
+ interface MeetingArea {
1219
+ /**
1220
+ * Stable machine identifier for the area. Matches the `area`
1221
+ * frontmatter value on meeting notes.
1222
+ * @example 'product-engineering', 'go-to-market', 'operations'
1223
+ */
1224
+ readonly id: string;
1225
+ /** Human-readable label shown in generated rule content. */
1226
+ readonly label: string;
1227
+ /**
1228
+ * Destination folder for phase-4 direct edits on meeting notes
1229
+ * carrying this area. Interpreted **relative to the resolved
1230
+ * docs root** (`AgentPathsConfig.docsRoot`, default
1231
+ * `docs/src/content/docs`). Do not include a leading slash.
1232
+ * @example 'product', 'gtm', 'operations'
1233
+ */
1234
+ readonly docRoot: string;
1235
+ }
1236
+ /**
1237
+ * Meeting-analysis injection points — the set of typed
1238
+ * configurations agents consult when classifying, routing, and
1239
+ * templating a meeting. Every field is optional.
1240
+ *
1241
+ * - `meetingTypes` — the set of meeting types the repo recognizes.
1242
+ * - `meetingAreas` — maps `area` frontmatter to doc-root sub-trees.
1243
+ * - `agendaTemplateRoot` — where pre-meeting agenda skeletons live.
1244
+ *
1245
+ * When supplied, the `meeting-analysis` bundle conditionally renders
1246
+ * two new subsections into the `meeting-processing-workflow` rule —
1247
+ * "Recognized meeting types" (when `meetingTypes` is non-empty) and
1248
+ * "Area → doc-root mapping" (when `meetingAreas` is non-empty).
1249
+ *
1250
+ * @see MeetingType
1251
+ * @see MeetingArea
1252
+ * @see ./bundles/meeting-types.ts#renderMeetingTypesSection
1253
+ */
1254
+ interface MeetingsConfig {
1255
+ /**
1256
+ * Meeting-type taxonomy. An empty or missing list means the
1257
+ * consuming repo does not classify meetings by type; the
1258
+ * `meeting-analysis` bundle falls back to its generic 4-phase
1259
+ * behaviour.
1260
+ */
1261
+ readonly meetingTypes?: ReadonlyArray<MeetingType>;
1262
+ /**
1263
+ * Meeting-area map. An empty or missing list means the consuming
1264
+ * repo does not route meetings by area; phase-4 direct edits
1265
+ * continue to land under the default meetings root.
1266
+ */
1267
+ readonly meetingAreas?: ReadonlyArray<MeetingArea>;
1268
+ /**
1269
+ * Root folder containing pre-meeting agenda-template skeletons.
1270
+ * Resolved at issue-creation time by the (future) `agenda` bundle
1271
+ * when selecting a template for a given `meeting_type`.
1272
+ *
1273
+ * When unset, the `meeting-analysis` bundle documents the default
1274
+ * of `<meetingsRoot>/_agenda-templates` — consumers that wire a
1275
+ * custom `AgentPathsConfig.meetingsRoot` inherit the override
1276
+ * automatically.
1277
+ * @default "<meetingsRoot>/_agenda-templates"
1278
+ */
1279
+ readonly agendaTemplateRoot?: string;
1280
+ }
1123
1281
  /*******************************************************************************
1124
1282
  *
1125
1283
  * AgentConfig Options
@@ -1252,6 +1410,26 @@ interface AgentConfigOptions {
1252
1410
  * @see ./bundles/focus.ts#renderFocusSection
1253
1411
  */
1254
1412
  readonly focus?: FocusConfig;
1413
+ /**
1414
+ * Meeting-analysis injection points — typed configs the
1415
+ * `meeting-analysis` bundle consults when classifying, routing, and
1416
+ * templating meetings. Supplies the meeting-type taxonomy, the
1417
+ * area → doc-root routing map, and the agenda-template root used
1418
+ * by the (future) `agenda` bundle.
1419
+ *
1420
+ * When `meetingTypes` is non-empty, the `meeting-analysis` bundle
1421
+ * appends a "Recognized meeting types" subsection to the
1422
+ * `meeting-processing-workflow` rule. When `meetingAreas` is
1423
+ * non-empty, it appends an "Area → doc-root mapping" subsection.
1424
+ * When both are empty or unset, the generated rule content is
1425
+ * unchanged from the no-config baseline.
1426
+ *
1427
+ * @see MeetingsConfig
1428
+ * @see MeetingType
1429
+ * @see MeetingArea
1430
+ * @see ./bundles/meeting-types.ts#renderMeetingTypesSection
1431
+ */
1432
+ readonly meetings?: MeetingsConfig;
1255
1433
  }
1256
1434
 
1257
1435
  /**
@@ -1542,6 +1720,29 @@ declare const projenBundle: AgentRuleBundle;
1542
1720
  */
1543
1721
  declare function renderFocusSection(focus: FocusConfig | undefined): string;
1544
1722
 
1723
+ /**
1724
+ * Render the markdown subsections appended to the
1725
+ * `meeting-processing-workflow` rule when `AgentConfigOptions.meetings`
1726
+ * is supplied. Returns an empty string when the supplied config has
1727
+ * nothing to render (no meeting types and no meeting areas) so callers
1728
+ * can unconditionally concatenate the result.
1729
+ *
1730
+ * Two subsections are rendered, each gated on its own input array:
1731
+ *
1732
+ * 1. **Recognized meeting types** — rendered when `meetingTypes` is
1733
+ * non-empty. Lists every declared type with its scope, optional
1734
+ * cadence, default duration, and agenda template path. Also
1735
+ * documents the resolved `agendaTemplateRoot`.
1736
+ * 2. **Area → doc-root mapping** — rendered when `meetingAreas` is
1737
+ * non-empty. Lists every declared area with its `id`, label, and
1738
+ * docs-root-relative destination folder.
1739
+ *
1740
+ * Bundles consume the rendered string by appending it to their own
1741
+ * rule content. A caller that has no meeting types and no meeting
1742
+ * areas receives an empty string and can safely concatenate.
1743
+ */
1744
+ declare function renderMeetingTypesSection(meetings: MeetingsConfig | undefined): string;
1745
+
1545
1746
  /**
1546
1747
  * Render the markdown subsection appended to the
1547
1748
  * `issue-label-conventions` rule when `AgentConfigOptions.priorityRules`
@@ -4276,4 +4477,4 @@ declare const COMPLETE_JOB_ID = "complete";
4276
4477
  */
4277
4478
  declare function addBuildCompleteJob(buildWorkflow: BuildWorkflow): void;
4278
4479
 
4279
- export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, type AgentConfigOptions, type AgentExpansionRules, type AgentModel, type AgentPathsConfig, type AgentPlatform, type AgentPlatformOverrides, type AgentProcedure, type AgentRule, type AgentRuleBundle, type AgentRuleScope, type AgentSkill, type AgentSubAgent, type AgentSubAgentPlatformOverrides, type ApproveMergeUpgradeOptions, AstroConfig, type AstroConfigOptions, type AstroIntegrationSpec, AstroOutput, AstroProject, type AstroProjectOptions, type AwsAccount, AwsCdkProject, type AwsCdkProjectOptions, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, type AwsDeploymentTargetOptions, type AwsLocalDeploymentConfig, type AwsOrganization, type AwsRegion, AwsTeardownWorkflow, type AwsTeardownWorkflowOptions, BUILT_IN_BUNDLES, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, type CiDeploymentConfig, type ClassTypeOptions, type ClaudeAutoModeConfig, type ClaudeHookAction, type ClaudeHookEntry, type ClaudeHooksConfig, type ClaudePermissionsConfig, type ClaudeRuleTarget, type ClaudeSandboxConfig, type ClaudeSettingsConfig, type CopilotHandoff, type CursorHookAction, type CursorHooksConfig, type CursorSettingsConfig, DEFAULT_AGENT_PATHS, DEFAULT_PRIORITY_LABELS, DEFAULT_STATUS_LABELS, DEFAULT_TEARDOWN_BRANCH_PATTERNS, DEFAULT_TYPE_LABELS, type DeployWorkflowOptions, type DeploymentMetadata, type FocusArea, type FocusAreaMatch, type FocusConfig, type GitBranch, type GitHubBoardMetadata, type GitHubProjectMetadata, type GitHubSprintMetadata, type IDependencyResolver, JsiiFaker, LAYOUT_ENFORCEMENT, LAYOUT_ROOT_BY_PROJECT_TYPE, type LabelDefinition, type LayoutEnforcement, type LayoutViolation, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MONOREPO_LAYOUT, type McpServerConfig, type McpTransport, type MergeMethod, type MonorepoLayoutRoot, MonorepoProject, type MonorepoProjectOptions, type OrganizationMetadata, PROD_DEPLOY_NAME, PnpmWorkspace, type PnpmWorkspaceOptions, type PriorityRule, ProjectMetadata, type ProjectMetadataOptions, REQUIREMENTS_WRITER_PATHS, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, type RemoteCacheOptions, type RepositoryMetadata, ResetTask, type ResetTaskOptions, type ResolvedAgentPaths, type ResolvedProjectMetadata, STARLIGHT_ROLE, type SlackMetadata, type StarlightEditLink, type StarlightLogo, StarlightProject, type StarlightProjectOptions, type StarlightRole, type StarlightSidebarItem, type StarlightSingletonViolation, type StarlightSocialLink, type SyncLabelsOptions, type TemplateResolveResult, TestRunner, TurboRepo, type TurboRepoOptions, TurboRepoTask, type TurboRepoTaskOptions, TypeScriptConfig, TypeScriptProject, type TypeScriptProjectOptions, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, type VersionKey, Vitest, type VitestConfigOptions, type VitestOptions, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, addSyncLabelsWorkflow, awsCdkBundle, baseBundle, bcmWriterBundle, companyProfileBundle, formatLayoutViolation, formatStarlightSingletonViolation, getLatestEligibleVersion, githubWorkflowBundle, industryDiscoveryBundle, jestBundle, maintenanceAuditBundle, meetingAnalysisBundle, orchestratorBundle, peopleProfileBundle, pnpmBundle, prReviewBundle, projenBundle, renderFocusSection, renderPriorityRulesSection, requirementsAnalystBundle, requirementsReviewerBundle, requirementsWriterBundle, researchPipelineBundle, resolveAgentPaths, resolveAstroProjectOutdir, resolveAwsCdkProjectOutdir, resolveModelAlias, resolveOutdirFromPackageName, resolveTemplateVariables, resolveTypeScriptProjectOutdir, slackBundle, softwareProfileBundle, turborepoBundle, typescriptBundle, validateMonorepoLayout, validateStarlightSingleton, vitestBundle };
4480
+ export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, type AgentConfigOptions, type AgentExpansionRules, type AgentModel, type AgentPathsConfig, type AgentPlatform, type AgentPlatformOverrides, type AgentProcedure, type AgentRule, type AgentRuleBundle, type AgentRuleScope, type AgentSkill, type AgentSubAgent, type AgentSubAgentPlatformOverrides, type ApproveMergeUpgradeOptions, AstroConfig, type AstroConfigOptions, type AstroIntegrationSpec, AstroOutput, AstroProject, type AstroProjectOptions, type AwsAccount, AwsCdkProject, type AwsCdkProjectOptions, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, type AwsDeploymentTargetOptions, type AwsLocalDeploymentConfig, type AwsOrganization, type AwsRegion, AwsTeardownWorkflow, type AwsTeardownWorkflowOptions, BUILT_IN_BUNDLES, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, type CiDeploymentConfig, type ClassTypeOptions, type ClaudeAutoModeConfig, type ClaudeHookAction, type ClaudeHookEntry, type ClaudeHooksConfig, type ClaudePermissionsConfig, type ClaudeRuleTarget, type ClaudeSandboxConfig, type ClaudeSettingsConfig, type CopilotHandoff, type CursorHookAction, type CursorHooksConfig, type CursorSettingsConfig, DEFAULT_AGENT_PATHS, DEFAULT_PRIORITY_LABELS, DEFAULT_STATUS_LABELS, DEFAULT_TEARDOWN_BRANCH_PATTERNS, DEFAULT_TYPE_LABELS, type DeployWorkflowOptions, type DeploymentMetadata, type FocusArea, type FocusAreaMatch, type FocusConfig, type GitBranch, type GitHubBoardMetadata, type GitHubProjectMetadata, type GitHubSprintMetadata, type IDependencyResolver, JsiiFaker, LAYOUT_ENFORCEMENT, LAYOUT_ROOT_BY_PROJECT_TYPE, type LabelDefinition, type LayoutEnforcement, type LayoutViolation, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MONOREPO_LAYOUT, type McpServerConfig, type McpTransport, type MeetingArea, type MeetingScope, type MeetingType, type MeetingsConfig, type MergeMethod, type MonorepoLayoutRoot, MonorepoProject, type MonorepoProjectOptions, type OrganizationMetadata, PROD_DEPLOY_NAME, PnpmWorkspace, type PnpmWorkspaceOptions, type PriorityRule, ProjectMetadata, type ProjectMetadataOptions, REQUIREMENTS_WRITER_PATHS, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, type RemoteCacheOptions, type RepositoryMetadata, ResetTask, type ResetTaskOptions, type ResolvedAgentPaths, type ResolvedProjectMetadata, STARLIGHT_ROLE, type SlackMetadata, type StarlightEditLink, type StarlightLogo, StarlightProject, type StarlightProjectOptions, type StarlightRole, type StarlightSidebarItem, type StarlightSingletonViolation, type StarlightSocialLink, type SyncLabelsOptions, type TemplateResolveResult, TestRunner, TurboRepo, type TurboRepoOptions, TurboRepoTask, type TurboRepoTaskOptions, TypeScriptConfig, TypeScriptProject, type TypeScriptProjectOptions, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, type VersionKey, Vitest, type VitestConfigOptions, type VitestOptions, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, addSyncLabelsWorkflow, awsCdkBundle, baseBundle, bcmWriterBundle, companyProfileBundle, formatLayoutViolation, formatStarlightSingletonViolation, getLatestEligibleVersion, githubWorkflowBundle, industryDiscoveryBundle, jestBundle, maintenanceAuditBundle, meetingAnalysisBundle, orchestratorBundle, peopleProfileBundle, pnpmBundle, prReviewBundle, projenBundle, renderFocusSection, renderMeetingTypesSection, renderPriorityRulesSection, requirementsAnalystBundle, requirementsReviewerBundle, requirementsWriterBundle, researchPipelineBundle, resolveAgentPaths, resolveAstroProjectOutdir, resolveAwsCdkProjectOutdir, resolveModelAlias, resolveOutdirFromPackageName, resolveTemplateVariables, resolveTypeScriptProjectOutdir, slackBundle, softwareProfileBundle, turborepoBundle, typescriptBundle, validateMonorepoLayout, validateStarlightSingleton, vitestBundle };
package/lib/index.d.ts CHANGED
@@ -1169,6 +1169,164 @@ interface FocusConfig {
1169
1169
  */
1170
1170
  readonly agentExpansionRules?: AgentExpansionRules;
1171
1171
  }
1172
+ /*******************************************************************************
1173
+ *
1174
+ * Meetings Config
1175
+ *
1176
+ ******************************************************************************/
1177
+ /**
1178
+ * Scope classifier for a meeting type. Used by the `meeting-analysis`
1179
+ * bundle to reason about where a given meeting belongs (internal vs
1180
+ * external) and, for external meetings, the nature of the other party.
1181
+ *
1182
+ * - `internal-recurring` — recurring internal meeting (weekly standup,
1183
+ * team sync, planning cadence).
1184
+ * - `internal-oneoff` — one-off internal meeting (brainstorm, kickoff,
1185
+ * retro).
1186
+ * - `external-customer` — meeting with an existing paying customer.
1187
+ * - `external-prospect` — meeting with a sales prospect not yet under
1188
+ * contract.
1189
+ * - `external-partner` — meeting with a partner (integration, vendor,
1190
+ * channel).
1191
+ * - `external-other` — any external meeting that does not fit the
1192
+ * customer / prospect / partner buckets.
1193
+ */
1194
+ type MeetingScope = "internal-recurring" | "internal-oneoff" | "external-customer" | "external-prospect" | "external-partner" | "external-other";
1195
+ /**
1196
+ * A single meeting-type taxonomy entry declared by the consuming repo.
1197
+ * Each entry names a kind of meeting the project recognizes
1198
+ * (`founders-weekly`, `customer-discovery`, etc.) and supplies the
1199
+ * per-type metadata agents need to route, default, and template that
1200
+ * meeting.
1201
+ *
1202
+ * When `AgentConfigOptions.meetings.meetingTypes` is non-empty, the
1203
+ * `meeting-analysis` bundle renders a "Recognized meeting types"
1204
+ * subsection listing every declared type so agents pick from the
1205
+ * project's vocabulary rather than guessing.
1206
+ *
1207
+ * @see MeetingsConfig
1208
+ * @see ./bundles/meeting-types.ts#renderMeetingTypesSection
1209
+ */
1210
+ interface MeetingType {
1211
+ /**
1212
+ * Stable machine identifier for the meeting type. Used as the
1213
+ * `meeting_type` frontmatter value on meeting notes and as the key
1214
+ * that the future `agenda` bundle will look up when selecting a
1215
+ * pre-meeting template.
1216
+ * @example 'founders-weekly', 'customer-discovery', 'sprint-review'
1217
+ */
1218
+ readonly id: string;
1219
+ /** Human-readable label shown in generated rule content. */
1220
+ readonly label: string;
1221
+ /**
1222
+ * Scope classification — whether the meeting is internal (recurring
1223
+ * or one-off) or external (customer / prospect / partner / other).
1224
+ */
1225
+ readonly scope: MeetingScope;
1226
+ /**
1227
+ * Default scheduled duration in minutes. Optional; agents may use
1228
+ * this when proposing calendar holds or when validating a
1229
+ * transcript's recorded duration against the type's expected
1230
+ * duration.
1231
+ */
1232
+ readonly defaultDurationMinutes?: number;
1233
+ /**
1234
+ * Path to a pre-meeting agenda skeleton for this type, resolved
1235
+ * relative to `MeetingsConfig.agendaTemplateRoot`. Optional — a
1236
+ * type without a template simply has no canned agenda.
1237
+ * @example 'founders-weekly.md', 'customer-discovery/v2.md'
1238
+ */
1239
+ readonly agendaTemplatePath?: string;
1240
+ /**
1241
+ * Human-readable cadence descriptor. Free-form text — agents
1242
+ * surface the string verbatim rather than parsing it.
1243
+ * @example 'weekly', 'every 2 weeks', 'one-off'
1244
+ */
1245
+ readonly cadence?: string;
1246
+ }
1247
+ /**
1248
+ * A single meeting-area entry. Meeting areas provide a coarse
1249
+ * routing map from an `area` frontmatter value on a meeting note to
1250
+ * the sub-tree of the docs root where phase-4 direct edits should
1251
+ * land.
1252
+ *
1253
+ * Example: declaring `{ id: 'product-engineering', label: 'Product &
1254
+ * Engineering', docRoot: 'product' }` tells the `meeting-analysis`
1255
+ * bundle that a meeting whose frontmatter carries
1256
+ * `area: product-engineering` should have its direct edits routed
1257
+ * under `<docsRoot>/product/`.
1258
+ *
1259
+ * When `AgentConfigOptions.meetings.meetingAreas` is non-empty, the
1260
+ * `meeting-analysis` bundle renders an "Area → doc-root mapping"
1261
+ * subsection documenting every declared area and its resolved
1262
+ * destination.
1263
+ *
1264
+ * @see MeetingsConfig
1265
+ * @see ./bundles/meeting-types.ts#renderMeetingTypesSection
1266
+ */
1267
+ interface MeetingArea {
1268
+ /**
1269
+ * Stable machine identifier for the area. Matches the `area`
1270
+ * frontmatter value on meeting notes.
1271
+ * @example 'product-engineering', 'go-to-market', 'operations'
1272
+ */
1273
+ readonly id: string;
1274
+ /** Human-readable label shown in generated rule content. */
1275
+ readonly label: string;
1276
+ /**
1277
+ * Destination folder for phase-4 direct edits on meeting notes
1278
+ * carrying this area. Interpreted **relative to the resolved
1279
+ * docs root** (`AgentPathsConfig.docsRoot`, default
1280
+ * `docs/src/content/docs`). Do not include a leading slash.
1281
+ * @example 'product', 'gtm', 'operations'
1282
+ */
1283
+ readonly docRoot: string;
1284
+ }
1285
+ /**
1286
+ * Meeting-analysis injection points — the set of typed
1287
+ * configurations agents consult when classifying, routing, and
1288
+ * templating a meeting. Every field is optional.
1289
+ *
1290
+ * - `meetingTypes` — the set of meeting types the repo recognizes.
1291
+ * - `meetingAreas` — maps `area` frontmatter to doc-root sub-trees.
1292
+ * - `agendaTemplateRoot` — where pre-meeting agenda skeletons live.
1293
+ *
1294
+ * When supplied, the `meeting-analysis` bundle conditionally renders
1295
+ * two new subsections into the `meeting-processing-workflow` rule —
1296
+ * "Recognized meeting types" (when `meetingTypes` is non-empty) and
1297
+ * "Area → doc-root mapping" (when `meetingAreas` is non-empty).
1298
+ *
1299
+ * @see MeetingType
1300
+ * @see MeetingArea
1301
+ * @see ./bundles/meeting-types.ts#renderMeetingTypesSection
1302
+ */
1303
+ interface MeetingsConfig {
1304
+ /**
1305
+ * Meeting-type taxonomy. An empty or missing list means the
1306
+ * consuming repo does not classify meetings by type; the
1307
+ * `meeting-analysis` bundle falls back to its generic 4-phase
1308
+ * behaviour.
1309
+ */
1310
+ readonly meetingTypes?: ReadonlyArray<MeetingType>;
1311
+ /**
1312
+ * Meeting-area map. An empty or missing list means the consuming
1313
+ * repo does not route meetings by area; phase-4 direct edits
1314
+ * continue to land under the default meetings root.
1315
+ */
1316
+ readonly meetingAreas?: ReadonlyArray<MeetingArea>;
1317
+ /**
1318
+ * Root folder containing pre-meeting agenda-template skeletons.
1319
+ * Resolved at issue-creation time by the (future) `agenda` bundle
1320
+ * when selecting a template for a given `meeting_type`.
1321
+ *
1322
+ * When unset, the `meeting-analysis` bundle documents the default
1323
+ * of `<meetingsRoot>/_agenda-templates` — consumers that wire a
1324
+ * custom `AgentPathsConfig.meetingsRoot` inherit the override
1325
+ * automatically.
1326
+ * @default "<meetingsRoot>/_agenda-templates"
1327
+ */
1328
+ readonly agendaTemplateRoot?: string;
1329
+ }
1172
1330
  /*******************************************************************************
1173
1331
  *
1174
1332
  * AgentConfig Options
@@ -1301,6 +1459,26 @@ interface AgentConfigOptions {
1301
1459
  * @see ./bundles/focus.ts#renderFocusSection
1302
1460
  */
1303
1461
  readonly focus?: FocusConfig;
1462
+ /**
1463
+ * Meeting-analysis injection points — typed configs the
1464
+ * `meeting-analysis` bundle consults when classifying, routing, and
1465
+ * templating meetings. Supplies the meeting-type taxonomy, the
1466
+ * area → doc-root routing map, and the agenda-template root used
1467
+ * by the (future) `agenda` bundle.
1468
+ *
1469
+ * When `meetingTypes` is non-empty, the `meeting-analysis` bundle
1470
+ * appends a "Recognized meeting types" subsection to the
1471
+ * `meeting-processing-workflow` rule. When `meetingAreas` is
1472
+ * non-empty, it appends an "Area → doc-root mapping" subsection.
1473
+ * When both are empty or unset, the generated rule content is
1474
+ * unchanged from the no-config baseline.
1475
+ *
1476
+ * @see MeetingsConfig
1477
+ * @see MeetingType
1478
+ * @see MeetingArea
1479
+ * @see ./bundles/meeting-types.ts#renderMeetingTypesSection
1480
+ */
1481
+ readonly meetings?: MeetingsConfig;
1304
1482
  }
1305
1483
 
1306
1484
  /**
@@ -1591,6 +1769,29 @@ declare const projenBundle: AgentRuleBundle;
1591
1769
  */
1592
1770
  declare function renderFocusSection(focus: FocusConfig | undefined): string;
1593
1771
 
1772
+ /**
1773
+ * Render the markdown subsections appended to the
1774
+ * `meeting-processing-workflow` rule when `AgentConfigOptions.meetings`
1775
+ * is supplied. Returns an empty string when the supplied config has
1776
+ * nothing to render (no meeting types and no meeting areas) so callers
1777
+ * can unconditionally concatenate the result.
1778
+ *
1779
+ * Two subsections are rendered, each gated on its own input array:
1780
+ *
1781
+ * 1. **Recognized meeting types** — rendered when `meetingTypes` is
1782
+ * non-empty. Lists every declared type with its scope, optional
1783
+ * cadence, default duration, and agenda template path. Also
1784
+ * documents the resolved `agendaTemplateRoot`.
1785
+ * 2. **Area → doc-root mapping** — rendered when `meetingAreas` is
1786
+ * non-empty. Lists every declared area with its `id`, label, and
1787
+ * docs-root-relative destination folder.
1788
+ *
1789
+ * Bundles consume the rendered string by appending it to their own
1790
+ * rule content. A caller that has no meeting types and no meeting
1791
+ * areas receives an empty string and can safely concatenate.
1792
+ */
1793
+ declare function renderMeetingTypesSection(meetings: MeetingsConfig | undefined): string;
1794
+
1594
1795
  /**
1595
1796
  * Render the markdown subsection appended to the
1596
1797
  * `issue-label-conventions` rule when `AgentConfigOptions.priorityRules`
@@ -4325,5 +4526,5 @@ declare const COMPLETE_JOB_ID = "complete";
4325
4526
  */
4326
4527
  declare function addBuildCompleteJob(buildWorkflow: BuildWorkflow): void;
4327
4528
 
4328
- export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, AstroConfig, AstroOutput, AstroProject, AwsCdkProject, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, AwsTeardownWorkflow, BUILT_IN_BUNDLES, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, DEFAULT_AGENT_PATHS, DEFAULT_PRIORITY_LABELS, DEFAULT_STATUS_LABELS, DEFAULT_TEARDOWN_BRANCH_PATTERNS, DEFAULT_TYPE_LABELS, JsiiFaker, LAYOUT_ENFORCEMENT, LAYOUT_ROOT_BY_PROJECT_TYPE, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MONOREPO_LAYOUT, MonorepoProject, PROD_DEPLOY_NAME, PnpmWorkspace, ProjectMetadata, REQUIREMENTS_WRITER_PATHS, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, ResetTask, STARLIGHT_ROLE, StarlightProject, TestRunner, TurboRepo, TurboRepoTask, TypeScriptConfig, TypeScriptProject, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, Vitest, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, addSyncLabelsWorkflow, awsCdkBundle, baseBundle, bcmWriterBundle, companyProfileBundle, formatLayoutViolation, formatStarlightSingletonViolation, getLatestEligibleVersion, githubWorkflowBundle, industryDiscoveryBundle, jestBundle, maintenanceAuditBundle, meetingAnalysisBundle, orchestratorBundle, peopleProfileBundle, pnpmBundle, prReviewBundle, projenBundle, renderFocusSection, renderPriorityRulesSection, requirementsAnalystBundle, requirementsReviewerBundle, requirementsWriterBundle, researchPipelineBundle, resolveAgentPaths, resolveAstroProjectOutdir, resolveAwsCdkProjectOutdir, resolveModelAlias, resolveOutdirFromPackageName, resolveTemplateVariables, resolveTypeScriptProjectOutdir, slackBundle, softwareProfileBundle, turborepoBundle, typescriptBundle, validateMonorepoLayout, validateStarlightSingleton, vitestBundle };
4329
- export type { AgentConfigOptions, AgentExpansionRules, AgentModel, AgentPathsConfig, AgentPlatform, AgentPlatformOverrides, AgentProcedure, AgentRule, AgentRuleBundle, AgentRuleScope, AgentSkill, AgentSubAgent, AgentSubAgentPlatformOverrides, ApproveMergeUpgradeOptions, AstroConfigOptions, AstroIntegrationSpec, AstroProjectOptions, AwsAccount, AwsCdkProjectOptions, AwsDeploymentTargetOptions, AwsLocalDeploymentConfig, AwsOrganization, AwsRegion, AwsTeardownWorkflowOptions, CiDeploymentConfig, ClassTypeOptions, ClaudeAutoModeConfig, ClaudeHookAction, ClaudeHookEntry, ClaudeHooksConfig, ClaudePermissionsConfig, ClaudeRuleTarget, ClaudeSandboxConfig, ClaudeSettingsConfig, CopilotHandoff, CursorHookAction, CursorHooksConfig, CursorSettingsConfig, DeployWorkflowOptions, DeploymentMetadata, FocusArea, FocusAreaMatch, FocusConfig, GitBranch, GitHubBoardMetadata, GitHubProjectMetadata, GitHubSprintMetadata, IDependencyResolver, LabelDefinition, LayoutEnforcement, LayoutViolation, McpServerConfig, McpTransport, MergeMethod, MonorepoLayoutRoot, MonorepoProjectOptions, OrganizationMetadata, PnpmWorkspaceOptions, PriorityRule, ProjectMetadataOptions, RemoteCacheOptions, RepositoryMetadata, ResetTaskOptions, ResolvedAgentPaths, ResolvedProjectMetadata, SlackMetadata, StarlightEditLink, StarlightLogo, StarlightProjectOptions, StarlightRole, StarlightSidebarItem, StarlightSingletonViolation, StarlightSocialLink, SyncLabelsOptions, TemplateResolveResult, TurboRepoOptions, TurboRepoTaskOptions, TypeScriptProjectOptions, VersionKey, VitestConfigOptions, VitestOptions };
4529
+ export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, AstroConfig, AstroOutput, AstroProject, AwsCdkProject, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, AwsTeardownWorkflow, BUILT_IN_BUNDLES, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, DEFAULT_AGENT_PATHS, DEFAULT_PRIORITY_LABELS, DEFAULT_STATUS_LABELS, DEFAULT_TEARDOWN_BRANCH_PATTERNS, DEFAULT_TYPE_LABELS, JsiiFaker, LAYOUT_ENFORCEMENT, LAYOUT_ROOT_BY_PROJECT_TYPE, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MONOREPO_LAYOUT, MonorepoProject, PROD_DEPLOY_NAME, PnpmWorkspace, ProjectMetadata, REQUIREMENTS_WRITER_PATHS, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, ResetTask, STARLIGHT_ROLE, StarlightProject, TestRunner, TurboRepo, TurboRepoTask, TypeScriptConfig, TypeScriptProject, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, Vitest, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, addSyncLabelsWorkflow, awsCdkBundle, baseBundle, bcmWriterBundle, companyProfileBundle, formatLayoutViolation, formatStarlightSingletonViolation, getLatestEligibleVersion, githubWorkflowBundle, industryDiscoveryBundle, jestBundle, maintenanceAuditBundle, meetingAnalysisBundle, orchestratorBundle, peopleProfileBundle, pnpmBundle, prReviewBundle, projenBundle, renderFocusSection, renderMeetingTypesSection, renderPriorityRulesSection, requirementsAnalystBundle, requirementsReviewerBundle, requirementsWriterBundle, researchPipelineBundle, resolveAgentPaths, resolveAstroProjectOutdir, resolveAwsCdkProjectOutdir, resolveModelAlias, resolveOutdirFromPackageName, resolveTemplateVariables, resolveTypeScriptProjectOutdir, slackBundle, softwareProfileBundle, turborepoBundle, typescriptBundle, validateMonorepoLayout, validateStarlightSingleton, vitestBundle };
4530
+ export type { AgentConfigOptions, AgentExpansionRules, AgentModel, AgentPathsConfig, AgentPlatform, AgentPlatformOverrides, AgentProcedure, AgentRule, AgentRuleBundle, AgentRuleScope, AgentSkill, AgentSubAgent, AgentSubAgentPlatformOverrides, ApproveMergeUpgradeOptions, AstroConfigOptions, AstroIntegrationSpec, AstroProjectOptions, AwsAccount, AwsCdkProjectOptions, AwsDeploymentTargetOptions, AwsLocalDeploymentConfig, AwsOrganization, AwsRegion, AwsTeardownWorkflowOptions, CiDeploymentConfig, ClassTypeOptions, ClaudeAutoModeConfig, ClaudeHookAction, ClaudeHookEntry, ClaudeHooksConfig, ClaudePermissionsConfig, ClaudeRuleTarget, ClaudeSandboxConfig, ClaudeSettingsConfig, CopilotHandoff, CursorHookAction, CursorHooksConfig, CursorSettingsConfig, DeployWorkflowOptions, DeploymentMetadata, FocusArea, FocusAreaMatch, FocusConfig, GitBranch, GitHubBoardMetadata, GitHubProjectMetadata, GitHubSprintMetadata, IDependencyResolver, LabelDefinition, LayoutEnforcement, LayoutViolation, McpServerConfig, McpTransport, MeetingArea, MeetingScope, MeetingType, MeetingsConfig, MergeMethod, MonorepoLayoutRoot, MonorepoProjectOptions, OrganizationMetadata, PnpmWorkspaceOptions, PriorityRule, ProjectMetadataOptions, RemoteCacheOptions, RepositoryMetadata, ResetTaskOptions, ResolvedAgentPaths, ResolvedProjectMetadata, SlackMetadata, StarlightEditLink, StarlightLogo, StarlightProjectOptions, StarlightRole, StarlightSidebarItem, StarlightSingletonViolation, StarlightSocialLink, SyncLabelsOptions, TemplateResolveResult, TurboRepoOptions, TurboRepoTaskOptions, TypeScriptProjectOptions, VersionKey, VitestConfigOptions, VitestOptions };
package/lib/index.js CHANGED
@@ -244,6 +244,7 @@ __export(index_exports, {
244
244
  prReviewBundle: () => prReviewBundle,
245
245
  projenBundle: () => projenBundle,
246
246
  renderFocusSection: () => renderFocusSection,
247
+ renderMeetingTypesSection: () => renderMeetingTypesSection,
247
248
  renderPriorityRulesSection: () => renderPriorityRulesSection,
248
249
  requirementsAnalystBundle: () => requirementsAnalystBundle,
249
250
  requirementsReviewerBundle: () => requirementsReviewerBundle,
@@ -14702,6 +14703,70 @@ function renderFocusSection(focus) {
14702
14703
  return lines.join("\n");
14703
14704
  }
14704
14705
 
14706
+ // src/agent/bundles/meeting-types.ts
14707
+ var DEFAULT_AGENDA_TEMPLATE_ROOT = "<meetingsRoot>/_agenda-templates";
14708
+ function renderMeetingTypesSection(meetings) {
14709
+ if (!meetings) {
14710
+ return "";
14711
+ }
14712
+ const types = meetings.meetingTypes ?? [];
14713
+ const areas = meetings.meetingAreas ?? [];
14714
+ if (types.length === 0 && areas.length === 0) {
14715
+ return "";
14716
+ }
14717
+ const sections = [];
14718
+ if (types.length > 0) {
14719
+ sections.push(renderMeetingTypes(types, meetings.agendaTemplateRoot));
14720
+ }
14721
+ if (areas.length > 0) {
14722
+ sections.push(renderMeetingAreas(areas));
14723
+ }
14724
+ return sections.join("\n\n");
14725
+ }
14726
+ function renderMeetingTypes(types, agendaTemplateRoot) {
14727
+ const resolvedRoot = agendaTemplateRoot ?? DEFAULT_AGENDA_TEMPLATE_ROOT;
14728
+ const lines = [
14729
+ "## Recognized meeting types",
14730
+ "",
14731
+ "This project declares a meeting-type taxonomy through",
14732
+ "`AgentConfigOptions.meetings.meetingTypes`. When classifying a",
14733
+ "meeting transcript, pick the `id` from this list that best fits the",
14734
+ "meeting; do **not** invent new type identifiers. Agenda-template",
14735
+ `paths below are resolved relative to \`${resolvedRoot}\`.`,
14736
+ "",
14737
+ "| ID | Label | Scope | Cadence | Default duration | Agenda template |",
14738
+ "|----|-------|-------|---------|------------------|-----------------|"
14739
+ ];
14740
+ for (const type of types) {
14741
+ const cadence = type.cadence ? `\`${type.cadence}\`` : "\u2014";
14742
+ const duration = type.defaultDurationMinutes !== void 0 ? `${type.defaultDurationMinutes} min` : "\u2014";
14743
+ const template = type.agendaTemplatePath ? `\`${type.agendaTemplatePath}\`` : "\u2014";
14744
+ lines.push(
14745
+ `| \`${type.id}\` | ${type.label} | \`${type.scope}\` | ${cadence} | ${duration} | ${template} |`
14746
+ );
14747
+ }
14748
+ return lines.join("\n");
14749
+ }
14750
+ function renderMeetingAreas(areas) {
14751
+ const lines = [
14752
+ "## Area \u2192 doc-root mapping",
14753
+ "",
14754
+ "This project declares a meeting-area routing map through",
14755
+ "`AgentConfigOptions.meetings.meetingAreas`. When a meeting note's",
14756
+ "frontmatter carries an `area:` value matching an `id` below, route",
14757
+ "phase-4 direct edits into the corresponding sub-tree of the docs",
14758
+ "root (`AgentPathsConfig.docsRoot`). Meetings whose `area` does not",
14759
+ "match any declared entry fall back to the default meetings root.",
14760
+ "",
14761
+ "| Area ID | Label | Doc-root sub-folder |",
14762
+ "|---------|-------|---------------------|"
14763
+ ];
14764
+ for (const area of areas) {
14765
+ lines.push(`| \`${area.id}\` | ${area.label} | \`${area.docRoot}\` |`);
14766
+ }
14767
+ return lines.join("\n");
14768
+ }
14769
+
14705
14770
  // src/agent/bundles/priority-rules.ts
14706
14771
  function renderPriorityRulesSection(rules) {
14707
14772
  if (rules.length === 0) {
@@ -15686,6 +15751,22 @@ ${section}`
15686
15751
 
15687
15752
  ---
15688
15753
 
15754
+ ${section}`
15755
+ });
15756
+ }
15757
+ }
15758
+ }
15759
+ if (this.options.meetings) {
15760
+ const meetingRule = ruleMap.get("meeting-processing-workflow");
15761
+ if (meetingRule) {
15762
+ const section = renderMeetingTypesSection(this.options.meetings);
15763
+ if (section.length > 0) {
15764
+ ruleMap.set("meeting-processing-workflow", {
15765
+ ...meetingRule,
15766
+ content: `${meetingRule.content}
15767
+
15768
+ ---
15769
+
15689
15770
  ${section}`
15690
15771
  });
15691
15772
  }
@@ -18503,6 +18584,7 @@ var TypeScriptConfig = class extends import_projen22.Component {
18503
18584
  prReviewBundle,
18504
18585
  projenBundle,
18505
18586
  renderFocusSection,
18587
+ renderMeetingTypesSection,
18506
18588
  renderPriorityRulesSection,
18507
18589
  requirementsAnalystBundle,
18508
18590
  requirementsReviewerBundle,