bazilion 0.8.0 → 0.9.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 +47 -5
- package/dist/cli.js +1184 -628
- package/dist/cli.js.map +1 -1
- package/dist/daemon.js +5194 -1574
- package/dist/daemon.js.map +1 -1
- package/dist/migrations/0001_init.sql +318 -88
- package/dist/web/client/assets/{FieldRow-CNKma5LE.js → FieldRow-DmwAFfbF.js} +1 -1
- package/dist/web/client/assets/ProductionTeamPolicyEditor-1a5jQqUB.js +7 -0
- package/dist/web/client/assets/ProductionTeamPolicyEditor-DLioOiRN.css +1 -0
- package/dist/web/client/assets/ProfileCommunicationEditor-D1OZ8WE5.js +1 -0
- package/dist/web/client/assets/RecoveryState-QfMSuwy3.js +1 -0
- package/dist/web/client/assets/TeamTabs-BViZ4sti.js +1 -0
- package/dist/web/client/assets/TemplatesTabs-DVcY9pMD.js +1 -0
- package/dist/web/client/assets/_id-8P7brhGy.js +1 -0
- package/dist/web/client/assets/_id-C3o3MHq8.js +1 -0
- package/dist/web/client/assets/_id-DGRrSF1e.js +1 -0
- package/dist/web/client/assets/_id-DGyKURCp.js +1 -0
- package/dist/web/client/assets/_id-KnJe-aW9.js +1 -0
- package/dist/web/client/assets/activity-DJuhhQCb.js +1 -0
- package/dist/web/client/assets/activity-WWvJSo4t.js +1 -0
- package/dist/web/client/assets/agents-C32T1voV.js +1 -0
- package/dist/web/client/assets/agents-nH4m4gZ1.js +1 -0
- package/dist/web/client/assets/approvals-DGi0PSx8.js +1 -0
- package/dist/web/client/assets/approvals-l8jIZjqz.js +1 -0
- package/dist/web/client/assets/{config-DIuEc5bm.js → config-C7wvi1nR.js} +2 -2
- package/dist/web/client/assets/context-BEGWE3RC.js +1 -0
- package/dist/web/client/assets/inbox--4aBaAgG.js +1 -0
- package/dist/web/client/assets/index-BCXoh1c8.js +12 -0
- package/dist/web/client/assets/{login-CawJX16E.js → login-Bk2wwIHQ.js} +1 -1
- package/dist/web/client/assets/{mcp-DIrh9-v_.js → mcp-vM7xgh9e.js} +1 -1
- package/dist/web/client/assets/members-cPKfnrSL.js +1 -0
- package/dist/web/client/assets/memory-BOcsaemD.js +1 -0
- package/dist/web/client/assets/policy-BGLCJYvS.js +1 -0
- package/dist/web/client/assets/policy-K4hIbbIN.js +1 -0
- package/dist/web/client/assets/{preload-helper-CvnapA2_.js → preload-helper-eOOCz1Fu.js} +1 -1
- package/dist/web/client/assets/routes-DnrP3dwv.js +1 -0
- package/dist/web/client/assets/services-C2_O3ifw.js +1 -0
- package/dist/web/client/assets/{skills-Da0MURjY.js → skills-B__fLZjx.js} +1 -1
- package/dist/web/client/assets/styles-Dn24-ZvP.css +2 -0
- package/dist/web/client/assets/team-policy-BdX340m4.js +1 -0
- package/dist/web/client/assets/teams-CSNyLz3l.js +1 -0
- package/dist/web/client/assets/teams-DZMB4_iw.js +1 -0
- package/dist/web/client/assets/teams-rpaYKNIb.js +1 -0
- package/dist/web/client/assets/telegram-B1O4Ko0V.js +1 -0
- package/dist/web/client/assets/{tokens-E_JvO5JN.js → tokens-D7FH9VgA.js} +1 -1
- package/dist/web/client/assets/triggers-3PLy2_Fo.js +1 -0
- package/dist/web/client/assets/welcome-B-QQobzq.js +1 -0
- package/dist/web/client/assets/{ChatPane-DzEgOEqS.js → wire-constants-BY9Q9Z7d.js} +4 -4
- package/dist/web/server/assets/{ChatPane-BvpswYvF.js → ChatPane-Dh3qxzdb.js} +23 -12
- package/dist/web/server/assets/ProductionTeamPolicyEditor-Bke5doyl.js +1009 -0
- package/dist/web/server/assets/ProfileCommunicationEditor-C2RU-2QB.js +107 -0
- package/dist/web/server/assets/RecoveryState-B2SG-mrY.js +37 -0
- package/dist/web/server/assets/{Sidebar-DmEiewRN.js → Sidebar-CGmtCnYU.js} +372 -48
- package/dist/web/server/assets/TeamTabs-BPxDBfqy.js +50 -0
- package/dist/web/server/assets/{TemplatesTabs---7h5GYa.js → TemplatesTabs-zf4YhStd.js} +6 -6
- package/dist/web/server/assets/{_id-CXg-Blec.js → _id-5lLzLwcv.js} +52 -40
- package/dist/web/server/assets/_id-A8Xiv6Lc.js +11 -0
- package/dist/web/server/assets/{_id-BqnDy_Ca.js → _id-B04VaQlh.js} +6 -5
- package/dist/web/server/assets/{_id-BdRiQb2H.js → _id-B6g9wmPR.js} +126 -27
- package/dist/web/server/assets/_id-ButXHnRH.js +14 -0
- package/dist/web/server/assets/_id-C4AOhstq.js +44 -0
- package/dist/web/server/assets/{_id-DDixKEud.js → _id-CCHA0gdR.js} +72 -12
- package/dist/web/server/assets/{_id-D_Ew11ED.js → _id-CUWgTqMS.js} +8 -8
- package/dist/web/server/assets/_id-DJkzwHjM.js +42 -0
- package/dist/web/server/assets/{_id-CnQflrRv.js → _id-DdC9wpNN.js} +5 -5
- package/dist/web/server/assets/{_id-DUIrFV3G.js → _id-DkFgCIb-.js} +9 -1
- package/dist/web/server/assets/{_id-D8duqgd5.js → _id-_nFwi9gD.js} +5 -4
- package/dist/web/server/assets/{_id-Sjw0zhA6.js → _id-fpFQ9_Ya.js} +4 -4
- package/dist/web/server/assets/_tanstack-start-manifest_v-Div-TukY.js +241 -0
- package/dist/web/server/assets/activity-C2ZKg1Q9.js +170 -0
- package/dist/web/server/assets/activity-CGCf8BQf.js +11 -0
- package/dist/web/server/assets/activity-DedraoFj.js +14 -0
- package/dist/web/server/assets/activity-GPx8NCeB.js +12 -0
- package/dist/web/server/assets/{profiles-CZ5NkmVw.js → agents-B8kinIPW.js} +4 -4
- package/dist/web/server/assets/{agents-k5QURC4I.js → agents-BR2qXlXF.js} +4 -4
- package/dist/web/server/assets/{agents-ChcAJUI5.js → agents-Bp1nsVs2.js} +1 -1
- package/dist/web/server/assets/{profiles-LxcC_L6n.js → agents-CUQmWhTp.js} +36 -10
- package/dist/web/server/assets/{agents-C7SBPN0M.js → agents-DU9Hqs58.js} +51 -12
- package/dist/web/server/assets/{profiles-C6a3RKgu.js → agents-LHowEI6S.js} +4 -4
- package/dist/web/server/assets/approvals-CbFXFvG8.js +11 -0
- package/dist/web/server/assets/approvals-DHgARzd8.js +242 -0
- package/dist/web/server/assets/approvals-Dw2LJoSA.js +14 -0
- package/dist/web/server/assets/approvals-VPc0YpLN.js +12 -0
- package/dist/web/server/assets/{auth-DzRAMwVt.js → auth-l-Vf8wlu.js} +5 -1
- package/dist/web/server/assets/{config-CdVjqjin.js → config-BvKctDOX.js} +4 -4
- package/dist/web/server/assets/{config-Bq3o924J.js → config-QvHaxGlP.js} +1 -1
- package/dist/web/server/assets/context-5lrf2ame.js +12 -0
- package/dist/web/server/assets/context-CEr4-xiA.js +49 -0
- package/dist/web/server/assets/context-D3Egm-vY.js +12 -0
- package/dist/web/server/assets/members-40DxRdVj.js +48 -0
- package/dist/web/server/assets/members-DlGBKZNl.js +12 -0
- package/dist/web/server/assets/members-ksELRsyk.js +12 -0
- package/dist/web/server/assets/{memory-Ns2-Z31p.js → memory-B5moRnnp.js} +5 -5
- package/dist/web/server/assets/{memory-BaYnfm7K.js → memory-CO0jKGzJ.js} +8 -8
- package/dist/web/server/assets/memory-CiTl4cN9.js +289 -0
- package/dist/web/server/assets/policy-BYVXqsan.js +11 -0
- package/dist/web/server/assets/policy-DNcGZLOB.js +21 -0
- package/dist/web/server/assets/policy-Dr55y-Mh.js +496 -0
- package/dist/web/server/assets/policy-Dxs78_GO.js +40 -0
- package/dist/web/server/assets/{router-BrDascdO.js → router-_izWQUeG.js} +156 -101
- package/dist/web/server/assets/{routes-Ce2VWrU9.js → routes-BSSKp3Rv.js} +4 -4
- package/dist/web/server/assets/{routes-C61gBiXa.js → routes-BrTOoeth.js} +5 -5
- package/dist/web/server/assets/{routes-V9URcp1v.js → routes-DOj6ljcm.js} +1 -1
- package/dist/web/server/assets/{services-B91w2f-X.js → services-CHe4ihJk.js} +11 -11
- package/dist/web/server/assets/{services-Ccc5s2bS.js → services-Pv_V88VA.js} +3 -3
- package/dist/web/server/assets/{start-CYDpZ6cb.js → start-DlHq0RaQ.js} +1 -1
- package/dist/web/server/assets/team-policy-Csvc5EDd.js +180 -0
- package/dist/web/server/assets/teams-35Oprf6e.js +14 -0
- package/dist/web/server/assets/teams-3im0oQnS.js +11 -0
- package/dist/web/server/assets/teams-B5IF65p2.js +12 -0
- package/dist/web/server/assets/teams-B9O-WDH5.js +108 -0
- package/dist/web/server/assets/teams-DFkN7ic7.js +36 -0
- package/dist/web/server/assets/teams-DH1CvWmT.js +12 -0
- package/dist/web/server/assets/teams-zcm9XaQU.js +174 -0
- package/dist/web/server/assets/{telegram-DfAddLdv.js → telegram-C9sQFwWj.js} +7 -7
- package/dist/web/server/assets/{telegram-T3l9KtiE.js → telegram-mTnJCOmn.js} +1 -1
- package/dist/web/server/assets/{welcome-CP4CZ9B6.js → welcome-CDGE2Sdk.js} +2 -2
- package/dist/web/server/assets/{wire-constants-Deb4NxBb.js → wire-constants-C8nBJcU3.js} +3 -3
- package/dist/web/server/server.js +64 -42
- package/dist/worker.js +180 -128
- package/dist/worker.js.map +1 -1
- package/package.json +7 -7
- package/dist/migrations/0002_profile_groups.sql +0 -38
- package/dist/migrations/0003_agent_telegram.sql +0 -40
- package/dist/migrations/0004_agent_mirror_mode.sql +0 -17
- package/dist/migrations/0005_group_topic_name_format.sql +0 -15
- package/dist/migrations/0006_telegram_acl.sql +0 -18
- package/dist/migrations/0007_mcp_servers.sql +0 -30
- package/dist/migrations/0008_seed_user_md.sql +0 -39
- package/dist/web/client/assets/MembersEditor-C6UpqDdV.js +0 -1
- package/dist/web/client/assets/SpawnTeamModal-BEkNCKXm.js +0 -1
- package/dist/web/client/assets/TemplatesTabs-UM04RMO9.js +0 -1
- package/dist/web/client/assets/_id-BNJapCT4.js +0 -1
- package/dist/web/client/assets/_id-CjGoV8Mr.js +0 -1
- package/dist/web/client/assets/_id-DehuCHUw.js +0 -1
- package/dist/web/client/assets/_id-Dz9fjcCM.js +0 -1
- package/dist/web/client/assets/agents-M6omAXcZ.js +0 -1
- package/dist/web/client/assets/groups-DpE2d2zZ.js +0 -1
- package/dist/web/client/assets/inbox-BPnLsRNf.js +0 -1
- package/dist/web/client/assets/index-MAJuXnie.js +0 -12
- package/dist/web/client/assets/memory-BpHbdKsd.js +0 -1
- package/dist/web/client/assets/profile-groups-ByoKak0c.js +0 -1
- package/dist/web/client/assets/profiles-BEjv8LGo.js +0 -1
- package/dist/web/client/assets/routes-D2COHy7v.js +0 -1
- package/dist/web/client/assets/services-D212jSK_.js +0 -1
- package/dist/web/client/assets/styles-BgE5bCHA.css +0 -2
- package/dist/web/client/assets/telegram-Czh2MdVm.js +0 -1
- package/dist/web/client/assets/triggers-BBRZQOm7.js +0 -1
- package/dist/web/client/assets/welcome-Dn-zvmBE.js +0 -1
- package/dist/web/client/assets/wire-constants-BkT5-597.js +0 -1
- package/dist/web/server/assets/MembersEditor-BWQztvrX.js +0 -131
- package/dist/web/server/assets/SpawnTeamModal-dSN421k_.js +0 -107
- package/dist/web/server/assets/_id-BKev9H1p.js +0 -12
- package/dist/web/server/assets/_id-BNwlbWHP.js +0 -24
- package/dist/web/server/assets/_id-CRqqi8IE.js +0 -161
- package/dist/web/server/assets/_tanstack-start-manifest_v-D9FLKShQ.js +0 -178
- package/dist/web/server/assets/groups-CbSwND2r.js +0 -12
- package/dist/web/server/assets/groups-CeRRlZaZ.js +0 -150
- package/dist/web/server/assets/groups-pk4CYSuf.js +0 -21
- package/dist/web/server/assets/memory-CQaqWnyM.js +0 -284
- package/dist/web/server/assets/profile-groups-CiU06yN1.js +0 -28
- package/dist/web/server/assets/profile-groups-D21MYoLM.js +0 -208
- package/dist/web/server/assets/profile-groups-aoJleXHP.js +0 -12
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
//#region src/lib/team-policy.ts
|
|
2
|
+
var DEFAULT_PROFILE_COMMUNICATION = {
|
|
3
|
+
userInput: true,
|
|
4
|
+
userOutput: true,
|
|
5
|
+
outsideTeamInput: true,
|
|
6
|
+
outsideTeamOutput: true,
|
|
7
|
+
peerDefault: "inherit_team_policy"
|
|
8
|
+
};
|
|
9
|
+
var USER_ENDPOINT = { kind: "user" };
|
|
10
|
+
var OUTSIDE_GROUP_ENDPOINT = { kind: "outside_team" };
|
|
11
|
+
function endpointKey(endpoint) {
|
|
12
|
+
switch (endpoint.kind) {
|
|
13
|
+
case "user": return "user";
|
|
14
|
+
case "outside_team": return "outside_team";
|
|
15
|
+
case "member_slot": return `slot:${endpoint.slotId}`;
|
|
16
|
+
case "agent": return `agent:${endpoint.agentId}`;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function endpointFromKey(key) {
|
|
20
|
+
if (key === "user") return USER_ENDPOINT;
|
|
21
|
+
if (key === "outside_team") return OUTSIDE_GROUP_ENDPOINT;
|
|
22
|
+
if (key.startsWith("slot:") && key.length > 5) return {
|
|
23
|
+
kind: "member_slot",
|
|
24
|
+
slotId: key.slice(5)
|
|
25
|
+
};
|
|
26
|
+
if (key.startsWith("agent:") && key.length > 6) return {
|
|
27
|
+
kind: "agent",
|
|
28
|
+
agentId: key.slice(6)
|
|
29
|
+
};
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
function endpointsEqual(left, right) {
|
|
33
|
+
return endpointKey(left) === endpointKey(right);
|
|
34
|
+
}
|
|
35
|
+
function edgeKey(source, target) {
|
|
36
|
+
return `${endpointKey(source)}>${endpointKey(target)}`;
|
|
37
|
+
}
|
|
38
|
+
function edgeId(source, target) {
|
|
39
|
+
return `edge:${edgeKey(source, target)}`;
|
|
40
|
+
}
|
|
41
|
+
function isMemberEndpoint(endpoint) {
|
|
42
|
+
return endpoint.kind === "member_slot" || endpoint.kind === "agent";
|
|
43
|
+
}
|
|
44
|
+
function isValidTeamPolicyConnection(source, target) {
|
|
45
|
+
if (endpointsEqual(source, target)) return false;
|
|
46
|
+
if (!isMemberEndpoint(source) && !isMemberEndpoint(target)) return false;
|
|
47
|
+
if (source.kind === "member_slot" && target.kind === "agent") return false;
|
|
48
|
+
if (source.kind === "agent" && target.kind === "member_slot") return false;
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
function hasTeamPolicyEdge(policy, source, target) {
|
|
52
|
+
const wanted = edgeKey(source, target);
|
|
53
|
+
return policy.edges.some((edge) => edgeKey(edge.source, edge.target) === wanted);
|
|
54
|
+
}
|
|
55
|
+
function addTeamPolicyEdge(policy, source, target) {
|
|
56
|
+
if (!isValidTeamPolicyConnection(source, target) || hasTeamPolicyEdge(policy, source, target)) return policy;
|
|
57
|
+
return {
|
|
58
|
+
...policy,
|
|
59
|
+
edges: [...policy.edges, {
|
|
60
|
+
id: edgeId(source, target),
|
|
61
|
+
source,
|
|
62
|
+
target
|
|
63
|
+
}]
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function removeTeamPolicyEdge(policy, source, target) {
|
|
67
|
+
const unwanted = edgeKey(source, target);
|
|
68
|
+
const edges = policy.edges.filter((edge) => edgeKey(edge.source, edge.target) !== unwanted);
|
|
69
|
+
return edges.length === policy.edges.length ? policy : {
|
|
70
|
+
...policy,
|
|
71
|
+
edges
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
function endpointForMember(teamPolicy, member) {
|
|
75
|
+
if (teamPolicy.kind === "live") return {
|
|
76
|
+
kind: "agent",
|
|
77
|
+
agentId: member.agentId ?? `prototype:${member.slotId}`
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
kind: "member_slot",
|
|
81
|
+
slotId: member.slotId
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function findTeamPolicyMember(teamPolicy, endpoint) {
|
|
85
|
+
if (endpoint.kind === "member_slot") return teamPolicy.members.find((member) => member.slotId === endpoint.slotId);
|
|
86
|
+
if (endpoint.kind === "agent") return teamPolicy.members.find((member) => (member.agentId ?? `prototype:${member.slotId}`) === endpoint.agentId);
|
|
87
|
+
}
|
|
88
|
+
function emptyPolicy() {
|
|
89
|
+
return {
|
|
90
|
+
version: 1,
|
|
91
|
+
edges: []
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
function addBothDirections(policy, left, right) {
|
|
95
|
+
return addTeamPolicyEdge(addTeamPolicyEdge(policy, left, right), right, left);
|
|
96
|
+
}
|
|
97
|
+
function createPresetPolicy(kind, members, preset) {
|
|
98
|
+
const endpoints = members.map((member) => endpointForMember({ kind }, member));
|
|
99
|
+
let policy = emptyPolicy();
|
|
100
|
+
if (preset === "blank") return policy;
|
|
101
|
+
if (preset === "open_team") {
|
|
102
|
+
for (let index = 0; index < endpoints.length; index++) {
|
|
103
|
+
const endpoint = endpoints[index];
|
|
104
|
+
if (!endpoint) continue;
|
|
105
|
+
policy = addBothDirections(policy, USER_ENDPOINT, endpoint);
|
|
106
|
+
policy = addBothDirections(policy, OUTSIDE_GROUP_ENDPOINT, endpoint);
|
|
107
|
+
for (let peerIndex = index + 1; peerIndex < endpoints.length; peerIndex++) {
|
|
108
|
+
const peer = endpoints[peerIndex];
|
|
109
|
+
if (peer) policy = addBothDirections(policy, endpoint, peer);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return policy;
|
|
113
|
+
}
|
|
114
|
+
if (preset === "coordinator") {
|
|
115
|
+
const coordinator = endpoints[Math.max(0, members.findIndex((member) => member.role === "coordinator"))];
|
|
116
|
+
if (!coordinator) return policy;
|
|
117
|
+
policy = addBothDirections(policy, USER_ENDPOINT, coordinator);
|
|
118
|
+
for (const endpoint of endpoints) if (endpoint && !endpointsEqual(endpoint, coordinator)) policy = addBothDirections(policy, coordinator, endpoint);
|
|
119
|
+
return policy;
|
|
120
|
+
}
|
|
121
|
+
const sequence = [
|
|
122
|
+
USER_ENDPOINT,
|
|
123
|
+
...[
|
|
124
|
+
"planner",
|
|
125
|
+
"worker",
|
|
126
|
+
"reviewer",
|
|
127
|
+
"reporter"
|
|
128
|
+
].map((role) => {
|
|
129
|
+
const member = members.find((candidate) => candidate.role === role);
|
|
130
|
+
return member ? endpointForMember({ kind }, member) : void 0;
|
|
131
|
+
}).filter((endpoint) => Boolean(endpoint)),
|
|
132
|
+
USER_ENDPOINT
|
|
133
|
+
];
|
|
134
|
+
for (let index = 0; index < sequence.length - 1; index++) {
|
|
135
|
+
const source = sequence[index];
|
|
136
|
+
const target = sequence[index + 1];
|
|
137
|
+
if (source && target && !endpointsEqual(source, target)) policy = addTeamPolicyEdge(policy, source, target);
|
|
138
|
+
}
|
|
139
|
+
return policy;
|
|
140
|
+
}
|
|
141
|
+
function applyProfileDefaults(policy, teamPolicy, member, defaults) {
|
|
142
|
+
const endpoint = endpointForMember(teamPolicy, member);
|
|
143
|
+
let next = policy;
|
|
144
|
+
const boundaryRules = [
|
|
145
|
+
[
|
|
146
|
+
defaults.userInput,
|
|
147
|
+
USER_ENDPOINT,
|
|
148
|
+
endpoint
|
|
149
|
+
],
|
|
150
|
+
[
|
|
151
|
+
defaults.userOutput,
|
|
152
|
+
endpoint,
|
|
153
|
+
USER_ENDPOINT
|
|
154
|
+
],
|
|
155
|
+
[
|
|
156
|
+
defaults.outsideTeamInput,
|
|
157
|
+
OUTSIDE_GROUP_ENDPOINT,
|
|
158
|
+
endpoint
|
|
159
|
+
],
|
|
160
|
+
[
|
|
161
|
+
defaults.outsideTeamOutput,
|
|
162
|
+
endpoint,
|
|
163
|
+
OUTSIDE_GROUP_ENDPOINT
|
|
164
|
+
]
|
|
165
|
+
];
|
|
166
|
+
for (const [allowed, source, target] of boundaryRules) next = allowed ? addTeamPolicyEdge(next, source, target) : removeTeamPolicyEdge(next, source, target);
|
|
167
|
+
if (defaults.peerDefault === "inherit_team_policy") return next;
|
|
168
|
+
for (const peer of teamPolicy.members) {
|
|
169
|
+
if (peer.slotId === member.slotId) continue;
|
|
170
|
+
const peerEndpoint = endpointForMember(teamPolicy, peer);
|
|
171
|
+
if (defaults.peerDefault === "allow_all") next = addBothDirections(next, endpoint, peerEndpoint);
|
|
172
|
+
else {
|
|
173
|
+
next = removeTeamPolicyEdge(next, endpoint, peerEndpoint);
|
|
174
|
+
next = removeTeamPolicyEdge(next, peerEndpoint, endpoint);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return next;
|
|
178
|
+
}
|
|
179
|
+
//#endregion
|
|
180
|
+
export { applyProfileDefaults as a, endpointFromKey as c, hasTeamPolicyEdge as d, isValidTeamPolicyConnection as f, addTeamPolicyEdge as i, endpointKey as l, OUTSIDE_GROUP_ENDPOINT as n, createPresetPolicy as o, removeTeamPolicyEdge as p, USER_ENDPOINT as r, endpointForMember as s, DEFAULT_PROFILE_COMMUNICATION as t, findTeamPolicyMember as u };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { t as createServerFn } from "../server.js";
|
|
2
|
+
import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
|
|
3
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
4
|
+
//#region src/routes/teams/index.tsx
|
|
5
|
+
var $$splitErrorComponentImporter = () => import("./teams-3im0oQnS.js");
|
|
6
|
+
var $$splitComponentImporter = () => import("./teams-zcm9XaQU.js");
|
|
7
|
+
var fetchTeamsData = createServerFn({ method: "GET" }).handler(createSsrRpc("1ab05a58944792f34ad279deeaa56f70e9360687856b18327f335b022e8d21a5"));
|
|
8
|
+
var Route = createFileRoute("/teams/")({
|
|
9
|
+
loader: () => fetchTeamsData(),
|
|
10
|
+
component: lazyRouteComponent($$splitComponentImporter, "component"),
|
|
11
|
+
errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent")
|
|
12
|
+
});
|
|
13
|
+
//#endregion
|
|
14
|
+
export { Route as t };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { t as RecoveryState } from "./RecoveryState-B2SG-mrY.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
//#region src/routes/teams/index.tsx?tsr-split=errorComponent
|
|
4
|
+
var SplitErrorComponent = ({ error, reset }) => /* @__PURE__ */ jsx(RecoveryState, {
|
|
5
|
+
title: "Teams unavailable",
|
|
6
|
+
error,
|
|
7
|
+
reset,
|
|
8
|
+
fallbackHref: "/"
|
|
9
|
+
});
|
|
10
|
+
//#endregion
|
|
11
|
+
export { SplitErrorComponent as errorComponent };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { t as createServerFn } from "../server.js";
|
|
2
|
+
import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
|
|
3
|
+
import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
|
|
4
|
+
//#region src/routes/templates/teams/index.tsx?tss-serverfn-split
|
|
5
|
+
var fetchTeams_createServerFn_handler = createServerRpc({
|
|
6
|
+
id: "1bb12262aaa902fa208aafaa70b69c63da34c1fe523ab0322fe766903fc6b4c1",
|
|
7
|
+
name: "fetchTeams",
|
|
8
|
+
filename: "src/routes/templates/teams/index.tsx"
|
|
9
|
+
}, (opts) => fetchTeams.__executeServer(opts));
|
|
10
|
+
var fetchTeams = createServerFn({ method: "GET" }).handler(fetchTeams_createServerFn_handler, () => daemonClient().get("/api/team-templates"));
|
|
11
|
+
//#endregion
|
|
12
|
+
export { fetchTeams_createServerFn_handler };
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { t as Route } from "./teams-DH1CvWmT.js";
|
|
2
|
+
import { t as Button } from "./Button-Dsnw22OF.js";
|
|
3
|
+
import { t as TemplatesTabs } from "./TemplatesTabs-zf4YhStd.js";
|
|
4
|
+
import { useState } from "react";
|
|
5
|
+
import { useRouter } from "@tanstack/react-router";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region src/routes/templates/teams/index.tsx?tsr-split=component
|
|
8
|
+
function TeamTemplatesPage() {
|
|
9
|
+
const teams = Route.useLoaderData();
|
|
10
|
+
const router = useRouter();
|
|
11
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
12
|
+
/* @__PURE__ */ jsx(TemplatesTabs, {}),
|
|
13
|
+
/* @__PURE__ */ jsx("h1", { children: "team templates" }),
|
|
14
|
+
/* @__PURE__ */ jsx("p", {
|
|
15
|
+
className: "muted",
|
|
16
|
+
children: "The sole reusable Team roster. Every slot has stable identity and every saved definition has an immutable revision."
|
|
17
|
+
}),
|
|
18
|
+
/* @__PURE__ */ jsx(CreateTeamForm, { onCreated: () => router.invalidate() }),
|
|
19
|
+
/* @__PURE__ */ jsx("div", {
|
|
20
|
+
className: "overflow-x-auto",
|
|
21
|
+
children: /* @__PURE__ */ jsxs("table", { children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
22
|
+
/* @__PURE__ */ jsx("th", { children: "id" }),
|
|
23
|
+
/* @__PURE__ */ jsx("th", { children: "name" }),
|
|
24
|
+
/* @__PURE__ */ jsx("th", { children: "slots" }),
|
|
25
|
+
/* @__PURE__ */ jsx("th", { children: "revision" }),
|
|
26
|
+
/* @__PURE__ */ jsx("th", { children: "source state" })
|
|
27
|
+
] }) }), /* @__PURE__ */ jsxs("tbody", { children: [teams.map((team) => /* @__PURE__ */ jsxs("tr", { children: [
|
|
28
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("a", {
|
|
29
|
+
href: `/templates/teams/${encodeURIComponent(team.id)}`,
|
|
30
|
+
children: /* @__PURE__ */ jsx("code", { children: team.id })
|
|
31
|
+
}) }),
|
|
32
|
+
/* @__PURE__ */ jsx("td", { children: team.name }),
|
|
33
|
+
/* @__PURE__ */ jsx("td", { children: team.slotCount }),
|
|
34
|
+
/* @__PURE__ */ jsx("td", { children: team.currentRevision }),
|
|
35
|
+
/* @__PURE__ */ jsx("td", { children: team.deletedAt ? "deleted source" : "canonical" })
|
|
36
|
+
] }, team.id)), teams.length === 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
|
|
37
|
+
colSpan: 5,
|
|
38
|
+
className: "muted",
|
|
39
|
+
children: "No team templates yet."
|
|
40
|
+
}) })] })] })
|
|
41
|
+
})
|
|
42
|
+
] });
|
|
43
|
+
}
|
|
44
|
+
function CreateTeamForm({ onCreated }) {
|
|
45
|
+
const [id, setId] = useState("");
|
|
46
|
+
const [name, setName] = useState("");
|
|
47
|
+
const [error, setError] = useState(null);
|
|
48
|
+
const [busy, setBusy] = useState(false);
|
|
49
|
+
async function submit(event) {
|
|
50
|
+
event.preventDefault();
|
|
51
|
+
setBusy(true);
|
|
52
|
+
setError(null);
|
|
53
|
+
try {
|
|
54
|
+
const response = await fetch("/api/team-templates", {
|
|
55
|
+
method: "POST",
|
|
56
|
+
headers: { "content-type": "application/json" },
|
|
57
|
+
body: JSON.stringify({
|
|
58
|
+
id: id.trim(),
|
|
59
|
+
name: name.trim()
|
|
60
|
+
})
|
|
61
|
+
});
|
|
62
|
+
if (!response.ok) throw new Error((await response.json().catch(() => null))?.error ?? response.statusText);
|
|
63
|
+
setId("");
|
|
64
|
+
setName("");
|
|
65
|
+
await onCreated();
|
|
66
|
+
} catch (cause) {
|
|
67
|
+
setError(cause.message);
|
|
68
|
+
} finally {
|
|
69
|
+
setBusy(false);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return /* @__PURE__ */ jsxs("form", {
|
|
73
|
+
className: "card",
|
|
74
|
+
onSubmit: submit,
|
|
75
|
+
children: [
|
|
76
|
+
/* @__PURE__ */ jsx("h2", {
|
|
77
|
+
className: "text-xl",
|
|
78
|
+
children: "new team template"
|
|
79
|
+
}),
|
|
80
|
+
error && /* @__PURE__ */ jsx("p", {
|
|
81
|
+
className: "err",
|
|
82
|
+
children: error
|
|
83
|
+
}),
|
|
84
|
+
/* @__PURE__ */ jsxs("div", {
|
|
85
|
+
className: "grid gap-3 sm:grid-cols-2",
|
|
86
|
+
children: [/* @__PURE__ */ jsxs("label", { children: ["id", /* @__PURE__ */ jsx("input", {
|
|
87
|
+
required: true,
|
|
88
|
+
value: id,
|
|
89
|
+
onChange: (event) => setId(event.target.value),
|
|
90
|
+
placeholder: "review-team"
|
|
91
|
+
})] }), /* @__PURE__ */ jsxs("label", { children: ["name", /* @__PURE__ */ jsx("input", {
|
|
92
|
+
required: true,
|
|
93
|
+
value: name,
|
|
94
|
+
onChange: (event) => setName(event.target.value),
|
|
95
|
+
placeholder: "Review team"
|
|
96
|
+
})] })]
|
|
97
|
+
}),
|
|
98
|
+
/* @__PURE__ */ jsx(Button, {
|
|
99
|
+
variant: "primary",
|
|
100
|
+
type: "submit",
|
|
101
|
+
disabled: busy,
|
|
102
|
+
children: busy ? "creating…" : "create team template"
|
|
103
|
+
})
|
|
104
|
+
]
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//#endregion
|
|
108
|
+
export { TeamTemplatesPage as component };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { t as createServerFn } from "../server.js";
|
|
2
|
+
import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
|
|
3
|
+
import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
|
|
4
|
+
//#region src/routes/teams/index.tsx?tss-serverfn-split
|
|
5
|
+
var fetchTeamsData_createServerFn_handler = createServerRpc({
|
|
6
|
+
id: "1ab05a58944792f34ad279deeaa56f70e9360687856b18327f335b022e8d21a5",
|
|
7
|
+
name: "fetchTeamsData",
|
|
8
|
+
filename: "src/routes/teams/index.tsx"
|
|
9
|
+
}, (opts) => fetchTeamsData.__executeServer(opts));
|
|
10
|
+
var fetchTeamsData = createServerFn({ method: "GET" }).handler(fetchTeamsData_createServerFn_handler, async () => {
|
|
11
|
+
const c = daemonClient();
|
|
12
|
+
const [teams, agents, health] = await Promise.all([
|
|
13
|
+
c.get("/api/teams"),
|
|
14
|
+
c.get("/api/agents?includeArchived=true"),
|
|
15
|
+
c.get("/api/health")
|
|
16
|
+
]);
|
|
17
|
+
const memberCounts = {};
|
|
18
|
+
for (const a of agents) memberCounts[a.teamId] = (memberCounts[a.teamId] ?? 0) + 1;
|
|
19
|
+
const policies = {};
|
|
20
|
+
await Promise.all(teams.map(async (team) => {
|
|
21
|
+
const detail = await c.get(`/api/teams/${encodeURIComponent(team.id)}/policy`);
|
|
22
|
+
policies[team.id] = {
|
|
23
|
+
revision: detail.teamPolicy.revision,
|
|
24
|
+
baseline: detail.baseline ? `${detail.baseline.templateId} r${detail.baseline.templateRevision}` : null,
|
|
25
|
+
edges: detail.edges.length
|
|
26
|
+
};
|
|
27
|
+
}));
|
|
28
|
+
return {
|
|
29
|
+
teams,
|
|
30
|
+
memberCounts,
|
|
31
|
+
policies,
|
|
32
|
+
readiness: health.teamPolicyManagement
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
//#endregion
|
|
36
|
+
export { fetchTeamsData_createServerFn_handler };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { t as createServerFn } from "../server.js";
|
|
2
|
+
import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
|
|
3
|
+
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
4
|
+
//#region src/routes/templates/teams/index.tsx
|
|
5
|
+
var $$splitComponentImporter = () => import("./teams-B9O-WDH5.js");
|
|
6
|
+
var fetchTeams = createServerFn({ method: "GET" }).handler(createSsrRpc("1bb12262aaa902fa208aafaa70b69c63da34c1fe523ab0322fe766903fc6b4c1"));
|
|
7
|
+
var Route = createFileRoute("/templates/teams/")({
|
|
8
|
+
loader: () => fetchTeams(),
|
|
9
|
+
component: lazyRouteComponent($$splitComponentImporter, "component")
|
|
10
|
+
});
|
|
11
|
+
//#endregion
|
|
12
|
+
export { Route as t };
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { t as Route } from "./teams-35Oprf6e.js";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { useRouter } from "@tanstack/react-router";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
//#region src/routes/teams/index.tsx?tsr-split=component
|
|
6
|
+
function TeamsPage() {
|
|
7
|
+
const { teams, memberCounts, policies, readiness } = Route.useLoaderData();
|
|
8
|
+
const router = useRouter();
|
|
9
|
+
async function remove(id) {
|
|
10
|
+
if (!confirm("remove this team registration?")) return;
|
|
11
|
+
const revision = policies[id]?.revision;
|
|
12
|
+
if (!revision) return;
|
|
13
|
+
const res = await fetch(`/api/teams/${encodeURIComponent(id)}?expectedTeamPolicyRevision=${revision}`, { method: "DELETE" });
|
|
14
|
+
if (!res.ok && res.status !== 204) {
|
|
15
|
+
alert(res.statusText);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
await router.invalidate();
|
|
19
|
+
}
|
|
20
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
21
|
+
/* @__PURE__ */ jsx("h1", { children: "teams" }),
|
|
22
|
+
/* @__PURE__ */ jsx("p", {
|
|
23
|
+
className: "muted",
|
|
24
|
+
children: "A Team owns one workspace, one live membership roster, and exactly one effective policy. Every agent belongs to exactly one Team."
|
|
25
|
+
}),
|
|
26
|
+
/* @__PURE__ */ jsxs("aside", {
|
|
27
|
+
className: "card",
|
|
28
|
+
"aria-label": "TeamPolicy enforcement readiness",
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsx("strong", { children: readiness.enforcementActive ? "Team Policy enforcement is active." : "Team Policy enforcement is currently off." }),
|
|
31
|
+
" ",
|
|
32
|
+
/* @__PURE__ */ jsxs("span", {
|
|
33
|
+
className: "muted",
|
|
34
|
+
children: [
|
|
35
|
+
"Management contract v",
|
|
36
|
+
readiness.contractVersion,
|
|
37
|
+
" is release-ready. Set",
|
|
38
|
+
" ",
|
|
39
|
+
/* @__PURE__ */ jsx("code", { children: "BAZILION_TEAM_POLICY_ENFORCEMENT=on" }),
|
|
40
|
+
" and restart the daemon to enforce it."
|
|
41
|
+
]
|
|
42
|
+
})
|
|
43
|
+
]
|
|
44
|
+
}),
|
|
45
|
+
/* @__PURE__ */ jsx(RegisterTeamForm, { onRegistered: () => router.invalidate() }),
|
|
46
|
+
/* @__PURE__ */ jsx("div", {
|
|
47
|
+
className: "overflow-x-auto",
|
|
48
|
+
children: /* @__PURE__ */ jsxs("table", { children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
49
|
+
/* @__PURE__ */ jsx("th", { children: "id" }),
|
|
50
|
+
/* @__PURE__ */ jsx("th", { children: "name" }),
|
|
51
|
+
/* @__PURE__ */ jsx("th", { children: "members" }),
|
|
52
|
+
/* @__PURE__ */ jsx("th", { children: "policy" }),
|
|
53
|
+
/* @__PURE__ */ jsx("th", { children: "baseline" }),
|
|
54
|
+
/* @__PURE__ */ jsx("th", {})
|
|
55
|
+
] }) }), /* @__PURE__ */ jsxs("tbody", { children: [teams.length === 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", {
|
|
56
|
+
colSpan: 6,
|
|
57
|
+
className: "muted",
|
|
58
|
+
children: "no teams registered"
|
|
59
|
+
}) }), teams.map((g) => {
|
|
60
|
+
const count = memberCounts[g.id] ?? 0;
|
|
61
|
+
const policy = policies[g.id];
|
|
62
|
+
return /* @__PURE__ */ jsxs("tr", { children: [
|
|
63
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("code", { children: g.id }) }),
|
|
64
|
+
/* @__PURE__ */ jsx("td", { children: g.name }),
|
|
65
|
+
/* @__PURE__ */ jsx("td", { children: count }),
|
|
66
|
+
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("a", {
|
|
67
|
+
href: `/teams/${g.id}/policy`,
|
|
68
|
+
children: policy ? `r${policy.revision} · ${policy.edges} edges` : "unavailable"
|
|
69
|
+
}) }),
|
|
70
|
+
/* @__PURE__ */ jsx("td", { children: policy?.baseline ?? "none" }),
|
|
71
|
+
/* @__PURE__ */ jsx("td", { children: count === 0 ? /* @__PURE__ */ jsx("button", {
|
|
72
|
+
type: "button",
|
|
73
|
+
className: "ghost-btn",
|
|
74
|
+
onClick: () => remove(g.id),
|
|
75
|
+
children: "remove"
|
|
76
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
77
|
+
className: "muted",
|
|
78
|
+
title: `${count} agent(s) belong to this team`,
|
|
79
|
+
children: "in use"
|
|
80
|
+
}) })
|
|
81
|
+
] }, g.id);
|
|
82
|
+
})] })] })
|
|
83
|
+
})
|
|
84
|
+
] });
|
|
85
|
+
}
|
|
86
|
+
function RegisterTeamForm({ onRegistered }) {
|
|
87
|
+
const [id, setId] = useState("");
|
|
88
|
+
const [name, setName] = useState("");
|
|
89
|
+
const [link, setLink] = useState("");
|
|
90
|
+
const [err, setErr] = useState(null);
|
|
91
|
+
const [submitting, setSubmitting] = useState(false);
|
|
92
|
+
async function submit(e) {
|
|
93
|
+
e.preventDefault();
|
|
94
|
+
setErr(null);
|
|
95
|
+
if (!id.trim()) {
|
|
96
|
+
setErr("id is required");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
setSubmitting(true);
|
|
100
|
+
try {
|
|
101
|
+
const res = await fetch("/api/teams", {
|
|
102
|
+
method: "POST",
|
|
103
|
+
headers: { "content-type": "application/json" },
|
|
104
|
+
body: JSON.stringify({
|
|
105
|
+
id: id.trim(),
|
|
106
|
+
name: name.trim() || void 0,
|
|
107
|
+
link: link.trim() || void 0
|
|
108
|
+
})
|
|
109
|
+
});
|
|
110
|
+
if (!res.ok) {
|
|
111
|
+
const e2 = await res.json().catch(() => null);
|
|
112
|
+
throw new Error(e2?.error ?? res.statusText);
|
|
113
|
+
}
|
|
114
|
+
setId("");
|
|
115
|
+
setName("");
|
|
116
|
+
setLink("");
|
|
117
|
+
onRegistered();
|
|
118
|
+
} catch (e2) {
|
|
119
|
+
setErr(e2.message);
|
|
120
|
+
} finally {
|
|
121
|
+
setSubmitting(false);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return /* @__PURE__ */ jsxs("form", {
|
|
125
|
+
className: "card",
|
|
126
|
+
onSubmit: submit,
|
|
127
|
+
children: [
|
|
128
|
+
/* @__PURE__ */ jsx("h3", { children: "register team" }),
|
|
129
|
+
err && /* @__PURE__ */ jsx("div", {
|
|
130
|
+
className: "err",
|
|
131
|
+
children: err
|
|
132
|
+
}),
|
|
133
|
+
/* @__PURE__ */ jsxs("p", {
|
|
134
|
+
className: "muted",
|
|
135
|
+
children: [
|
|
136
|
+
"Teams always live under ",
|
|
137
|
+
/* @__PURE__ */ jsx("code", { children: "~/.bazilion/teams/<slug>/" }),
|
|
138
|
+
". Leave the link target blank to create a fresh directory; supply an absolute path to materialize the slot as a symlink to your existing project tree instead."
|
|
139
|
+
]
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ jsxs("div", {
|
|
142
|
+
className: "flex gap-4",
|
|
143
|
+
children: [/* @__PURE__ */ jsxs("label", {
|
|
144
|
+
className: "flex-1",
|
|
145
|
+
children: ["id (slug)", /* @__PURE__ */ jsx("input", {
|
|
146
|
+
value: id,
|
|
147
|
+
onChange: (e) => setId(e.target.value),
|
|
148
|
+
required: true,
|
|
149
|
+
placeholder: "myproject"
|
|
150
|
+
})]
|
|
151
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
152
|
+
className: "flex-1",
|
|
153
|
+
children: ["name", /* @__PURE__ */ jsx("input", {
|
|
154
|
+
value: name,
|
|
155
|
+
onChange: (e) => setName(e.target.value),
|
|
156
|
+
placeholder: "My Project"
|
|
157
|
+
})]
|
|
158
|
+
})]
|
|
159
|
+
}),
|
|
160
|
+
/* @__PURE__ */ jsxs("label", { children: ["link target (optional, absolute path)", /* @__PURE__ */ jsx("input", {
|
|
161
|
+
value: link,
|
|
162
|
+
onChange: (e) => setLink(e.target.value),
|
|
163
|
+
placeholder: "/home/user/projects/myproject"
|
|
164
|
+
})] }),
|
|
165
|
+
/* @__PURE__ */ jsx("button", {
|
|
166
|
+
type: "submit",
|
|
167
|
+
disabled: submitting,
|
|
168
|
+
children: submitting ? "registering…" : "register"
|
|
169
|
+
})
|
|
170
|
+
]
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//#endregion
|
|
174
|
+
export { TeamsPage as component };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as Route } from "./telegram-
|
|
2
|
-
import { t as ConfigTabs } from "./ConfigTabs-CyuxzesF.js";
|
|
1
|
+
import { t as Route } from "./telegram-mTnJCOmn.js";
|
|
3
2
|
import { t as Button } from "./Button-Dsnw22OF.js";
|
|
3
|
+
import { t as ConfigTabs } from "./ConfigTabs-CyuxzesF.js";
|
|
4
4
|
import { useEffect, useState } from "react";
|
|
5
5
|
import { useRouter } from "@tanstack/react-router";
|
|
6
6
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -141,7 +141,7 @@ function TelegramIntegrationPage() {
|
|
|
141
141
|
className: "text-xs text-muted-foreground mt-1",
|
|
142
142
|
children: [
|
|
143
143
|
"From @BotFather → /newbot. Disable Privacy Mode in ",
|
|
144
|
-
/* @__PURE__ */ jsx("em", { children: "Bot Settings →
|
|
144
|
+
/* @__PURE__ */ jsx("em", { children: "Bot Settings → Team Privacy → Turn off" }),
|
|
145
145
|
"."
|
|
146
146
|
]
|
|
147
147
|
})
|
|
@@ -422,7 +422,7 @@ function MigrationBanner({ toChatId }) {
|
|
|
422
422
|
children: "⚙ bazilion"
|
|
423
423
|
}),
|
|
424
424
|
" ",
|
|
425
|
-
"service chat in the new
|
|
425
|
+
"service chat in the new team. Agent topic bindings will reconcile on next use."
|
|
426
426
|
]
|
|
427
427
|
}),
|
|
428
428
|
/* @__PURE__ */ jsx(Button, {
|
|
@@ -532,7 +532,7 @@ function PreflightResult({ health }) {
|
|
|
532
532
|
/* @__PURE__ */ jsx(Check, {
|
|
533
533
|
ok: p.isForum,
|
|
534
534
|
label: "Forum topics enabled",
|
|
535
|
-
children: p.isForum ? "is_forum: true" : "is_forum: false — the supergroup owner must enable Topics in
|
|
535
|
+
children: p.isForum ? "is_forum: true" : "is_forum: false — the supergroup owner must enable Topics in team settings"
|
|
536
536
|
}),
|
|
537
537
|
/* @__PURE__ */ jsx(Check, {
|
|
538
538
|
ok: p.hasManageTopics,
|
|
@@ -542,7 +542,7 @@ function PreflightResult({ health }) {
|
|
|
542
542
|
/* @__PURE__ */ jsx(Check, {
|
|
543
543
|
ok: p.privacyModeOff,
|
|
544
544
|
label: "Privacy Mode is OFF",
|
|
545
|
-
children: p.privacyModeOff ? "can_read_all_group_messages: true" : "BotFather → /mybots → select bot → Bot Settings →
|
|
545
|
+
children: p.privacyModeOff ? "can_read_all_group_messages: true" : "BotFather → /mybots → select bot → Bot Settings → Team Privacy → Turn off"
|
|
546
546
|
})
|
|
547
547
|
]
|
|
548
548
|
});
|
|
@@ -571,7 +571,7 @@ function hintFor(step) {
|
|
|
571
571
|
});
|
|
572
572
|
case "getChat": return /* @__PURE__ */ jsx("p", {
|
|
573
573
|
className: "text-xs text-rose-900 mt-1",
|
|
574
|
-
children: "The chat id either doesn't exist, points at a basic
|
|
574
|
+
children: "The chat id either doesn't exist, points at a basic team (not a supergroup), or the bot isn't a member. Forward any message from the supergroup to the bot to double-check the id, then add the bot to the team."
|
|
575
575
|
});
|
|
576
576
|
case "getChatMember": return /* @__PURE__ */ jsx("p", {
|
|
577
577
|
className: "text-xs text-rose-900 mt-1",
|
|
@@ -2,7 +2,7 @@ import { t as createServerFn } from "../server.js";
|
|
|
2
2
|
import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
|
|
3
3
|
import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
|
|
4
4
|
//#region src/routes/config/integrations/telegram.tsx
|
|
5
|
-
var $$splitComponentImporter = () => import("./telegram-
|
|
5
|
+
var $$splitComponentImporter = () => import("./telegram-C9sQFwWj.js");
|
|
6
6
|
var fetchTelegramConfig = createServerFn({ method: "GET" }).handler(createSsrRpc("00a157dd07824e1f126f06646effd1d876f280f6fc64c144d2f6429414a4e58a"));
|
|
7
7
|
var Route = createFileRoute("/config/integrations/telegram")({
|
|
8
8
|
loader: () => fetchTelegramConfig(),
|
|
@@ -14,7 +14,7 @@ function WelcomePage() {
|
|
|
14
14
|
/* @__PURE__ */ jsx("code", { children: "default" }),
|
|
15
15
|
" profile (and a ",
|
|
16
16
|
/* @__PURE__ */ jsx("code", { children: "default" }),
|
|
17
|
-
"
|
|
17
|
+
" team directory) are created automatically and the rest of the app unlocks."
|
|
18
18
|
]
|
|
19
19
|
}),
|
|
20
20
|
/* @__PURE__ */ jsxs("ol", {
|
|
@@ -41,7 +41,7 @@ function WelcomePage() {
|
|
|
41
41
|
" ",
|
|
42
42
|
/* @__PURE__ */ jsx("code", { children: "claude-opus-4-8" }),
|
|
43
43
|
", ",
|
|
44
|
-
/* @__PURE__ */ jsx("code", { children: "gpt-5.
|
|
44
|
+
/* @__PURE__ */ jsx("code", { children: "gpt-5.6-luna" }),
|
|
45
45
|
", or ",
|
|
46
46
|
/* @__PURE__ */ jsx("code", { children: "llama3.3" }),
|
|
47
47
|
") and press ",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
//#region src/lib/wire-constants.ts
|
|
2
2
|
/** Stable id for the auto-seeded `default` profile. */
|
|
3
3
|
var DEFAULT_PROFILE_ID = "default";
|
|
4
|
-
/** Stable id for the auto-seeded `default`
|
|
5
|
-
var
|
|
4
|
+
/** Stable id for the auto-seeded `default` team. */
|
|
5
|
+
var DEFAULT_TEAM_ID = "default";
|
|
6
6
|
/** Mirrors the daemon's REASONING_LEVELS (apps/daemon/src/core). */
|
|
7
7
|
var REASONING_LEVELS = [
|
|
8
8
|
"off",
|
|
@@ -13,4 +13,4 @@ var REASONING_LEVELS = [
|
|
|
13
13
|
"xhigh"
|
|
14
14
|
];
|
|
15
15
|
//#endregion
|
|
16
|
-
export {
|
|
16
|
+
export { DEFAULT_TEAM_ID as n, REASONING_LEVELS as r, DEFAULT_PROFILE_ID as t };
|