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

mkdir -p .mcp-config
mkdir -p .github/hooks
mkdir -p .claude
mkdir -p .cursor
mkdir -p .vscode

cat > .mcp-config/vscode.mcp.json <<'JSON'
{
  "servers": {
    "ace-swarm": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "ace-swarm", "mcp"]
    }
  }
}
JSON

cat > .mcp-config/cursor.mcp.json <<'JSON'
{
  "mcpServers": {
    "ace-swarm": {
      "command": "npx",
      "args": ["-y", "ace-swarm", "mcp"]
    }
  }
}
JSON

cat > .mcp-config/claude_desktop_config.json <<'JSON'
{
  "mcpServers": {
    "ace-swarm": {
      "command": "npx",
      "args": ["-y", "ace-swarm", "mcp"]
    }
  }
}
JSON

cat > .mcp-config/antigravity.mcp.json <<'JSON'
{
  "mcpServers": {
    "ace-swarm": {
      "command": "npx",
      "args": ["-y", "ace-swarm", "mcp"]
    }
  }
}
JSON

cat > .mcp-config/codex.config.toml <<'TOML'
# ACE instructions are scaffolded into AGENTS.md during bootstrap.
[mcp_servers.ace-swarm]
command = "npx"
args = ["-y", "ace-swarm", "mcp"]
TOML

cat > CLAUDE.md <<'MD'
# ACE Instructions For Claude Code

This workspace is ACE-governed. Ground truth lives in `agent-state/TASK.md`,
`agent-state/STATUS.md`, `agent-state/SCOPE.md`, and `agent-state/EVIDENCE_LOG.md`.

Before significant work, call `recall_context`. Use `route_task` and
`get_agent_instructions` for role guidance. After meaningful edits or state
changes, call `execute_gates` and persist evidence/handoffs in ACE artifacts.
MD

cat > .github/copilot-instructions.md <<'MD'
# ACE Instructions For GitHub Copilot

This workspace is ACE-governed. Read file-backed ACE state before acting:
`agent-state/TASK.md`, `agent-state/STATUS.md`, `agent-state/SCOPE.md`, and
`agent-state/EVIDENCE_LOG.md`.

Before significant work, call `recall_context`. Route with `route_task`.
After material changes, call `execute_gates` and update durable ACE artifacts.
MD

cat > .cursorrules <<'MD'
# ACE Instructions For Cursor

This workspace is ACE-governed. Do not rely on chat history for state. Use
`recall_context` to load task, scope, and status from `agent-state/*`.

Use `route_task` and `get_agent_instructions` for role guidance. After edits,
run `execute_gates` and persist evidence/handoffs in ACE artifacts.
MD

cat > AGENTS.md <<'MD'
# ACE Instructions For Codex

This workspace is ACE-governed. File-backed ACE state is authoritative:
`agent-state/TASK.md`, `agent-state/STATUS.md`, `agent-state/SCOPE.md`, and
`agent-state/EVIDENCE_LOG.md`.

Before significant work, call `recall_context`. Use `route_task` and
`get_agent_instructions` for role guidance. After meaningful edits or state
changes, call `execute_gates` and persist evidence or handoffs.
MD

cat > .github/hooks/ace-copilot.json <<'JSON'
{
  "hooks": {
    "SessionStart": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "UserPromptSubmit": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "PreToolUse": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "PostToolUse": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "PreCompact": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "SubagentStart": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "SubagentStop": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "Stop": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ]
  }
}
JSON

cat > .claude/settings.json <<'JSON'
{
  "hooks": {
    "SessionStart": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "node ./scripts/ace/ace-hook-dispatch.mjs"
          }
        ]
      }
    ],
    "UserPromptSubmit": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "node ./scripts/ace/ace-hook-dispatch.mjs"
          }
        ]
      }
    ],
    "PreToolUse": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "node ./scripts/ace/ace-hook-dispatch.mjs"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "node ./scripts/ace/ace-hook-dispatch.mjs"
          }
        ]
      }
    ],
    "PreCompact": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "node ./scripts/ace/ace-hook-dispatch.mjs"
          }
        ]
      }
    ],
    "SubagentStart": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "node ./scripts/ace/ace-hook-dispatch.mjs"
          }
        ]
      }
    ],
    "SubagentStop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "node ./scripts/ace/ace-hook-dispatch.mjs"
          }
        ]
      }
    ],
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "node ./scripts/ace/ace-hook-dispatch.mjs"
          }
        ]
      }
    ]
  }
}
JSON

cat > .vscode/ace-hooks.json <<'JSON'
{
  "hooks": {
    "SessionStart": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "UserPromptSubmit": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "PreToolUse": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "PostToolUse": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "PreCompact": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "SubagentStart": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "SubagentStop": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ],
    "Stop": [
      {
        "type": "command",
        "command": "node ./scripts/ace/ace-hook-dispatch.mjs",
        "windows": "node .\\\\scripts\\\\ace\\\\ace-hook-dispatch.mjs",
        "timeout": 10
      }
    ]
  }
}
JSON

cp .vscode/ace-hooks.json .cursor/hooks.json
cp .vscode/ace-hooks.json .mcp-config/gemini.hooks.json
cp .vscode/ace-hooks.json .mcp-config/antigravity.hooks.json

cat > .mcp-config/codex.hooks.toml <<'TOML'
# ACE lifecycle hook scaffold for Codex-compatible runtimes.
# Merge these entries into the host hook config that supports SessionStart/SubagentStart hooks.

[[hooks]]
event = "SessionStart"
command = "node ./scripts/ace/ace-hook-dispatch.mjs"

[[hooks]]
event = "UserPromptSubmit"
command = "node ./scripts/ace/ace-hook-dispatch.mjs"

[[hooks]]
event = "PreToolUse"
command = "node ./scripts/ace/ace-hook-dispatch.mjs"

[[hooks]]
event = "PostToolUse"
command = "node ./scripts/ace/ace-hook-dispatch.mjs"

[[hooks]]
event = "PreCompact"
command = "node ./scripts/ace/ace-hook-dispatch.mjs"

[[hooks]]
event = "SubagentStart"
command = "node ./scripts/ace/ace-hook-dispatch.mjs"

[[hooks]]
event = "SubagentStop"
command = "node ./scripts/ace/ace-hook-dispatch.mjs"

[[hooks]]
event = "Stop"
command = "node ./scripts/ace/ace-hook-dispatch.mjs"
TOML

echo "Wrote MCP configs, host instruction files, and ACE hook configs for codex, vscode, claude, cursor, copilot, gemini, and antigravity"
