@giamme/forge 0.0.0-stage → 0.9.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 (152) hide show
  1. package/CHANGELOG.md +205 -0
  2. package/LICENSE +21 -0
  3. package/README.md +194 -2
  4. package/SKILL.md +123 -0
  5. package/VERSION +1 -0
  6. package/docs/README.md +26 -0
  7. package/docs/add-ons.md +33 -0
  8. package/docs/artifacts.md +69 -0
  9. package/docs/commands.md +315 -0
  10. package/docs/dataset.md +20 -0
  11. package/docs/decomposed-runs.md +268 -0
  12. package/docs/development.md +95 -0
  13. package/docs/forge-ui.md +92 -0
  14. package/docs/fractal.md +181 -0
  15. package/docs/install.md +160 -0
  16. package/docs/memory.md +156 -0
  17. package/docs/models.md +118 -0
  18. package/docs/reviews.md +231 -0
  19. package/docs/safety.md +55 -0
  20. package/docs/troubleshooting.md +54 -0
  21. package/forge +79 -0
  22. package/package.json +27 -4
  23. package/references/dataset.md +329 -0
  24. package/references/decompose.md +667 -0
  25. package/references/fractal-dashboard.md +21 -0
  26. package/references/fractal.md +307 -0
  27. package/references/harnesses.md +365 -0
  28. package/references/jev.md +865 -0
  29. package/references/memory.md +228 -0
  30. package/references/planning.md +42 -0
  31. package/references/ripwire.md +47 -0
  32. package/references/runtime.md +64 -0
  33. package/references/solo.md +113 -0
  34. package/references/ui.md +112 -0
  35. package/registry.tsv +81 -0
  36. package/scripts/forge-artifact.sh +78 -0
  37. package/scripts/forge-contract.py +430 -0
  38. package/scripts/forge-dataset.py +6 -0
  39. package/scripts/forge-dispatch.sh +671 -0
  40. package/scripts/forge-fail-first.py +195 -0
  41. package/scripts/forge-fractal-dispatch.sh +4 -0
  42. package/scripts/forge-fractal-options.sh +54 -0
  43. package/scripts/forge-fractal.py +6 -0
  44. package/scripts/forge-guard.py +266 -0
  45. package/scripts/forge-install-fractal.sh +4 -0
  46. package/scripts/forge-install-ripwire.sh +52 -0
  47. package/scripts/forge-install.sh +135 -0
  48. package/scripts/forge-jev-options.sh +259 -0
  49. package/scripts/forge-jev.py +6 -0
  50. package/scripts/forge-lib-plans.sh +785 -0
  51. package/scripts/forge-lib-review.sh +494 -0
  52. package/scripts/forge-lib-task.sh +302 -0
  53. package/scripts/forge-lib-verify.sh +30 -0
  54. package/scripts/forge-memory.sh +575 -0
  55. package/scripts/forge-metrics.sh +39 -0
  56. package/scripts/forge-parallel-options.sh +76 -0
  57. package/scripts/forge-parallel.sh +1717 -0
  58. package/scripts/forge-plan-check.py +118 -0
  59. package/scripts/forge-prompt.py +45 -0
  60. package/scripts/forge-ripwire.py +136 -0
  61. package/scripts/forge-route.py +344 -0
  62. package/scripts/forge-runs.py +121 -0
  63. package/scripts/forge-runtime.py +586 -0
  64. package/scripts/forge-schedule.py +312 -0
  65. package/scripts/forge-shadow.py +305 -0
  66. package/scripts/forge-solo.sh +347 -0
  67. package/scripts/forge-ui-options.sh +42 -0
  68. package/scripts/forge-ui.py +435 -0
  69. package/scripts/forge-update.sh +71 -0
  70. package/scripts/forge-verify-coverage.py +956 -0
  71. package/scripts/forge-version.py +240 -0
  72. package/scripts/forge_dataset/__init__.py +439 -0
  73. package/scripts/forge_dataset/capture.py +330 -0
  74. package/scripts/forge_dataset/checks.py +109 -0
  75. package/scripts/forge_dataset/cli.py +233 -0
  76. package/scripts/forge_dataset/export.py +1009 -0
  77. package/scripts/forge_dataset/harvest.py +716 -0
  78. package/scripts/forge_dataset/importer.py +412 -0
  79. package/scripts/forge_dataset/outcomes.py +275 -0
  80. package/scripts/forge_dataset/routing.py +278 -0
  81. package/scripts/forge_fractal/__init__.py +84 -0
  82. package/scripts/forge_fractal/bridge.py +46 -0
  83. package/scripts/forge_fractal/cli.py +202 -0
  84. package/scripts/forge_fractal/dashboard.css +138 -0
  85. package/scripts/forge_fractal/dashboard.html +41 -0
  86. package/scripts/forge_fractal/dashboard.js +687 -0
  87. package/scripts/forge_fractal/decomposition.py +262 -0
  88. package/scripts/forge_fractal/execution.py +659 -0
  89. package/scripts/forge_fractal/inspection.py +261 -0
  90. package/scripts/forge_fractal/install.py +158 -0
  91. package/scripts/forge_fractal/invocation.py +94 -0
  92. package/scripts/forge_fractal/pipeline.py +124 -0
  93. package/scripts/forge_fractal/selection.py +179 -0
  94. package/scripts/forge_jev/__init__.py +376 -0
  95. package/scripts/forge_jev/backtest.py +322 -0
  96. package/scripts/forge_jev/cli.py +980 -0
  97. package/scripts/forge_jev/client.py +418 -0
  98. package/scripts/forge_jev/corpus.py +156 -0
  99. package/scripts/forge_jev/coupling.py +244 -0
  100. package/scripts/forge_jev/features.py +24 -0
  101. package/scripts/forge_jev/gates.py +100 -0
  102. package/scripts/forge_jev/memory.py +163 -0
  103. package/scripts/forge_jev/outcome.py +49 -0
  104. package/scripts/forge_jev/predict.py +204 -0
  105. package/scripts/forge_jev/questions.py +661 -0
  106. package/scripts/forge_jev/review.py +73 -0
  107. package/scripts/forge_jev/routing.py +271 -0
  108. package/scripts/forge_jev/subset.py +123 -0
  109. package/scripts/forge_jev/verify.py +453 -0
  110. package/scripts/forge_registry.py +140 -0
  111. package/ui/README.md +347 -0
  112. package/ui/THIRD_PARTY_NOTICES.md +177 -0
  113. package/ui/docs/api.md +970 -0
  114. package/ui/forge_ui/__init__.py +20 -0
  115. package/ui/forge_ui/__main__.py +135 -0
  116. package/ui/forge_ui/diffs.py +454 -0
  117. package/ui/forge_ui/executions.py +436 -0
  118. package/ui/forge_ui/export.py +214 -0
  119. package/ui/forge_ui/findings.py +132 -0
  120. package/ui/forge_ui/fractal.py +582 -0
  121. package/ui/forge_ui/models.py +216 -0
  122. package/ui/forge_ui/reader.py +1424 -0
  123. package/ui/forge_ui/server.py +312 -0
  124. package/ui/forge_ui/static/D-DINCondensed-Bold.woff2 +0 -0
  125. package/ui/forge_ui/static/app.js +1079 -0
  126. package/ui/forge_ui/static/cloud3d.js +647 -0
  127. package/ui/forge_ui/static/cloudmodel.js +375 -0
  128. package/ui/forge_ui/static/cloudui.js +397 -0
  129. package/ui/forge_ui/static/convo.js +295 -0
  130. package/ui/forge_ui/static/datatable.js +232 -0
  131. package/ui/forge_ui/static/diffview.js +235 -0
  132. package/ui/forge_ui/static/favicon.svg +1 -0
  133. package/ui/forge_ui/static/files.js +776 -0
  134. package/ui/forge_ui/static/findings3d.js +134 -0
  135. package/ui/forge_ui/static/gantt.js +97 -0
  136. package/ui/forge_ui/static/graph.js +266 -0
  137. package/ui/forge_ui/static/icons.js +94 -0
  138. package/ui/forge_ui/static/index.html +67 -0
  139. package/ui/forge_ui/static/iso.js +816 -0
  140. package/ui/forge_ui/static/leaderboard.js +311 -0
  141. package/ui/forge_ui/static/map3d.js +45 -0
  142. package/ui/forge_ui/static/modelstats.js +249 -0
  143. package/ui/forge_ui/static/notify.js +179 -0
  144. package/ui/forge_ui/static/panel.js +562 -0
  145. package/ui/forge_ui/static/runmodel.js +667 -0
  146. package/ui/forge_ui/static/scene3d.js +1471 -0
  147. package/ui/forge_ui/static/search.js +120 -0
  148. package/ui/forge_ui/static/shell.js +137 -0
  149. package/ui/forge_ui/static/stagectl.js +150 -0
  150. package/ui/forge_ui/static/style.css +1073 -0
  151. package/ui/forge_ui/static/theme.js +25 -0
  152. package/ui/forge_ui/transcripts.py +608 -0
@@ -0,0 +1,76 @@
1
+ #!/usr/bin/env bash
2
+ # Flags shared by several forge-parallel.sh subcommands, parsed in one place.
3
+ #
4
+ # Sourced at the top of forge-parallel.sh (an option parser sourced from inside a
5
+ # function, after that function already walked its arguments, cannot parse anything).
6
+ # Each subcommand's own `case` handles its private flags and falls through to this for
7
+ # the rest, before the Jev hook and its own "unknown option" error.
8
+ #
9
+ # forge_pp_flag <subcommand> <plan-dir> <args...>
10
+ # 0 the flag was ours and valid; PP_SHIFT holds how many arguments it used
11
+ # 1 not ours, or not accepted by this subcommand
12
+ # A malformed value exits through die (2).
13
+ #
14
+ # Persisted options become files in the plan dir, like --verify and --setup, so a later
15
+ # `retry` or the scheduler's task processes see them. Cost-bearing options that change
16
+ # what a run is allowed to spend (--retry-failed, --infra-retries) are deliberately NOT
17
+ # persisted: they apply to the invocation that asked for them.
18
+ #
19
+ # --timeout S run retry $PLAN/timeout dispatch timeout, seconds (0 = none)
20
+ # --retry-failed N run (this run only) automatic reviewer-driven retries
21
+ # --infra-retries M run (this run only) waits out quota/auth/network stops
22
+ # --qa-threshold Pn|none run retry $PLAN/qa_threshold least severe finding that still blocks
23
+ # --verify-retries N run retry integrate $PLAN/verify_retries reruns of a failed verify command
24
+ # --escalate-after N run retry $PLAN/escalate_after failed attempts on one model before the
25
+ # next goes a tier up (default 3; 0 = off)
26
+ # --final-review SPEC integrate $PLAN/final_qa QA spec for the whole-run review
27
+ PP_SHIFT=2
28
+ PP_RETRY_FAILED=0
29
+ PP_INFRA_RETRIES=0
30
+ PP_FINAL_REVIEW=""
31
+
32
+ pp_nonneg() { # pp_nonneg <flag> <value>
33
+ case "$2" in ''|*[!0-9]*) die "$1 needs a non-negative integer" ;; esac
34
+ }
35
+
36
+ forge_pp_flag() {
37
+ local cmd="$1" plan="$2"; shift 2
38
+ PP_SHIFT=2
39
+ case "${1:-}" in
40
+ --timeout)
41
+ case "$cmd" in run|retry) ;; *) return 1 ;; esac
42
+ pp_nonneg --timeout "${2:-}"
43
+ printf '%s' "$2" > "$plan/timeout" ;;
44
+ --retry-failed)
45
+ [ "$cmd" = run ] || return 1
46
+ pp_nonneg --retry-failed "${2:-}"; PP_RETRY_FAILED="$2" ;;
47
+ --infra-retries)
48
+ [ "$cmd" = run ] || return 1
49
+ pp_nonneg --infra-retries "${2:-}"; PP_INFRA_RETRIES="$2" ;;
50
+ --qa-threshold)
51
+ case "$cmd" in run|retry|review) ;; *) return 1 ;; esac
52
+ case "${2:-}" in
53
+ P0|P1|P2|P3) printf '%s' "$2" > "$plan/qa_threshold" ;;
54
+ none|off) rm -f "$plan/qa_threshold" ;;
55
+ *) die "--qa-threshold needs P0, P1, P2, P3 or none" ;;
56
+ esac ;;
57
+ --escalate-after)
58
+ case "$cmd" in run|retry) ;; *) return 1 ;; esac
59
+ pp_nonneg --escalate-after "${2:-}"
60
+ printf '%s' "$2" > "$plan/escalate_after"
61
+ # Off means off: the policy's own stop markers go too, so the scheduler retries again.
62
+ if [ "$2" = 0 ]; then
63
+ rm -f "$plan"/tasks/*/escalation.stop "$plan"/tasks/*/split.suggested "$plan"/tasks/*/escalation.next
64
+ fi ;;
65
+ --verify-retries)
66
+ case "$cmd" in run|retry|integrate) ;; *) return 1 ;; esac
67
+ pp_nonneg --verify-retries "${2:-}"
68
+ printf '%s' "$2" > "$plan/verify_retries" ;;
69
+ --final-review)
70
+ [ "$cmd" = integrate ] || return 1
71
+ PP_FINAL_REVIEW="${2:?--final-review needs a QA spec}"
72
+ printf '%s' "$PP_FINAL_REVIEW" > "$plan/final_qa" ;;
73
+ *) return 1 ;;
74
+ esac
75
+ return 0
76
+ }