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,123 @@
1
+ import { type RequestAttachment } from '../context/attachments.js';
2
+ import { type InputContinuation } from './input.js';
3
+ import { type SqlPool } from '../control-plane/pg-store.js';
4
+ import { type KernelManagerOptions } from '../kernel/manager.js';
5
+ import type { AssistantMessage, PromptContext, RunEvent } from '../protocol/types.js';
6
+ import type { GoalOutcome } from '../protocol/outcome.js';
7
+ import type { ControlPlaneDeps } from '../control-plane/service.js';
8
+ export interface LingxiOSOptions {
9
+ database: SqlPool;
10
+ model?: {
11
+ id?: string;
12
+ apiKey: string;
13
+ baseUrl?: string;
14
+ reasoningEffort?: 'high' | 'max';
15
+ maxOutputTokens?: number;
16
+ contextWindowTokens?: number;
17
+ };
18
+ persona?: PromptContext['persona'];
19
+ kernel?: Pick<KernelManagerOptions, 'pythonCommand' | 'homesRoot' | 'executionTimeoutMs' | 'allowNetwork'>;
20
+ worker?: {
21
+ id?: string;
22
+ concurrency?: number;
23
+ shutdownGraceMs?: number;
24
+ pollIdleMs?: number;
25
+ healthPort?: number;
26
+ };
27
+ }
28
+ export interface RequestInput {
29
+ id?: string;
30
+ sourceRef?: string;
31
+ tenantId: string;
32
+ agentId: string;
33
+ sessionId: string;
34
+ principalId: string;
35
+ text: string;
36
+ authorName?: string;
37
+ threadId?: string;
38
+ attachments?: RequestAttachment[];
39
+ }
40
+ export interface MessageIdentity {
41
+ runId: string;
42
+ tenantId: string;
43
+ agentId: string;
44
+ sessionId: string;
45
+ }
46
+ /** Trusted server entry point. Product ingress must authenticate the principal. */
47
+ export declare function createLingxiOS(options: LingxiOSOptions): Promise<{
48
+ /** Authenticate and authorize the caller before using this server API. */
49
+ readArtifact: (identity: MessageIdentity & Pick<RequestInput, "principalId" | "threadId">, path: string) => Promise<{
50
+ artifact: import("../protocol/types.js").KernelArtifact;
51
+ bytes: Buffer<ArrayBuffer>;
52
+ } | null>;
53
+ continueInput: (input: InputContinuation) => Promise<{
54
+ status: "already_resumed";
55
+ workId: string;
56
+ } | {
57
+ status: "resumed";
58
+ workId: string;
59
+ }>;
60
+ /** Trusted server boundary: use the authenticated original principal. */
61
+ cancel(identity: MessageIdentity & Pick<RequestInput, "principalId" | "threadId">): Promise<boolean>;
62
+ enqueue(input: RequestInput): Promise<{
63
+ id: string;
64
+ deduplicated: boolean;
65
+ }>;
66
+ runNext(): Promise<boolean>;
67
+ readMessage(identity: MessageIdentity): Promise<AssistantMessage | null>;
68
+ readOutcome(identity: MessageIdentity): Promise<GoalOutcome | null>;
69
+ readEvents(identity: MessageIdentity, afterSeq?: number): Promise<{
70
+ events: RunEvent[];
71
+ nextSeq: number;
72
+ }>;
73
+ readDelivery(identity: MessageIdentity): Promise<"pending" | "delivered" | "not_observed" | null>;
74
+ listenControlPlane(input: {
75
+ serviceToken: string;
76
+ port: number;
77
+ host?: string;
78
+ }): Promise<number>;
79
+ start: () => Promise<{
80
+ healthPort: number | null;
81
+ }>;
82
+ stop(): Promise<void>;
83
+ }>;
84
+ /** Package-internal assembly hook; never exposed as consumer configuration. */
85
+ export declare function assembleApp(options: LingxiOSOptions, integration?: Pick<ControlPlaneDeps, 'contextProvider' | 'capabilityResolver' | 'actionExecutor' | 'delivery'> & {
86
+ beforeClaim?(): Promise<void>;
87
+ }): Promise<{
88
+ /** Authenticate and authorize the caller before using this server API. */
89
+ readArtifact: (identity: MessageIdentity & Pick<RequestInput, "principalId" | "threadId">, path: string) => Promise<{
90
+ artifact: import("../protocol/types.js").KernelArtifact;
91
+ bytes: Buffer<ArrayBuffer>;
92
+ } | null>;
93
+ continueInput: (input: InputContinuation) => Promise<{
94
+ status: "already_resumed";
95
+ workId: string;
96
+ } | {
97
+ status: "resumed";
98
+ workId: string;
99
+ }>;
100
+ /** Trusted server boundary: use the authenticated original principal. */
101
+ cancel(identity: MessageIdentity & Pick<RequestInput, "principalId" | "threadId">): Promise<boolean>;
102
+ enqueue(input: RequestInput): Promise<{
103
+ id: string;
104
+ deduplicated: boolean;
105
+ }>;
106
+ runNext(): Promise<boolean>;
107
+ readMessage(identity: MessageIdentity): Promise<AssistantMessage | null>;
108
+ readOutcome(identity: MessageIdentity): Promise<GoalOutcome | null>;
109
+ readEvents(identity: MessageIdentity, afterSeq?: number): Promise<{
110
+ events: RunEvent[];
111
+ nextSeq: number;
112
+ }>;
113
+ readDelivery(identity: MessageIdentity): Promise<"pending" | "delivered" | "not_observed" | null>;
114
+ listenControlPlane(input: {
115
+ serviceToken: string;
116
+ port: number;
117
+ host?: string;
118
+ }): Promise<number>;
119
+ start: () => Promise<{
120
+ healthPort: number | null;
121
+ }>;
122
+ stop(): Promise<void>;
123
+ }>;
@@ -0,0 +1,291 @@
1
+ import { ControlPlaneServer } from '../control-plane/http-server.js';
2
+ import { checkStorage } from './storage.js';
3
+ import { captureMemoryEvidence, retryMemorySynthesis } from '../memory/evidence.js';
4
+ import { memorySynthesisProcessor, memoryIndexProcessor } from '../memory/processor.js';
5
+ import { readArtifact, persistArtifacts } from './artifacts.js';
6
+ import { resolve } from 'node:path';
7
+ import { snapshotAttachments } from '../context/attachments.js';
8
+ import { recoverWait } from './recover-wait.js';
9
+ import { continueInput } from './input.js';
10
+ import { randomUUID } from 'node:crypto';
11
+ import { ConfigError } from '../errors.js';
12
+ import { ControlPlaneService } from '../control-plane/service.js';
13
+ import { withTransaction, PgWorkStore, PgSessionStore, PgEventStore, PgActionLedger } from '../control-plane/pg-store.js';
14
+ import { KernelManager } from '../kernel/manager.js';
15
+ import { DEFAULT_MODEL, OpenAIChatDriver } from '../model/openai.js';
16
+ import { AgentRuntime } from '../runtime/runtime.js';
17
+ import { AgentWorker } from '../worker/worker.js';
18
+ import { sessionKeyOf } from '../protocol/types.js';
19
+ import { RUN_SEQUENCE_SPAN } from '../protocol/constants.js';
20
+ /** Trusted server entry point. Product ingress must authenticate the principal. */
21
+ export async function createLingxiOS(options) {
22
+ return assembleApp(options);
23
+ }
24
+ /** Package-internal assembly hook; never exposed as consumer configuration. */
25
+ export async function assembleApp(options, integration) {
26
+ if (!options.database?.query || !options.database.connect)
27
+ throw new ConfigError('a PostgreSQL pool is required');
28
+ if (options.model && ((options.model.id !== undefined && !options.model.id.trim()) || !options.model.apiKey?.trim()))
29
+ throw new ConfigError('model apiKey is required and any explicit model id must be non-empty');
30
+ const concurrency = options.worker?.concurrency ?? 2;
31
+ if (!Number.isSafeInteger(concurrency) || concurrency < 1 || concurrency > 1_024)
32
+ throw new ConfigError('worker concurrency must be 1-1024');
33
+ await checkStorage(options.database);
34
+ const persona = options.persona ?? { name: 'Assistant', role: 'assistant', instructions: 'Follow the current user request. Clearly distinguish verified results from remaining work.' };
35
+ const workerId = options.worker?.id ?? `lingxios-${randomUUID()}`;
36
+ const sessions = new PgSessionStore(options.database);
37
+ async function flushDeliveries(runId) {
38
+ if (!integration)
39
+ return;
40
+ const claimToken = randomUUID();
41
+ const { rows } = await options.database.query(`WITH candidate AS (
42
+ SELECT outbox.run_id,messages.message
43
+ FROM lingxios.agent_delivery_outbox outbox
44
+ JOIN lingxios.agent_messages messages ON messages.run_id=outbox.run_id
45
+ JOIN lingxios.agent_work_items current ON current.id=outbox.run_id
46
+ WHERE outbox.delivered_at IS NULL AND outbox.available_at <= NOW()
47
+ AND ($1::text IS NULL OR outbox.run_id=$1)
48
+ AND current.cancel_requested_at IS NULL
49
+ AND (messages.message->'envelope'->>'requestVersion')::integer=jsonb_array_length(current.steer_inputs)+1
50
+ ORDER BY outbox.available_at,messages.committed_at LIMIT 1 FOR UPDATE OF outbox SKIP LOCKED)
51
+ UPDATE lingxios.agent_delivery_outbox outbox
52
+ SET claim_token=$2,available_at=NOW()+INTERVAL '60 seconds',attempts=LEAST(outbox.attempts+1,30)
53
+ FROM candidate WHERE outbox.run_id=candidate.run_id
54
+ RETURNING outbox.run_id,outbox.work,candidate.message`, [runId ?? null, claimToken]);
55
+ for (const row of rows) {
56
+ // Native delivery uses a stable message ID; sends exceeding the claim window may overlap.
57
+ try {
58
+ await integration.delivery.deliverMessage(row['work'], row['message']);
59
+ await options.database.query('UPDATE lingxios.agent_delivery_outbox SET delivered_at=NOW(),claim_token=NULL WHERE run_id=$1 AND claim_token=$2', [row['run_id'], claimToken]);
60
+ }
61
+ catch {
62
+ await options.database.query(`UPDATE lingxios.agent_delivery_outbox SET claim_token=NULL,
63
+ available_at=NOW()+LEAST(300,5*power(2,LEAST(attempts-1,6)))*INTERVAL '1 second'
64
+ WHERE run_id=$1 AND claim_token=$2`, [row['run_id'], claimToken]);
65
+ // The committed answer survives transport failure; the outbox owns retry.
66
+ }
67
+ }
68
+ }
69
+ const service = new ControlPlaneService({
70
+ work: new PgWorkStore(options.database), sessions,
71
+ events: new PgEventStore(options.database), actions: new PgActionLedger(options.database),
72
+ contextProvider: integration?.contextProvider ?? { loadContext: async (work) => {
73
+ const text = work.meta?.['text'];
74
+ if (typeof text !== 'string' || !work.principalId)
75
+ throw new Error('request text and principal are missing');
76
+ return {
77
+ persona, capabilities: [],
78
+ messages: [{ ref: work.triggerRef, authorId: work.principalId, authorName: String(work.meta?.['authorName'] ?? 'User'), authorKind: 'human', body: text, createdAt: work.createdAt ?? '' }],
79
+ promptContextCandidate: { version: 2, epoch: 0, assembledAt: '', systemInstructions: '', persona, capabilities: [], sourceVersions: { persona: JSON.stringify(persona) } },
80
+ };
81
+ } },
82
+ capabilityResolver: integration?.capabilityResolver ?? { resolve: async () => [] },
83
+ actionExecutor: integration?.actionExecutor ?? { execute: async () => ({ ok: false, error: 'no product capabilities are granted by the default application' }) },
84
+ delivery: {
85
+ getMessage: async (work) => {
86
+ const result = await options.database.query('SELECT message FROM lingxios.agent_messages WHERE run_id=$1 AND tenant_id=$2 AND agent_id=$3 AND session_id=$4', [work.id, work.tenantId, work.agentId, work.sessionId]);
87
+ return result.rows[0]?.['message'] ?? null;
88
+ },
89
+ onEvent: async (work, event) => { await integration?.delivery.onEvent(work, event); },
90
+ deliverMessage: async (work, message) => {
91
+ const recordMemory = integration && (await integration.capabilityResolver.resolve(work)).some(grant => grant.name === 'memory');
92
+ await persistArtifacts(resolve(options.kernel?.homesRoot ?? process.env['AGENT_OS_HOMES_ROOT'] ?? '.agent-os/homes'), work, message);
93
+ await withTransaction(options.database, async (client) => {
94
+ const current = await client.query(`SELECT id FROM lingxios.agent_work_items
95
+ WHERE id=$1 AND fence=$2 AND status='leased' AND lease_expires_at>NOW()
96
+ AND cancel_requested_at IS NULL
97
+ AND ($3::integer IS NULL OR jsonb_array_length(steer_inputs)+1=$3)
98
+ FOR UPDATE`, [work.id, work.fence, message.envelope.requestVersion]);
99
+ if (!current.rows.length)
100
+ throw new Error('request changed or lease expired before message persistence');
101
+ const { rows } = await client.query(`INSERT INTO lingxios.agent_messages (run_id, tenant_id, agent_id, session_id, message, home_epoch)
102
+ VALUES ($1,$2,$3,$4,$5::jsonb,$6)
103
+ ON CONFLICT (run_id) DO UPDATE SET message=EXCLUDED.message
104
+ WHERE lingxios.agent_messages.message=EXCLUDED.message
105
+ AND lingxios.agent_messages.tenant_id=EXCLUDED.tenant_id
106
+ AND lingxios.agent_messages.agent_id=EXCLUDED.agent_id
107
+ AND lingxios.agent_messages.session_id=EXCLUDED.session_id
108
+ AND lingxios.agent_messages.home_epoch=EXCLUDED.home_epoch
109
+ RETURNING run_id`, [work.id, work.tenantId, work.agentId, work.sessionId, JSON.stringify(message), work.homeEpoch]);
110
+ if (rows.length !== 1)
111
+ throw new Error('a different response is already committed for this run');
112
+ if (recordMemory)
113
+ await captureMemoryEvidence(client, work, message);
114
+ if (integration)
115
+ await client.query('INSERT INTO lingxios.agent_delivery_outbox(run_id,work) VALUES($1,$2::jsonb) ON CONFLICT(run_id) DO NOTHING', [work.id, JSON.stringify(work)]);
116
+ });
117
+ await flushDeliveries(work.id);
118
+ },
119
+ },
120
+ });
121
+ async function claimWork(claimingWorkerId) {
122
+ await flushDeliveries();
123
+ if (integration)
124
+ await retryMemorySynthesis(options.database);
125
+ await integration?.beforeClaim?.();
126
+ const work = await service.claim(claimingWorkerId);
127
+ if (!work)
128
+ return null;
129
+ const { rows } = await options.database.query('SELECT message FROM lingxios.agent_messages WHERE run_id=$1 AND tenant_id=$2 AND agent_id=$3 AND session_id=$4', [work.id, work.tenantId, work.agentId, work.sessionId]);
130
+ const committed = rows[0]?.['message'];
131
+ if (committed) {
132
+ if (!committed.envelope)
133
+ throw new Error('committed response envelope is missing');
134
+ // A durable response is the recovery checkpoint; do not regenerate it.
135
+ const session = await service.getSession(work, sessionKeyOf(work));
136
+ if (!session?.request || session.request.workId !== work.id
137
+ || session.request.revisions.length + 1 !== committed.envelope.requestVersion)
138
+ throw new Error('committed response request snapshot is stale or missing');
139
+ const last = session.history.at(-1);
140
+ if (!last || !('role' in last) || last.role !== 'assistant' || last.content !== committed.body) {
141
+ session.history.push({ role: 'assistant', content: committed.body });
142
+ await service.saveSession(work, session);
143
+ }
144
+ await service.recordEvent(work, {
145
+ runId: work.id, seq: (work.fence - 1) * RUN_SEQUENCE_SPAN + 1,
146
+ kind: 'response.recovered', stage: 'completed', visibility: 'internal',
147
+ data: { requestVersion: committed.envelope.requestVersion, evidenceSnapshotId: committed.envelope.evidenceSnapshotId },
148
+ });
149
+ await service.complete(work, { status: 'completed', resultText: committed.body, goalOutcome: committed.envelope.goalOutcome });
150
+ return null;
151
+ }
152
+ if (await recoverWait(options.database, service, work))
153
+ return null;
154
+ return work;
155
+ }
156
+ const host = {
157
+ claimWork: () => claimWork(workerId), heartbeat: (work) => service.heartbeat(work),
158
+ loadContext: (work) => service.loadContext(work), executeAction: (work, action) => service.executeAction(work, action),
159
+ emitEvent: (work, event) => service.recordEvent(work, event), loadSession: (work, key) => service.getSession(work, key),
160
+ saveSession: async (work, session) => { session.revision = (await service.saveSession(work, session)).revision; },
161
+ commitMessage: (work, message) => service.commitMessage(work, message), completeWork: (work, completion) => service.complete(work, completion),
162
+ yieldWork: (work) => service.yieldWork(work),
163
+ };
164
+ let stopped = false;
165
+ let stopPromise;
166
+ let listening;
167
+ let local;
168
+ function localExecution() {
169
+ if (stopped)
170
+ throw new Error('application has stopped');
171
+ if (local)
172
+ return local;
173
+ if (!options.model)
174
+ throw new ConfigError('model configuration is required for local execution');
175
+ const model = new OpenAIChatDriver(options.model.id ?? DEFAULT_MODEL.id, options.model);
176
+ const kernels = new KernelManager({ execute: (work, action) => service.executeAction(work, action) }, { ...options.kernel, maxKernels: concurrency });
177
+ const runtime = new AgentRuntime(host, model, kernels);
178
+ runtime.registerProcessor('memory_synthesis', memorySynthesisProcessor);
179
+ runtime.registerProcessor('memory_index', memoryIndexProcessor);
180
+ runtime.registerProcessor('teacher_digest', 'conversation');
181
+ runtime.registerProcessor('routine', 'conversation');
182
+ runtime.registerProcessor('mission_coordinator', 'conversation');
183
+ const worker = new AgentWorker({ host, runtime, kernels, workerId, maxConcurrentRuns: concurrency,
184
+ shutdownGraceMs: options.worker?.shutdownGraceMs ?? 20_000,
185
+ ...(options.worker?.pollIdleMs === undefined ? {} : { pollIdleMs: options.worker.pollIdleMs }),
186
+ ...(options.worker?.healthPort === undefined ? {} : { healthPort: options.worker.healthPort }),
187
+ });
188
+ local = { runtime, worker };
189
+ return local;
190
+ }
191
+ let controlPlane;
192
+ return {
193
+ /** Authenticate and authorize the caller before using this server API. */
194
+ readArtifact: (identity, path) => readArtifact(options.database, resolve(options.kernel?.homesRoot ?? process.env['AGENT_OS_HOMES_ROOT'] ?? '.agent-os/homes'), identity, path),
195
+ continueInput: (input) => continueInput(options.database, input),
196
+ /** Trusted server boundary: use the authenticated original principal. */
197
+ async cancel(identity) {
198
+ if (!identity || !identity.principalId?.trim())
199
+ throw new Error('authenticated principalId is required');
200
+ const { rows } = await options.database.query(`UPDATE lingxios.agent_work_items
201
+ SET cancel_requested_at=NOW(),status=CASE WHEN status='leased' THEN status ELSE 'cancelled' END,
202
+ finished_at=CASE WHEN status='leased' THEN finished_at ELSE NOW() END,
203
+ goal_outcome=jsonb_build_object('status','blocked','verification','inconclusive','requestVersion',jsonb_array_length(steer_inputs)+1,
204
+ 'gaps',jsonb_build_array('Execution was cancelled')),updated_at=NOW()
205
+ WHERE id=$1 AND tenant_id=$2 AND agent_id=$3 AND session_id=$4 AND principal_id=$5
206
+ AND thread_id IS NOT DISTINCT FROM $6 AND cancel_requested_at IS NULL
207
+ AND (status IN ('queued','leased') OR (status='completed' AND goal_outcome->>'status' IN ('awaiting_input','awaiting_approval')))
208
+ RETURNING id`, [identity.runId, identity.tenantId, identity.agentId, identity.sessionId, identity.principalId, identity.threadId ?? null]);
209
+ return rows.length === 1;
210
+ },
211
+ async enqueue(input) {
212
+ if (typeof input.text !== 'string' || !input.text.trim() || typeof input.principalId !== 'string' || !input.principalId.trim()) {
213
+ throw new Error('non-empty request text and authenticated principalId are required');
214
+ }
215
+ return service.enqueue({ ...input, kind: 'turn', lane: 'interactive', triggerRef: input.sourceRef ?? input.id ?? randomUUID(),
216
+ meta: { text: input.text, authorName: input.authorName ?? 'User', attachments: snapshotAttachments(input.attachments ?? []) },
217
+ });
218
+ },
219
+ async runNext() {
220
+ const { runtime } = localExecution();
221
+ const work = await host.claimWork();
222
+ if (!work)
223
+ return false;
224
+ await runtime.runWork(work);
225
+ return true;
226
+ },
227
+ async readMessage(identity) {
228
+ const { rows } = await options.database.query('SELECT message FROM lingxios.agent_messages WHERE run_id=$1 AND tenant_id=$2 AND agent_id=$3 AND session_id=$4', [identity.runId, identity.tenantId, identity.agentId, identity.sessionId]);
229
+ return rows[0]?.['message'] ?? null;
230
+ },
231
+ async readOutcome(identity) {
232
+ const { rows } = await options.database.query('SELECT goal_outcome FROM lingxios.agent_work_items WHERE id=$1 AND tenant_id=$2 AND agent_id=$3 AND session_id=$4', [identity.runId, identity.tenantId, identity.agentId, identity.sessionId]);
233
+ return rows[0]?.['goal_outcome'] ?? null;
234
+ },
235
+ async readEvents(identity, afterSeq = 0) {
236
+ if (!Number.isSafeInteger(afterSeq) || afterSeq < 0)
237
+ throw new Error('event cursor must be a non-negative safe integer');
238
+ const { rows } = await options.database.query(`SELECT event.* FROM lingxios.agent_run_events event
239
+ JOIN lingxios.agent_work_items work ON work.id=event.run_id
240
+ AND work.tenant_id=event.tenant_id AND work.agent_id=event.agent_id
241
+ WHERE work.id=$1 AND work.tenant_id=$2 AND work.agent_id=$3 AND work.session_id=$4
242
+ AND event.visibility='user' AND event.seq>$5 ORDER BY event.seq LIMIT 100`, [identity.runId, identity.tenantId, identity.agentId, identity.sessionId, afterSeq]);
243
+ const events = rows.map(row => ({ runId: String(row['run_id']), seq: Number(row['seq']), kind: String(row['kind']),
244
+ stage: row['stage'], visibility: 'user', data: row['data'] }));
245
+ return { events, nextSeq: events.at(-1)?.seq ?? afterSeq };
246
+ },
247
+ async readDelivery(identity) {
248
+ const { rows } = await options.database.query(`SELECT CASE WHEN outbox.run_id IS NULL THEN 'not_observed'
249
+ WHEN outbox.delivered_at IS NULL THEN 'pending' ELSE 'delivered' END AS state
250
+ FROM lingxios.agent_messages message
251
+ LEFT JOIN lingxios.agent_delivery_outbox outbox ON outbox.run_id=message.run_id
252
+ WHERE message.run_id=$1 AND message.tenant_id=$2 AND message.agent_id=$3 AND message.session_id=$4`, [identity.runId, identity.tenantId, identity.agentId, identity.sessionId]);
253
+ return rows[0]?.['state'] ?? null;
254
+ },
255
+ async listenControlPlane(input) {
256
+ if (stopped)
257
+ throw new Error('application has stopped');
258
+ if (controlPlane)
259
+ throw new Error('control plane is already listening or starting');
260
+ if (!input.serviceToken?.trim())
261
+ throw new ConfigError('control plane service token is required');
262
+ if (!Number.isSafeInteger(input.port) || input.port < 0 || input.port > 65535)
263
+ throw new ConfigError('control plane port must be 0-65535');
264
+ const server = new ControlPlaneServer({ service, claimWork, serviceToken: input.serviceToken });
265
+ controlPlane = server;
266
+ try {
267
+ listening = server.listen(input.port, input.host ?? '127.0.0.1');
268
+ return await listening;
269
+ }
270
+ catch (error) {
271
+ controlPlane = undefined;
272
+ throw error;
273
+ }
274
+ },
275
+ start: async () => localExecution().worker.start(),
276
+ stop() {
277
+ stopped = true;
278
+ stopPromise ??= (async () => {
279
+ await local?.worker.stop();
280
+ // The listen caller receives startup errors; shutdown still releases any listener.
281
+ await listening?.catch(() => { });
282
+ if (controlPlane) {
283
+ await controlPlane.close();
284
+ controlPlane = undefined;
285
+ }
286
+ })();
287
+ return stopPromise;
288
+ },
289
+ };
290
+ }
291
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/app/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type SqlPool } from '../control-plane/pg-store.js';
2
+ import { type RequestAttachment } from '../context/attachments.js';
3
+ export interface InputContinuation {
4
+ runId: string;
5
+ tenantId: string;
6
+ agentId: string;
7
+ sessionId: string;
8
+ threadId?: string;
9
+ principalId: string;
10
+ inputId: string;
11
+ requestVersion: number;
12
+ text: string;
13
+ attachments?: RequestAttachment[];
14
+ }
15
+ /** Trusted server boundary: principalId must come from authenticated ingress. */
16
+ export declare function continueInput(database: SqlPool, input: InputContinuation): Promise<{
17
+ status: "already_resumed";
18
+ workId: string;
19
+ } | {
20
+ status: "resumed";
21
+ workId: string;
22
+ }>;
@@ -0,0 +1,60 @@
1
+ import { withTransaction } from '../control-plane/pg-store.js';
2
+ import { sessionKeyOf } from '../protocol/types.js';
3
+ import { isDeepStrictEqual } from 'node:util';
4
+ import { snapshotAttachments } from '../context/attachments.js';
5
+ /** Trusted server boundary: principalId must come from authenticated ingress. */
6
+ export async function continueInput(database, input) {
7
+ if (!input || !['runId', 'tenantId', 'agentId', 'sessionId', 'principalId', 'inputId', 'text'].every(key => {
8
+ const value = input[key];
9
+ return typeof value === 'string' && value.trim().length > 0 && value.length <= (key === 'text' ? 32_000 : 1_000);
10
+ }) || !Number.isSafeInteger(input.requestVersion) || input.requestVersion < 1
11
+ || (input.threadId !== undefined && typeof input.threadId !== 'string'))
12
+ throw new Error('invalid input continuation');
13
+ const attachments = snapshotAttachments(input.attachments ?? []);
14
+ return withTransaction(database, async (client) => {
15
+ await client.query("SET LOCAL lock_timeout='5s'");
16
+ await client.query("SET LOCAL statement_timeout='15s'");
17
+ // ponytail: serialize rare human continuations with lease acquisition; shard if contention matters.
18
+ await client.query('LOCK TABLE lingxios.agent_os_session_leases IN SHARE ROW EXCLUSIVE MODE');
19
+ const { rows } = await client.query(`SELECT work.status,work.cancel_requested_at,work.goal_outcome,work.steer_inputs,
20
+ session.request_snapshot FROM lingxios.agent_work_items work
21
+ JOIN lingxios.agent_os_sessions session ON session.session_key=$7
22
+ AND session.tenant_id=work.tenant_id AND session.agent_id=work.agent_id
23
+ AND session.session_id=work.session_id AND session.thread_id IS NOT DISTINCT FROM work.thread_id
24
+ WHERE work.id=$1 AND work.tenant_id=$2 AND work.agent_id=$3 AND work.session_id=$4
25
+ AND work.principal_id=$5 AND work.thread_id IS NOT DISTINCT FROM $6
26
+ AND session.request_snapshot->>'workId'=work.id FOR UPDATE OF work,session`, [input.runId, input.tenantId, input.agentId, input.sessionId, input.principalId, input.threadId ?? null, sessionKeyOf(input)]);
27
+ const row = rows[0];
28
+ if (!row)
29
+ throw new Error('input continuation does not match the original request identity');
30
+ const revisions = row['steer_inputs'];
31
+ const revisionId = JSON.stringify(['input', input.requestVersion, input.inputId]);
32
+ const existing = revisions.find(revision => revision.id === revisionId);
33
+ if (existing) {
34
+ if (existing.text !== input.text || !isDeepStrictEqual(existing.attachments ?? [], attachments))
35
+ throw new Error('input identity was reused with different text or attachments');
36
+ return { status: 'already_resumed', workId: input.runId };
37
+ }
38
+ const outcome = row['goal_outcome'];
39
+ if (row['status'] !== 'completed' || row['cancel_requested_at'] !== null || outcome?.status !== 'awaiting_input'
40
+ || outcome.requestVersion !== input.requestVersion || revisions.length + 1 !== input.requestVersion)
41
+ throw new Error('work is not waiting for this input version');
42
+ const active = await client.query('SELECT 1 FROM lingxios.agent_os_session_leases WHERE session_key=$1 AND expires_at>NOW()', [sessionKeyOf(input)]);
43
+ if (active.rows.length)
44
+ throw new Error('session is active; retry after it pauses');
45
+ if (revisions.length >= 200)
46
+ throw new Error('request revision limit reached');
47
+ const request = row['request_snapshot'];
48
+ if (request.attachments.length + revisions.reduce((count, revision) => count + (revision.attachments?.length ?? 0), 0) + attachments.length > 20)
49
+ throw new Error('request attachment limit reached');
50
+ const revision = { id: revisionId, text: input.text, createdAt: new Date().toISOString(), ...(attachments.length ? { attachments } : {}) };
51
+ const updated = await client.query(`UPDATE lingxios.agent_os_sessions SET request_snapshot=jsonb_set(request_snapshot-'contract','{revisions}',$2::jsonb),
52
+ revision=revision+1,updated_at=NOW() WHERE session_key=$1 AND request_snapshot->'revisions'=$3::jsonb RETURNING session_key`, [sessionKeyOf(input), JSON.stringify([...revisions, revision]), JSON.stringify(revisions)]);
53
+ if (updated.rows.length !== 1)
54
+ throw new Error('request revisions changed before continuation');
55
+ await client.query(`UPDATE lingxios.agent_work_items SET steer_inputs=$2::jsonb,status='queued',available_at=NOW(),
56
+ goal_outcome=NULL,finished_at=NULL,result_text=NULL,error=NULL,updated_at=NOW() WHERE id=$1`, [input.runId, JSON.stringify([...revisions, revision])]);
57
+ return { status: 'resumed', workId: input.runId };
58
+ });
59
+ }
60
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../../src/app/input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ControlPlaneService } from '../control-plane/service.js';
2
+ import type { SqlPool } from '../control-plane/pg-store.js';
3
+ import { type WorkItem } from '../protocol/types.js';
4
+ /** Durable terminal receipts recover a wait without rerunning Python or any business action. */
5
+ export declare function recoverWait(database: SqlPool, service: ControlPlaneService, work: WorkItem): Promise<boolean>;
@@ -0,0 +1,59 @@
1
+ import { sessionKeyOf } from '../protocol/types.js';
2
+ import { RUN_SEQUENCE_SPAN } from '../protocol/constants.js';
3
+ import { boundedToolOutput } from '../runtime/tool.js';
4
+ import { isDeepStrictEqual } from 'node:util';
5
+ /** Durable terminal receipts recover a wait without rerunning Python or any business action. */
6
+ export async function recoverWait(database, service, work) {
7
+ const session = await service.getSession(work, sessionKeyOf(work));
8
+ if (!session?.request || session.request.workId !== work.id)
9
+ return false;
10
+ const current = await service.heartbeat(work);
11
+ if (!current.ok || current.cancelRequested || !isDeepStrictEqual(current.steer ?? [], session.request.revisions))
12
+ return false;
13
+ const requestVersion = session.request.revisions.length + 1;
14
+ const calls = session.history.filter(item => 'type' in item && item.type === 'function_call');
15
+ const call = calls.at(-1);
16
+ if (!call || !('type' in call) || call.type !== 'function_call')
17
+ return false;
18
+ const { rows } = await database.query(`SELECT intent.intent->'action' AS action,receipt.result
19
+ FROM lingxios.agent_action_intents intent LEFT JOIN lingxios.agent_action_ledger receipt USING(idempotency_key)
20
+ WHERE intent.intent->>'workId'=$1 AND intent.intent->>'tenantId'=$2 AND intent.intent->>'agentId'=$3
21
+ AND intent.intent->>'sessionId'=$4 AND intent.intent->>'principalId' IS NOT DISTINCT FROM $5
22
+ AND intent.intent->>'threadId' IS NOT DISTINCT FROM $6
23
+ AND intent.intent->'action'->>'cellId'=$7 AND (intent.intent->>'requestVersion')::integer=$8
24
+ ORDER BY (intent.intent->'action'->>'callIndex')::integer LIMIT 101`, [work.id, work.tenantId, work.agentId, work.sessionId, work.principalId ?? null, work.threadId ?? null, call.callId, requestVersion]);
25
+ if (!rows.length || rows.length > 100 || rows.some(row => !row['result']))
26
+ return false;
27
+ const receipts = rows.map(row => ({ action: row['action'], result: row['result'] }));
28
+ if (receipts.some((receipt, index) => receipt.action.callIndex !== index))
29
+ return false;
30
+ const last = receipts.at(-1);
31
+ const question = last.action.args['question'];
32
+ let goalOutcome;
33
+ if (!last.result.ok && last.result.executionState !== 'unknown' && last.result.approval?.status === 'PENDING'
34
+ && typeof last.result.approval.id === 'string' && last.result.approval.id.trim()) {
35
+ goalOutcome = { status: 'awaiting_approval', approvalId: last.result.approval.id, verification: 'not_run', requestVersion };
36
+ }
37
+ else if (last.action.action === 'task.ask' && last.result.ok && last.result.directive?.type === 'defer'
38
+ && last.result.directive.reason === 'user' && typeof question === 'string' && question.trim() && question.length <= 4000
39
+ && last.result.directive.data?.['question'] === question) {
40
+ goalOutcome = { status: 'awaiting_input', verification: 'not_run', requestVersion, question };
41
+ }
42
+ else
43
+ return false;
44
+ const callIndex = session.history.lastIndexOf(call);
45
+ if (!session.history.slice(callIndex + 1).some(item => 'type' in item && item.type === 'function_call_output' && item.callId === call.callId)) {
46
+ session.history.push({ type: 'function_call_output', callId: call.callId, output: boundedToolOutput({
47
+ recovered: true, localExecutionOutput: 'not_recovered',
48
+ ...(goalOutcome.status === 'awaiting_approval' ? { approvalPending: goalOutcome.approvalId } : {}),
49
+ receipts: receipts.map(receipt => ({ action: receipt.action.action, idempotencyKey: receipt.action.idempotencyKey, result: receipt.result })),
50
+ }) });
51
+ await service.saveSession(work, session);
52
+ }
53
+ await service.recordEvent(work, { runId: work.id, seq: (work.fence - 1) * RUN_SEQUENCE_SPAN + 1,
54
+ kind: goalOutcome.status === 'awaiting_approval' ? 'approval.pending' : 'goal.waiting', stage: 'completed', visibility: 'user',
55
+ data: { recovered: true, goalOutcome, ...(goalOutcome.status === 'awaiting_approval' ? { approvalId: goalOutcome.approvalId, cellId: call.callId } : {}) } });
56
+ await service.complete(work, { status: 'completed', goalOutcome });
57
+ return true;
58
+ }
59
+ //# sourceMappingURL=recover-wait.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recover-wait.js","sourceRoot":"","sources":["../../../src/app/recover-wait.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Locate packaged assets independently of the application's working directory. */
2
+ export declare function packageResources(): {
3
+ schema: string;
4
+ runner: string;
5
+ };