adam-agent-server 1.8.1 → 1.10.0
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/README.md +8 -0
- package/dist/App-5QZKMPRM.js +13 -0
- package/dist/adam-tools-UJKLRMNR.js +1 -0
- package/dist/approval-handler-J6RUTICJ.js +1 -0
- package/dist/audit-manager-PFX36RMN.js +1 -0
- package/dist/bree-engine-445HR6VH.js +1 -0
- package/dist/channels-OOIM62BX.js +1 -0
- package/dist/{channels-ULFUCUUZ.js → channels-WFC26TED.js} +1 -1
- package/dist/{chunk-6KF7OO2B.js → chunk-2VBGTGDK.js} +8 -8
- package/dist/{chunk-PG6LMSX6.js → chunk-5AUQIK3Q.js} +1 -1
- package/dist/chunk-6JBSBSCL.js +1 -0
- package/dist/{chunk-NUITL62I.js → chunk-7T4B2MZ7.js} +1 -1
- package/dist/{chunk-M4YI4WVX.js → chunk-AMHO3ALG.js} +1 -1
- package/dist/{chunk-5EPG2US5.js → chunk-AQO6IIHV.js} +45 -16
- package/dist/chunk-AVM3O74V.js +5 -0
- package/dist/{chunk-FPZEZYUB.js → chunk-B44X7JAJ.js} +1 -1
- package/dist/{chunk-RI3V72RP.js → chunk-B544JOZM.js} +2 -2
- package/dist/chunk-D5LZGIJU.js +6 -0
- package/dist/chunk-ETK722ZZ.js +27 -0
- package/dist/chunk-ETOTUZPB.js +77 -0
- package/dist/{chunk-2YTDCR6A.js → chunk-FUWPDXXG.js} +1 -1
- package/dist/{chunk-T33BLZV2.js → chunk-HSEP6LNQ.js} +1 -1
- package/dist/chunk-JRQQLKLU.js +145 -0
- package/dist/chunk-JYHOGBCP.js +12 -0
- package/dist/{chunk-NASJH4NT.js → chunk-MQWYGDNT.js} +1 -1
- package/dist/{chunk-5QZXYKMS.js → chunk-NPIXYK5G.js} +1 -1
- package/dist/chunk-O7XQSONJ.js +5 -0
- package/dist/chunk-OFTIPZTH.js +1 -0
- package/dist/{chunk-NWMOV23A.js → chunk-Q2ISNOBQ.js} +1 -1
- package/dist/chunk-QMW7VEPC.js +0 -0
- package/dist/{chunk-JJH2RCVC.js → chunk-QYRI4HYA.js} +1 -1
- package/dist/chunk-R2WB5BKF.js +7 -0
- package/dist/{chunk-WMB7P64J.js → chunk-RMGBR3XZ.js} +1 -1
- package/dist/chunk-S6OV7Z6K.js +1 -0
- package/dist/{chunk-BQ3ZAYHC.js → chunk-SC2DDRYB.js} +1 -1
- package/dist/chunk-SZBWLHP6.js +80 -0
- package/dist/{chunk-HQRUJQN7.js → chunk-U2LBBBWO.js} +4 -4
- package/dist/chunk-UXDTFTG5.js +10 -0
- package/dist/chunk-WQFNB2MQ.js +32 -0
- package/dist/chunk-X5V4VMET.js +26 -0
- package/dist/{chunk-GSFLLRS7.js → chunk-Y5FFL6UO.js} +1 -1
- package/dist/{chunk-UQJZU3R5.js → chunk-YVVKUPGL.js} +1 -1
- package/dist/chunk-Z434UGTC.js +50 -0
- package/dist/{chunk-EQZFOBAJ.js → chunk-ZFDULJGB.js} +1 -1
- package/dist/chunk-ZQ4PNKMQ.js +10 -0
- package/dist/cli.js +2 -2
- package/dist/{config-HBQPBIWL.js → config-GKVOAMY2.js} +1 -1
- package/dist/config-W2OD7PXZ.js +1 -0
- package/dist/{db-QEWTZGU3.js → db-FACSMWEY.js} +1 -1
- package/dist/delivery-log-JIQMHBJ5.js +1 -0
- package/dist/engine-OHYWUUMJ.js +1 -0
- package/dist/evolution-audit-M7FSYRQR.js +1 -0
- package/dist/{external-api-V74YTLBY.js → external-api-QKRNGSYS.js} +1 -1
- package/dist/index.js +29 -17
- package/dist/learner-OUNQSWN7.js +1 -0
- package/dist/{memories-VMOGFVPU.js → memories-ABE7PMQL.js} +1 -1
- package/dist/memory-extractor-ZX2NJIBV.js +6 -0
- package/dist/memory-service-UWER3T2S.js +1 -0
- package/dist/outbound-gateway-XDCGAXXW.js +1 -0
- package/dist/presets-R3D4E6SK.js +1 -0
- package/dist/role-presets-7JIX34HF.js +1 -0
- package/dist/role-workspace-ISGPO25D.js +1 -0
- package/dist/{roles-ZYCFQMAY.js → roles-WNKRM6FD.js} +1 -1
- package/dist/{runtime-VDBZZ4KG.js → runtime-YPBWWMXW.js} +1 -1
- package/dist/session-manager-MTO4OGLM.js +1 -0
- package/dist/{task-templates-4KCZOUN5.js → task-templates-SNKZJ3DI.js} +1 -1
- package/dist/workflow-executor-3OCSVMM5.js +1 -0
- package/package.json +2 -1
- package/web/dist/assets/{AlertDialog-B1zj0Qs3.js → AlertDialog-DhA65f_0.js} +1 -1
- package/web/dist/assets/{Button-BehrGSvy.js → Button-CYDgoTTo.js} +1 -1
- package/web/dist/assets/{Card-B5E56u94.js → Card-DDGXsHus.js} +1 -1
- package/web/dist/assets/{ChannelDetail-CH1_E5eJ.js → ChannelDetail-Bb8P8It_.js} +1 -1
- package/web/dist/assets/{Channels-zp0S8sCC.js → Channels-8j28oydE.js} +2 -2
- package/web/dist/assets/{Chat-BZpf1DSF.js → Chat-BZwLDoYO.js} +2 -2
- package/web/dist/assets/{Dashboard-sTpDhdNJ.js → Dashboard-Cv0AtO-o.js} +1 -1
- package/web/dist/assets/{EmptyState-tTclFq_B.js → EmptyState-EuQHAv5Y.js} +1 -1
- package/web/dist/assets/{EnvVarEditor-ZHeyPSe1.js → EnvVarEditor-r-l-u4V7.js} +1 -1
- package/web/dist/assets/{EventDefDetail-C91lkfDi.js → EventDefDetail-asUFrbQE.js} +1 -1
- package/web/dist/assets/Events-DtkHL-r2.js +1 -0
- package/web/dist/assets/{Evolution-BtPy3Vgk.js → Evolution-DIqYOSb8.js} +1 -1
- package/web/dist/assets/FeatureRequests-BxPqLR1x.js +1 -0
- package/web/dist/assets/{GoalDetail-WsCAu4BR.js → GoalDetail-Bkvgg6uI.js} +1 -1
- package/web/dist/assets/Goals-CkKJDCiU.js +1 -0
- package/web/dist/assets/{Logs-DivMVgny.js → Logs-DnaaHV0Y.js} +1 -1
- package/web/dist/assets/{Memories-Dvs4gh22.js → Memories-Dq9S-Tsi.js} +1 -1
- package/web/dist/assets/Mistakes-D5lW31Co.js +1 -0
- package/web/dist/assets/{NotFound-D-OII_Lp.js → NotFound-gJVrOtER.js} +1 -1
- package/web/dist/assets/{PageHeader-B2CgcZ-t.js → PageHeader-CugYeCci.js} +1 -1
- package/web/dist/assets/Plugins-CoRmK2UG.js +1 -0
- package/web/dist/assets/{RoleDetail-D9nwUaoB.js → RoleDetail-BHJA_PAn.js} +2 -2
- package/web/dist/assets/Roles-EBUueS_P.js +1 -0
- package/web/dist/assets/{SectionHeader-CmXz6PM3.js → SectionHeader-DihC0CnO.js} +1 -1
- package/web/dist/assets/Settings-DZHAGazz.js +1 -0
- package/web/dist/assets/{Strategies-BL3By49Q.js → Strategies-3IV9eueQ.js} +1 -1
- package/web/dist/assets/{Switch-B1V9n5dB.js → Switch-B3w5KMMc.js} +1 -1
- package/web/dist/assets/{Table-CXAcZ8Ru.js → Table-Cf6m8zLu.js} +1 -1
- package/web/dist/assets/{TaskDetail-BGIVc4hi.js → TaskDetail-BmXaH3sx.js} +2 -2
- package/web/dist/assets/Work-CvQrOKtL.js +1 -0
- package/web/dist/assets/api-D-UzHSDq.js +1 -0
- package/web/dist/assets/index-BsKlGx3x.js +2 -0
- package/web/dist/assets/index-EqsPGp9a.css +2 -0
- package/web/dist/assets/{useIsMobileLayout-dYzXP1EC.js → useIsMobileLayout-2GbB90oO.js} +1 -1
- package/web/dist/assets/{vendor-icons-Dk0hMuJz.js → vendor-icons-PF9RcPJx.js} +1 -1
- package/web/dist/assets/{vendor-react-C6faO6LO.js → vendor-react-Cxy4EVtR.js} +1 -1
- package/web/dist/assets/{vendor-state-DahK0J-G.js → vendor-state-aQJ7d4tA.js} +1 -1
- package/web/dist/index.html +8 -8
- package/dist/App-ZRCRM7WR.js +0 -13
- package/dist/adam-automator-skills-EZGBICHT.js +0 -18
- package/dist/adam-tools-VRGMBVKL.js +0 -1
- package/dist/approval-handler-PB7PSLUS.js +0 -1
- package/dist/audit-manager-BSBBDUER.js +0 -1
- package/dist/bree-engine-7S33CWS7.js +0 -1
- package/dist/channels-SITUUC4J.js +0 -1
- package/dist/chunk-2L2347UQ.js +0 -5
- package/dist/chunk-4PQHGLZH.js +0 -99
- package/dist/chunk-5XOTPEAK.js +0 -6
- package/dist/chunk-A5OCDYTW.js +0 -29
- package/dist/chunk-AQ3ASS4B.js +0 -12
- package/dist/chunk-B6LOT5CG.js +0 -10
- package/dist/chunk-BCH2HAIM.js +0 -23
- package/dist/chunk-DVN3BFPP.js +0 -26
- package/dist/chunk-GSMC3VUM.js +0 -1
- package/dist/chunk-IKPYPZ64.js +0 -10
- package/dist/chunk-IZNEOYRP.js +0 -1
- package/dist/chunk-K4C43YDD.js +0 -7
- package/dist/chunk-OB2UQOBG.js +0 -79
- package/dist/chunk-QGYDGZSC.js +0 -49
- package/dist/chunk-RZ7LCZVK.js +0 -5
- package/dist/chunk-ULTK7RD6.js +0 -27
- package/dist/config-ZBNGRASI.js +0 -1
- package/dist/delivery-log-AC476GX7.js +0 -1
- package/dist/engine-6K4RG644.js +0 -1
- package/dist/evolution-audit-XMBDUN3T.js +0 -1
- package/dist/learner-VCS3Q7BR.js +0 -1
- package/dist/memory-extractor-4WJNHYWR.js +0 -6
- package/dist/memory-service-ZS6MBUIC.js +0 -1
- package/dist/outbound-gateway-H7RFG6D2.js +0 -1
- package/dist/role-presets-XAEOYEAW.js +0 -1
- package/dist/role-workspace-NKGAH6J6.js +0 -1
- package/dist/session-manager-COLCNIB7.js +0 -1
- package/dist/workflow-executor-Z7JFMR56.js +0 -1
- package/web/dist/assets/Events-QnTwC2ul.js +0 -1
- package/web/dist/assets/Goals-DndYDSwn.js +0 -1
- package/web/dist/assets/Plugins-B0Eg_ELU.js +0 -1
- package/web/dist/assets/Roles-CihcHqKx.js +0 -1
- package/web/dist/assets/Settings-CftLrCHX.js +0 -1
- package/web/dist/assets/Work-BzNrHYxu.js +0 -1
- package/web/dist/assets/api-Bux34u4-.js +0 -1
- package/web/dist/assets/index-Cu5neZGw.css +0 -2
- package/web/dist/assets/index-TFQC0SLN.js +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{e as R,h as
|
|
1
|
+
import{e as R,h as I}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk-MRTJFYPR.js";import{c as p}from"./chunk-FCV2DPZQ.js";import X from"better-sqlite3";import{existsSync as u,mkdirSync as S}from"fs";import{dirname as g}from"path";function U(e){e.exec(`
|
|
2
2
|
CREATE TABLE IF NOT EXISTS server_state (
|
|
3
3
|
id INTEGER PRIMARY KEY CHECK(id = 1),
|
|
4
4
|
sdk_session_id TEXT,
|
|
@@ -8,7 +8,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
8
8
|
created_at INTEGER NOT NULL DEFAULT (unixepoch('now') * 1000),
|
|
9
9
|
last_active_at INTEGER
|
|
10
10
|
);
|
|
11
|
-
`),e.prepare("PRAGMA table_info(server_state)").all().some(
|
|
11
|
+
`),e.prepare("PRAGMA table_info(server_state)").all().some(s=>s.name==="schema_version")||e.exec("ALTER TABLE server_state ADD COLUMN schema_version INTEGER DEFAULT 0");let n=e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0;if(n<2){let s=["delivery_log","delivery_rules","manager_decisions","skill_scores","approval_rules","task_plans","calibration_history","task_plugins","marketplaces","plugins","trials","strategies","metric_tree","goals","chat_messages","chat_sessions","channels","evolution_audit","step_logs","task_templates","memories","tasks","config","memories_fts","memories_fts_config","memories_fts_data","memories_fts_docsize","memories_fts_idx"];for(let T of s)try{e.exec(`DROP TABLE IF EXISTS ${T}`)}catch{}for(let T of["memories_fts_insert","memories_fts_delete","memories_fts_update"])try{e.exec(`DROP TRIGGER IF EXISTS ${T}`)}catch{}}if(e.exec(`
|
|
12
12
|
CREATE TABLE IF NOT EXISTS tasks (
|
|
13
13
|
id TEXT PRIMARY KEY,
|
|
14
14
|
parent_id TEXT,
|
|
@@ -368,7 +368,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
368
368
|
|
|
369
369
|
CREATE INDEX IF NOT EXISTS idx_calibration_goal ON calibration_history(goal_id);
|
|
370
370
|
CREATE INDEX IF NOT EXISTS idx_calibration_computed ON calibration_history(computed_at);
|
|
371
|
-
`),
|
|
371
|
+
`),n<2&&e.exec("UPDATE server_state SET schema_version = 2 WHERE id = 1"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<4&&(e.exec(`
|
|
372
372
|
CREATE TABLE IF NOT EXISTS roles (
|
|
373
373
|
id TEXT PRIMARY KEY,
|
|
374
374
|
name TEXT NOT NULL UNIQUE,
|
|
@@ -405,7 +405,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
405
405
|
bound_at INTEGER NOT NULL,
|
|
406
406
|
PRIMARY KEY (role_id, plugin_id)
|
|
407
407
|
);
|
|
408
|
-
`),e.prepare("PRAGMA table_info(tasks)").all().some(
|
|
408
|
+
`),e.prepare("PRAGMA table_info(tasks)").all().some(T=>T.name==="role_id")||(e.exec("ALTER TABLE tasks ADD COLUMN role_id TEXT"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)")),e.exec("UPDATE server_state SET schema_version = 4 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<5&&(e.exec(`
|
|
409
409
|
DROP TABLE IF EXISTS memories;
|
|
410
410
|
CREATE TABLE memories (
|
|
411
411
|
id TEXT PRIMARY KEY,
|
|
@@ -466,7 +466,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
466
466
|
source TEXT DEFAULT 'reflection'
|
|
467
467
|
);
|
|
468
468
|
CREATE INDEX IF NOT EXISTS idx_evolution_audit_role_id ON evolution_audit(role_id);
|
|
469
|
-
`),e.exec("UPDATE server_state SET schema_version = 5 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<6&&(e.prepare("PRAGMA table_info(roles)").all().some(
|
|
469
|
+
`),e.exec("UPDATE server_state SET schema_version = 5 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<6&&(e.prepare("PRAGMA table_info(roles)").all().some(T=>T.name==="importance_trigger_curr")||e.exec("ALTER TABLE roles ADD COLUMN importance_trigger_curr INTEGER DEFAULT 150"),e.exec("UPDATE server_state SET schema_version = 6 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<7&&(e.prepare("PRAGMA table_info(tasks)").all().some(T=>T.name==="source_session_id")||e.exec("ALTER TABLE tasks ADD COLUMN source_session_id TEXT"),e.exec("UPDATE server_state SET schema_version = 7 WHERE id = 1")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<8){let s=e.prepare("PRAGMA table_info(goals)").all();s.some(E=>E.name==="source_session_id")||e.exec("ALTER TABLE goals ADD COLUMN source_session_id TEXT"),s.some(E=>E.name==="notify_targets")||e.exec("ALTER TABLE goals ADD COLUMN notify_targets TEXT");let T=e.prepare("PRAGMA table_info(task_templates)").all();T.some(E=>E.name==="source_session_id")||e.exec("ALTER TABLE task_templates ADD COLUMN source_session_id TEXT"),T.some(E=>E.name==="notify_targets")||e.exec("ALTER TABLE task_templates ADD COLUMN notify_targets TEXT"),T.some(E=>E.name==="goal_ids")||e.exec("ALTER TABLE task_templates ADD COLUMN goal_ids TEXT"),e.exec("UPDATE goals SET status = 'active' WHERE status IN ('pending','planning','executing','evaluating','replanning')"),e.exec("UPDATE server_state SET schema_version = 8 WHERE id = 1")}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<10){e.exec("PRAGMA foreign_keys = OFF"),e.exec("DROP TABLE IF EXISTS tasks_new"),e.exec("DROP TABLE IF EXISTS chat_sessions_new"),e.exec("DROP TABLE IF EXISTS task_plans_new"),e.exec("DROP TABLE IF EXISTS task_plugins_new"),e.exec("DROP TABLE IF EXISTS approval_rules_new"),e.exec("DROP TABLE IF EXISTS manager_decisions_new"),e.exec("DROP TABLE IF EXISTS channels_new");let s=e.prepare("PRAGMA table_info(roles)").all();s.some(t=>t.name==="allowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN allowed_tools TEXT"),s.some(t=>t.name==="disallowed_tools")||e.exec("ALTER TABLE roles ADD COLUMN disallowed_tools TEXT"),s.some(t=>t.name==="evaluation_criteria")||e.exec("ALTER TABLE roles ADD COLUMN evaluation_criteria TEXT"),s.some(t=>t.name==="execution_mode")||e.exec("ALTER TABLE roles ADD COLUMN execution_mode TEXT DEFAULT 'isolated'"),s.some(t=>t.name==="model")||e.exec("ALTER TABLE roles ADD COLUMN model TEXT"),s.some(t=>t.name==="max_budget_usd")||e.exec("ALTER TABLE roles ADD COLUMN max_budget_usd REAL"),s.some(t=>t.name==="approval_required")||e.exec("ALTER TABLE roles ADD COLUMN approval_required TEXT"),s.some(t=>t.name==="source")||e.exec("ALTER TABLE roles ADD COLUMN source TEXT DEFAULT 'system'"),e.exec("DROP TABLE IF EXISTS agents"),e.exec("DROP TABLE IF EXISTS role_skills"),e.exec(`
|
|
470
470
|
CREATE TABLE IF NOT EXISTS tasks_new (
|
|
471
471
|
id TEXT PRIMARY KEY,
|
|
472
472
|
parent_id TEXT,
|
|
@@ -491,7 +491,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
491
491
|
num_turns INTEGER,
|
|
492
492
|
total_duration_ms INTEGER
|
|
493
493
|
);
|
|
494
|
-
`);let
|
|
494
|
+
`);let T=new Set(["id","status","prompt","config","created_at"]),E=["id","parent_id","status","prompt","config","result","error","sdk_session_id","template_id","original_prompt","role_id","source_session_id","notify_targets","deliver_to","report_to","created_at","started_at","completed_at","cost_usd","token_usage","num_turns","total_duration_ms"],r=new Set(e.prepare("PRAGMA table_info(tasks)").all().map(t=>t.name)),i=E.map(t=>r.has(t)?T.has(t)?`COALESCE(${t}, '')`:t:"NULL").join(",");e.exec(`INSERT INTO tasks_new SELECT ${i} FROM tasks`),e.exec("DROP TABLE tasks"),e.exec("ALTER TABLE tasks_new RENAME TO tasks"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_created_at ON tasks(created_at)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_template_id ON tasks(template_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_tasks_role_id ON tasks(role_id)"),e.exec(`
|
|
495
495
|
CREATE TABLE IF NOT EXISTS chat_sessions_new (
|
|
496
496
|
id TEXT PRIMARY KEY,
|
|
497
497
|
status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'archived')),
|
|
@@ -517,7 +517,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
517
517
|
approved_at INTEGER,
|
|
518
518
|
reviewed_at INTEGER
|
|
519
519
|
);
|
|
520
|
-
`),e.exec("INSERT INTO task_plans_new SELECT id,task_id,plan_json,status,approval_type,deviation_report_json,learned_rules_json,created_at,approved_at,reviewed_at FROM task_plans"),e.exec("DROP TABLE task_plans"),e.exec("ALTER TABLE task_plans_new RENAME TO task_plans"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plans_task_id ON task_plans(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plans_status ON task_plans(status)"),e.prepare("PRAGMA table_info(task_plugins)").all().some(
|
|
520
|
+
`),e.exec("INSERT INTO task_plans_new SELECT id,task_id,plan_json,status,approval_type,deviation_report_json,learned_rules_json,created_at,approved_at,reviewed_at FROM task_plans"),e.exec("DROP TABLE task_plans"),e.exec("ALTER TABLE task_plans_new RENAME TO task_plans"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plans_task_id ON task_plans(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plans_status ON task_plans(status)"),e.prepare("PRAGMA table_info(task_plugins)").all().some(t=>t.name==="skill_id")&&(e.exec(`
|
|
521
521
|
CREATE TABLE IF NOT EXISTS task_plugins_new (
|
|
522
522
|
id TEXT PRIMARY KEY,
|
|
523
523
|
task_id TEXT NOT NULL REFERENCES tasks(id) ON DELETE CASCADE,
|
|
@@ -526,7 +526,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
526
526
|
role_id TEXT,
|
|
527
527
|
used_at INTEGER NOT NULL
|
|
528
528
|
);
|
|
529
|
-
`),e.exec("INSERT INTO task_plugins_new SELECT id,task_id,plugin_path,plugin_name,skill_id,used_at FROM task_plugins"),e.exec("DROP TABLE task_plugins"),e.exec("ALTER TABLE task_plugins_new RENAME TO task_plugins")),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_task_id ON task_plugins(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_plugin_path ON task_plugins(plugin_path)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_role_id ON task_plugins(role_id)"),e.prepare("PRAGMA table_info(approval_rules)").all().some(
|
|
529
|
+
`),e.exec("INSERT INTO task_plugins_new SELECT id,task_id,plugin_path,plugin_name,skill_id,used_at FROM task_plugins"),e.exec("DROP TABLE task_plugins"),e.exec("ALTER TABLE task_plugins_new RENAME TO task_plugins")),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_task_id ON task_plugins(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_plugin_path ON task_plugins(plugin_path)"),e.exec("CREATE INDEX IF NOT EXISTS idx_task_plugins_role_id ON task_plugins(role_id)"),e.prepare("PRAGMA table_info(approval_rules)").all().some(t=>t.name==="skill_id")&&(e.exec(`
|
|
530
530
|
CREATE TABLE IF NOT EXISTS approval_rules_new (
|
|
531
531
|
id TEXT PRIMARY KEY,
|
|
532
532
|
role_id TEXT,
|
|
@@ -535,7 +535,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
535
535
|
created_at INTEGER NOT NULL,
|
|
536
536
|
created_by_task_id TEXT REFERENCES tasks(id)
|
|
537
537
|
);
|
|
538
|
-
`),e.exec("INSERT INTO approval_rules_new SELECT id,skill_id,task_pattern,max_risk_level,created_at,created_by_task_id FROM approval_rules"),e.exec("DROP TABLE approval_rules"),e.exec("ALTER TABLE approval_rules_new RENAME TO approval_rules")),e.exec("CREATE INDEX IF NOT EXISTS idx_approval_rules_role_id ON approval_rules(role_id)"),e.prepare("PRAGMA table_info(manager_decisions)").all().some(
|
|
538
|
+
`),e.exec("INSERT INTO approval_rules_new SELECT id,skill_id,task_pattern,max_risk_level,created_at,created_by_task_id FROM approval_rules"),e.exec("DROP TABLE approval_rules"),e.exec("ALTER TABLE approval_rules_new RENAME TO approval_rules")),e.exec("CREATE INDEX IF NOT EXISTS idx_approval_rules_role_id ON approval_rules(role_id)"),e.prepare("PRAGMA table_info(manager_decisions)").all().some(t=>t.name==="skill_id")&&(e.exec(`
|
|
539
539
|
CREATE TABLE IF NOT EXISTS manager_decisions_new (
|
|
540
540
|
id TEXT PRIMARY KEY,
|
|
541
541
|
task_id TEXT NOT NULL REFERENCES tasks(id),
|
|
@@ -545,7 +545,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
545
545
|
reason TEXT,
|
|
546
546
|
created_at INTEGER NOT NULL
|
|
547
547
|
);
|
|
548
|
-
`),e.exec("INSERT INTO manager_decisions_new SELECT id,task_id,skill_id,decision_type,boundary_json,reason,created_at FROM manager_decisions"),e.exec("DROP TABLE manager_decisions"),e.exec("ALTER TABLE manager_decisions_new RENAME TO manager_decisions")),e.exec("CREATE INDEX IF NOT EXISTS idx_manager_decisions_task_id ON manager_decisions(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_manager_decisions_role_id ON manager_decisions(role_id)"),e.prepare("PRAGMA table_info(channels)").all().some(
|
|
548
|
+
`),e.exec("INSERT INTO manager_decisions_new SELECT id,task_id,skill_id,decision_type,boundary_json,reason,created_at FROM manager_decisions"),e.exec("DROP TABLE manager_decisions"),e.exec("ALTER TABLE manager_decisions_new RENAME TO manager_decisions")),e.exec("CREATE INDEX IF NOT EXISTS idx_manager_decisions_task_id ON manager_decisions(task_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_manager_decisions_role_id ON manager_decisions(role_id)"),e.prepare("PRAGMA table_info(channels)").all().some(t=>t.name==="linked_skill_id")&&(e.exec(`
|
|
549
549
|
CREATE TABLE IF NOT EXISTS channels_new (
|
|
550
550
|
id TEXT PRIMARY KEY,
|
|
551
551
|
name TEXT NOT NULL,
|
|
@@ -567,7 +567,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
567
567
|
bound_at INTEGER NOT NULL,
|
|
568
568
|
PRIMARY KEY (role_id, plugin_id)
|
|
569
569
|
);
|
|
570
|
-
`),e.exec("UPDATE server_state SET schema_version = 10 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(
|
|
570
|
+
`),e.exec("UPDATE server_state SET schema_version = 10 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(n<11){try{e.exec("ALTER TABLE task_templates RENAME COLUMN skill_preference TO role_preference")}catch(s){let T=e.prepare("PRAGMA table_info(task_templates)").all(),E=T.some(i=>i.name==="role_preference"),r=T.some(i=>i.name==="skill_preference");if(!E&&r)throw s}e.exec("UPDATE server_state SET schema_version = 11 WHERE id = 1")}if(n<12&&(e.prepare("PRAGMA table_info(server_state)").all().some(T=>T.name==="tools_fingerprint")||e.exec("ALTER TABLE server_state ADD COLUMN tools_fingerprint TEXT"),e.exec("UPDATE server_state SET schema_version = 12 WHERE id = 1")),n<13&&(e.prepare("PRAGMA table_info(roles)").all().some(T=>T.name==="additional_directories")||e.exec("ALTER TABLE roles ADD COLUMN additional_directories TEXT"),e.exec("UPDATE server_state SET schema_version = 13 WHERE id = 1")),n<14){let s=e.prepare("PRAGMA table_info(roles)").all();s.some(r=>r.name==="allowed_channels")||e.exec("ALTER TABLE roles ADD COLUMN allowed_channels TEXT"),s.some(r=>r.name==="mcp_servers")||e.exec("ALTER TABLE roles ADD COLUMN mcp_servers TEXT");let T=e.prepare("PRAGMA table_info(tasks)").all();T.some(r=>r.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),T.some(r=>r.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(goals)").all().some(r=>r.name==="deliver_to")||e.exec("ALTER TABLE goals ADD COLUMN deliver_to TEXT"),e.exec("UPDATE server_state SET schema_version = 14 WHERE id = 1")}if(n<15&&(e.prepare("PRAGMA table_info(roles)").all().some(T=>T.name==="inherit_user_settings")||e.exec("ALTER TABLE roles ADD COLUMN inherit_user_settings INTEGER DEFAULT 0"),e.exec("UPDATE server_state SET schema_version = 15 WHERE id = 1")),n<16&&(e.prepare("PRAGMA table_info(task_templates)").all().some(T=>T.name==="deliver_to")||e.exec("ALTER TABLE task_templates ADD COLUMN deliver_to TEXT"),e.exec("UPDATE server_state SET schema_version = 16 WHERE id = 1")),n<17){e.exec("PRAGMA foreign_keys = OFF"),e.exec("DROP TABLE IF EXISTS plugins"),e.exec("DROP TABLE IF EXISTS role_plugins"),e.exec("DROP TABLE IF EXISTS marketplaces"),e.exec("DROP INDEX IF EXISTS idx_plugins_source"),e.exec("DROP INDEX IF EXISTS idx_plugins_enabled");try{let E=e.prepare("SELECT id, additional_directories FROM roles WHERE additional_directories IS NOT NULL").all();for(let r of E)try{let i=JSON.parse(r.additional_directories);if(i.length>0&&typeof i[0]=="object"&&i[0]!==null&&"path"in i[0])continue;let o=i.map(_=>typeof _=="string"?{path:_}:_);e.prepare("UPDATE roles SET additional_directories = ? WHERE id = ?").run(JSON.stringify(o),r.id)}catch{}}catch{}let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(E=>E.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(E=>E.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let T=e.prepare("PRAGMA table_info(strategies)").all();T.some(E=>E.name==="role")&&!T.some(E=>E.name==="role_id")&&(e.exec("ALTER TABLE strategies RENAME COLUMN role TO role_id"),e.exec("DROP INDEX IF EXISTS idx_strategies_role_task_type"),e.exec("DROP INDEX IF EXISTS idx_strategies_role"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_strategies_role_task_type ON strategies(role_id, task_type, name)"),e.exec("CREATE INDEX IF NOT EXISTS idx_strategies_role ON strategies(role_id)")),e.exec("UPDATE server_state SET schema_version = 17 WHERE id = 1"),e.exec("PRAGMA foreign_keys = ON")}if(n<18){let s=e.prepare("PRAGMA table_info(tasks)").all();s.some(E=>E.name==="deliver_to")||e.exec("ALTER TABLE tasks ADD COLUMN deliver_to TEXT"),s.some(E=>E.name==="report_to")||e.exec("ALTER TABLE tasks ADD COLUMN report_to TEXT");let T=e.prepare("PRAGMA table_info(strategies)").all();T.some(E=>E.name==="role")&&!T.some(E=>E.name==="role_id")&&(e.exec("ALTER TABLE strategies RENAME COLUMN role TO role_id"),e.exec("DROP INDEX IF EXISTS idx_strategies_role_task_type"),e.exec("DROP INDEX IF EXISTS idx_strategies_role"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_strategies_role_task_type ON strategies(role_id, task_type, name)"),e.exec("CREATE INDEX IF NOT EXISTS idx_strategies_role ON strategies(role_id)")),e.exec("UPDATE server_state SET schema_version = 18 WHERE id = 1")}e.prepare("PRAGMA table_info(delivery_log)").all().some(s=>s.name==="source")||(e.exec(`
|
|
571
571
|
CREATE TABLE IF NOT EXISTS delivery_log_new (
|
|
572
572
|
id TEXT PRIMARY KEY,
|
|
573
573
|
rule_id TEXT REFERENCES delivery_rules(id),
|
|
@@ -584,7 +584,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
584
584
|
message_type TEXT
|
|
585
585
|
)
|
|
586
586
|
`),e.exec(`INSERT INTO delivery_log_new (id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at)
|
|
587
|
-
SELECT id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at FROM delivery_log`),e.exec("DROP TABLE delivery_log"),e.exec("ALTER TABLE delivery_log_new RENAME TO delivery_log"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_rule ON delivery_log(rule_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_task ON delivery_log(task_id)")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<20&&(e.prepare("PRAGMA table_info(goals)").all().some(
|
|
587
|
+
SELECT id, rule_id, task_id, status, target, content, attempts, error, created_at, delivered_at, expires_at FROM delivery_log`),e.exec("DROP TABLE delivery_log"),e.exec("ALTER TABLE delivery_log_new RENAME TO delivery_log"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_rule ON delivery_log(rule_id)"),e.exec("CREATE INDEX IF NOT EXISTS idx_delivery_log_task ON delivery_log(task_id)")),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<20&&(e.prepare("PRAGMA table_info(goals)").all().some(E=>E.name==="report_to")||e.exec("ALTER TABLE goals ADD COLUMN report_to TEXT"),e.prepare("PRAGMA table_info(task_templates)").all().some(E=>E.name==="report_to")||e.exec("ALTER TABLE task_templates ADD COLUMN report_to TEXT"),e.exec("UPDATE goals SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE task_templates SET report_to = notify_targets WHERE notify_targets IS NOT NULL"),e.exec("UPDATE server_state SET schema_version = 20 WHERE id = 1")),e.prepare("PRAGMA table_info(config)").all().some(s=>s.name==="updated_at")||(e.exec("ALTER TABLE config ADD COLUMN updated_at INTEGER NOT NULL DEFAULT 0"),e.exec("UPDATE server_state SET schema_version = 21 WHERE id = 1"));let L=e.prepare("PRAGMA table_info(memories)").all();L.some(s=>s.name==="tier")||(e.exec("ALTER TABLE memories ADD COLUMN tier TEXT NOT NULL DEFAULT 'episodic'"),e.exec("CREATE INDEX IF NOT EXISTS idx_memories_tier ON memories(tier)")),L.some(s=>s.name==="superseded_by")||(e.exec("ALTER TABLE memories ADD COLUMN superseded_by TEXT"),e.exec("CREATE INDEX IF NOT EXISTS idx_memories_superseded ON memories(superseded_by)"));let d=e.prepare("PRAGMA table_info(memories)").all();d.some(s=>s.name==="tier")&&d.some(s=>s.name==="superseded_by")&&(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<22&&e.exec("UPDATE server_state SET schema_version = 22 WHERE id = 1");{let s=e.prepare("PRAGMA table_info(roles)").all();s.some(E=>E.name==="permission_mode")||e.exec("ALTER TABLE roles ADD COLUMN permission_mode TEXT DEFAULT NULL"),s.some(E=>E.name==="allowed_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN allowed_bash_patterns TEXT DEFAULT NULL"),s.some(E=>E.name==="denied_bash_patterns")||e.exec("ALTER TABLE roles ADD COLUMN denied_bash_patterns TEXT DEFAULT NULL"),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<23&&e.exec("UPDATE server_state SET schema_version = 23 WHERE id = 1")}if(e.prepare("PRAGMA table_info(roles)").all().some(E=>E.name==="env_vars")||e.prepare("ALTER TABLE roles ADD COLUMN env_vars TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<24&&e.prepare("UPDATE server_state SET schema_version = 24 WHERE id = 1").run(),n<25&&(e.exec(`
|
|
588
588
|
CREATE TABLE IF NOT EXISTS workflow_executions (
|
|
589
589
|
id TEXT PRIMARY KEY,
|
|
590
590
|
template_id TEXT NOT NULL,
|
|
@@ -595,7 +595,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
595
595
|
error TEXT,
|
|
596
596
|
FOREIGN KEY (template_id) REFERENCES task_templates(id)
|
|
597
597
|
)
|
|
598
|
-
`),e.exec("UPDATE server_state SET schema_version = 25 WHERE id = 1")),
|
|
598
|
+
`),e.exec("UPDATE server_state SET schema_version = 25 WHERE id = 1")),n<26){let s=`
|
|
599
599
|
CREATE TABLE IF NOT EXISTS workflow_artifacts (
|
|
600
600
|
id TEXT PRIMARY KEY,
|
|
601
601
|
execution_id TEXT NOT NULL,
|
|
@@ -614,7 +614,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
614
614
|
ON workflow_artifacts (execution_id);
|
|
615
615
|
CREATE INDEX IF NOT EXISTS idx_workflow_artifacts_step
|
|
616
616
|
ON workflow_artifacts (execution_id, step_id);
|
|
617
|
-
`,
|
|
617
|
+
`,T=`
|
|
618
618
|
CREATE TABLE IF NOT EXISTS artifact_access_log (
|
|
619
619
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
620
620
|
timestamp INTEGER NOT NULL,
|
|
@@ -633,7 +633,7 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
633
633
|
ON artifact_access_log (execution_id, timestamp);
|
|
634
634
|
CREATE INDEX IF NOT EXISTS idx_artifact_access_log_role
|
|
635
635
|
ON artifact_access_log (role_id, timestamp);
|
|
636
|
-
`;e.exec(
|
|
636
|
+
`;e.exec(s),e.exec(T),e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="step_id")||e.prepare("ALTER TABLE tasks ADD COLUMN step_id TEXT").run(),e.exec("UPDATE server_state SET schema_version = 26 WHERE id = 1")}e.prepare("PRAGMA table_info(roles)").all().some(E=>E.name==="os_capabilities")||e.prepare("ALTER TABLE roles ADD COLUMN os_capabilities TEXT DEFAULT NULL").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<27&&e.prepare("UPDATE server_state SET schema_version = 27 WHERE id = 1").run();{let s=e.prepare("PRAGMA table_info(manager_decisions)").all();s.some(E=>E.name==="requirements_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN requirements_json TEXT").run(),s.some(E=>E.name==="fit_score")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN fit_score REAL").run(),s.some(E=>E.name==="candidates_json")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN candidates_json TEXT").run(),s.some(E=>E.name==="tie_break_reason")||e.prepare("ALTER TABLE manager_decisions ADD COLUMN tie_break_reason TEXT").run(),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<28&&e.prepare("UPDATE server_state SET schema_version = 28 WHERE id = 1").run()}{let s=[[/\brm -rf\b/,["rm -rf *"]],[/^git push/,["git push*"]],[/^git reset/,["git reset*"]],[/\bcurl.*POST\b/i,["curl * -X POST*","curl * --request POST*"]]],T=e.prepare("SELECT key, value FROM config WHERE key = 'defaults.approvalRequired'").all();for(let E of T)try{let r=JSON.parse(E.value),i=[];for(let _ of r){let a=!1;for(let[A,t]of s)if(A.test(_)){i.push(...t),a=!0,l.info({from:_,to:t},"Config: migrated approvalRequired pattern from regex to glob");break}a||(/[.+?^${}()|[\]\\]/.test(_)&&l.warn({pattern:_},"Config: approvalRequired pattern contains regex metacharacters that won't work with glob matching; update to glob syntax (use * for wildcards)"),i.push(_))}let o=[...new Set(i)];e.prepare("UPDATE config SET value = ?, updated_at = ? WHERE key = ?").run(JSON.stringify(o),Date.now(),E.key)}catch{}}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<31){let T=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();T.n>0&&l.info({legacyCount:T.n},"normalizing legacy template trigger types"),e.prepare("UPDATE task_templates SET trigger_type='workflow_complete' WHERE trigger_type='event' AND trigger_event LIKE 'workflow_complete:%'").run(),e.prepare("UPDATE task_templates SET trigger_type='template_complete' WHERE trigger_type='event'").run(),e.prepare("UPDATE task_templates SET trigger_type='manual' WHERE trigger_type='task_complete'").run();let E=e.prepare("SELECT count(*) AS n FROM task_templates WHERE trigger_type IN ('event', 'task_complete')").get();E.n>0&&l.warn({orphan:E.n},"migration left orphan legacy trigger_type rows; manual inspection required"),e.prepare("UPDATE server_state SET schema_version = 31 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<32&&(e.exec(`
|
|
637
637
|
CREATE TABLE IF NOT EXISTS event_defs (
|
|
638
638
|
id TEXT PRIMARY KEY, name TEXT NOT NULL, source_type TEXT NOT NULL,
|
|
639
639
|
source_config TEXT NOT NULL, enabled INTEGER NOT NULL DEFAULT 1,
|
|
@@ -652,4 +652,33 @@ import{e as R,h as p}from"./chunk-WBAPIPST.js";import{c as m,h as O}from"./chunk
|
|
|
652
652
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_events_dedup ON events(source, dedup_key);
|
|
653
653
|
CREATE INDEX IF NOT EXISTS idx_events_type ON events(type);
|
|
654
654
|
CREATE INDEX IF NOT EXISTS idx_events_def_id ON events(event_def_id, occurred_at);
|
|
655
|
-
`),e.prepare("UPDATE server_state SET schema_version = 32 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<33&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='workflow_executions'").get()&&(e.prepare("PRAGMA table_info(workflow_executions)").all().some(i=>i.name==="event_id")||e.prepare("ALTER TABLE workflow_executions ADD COLUMN event_id TEXT").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_workflow_executions_event_id ON workflow_executions(event_id)").run()),e.prepare("UPDATE server_state SET schema_version = 33 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<34&&(e.prepare("PRAGMA table_info(tasks)").all().some(
|
|
655
|
+
`),e.prepare("UPDATE server_state SET schema_version = 32 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<33&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='workflow_executions'").get()&&(e.prepare("PRAGMA table_info(workflow_executions)").all().some(i=>i.name==="event_id")||e.prepare("ALTER TABLE workflow_executions ADD COLUMN event_id TEXT").run(),e.prepare("CREATE INDEX IF NOT EXISTS idx_workflow_executions_event_id ON workflow_executions(event_id)").run()),e.prepare("UPDATE server_state SET schema_version = 33 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<34&&(e.prepare("PRAGMA table_info(tasks)").all().some(r=>r.name==="block_reason_json")||e.prepare("ALTER TABLE tasks ADD COLUMN block_reason_json TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 34 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<35){e.prepare("PRAGMA table_info(roles)").all().some(r=>r.name==="preset_id")||e.prepare("ALTER TABLE roles ADD COLUMN preset_id TEXT").run();let E=e.prepare("PRAGMA table_info(task_templates)").all();E.some(r=>r.name==="is_preset")||e.prepare("ALTER TABLE task_templates ADD COLUMN is_preset INTEGER NOT NULL DEFAULT 0").run(),E.some(r=>r.name==="preset_id")||e.prepare("ALTER TABLE task_templates ADD COLUMN preset_id TEXT").run(),e.prepare("UPDATE server_state SET schema_version = 35 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<36){let T=[["Engineer","engineer"],["Reviewer","reviewer"],["Researcher","researcher"],["Writer","writer"],["Chat Manager","chat-manager"],["adam-automator","adam-automator"]];for(let[E,r]of T)e.prepare("UPDATE roles SET preset_id = ? WHERE name = ? AND preset_id IS NULL").run(r,E);e.prepare("UPDATE server_state SET schema_version = 36 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<37&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='feature_requests'").all().length===0&&(e.exec(`
|
|
656
|
+
CREATE TABLE feature_requests (
|
|
657
|
+
id TEXT PRIMARY KEY,
|
|
658
|
+
source_session_id TEXT,
|
|
659
|
+
source_message_id TEXT,
|
|
660
|
+
extracted_at INTEGER NOT NULL,
|
|
661
|
+
extracted_by_role_id TEXT,
|
|
662
|
+
content TEXT NOT NULL,
|
|
663
|
+
summary TEXT,
|
|
664
|
+
status TEXT NOT NULL DEFAULT 'new' CHECK(status IN ('new','reviewed','dismissed','converted')),
|
|
665
|
+
tags TEXT,
|
|
666
|
+
evidence_quote TEXT,
|
|
667
|
+
created_at INTEGER NOT NULL,
|
|
668
|
+
updated_at INTEGER NOT NULL
|
|
669
|
+
)
|
|
670
|
+
`),e.exec("CREATE INDEX IF NOT EXISTS idx_feature_requests_status ON feature_requests(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_feature_requests_extracted_at ON feature_requests(extracted_at DESC)")),e.prepare("UPDATE server_state SET schema_version = 37 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<38&&(e.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='mistake_patterns'").all().length===0&&(e.exec(`
|
|
671
|
+
CREATE TABLE mistake_patterns (
|
|
672
|
+
id TEXT PRIMARY KEY,
|
|
673
|
+
dimension_type TEXT NOT NULL,
|
|
674
|
+
dimension_value TEXT NOT NULL,
|
|
675
|
+
count INTEGER NOT NULL DEFAULT 1,
|
|
676
|
+
role_ids TEXT NOT NULL DEFAULT '[]',
|
|
677
|
+
sample_evidence_ids TEXT NOT NULL DEFAULT '[]',
|
|
678
|
+
status TEXT NOT NULL DEFAULT 'new' CHECK(status IN ('new','acknowledged','dismissed')),
|
|
679
|
+
first_seen INTEGER NOT NULL,
|
|
680
|
+
last_seen INTEGER NOT NULL,
|
|
681
|
+
created_at INTEGER NOT NULL,
|
|
682
|
+
updated_at INTEGER NOT NULL
|
|
683
|
+
)
|
|
684
|
+
`),e.exec("CREATE INDEX IF NOT EXISTS idx_mistake_patterns_status ON mistake_patterns(status)"),e.exec("CREATE INDEX IF NOT EXISTS idx_mistake_patterns_last_seen ON mistake_patterns(last_seen)"),e.exec("CREATE UNIQUE INDEX IF NOT EXISTS idx_mistake_patterns_dim ON mistake_patterns(dimension_type, dimension_value)")),e.prepare("UPDATE server_state SET schema_version = 38 WHERE id = 1").run()),(e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<39){let T=e.prepare("SELECT source_task_id, COUNT(*) as cnt FROM memories WHERE source_task_id IS NOT NULL AND type = 'thought' GROUP BY source_task_id HAVING cnt > 1").all();if(T.length>0){console.info(`[db migration v39] dedupe ${T.length} (source_task_id, type='thought') groups before adding unique index`);for(let E of T){let r=e.prepare("SELECT id, length(content) as len FROM memories WHERE source_task_id = ? AND type = 'thought' ORDER BY len DESC, created_at ASC").all(E.source_task_id),i=r[0].id,o=r.slice(1).map(a=>a.id),_=o.map(()=>"?").join(",");e.prepare(`DELETE FROM memories WHERE id IN (${_})`).run(...o),console.info(`[db migration v39] group source_task_id=${E.source_task_id}: kept ${i} (len ${r[0].len}), deleted ${o.length}`)}}e.prepare("CREATE UNIQUE INDEX IF NOT EXISTS idx_memories_thought_per_task ON memories(source_task_id) WHERE source_task_id IS NOT NULL AND type = 'thought'").run(),e.prepare("UPDATE server_state SET schema_version = 39 WHERE id = 1").run()}if((e.prepare("SELECT schema_version FROM server_state WHERE id = 1").get()?.schema_version??0)<40){let T=["tasks","step_logs","delivery_log","evolution_audit","chat_messages"];for(let E of T)e.prepare(`PRAGMA table_info(${E})`).all().some(i=>i.name==="trace_id")||(e.prepare(`ALTER TABLE ${E} ADD COLUMN trace_id TEXT`).run(),e.prepare(`CREATE INDEX IF NOT EXISTS idx_${E}_trace_id ON ${E}(trace_id) WHERE trace_id IS NOT NULL`).run(),console.info(`[db migration v40] added trace_id to ${E}`));e.prepare("UPDATE server_state SET schema_version = 40 WHERE id = 1").run()}try{let s=e.prepare("SELECT id, name, steps, role_preference FROM task_templates WHERE enabled = 1").all(),T=0;for(let E of s){if(E.role_preference)continue;let r;try{r=JSON.parse(E.steps)}catch{continue}if(!Array.isArray(r))continue;let i=!1;for(let o of r){let _=typeof o.roleId=="string"&&o.roleId.length>0,a=o.autoSelectRole===!0;!_&&!a&&(o.autoSelectRole=!0,o.requirements===void 0&&(o.requirements={}),i=!0)}i&&(e.prepare("UPDATE task_templates SET steps = ?, updated_at = ? WHERE id = ?").run(JSON.stringify(r),Date.now(),E.id),T+=1,console.info(`[db migration] template auto-repaired: id=${E.id} name=${E.name}`))}T>0&&console.info(`[db migration] auto-repaired ${T} enabled template(s) with missing role config`)}catch(s){console.error("[db migration] template auto-repair failed:",s)}}function W(){if(N)return N;let e=process.env.ADAM_DB_PATH||R,c=g(e);return u(c)||S(c,{recursive:!0}),N=new X(e),N.pragma("journal_mode = WAL"),N.pragma("foreign_keys = ON"),N.pragma("trusted_schema = ON"),U(N),N}function K(){N&&(N.close(),N=null)}var l,N,D=p(()=>{I();O();l=m("store"),N=null});export{U as a,W as b,K as c,D as d};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{c as o}from"./chunk-6JBSBSCL.js";import{b as e,d as i}from"./chunk-AQO6IIHV.js";i();function d(t){return{id:t.id,taskId:t.task_id,index:t.index,type:t.type,content:t.content,toolName:t.tool_name??void 0,toolInput:t.tool_input?JSON.parse(t.tool_input):void 0,toolOutput:t.tool_output??void 0,truncated:t.truncated===1,timestamp:t.timestamp,tokenUsage:t.token_usage?JSON.parse(t.token_usage):void 0,planStepIndex:t.plan_step_index??void 0,traceId:t.trace_id??void 0}}function l(t){e().prepare(`
|
|
2
|
+
INSERT INTO step_logs (id, task_id, "index", type, content, tool_name,
|
|
3
|
+
tool_input, tool_output, truncated, timestamp, token_usage, plan_step_index, trace_id)
|
|
4
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
5
|
+
`).run(t.id,t.taskId,t.index,t.type,t.content,t.toolName??null,t.toolInput?JSON.stringify(t.toolInput):null,t.toolOutput??null,t.truncated?1:0,t.timestamp,t.tokenUsage?JSON.stringify(t.tokenUsage):null,t.planStepIndex??null,t.traceId??o()??null)}function _(t,n=100,p=0){return e().prepare('SELECT * FROM step_logs WHERE task_id = ? ORDER BY "index" ASC LIMIT ? OFFSET ?').all(t,n,p).map(d)}export{l as a,_ as b};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as r,d as s}from"./chunk-
|
|
1
|
+
import{b as r,d as s}from"./chunk-AQO6IIHV.js";import{c as i}from"./chunk-FCV2DPZQ.js";function p(e){let n=r().prepare("SELECT value FROM config WHERE key = ?").get(e);if(n)try{return JSON.parse(n.value)}catch{return n.value}}function E(e,t){let n=r(),o=JSON.stringify(t),u=Date.now();n.prepare(`INSERT INTO config (key, value, updated_at) VALUES (?, ?, ?)
|
|
2
2
|
ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at`).run(e,o,u)}function k(){let t=r().prepare("SELECT key, value FROM config").all(),n={};for(let o of t)try{n[o.key]=JSON.parse(o.value)}catch{n[o.key]=o.value}return n}function b(e){let t=r(),n=t.prepare("INSERT OR IGNORE INTO config (key, value, updated_at) VALUES (?, ?, ?)"),o=Date.now(),u=0;return t.transaction(()=>{for(let[c,a]of Object.entries(e)){if(a==null||a==="")continue;n.run(c,JSON.stringify(a),o).changes>0&&u++}})(),u}function w(){return r().prepare("SELECT COUNT(*) as count FROM config").get().count===0}function O(e){return r().prepare("DELETE FROM config WHERE key = ?").run(e).changes>0}var d=i(()=>{s()});export{p as a,E as b,k as c,b as d,w as e,O as f,d as g};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{b as C}from"./chunk-
|
|
1
|
+
import{b as C}from"./chunk-Y5FFL6UO.js";import{a as p}from"./chunk-L7JP7DUO.js";import{b as D,c as f,d as w}from"./chunk-O7XQSONJ.js";import{c as M,h as U}from"./chunk-MRTJFYPR.js";function O(s,c,n){switch(c){case"wechat":return $(s);case"telegram":return s;case"slack":return P(s);case"webhook":return JSON.stringify({result:s,taskId:n,timestamp:new Date().toISOString()});default:return $(s)}}function $(s){return s.replace(/^#{1,6}\s+/gm,"").replace(/\*\*(.+?)\*\*/g,"$1").replace(/\*(.+?)\*/g,"$1").replace(/__(.+?)__/g,"$1").replace(/_(.+?)_/g,"$1").replace(/`([^`]+)`/g,"$1").replace(/```[\s\S]*?```/g,c=>c.replace(/```\w*\n?/g,"").trim()).replace(/\[([^\]]+)\]\([^)]+\)/g,"$1").replace(/!\[([^\]]*)\]\([^)]+\)/g,"$1").replace(/\n{3,}/g,`
|
|
2
2
|
|
|
3
|
-
`).trim()}function P(s){return s.replace(/\*\*(.+?)\*\*/g,"*$1*").replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>")}U();import{v4 as T}from"uuid";var x=M("adam"),v=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;isRecentlySent(c){return this._recentlySentIds.has(c)}async send(c){let{taskId:n,channelId:a,chatId:m,content:y,messageType:d,platform:E,webhookUrl:h,replyMarkup:I,mediaUrl:S,mediaType:b}=c,R=d!=="reply"&&!!n,r;if(R){r=`${n}:${a??"none"}:${m??"none"}:${d}`;let t=this._dedupCache.get(r);if(t&&Date.now()-t.timestamp<300*1e3)return x.debug({dedupKey:r},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:t.logEntryId}}if(a){let t=Date.now(),i=6e4,o=this._rateLimitWindows.get(a);o||(o=[],this._rateLimitWindows.set(a,o));let u=t-i;for(;o.length>0&&o[0]<u;)o.shift();if(o.length>=60){let l=T();return x.warn({channelId:a,count:o.length},"Rate limited, not sending"),{success:!1,logEntryId:l,error:"rate_limited"}}o.push(t)}let L=E??(a?C(a)?.platform:void 0)??"unknown",k=h?y:O(y,L,n),e=T(),g={id:e,ruleId:void 0,taskId:n??void 0,status:"pending",target:a&&m?{type:"channel",channelId:a,chatId:m}:h?{type:"webhook",webhookUrl:h}:{type:"channel",channelId:a??"",chatId:m??""},content:k,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:d};D(g),r&&this._dedupCache.set(r,{logEntryId:e,timestamp:Date.now()});try{if(h){let t=await fetch(h,{method:"POST",body:JSON.stringify({result:y,taskId:n,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(t.ok)return w(e),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"delivered",messageType:d}),{success:!0,logEntryId:e};{let i=`Webhook returned ${t.status}`;return f(e,"failed",i),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:i,messageType:d}),{success:!1,logEntryId:e,error:i}}}else if(a&&m){let{getChannelManager:t}=await import("./channels-
|
|
3
|
+
`).trim()}function P(s){return s.replace(/\*\*(.+?)\*\*/g,"*$1*").replace(/\[([^\]]+)\]\(([^)]+)\)/g,"<$2|$1>")}U();import{v4 as T}from"uuid";var x=M("adam"),v=class{_dedupCache=new Map;_rateLimitWindows=new Map;_recentlySentIds=new Set;isRecentlySent(c){return this._recentlySentIds.has(c)}async send(c){let{taskId:n,channelId:a,chatId:m,content:y,messageType:d,platform:E,webhookUrl:h,replyMarkup:I,mediaUrl:S,mediaType:b}=c,R=d!=="reply"&&!!n,r;if(R){r=`${n}:${a??"none"}:${m??"none"}:${d}`;let t=this._dedupCache.get(r);if(t&&Date.now()-t.timestamp<300*1e3)return x.debug({dedupKey:r},"Dedup hit, returning cached log entry"),{success:!0,logEntryId:t.logEntryId}}if(a){let t=Date.now(),i=6e4,o=this._rateLimitWindows.get(a);o||(o=[],this._rateLimitWindows.set(a,o));let u=t-i;for(;o.length>0&&o[0]<u;)o.shift();if(o.length>=60){let l=T();return x.warn({channelId:a,count:o.length},"Rate limited, not sending"),{success:!1,logEntryId:l,error:"rate_limited"}}o.push(t)}let L=E??(a?C(a)?.platform:void 0)??"unknown",k=h?y:O(y,L,n),e=T(),g={id:e,ruleId:void 0,taskId:n??void 0,status:"pending",target:a&&m?{type:"channel",channelId:a,chatId:m}:h?{type:"webhook",webhookUrl:h}:{type:"channel",channelId:a??"",chatId:m??""},content:k,attempts:0,createdAt:Date.now(),expiresAt:Date.now()+1440*60*1e3,source:"direct",messageType:d};D(g),r&&this._dedupCache.set(r,{logEntryId:e,timestamp:Date.now()});try{if(h){let t=await fetch(h,{method:"POST",body:JSON.stringify({result:y,taskId:n,timestamp:new Date().toISOString()}),signal:AbortSignal.timeout(1e4)});if(t.ok)return w(e),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"delivered",messageType:d}),{success:!0,logEntryId:e};{let i=`Webhook returned ${t.status}`;return f(e,"failed",i),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:i,messageType:d}),{success:!1,logEntryId:e,error:i}}}else if(a&&m){let{getChannelManager:t}=await import("./channels-OOIM62BX.js"),i=t();if(!i){let l="ChannelManager not available";return f(e,"failed",l),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:l,messageType:d}),{success:!1,logEntryId:e,error:l}}let o={content:k,...I?{replyMarkup:I}:{},...S?{mediaUrl:S}:{},...b?{mediaType:b}:{}},u=await i.sendMessage(a,m,o);if(u===null){let l="Channel adapter send failed (returned null)";return f(e,"failed",l),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:l,messageType:d}),{success:!1,logEntryId:e,error:l}}return u&&(this._recentlySentIds.add(u),setTimeout(()=>this._recentlySentIds.delete(u),300*1e3)),w(e),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"delivered",messageType:d}),{success:!0,messageId:u??void 0,logEntryId:e}}else{let t="No channelId/chatId or webhookUrl provided";return f(e,"failed",t),r&&this._dedupCache.delete(r),{success:!1,logEntryId:e,error:t}}}catch(t){let i=t instanceof Error?t.message:String(t);return f(e,"failed",i),r&&this._dedupCache.delete(r),p.emit({type:"delivery_status_change",logEntryId:e,taskId:n,target:g.target,status:"failed",error:i,messageType:d}),{success:!1,logEntryId:e,error:i}}}},_=null;function W(){return _||(_=new v),_}function q(s){return W().isRecentlySent(s)}export{v as a,W as b,q as c};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{b as o,d as f}from"./chunk-AQO6IIHV.js";f();function T(e){if(e)return e.startsWith("event:")?e.slice(6):void 0}var d=class extends Error{constructor(r){super(`Template has ${r.length} step(s) without executable role config. Set template.rolePreference, OR set each failing step's roleId, OR set autoSelectRole=true. Failing step ids: ${r.join(", ")}`);this.failingStepIds=r;this.name="TemplateRoleConfigError"}failingStepIds;code="TEMPLATE_INVALID_ROLE_CONFIG"};function u(e){if(e.rolePreference)return;let n=[];for(let r of e.steps){let s=typeof r.roleId=="string"&&r.roleId.length>0,t=r.autoSelectRole===!0;!s&&!t&&n.push(r.id)}if(n.length>0)throw new d(n)}function c(e){let n=e.trigger_type,r={type:n,cron:n==="event"?void 0:e.trigger_cron??void 0,event:n==="event"?void 0:e.trigger_event??void 0,eventDefId:n==="event"?T(e.trigger_event):void 0,runAt:n==="once"?e.trigger_cron??void 0:void 0};return{id:e.id,name:e.name,description:e.description??void 0,trigger:r,steps:JSON.parse(e.steps),rolePreference:e.role_preference??void 0,config:e.config?JSON.parse(e.config):void 0,tags:e.tags?JSON.parse(e.tags):void 0,enabled:e.enabled===1,createdAt:e.created_at,updatedAt:e.updated_at??void 0,sourceSessionId:e.source_session_id??void 0,deliverTo:e.deliver_to?JSON.parse(e.deliver_to):void 0,reportTo:e.report_to?JSON.parse(e.report_to):void 0,goalIds:e.goal_ids?JSON.parse(e.goal_ids):void 0,isPreset:e.is_preset===1?!0:void 0,presetId:e.preset_id??void 0}}function k(e){u(e),o().prepare(`
|
|
2
|
+
INSERT INTO task_templates (id, name, description, trigger_type, trigger_cron,
|
|
3
|
+
trigger_event, steps, role_preference, config, tags, enabled, created_at, updated_at,
|
|
4
|
+
source_session_id, deliver_to, report_to, goal_ids, is_preset, preset_id)
|
|
5
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
6
|
+
`).run(e.id,e.name,e.description??null,e.trigger.type,e.trigger.type==="once"?e.trigger.runAt??null:e.trigger.cron??null,e.trigger.type==="event"?`event:${e.trigger.eventDefId}`:e.trigger.event??null,JSON.stringify(e.steps),e.rolePreference??null,e.config?JSON.stringify(e.config):null,e.tags?JSON.stringify(e.tags):null,e.enabled?1:0,e.createdAt??Date.now(),e.updatedAt??null,e.sourceSessionId??null,e.deliverTo?JSON.stringify(e.deliverTo):null,e.reportTo?JSON.stringify(e.reportTo):null,e.goalIds?JSON.stringify(e.goalIds):null,e.presetId!=null?1:0,e.presetId??null)}function _(e){let r=o().prepare("SELECT * FROM task_templates WHERE id = ?").get(e);return r?c(r):void 0}function h(e,n){let r=o();if("steps"in n||"rolePreference"in n){let i=_(e);if(i){let a={rolePreference:"rolePreference"in n?n.rolePreference:i.rolePreference,steps:"steps"in n&&n.steps?n.steps:i.steps};u(a)}}let s=[],t=[];"name"in n&&(s.push("name = ?"),t.push(n.name)),"description"in n&&(s.push("description = ?"),t.push(n.description??null)),"trigger"in n&&n.trigger&&(s.push("trigger_type = ?"),t.push(n.trigger.type),s.push("trigger_cron = ?"),t.push(n.trigger.type==="once"?n.trigger.runAt??null:n.trigger.cron??null),s.push("trigger_event = ?"),t.push(n.trigger.type==="event"?`event:${n.trigger.eventDefId}`:n.trigger.event??null)),"steps"in n&&(s.push("steps = ?"),t.push(JSON.stringify(n.steps))),"rolePreference"in n&&(s.push("role_preference = ?"),t.push(n.rolePreference??null)),"config"in n&&(s.push("config = ?"),t.push(n.config?JSON.stringify(n.config):null)),"tags"in n&&(s.push("tags = ?"),t.push(n.tags?JSON.stringify(n.tags):null)),"enabled"in n&&(s.push("enabled = ?"),t.push(n.enabled?1:0)),"sourceSessionId"in n&&(s.push("source_session_id = ?"),t.push(n.sourceSessionId??null)),"deliverTo"in n&&(s.push("deliver_to = ?"),t.push(n.deliverTo?JSON.stringify(n.deliverTo):null)),"reportTo"in n&&(s.push("report_to = ?"),t.push(n.reportTo?JSON.stringify(n.reportTo):null)),"goalIds"in n&&(s.push("goal_ids = ?"),t.push(n.goalIds?JSON.stringify(n.goalIds):null)),"isPreset"in n&&(s.push("is_preset = ?"),t.push(n.isPreset?1:0)),"presetId"in n&&(s.push("preset_id = ?"),t.push(n.presetId??null)),s.length!==0&&(s.push("updated_at = ?"),t.push(Date.now()),t.push(e),r.prepare(`UPDATE task_templates SET ${s.join(", ")} WHERE id = ?`).run(...t))}function S(e=!1,n,r=0){let s=o(),t="SELECT * FROM task_templates",i=[];return e&&(t+=" WHERE enabled = 1"),t+=" ORDER BY COALESCE(updated_at, created_at) DESC",typeof n=="number"&&(t+=" LIMIT ? OFFSET ?",i.push(n,r)),s.prepare(t).all(...i).map(c)}function m(e){o().prepare("UPDATE task_templates SET enabled = 1, updated_at = ? WHERE id = ?").run(Date.now(),e)}function R(e){o().prepare("UPDATE task_templates SET enabled = 0, updated_at = ? WHERE id = ?").run(Date.now(),e)}function b(e){let n=o(),r=n.prepare("SELECT COUNT(*) AS n FROM workflow_executions WHERE template_id = ?").get(e),s=n.prepare("SELECT COUNT(*) AS n FROM tasks WHERE template_id = ?").get(e);return{executionCount:r.n,taskCount:s.n}}function y(e,n="template_only"){let r=o();r.transaction(()=>{if(n==="with_tasks"){let i=r.prepare("SELECT id FROM tasks WHERE template_id = ?").all(e).map(a=>a.id);if(i.length>0)for(let p=0;p<i.length;p+=500){let l=i.slice(p,p+500),g=l.map(()=>"?").join(",");r.prepare(`DELETE FROM role_scores WHERE task_id IN (${g})`).run(...l),r.prepare(`DELETE FROM manager_decisions WHERE task_id IN (${g})`).run(...l),r.prepare(`UPDATE chat_messages SET task_id = NULL WHERE task_id IN (${g})`).run(...l),r.prepare(`UPDATE approval_rules SET created_by_task_id = NULL WHERE created_by_task_id IN (${g})`).run(...l),r.prepare(`DELETE FROM tasks WHERE id IN (${g})`).run(...l)}}r.prepare("DELETE FROM workflow_executions WHERE template_id = ?").run(e),r.prepare("DELETE FROM task_templates WHERE id = ?").run(e)})()}export{d as a,u as b,k as c,_ as d,h as e,S as f,m as g,R as h,b as i,y as j};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import{q as D}from"./chunk-2VBGTGDK.js";import{a as M}from"./chunk-N4ES7TCL.js";import{b as T}from"./chunk-R2WB5BKF.js";import{b as O}from"./chunk-B544JOZM.js";import{b as W}from"./chunk-Y5FFL6UO.js";import{a as I}from"./chunk-L7JP7DUO.js";import{a as C}from"./chunk-6JBSBSCL.js";import{d as x}from"./chunk-5AUQIK3Q.js";import{l as A,r as L}from"./chunk-U2LBBBWO.js";import{b as S,d as z}from"./chunk-AQO6IIHV.js";import{c as E,h as F}from"./chunk-MRTJFYPR.js";F();L();z();function P(u){return{id:u.id,templateId:u.template_id,status:u.status,stepStatuses:JSON.parse(u.step_statuses),startedAt:u.started_at,completedAt:u.completed_at??void 0,error:u.error??void 0,eventId:u.event_id??void 0}}function N(u,e,t){S().prepare(`
|
|
2
|
+
INSERT INTO workflow_executions (id, template_id, status, step_statuses, started_at, event_id)
|
|
3
|
+
VALUES (?, ?, 'running', '{}', ?, ?)
|
|
4
|
+
`).run(u,e,Date.now(),t??null)}function R(u){let t=S().prepare("SELECT * FROM workflow_executions WHERE id = ?").get(u);return t?P(t):void 0}function y(u,e){let t=S(),n=[],s=[];e.status!==void 0&&(n.push("status = ?"),s.push(e.status)),e.stepStatuses!==void 0&&(n.push("step_statuses = ?"),s.push(JSON.stringify(e.stepStatuses))),e.completedAt!==void 0&&(n.push("completed_at = ?"),s.push(e.completedAt)),e.error!==void 0&&(n.push("error = ?"),s.push(e.error)),n.length!==0&&(s.push(u),t.prepare(`UPDATE workflow_executions SET ${n.join(", ")} WHERE id = ?`).run(...s))}function j(u,e=50,t=0){let n=S(),s="SELECT * FROM workflow_executions",a=[];return u&&(s+=" WHERE template_id = ?",a.push(u)),s+=" ORDER BY started_at DESC LIMIT ? OFFSET ?",a.push(e,t),n.prepare(s).all(...a).map(P)}function q(u,e=20,t=0){return S().prepare(`
|
|
5
|
+
SELECT we.id AS execution_id,
|
|
6
|
+
we.template_id,
|
|
7
|
+
tt.name AS template_name,
|
|
8
|
+
we.status,
|
|
9
|
+
we.started_at,
|
|
10
|
+
we.completed_at,
|
|
11
|
+
we.error,
|
|
12
|
+
we.event_id,
|
|
13
|
+
e.occurred_at AS event_occurred_at,
|
|
14
|
+
e.payload AS event_payload
|
|
15
|
+
FROM workflow_executions we
|
|
16
|
+
LEFT JOIN task_templates tt ON tt.id = we.template_id
|
|
17
|
+
INNER JOIN events e ON e.id = we.event_id
|
|
18
|
+
WHERE e.event_def_id = ?
|
|
19
|
+
ORDER BY we.started_at DESC
|
|
20
|
+
LIMIT ? OFFSET ?
|
|
21
|
+
`).all(u,e,t).map(a=>({executionId:a.execution_id,templateId:a.template_id,templateName:a.template_name,status:a.status,startedAt:a.started_at,completedAt:a.completed_at,error:a.error,eventId:a.event_id,eventOccurredAt:a.event_occurred_at,eventPayload:a.event_payload?JSON.parse(a.event_payload):null}))}var c=E("scheduler"),$=class{maxRetries;baseDelayMs;constructor(e){this.maxRetries=e?.maxRetries??3,this.baseDelayMs=e?.baseDelayMs??1e3}async execute(e,t,n){let s=x(),a={timeout:e.config?.timeout??s.timeout,approvalRequired:s.approvalRequired,approvalTimeout:s.approvalTimeout,plugins:e.config?.plugins,mcpServers:e.config?.mcpServers,model:e.config?.model??s.model,maxTurns:e.config?.maxTurns??s.maxTurns,maxBudgetUsd:e.config?.maxBudgetUsd??s.maxBudgetUsd,env:{...s.env,...e.config?.env},claudeCodePath:s.claudeCodePath},i=typeof e.config?.delivery_message_type=="string"&&e.config.delivery_message_type.length>0?e.config.delivery_message_type:void 0,r={templateId:e.id,executionId:t,stepResults:new Map,stepStatuses:{},config:a,continueOnError:e.config?.continueOnError??!1,failedStepIds:new Set,rolePreference:e.rolePreference,deliverTo:e.deliverTo,reportTo:e.reportTo,deliveryMessageType:i};N(t,e.id,n?.eventId),M(t),I.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:"running"});let d=this.groupIntoLayers(e.steps);for(let k of d){if(this.syncExternalState(r)==="cancelled")return this.finalizeCancelledWorkflow(e,r);let w=k.filter(l=>!this.shouldSkip(l,r)),_=k.filter(l=>this.shouldSkip(l,r));for(let l of _){let p={stepId:l.id,taskId:"",status:"skipped",error:"Skipped: dependency failed"};r.stepResults.set(l.id,p),r.stepStatuses[l.id]={taskId:"",status:"skipped",error:"Skipped: dependency failed"},c.info({stepId:l.id,executionId:t},"Step skipped due to failed dependency")}if(w.length===0)continue;let m=await Promise.allSettled(w.map(l=>this.executeStep(l,r)));if(this.syncExternalState(r)==="cancelled")return this.finalizeCancelledWorkflow(e,r);for(let l=0;l<w.length;l++){let p=w[l],v=m[l];if(v.status==="rejected"){c.error({stepId:p.id,error:v.reason},"Workflow step threw");let h={stepId:p.id,taskId:"",status:"failed",error:String(v.reason)};r.stepResults.set(p.id,h),r.failedStepIds.add(p.id),r.stepStatuses[p.id]={taskId:"",status:"failed",error:String(v.reason)}}let b=r.stepResults.get(p.id);if(b?.status==="failed"&&(r.failedStepIds.add(p.id),!r.continueOnError)){if(this.isWorkflowCancelled(r.executionId))return this.finalizeCancelledWorkflow(e,r);let h="failed";return y(t,{status:h,stepStatuses:r.stepStatuses,completedAt:Date.now(),error:b.error}),I.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:h}),c.warn({stepId:p.id,executionId:t},"Workflow step failed, workflow aborted"),{executionId:t,status:h,stepResults:r.stepResults}}}if(this.isWorkflowCancelled(r.executionId))return this.finalizeCancelledWorkflow(e,r);y(t,{stepStatuses:r.stepStatuses})}if(this.isWorkflowCancelled(r.executionId))return this.finalizeCancelledWorkflow(e,r);let o=r.failedStepIds.size>0,g=[...r.stepResults.values()].some(k=>k.status==="skipped"||k.status==="cancelled"),f=o||g?"partial":"completed";return y(t,{status:f,stepStatuses:r.stepStatuses,completedAt:Date.now()}),I.emit({type:"workflow_status_change",executionId:t,templateId:e.id,status:f}),c.info({executionId:t,status:f,completedSteps:r.stepResults.size,totalSteps:e.steps.length,failedSteps:r.failedStepIds.size},"Workflow completed"),await this.deliverWorkflowResult(r,f),{executionId:t,status:f,stepResults:r.stepResults}}groupIntoLayers(e){let t=new Map(e.map(r=>[r.id,r])),n=new Map,s=new Map;for(let r of e)n.set(r.id,0),s.set(r.id,[]);for(let r of e)if(r.dependsOn)for(let d of r.dependsOn)t.has(d)&&(n.set(r.id,(n.get(r.id)??0)+1),s.get(d)?.push(r.id));let a=[],i=new Set(e.map(r=>r.id));for(;i.size>0;){let r=[];for(let d of i)if((n.get(d)??0)===0){let o=t.get(d);o&&r.push(o)}if(r.length===0){c.warn({remaining:[...i]},"Cycle detected in step dependencies");for(let d of i){let o=t.get(d);o&&a.push([o])}break}a.push(r);for(let d of r){i.delete(d.id);for(let o of s.get(d.id)??[])n.set(o,(n.get(o)??0)-1)}}return a}syncExternalState(e){let t=R(e.executionId);if(t){for(let[n,s]of Object.entries(t.stepStatuses))(s.status==="skipped"||s.status==="failed"||s.status==="cancelled")&&!e.stepResults.has(n)&&!e.failedStepIds.has(n)&&(s.status==="skipped"?e.stepResults.set(n,{stepId:n,taskId:s.taskId,status:"skipped",error:s.error??"Manually skipped via API"}):s.status==="cancelled"?e.stepResults.set(n,{stepId:n,taskId:s.taskId,status:"cancelled",error:s.error??"Cancelled"}):(e.failedStepIds.add(n),e.stepResults.set(n,{stepId:n,taskId:s.taskId,status:"failed",error:s.error})),e.stepStatuses[n]=s,c.info({stepId:n,status:s.status,executionId:e.executionId},"Synced external step status from DB"));return t.status==="cancelled"?"cancelled":void 0}}shouldSkip(e,t){return e.dependsOn?e.dependsOn.some(n=>t.failedStepIds.has(n)?!0:t.stepResults.get(n)?.status==="skipped"):!1}async executeStep(e,t){let n=this.resolveVariables(e.prompt,t.stepResults),s=e.roleId??t.rolePreference,a=s?A(s):void 0,i=(e.config?.timeout??t.config?.timeout??600)*1e3,r="",d="failed",o;for(let m=1;m<=this.maxRetries;m++){let l=await C("template",async()=>D({prompt:n,roleId:s,requirements:e.requirements,autoSelectRole:e.autoSelectRole,config:{...t.config,...e.config?.timeout!==void 0?{timeout:e.config.timeout}:{},...e.config?.maxTurns!==void 0?{maxTurns:e.config.maxTurns}:{}},sourceSessionId:t.templateId,parentId:t.executionId,templateId:t.templateId,stepId:e.id}));if(!l.ok){o=l;break}if(r=l.taskId,t.stepStatuses[e.id]={taskId:r,status:"running",roleId:s},c.debug({stepId:e.id,taskId:r,roleId:s,attempt:m},"Workflow step task created via admission"),d=await this.waitForTaskCompletion(r,i),d==="completed"||d==="cancelled")break;if(m<this.maxRetries){let p=this.baseDelayMs*Math.pow(2,m-1);c.info({stepId:e.id,attempt:m,maxRetries:this.maxRetries,delayMs:p},"Workflow step failed, retrying"),await this.sleep(p)}}if(o&&!o.ok){let m={stepId:e.id,taskId:"",status:"failed",roleId:s,roleName:a?.name,error:`Admission failed: ${o.reason}`,admissionError:{code:o.code,reason:o.reason,candidates:o.candidates?.map(l=>({roleId:l.roleId,name:l.name,fitScore:l.fitScore}))}};t.stepResults.set(e.id,m),t.stepStatuses[e.id]={taskId:"",status:"failed",roleId:s,error:o.reason},c.warn({stepId:e.id,admissionCode:o.code,reason:o.reason},"Workflow step admission failed");return}let g=T(r),f=R(t.executionId),k=f?.stepStatuses[e.id],w=d==="completed"?"completed":k?.status==="skipped"?"skipped":k?.status==="cancelled"||f?.status==="cancelled"?"cancelled":"failed",_={stepId:e.id,taskId:r,status:w,roleId:s,roleName:a?.name,result:g?.result,error:g?.error};t.stepResults.set(e.id,_),t.stepStatuses[e.id]={taskId:r,status:_.status,roleId:s,result:g?.result,error:g?.error}}async deliverWorkflowResult(e,t){let n=O();if(e.deliverTo&&e.deliverTo.length>0){let s=this.assembleWorkflowSummary(e);for(let a of e.deliverTo)if(a.type==="channel"){let i=W(a.channelId);try{await n.send({taskId:e.executionId,channelId:a.channelId,chatId:a.chatId,platform:i?.platform,content:s,messageType:e.deliveryMessageType??"deliver"})}catch(r){c.error({executionId:e.executionId,channelId:a.channelId,error:r},"Workflow delivery failed")}}}if(e.reportTo&&e.reportTo.length>0){let s=[...e.stepResults.values()].filter(o=>o.status==="completed").length,a=e.failedStepIds.size,i=[...e.stepResults.values()].filter(o=>o.status==="skipped").length,r=e.stepResults.size,d=`Workflow ${t}: ${s}/${r} steps completed${a>0?`, ${a} failed`:""}${i>0?`, ${i} skipped`:""}`;for(let o of e.reportTo)if(o.type==="channel"){let g=W(o.channelId);try{await n.send({taskId:e.executionId,channelId:o.channelId,chatId:o.chatId,platform:g?.platform,content:d,messageType:"report"})}catch(f){c.error({executionId:e.executionId,channelId:o.channelId,error:f},"Workflow report delivery failed")}}}}assembleWorkflowSummary(e){let t=[];for(let[n,s]of e.stepResults){let a=s.status==="completed"?"OK":s.status==="skipped"?"SKIP":"FAIL",i=s.roleName?` (${s.roleName})`:"",r=s.result??s.error??"No output";t.push(`## [${a}] Step: ${n}${i}
|
|
22
|
+
|
|
23
|
+
${r}`)}return t.join(`
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
`)}resolveVariables(e,t){return e.replace(/\{\{([^}]+)\.result\}\}/g,(n,s)=>t.get(s)?.result??`[no result from ${s}]`)}waitForTaskCompletion(e,t=6e5){return new Promise(n=>{let s=!1,a=Date.now(),i=()=>{s=!0,I.off("task_status_change",r)},r=o=>{s||o.taskId!==e||(o.newStatus==="completed"?(i(),n("completed")):o.newStatus==="failed"?(i(),n("failed")):o.newStatus==="cancelled"?(i(),n("cancelled")):o.newStatus==="blocked"&&(i(),n("blocked")))};I.on("task_status_change",r);let d=()=>{if(s)return;if(Date.now()-a>t){i(),n("failed");return}let o=T(e);if(!o){i(),n("failed");return}if(o.status==="completed"){i(),n("completed");return}if(o.status==="failed"){i(),n("failed");return}if(o.status==="cancelled"){i(),n("cancelled");return}if(o.status==="blocked"){i(),n("blocked");return}setTimeout(d,5e3)};setTimeout(d,100)})}sleep(e){return new Promise(t=>setTimeout(t,e))}isWorkflowCancelled(e){return R(e)?.status==="cancelled"}finalizeCancelledWorkflow(e,t){let n=R(t.executionId);return y(t.executionId,{status:"cancelled",stepStatuses:n?.stepStatuses??t.stepStatuses,completedAt:n?.completedAt??Date.now(),error:n?.error}),c.info({executionId:t.executionId,templateId:e.id},"Workflow cancelled"),{executionId:t.executionId,status:"cancelled",stepResults:t.stepResults}}};export{R as a,y as b,j as c,q as d,$ as e};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import{f as R,j as z}from"./chunk-RMGBR3XZ.js";import{c as _,e as T,f}from"./chunk-D5LZGIJU.js";import{k as y,l as S,m as c,n as A,o as x,r as H}from"./chunk-U2LBBBWO.js";import{c as B,e as U,f as Y}from"./chunk-FCV2DPZQ.js";var O={};U(O,{seedAdamAutomatorSkills:()=>K});async function K(t){let{ensureRoleWorkspace:r}=await import("./role-workspace-ISGPO25D.js"),{getRole:e}=await import("./roles-WNKRM6FD.js"),{mkdir:a,readFile:n,writeFile:o,access:s}=await import("fs/promises"),{join:l}=await import("path"),d=e(t);if(!d)throw new Error(`Role '${t}' not found`);let u=r(d),m=l(u,".claude","skills");await a(m,{recursive:!0});let i=[{name:"aggregate_feature",description:"Aggregate a feature value over a window",inputs:[{name:"feature_name",desc:"Name of the feature to aggregate"},{name:"aggregation",desc:"Aggregation type: sum | avg | count | latest"},{name:"window_days",desc:"Number of days to look back"},{name:"field",desc:"Event payload field to aggregate"}],body:"Query events via sqlite3, compute aggregation, print numeric result."},{name:"check_threshold",description:"Compare a value vs threshold, emit breach if exceeded",inputs:[{name:"feature",desc:"Feature value (number)"},{name:"operator",desc:"Comparison operator: gt | gte | lt | lte | eq"},{name:"threshold",desc:"Threshold value"},{name:"on_breach_type",desc:"Event type to emit on breach"},{name:"on_breach_payload",desc:"JSON payload for breach event"}],body:"Read feature value, compare against threshold using the operator. On breach, emit new event via emit_event Skill."},{name:"query_events",description:"Range-query events table",inputs:[{name:"type_pattern",desc:"Event type pattern (e.g. 'scheduler.tick')"},{name:"window",desc:"Lookback window in hours"},{name:"limit",desc:"Maximum number of events to return"}],body:"sqlite3 parameterized query against the events table, returning matching rows as JSON."},{name:"query_state",description:"Read latest state_snapshot (not yet available)",inputs:[{name:"select",desc:"Dot-notation path to select (e.g. 'goals.active')"}],body:`Returns { state: null, available: false } \u2014 state_snapshot table not yet built (deferred to Phase 2).
|
|
2
|
+
|
|
3
|
+
When the state_snapshot table is available, this Skill will query it for the latest snapshot matching the select path and return the value.`},{name:"query_goals",description:"Read active goals (goal_graph_nodes not built)",inputs:[{name:"types",desc:"Goal type filter (e.g. 'daily|weekly')"},{name:"status",desc:"Goal status filter: active | completed | paused"}],body:`Returns { goals: [], available: false } \u2014 goal_graph_nodes table not yet built (deferred to Phase 2).
|
|
4
|
+
|
|
5
|
+
When the goal_graph_nodes table is available, this Skill will query the goals table for active goals matching the type and status filters.`},{name:"classify_route",description:"Match event vs rules, print action name",inputs:[{name:"routes_json",desc:"JSON array of routing rules [{pattern, action}]"},{name:"fallback",desc:"Fallback action if no pattern matches"}],body:"Iterate rules in order, first deep-equal pattern match wins, print the action name. If no match, print the fallback."},{name:"persist_artifact",description:"Write content to iCloud output path",inputs:[{name:"artifact_type",desc:"Artifact type (subdirectory name)"},{name:"content",desc:"Content to write"},{name:"user_day",desc:"User day string (e.g. '2026-04-16')"}],body:`Write content to ~/Library/Mobile Documents/com~apple~CloudDocs/Adam/Outputs/<artifact_type>/<user_day>.md
|
|
6
|
+
|
|
7
|
+
NOTE: output_artifacts DB table not yet created (deferred to Phase 2). File write is performed but no DB row is inserted.`},{name:"emit_event",description:"Insert new events row + emit event_fired via OutboundGateway webhook",inputs:[{name:"type",desc:"Event type string (e.g. 'threshold.breach')"},{name:"payload",desc:"Event payload as JSON string"},{name:"dedup_key",desc:"Optional deduplication key"}],body:"POST to the configured webhook URL for the target event def, or use the internal createEvent API to insert a row directly."}];for(let P of i){let k=l(m,P.name),I=l(k,"SKILL.md");try{await s(I);continue}catch{}await a(k,{recursive:!0});let j=J(P);await o(I,j,"utf8")}}function J(t){let r=t.inputs.map(e=>`- ${e.name}: ${e.desc}`).join(`
|
|
8
|
+
`);return`---
|
|
9
|
+
description: ${t.description}
|
|
10
|
+
---
|
|
11
|
+
# ${t.name}
|
|
12
|
+
|
|
13
|
+
## Inputs
|
|
14
|
+
${r}
|
|
15
|
+
|
|
16
|
+
## Instructions
|
|
17
|
+
${t.body}
|
|
18
|
+
`}var F=B(()=>{"use strict"});H();import{v4 as p}from"uuid";z();var C={presetId:"engineer",name:"Engineer",cagPrompt:`Role: General-purpose software engineer.
|
|
19
|
+
Capabilities: Read, write, and edit code; run shell commands; search codebases.
|
|
20
|
+
Approach: Analyze requirements \u2192 implement \u2192 test \u2192 verify. Write tests for new code. Follow existing code patterns.
|
|
21
|
+
Best for: Feature implementation, bug fixes, refactoring, build/deploy scripts.
|
|
22
|
+
Constraints: No web access. Works only within the assigned workspace directory.`,allowedTools:["Read","Write","Edit","Bash","Grep","Glob"],evaluationCriteria:{code_quality:4,test_pass:4,build_success:3},executionMode:"isolated"};var M={presetId:"reviewer",name:"Reviewer",cagPrompt:`Role: Code reviewer and security auditor. READ-ONLY \u2014 you do not modify files.
|
|
23
|
+
Capabilities: Read files, search code, run analysis commands (linters, type-checkers, test suites).
|
|
24
|
+
Approach: Systematically review code for bugs, security issues, performance problems, and style violations. Output structured findings with file:line references.
|
|
25
|
+
Best for: Code review, security audit, dependency audit, test coverage analysis.
|
|
26
|
+
Constraints: No Write or Edit tools. Cannot modify code \u2014 only report findings.`,allowedTools:["Read","Grep","Glob","Bash"],evaluationCriteria:{bug_detection_rate:5,insight_quality:4},executionMode:"isolated"};var N={presetId:"researcher",name:"Researcher",cagPrompt:`Role: Information researcher and analyst with web access.
|
|
27
|
+
Capabilities: Search the web, fetch web pages, read local files, run data processing scripts.
|
|
28
|
+
Approach: Gather information from multiple sources \u2192 cross-reference \u2192 synthesize findings into structured reports.
|
|
29
|
+
Best for: Market research, technical investigation, API documentation lookup, competitive analysis, news monitoring.
|
|
30
|
+
Constraints: No file write/edit permissions. Cannot modify the codebase \u2014 only research and report.`,allowedTools:["WebSearch","WebFetch","Read","Grep","Glob","Bash"],evaluationCriteria:{insight_quality:5,data_accuracy:5},executionMode:"isolated"};var D={presetId:"writer",name:"Writer",cagPrompt:`Role: Content writer and document generator.
|
|
31
|
+
Capabilities: Create and edit text files, read reference material, search for context.
|
|
32
|
+
Approach: Understand the target audience and format \u2192 draft \u2192 refine. Match the project's existing tone and terminology.
|
|
33
|
+
Best for: Documentation, reports, emails, translations, summaries, changelog entries.
|
|
34
|
+
Constraints: No shell command execution. No web access. Works only with file read/write operations.`,allowedTools:["Read","Write","Edit","Grep","Glob"],evaluationCriteria:{content_quality:5,engagement:4},executionMode:"isolated"};var E={presetId:"chat-manager",name:"Chat Manager",cagPrompt:`You are the Chat Manager \u2014 orchestrating conversations and managing agent interactions.
|
|
35
|
+
You coordinate between user requests and agent execution, maintaining conversation context
|
|
36
|
+
and routing tasks to the appropriate roles. You have broad memory access across all roles.`};var w={presetId:"adam-automator",name:"adam-automator",cagPrompt:`Role: Deterministic automation executor.
|
|
37
|
+
Capabilities: Run preset Skills under .claude/skills/. Read/write files in the assigned workspace.
|
|
38
|
+
Approach: When given an event and Skill name, invoke that Skill with the provided inputs. Do not interpret, do not deviate from the instruction, do not chain additional Skills unless told.
|
|
39
|
+
Best for: Event-triggered deterministic logic (feature aggregation, threshold checks, artifact persistence, routing classification, event chaining).
|
|
40
|
+
Constraints: Minimize LLM reasoning \u2014 call the specified Skill and return its output. If the instruction is ambiguous, return an error message instead of guessing.`,allowedTools:["Skill","Read","Write","Edit","Bash","Grep","Glob"],evaluationCriteria:{determinism:5,skill_invocation_rate:5},executionMode:"isolated",model:"claude-haiku-4-5-20251001"};var q={presetId:"feature-miner",name:"Feature Miner",cagPrompt:`Role: Feature request analyst.
|
|
41
|
+
You are given chat session data inline in the prompt (the dispatcher pre-fetched it). You cannot read other sessions.
|
|
42
|
+
|
|
43
|
+
What counts as a feature request:
|
|
44
|
+
- The user explicitly asks for a capability that is not currently provided by the platform
|
|
45
|
+
- The user proposes a new feature or improvement
|
|
46
|
+
- The user describes a workaround they use because a feature is missing
|
|
47
|
+
|
|
48
|
+
What does NOT count as a feature request:
|
|
49
|
+
- Bug reports (something broken that should work)
|
|
50
|
+
- Resolved confusion (user was unsure how to use existing functionality)
|
|
51
|
+
- Off-topic or conversational content
|
|
52
|
+
|
|
53
|
+
For each identified request in the provided chat data, call record_feature_request with content, summary, evidence_quote (verbatim user quote), tags. Do not fabricate.
|
|
54
|
+
If nothing found, record nothing and return "No feature requests found."
|
|
55
|
+
|
|
56
|
+
Dedupe note: if the user later repeats the same request, emit a fresh record \u2014 the reviewer will dismiss duplicates via the /feature-requests page. Do not attempt to guess prior runs.
|
|
57
|
+
|
|
58
|
+
Constraints: your ONLY callable tool is record_feature_request. No file access, no web search, no other channels.`,allowedTools:["mcp__mining-tools__record_feature_request"],disallowedTools:["Write","Edit","Bash","WebSearch","WebFetch","Read","Grep","Glob"],evaluationCriteria:{precision:5,recall:3,false_positive_rate:5},executionMode:"isolated"};var G={presetId:"mistake-digester",name:"Mistake Digester",cagPrompt:`Role: Cross-role failure analyst (notify-only).
|
|
59
|
+
Your task is to call aggregate_mistakes with a 14-day window and all three dimensions.
|
|
60
|
+
Then format the returned patterns as a markdown digest:
|
|
61
|
+
|
|
62
|
+
# Mistake Digest
|
|
63
|
+
- **{dimension_type}: {dimension_value}** \u2014 {count} occurrences across {N} roles
|
|
64
|
+
(first: {firstSeen}, last: {lastSeen})
|
|
65
|
+
|
|
66
|
+
If no patterns are returned, respond with: No mistake patterns this period.
|
|
67
|
+
Do not fabricate patterns.
|
|
68
|
+
|
|
69
|
+
Constraints:
|
|
70
|
+
- Your ONLY callable tool is aggregate_mistakes.
|
|
71
|
+
- Do NOT propose any Role changes, CAG updates, or permission modifications.
|
|
72
|
+
- This role is notify-only: report findings only.
|
|
73
|
+
`,allowedTools:["mcp__audit-tools__aggregate_mistakes"],disallowedTools:["Write","Edit","Bash","WebSearch","WebFetch","Read","Grep","Glob"],evaluationCriteria:{signal_quality:5,conciseness:3,notify_only_compliance:5},executionMode:"isolated"};var $={presetId:"feature-mining",name:"Feature Mining (preset)",description:"Scans recent chat sessions for unmet user needs and records them as feature_requests.",trigger:{type:"manual"},steps:[{id:"mine",prompt:`Analyze the chat session excerpts below (pre-fetched from sessions modified after {{LAST_RUN_AT_HUMAN}}). Identify unmet feature requests and record each via record_feature_request. Return a summary count.
|
|
74
|
+
|
|
75
|
+
=== CHAT EXCERPTS ===
|
|
76
|
+
{{CHAT_DATA}}
|
|
77
|
+
=== END EXCERPTS ===`,roleId:""}],config:{last_run_at:null,max_sessions:15,max_messages_per_session:30,message_char_cap:500},boundRolePresetId:"feature-miner"};var W={presetId:"mistake-digest",name:"Mistake Digest (preset)",description:"Weekly cross-role failure digest. Calls aggregate_mistakes and formats patterns for delivery. Configure deliverTo post-seed to enable channel delivery (left empty at seed since per-user channel target is unknown).",trigger:{type:"cron",cron:"0 8 * * 0"},steps:[{id:"digest",roleId:"",prompt:"Call aggregate_mistakes with default parameters (window 14 days, all 3 dimensions, minOccurrences 3, minRoles 2). Then format the returned patterns as a markdown digest with '# Mistake Digest' as the heading so it self-identifies. If no patterns, return 'No mistake patterns this period.'."}],config:{delivery_message_type:"mistake_digest"},boundRolePresetId:"mistake-digester"};var g=[C,M,N,D,E,w,q,G];var h=[$,W],Pe="role-chat-manager",V=g.map(t=>t.name);function ke(t){return t.source==="system"?!0:t.source==="user"?!1:V.includes(t.name)}function Ie(){v();let t=c(E.name);if(!t)throw new Error("ChatManager role not found after seedPresets()");return t}function Se(){v();let t=c(w.name);if(!t)throw new Error("adam-automator role not found after seedPresets()");return t}function Ae(){return v(),x(void 0,1e3,0)}function xe(){return g}function Ce(){return h}function L(t){return g.find(r=>r.presetId===t)}function X(t){return h.find(r=>r.presetId===t)}function b(t){let r=L(t);return r?c(r.name)?.id??"":""}function v(){let t=0,r=0;for(let e of g){if(c(e.name))continue;let o={id:e.presetId==="chat-manager"?"role-chat-manager":`role-${p().slice(0,8)}`,name:e.name,cagPrompt:e.cagPrompt,learnedRules:[],memoryStreamId:`mem-${p().slice(0,8)}`,status:"active",preferences:{},createdAt:Date.now(),allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,evaluationCriteria:e.evaluationCriteria,executionMode:e.executionMode,model:e.model,source:"system",presetId:e.presetId};y(o),R(o),console.info(`[presets] Seeded Role preset: ${e.name} (${e.presetId})`),e.presetId==="adam-automator"&&Z(o.id).catch(s=>{console.warn(`[presets] Failed to seed adam-automator Skills: ${s}`)}),t++}for(let e of h){if(f().find(s=>s.presetId===e.presetId))continue;let n=b(e.boundRolePresetId),o={id:`tmpl-${p().slice(0,8)}`,name:e.name,description:e.description,trigger:e.trigger,steps:e.steps.map(s=>({...s,roleId:s.roleId===""?n:s.roleId})),config:e.config,enabled:!0,createdAt:Date.now(),isPreset:!0,presetId:e.presetId};_(o),r++,console.info(`[presets] Seeded Template preset: ${e.name} (${e.presetId})`)}return{rolesCreated:t,templatesCreated:r}}function Q(t,r){if(t==="role"){let e=L(r);if(!e)return{ok:!1,reason:"preset not found"};let a=c(e.name);if(a)A(a.id,{cagPrompt:e.cagPrompt,allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,evaluationCriteria:e.evaluationCriteria,executionMode:e.executionMode,model:e.model,source:"system",presetId:e.presetId}),console.info(`[presets] Restored Role preset: ${e.name} (${r})`);else{let n=e.presetId==="chat-manager"?"role-chat-manager":`role-${p().slice(0,8)}`,o={id:n,name:e.name,cagPrompt:e.cagPrompt,learnedRules:[],memoryStreamId:`mem-${p().slice(0,8)}`,status:"active",preferences:{},createdAt:Date.now(),allowedTools:e.allowedTools,disallowedTools:e.disallowedTools,evaluationCriteria:e.evaluationCriteria,executionMode:e.executionMode,model:e.model,source:"system",presetId:e.presetId};y(o),R(o),console.info(`[presets] Re-created Role preset via restorePreset: ${e.name} (${r})`);let s=n;for(let l of h){if(l.boundRolePresetId!==r)continue;let d=f().find(i=>i.presetId===l.presetId);if(!d)continue;let u=!1,m=d.steps.map(i=>!i.roleId||S(i.roleId)?i:(u=!0,{...i,roleId:s}));u&&(T(d.id,{steps:m}),console.info(`[presets] Re-linked orphaned step roleIds on Template ${l.presetId} \u2192 Role ${r}`))}}return{ok:!0}}if(t==="template"){let e=X(r);if(!e)return{ok:!1,reason:"preset not found"};let a=b(e.boundRolePresetId);if(!a){if(!Q("role",e.boundRolePresetId).ok)return{ok:!1,reason:`bound role preset missing: ${e.boundRolePresetId}`};if(a=b(e.boundRolePresetId),!a)return{ok:!1,reason:`could not resolve bound role id after restore: ${e.boundRolePresetId}`}}let n=f().find(o=>o.presetId===e.presetId);if(n)T(n.id,{name:e.name,description:e.description,trigger:e.trigger,steps:e.steps.map(o=>({...o,roleId:o.roleId===""?a:o.roleId})),config:e.config,isPreset:!0,presetId:e.presetId}),console.info(`[presets] Restored Template preset: ${e.name} (${r})`);else{let o={id:`tmpl-${p().slice(0,8)}`,name:e.name,description:e.description,trigger:e.trigger,steps:e.steps.map(s=>({...s,roleId:s.roleId===""?a:s.roleId})),config:e.config,enabled:!0,createdAt:Date.now(),isPreset:!0,presetId:e.presetId};_(o),console.info(`[presets] Re-created Template preset via restorePreset: ${e.name} (${r})`)}return{ok:!0}}return{ok:!1,reason:"invalid type"}}async function Z(t){try{let{seedAdamAutomatorSkills:r}=(F(),Y(O));await r(t)}catch{console.warn(`[presets] seedAdamAutomatorSkills: module unavailable for roleId=${t}`)}}export{w as a,g as b,h as c,Pe as d,V as e,ke as f,Ie as g,Se as h,Ae as i,xe as j,Ce as k,L as l,X as m,v as n,Q as o};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as i,d as u}from"./chunk-
|
|
1
|
+
import{b as i,d as u}from"./chunk-AQO6IIHV.js";u();function c(t){return{id:t.id,status:t.status,source:{type:t.source_type,channelId:t.source_channel_id??void 0,chatId:t.source_chat_id??void 0},title:t.title??void 0,createdAt:t.created_at,lastActiveAt:t.last_active_at,archivedAt:t.archived_at??void 0,messageCount:t.message_count}}function d(t){i().prepare(`
|
|
2
2
|
INSERT INTO chat_sessions (id, status, source_type, source_channel_id, source_chat_id,
|
|
3
3
|
title, created_at, last_active_at, archived_at, message_count)
|
|
4
4
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as a}from"./chunk-
|
|
1
|
+
import{d as a}from"./chunk-OFTIPZTH.js";function s(){try{let t=a().server?.timezone;return t==="system"||!t?void 0:t}catch{return}}function p(t){let e=s();return new Date(t).toLocaleTimeString(void 0,e?{timeZone:e}:void 0)}function l(t){let e=t??s(),r=new Date,i=r.toLocaleDateString("en-CA",e?{timeZone:e}:void 0);if(e){let n=(new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"shortOffset"}).formatToParts(r).find(o=>o.type==="timeZoneName")?.value??"").match(/GMT([+-]?)(\d+)(?::(\d+))?/);if(n){let o=n[1]==="-"?-1:1,m=parseInt(n[2],10),c=parseInt(n[3]??"0",10),f=o*(m*60+c)*6e4;return new Date(`${i}T00:00:00Z`).getTime()-f}}return new Date(`${i}T00:00:00`).getTime()}export{p as a,l as b};
|