@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 +3 -5
- package/bin/cli.js +7 -8
- package/package.json +1 -1
- package/templates/agents/global/reviewer.md +14 -1
- package/templates/agents/project/deployer.md +9 -2
- package/templates/commands/deploy.md +23 -2
- package/templates/commands/implement.md +8 -0
- package/templates/commands/review.md +1 -0
- package/templates/commands/rework.md +2 -1
- package/templates/commands/rollback.md +0 -2
- package/templates/infrastructure/CLAUDE-WORKFLOW.md +3 -5
- package/templates/infrastructure/mcp.json +1 -6
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', '
|
|
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', '@
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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. **
|
|
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.
|
|
@@ -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", "@
|
|
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",
|