specweave 0.6.0 → 0.6.4
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/.claude-plugin/README.md +16 -29
- package/.claude-plugin/marketplace.json +5 -5
- package/CLAUDE.md +103 -35
- package/README.md +167 -800
- package/dist/adapters/claude/adapter.d.ts +1 -1
- package/dist/adapters/claude/adapter.js +2 -2
- package/dist/adapters/claude/adapter.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +239 -92
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/plugin.d.ts +16 -5
- package/dist/cli/commands/plugin.d.ts.map +1 -1
- package/dist/cli/commands/plugin.js +20 -5
- package/dist/cli/commands/plugin.js.map +1 -1
- package/dist/locales/en/cli.json +19 -3
- package/dist/utils/agents-md-compiler.js +1 -1
- package/dist/utils/execFileNoThrow.d.ts +97 -0
- package/dist/utils/execFileNoThrow.d.ts.map +1 -0
- package/dist/utils/execFileNoThrow.js +130 -0
- package/dist/utils/execFileNoThrow.js.map +1 -0
- package/package.json +3 -3
- package/plugins/.specweave/logs/hooks-debug.log +24 -0
- package/plugins/.specweave/logs/last-hook-fire +1 -0
- package/plugins/.specweave/logs/last-todowrite-time +1 -0
- package/plugins/.specweave/logs/tasks.log +6 -0
- package/plugins/specweave/.claude-plugin/plugin.json +22 -0
- package/plugins/{specweave-core/commands/specweave.costs.md → specweave/commands/costs.md} +1 -1
- package/plugins/{specweave-core/commands/specweave.do.md → specweave/commands/do.md} +1 -1
- package/plugins/{specweave-core/commands/specweave.done.md → specweave/commands/done.md} +1 -1
- package/plugins/{specweave-core/commands/specweave.inc.md → specweave/commands/inc.md} +1 -1
- package/plugins/{specweave-core/commands/specweave.increment.md → specweave/commands/increment.md} +1 -1
- package/plugins/{specweave-core/commands/specweave.next.md → specweave/commands/next.md} +1 -1
- package/plugins/{specweave-core/commands/specweave.progress.md → specweave/commands/progress.md} +1 -1
- package/plugins/{specweave-core → specweave}/commands/specweave.md +13 -13
- package/plugins/{specweave-core/commands/specweave.sync-docs.md → specweave/commands/sync-docs.md} +1 -1
- package/plugins/{specweave-core/commands/specweave.translate.md → specweave/commands/translate.md} +1 -1
- package/plugins/{specweave-core/commands/specweave.validate.md → specweave/commands/validate.md} +1 -1
- package/plugins/specweave/hooks/hooks.json +15 -0
- package/plugins/{specweave-core → specweave}/skills/plugin-detector/SKILL.md +1 -1
- package/plugins/{specweave-core → specweave}/skills/tdd-workflow/SKILL.md +1 -1
- package/plugins/specweave-github/.claude-plugin/plugin.json +13 -2
- package/plugins/specweave-ml/.claude-plugin/plugin.json +5 -6
- package/plugins/specweave-ui/.claude-plugin/plugin.json +6 -86
- package/src/adapters/claude/adapter.ts +2 -2
- package/src/templates/.gitignore.template +2 -0
- package/plugins/specweave-core/.claude-plugin/plugin.json +0 -25
- package/plugins/specweave-core/hooks/hooks.json +0 -13
- /package/plugins/{specweave-core → specweave}/agents/architect/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/code-reviewer.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/docs-writer/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/performance/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/pm/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/qa-lead/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/security/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/tdd-orchestrator/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/tech-lead/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/agents/translator/AGENT.md +0 -0
- /package/plugins/{specweave-core → specweave}/commands/README.md +0 -0
- /package/plugins/{specweave-core/commands/specweave.list-increments.md → specweave/commands/list-increments.md} +0 -0
- /package/plugins/{specweave-core/commands/specweave.tdd-cycle.md → specweave/commands/tdd-cycle.md} +0 -0
- /package/plugins/{specweave-core/commands/specweave.tdd-green.md → specweave/commands/tdd-green.md} +0 -0
- /package/plugins/{specweave-core/commands/specweave.tdd-red.md → specweave/commands/tdd-red.md} +0 -0
- /package/plugins/{specweave-core/commands/specweave.tdd-refactor.md → specweave/commands/tdd-refactor.md} +0 -0
- /package/plugins/{specweave-core → specweave}/hooks/README.md +0 -0
- /package/plugins/{specweave-core → specweave}/hooks/docs-changed.sh +0 -0
- /package/plugins/{specweave-core → specweave}/hooks/human-input-required.sh +0 -0
- /package/plugins/{specweave-core → specweave}/hooks/post-increment-plugin-detect.sh +0 -0
- /package/plugins/{specweave-core → specweave}/hooks/post-task-completion.sh +0 -0
- /package/plugins/{specweave-core → specweave}/hooks/pre-implementation.sh +0 -0
- /package/plugins/{specweave-core → specweave}/hooks/pre-task-plugin-detect.sh +0 -0
- /package/plugins/{specweave-core → specweave}/skills/SKILLS-INDEX.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/brownfield-analyzer/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/brownfield-onboarder/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/context-loader/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/context-optimizer/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/docs-updater/README.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/docs-updater/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/increment-planner/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/increment-planner/scripts/feature-utils.js +0 -0
- /package/plugins/{specweave-core → specweave}/skills/increment-quality-judge/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/project-kickstarter/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/project-kickstarter/test-cases/test-1-high-confidence-full-product.yaml +0 -0
- /package/plugins/{specweave-core → specweave}/skills/project-kickstarter/test-cases/test-2-medium-confidence-partial.yaml +0 -0
- /package/plugins/{specweave-core → specweave}/skills/project-kickstarter/test-cases/test-3-low-confidence-technical-question.yaml +0 -0
- /package/plugins/{specweave-core → specweave}/skills/project-kickstarter/test-cases/test-4-opt-out-explicit.yaml +0 -0
- /package/plugins/{specweave-core → specweave}/skills/rfc-generator/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/role-orchestrator/README.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/role-orchestrator/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/specweave-detector/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/specweave-framework/SKILL.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/specweave-framework/test-cases/test-1-increment-naming.yaml +0 -0
- /package/plugins/{specweave-core → specweave}/skills/specweave-framework/test-cases/test-2-source-of-truth.yaml +0 -0
- /package/plugins/{specweave-core → specweave}/skills/specweave-framework/test-cases/test-3-increment-discipline.yaml +0 -0
- /package/plugins/{specweave-core → specweave}/skills/specweave-framework/test-cases/test-4-file-placement.yaml +0 -0
- /package/plugins/{specweave-core → specweave}/skills/task-builder/README.md +0 -0
- /package/plugins/{specweave-core → specweave}/skills/translator/SKILL.md +0 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { execFile, execFileSync } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
/**
|
|
5
|
+
* Safely execute a command without throwing errors
|
|
6
|
+
*
|
|
7
|
+
* This utility uses child_process.execFile instead of exec/execSync:
|
|
8
|
+
* - ✅ Prevents command injection vulnerabilities (no shell interpolation)
|
|
9
|
+
* - ✅ Cross-platform compatible (Windows, Mac, Linux)
|
|
10
|
+
* - ✅ Proper error handling (returns result instead of throwing)
|
|
11
|
+
* - ✅ Structured output (stdout, stderr, exitCode)
|
|
12
|
+
*
|
|
13
|
+
* @param command - Command to execute (must be in PATH or absolute path)
|
|
14
|
+
* @param args - Array of arguments (safely escaped automatically)
|
|
15
|
+
* @param options - Additional execution options
|
|
16
|
+
* @returns Promise resolving to execution result
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // ✅ Safe: Arguments automatically escaped
|
|
21
|
+
* const result = await execFileNoThrow('git', ['add', userProvidedFilename]);
|
|
22
|
+
* if (result.success) {
|
|
23
|
+
* console.log('Git add succeeded:', result.stdout);
|
|
24
|
+
* } else {
|
|
25
|
+
* console.error('Git add failed:', result.stderr);
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* // ✅ Check if command exists
|
|
29
|
+
* const which = process.platform === 'win32' ? 'where' : 'which';
|
|
30
|
+
* const checkResult = await execFileNoThrow(which, ['claude']);
|
|
31
|
+
* if (checkResult.success) {
|
|
32
|
+
* console.log('Claude CLI found at:', checkResult.stdout.trim());
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export async function execFileNoThrow(command, args = [], options = {}) {
|
|
37
|
+
try {
|
|
38
|
+
const { stdout, stderr } = await execFileAsync(command, args, {
|
|
39
|
+
...options,
|
|
40
|
+
encoding: 'utf-8',
|
|
41
|
+
// Windows compatibility: execFile automatically finds .exe/.cmd/.bat
|
|
42
|
+
windowsHide: true, // Don't show console window on Windows
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
stdout: stdout || '',
|
|
46
|
+
stderr: stderr || '',
|
|
47
|
+
exitCode: 0,
|
|
48
|
+
success: true,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const execError = error;
|
|
53
|
+
return {
|
|
54
|
+
stdout: execError.stdout || '',
|
|
55
|
+
stderr: execError.stderr || '',
|
|
56
|
+
exitCode: typeof execError.code === 'number' ? execError.code : 1,
|
|
57
|
+
success: false,
|
|
58
|
+
error: execError,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Synchronous version of execFileNoThrow
|
|
64
|
+
*
|
|
65
|
+
* Use sparingly - prefer async version when possible.
|
|
66
|
+
* Useful for initialization code that needs to be synchronous.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const result = execFileNoThrowSync('claude', ['--version']);
|
|
71
|
+
* if (result.success) {
|
|
72
|
+
* console.log('Claude version:', result.stdout.trim());
|
|
73
|
+
* }
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export function execFileNoThrowSync(command, args = [], options = {}) {
|
|
77
|
+
try {
|
|
78
|
+
const stdout = execFileSync(command, args, {
|
|
79
|
+
...options,
|
|
80
|
+
encoding: 'utf-8',
|
|
81
|
+
windowsHide: true,
|
|
82
|
+
});
|
|
83
|
+
return {
|
|
84
|
+
stdout: stdout || '',
|
|
85
|
+
stderr: '',
|
|
86
|
+
exitCode: 0,
|
|
87
|
+
success: true,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return {
|
|
92
|
+
stdout: error.stdout || '',
|
|
93
|
+
stderr: error.stderr || '',
|
|
94
|
+
exitCode: typeof error.status === 'number' ? error.status : 1,
|
|
95
|
+
success: false,
|
|
96
|
+
error: error,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if a command is available in PATH
|
|
102
|
+
*
|
|
103
|
+
* Cross-platform helper that uses 'which' (Unix) or 'where' (Windows)
|
|
104
|
+
*
|
|
105
|
+
* @param command - Command name to check (e.g., 'claude', 'git', 'node')
|
|
106
|
+
* @returns Promise resolving to true if command exists, false otherwise
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* if (await isCommandAvailable('claude')) {
|
|
111
|
+
* console.log('Claude CLI is installed');
|
|
112
|
+
* } else {
|
|
113
|
+
* console.log('Claude CLI not found - install from https://claude.com/code');
|
|
114
|
+
* }
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export async function isCommandAvailable(command) {
|
|
118
|
+
const whichCommand = process.platform === 'win32' ? 'where' : 'which';
|
|
119
|
+
const result = await execFileNoThrow(whichCommand, [command]);
|
|
120
|
+
return result.success;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Synchronous version of isCommandAvailable
|
|
124
|
+
*/
|
|
125
|
+
export function isCommandAvailableSync(command) {
|
|
126
|
+
const whichCommand = process.platform === 'win32' ? 'where' : 'which';
|
|
127
|
+
const result = execFileNoThrowSync(whichCommand, [command]);
|
|
128
|
+
return result.success;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=execFileNoThrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execFileNoThrow.js","sourceRoot":"","sources":["../../src/utils/execFileNoThrow.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.4",
|
|
4
4
|
"description": "Replace vibe coding with spec-driven development. LLM-native i18n in 9 languages. Smart workflow: /specweave inc auto-closes previous, /specweave build auto-resumes, /specweave progress shows status. PM-led planning, 10 agents, 35+ skills. spec-weave.com",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc && npm run copy:locales",
|
|
12
|
-
"copy:locales": "
|
|
12
|
+
"copy:locales": "node scripts/copy-locales.js",
|
|
13
13
|
"dev": "tsc --watch",
|
|
14
14
|
"prepare": "npm run build",
|
|
15
15
|
"test": "jest",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
},
|
|
60
60
|
"homepage": "https://spec-weave.com",
|
|
61
61
|
"engines": {
|
|
62
|
-
"node": ">=
|
|
62
|
+
"node": ">=20.0.0"
|
|
63
63
|
},
|
|
64
64
|
"files": [
|
|
65
65
|
"dist",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
[Mon Nov 3 09:34:04 EST 2025] 📋 TodoWrite hook fired
|
|
2
|
+
[Mon Nov 3 09:34:04 EST 2025] Input JSON:
|
|
3
|
+
{"session_id":"0838c8f3-363c-474c-b220-be7164977242","transcript_path":"/Users/antonabyzov/.claude/projects/-Users-antonabyzov-Projects-github-specweave/0838c8f3-363c-474c-b220-be7164977242.jsonl","cwd":"/Users/antonabyzov/Projects/github/specweave","permission_mode":"bypassPermissions","hook_event_name":"PostToolUse","tool_name":"TodoWrite","tool_input":{"todos":[{"content":"Analyze failing GitHub Actions workflows","status":"completed","activeForm":"Analyzing failing GitHub Actions workflows"},{"content":"Fix cross-platform copy:locales script for Windows support","status":"completed","activeForm":"Fixing cross-platform copy:locales script for Windows support"},{"content":"Update Node.js minimum version to 20.x for dependencies","status":"completed","activeForm":"Updating Node.js minimum version to 20.x for dependencies"},{"content":"Test the build locally to verify copy-locales script works","status":"completed","activeForm":"Testing the build locally to verify copy-locales script works"},{"content":"Check and fix Jest test configuration","status":"completed","activeForm":"Checking and fixing Jest test configuration"},{"content":"Fix E2E smoke test failures","status":"completed","activeForm":"Fixing E2E smoke test failures"},{"content":"Commit and push all fixes","status":"completed","activeForm":"Committing and pushing all fixes"}]},"tool_response":{"oldTodos":[{"content":"Analyze failing GitHub Actions workflows","status":"completed","activeForm":"Analyzing failing GitHub Actions workflows"},{"content":"Fix cross-platform copy:locales script for Windows support","status":"completed","activeForm":"Fixing cross-platform copy:locales script for Windows support"},{"content":"Update Node.js minimum version to 20.x for dependencies","status":"completed","activeForm":"Updating Node.js minimum version to 20.x for dependencies"},{"content":"Test the build locally to verify copy-locales script works","status":"completed","activeForm":"Testing the build locally to verify copy-locales script works"},{"content":"Check and fix Jest test configuration","status":"completed","activeForm":"Checking and fixing Jest test configuration"},{"content":"Fix E2E smoke test failures","status":"completed","activeForm":"Fixing E2E smoke test failures"},{"content":"Commit and push all fixes","status":"in_progress","activeForm":"Committing and pushing all fixes"}],"newTodos":[{"content":"Analyze failing GitHub Actions workflows","status":"completed","activeForm":"Analyzing failing GitHub Actions workflows"},{"content":"Fix cross-platform copy:locales script for Windows support","status":"completed","activeForm":"Fixing cross-platform copy:locales script for Windows support"},{"content":"Update Node.js minimum version to 20.x for dependencies","status":"completed","activeForm":"Updating Node.js minimum version to 20.x for dependencies"},{"content":"Test the build locally to verify copy-locales script works","status":"completed","activeForm":"Testing the build locally to verify copy-locales script works"},{"content":"Check and fix Jest test configuration","status":"completed","activeForm":"Checking and fixing Jest test configuration"},{"content":"Fix E2E smoke test failures","status":"completed","activeForm":"Fixing E2E smoke test failures"},{"content":"Commit and push all fixes","status":"completed","activeForm":"Committing and pushing all fixes"}]}}
|
|
4
|
+
[Mon Nov 3 09:34:04 EST 2025] 🆕 First TodoWrite in session
|
|
5
|
+
[Mon Nov 3 09:34:04 EST 2025] 📊 Tasks: 7/7 completed
|
|
6
|
+
[Mon Nov 3 09:34:04 EST 2025] ⚡ All tasks complete, but rapid activity (0s < 15s) - Claude likely creating more work (no sound)
|
|
7
|
+
[Mon Nov 3 09:34:04 EST 2025] ℹ️ No current increment or tasks.md found, skipping tasks.md update
|
|
8
|
+
---
|
|
9
|
+
[Mon Nov 3 13:38:00 EST 2025] 📋 TodoWrite hook fired
|
|
10
|
+
[Mon Nov 3 13:38:00 EST 2025] Input JSON:
|
|
11
|
+
{"session_id":"2bd78607-8a30-4dc4-a33c-a79f383b2cf5","transcript_path":"/Users/antonabyzov/.claude/projects/-Users-antonabyzov-Projects-github-specweave/2bd78607-8a30-4dc4-a33c-a79f383b2cf5.jsonl","cwd":"/Users/antonabyzov/Projects/github/specweave","permission_mode":"bypassPermissions","hook_event_name":"PostToolUse","tool_name":"TodoWrite","tool_input":{"todos":[{"content":"Rename plugin directory from specweave-core to specweave","status":"pending","activeForm":"Renaming plugin directory from specweave-core to specweave"},{"content":"Update plugin.json with new name","status":"pending","activeForm":"Updating plugin.json with new name"},{"content":"Rename all command files (remove specweave. prefix)","status":"pending","activeForm":"Renaming all command files (remove specweave. prefix)"},{"content":"Update marketplace.json registry","status":"pending","activeForm":"Updating marketplace.json registry"},{"content":"Update CLAUDE.md with new command format","status":"pending","activeForm":"Updating CLAUDE.md with new command format"},{"content":"Update README.md with new command format","status":"pending","activeForm":"Updating README.md with new command format"},{"content":"Update all Docusaurus site documentation","status":"pending","activeForm":"Updating all Docusaurus site documentation"},{"content":"Update source code references to plugin name","status":"pending","activeForm":"Updating source code references to plugin name"},{"content":"Update test files with new plugin name","status":"pending","activeForm":"Updating test files with new plugin name"},{"content":"Update increment specs/plans with new command format","status":"pending","activeForm":"Updating increment specs/plans with new command format"}]},"tool_response":{"oldTodos":[],"newTodos":[{"content":"Rename plugin directory from specweave-core to specweave","status":"pending","activeForm":"Renaming plugin directory from specweave-core to specweave"},{"content":"Update plugin.json with new name","status":"pending","activeForm":"Updating plugin.json with new name"},{"content":"Rename all command files (remove specweave. prefix)","status":"pending","activeForm":"Renaming all command files (remove specweave. prefix)"},{"content":"Update marketplace.json registry","status":"pending","activeForm":"Updating marketplace.json registry"},{"content":"Update CLAUDE.md with new command format","status":"pending","activeForm":"Updating CLAUDE.md with new command format"},{"content":"Update README.md with new command format","status":"pending","activeForm":"Updating README.md with new command format"},{"content":"Update all Docusaurus site documentation","status":"pending","activeForm":"Updating all Docusaurus site documentation"},{"content":"Update source code references to plugin name","status":"pending","activeForm":"Updating source code references to plugin name"},{"content":"Update test files with new plugin name","status":"pending","activeForm":"Updating test files with new plugin name"},{"content":"Update increment specs/plans with new command format","status":"pending","activeForm":"Updating increment specs/plans with new command format"}]}}
|
|
12
|
+
[Mon Nov 3 13:38:00 EST 2025] ⏱️ Inactivity gap: 14636s (threshold: 15s)
|
|
13
|
+
[Mon Nov 3 13:38:00 EST 2025] 📊 Tasks: 0/10 completed
|
|
14
|
+
[Mon Nov 3 13:38:00 EST 2025] 🔄 Tasks remaining in current list (no sound)
|
|
15
|
+
[Mon Nov 3 13:38:00 EST 2025] ℹ️ No current increment or tasks.md found, skipping tasks.md update
|
|
16
|
+
---
|
|
17
|
+
[Mon Nov 3 13:38:09 EST 2025] 📋 TodoWrite hook fired
|
|
18
|
+
[Mon Nov 3 13:38:09 EST 2025] Input JSON:
|
|
19
|
+
{"session_id":"2bd78607-8a30-4dc4-a33c-a79f383b2cf5","transcript_path":"/Users/antonabyzov/.claude/projects/-Users-antonabyzov-Projects-github-specweave/2bd78607-8a30-4dc4-a33c-a79f383b2cf5.jsonl","cwd":"/Users/antonabyzov/Projects/github/specweave","permission_mode":"bypassPermissions","hook_event_name":"PostToolUse","tool_name":"TodoWrite","tool_input":{"todos":[{"content":"Rename plugin directory from specweave-core to specweave","status":"in_progress","activeForm":"Renaming plugin directory from specweave-core to specweave"},{"content":"Update plugin.json with new name","status":"pending","activeForm":"Updating plugin.json with new name"},{"content":"Rename all command files (remove specweave. prefix)","status":"pending","activeForm":"Renaming all command files (remove specweave. prefix)"},{"content":"Update marketplace.json registry","status":"pending","activeForm":"Updating marketplace.json registry"},{"content":"Update CLAUDE.md with new command format","status":"pending","activeForm":"Updating CLAUDE.md with new command format"},{"content":"Update README.md with new command format","status":"pending","activeForm":"Updating README.md with new command format"},{"content":"Update all Docusaurus site documentation","status":"pending","activeForm":"Updating all Docusaurus site documentation"},{"content":"Update source code references to plugin name","status":"pending","activeForm":"Updating source code references to plugin name"},{"content":"Update test files with new plugin name","status":"pending","activeForm":"Updating test files with new plugin name"},{"content":"Update increment specs/plans with new command format","status":"pending","activeForm":"Updating increment specs/plans with new command format"}]},"tool_response":{"oldTodos":[{"content":"Rename plugin directory from specweave-core to specweave","status":"pending","activeForm":"Renaming plugin directory from specweave-core to specweave"},{"content":"Update plugin.json with new name","status":"pending","activeForm":"Updating plugin.json with new name"},{"content":"Rename all command files (remove specweave. prefix)","status":"pending","activeForm":"Renaming all command files (remove specweave. prefix)"},{"content":"Update marketplace.json registry","status":"pending","activeForm":"Updating marketplace.json registry"},{"content":"Update CLAUDE.md with new command format","status":"pending","activeForm":"Updating CLAUDE.md with new command format"},{"content":"Update README.md with new command format","status":"pending","activeForm":"Updating README.md with new command format"},{"content":"Update all Docusaurus site documentation","status":"pending","activeForm":"Updating all Docusaurus site documentation"},{"content":"Update source code references to plugin name","status":"pending","activeForm":"Updating source code references to plugin name"},{"content":"Update test files with new plugin name","status":"pending","activeForm":"Updating test files with new plugin name"},{"content":"Update increment specs/plans with new command format","status":"pending","activeForm":"Updating increment specs/plans with new command format"}],"newTodos":[{"content":"Rename plugin directory from specweave-core to specweave","status":"in_progress","activeForm":"Renaming plugin directory from specweave-core to specweave"},{"content":"Update plugin.json with new name","status":"pending","activeForm":"Updating plugin.json with new name"},{"content":"Rename all command files (remove specweave. prefix)","status":"pending","activeForm":"Renaming all command files (remove specweave. prefix)"},{"content":"Update marketplace.json registry","status":"pending","activeForm":"Updating marketplace.json registry"},{"content":"Update CLAUDE.md with new command format","status":"pending","activeForm":"Updating CLAUDE.md with new command format"},{"content":"Update README.md with new command format","status":"pending","activeForm":"Updating README.md with new command format"},{"content":"Update all Docusaurus site documentation","status":"pending","activeForm":"Updating all Docusaurus site documentation"},{"content":"Update source code references to plugin name","status":"pending","activeForm":"Updating source code references to plugin name"},{"content":"Update test files with new plugin name","status":"pending","activeForm":"Updating test files with new plugin name"},{"content":"Update increment specs/plans with new command format","status":"pending","activeForm":"Updating increment specs/plans with new command format"}]}}
|
|
20
|
+
[Mon Nov 3 13:38:09 EST 2025] ⏱️ Inactivity gap: 9s (threshold: 15s)
|
|
21
|
+
[Mon Nov 3 13:38:09 EST 2025] 📊 Tasks: 0/10 completed
|
|
22
|
+
[Mon Nov 3 13:38:09 EST 2025] 🔄 Tasks remaining in current list (no sound)
|
|
23
|
+
[Mon Nov 3 13:38:09 EST 2025] ℹ️ No current increment or tasks.md found, skipping tasks.md update
|
|
24
|
+
---
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1762195089
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1762195089
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
[Mon Nov 3 09:34:04 EST 2025] Status: All_completed=true, Session_ending=false, Inactivity=0s
|
|
2
|
+
[Mon Nov 3 09:34:04 EST 2025] Reason: All tasks complete, but rapid activity (0s < 15s) - Claude likely creating more work
|
|
3
|
+
[Mon Nov 3 13:38:00 EST 2025] Status: All_completed=false, Session_ending=false, Inactivity=14636s
|
|
4
|
+
[Mon Nov 3 13:38:00 EST 2025] Reason: Tasks remaining in current list
|
|
5
|
+
[Mon Nov 3 13:38:09 EST 2025] Status: All_completed=false, Session_ending=false, Inactivity=9s
|
|
6
|
+
[Mon Nov 3 13:38:09 EST 2025] Reason: Tasks remaining in current list
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "specweave",
|
|
3
|
+
"description": "SpecWeave framework. Provides increment planning (PM, Architect, Tech Lead agents), RFC generation, TDD workflow, living docs sync, and brownfield support. Essential for all SpecWeave projects.",
|
|
4
|
+
"version": "0.6.1",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "SpecWeave Team",
|
|
7
|
+
"url": "https://spec-weave.com"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://spec-weave.com",
|
|
10
|
+
"repository": "https://github.com/anton-abyzov/specweave",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"specweave",
|
|
14
|
+
"core",
|
|
15
|
+
"increment-planning",
|
|
16
|
+
"rfc",
|
|
17
|
+
"tdd",
|
|
18
|
+
"pm",
|
|
19
|
+
"architect",
|
|
20
|
+
"living-docs"
|
|
21
|
+
]
|
|
22
|
+
}
|
|
@@ -73,11 +73,11 @@ subcommands:
|
|
|
73
73
|
sync-jira: .claude/commands/specweave:sync-jira.md
|
|
74
74
|
|
|
75
75
|
# GitHub Plugin Commands
|
|
76
|
-
github.create-issue: .claude/commands/specweave
|
|
77
|
-
github.sync: .claude/commands/specweave
|
|
78
|
-
github.sync-tasks: .claude/commands/specweave
|
|
79
|
-
github.close-issue: .claude/commands/specweave
|
|
80
|
-
github.status: .claude/commands/specweave
|
|
76
|
+
github.create-issue: .claude/commands/specweave-github:github-create-issue.md
|
|
77
|
+
github.sync: .claude/commands/specweave-github:github-sync.md
|
|
78
|
+
github.sync-tasks: .claude/commands/specweave-github:github-sync-tasks.md
|
|
79
|
+
github.close-issue: .claude/commands/specweave-github:github-close-issue.md
|
|
80
|
+
github.status: .claude/commands/specweave-github:github-status.md
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
---
|
|
@@ -209,14 +209,14 @@ function handleSpecweaveCommand(rawInput) {
|
|
|
209
209
|
|
|
210
210
|
// Routing table
|
|
211
211
|
const routes = {
|
|
212
|
-
'inc': '
|
|
213
|
-
'do': '
|
|
214
|
-
'next': '
|
|
215
|
-
'done': '
|
|
216
|
-
'progress': '
|
|
217
|
-
'validate': '
|
|
218
|
-
'sync-github': '
|
|
219
|
-
'sync-docs': '
|
|
212
|
+
'inc': 'inc.md',
|
|
213
|
+
'do': 'do.md',
|
|
214
|
+
'next': 'next.md',
|
|
215
|
+
'done': 'done.md',
|
|
216
|
+
'progress': 'progress.md',
|
|
217
|
+
'validate': 'validate.md',
|
|
218
|
+
'sync-github': 'sync-github.md',
|
|
219
|
+
'sync-docs': 'sync-docs.md'
|
|
220
220
|
};
|
|
221
221
|
|
|
222
222
|
// Validate subcommand
|
|
@@ -134,7 +134,7 @@ Let me start by examining your architecture specifications...
|
|
|
134
134
|
## Available SpecWeave Plugins
|
|
135
135
|
|
|
136
136
|
### Core (Always Available)
|
|
137
|
-
- `specweave
|
|
137
|
+
- `specweave` - Framework essentials (increment lifecycle, PM/Architect/Tech Lead agents)
|
|
138
138
|
|
|
139
139
|
### Integrations
|
|
140
140
|
- `specweave-github` - GitHub Issues sync
|
|
@@ -369,7 +369,7 @@ tdd:
|
|
|
369
369
|
|
|
370
370
|
**Not a replacement for**:
|
|
371
371
|
- `tdd-orchestrator` agent (deep expertise)
|
|
372
|
-
- `/specweave
|
|
372
|
+
- `/specweave:tdd-*` commands (workflow enforcement)
|
|
373
373
|
|
|
374
374
|
**Instead, it's the entry point** that helps users choose the right TDD tool for their context.
|
|
375
375
|
|
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
"description": "GitHub Issues integration for SpecWeave increments. Bidirectional sync between SpecWeave increments and GitHub Issues. Automatically creates issues from increments, tracks progress, and closes issues on completion. Uses GitHub CLI (gh) for seamless integration.",
|
|
4
4
|
"version": "1.0.0",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "SpecWeave Team"
|
|
7
|
-
|
|
6
|
+
"name": "SpecWeave Team",
|
|
7
|
+
"url": "https://spec-weave.com"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://spec-weave.com",
|
|
10
|
+
"repository": "https://github.com/anton-abyzov/specweave",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"github",
|
|
14
|
+
"issues",
|
|
15
|
+
"integration",
|
|
16
|
+
"sync",
|
|
17
|
+
"specweave"
|
|
18
|
+
]
|
|
8
19
|
}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"description": "Complete ML/AI workflow integration for SpecWeave - from experiment tracking to production deployment. Includes 13 comprehensive skills covering the full ML lifecycle: pipeline orchestration, experiment tracking, model evaluation, explainability, deployment, feature engineering, AutoML, computer vision, NLP, time series forecasting, anomaly detection, data visualization, and model registry.",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "SpecWeave",
|
|
7
|
-
"email": "[email protected]"
|
|
6
|
+
"name": "SpecWeave Team",
|
|
7
|
+
"email": "[email protected]",
|
|
8
|
+
"url": "https://spec-weave.com"
|
|
8
9
|
},
|
|
10
|
+
"homepage": "https://spec-weave.com",
|
|
9
11
|
"repository": "https://github.com/anton-abyzov/specweave",
|
|
10
12
|
"license": "MIT",
|
|
11
13
|
"keywords": [
|
|
@@ -32,8 +34,5 @@
|
|
|
32
34
|
"prophet",
|
|
33
35
|
"data-science",
|
|
34
36
|
"specweave"
|
|
35
|
-
]
|
|
36
|
-
"dependencies": {
|
|
37
|
-
"specweave": ">=0.6.0"
|
|
38
|
-
}
|
|
37
|
+
]
|
|
39
38
|
}
|
|
@@ -3,17 +3,13 @@
|
|
|
3
3
|
"description": "Complete UI/UX development toolkit - Playwright E2E testing, Figma design integration, React/Vue/Angular development, design systems, Storybook component testing. Auto-activates for frontend projects.",
|
|
4
4
|
"version": "1.0.0",
|
|
5
5
|
"author": {
|
|
6
|
-
"name": "
|
|
6
|
+
"name": "SpecWeave Team",
|
|
7
7
|
"email": "anton@spec-weave.com",
|
|
8
8
|
"url": "https://spec-weave.com"
|
|
9
9
|
},
|
|
10
10
|
"license": "MIT",
|
|
11
|
-
"homepage": "https://spec-weave.com
|
|
12
|
-
"repository":
|
|
13
|
-
"type": "git",
|
|
14
|
-
"url": "https://github.com/anton-abyzov/specweave.git",
|
|
15
|
-
"directory": "src/plugins/specweave-ui"
|
|
16
|
-
},
|
|
11
|
+
"homepage": "https://spec-weave.com",
|
|
12
|
+
"repository": "https://github.com/anton-abyzov/specweave",
|
|
17
13
|
"keywords": [
|
|
18
14
|
"ui",
|
|
19
15
|
"ux",
|
|
@@ -24,83 +20,7 @@
|
|
|
24
20
|
"design-system",
|
|
25
21
|
"e2e-testing",
|
|
26
22
|
"storybook",
|
|
27
|
-
"frontend"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"core_version": ">=0.4.0",
|
|
31
|
-
"plugin_type": "domain",
|
|
32
|
-
"category": "ui-ux"
|
|
33
|
-
},
|
|
34
|
-
"provides": {
|
|
35
|
-
"skills": [
|
|
36
|
-
"e2e-playwright",
|
|
37
|
-
"figma-designer",
|
|
38
|
-
"figma-implementer",
|
|
39
|
-
"figma-mcp-connector",
|
|
40
|
-
"design-system-architect",
|
|
41
|
-
"frontend",
|
|
42
|
-
"nextjs"
|
|
43
|
-
],
|
|
44
|
-
"agents": [
|
|
45
|
-
"ui-ux-specialist"
|
|
46
|
-
],
|
|
47
|
-
"commands": [
|
|
48
|
-
"ui.test",
|
|
49
|
-
"ui.design",
|
|
50
|
-
"ui.implement"
|
|
51
|
-
]
|
|
52
|
-
},
|
|
53
|
-
"auto_detect": {
|
|
54
|
-
"packages": [
|
|
55
|
-
"@playwright/test",
|
|
56
|
-
"playwright",
|
|
57
|
-
"figma",
|
|
58
|
-
"@figma/rest-api-types",
|
|
59
|
-
"react",
|
|
60
|
-
"react-dom",
|
|
61
|
-
"next",
|
|
62
|
-
"vue",
|
|
63
|
-
"@angular/core",
|
|
64
|
-
"@storybook/react",
|
|
65
|
-
"@storybook/vue",
|
|
66
|
-
"@storybook/angular"
|
|
67
|
-
],
|
|
68
|
-
"files": [
|
|
69
|
-
"playwright.config.ts",
|
|
70
|
-
"playwright.config.js",
|
|
71
|
-
"figma.config.json",
|
|
72
|
-
".storybook/",
|
|
73
|
-
"next.config.js",
|
|
74
|
-
"next.config.ts"
|
|
75
|
-
],
|
|
76
|
-
"triggers": [
|
|
77
|
-
"playwright",
|
|
78
|
-
"e2e",
|
|
79
|
-
"end-to-end",
|
|
80
|
-
"figma",
|
|
81
|
-
"design",
|
|
82
|
-
"ui",
|
|
83
|
-
"ux",
|
|
84
|
-
"frontend",
|
|
85
|
-
"react",
|
|
86
|
-
"next",
|
|
87
|
-
"vue",
|
|
88
|
-
"angular",
|
|
89
|
-
"storybook",
|
|
90
|
-
"design system",
|
|
91
|
-
"component library"
|
|
92
|
-
]
|
|
93
|
-
},
|
|
94
|
-
"dependencies": {
|
|
95
|
-
"mcp_servers": {
|
|
96
|
-
"browserbase": {
|
|
97
|
-
"optional": true,
|
|
98
|
-
"description": "Cloud browser automation for Playwright tests",
|
|
99
|
-
"env_vars": [
|
|
100
|
-
"BROWSERBASE_API_KEY",
|
|
101
|
-
"BROWSERBASE_PROJECT_ID"
|
|
102
|
-
]
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
23
|
+
"frontend",
|
|
24
|
+
"specweave"
|
|
25
|
+
]
|
|
106
26
|
}
|
|
@@ -56,7 +56,7 @@ export class ClaudeAdapter extends AdapterBase {
|
|
|
56
56
|
* 1. Create .specweave/ structure (project data)
|
|
57
57
|
* 2. Show marketplace installation instructions
|
|
58
58
|
* 3. User adds marketplace: /plugin marketplace add anton-abyzov/specweave
|
|
59
|
-
* 4. User installs plugins: /plugin install specweave
|
|
59
|
+
* 4. User installs plugins: /plugin install specweave@specweave
|
|
60
60
|
*/
|
|
61
61
|
async install(options: AdapterOptions): Promise<void> {
|
|
62
62
|
console.log('\n📦 Installing Claude Code Adapter (Native Plugin System)\n');
|
|
@@ -79,7 +79,7 @@ export class ClaudeAdapter extends AdapterBase {
|
|
|
79
79
|
console.log('\n 1️⃣ Add SpecWeave marketplace:');
|
|
80
80
|
console.log(' /plugin marketplace add anton-abyzov/specweave');
|
|
81
81
|
console.log('\n 2️⃣ Install SpecWeave core:');
|
|
82
|
-
console.log(' /plugin install specweave
|
|
82
|
+
console.log(' /plugin install specweave@specweave');
|
|
83
83
|
console.log('\n 3️⃣ (Optional) Install GitHub plugin:');
|
|
84
84
|
console.log(' /plugin install specweave-github@specweave');
|
|
85
85
|
console.log('\n 4️⃣ Start using SpecWeave:');
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
.specweave/cache/
|
|
3
3
|
.specweave/increments/*/logs/ # Gitignored, but structure preserved
|
|
4
4
|
.specweave/increments/*/test-results/
|
|
5
|
+
.claude-plugin/ # Plugin marketplace (framework files)
|
|
6
|
+
plugins/ # Plugin implementations (framework files)
|
|
5
7
|
|
|
6
8
|
# Dependencies (framework-agnostic)
|
|
7
9
|
node_modules/ # JavaScript/TypeScript
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "specweave-core",
|
|
3
|
-
"description": "Core SpecWeave framework. Provides increment planning (PM, Architect, Tech Lead agents), RFC generation, TDD workflow, living docs sync, and brownfield support. Essential for all SpecWeave projects.",
|
|
4
|
-
"version": "0.6.0",
|
|
5
|
-
"author": {
|
|
6
|
-
"name": "SpecWeave Team",
|
|
7
|
-
"url": "https://spec-weave.com"
|
|
8
|
-
},
|
|
9
|
-
"homepage": "https://spec-weave.com",
|
|
10
|
-
"repository": {
|
|
11
|
-
"type": "git",
|
|
12
|
-
"url": "https://github.com/anton-abyzov/specweave"
|
|
13
|
-
},
|
|
14
|
-
"keywords": [
|
|
15
|
-
"specweave",
|
|
16
|
-
"core",
|
|
17
|
-
"increment-planning",
|
|
18
|
-
"rfc",
|
|
19
|
-
"tdd",
|
|
20
|
-
"pm",
|
|
21
|
-
"architect",
|
|
22
|
-
"living-docs"
|
|
23
|
-
],
|
|
24
|
-
"dependencies": []
|
|
25
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"hooks": [
|
|
3
|
-
{
|
|
4
|
-
"name": "post-task-completion",
|
|
5
|
-
"description": "Fires after EVERY task completion via TodoWrite. Updates living docs, plays notification sound when session ends.",
|
|
6
|
-
"event": "tool:after",
|
|
7
|
-
"tool": "TodoWrite",
|
|
8
|
-
"script": "./post-task-completion.sh",
|
|
9
|
-
"blocking": false,
|
|
10
|
-
"enabled": true
|
|
11
|
-
}
|
|
12
|
-
]
|
|
13
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|