#!/usr/bin/env bash
set -euo pipefail

# Minimal safe local bridge wrapper.
# Requires HYPERTAB_API_KEY. Override BRIDGE_BIN for local development.

BRIDGE_BIN="${BRIDGE_BIN:-npx @hypertabai/mcp}"
CLIENT_NAME="${HYPERTAB_BRIDGE_CLIENT_NAME:-$(hostname)-codex}"
CLIENT_TYPE="${HYPERTAB_BRIDGE_CLIENT_TYPE:-codex}"
OBJECTIVE="${1:-Report local bridge wrapper health.}"
WORK_DIR="${HYPERTAB_BRIDGE_WORK_DIR:-.hypertab}"
CYCLE_FILE="$WORK_DIR/bridge-cycle.jsonl"
EVENT_FILE="$WORK_DIR/events.json"

mkdir -p "$WORK_DIR"

$BRIDGE_BIN bridge start \
  --client-name "$CLIENT_NAME" \
  --client-type "$CLIENT_TYPE" \
  --objective "$OBJECTIVE" \
  --once \
  --json | tee "$CYCLE_FILE"

RUN_ID="$(
  node - "$CYCLE_FILE" <<'NODE'
const fs = require('node:fs')
const file = process.argv[2]
for (const line of fs.readFileSync(file, 'utf8').trim().split('\n')) {
  if (!line) continue
  const record = JSON.parse(line)
  if (record.type === 'bridge_status' && record.run?.id) {
    process.stdout.write(record.run.id)
    process.exit(0)
  }
}
NODE
)"

if [[ -n "${RUN_ID:-}" ]]; then
  node - "$RUN_ID" "$EVENT_FILE" <<'NODE'
const fs = require('node:fs')
const [runId, file] = process.argv.slice(2)
fs.writeFileSync(file, JSON.stringify({
  events: [{
    run_id: runId,
    type: 'status',
    message: 'Bridge wrapper cycle completed safely.',
    data: { wrapper: 'bridge-wrapper.sh' },
    idempotency_key: `starter-shell-cycle:${runId}`,
  }],
}, null, 2))
NODE
  $BRIDGE_BIN bridge event batch --file "$EVENT_FILE" --json
fi

node - "$CYCLE_FILE" <<'NODE' | while IFS=$'\t' read -r command_id status message; do
const fs = require('node:fs')
const file = process.argv[2]
for (const line of fs.readFileSync(file, 'utf8').trim().split('\n')) {
  if (!line) continue
  const record = JSON.parse(line)
  if (record.type !== 'bridge_command') continue
  const command = record.command ?? {}
  const contract = record.contract ?? {}
  if (!contract.allowed) {
    console.log([command.id, 'failed', contract.message ?? 'Command is blocked by bridge contract.'].join('\t'))
    continue
  }
  if (command.command_type === 'agent.status_request' || command.command_type === 'bridge.health_request') {
    console.log([command.id, 'completed', 'Starter wrapper handled safe status request.'].join('\t'))
    continue
  }
  console.log([command.id, 'cancelled', `Starter wrapper requires local policy for ${command.command_type}.`].join('\t'))
}
NODE
  [[ -z "$command_id" ]] && continue
  $BRIDGE_BIN bridge result --command-id "$command_id" --status "$status" --error-message "$message" --json
done
