@kilnai/runtime 0.1.1

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 (205) hide show
  1. package/dist/a2a/a2a-client.d.ts +6 -0
  2. package/dist/a2a/a2a-client.d.ts.map +1 -0
  3. package/dist/a2a/a2a-client.js +112 -0
  4. package/dist/a2a/a2a-client.js.map +1 -0
  5. package/dist/a2a/index.d.ts +2 -0
  6. package/dist/a2a/index.d.ts.map +1 -0
  7. package/dist/a2a/index.js +3 -0
  8. package/dist/a2a/index.js.map +1 -0
  9. package/dist/channels/api-channel.d.ts +43 -0
  10. package/dist/channels/api-channel.d.ts.map +1 -0
  11. package/dist/channels/api-channel.js +95 -0
  12. package/dist/channels/api-channel.js.map +1 -0
  13. package/dist/channels/channel-registry.d.ts +25 -0
  14. package/dist/channels/channel-registry.d.ts.map +1 -0
  15. package/dist/channels/channel-registry.js +49 -0
  16. package/dist/channels/channel-registry.js.map +1 -0
  17. package/dist/channels/channel-router.d.ts +43 -0
  18. package/dist/channels/channel-router.d.ts.map +1 -0
  19. package/dist/channels/channel-router.js +72 -0
  20. package/dist/channels/channel-router.js.map +1 -0
  21. package/dist/channels/cli-channel.d.ts +19 -0
  22. package/dist/channels/cli-channel.d.ts.map +1 -0
  23. package/dist/channels/cli-channel.js +37 -0
  24. package/dist/channels/cli-channel.js.map +1 -0
  25. package/dist/channels/event-bridge.d.ts +27 -0
  26. package/dist/channels/event-bridge.d.ts.map +1 -0
  27. package/dist/channels/event-bridge.js +83 -0
  28. package/dist/channels/event-bridge.js.map +1 -0
  29. package/dist/channels/index.d.ts +17 -0
  30. package/dist/channels/index.d.ts.map +1 -0
  31. package/dist/channels/index.js +12 -0
  32. package/dist/channels/index.js.map +1 -0
  33. package/dist/channels/message-formatter.d.ts +4 -0
  34. package/dist/channels/message-formatter.d.ts.map +1 -0
  35. package/dist/channels/message-formatter.js +32 -0
  36. package/dist/channels/message-formatter.js.map +1 -0
  37. package/dist/channels/slack-channel.d.ts +32 -0
  38. package/dist/channels/slack-channel.d.ts.map +1 -0
  39. package/dist/channels/slack-channel.js +71 -0
  40. package/dist/channels/slack-channel.js.map +1 -0
  41. package/dist/channels/types.d.ts +27 -0
  42. package/dist/channels/types.d.ts.map +1 -0
  43. package/dist/channels/types.js +12 -0
  44. package/dist/channels/types.js.map +1 -0
  45. package/dist/channels/web-channel.d.ts +37 -0
  46. package/dist/channels/web-channel.d.ts.map +1 -0
  47. package/dist/channels/web-channel.js +112 -0
  48. package/dist/channels/web-channel.js.map +1 -0
  49. package/dist/channels/whatsapp-api.d.ts +20 -0
  50. package/dist/channels/whatsapp-api.d.ts.map +1 -0
  51. package/dist/channels/whatsapp-api.js +44 -0
  52. package/dist/channels/whatsapp-api.js.map +1 -0
  53. package/dist/channels/whatsapp-channel.d.ts +32 -0
  54. package/dist/channels/whatsapp-channel.d.ts.map +1 -0
  55. package/dist/channels/whatsapp-channel.js +85 -0
  56. package/dist/channels/whatsapp-channel.js.map +1 -0
  57. package/dist/gateway/app-resolver.d.ts +11 -0
  58. package/dist/gateway/app-resolver.d.ts.map +1 -0
  59. package/dist/gateway/app-resolver.js +36 -0
  60. package/dist/gateway/app-resolver.js.map +1 -0
  61. package/dist/gateway/approval-registry.d.ts +19 -0
  62. package/dist/gateway/approval-registry.d.ts.map +1 -0
  63. package/dist/gateway/approval-registry.js +49 -0
  64. package/dist/gateway/approval-registry.js.map +1 -0
  65. package/dist/gateway/budget-middleware.d.ts +47 -0
  66. package/dist/gateway/budget-middleware.d.ts.map +1 -0
  67. package/dist/gateway/budget-middleware.js +88 -0
  68. package/dist/gateway/budget-middleware.js.map +1 -0
  69. package/dist/gateway/config-validator.d.ts +31 -0
  70. package/dist/gateway/config-validator.d.ts.map +1 -0
  71. package/dist/gateway/config-validator.js +68 -0
  72. package/dist/gateway/config-validator.js.map +1 -0
  73. package/dist/gateway/delegation-handler.d.ts +53 -0
  74. package/dist/gateway/delegation-handler.d.ts.map +1 -0
  75. package/dist/gateway/delegation-handler.js +257 -0
  76. package/dist/gateway/delegation-handler.js.map +1 -0
  77. package/dist/gateway/delegation-routes.d.ts +7 -0
  78. package/dist/gateway/delegation-routes.d.ts.map +1 -0
  79. package/dist/gateway/delegation-routes.js +48 -0
  80. package/dist/gateway/delegation-routes.js.map +1 -0
  81. package/dist/gateway/dev-inspector.d.ts +2 -0
  82. package/dist/gateway/dev-inspector.d.ts.map +1 -0
  83. package/dist/gateway/dev-inspector.js +355 -0
  84. package/dist/gateway/dev-inspector.js.map +1 -0
  85. package/dist/gateway/dev-orchestrator.d.ts +24 -0
  86. package/dist/gateway/dev-orchestrator.d.ts.map +1 -0
  87. package/dist/gateway/dev-orchestrator.js +71 -0
  88. package/dist/gateway/dev-orchestrator.js.map +1 -0
  89. package/dist/gateway/dev-routes-types.d.ts +39 -0
  90. package/dist/gateway/dev-routes-types.d.ts.map +1 -0
  91. package/dist/gateway/dev-routes-types.js +3 -0
  92. package/dist/gateway/dev-routes-types.js.map +1 -0
  93. package/dist/gateway/dev-routes.d.ts +53 -0
  94. package/dist/gateway/dev-routes.d.ts.map +1 -0
  95. package/dist/gateway/dev-routes.js +217 -0
  96. package/dist/gateway/dev-routes.js.map +1 -0
  97. package/dist/gateway/dev-token-store.d.ts +19 -0
  98. package/dist/gateway/dev-token-store.d.ts.map +1 -0
  99. package/dist/gateway/dev-token-store.js +40 -0
  100. package/dist/gateway/dev-token-store.js.map +1 -0
  101. package/dist/gateway/gateway-routes.d.ts +46 -0
  102. package/dist/gateway/gateway-routes.d.ts.map +1 -0
  103. package/dist/gateway/gateway-routes.js +143 -0
  104. package/dist/gateway/gateway-routes.js.map +1 -0
  105. package/dist/gateway/gateway-server.d.ts +25 -0
  106. package/dist/gateway/gateway-server.d.ts.map +1 -0
  107. package/dist/gateway/gateway-server.js +736 -0
  108. package/dist/gateway/gateway-server.js.map +1 -0
  109. package/dist/gateway/health-registry.d.ts +18 -0
  110. package/dist/gateway/health-registry.d.ts.map +1 -0
  111. package/dist/gateway/health-registry.js +40 -0
  112. package/dist/gateway/health-registry.js.map +1 -0
  113. package/dist/gateway/memory-routes.d.ts +12 -0
  114. package/dist/gateway/memory-routes.d.ts.map +1 -0
  115. package/dist/gateway/memory-routes.js +32 -0
  116. package/dist/gateway/memory-routes.js.map +1 -0
  117. package/dist/gateway/mode-b-routes.d.ts +14 -0
  118. package/dist/gateway/mode-b-routes.d.ts.map +1 -0
  119. package/dist/gateway/mode-b-routes.js +96 -0
  120. package/dist/gateway/mode-b-routes.js.map +1 -0
  121. package/dist/gateway/safety-middleware.d.ts +21 -0
  122. package/dist/gateway/safety-middleware.d.ts.map +1 -0
  123. package/dist/gateway/safety-middleware.js +175 -0
  124. package/dist/gateway/safety-middleware.js.map +1 -0
  125. package/dist/gateway/security-middleware.d.ts +12 -0
  126. package/dist/gateway/security-middleware.d.ts.map +1 -0
  127. package/dist/gateway/security-middleware.js +62 -0
  128. package/dist/gateway/security-middleware.js.map +1 -0
  129. package/dist/gateway/tenant-admin-routes.d.ts +15 -0
  130. package/dist/gateway/tenant-admin-routes.d.ts.map +1 -0
  131. package/dist/gateway/tenant-admin-routes.js +148 -0
  132. package/dist/gateway/tenant-admin-routes.js.map +1 -0
  133. package/dist/gateway/tenant-routes.d.ts +15 -0
  134. package/dist/gateway/tenant-routes.d.ts.map +1 -0
  135. package/dist/gateway/tenant-routes.js +107 -0
  136. package/dist/gateway/tenant-routes.js.map +1 -0
  137. package/dist/gateway/whatsapp-webhook-routes.d.ts +15 -0
  138. package/dist/gateway/whatsapp-webhook-routes.d.ts.map +1 -0
  139. package/dist/gateway/whatsapp-webhook-routes.js +217 -0
  140. package/dist/gateway/whatsapp-webhook-routes.js.map +1 -0
  141. package/dist/gateway/ws-routes.d.ts +19 -0
  142. package/dist/gateway/ws-routes.d.ts.map +1 -0
  143. package/dist/gateway/ws-routes.js +79 -0
  144. package/dist/gateway/ws-routes.js.map +1 -0
  145. package/dist/index.d.ts +64 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +44 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/session/index.d.ts +6 -0
  150. package/dist/session/index.d.ts.map +1 -0
  151. package/dist/session/index.js +4 -0
  152. package/dist/session/index.js.map +1 -0
  153. package/dist/session/mode-b-orchestrator.d.ts +43 -0
  154. package/dist/session/mode-b-orchestrator.d.ts.map +1 -0
  155. package/dist/session/mode-b-orchestrator.js +224 -0
  156. package/dist/session/mode-b-orchestrator.js.map +1 -0
  157. package/dist/session/mode-b-session.d.ts +29 -0
  158. package/dist/session/mode-b-session.d.ts.map +1 -0
  159. package/dist/session/mode-b-session.js +50 -0
  160. package/dist/session/mode-b-session.js.map +1 -0
  161. package/dist/session/session-registry.d.ts +15 -0
  162. package/dist/session/session-registry.d.ts.map +1 -0
  163. package/dist/session/session-registry.js +60 -0
  164. package/dist/session/session-registry.js.map +1 -0
  165. package/dist/tenant/index.d.ts +3 -0
  166. package/dist/tenant/index.d.ts.map +1 -0
  167. package/dist/tenant/index.js +3 -0
  168. package/dist/tenant/index.js.map +1 -0
  169. package/dist/tenant/system-prompt-builder.d.ts +3 -0
  170. package/dist/tenant/system-prompt-builder.d.ts.map +1 -0
  171. package/dist/tenant/system-prompt-builder.js +76 -0
  172. package/dist/tenant/system-prompt-builder.js.map +1 -0
  173. package/dist/tenant/tenant-registry.d.ts +33 -0
  174. package/dist/tenant/tenant-registry.d.ts.map +1 -0
  175. package/dist/tenant/tenant-registry.js +156 -0
  176. package/dist/tenant/tenant-registry.js.map +1 -0
  177. package/dist/trigger/event-listener.d.ts +22 -0
  178. package/dist/trigger/event-listener.d.ts.map +1 -0
  179. package/dist/trigger/event-listener.js +64 -0
  180. package/dist/trigger/event-listener.js.map +1 -0
  181. package/dist/trigger/index.d.ts +10 -0
  182. package/dist/trigger/index.d.ts.map +1 -0
  183. package/dist/trigger/index.js +7 -0
  184. package/dist/trigger/index.js.map +1 -0
  185. package/dist/trigger/scheduler.d.ts +22 -0
  186. package/dist/trigger/scheduler.d.ts.map +1 -0
  187. package/dist/trigger/scheduler.js +77 -0
  188. package/dist/trigger/scheduler.js.map +1 -0
  189. package/dist/trigger/trigger-executor.d.ts +14 -0
  190. package/dist/trigger/trigger-executor.d.ts.map +1 -0
  191. package/dist/trigger/trigger-executor.js +47 -0
  192. package/dist/trigger/trigger-executor.js.map +1 -0
  193. package/dist/trigger/trigger-registry.d.ts +28 -0
  194. package/dist/trigger/trigger-registry.d.ts.map +1 -0
  195. package/dist/trigger/trigger-registry.js +118 -0
  196. package/dist/trigger/trigger-registry.js.map +1 -0
  197. package/dist/trigger/webhook-handler.d.ts +11 -0
  198. package/dist/trigger/webhook-handler.d.ts.map +1 -0
  199. package/dist/trigger/webhook-handler.js +71 -0
  200. package/dist/trigger/webhook-handler.js.map +1 -0
  201. package/dist/utils/hmac.d.ts +15 -0
  202. package/dist/utils/hmac.d.ts.map +1 -0
  203. package/dist/utils/hmac.js +27 -0
  204. package/dist/utils/hmac.js.map +1 -0
  205. package/package.json +53 -0
@@ -0,0 +1,355 @@
1
+ // Dev Inspector: self-contained HTML page for engine observability.
2
+ // Served at GET /dev/ when devMode is true. Zero external dependencies.
3
+ export function createDevInspectorHtml() {
4
+ return `<!DOCTYPE html>
5
+ <html lang="en">
6
+ <head>
7
+ <meta charset="utf-8">
8
+ <meta name="viewport" content="width=device-width,initial-scale=1">
9
+ <title>Kiln Dev Inspector</title>
10
+ <style>
11
+ *{margin:0;padding:0;box-sizing:border-box}
12
+ body{background:#09090b;color:#d4d4d8;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:13px;line-height:1.5}
13
+ a{color:#60a5fa;text-decoration:none}
14
+ .header{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid #27272a}
15
+ .header h1{font-size:14px;font-weight:600;color:#fafafa}
16
+ .dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
17
+ .dot-ok{background:#22c55e}
18
+ .dot-err{background:#ef4444}
19
+ .dot-wait{background:#71717a}
20
+ .grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:16px;height:calc(100vh - 49px);grid-template-rows:auto 1fr auto}
21
+ .card{background:#18181b;border:1px solid #27272a;border-radius:6px;overflow:hidden;display:flex;flex-direction:column}
22
+ .card-title{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#71717a;padding:8px 12px;border-bottom:1px solid #27272a}
23
+ .card-body{padding:12px;overflow-y:auto;flex:1;min-height:0}
24
+ .phases{display:flex;gap:4px;align-items:center;flex-wrap:wrap}
25
+ .phase{padding:4px 10px;border-radius:4px;font-size:11px;background:#27272a;color:#71717a}
26
+ .phase-done{background:#052e16;color:#4ade80}
27
+ .phase-active{background:#172554;color:#60a5fa;font-weight:600}
28
+ .filter-input{width:100%;padding:4px 8px;background:#09090b;border:1px solid #3f3f46;border-radius:4px;color:#d4d4d8;font-family:inherit;font-size:12px;margin-bottom:8px}
29
+ .filter-input:focus{outline:none;border-color:#60a5fa}
30
+ .event-log{font-size:12px;white-space:pre-wrap;word-break:break-all}
31
+ .ev{padding:2px 0;border-bottom:1px solid #1c1c1e}
32
+ .ev-time{color:#52525b}
33
+ .ev-type{font-weight:600;display:inline-block;min-width:120px}
34
+ .ev-phase{color:#60a5fa}
35
+ .ev-task{color:#4ade80}
36
+ .ev-tool{color:#facc15}
37
+ .ev-memory{color:#c084fc}
38
+ .ev-error{color:#ef4444}
39
+ .ev-security{color:#fb923c}
40
+ .stats-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
41
+ .stat{background:#09090b;border-radius:4px;padding:8px 12px}
42
+ .stat-value{font-size:18px;font-weight:700;color:#fafafa}
43
+ .stat-label{font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:#71717a;margin-top:2px}
44
+ .info-row{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid #1c1c1e}
45
+ .info-label{color:#71717a}
46
+ .info-value{color:#d4d4d8}
47
+ pre.json{font-size:12px;color:#a1a1aa;white-space:pre-wrap;word-break:break-all}
48
+ .full-width{grid-column:1/-1}
49
+ .tabs{display:flex;gap:0;border-bottom:1px solid #27272a}
50
+ .tab{padding:6px 16px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:#71717a;cursor:pointer;border-bottom:2px solid transparent;user-select:none}
51
+ .tab:hover{color:#a1a1aa}
52
+ .tab-active{color:#60a5fa;border-bottom-color:#60a5fa}
53
+ .tab-panel{display:none;flex:1;min-height:0;overflow:hidden}
54
+ .tab-panel-active{display:flex;flex-direction:column;flex:1;min-height:0}
55
+ .timeline-wrap{position:relative;overflow-y:auto;flex:1;min-height:0;padding:8px 12px}
56
+ .tl-row{position:relative;height:22px;margin-bottom:2px;display:flex;align-items:center}
57
+ .tl-label{font-size:11px;color:#a1a1aa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 0 180px;padding-right:8px;cursor:pointer}
58
+ .tl-ruler{position:relative;flex:1;height:14px}
59
+ .tl-bar{position:absolute;top:0;height:100%;border-radius:2px;opacity:.85;cursor:pointer;min-width:4px}
60
+ .tl-phase{background:#60a5fa}
61
+ .tl-tool{background:#facc15}
62
+ .tl-agent{background:#4ade80}
63
+ .tl-task{background:#c084fc}
64
+ .tl-trigger{background:#fb923c}
65
+ .tl-other{background:#71717a}
66
+ .tl-detail{background:#1c1c1e;border:1px solid #3f3f46;border-radius:4px;padding:8px 12px;font-size:11px;color:#a1a1aa;margin:0 0 6px 180px;white-space:pre-wrap;word-break:break-all;display:none}
67
+ .tl-detail-visible{display:block}
68
+ .tl-empty{padding:24px;color:#52525b;font-size:12px}
69
+ .tl-axis{display:flex;justify-content:space-between;font-size:10px;color:#52525b;padding:0 0 4px 180px}
70
+ </style>
71
+ </head>
72
+ <body>
73
+ <div class="header">
74
+ <div id="status-dot" class="dot dot-wait"></div>
75
+ <h1>Kiln Dev Inspector</h1>
76
+ <span id="conn-label" style="color:#71717a;font-size:12px">Connecting...</span>
77
+ </div>
78
+ <div class="grid">
79
+ <div class="card full-width">
80
+ <div class="card-title">Phase Pipeline</div>
81
+ <div class="card-body"><div id="phases" class="phases"></div></div>
82
+ </div>
83
+ <div class="card" style="min-height:0">
84
+ <div class="tabs">
85
+ <div class="tab tab-active" id="tab-events" onclick="switchTab('events')">Events</div>
86
+ <div class="tab" id="tab-timeline" onclick="switchTab('timeline')">Timeline</div>
87
+ </div>
88
+ <div class="tab-panel tab-panel-active" id="panel-events" style="display:flex;flex-direction:column;flex:1;min-height:0;padding:12px">
89
+ <input id="filter" class="filter-input" placeholder="Filter events..." />
90
+ <div id="events" class="event-log" style="flex:1;overflow-y:auto;min-height:0"></div>
91
+ </div>
92
+ <div class="tab-panel" id="panel-timeline" style="flex-direction:column;flex:1;min-height:0">
93
+ <div class="tl-axis" id="tl-axis"><span>0ms</span><span id="tl-axis-end">0ms</span></div>
94
+ <div class="timeline-wrap" id="timeline"><div class="tl-empty">No spans yet. Spans arrive via trace_span events.</div></div>
95
+ </div>
96
+ </div>
97
+ <div class="card" style="min-height:0;display:flex;flex-direction:column">
98
+ <div class="card-title">Security</div>
99
+ <div class="card-body" style="flex:1;display:flex;flex-direction:column;gap:12px;min-height:0">
100
+ <div class="stats-grid" id="sec-stats">
101
+ <div class="stat"><div class="stat-value" id="s-scans">0</div><div class="stat-label">Scans</div></div>
102
+ <div class="stat"><div class="stat-value" id="s-blocked">0</div><div class="stat-label">Blocked</div></div>
103
+ <div class="stat"><div class="stat-value" id="s-guardian">0</div><div class="stat-label">Guardian Reviews</div></div>
104
+ <div class="stat"><div class="stat-value" id="s-violations">0</div><div class="stat-label">Violations</div></div>
105
+ <div class="stat"><div class="stat-value" id="s-pii">0</div><div class="stat-label">PII Detected</div></div>
106
+ <div class="stat"><div class="stat-value" id="s-content">0</div><div class="stat-label">Content Flagged</div></div>
107
+ </div>
108
+ <div id="sec-events" class="event-log" style="flex:1;overflow-y:auto;min-height:0"></div>
109
+ </div>
110
+ </div>
111
+ <div class="card full-width">
112
+ <div class="card-title">Info</div>
113
+ <div class="card-body" style="display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px">
114
+ <div><div style="color:#71717a;font-size:11px;margin-bottom:4px">Cost</div><pre id="cost-info" class="json">Loading...</pre></div>
115
+ <div><div style="color:#71717a;font-size:11px;margin-bottom:4px">Apps</div><div id="apps-info">Loading...</div></div>
116
+ <div><div style="color:#71717a;font-size:11px;margin-bottom:4px">Triggers</div><div id="triggers-info">Loading...</div></div>
117
+ </div>
118
+ </div>
119
+ </div>
120
+ <script>
121
+ (function(){
122
+ // ---- Timeline state
123
+ var spans=[];
124
+ var selectedSpanId=null;
125
+ var timelineEl=document.getElementById("timeline");
126
+ var axisEndEl=document.getElementById("tl-axis-end");
127
+
128
+ function spanKindClass(kind){
129
+ if(kind==="phase")return"tl-phase";
130
+ if(kind==="tool")return"tl-tool";
131
+ if(kind==="agent")return"tl-agent";
132
+ if(kind==="task")return"tl-task";
133
+ if(kind==="trigger")return"tl-trigger";
134
+ return"tl-other";
135
+ }
136
+
137
+ function renderTimeline(){
138
+ if(spans.length===0){
139
+ timelineEl.innerHTML='<div class="tl-empty">No spans yet. Spans arrive via trace_span events.</div>';
140
+ return;
141
+ }
142
+ var minT=Infinity,maxT=-Infinity;
143
+ for(var i=0;i<spans.length;i++){
144
+ var s=spans[i];
145
+ var st=s.startTime?new Date(s.startTime).getTime():0;
146
+ var et=s.endTime?new Date(s.endTime).getTime():st+1;
147
+ if(st<minT)minT=st;
148
+ if(et>maxT)maxT=et;
149
+ }
150
+ var total=maxT-minT||1;
151
+ axisEndEl.textContent=total+"ms";
152
+ var html="";
153
+ for(var j=0;j<spans.length;j++){
154
+ var sp=spans[j];
155
+ var st2=sp.startTime?new Date(sp.startTime).getTime():minT;
156
+ var et2=sp.endTime?new Date(sp.endTime).getTime():st2+1;
157
+ var left=Math.max(0,((st2-minT)/total)*100);
158
+ var width=Math.max(0.2,((et2-st2)/total)*100);
159
+ var indent=sp.parentSpanId?"padding-left:16px;":"";
160
+ var cls=spanKindClass(sp.kind||"");
161
+ var isSelected=selectedSpanId===sp.spanId;
162
+ var label=sp.name||sp.spanId||(sp.spanKind+" span");
163
+ var attrs=JSON.stringify(sp,null,2);
164
+ html+='<div class="tl-row" style="'+indent+'">';
165
+ html+='<div class="tl-label" title="'+label+'" onclick="toggleSpanDetail(\''+sp.spanId+'\')">'+label+'</div>';
166
+ html+='<div class="tl-ruler"><div class="tl-bar '+cls+'" style="left:'+left+'%;width:'+width+'%"';
167
+ html+=' title="'+label+' ('+Math.round(et2-st2)+'ms)'+'" onclick="toggleSpanDetail(\''+sp.spanId+'\')"';
168
+ html+='></div></div>';
169
+ html+='</div>';
170
+ html+='<div class="tl-detail'+(isSelected?' tl-detail-visible':'')+'" id="detail-'+sp.spanId+'">'+attrs.replace(/</g,'&lt;').replace(/>/g,'&gt;')+'</div>';
171
+ }
172
+ timelineEl.innerHTML=html;
173
+ }
174
+
175
+ window.toggleSpanDetail=function(spanId){
176
+ if(selectedSpanId===spanId){
177
+ selectedSpanId=null;
178
+ }else{
179
+ selectedSpanId=spanId;
180
+ }
181
+ renderTimeline();
182
+ };
183
+
184
+ window.switchTab=function(tab){
185
+ var panels=['events','timeline'];
186
+ for(var k=0;k<panels.length;k++){
187
+ var p=document.getElementById('panel-'+panels[k]);
188
+ var t=document.getElementById('tab-'+panels[k]);
189
+ if(p)p.className='tab-panel'+(panels[k]===tab?' tab-panel-active':'');
190
+ if(t)t.className='tab'+(panels[k]===tab?' tab-active':'');
191
+ }
192
+ };
193
+
194
+ // ---- Event log state
195
+ var events=[];
196
+ var MAX=1000;
197
+ var secCounts={scans:0,blocked:0,guardian:0,violations:0,pii:0,content:0};
198
+ var secEvents=[];
199
+ var filterText="";
200
+
201
+ var dot=document.getElementById("status-dot");
202
+ var connLabel=document.getElementById("conn-label");
203
+ var phasesEl=document.getElementById("phases");
204
+ var eventsEl=document.getElementById("events");
205
+ var filterEl=document.getElementById("filter");
206
+ var secEventsEl=document.getElementById("sec-events");
207
+
208
+ function setConnected(ok){
209
+ dot.className="dot "+(ok?"dot-ok":"dot-err");
210
+ connLabel.textContent=ok?"Connected":"Disconnected";
211
+ }
212
+
213
+ function evColor(type){
214
+ if(type.startsWith("phase")||type==="approval_requested"||type==="approval_received"||type==="worker_assigned"||type==="error"||type.startsWith("handoff")||type.startsWith("interrupt"))return type==="error"?"ev-error":"ev-phase";
215
+ if(type.startsWith("task"))return"ev-task";
216
+ if(type.startsWith("tool")||type==="verification_result")return"ev-tool";
217
+ if(type.startsWith("memory"))return"ev-memory";
218
+ if(type.startsWith("injection")||type.startsWith("guardian")||type.startsWith("audit")||type.startsWith("tenant_isolation")||type.startsWith("security"))return"ev-security";
219
+ return"";
220
+ }
221
+
222
+ function isSecurity(type){
223
+ return type==="injection_scanned"||type==="guardian_reviewed"||type==="audit_entry"||type==="tenant_isolation_violation"||type==="security_alert"||type==="pii_detected"||type==="content_classified"||type==="policy_evaluated";
224
+ }
225
+
226
+ function fmtTime(ts){
227
+ if(!ts)return"";
228
+ var d=new Date(ts);
229
+ return d.toLocaleTimeString("en",{hour12:false,hour:"2-digit",minute:"2-digit",second:"2-digit"});
230
+ }
231
+
232
+ function truncate(s,n){return s.length>n?s.slice(0,n)+"...":s}
233
+
234
+ function renderEvents(){
235
+ var filt=filterText.toLowerCase();
236
+ var html="";
237
+ for(var i=events.length-1;i>=0;i--){
238
+ var ev=events[i];
239
+ if(filt&&ev.type.toLowerCase().indexOf(filt)===-1)continue;
240
+ var rest=Object.assign({},ev);
241
+ delete rest.type;delete rest.timestamp;delete rest.sessionId;
242
+ var detail=Object.keys(rest).length?truncate(JSON.stringify(rest),120):"";
243
+ html+='<div class="ev"><span class="ev-time">'+fmtTime(ev.timestamp)+'</span> <span class="ev-type '+evColor(ev.type)+'">'+ev.type+'</span> '+detail+'</div>';
244
+ }
245
+ eventsEl.innerHTML=html;
246
+ }
247
+
248
+ function renderSecEvents(){
249
+ document.getElementById("s-scans").textContent=secCounts.scans;
250
+ document.getElementById("s-blocked").textContent=secCounts.blocked;
251
+ document.getElementById("s-guardian").textContent=secCounts.guardian;
252
+ document.getElementById("s-violations").textContent=secCounts.violations;
253
+ document.getElementById("s-pii").textContent=secCounts.pii;
254
+ document.getElementById("s-content").textContent=secCounts.content;
255
+ var html="";
256
+ for(var i=secEvents.length-1;i>=Math.max(0,secEvents.length-20);i--){
257
+ var ev=secEvents[i];
258
+ var rest=Object.assign({},ev);
259
+ delete rest.type;delete rest.timestamp;delete rest.sessionId;
260
+ html+='<div class="ev"><span class="ev-time">'+fmtTime(ev.timestamp)+'</span> <span class="ev-type ev-security">'+ev.type+'</span> '+truncate(JSON.stringify(rest),100)+'</div>';
261
+ }
262
+ secEventsEl.innerHTML=html;
263
+ }
264
+
265
+ function renderPhases(state){
266
+ if(!state)return;
267
+ var phases=state.phases||["analyze","research","architect","implement","verify","synthesize"];
268
+ var current=state.phase||state.phaseName||null;
269
+ var currentIdx=current?phases.indexOf(current):-1;
270
+ var html="";
271
+ for(var i=0;i<phases.length;i++){
272
+ var cls="phase";
273
+ if(i<currentIdx)cls+=" phase-done";
274
+ else if(i===currentIdx)cls+=" phase-active";
275
+ html+='<div class="'+cls+'">'+(i<currentIdx?"\\u2713 ":"")+phases[i]+'</div>';
276
+ if(i<phases.length-1)html+='<span style="color:#3f3f46">\\u2192</span>';
277
+ }
278
+ phasesEl.innerHTML=html;
279
+ }
280
+
281
+ function pushEvent(ev){
282
+ events.push(ev);
283
+ if(events.length>MAX)events.shift();
284
+ if(isSecurity(ev.type)){
285
+ secEvents.push(ev);
286
+ if(ev.type==="injection_scanned")secCounts.scans++;
287
+ if(ev.type==="injection_scanned"&&ev.safe===false)secCounts.blocked++;
288
+ if(ev.type==="guardian_reviewed")secCounts.guardian++;
289
+ if(ev.type==="tenant_isolation_violation"||ev.type==="security_alert")secCounts.violations++;
290
+ if(ev.type==="pii_detected")secCounts.pii++;
291
+ if(ev.type==="content_classified"&&ev.blocked)secCounts.content++;
292
+ renderSecEvents();
293
+ }
294
+ if(ev.type==="phase_changed")renderPhases({phase:ev.phaseName||ev.phase,phases:null});
295
+ // Feed trace_span events into the timeline
296
+ if(ev.type==="trace_span"&&ev.span){
297
+ var existingIdx=-1;
298
+ for(var si=0;si<spans.length;si++){if(spans[si].spanId===ev.span.spanId){existingIdx=si;break;}}
299
+ if(existingIdx>=0){spans[existingIdx]=Object.assign({},spans[existingIdx],ev.span);}
300
+ else{spans.push(ev.span);}
301
+ if(spans.length>500)spans.shift();
302
+ renderTimeline();
303
+ }
304
+ renderEvents();
305
+ }
306
+
307
+ filterEl.addEventListener("input",function(){filterText=this.value;renderEvents()});
308
+
309
+ // Fetch initial data
310
+ fetch("/dev/state").then(function(r){return r.json()}).then(renderPhases).catch(function(){});
311
+ fetch("/dev/cost").then(function(r){return r.json()}).then(function(d){
312
+ document.getElementById("cost-info").textContent=JSON.stringify(d,null,2);
313
+ }).catch(function(){document.getElementById("cost-info").textContent="Unavailable"});
314
+ fetch("/dev/apps").then(function(r){return r.json()}).then(function(d){
315
+ var apps=d.apps||[];
316
+ document.getElementById("apps-info").innerHTML=apps.length?apps.map(function(a){return'<div class="info-row"><span class="info-value">'+a+'</span></div>'}).join(""):'<span style="color:#71717a">No apps loaded</span>';
317
+ }).catch(function(){document.getElementById("apps-info").textContent="Unavailable"});
318
+ fetch("/dev/triggers").then(function(r){return r.json()}).then(function(d){
319
+ var triggers=d.triggers||[];
320
+ document.getElementById("triggers-info").innerHTML=triggers.length?triggers.map(function(t){return'<div class="info-row"><span class="info-label">'+t.appName+'</span><span class="info-value">'+t.name+' ('+t.type+')</span></div>'}).join(""):'<span style="color:#71717a">No triggers</span>';
321
+ }).catch(function(){document.getElementById("triggers-info").textContent="Unavailable"});
322
+
323
+ // SSE connection
324
+ function connectSSE(){
325
+ var es=new EventSource("/dev/events");
326
+ es.onopen=function(){setConnected(true)};
327
+ es.onerror=function(){
328
+ setConnected(false);
329
+ es.close();
330
+ setTimeout(connectSSE,3000);
331
+ };
332
+ es.onmessage=function(e){
333
+ try{pushEvent(JSON.parse(e.data))}catch(err){}
334
+ };
335
+ // Named event types from the SSE stream
336
+ var types=["phase_changed","task_started","task_completed","tool_called","tool_result","thinking",
337
+ "verification_result","cost_update","memory_saved","memory_recalled","memory_sync",
338
+ "approval_requested","approval_received","worker_assigned","error","trace_span",
339
+ "handoff_requested","handoff_completed","interrupt_requested","interrupt_resumed",
340
+ "injection_scanned","guardian_reviewed","audit_entry","tenant_isolation_violation","security_alert",
341
+ "webhook_received","trigger_fired","trigger_failed","schedule_fired",
342
+ "pii_detected","content_classified","policy_evaluated"];
343
+ types.forEach(function(t){
344
+ es.addEventListener(t,function(e){
345
+ try{pushEvent(JSON.parse(e.data))}catch(err){}
346
+ });
347
+ });
348
+ }
349
+ connectSSE();
350
+ })();
351
+ </script>
352
+ </body>
353
+ </html>`;
354
+ }
355
+ //# sourceMappingURL=dev-inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-inspector.js","sourceRoot":"","sources":["../../src/gateway/dev-inspector.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,wEAAwE;AAExE,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA6VD,CAAC;AACT,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { Orchestrator } from "@kilnai/core";
2
+ import type { EventBus, OrchestratorStatus } from "@kilnai/core";
3
+ import type { ApprovalGateRegistry } from "./approval-registry.js";
4
+ export interface DevOrchestratorConfig {
5
+ readonly eventBus: EventBus;
6
+ readonly approvalRegistry: ApprovalGateRegistry;
7
+ readonly requireApproval?: boolean;
8
+ }
9
+ export interface DevRunResult {
10
+ readonly sessionId: string;
11
+ readonly status: OrchestratorStatus;
12
+ }
13
+ export declare class DevOrchestrator {
14
+ private readonly _orchestrator;
15
+ private readonly _approvalRegistry;
16
+ private readonly _eventBus;
17
+ private _eventBridge;
18
+ constructor(config: DevOrchestratorConfig);
19
+ get orchestrator(): Orchestrator;
20
+ get isRunning(): boolean;
21
+ start(task: string): string;
22
+ private runPhaseLoop;
23
+ }
24
+ //# sourceMappingURL=dev-orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-orchestrator.d.ts","sourceRoot":"","sources":["../../src/gateway/dev-orchestrator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAa,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,wBAAwB,CAAC;AAEnF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;IAChD,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACrC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuB;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,YAAY,CAA6C;gBAErD,MAAM,EAAE,qBAAqB;IAQzC,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,IAAI,SAAS,IAAI,OAAO,CAGvB;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;YA2Bb,YAAY;CA0B3B"}
@@ -0,0 +1,71 @@
1
+ // DevOrchestrator -- bridges core Orchestrator with gateway ApprovalGateRegistry + EventBus
2
+ import { Orchestrator } from "@kilnai/core";
3
+ export class DevOrchestrator {
4
+ _orchestrator;
5
+ _approvalRegistry;
6
+ _eventBus;
7
+ _eventBridge = null;
8
+ constructor(config) {
9
+ this._orchestrator = new Orchestrator({
10
+ requireApproval: config.requireApproval ?? true,
11
+ });
12
+ this._approvalRegistry = config.approvalRegistry;
13
+ this._eventBus = config.eventBus;
14
+ }
15
+ get orchestrator() {
16
+ return this._orchestrator;
17
+ }
18
+ get isRunning() {
19
+ const s = this._orchestrator.status;
20
+ return s === "running" || s === "awaiting_approval";
21
+ }
22
+ start(task) {
23
+ if (this.isRunning) {
24
+ throw new Error("A run is already in progress");
25
+ }
26
+ const sessionId = this._orchestrator.start(task);
27
+ // Bridge events: orchestrator -> gateway EventBus
28
+ this._eventBridge = (event) => {
29
+ this._eventBus.emit(event);
30
+ };
31
+ this._orchestrator.eventBus.onAny(this._eventBridge);
32
+ // Register approval target adapter
33
+ const target = {
34
+ approve: () => this._orchestrator.approve(),
35
+ reject: (reason) => this._orchestrator.reject(reason),
36
+ status: () => this._orchestrator.status,
37
+ };
38
+ this._approvalRegistry.register(sessionId, target);
39
+ // Fire-and-forget phase loop
40
+ this.runPhaseLoop(sessionId);
41
+ return sessionId;
42
+ }
43
+ async runPhaseLoop(sessionId) {
44
+ try {
45
+ while (this._orchestrator.status === "running" ||
46
+ this._orchestrator.status === "awaiting_approval") {
47
+ const result = this._orchestrator.advancePhase();
48
+ if (result === null)
49
+ break;
50
+ if (result instanceof Promise) {
51
+ const next = await result;
52
+ if (next === null)
53
+ break;
54
+ }
55
+ }
56
+ // If the loop ended but status is still "running" (e.g. rejection), cancel
57
+ if (this._orchestrator.status === "running") {
58
+ this._orchestrator.cancel();
59
+ }
60
+ return { sessionId, status: this._orchestrator.status };
61
+ }
62
+ finally {
63
+ this._approvalRegistry.unregister(sessionId);
64
+ if (this._eventBridge) {
65
+ this._orchestrator.eventBus.offAny(this._eventBridge);
66
+ this._eventBridge = null;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=dev-orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-orchestrator.js","sourceRoot":"","sources":["../../src/gateway/dev-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ export interface AppGraphAgent {
2
+ readonly name: string;
3
+ readonly role: string;
4
+ readonly goal?: string;
5
+ readonly tier: string;
6
+ readonly tools: readonly string[];
7
+ readonly modalities?: readonly string[];
8
+ }
9
+ export interface AppGraphTeam {
10
+ readonly name: string;
11
+ readonly agents: readonly AppGraphAgent[];
12
+ readonly capabilities: readonly string[];
13
+ readonly phases: readonly string[];
14
+ readonly mode?: string;
15
+ }
16
+ export interface AppGraphRouter {
17
+ readonly rules: readonly {
18
+ readonly pattern: string;
19
+ readonly team: string;
20
+ }[];
21
+ readonly fallback: string;
22
+ readonly classifier?: string;
23
+ }
24
+ export interface AppGraphResponse {
25
+ readonly name: string;
26
+ readonly teams: readonly AppGraphTeam[];
27
+ readonly router: AppGraphRouter;
28
+ readonly channels: readonly string[];
29
+ readonly triggers: readonly string[];
30
+ readonly hasKnowledge: boolean;
31
+ readonly hasEval: boolean;
32
+ readonly hasSafety: boolean;
33
+ }
34
+ export interface EvalExperimentSummary {
35
+ readonly name: string;
36
+ readonly dataset?: string;
37
+ readonly scorers: readonly string[];
38
+ }
39
+ //# sourceMappingURL=dev-routes-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-routes-types.d.ts","sourceRoot":"","sources":["../../src/gateway/dev-routes-types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC"}
@@ -0,0 +1,3 @@
1
+ // Response types for Studio dev API endpoints
2
+ export {};
3
+ //# sourceMappingURL=dev-routes-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-routes-types.js","sourceRoot":"","sources":["../../src/gateway/dev-routes-types.ts"],"names":[],"mappings":"AAAA,8CAA8C"}
@@ -0,0 +1,53 @@
1
+ import { Hono } from "hono";
2
+ import type { EventBus, CostSummary } from "@kilnai/core";
3
+ import type { AppGraphResponse, EvalExperimentSummary } from "./dev-routes-types.js";
4
+ export interface DevRoutesConfig {
5
+ readonly getEventBus?: () => EventBus | undefined;
6
+ readonly getPhaseState?: () => Record<string, unknown>;
7
+ readonly getMemorySnapshot?: () => Record<string, unknown>;
8
+ readonly getCostSummary?: () => CostSummary;
9
+ readonly getAppNames?: () => string[];
10
+ readonly getTriggers?: () => {
11
+ appName: string;
12
+ name: string;
13
+ type: string;
14
+ enabled: boolean;
15
+ }[];
16
+ readonly getSafetyMetrics?: () => Record<string, unknown>;
17
+ readonly getAppGraph?: () => AppGraphResponse | undefined;
18
+ readonly getYamlContent?: () => string | undefined;
19
+ readonly putYamlContent?: (content: string) => {
20
+ ok: boolean;
21
+ errors?: string[];
22
+ };
23
+ readonly getMemoryByScope?: (scope: string, query?: string, tags?: string) => Record<string, unknown>[] | Promise<Record<string, unknown>[]>;
24
+ readonly createMemoryEntry?: (entry: Record<string, unknown>) => {
25
+ id: string;
26
+ } | Promise<{
27
+ id: string;
28
+ }>;
29
+ readonly deleteMemoryEntry?: (id: string) => boolean | Promise<boolean>;
30
+ readonly getEvalExperiments?: () => EvalExperimentSummary[];
31
+ readonly approvePhase?: (sessionId?: string) => {
32
+ ok: boolean;
33
+ error?: string;
34
+ };
35
+ readonly rejectPhase?: (reason: string, sessionId?: string) => {
36
+ ok: boolean;
37
+ error?: string;
38
+ };
39
+ readonly startRun?: (task: string) => {
40
+ sessionId: string;
41
+ } | {
42
+ error: string;
43
+ };
44
+ readonly getRunStatus?: () => {
45
+ sessionId: string | null;
46
+ status: string;
47
+ phase: string | null;
48
+ task: string | null;
49
+ };
50
+ readonly issueToken?: (userId: string) => string;
51
+ }
52
+ export declare function createDevRoutes(config: DevRoutesConfig): Hono;
53
+ //# sourceMappingURL=dev-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-routes.d.ts","sourceRoot":"","sources":["../../src/gateway/dev-routes.ts"],"names":[],"mappings":"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"}