specweave 1.0.355 → 1.0.356
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/dist/src/adapters/claude/adapter.d.ts +3 -4
- package/dist/src/adapters/claude/adapter.d.ts.map +1 -1
- package/dist/src/adapters/claude/adapter.js +3 -4
- package/dist/src/adapters/claude/adapter.js.map +1 -1
- package/dist/src/cli/commands/refresh-plugins.d.ts +3 -2
- package/dist/src/cli/commands/refresh-plugins.d.ts.map +1 -1
- package/dist/src/cli/commands/refresh-plugins.js +3 -8
- package/dist/src/cli/commands/refresh-plugins.js.map +1 -1
- package/dist/src/cli/commands/update.d.ts.map +1 -1
- package/dist/src/cli/commands/update.js +35 -4
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/core/doctor/checkers/installation-health-checker.d.ts +14 -15
- package/dist/src/core/doctor/checkers/installation-health-checker.d.ts.map +1 -1
- package/dist/src/core/doctor/checkers/installation-health-checker.js +78 -148
- package/dist/src/core/doctor/checkers/installation-health-checker.js.map +1 -1
- package/dist/src/core/lazy-loading/llm-plugin-detector.d.ts +2 -2
- package/dist/src/core/lazy-loading/llm-plugin-detector.d.ts.map +1 -1
- package/dist/src/core/lazy-loading/llm-plugin-detector.js +31 -15
- package/dist/src/core/lazy-loading/llm-plugin-detector.js.map +1 -1
- package/dist/src/utils/plugin-copier.d.ts +28 -47
- package/dist/src/utils/plugin-copier.d.ts.map +1 -1
- package/dist/src/utils/plugin-copier.js +85 -155
- package/dist/src/utils/plugin-copier.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/hooks/stop-auto-v5.sh +26 -17
- package/plugins/specweave/skills/auto/SKILL.md +15 -1
- package/plugins/specweave/skills/do/SKILL.md +3 -3
- package/plugins/specweave/skills/increment/SKILL.md +3 -3
- package/plugins/specweave/skills/team-build/SKILL.md +1 -1
- package/plugins/specweave/skills/team-lead/SKILL.md +7 -5
- package/plugins/specweave/skills/validate/SKILL.md +1 -1
- package/dist/src/utils/claude-plugin-cli.d.ts +0 -32
- package/dist/src/utils/claude-plugin-cli.d.ts.map +0 -1
- package/dist/src/utils/claude-plugin-cli.js +0 -74
- package/dist/src/utils/claude-plugin-cli.js.map +0 -1
|
@@ -155,8 +155,9 @@ if [ -f "$DEDUP_PREV" ]; then
|
|
|
155
155
|
fi
|
|
156
156
|
echo "$NOW" > "$DEDUP_PREV" 2>/dev/null
|
|
157
157
|
|
|
158
|
-
# 7. Read userGoal from session marker
|
|
158
|
+
# 7. Read userGoal and simple mode from session marker
|
|
159
159
|
USER_GOAL=$(jq -r '.userGoal // ""' "$SESSION" 2>/dev/null || echo "")
|
|
160
|
+
SIMPLE=$(jq -r '.simple // false' "$SESSION" 2>/dev/null || echo "false")
|
|
160
161
|
|
|
161
162
|
# 8. Scan active increments (enriched: next task, progress fraction)
|
|
162
163
|
TP=0; TAC=0; IC=0; ILIST=""
|
|
@@ -212,7 +213,7 @@ if [ "$IC" -eq 0 ]; then
|
|
|
212
213
|
fi
|
|
213
214
|
fi
|
|
214
215
|
|
|
215
|
-
# 10. Work remains → block with
|
|
216
|
+
# 10. Work remains → block with context message (simple or enriched)
|
|
216
217
|
# Sort entries by score descending (highest-relevance first) when userGoal is set
|
|
217
218
|
SORTED_ILIST="$ILIST"
|
|
218
219
|
if [ -n "$USER_GOAL" ] && [ "$IC" -gt 1 ]; then
|
|
@@ -221,24 +222,32 @@ if [ -n "$USER_GOAL" ] && [ "$IC" -gt 1 ]; then
|
|
|
221
222
|
SORTED_ILIST="${SORTED_ILIST%,}" # trim trailing comma
|
|
222
223
|
fi
|
|
223
224
|
|
|
224
|
-
|
|
225
|
+
# Extract best increment ID (first entry after sorting)
|
|
225
226
|
_BEST_ID=""
|
|
226
227
|
IFS=',' read -ra ENTRIES <<< "$SORTED_ILIST"
|
|
227
|
-
|
|
228
|
-
IFS='|' read -r eid ep ea enext edone etotal escore <<< "$entry"
|
|
229
|
-
[ -z "$_BEST_ID" ] && _BEST_ID="$eid"
|
|
230
|
-
_progress="${edone:-0}/${etotal:-0} tasks"
|
|
231
|
-
_next_info=""
|
|
232
|
-
[ -n "$enext" ] && _next_info=" | Next: $enext"
|
|
233
|
-
DETAILS="${DETAILS}\n ▸ ${eid}: ${_progress}${_next_info}"
|
|
234
|
-
done
|
|
228
|
+
IFS='|' read -r _BEST_ID _rest <<< "${ENTRIES[0]}"
|
|
235
229
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
BMSG
|
|
240
|
-
|
|
241
|
-
|
|
230
|
+
if [ "$SIMPLE" = "true" ]; then
|
|
231
|
+
# Simple mode: minimal message to reduce context tokens per turn
|
|
232
|
+
BMSG="Continue: /sw:do ${_BEST_ID} ($TP tasks left, turn $TURN/$MAX_TURNS)"
|
|
233
|
+
BMSG=$(echo -e "$BMSG")
|
|
234
|
+
else
|
|
235
|
+
# Full mode: enriched context with per-increment progress and next task
|
|
236
|
+
DETAILS=""
|
|
237
|
+
for entry in "${ENTRIES[@]}"; do
|
|
238
|
+
IFS='|' read -r eid ep ea enext edone etotal escore <<< "$entry"
|
|
239
|
+
_progress="${edone:-0}/${etotal:-0} tasks"
|
|
240
|
+
_next_info=""
|
|
241
|
+
[ -n "$enext" ] && _next_info=" | Next: $enext"
|
|
242
|
+
DETAILS="${DETAILS}\n ▸ ${eid}: ${_progress}${_next_info}"
|
|
243
|
+
done
|
|
244
|
+
|
|
245
|
+
BMSG=""
|
|
246
|
+
[ -n "$USER_GOAL" ] && BMSG="Goal: ${USER_GOAL}\n"
|
|
247
|
+
BMSG="${BMSG}Auto Mode: ${IC} increment(s) need work${DETAILS}"
|
|
248
|
+
BMSG="${BMSG}\nTurn $TURN/$MAX_TURNS | Continue: /sw:do ${_BEST_ID}"
|
|
249
|
+
BMSG=$(echo -e "$BMSG")
|
|
250
|
+
fi
|
|
242
251
|
|
|
243
252
|
block "Work remaining: $TP tasks, $TAC ACs" "work_remaining" \
|
|
244
253
|
"$(jq -n --argjson p "$TP" --argjson a "$TAC" --argjson i "$IC" \
|
|
@@ -44,6 +44,18 @@ argument-hint: "[INCREMENT_IDS...] [OPTIONS]"
|
|
|
44
44
|
| `--cov <n>` | Code coverage threshold (%) | 80 |
|
|
45
45
|
| `--cmd "<command>"` | Custom command must pass | None |
|
|
46
46
|
|
|
47
|
+
## Simple Mode (`--simple`)
|
|
48
|
+
|
|
49
|
+
When `simple: true` is set in the session marker, reduce context consumption per iteration:
|
|
50
|
+
|
|
51
|
+
1. **Skip spec re-reads** — Do NOT re-read `spec.md` on each task iteration. Read it once at session start, then rely on `tasks.md` alone for task-by-task execution.
|
|
52
|
+
2. **Minimal task context** — Read only the current task's section from `tasks.md`, not the entire file. Use line offsets if the file is long.
|
|
53
|
+
3. **No sub-skill loading** — Do NOT invoke domain skills (frontend:architect, testing:qa, etc.) during auto execution. Execute tasks directly using code tools.
|
|
54
|
+
4. **Shorter status output** — Skip banners and progress tables between tasks. Just implement, test, mark complete, move on.
|
|
55
|
+
5. **No complexity re-check** — Skip Step 1.5a (team-lead routing check) since the caller already decided the execution mode.
|
|
56
|
+
|
|
57
|
+
**When to use**: Primarily for sub-agents in team-lead mode where the team-lead has already loaded specs, assigned tasks, and the agent just needs to execute. Also useful for simple increments with <10 tasks.
|
|
58
|
+
|
|
47
59
|
## Core Loop
|
|
48
60
|
|
|
49
61
|
```
|
|
@@ -73,6 +85,7 @@ Use Read/Write/Edit/Glob tools directly (no CLI needed):
|
|
|
73
85
|
"active": true,
|
|
74
86
|
"timestamp": "<ISO>",
|
|
75
87
|
"incrementIds": ["0001-feature"],
|
|
88
|
+
"simple": false,
|
|
76
89
|
"tddMode": false,
|
|
77
90
|
"requireTests": false,
|
|
78
91
|
"userGoal": null,
|
|
@@ -84,7 +97,8 @@ Use Read/Write/Edit/Glob tools directly (no CLI needed):
|
|
|
84
97
|
}
|
|
85
98
|
```
|
|
86
99
|
|
|
87
|
-
Map flags to
|
|
100
|
+
Map flags to session marker fields:
|
|
101
|
+
- `--simple` -> set `"simple": true`
|
|
88
102
|
- `--tests` -> `{ "type": "tests_pass", "required": true }`
|
|
89
103
|
- `--build` -> `{ "type": "build_succeeds", "required": true }`
|
|
90
104
|
- `--e2e` -> `{ "type": "tests_pass", "description": "E2E tests", "required": true }`
|
|
@@ -6,11 +6,11 @@ hooks:
|
|
|
6
6
|
- matcher: Edit
|
|
7
7
|
hooks:
|
|
8
8
|
- type: command
|
|
9
|
-
command: bash
|
|
9
|
+
command: bash -c 'W="${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh"; S="${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/task-ac-sync-guard.sh"; [[ -x "$W" ]] && exec "$W" "$S" || (cat >/dev/null && printf "{\"decision\":\"allow\"}")'
|
|
10
10
|
- matcher: Write
|
|
11
11
|
hooks:
|
|
12
12
|
- type: command
|
|
13
|
-
command: bash
|
|
13
|
+
command: bash -c 'W="${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh"; S="${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/task-ac-sync-guard.sh"; [[ -x "$W" ]] && exec "$W" "$S" || (cat >/dev/null && printf "{\"decision\":\"allow\"}")'
|
|
14
14
|
---
|
|
15
15
|
|
|
16
16
|
# Do Increment
|
|
@@ -69,7 +69,7 @@ This ensures the execution loop stays focused on the contextually correct increm
|
|
|
69
69
|
5. **Task count validation**: If >25 tasks, warn and offer to split, phase, or use `/sw:auto`/`/sw:team-lead`
|
|
70
70
|
6. **Validate AC presence** (MANDATORY):
|
|
71
71
|
```bash
|
|
72
|
-
bash
|
|
72
|
+
bash "${CLAUDE_PLUGIN_ROOT}/hooks/pre-increment-start.sh" <increment-path>
|
|
73
73
|
```
|
|
74
74
|
If fails: manually add ACs to spec.md, then retry. Do NOT proceed without ACs in spec.md.
|
|
75
75
|
|
|
@@ -7,14 +7,14 @@ hooks:
|
|
|
7
7
|
- matcher: Write
|
|
8
8
|
hooks:
|
|
9
9
|
- type: command
|
|
10
|
-
command: bash
|
|
10
|
+
command: bash -c 'W="${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh"; S="${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/interview-enforcement-guard.sh"; [[ -x "$W" ]] && exec "$W" "$S" || (cat >/dev/null && printf "{\"decision\":\"allow\"}")'
|
|
11
11
|
- type: command
|
|
12
|
-
command: bash
|
|
12
|
+
command: bash -c 'W="${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh"; S="${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/spec-template-enforcement-guard.sh"; [[ -x "$W" ]] && exec "$W" "$S" || (cat >/dev/null && printf "{\"decision\":\"allow\"}")'
|
|
13
13
|
PostToolUse:
|
|
14
14
|
- matcher: Write
|
|
15
15
|
hooks:
|
|
16
16
|
- type: command
|
|
17
|
-
command: bash
|
|
17
|
+
command: bash -c 'W="${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh"; S="${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/increment-duplicate-guard.sh"; [[ -x "$W" ]] && exec "$W" "$S" || (cat >/dev/null && printf "{\"decision\":\"allow\"}")'
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
# Plan Product Increment
|
|
@@ -5,7 +5,7 @@ hooks:
|
|
|
5
5
|
- matcher: TeamCreate
|
|
6
6
|
hooks:
|
|
7
7
|
- type: command
|
|
8
|
-
command: bash
|
|
8
|
+
command: bash -c 'W="${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh"; S="${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/increment-existence-guard.sh"; [[ -x "$W" ]] && exec "$W" "$S" || (cat >/dev/null && printf "{\"decision\":\"allow\"}")'
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Team Build
|
|
@@ -5,7 +5,7 @@ hooks:
|
|
|
5
5
|
- matcher: TeamCreate
|
|
6
6
|
hooks:
|
|
7
7
|
- type: command
|
|
8
|
-
command: bash
|
|
8
|
+
command: bash -c 'W="${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh"; S="${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/increment-existence-guard.sh"; [[ -x "$W" ]] && exec "$W" "$S" || (cat >/dev/null && printf "{\"decision\":\"allow\"}")'
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Team Lead
|
|
@@ -439,7 +439,7 @@ SendMessage({
|
|
|
439
439
|
SendMessage({
|
|
440
440
|
type: "message",
|
|
441
441
|
recipient: "team-lead",
|
|
442
|
-
content: "COMPLETION: All 8 tasks done. Tests passing (24/24).
|
|
442
|
+
content: "COMPLETION: All 8 tasks done. Tests passing (24/24). Ready for team-lead closure.",
|
|
443
443
|
summary: "Frontend agent completed all tasks"
|
|
444
444
|
});
|
|
445
445
|
```
|
|
@@ -563,12 +563,14 @@ Orchestrator Final Check:
|
|
|
563
563
|
|
|
564
564
|
Agents can get stuck in extended thinking if their context overflows. The team-lead MUST monitor for stuck agents.
|
|
565
565
|
|
|
566
|
-
###
|
|
566
|
+
### Stuck Detection Rules
|
|
567
|
+
|
|
568
|
+
**Note**: Claude Code has no built-in timers. These are best-effort heuristics applied when the team-lead regains control (e.g., after processing other agent messages).
|
|
567
569
|
|
|
568
570
|
| Condition | Action |
|
|
569
571
|
|-----------|--------|
|
|
570
|
-
| Agent
|
|
571
|
-
|
|
|
572
|
+
| Agent has not messaged since team-lead's last turn | Send `STATUS_CHECK` message to agent |
|
|
573
|
+
| Agent does not respond to STATUS_CHECK on next team-lead turn | Declare agent stuck |
|
|
572
574
|
| Agent stuck | Log warning, proceed with other agents, handle stuck agent's increment manually in team-merge |
|
|
573
575
|
| All agents stuck | STOP team, report to user |
|
|
574
576
|
|
|
@@ -5,7 +5,7 @@ hooks:
|
|
|
5
5
|
Stop:
|
|
6
6
|
- hooks:
|
|
7
7
|
- type: command
|
|
8
|
-
command: bash
|
|
8
|
+
command: bash -c 'W="${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh"; S="${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/spec-validation-guard.sh"; [[ -x "$W" ]] && exec "$W" "$S" || (cat >/dev/null && printf "{\"decision\":\"approve\"}")'
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Validate Increment
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code Plugin CLI Integration
|
|
3
|
-
*
|
|
4
|
-
* Registers SpecWeave plugins with Claude Code's plugin system via the
|
|
5
|
-
* `claude` CLI binary. This makes plugins appear in the `/plugin Installed`
|
|
6
|
-
* UI alongside marketplace metadata.
|
|
7
|
-
*
|
|
8
|
-
* All operations are non-fatal — failures are logged (in DEBUG mode) but
|
|
9
|
-
* never block the primary plugin installation to ~/.claude/commands/.
|
|
10
|
-
*
|
|
11
|
-
* @since 1.0.290
|
|
12
|
-
*/
|
|
13
|
-
export interface CliRegistrationResult {
|
|
14
|
-
/** True if marketplace was registered successfully */
|
|
15
|
-
marketplaceRegistered: boolean;
|
|
16
|
-
/** Plugin names that were successfully installed via CLI */
|
|
17
|
-
installedPlugins: string[];
|
|
18
|
-
/** Plugin names that failed CLI installation */
|
|
19
|
-
failedPlugins: string[];
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Register SpecWeave marketplace and install plugins via Claude CLI.
|
|
23
|
-
*
|
|
24
|
-
* Steps:
|
|
25
|
-
* 1. Validates specweaveRoot contains .claude-plugin/marketplace.json
|
|
26
|
-
* 2. Runs `claude plugin marketplace add <specweaveRoot>`
|
|
27
|
-
* 3. Runs `claude plugin install <name>@specweave` for each plugin
|
|
28
|
-
*
|
|
29
|
-
* Entirely non-fatal. Returns a result with success/failure per plugin.
|
|
30
|
-
*/
|
|
31
|
-
export declare function registerPluginsWithClaudeCli(specweaveRoot: string, pluginNames: string[]): CliRegistrationResult;
|
|
32
|
-
//# sourceMappingURL=claude-plugin-cli.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-plugin-cli.d.ts","sourceRoot":"","sources":["../../../src/utils/claude-plugin-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAWH,MAAM,WAAW,qBAAqB;IACpC,sDAAsD;IACtD,qBAAqB,EAAE,OAAO,CAAC;IAC/B,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gDAAgD;IAChD,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAMD;;;;;;;;;GASG;AACH,wBAAgB,4BAA4B,CAC1C,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,EAAE,GACpB,qBAAqB,CA6CvB"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Claude Code Plugin CLI Integration
|
|
3
|
-
*
|
|
4
|
-
* Registers SpecWeave plugins with Claude Code's plugin system via the
|
|
5
|
-
* `claude` CLI binary. This makes plugins appear in the `/plugin Installed`
|
|
6
|
-
* UI alongside marketplace metadata.
|
|
7
|
-
*
|
|
8
|
-
* All operations are non-fatal — failures are logged (in DEBUG mode) but
|
|
9
|
-
* never block the primary plugin installation to ~/.claude/commands/.
|
|
10
|
-
*
|
|
11
|
-
* @since 1.0.290
|
|
12
|
-
*/
|
|
13
|
-
import { existsSync } from 'node:fs';
|
|
14
|
-
import { join } from 'node:path';
|
|
15
|
-
import { execFileNoThrowSync } from './execFileNoThrow.js';
|
|
16
|
-
import { getPluginScope, getScopeArgs } from '../core/types/plugin-scope.js';
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
// Core
|
|
19
|
-
// ---------------------------------------------------------------------------
|
|
20
|
-
/**
|
|
21
|
-
* Register SpecWeave marketplace and install plugins via Claude CLI.
|
|
22
|
-
*
|
|
23
|
-
* Steps:
|
|
24
|
-
* 1. Validates specweaveRoot contains .claude-plugin/marketplace.json
|
|
25
|
-
* 2. Runs `claude plugin marketplace add <specweaveRoot>`
|
|
26
|
-
* 3. Runs `claude plugin install <name>@specweave` for each plugin
|
|
27
|
-
*
|
|
28
|
-
* Entirely non-fatal. Returns a result with success/failure per plugin.
|
|
29
|
-
*/
|
|
30
|
-
export function registerPluginsWithClaudeCli(specweaveRoot, pluginNames) {
|
|
31
|
-
const result = {
|
|
32
|
-
marketplaceRegistered: false,
|
|
33
|
-
installedPlugins: [],
|
|
34
|
-
failedPlugins: [],
|
|
35
|
-
};
|
|
36
|
-
if (pluginNames.length === 0)
|
|
37
|
-
return result;
|
|
38
|
-
// Validate marketplace exists at path
|
|
39
|
-
const marketplacePath = join(specweaveRoot, '.claude-plugin', 'marketplace.json');
|
|
40
|
-
if (!existsSync(marketplacePath)) {
|
|
41
|
-
if (process.env.DEBUG) {
|
|
42
|
-
console.warn(`[DEBUG] Skipping Claude CLI registration: no marketplace.json at ${marketplacePath}`);
|
|
43
|
-
}
|
|
44
|
-
return result;
|
|
45
|
-
}
|
|
46
|
-
// Register marketplace
|
|
47
|
-
const addResult = execFileNoThrowSync('claude', ['plugin', 'marketplace', 'add', specweaveRoot]);
|
|
48
|
-
if (addResult.success || addResult.exitCode === 0) {
|
|
49
|
-
result.marketplaceRegistered = true;
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
if (process.env.DEBUG) {
|
|
53
|
-
console.warn(`[DEBUG] claude plugin marketplace add failed (exit ${addResult.exitCode}): ${addResult.stderr}`);
|
|
54
|
-
}
|
|
55
|
-
// Don't bail — install may still work if marketplace was already registered
|
|
56
|
-
}
|
|
57
|
-
// Install each plugin with correct scope
|
|
58
|
-
for (const name of pluginNames) {
|
|
59
|
-
const scope = getPluginScope(name, 'specweave');
|
|
60
|
-
const scopeArgs = getScopeArgs(scope);
|
|
61
|
-
const installResult = execFileNoThrowSync('claude', ['plugin', 'install', `${name}@specweave`, ...scopeArgs]);
|
|
62
|
-
if (installResult.success || installResult.exitCode === 0) {
|
|
63
|
-
result.installedPlugins.push(name);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
result.failedPlugins.push(name);
|
|
67
|
-
if (process.env.DEBUG) {
|
|
68
|
-
console.warn(`[DEBUG] claude plugin install ${name}@specweave failed (exit ${installResult.exitCode}): ${installResult.stderr}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return result;
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=claude-plugin-cli.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-plugin-cli.js","sourceRoot":"","sources":["../../../src/utils/claude-plugin-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAe7E,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,UAAU,4BAA4B,CAC1C,aAAqB,EACrB,WAAqB;IAErB,MAAM,MAAM,GAA0B;QACpC,qBAAqB,EAAE,KAAK;QAC5B,gBAAgB,EAAE,EAAE;QACpB,aAAa,EAAE,EAAE;KAClB,CAAC;IAEF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAE5C,sCAAsC;IACtC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IAClF,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,oEAAoE,eAAe,EAAE,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IACjG,IAAI,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,qBAAqB,GAAG,IAAI,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,sDAAsD,SAAS,CAAC,QAAQ,MAAM,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACjH,CAAC;QACD,4EAA4E;IAC9E,CAAC;IAED,yCAAyC;IACzC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,mBAAmB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;QAC9G,IAAI,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CAAC,iCAAiC,IAAI,2BAA2B,aAAa,CAAC,QAAQ,MAAM,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;YACnI,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|