specweave 0.8.1 → 0.8.3
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/bin/specweave.js +0 -27
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +72 -110
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts +1 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -1
- package/dist/metrics/calculators/change-failure-rate.js +1 -1
- package/dist/metrics/calculators/change-failure-rate.js.map +1 -1
- package/dist/metrics/calculators/deployment-frequency.d.ts +1 -1
- package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -1
- package/dist/metrics/calculators/deployment-frequency.js +1 -1
- package/dist/metrics/calculators/deployment-frequency.js.map +1 -1
- package/dist/metrics/calculators/lead-time.d.ts +1 -1
- package/dist/metrics/calculators/lead-time.d.ts.map +1 -1
- package/dist/metrics/calculators/lead-time.js +2 -2
- package/dist/metrics/calculators/lead-time.js.map +1 -1
- package/dist/metrics/calculators/mttr.d.ts +1 -1
- package/dist/metrics/calculators/mttr.d.ts.map +1 -1
- package/dist/metrics/calculators/mttr.js +2 -2
- package/dist/metrics/calculators/mttr.js.map +1 -1
- package/dist/metrics/dora-calculator.d.ts +2 -2
- package/dist/metrics/dora-calculator.d.ts.map +1 -1
- package/dist/metrics/dora-calculator.js +5 -5
- package/dist/metrics/dora-calculator.js.map +1 -1
- package/dist/metrics/github-client.d.ts +1 -1
- package/dist/metrics/github-client.d.ts.map +1 -1
- package/dist/metrics/utils/tier-classifier.d.ts +1 -1
- package/dist/metrics/utils/tier-classifier.d.ts.map +1 -1
- package/package.json +2 -1
- package/plugins/specweave/hooks/post-increment-plugin-detect.sh +0 -142
- package/plugins/specweave/hooks/pre-task-plugin-detect.sh +0 -96
- package/plugins/specweave/skills/plugin-detector/SKILL.md +0 -324
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Calculates time from commit to deployment (DORA metric #2)
|
|
5
5
|
* Data source: Git commits + GitHub Releases API
|
|
6
6
|
*/
|
|
7
|
-
import { classifyLeadTime } from '../utils/tier-classifier';
|
|
8
|
-
import { calculatePercentile } from '../utils/percentile';
|
|
7
|
+
import { classifyLeadTime } from '../utils/tier-classifier.js';
|
|
8
|
+
import { calculatePercentile } from '../utils/percentile.js';
|
|
9
9
|
/**
|
|
10
10
|
* Calculate Lead Time for Changes
|
|
11
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lead-time.js","sourceRoot":"","sources":["../../../src/metrics/calculators/lead-time.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"lead-time.js","sourceRoot":"","sources":["../../../src/metrics/calculators/lead-time.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Calculates average time to recover from incidents (DORA metric #4)
|
|
5
5
|
* Data source: GitHub Issues with labels "incident" or "production-bug"
|
|
6
6
|
*/
|
|
7
|
-
import { Issue, MTTRMetric } from '../types';
|
|
7
|
+
import { Issue, MTTRMetric } from '../types.js';
|
|
8
8
|
/**
|
|
9
9
|
* Calculate Mean Time to Recovery (MTTR)
|
|
10
10
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mttr.d.ts","sourceRoot":"","sources":["../../../src/metrics/calculators/mttr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mttr.d.ts","sourceRoot":"","sources":["../../../src/metrics/calculators/mttr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIhD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAiDzD"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Calculates average time to recover from incidents (DORA metric #4)
|
|
5
5
|
* Data source: GitHub Issues with labels "incident" or "production-bug"
|
|
6
6
|
*/
|
|
7
|
-
import { classifyMTTR } from '../utils/tier-classifier';
|
|
8
|
-
import { calculatePercentile } from '../utils/percentile';
|
|
7
|
+
import { classifyMTTR } from '../utils/tier-classifier.js';
|
|
8
|
+
import { calculatePercentile } from '../utils/percentile.js';
|
|
9
9
|
/**
|
|
10
10
|
* Calculate Mean Time to Recovery (MTTR)
|
|
11
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mttr.js","sourceRoot":"","sources":["../../../src/metrics/calculators/mttr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"mttr.js","sourceRoot":"","sources":["../../../src/metrics/calculators/mttr.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,MAAe;IAC3C,0BAA0B;IAC1B,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CACnC,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,KAAK,KAAK,QAAQ;QACxB,KAAK,CAAC,SAAS,KAAK,IAAI;QACxB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACxB,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAC7D,CACJ,CAAC;IAEF,+BAA+B;IAC/B,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,KAAK;YACX,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,CAAC;SACP,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,MAAM,aAAa,GAAa,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;QAC7D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAU,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;QAC5D,OAAO,UAAU,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAE,qBAAqB;IACzD,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC;IAC1F,MAAM,GAAG,GAAG,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;IAEnD,gBAAgB;IAChB,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAEvC,0BAA0B;IAC1B,MAAM,IAAI,GAAG,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC;IAElE,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,EAAG,qBAAqB;QAC1D,IAAI;QACJ,IAAI;QACJ,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE;QAC9B,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE;KAC/B,CAAC;AACJ,CAAC"}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
* Main orchestrator that calculates all 4 DORA metrics
|
|
6
6
|
* Entry point for CLI and GitHub Actions workflow
|
|
7
7
|
*/
|
|
8
|
-
import { GitHubClient } from './github-client';
|
|
9
|
-
import { DORAMetrics } from './types';
|
|
8
|
+
import { GitHubClient } from './github-client.js';
|
|
9
|
+
import { DORAMetrics } from './types.js';
|
|
10
10
|
/**
|
|
11
11
|
* Calculate all DORA metrics
|
|
12
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dora-calculator.d.ts","sourceRoot":"","sources":["../../src/metrics/dora-calculator.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dora-calculator.d.ts","sourceRoot":"","sources":["../../src/metrics/dora-calculator.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKlD,OAAO,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAEvD;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAyCrF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAY7E"}
|
|
@@ -7,11 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import * as fs from 'fs';
|
|
9
9
|
import * as path from 'path';
|
|
10
|
-
import { GitHubClient } from './github-client';
|
|
11
|
-
import { calculateDeploymentFrequency } from './calculators/deployment-frequency';
|
|
12
|
-
import { calculateLeadTime } from './calculators/lead-time';
|
|
13
|
-
import { calculateChangeFailureRate } from './calculators/change-failure-rate';
|
|
14
|
-
import { calculateMTTR } from './calculators/mttr';
|
|
10
|
+
import { GitHubClient } from './github-client.js';
|
|
11
|
+
import { calculateDeploymentFrequency } from './calculators/deployment-frequency.js';
|
|
12
|
+
import { calculateLeadTime } from './calculators/lead-time.js';
|
|
13
|
+
import { calculateChangeFailureRate } from './calculators/change-failure-rate.js';
|
|
14
|
+
import { calculateMTTR } from './calculators/mttr.js';
|
|
15
15
|
/**
|
|
16
16
|
* Calculate all DORA metrics
|
|
17
17
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dora-calculator.js","sourceRoot":"","sources":["../../src/metrics/dora-calculator.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dora-calculator.js","sourceRoot":"","sources":["../../src/metrics/dora-calculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Wrapper around Octokit for fetching DORA metrics data
|
|
5
5
|
* Handles authentication, rate limiting, and error handling
|
|
6
6
|
*/
|
|
7
|
-
import { Release, Commit, Issue, GitHubConfig } from './types';
|
|
7
|
+
import { Release, Commit, Issue, GitHubConfig } from './types.js';
|
|
8
8
|
/**
|
|
9
9
|
* GitHub API Client for DORA Metrics
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-client.d.ts","sourceRoot":"","sources":["../../src/metrics/github-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"github-client.d.ts","sourceRoot":"","sources":["../../src/metrics/github-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AASlE;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;gBAET,MAAM,EAAE,YAAY;IAQhC;;;;;OAKG;IACG,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAsBlD;;;;;;OAMG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoB7D;;;;;;OAMG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAqBhE;;;;;;;;;OASG;YACW,eAAe;CAiB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier-classifier.d.ts","sourceRoot":"","sources":["../../../src/metrics/utils/tier-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"tier-classifier.d.ts","sourceRoot":"","sources":["../../../src/metrics/utils/tier-classifier.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,QAAQ,CAM5E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAMxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAMtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAMtD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"test:e2e": "playwright test tests/e2e/ --grep-invert=\"(should create translator|should default to claude adapter|should create .claude|should initialize project with specweave init|should create correct directory structure|should handle non-interactive mode correctly|should validate config.json structure|should create .specweave directory structure|should create CLAUDE.md and AGENTS.md|should use claude adapter when explicitly requested|should create translate command|should initialize git repository|should use generic adapter|should install SpecWeave|should scaffold SaaS|should create proper directory|should create required configuration|should install core skills|should install core agents|should have deployment|should have Stripe|ADO Sync)\"",
|
|
18
18
|
"test:integration": "echo 'Integration tests are temporarily disabled (excluded in jest.config.cjs line 31)' && exit 0",
|
|
19
19
|
"test": "npm run test:smoke && npm run test:e2e",
|
|
20
|
+
"metrics:dora": "node dist/metrics/dora-calculator.js",
|
|
20
21
|
"generate:diagrams": "bash scripts/generate-diagram-svgs.sh",
|
|
21
22
|
"docs:dev": "cd docs-site && npm start",
|
|
22
23
|
"docs:build": "cd docs-site && npm run build",
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
# Post-Increment Plugin Detection Hook (T-021)
|
|
5
|
-
#
|
|
6
|
-
# Runs AFTER increment completion to suggest plugins based on git diff
|
|
7
|
-
# This is Phase 4 of the 4-phase plugin detection system
|
|
8
|
-
#
|
|
9
|
-
# Trigger: After `/specweave.done` completes an increment
|
|
10
|
-
# Output: Plugin suggestions for NEXT increment
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
# Exit on error
|
|
14
|
-
set -e
|
|
15
|
-
|
|
16
|
-
# Get project root (assumes hook runs from project directory)
|
|
17
|
-
PROJECT_ROOT=$(pwd)
|
|
18
|
-
|
|
19
|
-
# Colors for output
|
|
20
|
-
GREEN='\033[0;32m'
|
|
21
|
-
YELLOW='\033[1;33m'
|
|
22
|
-
CYAN='\033[0;36m'
|
|
23
|
-
GRAY='\033[0;37m'
|
|
24
|
-
MAGENTA='\033[0;35m'
|
|
25
|
-
NC='\033[0m' # No Color
|
|
26
|
-
|
|
27
|
-
# Check if SpecWeave is installed
|
|
28
|
-
if ! command -v specweave &> /dev/null; then
|
|
29
|
-
# Silent exit if SpecWeave not installed (development mode)
|
|
30
|
-
exit 0
|
|
31
|
-
fi
|
|
32
|
-
|
|
33
|
-
# Check if git repository exists
|
|
34
|
-
if [ ! -d ".git" ]; then
|
|
35
|
-
# Not a git repo, skip detection
|
|
36
|
-
exit 0
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
# Get completed increment number (passed as argument)
|
|
40
|
-
INCREMENT_NUM="$1"
|
|
41
|
-
|
|
42
|
-
if [ -z "$INCREMENT_NUM" ]; then
|
|
43
|
-
# No increment number provided, skip
|
|
44
|
-
exit 0
|
|
45
|
-
fi
|
|
46
|
-
|
|
47
|
-
# Get git diff since last increment tag (or HEAD if no tags)
|
|
48
|
-
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "HEAD~10")
|
|
49
|
-
GIT_DIFF=$(git diff --name-only "$LAST_TAG"..HEAD 2>/dev/null || echo "")
|
|
50
|
-
|
|
51
|
-
if [ -z "$GIT_DIFF" ]; then
|
|
52
|
-
# No changes detected, skip
|
|
53
|
-
exit 0
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
# Also check package.json changes for new dependencies
|
|
57
|
-
PACKAGE_JSON_CHANGED=false
|
|
58
|
-
if echo "$GIT_DIFF" | grep -q "package.json"; then
|
|
59
|
-
PACKAGE_JSON_CHANGED=true
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
# Keyword-based plugin detection from file changes
|
|
63
|
-
declare -A PLUGIN_PATTERNS=(
|
|
64
|
-
["specweave-github"]=".github/|github-"
|
|
65
|
-
["specweave-kubernetes"]="kubernetes/|k8s/|helm/|\.yaml$"
|
|
66
|
-
["specweave-frontend-stack"]="components/|pages/|app/|\.tsx$|\.jsx$"
|
|
67
|
-
["specweave-backend-stack"]="api/|server/|routes/|controllers/"
|
|
68
|
-
["specweave-ml-ops"]="models/|training/|\.ipynb$|\.h5$|\.pkl$"
|
|
69
|
-
["specweave-payment-processing"]="payments/|billing/|stripe"
|
|
70
|
-
["specweave-figma"]="\.figma|design/|mockups/"
|
|
71
|
-
["specweave-observability"]="prometheus/|grafana/|monitoring/"
|
|
72
|
-
["specweave-diagrams"]="diagrams/|\.mmd$|architecture/"
|
|
73
|
-
)
|
|
74
|
-
|
|
75
|
-
# Dependency-based detection (if package.json changed)
|
|
76
|
-
declare -A DEPENDENCY_PLUGINS=(
|
|
77
|
-
["specweave-frontend-stack"]="react|vue|angular|next"
|
|
78
|
-
["specweave-backend-stack"]="express|fastapi|django|nestjs"
|
|
79
|
-
["specweave-payment-processing"]="stripe|paypal"
|
|
80
|
-
["specweave-ml-ops"]="tensorflow|pytorch|scikit-learn"
|
|
81
|
-
["specweave-observability"]="prometheus-client|@opentelemetry"
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
# Detect plugins based on file patterns
|
|
85
|
-
SUGGESTED_PLUGINS=()
|
|
86
|
-
|
|
87
|
-
# Check file patterns
|
|
88
|
-
for plugin in "${!PLUGIN_PATTERNS[@]}"; do
|
|
89
|
-
pattern="${PLUGIN_PATTERNS[$plugin]}"
|
|
90
|
-
|
|
91
|
-
if echo "$GIT_DIFF" | grep -qi -E "$pattern"; then
|
|
92
|
-
# Check if plugin is already enabled
|
|
93
|
-
if ! specweave plugin list --enabled 2>/dev/null | grep -q "$plugin"; then
|
|
94
|
-
if [[ ! " ${SUGGESTED_PLUGINS[@]} " =~ " ${plugin} " ]]; then
|
|
95
|
-
SUGGESTED_PLUGINS+=("$plugin")
|
|
96
|
-
fi
|
|
97
|
-
fi
|
|
98
|
-
fi
|
|
99
|
-
done
|
|
100
|
-
|
|
101
|
-
# Check package.json dependencies if it changed
|
|
102
|
-
if [ "$PACKAGE_JSON_CHANGED" = true ] && [ -f "package.json" ]; then
|
|
103
|
-
DEPENDENCIES=$(cat package.json | grep -A 100 '"dependencies"' | grep -A 100 '"devDependencies"' || echo "")
|
|
104
|
-
|
|
105
|
-
for plugin in "${!DEPENDENCY_PLUGINS[@]}"; do
|
|
106
|
-
keywords="${DEPENDENCY_PLUGINS[$plugin]}"
|
|
107
|
-
|
|
108
|
-
if echo "$DEPENDENCIES" | grep -qi -E "$keywords"; then
|
|
109
|
-
if ! specweave plugin list --enabled 2>/dev/null | grep -q "$plugin"; then
|
|
110
|
-
if [[ ! " ${SUGGESTED_PLUGINS[@]} " =~ " ${plugin} " ]]; then
|
|
111
|
-
SUGGESTED_PLUGINS+=("$plugin")
|
|
112
|
-
fi
|
|
113
|
-
fi
|
|
114
|
-
fi
|
|
115
|
-
done
|
|
116
|
-
fi
|
|
117
|
-
|
|
118
|
-
# Output suggestions if any found
|
|
119
|
-
if [ ${#SUGGESTED_PLUGINS[@]} -gt 0 ]; then
|
|
120
|
-
echo ""
|
|
121
|
-
echo -e "${MAGENTA}══════════════════════════════════════════════════════${NC}"
|
|
122
|
-
echo -e "${CYAN}💡 Plugin Suggestions for Next Increment${NC}"
|
|
123
|
-
echo -e "${MAGENTA}══════════════════════════════════════════════════════${NC}"
|
|
124
|
-
echo ""
|
|
125
|
-
echo -e "${GRAY}Increment ${INCREMENT_NUM} introduced changes that suggest:${NC}"
|
|
126
|
-
echo ""
|
|
127
|
-
|
|
128
|
-
for plugin in "${SUGGESTED_PLUGINS[@]}"; do
|
|
129
|
-
echo -e " ✨ ${GREEN}${plugin}${NC}"
|
|
130
|
-
done
|
|
131
|
-
|
|
132
|
-
echo ""
|
|
133
|
-
echo -e "${YELLOW}Consider enabling these plugins for your next increment:${NC}"
|
|
134
|
-
echo -e "${CYAN} specweave plugin enable <name>${NC}"
|
|
135
|
-
echo ""
|
|
136
|
-
echo -e "${GRAY}Plugins will auto-activate skills and agents for better support${NC}"
|
|
137
|
-
echo -e "${MAGENTA}══════════════════════════════════════════════════════${NC}"
|
|
138
|
-
echo ""
|
|
139
|
-
fi
|
|
140
|
-
|
|
141
|
-
# Always exit successfully (non-blocking)
|
|
142
|
-
exit 0
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
#
|
|
4
|
-
# Pre-Task Plugin Detection Hook (T-020)
|
|
5
|
-
#
|
|
6
|
-
# Runs BEFORE task execution to suggest plugins based on task description
|
|
7
|
-
# This is Phase 3 of the 4-phase plugin detection system
|
|
8
|
-
#
|
|
9
|
-
# Trigger: Before executing any task via `/specweave.do`
|
|
10
|
-
# Output: Non-blocking plugin suggestions
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
# Exit on error
|
|
14
|
-
set -e
|
|
15
|
-
|
|
16
|
-
# Get project root (assumes hook runs from project directory)
|
|
17
|
-
PROJECT_ROOT=$(pwd)
|
|
18
|
-
|
|
19
|
-
# Colors for output
|
|
20
|
-
GREEN='\033[0;32m'
|
|
21
|
-
YELLOW='\033[1;33m'
|
|
22
|
-
CYAN='\033[0;36m'
|
|
23
|
-
GRAY='\033[0;37m'
|
|
24
|
-
NC='\033[0m' # No Color
|
|
25
|
-
|
|
26
|
-
# Check if SpecWeave is installed
|
|
27
|
-
if ! command -v specweave &> /dev/null; then
|
|
28
|
-
# Silent exit if SpecWeave not installed (development mode)
|
|
29
|
-
exit 0
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
# Get current task being executed (passed as argument)
|
|
33
|
-
TASK_FILE="$1"
|
|
34
|
-
|
|
35
|
-
if [ -z "$TASK_FILE" ] || [ ! -f "$TASK_FILE" ]; then
|
|
36
|
-
# No task file provided, skip detection
|
|
37
|
-
exit 0
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
|
-
# Extract task description
|
|
41
|
-
TASK_DESCRIPTION=$(grep -A 5 "^### T-[0-9]" "$TASK_FILE" | head -1 || echo "")
|
|
42
|
-
|
|
43
|
-
if [ -z "$TASK_DESCRIPTION" ]; then
|
|
44
|
-
# No description found, skip
|
|
45
|
-
exit 0
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
# Keyword-based plugin detection
|
|
49
|
-
declare -A PLUGIN_KEYWORDS=(
|
|
50
|
-
["specweave-github"]="github|gh|issue|pull request|pr"
|
|
51
|
-
["specweave-kubernetes"]="kubernetes|k8s|kubectl|helm|pod|deployment"
|
|
52
|
-
["specweave-frontend-stack"]="react|vue|angular|nextjs|frontend|ui|component"
|
|
53
|
-
["specweave-backend-stack"]="express|fastapi|django|flask|nestjs|backend|api|server"
|
|
54
|
-
["specweave-ml-ops"]="tensorflow|pytorch|sklearn|ml|machine learning|model|training"
|
|
55
|
-
["specweave-payment-processing"]="stripe|paypal|payment|billing|subscription"
|
|
56
|
-
["specweave-figma"]="figma|design|mockup|prototype"
|
|
57
|
-
["specweave-jira"]="jira|atlassian|ticket"
|
|
58
|
-
["specweave-observability"]="prometheus|grafana|datadog|monitoring|metrics|tracing"
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
# Detect plugins based on keywords
|
|
62
|
-
SUGGESTED_PLUGINS=()
|
|
63
|
-
|
|
64
|
-
for plugin in "${!PLUGIN_KEYWORDS[@]}"; do
|
|
65
|
-
keywords="${PLUGIN_KEYWORDS[$plugin]}"
|
|
66
|
-
|
|
67
|
-
# Check if any keyword matches (case-insensitive)
|
|
68
|
-
if echo "$TASK_DESCRIPTION" | grep -qi -E "$keywords"; then
|
|
69
|
-
# Check if plugin is already enabled
|
|
70
|
-
if ! specweave plugin list --enabled 2>/dev/null | grep -q "$plugin"; then
|
|
71
|
-
SUGGESTED_PLUGINS+=("$plugin")
|
|
72
|
-
fi
|
|
73
|
-
fi
|
|
74
|
-
done
|
|
75
|
-
|
|
76
|
-
# Output suggestions if any found
|
|
77
|
-
if [ ${#SUGGESTED_PLUGINS[@]} -gt 0 ]; then
|
|
78
|
-
echo ""
|
|
79
|
-
echo -e "${CYAN}💡 Plugin Detection${NC}"
|
|
80
|
-
echo ""
|
|
81
|
-
echo -e "${GRAY}Task mentions: ${TASK_DESCRIPTION}${NC}"
|
|
82
|
-
echo ""
|
|
83
|
-
echo -e "${YELLOW}Suggested plugins:${NC}"
|
|
84
|
-
|
|
85
|
-
for plugin in "${SUGGESTED_PLUGINS[@]}"; do
|
|
86
|
-
echo -e " • ${GREEN}${plugin}${NC}"
|
|
87
|
-
done
|
|
88
|
-
|
|
89
|
-
echo ""
|
|
90
|
-
echo -e "${GRAY}This task might benefit from these plugins.${NC}"
|
|
91
|
-
echo -e "${GRAY}Run: ${CYAN}specweave plugin enable <name>${GRAY} to install${NC}"
|
|
92
|
-
echo ""
|
|
93
|
-
fi
|
|
94
|
-
|
|
95
|
-
# Always exit successfully (non-blocking)
|
|
96
|
-
exit 0
|