agentlas 1.0.12 → 1.0.14
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/CHANGELOG.md +39 -0
- package/README.md +4 -2
- package/bin/agentlas.cjs +17 -3
- package/engine/agentlas-config.cjs +25 -18
- package/engine/agentlas-core-harness.cjs +14 -1
- package/engine/agentlas-i18n.cjs +2 -0
- package/engine/agentlas-input.cjs +1 -1
- package/engine/agentlas-memory-governance.cjs +10 -0
- package/engine/agentlas-onboard.cjs +22 -5
- package/engine/agentlas-sqlite-policy.cjs +18 -7
- package/engine/agentlas-workforce.cjs +136 -19
- package/engine/agentlas-workload-routing.cjs +32 -4
- package/engine/agentlas.cjs +8 -0
- package/engine/automation/daemon.cjs +67 -30
- package/engine/automation/schedule.cjs +16 -0
- package/engine/automation/store.cjs +70 -12
- package/engine/bootstrap-schema.sql +788 -53
- package/engine/commands/automation.cjs +8 -0
- package/engine/commands/chats.cjs +6 -1
- package/engine/commands/firm.cjs +7 -0
- package/engine/commands/help.cjs +23 -2
- package/engine/commands/hep-cloud.cjs +31 -0
- package/engine/commands/hep-hub.cjs +30 -0
- package/engine/commands/hep-local.cjs +32 -0
- package/engine/commands/hep-network.cjs +43 -0
- package/engine/commands/index.cjs +38 -7
- package/engine/commands/open.cjs +5 -1
- package/engine/commands/run.cjs +12 -2
- package/engine/commands/setup.cjs +12 -11
- package/engine/commands/storm.cjs +5 -9
- package/engine/commands/swarm.cjs +4 -4
- package/engine/commands/uninstall.cjs +36 -2
- package/engine/commands/version.cjs +29 -0
- package/engine/commands/workforce.cjs +10 -10
- package/engine/core/schema-ensure.cjs +75 -0
- package/engine/experience/variant.cjs +46 -2
- package/engine/hephaestus/runtime.cjs +7 -0
- package/engine/memory-cli/curate.cjs +3 -7
- package/engine/project/memory-context.cjs +3 -7
- package/engine/project/state.cjs +7 -6
- package/engine/sessions/orchestrator.cjs +41 -3
- package/engine/sessions/prompt.cjs +4 -7
- package/engine/sessions/session.cjs +32 -0
- package/engine/storm/swarm.cjs +12 -0
- package/engine/ui/palette.cjs +14 -2
- package/engine/ui/renderer.cjs +37 -0
- package/engine/ui/repl.cjs +7 -1
- package/engine/workforce/concurrency.cjs +41 -0
- package/package.json +1 -1
|
@@ -1,34 +1,10 @@
|
|
|
1
|
-
-- Agentlas 첫 실행 부트스트랩 스키마 (생성: 2026-07-
|
|
2
|
-
-- 소스 DB user_version=
|
|
3
|
-
PRAGMA user_version=
|
|
1
|
+
-- Agentlas 첫 실행 부트스트랩 스키마 (생성: 2026-07-28T08:31:20Z)
|
|
2
|
+
-- 소스 DB user_version=81 — 앱이 나중에 설치되면 여기서부터 마이그레이션한다.
|
|
3
|
+
PRAGMA user_version=81;
|
|
4
4
|
CREATE TABLE active_runtime (
|
|
5
5
|
id INTEGER PRIMARY KEY CHECK(id = 1),
|
|
6
6
|
kind TEXT NOT NULL
|
|
7
7
|
, backend TEXT, source TEXT, model TEXT, long_context INTEGER NOT NULL DEFAULT 0);
|
|
8
|
-
CREATE TABLE model_roles (
|
|
9
|
-
role TEXT PRIMARY KEY CHECK(role IN ('orchestrator','worker')),
|
|
10
|
-
kind TEXT NOT NULL,
|
|
11
|
-
backend TEXT,
|
|
12
|
-
source TEXT,
|
|
13
|
-
model TEXT,
|
|
14
|
-
effort TEXT,
|
|
15
|
-
long_context INTEGER NOT NULL DEFAULT 0 CHECK(long_context IN (0,1)),
|
|
16
|
-
inherit INTEGER NOT NULL DEFAULT 0 CHECK(inherit IN (0,1)),
|
|
17
|
-
updated_at TEXT NOT NULL,
|
|
18
|
-
CHECK(role = 'worker' OR inherit = 0)
|
|
19
|
-
);
|
|
20
|
-
CREATE TABLE model_role_members (
|
|
21
|
-
role TEXT NOT NULL CHECK(role IN ('orchestrator','worker')),
|
|
22
|
-
position INTEGER NOT NULL CHECK(position >= 1),
|
|
23
|
-
kind TEXT NOT NULL,
|
|
24
|
-
backend TEXT,
|
|
25
|
-
source TEXT,
|
|
26
|
-
model TEXT,
|
|
27
|
-
effort TEXT,
|
|
28
|
-
long_context INTEGER NOT NULL DEFAULT 0 CHECK(long_context IN (0,1)),
|
|
29
|
-
updated_at TEXT NOT NULL,
|
|
30
|
-
PRIMARY KEY(role, position)
|
|
31
|
-
);
|
|
32
8
|
CREATE TABLE installed_agents (
|
|
33
9
|
id TEXT PRIMARY KEY,
|
|
34
10
|
slug TEXT UNIQUE NOT NULL,
|
|
@@ -40,7 +16,7 @@ CREATE TABLE installed_agents (
|
|
|
40
16
|
trust_grade TEXT NOT NULL,
|
|
41
17
|
installed_at TEXT NOT NULL,
|
|
42
18
|
tone TEXT NOT NULL
|
|
43
|
-
, env_requirements_json TEXT NOT NULL DEFAULT '[]', name_en TEXT NOT NULL DEFAULT '', tagline_en TEXT NOT NULL DEFAULT '', builtin INTEGER NOT NULL DEFAULT 0, role TEXT, visibility TEXT NOT NULL DEFAULT 'visible' CHECK(visibility IN ('visible','background','private')), entity_kind TEXT);
|
|
19
|
+
, env_requirements_json TEXT NOT NULL DEFAULT '[]', name_en TEXT NOT NULL DEFAULT '', tagline_en TEXT NOT NULL DEFAULT '', builtin INTEGER NOT NULL DEFAULT 0, role TEXT, visibility TEXT NOT NULL DEFAULT 'visible' CHECK(visibility IN ('visible','background','private')), entity_kind TEXT, local_display_name TEXT, bookmarked_at TEXT NULL, parent_team_id TEXT NULL);
|
|
44
20
|
CREATE TABLE projects (
|
|
45
21
|
id TEXT PRIMARY KEY,
|
|
46
22
|
name TEXT NOT NULL,
|
|
@@ -55,9 +31,9 @@ CREATE TABLE chats (
|
|
|
55
31
|
id TEXT PRIMARY KEY,
|
|
56
32
|
project_id TEXT,
|
|
57
33
|
agent_id TEXT NOT NULL,
|
|
58
|
-
title TEXT NOT NULL DEFAULT '
|
|
34
|
+
title TEXT NOT NULL DEFAULT '새 채팅',
|
|
59
35
|
created_at TEXT NOT NULL,
|
|
60
|
-
updated_at TEXT NOT NULL, firm_id TEXT REFERENCES firms(id) ON DELETE SET NULL, archived_at TEXT, working_folder TEXT, kind TEXT NOT NULL DEFAULT 'user', parent_chat_id TEXT, used_at TEXT, agent_group_id TEXT REFERENCES agent_groups(id) ON DELETE SET NULL, continuous_mode INTEGER NOT NULL DEFAULT 0, swarm_mode INTEGER NOT NULL DEFAULT 0,
|
|
36
|
+
updated_at TEXT NOT NULL, firm_id TEXT REFERENCES firms(id) ON DELETE SET NULL, archived_at TEXT, working_folder TEXT, kind TEXT NOT NULL DEFAULT 'user', parent_chat_id TEXT, used_at TEXT, agent_group_id TEXT REFERENCES agent_groups(id) ON DELETE SET NULL, continuous_mode INTEGER NOT NULL DEFAULT 0, swarm_mode INTEGER NOT NULL DEFAULT 0, last_viewed_at TEXT, hired_agents TEXT, origin_surface TEXT NOT NULL DEFAULT 'work', runtime_selection_json TEXT,
|
|
61
37
|
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE SET NULL,
|
|
62
38
|
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE
|
|
63
39
|
);
|
|
@@ -74,18 +50,6 @@ CREATE TABLE chat_messages (
|
|
|
74
50
|
);
|
|
75
51
|
CREATE INDEX idx_chat_messages_chat_created
|
|
76
52
|
ON chat_messages(chat_id, created_at);
|
|
77
|
-
CREATE TABLE firms (
|
|
78
|
-
id TEXT PRIMARY KEY,
|
|
79
|
-
slug TEXT UNIQUE NOT NULL,
|
|
80
|
-
name TEXT NOT NULL,
|
|
81
|
-
tagline TEXT NOT NULL,
|
|
82
|
-
persona TEXT NOT NULL,
|
|
83
|
-
ceo_agent_id TEXT NOT NULL,
|
|
84
|
-
org_chart_json TEXT NOT NULL,
|
|
85
|
-
installed_at TEXT NOT NULL, name_en TEXT NOT NULL DEFAULT '', tagline_en TEXT NOT NULL DEFAULT '',
|
|
86
|
-
FOREIGN KEY(ceo_agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE
|
|
87
|
-
);
|
|
88
|
-
CREATE INDEX idx_firms_installed ON firms(installed_at DESC);
|
|
89
53
|
CREATE INDEX idx_chats_firm_updated ON chats(firm_id, updated_at DESC);
|
|
90
54
|
CREATE INDEX idx_chats_archived_updated ON chats(archived_at, updated_at DESC);
|
|
91
55
|
CREATE TABLE mcp_servers (
|
|
@@ -127,7 +91,7 @@ CREATE TABLE memory_entries (
|
|
|
127
91
|
evidence_json TEXT NOT NULL DEFAULT '[]',
|
|
128
92
|
superseded_at TEXT,
|
|
129
93
|
created_at TEXT NOT NULL
|
|
130
|
-
, context_json TEXT NOT NULL DEFAULT '{}');
|
|
94
|
+
, context_json TEXT NOT NULL DEFAULT '{}', embedding_model TEXT, embedding_adapter TEXT, embedding_model_sha256 TEXT, embedding_content_hash TEXT, embedding_dimensions INTEGER, embedding_json TEXT);
|
|
131
95
|
CREATE INDEX idx_memory_path ON memory_entries(project_path, superseded_at);
|
|
132
96
|
CREATE INDEX idx_memory_scope ON memory_entries(scope, superseded_at);
|
|
133
97
|
CREATE INDEX idx_memory_chat ON memory_entries(chat_id);
|
|
@@ -152,7 +116,7 @@ CREATE TABLE automations (
|
|
|
152
116
|
last_run_at TEXT,
|
|
153
117
|
next_run_at TEXT,
|
|
154
118
|
created_at TEXT NOT NULL
|
|
155
|
-
, graph_json TEXT, schedule_json TEXT, timezone TEXT, end_at TEXT, max_runs INTEGER, run_count INTEGER NOT NULL DEFAULT 0, trigger_type TEXT NOT NULL DEFAULT 'schedule', trigger_json TEXT, claimed_at TEXT, lease_owner TEXT, tool_mode TEXT NOT NULL DEFAULT 'auto', hub_mode TEXT NOT NULL DEFAULT 'hub-allowed');
|
|
119
|
+
, graph_json TEXT, schedule_json TEXT, timezone TEXT, end_at TEXT, max_runs INTEGER, run_count INTEGER NOT NULL DEFAULT 0, trigger_type TEXT NOT NULL DEFAULT 'schedule', trigger_json TEXT, claimed_at TEXT, lease_owner TEXT, tool_mode TEXT NOT NULL DEFAULT 'auto', hub_mode TEXT NOT NULL DEFAULT 'hub-allowed', execution_permission TEXT NOT NULL DEFAULT 'write' CHECK(execution_permission IN ('read','write')), target_version TEXT, runtime_selection_json TEXT);
|
|
156
120
|
CREATE INDEX idx_automations_due ON automations(enabled, next_run_at);
|
|
157
121
|
CREATE TABLE agent_apps (
|
|
158
122
|
id TEXT PRIMARY KEY,
|
|
@@ -443,7 +407,7 @@ CREATE TABLE automation_runs (
|
|
|
443
407
|
started_at TEXT,
|
|
444
408
|
status TEXT,
|
|
445
409
|
node_states_json TEXT
|
|
446
|
-
);
|
|
410
|
+
, last_activity_at TEXT, occurrence_id TEXT, graph_digest TEXT, checkpoint_json TEXT, resume_of_run_id TEXT);
|
|
447
411
|
CREATE INDEX idx_automation_runs_auto
|
|
448
412
|
ON automation_runs(automation_id, started_at);
|
|
449
413
|
CREATE TRIGGER agentlas_auto_cua_social_insert
|
|
@@ -511,7 +475,7 @@ CREATE TABLE agent_evolution_proposals (
|
|
|
511
475
|
applied_at TEXT,
|
|
512
476
|
measured_at TEXT,
|
|
513
477
|
rolled_back_at TEXT
|
|
514
|
-
);
|
|
478
|
+
, operation_json TEXT);
|
|
515
479
|
CREATE INDEX idx_agent_evolution_agent_status
|
|
516
480
|
ON agent_evolution_proposals(agent_id, status, updated_at DESC);
|
|
517
481
|
CREATE INDEX idx_agent_evolution_created
|
|
@@ -578,15 +542,786 @@ CREATE INDEX idx_telegram_bindings_chat
|
|
|
578
542
|
ON telegram_bindings(telegram_chat_id);
|
|
579
543
|
CREATE INDEX idx_telegram_bindings_enabled
|
|
580
544
|
ON telegram_bindings(enabled, status);
|
|
581
|
-
CREATE
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
545
|
+
CREATE INDEX idx_telegram_bindings_automation_report
|
|
546
|
+
ON telegram_bindings(automation_report_enabled, enabled, telegram_chat_id);
|
|
547
|
+
CREATE TABLE browser_sites (
|
|
548
|
+
id TEXT PRIMARY KEY,
|
|
549
|
+
site TEXT NOT NULL UNIQUE,
|
|
550
|
+
label TEXT,
|
|
551
|
+
username TEXT,
|
|
552
|
+
has_password INTEGER NOT NULL DEFAULT 0,
|
|
553
|
+
created_at TEXT NOT NULL,
|
|
554
|
+
updated_at TEXT NOT NULL
|
|
555
|
+
);
|
|
556
|
+
CREATE TABLE browser_sessions (
|
|
557
|
+
id TEXT PRIMARY KEY,
|
|
558
|
+
site TEXT NOT NULL,
|
|
559
|
+
status TEXT NOT NULL DEFAULT 'none',
|
|
560
|
+
captured_at TEXT,
|
|
561
|
+
note TEXT,
|
|
562
|
+
FOREIGN KEY(site) REFERENCES browser_sites(site) ON DELETE CASCADE
|
|
563
|
+
);
|
|
564
|
+
CREATE UNIQUE INDEX idx_browser_sessions_site ON browser_sessions(site);
|
|
565
|
+
CREATE TABLE browser_permissions (
|
|
566
|
+
id TEXT PRIMARY KEY,
|
|
567
|
+
site TEXT NOT NULL,
|
|
568
|
+
action_type TEXT NOT NULL,
|
|
569
|
+
decision TEXT NOT NULL,
|
|
570
|
+
created_at TEXT NOT NULL
|
|
571
|
+
);
|
|
572
|
+
CREATE UNIQUE INDEX idx_browser_perm_site_action
|
|
573
|
+
ON browser_permissions(site, action_type);
|
|
574
|
+
CREATE TABLE browser_action_logs (
|
|
575
|
+
id TEXT PRIMARY KEY,
|
|
576
|
+
ts TEXT NOT NULL,
|
|
577
|
+
site TEXT,
|
|
578
|
+
action TEXT NOT NULL,
|
|
579
|
+
target TEXT,
|
|
580
|
+
result TEXT,
|
|
581
|
+
approval TEXT,
|
|
582
|
+
meta TEXT
|
|
583
|
+
);
|
|
584
|
+
CREATE INDEX idx_browser_logs_ts ON browser_action_logs(ts DESC);
|
|
585
|
+
CREATE TABLE IF NOT EXISTS "firms" (
|
|
586
|
+
id TEXT PRIMARY KEY,
|
|
587
|
+
slug TEXT UNIQUE NOT NULL,
|
|
588
|
+
name TEXT NOT NULL,
|
|
589
|
+
name_en TEXT NOT NULL DEFAULT '',
|
|
590
|
+
tagline TEXT NOT NULL,
|
|
591
|
+
tagline_en TEXT NOT NULL DEFAULT '',
|
|
592
|
+
persona TEXT NOT NULL,
|
|
593
|
+
ceo_agent_id TEXT NOT NULL,
|
|
594
|
+
org_chart_json TEXT NOT NULL,
|
|
595
|
+
installed_at TEXT NOT NULL,
|
|
596
|
+
FOREIGN KEY(ceo_agent_id) REFERENCES installed_agents(id) ON DELETE RESTRICT
|
|
597
|
+
);
|
|
598
|
+
CREATE INDEX idx_firms_installed ON firms(installed_at DESC);
|
|
599
|
+
CREATE TABLE agent_asset_versions (
|
|
600
|
+
agent_id TEXT PRIMARY KEY,
|
|
601
|
+
version INTEGER NOT NULL,
|
|
602
|
+
package_hash TEXT NOT NULL,
|
|
603
|
+
updated_at TEXT NOT NULL,
|
|
604
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE
|
|
605
|
+
);
|
|
606
|
+
CREATE TABLE agent_evolution_receipts (
|
|
607
|
+
id TEXT PRIMARY KEY,
|
|
608
|
+
proposal_id TEXT NOT NULL,
|
|
609
|
+
agent_id TEXT NOT NULL,
|
|
610
|
+
action TEXT NOT NULL,
|
|
611
|
+
target_path TEXT NOT NULL,
|
|
612
|
+
version_before INTEGER NOT NULL,
|
|
613
|
+
version_after INTEGER NOT NULL,
|
|
614
|
+
target_hash_before TEXT NOT NULL,
|
|
615
|
+
target_hash_after TEXT NOT NULL,
|
|
616
|
+
package_hash_before TEXT NOT NULL,
|
|
617
|
+
package_hash_after TEXT NOT NULL,
|
|
618
|
+
created_at TEXT NOT NULL,
|
|
619
|
+
FOREIGN KEY(proposal_id) REFERENCES agent_evolution_proposals(id) ON DELETE CASCADE,
|
|
620
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE,
|
|
621
|
+
UNIQUE(proposal_id, action)
|
|
586
622
|
);
|
|
623
|
+
CREATE INDEX idx_agent_evolution_receipts_agent
|
|
624
|
+
ON agent_evolution_receipts(agent_id, created_at DESC);
|
|
625
|
+
CREATE INDEX idx_agent_evolution_receipts_proposal
|
|
626
|
+
ON agent_evolution_receipts(proposal_id, created_at ASC);
|
|
627
|
+
CREATE TABLE hub_agent_bookmarks (
|
|
628
|
+
workspace_id TEXT NOT NULL,
|
|
629
|
+
slug TEXT NOT NULL,
|
|
630
|
+
entity_kind TEXT NOT NULL DEFAULT 'agent',
|
|
631
|
+
listing_json TEXT NOT NULL,
|
|
632
|
+
bookmarked_at TEXT NOT NULL,
|
|
633
|
+
server_updated_at TEXT,
|
|
634
|
+
sync_state TEXT NOT NULL DEFAULT 'clean'
|
|
635
|
+
CHECK(sync_state IN ('clean','pending_upsert','pending_delete')),
|
|
636
|
+
last_sync_error TEXT,
|
|
637
|
+
claim_workspace_id TEXT,
|
|
638
|
+
PRIMARY KEY(workspace_id, entity_kind, slug)
|
|
639
|
+
);
|
|
640
|
+
CREATE INDEX idx_hub_agent_bookmarks_workspace_time
|
|
641
|
+
ON hub_agent_bookmarks(workspace_id, bookmarked_at DESC);
|
|
642
|
+
CREATE INDEX idx_hub_agent_bookmarks_outbox
|
|
643
|
+
ON hub_agent_bookmarks(workspace_id, sync_state, bookmarked_at ASC);
|
|
587
644
|
CREATE INDEX idx_hub_agent_bookmarks_time
|
|
588
645
|
ON hub_agent_bookmarks(bookmarked_at DESC);
|
|
589
646
|
CREATE INDEX idx_hub_agent_bookmarks_kind
|
|
590
647
|
ON hub_agent_bookmarks(entity_kind, bookmarked_at DESC);
|
|
591
|
-
CREATE
|
|
592
|
-
|
|
648
|
+
CREATE TABLE experience_packs (
|
|
649
|
+
id TEXT PRIMARY KEY,
|
|
650
|
+
agent_id TEXT NOT NULL,
|
|
651
|
+
project_id TEXT,
|
|
652
|
+
project_path TEXT,
|
|
653
|
+
project_scope_key TEXT NOT NULL,
|
|
654
|
+
environment_key TEXT NOT NULL,
|
|
655
|
+
name TEXT NOT NULL,
|
|
656
|
+
description TEXT NOT NULL DEFAULT '',
|
|
657
|
+
base_package_hash TEXT,
|
|
658
|
+
status TEXT NOT NULL DEFAULT 'active'
|
|
659
|
+
CHECK(status IN ('active','archived')),
|
|
660
|
+
created_at TEXT NOT NULL,
|
|
661
|
+
updated_at TEXT NOT NULL, mcp_requirements_json TEXT NOT NULL DEFAULT '[]', base_agent_definition_id TEXT, base_agent_release_id TEXT, base_package_hash_version TEXT, environment_profile_json TEXT, auto_managed INTEGER NOT NULL DEFAULT 0 CHECK(auto_managed IN (0,1)),
|
|
662
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE
|
|
663
|
+
);
|
|
664
|
+
CREATE INDEX idx_experience_packs_agent_scope
|
|
665
|
+
ON experience_packs(agent_id, project_scope_key, environment_key, updated_at DESC);
|
|
666
|
+
CREATE TABLE experience_candidates (
|
|
667
|
+
id TEXT PRIMARY KEY,
|
|
668
|
+
pack_id TEXT NOT NULL,
|
|
669
|
+
agent_id TEXT NOT NULL,
|
|
670
|
+
project_scope_key TEXT NOT NULL,
|
|
671
|
+
environment_key TEXT NOT NULL,
|
|
672
|
+
source_memory_id TEXT NOT NULL,
|
|
673
|
+
summary TEXT NOT NULL,
|
|
674
|
+
task_terms_json TEXT NOT NULL DEFAULT '[]',
|
|
675
|
+
sensitivity TEXT NOT NULL
|
|
676
|
+
CHECK(sensitivity IN ('public','internal','private')),
|
|
677
|
+
confidence TEXT NOT NULL
|
|
678
|
+
CHECK(confidence IN ('high','medium','low')),
|
|
679
|
+
status TEXT NOT NULL DEFAULT 'candidate'
|
|
680
|
+
CHECK(status IN ('candidate','promoted','rejected')),
|
|
681
|
+
outcome_status TEXT NOT NULL DEFAULT 'unverified'
|
|
682
|
+
CHECK(outcome_status IN ('unverified','attested','verified','failed')),
|
|
683
|
+
public_safe INTEGER NOT NULL DEFAULT 0 CHECK(public_safe IN (0,1)),
|
|
684
|
+
created_at TEXT NOT NULL,
|
|
685
|
+
updated_at TEXT NOT NULL,
|
|
686
|
+
promoted_at TEXT, auto_managed INTEGER NOT NULL DEFAULT 0 CHECK(auto_managed IN (0,1)), embedding_model TEXT, embedding_adapter TEXT, embedding_model_sha256 TEXT, embedding_content_hash TEXT, embedding_dimensions INTEGER, embedding_json TEXT,
|
|
687
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
688
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE,
|
|
689
|
+
UNIQUE(pack_id, source_memory_id)
|
|
690
|
+
);
|
|
691
|
+
CREATE INDEX idx_experience_candidates_retrieval
|
|
692
|
+
ON experience_candidates(agent_id, project_scope_key, environment_key, status, outcome_status, updated_at DESC);
|
|
693
|
+
CREATE INDEX idx_experience_candidates_pack
|
|
694
|
+
ON experience_candidates(pack_id, created_at DESC);
|
|
695
|
+
CREATE TABLE experience_promotion_receipts (
|
|
696
|
+
id TEXT PRIMARY KEY,
|
|
697
|
+
pack_id TEXT NOT NULL,
|
|
698
|
+
candidate_id TEXT NOT NULL,
|
|
699
|
+
agent_id TEXT NOT NULL,
|
|
700
|
+
action TEXT NOT NULL CHECK(action = 'promote'),
|
|
701
|
+
explicit_consent INTEGER NOT NULL CHECK(explicit_consent = 1),
|
|
702
|
+
verification_status TEXT NOT NULL CHECK(verification_status IN ('attested','verified')),
|
|
703
|
+
verification_method TEXT NOT NULL
|
|
704
|
+
CHECK(verification_method IN ('user-attested','local-run-receipt','local-test-receipt')),
|
|
705
|
+
evidence_hash TEXT NOT NULL,
|
|
706
|
+
public_safe INTEGER NOT NULL CHECK(public_safe IN (0,1)),
|
|
707
|
+
created_at TEXT NOT NULL,
|
|
708
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
709
|
+
FOREIGN KEY(candidate_id) REFERENCES experience_candidates(id) ON DELETE CASCADE,
|
|
710
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE,
|
|
711
|
+
UNIQUE(candidate_id, action)
|
|
712
|
+
);
|
|
713
|
+
CREATE INDEX idx_experience_receipts_pack
|
|
714
|
+
ON experience_promotion_receipts(pack_id, created_at DESC);
|
|
715
|
+
CREATE TABLE experience_export_intents (
|
|
716
|
+
id TEXT PRIMARY KEY,
|
|
717
|
+
pack_id TEXT NOT NULL,
|
|
718
|
+
agent_id TEXT NOT NULL,
|
|
719
|
+
visibility TEXT NOT NULL CHECK(visibility IN ('private','public')),
|
|
720
|
+
status TEXT NOT NULL DEFAULT 'local_intent' CHECK(status = 'local_intent'),
|
|
721
|
+
manifest_hash TEXT NOT NULL,
|
|
722
|
+
created_at TEXT NOT NULL,
|
|
723
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
724
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE
|
|
725
|
+
);
|
|
726
|
+
CREATE INDEX idx_experience_export_intents_pack
|
|
727
|
+
ON experience_export_intents(pack_id, created_at DESC);
|
|
728
|
+
CREATE TABLE experience_lineage_events (
|
|
729
|
+
id TEXT PRIMARY KEY,
|
|
730
|
+
pack_id TEXT NOT NULL,
|
|
731
|
+
release_id TEXT NOT NULL,
|
|
732
|
+
event_type TEXT NOT NULL CHECK(event_type IN ('promotion','export-intent')),
|
|
733
|
+
base_package_hash TEXT NOT NULL,
|
|
734
|
+
project_scope_key TEXT NOT NULL,
|
|
735
|
+
environment_key TEXT NOT NULL,
|
|
736
|
+
item_ids_json TEXT NOT NULL DEFAULT '[]',
|
|
737
|
+
task_bindings_json TEXT NOT NULL DEFAULT '[]',
|
|
738
|
+
mcp_requirements_json TEXT NOT NULL DEFAULT '[]',
|
|
739
|
+
evidence_bindings_json TEXT NOT NULL DEFAULT '[]',
|
|
740
|
+
supersedes_release_id TEXT,
|
|
741
|
+
source_fingerprint TEXT NOT NULL,
|
|
742
|
+
created_at TEXT NOT NULL,
|
|
743
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
744
|
+
UNIQUE(pack_id, release_id, event_type)
|
|
745
|
+
);
|
|
746
|
+
CREATE INDEX idx_experience_lineage_pack_created
|
|
747
|
+
ON experience_lineage_events(pack_id, created_at ASC, id ASC);
|
|
748
|
+
CREATE TABLE experience_relation_nodes (
|
|
749
|
+
node_id TEXT PRIMARY KEY,
|
|
750
|
+
pack_id TEXT NOT NULL,
|
|
751
|
+
node_type TEXT NOT NULL
|
|
752
|
+
CHECK(node_type IN ('Pack','Release','Item','TaskTag','Environment','MCPRequirement','EvidenceReceipt')),
|
|
753
|
+
entity_ref TEXT NOT NULL,
|
|
754
|
+
project_scope_key TEXT NOT NULL,
|
|
755
|
+
environment_key TEXT NOT NULL,
|
|
756
|
+
base_package_hash TEXT NOT NULL,
|
|
757
|
+
normalized_value TEXT,
|
|
758
|
+
payload_json TEXT NOT NULL DEFAULT '{}',
|
|
759
|
+
source_fingerprint TEXT NOT NULL,
|
|
760
|
+
rebuilt_at TEXT NOT NULL,
|
|
761
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
762
|
+
UNIQUE(pack_id, node_type, entity_ref)
|
|
763
|
+
);
|
|
764
|
+
CREATE INDEX idx_experience_relation_nodes_scope
|
|
765
|
+
ON experience_relation_nodes(project_scope_key, environment_key, base_package_hash, node_type);
|
|
766
|
+
CREATE INDEX idx_experience_relation_nodes_pack_type
|
|
767
|
+
ON experience_relation_nodes(pack_id, node_type, normalized_value);
|
|
768
|
+
CREATE TABLE experience_relation_index_state (
|
|
769
|
+
scope_key TEXT PRIMARY KEY CHECK(scope_key = 'shared'),
|
|
770
|
+
source_fingerprint TEXT NOT NULL,
|
|
771
|
+
rebuilt_at TEXT NOT NULL,
|
|
772
|
+
node_count INTEGER NOT NULL,
|
|
773
|
+
edge_count INTEGER NOT NULL
|
|
774
|
+
);
|
|
775
|
+
CREATE TABLE experience_cloud_uploads (
|
|
776
|
+
id TEXT PRIMARY KEY,
|
|
777
|
+
pack_id TEXT NOT NULL,
|
|
778
|
+
requested_visibility TEXT NOT NULL
|
|
779
|
+
CHECK(requested_visibility IN ('private','public')),
|
|
780
|
+
bundle_id TEXT NOT NULL,
|
|
781
|
+
bundle_hash TEXT NOT NULL,
|
|
782
|
+
canonical_bundle_json TEXT NOT NULL,
|
|
783
|
+
idempotency_key TEXT NOT NULL UNIQUE,
|
|
784
|
+
remote_upload_id TEXT,
|
|
785
|
+
remote_revision TEXT,
|
|
786
|
+
remote_status TEXT NOT NULL
|
|
787
|
+
CHECK(remote_status IN (
|
|
788
|
+
'local-ready','saving-private','private-saved','requesting-verification',
|
|
789
|
+
'verification-requested','verification-pending','verified-private',
|
|
790
|
+
'public-active','conflict','offline','error','withdrawn','rejected'
|
|
791
|
+
)),
|
|
792
|
+
remote_error_code TEXT,
|
|
793
|
+
remote_error_message TEXT,
|
|
794
|
+
remote_receipt_json TEXT,
|
|
795
|
+
attempt_count INTEGER NOT NULL DEFAULT 0 CHECK(attempt_count >= 0),
|
|
796
|
+
created_at TEXT NOT NULL,
|
|
797
|
+
updated_at TEXT NOT NULL,
|
|
798
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
799
|
+
UNIQUE(pack_id, bundle_hash, requested_visibility)
|
|
800
|
+
);
|
|
801
|
+
CREATE INDEX idx_experience_cloud_uploads_pack
|
|
802
|
+
ON experience_cloud_uploads(pack_id, updated_at DESC);
|
|
803
|
+
CREATE UNIQUE INDEX idx_experience_cloud_uploads_remote
|
|
804
|
+
ON experience_cloud_uploads(remote_upload_id)
|
|
805
|
+
WHERE remote_upload_id IS NOT NULL;
|
|
806
|
+
CREATE INDEX idx_experience_cloud_uploads_recovery
|
|
807
|
+
ON experience_cloud_uploads(remote_status, updated_at ASC);
|
|
808
|
+
CREATE UNIQUE INDEX idx_experience_auto_pack_exact
|
|
809
|
+
ON experience_packs(agent_id, project_scope_key, environment_key, base_package_hash)
|
|
810
|
+
WHERE auto_managed = 1 AND status = 'active';
|
|
811
|
+
CREATE TABLE experience_auto_intake_receipts (
|
|
812
|
+
id TEXT PRIMARY KEY,
|
|
813
|
+
agent_id TEXT NOT NULL,
|
|
814
|
+
pack_id TEXT,
|
|
815
|
+
candidate_id TEXT,
|
|
816
|
+
source_memory_hash TEXT NOT NULL,
|
|
817
|
+
status TEXT NOT NULL
|
|
818
|
+
CHECK(status IN ('candidate-created','blocked','skipped')),
|
|
819
|
+
memory_kind TEXT NOT NULL,
|
|
820
|
+
reason_codes_json TEXT NOT NULL DEFAULT '[]',
|
|
821
|
+
created_at TEXT NOT NULL, run_id TEXT NULL, redaction_count INTEGER NOT NULL DEFAULT 0,
|
|
822
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE,
|
|
823
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE SET NULL,
|
|
824
|
+
FOREIGN KEY(candidate_id) REFERENCES experience_candidates(id) ON DELETE SET NULL,
|
|
825
|
+
UNIQUE(agent_id, source_memory_hash)
|
|
826
|
+
);
|
|
827
|
+
CREATE INDEX idx_experience_auto_intake_agent_status
|
|
828
|
+
ON experience_auto_intake_receipts(agent_id, status, created_at DESC);
|
|
829
|
+
CREATE INDEX idx_run_events_agent_ts
|
|
830
|
+
ON run_events(agent_id, ts DESC);
|
|
831
|
+
CREATE INDEX idx_failure_events_agent_ts
|
|
832
|
+
ON failure_events(agent_id, ts DESC);
|
|
833
|
+
CREATE INDEX idx_run_events_agent_kind_ts
|
|
834
|
+
ON run_events(agent_id, kind, ts DESC);
|
|
835
|
+
CREATE TABLE installed_agent_hub_bindings (
|
|
836
|
+
installed_agent_id TEXT PRIMARY KEY,
|
|
837
|
+
agent_definition_id TEXT NOT NULL,
|
|
838
|
+
agent_release_id TEXT NOT NULL,
|
|
839
|
+
source TEXT NOT NULL CHECK(source IN ('hub-install','agent-cloud-restore')),
|
|
840
|
+
bound_at TEXT NOT NULL,
|
|
841
|
+
FOREIGN KEY(installed_agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE,
|
|
842
|
+
UNIQUE(agent_definition_id, agent_release_id, installed_agent_id)
|
|
843
|
+
);
|
|
844
|
+
CREATE INDEX idx_installed_agent_hub_binding_exact
|
|
845
|
+
ON installed_agent_hub_bindings(agent_definition_id, agent_release_id);
|
|
846
|
+
CREATE TABLE taste_draft_candidates (
|
|
847
|
+
id TEXT PRIMARY KEY,
|
|
848
|
+
agent_id TEXT NOT NULL,
|
|
849
|
+
source_memory_id TEXT NOT NULL,
|
|
850
|
+
source_memory_hash TEXT NOT NULL,
|
|
851
|
+
project_scope_key TEXT NOT NULL,
|
|
852
|
+
environment_key TEXT NOT NULL,
|
|
853
|
+
base_package_hash TEXT NOT NULL
|
|
854
|
+
CHECK(length(base_package_hash) = 64 AND base_package_hash NOT GLOB '*[^0-9a-f]*'),
|
|
855
|
+
base_agent_definition_id TEXT,
|
|
856
|
+
base_agent_release_id TEXT,
|
|
857
|
+
sensitivity TEXT NOT NULL
|
|
858
|
+
CHECK(sensitivity IN ('public','internal','private')),
|
|
859
|
+
confidence TEXT NOT NULL
|
|
860
|
+
CHECK(confidence IN ('high','medium','low')),
|
|
861
|
+
axis_candidates_json TEXT NOT NULL DEFAULT '[]',
|
|
862
|
+
task_signatures_json TEXT NOT NULL DEFAULT '[]',
|
|
863
|
+
evidence_state TEXT NOT NULL DEFAULT 'pairwise-required'
|
|
864
|
+
CHECK(evidence_state = 'pairwise-required'),
|
|
865
|
+
status TEXT NOT NULL DEFAULT 'observation'
|
|
866
|
+
CHECK(status IN ('observation','rejected')),
|
|
867
|
+
created_at TEXT NOT NULL,
|
|
868
|
+
updated_at TEXT NOT NULL,
|
|
869
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE,
|
|
870
|
+
UNIQUE(agent_id, source_memory_hash, base_package_hash)
|
|
871
|
+
);
|
|
872
|
+
CREATE INDEX idx_taste_drafts_agent_status
|
|
873
|
+
ON taste_draft_candidates(agent_id, status, updated_at DESC);
|
|
874
|
+
CREATE INDEX idx_taste_drafts_exact_base
|
|
875
|
+
ON taste_draft_candidates(agent_id, base_package_hash, project_scope_key, environment_key);
|
|
876
|
+
CREATE TABLE taste_chip_workflows (
|
|
877
|
+
workflow_id TEXT PRIMARY KEY,
|
|
878
|
+
draft_id TEXT NOT NULL UNIQUE,
|
|
879
|
+
agent_id TEXT NOT NULL,
|
|
880
|
+
base_package_hash TEXT NOT NULL,
|
|
881
|
+
base_agent_definition_id TEXT NOT NULL,
|
|
882
|
+
base_agent_release_id TEXT NOT NULL,
|
|
883
|
+
environment_key TEXT NOT NULL,
|
|
884
|
+
taste_style_id TEXT NOT NULL,
|
|
885
|
+
release_id TEXT NOT NULL UNIQUE,
|
|
886
|
+
title TEXT NOT NULL,
|
|
887
|
+
summary TEXT NOT NULL,
|
|
888
|
+
rule_statement TEXT NOT NULL,
|
|
889
|
+
axis TEXT NOT NULL,
|
|
890
|
+
task_signature TEXT NOT NULL,
|
|
891
|
+
contexts_json TEXT NOT NULL,
|
|
892
|
+
generalization_hash TEXT NOT NULL,
|
|
893
|
+
privacy_issue_codes_json TEXT NOT NULL DEFAULT '[]',
|
|
894
|
+
status TEXT NOT NULL CHECK(status IN ('proposal','confirmed','moderation-pending','ab-ready','error')),
|
|
895
|
+
confirmed_at TEXT,
|
|
896
|
+
preview_grants_json TEXT,
|
|
897
|
+
preview_names_json TEXT,
|
|
898
|
+
preview_digests_json TEXT,
|
|
899
|
+
preview_rights TEXT,
|
|
900
|
+
remote_preview_asset_ids_json TEXT,
|
|
901
|
+
remote_revision TEXT,
|
|
902
|
+
remote_error_code TEXT,
|
|
903
|
+
created_at TEXT NOT NULL,
|
|
904
|
+
updated_at TEXT NOT NULL, preview_provenance_json TEXT,
|
|
905
|
+
FOREIGN KEY(draft_id) REFERENCES taste_draft_candidates(id) ON DELETE CASCADE,
|
|
906
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE
|
|
907
|
+
);
|
|
908
|
+
CREATE INDEX idx_taste_chip_workflows_agent_status
|
|
909
|
+
ON taste_chip_workflows(agent_id, status, updated_at DESC);
|
|
910
|
+
CREATE TABLE experience_public_projections (
|
|
911
|
+
projection_id TEXT PRIMARY KEY,
|
|
912
|
+
pack_id TEXT NOT NULL UNIQUE,
|
|
913
|
+
agent_id TEXT NOT NULL,
|
|
914
|
+
base_package_hash TEXT NOT NULL
|
|
915
|
+
CHECK(length(base_package_hash) = 64 AND base_package_hash NOT GLOB '*[^0-9a-f]*'),
|
|
916
|
+
base_agent_definition_id TEXT NOT NULL,
|
|
917
|
+
base_agent_release_id TEXT NOT NULL,
|
|
918
|
+
environment_key TEXT NOT NULL,
|
|
919
|
+
source_bindings_json TEXT NOT NULL,
|
|
920
|
+
source_snapshot_hash TEXT NOT NULL
|
|
921
|
+
CHECK(length(source_snapshot_hash) = 64 AND source_snapshot_hash NOT GLOB '*[^0-9a-f]*'),
|
|
922
|
+
title TEXT NOT NULL,
|
|
923
|
+
instructions_json TEXT NOT NULL,
|
|
924
|
+
task_signatures_json TEXT NOT NULL,
|
|
925
|
+
environment_constraints_json TEXT NOT NULL,
|
|
926
|
+
proposal_hash TEXT NOT NULL
|
|
927
|
+
CHECK(length(proposal_hash) = 64 AND proposal_hash NOT GLOB '*[^0-9a-f]*'),
|
|
928
|
+
privacy_issue_codes_json TEXT NOT NULL DEFAULT '[]',
|
|
929
|
+
status TEXT NOT NULL CHECK(status IN ('proposal','confirmed')),
|
|
930
|
+
confirmation_hash TEXT,
|
|
931
|
+
confirmed_at TEXT,
|
|
932
|
+
created_at TEXT NOT NULL,
|
|
933
|
+
updated_at TEXT NOT NULL,
|
|
934
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
935
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE CASCADE,
|
|
936
|
+
CHECK(
|
|
937
|
+
(status = 'proposal' AND confirmation_hash IS NULL AND confirmed_at IS NULL) OR
|
|
938
|
+
(status = 'confirmed' AND length(confirmation_hash) = 64
|
|
939
|
+
AND confirmation_hash NOT GLOB '*[^0-9a-f]*' AND confirmed_at IS NOT NULL)
|
|
940
|
+
)
|
|
941
|
+
);
|
|
942
|
+
CREATE INDEX idx_experience_public_projection_agent_status
|
|
943
|
+
ON experience_public_projections(agent_id, status, updated_at DESC);
|
|
944
|
+
CREATE INDEX idx_experience_public_projection_exact_base
|
|
945
|
+
ON experience_public_projections(
|
|
946
|
+
base_agent_definition_id, base_agent_release_id, base_package_hash, environment_key
|
|
947
|
+
);
|
|
948
|
+
CREATE TABLE experience_governance_relations (
|
|
949
|
+
relation_id TEXT PRIMARY KEY,
|
|
950
|
+
agent_id TEXT NOT NULL,
|
|
951
|
+
pack_id TEXT NOT NULL,
|
|
952
|
+
from_candidate_id TEXT NOT NULL,
|
|
953
|
+
to_candidate_id TEXT NOT NULL,
|
|
954
|
+
relation_type TEXT NOT NULL CHECK(relation_type IN ('supersedes','contradicts')),
|
|
955
|
+
reason TEXT NOT NULL,
|
|
956
|
+
created_at TEXT NOT NULL,
|
|
957
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
958
|
+
FOREIGN KEY(from_candidate_id) REFERENCES experience_candidates(id) ON DELETE CASCADE,
|
|
959
|
+
FOREIGN KEY(to_candidate_id) REFERENCES experience_candidates(id) ON DELETE CASCADE,
|
|
960
|
+
UNIQUE(from_candidate_id, to_candidate_id, relation_type)
|
|
961
|
+
);
|
|
962
|
+
CREATE INDEX idx_experience_governance_pack
|
|
963
|
+
ON experience_governance_relations(pack_id, relation_type, created_at ASC);
|
|
964
|
+
CREATE TABLE IF NOT EXISTS "experience_relation_edges" (
|
|
965
|
+
edge_id TEXT PRIMARY KEY,
|
|
966
|
+
pack_id TEXT NOT NULL,
|
|
967
|
+
from_node TEXT NOT NULL,
|
|
968
|
+
to_node TEXT NOT NULL,
|
|
969
|
+
edge_type TEXT NOT NULL
|
|
970
|
+
CHECK(edge_type IN (
|
|
971
|
+
'has_release','exact_base_binding','contains','applies_to_task',
|
|
972
|
+
'applies_in_environment','requires_mcp','supports_mcp',
|
|
973
|
+
'alternative_mcp','supported_by','supersedes','contradicts',
|
|
974
|
+
'similar_to','similar_by_tag'
|
|
975
|
+
)),
|
|
976
|
+
project_scope_key TEXT NOT NULL,
|
|
977
|
+
environment_key TEXT NOT NULL,
|
|
978
|
+
base_package_hash TEXT NOT NULL,
|
|
979
|
+
payload_json TEXT NOT NULL DEFAULT '{}',
|
|
980
|
+
source_fingerprint TEXT NOT NULL,
|
|
981
|
+
rebuilt_at TEXT NOT NULL,
|
|
982
|
+
FOREIGN KEY(pack_id) REFERENCES experience_packs(id) ON DELETE CASCADE,
|
|
983
|
+
FOREIGN KEY(from_node) REFERENCES experience_relation_nodes(node_id) ON DELETE CASCADE,
|
|
984
|
+
FOREIGN KEY(to_node) REFERENCES experience_relation_nodes(node_id) ON DELETE CASCADE
|
|
985
|
+
);
|
|
986
|
+
CREATE INDEX idx_experience_relation_edges_scope
|
|
987
|
+
ON experience_relation_edges(project_scope_key, environment_key, base_package_hash, edge_type);
|
|
988
|
+
CREATE INDEX idx_experience_relation_edges_from
|
|
989
|
+
ON experience_relation_edges(pack_id, from_node, edge_type);
|
|
990
|
+
CREATE INDEX idx_experience_relation_edges_to
|
|
991
|
+
ON experience_relation_edges(pack_id, to_node, edge_type);
|
|
992
|
+
CREATE TABLE memory_tickets (
|
|
993
|
+
ticket_id TEXT PRIMARY KEY,
|
|
994
|
+
turn_key TEXT NOT NULL UNIQUE,
|
|
995
|
+
turn_id TEXT,
|
|
996
|
+
run_id TEXT,
|
|
997
|
+
node_id TEXT,
|
|
998
|
+
chat_id TEXT,
|
|
999
|
+
agent_id TEXT,
|
|
1000
|
+
project_id TEXT,
|
|
1001
|
+
project_path_hash TEXT,
|
|
1002
|
+
emitter_status TEXT NOT NULL
|
|
1003
|
+
CHECK(emitter_status IN ('valid','empty','missing','malformed','read_only')),
|
|
1004
|
+
candidate_count INTEGER NOT NULL DEFAULT 0 CHECK(candidate_count >= 0),
|
|
1005
|
+
state TEXT NOT NULL DEFAULT 'received'
|
|
1006
|
+
CHECK(state IN ('received','completed','read_only','failed')),
|
|
1007
|
+
curator_mode TEXT NOT NULL DEFAULT 'policy'
|
|
1008
|
+
CHECK(curator_mode IN ('semantic','policy','policy_fallback','read_only')),
|
|
1009
|
+
curation_outcome TEXT NOT NULL DEFAULT 'no_candidates'
|
|
1010
|
+
CHECK(curation_outcome IN ('decided','no_candidates','malformed_output','curator_failed','read_only')),
|
|
1011
|
+
written_count INTEGER NOT NULL DEFAULT 0 CHECK(written_count >= 0),
|
|
1012
|
+
deduped_count INTEGER NOT NULL DEFAULT 0 CHECK(deduped_count >= 0),
|
|
1013
|
+
redacted_count INTEGER NOT NULL DEFAULT 0 CHECK(redacted_count >= 0),
|
|
1014
|
+
session_count INTEGER NOT NULL DEFAULT 0 CHECK(session_count >= 0),
|
|
1015
|
+
discarded_count INTEGER NOT NULL DEFAULT 0 CHECK(discarded_count >= 0),
|
|
1016
|
+
failure_code TEXT,
|
|
1017
|
+
created_at TEXT NOT NULL,
|
|
1018
|
+
updated_at TEXT NOT NULL
|
|
1019
|
+
);
|
|
1020
|
+
CREATE INDEX idx_memory_tickets_project_created
|
|
1021
|
+
ON memory_tickets(project_id, created_at DESC);
|
|
1022
|
+
CREATE INDEX idx_memory_tickets_agent_created
|
|
1023
|
+
ON memory_tickets(agent_id, created_at DESC);
|
|
1024
|
+
CREATE INDEX idx_memory_tickets_status_created
|
|
1025
|
+
ON memory_tickets(emitter_status, state, created_at DESC);
|
|
1026
|
+
CREATE TABLE memory_decisions (
|
|
1027
|
+
decision_id TEXT PRIMARY KEY,
|
|
1028
|
+
ticket_id TEXT NOT NULL,
|
|
1029
|
+
candidate_index INTEGER NOT NULL CHECK(candidate_index >= 0),
|
|
1030
|
+
content_hash TEXT NOT NULL
|
|
1031
|
+
CHECK(length(content_hash) = 64 AND content_hash NOT GLOB '*[^0-9a-f]*'),
|
|
1032
|
+
memory_kind TEXT NOT NULL,
|
|
1033
|
+
proposed_scope TEXT NOT NULL,
|
|
1034
|
+
resolved_scope TEXT NOT NULL,
|
|
1035
|
+
action TEXT NOT NULL
|
|
1036
|
+
CHECK(action IN ('written','deduped','redacted','session','discarded','deferred')),
|
|
1037
|
+
reason_code TEXT NOT NULL,
|
|
1038
|
+
target_memory_id TEXT,
|
|
1039
|
+
confidence TEXT NOT NULL,
|
|
1040
|
+
sensitivity TEXT NOT NULL,
|
|
1041
|
+
curator_mode TEXT NOT NULL
|
|
1042
|
+
CHECK(curator_mode IN ('semantic','policy','policy_fallback','read_only')),
|
|
1043
|
+
created_at TEXT NOT NULL,
|
|
1044
|
+
FOREIGN KEY(ticket_id) REFERENCES memory_tickets(ticket_id) ON DELETE CASCADE,
|
|
1045
|
+
FOREIGN KEY(target_memory_id) REFERENCES memory_entries(id) ON DELETE SET NULL,
|
|
1046
|
+
UNIQUE(ticket_id, candidate_index)
|
|
1047
|
+
);
|
|
1048
|
+
CREATE INDEX idx_memory_decisions_ticket_action
|
|
1049
|
+
ON memory_decisions(ticket_id, action, candidate_index);
|
|
1050
|
+
CREATE TABLE memory_relation_edges (
|
|
1051
|
+
relation_id TEXT PRIMARY KEY,
|
|
1052
|
+
from_memory_id TEXT NOT NULL,
|
|
1053
|
+
to_memory_id TEXT NOT NULL,
|
|
1054
|
+
relation_type TEXT NOT NULL
|
|
1055
|
+
CHECK(relation_type IN ('similar_to','supersedes','contradicts')),
|
|
1056
|
+
score REAL,
|
|
1057
|
+
owner_scope_key TEXT NOT NULL,
|
|
1058
|
+
embedding_model TEXT,
|
|
1059
|
+
embedding_adapter TEXT,
|
|
1060
|
+
embedding_model_sha256 TEXT,
|
|
1061
|
+
created_at TEXT NOT NULL,
|
|
1062
|
+
FOREIGN KEY(from_memory_id) REFERENCES memory_entries(id) ON DELETE CASCADE,
|
|
1063
|
+
FOREIGN KEY(to_memory_id) REFERENCES memory_entries(id) ON DELETE CASCADE,
|
|
1064
|
+
CHECK(from_memory_id <> to_memory_id),
|
|
1065
|
+
CHECK(score IS NULL OR (score >= -1.0 AND score <= 1.0)),
|
|
1066
|
+
UNIQUE(from_memory_id, to_memory_id, relation_type)
|
|
1067
|
+
);
|
|
1068
|
+
CREATE INDEX idx_memory_relation_from
|
|
1069
|
+
ON memory_relation_edges(from_memory_id, relation_type, score DESC);
|
|
1070
|
+
CREATE INDEX idx_memory_relation_to
|
|
1071
|
+
ON memory_relation_edges(to_memory_id, relation_type, score DESC);
|
|
1072
|
+
CREATE INDEX idx_memory_relation_owner
|
|
1073
|
+
ON memory_relation_edges(owner_scope_key, relation_type, score DESC);
|
|
1074
|
+
CREATE TABLE memory_episodes (
|
|
1075
|
+
episode_id TEXT PRIMARY KEY,
|
|
1076
|
+
ticket_id TEXT NOT NULL UNIQUE,
|
|
1077
|
+
project_id TEXT,
|
|
1078
|
+
project_path_hash TEXT,
|
|
1079
|
+
agent_id TEXT,
|
|
1080
|
+
chat_id TEXT,
|
|
1081
|
+
summary TEXT,
|
|
1082
|
+
summary_hash TEXT,
|
|
1083
|
+
embedding_model TEXT,
|
|
1084
|
+
embedding_adapter TEXT,
|
|
1085
|
+
embedding_model_sha256 TEXT,
|
|
1086
|
+
embedding_content_hash TEXT,
|
|
1087
|
+
embedding_dimensions INTEGER,
|
|
1088
|
+
embedding_json TEXT,
|
|
1089
|
+
created_at TEXT NOT NULL,
|
|
1090
|
+
FOREIGN KEY(ticket_id) REFERENCES memory_tickets(ticket_id) ON DELETE CASCADE,
|
|
1091
|
+
CHECK(project_path_hash IS NULL OR
|
|
1092
|
+
(length(project_path_hash) = 64 AND project_path_hash NOT GLOB '*[^0-9a-f]*')),
|
|
1093
|
+
CHECK(summary_hash IS NULL OR
|
|
1094
|
+
(length(summary_hash) = 64 AND summary_hash NOT GLOB '*[^0-9a-f]*'))
|
|
1095
|
+
);
|
|
1096
|
+
CREATE INDEX idx_memory_episodes_project_created
|
|
1097
|
+
ON memory_episodes(project_id, created_at DESC);
|
|
1098
|
+
CREATE INDEX idx_memory_episodes_project_path_created
|
|
1099
|
+
ON memory_episodes(project_path_hash, created_at DESC);
|
|
1100
|
+
CREATE INDEX idx_memory_episodes_agent_created
|
|
1101
|
+
ON memory_episodes(agent_id, created_at DESC);
|
|
1102
|
+
CREATE TABLE activated_folder_identity (
|
|
1103
|
+
path TEXT PRIMARY KEY,
|
|
1104
|
+
identity_json TEXT NOT NULL,
|
|
1105
|
+
captured_at TEXT NOT NULL
|
|
1106
|
+
);
|
|
1107
|
+
CREATE INDEX idx_automation_runs_occurrence
|
|
1108
|
+
ON automation_runs(automation_id, occurrence_id, started_at);
|
|
1109
|
+
CREATE TABLE automation_trigger_events (
|
|
1110
|
+
id TEXT PRIMARY KEY,
|
|
1111
|
+
automation_id TEXT NOT NULL,
|
|
1112
|
+
trigger_kind TEXT NOT NULL CHECK(trigger_kind IN ('fs','chain','webhook','poll')),
|
|
1113
|
+
dedupe_key TEXT NOT NULL,
|
|
1114
|
+
payload_json TEXT NOT NULL,
|
|
1115
|
+
status TEXT NOT NULL DEFAULT 'pending'
|
|
1116
|
+
CHECK(status IN ('pending','claimed','delivered','parked')),
|
|
1117
|
+
attempt_count INTEGER NOT NULL DEFAULT 0 CHECK(attempt_count >= 0),
|
|
1118
|
+
next_attempt_at TEXT NOT NULL,
|
|
1119
|
+
claim_owner TEXT,
|
|
1120
|
+
claimed_until TEXT,
|
|
1121
|
+
run_id TEXT,
|
|
1122
|
+
run_outcome TEXT CHECK(run_outcome IS NULL OR run_outcome IN
|
|
1123
|
+
('ok','partial','error','skipped','blocked','needs_input')),
|
|
1124
|
+
last_error TEXT,
|
|
1125
|
+
created_at TEXT NOT NULL,
|
|
1126
|
+
updated_at TEXT NOT NULL,
|
|
1127
|
+
delivered_at TEXT,
|
|
1128
|
+
FOREIGN KEY(automation_id) REFERENCES automations(id) ON DELETE CASCADE,
|
|
1129
|
+
UNIQUE(automation_id, trigger_kind, dedupe_key),
|
|
1130
|
+
CHECK(
|
|
1131
|
+
(status = 'claimed' AND claim_owner IS NOT NULL AND claimed_until IS NOT NULL) OR
|
|
1132
|
+
(status <> 'claimed' AND claim_owner IS NULL AND claimed_until IS NULL)
|
|
1133
|
+
),
|
|
1134
|
+
CHECK((status = 'delivered' AND delivered_at IS NOT NULL) OR status <> 'delivered')
|
|
1135
|
+
);
|
|
1136
|
+
CREATE INDEX idx_automation_trigger_events_due
|
|
1137
|
+
ON automation_trigger_events(status, next_attempt_at, created_at);
|
|
1138
|
+
CREATE INDEX idx_automation_trigger_events_automation
|
|
1139
|
+
ON automation_trigger_events(automation_id, status, created_at);
|
|
1140
|
+
CREATE INDEX idx_automation_trigger_events_run
|
|
1141
|
+
ON automation_trigger_events(run_id) WHERE run_id IS NOT NULL;
|
|
1142
|
+
CREATE TABLE tasks (
|
|
1143
|
+
id TEXT PRIMARY KEY,
|
|
1144
|
+
title TEXT NOT NULL DEFAULT '',
|
|
1145
|
+
project_id TEXT,
|
|
1146
|
+
firm_id TEXT,
|
|
1147
|
+
status TEXT NOT NULL DEFAULT 'open',
|
|
1148
|
+
created_at TEXT NOT NULL,
|
|
1149
|
+
updated_at TEXT NOT NULL,
|
|
1150
|
+
archived_at TEXT,
|
|
1151
|
+
origin_chat_id TEXT,
|
|
1152
|
+
FOREIGN KEY(project_id) REFERENCES projects(id) ON DELETE SET NULL,
|
|
1153
|
+
FOREIGN KEY(firm_id) REFERENCES firms(id) ON DELETE SET NULL
|
|
1154
|
+
);
|
|
1155
|
+
CREATE INDEX idx_tasks_updated ON tasks(updated_at DESC);
|
|
1156
|
+
CREATE INDEX idx_tasks_project_updated ON tasks(project_id, updated_at DESC);
|
|
1157
|
+
CREATE INDEX idx_tasks_firm_updated ON tasks(firm_id, updated_at DESC);
|
|
1158
|
+
CREATE INDEX idx_tasks_origin_chat ON tasks(origin_chat_id);
|
|
1159
|
+
CREATE TABLE task_agent_participants (
|
|
1160
|
+
task_id TEXT NOT NULL,
|
|
1161
|
+
agent_id TEXT,
|
|
1162
|
+
agent_slug TEXT NOT NULL,
|
|
1163
|
+
role TEXT,
|
|
1164
|
+
first_seen_at TEXT NOT NULL,
|
|
1165
|
+
last_seen_at TEXT NOT NULL,
|
|
1166
|
+
PRIMARY KEY(task_id, agent_slug),
|
|
1167
|
+
FOREIGN KEY(task_id) REFERENCES tasks(id) ON DELETE CASCADE,
|
|
1168
|
+
FOREIGN KEY(agent_id) REFERENCES installed_agents(id) ON DELETE SET NULL
|
|
1169
|
+
);
|
|
1170
|
+
CREATE INDEX idx_task_participants_agent ON task_agent_participants(agent_id);
|
|
1171
|
+
CREATE TABLE terminal_memory_turn_intents (
|
|
1172
|
+
turn_id TEXT PRIMARY KEY,
|
|
1173
|
+
request_fingerprint TEXT NOT NULL,
|
|
1174
|
+
context_key TEXT NOT NULL,
|
|
1175
|
+
permission TEXT NOT NULL,
|
|
1176
|
+
project_key TEXT,
|
|
1177
|
+
owner_key TEXT,
|
|
1178
|
+
owner_policy_json TEXT NOT NULL DEFAULT '{}',
|
|
1179
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
1180
|
+
started_at TEXT NOT NULL,
|
|
1181
|
+
completed_at TEXT
|
|
1182
|
+
);
|
|
1183
|
+
CREATE INDEX idx_terminal_memory_intent_pending
|
|
1184
|
+
ON terminal_memory_turn_intents(request_fingerprint, status, started_at);
|
|
1185
|
+
CREATE UNIQUE INDEX idx_terminal_memory_one_pending_request
|
|
1186
|
+
ON terminal_memory_turn_intents(request_fingerprint)
|
|
1187
|
+
WHERE status IN ('pending','curating');
|
|
1188
|
+
CREATE TABLE terminal_memory_episode_receipts (
|
|
1189
|
+
turn_id TEXT PRIMARY KEY,
|
|
1190
|
+
ticket_json TEXT NOT NULL,
|
|
1191
|
+
project_key TEXT,
|
|
1192
|
+
created_at TEXT NOT NULL
|
|
1193
|
+
);
|
|
1194
|
+
CREATE TABLE terminal_memory_curator_decisions (
|
|
1195
|
+
decision_id TEXT PRIMARY KEY,
|
|
1196
|
+
turn_id TEXT NOT NULL,
|
|
1197
|
+
candidate_id TEXT NOT NULL,
|
|
1198
|
+
content_digest TEXT NOT NULL,
|
|
1199
|
+
semantic_disposition TEXT NOT NULL,
|
|
1200
|
+
semantic_scope TEXT NOT NULL,
|
|
1201
|
+
final_disposition TEXT NOT NULL,
|
|
1202
|
+
final_scope TEXT NOT NULL,
|
|
1203
|
+
reason_codes_json TEXT NOT NULL DEFAULT '[]',
|
|
1204
|
+
created_at TEXT NOT NULL
|
|
1205
|
+
);
|
|
1206
|
+
CREATE INDEX idx_terminal_memory_decisions_turn
|
|
1207
|
+
ON terminal_memory_curator_decisions(turn_id);
|
|
1208
|
+
CREATE TABLE terminal_memory_scope_timeline (
|
|
1209
|
+
event_id TEXT PRIMARY KEY,
|
|
1210
|
+
turn_id TEXT NOT NULL,
|
|
1211
|
+
memory_id TEXT NOT NULL,
|
|
1212
|
+
lane TEXT NOT NULL,
|
|
1213
|
+
project_key TEXT,
|
|
1214
|
+
owner_key TEXT,
|
|
1215
|
+
created_at TEXT NOT NULL
|
|
1216
|
+
);
|
|
1217
|
+
CREATE INDEX idx_terminal_memory_timeline_project
|
|
1218
|
+
ON terminal_memory_scope_timeline(project_key, lane, created_at);
|
|
1219
|
+
CREATE INDEX idx_terminal_memory_timeline_owner
|
|
1220
|
+
ON terminal_memory_scope_timeline(owner_key, lane, created_at);
|
|
1221
|
+
CREATE TABLE agent_usage (
|
|
1222
|
+
agent_key TEXT PRIMARY KEY,
|
|
1223
|
+
kind TEXT NOT NULL,
|
|
1224
|
+
first_used_at TEXT NOT NULL,
|
|
1225
|
+
last_used_at TEXT NOT NULL,
|
|
1226
|
+
use_count INTEGER NOT NULL DEFAULT 0
|
|
1227
|
+
);
|
|
1228
|
+
CREATE INDEX idx_experience_auto_intake_run
|
|
1229
|
+
ON experience_auto_intake_receipts(agent_id, run_id)
|
|
1230
|
+
WHERE run_id IS NOT NULL;
|
|
1231
|
+
CREATE INDEX idx_installed_agents_parent_team ON installed_agents(parent_team_id) WHERE parent_team_id IS NOT NULL;
|
|
1232
|
+
CREATE TABLE IF NOT EXISTS "borrowed_agent_careers_v76_legacy" (
|
|
1233
|
+
owner_scope_key TEXT NOT NULL,
|
|
1234
|
+
entity_kind TEXT NOT NULL CHECK(entity_kind IN ('agent','team')),
|
|
1235
|
+
slug TEXT NOT NULL,
|
|
1236
|
+
first_used_at TEXT NOT NULL,
|
|
1237
|
+
last_used_at TEXT NOT NULL,
|
|
1238
|
+
use_count INTEGER NOT NULL DEFAULT 0 CHECK(use_count >= 0),
|
|
1239
|
+
latest_runtime_json TEXT,
|
|
1240
|
+
name_en TEXT,
|
|
1241
|
+
name_ko TEXT,
|
|
1242
|
+
tagline_en TEXT,
|
|
1243
|
+
tagline_ko TEXT,
|
|
1244
|
+
PRIMARY KEY(owner_scope_key, entity_kind, slug)
|
|
1245
|
+
);
|
|
1246
|
+
CREATE TABLE IF NOT EXISTS "borrowed_agent_career_runs_v76_legacy" (
|
|
1247
|
+
owner_scope_key TEXT NOT NULL,
|
|
1248
|
+
entity_kind TEXT NOT NULL CHECK(entity_kind IN ('agent','team')),
|
|
1249
|
+
slug TEXT NOT NULL,
|
|
1250
|
+
run_id_hash TEXT NOT NULL,
|
|
1251
|
+
recorded_at TEXT NOT NULL,
|
|
1252
|
+
PRIMARY KEY(owner_scope_key, entity_kind, slug, run_id_hash),
|
|
1253
|
+
FOREIGN KEY(owner_scope_key, entity_kind, slug)
|
|
1254
|
+
REFERENCES "borrowed_agent_careers_v76_legacy"(owner_scope_key, entity_kind, slug)
|
|
1255
|
+
ON DELETE CASCADE
|
|
1256
|
+
);
|
|
1257
|
+
CREATE TABLE borrowed_agent_careers (
|
|
1258
|
+
owner_scope_key TEXT NOT NULL,
|
|
1259
|
+
entity_kind TEXT NOT NULL CHECK(entity_kind IN ('agent','team')),
|
|
1260
|
+
agent_definition_id TEXT NOT NULL,
|
|
1261
|
+
agent_release_id TEXT NOT NULL,
|
|
1262
|
+
component_id TEXT NOT NULL DEFAULT '',
|
|
1263
|
+
slug TEXT NOT NULL,
|
|
1264
|
+
memory_key TEXT NOT NULL,
|
|
1265
|
+
first_used_at TEXT NOT NULL,
|
|
1266
|
+
last_used_at TEXT NOT NULL,
|
|
1267
|
+
use_count INTEGER NOT NULL DEFAULT 0 CHECK(use_count >= 0),
|
|
1268
|
+
latest_runtime_json TEXT,
|
|
1269
|
+
name_en TEXT,
|
|
1270
|
+
name_ko TEXT,
|
|
1271
|
+
tagline_en TEXT,
|
|
1272
|
+
tagline_ko TEXT,
|
|
1273
|
+
PRIMARY KEY(
|
|
1274
|
+
owner_scope_key, entity_kind, agent_definition_id,
|
|
1275
|
+
agent_release_id, component_id
|
|
1276
|
+
)
|
|
1277
|
+
);
|
|
1278
|
+
CREATE UNIQUE INDEX idx_borrowed_agent_careers_owner_memory
|
|
1279
|
+
ON borrowed_agent_careers(owner_scope_key, memory_key);
|
|
1280
|
+
CREATE INDEX idx_borrowed_agent_careers_owner_recent
|
|
1281
|
+
ON borrowed_agent_careers(owner_scope_key, last_used_at DESC);
|
|
1282
|
+
CREATE TABLE borrowed_agent_career_runs (
|
|
1283
|
+
owner_scope_key TEXT NOT NULL,
|
|
1284
|
+
entity_kind TEXT NOT NULL CHECK(entity_kind IN ('agent','team')),
|
|
1285
|
+
agent_definition_id TEXT NOT NULL,
|
|
1286
|
+
agent_release_id TEXT NOT NULL,
|
|
1287
|
+
component_id TEXT NOT NULL DEFAULT '',
|
|
1288
|
+
run_id_hash TEXT NOT NULL,
|
|
1289
|
+
recorded_at TEXT NOT NULL,
|
|
1290
|
+
PRIMARY KEY(
|
|
1291
|
+
owner_scope_key, entity_kind, agent_definition_id,
|
|
1292
|
+
agent_release_id, component_id, run_id_hash
|
|
1293
|
+
),
|
|
1294
|
+
FOREIGN KEY(
|
|
1295
|
+
owner_scope_key, entity_kind, agent_definition_id,
|
|
1296
|
+
agent_release_id, component_id
|
|
1297
|
+
)
|
|
1298
|
+
REFERENCES borrowed_agent_careers(
|
|
1299
|
+
owner_scope_key, entity_kind, agent_definition_id,
|
|
1300
|
+
agent_release_id, component_id
|
|
1301
|
+
)
|
|
1302
|
+
ON DELETE CASCADE
|
|
1303
|
+
);
|
|
1304
|
+
CREATE TABLE model_roles (
|
|
1305
|
+
role TEXT PRIMARY KEY CHECK(role IN ('orchestrator','worker')),
|
|
1306
|
+
kind TEXT NOT NULL,
|
|
1307
|
+
backend TEXT,
|
|
1308
|
+
source TEXT,
|
|
1309
|
+
model TEXT,
|
|
1310
|
+
effort TEXT,
|
|
1311
|
+
long_context INTEGER NOT NULL DEFAULT 0 CHECK(long_context IN (0,1)),
|
|
1312
|
+
inherit INTEGER NOT NULL DEFAULT 0 CHECK(inherit IN (0,1)),
|
|
1313
|
+
updated_at TEXT NOT NULL,
|
|
1314
|
+
CHECK(role = 'worker' OR inherit = 0)
|
|
1315
|
+
);
|
|
1316
|
+
CREATE TABLE model_role_members (
|
|
1317
|
+
role TEXT NOT NULL CHECK(role IN ('orchestrator','worker')),
|
|
1318
|
+
position INTEGER NOT NULL CHECK(position >= 1),
|
|
1319
|
+
kind TEXT NOT NULL,
|
|
1320
|
+
backend TEXT,
|
|
1321
|
+
source TEXT,
|
|
1322
|
+
model TEXT,
|
|
1323
|
+
effort TEXT,
|
|
1324
|
+
long_context INTEGER NOT NULL DEFAULT 0 CHECK(long_context IN (0,1)),
|
|
1325
|
+
updated_at TEXT NOT NULL,
|
|
1326
|
+
PRIMARY KEY(role, position)
|
|
1327
|
+
);
|