specweave 1.0.568 → 1.0.569
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/package.json +1 -1
- package/plugins/specweave/skills/auto/SKILL.md +1 -1
- package/plugins/specweave/skills/do/SKILL.md +1 -1
- package/plugins/specweave/skills/increment/SKILL.md +1 -1
- package/plugins/specweave/skills/validate/SKILL.md +1 -1
- package/plugins/specweave/scripts/skill-context.sh +0 -160
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.569",
|
|
4
4
|
"description": "100+ domain-expert AI skills — PM, Architect, Frontend, QA, Security and more. Skills learn your team's patterns permanently. Spec-first planning, autonomous execution, multi-agent teams, synced to GitHub/JIRA. Claude Code, Cursor, Copilot & more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -12,7 +12,7 @@ argument-hint: "[INCREMENT_IDS...] [OPTIONS]"
|
|
|
12
12
|
|
|
13
13
|
## Project Context
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
**Project Context**: If `.specweave/config.json` exists, read it for testing mode, TDD enforcement, and multi-project settings. Check for active increments in `.specweave/increments/*/metadata.json`.
|
|
16
16
|
|
|
17
17
|
**Start autonomous execution session using Claude Code's Stop Hook.**
|
|
18
18
|
|
|
@@ -11,7 +11,7 @@ argument-hint: "<increment-id>"
|
|
|
11
11
|
|
|
12
12
|
## Project Context
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
**Project Context**: If `.specweave/config.json` exists, read it for testing mode, TDD enforcement, and multi-project settings. Check for active increments in `.specweave/increments/*/metadata.json`.
|
|
15
15
|
|
|
16
16
|
Execute a SpecWeave increment by running tasks from tasks.md with automatic AC-sync after every task completion.
|
|
17
17
|
|
|
@@ -22,7 +22,7 @@ Increment planning produces specs, plans, and task breakdowns that require user
|
|
|
22
22
|
|
|
23
23
|
## Project Context
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
**Project Context**: If `.specweave/config.json` exists, read it for testing mode, TDD enforcement, and multi-project settings. Check for active increments in `.specweave/increments/*/metadata.json`.
|
|
26
26
|
|
|
27
27
|
**Self-contained increment planning for ANY user project after `specweave init`.**
|
|
28
28
|
|
|
@@ -11,7 +11,7 @@ argument-hint: "[increment-id]"
|
|
|
11
11
|
|
|
12
12
|
## Project Context
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
**Project Context**: If `.specweave/config.json` exists, read it for testing mode, TDD enforcement, and multi-project settings. Check for active increments in `.specweave/increments/*/metadata.json`.
|
|
15
15
|
|
|
16
16
|
You are helping the user validate a SpecWeave increment with optional AI-powered quality assessment.
|
|
17
17
|
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
# skill-context.sh — Project context loader for DCI blocks
|
|
3
|
-
#
|
|
4
|
-
# Usage: .specweave/scripts/skill-context.sh [skill-name]
|
|
5
|
-
# Output: Key-value pairs grouped by section ([config], [project], [increment])
|
|
6
|
-
# Exit: Always 0 (graceful degradation)
|
|
7
|
-
#
|
|
8
|
-
# Performance: <100ms target. Single jq call for config, grep for metadata.
|
|
9
|
-
# Skill name argument is reserved for future skill-specific filtering.
|
|
10
|
-
|
|
11
|
-
CONFIG=".specweave/config.json"
|
|
12
|
-
HAS_JQ=false
|
|
13
|
-
command -v jq >/dev/null 2>&1 && HAS_JQ=true
|
|
14
|
-
|
|
15
|
-
# --- Parse all config values in ONE jq call ---
|
|
16
|
-
# ASSUMPTION: No config value contains literal '|' (pipe).
|
|
17
|
-
# If this changes, switch to per-field jq calls (~120ms slower).
|
|
18
|
-
_test_mode="" _test_enforce="" _deep_interview="" _auto_max=""
|
|
19
|
-
_multi_project="" _org=""
|
|
20
|
-
|
|
21
|
-
if [ -f "$CONFIG" ]; then
|
|
22
|
-
if $HAS_JQ; then
|
|
23
|
-
_raw=$(jq -r '
|
|
24
|
-
def v: if . == null then "" else tostring end;
|
|
25
|
-
[
|
|
26
|
-
(.testing.defaultTestMode | v),
|
|
27
|
-
(.testing.tddEnforcement | v),
|
|
28
|
-
(.planning.deepInterview.enabled | v),
|
|
29
|
-
(.auto.maxRetries | v),
|
|
30
|
-
(.multiProject.enabled | v),
|
|
31
|
-
(.sync.github.owner | v)
|
|
32
|
-
] | join("|")
|
|
33
|
-
' "$CONFIG" 2>/dev/null) || _raw=""
|
|
34
|
-
|
|
35
|
-
IFS='|' read -r _test_mode _test_enforce _deep_interview _auto_max _multi_project _org <<EOF
|
|
36
|
-
$_raw
|
|
37
|
-
EOF
|
|
38
|
-
else
|
|
39
|
-
# grep fallback (best-effort, no jq available)
|
|
40
|
-
# sed strips key prefix, quotes, and whitespace to extract raw value
|
|
41
|
-
_test_mode=$(grep -o '"defaultTestMode"[^,}]*' "$CONFIG" 2>/dev/null | head -1 | sed 's/[^:]*:[[:space:]]*//;s/^"//;s/"$//')
|
|
42
|
-
_test_enforce=$(grep -o '"tddEnforcement"[^,}]*' "$CONFIG" 2>/dev/null | head -1 | sed 's/[^:]*:[[:space:]]*//;s/^"//;s/"$//')
|
|
43
|
-
_auto_max=$(grep -o '"maxRetries"[^,}]*' "$CONFIG" 2>/dev/null | head -1 | sed 's/[^:]*:[[:space:]]*//;s/[^0-9]//g')
|
|
44
|
-
_org=$(grep -o '"owner"[^,}]*' "$CONFIG" 2>/dev/null | head -1 | sed 's/[^:]*:[[:space:]]*//;s/^"//;s/"$//')
|
|
45
|
-
fi
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
# --- [config] section ---
|
|
49
|
-
emit_config() {
|
|
50
|
-
[ -f "$CONFIG" ] || return 0
|
|
51
|
-
|
|
52
|
-
# Only emit header if at least one field has a value
|
|
53
|
-
[ -n "$_test_mode" ] || [ -n "$_test_enforce" ] || \
|
|
54
|
-
[ -n "$_deep_interview" ] || [ -n "$_auto_max" ] || return 0
|
|
55
|
-
|
|
56
|
-
echo "[config]"
|
|
57
|
-
[ -n "$_test_mode" ] && echo "testing.mode=$_test_mode"
|
|
58
|
-
[ -n "$_test_enforce" ] && echo "testing.enforcement=$_test_enforce"
|
|
59
|
-
[ -n "$_deep_interview" ] && echo "planning.deepInterview=$_deep_interview"
|
|
60
|
-
[ -n "$_auto_max" ] && echo "auto.maxIterations=$_auto_max"
|
|
61
|
-
|
|
62
|
-
return 0
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
# --- [project] section ---
|
|
66
|
-
emit_project() {
|
|
67
|
-
tech=""
|
|
68
|
-
|
|
69
|
-
# Detect from filesystem markers (builtins only, no subprocesses)
|
|
70
|
-
[ -f "package.json" ] && tech="${tech}node,"
|
|
71
|
-
[ -f "tsconfig.json" ] && tech="${tech}typescript,"
|
|
72
|
-
{ [ -f "requirements.txt" ] || [ -f "pyproject.toml" ]; } && tech="${tech}python,"
|
|
73
|
-
[ -f "go.mod" ] && tech="${tech}go,"
|
|
74
|
-
[ -f "Cargo.toml" ] && tech="${tech}rust,"
|
|
75
|
-
{ [ -f "pom.xml" ] || [ -f "build.gradle" ]; } && tech="${tech}java,"
|
|
76
|
-
|
|
77
|
-
# Shell glob for C# — no subprocess needed
|
|
78
|
-
_saved="$1"
|
|
79
|
-
_found_cs=false
|
|
80
|
-
set -- *.csproj
|
|
81
|
-
[ -e "$1" ] && _found_cs=true
|
|
82
|
-
set -- *.sln
|
|
83
|
-
[ -e "$1" ] && _found_cs=true
|
|
84
|
-
$_found_cs && tech="${tech}csharp,"
|
|
85
|
-
set -- "$_saved"
|
|
86
|
-
|
|
87
|
-
# Detect React/Next/Vue from package.json (one grep each, fast)
|
|
88
|
-
if [ -f "package.json" ]; then
|
|
89
|
-
grep -q '"react"' package.json 2>/dev/null && tech="${tech}react,"
|
|
90
|
-
grep -q '"next"' package.json 2>/dev/null && tech="${tech}nextjs,"
|
|
91
|
-
grep -q '"vue"' package.json 2>/dev/null && tech="${tech}vue,"
|
|
92
|
-
fi
|
|
93
|
-
|
|
94
|
-
# Strip trailing comma
|
|
95
|
-
tech="${tech%,}"
|
|
96
|
-
|
|
97
|
-
# Use pre-parsed config values (no extra subprocess)
|
|
98
|
-
multi="false"
|
|
99
|
-
[ "$_multi_project" = "true" ] && multi="true"
|
|
100
|
-
|
|
101
|
-
[ -z "$tech" ] && [ "$multi" = "false" ] && [ -z "$_org" ] && return 0
|
|
102
|
-
|
|
103
|
-
echo "[project]"
|
|
104
|
-
[ -n "$tech" ] && echo "tech=$tech"
|
|
105
|
-
echo "multi-repo=$multi"
|
|
106
|
-
[ -n "$_org" ] && echo "org=$_org"
|
|
107
|
-
|
|
108
|
-
return 0
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
# --- [increment] section ---
|
|
112
|
-
emit_increment() {
|
|
113
|
-
inc_dir=".specweave/increments"
|
|
114
|
-
[ -d "$inc_dir" ] || return 0
|
|
115
|
-
|
|
116
|
-
# Find active increment. Fast grep pre-filter eliminates non-candidates,
|
|
117
|
-
# then jq verifies precisely (handles single-line JSON, avoids false
|
|
118
|
-
# matches on previousStatus). Without jq, grep alone is best-effort.
|
|
119
|
-
active=""
|
|
120
|
-
for meta in "$inc_dir"/*/metadata.json; do
|
|
121
|
-
[ -f "$meta" ] || continue
|
|
122
|
-
# Fast pre-filter: skip files that don't mention in-progress at all
|
|
123
|
-
grep -q '"in-progress"' "$meta" 2>/dev/null || continue
|
|
124
|
-
# Precise check: jq validates the status field specifically
|
|
125
|
-
if $HAS_JQ; then
|
|
126
|
-
jq -e '.status == "in-progress"' "$meta" >/dev/null 2>&1 || continue
|
|
127
|
-
fi
|
|
128
|
-
active=$(basename "$(dirname "$meta")")
|
|
129
|
-
break
|
|
130
|
-
done
|
|
131
|
-
|
|
132
|
-
[ -z "$active" ] && return 0
|
|
133
|
-
|
|
134
|
-
# Calculate completion from tasks.md
|
|
135
|
-
completion=""
|
|
136
|
-
tasks_file="$inc_dir/$active/tasks.md"
|
|
137
|
-
if [ -f "$tasks_file" ]; then
|
|
138
|
-
total=$(grep -c '^\- \[' "$tasks_file" 2>/dev/null) || true
|
|
139
|
-
done_count=$(grep -c '^\- \[x\]' "$tasks_file" 2>/dev/null) || true
|
|
140
|
-
total=${total:-0}
|
|
141
|
-
done_count=${done_count:-0}
|
|
142
|
-
if [ "$total" -gt 0 ] 2>/dev/null; then
|
|
143
|
-
completion=$((done_count * 100 / total))
|
|
144
|
-
fi
|
|
145
|
-
fi
|
|
146
|
-
|
|
147
|
-
echo "[increment]"
|
|
148
|
-
echo "active=$active"
|
|
149
|
-
echo "status=in-progress"
|
|
150
|
-
[ -n "$completion" ] && echo "completion=${completion}%"
|
|
151
|
-
|
|
152
|
-
return 0
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
# --- Main ---
|
|
156
|
-
emit_config
|
|
157
|
-
emit_project
|
|
158
|
-
emit_increment
|
|
159
|
-
|
|
160
|
-
exit 0
|