@chris1807/claude-kit 2.1.19 → 2.1.21

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/README.md CHANGED
@@ -666,16 +666,14 @@ export MSSQL_CONNECTION_STRING="Server=localhost;Database=MyDb;User Id=sa;Passwo
666
666
  # PostgreSQL (if your project uses PostgreSQL)
667
667
  export POSTGRES_CONNECTION_STRING="postgresql://user:password@localhost:5432/mydb"
668
668
 
669
- # Microsoft Teams (for team notifications and messages)
670
- export TEAMS_TENANT_ID="your-azure-ad-tenant-id"
671
- export TEAMS_CLIENT_ID="your-app-registration-client-id"
672
- export TEAMS_CLIENT_SECRET="your-client-secret"
673
-
674
669
  # Stripe (if your project uses Stripe payments)
675
670
  export STRIPE_SECRET_KEY="sk_test_..."
676
671
 
677
672
  # Azure CLI (no env var needed — just log in)
678
673
  az login
674
+
675
+ # Microsoft Teams (no env vars needed — uses Microsoft Graph device-code auth;
676
+ # first invocation prints a code + URL to sign in)
679
677
  ```
680
678
 
681
679
  ### Setting Up the Teams MCP Server
package/bin/cli.js CHANGED
@@ -375,7 +375,7 @@ async function main() {
375
375
  } else if (mcpChoices.db === 'mssql' || mcpChoices.db === 'azuresql') {
376
376
  mcpConfig.mcpServers.mssql = {
377
377
  command: 'npx',
378
- args: ['-y', '@anthropic/mcp-mssql-server'],
378
+ args: ['-y', 'mssql-mcp-server'],
379
379
  env: { MSSQL_CONNECTION_STRING: '${MSSQL_CONNECTION_STRING}' },
380
380
  };
381
381
  } else if (mcpChoices.db === 'postgres') {
@@ -389,12 +389,7 @@ async function main() {
389
389
  if (mcpChoices.servers.includes('teams')) {
390
390
  mcpConfig.mcpServers.teams = {
391
391
  command: 'npx',
392
- args: ['-y', '@anthropic/mcp-teams-server'],
393
- env: {
394
- TEAMS_TENANT_ID: '${TEAMS_TENANT_ID}',
395
- TEAMS_CLIENT_ID: '${TEAMS_CLIENT_ID}',
396
- TEAMS_CLIENT_SECRET: '${TEAMS_CLIENT_SECRET}',
397
- },
392
+ args: ['-y', '@floriscornel/teams-mcp@latest'],
398
393
  };
399
394
  }
400
395
 
@@ -639,7 +634,6 @@ async function main() {
639
634
  if (dbType === 'mongo') exports.push('export MONGODB_CONNECTION_STRING="mongodb+srv://..."');
640
635
  if (dbType === 'mssql' || dbType === 'azuresql') exports.push('export MSSQL_CONNECTION_STRING="Server=...;Database=..."');
641
636
  if (dbType === 'postgres') exports.push('export POSTGRES_CONNECTION_STRING="postgresql://..."');
642
- exports.push('export TEAMS_TENANT_ID="..."', 'export TEAMS_CLIENT_ID="..."', 'export TEAMS_CLIENT_SECRET="..."');
643
637
  if (selectedServers.includes('azuredevops')) exports.push('export AZURE_DEVOPS_PAT="..." # mint at https://dev.azure.com/_usersSettings/tokens');
644
638
 
645
639
  console.log(chalk.yellow(' Environment variables to set:'));
@@ -654,6 +648,11 @@ async function main() {
654
648
  console.log(chalk.yellow(' Also run:'));
655
649
  console.log(chalk.gray(' az login'));
656
650
  console.log('');
651
+ if (selectedServers.includes('teams')) {
652
+ console.log(chalk.yellow(' Teams MCP uses Microsoft Graph device-code auth.'));
653
+ console.log(chalk.gray(' First use will print a code + URL to sign in. No env vars needed.'));
654
+ console.log('');
655
+ }
657
656
  console.log(` Then: ${chalk.blue(`cd ${targetDir} && claude`)}`);
658
657
  console.log(` Run: ${chalk.blue('/implement AB#1234')} to start working`);
659
658
  console.log(` Run: ${chalk.blue('/review 142')} to review a PR`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chris1807/claude-kit",
3
- "version": "2.1.19",
3
+ "version": "2.1.21",
4
4
  "description": "Claude Code starter kit for Azure DevOps teams — agents, hooks, MCP servers, slash commands, and end-to-end work item → PR → release → deploy workflow automation",
5
5
  "type": "module",
6
6
  "bin": {
@@ -74,7 +74,20 @@ Check `*.csproj` files for incorrect `<ProjectReference>` entries.
74
74
  | Empty states | Components handle no-data scenarios with messages, not blank screens |
75
75
  | Accessibility | Semantic HTML, ARIA labels, keyboard navigation |
76
76
 
77
- ### 6. Testing
77
+ ### 6. Environment Configuration Parity
78
+
79
+ When the diff adds or modifies keys in any **backend `appsettings.*.json`** or **React `.env*`** file, every parallel environment file should have a corresponding entry (real value, placeholder, or explicit empty) so the app does not silently break in another environment.
80
+
81
+ | File family | Parallel files to check |
82
+ |-------------|------------------------|
83
+ | `appsettings.json` | `appsettings.Development.json`, `appsettings.Staging.json`, `appsettings.QA.json`, `appsettings.Production.json` — whichever exist in the repo |
84
+ | `.env` | `.env.development`, `.env.staging`, `.env.qa`, `.env.production`, `.env.local`, `.env.example` — whichever exist in the repo |
85
+
86
+ For each new/changed key, list which environment files have it and which are missing it. Flag any missing entry as a **CRITICAL** issue — the PR should not merge until every environment file is accounted for, even if the value is a placeholder or intentionally blank. If a key is intentionally environment-specific (e.g., only relevant in Production), the diff should still leave a comment in the other files explaining why, or the omission should be called out explicitly in the PR description.
87
+
88
+ Pipeline variable groups, Key Vault references, and Azure App Configuration entries count as valid sources for an environment — if a key is wired up there for a given environment, the file does not need to repeat it, but the reviewer should verify the wiring exists rather than assume it.
89
+
90
+ ### 7. Testing
78
91
 
79
92
  | Check | Expectation |
80
93
  |-------|-------------|
@@ -19,6 +19,14 @@ You deploy code changes to Azure environments. Follow the standard sequence for
19
19
  1. Run `dotnet build` on any modified .NET projects to verify compilation
20
20
  2. If frontend files changed, run `npx tsc --noEmit` in the relevant client directory
21
21
  3. If either fails, STOP and report the errors — do not deploy broken code
22
+ 4. **Environment configuration parity** — if `git diff` shows changes to any `appsettings.*.json` or `.env*` file, verify every key added or modified has a corresponding entry in each parallel environment file that exists in the repo:
23
+
24
+ | File family | Parallel files to check |
25
+ |-------------|------------------------|
26
+ | `appsettings.json` | `appsettings.Development.json`, `appsettings.Staging.json`, `appsettings.QA.json`, `appsettings.Production.json` |
27
+ | `.env` | `.env.development`, `.env.staging`, `.env.qa`, `.env.production`, `.env.local`, `.env.example` |
28
+
29
+ Present a (key × environment) table to the user. For any missing cell, prompt the user to supply a value (real, placeholder, or empty) before pushing, or to confirm the omission is intentional because the key is wired through a pipeline variable group, Key Vault, or App Configuration for that environment. Do NOT push until every missing entry is either filled in or explicitly skipped by the user.
22
30
 
23
31
  ### Step 2: Commit
24
32
 
@@ -26,8 +34,7 @@ You deploy code changes to Azure environments. Follow the standard sequence for
26
34
  2. Stage only the relevant files (never use `git add -A` — avoid committing secrets or build artifacts)
27
35
  3. Never stage `.env`, `appsettings.*.json` with real secrets, or `node_modules`
28
36
  4. Write a clear commit message explaining what changed and why
29
- 5. Always end with: `Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>`
30
- 6. Use HEREDOC format for the commit message
37
+ 5. Use HEREDOC format for the commit message
31
38
 
32
39
  ### Step 3: Push
33
40
 
@@ -7,6 +7,28 @@ Commit, push, and deploy the current changes. Usage: `/deploy [message]`
7
7
  1. Run `dotnet build` on any modified .NET projects
8
8
  2. If frontend files changed, run `npx tsc --noEmit` in the relevant client directory
9
9
  3. If either fails, STOP and report the errors — do not deploy broken code
10
+ 4. **Environment configuration parity** — if `git diff` shows changes to any `appsettings.*.json` or `.env*` file, check that every key added or modified in one file has a corresponding entry in every parallel environment file that exists in the repo:
11
+
12
+ | File family | Parallel files to check |
13
+ |-------------|------------------------|
14
+ | `appsettings.json` | `appsettings.Development.json`, `appsettings.Staging.json`, `appsettings.QA.json`, `appsettings.Production.json` |
15
+ | `.env` | `.env.development`, `.env.staging`, `.env.qa`, `.env.production`, `.env.local`, `.env.example` |
16
+
17
+ Present a table of new/changed keys and which environment files contain them. If any are missing, STOP and prompt:
18
+
19
+ ```
20
+ ⚠ The following keys are missing from one or more environment files:
21
+
22
+ | Key | Dev | Staging | QA | Prod |
23
+ |-----|-----|---------|----|----- |
24
+ | Foo:Bar | ✅ | ❌ | ❌ | ❌ |
25
+
26
+ Add values (real, placeholder, or empty) for the missing environments before pushing?
27
+ - "add" → I'll prompt for each missing value and update the files
28
+ - "skip" → confirm the omission is intentional (e.g., key is wired through a pipeline variable group / Key Vault / App Configuration) and continue
29
+ ```
30
+
31
+ If the user picks "add", walk each missing cell, prompt for a value, and write it. If "skip", continue but note the skipped keys in the deploy summary.
10
32
 
11
33
  ## Step 2: Review Changes
12
34
 
@@ -36,8 +58,7 @@ Wait for confirmation.
36
58
  1. Stage only the relevant files (never use `git add -A`)
37
59
  2. Never stage `.env`, `appsettings.*.json` with real secrets, or `node_modules`
38
60
  3. Commit with the provided message or auto-generated one
39
- 4. Always end with: `Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>`
40
- 5. Use HEREDOC format for the commit message
61
+ 4. Use HEREDOC format for the commit message
41
62
 
42
63
  ## Step 4: Push
43
64
 
@@ -131,6 +131,14 @@ Run a build check **before** any other quality checks. Use the `build-validator`
131
131
 
132
132
  1. **Run the full test suite** — every unit test in the repo, plus integration tests. Not just the tests added in this change. A failure in an unrelated test means this change broke something else; treat it as a regression, fix it, and re-run until the entire suite is green
133
133
  2. **Run lint** — ESLint and dotnet format
134
+ 3. **Environment configuration parity** — if the implementation added or changed any key in `appsettings.*.json` or `.env*`, verify every parallel environment file has a corresponding entry:
135
+
136
+ | File family | Parallel files to check |
137
+ |-------------|------------------------|
138
+ | `appsettings.json` | `appsettings.Development.json`, `appsettings.Staging.json`, `appsettings.QA.json`, `appsettings.Production.json` |
139
+ | `.env` | `.env.development`, `.env.staging`, `.env.qa`, `.env.production`, `.env.local`, `.env.example` |
140
+
141
+ Present a (key × environment) table. For every missing cell, prompt the user for a value (real, placeholder, or empty) **before creating the PR**. The PR should not be opened until every environment file is accounted for, or the user explicitly confirms the omission is intentional (e.g., the key is supplied via a pipeline variable group, Key Vault, or App Configuration for that environment).
134
142
 
135
143
  ## Step 8: Code Review
136
144
 
@@ -33,6 +33,7 @@ Review PR #$ARGUMENTS in the current project. Automatically:
33
33
  - Error handling (are exceptions caught appropriately?)
34
34
  - Naming conventions and code style consistency
35
35
  - Breaking changes or backwards compatibility issues
36
+ - **Environment configuration parity** — if the diff adds or changes any key in `appsettings.*.json` or `.env*`, every parallel environment file (Development/Staging/QA/Production for backend; `.env.development`/`.env.staging`/`.env.production`/`.env.example` for React) must have a corresponding entry, or the omission must be called out in the PR description. Build a table of (key × environment) and flag any missing cell as **critical**. Pipeline variable groups, Key Vault, or App Configuration wiring counts as a valid source for a given environment — verify it exists rather than assume it.
36
37
  - **Rework-specific (if applicable):** does this diff fully address every item in the rework feedback? Does it regress anything that prior merged PRs delivered?
37
38
 
38
39
  6. **Draft (do not post yet) the inline comments** for every finding. For each, capture: file path, line number, severity, and the exact comment body you intend to post.
@@ -220,7 +220,8 @@ Run a build check **before** any other quality checks. Use the `build-validator`
220
220
 
221
221
  1. **Run the full test suite** — every unit test in the repo, plus integration tests. Not just the tests added in this rework. A failure in an unrelated test means this rework broke something else; treat it as a regression, fix it, and re-run until the entire suite is green
222
222
  2. **Run lint** — ESLint and dotnet format
223
- 3. **Acceptance Criteria check** — re-read the work item's full Acceptance Criteria (the same list captured in Step 3). For each AC, identify the test or piece of code that proves it's met. If any AC has no covering test or visible code path, flag it before moving on:
223
+ 3. **Environment configuration parity** — if the rework added or changed any key in `appsettings.*.json` or `.env*`, verify every parallel environment file (Development/Staging/QA/Production for backend; `.env.development`/`.env.staging`/`.env.production`/`.env.example` for React — whichever exist in the repo) has a corresponding entry. Present a (key × environment) table. Prompt the user to fill in any missing values (real, placeholder, or empty) **before pushing**, or to explicitly confirm the omission is intentional (e.g., supplied via a pipeline variable group, Key Vault, or App Configuration).
224
+ 4. **Acceptance Criteria check** — re-read the work item's full Acceptance Criteria (the same list captured in Step 3). For each AC, identify the test or piece of code that proves it's met. If any AC has no covering test or visible code path, flag it before moving on:
224
225
 
225
226
  ```
226
227
  ⚠ AC #{n} ({short form}) has no covering test or clear code path.
@@ -54,8 +54,6 @@ Revert AB#1234, AB#1235 on {environment}
54
54
  Reverted commits:
55
55
  - abc1234: Add payment export
56
56
  - def5678: Fix login redirect
57
-
58
- Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
59
57
  EOF
60
58
  )"
61
59
  ```
@@ -265,14 +265,12 @@ Each team member needs to set their own environment variables (never commit thes
265
265
  # MongoDB (required for db-admin agent)
266
266
  export MONGODB_CONNECTION_STRING="mongodb+srv://..."
267
267
 
268
- # Microsoft Teams (required for team notifications)
269
- export TEAMS_TENANT_ID="..."
270
- export TEAMS_CLIENT_ID="..."
271
- export TEAMS_CLIENT_SECRET="..."
272
-
273
268
  # Stripe (required when payment integration is active)
274
269
  export STRIPE_SECRET_KEY="sk_test_..."
275
270
 
276
271
  # Azure (use az login instead of env vars)
277
272
  az login
273
+
274
+ # Microsoft Teams MCP — no env vars needed. First invocation prints a
275
+ # device code + URL to sign in via Microsoft Graph (OAuth device flow).
278
276
  ```
@@ -13,12 +13,7 @@
13
13
  },
14
14
  "teams": {
15
15
  "command": "npx",
16
- "args": ["-y", "@anthropic/mcp-teams-server"],
17
- "env": {
18
- "TEAMS_TENANT_ID": "${TEAMS_TENANT_ID}",
19
- "TEAMS_CLIENT_ID": "${TEAMS_CLIENT_ID}",
20
- "TEAMS_CLIENT_SECRET": "${TEAMS_CLIENT_SECRET}"
21
- }
16
+ "args": ["-y", "@floriscornel/teams-mcp@latest"]
22
17
  },
23
18
  "stripe": {
24
19
  "command": "npx",