bonecode 1.1.0 → 1.2.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 (270) hide show
  1. package/bin/bonecode +47 -42
  2. package/compat/opencode_adapter.ts +188 -17
  3. package/dist/bone/output/agent/src/algorithms.d.ts +1 -0
  4. package/dist/bone/output/agent/src/algorithms.js +3 -0
  5. package/dist/bone/output/agent/src/algorithms.js.map +1 -0
  6. package/dist/bone/output/agent/src/audit.d.ts +3 -0
  7. package/dist/bone/output/agent/src/audit.js +40 -0
  8. package/dist/bone/output/agent/src/audit.js.map +1 -0
  9. package/dist/bone/output/agent/src/auth.d.ts +8 -0
  10. package/dist/bone/output/agent/src/auth.js +56 -0
  11. package/dist/bone/output/agent/src/auth.js.map +1 -0
  12. package/dist/bone/output/agent/src/db.d.ts +6 -0
  13. package/dist/bone/output/agent/src/db.js +63 -0
  14. package/dist/bone/output/agent/src/db.js.map +1 -0
  15. package/dist/bone/output/agent/src/events.d.ts +25 -0
  16. package/dist/bone/output/agent/src/events.js +184 -0
  17. package/dist/bone/output/agent/src/events.js.map +1 -0
  18. package/dist/bone/output/agent/src/logger.d.ts +28 -0
  19. package/dist/bone/output/agent/src/logger.js +45 -0
  20. package/dist/bone/output/agent/src/logger.js.map +1 -0
  21. package/dist/bone/output/agent/src/metrics.d.ts +5 -0
  22. package/dist/bone/output/agent/src/metrics.js +60 -0
  23. package/dist/bone/output/agent/src/metrics.js.map +1 -0
  24. package/dist/bone/output/agent/src/routes/agent_instance.d.ts +1 -0
  25. package/dist/bone/output/agent/src/routes/agent_instance.js +253 -0
  26. package/dist/bone/output/agent/src/routes/agent_instance.js.map +1 -0
  27. package/dist/bone/output/agent/src/routes/build_step.d.ts +1 -0
  28. package/dist/bone/output/agent/src/routes/build_step.js +133 -0
  29. package/dist/bone/output/agent/src/routes/build_step.js.map +1 -0
  30. package/dist/bone/output/agent/src/routes/plan.d.ts +1 -0
  31. package/dist/bone/output/agent/src/routes/plan.js +119 -0
  32. package/dist/bone/output/agent/src/routes/plan.js.map +1 -0
  33. package/dist/bone/output/agent/src/routes/task.d.ts +1 -0
  34. package/dist/bone/output/agent/src/routes/task.js +133 -0
  35. package/dist/bone/output/agent/src/routes/task.js.map +1 -0
  36. package/dist/bone/output/agent/src/routes/tool_call.d.ts +1 -0
  37. package/dist/bone/output/agent/src/routes/tool_call.js +190 -0
  38. package/dist/bone/output/agent/src/routes/tool_call.js.map +1 -0
  39. package/dist/bone/output/agent/src/state_machines/agent_instance.d.ts +9 -0
  40. package/dist/bone/output/agent/src/state_machines/agent_instance.js +22 -0
  41. package/dist/bone/output/agent/src/state_machines/agent_instance.js.map +1 -0
  42. package/dist/bone/output/agent/src/state_machines/build_step.d.ts +9 -0
  43. package/dist/bone/output/agent/src/state_machines/build_step.js +20 -0
  44. package/dist/bone/output/agent/src/state_machines/build_step.js.map +1 -0
  45. package/dist/bone/output/agent/src/state_machines/plan.d.ts +9 -0
  46. package/dist/bone/output/agent/src/state_machines/plan.js +20 -0
  47. package/dist/bone/output/agent/src/state_machines/plan.js.map +1 -0
  48. package/dist/bone/output/agent/src/state_machines/task.d.ts +9 -0
  49. package/dist/bone/output/agent/src/state_machines/task.js +20 -0
  50. package/dist/bone/output/agent/src/state_machines/task.js.map +1 -0
  51. package/dist/bone/output/agent/src/state_machines/tool_call.d.ts +9 -0
  52. package/dist/bone/output/agent/src/state_machines/tool_call.js +20 -0
  53. package/dist/bone/output/agent/src/state_machines/tool_call.js.map +1 -0
  54. package/dist/bone/output/rag/src/algorithms.d.ts +1 -0
  55. package/dist/bone/output/rag/src/algorithms.js +3 -0
  56. package/dist/bone/output/rag/src/algorithms.js.map +1 -0
  57. package/dist/bone/output/rag/src/auth.d.ts +8 -0
  58. package/dist/bone/output/rag/src/auth.js +56 -0
  59. package/dist/bone/output/rag/src/auth.js.map +1 -0
  60. package/dist/bone/output/rag/src/db.d.ts +6 -0
  61. package/dist/bone/output/rag/src/db.js +63 -0
  62. package/dist/bone/output/rag/src/db.js.map +1 -0
  63. package/dist/bone/output/rag/src/events.d.ts +25 -0
  64. package/dist/bone/output/rag/src/events.js +184 -0
  65. package/dist/bone/output/rag/src/events.js.map +1 -0
  66. package/dist/bone/output/rag/src/extensions.d.ts +83 -0
  67. package/dist/bone/output/rag/src/extensions.js +329 -0
  68. package/dist/bone/output/rag/src/extensions.js.map +1 -0
  69. package/dist/bone/output/rag/src/flows.d.ts +24 -0
  70. package/dist/bone/output/rag/src/flows.js +236 -0
  71. package/dist/bone/output/rag/src/flows.js.map +1 -0
  72. package/dist/bone/output/rag/src/logger.d.ts +28 -0
  73. package/dist/bone/output/rag/src/logger.js +45 -0
  74. package/dist/bone/output/rag/src/logger.js.map +1 -0
  75. package/dist/bone/output/rag/src/metrics.d.ts +5 -0
  76. package/dist/bone/output/rag/src/metrics.js +60 -0
  77. package/dist/bone/output/rag/src/metrics.js.map +1 -0
  78. package/dist/bone/output/rag/src/routes/code_chunk.d.ts +1 -0
  79. package/dist/bone/output/rag/src/routes/code_chunk.js +100 -0
  80. package/dist/bone/output/rag/src/routes/code_chunk.js.map +1 -0
  81. package/dist/bone/output/rag/src/routes/code_file.d.ts +1 -0
  82. package/dist/bone/output/rag/src/routes/code_file.js +127 -0
  83. package/dist/bone/output/rag/src/routes/code_file.js.map +1 -0
  84. package/dist/bone/output/rag/src/routes/indexing_job.d.ts +1 -0
  85. package/dist/bone/output/rag/src/routes/indexing_job.js +113 -0
  86. package/dist/bone/output/rag/src/routes/indexing_job.js.map +1 -0
  87. package/dist/bone/output/rag/src/routes/knowledge_base.d.ts +1 -0
  88. package/dist/bone/output/rag/src/routes/knowledge_base.js +242 -0
  89. package/dist/bone/output/rag/src/routes/knowledge_base.js.map +1 -0
  90. package/dist/bone/output/rag/src/routes/memory_entry.d.ts +1 -0
  91. package/dist/bone/output/rag/src/routes/memory_entry.js +113 -0
  92. package/dist/bone/output/rag/src/routes/memory_entry.js.map +1 -0
  93. package/dist/bone/output/rag/src/state_machines/code_file.d.ts +9 -0
  94. package/dist/bone/output/rag/src/state_machines/code_file.js +21 -0
  95. package/dist/bone/output/rag/src/state_machines/code_file.js.map +1 -0
  96. package/dist/bone/output/rag/src/state_machines/indexing_job.d.ts +9 -0
  97. package/dist/bone/output/rag/src/state_machines/indexing_job.js +20 -0
  98. package/dist/bone/output/rag/src/state_machines/indexing_job.js.map +1 -0
  99. package/dist/bone/output/rag/src/state_machines/knowledge_base.d.ts +9 -0
  100. package/dist/bone/output/rag/src/state_machines/knowledge_base.js +21 -0
  101. package/dist/bone/output/rag/src/state_machines/knowledge_base.js.map +1 -0
  102. package/dist/bone/output/rag/src/state_machines/memory_entry.d.ts +9 -0
  103. package/dist/bone/output/rag/src/state_machines/memory_entry.js +18 -0
  104. package/dist/bone/output/rag/src/state_machines/memory_entry.js.map +1 -0
  105. package/dist/bone/output/session/src/algorithms.d.ts +1 -0
  106. package/dist/bone/output/session/src/algorithms.js +3 -0
  107. package/dist/bone/output/session/src/algorithms.js.map +1 -0
  108. package/dist/bone/output/session/src/audit.d.ts +3 -0
  109. package/dist/bone/output/session/src/audit.js +40 -0
  110. package/dist/bone/output/session/src/audit.js.map +1 -0
  111. package/dist/bone/output/session/src/auth.d.ts +8 -0
  112. package/dist/bone/output/session/src/auth.js +56 -0
  113. package/dist/bone/output/session/src/auth.js.map +1 -0
  114. package/dist/bone/output/session/src/db.d.ts +6 -0
  115. package/dist/bone/output/session/src/db.js +63 -0
  116. package/dist/bone/output/session/src/db.js.map +1 -0
  117. package/dist/bone/output/session/src/events.d.ts +26 -0
  118. package/dist/bone/output/session/src/events.js +212 -0
  119. package/dist/bone/output/session/src/events.js.map +1 -0
  120. package/dist/bone/output/session/src/extensions.d.ts +41 -0
  121. package/dist/bone/output/session/src/extensions.js +217 -0
  122. package/dist/bone/output/session/src/extensions.js.map +1 -0
  123. package/dist/bone/output/session/src/logger.d.ts +28 -0
  124. package/dist/bone/output/session/src/logger.js +44 -0
  125. package/dist/bone/output/session/src/logger.js.map +1 -0
  126. package/dist/bone/output/session/src/metrics.d.ts +5 -0
  127. package/dist/bone/output/session/src/metrics.js +60 -0
  128. package/dist/bone/output/session/src/metrics.js.map +1 -0
  129. package/dist/bone/output/session/src/routes/message.d.ts +1 -0
  130. package/dist/bone/output/session/src/routes/message.js +120 -0
  131. package/dist/bone/output/session/src/routes/message.js.map +1 -0
  132. package/dist/bone/output/session/src/routes/part.d.ts +1 -0
  133. package/dist/bone/output/session/src/routes/part.js +106 -0
  134. package/dist/bone/output/session/src/routes/part.js.map +1 -0
  135. package/dist/bone/output/session/src/routes/permission.d.ts +1 -0
  136. package/dist/bone/output/session/src/routes/permission.js +106 -0
  137. package/dist/bone/output/session/src/routes/permission.js.map +1 -0
  138. package/dist/bone/output/session/src/routes/project.d.ts +1 -0
  139. package/dist/bone/output/session/src/routes/project.js +106 -0
  140. package/dist/bone/output/session/src/routes/project.js.map +1 -0
  141. package/dist/bone/output/session/src/routes/session.d.ts +1 -0
  142. package/dist/bone/output/session/src/routes/session.js +308 -0
  143. package/dist/bone/output/session/src/routes/session.js.map +1 -0
  144. package/dist/bone/output/session/src/state_machines/session.d.ts +9 -0
  145. package/dist/bone/output/session/src/state_machines/session.js +21 -0
  146. package/dist/bone/output/session/src/state_machines/session.js.map +1 -0
  147. package/dist/bone/output/session/src/websocket.d.ts +15 -0
  148. package/dist/bone/output/session/src/websocket.js +215 -0
  149. package/dist/bone/output/session/src/websocket.js.map +1 -0
  150. package/dist/bone/output/workspace/src/algorithms.d.ts +1 -0
  151. package/dist/bone/output/workspace/src/algorithms.js +3 -0
  152. package/dist/bone/output/workspace/src/algorithms.js.map +1 -0
  153. package/dist/bone/output/workspace/src/auth.d.ts +8 -0
  154. package/dist/bone/output/workspace/src/auth.js +56 -0
  155. package/dist/bone/output/workspace/src/auth.js.map +1 -0
  156. package/dist/bone/output/workspace/src/db.d.ts +6 -0
  157. package/dist/bone/output/workspace/src/db.js +63 -0
  158. package/dist/bone/output/workspace/src/db.js.map +1 -0
  159. package/dist/bone/output/workspace/src/events.d.ts +25 -0
  160. package/dist/bone/output/workspace/src/events.js +184 -0
  161. package/dist/bone/output/workspace/src/events.js.map +1 -0
  162. package/dist/bone/output/workspace/src/logger.d.ts +28 -0
  163. package/dist/bone/output/workspace/src/logger.js +45 -0
  164. package/dist/bone/output/workspace/src/logger.js.map +1 -0
  165. package/dist/bone/output/workspace/src/metrics.d.ts +5 -0
  166. package/dist/bone/output/workspace/src/metrics.js +60 -0
  167. package/dist/bone/output/workspace/src/metrics.js.map +1 -0
  168. package/dist/bone/output/workspace/src/routes/codebase.d.ts +1 -0
  169. package/dist/bone/output/workspace/src/routes/codebase.js +113 -0
  170. package/dist/bone/output/workspace/src/routes/codebase.js.map +1 -0
  171. package/dist/bone/output/workspace/src/routes/snapshot.d.ts +1 -0
  172. package/dist/bone/output/workspace/src/routes/snapshot.js +151 -0
  173. package/dist/bone/output/workspace/src/routes/snapshot.js.map +1 -0
  174. package/dist/bone/output/workspace/src/routes/workspace.d.ts +1 -0
  175. package/dist/bone/output/workspace/src/routes/workspace.js +209 -0
  176. package/dist/bone/output/workspace/src/routes/workspace.js.map +1 -0
  177. package/dist/bone/output/workspace/src/state_machines/codebase.d.ts +9 -0
  178. package/dist/bone/output/workspace/src/state_machines/codebase.js +19 -0
  179. package/dist/bone/output/workspace/src/state_machines/codebase.js.map +1 -0
  180. package/dist/bone/output/workspace/src/state_machines/snapshot.d.ts +9 -0
  181. package/dist/bone/output/workspace/src/state_machines/snapshot.js +18 -0
  182. package/dist/bone/output/workspace/src/state_machines/snapshot.js.map +1 -0
  183. package/dist/bone/output/workspace/src/state_machines/workspace.d.ts +9 -0
  184. package/dist/bone/output/workspace/src/state_machines/workspace.js +19 -0
  185. package/dist/bone/output/workspace/src/state_machines/workspace.js.map +1 -0
  186. package/dist/compat/opencode_adapter.d.ts +25 -0
  187. package/dist/compat/opencode_adapter.js +599 -0
  188. package/dist/compat/opencode_adapter.js.map +1 -0
  189. package/dist/extensions/chunker.d.ts +24 -0
  190. package/dist/extensions/chunker.js +360 -0
  191. package/dist/extensions/chunker.js.map +1 -0
  192. package/dist/extensions/embedding_provider.d.ts +18 -0
  193. package/dist/extensions/embedding_provider.js +150 -0
  194. package/dist/extensions/embedding_provider.js.map +1 -0
  195. package/dist/extensions/llm_provider.d.ts +33 -0
  196. package/dist/extensions/llm_provider.js +338 -0
  197. package/dist/extensions/llm_provider.js.map +1 -0
  198. package/dist/extensions/mcp_bridge.d.ts +44 -0
  199. package/dist/extensions/mcp_bridge.js +151 -0
  200. package/dist/extensions/mcp_bridge.js.map +1 -0
  201. package/dist/extensions/rag_search.d.ts +38 -0
  202. package/dist/extensions/rag_search.js +242 -0
  203. package/dist/extensions/rag_search.js.map +1 -0
  204. package/dist/extensions/snapshot.d.ts +14 -0
  205. package/dist/extensions/snapshot.js +158 -0
  206. package/dist/extensions/snapshot.js.map +1 -0
  207. package/dist/extensions/tool_executor.d.ts +28 -0
  208. package/dist/extensions/tool_executor.js +268 -0
  209. package/dist/extensions/tool_executor.js.map +1 -0
  210. package/dist/src/cli.d.ts +15 -0
  211. package/dist/src/cli.js +687 -0
  212. package/dist/src/cli.js.map +1 -0
  213. package/dist/src/config.d.ts +44 -0
  214. package/dist/src/config.js +165 -0
  215. package/dist/src/config.js.map +1 -0
  216. package/dist/src/context_builder.d.ts +51 -0
  217. package/dist/src/context_builder.js +558 -0
  218. package/dist/src/context_builder.js.map +1 -0
  219. package/dist/src/db_adapter.d.ts +24 -0
  220. package/dist/src/db_adapter.js +341 -0
  221. package/dist/src/db_adapter.js.map +1 -0
  222. package/dist/src/engine/session/compaction_logic.d.ts +11 -0
  223. package/dist/src/engine/session/compaction_logic.js +113 -0
  224. package/dist/src/engine/session/compaction_logic.js.map +1 -0
  225. package/dist/src/engine/session/instruction_loader.d.ts +5 -0
  226. package/dist/src/engine/session/instruction_loader.js +78 -0
  227. package/dist/src/engine/session/instruction_loader.js.map +1 -0
  228. package/dist/src/engine/session/overflow_check.d.ts +14 -0
  229. package/dist/src/engine/session/overflow_check.js +45 -0
  230. package/dist/src/engine/session/overflow_check.js.map +1 -0
  231. package/dist/src/engine/session/prompt.d.ts +45 -0
  232. package/dist/src/engine/session/prompt.js +584 -0
  233. package/dist/src/engine/session/prompt.js.map +1 -0
  234. package/dist/src/engine/session/provider_transform.d.ts +59 -0
  235. package/dist/src/engine/session/provider_transform.js +193 -0
  236. package/dist/src/engine/session/provider_transform.js.map +1 -0
  237. package/dist/src/engine/session/retry_logic.d.ts +12 -0
  238. package/dist/src/engine/session/retry_logic.js +72 -0
  239. package/dist/src/engine/session/retry_logic.js.map +1 -0
  240. package/dist/src/engine/session/system_prompt.d.ts +9 -0
  241. package/dist/src/engine/session/system_prompt.js +96 -0
  242. package/dist/src/engine/session/system_prompt.js.map +1 -0
  243. package/dist/src/engine/session/tool_registry.d.ts +5 -0
  244. package/dist/src/engine/session/tool_registry.js +117 -0
  245. package/dist/src/engine/session/tool_registry.js.map +1 -0
  246. package/dist/src/export.d.ts +13 -0
  247. package/dist/src/export.js +103 -0
  248. package/dist/src/export.js.map +1 -0
  249. package/dist/src/mdns.d.ts +7 -0
  250. package/dist/src/mdns.js +60 -0
  251. package/dist/src/mdns.js.map +1 -0
  252. package/dist/src/rag_worker.d.ts +38 -0
  253. package/dist/src/rag_worker.js +435 -0
  254. package/dist/src/rag_worker.js.map +1 -0
  255. package/dist/src/server.d.ts +11 -0
  256. package/dist/src/server.js +214 -0
  257. package/dist/src/server.js.map +1 -0
  258. package/dist/src/stats.d.ts +45 -0
  259. package/dist/src/stats.js +233 -0
  260. package/dist/src/stats.js.map +1 -0
  261. package/dist/src/tui.d.ts +29 -0
  262. package/dist/src/tui.js +1053 -0
  263. package/dist/src/tui.js.map +1 -0
  264. package/package.json +7 -4
  265. package/src/cli.ts +247 -5
  266. package/src/export.ts +122 -0
  267. package/src/mdns.ts +53 -0
  268. package/src/server.ts +32 -0
  269. package/src/stats.ts +290 -0
  270. package/src/tui.ts +749 -248
@@ -0,0 +1,212 @@
1
+ "use strict";
2
+ // Generated by BoneScript compiler. DO NOT EDIT.
3
+ // Durable event bus with transactional outbox pattern.
4
+ // Set EVENT_MODE=durable in .env to enable.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.eventBus = void 0;
7
+ const uuid_1 = require("uuid");
8
+ const db_1 = require("./db");
9
+ const logger_1 = require("./logger");
10
+ const metrics_1 = require("./metrics");
11
+ const MODE = process.env.EVENT_MODE || "in_process";
12
+ // Events requiring exactly_once delivery (deduplicated)
13
+ const EXACTLY_ONCE_EVENTS = new Set(["SessionCompacted"]);
14
+ // Events requiring at_least_once delivery (retried until ack)
15
+ const AT_LEAST_ONCE_EVENTS = new Set(["SessionCreated", "SessionStateChanged", "MessageAdded", "PartUpdated"]);
16
+ // ─── In-Process Bus ──────────────────────────────────────────────────────────
17
+ class InProcessBus {
18
+ constructor() {
19
+ this.handlers = new Map();
20
+ }
21
+ subscribe(type, handler) {
22
+ const existing = this.handlers.get(type) || [];
23
+ existing.push(handler);
24
+ this.handlers.set(type, existing);
25
+ }
26
+ unsubscribe(type, handler) {
27
+ const existing = this.handlers.get(type);
28
+ if (!existing)
29
+ return;
30
+ const filtered = existing.filter(h => h !== handler);
31
+ if (filtered.length === 0) {
32
+ this.handlers.delete(type);
33
+ }
34
+ else {
35
+ this.handlers.set(type, filtered);
36
+ }
37
+ }
38
+ async publish(type, payload, source, correlationId) {
39
+ const event = {
40
+ type,
41
+ payload,
42
+ metadata: {
43
+ source,
44
+ timestamp: new Date(),
45
+ correlation_id: correlationId || (0, uuid_1.v4)(),
46
+ causation_id: (0, uuid_1.v4)(),
47
+ },
48
+ };
49
+ (0, metrics_1.counter)("event.published", { type, mode: "in_process" });
50
+ const handlers = this.handlers.get(type) || [];
51
+ for (const handler of handlers) {
52
+ try {
53
+ await handler(event);
54
+ (0, metrics_1.counter)("event.delivered", { type, mode: "in_process" });
55
+ }
56
+ catch (e) {
57
+ (0, metrics_1.counter)("event.delivery_failed", { type, mode: "in_process" });
58
+ logger_1.logger.error("event_handler_failed", { event: type, metadata: { error: e.message } });
59
+ }
60
+ }
61
+ }
62
+ }
63
+ // ─── Durable Bus (Transactional Outbox) ──────────────────────────────────────
64
+ class DurableBus {
65
+ constructor() {
66
+ this.handlers = new Map();
67
+ }
68
+ subscribe(type, handler) {
69
+ const existing = this.handlers.get(type) || [];
70
+ existing.push(handler);
71
+ this.handlers.set(type, existing);
72
+ }
73
+ unsubscribe(type, handler) {
74
+ const existing = this.handlers.get(type);
75
+ if (!existing)
76
+ return;
77
+ const filtered = existing.filter(h => h !== handler);
78
+ if (filtered.length === 0) {
79
+ this.handlers.delete(type);
80
+ }
81
+ else {
82
+ this.handlers.set(type, filtered);
83
+ }
84
+ }
85
+ // Write event to outbox within the current transaction (or a new one)
86
+ async publish(type, payload, source, correlationId, client) {
87
+ const eventId = (0, uuid_1.v4)();
88
+ const corrId = correlationId || (0, uuid_1.v4)();
89
+ const sql = `
90
+ INSERT INTO event_outbox (id, event_type, payload, source, correlation_id)
91
+ VALUES ($1, $2, $3, $4, $5)
92
+ `;
93
+ const params = [eventId, type, JSON.stringify({ ...payload, _event_id: eventId }), source, corrId];
94
+ if (client) {
95
+ // Write within caller's transaction — atomicity guaranteed
96
+ await client.query(sql, params);
97
+ }
98
+ else {
99
+ await db_1.pool.query(sql, params);
100
+ }
101
+ (0, metrics_1.counter)("event.outboxed", { type });
102
+ }
103
+ // Called by the background worker
104
+ async flush() {
105
+ const client = await db_1.pool.connect();
106
+ try {
107
+ await client.query("BEGIN");
108
+ // Fetch pending events (lock rows to prevent concurrent processing)
109
+ const { rows } = await client.query(`
110
+ SELECT id, event_type, payload, source, correlation_id, attempts
111
+ FROM event_outbox
112
+ WHERE status = 'pending' AND scheduled_at <= NOW()
113
+ ORDER BY scheduled_at ASC
114
+ LIMIT 50
115
+ FOR UPDATE SKIP LOCKED
116
+ `);
117
+ for (const row of rows) {
118
+ try {
119
+ // exactly_once: check deduplication table
120
+ if (EXACTLY_ONCE_EVENTS.has(row.event_type)) {
121
+ const { rows: dup } = await client.query("SELECT 1 FROM event_processed WHERE event_id = $1", [row.payload._event_id || row.id]);
122
+ if (dup.length > 0) {
123
+ await client.query("UPDATE event_outbox SET status = 'delivered', delivered_at = NOW() WHERE id = $1", [row.id]);
124
+ continue;
125
+ }
126
+ }
127
+ const event = {
128
+ type: row.event_type,
129
+ payload: row.payload,
130
+ metadata: {
131
+ source: row.source,
132
+ timestamp: new Date(),
133
+ correlation_id: row.correlation_id,
134
+ causation_id: (0, uuid_1.v4)(),
135
+ },
136
+ };
137
+ const handlers = this.handlers.get(row.event_type) || [];
138
+ for (const handler of handlers) {
139
+ await handler(event);
140
+ }
141
+ // Mark delivered
142
+ await client.query("UPDATE event_outbox SET status = 'delivered', delivered_at = NOW(), attempts = attempts + 1 WHERE id = $1", [row.id]);
143
+ // Record for exactly_once deduplication
144
+ if (EXACTLY_ONCE_EVENTS.has(row.event_type)) {
145
+ await client.query("INSERT INTO event_processed (event_id, event_type) VALUES ($1, $2) ON CONFLICT DO NOTHING", [row.payload._event_id || row.id, row.event_type]);
146
+ }
147
+ (0, metrics_1.counter)("event.delivered", { type: row.event_type, mode: "durable" });
148
+ }
149
+ catch (e) {
150
+ const maxAttempts = AT_LEAST_ONCE_EVENTS.has(row.event_type) ? 10 : 3;
151
+ const newAttempts = row.attempts + 1;
152
+ const status = newAttempts >= maxAttempts ? "dead_letter" : "pending";
153
+ const backoffMs = Math.min(1000 * Math.pow(2, newAttempts), 300000);
154
+ await client.query(`UPDATE event_outbox
155
+ SET attempts = $1, last_error = $2, status = $3,
156
+ scheduled_at = NOW() + ($4 || ' milliseconds')::interval
157
+ WHERE id = $5`, [newAttempts, e.message, status, backoffMs, row.id]);
158
+ (0, metrics_1.counter)("event.delivery_failed", { type: row.event_type, mode: "durable" });
159
+ logger_1.logger.error("event_delivery_failed", { event: row.event_type, metadata: { error: e.message, attempts: newAttempts } });
160
+ }
161
+ }
162
+ await client.query("COMMIT");
163
+ }
164
+ catch (e) {
165
+ await client.query("ROLLBACK");
166
+ throw e;
167
+ }
168
+ finally {
169
+ client.release();
170
+ }
171
+ }
172
+ // Start background worker
173
+ startWorker(intervalMs = 1000) {
174
+ logger_1.logger.info("event_worker_started", { event: "startup", metadata: { interval_ms: intervalMs } });
175
+ return setInterval(async () => {
176
+ try {
177
+ await this.flush();
178
+ }
179
+ catch (e) {
180
+ logger_1.logger.error("event_worker_error", { event: "flush_failed", metadata: { error: e.message } });
181
+ }
182
+ }, intervalMs);
183
+ }
184
+ }
185
+ // ─── Unified Interface ────────────────────────────────────────────────────────
186
+ const inProcess = new InProcessBus();
187
+ const durable = new DurableBus();
188
+ exports.eventBus = {
189
+ subscribe(type, handler) {
190
+ inProcess.subscribe(type, handler);
191
+ durable.subscribe(type, handler);
192
+ },
193
+ unsubscribe(type, handler) {
194
+ inProcess.unsubscribe(type, handler);
195
+ durable.unsubscribe(type, handler);
196
+ },
197
+ async publish(type, payload, source, correlationId, client) {
198
+ if (MODE === "durable") {
199
+ await durable.publish(type, payload, source, correlationId, client);
200
+ }
201
+ else {
202
+ await inProcess.publish(type, payload, source, correlationId);
203
+ }
204
+ },
205
+ startWorker(intervalMs) {
206
+ if (MODE === "durable") {
207
+ return durable.startWorker(intervalMs);
208
+ }
209
+ return null;
210
+ },
211
+ };
212
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../../bone/output/session/src/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Extension point: activate_session
3
+ * STABLE: implementation required.
4
+ */
5
+ export declare function activate_session(session_id: string): Promise<boolean>;
6
+ /**
7
+ * Extension point: deactivate_session
8
+ * Optional.
9
+ */
10
+ export declare function deactivate_session(session_id: string): Promise<void>;
11
+ /**
12
+ * Extension point: send_prompt_to_llm
13
+ * STABLE: implementation required.
14
+ */
15
+ export declare function send_prompt_to_llm(session_id: string, message_id: string): Promise<Record<string, unknown>>;
16
+ /**
17
+ * Extension point: cancel_llm_request
18
+ * Optional.
19
+ */
20
+ export declare function cancel_llm_request(session_id: string): Promise<void>;
21
+ /**
22
+ * Extension point: execute_tool_calls
23
+ * STABLE: implementation required.
24
+ */
25
+ export declare function execute_tool_calls(session_id: string, tool_calls: Array<{
26
+ id: string;
27
+ tool_name: string;
28
+ tool_input: Record<string, unknown>;
29
+ }>): Promise<Array<{
30
+ id: string;
31
+ result: {
32
+ success: boolean;
33
+ output?: string;
34
+ error?: string;
35
+ };
36
+ }>>;
37
+ /**
38
+ * Extension point: revert_tool_effects
39
+ * Optional.
40
+ */
41
+ export declare function revert_tool_effects(session_id: string): Promise<void>;
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ // Generated by BoneScript compiler.
3
+ // Extension points: implement the functions below.
4
+ // Code between sentinel comments is preserved on recompile.
5
+ // DO NOT remove the sentinel comments.
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.revert_tool_effects = exports.execute_tool_calls = exports.cancel_llm_request = exports.send_prompt_to_llm = exports.deactivate_session = exports.activate_session = void 0;
31
+ const db_1 = require("./db");
32
+ const logger_1 = require("./logger");
33
+ const metrics_1 = require("./metrics");
34
+ const websocket_1 = require("./websocket");
35
+ // ─── LLM helpers ─────────────────────────────────────────────────────────────
36
+ function llmFetch(body) {
37
+ const baseUrl = process.env.OPENAI_BASE_URL || "https://api.openai.com/v1";
38
+ const apiKey = process.env.OPENAI_API_KEY || "not-needed";
39
+ return fetch(`${baseUrl}/chat/completions`, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json", Authorization: `Bearer ${apiKey}` },
42
+ body: JSON.stringify(body),
43
+ });
44
+ }
45
+ /**
46
+ * Extension point: activate_session
47
+ * STABLE: implementation required.
48
+ */
49
+ async function activate_session(session_id) {
50
+ // <bonescript:ext:activate_session:begin>
51
+ const row = await (0, db_1.queryOne)("SELECT state FROM sessions WHERE id = $1", [session_id]);
52
+ if (!row)
53
+ return false;
54
+ if (row.state === "active" || row.state === "busy")
55
+ return true;
56
+ if (!["created", "compacting", "archived"].includes(row.state))
57
+ return false;
58
+ await (0, db_1.query)("UPDATE sessions SET state = 'active', updated_at = NOW() WHERE id = $1", [session_id]);
59
+ return true;
60
+ // <bonescript:ext:activate_session:end>
61
+ }
62
+ exports.activate_session = activate_session;
63
+ /**
64
+ * Extension point: deactivate_session
65
+ * Optional.
66
+ */
67
+ async function deactivate_session(session_id) {
68
+ // <bonescript:ext:deactivate_session:begin>
69
+ await (0, db_1.query)("UPDATE sessions SET state = 'active', updated_at = NOW() WHERE id = $1 AND state = 'busy'", [session_id]);
70
+ // <bonescript:ext:deactivate_session:end>
71
+ }
72
+ exports.deactivate_session = deactivate_session;
73
+ /**
74
+ * Extension point: send_prompt_to_llm
75
+ * STABLE: implementation required.
76
+ */
77
+ async function send_prompt_to_llm(session_id, message_id) {
78
+ // <bonescript:ext:send_prompt_to_llm:begin>
79
+ // Load agent config
80
+ const agentRow = await (0, db_1.queryOne)("SELECT * FROM agent_instances WHERE session_id = $1 AND state IN ('running','waiting_for_tool') ORDER BY created_at DESC LIMIT 1", [session_id]);
81
+ if (!agentRow)
82
+ throw new Error(`No active agent for session ${session_id}`);
83
+ // Load message history with parts
84
+ const messages = await (0, db_1.query)(`SELECT m.id, m.role, m.model_id, m.provider_id,
85
+ json_agg(p.* ORDER BY p.order_index) FILTER (WHERE p.id IS NOT NULL) AS parts
86
+ FROM messages m
87
+ LEFT JOIN parts p ON p.message_id = m.id
88
+ WHERE m.session_id = $1
89
+ GROUP BY m.id ORDER BY m.created_at ASC`, [session_id]);
90
+ // Build AI SDK message array
91
+ const aiMessages = messages.map((m) => {
92
+ const parts = m.parts || [];
93
+ if (m.role === "user") {
94
+ return { role: "user", content: parts.filter((p) => p.part_type === "text").map((p) => ({ type: "text", text: p.data?.text || "" })) };
95
+ }
96
+ if (m.role === "assistant") {
97
+ const content = [];
98
+ for (const p of parts) {
99
+ if (p.part_type === "text")
100
+ content.push({ type: "text", text: p.data?.text || "" });
101
+ else if (p.part_type === "tool_invocation")
102
+ content.push({ type: "tool-call", toolCallId: p.data?.tool_call_id, toolName: p.data?.tool_name, args: p.data?.args });
103
+ }
104
+ return { role: "assistant", content };
105
+ }
106
+ if (m.role === "tool") {
107
+ return { role: "tool", content: parts.filter((p) => p.part_type === "tool_result").map((p) => ({ type: "tool-result", toolCallId: p.data?.tool_call_id, toolName: p.data?.tool_name, result: p.data?.result })) };
108
+ }
109
+ return { role: m.role, content: "" };
110
+ });
111
+ // Inject codebase context using no-embedding strategies
112
+ // (FTS, git recency, session history, import graph, instruction files)
113
+ let systemPrompt = agentRow.config?.system_prompt || agentRow.system_prompt || "";
114
+ try {
115
+ const lastUserMsg = messages.filter((m) => m.role === "user").slice(-1)[0];
116
+ const userText = (lastUserMsg?.parts || []).filter((p) => p.part_type === "text").map((p) => p.data?.text || "").join(" ");
117
+ if (userText) {
118
+ // Get project + worktree for this session
119
+ const sessionRow = await (0, db_1.queryOne)(`SELECT s.project_id, p.worktree FROM sessions s JOIN projects p ON p.id = s.project_id WHERE s.id = $1`, [session_id]);
120
+ if (sessionRow?.worktree) {
121
+ const { buildContext, formatContextForPrompt } = await Promise.resolve().then(() => __importStar(require("../../../../src/context_builder")));
122
+ const ctxResult = await buildContext({
123
+ session_id,
124
+ project_id: sessionRow.project_id,
125
+ worktree: sessionRow.worktree,
126
+ query: userText,
127
+ max_chunks: 10,
128
+ max_chars: 10000,
129
+ });
130
+ const ctxText = formatContextForPrompt(ctxResult, sessionRow.worktree);
131
+ if (ctxText) {
132
+ systemPrompt += `\n\n${ctxText}`;
133
+ logger_1.logger.info("context_injected", { event: "context", metadata: { summary: ctxResult.summary } });
134
+ }
135
+ }
136
+ }
137
+ }
138
+ catch (e) {
139
+ logger_1.logger.error("context_build_failed", { event: "context", metadata: { error: e.message } });
140
+ }
141
+ // Call the LLM
142
+ const model = agentRow.model_id || process.env.DEFAULT_MODEL || "local-model";
143
+ const r = await llmFetch({
144
+ model,
145
+ messages: aiMessages,
146
+ system: systemPrompt || undefined,
147
+ temperature: agentRow.temperature ?? 0.7,
148
+ max_tokens: agentRow.max_tokens ?? 2048,
149
+ });
150
+ if (!r.ok)
151
+ throw new Error(`LLM API error ${r.status}: ${await r.text()}`);
152
+ const data = await r.json();
153
+ const msg = data.choices?.[0]?.message;
154
+ const text = msg?.content || msg?.reasoning_content || "";
155
+ const toolCalls = msg?.tool_calls || [];
156
+ const usage = data.usage || {};
157
+ // Update agent token/cost counters
158
+ await (0, db_1.query)("UPDATE agent_instances SET total_tokens_in = total_tokens_in + $2, total_tokens_out = total_tokens_out + $3, context_window_used = context_window_used + $4, updated_at = NOW() WHERE id = $1", [agentRow.id, usage.prompt_tokens || 0, usage.completion_tokens || 0, (usage.prompt_tokens || 0) + (usage.completion_tokens || 0)]);
159
+ // Broadcast text delta to WebSocket part_stream channel
160
+ if (text) {
161
+ (0, websocket_1.broadcastToChannel)("part_stream", { type: "part.delta", session_id, message_id, delta: { type: "text", text } });
162
+ }
163
+ (0, metrics_1.counter)("llm.request.completed", { model, finish_reason: data.choices?.[0]?.finish_reason || "unknown" });
164
+ return {
165
+ text,
166
+ tool_calls: toolCalls,
167
+ usage: { input_tokens: usage.prompt_tokens || 0, output_tokens: usage.completion_tokens || 0 },
168
+ finish_reason: data.choices?.[0]?.finish_reason,
169
+ };
170
+ // <bonescript:ext:send_prompt_to_llm:end>
171
+ }
172
+ exports.send_prompt_to_llm = send_prompt_to_llm;
173
+ /**
174
+ * Extension point: cancel_llm_request
175
+ * Optional.
176
+ */
177
+ async function cancel_llm_request(session_id) {
178
+ // <bonescript:ext:cancel_llm_request:begin>
179
+ // In-flight requests tracked by AbortController — signal abort
180
+ const controller = activeRequests.get(session_id);
181
+ if (controller) {
182
+ controller.abort();
183
+ activeRequests.delete(session_id);
184
+ }
185
+ // <bonescript:ext:cancel_llm_request:end>
186
+ }
187
+ exports.cancel_llm_request = cancel_llm_request;
188
+ const activeRequests = new Map();
189
+ /**
190
+ * Extension point: execute_tool_calls
191
+ * STABLE: implementation required.
192
+ */
193
+ async function execute_tool_calls(session_id, tool_calls) {
194
+ // <bonescript:ext:execute_tool_calls:begin>
195
+ const { execute_tool_calls: execTools } = await Promise.resolve().then(() => __importStar(require("../../../../extensions/tool_executor")));
196
+ return execTools(session_id, tool_calls);
197
+ // <bonescript:ext:execute_tool_calls:end>
198
+ }
199
+ exports.execute_tool_calls = execute_tool_calls;
200
+ /**
201
+ * Extension point: revert_tool_effects
202
+ * Optional.
203
+ */
204
+ async function revert_tool_effects(session_id) {
205
+ // <bonescript:ext:revert_tool_effects:begin>
206
+ const snapshotRow = await (0, db_1.queryOne)("SELECT git_hash FROM snapshots WHERE session_id = $1 AND state = 'committed' ORDER BY created_at DESC LIMIT 1", [session_id]);
207
+ if (!snapshotRow)
208
+ return;
209
+ const wsRow = await (0, db_1.queryOne)("SELECT w.id FROM workspaces w JOIN sessions s ON s.project_id = w.project_id WHERE s.id = $1 LIMIT 1", [session_id]);
210
+ if (!wsRow)
211
+ return;
212
+ const { git_revert } = await Promise.resolve().then(() => __importStar(require("../../../../extensions/snapshot")));
213
+ await git_revert(wsRow.id, snapshotRow.git_hash);
214
+ // <bonescript:ext:revert_tool_effects:end>
215
+ }
216
+ exports.revert_tool_effects = revert_tool_effects;
217
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../../../../../bone/output/session/src/extensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export type LogLevel = "debug" | "info" | "warn" | "error" | "fatal";
2
+ export type LogStatus = "success" | "failure" | "timeout" | "rejected";
3
+ export interface LogEntry {
4
+ timestamp: string;
5
+ level: LogLevel;
6
+ service: string;
7
+ trace_id: string;
8
+ span_id: string;
9
+ event: string;
10
+ duration_ms?: number;
11
+ status: LogStatus;
12
+ entity_id?: string;
13
+ actor_id?: string | null;
14
+ error_code?: string | null;
15
+ metadata?: Record<string, unknown>;
16
+ }
17
+ declare class Logger {
18
+ private service;
19
+ constructor(service: string);
20
+ emit(entry: Omit<LogEntry, "timestamp" | "service" | "span_id">): void;
21
+ info(event: string, fields?: Partial<LogEntry>): void;
22
+ warn(event: string, fields?: Partial<LogEntry>): void;
23
+ error(event: string, fields?: Partial<LogEntry>): void;
24
+ debug(event: string, fields?: Partial<LogEntry>): void;
25
+ }
26
+ export declare function createLogger(service: string): Logger;
27
+ export declare const logger: Logger;
28
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ // Generated by BoneScript compiler. DO NOT EDIT.
3
+ // Implements spec/10 §3 (Logging Schema)
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.logger = exports.createLogger = void 0;
6
+ const uuid_1 = require("uuid");
7
+ class Logger {
8
+ constructor(service) {
9
+ this.service = service;
10
+ }
11
+ emit(entry) {
12
+ const full = {
13
+ timestamp: new Date().toISOString(),
14
+ service: this.service,
15
+ span_id: (0, uuid_1.v4)(),
16
+ ...entry,
17
+ };
18
+ // Suppress all log output in TUI mode — logs pollute the terminal UI
19
+ if (process.env.BONECODE_TUI === "1")
20
+ return;
21
+ const fn = entry.level === "error" || entry.level === "fatal" ? console.error : console.log;
22
+ fn(JSON.stringify(full));
23
+ }
24
+ info(event, fields = {}) {
25
+ this.emit({ level: "info", event, status: "success", trace_id: fields.trace_id || "", ...fields });
26
+ }
27
+ warn(event, fields = {}) {
28
+ this.emit({ level: "warn", event, status: "rejected", trace_id: fields.trace_id || "", ...fields });
29
+ }
30
+ error(event, fields = {}) {
31
+ this.emit({ level: "error", event, status: "failure", trace_id: fields.trace_id || "", ...fields });
32
+ }
33
+ debug(event, fields = {}) {
34
+ if (process.env.LOG_LEVEL === "debug") {
35
+ this.emit({ level: "debug", event, status: "success", trace_id: fields.trace_id || "", ...fields });
36
+ }
37
+ }
38
+ }
39
+ function createLogger(service) {
40
+ return new Logger(service);
41
+ }
42
+ exports.createLogger = createLogger;
43
+ exports.logger = createLogger("SessionDomain");
44
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../../bone/output/session/src/logger.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,0CAA0C;;;AAE1C,+BAAkC;AAoBlC,MAAM,MAAM;IAGV,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,KAA0D;QAC7D,MAAM,IAAI,GAAa;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAA,SAAI,GAAE;YACf,GAAG,KAAK;SACT,CAAC;QACF,qEAAqE;QACrE,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,GAAG;YAAE,OAAO;QAC7C,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAC5F,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,SAA4B,EAAE;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,SAA4B,EAAE;QAChD,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,SAA4B,EAAE;QACjD,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,SAA4B,EAAE;QACjD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;CACF;AAED,SAAgB,YAAY,CAAC,OAAe;IAC1C,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC;AAFD,oCAEC;AAEY,QAAA,MAAM,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function counter(name: string, labels?: Record<string, string>): void;
2
+ export declare function histogram(name: string, value: number, labels?: Record<string, string>): void;
3
+ export declare function gauge(name: string, value: number, labels?: Record<string, string>): void;
4
+ export declare function dump(): string;
5
+ export declare function reset(): void;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ // Generated by BoneScript compiler. DO NOT EDIT.
3
+ // Implements spec/10 §4 (Telemetry Hooks)
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.reset = exports.dump = exports.gauge = exports.histogram = exports.counter = void 0;
6
+ const metrics = new Map();
7
+ function key(name, labels) {
8
+ const parts = Object.keys(labels).sort().map(k => `${k}="${labels[k]}"`);
9
+ return parts.length > 0 ? `${name}{${parts.join(",")}}` : name;
10
+ }
11
+ function counter(name, labels = {}) {
12
+ const k = key(name, labels);
13
+ const existing = metrics.get(k);
14
+ if (existing && existing.type === "counter") {
15
+ existing.value++;
16
+ }
17
+ else {
18
+ metrics.set(k, { type: "counter", value: 1, labels });
19
+ }
20
+ }
21
+ exports.counter = counter;
22
+ function histogram(name, value, labels = {}) {
23
+ const k = key(name, labels);
24
+ const existing = metrics.get(k);
25
+ if (existing && existing.type === "histogram") {
26
+ existing.values.push(value);
27
+ }
28
+ else {
29
+ metrics.set(k, { type: "histogram", values: [value], labels });
30
+ }
31
+ }
32
+ exports.histogram = histogram;
33
+ function gauge(name, value, labels = {}) {
34
+ const k = key(name, labels);
35
+ metrics.set(k, { type: "gauge", value, labels });
36
+ }
37
+ exports.gauge = gauge;
38
+ function dump() {
39
+ const lines = [];
40
+ for (const [k, m] of metrics.entries()) {
41
+ if (m.type === "counter" || m.type === "gauge") {
42
+ lines.push(`${k} ${m.value}`);
43
+ }
44
+ else {
45
+ const sum = m.values.reduce((a, b) => a + b, 0);
46
+ const count = m.values.length;
47
+ const avg = count > 0 ? sum / count : 0;
48
+ lines.push(`${k}_count ${count}`);
49
+ lines.push(`${k}_sum ${sum}`);
50
+ lines.push(`${k}_avg ${avg.toFixed(2)}`);
51
+ }
52
+ }
53
+ return lines.join("\n");
54
+ }
55
+ exports.dump = dump;
56
+ function reset() {
57
+ metrics.clear();
58
+ }
59
+ exports.reset = reset;
60
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../../../bone/output/session/src/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const messagesRouter: import("express-serve-static-core").Router;