@plurnk/plurnk-service 0.6.0 → 0.8.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 (258) hide show
  1. package/SPEC.md +125 -74
  2. package/bin/plurnk-service.ts +132 -0
  3. package/dist/Paths.d.ts +8 -0
  4. package/dist/Paths.d.ts.map +1 -0
  5. package/dist/Paths.js +47 -0
  6. package/dist/Paths.js.map +1 -0
  7. package/dist/content/index.d.ts +9 -0
  8. package/dist/content/index.d.ts.map +1 -0
  9. package/dist/content/index.js +10 -0
  10. package/dist/content/index.js.map +1 -0
  11. package/dist/content/line-marker.d.ts +26 -0
  12. package/dist/content/line-marker.d.ts.map +1 -0
  13. package/dist/content/line-marker.js +323 -0
  14. package/dist/content/line-marker.js.map +1 -0
  15. package/dist/content/matcher.d.ts +15 -0
  16. package/dist/content/matcher.d.ts.map +1 -0
  17. package/dist/content/matcher.js +112 -0
  18. package/dist/content/matcher.js.map +1 -0
  19. package/dist/content/mimetype-binary.d.ts +9 -0
  20. package/dist/content/mimetype-binary.d.ts.map +1 -0
  21. package/dist/content/mimetype-binary.js +86 -0
  22. package/dist/content/mimetype-binary.js.map +1 -0
  23. package/dist/content/path-mimetype.d.ts +6 -0
  24. package/dist/content/path-mimetype.d.ts.map +1 -0
  25. package/dist/content/path-mimetype.js +49 -0
  26. package/dist/content/path-mimetype.js.map +1 -0
  27. package/dist/content/read-resolve.d.ts +20 -0
  28. package/dist/content/read-resolve.d.ts.map +1 -0
  29. package/dist/content/read-resolve.js +60 -0
  30. package/dist/content/read-resolve.js.map +1 -0
  31. package/dist/core/ChannelWrite.d.ts +33 -30
  32. package/dist/core/ChannelWrite.d.ts.map +1 -1
  33. package/dist/core/ChannelWrite.js +43 -41
  34. package/dist/core/ChannelWrite.js.map +1 -1
  35. package/dist/core/Engine.d.ts +14 -10
  36. package/dist/core/Engine.d.ts.map +1 -1
  37. package/dist/core/Engine.js +272 -94
  38. package/dist/core/Engine.js.map +1 -1
  39. package/dist/core/EnvFlags.d.ts +6 -3
  40. package/dist/core/EnvFlags.d.ts.map +1 -1
  41. package/dist/core/EnvFlags.js +62 -60
  42. package/dist/core/EnvFlags.js.map +1 -1
  43. package/dist/core/PluginLoader.d.ts +6 -3
  44. package/dist/core/PluginLoader.d.ts.map +1 -1
  45. package/dist/core/PluginLoader.js +77 -73
  46. package/dist/core/PluginLoader.js.map +1 -1
  47. package/dist/core/ProviderInstantiate.d.ts +4 -2
  48. package/dist/core/ProviderInstantiate.d.ts.map +1 -1
  49. package/dist/core/ProviderInstantiate.js +23 -22
  50. package/dist/core/ProviderInstantiate.js.map +1 -1
  51. package/dist/core/SchemeRegistry.d.ts +1 -1
  52. package/dist/core/SchemeRegistry.d.ts.map +1 -1
  53. package/dist/core/SchemeRegistry.js +3 -3
  54. package/dist/core/SchemeRegistry.js.map +1 -1
  55. package/dist/core/git-membership.d.ts +8 -0
  56. package/dist/core/git-membership.d.ts.map +1 -0
  57. package/dist/core/git-membership.js +125 -0
  58. package/dist/core/git-membership.js.map +1 -0
  59. package/dist/core/packet-wire.d.ts +47 -6
  60. package/dist/core/packet-wire.d.ts.map +1 -1
  61. package/dist/core/packet-wire.js +376 -312
  62. package/dist/core/packet-wire.js.map +1 -1
  63. package/dist/core/resolveForLoop.d.ts +14 -0
  64. package/dist/core/resolveForLoop.d.ts.map +1 -0
  65. package/dist/core/resolveForLoop.js +34 -0
  66. package/dist/core/resolveForLoop.js.map +1 -0
  67. package/dist/core/results.d.ts +40 -0
  68. package/dist/core/results.d.ts.map +1 -0
  69. package/dist/core/results.js +52 -0
  70. package/dist/core/results.js.map +1 -0
  71. package/dist/core/scheme-types.d.ts +6 -3
  72. package/dist/core/scheme-types.d.ts.map +1 -1
  73. package/dist/core/scheme-types.js +4 -4
  74. package/dist/core/scheme-types.js.map +1 -1
  75. package/dist/core/types.d.ts +27 -0
  76. package/dist/core/types.d.ts.map +1 -0
  77. package/dist/core/types.js +17 -0
  78. package/dist/core/types.js.map +1 -0
  79. package/dist/index.d.ts +1 -6
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +4 -43
  82. package/dist/index.js.map +1 -1
  83. package/dist/schemes/Exec.d.ts +1 -0
  84. package/dist/schemes/Exec.d.ts.map +1 -1
  85. package/dist/schemes/Exec.js +101 -94
  86. package/dist/schemes/Exec.js.map +1 -1
  87. package/dist/schemes/File.d.ts +0 -1
  88. package/dist/schemes/File.d.ts.map +1 -1
  89. package/dist/schemes/File.js +32 -66
  90. package/dist/schemes/File.js.map +1 -1
  91. package/dist/schemes/Known.d.ts.map +1 -1
  92. package/dist/schemes/Known.js +13 -13
  93. package/dist/schemes/Known.js.map +1 -1
  94. package/dist/schemes/Log.d.ts.map +1 -1
  95. package/dist/schemes/Log.js +8 -52
  96. package/dist/schemes/Log.js.map +1 -1
  97. package/dist/schemes/Plurnk.d.ts.map +1 -1
  98. package/dist/schemes/Plurnk.js +13 -13
  99. package/dist/schemes/Plurnk.js.map +1 -1
  100. package/dist/schemes/Skill.d.ts.map +1 -1
  101. package/dist/schemes/Skill.js +13 -13
  102. package/dist/schemes/Skill.js.map +1 -1
  103. package/dist/schemes/Unknown.d.ts.map +1 -1
  104. package/dist/schemes/Unknown.js +13 -13
  105. package/dist/schemes/Unknown.js.map +1 -1
  106. package/dist/schemes/_entry-crud.d.ts +5 -3
  107. package/dist/schemes/_entry-crud.d.ts.map +1 -1
  108. package/dist/schemes/_entry-crud.js +55 -50
  109. package/dist/schemes/_entry-crud.js.map +1 -1
  110. package/dist/schemes/_entry-find.d.ts +10 -3
  111. package/dist/schemes/_entry-find.d.ts.map +1 -1
  112. package/dist/schemes/_entry-find.js +99 -77
  113. package/dist/schemes/_entry-find.js.map +1 -1
  114. package/dist/schemes/_entry-manifest.d.ts +6 -0
  115. package/dist/schemes/_entry-manifest.d.ts.map +1 -0
  116. package/dist/schemes/_entry-manifest.js +45 -0
  117. package/dist/schemes/_entry-manifest.js.map +1 -0
  118. package/dist/schemes/_entry-ops.d.ts +7 -4
  119. package/dist/schemes/_entry-ops.d.ts.map +1 -1
  120. package/dist/schemes/_entry-ops.js +198 -316
  121. package/dist/schemes/_entry-ops.js.map +1 -1
  122. package/dist/schemes/_entry-send.d.ts +4 -1
  123. package/dist/schemes/_entry-send.d.ts.map +1 -1
  124. package/dist/schemes/_entry-send.js +57 -55
  125. package/dist/schemes/_entry-send.js.map +1 -1
  126. package/dist/server/ClientConnection.js +3 -3
  127. package/dist/server/ClientConnection.js.map +1 -1
  128. package/dist/server/Daemon.d.ts +5 -5
  129. package/dist/server/Daemon.d.ts.map +1 -1
  130. package/dist/server/Daemon.js +221 -176
  131. package/dist/server/Daemon.js.map +1 -1
  132. package/dist/server/clientTurn.d.ts +4 -1
  133. package/dist/server/clientTurn.d.ts.map +1 -1
  134. package/dist/server/clientTurn.js +19 -17
  135. package/dist/server/clientTurn.js.map +1 -1
  136. package/dist/server/dsl.d.ts +19 -16
  137. package/dist/server/dsl.d.ts.map +1 -1
  138. package/dist/server/dsl.js +127 -105
  139. package/dist/server/dsl.js.map +1 -1
  140. package/dist/server/envelope.d.ts +22 -19
  141. package/dist/server/envelope.d.ts.map +1 -1
  142. package/dist/server/envelope.js +116 -102
  143. package/dist/server/envelope.js.map +1 -1
  144. package/dist/server/logEntry.d.ts +4 -1
  145. package/dist/server/logEntry.d.ts.map +1 -1
  146. package/dist/server/logEntry.js +41 -39
  147. package/dist/server/logEntry.js.map +1 -1
  148. package/dist/server/methods/_dispatchAsClient.d.ts +3 -1
  149. package/dist/server/methods/_dispatchAsClient.d.ts.map +1 -1
  150. package/dist/server/methods/_dispatchAsClient.js +31 -29
  151. package/dist/server/methods/_dispatchAsClient.js.map +1 -1
  152. package/dist/server/methods/discover.d.ts +3 -1
  153. package/dist/server/methods/discover.d.ts.map +1 -1
  154. package/dist/server/methods/discover.js +8 -6
  155. package/dist/server/methods/discover.js.map +1 -1
  156. package/dist/server/methods/entry_read.d.ts +4 -1
  157. package/dist/server/methods/entry_read.d.ts.map +1 -1
  158. package/dist/server/methods/entry_read.js +54 -52
  159. package/dist/server/methods/entry_read.js.map +1 -1
  160. package/dist/server/methods/log_read.d.ts +4 -1
  161. package/dist/server/methods/log_read.d.ts.map +1 -1
  162. package/dist/server/methods/log_read.js +38 -36
  163. package/dist/server/methods/log_read.js.map +1 -1
  164. package/dist/server/methods/loop_cancel.d.ts +3 -1
  165. package/dist/server/methods/loop_cancel.d.ts.map +1 -1
  166. package/dist/server/methods/loop_cancel.js +19 -17
  167. package/dist/server/methods/loop_cancel.js.map +1 -1
  168. package/dist/server/methods/loop_resolve.d.ts +3 -1
  169. package/dist/server/methods/loop_resolve.d.ts.map +1 -1
  170. package/dist/server/methods/loop_resolve.js +42 -40
  171. package/dist/server/methods/loop_resolve.js.map +1 -1
  172. package/dist/server/methods/loop_run.d.ts +3 -1
  173. package/dist/server/methods/loop_run.d.ts.map +1 -1
  174. package/dist/server/methods/loop_run.js +104 -102
  175. package/dist/server/methods/loop_run.js.map +1 -1
  176. package/dist/server/methods/op_copy.d.ts +3 -1
  177. package/dist/server/methods/op_copy.d.ts.map +1 -1
  178. package/dist/server/methods/op_copy.js +25 -23
  179. package/dist/server/methods/op_copy.js.map +1 -1
  180. package/dist/server/methods/op_dispatch.d.ts +3 -1
  181. package/dist/server/methods/op_dispatch.d.ts.map +1 -1
  182. package/dist/server/methods/op_dispatch.js +18 -16
  183. package/dist/server/methods/op_dispatch.js.map +1 -1
  184. package/dist/server/methods/op_edit.d.ts +3 -1
  185. package/dist/server/methods/op_edit.d.ts.map +1 -1
  186. package/dist/server/methods/op_edit.js +23 -21
  187. package/dist/server/methods/op_edit.js.map +1 -1
  188. package/dist/server/methods/op_exec.d.ts +3 -1
  189. package/dist/server/methods/op_exec.d.ts.map +1 -1
  190. package/dist/server/methods/op_exec.js +20 -18
  191. package/dist/server/methods/op_exec.js.map +1 -1
  192. package/dist/server/methods/op_find.d.ts +3 -1
  193. package/dist/server/methods/op_find.d.ts.map +1 -1
  194. package/dist/server/methods/op_find.js +23 -21
  195. package/dist/server/methods/op_find.js.map +1 -1
  196. package/dist/server/methods/op_hide.d.ts +3 -1
  197. package/dist/server/methods/op_hide.d.ts.map +1 -1
  198. package/dist/server/methods/op_hide.js +23 -21
  199. package/dist/server/methods/op_hide.js.map +1 -1
  200. package/dist/server/methods/op_move.d.ts +3 -1
  201. package/dist/server/methods/op_move.d.ts.map +1 -1
  202. package/dist/server/methods/op_move.js +23 -21
  203. package/dist/server/methods/op_move.js.map +1 -1
  204. package/dist/server/methods/op_parse.d.ts +3 -1
  205. package/dist/server/methods/op_parse.d.ts.map +1 -1
  206. package/dist/server/methods/op_parse.js +24 -22
  207. package/dist/server/methods/op_parse.js.map +1 -1
  208. package/dist/server/methods/op_read.d.ts +3 -1
  209. package/dist/server/methods/op_read.d.ts.map +1 -1
  210. package/dist/server/methods/op_read.js +23 -21
  211. package/dist/server/methods/op_read.js.map +1 -1
  212. package/dist/server/methods/op_send.d.ts +3 -1
  213. package/dist/server/methods/op_send.d.ts.map +1 -1
  214. package/dist/server/methods/op_send.js +22 -20
  215. package/dist/server/methods/op_send.js.map +1 -1
  216. package/dist/server/methods/op_show.d.ts +3 -1
  217. package/dist/server/methods/op_show.d.ts.map +1 -1
  218. package/dist/server/methods/op_show.js +23 -21
  219. package/dist/server/methods/op_show.js.map +1 -1
  220. package/dist/server/methods/ping.d.ts +3 -1
  221. package/dist/server/methods/ping.d.ts.map +1 -1
  222. package/dist/server/methods/ping.js +8 -6
  223. package/dist/server/methods/ping.js.map +1 -1
  224. package/dist/server/methods/providers_list.d.ts +3 -1
  225. package/dist/server/methods/providers_list.d.ts.map +1 -1
  226. package/dist/server/methods/providers_list.js +19 -17
  227. package/dist/server/methods/providers_list.js.map +1 -1
  228. package/dist/server/methods/session_attach.d.ts +3 -1
  229. package/dist/server/methods/session_attach.d.ts.map +1 -1
  230. package/dist/server/methods/session_attach.js +43 -41
  231. package/dist/server/methods/session_attach.js.map +1 -1
  232. package/dist/server/methods/session_create.d.ts +3 -1
  233. package/dist/server/methods/session_create.d.ts.map +1 -1
  234. package/dist/server/methods/session_create.js +51 -49
  235. package/dist/server/methods/session_create.js.map +1 -1
  236. package/dist/server/methods/session_list.d.ts +3 -1
  237. package/dist/server/methods/session_list.d.ts.map +1 -1
  238. package/dist/server/methods/session_list.js +9 -7
  239. package/dist/server/methods/session_list.js.map +1 -1
  240. package/dist/server/methods/session_runs.d.ts +3 -1
  241. package/dist/server/methods/session_runs.d.ts.map +1 -1
  242. package/dist/server/methods/session_runs.js +19 -17
  243. package/dist/server/methods/session_runs.js.map +1 -1
  244. package/dist/server/methods/session_set_persona.d.ts +3 -1
  245. package/dist/server/methods/session_set_persona.d.ts.map +1 -1
  246. package/dist/server/methods/session_set_persona.js +28 -26
  247. package/dist/server/methods/session_set_persona.js.map +1 -1
  248. package/dist/server/methods/session_set_root.d.ts +3 -1
  249. package/dist/server/methods/session_set_root.d.ts.map +1 -1
  250. package/dist/server/methods/session_set_root.js +31 -29
  251. package/dist/server/methods/session_set_root.js.map +1 -1
  252. package/dist/server/yolo.d.ts +3 -1
  253. package/dist/server/yolo.d.ts.map +1 -1
  254. package/dist/server/yolo.js +15 -13
  255. package/dist/server/yolo.js.map +1 -1
  256. package/package.json +77 -32
  257. package/bin/plurnk-service.js +0 -112
  258. /package/migrations/{001_schema.sql → 0000-00-00.01_schema.sql} +0 -0
@@ -1,56 +1,58 @@
1
1
  // entry.read — return the full entry shape (all channels + tags + metadata)
2
2
  // for a given path. SPEC §13.5.
3
- const parsePath = (s) => {
4
- const m = s.match(/^([a-z][a-z0-9+.-]*):\/\/(.*)$/);
5
- if (m === null)
6
- return null;
7
- return { scheme: m[1], pathname: m[2].split("#")[0] };
8
- };
9
- const fetchEntry = async (db, sessionId, scheme, pathname) => {
10
- const row = await db.entry_read_lookup.get({
11
- session_id: sessionId, scheme, pathname,
12
- });
13
- if (row === undefined)
14
- return null;
15
- const channelRows = await db.entry_read_channels.all({ entry_id: row.id });
16
- const channels = {};
17
- for (const c of channelRows) {
18
- channels[c.name] = { content: c.content, mimetype: c.mimetype, tokens: c.tokens, state: c.state };
3
+ export default class EntryReadMethod {
4
+ static #parsePath(s) {
5
+ const m = s.match(/^([a-z][a-z0-9+.-]*):\/\/(.*)$/);
6
+ if (m === null)
7
+ return null;
8
+ return { scheme: m[1], pathname: m[2].split("#")[0] };
19
9
  }
20
- const tagRows = await db.crud_read_tags.all({ entry_id: row.id });
21
- return {
22
- id: row.id,
23
- scope: row.scope,
24
- sessionId: row.session_id,
25
- scheme: row.scheme,
26
- pathname: row.pathname,
27
- channels,
28
- tags: tagRows.map((t) => t.tag),
29
- };
30
- };
31
- export const register = (registry) => {
32
- registry.registerMethod("entry.read", {
33
- handler: async (params, ctx) => {
34
- const p = (params ?? {});
35
- if (typeof p.target !== "string" || p.target.length === 0)
36
- throw new Error("entry.read requires params.target: string");
37
- const parsed = parsePath(p.target);
38
- if (parsed === null)
39
- throw new Error(`entry.read: path must be URL-shaped (scheme://pathname); got: ${p.target}`);
40
- const sessionId = p.sessionId ?? ctx.session?.sessionId;
41
- if (sessionId === undefined)
42
- throw new Error("entry.read requires a sessionId (either via params or session attach)");
43
- const entry = await fetchEntry(ctx.db, sessionId, parsed.scheme, parsed.pathname);
44
- if (entry === null)
45
- return { status: 404, entry: null };
46
- return { status: 200, entry };
47
- },
48
- description: "Read the full entry shape (channels + tags + metadata) at the given path.",
49
- params: {
50
- target: "string entry path (URL-shaped: scheme://pathname)",
51
- sessionId: "number? defaults to the connection's attached session",
52
- },
53
- requiresInit: true,
54
- });
55
- };
10
+ static async #fetchEntry(db, sessionId, scheme, pathname) {
11
+ const row = await db.entry_read_lookup.get({
12
+ session_id: sessionId, scheme, pathname,
13
+ });
14
+ if (row === undefined)
15
+ return null;
16
+ const channelRows = await db.entry_read_channels.all({ entry_id: row.id });
17
+ const channels = {};
18
+ for (const c of channelRows) {
19
+ channels[c.name] = { content: c.content, mimetype: c.mimetype, tokens: c.tokens, state: c.state };
20
+ }
21
+ const tagRows = await db.crud_read_tags.all({ entry_id: row.id });
22
+ return {
23
+ id: row.id,
24
+ scope: row.scope,
25
+ sessionId: row.session_id,
26
+ scheme: row.scheme,
27
+ pathname: row.pathname,
28
+ channels,
29
+ tags: tagRows.map((t) => t.tag),
30
+ };
31
+ }
32
+ static register(registry) {
33
+ registry.registerMethod("entry.read", {
34
+ handler: async (params, ctx) => {
35
+ const p = params;
36
+ if (typeof p.target !== "string" || p.target.length === 0)
37
+ throw new Error("entry.read requires params.target: string");
38
+ const parsed = EntryReadMethod.#parsePath(p.target);
39
+ if (parsed === null)
40
+ throw new Error(`entry.read: path must be URL-shaped (scheme://pathname); got: ${p.target}`);
41
+ const sessionId = p.sessionId ?? ctx.session?.sessionId;
42
+ if (sessionId === undefined)
43
+ throw new Error("entry.read requires a sessionId (either via params or session attach)");
44
+ const entry = await EntryReadMethod.#fetchEntry(ctx.db, sessionId, parsed.scheme, parsed.pathname);
45
+ if (entry === null)
46
+ return { status: 404, entry: null };
47
+ return { status: 200, entry };
48
+ },
49
+ description: "Read the full entry shape (channels + tags + metadata) at the given path.",
50
+ params: {
51
+ target: "string — entry path (URL-shaped: scheme://pathname)",
52
+ sessionId: "number? — defaults to the connection's attached session",
53
+ },
54
+ requiresInit: true,
55
+ });
56
+ }
57
+ }
56
58
  //# sourceMappingURL=entry_read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry_read.js","sourceRoot":"","sources":["../../../src/server/methods/entry_read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entry_read.js","sourceRoot":"","sources":["../../../src/server/methods/entry_read.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
1
  import type MethodRegistry from "../MethodRegistry.ts";
2
- export declare const register: (registry: MethodRegistry) => void;
2
+ export default class LogReadMethod {
3
+ #private;
4
+ static register(registry: MethodRegistry): void;
5
+ }
3
6
  //# sourceMappingURL=log_read.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"log_read.d.ts","sourceRoot":"","sources":["../../../src/server/methods/log_read.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AA6BvD,eAAO,MAAM,QAAQ,GAAI,UAAU,cAAc,KAAG,IAiBnD,CAAC"}
1
+ {"version":3,"file":"log_read.d.ts","sourceRoot":"","sources":["../../../src/server/methods/log_read.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAYvD,MAAM,CAAC,OAAO,OAAO,aAAa;;IAkB9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAkBlD"}
@@ -1,39 +1,41 @@
1
1
  // log.read — return recent log entries filterable by loop / turn / since-id,
2
2
  // scoped to the connection's attached session. SPEC §13.5.
3
- import { fetchLogEntry } from "../logEntry.js";
4
- const DEFAULT_LIMIT = 100;
5
- const MAX_LIMIT = 1000;
6
- const fetchLogEntries = async (db, runId, filters) => {
7
- const limit = Math.min(typeof filters.limit === "number" ? filters.limit : DEFAULT_LIMIT, MAX_LIMIT);
8
- const rows = await db.log_read_recent_ids.all({
9
- run_id: runId,
10
- loop_id: typeof filters.loopId === "number" ? filters.loopId : null,
11
- turn_id: typeof filters.turnId === "number" ? filters.turnId : null,
12
- since_id: typeof filters.sinceId === "number" ? filters.sinceId : null,
13
- limit,
14
- });
15
- const entries = [];
16
- for (const r of rows)
17
- entries.push(await fetchLogEntry(db, r.id));
18
- return entries;
19
- };
20
- export const register = (registry) => {
21
- registry.registerMethod("log.read", {
22
- handler: async (params, ctx) => {
23
- if (ctx.session === null)
24
- throw new Error("log.read requires an attached session");
25
- const p = (params ?? {});
26
- const entries = await fetchLogEntries(ctx.db, ctx.session.runId, p);
27
- return { status: 200, entries };
28
- },
29
- description: "Read recent log entries from the attached session, optionally filtered.",
30
- params: {
31
- loopId: "number? — filter to one loop",
32
- turnId: "number? — filter to one turn (within whatever loop)",
33
- sinceId: "number? — return entries with id > sinceId (for incremental fetch)",
34
- limit: "number? — max entries to return (default 100, max 1000)",
35
- },
36
- requiresInit: true,
37
- });
38
- };
3
+ import LogEntry from "../logEntry.js";
4
+ export default class LogReadMethod {
5
+ static #DEFAULT_LIMIT = 100;
6
+ static #MAX_LIMIT = 1000;
7
+ static async #fetchLogEntries(db, runId, filters) {
8
+ const limit = Math.min(typeof filters.limit === "number" ? filters.limit : LogReadMethod.#DEFAULT_LIMIT, LogReadMethod.#MAX_LIMIT);
9
+ const rows = await db.log_read_recent_ids.all({
10
+ run_id: runId,
11
+ loop_id: typeof filters.loopId === "number" ? filters.loopId : null,
12
+ turn_id: typeof filters.turnId === "number" ? filters.turnId : null,
13
+ since_id: typeof filters.sinceId === "number" ? filters.sinceId : null,
14
+ limit,
15
+ });
16
+ const entries = [];
17
+ for (const r of rows)
18
+ entries.push(await LogEntry.fetchLogEntry(db, r.id));
19
+ return entries;
20
+ }
21
+ static register(registry) {
22
+ registry.registerMethod("log.read", {
23
+ handler: async (params, ctx) => {
24
+ if (ctx.session === null)
25
+ throw new Error("log.read requires an attached session");
26
+ const p = params;
27
+ const entries = await LogReadMethod.#fetchLogEntries(ctx.db, ctx.session.runId, p);
28
+ return { status: 200, entries };
29
+ },
30
+ description: "Read recent log entries from the attached session, optionally filtered.",
31
+ params: {
32
+ loopId: "number? — filter to one loop",
33
+ turnId: "number? — filter to one turn (within whatever loop)",
34
+ sinceId: "number? — return entries with id > sinceId (for incremental fetch)",
35
+ limit: "number? — max entries to return (default 100, max 1000)",
36
+ },
37
+ requiresInit: true,
38
+ });
39
+ }
40
+ }
39
41
  //# sourceMappingURL=log_read.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"log_read.js","sourceRoot":"","sources":["../../../src/server/methods/log_read.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2DAA2D;AAI3D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,MAAM,SAAS,GAAG,IAAI,CAAC;AASvB,MAAM,eAAe,GAAG,KAAK,EAAE,EAAM,EAAE,KAAa,EAAE,OAAe,EAA2B,EAAE;IAC9F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IACrG,MAAM,IAAI,GAAG,MAAO,EAAE,CAAC,mBAAkC,CAAC,GAAG,CAAiB;QAC1E,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACnE,OAAO,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACnE,QAAQ,EAAE,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACtE,KAAK;KACR,CAAC,CAAC;IACH,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAwB,EAAQ,EAAE;IACvD,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE;QAChC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACnF,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAW,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;QACpC,CAAC;QACD,WAAW,EAAE,yEAAyE;QACtF,MAAM,EAAE;YACJ,MAAM,EAAE,8BAA8B;YACtC,MAAM,EAAE,qDAAqD;YAC7D,OAAO,EAAE,oEAAoE;YAC7E,KAAK,EAAE,yDAAyD;SACnE;QACD,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"log_read.js","sourceRoot":"","sources":["../../../src/server/methods/log_read.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2DAA2D;AAI3D,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAUtC,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,cAAc,GAAG,GAAG,CAAC;IAC5B,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;IAEzB,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAM,EAAE,KAAa,EAAE,OAAe;QAChE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QACnI,MAAM,IAAI,GAAG,MAAO,EAAE,CAAC,mBAAkC,CAAC,GAAG,CAAiB;YAC1E,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YACnE,OAAO,EAAE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;YACnE,QAAQ,EAAE,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;YACtE,KAAK;SACR,CAAC,CAAC;QACH,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,QAAwB;QACpC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE;YAChC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACnF,MAAM,CAAC,GAAG,MAAgB,CAAC;gBAC3B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACnF,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACpC,CAAC;YACD,WAAW,EAAE,yEAAyE;YACtF,MAAM,EAAE;gBACJ,MAAM,EAAE,8BAA8B;gBACtC,MAAM,EAAE,qDAAqD;gBAC7D,OAAO,EAAE,oEAAoE;gBAC7E,KAAK,EAAE,yDAAyD;aACnE;YACD,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;IACP,CAAC"}
@@ -1,3 +1,5 @@
1
1
  import type MethodRegistry from "../MethodRegistry.ts";
2
- export declare const register: (registry: MethodRegistry) => void;
2
+ export default class LoopCancelMethod {
3
+ static register(registry: MethodRegistry): void;
4
+ }
3
5
  //# sourceMappingURL=loop_cancel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop_cancel.d.ts","sourceRoot":"","sources":["../../../src/server/methods/loop_cancel.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAMvD,eAAO,MAAM,QAAQ,GAAI,UAAU,cAAc,KAAG,IAenD,CAAC"}
1
+ {"version":3,"file":"loop_cancel.d.ts","sourceRoot":"","sources":["../../../src/server/methods/loop_cancel.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AAMvD,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAgBlD"}
@@ -7,21 +7,23 @@
7
7
  // Pairs with loop.run for "redirect" UX: cancel the runaway loop, then
8
8
  // send a fresh prompt. Without this, the user would have to wait for
9
9
  // the loop to hit max_turns / strike out.
10
- export const register = (registry) => {
11
- registry.registerMethod("loop.cancel", {
12
- handler: async (params, ctx) => {
13
- if (ctx.session === null)
14
- throw new Error("loop.cancel requires an attached session");
15
- const p = (params ?? {});
16
- const reason = (typeof p.reason === "string" && p.reason.length > 0) ? p.reason : "user_cancelled";
17
- const cancelled = ctx.daemon.cancelDrain(ctx.session.runId, reason);
18
- return { cancelled, runId: ctx.session.runId, reason };
19
- },
20
- description: "Abort the run's active drain. Returns {cancelled: true} if a drain was running; {cancelled: false} if the run was already idle. Cancelled loops close at status 499. Queued (but not yet claimed) loops remain enqueued; subsequent loop.run resumes the queue.",
21
- params: {
22
- reason: "string? — optional human-readable cancellation reason; defaults to 'user_cancelled'",
23
- },
24
- requiresInit: true,
25
- });
26
- };
10
+ export default class LoopCancelMethod {
11
+ static register(registry) {
12
+ registry.registerMethod("loop.cancel", {
13
+ handler: async (params, ctx) => {
14
+ if (ctx.session === null)
15
+ throw new Error("loop.cancel requires an attached session");
16
+ const p = params;
17
+ const reason = (typeof p.reason === "string" && p.reason.length > 0) ? p.reason : "user_cancelled";
18
+ const cancelled = ctx.daemon.cancelDrain(ctx.session.runId, reason);
19
+ return { cancelled, runId: ctx.session.runId, reason };
20
+ },
21
+ description: "Abort the run's active drain. Returns {cancelled: true} if a drain was running; {cancelled: false} if the run was already idle. Cancelled loops close at status 499. Queued (but not yet claimed) loops remain enqueued; subsequent loop.run resumes the queue.",
22
+ params: {
23
+ reason: "string? — optional human-readable cancellation reason; defaults to 'user_cancelled'",
24
+ },
25
+ requiresInit: true,
26
+ });
27
+ }
28
+ }
27
29
  //# sourceMappingURL=loop_cancel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop_cancel.js","sourceRoot":"","sources":["../../../src/server/methods/loop_cancel.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,yEAAyE;AACzE,kEAAkE;AAClE,oEAAoE;AACpE,uBAAuB;AACvB,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,0CAA0C;AAQ1C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAwB,EAAQ,EAAE;IACvD,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE;QACnC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YACtF,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAW,CAAC;YACnC,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;YACnG,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACpE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3D,CAAC;QACD,WAAW,EAAE,iQAAiQ;QAC9Q,MAAM,EAAE;YACJ,MAAM,EAAE,qFAAqF;SAChG;QACD,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"loop_cancel.js","sourceRoot":"","sources":["../../../src/server/methods/loop_cancel.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,yEAAyE;AACzE,kEAAkE;AAClE,oEAAoE;AACpE,uBAAuB;AACvB,EAAE;AACF,uEAAuE;AACvE,qEAAqE;AACrE,0CAA0C;AAQ1C,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,MAAM,CAAC,QAAQ,CAAC,QAAwB;QACpC,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE;YACnC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBACtF,MAAM,CAAC,GAAG,MAAgB,CAAC;gBAC3B,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC;gBACnG,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;gBACpE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;YAC3D,CAAC;YACD,WAAW,EAAE,iQAAiQ;YAC9Q,MAAM,EAAE;gBACJ,MAAM,EAAE,qFAAqF;aAChG;YACD,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -1,3 +1,5 @@
1
1
  import type MethodRegistry from "../MethodRegistry.ts";
2
- export declare const register: (registry: MethodRegistry) => void;
2
+ export default class LoopResolveMethod {
3
+ static register(registry: MethodRegistry): void;
4
+ }
3
5
  //# sourceMappingURL=loop_resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop_resolve.d.ts","sourceRoot":"","sources":["../../../src/server/methods/loop_resolve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AASvD,eAAO,MAAM,QAAQ,GAAI,UAAU,cAAc,KAAG,IAmCnD,CAAC"}
1
+ {"version":3,"file":"loop_resolve.d.ts","sourceRoot":"","sources":["../../../src/server/methods/loop_resolve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AASvD,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAClC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAoClD"}
@@ -2,44 +2,46 @@
2
2
  // Engine.dispatch is paused on the matching log_entry; this method feeds
3
3
  // the decision back in. Returns once the resolution is applied.
4
4
  // SPEC.md §13.5 (loop.resolve) + §0.5 (proposal lifecycle).
5
- export const register = (registry) => {
6
- registry.registerMethod("loop.resolve", {
7
- handler: async (params, ctx) => {
8
- if (ctx.session === null)
9
- throw new Error("loop.resolve requires an attached session");
10
- const p = (params ?? {});
11
- if (typeof p.logEntryId !== "number" || p.logEntryId <= 0) {
12
- throw new Error("loop.resolve requires positive integer params.logEntryId");
13
- }
14
- if (p.decision !== "accept" && p.decision !== "reject" && p.decision !== "cancel") {
15
- throw new Error("loop.resolve params.decision must be 'accept' | 'reject' | 'cancel'");
16
- }
17
- const resolution = { decision: p.decision };
18
- if (typeof p.body === "string")
19
- resolution.body = p.body;
20
- if (typeof p.outcome === "string")
21
- resolution.outcome = p.outcome;
22
- // Engine.resolveProposal throws if the id has no pending waiter
23
- // (duplicate resolution, already-resolved entry, unknown id).
24
- // Surface that as a 404-shaped error to the client.
25
- try {
26
- ctx.engine.resolveProposal(p.logEntryId, resolution);
27
- }
28
- catch (err) {
29
- return {
30
- status: 404,
31
- error: err instanceof Error ? err.message : String(err),
32
- };
33
- }
34
- return { status: 200 };
35
- },
36
- description: "Resolve a pending proposal (status=202 log entry). Accepts decision: accept|reject|cancel; optional body override and outcome string. Engine.dispatch unpauses on resolution.",
37
- params: {
38
- logEntryId: "number — the log_entries.id with state='proposed' to resolve",
39
- decision: "string'accept' | 'reject' | 'cancel'",
40
- body: "string (optional) body override for the resolved log entry",
41
- outcome: "string (optional) — outcome string (e.g. 'policy_veto', 'timeout'); wins over the decision default",
42
- },
43
- });
44
- };
5
+ export default class LoopResolveMethod {
6
+ static register(registry) {
7
+ registry.registerMethod("loop.resolve", {
8
+ handler: async (params, ctx) => {
9
+ if (ctx.session === null)
10
+ throw new Error("loop.resolve requires an attached session");
11
+ const p = params;
12
+ if (typeof p.logEntryId !== "number" || p.logEntryId <= 0) {
13
+ throw new Error("loop.resolve requires positive integer params.logEntryId");
14
+ }
15
+ if (p.decision !== "accept" && p.decision !== "reject" && p.decision !== "cancel") {
16
+ throw new Error("loop.resolve params.decision must be 'accept' | 'reject' | 'cancel'");
17
+ }
18
+ const resolution = { decision: p.decision };
19
+ if (typeof p.body === "string")
20
+ resolution.body = p.body;
21
+ if (typeof p.outcome === "string")
22
+ resolution.outcome = p.outcome;
23
+ // Engine.resolveProposal throws if the id has no pending waiter
24
+ // (duplicate resolution, already-resolved entry, unknown id).
25
+ // Surface that as a 404-shaped error to the client.
26
+ try {
27
+ ctx.engine.resolveProposal(p.logEntryId, resolution);
28
+ }
29
+ catch (err) {
30
+ return {
31
+ status: 404,
32
+ error: err instanceof Error ? err.message : String(err),
33
+ };
34
+ }
35
+ return { status: 200 };
36
+ },
37
+ description: "Resolve a pending proposal (status=202 log entry). Accepts decision: accept|reject|cancel; optional body override and outcome string. Engine.dispatch unpauses on resolution.",
38
+ params: {
39
+ logEntryId: "numberthe log_entries.id with state='proposed' to resolve",
40
+ decision: "string — 'accept' | 'reject' | 'cancel'",
41
+ body: "string (optional) — body override for the resolved log entry",
42
+ outcome: "string (optional) — outcome string (e.g. 'policy_veto', 'timeout'); wins over the decision default",
43
+ },
44
+ });
45
+ }
46
+ }
45
47
  //# sourceMappingURL=loop_resolve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop_resolve.js","sourceRoot":"","sources":["../../../src/server/methods/loop_resolve.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yEAAyE;AACzE,gEAAgE;AAChE,4DAA4D;AAW5D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAwB,EAAQ,EAAE;IACvD,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE;QACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YACvF,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAW,CAAC;YACnC,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAChF,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;YAC3F,CAAC;YACD,MAAM,UAAU,GAAqE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC9G,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;YACzD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;gBAAE,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YAClE,gEAAgE;YAChE,8DAA8D;YAC9D,oDAAoD;YACpD,IAAI,CAAC;gBACD,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,OAAO;oBACH,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC1D,CAAC;YACN,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC3B,CAAC;QACD,WAAW,EAAE,+KAA+K;QAC5L,MAAM,EAAE;YACJ,UAAU,EAAE,8DAA8D;YAC1E,QAAQ,EAAE,yCAAyC;YACnD,IAAI,EAAE,8DAA8D;YACpE,OAAO,EAAE,oGAAoG;SAChH;KACJ,CAAC,CAAC;AACP,CAAC,CAAC"}
1
+ {"version":3,"file":"loop_resolve.js","sourceRoot":"","sources":["../../../src/server/methods/loop_resolve.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,yEAAyE;AACzE,gEAAgE;AAChE,4DAA4D;AAW5D,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAClC,MAAM,CAAC,QAAQ,CAAC,QAAwB;QACpC,QAAQ,CAAC,cAAc,CAAC,cAAc,EAAE;YACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;gBAC3B,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;oBAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBACvF,MAAM,CAAC,GAAG,MAAgB,CAAC;gBAC3B,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;oBACxD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;gBAChF,CAAC;gBACD,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBAChF,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;gBAC3F,CAAC;gBACD,MAAM,UAAU,GAAqE,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC9G,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;oBAAE,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;gBACzD,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;oBAAE,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;gBAClE,gEAAgE;gBAChE,8DAA8D;gBAC9D,oDAAoD;gBACpD,IAAI,CAAC;oBACD,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACzD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACX,OAAO;wBACH,MAAM,EAAE,GAAG;wBACX,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBAC1D,CAAC;gBACN,CAAC;gBACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;YAC3B,CAAC;YACD,WAAW,EAAE,+KAA+K;YAC5L,MAAM,EAAE;gBACJ,UAAU,EAAE,8DAA8D;gBAC1E,QAAQ,EAAE,yCAAyC;gBACnD,IAAI,EAAE,8DAA8D;gBACpE,OAAO,EAAE,oGAAoG;aAChH;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -1,3 +1,5 @@
1
1
  import type MethodRegistry from "../MethodRegistry.ts";
2
- export declare const register: (registry: MethodRegistry) => void;
2
+ export default class LoopRunMethod {
3
+ static register(registry: MethodRegistry): void;
4
+ }
3
5
  //# sourceMappingURL=loop_run.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loop_run.d.ts","sourceRoot":"","sources":["../../../src/server/methods/loop_run.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AA6BvD,eAAO,MAAM,QAAQ,GAAI,UAAU,cAAc,KAAG,IAgHnD,CAAC"}
1
+ {"version":3,"file":"loop_run.d.ts","sourceRoot":"","sources":["../../../src/server/methods/loop_run.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAC;AA6BvD,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAiHlD"}