@theihtisham/agent-shadow-brain 7.1.4 → 7.22.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.
Files changed (275) hide show
  1. package/CHANGELOG.md +478 -462
  2. package/README.md +97 -24
  3. package/dist/brain/auto-update.js +1 -1
  4. package/dist/brain/auto-update.js.map +1 -1
  5. package/dist/brain/brain-portability.js +1 -1
  6. package/dist/brain/brain-portability.js.map +1 -1
  7. package/dist/brain/client-integrations.js +1 -1
  8. package/dist/brain/client-integrations.js.map +1 -1
  9. package/dist/brain/context-assembly.d.ts +10 -0
  10. package/dist/brain/context-assembly.d.ts.map +1 -1
  11. package/dist/brain/context-assembly.js +15 -6
  12. package/dist/brain/context-assembly.js.map +1 -1
  13. package/dist/brain/context-efficiency.d.ts +48 -0
  14. package/dist/brain/context-efficiency.d.ts.map +1 -0
  15. package/dist/brain/context-efficiency.js +34 -0
  16. package/dist/brain/context-efficiency.js.map +1 -0
  17. package/dist/brain/context-request.d.ts +1 -1
  18. package/dist/brain/context-request.d.ts.map +1 -1
  19. package/dist/brain/context-request.js +4 -2
  20. package/dist/brain/context-request.js.map +1 -1
  21. package/dist/brain/context-retrieval.d.ts +1 -1
  22. package/dist/brain/context-retrieval.d.ts.map +1 -1
  23. package/dist/brain/context-retrieval.js +2 -1
  24. package/dist/brain/context-retrieval.js.map +1 -1
  25. package/dist/brain/feature-settings.d.ts +5 -0
  26. package/dist/brain/feature-settings.d.ts.map +1 -1
  27. package/dist/brain/feature-settings.js +8 -2
  28. package/dist/brain/feature-settings.js.map +1 -1
  29. package/dist/brain/global-brain.d.ts +1 -1
  30. package/dist/brain/global-brain.d.ts.map +1 -1
  31. package/dist/brain/global-brain.js +1 -0
  32. package/dist/brain/global-brain.js.map +1 -1
  33. package/dist/brain/managed-project-skills.d.ts +48 -0
  34. package/dist/brain/managed-project-skills.d.ts.map +1 -0
  35. package/dist/brain/managed-project-skills.js +230 -0
  36. package/dist/brain/managed-project-skills.js.map +1 -0
  37. package/dist/brain/mcp-presence.d.ts +50 -0
  38. package/dist/brain/mcp-presence.d.ts.map +1 -0
  39. package/dist/brain/mcp-presence.js +214 -0
  40. package/dist/brain/mcp-presence.js.map +1 -0
  41. package/dist/brain/mcp-server.d.ts +12 -0
  42. package/dist/brain/mcp-server.d.ts.map +1 -1
  43. package/dist/brain/mcp-server.js +177 -31
  44. package/dist/brain/mcp-server.js.map +1 -1
  45. package/dist/brain/mcp-stdio.d.ts +1 -1
  46. package/dist/brain/mcp-stdio.d.ts.map +1 -1
  47. package/dist/brain/mcp-stdio.js +19 -1
  48. package/dist/brain/mcp-stdio.js.map +1 -1
  49. package/dist/brain/memory-annotations.d.ts +2 -0
  50. package/dist/brain/memory-annotations.d.ts.map +1 -1
  51. package/dist/brain/memory-annotations.js +13 -0
  52. package/dist/brain/memory-annotations.js.map +1 -1
  53. package/dist/brain/memory-inspection.d.ts +1 -0
  54. package/dist/brain/memory-inspection.d.ts.map +1 -1
  55. package/dist/brain/memory-inspection.js +1 -1
  56. package/dist/brain/memory-inspection.js.map +1 -1
  57. package/dist/brain/memory-mcp-content.d.ts +4 -2
  58. package/dist/brain/memory-mcp-content.d.ts.map +1 -1
  59. package/dist/brain/memory-mcp-content.js +20 -16
  60. package/dist/brain/memory-mcp-content.js.map +1 -1
  61. package/dist/brain/model-registry.d.ts +4 -5
  62. package/dist/brain/model-registry.d.ts.map +1 -1
  63. package/dist/brain/model-registry.js +22 -207
  64. package/dist/brain/model-registry.js.map +1 -1
  65. package/dist/brain/model-usage.d.ts +66 -0
  66. package/dist/brain/model-usage.d.ts.map +1 -0
  67. package/dist/brain/model-usage.js +246 -0
  68. package/dist/brain/model-usage.js.map +1 -0
  69. package/dist/brain/native-codex.d.ts +105 -0
  70. package/dist/brain/native-codex.d.ts.map +1 -0
  71. package/dist/brain/native-codex.js +292 -0
  72. package/dist/brain/native-codex.js.map +1 -0
  73. package/dist/brain/native-session-import.d.ts +56 -0
  74. package/dist/brain/native-session-import.d.ts.map +1 -0
  75. package/dist/brain/native-session-import.js +307 -0
  76. package/dist/brain/native-session-import.js.map +1 -0
  77. package/dist/brain/orchestrator.js +1 -1
  78. package/dist/brain/orchestrator.js.map +1 -1
  79. package/dist/brain/project-feedback.d.ts +1 -1
  80. package/dist/brain/project-feedback.d.ts.map +1 -1
  81. package/dist/brain/project-feedback.js +19 -8
  82. package/dist/brain/project-feedback.js.map +1 -1
  83. package/dist/brain/project-hub-contract.d.ts +6 -0
  84. package/dist/brain/project-hub-contract.d.ts.map +1 -1
  85. package/dist/brain/project-hub-contract.js +2 -1
  86. package/dist/brain/project-hub-contract.js.map +1 -1
  87. package/dist/brain/project-hub-mcp.d.ts +14 -0
  88. package/dist/brain/project-hub-mcp.d.ts.map +1 -1
  89. package/dist/brain/project-hub-mcp.js +6 -1
  90. package/dist/brain/project-hub-mcp.js.map +1 -1
  91. package/dist/brain/project-hub-store.d.ts +14 -2
  92. package/dist/brain/project-hub-store.d.ts.map +1 -1
  93. package/dist/brain/project-hub-store.js +70 -2
  94. package/dist/brain/project-hub-store.js.map +1 -1
  95. package/dist/brain/project-hub.d.ts +5 -0
  96. package/dist/brain/project-hub.d.ts.map +1 -1
  97. package/dist/brain/project-hub.js +23 -1
  98. package/dist/brain/project-hub.js.map +1 -1
  99. package/dist/brain/project-kit.d.ts +10 -0
  100. package/dist/brain/project-kit.d.ts.map +1 -1
  101. package/dist/brain/project-kit.js +80 -16
  102. package/dist/brain/project-kit.js.map +1 -1
  103. package/dist/brain/project-policy-delivery.d.ts +8 -0
  104. package/dist/brain/project-policy-delivery.d.ts.map +1 -0
  105. package/dist/brain/project-policy-delivery.js +38 -0
  106. package/dist/brain/project-policy-delivery.js.map +1 -0
  107. package/dist/brain/project-policy.d.ts +88 -0
  108. package/dist/brain/project-policy.d.ts.map +1 -0
  109. package/dist/brain/project-policy.js +267 -0
  110. package/dist/brain/project-policy.js.map +1 -0
  111. package/dist/brain/project-session-contract.d.ts +180 -0
  112. package/dist/brain/project-session-contract.d.ts.map +1 -0
  113. package/dist/brain/project-session-contract.js +50 -0
  114. package/dist/brain/project-session-contract.js.map +1 -0
  115. package/dist/brain/project-session-mcp.d.ts +145 -0
  116. package/dist/brain/project-session-mcp.d.ts.map +1 -0
  117. package/dist/brain/project-session-mcp.js +58 -0
  118. package/dist/brain/project-session-mcp.js.map +1 -0
  119. package/dist/brain/project-sessions.d.ts +97 -0
  120. package/dist/brain/project-sessions.d.ts.map +1 -0
  121. package/dist/brain/project-sessions.js +223 -0
  122. package/dist/brain/project-sessions.js.map +1 -0
  123. package/dist/brain/project-source-contract.d.ts +109 -0
  124. package/dist/brain/project-source-contract.d.ts.map +1 -0
  125. package/dist/brain/project-source-contract.js +2 -0
  126. package/dist/brain/project-source-contract.js.map +1 -0
  127. package/dist/brain/project-source-intake.d.ts +26 -0
  128. package/dist/brain/project-source-intake.d.ts.map +1 -0
  129. package/dist/brain/project-source-intake.js +457 -0
  130. package/dist/brain/project-source-intake.js.map +1 -0
  131. package/dist/cli.js +1 -1
  132. package/dist/cli.js.map +1 -1
  133. package/dist/context-cli.d.ts.map +1 -1
  134. package/dist/context-cli.js +9 -3
  135. package/dist/context-cli.js.map +1 -1
  136. package/dist/dashboard/brain-hub-actions.d.ts.map +1 -1
  137. package/dist/dashboard/brain-hub-actions.js +232 -135
  138. package/dist/dashboard/brain-hub-actions.js.map +1 -1
  139. package/dist/dashboard/brain-hub-agent-dock.d.ts +2 -0
  140. package/dist/dashboard/brain-hub-agent-dock.d.ts.map +1 -0
  141. package/dist/dashboard/brain-hub-agent-dock.js +255 -0
  142. package/dist/dashboard/brain-hub-agent-dock.js.map +1 -0
  143. package/dist/dashboard/brain-hub-brand-icons.d.ts +2 -0
  144. package/dist/dashboard/brain-hub-brand-icons.d.ts.map +1 -0
  145. package/dist/dashboard/brain-hub-brand-icons.js +9 -0
  146. package/dist/dashboard/brain-hub-brand-icons.js.map +1 -0
  147. package/dist/dashboard/brain-hub-client.d.ts.map +1 -1
  148. package/dist/dashboard/brain-hub-client.js +433 -333
  149. package/dist/dashboard/brain-hub-client.js.map +1 -1
  150. package/dist/dashboard/brain-hub-context.d.ts +2 -0
  151. package/dist/dashboard/brain-hub-context.d.ts.map +1 -0
  152. package/dist/dashboard/brain-hub-context.js +37 -0
  153. package/dist/dashboard/brain-hub-context.js.map +1 -0
  154. package/dist/dashboard/brain-hub-controls.d.ts +2 -0
  155. package/dist/dashboard/brain-hub-controls.d.ts.map +1 -0
  156. package/dist/dashboard/brain-hub-controls.js +63 -0
  157. package/dist/dashboard/brain-hub-controls.js.map +1 -0
  158. package/dist/dashboard/brain-hub-exchanges.d.ts +2 -0
  159. package/dist/dashboard/brain-hub-exchanges.d.ts.map +1 -0
  160. package/dist/dashboard/brain-hub-exchanges.js +82 -0
  161. package/dist/dashboard/brain-hub-exchanges.js.map +1 -0
  162. package/dist/dashboard/brain-hub-graph.d.ts.map +1 -1
  163. package/dist/dashboard/brain-hub-graph.js +236 -74
  164. package/dist/dashboard/brain-hub-graph.js.map +1 -1
  165. package/dist/dashboard/brain-hub-html.d.ts.map +1 -1
  166. package/dist/dashboard/brain-hub-html.js +56 -1
  167. package/dist/dashboard/brain-hub-html.js.map +1 -1
  168. package/dist/dashboard/brain-hub-knowledge.d.ts +2 -0
  169. package/dist/dashboard/brain-hub-knowledge.d.ts.map +1 -0
  170. package/dist/dashboard/brain-hub-knowledge.js +33 -0
  171. package/dist/dashboard/brain-hub-knowledge.js.map +1 -0
  172. package/dist/dashboard/brain-hub-live.d.ts +2 -0
  173. package/dist/dashboard/brain-hub-live.d.ts.map +1 -0
  174. package/dist/dashboard/brain-hub-live.js +151 -0
  175. package/dist/dashboard/brain-hub-live.js.map +1 -0
  176. package/dist/dashboard/brain-hub-managed-skills.d.ts +2 -0
  177. package/dist/dashboard/brain-hub-managed-skills.d.ts.map +1 -0
  178. package/dist/dashboard/brain-hub-managed-skills.js +20 -0
  179. package/dist/dashboard/brain-hub-managed-skills.js.map +1 -0
  180. package/dist/dashboard/brain-hub-native.d.ts +2 -0
  181. package/dist/dashboard/brain-hub-native.d.ts.map +1 -0
  182. package/dist/dashboard/brain-hub-native.js +44 -0
  183. package/dist/dashboard/brain-hub-native.js.map +1 -0
  184. package/dist/dashboard/brain-hub-project-views.d.ts.map +1 -1
  185. package/dist/dashboard/brain-hub-project-views.js +78 -77
  186. package/dist/dashboard/brain-hub-project-views.js.map +1 -1
  187. package/dist/dashboard/brain-hub-sessions.d.ts +2 -0
  188. package/dist/dashboard/brain-hub-sessions.d.ts.map +1 -0
  189. package/dist/dashboard/brain-hub-sessions.js +40 -0
  190. package/dist/dashboard/brain-hub-sessions.js.map +1 -0
  191. package/dist/dashboard/brain-hub-usage.d.ts +2 -0
  192. package/dist/dashboard/brain-hub-usage.d.ts.map +1 -0
  193. package/dist/dashboard/brain-hub-usage.js +28 -0
  194. package/dist/dashboard/brain-hub-usage.js.map +1 -0
  195. package/dist/dashboard/brain-hub-views.d.ts.map +1 -1
  196. package/dist/dashboard/brain-hub-views.js +151 -146
  197. package/dist/dashboard/brain-hub-views.js.map +1 -1
  198. package/dist/dashboard/live-workspace-html.js +1039 -1039
  199. package/dist/dashboard/managed-project-skills-api.d.ts +29 -0
  200. package/dist/dashboard/managed-project-skills-api.d.ts.map +1 -0
  201. package/dist/dashboard/managed-project-skills-api.js +28 -0
  202. package/dist/dashboard/managed-project-skills-api.js.map +1 -0
  203. package/dist/dashboard/native-codex-api.d.ts +83 -0
  204. package/dist/dashboard/native-codex-api.d.ts.map +1 -0
  205. package/dist/dashboard/native-codex-api.js +91 -0
  206. package/dist/dashboard/native-codex-api.js.map +1 -0
  207. package/dist/dashboard/project-file-watch.d.ts +46 -0
  208. package/dist/dashboard/project-file-watch.d.ts.map +1 -0
  209. package/dist/dashboard/project-file-watch.js +221 -0
  210. package/dist/dashboard/project-file-watch.js.map +1 -0
  211. package/dist/dashboard/project-live-stream.d.ts +33 -0
  212. package/dist/dashboard/project-live-stream.d.ts.map +1 -0
  213. package/dist/dashboard/project-live-stream.js +233 -0
  214. package/dist/dashboard/project-live-stream.js.map +1 -0
  215. package/dist/dashboard/project-policy-api.d.ts +37 -0
  216. package/dist/dashboard/project-policy-api.d.ts.map +1 -0
  217. package/dist/dashboard/project-policy-api.js +31 -0
  218. package/dist/dashboard/project-policy-api.js.map +1 -0
  219. package/dist/dashboard/project-session-api.d.ts +28 -0
  220. package/dist/dashboard/project-session-api.d.ts.map +1 -0
  221. package/dist/dashboard/project-session-api.js +84 -0
  222. package/dist/dashboard/project-session-api.js.map +1 -0
  223. package/dist/dashboard/project-source-api.d.ts +11 -0
  224. package/dist/dashboard/project-source-api.d.ts.map +1 -0
  225. package/dist/dashboard/project-source-api.js +67 -0
  226. package/dist/dashboard/project-source-api.js.map +1 -0
  227. package/dist/dashboard/project-workspace.d.ts.map +1 -1
  228. package/dist/dashboard/project-workspace.js +18 -0
  229. package/dist/dashboard/project-workspace.js.map +1 -1
  230. package/dist/dashboard/server.d.ts.map +1 -1
  231. package/dist/dashboard/server.js +64 -25
  232. package/dist/dashboard/server.js.map +1 -1
  233. package/dist/dashboard/v6-dashboard-html.d.ts +1 -1
  234. package/dist/dashboard/v6-dashboard-html.d.ts.map +1 -1
  235. package/dist/dashboard/v6-dashboard-html.js +4261 -4309
  236. package/dist/dashboard/v6-dashboard-html.js.map +1 -1
  237. package/dist/dashboard/workspace-api.d.ts.map +1 -1
  238. package/dist/dashboard/workspace-api.js +105 -23
  239. package/dist/dashboard/workspace-api.js.map +1 -1
  240. package/dist/dashboard/workspace-status.d.ts +3 -0
  241. package/dist/dashboard/workspace-status.d.ts.map +1 -1
  242. package/dist/dashboard/workspace-status.js +4 -3
  243. package/dist/dashboard/workspace-status.js.map +1 -1
  244. package/dist/project-cli.js +1 -1
  245. package/dist/project-cli.js.map +1 -1
  246. package/docs/BRAND_ASSETS.md +36 -0
  247. package/docs/FEATURES_AND_LIMITS.md +29 -24
  248. package/docs/INTEGRATIONS.md +4 -2
  249. package/docs/LEARNING.md +1 -1
  250. package/docs/PROJECT_KIT.md +6 -1
  251. package/docs/QUICKSTART.md +62 -44
  252. package/docs/README.md +36 -33
  253. package/docs/SESSIONS.md +77 -0
  254. package/docs/SOURCE_INTAKE.md +33 -0
  255. package/docs/STATS.md +21 -21
  256. package/docs/VISUAL_GUIDE_v7.22.0.md +73 -0
  257. package/docs/WORKFLOW_INTEGRATION.md +3 -1
  258. package/docs/WORKSPACE.md +63 -37
  259. package/docs/assets/7.22.0-agent-dock-mobile.png +0 -0
  260. package/docs/assets/7.22.0-agent-dock.gif +0 -0
  261. package/docs/assets/7.22.0-agent-dock.png +0 -0
  262. package/docs/assets/7.22.0-hub-exchange.png +0 -0
  263. package/docs/assets/7.22.0-hub-exchanges.gif +0 -0
  264. package/docs/assets/7.22.0-hub-graph.png +0 -0
  265. package/docs/assets/7.22.0-hub-mobile-empty.png +0 -0
  266. package/docs/assets/7.22.0-managed-skills.png +0 -0
  267. package/docs/assets/7.22.0-plain-evidence.png +0 -0
  268. package/docs/assets/7.22.0-project-controls.png +0 -0
  269. package/docs/assets/7.22.0-sessions.png +0 -0
  270. package/docs/assets/7.22.0-teach-brain.png +0 -0
  271. package/docs/launch/RELEASE_ACCEPTANCE_v7.22.0.md +48 -0
  272. package/docs/launch/RELEASE_NOTES_v7.22.0.md +53 -0
  273. package/docs/launch/RESEARCH_AND_PLAN_v7.22.0.md +672 -0
  274. package/package.json +135 -130
  275. package/skills/shadow-workflow/SKILL.md +2 -0
@@ -0,0 +1,145 @@
1
+ import { z } from 'zod';
2
+ import type { MCPTool } from '../types.js';
3
+ import { type SessionActor } from './project-session-contract.js';
4
+ import type { ProjectSessions } from './project-sessions.js';
5
+ export declare const SESSION_MCP_TOOLS: {
6
+ readonly session_list: {
7
+ readonly description: "List explicitly reported sessions in this project. Recent reports do not verify a native chat is currently running.";
8
+ readonly input: z.ZodObject<{}, z.core.$strict>;
9
+ readonly readOnly: true;
10
+ readonly run: (sessions: ProjectSessions, raw: unknown) => {
11
+ projectId: string;
12
+ sessions: import("./project-session-contract.js").SessionSummary[];
13
+ limits: Readonly<{
14
+ sessions: 150;
15
+ messages: 200;
16
+ page: 25;
17
+ messagePageBytes: number;
18
+ checkpoints: 40;
19
+ operations: 20000;
20
+ recentMs: number;
21
+ }>;
22
+ };
23
+ };
24
+ readonly session_read: {
25
+ readonly description: "Read a reported session, a bounded page of messages, checkpoint summaries, and the inherited handoff if available. Pass nextBefore as before to read older messages.";
26
+ readonly input: z.ZodObject<{
27
+ before: z.ZodOptional<z.ZodString>;
28
+ limit: z.ZodDefault<z.ZodNumber>;
29
+ sessionId: z.ZodString;
30
+ }, z.core.$strict>;
31
+ readonly readOnly: true;
32
+ readonly run: (sessions: ProjectSessions, raw: unknown) => {
33
+ projectId: string;
34
+ session: import("./project-session-contract.js").SessionSummary;
35
+ messages: import("./project-session-contract.js").SessionMessage[];
36
+ messageCount: number;
37
+ nextBefore: string | null;
38
+ checkpoints: any[];
39
+ handoff: import("./project-session-contract.js").SessionCheckpoint | null;
40
+ };
41
+ };
42
+ readonly session_checkpoint_read: {
43
+ readonly description: "Read one immutable checkpoint by session and checkpoint ID. Use its recorded SHA-256 when resuming.";
44
+ readonly input: z.ZodObject<{
45
+ sessionId: z.ZodString;
46
+ checkpointId: z.ZodString;
47
+ }, z.core.$strict>;
48
+ readonly readOnly: true;
49
+ readonly run: (sessions: ProjectSessions, raw: unknown) => {
50
+ projectId: string;
51
+ checkpoint: import("./project-session-contract.js").SessionCheckpoint;
52
+ };
53
+ };
54
+ readonly session_open: {
55
+ readonly description: "Open a reported project session for the current connection. Use an optional host chat label and no private transcript or credentials. Keep the operation key for retries.";
56
+ readonly input: z.ZodObject<{
57
+ hostSessionId: z.ZodOptional<z.ZodString>;
58
+ parentSessionId: z.ZodOptional<z.ZodString>;
59
+ key: z.ZodString;
60
+ title: z.ZodString;
61
+ goal: z.ZodString;
62
+ }, z.core.$strict>;
63
+ readonly readOnly: false;
64
+ readonly run: (sessions: ProjectSessions, raw: unknown, actor: SessionActor) => {
65
+ projectId: string;
66
+ session: import("./project-session-contract.js").SessionSummary;
67
+ messages: import("./project-session-contract.js").SessionMessage[];
68
+ messageCount: number;
69
+ nextBefore: string | null;
70
+ checkpoints: any[];
71
+ handoff: import("./project-session-contract.js").SessionCheckpoint | null;
72
+ };
73
+ };
74
+ readonly session_record: {
75
+ readonly description: "Set status or append an explicitly supplied message or checkpoint to this connection’s session. Include only user-approved handoff material. Keep the operation key for retries.";
76
+ readonly input: z.ZodObject<{
77
+ sessionId: z.ZodString;
78
+ command: z.ZodDiscriminatedUnion<[z.ZodObject<{
79
+ kind: z.ZodLiteral<"status">;
80
+ key: z.ZodString;
81
+ status: z.ZodEnum<{
82
+ completed: "completed";
83
+ working: "working";
84
+ waiting: "waiting";
85
+ }>;
86
+ expectedRevision: z.ZodOptional<z.ZodNumber>;
87
+ }, z.core.$strict>, z.ZodObject<{
88
+ kind: z.ZodLiteral<"message">;
89
+ key: z.ZodString;
90
+ role: z.ZodEnum<{
91
+ user: "user";
92
+ note: "note";
93
+ assistant: "assistant";
94
+ }>;
95
+ text: z.ZodString;
96
+ expectedRevision: z.ZodOptional<z.ZodNumber>;
97
+ }, z.core.$strict>, z.ZodObject<{
98
+ kind: z.ZodLiteral<"checkpoint">;
99
+ key: z.ZodString;
100
+ summary: z.ZodString;
101
+ decisions: z.ZodDefault<z.ZodArray<z.ZodString>>;
102
+ completed: z.ZodDefault<z.ZodArray<z.ZodString>>;
103
+ nextSteps: z.ZodDefault<z.ZodArray<z.ZodString>>;
104
+ evidence: z.ZodDefault<z.ZodArray<z.ZodString>>;
105
+ expectedRevision: z.ZodOptional<z.ZodNumber>;
106
+ }, z.core.$strict>], "kind">;
107
+ }, z.core.$strict>;
108
+ readonly readOnly: false;
109
+ readonly run: (sessions: ProjectSessions, raw: unknown, actor: SessionActor) => {
110
+ projectId: string;
111
+ session: import("./project-session-contract.js").SessionSummary;
112
+ messages: import("./project-session-contract.js").SessionMessage[];
113
+ messageCount: number;
114
+ nextBefore: string | null;
115
+ checkpoints: any[];
116
+ handoff: import("./project-session-contract.js").SessionCheckpoint | null;
117
+ };
118
+ };
119
+ readonly session_resume: {
120
+ readonly description: "Open a new project session from an immutable saved checkpoint. The original session remains available. Supply the checkpoint ID and its recorded SHA-256.";
121
+ readonly input: z.ZodObject<{
122
+ hostSessionId: z.ZodOptional<z.ZodString>;
123
+ parentSessionId: z.ZodOptional<z.ZodString>;
124
+ key: z.ZodString;
125
+ checkpointId: z.ZodString;
126
+ sha256: z.ZodString;
127
+ title: z.ZodOptional<z.ZodString>;
128
+ sessionId: z.ZodString;
129
+ }, z.core.$strict>;
130
+ readonly readOnly: false;
131
+ readonly run: (sessions: ProjectSessions, raw: unknown, actor: SessionActor) => {
132
+ projectId: string;
133
+ session: import("./project-session-contract.js").SessionSummary;
134
+ messages: import("./project-session-contract.js").SessionMessage[];
135
+ messageCount: number;
136
+ nextBefore: string | null;
137
+ checkpoints: any[];
138
+ handoff: import("./project-session-contract.js").SessionCheckpoint | null;
139
+ };
140
+ };
141
+ };
142
+ export type SessionMcpTool = keyof typeof SESSION_MCP_TOOLS;
143
+ export declare function isSessionMcpTool(name: string): name is SessionMcpTool;
144
+ export declare const SESSION_MCP_DEFINITIONS: MCPTool[];
145
+ //# sourceMappingURL=project-session-mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-session-mcp.d.ts","sourceRoot":"","sources":["../../src/brain/project-session-mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAiG,KAAK,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACjK,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQ7D,eAAO,MAAM,iBAAiB;;;;;iCAIV,eAAe,OAAO,OAAO;;;;;;;;;;;;;;;;;;;;;;iCAK7B,eAAe,OAAO,OAAO;;;;;;;;;;;;;;;;;iCAQ7B,eAAe,OAAO,OAAO;;;;;;;;;;;;;;;iCAQ7B,eAAe,OAAO,OAAO,SAAS,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAKlD,eAAe,OAAO,OAAO,SAAS,YAAY;;;;;;;;;;;;;;;;;;;;;;iCAQlD,eAAe,OAAO,OAAO,SAAS,YAAY;;;;;;;;;;CAK5D,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAC5D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,cAAc,CAAmD;AACzH,eAAO,MAAM,uBAAuB,EAAE,OAAO,EAG1C,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { z } from 'zod';
2
+ import { hubId } from './project-hub-contract.js';
3
+ import { openSessionInput, recordSessionInput, resumeSessionFields, sessionInput, sessionMessageWindow } from './project-session-contract.js';
4
+ const empty = z.strictObject({});
5
+ const sessionIdInput = sessionMessageWindow.extend({ sessionId: hubId });
6
+ const checkpointRead = z.strictObject({ sessionId: hubId, checkpointId: hubId });
7
+ const update = z.strictObject({ sessionId: hubId, command: recordSessionInput });
8
+ const resume = z.strictObject({ sessionId: hubId, ...resumeSessionFields });
9
+ export const SESSION_MCP_TOOLS = {
10
+ session_list: {
11
+ description: 'List explicitly reported sessions in this project. Recent reports do not verify a native chat is currently running.',
12
+ input: empty, readOnly: true,
13
+ run: (sessions, raw) => { sessionInput(empty, raw); return sessions.list(); },
14
+ },
15
+ session_read: {
16
+ description: 'Read a reported session, a bounded page of messages, checkpoint summaries, and the inherited handoff if available. Pass nextBefore as before to read older messages.',
17
+ input: sessionIdInput, readOnly: true,
18
+ run: (sessions, raw) => {
19
+ const { sessionId, limit, before } = sessionInput(sessionIdInput, raw);
20
+ return sessions.read(sessionId, limit, before);
21
+ },
22
+ },
23
+ session_checkpoint_read: {
24
+ description: 'Read one immutable checkpoint by session and checkpoint ID. Use its recorded SHA-256 when resuming.',
25
+ input: checkpointRead, readOnly: true,
26
+ run: (sessions, raw) => {
27
+ const { sessionId, checkpointId } = sessionInput(checkpointRead, raw);
28
+ return sessions.readCheckpoint(sessionId, checkpointId);
29
+ },
30
+ },
31
+ session_open: {
32
+ description: 'Open a reported project session for the current connection. Use an optional host chat label and no private transcript or credentials. Keep the operation key for retries.',
33
+ input: openSessionInput, readOnly: false,
34
+ run: (sessions, raw, actor) => sessions.open(raw, actor),
35
+ },
36
+ session_record: {
37
+ description: 'Set status or append an explicitly supplied message or checkpoint to this connection’s session. Include only user-approved handoff material. Keep the operation key for retries.',
38
+ input: update, readOnly: false,
39
+ run: (sessions, raw, actor) => {
40
+ const { sessionId, command } = sessionInput(update, raw);
41
+ return sessions.record(sessionId, command, actor);
42
+ },
43
+ },
44
+ session_resume: {
45
+ description: 'Open a new project session from an immutable saved checkpoint. The original session remains available. Supply the checkpoint ID and its recorded SHA-256.',
46
+ input: resume, readOnly: false,
47
+ run: (sessions, raw, actor) => {
48
+ const { sessionId, ...input } = sessionInput(resume, raw);
49
+ return sessions.resume(sessionId, input, actor);
50
+ },
51
+ },
52
+ };
53
+ export function isSessionMcpTool(name) { return Object.hasOwn(SESSION_MCP_TOOLS, name); }
54
+ export const SESSION_MCP_DEFINITIONS = Object.entries(SESSION_MCP_TOOLS).map(([name, tool]) => ({
55
+ name, description: tool.description, inputSchema: z.toJSONSchema(tool.input),
56
+ annotations: { readOnlyHint: tool.readOnly, idempotentHint: true, destructiveHint: false, openWorldHint: false },
57
+ }));
58
+ //# sourceMappingURL=project-session-mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-session-mcp.js","sourceRoot":"","sources":["../../src/brain/project-session-mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import type { GlobalBrain } from './global-brain.js';
2
+ import { type NativeSessionSnapshot } from './native-session-import.js';
3
+ import { type ProjectPolicy } from './project-policy.js';
4
+ import { type SessionActor, type SessionCheckpoint, type SessionMessage, type SessionSummary } from './project-session-contract.js';
5
+ /** Persist reports from cooperating hosts and the local project operator. */
6
+ export declare class ProjectSessions {
7
+ private readonly now;
8
+ private readonly policy?;
9
+ private readonly projectId;
10
+ private readonly root;
11
+ private readonly db;
12
+ constructor(directory: string, brain: GlobalBrain, now?: () => number, policy?: ProjectPolicy | undefined);
13
+ private run;
14
+ private timestamp;
15
+ private row;
16
+ private hiddenSessions;
17
+ private assertShared;
18
+ private checkpoint;
19
+ private summary;
20
+ private detail;
21
+ list(): {
22
+ projectId: string;
23
+ sessions: SessionSummary[];
24
+ limits: Readonly<{
25
+ sessions: 150;
26
+ messages: 200;
27
+ page: 25;
28
+ messagePageBytes: number;
29
+ checkpoints: 40;
30
+ operations: 20000;
31
+ recentMs: number;
32
+ }>;
33
+ };
34
+ read(rawId: unknown, limit?: number, before?: string): {
35
+ projectId: string;
36
+ session: SessionSummary;
37
+ messages: SessionMessage[];
38
+ messageCount: number;
39
+ nextBefore: string | null;
40
+ checkpoints: any[];
41
+ handoff: SessionCheckpoint | null;
42
+ };
43
+ readCheckpoint(rawId: unknown, checkpointId: unknown): {
44
+ projectId: string;
45
+ checkpoint: SessionCheckpoint;
46
+ };
47
+ private insert;
48
+ private change;
49
+ open(raw: unknown, by: SessionActor): {
50
+ projectId: string;
51
+ session: SessionSummary;
52
+ messages: SessionMessage[];
53
+ messageCount: number;
54
+ nextBefore: string | null;
55
+ checkpoints: any[];
56
+ handoff: SessionCheckpoint | null;
57
+ };
58
+ record(rawId: unknown, raw: unknown, by: SessionActor): {
59
+ projectId: string;
60
+ session: SessionSummary;
61
+ messages: SessionMessage[];
62
+ messageCount: number;
63
+ nextBefore: string | null;
64
+ checkpoints: any[];
65
+ handoff: SessionCheckpoint | null;
66
+ };
67
+ resume(rawId: unknown, raw: unknown, by: SessionActor): {
68
+ projectId: string;
69
+ session: SessionSummary;
70
+ messages: SessionMessage[];
71
+ messageCount: number;
72
+ nextBefore: string | null;
73
+ checkpoints: any[];
74
+ handoff: SessionCheckpoint | null;
75
+ };
76
+ importTranscript(raw: unknown, resolve: (sourceId: string) => unknown, by: SessionActor): {
77
+ projectId: string;
78
+ session: SessionSummary;
79
+ messages: SessionMessage[];
80
+ messageCount: number;
81
+ nextBefore: string | null;
82
+ checkpoints: any[];
83
+ handoff: SessionCheckpoint | null;
84
+ };
85
+ private nativeScope;
86
+ /** Save a user-selected export or a selected thread returned by a project connector. */
87
+ importNative(raw: NativeSessionSnapshot, rawKey: string): {
88
+ projectId: string;
89
+ session: SessionSummary;
90
+ messages: SessionMessage[];
91
+ messageCount: number;
92
+ nextBefore: string | null;
93
+ checkpoints: any[];
94
+ handoff: SessionCheckpoint | null;
95
+ };
96
+ }
97
+ //# sourceMappingURL=project-sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-sessions.d.ts","sourceRoot":"","sources":["../../src/brain/project-sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,EAA0B,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAGL,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAsB,KAAK,cAAc,EACxG,MAAM,+BAA+B,CAAC;AAQvC,6EAA6E;AAC7E,qBAAa,eAAe;IAKyB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAa,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAJ5G,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAElB,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAmB,GAAG,eAAW,EAAmB,MAAM,CAAC,EAAE,aAAa,YAAA;IAO3H,OAAO,CAAC,GAAG;IAWX,OAAO,CAAC,SAAS;IAEjB,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,MAAM;IAUd,IAAI;;;;;;;;;;;;;IAUJ,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,GAAE,MAA4B,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;;IAMzE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO;;;;IASpD,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,MAAM;IAQd,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY;;;;;;;;;IAMnC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY;;;;;;;;;IAoCrD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY;;;;;;;;;IAcrD,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,EAAE,EAAE,EAAE,YAAY;;;;;;;;;IAkBvF,OAAO,CAAC,WAAW;IAInB,wFAAwF;IACxF,YAAY,CAAC,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM;;;;;;;;;CAsBxD"}
@@ -0,0 +1,223 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { ProjectHubError, hubId } from './project-hub-contract.js';
3
+ import { digest, HubStore } from './project-hub-store.js';
4
+ import { requireProjectStore } from './project-memory.js';
5
+ import { validateNativeSnapshot } from './native-session-import.js';
6
+ import { hiddenChatSessions } from './project-policy.js';
7
+ import { SESSION_LIMITS, ProjectSessionError, importSessionInput, openSessionInput, recordSessionInput, resumeSessionInput, sessionActorInput, sessionInput, sessionOperationKey, SESSION_OPERATOR, transcriptInput, } from './project-session-contract.js';
8
+ const notFound = (item) => { throw new ProjectSessionError('SESSION_NOT_FOUND', item + ' was not found in this project.', 404); };
9
+ const conflict = (message) => { throw new ProjectSessionError('SESSION_CONFLICT', message, 409); };
10
+ const capped = (message) => { throw new ProjectSessionError('SESSION_LIMIT', message, 422); };
11
+ /** Persist reports from cooperating hosts and the local project operator. */
12
+ export class ProjectSessions {
13
+ constructor(directory, brain, now = Date.now, policy) {
14
+ this.now = now;
15
+ this.policy = policy;
16
+ const { root, projectId } = requireProjectStore(directory, brain);
17
+ this.root = root;
18
+ this.projectId = projectId;
19
+ this.db = new HubStore(root, projectId);
20
+ }
21
+ run(action) {
22
+ try {
23
+ return action();
24
+ }
25
+ catch (error) {
26
+ if (error instanceof ProjectSessionError)
27
+ throw error;
28
+ if (error instanceof ProjectHubError && error.code.startsWith('SOURCE_'))
29
+ throw error;
30
+ if (error instanceof ProjectHubError && error.code === 'HUB_CONFLICT')
31
+ conflict(error.message);
32
+ if (error instanceof ProjectHubError && error.code === 'HUB_LIMIT')
33
+ capped('This project reached its session operation limit.');
34
+ throw new ProjectSessionError('SESSION_STORAGE_UNAVAILABLE', 'Project session storage could not be opened. Check the project store and retry.', 503);
35
+ }
36
+ finally {
37
+ this.db.close();
38
+ }
39
+ }
40
+ timestamp() { return new Date(this.now()).toISOString(); }
41
+ row(id) {
42
+ return this.db.get('sessions', id) ?? notFound('Session');
43
+ }
44
+ hiddenSessions() {
45
+ return this.policy?.chats.some(item => !item.shareContext)
46
+ ? hiddenChatSessions(this.policy, this.db.list('sessions')) : new Set();
47
+ }
48
+ assertShared(id) {
49
+ if (this.hiddenSessions().has(id)) {
50
+ throw new ProjectSessionError('SESSION_SHARING_OFF', 'This conversation is unavailable for agent delivery in project controls.', 403);
51
+ }
52
+ }
53
+ checkpoint(sessionId, id) {
54
+ const entry = this.db.get('session-checkpoints', id, sessionId) ?? notFound('Checkpoint');
55
+ const { sha256, ...fields } = entry;
56
+ if (sha256 !== digest(JSON.stringify(fields)))
57
+ throw new ProjectSessionError('SESSION_CHECKPOINT_CORRUPT', 'The checkpoint no longer matches its stored digest.', 409);
58
+ return entry;
59
+ }
60
+ summary(session, now) {
61
+ const age = now - Date.parse(session.lastReportedAt);
62
+ return { ...session, presence: session.reportedStatus === 'completed' ? 'completed' :
63
+ (Number.isFinite(age) && age >= 0 && age <= SESSION_LIMITS.recentMs) ? 'recent' : 'stale' };
64
+ }
65
+ detail(id, limit = SESSION_LIMITS.page, before) {
66
+ this.assertShared(id);
67
+ const row = this.row(id);
68
+ const handoff = row.resumedFrom ? this.checkpoint(row.resumedFrom.sessionId, row.resumedFrom.checkpointId) : null;
69
+ const page = this.db.page('session-messages', id, limit, SESSION_LIMITS.messagePageBytes, before) ?? notFound('Message cursor');
70
+ return { projectId: this.projectId, session: this.summary(row, this.now()),
71
+ messages: page.rows, messageCount: this.db.count('session-messages', id), nextBefore: page.more ? page.rows[0].id : null,
72
+ checkpoints: this.db.sessionCheckpointSummaries(id), handoff };
73
+ }
74
+ list() {
75
+ return this.run(() => this.db.read(() => {
76
+ const now = this.now();
77
+ const rows = this.db.list('sessions'), hidden = this.policy ? hiddenChatSessions(this.policy, rows) : new Set();
78
+ const sessions = rows.filter(row => !hidden.has(row.id)).map(row => this.summary(row, now))
79
+ .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt) || a.id.localeCompare(b.id));
80
+ return { projectId: this.projectId, sessions, limits: SESSION_LIMITS };
81
+ }) ?? { projectId: this.projectId, sessions: [], limits: SESSION_LIMITS });
82
+ }
83
+ read(rawId, limit = SESSION_LIMITS.page, before) {
84
+ const id = sessionInput(hubId, rawId);
85
+ if (!Number.isInteger(limit) || limit < 1 || limit > SESSION_LIMITS.page)
86
+ throw new ProjectSessionError('SESSION_INVALID_INPUT', 'Invalid session page limit.', 400);
87
+ return this.run(() => this.db.read(() => this.detail(id, limit, before)) ?? notFound('Session'));
88
+ }
89
+ readCheckpoint(rawId, checkpointId) {
90
+ const id = sessionInput(hubId, rawId), checkpoint = sessionInput(hubId, checkpointId);
91
+ return this.run(() => this.db.read(() => {
92
+ this.assertShared(id);
93
+ this.row(id);
94
+ return { projectId: this.projectId, checkpoint: this.checkpoint(id, checkpoint) };
95
+ }) ?? notFound('Session'));
96
+ }
97
+ insert(actor, input, origin = null, sourceId = null, native) {
98
+ if (input.parentSessionId) {
99
+ this.assertShared(input.parentSessionId);
100
+ this.row(input.parentSessionId);
101
+ }
102
+ if (this.db.count('sessions') >= SESSION_LIMITS.sessions)
103
+ capped('This project reached its retained session limit.');
104
+ const timestamp = this.timestamp();
105
+ const session = { id: randomUUID(), title: input.title, goal: input.goal, actor, hostSessionId: input.hostSessionId ?? null,
106
+ reportedStatus: sourceId || native ? 'completed' : 'working', statusReportedBy: actor, createdAt: timestamp, updatedAt: timestamp, lastReportedAt: timestamp,
107
+ revision: 0, parentSessionId: input.parentSessionId ?? null, resumedFrom: origin, latestCheckpointId: null, sourceId,
108
+ ...(native ? { native } : {}) };
109
+ return this.db.put('sessions', session, native ? this.nativeScope(native) : sourceId ?? '');
110
+ }
111
+ change(actor, scope, input, apply) {
112
+ return this.run(() => this.db.transaction(() => {
113
+ const operation = 'session:' + digest(JSON.stringify([actor.id, actor.kind, input.key]));
114
+ const id = this.db.operation(operation, { scope, input }, apply, SESSION_LIMITS.operations);
115
+ return this.detail(id);
116
+ }));
117
+ }
118
+ open(raw, by) {
119
+ const input = sessionInput(openSessionInput, raw);
120
+ const actor = sessionInput(sessionActorInput, by);
121
+ return this.change(actor, 'open', input, () => this.insert(actor, input).id);
122
+ }
123
+ record(rawId, raw, by) {
124
+ const id = sessionInput(hubId, rawId);
125
+ const input = sessionInput(recordSessionInput, raw);
126
+ const actor = sessionInput(sessionActorInput, by);
127
+ return this.change(actor, 'record:' + id, input, () => {
128
+ this.assertShared(id);
129
+ const current = this.row(id);
130
+ if (actor.kind !== 'user' && current.actor.id !== actor.id) {
131
+ throw new ProjectSessionError('SESSION_OWNER_REQUIRED', 'Resume this session in your own agent connection before posting to it.', 403);
132
+ }
133
+ if (input.expectedRevision !== undefined && input.expectedRevision !== current.revision)
134
+ conflict('The session changed. Reload it before posting.');
135
+ if (current.reportedStatus === 'completed' && !(input.kind === 'checkpoint' && actor.kind === 'user')) {
136
+ conflict('This session is completed. Resume from its recorded checkpoint to continue.');
137
+ }
138
+ const createdAt = this.timestamp();
139
+ const updated = { ...current, updatedAt: createdAt, lastReportedAt: actor.id === current.actor.id ? createdAt : current.lastReportedAt,
140
+ revision: current.revision + 1 };
141
+ if (input.kind === 'status') {
142
+ updated.reportedStatus = input.status;
143
+ updated.statusReportedBy = actor;
144
+ }
145
+ else if (input.kind === 'message') {
146
+ if (this.db.count('session-messages', id) >= SESSION_LIMITS.messages)
147
+ capped('This session reached its retained message limit.');
148
+ this.db.put('session-messages', { id: randomUUID(), actor, role: input.role, text: input.text, createdAt }, id);
149
+ }
150
+ else {
151
+ if (this.db.count('session-checkpoints', id) >= SESSION_LIMITS.checkpoints)
152
+ capped('This session reached its retained checkpoint limit.');
153
+ const { summary, decisions, completed, nextSteps, evidence } = input;
154
+ const checkpoint = { id: randomUUID(), sessionId: id, revision: updated.revision, actor, summary, decisions, completed, nextSteps, evidence, createdAt };
155
+ this.db.put('session-checkpoints', { ...checkpoint, sha256: digest(JSON.stringify(checkpoint)) }, id);
156
+ updated.latestCheckpointId = checkpoint.id;
157
+ }
158
+ this.db.put('sessions', updated, current.native ? this.nativeScope(current.native) : current.sourceId ?? '');
159
+ return id;
160
+ });
161
+ }
162
+ resume(rawId, raw, by) {
163
+ const id = sessionInput(hubId, rawId);
164
+ const input = sessionInput(resumeSessionInput, raw);
165
+ const actor = sessionInput(sessionActorInput, by);
166
+ return this.change(actor, 'resume:' + id, input, () => {
167
+ this.assertShared(id);
168
+ const original = this.row(id);
169
+ const checkpoint = this.checkpoint(id, input.checkpointId);
170
+ if (input.sha256 !== checkpoint.sha256)
171
+ conflict('The supplied digest does not match the saved checkpoint.');
172
+ return this.insert(actor, { ...input, title: input.title ?? original.title, goal: original.goal,
173
+ parentSessionId: input.parentSessionId ?? id }, { sessionId: id, checkpointId: checkpoint.id }).id;
174
+ });
175
+ }
176
+ importTranscript(raw, resolve, by) {
177
+ const input = sessionInput(importSessionInput, raw);
178
+ const actor = sessionInput(sessionActorInput, by);
179
+ if (actor.kind !== 'user')
180
+ throw new ProjectSessionError('SESSION_OPERATOR_REQUIRED', 'Import a reviewed transcript from the project workspace.', 403);
181
+ return this.change(actor, 'import', input, () => {
182
+ const existing = this.db.findByScope('sessions', input.sourceId);
183
+ if (existing)
184
+ return existing.id;
185
+ const source = sessionInput(transcriptInput, resolve(input.sourceId));
186
+ if (source.id !== input.sourceId)
187
+ throw new ProjectSessionError('SESSION_SOURCE_MISMATCH', 'The transcript belongs to a different source.', 409);
188
+ const row = this.insert(actor, { title: input.title ?? source.name.slice(0, 160), goal: input.goal ?? 'Reviewed transcript' }, null, source.id);
189
+ for (const item of source.items) {
190
+ this.db.put('session-messages', { id: randomUUID(), actor, role: item.role, text: item.text, createdAt: row.createdAt,
191
+ source: { sourceId: source.id, itemId: item.id, locator: item.locator, originalRole: item.originalRole } }, row.id);
192
+ }
193
+ return row.id;
194
+ });
195
+ }
196
+ nativeScope(metadata) {
197
+ return 'native:' + digest(JSON.stringify([metadata.tool, metadata.sessionId, metadata.sha256]));
198
+ }
199
+ /** Save a user-selected export or a selected thread returned by a project connector. */
200
+ importNative(raw, rawKey) {
201
+ const key = sessionInput(sessionOperationKey, rawKey);
202
+ const snapshot = validateNativeSnapshot(raw, this.root);
203
+ const { messages, ...metadata } = snapshot;
204
+ const exactScope = this.nativeScope(metadata);
205
+ const operation = { key, fingerprint: exactScope };
206
+ return this.change(SESSION_OPERATOR, 'native-import', operation, () => {
207
+ const exact = this.db.findByScope('sessions', exactScope);
208
+ if (exact)
209
+ return exact.id;
210
+ const previous = this.db.latestSessionNative(metadata.tool, metadata.sessionId);
211
+ const parent = metadata.parentNativeId ? this.db.latestSessionNative(metadata.tool, metadata.parentNativeId) : undefined;
212
+ const record = this.insert(SESSION_OPERATOR, { title: metadata.titleExact ?? 'Native chat title unavailable',
213
+ goal: 'Selected native conversation snapshot', hostSessionId: metadata.sessionId, parentSessionId: parent?.id }, null, null, { ...metadata, previousSnapshotId: previous?.id ?? null });
214
+ for (const message of messages) {
215
+ this.db.put('session-messages', { id: randomUUID(), actor: SESSION_OPERATOR, role: message.role, text: message.text,
216
+ createdAt: message.createdAt ?? record.createdAt, native: { id: message.id, locator: message.locator,
217
+ sha256: digest(message.text), createdAt: message.createdAt } }, record.id);
218
+ }
219
+ return record.id;
220
+ });
221
+ }
222
+ }
223
+ //# sourceMappingURL=project-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-sessions.js","sourceRoot":"","sources":["../../src/brain/project-sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAA8B,MAAM,4BAA4B,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAsB,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EACL,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EACjH,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,GAExF,MAAM,+BAA+B,CAAC;AAIvC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAS,EAAE,GAAG,MAAM,IAAI,mBAAmB,CAAC,mBAAmB,EAAE,IAAI,GAAG,iCAAiC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjJ,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAS,EAAE,GAAG,MAAM,IAAI,mBAAmB,CAAC,kBAAkB,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAClH,MAAM,MAAM,GAAG,CAAC,OAAe,EAAS,EAAE,GAAG,MAAM,IAAI,mBAAmB,CAAC,eAAe,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7G,6EAA6E;AAC7E,MAAM,OAAO,eAAe;IAK1B,YAAY,SAAiB,EAAE,KAAkB,EAAmB,MAAM,IAAI,CAAC,GAAG,EAAmB,MAAsB;QAAvD,QAAG,GAAH,GAAG,CAAW;QAAmB,WAAM,GAAN,MAAM,CAAgB;QACzH,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,mBAAmB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAEO,GAAG,CAAI,MAAe;QAC5B,IAAI,CAAC;YAAC,OAAO,MAAM,EAAE,CAAC;QAAC,CAAC;QACxB,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,mBAAmB;gBAAE,MAAM,KAAK,CAAC;YACtD,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,MAAM,KAAK,CAAC;YACtF,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;gBAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/F,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;gBAAE,MAAM,CAAC,mDAAmD,CAAC,CAAC;YAChI,MAAM,IAAI,mBAAmB,CAAC,6BAA6B,EAAE,iFAAiF,EAAE,GAAG,CAAC,CAAC;QACvJ,CAAC;gBAAS,CAAC;YAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;IAChC,CAAC;IAEO,SAAS,KAAa,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAElE,GAAG,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAgB,UAAU,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC;IAEO,cAAc;QACpB,OAAO,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;YACxD,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAgB,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;IAC3F,CAAC;IAEO,YAAY,CAAC,EAAU;QAC7B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,mBAAmB,CAAC,qBAAqB,EAAE,0EAA0E,EAAE,GAAG,CAAC,CAAC;QACxI,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,SAAiB,EAAE,EAAU;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAoB,qBAAqB,EAAE,EAAE,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC7G,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC;QACpC,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAAE,MAAM,IAAI,mBAAmB,CAAC,4BAA4B,EAAE,qDAAqD,EAAE,GAAG,CAAC,CAAC;QACvK,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,OAAO,CAAC,OAAsB,EAAE,GAAW;QACjD,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QACrD,OAAO,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBACnF,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAChG,CAAC;IAEO,MAAM,CAAC,EAAU,EAAE,QAAgB,cAAc,CAAC,IAAI,EAAE,MAAe;QAC7E,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClH,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAiB,kBAAkB,EAAE,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAChJ,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;YACxE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;YACxH,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IACnE,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAgB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC;YAC/H,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;iBACxF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtF,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QACzE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,CAAC,KAAc,EAAE,QAAgB,cAAc,CAAC,IAAI,EAAE,MAAe;QACvE,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI;YAAE,MAAM,IAAI,mBAAmB,CAAC,uBAAuB,EAAE,6BAA6B,EAAE,GAAG,CAAC,CAAC;QACrK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,cAAc,CAAC,KAAc,EAAE,YAAqB;QAClD,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QACtF,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC;QACpF,CAAC,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7B,CAAC;IAEO,MAAM,CAAC,KAAmB,EAAE,KAAqB,EAAE,SAAwB,IAAI,EAAE,WAA0B,IAAI,EACrH,MAAgC;QAChC,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAAC,CAAC;QACzG,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,cAAc,CAAC,QAAQ;YAAE,MAAM,CAAC,kDAAkD,CAAC,CAAC;QACrH,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAkB,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;YACxI,cAAc,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,SAAS;YAC5J,QAAQ,EAAE,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ;YACpH,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;IAC9F,CAAC;IAEO,MAAM,CAAC,KAAmB,EAAE,KAAa,EAAE,KAAsB,EAAE,KAAmB;QAC5F,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAC7C,MAAM,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzF,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YAC5F,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC,CAAC;IACN,CAAC;IAED,IAAI,CAAC,GAAY,EAAE,EAAgB;QACjC,MAAM,KAAK,GAAG,YAAY,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,KAAc,EAAE,GAAY,EAAE,EAAgB;QACnD,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;YACpD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,EAAE,CAAC;gBAC3D,MAAM,IAAI,mBAAmB,CAAC,wBAAwB,EAAE,wEAAwE,EAAE,GAAG,CAAC,CAAC;YACzI,CAAC;YACD,IAAI,KAAK,CAAC,gBAAgB,KAAK,SAAS,IAAI,KAAK,CAAC,gBAAgB,KAAK,OAAO,CAAC,QAAQ;gBAAE,QAAQ,CAAC,gDAAgD,CAAC,CAAC;YACpJ,IAAI,OAAO,CAAC,cAAc,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;gBACtG,QAAQ,CAAC,6EAA6E,CAAC,CAAC;YAC1F,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc;gBACpI,QAAQ,EAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;gBACtC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;YACnC,CAAC;iBACI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,QAAQ;oBAAE,MAAM,CAAC,kDAAkD,CAAC,CAAC;gBACjI,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;YAClH,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,WAAW;oBAAE,MAAM,CAAC,qDAAqD,CAAC,CAAC;gBAC1I,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;gBACrE,MAAM,UAAU,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;gBACzJ,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtG,OAAO,CAAC,kBAAkB,GAAG,UAAU,CAAC,EAAE,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC7G,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAc,EAAE,GAAY,EAAE,EAAgB;QACnD,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;YACpD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;gBAAE,QAAQ,CAAC,0DAA0D,CAAC,CAAC;YAC7G,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI;gBAC7F,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;QACvG,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB,CAAC,GAAY,EAAE,OAAsC,EAAE,EAAgB;QACrF,MAAM,KAAK,GAAG,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,MAAM,IAAI,mBAAmB,CAAC,2BAA2B,EAAE,0DAA0D,EAAE,GAAG,CAAC,CAAC;QACvJ,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAgB,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YAChF,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,QAAQ;gBAAE,MAAM,IAAI,mBAAmB,CAAC,yBAAyB,EAAE,+CAA+C,EAAE,GAAG,CAAC,CAAC;YACjJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,qBAAqB,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAChJ,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS;oBACnH,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;YACxH,CAAC;YACD,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,QAAsE;QACxF,OAAO,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClG,CAAC;IAED,wFAAwF;IACxF,YAAY,CAAC,GAA0B,EAAE,MAAc;QACrD,MAAM,GAAG,GAAG,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE;YACpE,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAgB,UAAU,EAAE,UAAU,CAAC,CAAC;YACzE,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,UAAU,IAAI,+BAA+B;gBAC1G,IAAI,EAAE,uCAAuC,EAAE,aAAa,EAAE,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,EAAE,EAC/G,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,QAAQ,EAAE,kBAAkB,EAAE,QAAQ,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;YACzE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI;oBACjH,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO;wBAClG,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,OAAO,MAAM,CAAC,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}