Spaces:
Runtime error
Runtime error
| set -euo pipefail | |
| ROOT="$(cd "$(dirname "$0")/.." && pwd)" | |
| USER_INPUT="${1:-}" | |
| MANIFEST_PATH="${2:-}" | |
| INFERENCE_CONFIG_PATH="$ROOT/inference.yaml" | |
| INFERENCE_SCHEMA_PATH="$ROOT/schemas/inference_output_v0.json" | |
| if [ -z "$USER_INPUT" ]; then | |
| echo "usage: ./api/run_turn.sh <user_input> [manifest.json]" >&2 | |
| exit 1 | |
| fi | |
| TURN_ID="$(date -u +"%Y%m%dT%H%M%SZ")-$$" | |
| OUT_DIR="$ROOT/runs/api/$TURN_ID" | |
| RESPONSE_PATH="$OUT_DIR/response.json" | |
| SYSTEM_CONTEXT_PATH="$OUT_DIR/system_context.json" | |
| PROMPT_PATH="$OUT_DIR/inference_prompt.txt" | |
| INFERENCE_PATH="$OUT_DIR/inference.json" | |
| mkdir -p "$OUT_DIR" | |
| "$ROOT/api/build_system_context.sh" "$SYSTEM_CONTEXT_PATH" >/dev/null | |
| INPUT_LOWER="$(printf '%s' "$USER_INPUT" | tr '[:upper:]' '[:lower:]')" | |
| CONTINUITY_PROVIDER_SCRIPT="$ROOT/scripts/continuity_provider.sh" | |
| ANSWER_TEXT="" | |
| ABSTAINED=false | |
| INFERENCE_AVAILABLE=false | |
| INFERENCE_RESULT_JSON='null' | |
| PACKET_POINTER_PATH="" | |
| PACKET_REGISTRY_PATH="" | |
| PACKET_CONTEXT_JSON='null' | |
| TENSOR_STRONGEST_SOURCE_OVERRIDE="" | |
| TENSOR_DOMINANT_STAGE_OVERRIDE="" | |
| TENSOR_WEAKEST_METRIC_OVERRIDE="" | |
| TENSOR_FRONTIER_READ_OVERRIDE="" | |
| latest_runtime_artifact_graph() { | |
| find "$ROOT/runs/runtime" -name graph_state.json -type f 2>/dev/null | sort | while read -r graph; do | |
| if jq -e '.effects[]? | select((.path // "") != "")' "$graph" >/dev/null; then | |
| printf '%s\n' "$graph" | |
| fi | |
| done | tail -n 1 | |
| } | |
| latest_continuity_pointer() { | |
| if [ -f "$ROOT/runs/continuity/latest.json" ]; then | |
| printf '%s\n' "$ROOT/runs/continuity/latest.json" | |
| fi | |
| } | |
| continuity_provider_status() { | |
| if [ -x "$CONTINUITY_PROVIDER_SCRIPT" ]; then | |
| "$CONTINUITY_PROVIDER_SCRIPT" status 2>/dev/null || true | |
| fi | |
| } | |
| continuity_provider_surfaces() { | |
| if [ -x "$CONTINUITY_PROVIDER_SCRIPT" ]; then | |
| "$CONTINUITY_PROVIDER_SCRIPT" surfaces 2>/dev/null || true | |
| fi | |
| } | |
| continuity_provider_lineage() { | |
| local version_id="$1" | |
| if [ -x "$CONTINUITY_PROVIDER_SCRIPT" ]; then | |
| "$CONTINUITY_PROVIDER_SCRIPT" lineage "$version_id" 2>/dev/null || true | |
| fi | |
| } | |
| continuity_resume_packet() { | |
| if [ -x "$ROOT/scripts/render_continuity_flow.sh" ]; then | |
| "$ROOT/scripts/render_continuity_flow.sh" "$1" 2>/dev/null || true | |
| fi | |
| } | |
| resolve_path_from_root() { | |
| local candidate="$1" | |
| case "$candidate" in | |
| "") | |
| printf '%s' "" | |
| ;; | |
| /*) | |
| printf '%s' "$candidate" | |
| ;; | |
| *) | |
| printf '%s' "$ROOT/$candidate" | |
| ;; | |
| esac | |
| } | |
| load_packet_context() { | |
| local packet_enabled latest_pointer registry_path | |
| packet_enabled="$(yq -r '.packet_context.enabled // false' "$INFERENCE_CONFIG_PATH")" | |
| if [ "$packet_enabled" != "true" ]; then | |
| return 1 | |
| fi | |
| latest_pointer="$(yq -r '.packet_context.latest_pointer_path // ""' "$INFERENCE_CONFIG_PATH")" | |
| PACKET_POINTER_PATH="$(resolve_path_from_root "$latest_pointer")" | |
| if [ ! -f "$PACKET_POINTER_PATH" ]; then | |
| return 1 | |
| fi | |
| registry_path="$(jq -r '.registry_path // empty' "$PACKET_POINTER_PATH")" | |
| PACKET_REGISTRY_PATH="$(resolve_path_from_root "$registry_path")" | |
| if [ ! -f "$PACKET_REGISTRY_PATH" ]; then | |
| return 1 | |
| fi | |
| PACKET_CONTEXT_JSON="$(jq -c '{generated_at, packet_count, abstraction_ids, packets: [.packets[] | {abstraction_id, observer_basis, bits, tensor_slice}]}' "$PACKET_REGISTRY_PATH")" | |
| return 0 | |
| } | |
| handle_exact_query() { | |
| if printf '%s' "$INPUT_LOWER" | grep -Eq 'continuity'; then | |
| local continuity_status continuity_surfaces_json continuity_lineage_json continuity_version continuity_predecessor continuity_lineage continuity_surfaces continuity_default_surface continuity_provider continuity_surface_count continuity_resume_json continuity_resume_command | |
| continuity_status="$(continuity_provider_status)" | |
| continuity_provider="$(printf '%s' "$continuity_status" | jq -r '.provider // "unknown"' 2>/dev/null || printf '%s' "unknown")" | |
| if printf '%s' "$continuity_status" | jq -e '.available == true or (.items | length) > 0' >/dev/null 2>&1; then | |
| if printf '%s' "$continuity_status" | jq -e '.items' >/dev/null 2>&1; then | |
| continuity_version="$(printf '%s' "$continuity_status" | jq -r '.items[0].version_id // empty')" | |
| continuity_predecessor="$(printf '%s' "$continuity_status" | jq -r '.items[0].predecessor // ""')" | |
| else | |
| continuity_version="$(printf '%s' "$continuity_status" | jq -r '.continuity_version_id // empty')" | |
| continuity_predecessor="$(printf '%s' "$continuity_status" | jq -r '.predecessor_id // ""')" | |
| fi | |
| continuity_default_surface="" | |
| continuity_lineage="" | |
| continuity_surfaces="" | |
| continuity_resume_json="" | |
| if [ -n "$continuity_version" ] && printf '%s' "$INPUT_LOWER" | grep -Eq 'lineage|predecessor|ancestor'; then | |
| continuity_lineage_json="$(continuity_provider_lineage "$continuity_version")" | |
| continuity_lineage="$(printf '%s' "$continuity_lineage_json" | jq -r '.graph_id // .manifest_path // .lineage_path // ""' 2>/dev/null || true)" | |
| fi | |
| if printf '%s' "$INPUT_LOWER" | grep -Eq 'resume|desk|next move|continue'; then | |
| continuity_resume_json="$(continuity_resume_packet "$continuity_version")" | |
| continuity_default_surface="$(printf '%s' "$continuity_resume_json" | jq -r '.context.active_surface // .action.recommended_surface // ""' 2>/dev/null || true)" | |
| continuity_resume_command="$(printf '%s' "$continuity_resume_json" | jq -r '.action.resume_packet.command // ""' 2>/dev/null || true)" | |
| DECISION_BRIEF="Answered from the deterministic kernel using the provider-first continuity resume desk." | |
| ANSWER_TEXT="Resume continuity from $continuity_version on surface $continuity_default_surface. The next desk command is $continuity_resume_command." | |
| elif printf '%s' "$INPUT_LOWER" | grep -Eq 'surface|resume|picker'; then | |
| continuity_surfaces_json="$(continuity_provider_surfaces)" | |
| continuity_surfaces="$(printf '%s' "$continuity_surfaces_json" | jq -r '[.items[].surface_id] | join(", ")' 2>/dev/null || true)" | |
| continuity_surface_count="$(printf '%s' "$continuity_surfaces_json" | jq -r '(.items | length)' 2>/dev/null || printf '%s' "0")" | |
| continuity_default_surface="$(printf '%s' "$continuity_surfaces_json" | jq -r '.items[] | select(.activated == true) | .surface_id' 2>/dev/null | head -n 1)" | |
| if [ -z "$continuity_default_surface" ]; then | |
| continuity_default_surface="$(printf '%s' "$continuity_surfaces_json" | jq -r '.items[0].surface_id // ""' 2>/dev/null || true)" | |
| fi | |
| DECISION_BRIEF="Answered from the deterministic kernel using the provider-first continuity surface registry." | |
| ANSWER_TEXT="The active continuity version is $continuity_version. Its materialized surfaces are $continuity_surfaces, with default surface $continuity_default_surface, from provider $continuity_provider." | |
| elif printf '%s' "$INPUT_LOWER" | grep -Eq 'lineage|predecessor|ancestor'; then | |
| DECISION_BRIEF="Answered from the deterministic kernel using the provider-first continuity lineage slice." | |
| ANSWER_TEXT="The active continuity version is $continuity_version, derived from $continuity_predecessor. Its lineage state is recorded at $continuity_lineage through provider $continuity_provider." | |
| else | |
| DECISION_BRIEF="Answered from the deterministic kernel using the provider-first continuity status surface." | |
| ANSWER_TEXT="The active continuity slice is $continuity_version, derived from $continuity_predecessor, from provider $continuity_provider." | |
| fi | |
| ABSTAINED=false | |
| else | |
| DECISION_BRIEF="Abstained because no continuity slice has been materialized yet." | |
| ANSWER_TEXT="I do not know. No continuity slice has been materialized yet." | |
| ABSTAINED=true | |
| fi | |
| TENSOR_STRONGEST_SOURCE_OVERRIDE="receipt_state" | |
| TENSOR_DOMINANT_STAGE_OVERRIDE="select" | |
| TENSOR_WEAKEST_METRIC_OVERRIDE="promotion_readiness" | |
| TENSOR_FRONTIER_READ_OVERRIDE="deterministic_exact_lookup" | |
| return 0 | |
| fi | |
| if printf '%s' "$INPUT_LOWER" | grep -Eq 'weekly schedule|schedule|calendar'; then | |
| DECISION_BRIEF="Answered from the deterministic kernel because no supported weekly schedule exists in current graph state." | |
| ANSWER_TEXT="I do not know. No weekly schedule is present in the current graph state." | |
| ABSTAINED=true | |
| TENSOR_STRONGEST_SOURCE_OVERRIDE="graph_state" | |
| TENSOR_DOMINANT_STAGE_OVERRIDE="select" | |
| TENSOR_WEAKEST_METRIC_OVERRIDE="promotion_readiness" | |
| TENSOR_FRONTIER_READ_OVERRIDE="deterministic_exact_lookup" | |
| return 0 | |
| fi | |
| if printf '%s' "$INPUT_LOWER" | grep -Eq 'freshest|latest|most recent'; then | |
| local latest_graph latest_receipt latest_effect_path | |
| latest_graph="$(latest_runtime_artifact_graph)" | |
| if [ -n "$latest_graph" ] && [ -f "$latest_graph" ]; then | |
| latest_receipt="$(jq -r '.receipt' "$latest_graph")" | |
| latest_effect_path="$(jq -r '[.effects[]? | select((.path // "") != "")][0].path // empty' "$latest_graph")" | |
| DECISION_BRIEF="Answered from the deterministic kernel using the latest receipt-backed runtime artifact." | |
| ANSWER_TEXT="The freshest runtime artifact is $latest_effect_path from receipt $latest_receipt." | |
| ABSTAINED=false | |
| else | |
| DECISION_BRIEF="Abstained because no receipt-backed runtime state exists yet." | |
| ANSWER_TEXT="I do not know. No receipt-backed runtime state exists yet." | |
| ABSTAINED=true | |
| fi | |
| TENSOR_STRONGEST_SOURCE_OVERRIDE="receipt_state" | |
| TENSOR_DOMINANT_STAGE_OVERRIDE="select" | |
| TENSOR_WEAKEST_METRIC_OVERRIDE="promotion_readiness" | |
| TENSOR_FRONTIER_READ_OVERRIDE="deterministic_exact_lookup" | |
| return 0 | |
| fi | |
| return 1 | |
| } | |
| run_codex_inference() { | |
| local backend_id provider enabled command_name model sandbox ephemeral skip_git use_chatgpt | |
| local system_context_compact policy_context_compact packet_bits packet_tensor | |
| local -a codex_cmd | |
| backend_id="$(yq -r '.default_backend' "$INFERENCE_CONFIG_PATH")" | |
| enabled="$(yq -r ".backends.\"$backend_id\".enabled" "$INFERENCE_CONFIG_PATH")" | |
| if [ "$enabled" != "true" ]; then | |
| return 1 | |
| fi | |
| provider="$(yq -r ".backends.\"$backend_id\".provider" "$INFERENCE_CONFIG_PATH")" | |
| command_name="$(yq -r ".backends.\"$backend_id\".command" "$INFERENCE_CONFIG_PATH")" | |
| model="$(yq -r ".backends.\"$backend_id\".model" "$INFERENCE_CONFIG_PATH")" | |
| sandbox="$(yq -r ".backends.\"$backend_id\".sandbox" "$INFERENCE_CONFIG_PATH")" | |
| ephemeral="$(yq -r ".backends.\"$backend_id\".ephemeral" "$INFERENCE_CONFIG_PATH")" | |
| skip_git="$(yq -r ".backends.\"$backend_id\".skip_git_repo_check" "$INFERENCE_CONFIG_PATH")" | |
| use_chatgpt="$(yq -r ".backends.\"$backend_id\".use_chatgpt_subscription" "$INFERENCE_CONFIG_PATH")" | |
| packet_bits="$(yq -r '.packet_context.reread_on_bits | join(", ")' "$INFERENCE_CONFIG_PATH" 2>/dev/null || true)" | |
| packet_tensor="$(yq -r '.packet_context.reread_on_tensor | join(", ")' "$INFERENCE_CONFIG_PATH" 2>/dev/null || true)" | |
| system_context_compact="$(jq -c '{current_position, runtime_contract, latest_runtime_state, agent_bootstrap}' "$SYSTEM_CONTEXT_PATH")" | |
| policy_context_compact="$(jq -c '{bits, vectors, tensors, invariants}' "$ROOT/policy/control_language_v0.json")" | |
| cat > "$PROMPT_PATH" <<EOF | |
| You are the inference backend for bit_vector_tensor_control_policy. | |
| Work as the reasoning engine under the deterministic turn kernel. | |
| Do not execute code, write files, or open an execution lane. | |
| The runtime kernel owns lane choice; assume graph-first memory mode unless the runtime explicitly opens execution elsewhere. | |
| Abstain plainly when the ask depends on missing or unsupported state. | |
| Keep \`answer_text\` concise and user-facing. | |
| Keep \`decision_brief\` to one sentence. | |
| Return JSON only matching the provided schema. | |
| System context: | |
| $system_context_compact | |
| Policy context: | |
| $policy_context_compact | |
| Packet context: | |
| $PACKET_CONTEXT_JSON | |
| Packet-first rule: | |
| Reason over packet state before reopening raw evidence. | |
| Reopen raw evidence only when packet bits among [$packet_bits] indicate it or packet tensor metrics among [$packet_tensor] are non-zero or unresolved. | |
| User ask: $USER_INPUT | |
| EOF | |
| codex_cmd=("$command_name" "exec" "-m" "$model" "-s" "$sandbox" "-C" "$ROOT" "--output-schema" "$INFERENCE_SCHEMA_PATH" "-o" "$INFERENCE_PATH" "-") | |
| if [ "$ephemeral" = "true" ]; then | |
| codex_cmd+=("--ephemeral") | |
| fi | |
| if [ "$skip_git" = "true" ]; then | |
| codex_cmd+=("--skip-git-repo-check") | |
| fi | |
| if ! "${codex_cmd[@]}" < "$PROMPT_PATH" >/dev/null 2>"$OUT_DIR/inference.stderr"; then | |
| return 1 | |
| fi | |
| jq \ | |
| --arg id "$backend_id" \ | |
| --arg provider "$provider" \ | |
| --arg model "$model" \ | |
| --arg sandbox "$sandbox" \ | |
| --argjson uses_chatgpt_subscription "$use_chatgpt" \ | |
| '. + { | |
| backend: { | |
| id: $id, | |
| provider: $provider, | |
| model: $model, | |
| sandbox: $sandbox, | |
| uses_chatgpt_subscription: $uses_chatgpt_subscription | |
| } | |
| }' "$INFERENCE_PATH" > "$INFERENCE_PATH.tmp" | |
| mv "$INFERENCE_PATH.tmp" "$INFERENCE_PATH" | |
| } | |
| if [ -n "$MANIFEST_PATH" ]; then | |
| EXEC_OUTPUT="$("$ROOT/runtime/execute_manifest.sh" "$MANIFEST_PATH")" | |
| RECEIPT_PATH="$(printf '%s\n' "$EXEC_OUTPUT" | sed -n '1p')" | |
| SUMMARY_PATH="$(printf '%s\n' "$EXEC_OUTPUT" | sed -n '2p')" | |
| LANE="execution" | |
| EXEC_ALLOWED=true | |
| DECISION_BRIEF="Executed bounded manifest and emitted receipt-backed result." | |
| UI_MODE="confirm" | |
| UI_LAYOUT="chat_with_sidecar" | |
| ANSWER_TEXT="Executed bounded manifest and emitted receipt-backed result." | |
| else | |
| RECEIPT_PATH="" | |
| SUMMARY_PATH="" | |
| EXEC_ALLOWED=false | |
| LANE="memory" | |
| UI_MODE="chat" | |
| UI_LAYOUT="chat_only" | |
| if [ -f "$INFERENCE_CONFIG_PATH" ]; then | |
| load_packet_context || true | |
| fi | |
| if handle_exact_query; then | |
| : | |
| elif [ -f "$INFERENCE_CONFIG_PATH" ] && run_codex_inference; then | |
| INFERENCE_AVAILABLE=true | |
| INFERENCE_RESULT_JSON="$(cat "$INFERENCE_PATH")" | |
| DECISION_BRIEF="$(jq -r '.decision_brief' "$INFERENCE_PATH")" | |
| ANSWER_TEXT="$(jq -r '.answer_text' "$INFERENCE_PATH")" | |
| ABSTAINED="$(jq -r '.abstained' "$INFERENCE_PATH")" | |
| else | |
| DECISION_BRIEF="Stayed in graph-first reasoning mode; no execution lane opened." | |
| ANSWER_TEXT="The current runtime stays graph-first until a bounded execution task is selected." | |
| fi | |
| fi | |
| jq -n \ | |
| --slurpfile system_context "$SYSTEM_CONTEXT_PATH" \ | |
| --arg user_input "$USER_INPUT" \ | |
| --arg lane "$LANE" \ | |
| --arg decision_brief "$DECISION_BRIEF" \ | |
| --arg answer_text "$ANSWER_TEXT" \ | |
| --arg receipt_path "$RECEIPT_PATH" \ | |
| --arg summary_path "$SUMMARY_PATH" \ | |
| --arg ui_mode "$UI_MODE" \ | |
| --arg ui_layout "$UI_LAYOUT" \ | |
| --arg inference_path "$INFERENCE_PATH" \ | |
| --arg inference_config_path "$INFERENCE_CONFIG_PATH" \ | |
| --arg inference_error_path "$OUT_DIR/inference.stderr" \ | |
| --arg packet_pointer_path "$PACKET_POINTER_PATH" \ | |
| --arg packet_registry_path "$PACKET_REGISTRY_PATH" \ | |
| --arg tensor_strongest_source_override "$TENSOR_STRONGEST_SOURCE_OVERRIDE" \ | |
| --arg tensor_dominant_stage_override "$TENSOR_DOMINANT_STAGE_OVERRIDE" \ | |
| --arg tensor_weakest_metric_override "$TENSOR_WEAKEST_METRIC_OVERRIDE" \ | |
| --arg tensor_frontier_read_override "$TENSOR_FRONTIER_READ_OVERRIDE" \ | |
| --argjson inference_result "$INFERENCE_RESULT_JSON" \ | |
| --argjson execution_allowed "$EXEC_ALLOWED" \ | |
| --argjson abstained "$ABSTAINED" \ | |
| --argjson inference_available "$INFERENCE_AVAILABLE" \ | |
| '{ | |
| user_input:$user_input, | |
| lane:$lane, | |
| control_vector:(if $execution_allowed then | |
| {plan:0.7, execute:0.8, review:0.6, promote:0.2} | |
| elif $lane == "audit" then | |
| {plan:0.5, execute:0.0, review:0.9, promote:0.4} | |
| elif $lane == "tooling" then | |
| {plan:0.6, execute:0.0, review:0.5, promote:0.3} | |
| else | |
| {plan:0.7, execute:0.1, review:0.6, promote:0.2} | |
| end), | |
| tensor_surface:{ | |
| strongest_source:(if $tensor_strongest_source_override != "" then $tensor_strongest_source_override elif $execution_allowed then "receipt_state" elif $lane == "audit" then "receipts" elif $lane == "tooling" then "external_tools" elif ($packet_registry_path | length) > 0 then "graph_state" else "graph_state" end), | |
| dominant_stage:(if $tensor_dominant_stage_override != "" then $tensor_dominant_stage_override elif $execution_allowed then "execute" elif $lane == "audit" then "review" elif $lane == "tooling" then "select" else "discover" end), | |
| weakest_metric:(if $tensor_weakest_metric_override != "" then $tensor_weakest_metric_override elif $execution_allowed then "promotion_readiness" elif $lane == "audit" then "latency" else "promotion_readiness" end), | |
| frontier_read:(if $tensor_frontier_read_override != "" then $tensor_frontier_read_override elif $execution_allowed then "bounded_execution_with_receipt" elif $inference_available and ($packet_registry_path | length) > 0 then "corpus_packet_first_reasoning" elif $inference_available then "codex_cli_graph_first_reasoning" else "graph_first_reasoning" end) | |
| }, | |
| execution_gate:{allowed:$execution_allowed}, | |
| receipt_requirements:{minimum_receipts:(if $execution_allowed then 1 else 0 end)}, | |
| ui_projection:{ | |
| mode:$ui_mode, | |
| layout:$ui_layout, | |
| components:(if $execution_allowed | |
| then ["chat_thread","proposal_card","receipt_panel"] | |
| else ["chat_thread","next_step_card"] | |
| end) | |
| }, | |
| answer_text:$answer_text, | |
| abstained:$abstained, | |
| decision_brief:$decision_brief, | |
| inference:(if $inference_available and ($inference_path | length) > 0 | |
| then { | |
| config_path:$inference_config_path, | |
| output_path:$inference_path, | |
| backend:$inference_result.backend, | |
| packet_pointer_path:(if $packet_pointer_path == "" then null else $packet_pointer_path end), | |
| packet_registry_path:(if $packet_registry_path == "" then null else $packet_registry_path end) | |
| } | |
| else { | |
| config_path:(if $inference_config_path == "" then null else $inference_config_path end), | |
| output_path:(if $inference_path == "" then null else $inference_path end), | |
| error_path:(if $inference_error_path == "" then null else $inference_error_path end), | |
| packet_pointer_path:(if $packet_pointer_path == "" then null else $packet_pointer_path end), | |
| packet_registry_path:(if $packet_registry_path == "" then null else $packet_registry_path end) | |
| } | |
| end), | |
| system_context:$system_context[0], | |
| receipt_path:(if $receipt_path == "" then null else $receipt_path end), | |
| runtime_summary:(if $summary_path == "" then null else $summary_path end) | |
| }' > "$RESPONSE_PATH" | |
| printf '%s\n' "$RESPONSE_PATH" | |