shipwright-cli 2.2.2 → 2.3.0
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 +12 -11
- package/dashboard/public/index.html +224 -8
- package/dashboard/public/styles.css +1078 -4
- package/dashboard/server.ts +1100 -15
- package/dashboard/src/canvas/interactions.ts +74 -0
- package/dashboard/src/canvas/layout.ts +85 -0
- package/dashboard/src/canvas/overlays.ts +117 -0
- package/dashboard/src/canvas/particles.ts +105 -0
- package/dashboard/src/canvas/renderer.ts +191 -0
- package/dashboard/src/components/charts/bar.ts +54 -0
- package/dashboard/src/components/charts/donut.ts +25 -0
- package/dashboard/src/components/charts/pipeline-rail.ts +105 -0
- package/dashboard/src/components/charts/sparkline.ts +82 -0
- package/dashboard/src/components/header.ts +616 -0
- package/dashboard/src/components/modal.ts +413 -0
- package/dashboard/src/components/terminal.ts +144 -0
- package/dashboard/src/core/api.ts +381 -0
- package/dashboard/src/core/helpers.ts +118 -0
- package/dashboard/src/core/router.ts +190 -0
- package/dashboard/src/core/sse.ts +38 -0
- package/dashboard/src/core/state.ts +150 -0
- package/dashboard/src/core/ws.ts +143 -0
- package/dashboard/src/design/icons.ts +131 -0
- package/dashboard/src/design/tokens.ts +160 -0
- package/dashboard/src/main.ts +68 -0
- package/dashboard/src/types/api.ts +337 -0
- package/dashboard/src/views/activity.ts +185 -0
- package/dashboard/src/views/agent-cockpit.ts +236 -0
- package/dashboard/src/views/agents.ts +72 -0
- package/dashboard/src/views/fleet-map.ts +299 -0
- package/dashboard/src/views/insights.ts +298 -0
- package/dashboard/src/views/machines.ts +162 -0
- package/dashboard/src/views/metrics.ts +420 -0
- package/dashboard/src/views/overview.ts +409 -0
- package/dashboard/src/views/pipeline-theater.ts +219 -0
- package/dashboard/src/views/pipelines.ts +595 -0
- package/dashboard/src/views/team.ts +362 -0
- package/dashboard/src/views/timeline.ts +389 -0
- package/dashboard/tsconfig.json +21 -0
- package/docs/AGI-WHATS-NEXT.md +15 -15
- package/package.json +8 -1
- package/scripts/lib/helpers.sh +30 -0
- package/scripts/lib/pipeline-quality-checks.sh +1 -1
- package/scripts/sw +86 -167
- package/scripts/sw-activity.sh +1 -1
- package/scripts/sw-adaptive.sh +1 -1
- package/scripts/sw-adversarial.sh +1 -1
- package/scripts/sw-architecture-enforcer.sh +1 -1
- package/scripts/sw-auth.sh +14 -6
- package/scripts/sw-autonomous.sh +1 -1
- package/scripts/sw-changelog.sh +2 -2
- package/scripts/sw-checkpoint.sh +1 -1
- package/scripts/sw-ci.sh +1 -1
- package/scripts/sw-cleanup.sh +1 -1
- package/scripts/sw-code-review.sh +1 -1
- package/scripts/sw-connect.sh +1 -1
- package/scripts/sw-context.sh +1 -1
- package/scripts/sw-cost.sh +1 -1
- package/scripts/sw-daemon.sh +2 -2
- package/scripts/sw-dashboard.sh +1 -1
- package/scripts/sw-db.sh +1 -1
- package/scripts/sw-decompose.sh +1 -1
- package/scripts/sw-deps.sh +1 -1
- package/scripts/sw-developer-simulation.sh +1 -1
- package/scripts/sw-discovery.sh +1 -1
- package/scripts/sw-doc-fleet.sh +1 -1
- package/scripts/sw-docs-agent.sh +1 -1
- package/scripts/sw-docs.sh +1 -1
- package/scripts/sw-doctor.sh +8 -1
- package/scripts/sw-dora.sh +1 -1
- package/scripts/sw-durable.sh +1 -1
- package/scripts/sw-e2e-orchestrator.sh +1 -1
- package/scripts/sw-eventbus.sh +1 -1
- package/scripts/sw-feedback.sh +1 -1
- package/scripts/sw-fix.sh +6 -5
- package/scripts/sw-fleet-discover.sh +1 -1
- package/scripts/sw-fleet-viz.sh +1 -1
- package/scripts/sw-fleet.sh +1 -1
- package/scripts/sw-github-app.sh +5 -2
- package/scripts/sw-github-checks.sh +1 -1
- package/scripts/sw-github-deploy.sh +1 -1
- package/scripts/sw-github-graphql.sh +1 -1
- package/scripts/sw-guild.sh +1 -1
- package/scripts/sw-heartbeat.sh +1 -1
- package/scripts/sw-hygiene.sh +1 -1
- package/scripts/sw-incident.sh +1 -1
- package/scripts/sw-init.sh +112 -9
- package/scripts/sw-instrument.sh +6 -1
- package/scripts/sw-intelligence.sh +5 -1
- package/scripts/sw-jira.sh +1 -1
- package/scripts/sw-launchd.sh +1 -1
- package/scripts/sw-linear.sh +20 -9
- package/scripts/sw-logs.sh +1 -1
- package/scripts/sw-loop.sh +2 -1
- package/scripts/sw-memory.sh +10 -1
- package/scripts/sw-mission-control.sh +1 -1
- package/scripts/sw-model-router.sh +4 -1
- package/scripts/sw-otel.sh +1 -1
- package/scripts/sw-oversight.sh +1 -1
- package/scripts/sw-pipeline-composer.sh +3 -1
- package/scripts/sw-pipeline-vitals.sh +4 -6
- package/scripts/sw-pipeline.sh +4 -1
- package/scripts/sw-pm.sh +5 -2
- package/scripts/sw-pr-lifecycle.sh +1 -1
- package/scripts/sw-predictive.sh +4 -1
- package/scripts/sw-prep.sh +3 -2
- package/scripts/sw-ps.sh +1 -1
- package/scripts/sw-public-dashboard.sh +10 -4
- package/scripts/sw-quality.sh +1 -1
- package/scripts/sw-reaper.sh +1 -1
- package/scripts/sw-recruit.sh +16 -0
- package/scripts/sw-regression.sh +2 -1
- package/scripts/sw-release-manager.sh +1 -1
- package/scripts/sw-release.sh +7 -5
- package/scripts/sw-remote.sh +1 -1
- package/scripts/sw-replay.sh +1 -1
- package/scripts/sw-retro.sh +1 -1
- package/scripts/sw-scale.sh +4 -1
- package/scripts/sw-security-audit.sh +1 -1
- package/scripts/sw-self-optimize.sh +15 -1
- package/scripts/sw-session.sh +1 -1
- package/scripts/sw-setup.sh +1 -1
- package/scripts/sw-standup.sh +2 -1
- package/scripts/sw-status.sh +1 -1
- package/scripts/sw-strategic.sh +2 -1
- package/scripts/sw-stream.sh +1 -1
- package/scripts/sw-swarm.sh +6 -1
- package/scripts/sw-team-stages.sh +1 -1
- package/scripts/sw-templates.sh +1 -1
- package/scripts/sw-testgen.sh +3 -2
- package/scripts/sw-tmux-pipeline.sh +2 -1
- package/scripts/sw-tmux.sh +1 -1
- package/scripts/sw-trace.sh +1 -1
- package/scripts/sw-tracker-jira.sh +1 -0
- package/scripts/sw-tracker-linear.sh +1 -0
- package/scripts/sw-tracker.sh +1 -1
- package/scripts/sw-triage.sh +1 -1
- package/scripts/sw-upgrade.sh +1 -1
- package/scripts/sw-ux.sh +1 -1
- package/scripts/sw-webhook.sh +1 -1
- package/scripts/sw-widgets.sh +2 -2
- package/scripts/sw-worktree.sh +1 -1
- package/dashboard/public/app.js +0 -4422
package/scripts/sw-scale.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.
|
|
9
|
+
VERSION="2.3.0"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Dependency check ─────────────────────────────────────────────────────────
|
|
@@ -64,6 +64,7 @@ init_rules() {
|
|
|
64
64
|
if [[ ! -f "$SCALE_RULES_FILE" ]]; then
|
|
65
65
|
local tmp_file
|
|
66
66
|
tmp_file=$(mktemp)
|
|
67
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
67
68
|
cat > "$tmp_file" << 'JSON'
|
|
68
69
|
{
|
|
69
70
|
"iteration_threshold": 3,
|
|
@@ -105,6 +106,7 @@ in_cooldown() {
|
|
|
105
106
|
update_scale_state() {
|
|
106
107
|
local tmp_file
|
|
107
108
|
tmp_file=$(mktemp)
|
|
109
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
108
110
|
|
|
109
111
|
if [[ -f "$SCALE_STATE_FILE" ]]; then
|
|
110
112
|
# Update existing state
|
|
@@ -241,6 +243,7 @@ cmd_rules() {
|
|
|
241
243
|
|
|
242
244
|
local tmp_file
|
|
243
245
|
tmp_file=$(mktemp)
|
|
246
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
244
247
|
|
|
245
248
|
jq --arg key "$key" --arg value "$value" \
|
|
246
249
|
'if ($value | test("^[0-9]+$")) then
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.
|
|
9
|
+
VERSION="2.3.0"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
12
12
|
|
|
@@ -139,6 +139,7 @@ optimize_analyze_outcome() {
|
|
|
139
139
|
# Build outcome record using jq for proper escaping
|
|
140
140
|
local tmp_outcome
|
|
141
141
|
tmp_outcome=$(mktemp)
|
|
142
|
+
trap "rm -f '$tmp_outcome'" RETURN
|
|
142
143
|
jq -c -n \
|
|
143
144
|
--arg ts "$(now_iso)" \
|
|
144
145
|
--arg issue "${issue_number:-unknown}" \
|
|
@@ -228,6 +229,7 @@ optimize_tune_templates() {
|
|
|
228
229
|
local tmp_stats tmp_weights
|
|
229
230
|
tmp_stats=$(mktemp)
|
|
230
231
|
tmp_weights=$(mktemp)
|
|
232
|
+
trap "rm -f '$tmp_stats' '$tmp_weights'" RETURN
|
|
231
233
|
|
|
232
234
|
# Extract template, labels, result from each outcome line
|
|
233
235
|
while IFS= read -r line; do
|
|
@@ -334,6 +336,7 @@ optimize_tune_templates() {
|
|
|
334
336
|
# Atomic write
|
|
335
337
|
local tmp_cw
|
|
336
338
|
tmp_cw=$(mktemp "${TEMPLATE_WEIGHTS_FILE}.tmp.XXXXXX")
|
|
339
|
+
trap "rm -f '$tmp_cw'" RETURN
|
|
337
340
|
echo "$consumer_weights" > "$tmp_cw" && mv "$tmp_cw" "$TEMPLATE_WEIGHTS_FILE" || rm -f "$tmp_cw"
|
|
338
341
|
fi
|
|
339
342
|
|
|
@@ -380,6 +383,7 @@ optimize_learn_iterations() {
|
|
|
380
383
|
tmp_med=$(mktemp)
|
|
381
384
|
tmp_high=$(mktemp)
|
|
382
385
|
tmp_all_pairs=$(mktemp)
|
|
386
|
+
trap "rm -f '$tmp_low' '$tmp_med' '$tmp_high' '$tmp_all_pairs'" RETURN
|
|
383
387
|
|
|
384
388
|
while IFS= read -r line; do
|
|
385
389
|
local complexity iterations
|
|
@@ -440,6 +444,7 @@ optimize_learn_iterations() {
|
|
|
440
444
|
# Write boundaries back to config (atomic)
|
|
441
445
|
local tmp_clusters
|
|
442
446
|
tmp_clusters=$(mktemp "${TMPDIR:-/tmp}/sw-clusters.XXXXXX")
|
|
447
|
+
trap "rm -f '$tmp_clusters'" RETURN
|
|
443
448
|
jq -n \
|
|
444
449
|
--argjson low_max "$new_low" \
|
|
445
450
|
--argjson med_max "$new_med" \
|
|
@@ -488,6 +493,7 @@ optimize_learn_iterations() {
|
|
|
488
493
|
# Build iteration model (flat format for readers: .low, .medium, .high)
|
|
489
494
|
local tmp_model
|
|
490
495
|
tmp_model=$(mktemp "${ITERATION_MODEL_FILE}.tmp.XXXXXX")
|
|
496
|
+
trap "rm -f '$tmp_model'" RETURN
|
|
491
497
|
jq -n \
|
|
492
498
|
--argjson low "$low_stats" \
|
|
493
499
|
--argjson medium "$med_stats" \
|
|
@@ -568,6 +574,7 @@ _optimize_apply_prediction_bias() {
|
|
|
568
574
|
if [[ "$changed" == true ]]; then
|
|
569
575
|
local tmp_model
|
|
570
576
|
tmp_model=$(mktemp)
|
|
577
|
+
trap "rm -f '$tmp_model'" RETURN
|
|
571
578
|
if echo "$updated_model" | jq '.' > "$tmp_model" 2>/dev/null && [[ -s "$tmp_model" ]]; then
|
|
572
579
|
mv "$tmp_model" "$model_file"
|
|
573
580
|
emit_event "optimize.prediction_bias_corrected"
|
|
@@ -609,6 +616,7 @@ optimize_route_models() {
|
|
|
609
616
|
# Collect per-stage, per-model stats
|
|
610
617
|
local tmp_stage_stats
|
|
611
618
|
tmp_stage_stats=$(mktemp)
|
|
619
|
+
trap "rm -f '$tmp_stage_stats'" RETURN
|
|
612
620
|
|
|
613
621
|
while IFS= read -r line; do
|
|
614
622
|
local model result stages_arr
|
|
@@ -724,6 +732,7 @@ optimize_route_models() {
|
|
|
724
732
|
# Atomic write
|
|
725
733
|
local tmp_routing
|
|
726
734
|
tmp_routing=$(mktemp "${MODEL_ROUTING_FILE}.tmp.XXXXXX")
|
|
735
|
+
trap "rm -f '$tmp_routing'" RETURN
|
|
727
736
|
echo "$consumer_routing" > "$tmp_routing" && mv "$tmp_routing" "$MODEL_ROUTING_FILE" || rm -f "$tmp_routing"
|
|
728
737
|
|
|
729
738
|
rm -f "$tmp_stage_stats" 2>/dev/null || true
|
|
@@ -798,6 +807,7 @@ optimize_learn_risk_keywords() {
|
|
|
798
807
|
keywords=$(echo "$keywords" | jq 'to_entries | map(select(.value != 0)) | from_entries' 2>/dev/null || echo "$keywords")
|
|
799
808
|
local tmp_risk
|
|
800
809
|
tmp_risk=$(mktemp)
|
|
810
|
+
trap "rm -f '$tmp_risk'" RETURN
|
|
801
811
|
if echo "$keywords" | jq '.' > "$tmp_risk" 2>/dev/null && [[ -s "$tmp_risk" ]]; then
|
|
802
812
|
mv "$tmp_risk" "$risk_file"
|
|
803
813
|
success "Risk keywords updated ($(echo "$keywords" | jq 'length' 2>/dev/null || echo '?') keywords)"
|
|
@@ -874,6 +884,7 @@ optimize_evolve_memory() {
|
|
|
874
884
|
|
|
875
885
|
local tmp_file
|
|
876
886
|
tmp_file=$(mktemp)
|
|
887
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
877
888
|
|
|
878
889
|
# Prune entries not seen within prune window
|
|
879
890
|
local pruned_json
|
|
@@ -911,6 +922,7 @@ optimize_evolve_memory() {
|
|
|
911
922
|
# Collect all patterns across repos
|
|
912
923
|
local tmp_all_patterns
|
|
913
924
|
tmp_all_patterns=$(mktemp)
|
|
925
|
+
trap "rm -f '$tmp_all_patterns'" RETURN
|
|
914
926
|
for repo_dir in "$memory_root"/*/; do
|
|
915
927
|
[[ -d "$repo_dir" ]] || continue
|
|
916
928
|
local failures_file="${repo_dir}failures.json"
|
|
@@ -926,6 +938,7 @@ optimize_evolve_memory() {
|
|
|
926
938
|
if [[ -n "$promoted_patterns" ]]; then
|
|
927
939
|
local tmp_global
|
|
928
940
|
tmp_global=$(mktemp)
|
|
941
|
+
trap "rm -f '$tmp_global'" RETURN
|
|
929
942
|
local pcount=0
|
|
930
943
|
while IFS= read -r pattern; do
|
|
931
944
|
[[ -z "$pattern" ]] && continue
|
|
@@ -1132,6 +1145,7 @@ optimize_adjust_audit_intensity() {
|
|
|
1132
1145
|
info "Quality trend: ${trend} (avg: ${avg_quality}) — increasing audit intensity"
|
|
1133
1146
|
local tmp_dc
|
|
1134
1147
|
tmp_dc=$(mktemp "${daemon_config}.tmp.XXXXXX")
|
|
1148
|
+
trap "rm -f '$tmp_dc'" RETURN
|
|
1135
1149
|
jq '.intelligence.adversarial_enabled = true | .intelligence.architecture_enabled = true' \
|
|
1136
1150
|
"$daemon_config" > "$tmp_dc" 2>/dev/null && mv "$tmp_dc" "$daemon_config" || rm -f "$tmp_dc"
|
|
1137
1151
|
emit_event "optimize.audit_intensity" \
|
package/scripts/sw-session.sh
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# ║ Supports --template to scaffold from a team template and --terminal ║
|
|
9
9
|
# ║ to select a terminal adapter (tmux, iterm2, wezterm). ║
|
|
10
10
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
11
|
-
VERSION="2.
|
|
11
|
+
VERSION="2.3.0"
|
|
12
12
|
set -euo pipefail
|
|
13
13
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
14
14
|
|
package/scripts/sw-setup.sh
CHANGED
package/scripts/sw-standup.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.
|
|
9
|
+
VERSION="2.3.0"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
12
12
|
|
|
@@ -503,6 +503,7 @@ cmd_notify() {
|
|
|
503
503
|
if [[ -z "$message_file" ]]; then
|
|
504
504
|
# Generate a digest
|
|
505
505
|
message_file=$(mktemp)
|
|
506
|
+
trap "rm -f '$message_file'" RETURN
|
|
506
507
|
cmd_digest > "$message_file" 2>&1 || true
|
|
507
508
|
fi
|
|
508
509
|
|
package/scripts/sw-status.sh
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
# ║ ║
|
|
5
5
|
# ║ Shows running teams, agent windows, and task progress. ║
|
|
6
6
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
7
|
-
VERSION="2.
|
|
7
|
+
VERSION="2.3.0"
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
10
10
|
|
package/scripts/sw-strategic.sh
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# When sourced, do NOT add set -euo pipefail — the parent handles that.
|
|
8
8
|
# When run directly, main() sets up the error handling.
|
|
9
9
|
|
|
10
|
-
VERSION="2.
|
|
10
|
+
VERSION="2.3.0"
|
|
11
11
|
|
|
12
12
|
# ─── Paths (set defaults if not provided by parent) ──────────────────────────
|
|
13
13
|
SCRIPT_DIR="${SCRIPT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
|
|
@@ -423,6 +423,7 @@ strategic_call_api() {
|
|
|
423
423
|
|
|
424
424
|
local tmp_prompt
|
|
425
425
|
tmp_prompt=$(mktemp)
|
|
426
|
+
trap "rm -f '$tmp_prompt'" RETURN
|
|
426
427
|
printf '%s' "$prompt" > "$tmp_prompt"
|
|
427
428
|
|
|
428
429
|
local response_text
|
package/scripts/sw-stream.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ║ Streams tmux pane output in real-time to the dashboard or CLI. ║
|
|
6
6
|
# ║ Captures output periodically, tags by agent/team, supports replay. ║
|
|
7
7
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
8
|
-
VERSION="2.
|
|
8
|
+
VERSION="2.3.0"
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
11
11
|
|
package/scripts/sw-swarm.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.
|
|
9
|
+
VERSION="2.3.0"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
12
12
|
|
|
@@ -60,6 +60,7 @@ init_config() {
|
|
|
60
60
|
if [[ ! -f "$CONFIG_FILE" ]]; then
|
|
61
61
|
local tmp_file
|
|
62
62
|
tmp_file=$(mktemp)
|
|
63
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
63
64
|
cat > "$tmp_file" << 'JSON'
|
|
64
65
|
{
|
|
65
66
|
"auto_scaling_enabled": false,
|
|
@@ -85,6 +86,7 @@ init_registry() {
|
|
|
85
86
|
if [[ ! -f "$REGISTRY_FILE" ]]; then
|
|
86
87
|
local tmp_file
|
|
87
88
|
tmp_file=$(mktemp)
|
|
89
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
88
90
|
cat > "$tmp_file" << 'JSON'
|
|
89
91
|
{
|
|
90
92
|
"agents": [],
|
|
@@ -173,6 +175,7 @@ cmd_spawn() {
|
|
|
173
175
|
# Add agent to registry
|
|
174
176
|
local tmp_file
|
|
175
177
|
tmp_file=$(mktemp)
|
|
178
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
176
179
|
|
|
177
180
|
jq --arg agent_id "$agent_id" \
|
|
178
181
|
--arg agent_type "$agent_type" \
|
|
@@ -254,6 +257,7 @@ cmd_retire() {
|
|
|
254
257
|
# Mark as retiring / remove from registry
|
|
255
258
|
local tmp_file
|
|
256
259
|
tmp_file=$(mktemp)
|
|
260
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
257
261
|
|
|
258
262
|
jq --arg aid "$agent_id" \
|
|
259
263
|
'.agents |= map(select(.id != $aid)) | .active_count = ([.agents[] | select(.status == "active")] | length) | .last_updated = "'$(now_iso)'"' \
|
|
@@ -482,6 +486,7 @@ cmd_config() {
|
|
|
482
486
|
|
|
483
487
|
local tmp_file
|
|
484
488
|
tmp_file=$(mktemp)
|
|
489
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
485
490
|
|
|
486
491
|
jq --arg key "$key" --arg value "$value" \
|
|
487
492
|
'if ($value | test("^[0-9]+$")) then
|
package/scripts/sw-templates.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ║ Templates define reusable agent team configurations (roles, layout, ║
|
|
6
6
|
# ║ focus areas) that shipwright session --template can use to scaffold teams. ║
|
|
7
7
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
8
|
-
VERSION="2.
|
|
8
|
+
VERSION="2.3.0"
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
11
11
|
|
package/scripts/sw-testgen.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.
|
|
9
|
+
VERSION="2.3.0"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Handle subcommands ───────────────────────────────────────────────────────
|
|
@@ -87,7 +87,7 @@ show_help() {
|
|
|
87
87
|
echo -e " ${DIM}shipwright testgen generate --threshold 75${RESET} # Generate with threshold"
|
|
88
88
|
echo -e " ${DIM}shipwright testgen quality sw-pipeline-test.sh${RESET} # Score test quality"
|
|
89
89
|
echo ""
|
|
90
|
-
echo -e "${DIM}Docs:
|
|
90
|
+
echo -e "${DIM}Docs: $(_sw_docs_url)${RESET}"
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
@@ -241,6 +241,7 @@ EOF
|
|
|
241
241
|
func_snippet=$(awk "/^${func}\(\\)/,/^[a-zA-Z_][a-zA-Z0-9_]*\(\)|^$/" "$target_script" 2>/dev/null | head -40 || true)
|
|
242
242
|
local prompt_file
|
|
243
243
|
prompt_file=$(mktemp "${TMPDIR:-/tmp}/sw-testgen-prompt.XXXXXX")
|
|
244
|
+
trap "rm -f '$prompt_file'" RETURN
|
|
244
245
|
{
|
|
245
246
|
echo "Generate a bash test function for the following shell function. Use real assertions (assert_equal, assert_contains, or test exit code). Test happy path and at least one edge or error case. Output only the bash function body."
|
|
246
247
|
echo "Function name: ${func}"
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.
|
|
9
|
+
VERSION="2.3.0"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
12
12
|
|
|
@@ -118,6 +118,7 @@ cmd_spawn() {
|
|
|
118
118
|
|
|
119
119
|
local tmp_file
|
|
120
120
|
tmp_file=$(mktemp)
|
|
121
|
+
trap "rm -f '$tmp_file'" RETURN
|
|
121
122
|
cat > "$tmp_file" << EOF
|
|
122
123
|
{
|
|
123
124
|
"job_id": "pipeline-${issue_num}",
|
package/scripts/sw-tmux.sh
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
# ║ shipwright tmux fix — Auto-fix common issues ║
|
|
12
12
|
# ║ shipwright tmux reload — Reload tmux config ║
|
|
13
13
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
14
|
-
VERSION="2.
|
|
14
|
+
VERSION="2.3.0"
|
|
15
15
|
set -euo pipefail
|
|
16
16
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
17
17
|
|
package/scripts/sw-trace.sh
CHANGED
package/scripts/sw-tracker.sh
CHANGED
package/scripts/sw-triage.sh
CHANGED
package/scripts/sw-upgrade.sh
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# ╔═══════════════════════════════════════════════════════════════════════════╗
|
|
3
3
|
# ║ sw upgrade — Detect and apply updates from the repo ║
|
|
4
4
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
5
|
-
VERSION="2.
|
|
5
|
+
VERSION="2.3.0"
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
package/scripts/sw-ux.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.
|
|
9
|
+
VERSION="2.3.0"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-webhook.sh
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
8
8
|
|
|
9
|
-
VERSION="2.
|
|
9
|
+
VERSION="2.3.0"
|
|
10
10
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
11
|
|
|
12
12
|
# ─── Cross-platform compatibility ──────────────────────────────────────────
|
package/scripts/sw-widgets.sh
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
set -euo pipefail
|
|
9
9
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
10
10
|
|
|
11
|
-
VERSION="2.
|
|
11
|
+
VERSION="2.3.0"
|
|
12
12
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
13
|
REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
14
14
|
|
|
@@ -357,7 +357,7 @@ To add these badges to your README.md:
|
|
|
357
357
|
\`\`\`
|
|
358
358
|
|
|
359
359
|
---
|
|
360
|
-
Generated by [Shipwright](
|
|
360
|
+
Generated by [Shipwright]($(_sw_github_url))
|
|
361
361
|
EOF
|
|
362
362
|
}
|
|
363
363
|
|
package/scripts/sw-worktree.sh
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
# ║ Each agent gets its own worktree so parallel agents don't clobber ║
|
|
6
6
|
# ║ each other's files. Worktrees live in .worktrees/ relative to root. ║
|
|
7
7
|
# ╚═══════════════════════════════════════════════════════════════════════════╝
|
|
8
|
-
VERSION="2.
|
|
8
|
+
VERSION="2.3.0"
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
trap 'echo "ERROR: $BASH_SOURCE:$LINENO exited with status $?" >&2' ERR
|
|
11
11
|
|