expxagents 0.30.21 → 0.30.23
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/dist/dashboard/assets/{BufferResource-CNVLxaqR.js → BufferResource-D_4NxDi0.js} +1 -1
- package/dist/dashboard/assets/{CanvasRenderer-CxVnsrzD.js → CanvasRenderer-BvvtfkUO.js} +1 -1
- package/dist/dashboard/assets/{JarvisView-Bk0QwZWW.js → JarvisView-DWUg6uy9.js} +1 -1
- package/dist/dashboard/assets/{RenderTargetSystem-CtHj6v7J.js → RenderTargetSystem-KLqqlDII.js} +1 -1
- package/dist/dashboard/assets/{ThreeBackground-DPSa33_n.js → ThreeBackground-CQg8JfT9.js} +1 -1
- package/dist/dashboard/assets/{WebGLRenderer-C2UGtfFx.js → WebGLRenderer-C-rFQnEK.js} +1 -1
- package/dist/dashboard/assets/{WebGPURenderer-CmDaV5xR.js → WebGPURenderer-BgcywHHz.js} +1 -1
- package/dist/dashboard/assets/{browserAll-DuOXddzq.js → browserAll-DxxBcVq_.js} +1 -1
- package/dist/dashboard/assets/index-ChTJhFG1.js +1203 -0
- package/dist/dashboard/assets/{webworkerAll-BlC_rD-w.js → webworkerAll-CKsuA5y-.js} +1 -1
- package/dist/dashboard/index.html +1 -1
- package/dist/server/api/__tests__/github-oauth-routes.test.d.ts +2 -0
- package/dist/server/api/__tests__/github-oauth-routes.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/github-oauth-routes.test.js +119 -0
- package/dist/server/api/__tests__/github-oauth-routes.test.js.map +1 -0
- package/dist/server/api/__tests__/github-webhook.test.d.ts +2 -0
- package/dist/server/api/__tests__/github-webhook.test.d.ts.map +1 -0
- package/dist/server/api/__tests__/github-webhook.test.js +111 -0
- package/dist/server/api/__tests__/github-webhook.test.js.map +1 -0
- package/dist/server/api/__tests__/log-routes.test.js +8 -1
- package/dist/server/api/__tests__/log-routes.test.js.map +1 -1
- package/dist/server/api/github-oauth-routes.d.ts +9 -0
- package/dist/server/api/github-oauth-routes.d.ts.map +1 -0
- package/dist/server/api/github-oauth-routes.js +174 -0
- package/dist/server/api/github-oauth-routes.js.map +1 -0
- package/dist/server/api/integration-routes.d.ts.map +1 -1
- package/dist/server/api/integration-routes.js +6 -3
- package/dist/server/api/integration-routes.js.map +1 -1
- package/dist/server/api/webhook-routes.d.ts.map +1 -1
- package/dist/server/api/webhook-routes.js +88 -0
- package/dist/server/api/webhook-routes.js.map +1 -1
- package/dist/server/app.d.ts +2 -0
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +18 -2
- package/dist/server/app.js.map +1 -1
- package/dist/server/bridge/chat-handler.d.ts +2 -0
- package/dist/server/bridge/chat-handler.d.ts.map +1 -1
- package/dist/server/bridge/chat-handler.js +75 -0
- package/dist/server/bridge/chat-handler.js.map +1 -1
- package/dist/server/db/migrations.d.ts.map +1 -1
- package/dist/server/db/migrations.js +27 -0
- package/dist/server/db/migrations.js.map +1 -1
- package/dist/server/db/schema.d.ts +1 -1
- package/dist/server/db/schema.d.ts.map +1 -1
- package/dist/server/db/schema.js +21 -0
- package/dist/server/db/schema.js.map +1 -1
- package/dist/server/scheduler/debug-routes.d.ts +10 -0
- package/dist/server/scheduler/debug-routes.d.ts.map +1 -0
- package/dist/server/scheduler/debug-routes.js +69 -0
- package/dist/server/scheduler/debug-routes.js.map +1 -0
- package/dist/server/scheduler/scheduler-service.d.ts +40 -0
- package/dist/server/scheduler/scheduler-service.d.ts.map +1 -1
- package/dist/server/scheduler/scheduler-service.js +209 -0
- package/dist/server/scheduler/scheduler-service.js.map +1 -1
- package/dist/server/services/__tests__/github-action-service.test.d.ts +2 -0
- package/dist/server/services/__tests__/github-action-service.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/github-action-service.test.js +89 -0
- package/dist/server/services/__tests__/github-action-service.test.js.map +1 -0
- package/dist/server/services/__tests__/github-credential-service.test.d.ts +2 -0
- package/dist/server/services/__tests__/github-credential-service.test.d.ts.map +1 -0
- package/dist/server/services/__tests__/github-credential-service.test.js +95 -0
- package/dist/server/services/__tests__/github-credential-service.test.js.map +1 -0
- package/dist/server/services/github-action-service.d.ts +21 -0
- package/dist/server/services/github-action-service.d.ts.map +1 -0
- package/dist/server/services/github-action-service.js +105 -0
- package/dist/server/services/github-action-service.js.map +1 -0
- package/dist/server/services/github-credential-service.d.ts +34 -0
- package/dist/server/services/github-credential-service.d.ts.map +1 -0
- package/dist/server/services/github-credential-service.js +158 -0
- package/dist/server/services/github-credential-service.js.map +1 -0
- package/package.json +1 -1
- package/dist/dashboard/assets/index-CgAs6Rfr.js +0 -1203
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,aAAa,CAAC,EAAqB;IACjD,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC/B,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEpB,6DAA6D;IAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC,GAAG,EAAW,CAAC;IACjF,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,EAAE,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAC/E,CAAC;IAED,iEAAiE;IACjE,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAW,CAAC;IAChF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,EAAE,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YAC3D,EAAE,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC/D,EAAE,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,qBAAqB,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAW,CAAC;IAC3F,IAAI,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC/E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,EAAE,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;YAC5D,EAAE,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAC7D,EAAE,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YAC/D,EAAE,CAAC,IAAI,CAAC,yGAAyG,CAAC,CAAC;YACnH,EAAE,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QACvF,CAAC;QACD,EAAE,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAC;QAC7F,EAAE,CAAC,IAAI,CAAC,qGAAqG,CAAC,CAAC;IACjH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAqB;IAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpF,IAAI,QAAQ;QAAE,OAAO;IAErB,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5C,EAAE,CAAC,OAAO,CACR,oGAAoG,CACrG,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACpE,CAAC"}
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/db/migrations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS users (\n id TEXT PRIMARY KEY,\n username TEXT UNIQUE NOT NULL,\n email TEXT,\n password_hash TEXT NOT NULL,\n role TEXT NOT NULL DEFAULT 'operator',\n created_at TEXT NOT NULL,\n last_login TEXT\n);\n\nCREATE TABLE IF NOT EXISTS sessions (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n token_hash TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS audit_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n user_id TEXT NOT NULL REFERENCES users(id),\n action TEXT NOT NULL,\n details TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS conversations (\n id TEXT PRIMARY KEY,\n squad_name TEXT NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS chat_messages (\n id TEXT PRIMARY KEY,\n conversation_id TEXT NOT NULL REFERENCES conversations(id),\n role TEXT NOT NULL,\n content TEXT NOT NULL,\n agent_id TEXT,\n agent_name TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS squad_activities (\n id TEXT PRIMARY KEY,\n squad_code TEXT NOT NULL,\n conversation_id TEXT,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n duration_ms INTEGER,\n status TEXT NOT NULL DEFAULT 'running',\n user_message TEXT,\n result_summary TEXT,\n triggered_by TEXT DEFAULT 'dashboard',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_squad_date\n ON squad_activities(squad_code, started_at);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_date\n ON squad_activities(started_at);\n\nCREATE TABLE IF NOT EXISTS scheduled_jobs (\n squad_name TEXT PRIMARY KEY,\n cron_expression TEXT NOT NULL,\n prompt TEXT NOT NULL,\n mode TEXT DEFAULT 'autonomous',\n timeout_minutes INTEGER DEFAULT 30,\n retry_on_failure INTEGER DEFAULT 0,\n timezone TEXT,\n status TEXT DEFAULT 'active',\n last_run_at TEXT,\n last_result TEXT,\n next_run_at TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_triggered_by\n ON squad_activities(triggered_by, squad_code);\n\nCREATE TABLE IF NOT EXISTS leads (\n id TEXT PRIMARY KEY,\n email TEXT UNIQUE NOT NULL,\n name TEXT,\n company TEXT,\n metadata TEXT,\n status TEXT DEFAULT 'active',\n source TEXT,\n source_detail TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS lead_tags (\n lead_id TEXT NOT NULL REFERENCES leads(id) ON DELETE CASCADE,\n tag TEXT NOT NULL,\n PRIMARY KEY (lead_id, tag)\n);\n\nCREATE TABLE IF NOT EXISTS lead_lists (\n lead_id TEXT NOT NULL REFERENCES leads(id) ON DELETE CASCADE,\n list_name TEXT NOT NULL,\n PRIMARY KEY (lead_id, list_name)\n);\n\nCREATE TABLE IF NOT EXISTS email_campaigns (\n id TEXT PRIMARY KEY,\n name TEXT,\n squad_name TEXT,\n subject TEXT,\n body_html TEXT,\n body_text TEXT,\n from_email TEXT,\n from_name TEXT,\n status TEXT DEFAULT 'draft',\n total_recipients INTEGER DEFAULT 0,\n sent_count INTEGER DEFAULT 0,\n failed_count INTEGER DEFAULT 0,\n bounce_count INTEGER DEFAULT 0,\n complaint_count INTEGER DEFAULT 0,\n created_at TEXT DEFAULT (datetime('now')),\n started_at TEXT,\n completed_at TEXT\n);\n\nCREATE TABLE IF NOT EXISTS email_queue (\n id TEXT PRIMARY KEY,\n campaign_id TEXT REFERENCES email_campaigns(id) ON DELETE CASCADE,\n lead_id TEXT REFERENCES leads(id) ON DELETE SET NULL,\n to_email TEXT NOT NULL,\n status TEXT DEFAULT 'pending',\n ses_message_id TEXT,\n error TEXT,\n attempts INTEGER DEFAULT 0,\n scheduled_at TEXT,\n sent_at TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_email_queue_status_scheduled\n ON email_queue(status, scheduled_at);\nCREATE INDEX IF NOT EXISTS idx_email_queue_ses_message_id\n ON email_queue(ses_message_id);\nCREATE INDEX IF NOT EXISTS idx_email_queue_campaign_status\n ON email_queue(campaign_id, status);\nCREATE INDEX IF NOT EXISTS idx_lead_tags_tag\n ON lead_tags(tag);\nCREATE INDEX IF NOT EXISTS idx_lead_lists_list_name\n ON lead_lists(list_name);\n\nCREATE TABLE IF NOT EXISTS team_members (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n role TEXT NOT NULL,\n email TEXT,\n phone TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS integrations (\n provider TEXT PRIMARY KEY,\n enabled INTEGER NOT NULL DEFAULT 0,\n config TEXT NOT NULL DEFAULT '{}',\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS kanban_tasks (\n id TEXT PRIMARY KEY,\n squad_code TEXT NOT NULL,\n title TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'planned',\n position INTEGER NOT NULL DEFAULT 0,\n result TEXT,\n started_at TEXT,\n finished_at TEXT,\n step_id TEXT,\n agent_id TEXT,\n agent_name TEXT,\n activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL,\n triggered_by TEXT DEFAULT 'dashboard',\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_kanban_tasks_squad_status\n ON kanban_tasks(squad_code, status);\n\nCREATE TABLE IF NOT EXISTS squad_states (\n squad_code TEXT PRIMARY KEY,\n status TEXT NOT NULL DEFAULT 'idle',\n current_step INTEGER NOT NULL DEFAULT 0,\n total_steps INTEGER NOT NULL DEFAULT 0,\n step_label TEXT DEFAULT '',\n started_at TEXT,\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS agent_states (\n id TEXT NOT NULL,\n squad_code TEXT NOT NULL REFERENCES squad_states(squad_code) ON DELETE CASCADE,\n name TEXT NOT NULL,\n icon TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'idle',\n step_index INTEGER NOT NULL DEFAULT 0,\n step_label TEXT DEFAULT '',\n deliver_to TEXT,\n desk_col INTEGER NOT NULL,\n desk_row INTEGER NOT NULL,\n message TEXT,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (squad_code, id)\n);\n\nCREATE TABLE IF NOT EXISTS handoffs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n squad_code TEXT NOT NULL REFERENCES squad_states(squad_code),\n from_agent TEXT NOT NULL,\n to_agent TEXT NOT NULL,\n message TEXT NOT NULL,\n completed_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_handoffs_squad ON handoffs(squad_code, completed_at);\nCREATE INDEX IF NOT EXISTS idx_agent_states_status ON agent_states(squad_code, status);\n\nCREATE TABLE IF NOT EXISTS cost_entries (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n squad_code TEXT NOT NULL,\n activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL,\n agent_id TEXT NOT NULL,\n agent_name TEXT,\n step_index INTEGER,\n model TEXT NOT NULL,\n input_chars INTEGER NOT NULL,\n output_chars INTEGER NOT NULL,\n estimated_tokens_in INTEGER NOT NULL,\n estimated_tokens_out INTEGER NOT NULL,\n estimated_cost_usd REAL NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_cost_squad_date ON cost_entries(squad_code, created_at);\nCREATE INDEX IF NOT EXISTS idx_cost_agent ON cost_entries(squad_code, agent_id);\nCREATE INDEX IF NOT EXISTS idx_cost_activity ON cost_entries(activity_id);\n\nCREATE TABLE IF NOT EXISTS event_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n level TEXT NOT NULL DEFAULT 'info',\n squad_code TEXT,\n source TEXT NOT NULL,\n message TEXT NOT NULL,\n detail TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_event_log_created ON event_log(created_at);\nCREATE INDEX IF NOT EXISTS idx_event_log_squad ON event_log(squad_code, created_at);\nCREATE INDEX IF NOT EXISTS idx_event_log_level ON event_log(level, created_at);\n\nCREATE TABLE IF NOT EXISTS execution_logs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n activity_id TEXT NOT NULL REFERENCES squad_activities(id) ON DELETE CASCADE,\n squad_code TEXT NOT NULL,\n chunk TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'output',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_execution_logs_activity ON execution_logs(activity_id, created_at);\n\nCREATE TABLE IF NOT EXISTS user_squad_access (\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n squad_code TEXT NOT NULL,\n PRIMARY KEY (user_id, squad_code)\n);\n\nCREATE TABLE IF NOT EXISTS user_page_access (\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n page TEXT NOT NULL,\n PRIMARY KEY (user_id, page)\n);\n";
|
|
1
|
+
export declare const SCHEMA_SQL = "\nCREATE TABLE IF NOT EXISTS users (\n id TEXT PRIMARY KEY,\n username TEXT UNIQUE NOT NULL,\n email TEXT,\n password_hash TEXT NOT NULL,\n role TEXT NOT NULL DEFAULT 'operator',\n created_at TEXT NOT NULL,\n last_login TEXT\n);\n\nCREATE TABLE IF NOT EXISTS sessions (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n token_hash TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS audit_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n user_id TEXT NOT NULL REFERENCES users(id),\n action TEXT NOT NULL,\n details TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS conversations (\n id TEXT PRIMARY KEY,\n squad_name TEXT NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS chat_messages (\n id TEXT PRIMARY KEY,\n conversation_id TEXT NOT NULL REFERENCES conversations(id),\n role TEXT NOT NULL,\n content TEXT NOT NULL,\n agent_id TEXT,\n agent_name TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS squad_activities (\n id TEXT PRIMARY KEY,\n squad_code TEXT NOT NULL,\n conversation_id TEXT,\n started_at TEXT NOT NULL,\n finished_at TEXT,\n duration_ms INTEGER,\n status TEXT NOT NULL DEFAULT 'running',\n user_message TEXT,\n result_summary TEXT,\n triggered_by TEXT DEFAULT 'dashboard',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_squad_date\n ON squad_activities(squad_code, started_at);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_date\n ON squad_activities(started_at);\n\nCREATE TABLE IF NOT EXISTS scheduled_jobs (\n squad_name TEXT PRIMARY KEY,\n cron_expression TEXT NOT NULL,\n prompt TEXT NOT NULL,\n mode TEXT DEFAULT 'autonomous',\n timeout_minutes INTEGER DEFAULT 30,\n retry_on_failure INTEGER DEFAULT 0,\n timezone TEXT,\n status TEXT DEFAULT 'active',\n last_run_at TEXT,\n last_result TEXT,\n next_run_at TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_squad_activities_triggered_by\n ON squad_activities(triggered_by, squad_code);\n\nCREATE TABLE IF NOT EXISTS leads (\n id TEXT PRIMARY KEY,\n email TEXT UNIQUE NOT NULL,\n name TEXT,\n company TEXT,\n metadata TEXT,\n status TEXT DEFAULT 'active',\n source TEXT,\n source_detail TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS lead_tags (\n lead_id TEXT NOT NULL REFERENCES leads(id) ON DELETE CASCADE,\n tag TEXT NOT NULL,\n PRIMARY KEY (lead_id, tag)\n);\n\nCREATE TABLE IF NOT EXISTS lead_lists (\n lead_id TEXT NOT NULL REFERENCES leads(id) ON DELETE CASCADE,\n list_name TEXT NOT NULL,\n PRIMARY KEY (lead_id, list_name)\n);\n\nCREATE TABLE IF NOT EXISTS email_campaigns (\n id TEXT PRIMARY KEY,\n name TEXT,\n squad_name TEXT,\n subject TEXT,\n body_html TEXT,\n body_text TEXT,\n from_email TEXT,\n from_name TEXT,\n status TEXT DEFAULT 'draft',\n total_recipients INTEGER DEFAULT 0,\n sent_count INTEGER DEFAULT 0,\n failed_count INTEGER DEFAULT 0,\n bounce_count INTEGER DEFAULT 0,\n complaint_count INTEGER DEFAULT 0,\n created_at TEXT DEFAULT (datetime('now')),\n started_at TEXT,\n completed_at TEXT\n);\n\nCREATE TABLE IF NOT EXISTS email_queue (\n id TEXT PRIMARY KEY,\n campaign_id TEXT REFERENCES email_campaigns(id) ON DELETE CASCADE,\n lead_id TEXT REFERENCES leads(id) ON DELETE SET NULL,\n to_email TEXT NOT NULL,\n status TEXT DEFAULT 'pending',\n ses_message_id TEXT,\n error TEXT,\n attempts INTEGER DEFAULT 0,\n scheduled_at TEXT,\n sent_at TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_email_queue_status_scheduled\n ON email_queue(status, scheduled_at);\nCREATE INDEX IF NOT EXISTS idx_email_queue_ses_message_id\n ON email_queue(ses_message_id);\nCREATE INDEX IF NOT EXISTS idx_email_queue_campaign_status\n ON email_queue(campaign_id, status);\nCREATE INDEX IF NOT EXISTS idx_lead_tags_tag\n ON lead_tags(tag);\nCREATE INDEX IF NOT EXISTS idx_lead_lists_list_name\n ON lead_lists(list_name);\n\nCREATE TABLE IF NOT EXISTS team_members (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n role TEXT NOT NULL,\n email TEXT,\n phone TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS integrations (\n provider TEXT PRIMARY KEY,\n enabled INTEGER NOT NULL DEFAULT 0,\n config TEXT NOT NULL DEFAULT '{}',\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS github_installations (\n id TEXT PRIMARY KEY,\n type TEXT NOT NULL,\n account_login TEXT,\n account_type TEXT,\n access_token TEXT NOT NULL,\n refresh_token TEXT,\n token_expires_at TEXT,\n scope TEXT,\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS github_webhook_registrations (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n repo_full_name TEXT NOT NULL,\n webhook_id INTEGER NOT NULL,\n squad_code TEXT,\n created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE TABLE IF NOT EXISTS kanban_tasks (\n id TEXT PRIMARY KEY,\n squad_code TEXT NOT NULL,\n title TEXT NOT NULL,\n description TEXT,\n status TEXT NOT NULL DEFAULT 'planned',\n position INTEGER NOT NULL DEFAULT 0,\n result TEXT,\n started_at TEXT,\n finished_at TEXT,\n step_id TEXT,\n agent_id TEXT,\n agent_name TEXT,\n activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL,\n triggered_by TEXT DEFAULT 'dashboard',\n created_at TEXT DEFAULT (datetime('now')),\n updated_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE INDEX IF NOT EXISTS idx_kanban_tasks_squad_status\n ON kanban_tasks(squad_code, status);\n\nCREATE TABLE IF NOT EXISTS squad_states (\n squad_code TEXT PRIMARY KEY,\n status TEXT NOT NULL DEFAULT 'idle',\n current_step INTEGER NOT NULL DEFAULT 0,\n total_steps INTEGER NOT NULL DEFAULT 0,\n step_label TEXT DEFAULT '',\n started_at TEXT,\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS agent_states (\n id TEXT NOT NULL,\n squad_code TEXT NOT NULL REFERENCES squad_states(squad_code) ON DELETE CASCADE,\n name TEXT NOT NULL,\n icon TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'idle',\n step_index INTEGER NOT NULL DEFAULT 0,\n step_label TEXT DEFAULT '',\n deliver_to TEXT,\n desk_col INTEGER NOT NULL,\n desk_row INTEGER NOT NULL,\n message TEXT,\n updated_at TEXT NOT NULL,\n PRIMARY KEY (squad_code, id)\n);\n\nCREATE TABLE IF NOT EXISTS handoffs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n squad_code TEXT NOT NULL REFERENCES squad_states(squad_code),\n from_agent TEXT NOT NULL,\n to_agent TEXT NOT NULL,\n message TEXT NOT NULL,\n completed_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_handoffs_squad ON handoffs(squad_code, completed_at);\nCREATE INDEX IF NOT EXISTS idx_agent_states_status ON agent_states(squad_code, status);\n\nCREATE TABLE IF NOT EXISTS cost_entries (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n squad_code TEXT NOT NULL,\n activity_id TEXT REFERENCES squad_activities(id) ON DELETE SET NULL,\n agent_id TEXT NOT NULL,\n agent_name TEXT,\n step_index INTEGER,\n model TEXT NOT NULL,\n input_chars INTEGER NOT NULL,\n output_chars INTEGER NOT NULL,\n estimated_tokens_in INTEGER NOT NULL,\n estimated_tokens_out INTEGER NOT NULL,\n estimated_cost_usd REAL NOT NULL,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_cost_squad_date ON cost_entries(squad_code, created_at);\nCREATE INDEX IF NOT EXISTS idx_cost_agent ON cost_entries(squad_code, agent_id);\nCREATE INDEX IF NOT EXISTS idx_cost_activity ON cost_entries(activity_id);\n\nCREATE TABLE IF NOT EXISTS event_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n level TEXT NOT NULL DEFAULT 'info',\n squad_code TEXT,\n source TEXT NOT NULL,\n message TEXT NOT NULL,\n detail TEXT,\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_event_log_created ON event_log(created_at);\nCREATE INDEX IF NOT EXISTS idx_event_log_squad ON event_log(squad_code, created_at);\nCREATE INDEX IF NOT EXISTS idx_event_log_level ON event_log(level, created_at);\n\nCREATE TABLE IF NOT EXISTS execution_logs (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n activity_id TEXT NOT NULL REFERENCES squad_activities(id) ON DELETE CASCADE,\n squad_code TEXT NOT NULL,\n chunk TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'output',\n created_at TEXT NOT NULL\n);\n\nCREATE INDEX IF NOT EXISTS idx_execution_logs_activity ON execution_logs(activity_id, created_at);\n\nCREATE TABLE IF NOT EXISTS user_squad_access (\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n squad_code TEXT NOT NULL,\n PRIMARY KEY (user_id, squad_code)\n);\n\nCREATE TABLE IF NOT EXISTS user_page_access (\n user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,\n page TEXT NOT NULL,\n PRIMARY KEY (user_id, page)\n);\n";
|
|
2
2
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,q4RAmTtB,CAAC"}
|
package/dist/server/db/schema.js
CHANGED
|
@@ -168,6 +168,27 @@ CREATE TABLE IF NOT EXISTS integrations (
|
|
|
168
168
|
updated_at TEXT DEFAULT (datetime('now'))
|
|
169
169
|
);
|
|
170
170
|
|
|
171
|
+
CREATE TABLE IF NOT EXISTS github_installations (
|
|
172
|
+
id TEXT PRIMARY KEY,
|
|
173
|
+
type TEXT NOT NULL,
|
|
174
|
+
account_login TEXT,
|
|
175
|
+
account_type TEXT,
|
|
176
|
+
access_token TEXT NOT NULL,
|
|
177
|
+
refresh_token TEXT,
|
|
178
|
+
token_expires_at TEXT,
|
|
179
|
+
scope TEXT,
|
|
180
|
+
created_at TEXT DEFAULT (datetime('now')),
|
|
181
|
+
updated_at TEXT DEFAULT (datetime('now'))
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
CREATE TABLE IF NOT EXISTS github_webhook_registrations (
|
|
185
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
186
|
+
repo_full_name TEXT NOT NULL,
|
|
187
|
+
webhook_id INTEGER NOT NULL,
|
|
188
|
+
squad_code TEXT,
|
|
189
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
190
|
+
);
|
|
191
|
+
|
|
171
192
|
CREATE TABLE IF NOT EXISTS kanban_tasks (
|
|
172
193
|
id TEXT PRIMARY KEY,
|
|
173
194
|
squad_code TEXT NOT NULL,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/db/schema.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmTzB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FastifyInstance, FastifyPluginOptions } from 'fastify';
|
|
2
|
+
import type Database from 'better-sqlite3';
|
|
3
|
+
import type { SchedulerService } from './scheduler-service.js';
|
|
4
|
+
interface DebugRoutesOptions extends FastifyPluginOptions {
|
|
5
|
+
db: Database.Database;
|
|
6
|
+
schedulerService: SchedulerService | null;
|
|
7
|
+
}
|
|
8
|
+
export declare function debugRoutes(app: FastifyInstance, opts: DebugRoutesOptions): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=debug-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-routes.d.ts","sourceRoot":"","sources":["../../src/scheduler/debug-routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACrE,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,UAAU,kBAAmB,SAAQ,oBAAoB;IACvD,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC3C;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAwEf"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export async function debugRoutes(app, opts) {
|
|
2
|
+
const { db, schedulerService } = opts;
|
|
3
|
+
app.get('/api/scheduler/debug', {
|
|
4
|
+
preHandler: [app.requireAuth],
|
|
5
|
+
}, async (_request, reply) => {
|
|
6
|
+
if (!schedulerService) {
|
|
7
|
+
return reply.send({
|
|
8
|
+
snapshot_at: new Date().toISOString(),
|
|
9
|
+
jobs: [],
|
|
10
|
+
summary: { total: 0, ok: 0, ghost: 0, orphan: 0, yaml_only: 0, mismatch: 0 },
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const snapshot = schedulerService.getDebugSnapshot();
|
|
14
|
+
return reply.send({ data: snapshot });
|
|
15
|
+
});
|
|
16
|
+
app.post('/api/scheduler/debug/rescue/:squad', {
|
|
17
|
+
preHandler: [app.requireAuth],
|
|
18
|
+
}, async (request, reply) => {
|
|
19
|
+
const { squad } = request.params;
|
|
20
|
+
if (!schedulerService) {
|
|
21
|
+
return reply.code(400).send({ error: 'Scheduler service not available' });
|
|
22
|
+
}
|
|
23
|
+
const ok = schedulerService.rescueGhost(squad);
|
|
24
|
+
if (!ok) {
|
|
25
|
+
return reply.code(404).send({ error: 'Ghost task not found in cron registry' });
|
|
26
|
+
}
|
|
27
|
+
return reply.send({ ok: true });
|
|
28
|
+
});
|
|
29
|
+
app.delete('/api/scheduler/debug/ghost/:squad', {
|
|
30
|
+
preHandler: [app.requireAuth],
|
|
31
|
+
}, async (request, reply) => {
|
|
32
|
+
const { squad } = request.params;
|
|
33
|
+
if (!schedulerService) {
|
|
34
|
+
return reply.code(400).send({ error: 'Scheduler service not available' });
|
|
35
|
+
}
|
|
36
|
+
const ok = schedulerService.killGhost(squad);
|
|
37
|
+
if (!ok) {
|
|
38
|
+
return reply.code(404).send({ error: 'Ghost task not found in cron registry' });
|
|
39
|
+
}
|
|
40
|
+
return reply.send({ ok: true });
|
|
41
|
+
});
|
|
42
|
+
app.post('/api/scheduler/debug/reregister/:squad', {
|
|
43
|
+
preHandler: [app.requireAuth],
|
|
44
|
+
}, async (request, reply) => {
|
|
45
|
+
const { squad } = request.params;
|
|
46
|
+
if (!schedulerService) {
|
|
47
|
+
return reply.code(400).send({ error: 'Scheduler service not available' });
|
|
48
|
+
}
|
|
49
|
+
const ok = schedulerService.reregisterOrphan(squad);
|
|
50
|
+
if (!ok) {
|
|
51
|
+
return reply.code(404).send({ error: 'Orphan DB record not found' });
|
|
52
|
+
}
|
|
53
|
+
return reply.send({ ok: true });
|
|
54
|
+
});
|
|
55
|
+
app.post('/api/scheduler/debug/sync/:squad', {
|
|
56
|
+
preHandler: [app.requireAuth],
|
|
57
|
+
}, async (request, reply) => {
|
|
58
|
+
const { squad } = request.params;
|
|
59
|
+
if (!schedulerService) {
|
|
60
|
+
return reply.code(400).send({ error: 'Scheduler service not available' });
|
|
61
|
+
}
|
|
62
|
+
const ok = schedulerService.syncMismatch(squad);
|
|
63
|
+
if (!ok) {
|
|
64
|
+
return reply.code(404).send({ error: 'Job not found' });
|
|
65
|
+
}
|
|
66
|
+
return reply.send({ ok: true });
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=debug-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-routes.js","sourceRoot":"","sources":["../../src/scheduler/debug-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,17 @@ export interface ScheduleConfig {
|
|
|
9
9
|
timeout_minutes?: number;
|
|
10
10
|
retry_on_failure?: number;
|
|
11
11
|
}
|
|
12
|
+
export interface ScheduledJobRow {
|
|
13
|
+
squad_name: string;
|
|
14
|
+
cron_expression: string;
|
|
15
|
+
prompt: string;
|
|
16
|
+
status: 'active' | 'paused' | 'error';
|
|
17
|
+
timezone?: string;
|
|
18
|
+
last_run_at?: string;
|
|
19
|
+
last_result?: string;
|
|
20
|
+
timeout_minutes: number;
|
|
21
|
+
retry_on_failure: number;
|
|
22
|
+
}
|
|
12
23
|
export interface SchedulerServiceConfig {
|
|
13
24
|
db: Database.Database;
|
|
14
25
|
jobRunner: JobRunner;
|
|
@@ -53,5 +64,34 @@ export declare class SchedulerService {
|
|
|
53
64
|
getStatus(): SchedulerStatus[];
|
|
54
65
|
getJob(squadName: string): SchedulerStatus | null;
|
|
55
66
|
private readScheduleConfig;
|
|
67
|
+
getDebugSnapshot(): {
|
|
68
|
+
snapshot_at: string;
|
|
69
|
+
jobs: Array<{
|
|
70
|
+
squad_name: string;
|
|
71
|
+
sources: Array<'db' | 'cron' | 'yaml'>;
|
|
72
|
+
health: 'ok' | 'ghost' | 'orphan' | 'yaml_only' | 'mismatch';
|
|
73
|
+
db: ScheduledJobRow | null;
|
|
74
|
+
cron: {
|
|
75
|
+
running: boolean;
|
|
76
|
+
} | null;
|
|
77
|
+
yaml: {
|
|
78
|
+
cron_expression: string;
|
|
79
|
+
enabled: boolean;
|
|
80
|
+
} | null;
|
|
81
|
+
discrepancies: string[];
|
|
82
|
+
}>;
|
|
83
|
+
summary: {
|
|
84
|
+
total: number;
|
|
85
|
+
ok: number;
|
|
86
|
+
ghost: number;
|
|
87
|
+
orphan: number;
|
|
88
|
+
yaml_only: number;
|
|
89
|
+
mismatch: number;
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
rescueGhost(squadName: string): boolean;
|
|
93
|
+
killGhost(squadName: string): boolean;
|
|
94
|
+
reregisterOrphan(squadName: string): boolean;
|
|
95
|
+
syncMismatch(squadName: string): boolean;
|
|
56
96
|
}
|
|
57
97
|
//# sourceMappingURL=scheduler-service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler-service.d.ts","sourceRoot":"","sources":["../../src/scheduler/scheduler-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAM3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC3E;AAaD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAC,CAAgE;IAClF,OAAO,CAAC,IAAI,CAAmC;gBAEnC,MAAM,EAAE,sBAAsB;IAO1C,KAAK,IAAI,IAAI;IAUb,OAAO,CAAC,aAAa;IAsDrB,IAAI,IAAI,IAAI;IAQZ,mGAAmG;IACnG,KAAK,IAAI,IAAI;IAiBb,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAyEjC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASnC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAU9B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAU/B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYnC,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK/B,wDAAwD;IACxD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;QACzC,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,GAAG,OAAO;IA2DX,SAAS,IAAI,eAAe,EAAE;IAkB9B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAgBjD,OAAO,CAAC,kBAAkB;
|
|
1
|
+
{"version":3,"file":"scheduler-service.d.ts","sourceRoot":"","sources":["../../src/scheduler/scheduler-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -285,5 +285,214 @@ export class SchedulerService {
|
|
|
285
285
|
return null;
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
+
getDebugSnapshot() {
|
|
289
|
+
const dbRows = this.db.prepare('SELECT * FROM scheduled_jobs').all();
|
|
290
|
+
const dbMap = new Map(dbRows.map((r) => [r.squad_name, r]));
|
|
291
|
+
const allCronTasks = cron.getTasks();
|
|
292
|
+
const cronMap = new Map();
|
|
293
|
+
const activeSquads = new Set(this.jobs.keys());
|
|
294
|
+
allCronTasks.forEach((task, name) => {
|
|
295
|
+
cronMap.set(name, { running: !activeSquads.has(name) || this.jobs.get(name)?.status === 'active' });
|
|
296
|
+
});
|
|
297
|
+
const yamlJobs = new Map();
|
|
298
|
+
for (const { code } of discoverSquadDirs(this.squadsDir)) {
|
|
299
|
+
const schedule = this.readScheduleConfig(code);
|
|
300
|
+
if (schedule?.enabled) {
|
|
301
|
+
yamlJobs.set(code, { cron_expression: schedule.cron, enabled: true });
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const allSquadNames = new Set([
|
|
305
|
+
...dbMap.keys(),
|
|
306
|
+
...cronMap.keys(),
|
|
307
|
+
...yamlJobs.keys(),
|
|
308
|
+
]);
|
|
309
|
+
const jobs = [];
|
|
310
|
+
const summary = { total: 0, ok: 0, ghost: 0, orphan: 0, yaml_only: 0, mismatch: 0 };
|
|
311
|
+
for (const squadName of allSquadNames) {
|
|
312
|
+
summary.total++;
|
|
313
|
+
const db = dbMap.get(squadName) ?? null;
|
|
314
|
+
const cron = cronMap.get(squadName) ?? null;
|
|
315
|
+
const yaml = yamlJobs.get(squadName) ?? null;
|
|
316
|
+
const sources = [];
|
|
317
|
+
if (db)
|
|
318
|
+
sources.push('db');
|
|
319
|
+
if (cron)
|
|
320
|
+
sources.push('cron');
|
|
321
|
+
if (yaml)
|
|
322
|
+
sources.push('yaml');
|
|
323
|
+
const discrepancies = [];
|
|
324
|
+
let health = 'ok';
|
|
325
|
+
const inDb = !!db;
|
|
326
|
+
const inCron = !!cron;
|
|
327
|
+
const inYaml = !!yaml;
|
|
328
|
+
if (!inDb && inCron && !inYaml) {
|
|
329
|
+
health = 'ghost';
|
|
330
|
+
summary.ghost++;
|
|
331
|
+
discrepancies.push('In cron registry but has no DB record');
|
|
332
|
+
}
|
|
333
|
+
else if (inDb && db.status === 'active' && !inCron && !inYaml) {
|
|
334
|
+
health = 'orphan';
|
|
335
|
+
summary.orphan++;
|
|
336
|
+
discrepancies.push('DB status is "active" but no cron task found');
|
|
337
|
+
}
|
|
338
|
+
else if (inYaml && !inCron && !inDb) {
|
|
339
|
+
health = 'yaml_only';
|
|
340
|
+
summary.yaml_only++;
|
|
341
|
+
discrepancies.push('Exists in YAML but not registered in cron');
|
|
342
|
+
}
|
|
343
|
+
else if (inDb && inCron) {
|
|
344
|
+
if (db.status === 'paused' && cron.running) {
|
|
345
|
+
health = 'mismatch';
|
|
346
|
+
summary.mismatch++;
|
|
347
|
+
discrepancies.push('DB status is "paused" but cron task is running');
|
|
348
|
+
}
|
|
349
|
+
else if (db.status === 'active' && !cron.running) {
|
|
350
|
+
health = 'mismatch';
|
|
351
|
+
summary.mismatch++;
|
|
352
|
+
discrepancies.push('DB status is "active" but cron task is not running');
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
health = 'ok';
|
|
356
|
+
summary.ok++;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else if (inDb && !inCron && inYaml) {
|
|
360
|
+
if (db.status === 'paused') {
|
|
361
|
+
health = 'ok';
|
|
362
|
+
summary.ok++;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
health = 'mismatch';
|
|
366
|
+
summary.mismatch++;
|
|
367
|
+
discrepancies.push('DB status is "active" but cron task is not running');
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
else if (inCron && inYaml && !inDb) {
|
|
371
|
+
health = 'ghost';
|
|
372
|
+
summary.ghost++;
|
|
373
|
+
discrepancies.push('In cron registry but has no DB record');
|
|
374
|
+
}
|
|
375
|
+
else if (inDb && !inCron && !inYaml) {
|
|
376
|
+
if (db.status === 'active') {
|
|
377
|
+
health = 'orphan';
|
|
378
|
+
summary.orphan++;
|
|
379
|
+
discrepancies.push('DB status is "active" but no cron task found');
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
health = 'ok';
|
|
383
|
+
summary.ok++;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
else if (!inDb && !inCron && inYaml) {
|
|
387
|
+
health = 'yaml_only';
|
|
388
|
+
summary.yaml_only++;
|
|
389
|
+
discrepancies.push('Exists in YAML but not registered in cron');
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
health = 'ok';
|
|
393
|
+
summary.ok++;
|
|
394
|
+
}
|
|
395
|
+
if (inYaml && !inCron) {
|
|
396
|
+
discrepancies.push('Exists in YAML but not registered in cron');
|
|
397
|
+
}
|
|
398
|
+
jobs.push({
|
|
399
|
+
squad_name: squadName,
|
|
400
|
+
sources,
|
|
401
|
+
health,
|
|
402
|
+
db,
|
|
403
|
+
cron,
|
|
404
|
+
yaml,
|
|
405
|
+
discrepancies,
|
|
406
|
+
});
|
|
407
|
+
}
|
|
408
|
+
return {
|
|
409
|
+
snapshot_at: new Date().toISOString(),
|
|
410
|
+
jobs,
|
|
411
|
+
summary,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
414
|
+
rescueGhost(squadName) {
|
|
415
|
+
const cronTask = cron.getTasks().get(squadName);
|
|
416
|
+
if (!cronTask)
|
|
417
|
+
return false;
|
|
418
|
+
const schedule = this.readScheduleConfig(squadName);
|
|
419
|
+
const cronExpr = schedule?.cron || '0 9 * * *';
|
|
420
|
+
const prompt = schedule?.prompt || 'Rescued ghost task';
|
|
421
|
+
const timezone = schedule?.timezone;
|
|
422
|
+
this.db.prepare(`
|
|
423
|
+
INSERT INTO scheduled_jobs (squad_name, cron_expression, prompt, mode, timeout_minutes, retry_on_failure, timezone, status)
|
|
424
|
+
VALUES (?, ?, ?, 'autonomous', ?, ?, ?, 'active')
|
|
425
|
+
ON CONFLICT(squad_name) DO UPDATE SET
|
|
426
|
+
cron_expression = excluded.cron_expression,
|
|
427
|
+
prompt = excluded.prompt,
|
|
428
|
+
timeout_minutes = excluded.timeout_minutes,
|
|
429
|
+
retry_on_failure = excluded.retry_on_failure,
|
|
430
|
+
timezone = excluded.timezone,
|
|
431
|
+
status = 'active',
|
|
432
|
+
updated_at = datetime('now')
|
|
433
|
+
`).run(squadName, cronExpr, prompt, schedule?.timeout_minutes ?? 30, schedule?.retry_on_failure ?? 0, timezone ?? null);
|
|
434
|
+
return true;
|
|
435
|
+
}
|
|
436
|
+
killGhost(squadName) {
|
|
437
|
+
const cronTask = cron.getTasks().get(squadName);
|
|
438
|
+
if (!cronTask)
|
|
439
|
+
return false;
|
|
440
|
+
cronTask.destroy();
|
|
441
|
+
return true;
|
|
442
|
+
}
|
|
443
|
+
reregisterOrphan(squadName) {
|
|
444
|
+
const dbRow = this.db.prepare('SELECT * FROM scheduled_jobs WHERE squad_name = ?').get(squadName);
|
|
445
|
+
if (!dbRow)
|
|
446
|
+
return false;
|
|
447
|
+
if (!cron.validate(dbRow.cron_expression))
|
|
448
|
+
return false;
|
|
449
|
+
const existing = this.jobs.get(squadName);
|
|
450
|
+
if (existing) {
|
|
451
|
+
existing.task.destroy();
|
|
452
|
+
}
|
|
453
|
+
const task = cron.schedule(dbRow.cron_expression, () => {
|
|
454
|
+
this.jobRunner.run({
|
|
455
|
+
squadName,
|
|
456
|
+
prompt: dbRow.prompt,
|
|
457
|
+
timeoutMinutes: dbRow.timeout_minutes,
|
|
458
|
+
retryOnFailure: dbRow.retry_on_failure,
|
|
459
|
+
attempt: 1,
|
|
460
|
+
skipIfBusy: true,
|
|
461
|
+
});
|
|
462
|
+
}, {
|
|
463
|
+
timezone: dbRow.timezone,
|
|
464
|
+
});
|
|
465
|
+
if (dbRow.status === 'paused') {
|
|
466
|
+
task.stop();
|
|
467
|
+
}
|
|
468
|
+
this.jobs.set(squadName, {
|
|
469
|
+
squadName,
|
|
470
|
+
cronExpression: dbRow.cron_expression,
|
|
471
|
+
timezone: dbRow.timezone,
|
|
472
|
+
prompt: dbRow.prompt,
|
|
473
|
+
timeoutMinutes: dbRow.timeout_minutes,
|
|
474
|
+
retryOnFailure: dbRow.retry_on_failure,
|
|
475
|
+
task,
|
|
476
|
+
status: dbRow.status,
|
|
477
|
+
});
|
|
478
|
+
return true;
|
|
479
|
+
}
|
|
480
|
+
syncMismatch(squadName) {
|
|
481
|
+
const dbRow = this.db.prepare('SELECT status FROM scheduled_jobs WHERE squad_name = ?').get(squadName);
|
|
482
|
+
if (!dbRow)
|
|
483
|
+
return false;
|
|
484
|
+
const job = this.jobs.get(squadName);
|
|
485
|
+
if (!job)
|
|
486
|
+
return false;
|
|
487
|
+
if (dbRow.status === 'paused') {
|
|
488
|
+
job.task.stop();
|
|
489
|
+
job.status = 'paused';
|
|
490
|
+
}
|
|
491
|
+
else if (dbRow.status === 'active') {
|
|
492
|
+
job.task.start();
|
|
493
|
+
job.status = 'active';
|
|
494
|
+
}
|
|
495
|
+
return true;
|
|
496
|
+
}
|
|
288
497
|
}
|
|
289
498
|
//# sourceMappingURL=scheduler-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduler-service.js","sourceRoot":"","sources":["../../src/scheduler/scheduler-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scheduler-service.js","sourceRoot":"","sources":["../../src/scheduler/scheduler-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-action-service.test.d.ts","sourceRoot":"","sources":["../../../src/services/__tests__/github-action-service.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { GitHubActionService } from '../github-action-service.js';
|
|
3
|
+
function makeCredentials(token = 'ghp_test') {
|
|
4
|
+
return { getToken: vi.fn().mockResolvedValue(token) };
|
|
5
|
+
}
|
|
6
|
+
describe('GitHubActionService', () => {
|
|
7
|
+
let mockFetch;
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
mockFetch = vi.fn();
|
|
10
|
+
vi.stubGlobal('fetch', mockFetch);
|
|
11
|
+
});
|
|
12
|
+
afterEach(() => {
|
|
13
|
+
vi.unstubAllGlobals();
|
|
14
|
+
vi.restoreAllMocks();
|
|
15
|
+
});
|
|
16
|
+
it('create_issue — calls correct GitHub API endpoint', async () => {
|
|
17
|
+
mockFetch.mockResolvedValue({
|
|
18
|
+
ok: true,
|
|
19
|
+
json: async () => ({ number: 42, html_url: 'https://github.com/org/repo/issues/42' }),
|
|
20
|
+
});
|
|
21
|
+
const service = new GitHubActionService(makeCredentials());
|
|
22
|
+
const result = await service.execute('create_issue', {
|
|
23
|
+
repo: 'org/repo',
|
|
24
|
+
title: 'Test Issue',
|
|
25
|
+
body: 'Body text',
|
|
26
|
+
labels: ['bug'],
|
|
27
|
+
});
|
|
28
|
+
expect(mockFetch).toHaveBeenCalledWith('https://api.github.com/repos/org/repo/issues', expect.objectContaining({
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: expect.objectContaining({ Authorization: 'Bearer ghp_test' }),
|
|
31
|
+
}));
|
|
32
|
+
expect(result).toEqual({ number: 42, url: 'https://github.com/org/repo/issues/42' });
|
|
33
|
+
});
|
|
34
|
+
it('create_pr — calls pulls endpoint', async () => {
|
|
35
|
+
mockFetch.mockResolvedValue({
|
|
36
|
+
ok: true,
|
|
37
|
+
json: async () => ({ number: 7, html_url: 'https://github.com/org/repo/pull/7' }),
|
|
38
|
+
});
|
|
39
|
+
const service = new GitHubActionService(makeCredentials());
|
|
40
|
+
const result = await service.execute('create_pr', {
|
|
41
|
+
repo: 'org/repo',
|
|
42
|
+
title: 'My PR',
|
|
43
|
+
body: 'Description',
|
|
44
|
+
head: 'feature-branch',
|
|
45
|
+
base: 'main',
|
|
46
|
+
});
|
|
47
|
+
expect(mockFetch).toHaveBeenCalledWith('https://api.github.com/repos/org/repo/pulls', expect.objectContaining({ method: 'POST' }));
|
|
48
|
+
expect(result).toEqual({ number: 7, url: 'https://github.com/org/repo/pull/7' });
|
|
49
|
+
});
|
|
50
|
+
it('comment_issue — calls issues comments endpoint', async () => {
|
|
51
|
+
mockFetch.mockResolvedValue({
|
|
52
|
+
ok: true,
|
|
53
|
+
json: async () => ({ id: 99, html_url: 'https://github.com/org/repo/issues/1#issuecomment-99' }),
|
|
54
|
+
});
|
|
55
|
+
const service = new GitHubActionService(makeCredentials());
|
|
56
|
+
await service.execute('comment_issue', {
|
|
57
|
+
repo: 'org/repo',
|
|
58
|
+
issue_number: 1,
|
|
59
|
+
body: 'LGTM!',
|
|
60
|
+
});
|
|
61
|
+
expect(mockFetch).toHaveBeenCalledWith('https://api.github.com/repos/org/repo/issues/1/comments', expect.objectContaining({ method: 'POST' }));
|
|
62
|
+
});
|
|
63
|
+
it('trigger_workflow — calls workflow dispatches endpoint', async () => {
|
|
64
|
+
mockFetch.mockResolvedValue({ ok: true, json: async () => ({}) });
|
|
65
|
+
const service = new GitHubActionService(makeCredentials());
|
|
66
|
+
await service.execute('trigger_workflow', {
|
|
67
|
+
repo: 'org/repo',
|
|
68
|
+
workflow: 'deploy.yml',
|
|
69
|
+
ref: 'main',
|
|
70
|
+
inputs: { environment: 'production' },
|
|
71
|
+
});
|
|
72
|
+
expect(mockFetch).toHaveBeenCalledWith('https://api.github.com/repos/org/repo/actions/workflows/deploy.yml/dispatches', expect.objectContaining({ method: 'POST' }));
|
|
73
|
+
});
|
|
74
|
+
it('unknown action — throws error', async () => {
|
|
75
|
+
const service = new GitHubActionService(makeCredentials());
|
|
76
|
+
await expect(service.execute('unknown_action', {})).rejects.toThrow('Unknown GitHub action: unknown_action');
|
|
77
|
+
});
|
|
78
|
+
it('GitHub API error — throws with status', async () => {
|
|
79
|
+
mockFetch.mockResolvedValue({
|
|
80
|
+
ok: false,
|
|
81
|
+
status: 422,
|
|
82
|
+
json: async () => ({ message: 'Validation Failed' }),
|
|
83
|
+
});
|
|
84
|
+
const service = new GitHubActionService(makeCredentials());
|
|
85
|
+
await expect(service.execute('create_issue', { repo: 'org/repo', title: 'X' }))
|
|
86
|
+
.rejects.toThrow('GitHub API error 422');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=github-action-service.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-action-service.test.js","sourceRoot":"","sources":["../../../src/services/__tests__/github-action-service.test.ts"],"names":[],"mappings":"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"}
|