lingxios 1.0.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 (298) hide show
  1. package/README.md +54 -0
  2. package/db/schema.sql +306 -0
  3. package/dist/src/app/artifacts.d.ts +8 -0
  4. package/dist/src/app/artifacts.js +114 -0
  5. package/dist/src/app/artifacts.js.map +1 -0
  6. package/dist/src/app/doctor.d.ts +22 -0
  7. package/dist/src/app/doctor.js +44 -0
  8. package/dist/src/app/doctor.js.map +1 -0
  9. package/dist/src/app/index.d.ts +123 -0
  10. package/dist/src/app/index.js +291 -0
  11. package/dist/src/app/index.js.map +1 -0
  12. package/dist/src/app/input.d.ts +22 -0
  13. package/dist/src/app/input.js +60 -0
  14. package/dist/src/app/input.js.map +1 -0
  15. package/dist/src/app/recover-wait.d.ts +5 -0
  16. package/dist/src/app/recover-wait.js +59 -0
  17. package/dist/src/app/recover-wait.js.map +1 -0
  18. package/dist/src/app/resources.d.ts +5 -0
  19. package/dist/src/app/resources.js +9 -0
  20. package/dist/src/app/resources.js.map +1 -0
  21. package/dist/src/app/storage.d.ts +2 -0
  22. package/dist/src/app/storage.js +41 -0
  23. package/dist/src/app/storage.js.map +1 -0
  24. package/dist/src/cli/doctor.d.ts +2 -0
  25. package/dist/src/cli/doctor.js +20 -0
  26. package/dist/src/cli/doctor.js.map +1 -0
  27. package/dist/src/cli/eval.d.ts +2 -0
  28. package/dist/src/cli/eval.js +44 -0
  29. package/dist/src/cli/eval.js.map +1 -0
  30. package/dist/src/config.d.ts +22 -0
  31. package/dist/src/config.js +56 -0
  32. package/dist/src/config.js.map +1 -0
  33. package/dist/src/context/attachments.d.ts +10 -0
  34. package/dist/src/context/attachments.js +18 -0
  35. package/dist/src/context/attachments.js.map +1 -0
  36. package/dist/src/context/document-text.d.ts +1 -0
  37. package/dist/src/context/document-text.js +29 -0
  38. package/dist/src/context/document-text.js.map +1 -0
  39. package/dist/src/context/document-worker.d.ts +1 -0
  40. package/dist/src/context/document-worker.js +62 -0
  41. package/dist/src/context/document-worker.js.map +1 -0
  42. package/dist/src/context/evidence.d.ts +19 -0
  43. package/dist/src/context/evidence.js +37 -0
  44. package/dist/src/context/evidence.js.map +1 -0
  45. package/dist/src/context/request.d.ts +21 -0
  46. package/dist/src/context/request.js +32 -0
  47. package/dist/src/context/request.js.map +1 -0
  48. package/dist/src/context/research-evidence.d.ts +4 -0
  49. package/dist/src/context/research-evidence.js +24 -0
  50. package/dist/src/context/research-evidence.js.map +1 -0
  51. package/dist/src/context/resource-checks.d.ts +7 -0
  52. package/dist/src/context/resource-checks.js +15 -0
  53. package/dist/src/context/resource-checks.js.map +1 -0
  54. package/dist/src/context/task-contract.d.ts +11 -0
  55. package/dist/src/context/task-contract.js +23 -0
  56. package/dist/src/context/task-contract.js.map +1 -0
  57. package/dist/src/context/text.d.ts +2 -0
  58. package/dist/src/context/text.js +7 -0
  59. package/dist/src/context/text.js.map +1 -0
  60. package/dist/src/control-plane/http-server.d.ts +22 -0
  61. package/dist/src/control-plane/http-server.js +196 -0
  62. package/dist/src/control-plane/http-server.js.map +1 -0
  63. package/dist/src/control-plane/memory-store.d.ts +71 -0
  64. package/dist/src/control-plane/memory-store.js +389 -0
  65. package/dist/src/control-plane/memory-store.js.map +1 -0
  66. package/dist/src/control-plane/pg-store.d.ts +62 -0
  67. package/dist/src/control-plane/pg-store.js +386 -0
  68. package/dist/src/control-plane/pg-store.js.map +1 -0
  69. package/dist/src/control-plane/service.d.ts +52 -0
  70. package/dist/src/control-plane/service.js +630 -0
  71. package/dist/src/control-plane/service.js.map +1 -0
  72. package/dist/src/control-plane/stores.d.ts +184 -0
  73. package/dist/src/control-plane/stores.js +19 -0
  74. package/dist/src/control-plane/stores.js.map +1 -0
  75. package/dist/src/errors.d.ts +66 -0
  76. package/dist/src/errors.js +102 -0
  77. package/dist/src/errors.js.map +1 -0
  78. package/dist/src/eval/calibration.d.ts +16 -0
  79. package/dist/src/eval/calibration.js +28 -0
  80. package/dist/src/eval/calibration.js.map +1 -0
  81. package/dist/src/eval/index.d.ts +40 -0
  82. package/dist/src/eval/index.js +40 -0
  83. package/dist/src/eval/index.js.map +1 -0
  84. package/dist/src/eval/review.d.ts +20 -0
  85. package/dist/src/eval/review.js +49 -0
  86. package/dist/src/eval/review.js.map +1 -0
  87. package/dist/src/host/http-client.d.ts +48 -0
  88. package/dist/src/host/http-client.js +127 -0
  89. package/dist/src/host/http-client.js.map +1 -0
  90. package/dist/src/host/port.d.ts +26 -0
  91. package/dist/src/host/port.js +2 -0
  92. package/dist/src/host/port.js.map +1 -0
  93. package/dist/src/index.d.ts +17 -0
  94. package/dist/src/index.js +9 -0
  95. package/dist/src/index.js.map +1 -0
  96. package/dist/src/integrations/lingxiloop/actions.d.ts +25 -0
  97. package/dist/src/integrations/lingxiloop/actions.js +77 -0
  98. package/dist/src/integrations/lingxiloop/actions.js.map +1 -0
  99. package/dist/src/integrations/lingxiloop/app.d.ts +167 -0
  100. package/dist/src/integrations/lingxiloop/app.js +434 -0
  101. package/dist/src/integrations/lingxiloop/app.js.map +1 -0
  102. package/dist/src/integrations/lingxiloop/approvals.d.ts +148 -0
  103. package/dist/src/integrations/lingxiloop/approvals.js +540 -0
  104. package/dist/src/integrations/lingxiloop/approvals.js.map +1 -0
  105. package/dist/src/integrations/lingxiloop/attachments.d.ts +8 -0
  106. package/dist/src/integrations/lingxiloop/attachments.js +38 -0
  107. package/dist/src/integrations/lingxiloop/attachments.js.map +1 -0
  108. package/dist/src/integrations/lingxiloop/calendar-approvals.d.ts +21 -0
  109. package/dist/src/integrations/lingxiloop/calendar-approvals.js +126 -0
  110. package/dist/src/integrations/lingxiloop/calendar-approvals.js.map +1 -0
  111. package/dist/src/integrations/lingxiloop/calendar-writes.d.ts +15 -0
  112. package/dist/src/integrations/lingxiloop/calendar-writes.js +79 -0
  113. package/dist/src/integrations/lingxiloop/calendar-writes.js.map +1 -0
  114. package/dist/src/integrations/lingxiloop/calendar.d.ts +19 -0
  115. package/dist/src/integrations/lingxiloop/calendar.js +43 -0
  116. package/dist/src/integrations/lingxiloop/calendar.js.map +1 -0
  117. package/dist/src/integrations/lingxiloop/canvas-events.d.ts +7 -0
  118. package/dist/src/integrations/lingxiloop/canvas-events.js +53 -0
  119. package/dist/src/integrations/lingxiloop/canvas-events.js.map +1 -0
  120. package/dist/src/integrations/lingxiloop/canvas-summary.d.ts +5 -0
  121. package/dist/src/integrations/lingxiloop/canvas-summary.js +52 -0
  122. package/dist/src/integrations/lingxiloop/canvas-summary.js.map +1 -0
  123. package/dist/src/integrations/lingxiloop/canvas-work-report.d.ts +12 -0
  124. package/dist/src/integrations/lingxiloop/canvas-work-report.js +120 -0
  125. package/dist/src/integrations/lingxiloop/canvas-work-report.js.map +1 -0
  126. package/dist/src/integrations/lingxiloop/canvas-work.d.ts +11 -0
  127. package/dist/src/integrations/lingxiloop/canvas-work.js +306 -0
  128. package/dist/src/integrations/lingxiloop/canvas-work.js.map +1 -0
  129. package/dist/src/integrations/lingxiloop/canvas.d.ts +12 -0
  130. package/dist/src/integrations/lingxiloop/canvas.js +79 -0
  131. package/dist/src/integrations/lingxiloop/canvas.js.map +1 -0
  132. package/dist/src/integrations/lingxiloop/chat.d.ts +11 -0
  133. package/dist/src/integrations/lingxiloop/chat.js +46 -0
  134. package/dist/src/integrations/lingxiloop/chat.js.map +1 -0
  135. package/dist/src/integrations/lingxiloop/document-approvals.d.ts +21 -0
  136. package/dist/src/integrations/lingxiloop/document-approvals.js +75 -0
  137. package/dist/src/integrations/lingxiloop/document-approvals.js.map +1 -0
  138. package/dist/src/integrations/lingxiloop/document-content.d.ts +80 -0
  139. package/dist/src/integrations/lingxiloop/document-content.js +195 -0
  140. package/dist/src/integrations/lingxiloop/document-content.js.map +1 -0
  141. package/dist/src/integrations/lingxiloop/document-writes.d.ts +8 -0
  142. package/dist/src/integrations/lingxiloop/document-writes.js +49 -0
  143. package/dist/src/integrations/lingxiloop/document-writes.js.map +1 -0
  144. package/dist/src/integrations/lingxiloop/documents.d.ts +22 -0
  145. package/dist/src/integrations/lingxiloop/documents.js +38 -0
  146. package/dist/src/integrations/lingxiloop/documents.js.map +1 -0
  147. package/dist/src/integrations/lingxiloop/event-outbox.d.ts +5 -0
  148. package/dist/src/integrations/lingxiloop/event-outbox.js +47 -0
  149. package/dist/src/integrations/lingxiloop/event-outbox.js.map +1 -0
  150. package/dist/src/integrations/lingxiloop/index.d.ts +3 -0
  151. package/dist/src/integrations/lingxiloop/index.js +3 -0
  152. package/dist/src/integrations/lingxiloop/index.js.map +1 -0
  153. package/dist/src/integrations/lingxiloop/learning-attempts.d.ts +13 -0
  154. package/dist/src/integrations/lingxiloop/learning-attempts.js +58 -0
  155. package/dist/src/integrations/lingxiloop/learning-attempts.js.map +1 -0
  156. package/dist/src/integrations/lingxiloop/learning-evaluation.d.ts +8 -0
  157. package/dist/src/integrations/lingxiloop/learning-evaluation.js +64 -0
  158. package/dist/src/integrations/lingxiloop/learning-evaluation.js.map +1 -0
  159. package/dist/src/integrations/lingxiloop/learning-evidence.d.ts +7 -0
  160. package/dist/src/integrations/lingxiloop/learning-evidence.js +88 -0
  161. package/dist/src/integrations/lingxiloop/learning-evidence.js.map +1 -0
  162. package/dist/src/integrations/lingxiloop/learning-missions.d.ts +18 -0
  163. package/dist/src/integrations/lingxiloop/learning-missions.js +95 -0
  164. package/dist/src/integrations/lingxiloop/learning-missions.js.map +1 -0
  165. package/dist/src/integrations/lingxiloop/learning.d.ts +22 -0
  166. package/dist/src/integrations/lingxiloop/learning.js +150 -0
  167. package/dist/src/integrations/lingxiloop/learning.js.map +1 -0
  168. package/dist/src/integrations/lingxiloop/memory.d.ts +14 -0
  169. package/dist/src/integrations/lingxiloop/memory.js +133 -0
  170. package/dist/src/integrations/lingxiloop/memory.js.map +1 -0
  171. package/dist/src/integrations/lingxiloop/polls.d.ts +9 -0
  172. package/dist/src/integrations/lingxiloop/polls.js +47 -0
  173. package/dist/src/integrations/lingxiloop/polls.js.map +1 -0
  174. package/dist/src/integrations/lingxiloop/presentations.d.ts +11 -0
  175. package/dist/src/integrations/lingxiloop/presentations.js +34 -0
  176. package/dist/src/integrations/lingxiloop/presentations.js.map +1 -0
  177. package/dist/src/integrations/lingxiloop/questionnaire.d.ts +21 -0
  178. package/dist/src/integrations/lingxiloop/questionnaire.js +57 -0
  179. package/dist/src/integrations/lingxiloop/questionnaire.js.map +1 -0
  180. package/dist/src/integrations/lingxiloop/research.d.ts +19 -0
  181. package/dist/src/integrations/lingxiloop/research.js +20 -0
  182. package/dist/src/integrations/lingxiloop/research.js.map +1 -0
  183. package/dist/src/integrations/lingxiloop/routines.d.ts +91 -0
  184. package/dist/src/integrations/lingxiloop/routines.js +198 -0
  185. package/dist/src/integrations/lingxiloop/routines.js.map +1 -0
  186. package/dist/src/integrations/lingxiloop/service-contracts.d.ts +1045 -0
  187. package/dist/src/integrations/lingxiloop/service-contracts.js +2 -0
  188. package/dist/src/integrations/lingxiloop/service-contracts.js.map +1 -0
  189. package/dist/src/integrations/lingxiloop/teacher-context.d.ts +32 -0
  190. package/dist/src/integrations/lingxiloop/teacher-context.js +25 -0
  191. package/dist/src/integrations/lingxiloop/teacher-context.js.map +1 -0
  192. package/dist/src/integrations/lingxiloop/teacher-digest.d.ts +13 -0
  193. package/dist/src/integrations/lingxiloop/teacher-digest.js +152 -0
  194. package/dist/src/integrations/lingxiloop/teacher-digest.js.map +1 -0
  195. package/dist/src/integrations/lingxiloop/teacher-preview.d.ts +22 -0
  196. package/dist/src/integrations/lingxiloop/teacher-preview.js +41 -0
  197. package/dist/src/integrations/lingxiloop/teacher-preview.js.map +1 -0
  198. package/dist/src/integrations/lingxiloop/teacher.d.ts +24 -0
  199. package/dist/src/integrations/lingxiloop/teacher.js +224 -0
  200. package/dist/src/integrations/lingxiloop/teacher.js.map +1 -0
  201. package/dist/src/kernel/manager.d.ts +52 -0
  202. package/dist/src/kernel/manager.js +407 -0
  203. package/dist/src/kernel/manager.js.map +1 -0
  204. package/dist/src/logging.d.ts +21 -0
  205. package/dist/src/logging.js +54 -0
  206. package/dist/src/logging.js.map +1 -0
  207. package/dist/src/memory/evidence.d.ts +6 -0
  208. package/dist/src/memory/evidence.js +43 -0
  209. package/dist/src/memory/evidence.js.map +1 -0
  210. package/dist/src/memory/processor.d.ts +3 -0
  211. package/dist/src/memory/processor.js +66 -0
  212. package/dist/src/memory/processor.js.map +1 -0
  213. package/dist/src/memory/semantic.d.ts +19 -0
  214. package/dist/src/memory/semantic.js +93 -0
  215. package/dist/src/memory/semantic.js.map +1 -0
  216. package/dist/src/memory/store.d.ts +20 -0
  217. package/dist/src/memory/store.js +34 -0
  218. package/dist/src/memory/store.js.map +1 -0
  219. package/dist/src/memory/synthesis.d.ts +24 -0
  220. package/dist/src/memory/synthesis.js +138 -0
  221. package/dist/src/memory/synthesis.js.map +1 -0
  222. package/dist/src/metrics.d.ts +43 -0
  223. package/dist/src/metrics.js +130 -0
  224. package/dist/src/metrics.js.map +1 -0
  225. package/dist/src/model/driver.d.ts +60 -0
  226. package/dist/src/model/driver.js +2 -0
  227. package/dist/src/model/driver.js.map +1 -0
  228. package/dist/src/model/embeddings.d.ts +24 -0
  229. package/dist/src/model/embeddings.js +97 -0
  230. package/dist/src/model/embeddings.js.map +1 -0
  231. package/dist/src/model/openai.d.ts +45 -0
  232. package/dist/src/model/openai.js +340 -0
  233. package/dist/src/model/openai.js.map +1 -0
  234. package/dist/src/outcome/assessment.d.ts +16 -0
  235. package/dist/src/outcome/assessment.js +45 -0
  236. package/dist/src/outcome/assessment.js.map +1 -0
  237. package/dist/src/outcome/content-check.d.ts +19 -0
  238. package/dist/src/outcome/content-check.js +44 -0
  239. package/dist/src/outcome/content-check.js.map +1 -0
  240. package/dist/src/outcome/envelope.d.ts +34 -0
  241. package/dist/src/outcome/envelope.js +42 -0
  242. package/dist/src/outcome/envelope.js.map +1 -0
  243. package/dist/src/protocol/constants.d.ts +25 -0
  244. package/dist/src/protocol/constants.js +26 -0
  245. package/dist/src/protocol/constants.js.map +1 -0
  246. package/dist/src/protocol/kernel-wire.d.ts +74 -0
  247. package/dist/src/protocol/kernel-wire.js +2 -0
  248. package/dist/src/protocol/kernel-wire.js.map +1 -0
  249. package/dist/src/protocol/outcome.d.ts +16 -0
  250. package/dist/src/protocol/outcome.js +14 -0
  251. package/dist/src/protocol/outcome.js.map +1 -0
  252. package/dist/src/protocol/types.d.ts +266 -0
  253. package/dist/src/protocol/types.js +19 -0
  254. package/dist/src/protocol/types.js.map +1 -0
  255. package/dist/src/research/address.d.ts +2 -0
  256. package/dist/src/research/address.js +32 -0
  257. package/dist/src/research/address.js.map +1 -0
  258. package/dist/src/research/fetch.d.ts +7 -0
  259. package/dist/src/research/fetch.js +83 -0
  260. package/dist/src/research/fetch.js.map +1 -0
  261. package/dist/src/research/index.d.ts +26 -0
  262. package/dist/src/research/index.js +109 -0
  263. package/dist/src/research/index.js.map +1 -0
  264. package/dist/src/runtime/compaction.d.ts +41 -0
  265. package/dist/src/runtime/compaction.js +86 -0
  266. package/dist/src/runtime/compaction.js.map +1 -0
  267. package/dist/src/runtime/corrections.d.ts +20 -0
  268. package/dist/src/runtime/corrections.js +27 -0
  269. package/dist/src/runtime/corrections.js.map +1 -0
  270. package/dist/src/runtime/policy.d.ts +42 -0
  271. package/dist/src/runtime/policy.js +91 -0
  272. package/dist/src/runtime/policy.js.map +1 -0
  273. package/dist/src/runtime/resource-refresh.d.ts +8 -0
  274. package/dist/src/runtime/resource-refresh.js +37 -0
  275. package/dist/src/runtime/resource-refresh.js.map +1 -0
  276. package/dist/src/runtime/runtime.d.ts +51 -0
  277. package/dist/src/runtime/runtime.js +804 -0
  278. package/dist/src/runtime/runtime.js.map +1 -0
  279. package/dist/src/runtime/tool.d.ts +13 -0
  280. package/dist/src/runtime/tool.js +42 -0
  281. package/dist/src/runtime/tool.js.map +1 -0
  282. package/dist/src/ui/index.d.ts +27 -0
  283. package/dist/src/ui/index.js +54 -0
  284. package/dist/src/ui/index.js.map +1 -0
  285. package/dist/src/versions.d.ts +9 -0
  286. package/dist/src/versions.js +11 -0
  287. package/dist/src/versions.js.map +1 -0
  288. package/dist/src/worker/index.d.ts +3 -0
  289. package/dist/src/worker/index.js +57 -0
  290. package/dist/src/worker/index.js.map +1 -0
  291. package/dist/src/worker/main.d.ts +2 -0
  292. package/dist/src/worker/main.js +9 -0
  293. package/dist/src/worker/main.js.map +1 -0
  294. package/dist/src/worker/worker.d.ts +45 -0
  295. package/dist/src/worker/worker.js +154 -0
  296. package/dist/src/worker/worker.js.map +1 -0
  297. package/kernel/runner.py +507 -0
  298. package/package.json +83 -0
@@ -0,0 +1,91 @@
1
+ import { type SqlPool, type SqlQueryable } from '../../control-plane/pg-store.js';
2
+ import type { HostAction, WorkItem } from '../../protocol/types.js';
3
+ import type { LingxiLoopServices } from './service-contracts.js';
4
+ type Identity = Pick<WorkItem, 'tenantId' | 'agentId' | 'sessionId' | 'principalId' | 'threadId'>;
5
+ type Services = Pick<LingxiLoopServices, 'permissionService'>;
6
+ export declare const ROUTINE_METHODS: {
7
+ readonly list: readonly [];
8
+ readonly pause: readonly ["routineId"];
9
+ readonly create: readonly ["kind", "title", "instructions", "schedule", "timezone"];
10
+ readonly activate: readonly ["routineId"];
11
+ };
12
+ export declare function routineArguments(action: Pick<HostAction, 'action' | 'args'>): {
13
+ routineId: string;
14
+ kind?: never;
15
+ title?: never;
16
+ instructions?: never;
17
+ schedule?: never;
18
+ timezone?: never;
19
+ } | {
20
+ routineId?: never;
21
+ kind?: never;
22
+ title?: never;
23
+ instructions?: never;
24
+ schedule?: never;
25
+ timezone?: never;
26
+ } | {
27
+ kind: string;
28
+ title: string;
29
+ instructions: string;
30
+ schedule: object;
31
+ timezone: string;
32
+ routineId?: never;
33
+ };
34
+ export declare function routineScope(database: SqlQueryable, services: Services, work: Identity): Promise<{} | null>;
35
+ export declare function findRoutine(database: SqlQueryable, work: Identity, id: string, projectId: unknown, lock?: boolean): Promise<Record<string, unknown>>;
36
+ export declare function routinePreview(database: SqlQueryable, services: Services, work: Identity, action: HostAction): Promise<{
37
+ projectId: {} | null;
38
+ principalId: string;
39
+ threadId: string | null;
40
+ routineId: string;
41
+ kind?: never;
42
+ title?: never;
43
+ instructions?: never;
44
+ schedule?: never;
45
+ timezone?: never;
46
+ version?: never;
47
+ status?: never;
48
+ } | {
49
+ projectId: {} | null;
50
+ principalId: string;
51
+ threadId: string | null;
52
+ routineId?: never;
53
+ kind?: never;
54
+ title?: never;
55
+ instructions?: never;
56
+ schedule?: never;
57
+ timezone?: never;
58
+ version?: never;
59
+ status?: never;
60
+ } | {
61
+ projectId: {} | null;
62
+ principalId: string;
63
+ threadId: string | null;
64
+ kind: string;
65
+ title: string;
66
+ instructions: string;
67
+ schedule: object;
68
+ timezone: string;
69
+ routineId?: never;
70
+ version?: never;
71
+ status?: never;
72
+ } | {
73
+ routineId: unknown;
74
+ version: unknown;
75
+ kind: unknown;
76
+ title: unknown;
77
+ instructions: unknown;
78
+ schedule: unknown;
79
+ timezone: unknown;
80
+ projectId: {} | null;
81
+ principalId: unknown;
82
+ threadId: unknown;
83
+ status: unknown;
84
+ }>;
85
+ export declare function nextRoutineRun(database: SqlQueryable, schedule: Record<string, unknown>, timezone: string, now: Date): Promise<string>;
86
+ /** Runs only within the approval transaction, after its preview was checked. */
87
+ export declare function applyRoutineApproval(database: SqlQueryable, services: Services, work: Identity, action: HostAction, preview: Record<string, unknown>): Promise<Record<string, unknown>>;
88
+ export declare function executeRoutine(database: SqlPool, services: Services, work: Identity, action: HostAction): Promise<Record<string, unknown>>;
89
+ export declare function assertRoutineWork(database: SqlQueryable, services: Services, work: Omit<WorkItem, 'leaseToken'>): Promise<void>;
90
+ export declare function scheduleRoutines(database: SqlPool, services: Services): Promise<number>;
91
+ export {};
@@ -0,0 +1,198 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { withTransaction } from '../../control-plane/pg-store.js';
3
+ import { cancelRoutineRuns } from './teacher-digest.js';
4
+ export const ROUTINE_METHODS = { list: [], pause: ['routineId'], create: ['kind', 'title', 'instructions', 'schedule', 'timezone'], activate: ['routineId'] };
5
+ class RoutineScopeError extends Error {
6
+ }
7
+ function instant(value) { return value instanceof Date ? value : new Date(String(value)); }
8
+ function text(value, max) {
9
+ if (typeof value !== 'string' || !value.trim() || value.length > max)
10
+ throw new Error('invalid routine text');
11
+ return value.trim();
12
+ }
13
+ export function routineArguments(action) {
14
+ const method = action.action.slice('routines.'.length);
15
+ if (!action.action.startsWith('routines.') || !Object.hasOwn(ROUTINE_METHODS, method))
16
+ throw new Error('unsupported routine action');
17
+ const fields = ROUTINE_METHODS[method];
18
+ if (Object.keys(action.args).some(key => !fields.includes(key)))
19
+ throw new Error('unknown routine argument');
20
+ if (method === 'pause' || method === 'activate')
21
+ return { routineId: text(action.args['routineId'], 200) };
22
+ if (method === 'list')
23
+ return {};
24
+ const kind = text(action.args['kind'], 100);
25
+ if (!/^[a-z][a-z0-9_]*$/.test(kind) || kind.startsWith('teacher_'))
26
+ throw new Error('reserved or invalid routine kind');
27
+ const timezone = text(action.args['timezone'] ?? 'Asia/Shanghai', 100);
28
+ try {
29
+ if (/^[+-]/.test(new Intl.DateTimeFormat('en-US', { timeZone: timezone }).resolvedOptions().timeZone))
30
+ throw new Error('offset');
31
+ }
32
+ catch {
33
+ throw new Error('timezone must be a valid IANA timezone');
34
+ }
35
+ const schedule = action.args['schedule'];
36
+ if (!schedule || typeof schedule !== 'object' || Array.isArray(schedule))
37
+ throw new Error('routine schedule is required');
38
+ const fieldsInSchedule = Object.keys(schedule);
39
+ const everyMinutes = Reflect.get(schedule, 'everyMinutes'), time = Reflect.get(schedule, 'time');
40
+ if (fieldsInSchedule.length !== 1 || (everyMinutes !== undefined
41
+ ? fieldsInSchedule[0] !== 'everyMinutes' || !Number.isSafeInteger(everyMinutes) || Number(everyMinutes) < 5 || Number(everyMinutes) > 525600
42
+ : fieldsInSchedule[0] !== 'time' || typeof time !== 'string' || !/^([01]\d|2[0-3]):[0-5]\d$/.test(time)))
43
+ throw new Error('schedule requires everyMinutes=5..525600 or time=HH:mm');
44
+ return { kind, title: text(action.args['title'], 2000), instructions: text(action.args['instructions'], 20000), schedule, timezone };
45
+ }
46
+ export async function routineScope(database, services, work) {
47
+ if (!work.principalId)
48
+ throw new RoutineScopeError('routine principal is required');
49
+ await services.permissionService.assertCan({ actorUserId: work.principalId, companyId: work.tenantId,
50
+ action: 'agent_run:control', resource: { type: 'conversation', id: work.sessionId } });
51
+ const { rows } = await database.query(`SELECT conversation.project_id FROM conversations conversation
52
+ JOIN im_channel_bindings binding ON binding.company_id=conversation.company_id AND binding.channel_id=conversation.id
53
+ JOIN participants agent ON agent.company_id=conversation.company_id AND agent.id=$3 AND agent.kind='agent' AND agent.departed_at IS NULL
54
+ JOIN participants principal ON principal.company_id=conversation.company_id AND principal.id=$4 AND principal.kind='human' AND principal.departed_at IS NULL
55
+ WHERE conversation.company_id=$1 AND conversation.id=$2
56
+ AND binding.profile->'members' ? agent.id AND binding.profile->'members' ? principal.id
57
+ AND agent.capabilities @> '["routines"]'::jsonb
58
+ AND NOT EXISTS(SELECT 1 FROM learning_project_teacher_agents teacher WHERE teacher.company_id=agent.company_id AND teacher.agent_id=agent.id)`, [work.tenantId, work.sessionId, work.agentId, work.principalId]);
59
+ if (rows.length !== 1)
60
+ throw new RoutineScopeError('routine is outside the active agent and human conversation binding');
61
+ return rows[0]['project_id'] ?? null;
62
+ }
63
+ export async function findRoutine(database, work, id, projectId, lock = false) {
64
+ const { rows } = await database.query(`SELECT * FROM lingxios.agent_routines
65
+ WHERE id=$1 AND tenant_id=$2 AND agent_id=$3 AND session_id=$4 AND thread_id IS NOT DISTINCT FROM $5
66
+ AND project_id IS NOT DISTINCT FROM $6 AND kind<>'teacher_digest'${lock ? ' FOR UPDATE' : ''}`, [id, work.tenantId, work.agentId, work.sessionId, work.threadId ?? null, projectId]);
67
+ if (rows.length !== 1)
68
+ throw new RoutineScopeError('routine is outside the current conversation and project');
69
+ return rows[0];
70
+ }
71
+ export async function routinePreview(database, services, work, action) {
72
+ const args = routineArguments(action), projectId = await routineScope(database, services, work);
73
+ if (action.action === 'routines.create')
74
+ return { ...args, projectId, principalId: work.principalId, threadId: work.threadId ?? null };
75
+ if (action.action !== 'routines.activate')
76
+ throw new Error('routine approval requires create or activate');
77
+ const row = await findRoutine(database, work, args.routineId, projectId, true);
78
+ routineArguments({ action: 'routines.create', args: { kind: row['kind'], title: row['title'], instructions: row['instructions'], schedule: row['schedule'], timezone: row['timezone'] } });
79
+ return { routineId: row['id'], version: row['version'], kind: row['kind'], title: row['title'], instructions: row['instructions'],
80
+ schedule: row['schedule'], timezone: row['timezone'], projectId, principalId: row['principal_id'], threadId: row['thread_id'], status: row['status'] };
81
+ }
82
+ export async function nextRoutineRun(database, schedule, timezone, now) {
83
+ const { rows } = await database.query(`SELECT CASE WHEN $2::int IS NOT NULL THEN $1::timestamptz + $2::int * INTERVAL '1 minute'
84
+ ELSE (SELECT MIN((($1::timestamptz AT TIME ZONE $3)::date+day+$4::time) AT TIME ZONE $3)
85
+ FROM generate_series(0,2) day WHERE ((($1::timestamptz AT TIME ZONE $3)::date+day+$4::time) AT TIME ZONE $3)>$1::timestamptz) END AS next`, [now, schedule['everyMinutes'] ?? null, timezone, schedule['time'] ?? '09:00']);
86
+ const next = instant(rows[0]?.['next']);
87
+ if (!Number.isFinite(next.getTime()) || next <= now)
88
+ throw new Error('routine schedule did not produce a future instant');
89
+ return next.toISOString();
90
+ }
91
+ /** Runs only within the approval transaction, after its preview was checked. */
92
+ export async function applyRoutineApproval(database, services, work, action, preview) {
93
+ const args = routineArguments(action);
94
+ const id = action.action === 'routines.create' ? 'routine-' + createHash('sha256').update(action.idempotencyKey).digest('hex') : args.routineId;
95
+ if (action.action === 'routines.create') {
96
+ await database.query(`INSERT INTO lingxios.agent_routines(id,tenant_id,agent_id,session_id,principal_id,project_id,thread_id,kind,title,instructions,schedule,timezone,status)
97
+ VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11::jsonb,$12,'paused')`, [id, work.tenantId, work.agentId, work.sessionId, work.principalId, preview['projectId'], work.threadId ?? null,
98
+ args.kind, args.title, args.instructions, JSON.stringify(args.schedule), args.timezone]);
99
+ }
100
+ else if (action.action === 'routines.activate') {
101
+ const creator = { ...work, principalId: String(preview['principalId']) };
102
+ if (await routineScope(database, services, creator) !== preview['projectId'])
103
+ throw new RoutineScopeError('routine project changed');
104
+ const now = (await database.query('SELECT NOW() AS now')).rows[0]['now'];
105
+ const next = await nextRoutineRun(database, preview['schedule'], String(preview['timezone']), instant(now));
106
+ await database.query(`UPDATE lingxios.agent_routines SET status='active',next_run_at=$2,version=version+1,pause_reason=NULL,updated_at=NOW() WHERE id=$1`, [id, next]);
107
+ await cancelRoutineRuns(database, id);
108
+ }
109
+ else
110
+ throw new Error('unsupported routine approval');
111
+ return findRoutine(database, work, id, preview['projectId']);
112
+ }
113
+ export async function executeRoutine(database, services, work, action) {
114
+ const args = routineArguments(action);
115
+ if (action.action !== 'routines.list' && action.action !== 'routines.pause')
116
+ throw new Error('routine action requires approval');
117
+ return withTransaction(database, async (client) => {
118
+ const projectId = await routineScope(client, services, work);
119
+ if (action.action === 'routines.list') {
120
+ const { rows } = await client.query(`SELECT * FROM lingxios.agent_routines
121
+ WHERE tenant_id=$1 AND agent_id=$2 AND session_id=$3 AND thread_id IS NOT DISTINCT FROM $4
122
+ AND project_id IS NOT DISTINCT FROM $5 AND kind<>'teacher_digest' ORDER BY created_at DESC,id LIMIT 101`, [work.tenantId, work.agentId, work.sessionId, work.threadId ?? null, projectId]);
123
+ return { routines: rows.slice(0, 100), truncated: rows.length > 100 };
124
+ }
125
+ const row = await findRoutine(client, work, args.routineId, projectId, true);
126
+ await client.query(`UPDATE lingxios.agent_routines SET status='paused',next_run_at=NULL,version=version+1,pause_reason='requested',updated_at=NOW() WHERE id=$1`, [row['id']]);
127
+ await cancelRoutineRuns(client, String(row['id']));
128
+ return findRoutine(client, work, String(row['id']), projectId);
129
+ });
130
+ }
131
+ function identity(row) {
132
+ return { tenantId: String(row['tenant_id']), agentId: String(row['agent_id']), sessionId: String(row['session_id']), principalId: String(row['principal_id']),
133
+ ...(row['thread_id'] !== null ? { threadId: String(row['thread_id']) } : {}) };
134
+ }
135
+ export async function assertRoutineWork(database, services, work) {
136
+ const projectId = await routineScope(database, services, work);
137
+ const { rows } = await database.query(`SELECT 1 FROM lingxios.agent_routines routine
138
+ JOIN lingxios.agent_routine_runs run ON run.routine_id=routine.id AND run.routine_version=routine.version
139
+ JOIN lingxios.agent_work_items work ON work.id=run.work_id
140
+ WHERE run.work_id=$1 AND routine.status='active' AND routine.kind<>'teacher_digest' AND work.kind='routine'
141
+ AND routine.tenant_id=$2 AND routine.agent_id=$3 AND routine.session_id=$4 AND routine.principal_id=$5
142
+ AND routine.project_id IS NOT DISTINCT FROM $6 AND routine.thread_id IS NOT DISTINCT FROM $7
143
+ AND work.tenant_id=routine.tenant_id AND work.agent_id=routine.agent_id AND work.session_id=routine.session_id
144
+ AND work.principal_id=routine.principal_id AND work.thread_id IS NOT DISTINCT FROM routine.thread_id AND work.cancel_requested_at IS NULL`, [work.id, work.tenantId, work.agentId, work.sessionId, work.principalId, projectId, work.threadId ?? null]);
145
+ if (rows.length !== 1)
146
+ throw new RoutineScopeError('scheduled work is cancelled, obsolete, or outside its routine');
147
+ }
148
+ export async function scheduleRoutines(database, services) {
149
+ return withTransaction(database, async (client) => {
150
+ await client.query("SET LOCAL lock_timeout='2s'");
151
+ await client.query("SET LOCAL statement_timeout='5s'");
152
+ const { rows } = await client.query(`SELECT routine.*,NOW() AS clock,
153
+ EXISTS(SELECT 1 FROM lingxios.agent_routine_runs run JOIN lingxios.agent_work_items work ON work.id=run.work_id
154
+ WHERE run.routine_id=routine.id AND work.cancel_requested_at IS NULL AND (work.status IN ('queued','leased')
155
+ OR EXISTS(SELECT 1 FROM lingxios.agent_delivery_outbox outbox WHERE outbox.run_id=work.id AND outbox.delivered_at IS NULL))) AS pending
156
+ FROM lingxios.agent_routines routine WHERE status='active' AND kind<>'teacher_digest' AND next_run_at<=NOW()
157
+ ORDER BY next_run_at,id LIMIT 8 FOR UPDATE OF routine SKIP LOCKED`);
158
+ let enqueued = 0;
159
+ for (const row of rows) {
160
+ const work = identity(row);
161
+ try {
162
+ if (await routineScope(client, services, work) !== row['project_id'])
163
+ throw new RoutineScopeError('routine project changed');
164
+ }
165
+ catch (error) {
166
+ if (!(error instanceof RoutineScopeError) && !(error instanceof Error && error.name === 'ForbiddenError' && [403, 404].includes(Reflect.get(error, 'status'))))
167
+ throw error;
168
+ await client.query("UPDATE lingxios.agent_routines SET status='paused',next_run_at=NULL,version=version+1,pause_reason='authorization_or_scope_changed',updated_at=NOW() WHERE id=$1", [row['id']]);
169
+ await cancelRoutineRuns(client, String(row['id']));
170
+ continue;
171
+ }
172
+ try {
173
+ routineArguments({ action: 'routines.create', args: {
174
+ kind: row['kind'], title: row['title'], instructions: row['instructions'], schedule: row['schedule'], timezone: row['timezone'],
175
+ } });
176
+ }
177
+ catch {
178
+ await client.query("UPDATE lingxios.agent_routines SET status='paused',next_run_at=NULL,version=version+1,pause_reason='invalid_schedule',updated_at=NOW() WHERE id=$1", [row['id']]);
179
+ await cancelRoutineRuns(client, String(row['id']));
180
+ continue;
181
+ }
182
+ const scheduledAt = instant(row['next_run_at']).toISOString();
183
+ const next = await nextRoutineRun(client, row['schedule'], String(row['timezone']), instant(row['clock']));
184
+ const existing = await client.query('SELECT work_id FROM lingxios.agent_routine_runs WHERE routine_id=$1 AND routine_version=$2 AND scheduled_at=$3', [row['id'], row['version'], scheduledAt]);
185
+ if (!row['pending'] && !existing.rows.length) {
186
+ const id = 'routine-run-' + createHash('sha256').update(JSON.stringify([row['id'], row['version'], scheduledAt])).digest('hex');
187
+ await client.query(`INSERT INTO lingxios.agent_work_items(id,tenant_id,agent_id,session_id,principal_id,thread_id,kind,lane,trigger_ref,meta)
188
+ VALUES($1,$2,$3,$4,$5,$6,'routine','background',$1,$7::jsonb)`, [id, work.tenantId, work.agentId, work.sessionId, work.principalId, work.threadId ?? null,
189
+ JSON.stringify({ text: row['instructions'], authorName: row['title'], routineId: row['id'], routineVersion: row['version'], scheduledAt })]);
190
+ await client.query('INSERT INTO lingxios.agent_routine_runs(routine_id,routine_version,scheduled_at,work_id) VALUES($1,$2,$3,$4)', [row['id'], row['version'], scheduledAt, id]);
191
+ enqueued++;
192
+ }
193
+ await client.query('UPDATE lingxios.agent_routines SET next_run_at=$2,updated_at=NOW() WHERE id=$1', [row['id'], next]);
194
+ }
195
+ return enqueued;
196
+ });
197
+ }
198
+ //# sourceMappingURL=routines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routines.js","sourceRoot":"","sources":["../../../../src/integrations/lingxiloop/routines.ts"],"names":[],"mappings":"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"}