@moretea-labs/forge 1.7.0 → 1.7.1
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/AGENTS.md +2 -0
- package/CHANGELOG.md +13 -0
- package/CLAUDE.md +2 -0
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/agents/openai.yaml +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +2 -0
- package/assets/plugin-registry.v1.json +3 -3
- package/assets/skill-version.json +2 -2
- package/assets/templates/helpers/check-architecture-sync.sh +17 -0
- package/assets/templates/helpers/inspect-project-state.ts +8 -6
- package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
- package/assets/templates/helpers/workflow-contract.ts +5 -1
- package/docs/architecture/CURRENT.md +12 -4
- package/docs/forge-plugin-management.md +1 -1
- package/docs/operations/controller-performance-and-502.md +19 -0
- package/docs/operations/homebrew.md +2 -2
- package/package.json +5 -2
- package/scripts/architecture-event.ts +2 -820
- package/scripts/architecture-queue.sh +2 -645
- package/scripts/archive-architecture-request.sh +2 -242
- package/scripts/archive-workflow.sh +1 -291
- package/scripts/benchmark-work-efficiency.ts +0 -0
- package/scripts/capability-config.ts +2 -392
- package/scripts/capability-resolver.ts +2 -503
- package/scripts/capture-plan.sh +1 -332
- package/scripts/check-agent-tooling.sh +2 -1531
- package/scripts/check-architecture-sync.sh +2 -302
- package/scripts/check-brain-manifest.sh +2 -253
- package/scripts/check-context-files.sh +2 -47
- package/scripts/check-deploy-sql-order.sh +2 -115
- package/scripts/check-runtime-architecture.mjs +243 -16
- package/scripts/check-skill-version.ts +3 -191
- package/scripts/check-source-duplication.mjs +61 -0
- package/scripts/check-stable-baseline.ts +0 -0
- package/scripts/check-task-sync.sh +2 -63
- package/scripts/check-task-workflow.sh +2 -1000
- package/scripts/codex-handoff-resume.sh +2 -267
- package/scripts/context-contract-sync.sh +2 -514
- package/scripts/contract-run.ts +2 -463
- package/scripts/contract-worktree.sh +1 -702
- package/scripts/ensure-task-workflow.sh +1 -1192
- package/scripts/inspect-project-state.ts +4 -279
- package/scripts/lib/project-init-lib.sh +7 -2
- package/scripts/lib/run-forge-helper.sh +19 -0
- package/scripts/lib/run-forge-helper.ts +26 -0
- package/scripts/migrate-project-template.sh +1 -33
- package/scripts/migrate-workflow-docs.ts +4 -412
- package/scripts/new-plan.sh +1 -180
- package/scripts/new-spec.sh +1 -47
- package/scripts/new-sprint.sh +1 -46
- package/scripts/plan-to-todo.sh +1 -771
- package/scripts/prepare-codex-handoff.sh +2 -201
- package/scripts/prepare-handoff.sh +1 -78
- package/scripts/refresh-current-status.sh +2 -467
- package/scripts/run-governed-gate.ts +3 -0
- package/scripts/select-agent-context-blocks.sh +2 -64
- package/scripts/ship-worktrees.sh +1 -531
- package/scripts/sprint-backlog.sh +1 -834
- package/scripts/stage-runtime-release.ts +2 -1
- package/scripts/summarize-failures.sh +2 -123
- package/scripts/switch-plan.sh +1 -150
- package/scripts/sync-brain-docs.sh +2 -379
- package/scripts/sync-generated-authority.mjs +175 -0
- package/scripts/verify-contract.sh +2 -593
- package/scripts/verify-sprint.sh +1 -500
- package/scripts/workflow-contract.ts +4 -201
- package/scripts/workstream-sync.sh +2 -261
- package/src/cli/agent-jobs/executor-health.ts +1 -1
- package/src/cli/commands/plugin.ts +12 -3
- package/src/cli/controller/check-runner.ts +7 -2
- package/src/cli/controller/context-pack.ts +46 -21
- package/src/cli/github/contracts.ts +16 -0
- package/src/cli/github/github.ts +2 -16
- package/src/cli/github/session.ts +2 -1
- package/src/cli/local-bridge/facade-api.ts +37 -47
- package/src/cli/local-bridge/server.ts +2 -2
- package/src/cli/mcp/legacy-tool-service.ts +10 -33
- package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
- package/src/cli/mcp/repository-tools.ts +85 -89
- package/src/cli/mcp/server.ts +57 -13
- package/src/cli/mcp/tool-contract.ts +14 -0
- package/src/cli/mcp/toolset.ts +2 -2
- package/src/cli/mcp/transports/http.ts +23 -0
- package/src/cli/repositories/command-classifier.ts +2 -2
- package/src/cli/repositories/command-executor.ts +24 -6
- package/src/cli/repositories/repository-snapshot.ts +5 -2
- package/src/cli/repositories/structured-git.ts +57 -3
- package/src/cli/repository/inspector.ts +11 -3
- package/src/runtime/context/generic-lsp-provider.ts +1 -1
- package/src/runtime/context/semantic-navigation-contract.ts +61 -0
- package/src/runtime/context/semantic-navigation.ts +9 -61
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +18 -25
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
- package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
- package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
- package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
- package/src/runtime/control-plane/execution/work-handle-authority.ts +96 -0
- package/src/runtime/control-plane/execution/work-handle-store.ts +1 -1
- package/src/runtime/control-plane/execution/work-operation-service.ts +468 -0
- package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
- package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
- package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
- package/src/runtime/control-plane/execution/work-task-receipt.ts +4 -43
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +13 -3
- package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
- package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
- package/src/runtime/control-plane/facade/controller-round-relay.ts +164 -37
- package/src/runtime/control-plane/facade/controller-session-store.ts +183 -24
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +15 -1
- package/src/runtime/control-plane/facade/goal-workloop.ts +329 -148
- package/src/runtime/control-plane/facade/index.ts +2 -0
- package/src/runtime/control-plane/facade/plan-contract-store.ts +90 -22
- package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
- package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
- package/src/runtime/control-plane/facade/types.ts +68 -5
- package/src/runtime/control-plane/facade/work-contract-store.ts +3 -209
- package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +14 -7
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +5 -1
- package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +13 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +15 -6
- package/src/runtime/control-plane/launcher/launch-reservation-store.ts +54 -5
- package/src/runtime/control-plane/launcher/thin-launcher.ts +56 -7
- package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
- package/src/runtime/control-plane/repo-actor/registry.ts +4 -2
- package/src/runtime/control-plane/routing/route-policy.ts +18 -6
- package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
- package/src/runtime/evidence/process-check-execution.ts +18 -0
- package/src/runtime/execution/jobs/child-reference.ts +6 -2
- package/src/runtime/execution/process-runtime/check-result.ts +53 -18
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
- package/src/runtime/execution/process-runtime/command-facade.ts +39 -17
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +20 -3
- package/src/runtime/execution/process-runtime/persisted-check.ts +4 -1
- package/src/runtime/execution/process-runtime/runtime.ts +10 -0
- package/src/runtime/execution/process-runtime/types.ts +2 -12
- package/src/runtime/execution/work-activity.ts +21 -0
- package/src/runtime/execution/workers/executor.ts +18 -13
- package/src/runtime/gateway/mcp/execution-tools.ts +35 -2930
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
- package/src/runtime/gateway/mcp/router.ts +2 -2
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +21 -2
- package/src/runtime/gateway/mcp/runtime-tools.ts +805 -1009
- package/src/runtime/plugins/app-store-connect-adapter.ts +93 -28
- package/src/runtime/plugins/browser-adapter.ts +256 -1083
- package/src/runtime/plugins/browser-handoff-host.ts +2 -25
- package/src/runtime/plugins/browser-handoff.ts +18 -3
- package/src/runtime/plugins/browser-macos-bridge.ts +121 -16
- package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
- package/src/runtime/plugins/browser-native-session-service.ts +222 -0
- package/src/runtime/plugins/browser-runtime-contract.ts +2 -0
- package/src/runtime/plugins/browser-runtime.ts +10 -0
- package/src/runtime/plugins/browser-session-store.ts +121 -0
- package/src/runtime/plugins/browser-session-types.ts +98 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +4 -4
- package/src/runtime/plugins/external-adapter.ts +92 -58
- package/src/runtime/plugins/macos-capability-broker.ts +0 -8
- package/src/runtime/plugins/store.ts +66 -9
- package/src/runtime/plugins/types.ts +3 -1
- package/src/runtime/recovery/maintenance-executor.ts +61 -25
- package/src/runtime/root/package-connector-service.ts +46 -4
- package/src/runtime/root/package-runtime-release.ts +1 -1
- package/src/runtime/root/package-runtime-service.ts +33 -2
- package/src/runtime/root/release-manifest.ts +137 -16
- package/src/runtime/root/release-materialize.ts +109 -35
- package/src/runtime/root/types.ts +10 -0
- package/src/runtime/standalone-recovery/core.ts +425 -194
- package/src/runtime/standalone-recovery/entry.ts +1 -1
- package/src/runtime/standalone-recovery/installer.ts +1 -1
- package/src/runtime/workflow/schedules/engine.ts +113 -87
- package/src/runtime/workflow/schedules/settlement.ts +26 -23
- package/src/runtime/workflow/schedules/store.ts +79 -10
|
@@ -1,269 +1,4 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
cat <<'USAGE_EOF'
|
|
6
|
-
Usage: scripts/codex-handoff-resume.sh --cwd <repo> [--print-prompt] [--reason <reason>]
|
|
7
|
-
USAGE_EOF
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
cwd=""
|
|
11
|
-
print_prompt=0
|
|
12
|
-
reason="manual"
|
|
13
|
-
|
|
14
|
-
while [[ $# -gt 0 ]]; do
|
|
15
|
-
case "$1" in
|
|
16
|
-
--cwd)
|
|
17
|
-
cwd="${2:-}"
|
|
18
|
-
shift 2
|
|
19
|
-
;;
|
|
20
|
-
--print-prompt)
|
|
21
|
-
print_prompt=1
|
|
22
|
-
shift
|
|
23
|
-
;;
|
|
24
|
-
--reason)
|
|
25
|
-
reason="${2:-manual}"
|
|
26
|
-
shift 2
|
|
27
|
-
;;
|
|
28
|
-
--help|-h)
|
|
29
|
-
usage
|
|
30
|
-
exit 0
|
|
31
|
-
;;
|
|
32
|
-
*)
|
|
33
|
-
echo "Unknown argument: $1" >&2
|
|
34
|
-
usage >&2
|
|
35
|
-
exit 1
|
|
36
|
-
;;
|
|
37
|
-
esac
|
|
38
|
-
done
|
|
39
|
-
|
|
40
|
-
if [[ -z "$cwd" ]]; then
|
|
41
|
-
cwd="$(pwd)"
|
|
42
|
-
fi
|
|
43
|
-
|
|
44
|
-
cwd="$(cd "$cwd" && pwd)"
|
|
45
|
-
cd "$cwd"
|
|
46
|
-
|
|
47
|
-
policy_get() {
|
|
48
|
-
local jq_path="$1"
|
|
49
|
-
local default_value="$2"
|
|
50
|
-
|
|
51
|
-
if [[ -f ".ai/harness/policy.json" ]] && command -v jq >/dev/null 2>&1; then
|
|
52
|
-
local value
|
|
53
|
-
value="$(jq -r "$jq_path // empty" .ai/harness/policy.json 2>/dev/null || true)"
|
|
54
|
-
if [[ -n "$value" ]]; then
|
|
55
|
-
printf '%s' "$value"
|
|
56
|
-
return 0
|
|
57
|
-
fi
|
|
58
|
-
fi
|
|
59
|
-
|
|
60
|
-
printf '%s' "$default_value"
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
safe_repo_file() {
|
|
64
|
-
local value="$1"
|
|
65
|
-
local default_value="$2"
|
|
66
|
-
local allowed_prefix="${3:-}"
|
|
67
|
-
|
|
68
|
-
if [[ -z "$value" || "$value" == /* || "$value" == *$'\n'* || "$value" == *$'\r'* ]]; then
|
|
69
|
-
printf '%s' "$default_value"
|
|
70
|
-
return 0
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
|
-
case "$value" in
|
|
74
|
-
..|../*|*/..|*/../*)
|
|
75
|
-
printf '%s' "$default_value"
|
|
76
|
-
;;
|
|
77
|
-
*)
|
|
78
|
-
if [[ -n "$allowed_prefix" && "$value" != "$allowed_prefix"* ]]; then
|
|
79
|
-
printf '%s' "$default_value"
|
|
80
|
-
return 0
|
|
81
|
-
fi
|
|
82
|
-
printf '%s' "$value"
|
|
83
|
-
;;
|
|
84
|
-
esac
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
active_plan() {
|
|
88
|
-
for marker_file in ".ai/harness/active-plan" ".claude/.active-plan"; do
|
|
89
|
-
if [[ ! -f "$marker_file" ]]; then
|
|
90
|
-
continue
|
|
91
|
-
fi
|
|
92
|
-
local marker
|
|
93
|
-
marker="$(cat "$marker_file" 2>/dev/null | xargs)"
|
|
94
|
-
if [[ -n "$marker" && -f "$marker" ]]; then
|
|
95
|
-
printf '%s' "$marker"
|
|
96
|
-
return 0
|
|
97
|
-
fi
|
|
98
|
-
done
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
plan_slug_from_path() {
|
|
102
|
-
local plan_file="$1"
|
|
103
|
-
local base slug
|
|
104
|
-
base="$(basename "$plan_file")"
|
|
105
|
-
slug="$(printf '%s' "$base" | sed -E 's/^plan-[0-9]{8}-[0-9]{4}-//; s/\.md$//')"
|
|
106
|
-
printf '%s' "$slug"
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
plan_original_artifact_stem_from_path() {
|
|
110
|
-
local plan_file="$1"
|
|
111
|
-
local base stem
|
|
112
|
-
base="$(basename "$plan_file")"
|
|
113
|
-
stem="$(printf '%s' "$base" | sed -E 's/^plan-//; s/\.md$//')"
|
|
114
|
-
if [[ "$stem" =~ ^[0-9]{8}-[0-9]{4}-.+ ]]; then
|
|
115
|
-
printf '%s' "$stem"
|
|
116
|
-
else
|
|
117
|
-
plan_slug_from_path "$plan_file"
|
|
118
|
-
fi
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
is_transient_plan_slug() {
|
|
122
|
-
case "$1" in
|
|
123
|
-
think-plan-[0-9]*|codex-plan-[0-9]*|approved-plan-[0-9]*)
|
|
124
|
-
return 0
|
|
125
|
-
;;
|
|
126
|
-
esac
|
|
127
|
-
return 1
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
plan_title_slug_from_file() {
|
|
131
|
-
local plan_file="$1"
|
|
132
|
-
local title slug
|
|
133
|
-
[[ -f "$plan_file" ]] || return 1
|
|
134
|
-
title="$(awk '
|
|
135
|
-
/^# Plan:[[:space:]]*/ {
|
|
136
|
-
sub(/^# Plan:[[:space:]]*/, "")
|
|
137
|
-
print
|
|
138
|
-
exit
|
|
139
|
-
}
|
|
140
|
-
' "$plan_file" | xargs)"
|
|
141
|
-
[[ -n "$title" ]] || return 1
|
|
142
|
-
slug="$(printf '%s' "$title" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9]+/-/g; s/^-+//; s/-+$//; s/-{2,}/-/g')"
|
|
143
|
-
[[ -n "$slug" ]] || return 1
|
|
144
|
-
printf '%s' "$slug"
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
plan_artifact_stem_from_path() {
|
|
148
|
-
local plan_file="$1"
|
|
149
|
-
local stem stamp slug title_slug
|
|
150
|
-
stem="$(plan_original_artifact_stem_from_path "$plan_file")"
|
|
151
|
-
if [[ "$stem" =~ ^[0-9]{8}-[0-9]{4}-.+ ]]; then
|
|
152
|
-
stamp="$(printf '%s' "$stem" | sed -E 's/^([0-9]{8}-[0-9]{4})-.+$/\1/')"
|
|
153
|
-
slug="$(printf '%s' "$stem" | sed -E 's/^[0-9]{8}-[0-9]{4}-//')"
|
|
154
|
-
if is_transient_plan_slug "$slug"; then
|
|
155
|
-
title_slug="$(plan_title_slug_from_file "$plan_file" || true)"
|
|
156
|
-
if [[ -n "$title_slug" && "$title_slug" != "$slug" ]]; then
|
|
157
|
-
printf '%s-%s' "$stamp" "$title_slug"
|
|
158
|
-
return 0
|
|
159
|
-
fi
|
|
160
|
-
fi
|
|
161
|
-
printf '%s' "$stem"
|
|
162
|
-
else
|
|
163
|
-
plan_slug_from_path "$plan_file"
|
|
164
|
-
fi
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
preferred_or_legacy_path() {
|
|
168
|
-
local preferred="$1"
|
|
169
|
-
local legacy="$2"
|
|
170
|
-
if [[ -f "$preferred" ]] || [[ ! -f "$legacy" ]]; then
|
|
171
|
-
printf '%s' "$preferred"
|
|
172
|
-
else
|
|
173
|
-
printf '%s' "$legacy"
|
|
174
|
-
fi
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
derive_contract() {
|
|
178
|
-
local plan_file="$1"
|
|
179
|
-
local slug stem
|
|
180
|
-
[[ -n "$plan_file" ]] || return 1
|
|
181
|
-
slug="$(plan_slug_from_path "$plan_file")"
|
|
182
|
-
stem="$(plan_artifact_stem_from_path "$plan_file")"
|
|
183
|
-
[[ -n "$slug" && -n "$stem" ]] || return 1
|
|
184
|
-
preferred_or_legacy_path "tasks/contracts/${stem}.contract.md" "tasks/contracts/${slug}.contract.md"
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
derive_notes() {
|
|
188
|
-
local plan_file="$1"
|
|
189
|
-
local slug stem notes_dir
|
|
190
|
-
[[ -n "$plan_file" ]] || return 1
|
|
191
|
-
slug="$(plan_slug_from_path "$plan_file")"
|
|
192
|
-
stem="$(plan_artifact_stem_from_path "$plan_file")"
|
|
193
|
-
[[ -n "$slug" && -n "$stem" ]] || return 1
|
|
194
|
-
notes_dir="$(safe_repo_file "$(policy_get '.tasks.notes_dir' 'tasks/notes')" 'tasks/notes' 'tasks/')"
|
|
195
|
-
preferred_or_legacy_path "${notes_dir}/${stem}.notes.md" "${notes_dir}/${slug}.notes.md"
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
latest_global_handoff() {
|
|
199
|
-
local codex_home="${CODEX_HOME:-$HOME/.codex}"
|
|
200
|
-
find "$codex_home/handoffs" -maxdepth 1 -type f -name 'handoff-*.md' 2>/dev/null | sort | tail -1
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
resume_file="$(safe_repo_file "$(policy_get '.session.resume_file' '.ai/harness/session/resume.md')" '.ai/harness/session/resume.md' '.ai/harness/')"
|
|
204
|
-
repo_handoff="$(safe_repo_file "$(policy_get '.session.continuation_file' '.ai/harness/session/continuation.md')" '.ai/harness/session/continuation.md' '.ai/harness/')"
|
|
205
|
-
checks_file="$(safe_repo_file "$(policy_get '.harness.checks_file' '.ai/harness/checks/latest.json')" '.ai/harness/checks/latest.json' '.ai/harness/')"
|
|
206
|
-
research_dir="$(safe_repo_file "$(policy_get '.tasks.research_dir' 'docs/researches')" 'docs/researches' 'docs/researches')"
|
|
207
|
-
todo_file="$(safe_repo_file "$(policy_get '.tasks.todo_file' 'tasks/todos.md')" 'tasks/todos.md' 'tasks/')"
|
|
208
|
-
plan_file="$(active_plan || true)"
|
|
209
|
-
contract_file="$(derive_contract "$plan_file" || true)"
|
|
210
|
-
notes_file="$(derive_notes "$plan_file" || true)"
|
|
211
|
-
global_handoff="$(latest_global_handoff || true)"
|
|
212
|
-
|
|
213
|
-
mkdir -p "$(dirname "$resume_file")"
|
|
214
|
-
|
|
215
|
-
cat > "$resume_file" <<EOF_RESUME
|
|
216
|
-
# Codex Resume Packet
|
|
217
|
-
<!-- generated-by: forge codex-handoff-resume v1 -->
|
|
218
|
-
|
|
219
|
-
> **Generated**: $(date '+%Y-%m-%d %H:%M:%S')
|
|
220
|
-
> **Reason**: ${reason}
|
|
221
|
-
> **Working Directory**: ${cwd}
|
|
222
|
-
|
|
223
|
-
## Resume Prompt
|
|
224
|
-
|
|
225
|
-
You are starting a fresh Codex session for an existing long-running task. Do not rely on prior chat history or Codex auto-compact. First read the current user input and Canonical Runtime state when available, then source/evidence artifacts, and use the session continuation cache only to recover the exact next step.
|
|
226
|
-
|
|
227
|
-
Current prompt files first:
|
|
228
|
-
- If the current user message lists files under \`# Files mentioned by the user\`, references \`pasted-text.txt\`, or includes an explicit attachment/file path, read those current-input files before the repo recovery artifacts below.
|
|
229
|
-
- Use handoff, resume, and \`tasks/current.md\` as recovery context only; they do not outrank the current user message.
|
|
230
|
-
|
|
231
|
-
Required first reads:
|
|
232
|
-
- AGENTS.md
|
|
233
|
-
- ${repo_handoff}
|
|
234
|
-
- ${todo_file}
|
|
235
|
-
- ${notes_file:-(none)}
|
|
236
|
-
- ${research_dir}/
|
|
237
|
-
- ${checks_file}
|
|
238
|
-
|
|
239
|
-
Conditional first reads:
|
|
240
|
-
- Active plan: ${plan_file:-(none)}
|
|
241
|
-
- Active contract: ${contract_file:-(none)}
|
|
242
|
-
- Implementation notes: ${notes_file:-(none)}
|
|
243
|
-
- Global handoff: ${global_handoff:-(none)}
|
|
244
|
-
|
|
245
|
-
Execution rules:
|
|
246
|
-
- Treat Canonical Runtime lifecycle state as authoritative for migrated Requirement/Plan/Work state; treat Git source/evidence as authoritative in their own domains and session Markdown as rebuildable cache only.
|
|
247
|
-
- Decide in the main agent whether to use subagents, parallel sidecars, sidecar \`codex exec --json\`, or a bounded main-thread trace for broad research/log scans based on context impact and callable tools; do not ask the user for spawn confirmation.
|
|
248
|
-
- Keep deep research conclusions in \`${research_dir}/\`, not only in chat.
|
|
249
|
-
- Do not run \`/compact\` as the primary recovery path.
|
|
250
|
-
- Preserve the current dirty worktree and do not touch unrelated untracked files.
|
|
251
|
-
|
|
252
|
-
## Source Artifacts
|
|
253
|
-
|
|
254
|
-
- Session continuation: ${repo_handoff}
|
|
255
|
-
- Resume packet: ${resume_file}
|
|
256
|
-
- Checks: ${checks_file}
|
|
257
|
-
- Todo: ${todo_file}
|
|
258
|
-
- Research: ${research_dir}/
|
|
259
|
-
- Plan: ${plan_file:-(none)}
|
|
260
|
-
- Contract: ${contract_file:-(none)}
|
|
261
|
-
- Notes: ${notes_file:-(none)}
|
|
262
|
-
- Global handoff: ${global_handoff:-(none)}
|
|
263
|
-
EOF_RESUME
|
|
264
|
-
|
|
265
|
-
if [[ "$print_prompt" -eq 1 ]]; then
|
|
266
|
-
awk '/^## Resume Prompt$/ {printing=1; next} /^## Source Artifacts$/ {printing=0} printing == 1 {print}' "$resume_file" | sed -E '/^[[:space:]]*$/N; /^\n$/D'
|
|
267
|
-
else
|
|
268
|
-
echo "Updated $resume_file"
|
|
269
|
-
fi
|
|
3
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
4
|
+
exec "$SCRIPT_DIR/lib/run-forge-helper.sh" "codex-handoff-resume.sh" "$@"
|