Imports 67 files from VPS (/opt/teleo-eval/) into repo as the single source of truth. Previously only 8 of 67 files existed in repo — the rest were deployed directly to VPS via SCP, causing massive drift. Includes: - pipeline/lib/: 33 Python modules (daemon core, extraction, evaluation, merge, cascade, cross-domain, costs, attribution, etc.) - pipeline/: main daemon (teleo-pipeline.py), reweave.py, batch-extract-50.sh - diagnostics/: 19 files (4-page dashboard, alerting, daily digest, review queue, tier1 metrics) - agent-state/: bootstrap, lib-state, cascade inbox processor, schema - systemd/: service unit files for reference - deploy.sh: rsync-based deploy with --dry-run, syntax checks, dirty-tree gate - research-session.sh: updated with Step 8.5 digest + cascade inbox processing No new code written — all files are exact copies from VPS as of 2026-04-06. From this point forward: edit in repo, commit, then deploy.sh. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
1,009 B
Desktop File
37 lines
1,009 B
Desktop File
[Unit]
|
|
Description=Teleo Pipeline v2 — extraction/eval/merge daemon
|
|
After=network.target
|
|
Wants=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=teleo
|
|
Group=teleo
|
|
WorkingDirectory=/opt/teleo-eval
|
|
ExecStartPre=/opt/teleo-eval/pipeline/fix-ownership.sh
|
|
ExecStart=/opt/teleo-eval/pipeline/.venv/bin/python3 /opt/teleo-eval/pipeline/teleo-pipeline.py
|
|
Restart=on-failure
|
|
RestartSec=30
|
|
|
|
# Graceful shutdown: SIGTERM → 60s drain → force-cancel → kill subprocesses
|
|
# 180s buffer handles in-flight extractions (up to 10 min each) (Ganymede)
|
|
KillSignal=SIGTERM
|
|
TimeoutStopSec=180
|
|
|
|
# Environment
|
|
Environment=PIPELINE_BASE=/opt/teleo-eval
|
|
EnvironmentFile=-/opt/teleo-eval/secrets/pipeline.env
|
|
|
|
# Logging goes to journal + pipeline.jsonl
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
|
|
# Security hardening
|
|
NoNewPrivileges=yes
|
|
ProtectSystem=strict
|
|
ReadWritePaths=/opt/teleo-eval /tmp
|
|
# PrivateTmp=no: daemon uses /tmp/teleo-extract-* worktrees shared with git (Ganymede)
|
|
PrivateTmp=no
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|