@codedrifters/configulator 0.0.174 → 0.0.176

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
@@ -888,6 +888,12 @@ declare const pnpmBundle: AgentRuleBundle;
888
888
  */
889
889
  declare const projenBundle: AgentRuleBundle;
890
890
 
891
+ /**
892
+ * Slack bundle — opt-in via `includeBundles: ["slack"]`.
893
+ * Never auto-detected (no Slack dependency to introspect).
894
+ */
895
+ declare const slackBundle: AgentRuleBundle;
896
+
891
897
  /**
892
898
  * Turborepo bundle — auto-detected when the TurboRepo component is present.
893
899
  */
@@ -2838,4 +2844,4 @@ declare const COMPLETE_JOB_ID = "complete";
2838
2844
  */
2839
2845
  declare function addBuildCompleteJob(buildWorkflow: BuildWorkflow): void;
2840
2846
 
2841
- export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, type AgentConfigOptions, type AgentModel, type AgentPlatform, type AgentPlatformOverrides, type AgentRule, type AgentRuleBundle, type AgentRuleScope, type AgentSkill, type AgentSubAgent, type AgentSubAgentPlatformOverrides, type ApproveMergeUpgradeOptions, type AwsAccount, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, type AwsDeploymentTargetOptions, type AwsLocalDeploymentConfig, type AwsOrganization, type AwsRegion, 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, type DeployWorkflowOptions, type DeploymentMetadata, type GitBranch, type GitHubBoardMetadata, type GitHubProjectMetadata, type GitHubSprintMetadata, type IDependencyResolver, JsiiFaker, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, type McpServerConfig, type McpTransport, type MergeMethod, MonorepoProject, type MonorepoProjectOptions, type OrganizationMetadata, PROD_DEPLOY_NAME, PnpmWorkspace, type PnpmWorkspaceOptions, ProjectMetadata, type ProjectMetadataOptions, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, type RemoteCacheOptions, type RepositoryMetadata, ResetTask, type ResetTaskOptions, type ResolvedProjectMetadata, type SlackMetadata, 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, awsCdkBundle, baseBundle, getLatestEligibleVersion, githubWorkflowBundle, jestBundle, pnpmBundle, projenBundle, resolveTemplateVariables, turborepoBundle, typescriptBundle, vitestBundle };
2847
+ export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, type AgentConfigOptions, type AgentModel, type AgentPlatform, type AgentPlatformOverrides, type AgentRule, type AgentRuleBundle, type AgentRuleScope, type AgentSkill, type AgentSubAgent, type AgentSubAgentPlatformOverrides, type ApproveMergeUpgradeOptions, type AwsAccount, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, type AwsDeploymentTargetOptions, type AwsLocalDeploymentConfig, type AwsOrganization, type AwsRegion, 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, type DeployWorkflowOptions, type DeploymentMetadata, type GitBranch, type GitHubBoardMetadata, type GitHubProjectMetadata, type GitHubSprintMetadata, type IDependencyResolver, JsiiFaker, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, type McpServerConfig, type McpTransport, type MergeMethod, MonorepoProject, type MonorepoProjectOptions, type OrganizationMetadata, PROD_DEPLOY_NAME, PnpmWorkspace, type PnpmWorkspaceOptions, ProjectMetadata, type ProjectMetadataOptions, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, type RemoteCacheOptions, type RepositoryMetadata, ResetTask, type ResetTaskOptions, type ResolvedProjectMetadata, type SlackMetadata, 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, awsCdkBundle, baseBundle, getLatestEligibleVersion, githubWorkflowBundle, jestBundle, pnpmBundle, projenBundle, resolveTemplateVariables, slackBundle, turborepoBundle, typescriptBundle, vitestBundle };
package/lib/index.d.ts CHANGED
@@ -937,6 +937,12 @@ declare const pnpmBundle: AgentRuleBundle;
937
937
  */
938
938
  declare const projenBundle: AgentRuleBundle;
939
939
 
940
+ /**
941
+ * Slack bundle — opt-in via `includeBundles: ["slack"]`.
942
+ * Never auto-detected (no Slack dependency to introspect).
943
+ */
944
+ declare const slackBundle: AgentRuleBundle;
945
+
940
946
  /**
941
947
  * Turborepo bundle — auto-detected when the TurboRepo component is present.
942
948
  */
@@ -2887,5 +2893,5 @@ declare const COMPLETE_JOB_ID = "complete";
2887
2893
  */
2888
2894
  declare function addBuildCompleteJob(buildWorkflow: BuildWorkflow): void;
2889
2895
 
2890
- export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, BUILT_IN_BUNDLES, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, JsiiFaker, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MonorepoProject, PROD_DEPLOY_NAME, PnpmWorkspace, ProjectMetadata, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, ResetTask, TestRunner, TurboRepo, TurboRepoTask, TypeScriptConfig, TypeScriptProject, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, Vitest, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, awsCdkBundle, baseBundle, getLatestEligibleVersion, githubWorkflowBundle, jestBundle, pnpmBundle, projenBundle, resolveTemplateVariables, turborepoBundle, typescriptBundle, vitestBundle };
2896
+ export { AGENT_MODEL, AGENT_PLATFORM, AGENT_RULE_SCOPE, AgentConfig, AwsDeployWorkflow, AwsDeploymentConfig, AwsDeploymentTarget, BUILT_IN_BUNDLES, CLAUDE_RULE_TARGET, COMPLETE_JOB_ID, JsiiFaker, MCP_TRANSPORT, MERGE_METHODS, MIMIMUM_RELEASE_AGE, MINIMUM_RELEASE_AGE, MonorepoProject, PROD_DEPLOY_NAME, PnpmWorkspace, ProjectMetadata, ROOT_CI_TASK_NAME, ROOT_TURBO_TASK_NAME, ResetTask, TestRunner, TurboRepo, TurboRepoTask, TypeScriptConfig, TypeScriptProject, VERSION, VERSION_KEYS_SKIP, VERSION_NPM_PACKAGES, VSCodeConfig, Vitest, addApproveMergeUpgradeWorkflow, addBuildCompleteJob, awsCdkBundle, baseBundle, getLatestEligibleVersion, githubWorkflowBundle, jestBundle, pnpmBundle, projenBundle, resolveTemplateVariables, slackBundle, turborepoBundle, typescriptBundle, vitestBundle };
2891
2897
  export type { AgentConfigOptions, AgentModel, AgentPlatform, AgentPlatformOverrides, AgentRule, AgentRuleBundle, AgentRuleScope, AgentSkill, AgentSubAgent, AgentSubAgentPlatformOverrides, ApproveMergeUpgradeOptions, AwsAccount, AwsDeploymentTargetOptions, AwsLocalDeploymentConfig, AwsOrganization, AwsRegion, CiDeploymentConfig, ClassTypeOptions, ClaudeAutoModeConfig, ClaudeHookAction, ClaudeHookEntry, ClaudeHooksConfig, ClaudePermissionsConfig, ClaudeRuleTarget, ClaudeSandboxConfig, ClaudeSettingsConfig, CopilotHandoff, CursorHookAction, CursorHooksConfig, CursorSettingsConfig, DeployWorkflowOptions, DeploymentMetadata, GitBranch, GitHubBoardMetadata, GitHubProjectMetadata, GitHubSprintMetadata, IDependencyResolver, McpServerConfig, McpTransport, MergeMethod, MonorepoProjectOptions, OrganizationMetadata, PnpmWorkspaceOptions, ProjectMetadataOptions, RemoteCacheOptions, RepositoryMetadata, ResetTaskOptions, ResolvedProjectMetadata, SlackMetadata, TemplateResolveResult, TurboRepoOptions, TurboRepoTaskOptions, TypeScriptProjectOptions, VersionKey, VitestConfigOptions, VitestOptions };
package/lib/index.js CHANGED
@@ -217,6 +217,7 @@ __export(index_exports, {
217
217
  pnpmBundle: () => pnpmBundle,
218
218
  projenBundle: () => projenBundle,
219
219
  resolveTemplateVariables: () => resolveTemplateVariables,
220
+ slackBundle: () => slackBundle,
220
221
  turborepoBundle: () => turborepoBundle,
221
222
  typescriptBundle: () => typescriptBundle,
222
223
  vitestBundle: () => vitestBundle
@@ -322,12 +323,16 @@ var awsCdkBundle = {
322
323
  "## Filename / Class Name Matching",
323
324
  "",
324
325
  "- Kebab-case filenames must mirror PascalCase class names (e.g., `my-construct.ts` \u2192 `MyConstruct`)",
326
+ "- Name props interfaces `ClassNameProps` (e.g., `MyConstructProps`)",
325
327
  "- One primary construct per file; supporting types (props interface, enums) live in the same file",
326
328
  "- Test files follow the same pattern: `my-construct.spec.ts`",
329
+ "- When renaming, prefer renaming the class to match the filename",
327
330
  "",
328
331
  "## Cross-Stack Lookup Patterns",
329
332
  "",
330
- "- Lookups live on **service classes**, not component/construct classes",
333
+ "- Lookups live on **service classes**, not component/construct classes \u2014 do not add `fromConstruct()` or similar lookup methods to component classes",
334
+ "- Use `*.of(this)` for stack or service references where the pattern exists in the codebase",
335
+ "- Within services, prefer creating resources in protected methods; expose retrieval via static methods on the owning service",
331
336
  "- Use static methods for cross-stack lookups so consumers don't need an instance:",
332
337
  "",
333
338
  "```typescript",
@@ -353,6 +358,11 @@ var awsCdkBundle = {
353
358
  "- Use SSM parameters for cross-stack references when needed",
354
359
  "- Do not pass values between stacks; use SSM parameters instead",
355
360
  "",
361
+ "## Lambda Handlers (NodejsFunction)",
362
+ "",
363
+ "- When adding a `NodejsFunction` with a bundled handler, ensure the `entry` path is explicitly configured",
364
+ "- Verify the entry is included in the build tool config (e.g., tsup entry list) so the runtime can find the handler",
365
+ "",
356
366
  "## CDK Testing",
357
367
  "",
358
368
  "- Mock `Code.fromAsset` in any test file that synthesizes CDK stacks",
@@ -514,12 +524,31 @@ var baseBundle = {
514
524
  },
515
525
  {
516
526
  name: "cursor-projen-restrictions",
517
- description: "Cursor must not run projen or package-manager install commands",
527
+ description: "Cursor must not run projen, build, test, or package-manager commands",
518
528
  scope: AGENT_RULE_SCOPE.ALWAYS,
519
529
  content: [
520
- "# Projen Restrictions",
530
+ "# Projen & Development Command Restrictions",
531
+ "",
532
+ "**Never** run any of the following commands. Instead, tell the user which commands to run and why.",
533
+ "",
534
+ "## Prohibited Commands",
535
+ "",
536
+ "- `npx projen` \u2014 synthesize project files",
537
+ "- `pnpm install` / `pnpm i` \u2014 install dependencies",
538
+ "- `pnpm build` / `pnpm build:all` \u2014 build the project",
539
+ "- `pnpm test` / `pnpm --filter ... test` \u2014 run tests",
540
+ "- `pnpm eslint` / `pnpm --filter ... eslint` \u2014 run linting",
541
+ "- `pnpm compile` / `pnpm --filter ... compile` \u2014 compile packages",
542
+ "- `pnpm reset` / `pnpm reset:all` \u2014 reset build artifacts",
543
+ "- Any `vitest`, `tsup`, `rollup`, or `turbo` commands",
544
+ "",
545
+ "## What to Do Instead",
546
+ "",
547
+ "After making changes that need validation, tell the user the specific commands to run:",
521
548
  "",
522
- "- **Do not run `npx projen`, `pnpm install`, or `pnpm i`** \u2014 after modifying Projen configuration, the user should run these commands locally."
549
+ "1. **After projen config changes** \u2014 tell the user to run `npx projen && pnpm install`",
550
+ "2. **After source code changes** \u2014 tell the user to run `pnpm --filter @codedrifters/<package> test`",
551
+ "3. **After multi-package changes** \u2014 tell the user to run `pnpm build:all`"
523
552
  ].join("\n"),
524
553
  platforms: {
525
554
  claude: { exclude: true }
@@ -573,7 +602,7 @@ var baseBundle = {
573
602
  "## Code Formatting",
574
603
  "",
575
604
  "- Use **Prettier** for formatting (runs automatically on save in VS Code)",
576
- "- Always use curly braces for control flow, even single-line statements",
605
+ "- Always use curly braces for control flow, even single-line statements; use multi-line format for complex conditionals",
577
606
  "- Prefer `const` over `let`; avoid `var`",
578
607
  "- Use trailing commas in multi-line objects/arrays",
579
608
  "",
@@ -587,13 +616,15 @@ var baseBundle = {
587
616
  "",
588
617
  "## Import Conventions",
589
618
  "",
590
- "- **Always use ES modules** (`import`/`export`), never `require()`",
619
+ "- **Always use ES modules** (`import`/`export`), never `require()` (exception: `.projenrc.ts` files where `require` is allowed)",
591
620
  "- Import order:",
592
621
  " 1. Built-in Node.js modules (e.g., `node:path`, `node:fs`)",
593
622
  " 2. External dependencies (alphabetically sorted)",
594
623
  " 3. Internal imports (relative paths)",
595
624
  "- Group imports with blank lines between groups",
596
625
  "- Alphabetize imports within each group (case-insensitive)",
626
+ "- Use absolute imports from package root when possible",
627
+ "- Avoid duplicate imports (`import/no-duplicates`); all imports must be resolvable (`import/no-unresolved`)",
597
628
  "",
598
629
  "## Error Handling",
599
630
  "",
@@ -825,13 +856,15 @@ var githubWorkflowBundle = {
825
856
  "",
826
857
  "When the user says **open a PR** (or similar), follow these steps exactly:",
827
858
  "",
828
- "1. **Check for uncommitted changes** \u2014 if any exist, commit them with a conventional commit message",
829
- "2. **Pull and rebase from the default branch** \u2014 run `git pull origin {{repository.defaultBranch}} --rebase` to incorporate the latest changes and resolve any conflicts before pushing",
830
- "3. **Push the branch** to origin: `git push -u origin <branch>`",
831
- "4. **Create the PR** using `gh pr create`:",
859
+ "1. **Regenerate project files** \u2014 run `npx projen` then `pnpm install` to ensure all generated files are up to date. Check `git diff` \u2014 if there are changes, commit them before proceeding.",
860
+ "2. **Run the full monorepo build** \u2014 run `pnpm build:all` to compile, lint, and test all packages (mirrors the CI pipeline). This command requires the user to be authenticated to AWS on the prod account used for Turborepo remote caching (`readonlyaccess-prod-525259625215-us-east-1` profile). If the command fails due to AWS credentials, ask the user to authenticate first. If the build produces changes to turbo inputs (typically snapshot files or ESLint auto-fixes), commit those changes and run `pnpm build:all` again \u2014 the build must complete cleanly with no uncommitted changes.",
861
+ "3. **Check for uncommitted changes** \u2014 if any exist, commit them with a conventional commit message",
862
+ "4. **Pull and rebase from the default branch** \u2014 run `git pull origin {{repository.defaultBranch}} --rebase` to incorporate the latest changes and resolve any conflicts before pushing",
863
+ "5. **Push the branch** to origin: `git push -u origin <branch>`",
864
+ "6. **Create the PR** using `gh pr create`:",
832
865
  " - **Title**: use a conventional commit style title (e.g., `feat(scope): short description`)",
833
866
  " - **Body**: include `Closes #<issue-number>` (derived from the branch name) and a brief summary of changes",
834
- "5. **Enable auto-merge with squash** \u2014 use `gh pr merge --auto --squash` with the merge commit message:",
867
+ "7. **Enable auto-merge with squash** \u2014 use `gh pr merge --auto --squash` with the merge commit message:",
835
868
  "",
836
869
  "```",
837
870
  "gh pr merge --auto --squash --subject '<conventional-commit-title>' --body '<extended-description>'",
@@ -1063,6 +1096,185 @@ var projenBundle = {
1063
1096
  description: "Projen conventions, synthesis workflow, .projenrc.ts patterns",
1064
1097
  appliesWhen: (project) => hasDep(project, "projen"),
1065
1098
  rules: [
1099
+ {
1100
+ name: "development-commands",
1101
+ description: "Projen development commands for building, testing, linting, and validating changes",
1102
+ scope: AGENT_RULE_SCOPE.ALWAYS,
1103
+ content: [
1104
+ "# Development Commands",
1105
+ "",
1106
+ "This project uses Projen to manage configuration and Turborepo to orchestrate builds across the monorepo. Run all commands from the **repository root** unless otherwise noted.",
1107
+ "",
1108
+ "## Synthesizing Projen Configuration",
1109
+ "",
1110
+ "After modifying any file in `projenrc/` or `.projenrc.ts`, regenerate project files:",
1111
+ "",
1112
+ "```sh",
1113
+ "npx projen",
1114
+ "pnpm install",
1115
+ "```",
1116
+ "",
1117
+ "Both steps are required \u2014 `npx projen` regenerates files, `pnpm install` updates the lockfile to match.",
1118
+ "",
1119
+ "## Building",
1120
+ "",
1121
+ "**Full monorepo build** (compile + test + package, all sub-packages via Turborepo):",
1122
+ "",
1123
+ "```sh",
1124
+ "pnpm build:all",
1125
+ "```",
1126
+ "",
1127
+ "**Root project only** (synthesize + compile + lint):",
1128
+ "",
1129
+ "```sh",
1130
+ "pnpm build",
1131
+ "```",
1132
+ "",
1133
+ "**Single sub-package** (compile only):",
1134
+ "",
1135
+ "```sh",
1136
+ "pnpm --filter @codedrifters/<package> compile",
1137
+ "```",
1138
+ "",
1139
+ "Replace `<package>` with `configulator`, `constructs`, or `utils`.",
1140
+ "",
1141
+ "## Testing",
1142
+ "",
1143
+ "**Run tests for a single sub-package:**",
1144
+ "",
1145
+ "```sh",
1146
+ "pnpm --filter @codedrifters/<package> test",
1147
+ "```",
1148
+ "",
1149
+ "This runs ESLint + Vitest for the specified package.",
1150
+ "",
1151
+ "**Run only Vitest (skip lint) in a sub-package:**",
1152
+ "",
1153
+ "```sh",
1154
+ "cd packages/@codedrifters/<package>",
1155
+ "pnpm exec vitest run",
1156
+ "```",
1157
+ "",
1158
+ "**Run a specific test file:**",
1159
+ "",
1160
+ "```sh",
1161
+ "cd packages/@codedrifters/<package>",
1162
+ "pnpm exec vitest run src/path/to/file.test.ts",
1163
+ "```",
1164
+ "",
1165
+ "## Linting",
1166
+ "",
1167
+ "**Lint the root project:**",
1168
+ "",
1169
+ "```sh",
1170
+ "pnpm eslint",
1171
+ "```",
1172
+ "",
1173
+ "**Lint a single sub-package:**",
1174
+ "",
1175
+ "```sh",
1176
+ "pnpm --filter @codedrifters/<package> eslint",
1177
+ "```",
1178
+ "",
1179
+ "## Resetting Build Artifacts",
1180
+ "",
1181
+ "**Reset everything** (all packages + root):",
1182
+ "",
1183
+ "```sh",
1184
+ "pnpm reset:all",
1185
+ "```",
1186
+ "",
1187
+ "**Reset root only:**",
1188
+ "",
1189
+ "```sh",
1190
+ "pnpm reset",
1191
+ "```",
1192
+ "",
1193
+ "## Validating Changes Are Complete",
1194
+ "",
1195
+ "After finishing implementation work, validate that changes are correct by running the appropriate commands depending on what was changed:",
1196
+ "",
1197
+ "1. **Projen config changes** (`projenrc/`, `.projenrc.ts`):",
1198
+ " - Run `npx projen` then `pnpm install`",
1199
+ " - Verify no unexpected generated file changes with `git diff`",
1200
+ "",
1201
+ "2. **Source code changes** (in a sub-package):",
1202
+ " - Compile: `pnpm --filter @codedrifters/<package> compile`",
1203
+ " - Test: `pnpm --filter @codedrifters/<package> test`",
1204
+ "",
1205
+ "3. **Changes spanning multiple packages**:",
1206
+ " - Run `pnpm build:all` to validate the full monorepo build",
1207
+ "",
1208
+ "4. **Root-level changes** (projenrc, root config):",
1209
+ " - Run `pnpm build` to validate root synthesis + compilation + lint",
1210
+ "",
1211
+ "## Command Reference",
1212
+ "",
1213
+ "| Task | Command |",
1214
+ "|------|---------|",
1215
+ "| Synthesize projen | `npx projen` |",
1216
+ "| Install deps | `pnpm install` |",
1217
+ "| Full monorepo build | `pnpm build:all` |",
1218
+ "| Root build only | `pnpm build` |",
1219
+ "| Compile one package | `pnpm --filter @codedrifters/<pkg> compile` |",
1220
+ "| Test one package | `pnpm --filter @codedrifters/<pkg> test` |",
1221
+ "| Lint one package | `pnpm --filter @codedrifters/<pkg> eslint` |",
1222
+ "| Lint root | `pnpm eslint` |",
1223
+ "| Reset all artifacts | `pnpm reset:all` |"
1224
+ ].join("\n"),
1225
+ tags: ["workflow"]
1226
+ },
1227
+ {
1228
+ name: "agent-rules-customization",
1229
+ description: "How to customize agent rules for this repo via the Projen project definition",
1230
+ scope: AGENT_RULE_SCOPE.FILE_PATTERN,
1231
+ filePatterns: [
1232
+ "projenrc/**/*.ts",
1233
+ ".projenrc.ts",
1234
+ ".claude/rules/*.md",
1235
+ ".cursor/rules/*.mdc",
1236
+ "CLAUDE.md"
1237
+ ],
1238
+ content: [
1239
+ "# Customizing Agent Rules",
1240
+ "",
1241
+ "Agent rules for Claude and Cursor are **generated** by configulator's `AgentConfig` component. The generated output files (`.claude/rules/`, `.cursor/rules/`, `CLAUDE.md`) must not be edited directly \u2014 they are overwritten on every `npx projen` run.",
1242
+ "",
1243
+ "## Adding Repo-Specific Rules",
1244
+ "",
1245
+ "Rules that only apply to this repository should be added to the `agentConfig.rules` array in the Projen project definition (`.projenrc.ts` or `projenrc/*.ts`):",
1246
+ "",
1247
+ "```typescript",
1248
+ "agentConfig: {",
1249
+ " rules: [",
1250
+ " {",
1251
+ " name: 'my-repo-rule',",
1252
+ " description: 'What this rule does',",
1253
+ " scope: AGENT_RULE_SCOPE.ALWAYS, // or FILE_PATTERN with filePatterns",
1254
+ " content: '# My Rule\\n\\n- Guideline 1\\n- Guideline 2',",
1255
+ " },",
1256
+ " ],",
1257
+ "}",
1258
+ "```",
1259
+ "",
1260
+ "## Extending Existing Bundle Rules",
1261
+ "",
1262
+ "To append repo-specific content to a rule provided by a configulator bundle (without replacing it), use `agentConfig.ruleExtensions`:",
1263
+ "",
1264
+ "```typescript",
1265
+ "agentConfig: {",
1266
+ " ruleExtensions: {",
1267
+ " 'typescript-conventions': '## Additional Guidelines\\n\\n- My custom guideline',",
1268
+ " },",
1269
+ "}",
1270
+ "```",
1271
+ "",
1272
+ "## After Any Change",
1273
+ "",
1274
+ "Run `npx projen` then `pnpm install` to regenerate the output files."
1275
+ ].join("\n"),
1276
+ tags: ["workflow"]
1277
+ },
1066
1278
  {
1067
1279
  name: "projen-conventions",
1068
1280
  description: "Projen configuration patterns and best practices",
@@ -1147,6 +1359,46 @@ var projenBundle = {
1147
1359
  ]
1148
1360
  };
1149
1361
 
1362
+ // src/agent/bundles/slack.ts
1363
+ var slackBundle = {
1364
+ name: "slack",
1365
+ description: "Slack MCP message formatting and best practices",
1366
+ appliesWhen: () => false,
1367
+ rules: [
1368
+ {
1369
+ name: "slack-message-formatting",
1370
+ description: "Format Slack messages with explicit links so bullets and labels render correctly",
1371
+ scope: AGENT_RULE_SCOPE.ALWAYS,
1372
+ content: [
1373
+ "# Slack Message Formatting",
1374
+ "",
1375
+ "When composing or sending messages to Slack (e.g., via Slack MCP tools like `slack_send_message`), use formatting that Slack's mrkdwn parser renders correctly.",
1376
+ "",
1377
+ "## Rules",
1378
+ "",
1379
+ "1. **Use Slack's explicit link syntax** for any link in a message:",
1380
+ " - Format: `<https://example.com|display text>`",
1381
+ " - Text outside the angle brackets (bullets, labels) stays separate and won't merge into the link",
1382
+ "",
1383
+ "2. **Do not rely on auto-linkification** when the message has bullets or labels before URLs \u2014 auto-linked URLs can break or merge with surrounding text",
1384
+ "",
1385
+ "3. **Put each list item on its own line** with a newline between items so list structure is clear",
1386
+ "",
1387
+ "4. **Example \u2014 preferred:**",
1388
+ " ```",
1389
+ " Status update:",
1390
+ "",
1391
+ " \u2022 Feature A: <https://github.com/org/repo/pull/1|repo#1>",
1392
+ " \u2022 Feature B: <https://github.com/org/repo/pull/2|repo#2>",
1393
+ " ```",
1394
+ "",
1395
+ "5. **Avoid:** Plain URLs immediately after a bullet/label on the same line (e.g., `\u2022 Feature A: https://github.com/...`) when sending via API, as it can render with bullets inside or between links"
1396
+ ].join("\n"),
1397
+ tags: ["workflow"]
1398
+ }
1399
+ ]
1400
+ };
1401
+
1150
1402
  // src/turbo/turbo-repo.ts
1151
1403
  var import_lib2 = require("projen/lib");
1152
1404
  var import_workflows_model = require("projen/lib/github/workflows-model");
@@ -1727,7 +1979,8 @@ var BUILT_IN_BUNDLES = [
1727
1979
  pnpmBundle,
1728
1980
  awsCdkBundle,
1729
1981
  projenBundle,
1730
- githubWorkflowBundle
1982
+ githubWorkflowBundle,
1983
+ slackBundle
1731
1984
  ];
1732
1985
 
1733
1986
  // src/projects/project-metadata.ts
@@ -4162,6 +4415,7 @@ var AwsDeployWorkflow = class _AwsDeployWorkflow extends import_projen16.Compone
4162
4415
  pnpmBundle,
4163
4416
  projenBundle,
4164
4417
  resolveTemplateVariables,
4418
+ slackBundle,
4165
4419
  turborepoBundle,
4166
4420
  typescriptBundle,
4167
4421
  vitestBundle