@chenmk/superflow 0.1.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.
Files changed (198) hide show
  1. package/INSTALL.en.md +106 -0
  2. package/INSTALL.md +664 -0
  3. package/LICENSE +21 -0
  4. package/README.md +142 -0
  5. package/README.zh-CN.md +117 -0
  6. package/assets/context-templates/business-rules.md +98 -0
  7. package/assets/context-templates/decisions.md +153 -0
  8. package/assets/context-templates/external-systems.md +166 -0
  9. package/assets/context-templates/incidents.md +89 -0
  10. package/assets/manifest.json +53 -0
  11. package/assets/prompts/superflow-archive.md +9 -0
  12. package/assets/prompts/superflow-clarify.md +10 -0
  13. package/assets/prompts/superflow-design.md +10 -0
  14. package/assets/prompts/superflow-docs.md +10 -0
  15. package/assets/prompts/superflow-implement.md +10 -0
  16. package/assets/prompts/superflow-pipeline.md +13 -0
  17. package/assets/prompts/superflow-verify.md +10 -0
  18. package/assets/rules/superflow-phase-guard.md +50 -0
  19. package/assets/scripts/claude-auto-backup-hook.sh +313 -0
  20. package/assets/scripts/codex-auto-backup-hook.sh +361 -0
  21. package/assets/scripts/install-sql-pre-commit.sh +44 -0
  22. package/assets/scripts/superflow-contract-hooks.sh +744 -0
  23. package/assets/scripts/superflow-delivery-check.sh +315 -0
  24. package/assets/scripts/superflow-dependency-update-hook.sh +161 -0
  25. package/assets/scripts/superflow-enforce-hook.sh +70 -0
  26. package/assets/scripts/superflow-hook-guard.sh +132 -0
  27. package/assets/scripts/superflow-integration-evidence-hook.sh +80 -0
  28. package/assets/scripts/superflow-sql-sync-hook.py +950 -0
  29. package/assets/scripts/superflow-test-report-lint.py +433 -0
  30. package/assets/scripts/superflow-verify-integration.sh +90 -0
  31. package/assets/scripts/sync-settings-json.py +52 -0
  32. package/assets/skills/api-doc-changelog/SKILL.md +193 -0
  33. package/assets/skills/openspec-apply-change/SKILL.md +156 -0
  34. package/assets/skills/openspec-archive-change/SKILL.md +114 -0
  35. package/assets/skills/openspec-explore/SKILL.md +288 -0
  36. package/assets/skills/openspec-propose/SKILL.md +110 -0
  37. package/assets/skills/superflow-archive/SKILL.md +61 -0
  38. package/assets/skills/superflow-clarify/SKILL.md +146 -0
  39. package/assets/skills/superflow-clarify/agents/openai.yaml +4 -0
  40. package/assets/skills/superflow-design/SKILL.md +83 -0
  41. package/assets/skills/superflow-design/agents/openai.yaml +4 -0
  42. package/assets/skills/superflow-docs/SKILL.md +316 -0
  43. package/assets/skills/superflow-docs/agents/openai.yaml +4 -0
  44. package/assets/skills/superflow-hotfix/SKILL.md +48 -0
  45. package/assets/skills/superflow-implement/SKILL.md +461 -0
  46. package/assets/skills/superflow-implement/agents/openai.yaml +4 -0
  47. package/assets/skills/superflow-pipeline/SKILL.md +844 -0
  48. package/assets/skills/superflow-pipeline/agents/openai.yaml +4 -0
  49. package/assets/skills/superflow-pipeline/references/api-design-template.md +431 -0
  50. package/assets/skills/superflow-pipeline/references/architecture-design-template.md +119 -0
  51. package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +536 -0
  52. package/assets/skills/superflow-pipeline/references/batch-split-guide.md +140 -0
  53. package/assets/skills/superflow-pipeline/references/decision-point.md +30 -0
  54. package/assets/skills/superflow-pipeline/references/dirty-worktree.md +35 -0
  55. package/assets/skills/superflow-pipeline/references/document-templates.md +123 -0
  56. package/assets/skills/superflow-pipeline/references/feature-gated-workflow.md +124 -0
  57. package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +1056 -0
  58. package/assets/skills/superflow-pipeline/references/mock-strategy-guide.md +86 -0
  59. package/assets/skills/superflow-pipeline/references/openspec-format.md +57 -0
  60. package/assets/skills/superflow-pipeline/references/orchestration.md +639 -0
  61. package/assets/skills/superflow-pipeline/references/p0-baseline-template.md +174 -0
  62. package/assets/skills/superflow-pipeline/references/project-config.md +40 -0
  63. package/assets/skills/superflow-pipeline/references/prompt-usage-template.md +152 -0
  64. package/assets/skills/superflow-pipeline/references/quality-gate.md +299 -0
  65. package/assets/skills/superflow-pipeline/references/quality-standards.md +190 -0
  66. package/assets/skills/superflow-pipeline/references/reviewer-checklist.md +154 -0
  67. package/assets/skills/superflow-pipeline/references/sql-risk-review-checklist.md +323 -0
  68. package/assets/skills/superflow-pipeline/references/subagent-progress.md +90 -0
  69. package/assets/skills/superflow-pipeline/references/superpower-technical-design-template.md +125 -0
  70. package/assets/skills/superflow-pipeline/references/test-execution-template.md +220 -0
  71. package/assets/skills/superflow-pipeline/references/test-guide.md +30 -0
  72. package/assets/skills/superflow-pipeline/references/traceability-matrix.md +106 -0
  73. package/assets/skills/superflow-pipeline/references/validation-integrity.md +134 -0
  74. package/assets/skills/superflow-pipeline/scripts/superflow-archive.sh +178 -0
  75. package/assets/skills/superflow-pipeline/scripts/superflow-env.sh +118 -0
  76. package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +428 -0
  77. package/assets/skills/superflow-pipeline/scripts/superflow-handoff.sh +296 -0
  78. package/assets/skills/superflow-pipeline/scripts/superflow-state.sh +574 -0
  79. package/assets/skills/superflow-pipeline/scripts/superflow-status.sh +172 -0
  80. package/assets/skills/superflow-pipeline/scripts/superflow-yaml-validate.sh +138 -0
  81. package/assets/skills/superflow-table-impact-analysis/SKILL.md +77 -0
  82. package/assets/skills/superflow-tweak/SKILL.md +46 -0
  83. package/assets/skills/superflow-verify/SKILL.md +112 -0
  84. package/assets/skills-en/api-doc-changelog/SKILL.md +193 -0
  85. package/assets/skills-en/openspec-apply-change/SKILL.md +156 -0
  86. package/assets/skills-en/openspec-archive-change/SKILL.md +114 -0
  87. package/assets/skills-en/openspec-explore/SKILL.md +288 -0
  88. package/assets/skills-en/openspec-propose/SKILL.md +110 -0
  89. package/assets/skills-en/superflow-archive/SKILL.md +61 -0
  90. package/assets/skills-en/superflow-clarify/SKILL.md +146 -0
  91. package/assets/skills-en/superflow-clarify/agents/openai.yaml +4 -0
  92. package/assets/skills-en/superflow-design/SKILL.md +83 -0
  93. package/assets/skills-en/superflow-design/agents/openai.yaml +4 -0
  94. package/assets/skills-en/superflow-docs/SKILL.md +316 -0
  95. package/assets/skills-en/superflow-docs/agents/openai.yaml +4 -0
  96. package/assets/skills-en/superflow-hotfix/SKILL.md +48 -0
  97. package/assets/skills-en/superflow-implement/SKILL.md +461 -0
  98. package/assets/skills-en/superflow-implement/agents/openai.yaml +4 -0
  99. package/assets/skills-en/superflow-pipeline/SKILL.md +844 -0
  100. package/assets/skills-en/superflow-pipeline/agents/openai.yaml +4 -0
  101. package/assets/skills-en/superflow-pipeline/references/api-design-template.md +431 -0
  102. package/assets/skills-en/superflow-pipeline/references/architecture-design-template.md +119 -0
  103. package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +536 -0
  104. package/assets/skills-en/superflow-pipeline/references/batch-split-guide.md +140 -0
  105. package/assets/skills-en/superflow-pipeline/references/decision-point.md +30 -0
  106. package/assets/skills-en/superflow-pipeline/references/dirty-worktree.md +35 -0
  107. package/assets/skills-en/superflow-pipeline/references/document-templates.md +123 -0
  108. package/assets/skills-en/superflow-pipeline/references/feature-gated-workflow.md +124 -0
  109. package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +1056 -0
  110. package/assets/skills-en/superflow-pipeline/references/mock-strategy-guide.md +86 -0
  111. package/assets/skills-en/superflow-pipeline/references/openspec-format.md +57 -0
  112. package/assets/skills-en/superflow-pipeline/references/orchestration.md +639 -0
  113. package/assets/skills-en/superflow-pipeline/references/p0-baseline-template.md +174 -0
  114. package/assets/skills-en/superflow-pipeline/references/project-config.md +40 -0
  115. package/assets/skills-en/superflow-pipeline/references/prompt-usage-template.md +152 -0
  116. package/assets/skills-en/superflow-pipeline/references/quality-gate.md +299 -0
  117. package/assets/skills-en/superflow-pipeline/references/quality-standards.md +190 -0
  118. package/assets/skills-en/superflow-pipeline/references/reviewer-checklist.md +154 -0
  119. package/assets/skills-en/superflow-pipeline/references/sql-risk-review-checklist.md +323 -0
  120. package/assets/skills-en/superflow-pipeline/references/subagent-progress.md +90 -0
  121. package/assets/skills-en/superflow-pipeline/references/superpower-technical-design-template.md +125 -0
  122. package/assets/skills-en/superflow-pipeline/references/test-execution-template.md +220 -0
  123. package/assets/skills-en/superflow-pipeline/references/test-guide.md +30 -0
  124. package/assets/skills-en/superflow-pipeline/references/traceability-matrix.md +106 -0
  125. package/assets/skills-en/superflow-pipeline/references/validation-integrity.md +134 -0
  126. package/assets/skills-en/superflow-pipeline/scripts/superflow-archive.sh +178 -0
  127. package/assets/skills-en/superflow-pipeline/scripts/superflow-env.sh +118 -0
  128. package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +428 -0
  129. package/assets/skills-en/superflow-pipeline/scripts/superflow-handoff.sh +296 -0
  130. package/assets/skills-en/superflow-pipeline/scripts/superflow-state.sh +574 -0
  131. package/assets/skills-en/superflow-pipeline/scripts/superflow-status.sh +172 -0
  132. package/assets/skills-en/superflow-pipeline/scripts/superflow-yaml-validate.sh +138 -0
  133. package/assets/skills-en/superflow-table-impact-analysis/SKILL.md +77 -0
  134. package/assets/skills-en/superflow-tweak/SKILL.md +46 -0
  135. package/assets/skills-en/superflow-verify/SKILL.md +112 -0
  136. package/dist/cli/index.js +186 -0
  137. package/dist/cli/index.js.map +1 -0
  138. package/dist/commands/archive.js +6 -0
  139. package/dist/commands/archive.js.map +1 -0
  140. package/dist/commands/clarify.js +6 -0
  141. package/dist/commands/clarify.js.map +1 -0
  142. package/dist/commands/design.js +6 -0
  143. package/dist/commands/design.js.map +1 -0
  144. package/dist/commands/docs.js +6 -0
  145. package/dist/commands/docs.js.map +1 -0
  146. package/dist/commands/doctor.js +473 -0
  147. package/dist/commands/doctor.js.map +1 -0
  148. package/dist/commands/implement.js +6 -0
  149. package/dist/commands/implement.js.map +1 -0
  150. package/dist/commands/init.js +471 -0
  151. package/dist/commands/init.js.map +1 -0
  152. package/dist/commands/pipeline.js +6 -0
  153. package/dist/commands/pipeline.js.map +1 -0
  154. package/dist/commands/scan.js +59 -0
  155. package/dist/commands/scan.js.map +1 -0
  156. package/dist/commands/status.js +173 -0
  157. package/dist/commands/status.js.map +1 -0
  158. package/dist/commands/uninstall.js +213 -0
  159. package/dist/commands/uninstall.js.map +1 -0
  160. package/dist/commands/update.js +187 -0
  161. package/dist/commands/update.js.map +1 -0
  162. package/dist/commands/verify.js +6 -0
  163. package/dist/commands/verify.js.map +1 -0
  164. package/dist/core/assets.js +27 -0
  165. package/dist/core/assets.js.map +1 -0
  166. package/dist/core/context.js +100 -0
  167. package/dist/core/context.js.map +1 -0
  168. package/dist/core/dependencies.js +146 -0
  169. package/dist/core/dependencies.js.map +1 -0
  170. package/dist/core/detect.js +71 -0
  171. package/dist/core/detect.js.map +1 -0
  172. package/dist/core/i18n.js +103 -0
  173. package/dist/core/i18n.js.map +1 -0
  174. package/dist/core/integrity.js +46 -0
  175. package/dist/core/integrity.js.map +1 -0
  176. package/dist/core/manifest.js +18 -0
  177. package/dist/core/manifest.js.map +1 -0
  178. package/dist/core/prompts.js +20 -0
  179. package/dist/core/prompts.js.map +1 -0
  180. package/dist/core/registry.js +134 -0
  181. package/dist/core/registry.js.map +1 -0
  182. package/dist/core/rules.js +17 -0
  183. package/dist/core/rules.js.map +1 -0
  184. package/dist/core/scripts.js +40 -0
  185. package/dist/core/scripts.js.map +1 -0
  186. package/dist/core/skill-check.js +31 -0
  187. package/dist/core/skill-check.js.map +1 -0
  188. package/dist/core/skills.js +56 -0
  189. package/dist/core/skills.js.map +1 -0
  190. package/dist/core/state.js +43 -0
  191. package/dist/core/state.js.map +1 -0
  192. package/dist/types.js +2 -0
  193. package/dist/types.js.map +1 -0
  194. package/dist/utils/path.js +11 -0
  195. package/dist/utils/path.js.map +1 -0
  196. package/dist/utils/shell.js +29 -0
  197. package/dist/utils/shell.js.map +1 -0
  198. package/package.json +60 -0
@@ -0,0 +1,178 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<'USAGE'
6
+ Usage:
7
+ superflow-archive.sh <change-dir> [--dry-run|--apply]
8
+
9
+ Archive closeout helper. It validates archive readiness and, with --apply,
10
+ archives the OpenSpec change when possible, then marks the SDD lifecycle
11
+ archived through superflow-state.
12
+ USAGE
13
+ }
14
+
15
+ die() {
16
+ printf 'superflow-archive: %s\n' "$*" >&2
17
+ exit 1
18
+ }
19
+
20
+ field_value() {
21
+ local key="$1"
22
+ "$STATE" get "$CHANGE_DIR" "$key" 2>/dev/null || true
23
+ }
24
+
25
+ resolve_doc_path() {
26
+ local value="$1"
27
+ [[ -n "$value" && "$value" != "null" ]] || return 1
28
+ if [[ -f "$CHANGE_DIR/$value" ]]; then
29
+ printf '%s\n' "$CHANGE_DIR/$value"
30
+ return 0
31
+ fi
32
+ if [[ -f "$value" ]]; then
33
+ printf '%s\n' "$value"
34
+ return 0
35
+ fi
36
+ if [[ -f "$PROJECT_ROOT/$value" ]]; then
37
+ printf '%s\n' "$PROJECT_ROOT/$value"
38
+ return 0
39
+ fi
40
+ return 1
41
+ }
42
+
43
+ annotate_frontmatter() {
44
+ local file="$1"
45
+ local archive_name="$2"
46
+ local status_field="${3:-}"
47
+ local tmp
48
+
49
+ [[ -f "$file" ]] || return 0
50
+ tmp="$(mktemp)"
51
+ chmod 600 "$tmp"
52
+
53
+ if head -1 "$file" | grep -q '^---'; then
54
+ awk -v archive="$archive_name" -v status_field="$status_field" '
55
+ /^archived-with:/ { next }
56
+ status_field != "" && /^status:/ { next }
57
+ NR == 1 && /^---/ { print; next }
58
+ /^---/ && NR > 1 {
59
+ print "archived-with: " archive
60
+ if (status_field != "") print "status: " status_field
61
+ print
62
+ next
63
+ }
64
+ { print }
65
+ ' "$file" > "$tmp"
66
+ else
67
+ {
68
+ printf '%s\n' '---'
69
+ printf 'archived-with: %s\n' "$archive_name"
70
+ if [[ -n "$status_field" ]]; then
71
+ printf 'status: %s\n' "$status_field"
72
+ fi
73
+ printf '%s\n' '---'
74
+ cat "$file"
75
+ } > "$tmp"
76
+ fi
77
+
78
+ mv "$tmp" "$file"
79
+ }
80
+
81
+ annotate_archive_docs() {
82
+ local archive_name="$1"
83
+ local design_doc technical_design plan design_path technical_design_path plan_path
84
+ design_doc="$(field_value design_doc)"
85
+ technical_design="$(field_value technical_design)"
86
+ plan="$(field_value plan)"
87
+
88
+ if technical_design_path="$(resolve_doc_path "$technical_design")"; then
89
+ if [[ "$MODE" == "--dry-run" ]]; then
90
+ printf '%s\n' "- annotate_technical_design: $technical_design_path"
91
+ else
92
+ annotate_frontmatter "$technical_design_path" "$archive_name" final
93
+ printf '%s\n' "- annotated_technical_design: $technical_design_path"
94
+ fi
95
+ fi
96
+
97
+ if design_path="$(resolve_doc_path "$design_doc")"; then
98
+ if [[ -n "${technical_design_path:-}" && "$design_path" == "$technical_design_path" ]]; then
99
+ :
100
+ elif [[ "$MODE" == "--dry-run" ]]; then
101
+ printf '%s\n' "- annotate_design_doc: $design_path"
102
+ else
103
+ annotate_frontmatter "$design_path" "$archive_name" final
104
+ printf '%s\n' "- annotated_design_doc: $design_path"
105
+ fi
106
+ fi
107
+
108
+ if plan_path="$(resolve_doc_path "$plan")"; then
109
+ if [[ "$MODE" == "--dry-run" ]]; then
110
+ printf '%s\n' "- annotate_plan: $plan_path"
111
+ else
112
+ annotate_frontmatter "$plan_path" "$archive_name"
113
+ printf '%s\n' "- annotated_plan: $plan_path"
114
+ fi
115
+ fi
116
+ }
117
+
118
+ CHANGE_DIR="${1:-}"
119
+ MODE="${2:---dry-run}"
120
+
121
+ [[ -n "$CHANGE_DIR" && "$CHANGE_DIR" != "-h" && "$CHANGE_DIR" != "--help" ]] || {
122
+ usage
123
+ exit 0
124
+ }
125
+ [[ -d "$CHANGE_DIR" ]] || die "change dir not found: $CHANGE_DIR"
126
+ [[ "$MODE" == "--dry-run" || "$MODE" == "--apply" ]] || die "unknown option: $MODE"
127
+
128
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
129
+ STATE="$SCRIPT_DIR/superflow-state.sh"
130
+ GUARD="$SCRIPT_DIR/superflow-guard.sh"
131
+ VALIDATE="$SCRIPT_DIR/superflow-yaml-validate.sh"
132
+ CHANGE_DIR="$(cd "$CHANGE_DIR" && pwd)"
133
+ CHANGE_NAME="$(basename "$CHANGE_DIR")"
134
+ PROJECT_ROOT="$(cd "$CHANGE_DIR/../.." && pwd)"
135
+ ARCHIVE_ROOT="$PROJECT_ROOT/openspec/changes/archive"
136
+ ARCHIVE_NAME="$CHANGE_NAME"
137
+
138
+ "$VALIDATE" "$CHANGE_DIR"
139
+ "$GUARD" "$CHANGE_DIR" archive
140
+
141
+ printf 'Archive summary:\n'
142
+ printf '%s\n' "- change_dir: $CHANGE_DIR"
143
+ printf '%s\n' "- change_name: $CHANGE_NAME"
144
+ printf '%s\n' "- phase: $("$STATE" get "$CHANGE_DIR" phase 2>/dev/null || true)"
145
+ printf '%s\n' "- verification_report: $("$STATE" get "$CHANGE_DIR" verification_report 2>/dev/null || true)"
146
+ printf '%s\n' "- verify_result: $("$STATE" get "$CHANGE_DIR" verify_result 2>/dev/null || true)"
147
+ if [[ "$CHANGE_DIR" == "$PROJECT_ROOT/openspec/changes/$CHANGE_NAME" ]] && command -v openspec >/dev/null 2>&1; then
148
+ printf '%s\n' "- openspec_archive: openspec archive $CHANGE_NAME --yes"
149
+ ARCHIVE_NAME="$(date -u '+%Y-%m-%d')-$CHANGE_NAME"
150
+ else
151
+ printf '%s\n' "- openspec_archive: unavailable; fallback to state-only archive"
152
+ fi
153
+
154
+ if [[ "$MODE" == "--dry-run" ]]; then
155
+ annotate_archive_docs "$ARCHIVE_NAME"
156
+ printf 'dry-run only; ask the user for archive confirmation before --apply.\n'
157
+ exit 0
158
+ fi
159
+
160
+ if [[ "$CHANGE_DIR" == "$PROJECT_ROOT/openspec/changes/$CHANGE_NAME" ]] && command -v openspec >/dev/null 2>&1; then
161
+ (cd "$PROJECT_ROOT" && openspec archive "$CHANGE_NAME" --yes)
162
+ archived_dir=""
163
+ if [[ -d "$ARCHIVE_ROOT/$CHANGE_NAME" ]]; then
164
+ archived_dir="$ARCHIVE_ROOT/$CHANGE_NAME"
165
+ else
166
+ archived_dir="$(find "$ARCHIVE_ROOT" -maxdepth 1 -mindepth 1 -type d -name "*-$CHANGE_NAME" 2>/dev/null | head -1 || true)"
167
+ fi
168
+ [[ -n "$archived_dir" && -d "$archived_dir" ]] || die "openspec archive completed but archive dir was not found"
169
+ ARCHIVE_NAME="$(basename "$archived_dir")"
170
+ CHANGE_DIR="$(cd "$archived_dir" && pwd)"
171
+ annotate_archive_docs "$ARCHIVE_NAME"
172
+ "$STATE" transition "$archived_dir" archived
173
+ printf 'archived_dir: %s\n' "$archived_dir"
174
+ else
175
+ annotate_archive_docs "$ARCHIVE_NAME"
176
+ "$STATE" transition "$CHANGE_DIR" archived
177
+ printf 'archived_dir: %s\n' "$CHANGE_DIR"
178
+ fi
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env bash
2
+ # SuperBridge Flow script locator. Source this file to export paths to bundled scripts.
3
+ #
4
+ # Usage:
5
+ # . /path/to/superflow-pipeline/scripts/superflow-env.sh
6
+ #
7
+ # This file is safe to source; it does not set global shell options.
8
+
9
+ _superflow_env_source="${BASH_SOURCE[0]:-$0}"
10
+ _superflow_script_dir="$(cd "$(dirname "$_superflow_env_source")" && pwd -P)"
11
+ _superflow_env_sourced=0
12
+ (return 0 2>/dev/null) && _superflow_env_sourced=1
13
+
14
+ export SUPERFLOW_GUARD="${SUPERFLOW_GUARD:-${_superflow_script_dir}/superflow-guard.sh}"
15
+ export SUPERFLOW_STATE="${SUPERFLOW_STATE:-${_superflow_script_dir}/superflow-state.sh}"
16
+ export SUPERFLOW_HANDOFF="${SUPERFLOW_HANDOFF:-${_superflow_script_dir}/superflow-handoff.sh}"
17
+ export SUPERFLOW_ARCHIVE="${SUPERFLOW_ARCHIVE:-${_superflow_script_dir}/superflow-archive.sh}"
18
+ export SUPERFLOW_STATUS="${SUPERFLOW_STATUS:-${_superflow_script_dir}/superflow-status.sh}"
19
+ export SUPERFLOW_YAML_VALIDATE="${SUPERFLOW_YAML_VALIDATE:-${_superflow_script_dir}/superflow-yaml-validate.sh}"
20
+
21
+ export SDD_GUARD="${SDD_GUARD:-$SUPERFLOW_GUARD}"
22
+ export SDD_STATE="${SDD_STATE:-$SUPERFLOW_STATE}"
23
+ export SDD_HANDOFF="${SDD_HANDOFF:-$SUPERFLOW_HANDOFF}"
24
+ export SDD_ARCHIVE="${SDD_ARCHIVE:-$SUPERFLOW_ARCHIVE}"
25
+ export SDD_STATUS="${SDD_STATUS:-$SUPERFLOW_STATUS}"
26
+ export SDD_YAML_VALIDATE="${SDD_YAML_VALIDATE:-$SUPERFLOW_YAML_VALIDATE}"
27
+
28
+ _superflow_bash_is_usable() {
29
+ local candidate="$1"
30
+ [ -n "$candidate" ] || return 1
31
+ case "$candidate" in
32
+ */Windows/System32/bash.exe|*/windows/system32/bash.exe|*\\Windows\\System32\\bash.exe|*\\windows\\system32\\bash.exe)
33
+ return 1
34
+ ;;
35
+ esac
36
+ "$candidate" -lc 'printf superflow-bash-ok' >/dev/null 2>&1
37
+ }
38
+
39
+ _superflow_resolve_bash() {
40
+ local candidate
41
+
42
+ if _superflow_bash_is_usable "${SDD_BASH:-}"; then
43
+ printf '%s\n' "$SDD_BASH"
44
+ return 0
45
+ fi
46
+
47
+ if _superflow_bash_is_usable "${BASH:-}"; then
48
+ printf '%s\n' "$BASH"
49
+ return 0
50
+ fi
51
+
52
+ candidate="$(command -v bash 2>/dev/null || true)"
53
+ if _superflow_bash_is_usable "$candidate"; then
54
+ printf '%s\n' "$candidate"
55
+ return 0
56
+ fi
57
+
58
+ candidate="$(command -v sh 2>/dev/null | awk '{ sub(/\/sh(\.exe)?$/, "/bash.exe"); print }')"
59
+ if _superflow_bash_is_usable "$candidate"; then
60
+ printf '%s\n' "$candidate"
61
+ return 0
62
+ fi
63
+
64
+ return 1
65
+ }
66
+
67
+ SDD_BASH="$(_superflow_resolve_bash || true)"
68
+ export SDD_BASH
69
+
70
+ _superflow_env_fail() {
71
+ echo "ERROR: SuperBridge Flow scripts not found. Ensure the superflow-pipeline skill is installed completely." >&2
72
+ echo "Expected path pattern: */superflow-pipeline/scripts/superflow-*.sh" >&2
73
+ }
74
+
75
+ _superflow_bash_fail() {
76
+ echo "ERROR: usable bash not found. Install Git Bash or set SDD_BASH to a working bash executable." >&2
77
+ echo "Windows WSL launcher bash.exe is not supported for SuperBridge Flow scripts." >&2
78
+ }
79
+
80
+ _superflow_env_abort() {
81
+ local was_sourced="$_superflow_env_sourced"
82
+ unset _superflow_env_source _superflow_script_dir _superflow_script _superflow_env_missing _superflow_env_sourced
83
+ unset candidate
84
+ unset -f _superflow_env_fail _superflow_bash_fail _superflow_bash_is_usable _superflow_resolve_bash
85
+ if [ "$was_sourced" -eq 1 ]; then
86
+ unset -f _superflow_env_abort
87
+ return 1
88
+ fi
89
+ exit 1
90
+ }
91
+
92
+ _superflow_env_missing=0
93
+ if [ -z "$SDD_BASH" ]; then
94
+ _superflow_bash_fail
95
+ _superflow_env_missing=1
96
+ fi
97
+
98
+ for _superflow_script in \
99
+ "$SDD_GUARD" \
100
+ "$SDD_STATE" \
101
+ "$SDD_HANDOFF" \
102
+ "$SDD_ARCHIVE" \
103
+ "$SDD_STATUS" \
104
+ "$SDD_YAML_VALIDATE"; do
105
+ if [ ! -f "$_superflow_script" ]; then
106
+ _superflow_env_fail
107
+ _superflow_env_missing=1
108
+ break
109
+ fi
110
+ done
111
+
112
+ if [ "$_superflow_env_missing" -ne 0 ]; then
113
+ _superflow_env_abort
114
+ else
115
+ unset _superflow_env_source _superflow_script_dir _superflow_script _superflow_env_missing _superflow_env_sourced
116
+ unset candidate
117
+ unset -f _superflow_env_fail _superflow_bash_fail _superflow_bash_is_usable _superflow_resolve_bash _superflow_env_abort
118
+ fi