@xingular/harness 0.1.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (593) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +60 -0
  4. package/README.md +265 -71
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/dist/cli.js +14842 -9445
  7. package/dist/sdk/accounts/accounts.d.ts +165 -0
  8. package/dist/sdk/accounts/accounts.js +730 -0
  9. package/dist/sdk/accounts/choices.d.ts +23 -0
  10. package/dist/sdk/accounts/choices.js +62 -0
  11. package/dist/sdk/accounts/env.d.ts +78 -0
  12. package/dist/sdk/accounts/env.js +294 -0
  13. package/dist/sdk/accounts/secrets.d.ts +16 -0
  14. package/dist/sdk/accounts/secrets.js +40 -0
  15. package/dist/sdk/accounts/store.d.ts +114 -0
  16. package/dist/sdk/accounts/store.js +255 -0
  17. package/dist/sdk/browser/config.d.ts +16 -0
  18. package/dist/sdk/browser/config.js +22 -0
  19. package/dist/sdk/browser/diagnostics.d.ts +4 -0
  20. package/dist/sdk/browser/diagnostics.js +38 -0
  21. package/dist/sdk/browser/index.d.ts +17 -0
  22. package/dist/sdk/browser/index.js +65 -0
  23. package/dist/sdk/browser/network.d.ts +10 -0
  24. package/dist/sdk/browser/network.js +59 -0
  25. package/dist/sdk/browser/session.d.ts +84 -0
  26. package/dist/sdk/browser/session.js +192 -0
  27. package/dist/sdk/browser/tools.d.ts +8 -0
  28. package/dist/sdk/browser/tools.js +329 -0
  29. package/dist/sdk/capabilities/api.d.ts +22 -0
  30. package/dist/sdk/capabilities/api.js +54 -0
  31. package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
  32. package/dist/sdk/capabilities/runSnapshot.js +47 -0
  33. package/dist/sdk/capabilities/types.d.ts +29 -0
  34. package/dist/sdk/capabilities/types.js +1 -0
  35. package/dist/sdk/cli.d.ts +2 -0
  36. package/dist/sdk/cli.js +142 -0
  37. package/dist/sdk/core/bus.d.ts +23 -0
  38. package/dist/sdk/core/bus.js +76 -0
  39. package/dist/sdk/core/caller.d.ts +22 -0
  40. package/dist/sdk/core/caller.js +16 -0
  41. package/dist/sdk/core/changes.d.ts +15 -0
  42. package/dist/sdk/core/changes.js +15 -0
  43. package/dist/sdk/core/effort.d.ts +2 -0
  44. package/dist/sdk/core/effort.js +1 -0
  45. package/dist/sdk/core/env.d.ts +18 -0
  46. package/dist/sdk/core/env.js +8 -0
  47. package/dist/sdk/core/errors.d.ts +15 -0
  48. package/dist/sdk/core/errors.js +24 -0
  49. package/dist/sdk/core/frontmatter.d.ts +12 -0
  50. package/dist/sdk/core/frontmatter.js +50 -0
  51. package/dist/sdk/core/fs.d.ts +18 -0
  52. package/dist/sdk/core/fs.js +106 -0
  53. package/dist/sdk/core/index.d.ts +24 -0
  54. package/dist/sdk/core/index.js +187 -0
  55. package/dist/sdk/core/path.d.ts +7 -0
  56. package/dist/sdk/core/path.js +79 -0
  57. package/dist/sdk/core/projects.d.ts +18 -0
  58. package/dist/sdk/core/projects.js +67 -0
  59. package/dist/sdk/core/secrets.d.ts +2 -0
  60. package/dist/sdk/core/secrets.js +5 -0
  61. package/dist/sdk/core/text.d.ts +7 -0
  62. package/dist/sdk/core/text.js +40 -0
  63. package/dist/sdk/doctor/checks.d.ts +5 -0
  64. package/dist/sdk/doctor/checks.js +208 -0
  65. package/dist/sdk/doctor/probe.d.ts +4 -0
  66. package/dist/sdk/doctor/probe.js +92 -0
  67. package/dist/sdk/doctor/service.d.ts +23 -0
  68. package/dist/sdk/doctor/service.js +144 -0
  69. package/dist/sdk/doctor/types.d.ts +141 -0
  70. package/dist/sdk/doctor/types.js +29 -0
  71. package/dist/sdk/harness.d.ts +133 -0
  72. package/dist/sdk/harness.js +299 -0
  73. package/dist/sdk/history/lessonPrompt.d.ts +2 -0
  74. package/dist/sdk/history/lessonPrompt.js +15 -0
  75. package/dist/sdk/history/lessons.d.ts +52 -0
  76. package/dist/sdk/history/lessons.js +173 -0
  77. package/dist/sdk/history/recall.d.ts +68 -0
  78. package/dist/sdk/history/recall.js +199 -0
  79. package/dist/sdk/history/trajectory.d.ts +7 -0
  80. package/dist/sdk/history/trajectory.js +216 -0
  81. package/dist/sdk/hub/catalog.json +123 -0
  82. package/dist/sdk/hub/cli.d.ts +7 -0
  83. package/dist/sdk/hub/cli.js +81 -0
  84. package/dist/sdk/hub/hub.d.ts +74 -0
  85. package/dist/sdk/hub/hub.js +474 -0
  86. package/dist/sdk/hub/schema.d.ts +280 -0
  87. package/dist/sdk/hub/schema.js +78 -0
  88. package/dist/sdk/index.d.ts +63 -0
  89. package/dist/sdk/index.js +48 -0
  90. package/dist/sdk/mcp/connections.d.ts +83 -0
  91. package/dist/sdk/mcp/connections.js +669 -0
  92. package/dist/sdk/mcp/manager.d.ts +26 -0
  93. package/dist/sdk/mcp/manager.js +124 -0
  94. package/dist/sdk/mcp/oauth.d.ts +35 -0
  95. package/dist/sdk/mcp/oauth.js +171 -0
  96. package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
  97. package/dist/sdk/mcp/scopeMigration.js +198 -0
  98. package/dist/sdk/mcp/service.d.ts +160 -0
  99. package/dist/sdk/mcp/service.js +510 -0
  100. package/dist/sdk/mcp/types.d.ts +131 -0
  101. package/dist/sdk/mcp/types.js +49 -0
  102. package/dist/sdk/pi/runtime.d.ts +13 -0
  103. package/dist/sdk/pi/runtime.js +31 -0
  104. package/dist/sdk/plugins/api.d.ts +66 -0
  105. package/dist/sdk/plugins/api.js +155 -0
  106. package/dist/sdk/plugins/attachments.d.ts +46 -0
  107. package/dist/sdk/plugins/attachments.js +111 -0
  108. package/dist/sdk/plugins/builtin.d.ts +6 -0
  109. package/dist/sdk/plugins/builtin.js +68 -0
  110. package/dist/sdk/plugins/catalogue.d.ts +29 -0
  111. package/dist/sdk/plugins/catalogue.js +196 -0
  112. package/dist/sdk/plugins/cli.d.ts +13 -0
  113. package/dist/sdk/plugins/cli.js +187 -0
  114. package/dist/sdk/plugins/discover.d.ts +42 -0
  115. package/dist/sdk/plugins/discover.js +115 -0
  116. package/dist/sdk/plugins/firstParty.d.ts +50 -0
  117. package/dist/sdk/plugins/firstParty.js +113 -0
  118. package/dist/sdk/plugins/hooks.d.ts +94 -0
  119. package/dist/sdk/plugins/hooks.js +162 -0
  120. package/dist/sdk/plugins/identity.d.ts +19 -0
  121. package/dist/sdk/plugins/identity.js +48 -0
  122. package/dist/sdk/plugins/install.d.ts +20 -0
  123. package/dist/sdk/plugins/install.js +110 -0
  124. package/dist/sdk/plugins/inventory.d.ts +22 -0
  125. package/dist/sdk/plugins/inventory.js +110 -0
  126. package/dist/sdk/plugins/manifest.d.ts +13 -0
  127. package/dist/sdk/plugins/manifest.js +56 -0
  128. package/dist/sdk/plugins/plugins.d.ts +104 -0
  129. package/dist/sdk/plugins/plugins.js +164 -0
  130. package/dist/sdk/plugins/runtime.d.ts +9 -0
  131. package/dist/sdk/plugins/runtime.js +95 -0
  132. package/dist/sdk/plugins/trust.d.ts +44 -0
  133. package/dist/sdk/plugins/trust.js +120 -0
  134. package/dist/sdk/plugins/types.d.ts +159 -0
  135. package/dist/sdk/plugins/types.js +7 -0
  136. package/dist/sdk/prompt/compile.d.ts +174 -0
  137. package/dist/sdk/prompt/compile.js +396 -0
  138. package/dist/sdk/refine/cli.d.ts +4 -0
  139. package/dist/sdk/refine/cli.js +186 -0
  140. package/dist/sdk/refine/demo.d.ts +21 -0
  141. package/dist/sdk/refine/demo.js +114 -0
  142. package/dist/sdk/refine/evidence.d.ts +55 -0
  143. package/dist/sdk/refine/evidence.js +330 -0
  144. package/dist/sdk/refine/host.d.ts +51 -0
  145. package/dist/sdk/refine/host.js +76 -0
  146. package/dist/sdk/refine/ledger.d.ts +48 -0
  147. package/dist/sdk/refine/ledger.js +76 -0
  148. package/dist/sdk/refine/library.d.ts +55 -0
  149. package/dist/sdk/refine/library.js +177 -0
  150. package/dist/sdk/refine/pi.d.ts +72 -0
  151. package/dist/sdk/refine/pi.js +248 -0
  152. package/dist/sdk/refine/prompts.d.ts +45 -0
  153. package/dist/sdk/refine/prompts.js +390 -0
  154. package/dist/sdk/refine/recursion.d.ts +113 -0
  155. package/dist/sdk/refine/recursion.js +258 -0
  156. package/dist/sdk/refine/runner.d.ts +81 -0
  157. package/dist/sdk/refine/runner.js +150 -0
  158. package/dist/sdk/refine/selection.d.ts +57 -0
  159. package/dist/sdk/refine/selection.js +251 -0
  160. package/dist/sdk/refine/service.d.ts +84 -0
  161. package/dist/sdk/refine/service.js +165 -0
  162. package/dist/sdk/refine/suite.d.ts +67 -0
  163. package/dist/sdk/refine/suite.js +174 -0
  164. package/dist/sdk/refine/trajectory.d.ts +9 -0
  165. package/dist/sdk/refine/trajectory.js +68 -0
  166. package/dist/sdk/refine/types.d.ts +77 -0
  167. package/dist/sdk/refine/types.js +10 -0
  168. package/dist/sdk/server/methods.d.ts +3 -0
  169. package/dist/sdk/server/methods.js +370 -0
  170. package/dist/sdk/server/remote.d.ts +19 -0
  171. package/dist/sdk/server/remote.js +84 -0
  172. package/dist/sdk/server/rpc.d.ts +20 -0
  173. package/dist/sdk/server/rpc.js +102 -0
  174. package/dist/sdk/server/serve.d.ts +10 -0
  175. package/dist/sdk/server/serve.js +18 -0
  176. package/dist/sdk/sessions/approvals.d.ts +47 -0
  177. package/dist/sdk/sessions/approvals.js +119 -0
  178. package/dist/sdk/sessions/continuation.d.ts +48 -0
  179. package/dist/sdk/sessions/continuation.js +85 -0
  180. package/dist/sdk/sessions/contracts.d.ts +534 -0
  181. package/dist/sdk/sessions/contracts.js +299 -0
  182. package/dist/sdk/sessions/extensionUi.d.ts +19 -0
  183. package/dist/sdk/sessions/extensionUi.js +64 -0
  184. package/dist/sdk/sessions/history.d.ts +16 -0
  185. package/dist/sdk/sessions/history.js +68 -0
  186. package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
  187. package/dist/sdk/sessions/lineageJoin.js +61 -0
  188. package/dist/sdk/sessions/planMode.d.ts +36 -0
  189. package/dist/sdk/sessions/planMode.js +84 -0
  190. package/dist/sdk/sessions/policy.d.ts +43 -0
  191. package/dist/sdk/sessions/policy.js +1 -0
  192. package/dist/sdk/sessions/pricing.d.ts +34 -0
  193. package/dist/sdk/sessions/pricing.js +40 -0
  194. package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
  195. package/dist/sdk/sessions/reasoningSummaries.js +61 -0
  196. package/dist/sdk/sessions/registry.d.ts +102 -0
  197. package/dist/sdk/sessions/registry.js +383 -0
  198. package/dist/sdk/sessions/runIndex.d.ts +21 -0
  199. package/dist/sdk/sessions/runIndex.js +65 -0
  200. package/dist/sdk/sessions/runStore.d.ts +66 -0
  201. package/dist/sdk/sessions/runStore.js +335 -0
  202. package/dist/sdk/sessions/runner.d.ts +213 -0
  203. package/dist/sdk/sessions/runner.js +589 -0
  204. package/dist/sdk/sessions/sessions.d.ts +140 -0
  205. package/dist/sdk/sessions/sessions.js +394 -0
  206. package/dist/sdk/sessions/subagentService.d.ts +41 -0
  207. package/dist/sdk/sessions/subagentService.js +247 -0
  208. package/dist/sdk/sessions/subagents.d.ts +50 -0
  209. package/dist/sdk/sessions/subagents.js +68 -0
  210. package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
  211. package/dist/sdk/terminal/accountsMenu.js +392 -0
  212. package/dist/sdk/terminal/cli.d.ts +20 -0
  213. package/dist/sdk/terminal/cli.js +121 -0
  214. package/dist/sdk/terminal/client.d.ts +15 -0
  215. package/dist/sdk/terminal/client.js +126 -0
  216. package/dist/sdk/terminal/control.d.ts +4 -0
  217. package/dist/sdk/terminal/control.js +25 -0
  218. package/dist/sdk/terminal/controller.d.ts +72 -0
  219. package/dist/sdk/terminal/controller.js +351 -0
  220. package/dist/sdk/terminal/hubMenu.d.ts +10 -0
  221. package/dist/sdk/terminal/hubMenu.js +34 -0
  222. package/dist/sdk/terminal/launch.d.ts +5 -0
  223. package/dist/sdk/terminal/launch.js +27 -0
  224. package/dist/sdk/terminal/logs.d.ts +14 -0
  225. package/dist/sdk/terminal/logs.js +59 -0
  226. package/dist/sdk/terminal/piExtension.d.ts +6 -0
  227. package/dist/sdk/terminal/piExtension.js +392 -0
  228. package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
  229. package/dist/sdk/terminal/pluginMenu.js +101 -0
  230. package/dist/sdk/terminal/socket.d.ts +70 -0
  231. package/dist/sdk/terminal/socket.js +256 -0
  232. package/dist/sdk/terminal/standalone.d.ts +18 -0
  233. package/dist/sdk/terminal/standalone.js +146 -0
  234. package/dist/sdk/terminal/terminals.d.ts +176 -0
  235. package/dist/sdk/terminal/terminals.js +767 -0
  236. package/dist/sdk/terminal/trajectory.d.ts +10 -0
  237. package/dist/sdk/terminal/trajectory.js +30 -0
  238. package/dist/sdk/terminal/tui/chrome.d.ts +64 -0
  239. package/dist/sdk/terminal/tui/chrome.js +169 -0
  240. package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
  241. package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
  242. package/dist/sdk/terminal/tui/commandPages.d.ts +7 -0
  243. package/dist/sdk/terminal/tui/commandPages.js +63 -0
  244. package/dist/sdk/terminal/tui/commands.d.ts +42 -0
  245. package/dist/sdk/terminal/tui/commands.js +276 -0
  246. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
  247. package/dist/sdk/terminal/tui/dialogGeometry.js +50 -0
  248. package/dist/sdk/terminal/tui/dialogs.d.ts +75 -0
  249. package/dist/sdk/terminal/tui/dialogs.js +363 -0
  250. package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
  251. package/dist/sdk/terminal/tui/keybindings.js +49 -0
  252. package/dist/sdk/terminal/tui/list.d.ts +73 -0
  253. package/dist/sdk/terminal/tui/list.js +196 -0
  254. package/dist/sdk/terminal/tui/modeChoices.d.ts +42 -0
  255. package/dist/sdk/terminal/tui/modeChoices.js +70 -0
  256. package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
  257. package/dist/sdk/terminal/tui/modelPicker.js +155 -0
  258. package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
  259. package/dist/sdk/terminal/tui/mouse.js +3 -0
  260. package/dist/sdk/terminal/tui/page.d.ts +14 -0
  261. package/dist/sdk/terminal/tui/page.js +1 -0
  262. package/dist/sdk/terminal/tui/pageOverlay.d.ts +27 -0
  263. package/dist/sdk/terminal/tui/pageOverlay.js +145 -0
  264. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +54 -0
  265. package/dist/sdk/terminal/tui/pages/accountsPage.js +181 -0
  266. package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
  267. package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
  268. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +37 -0
  269. package/dist/sdk/terminal/tui/pages/doctorPage.js +145 -0
  270. package/dist/sdk/terminal/tui/pages/hubPage.d.ts +39 -0
  271. package/dist/sdk/terminal/tui/pages/hubPage.js +128 -0
  272. package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
  273. package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
  274. package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
  275. package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
  276. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +57 -0
  277. package/dist/sdk/terminal/tui/pages/pluginsPage.js +243 -0
  278. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +55 -0
  279. package/dist/sdk/terminal/tui/pages/settingsPage.js +88 -0
  280. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +58 -0
  281. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +377 -0
  282. package/dist/sdk/terminal/tui/piAdapter.d.ts +18 -0
  283. package/dist/sdk/terminal/tui/piAdapter.js +48 -0
  284. package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
  285. package/dist/sdk/terminal/tui/planMode.js +2 -0
  286. package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
  287. package/dist/sdk/terminal/tui/questionPicker.js +150 -0
  288. package/dist/sdk/terminal/tui/questions.d.ts +19 -0
  289. package/dist/sdk/terminal/tui/questions.js +42 -0
  290. package/dist/sdk/terminal/tui/runtime.d.ts +114 -0
  291. package/dist/sdk/terminal/tui/runtime.js +441 -0
  292. package/dist/sdk/terminal/tui/search.d.ts +22 -0
  293. package/dist/sdk/terminal/tui/search.js +60 -0
  294. package/dist/sdk/terminal/tui/selection.d.ts +16 -0
  295. package/dist/sdk/terminal/tui/selection.js +16 -0
  296. package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
  297. package/dist/sdk/terminal/tui/sessionUi.js +30 -0
  298. package/dist/sdk/terminal/tui/settingsModel.d.ts +12 -0
  299. package/dist/sdk/terminal/tui/settingsModel.js +84 -0
  300. package/dist/sdk/terminal/tui/sideQuestion.d.ts +53 -0
  301. package/dist/sdk/terminal/tui/sideQuestion.js +197 -0
  302. package/dist/sdk/terminal/tui/skillInvocation.d.ts +9 -0
  303. package/dist/sdk/terminal/tui/skillInvocation.js +43 -0
  304. package/dist/sdk/terminal/tui/status.d.ts +18 -0
  305. package/dist/sdk/terminal/tui/status.js +67 -0
  306. package/dist/sdk/terminal/tui/theme.d.ts +45 -0
  307. package/dist/sdk/terminal/tui/theme.js +176 -0
  308. package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
  309. package/dist/sdk/terminal/tui/treeModel.js +483 -0
  310. package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
  311. package/dist/sdk/terminal/tui/treePicker.js +251 -0
  312. package/dist/sdk/terminal/tui/ui.d.ts +47 -0
  313. package/dist/sdk/terminal/tui/ui.js +148 -0
  314. package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
  315. package/dist/sdk/terminal/tui/workingStatus.js +229 -0
  316. package/dist/sdk/tools/askUser.d.ts +6 -0
  317. package/dist/sdk/tools/askUser.js +74 -0
  318. package/dist/sdk/tools/checklist.d.ts +9 -0
  319. package/dist/sdk/tools/checklist.js +54 -0
  320. package/dist/sdk/tools/definitions.d.ts +30 -0
  321. package/dist/sdk/tools/definitions.js +117 -0
  322. package/dist/sdk/tools/dispatch.d.ts +16 -0
  323. package/dist/sdk/tools/dispatch.js +67 -0
  324. package/dist/sdk/tools/harnessTools.d.ts +6 -0
  325. package/dist/sdk/tools/harnessTools.js +20 -0
  326. package/dist/sdk/tools/sessionName.d.ts +7 -0
  327. package/dist/sdk/tools/sessionName.js +31 -0
  328. package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
  329. package/dist/sdk/tools/spawnSubagent.js +49 -0
  330. package/dist/sdk/tools/types.d.ts +48 -0
  331. package/dist/sdk/tools/types.js +1 -0
  332. package/dist/sdk/variant/components.d.ts +34 -0
  333. package/dist/sdk/variant/components.js +230 -0
  334. package/dist/sdk/variant/materialise.d.ts +66 -0
  335. package/dist/sdk/variant/materialise.js +81 -0
  336. package/dist/sdk/variant/migrate.d.ts +4 -0
  337. package/dist/sdk/variant/migrate.js +41 -0
  338. package/dist/sdk/variant/seed.d.ts +20 -0
  339. package/dist/sdk/variant/seed.js +116 -0
  340. package/dist/sdk/variant/store.d.ts +82 -0
  341. package/dist/sdk/variant/store.js +151 -0
  342. package/dist/sdk/variant/surface.d.ts +56 -0
  343. package/dist/sdk/variant/surface.js +81 -0
  344. package/dist/sdk/variant/trust.d.ts +27 -0
  345. package/dist/sdk/variant/trust.js +64 -0
  346. package/dist/sdk/variant/variant.d.ts +71 -0
  347. package/dist/sdk/variant/variant.js +331 -0
  348. package/dist/sdk/web/markdown.d.ts +10 -0
  349. package/dist/sdk/web/markdown.js +66 -0
  350. package/dist/sdk/web/safeRequest.d.ts +34 -0
  351. package/dist/sdk/web/safeRequest.js +175 -0
  352. package/dist/sdk/web/search.d.ts +53 -0
  353. package/dist/sdk/web/search.js +168 -0
  354. package/dist/sdk/web/text.d.ts +2 -0
  355. package/dist/sdk/web/text.js +7 -0
  356. package/dist/sdk/web/tools.d.ts +22 -0
  357. package/dist/sdk/web/tools.js +195 -0
  358. package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
  359. package/dist/sdk/wiki/notes.d.ts +68 -0
  360. package/dist/sdk/wiki/notes.js +297 -0
  361. package/dist/sdk/world/actions.d.ts +23 -0
  362. package/dist/sdk/world/actions.js +31 -0
  363. package/dist/sdk/world/cli.d.ts +12 -0
  364. package/dist/sdk/world/cli.js +166 -0
  365. package/dist/sdk/world/images.d.ts +20 -0
  366. package/dist/sdk/world/images.js +48 -0
  367. package/dist/sdk/world/untrusted.d.ts +12 -0
  368. package/dist/sdk/world/untrusted.js +20 -0
  369. package/dist/sdk/world/world.d.ts +65 -0
  370. package/dist/sdk/world/world.js +80 -0
  371. package/dist/terminal-opentui.js +13612 -0
  372. package/dist/terminal-pi.js +1170 -62
  373. package/docs/README.md +34 -0
  374. package/docs/architecture/00-overview.md +159 -0
  375. package/docs/architecture/01-extension-points.md +78 -0
  376. package/docs/architecture/02-sessions-and-runs.md +146 -0
  377. package/docs/architecture/03-variants.md +95 -0
  378. package/docs/architecture/04-prompt.md +102 -0
  379. package/docs/architecture/05-refinement.md +107 -0
  380. package/docs/architecture/06-plugins-and-capabilities.md +93 -0
  381. package/docs/architecture/07-tools-and-gate.md +88 -0
  382. package/docs/architecture/08-memory-and-history.md +94 -0
  383. package/docs/architecture/09-accounts-and-connectors.md +90 -0
  384. package/docs/architecture/10-server-protocol.md +84 -0
  385. package/docs/architecture/11-terminal.md +81 -0
  386. package/docs/architecture/12-storage.md +61 -0
  387. package/docs/architecture/13-world-tools.md +23 -0
  388. package/docs/architecture/README.md +114 -0
  389. package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
  390. package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
  391. package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
  392. package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
  393. package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
  394. package/docs/architecture/proposals/PROP-0006-run-checklist.md +68 -0
  395. package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
  396. package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
  397. package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
  398. package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
  399. package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
  400. package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
  401. package/docs/architecture/proposals/README.md +76 -0
  402. package/docs/decisions/ADR-0001-owned-terminal.md +87 -0
  403. package/docs/decisions/ADR-0002-native-subagent-lifecycle.md +49 -0
  404. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
  405. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
  406. package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
  407. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  408. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  409. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +38 -0
  410. package/docs/decisions/ADR-0009-xharness-command.md +38 -0
  411. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  412. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  413. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  414. package/docs/decisions/ADR-0013-doctor.md +27 -0
  415. package/docs/decisions/ADR-0014-public-release-baseline.md +21 -0
  416. package/docs/doctor.md +74 -0
  417. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  418. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  419. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  420. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  421. package/docs/features/README.md +20 -0
  422. package/docs/features/automations/README.md +41 -0
  423. package/docs/features/cores/README.md +39 -0
  424. package/docs/features/google-harness2/README.md +52 -0
  425. package/docs/features/integrations/README.md +40 -0
  426. package/docs/features/interfaces/README.md +29 -0
  427. package/docs/features/memory/README.md +28 -0
  428. package/docs/releases/1.0.0.md +40 -0
  429. package/docs/releases/README.md +36 -0
  430. package/docs/study/00-index.md +78 -0
  431. package/docs/study/arms/00-matrix.md +20 -0
  432. package/docs/study/arms/01-system-prompt.md +211 -0
  433. package/docs/study/arms/02-tools.md +79 -0
  434. package/docs/study/arms/03-subagents.md +90 -0
  435. package/docs/study/arms/04-skills.md +75 -0
  436. package/docs/study/arms/05-context-management.md +90 -0
  437. package/docs/study/arms/06-memory.md +90 -0
  438. package/docs/study/arms/07-governance.md +71 -0
  439. package/docs/study/arms/08-execution.md +69 -0
  440. package/docs/study/arms/09-observability.md +60 -0
  441. package/docs/study/arms/10-refinement.md +110 -0
  442. package/docs/study/btw-comparison.md +37 -0
  443. package/docs/study/feature-gap-review.md +42 -0
  444. package/docs/study/insights.md +123 -0
  445. package/docs/study/roadmap.md +72 -0
  446. package/docs/study/sources/claude-code.md +44 -0
  447. package/docs/study/sources/deepseek-harness.md +102 -0
  448. package/docs/study/sources/harness2.md +50 -0
  449. package/docs/study/sources/kimi-cli.md +42 -0
  450. package/docs/study/sources/omp.md +93 -0
  451. package/docs/study/sources/opencode.md +43 -0
  452. package/docs/study/sources/openhands.md +46 -0
  453. package/docs/study/sources/smolagents.md +40 -0
  454. package/docs/study/sources/swe-agent.md +34 -0
  455. package/docs/system-prompt-design.md +196 -0
  456. package/docs/terminal-tui.md +671 -0
  457. package/package.json +48 -12
  458. package/src/accounts/accounts.test.ts +0 -223
  459. package/src/accounts/accounts.ts +0 -522
  460. package/src/accounts/env.test.ts +0 -95
  461. package/src/accounts/env.ts +0 -338
  462. package/src/accounts/secrets.ts +0 -50
  463. package/src/accounts/store.ts +0 -338
  464. package/src/capabilities/api.ts +0 -75
  465. package/src/capabilities/runSnapshot.ts +0 -59
  466. package/src/capabilities/types.ts +0 -34
  467. package/src/cli.ts +0 -114
  468. package/src/core/bus.ts +0 -34
  469. package/src/core/changes.ts +0 -33
  470. package/src/core/env.ts +0 -27
  471. package/src/core/errors.ts +0 -32
  472. package/src/core/frontmatter.ts +0 -47
  473. package/src/core/fs.test.ts +0 -38
  474. package/src/core/fs.ts +0 -92
  475. package/src/core/index.ts +0 -193
  476. package/src/core/path.test.ts +0 -14
  477. package/src/core/path.ts +0 -79
  478. package/src/core/projects.ts +0 -90
  479. package/src/core/text.ts +0 -39
  480. package/src/harness.ts +0 -299
  481. package/src/index.ts +0 -70
  482. package/src/mcp/connections.ts +0 -614
  483. package/src/mcp/manager.ts +0 -130
  484. package/src/mcp/oauth.ts +0 -195
  485. package/src/mcp/scopeMigration.test.ts +0 -79
  486. package/src/mcp/scopeMigration.ts +0 -204
  487. package/src/mcp/service.test.ts +0 -376
  488. package/src/mcp/service.ts +0 -549
  489. package/src/mcp/types.ts +0 -108
  490. package/src/memory/api.test.ts +0 -82
  491. package/src/memory/api.ts +0 -289
  492. package/src/memory/blocks.test.ts +0 -78
  493. package/src/memory/blocks.ts +0 -406
  494. package/src/memory/caller.ts +0 -57
  495. package/src/memory/dispatch.ts +0 -59
  496. package/src/memory/facts.test.ts +0 -41
  497. package/src/memory/facts.ts +0 -248
  498. package/src/memory/graph.ts +0 -103
  499. package/src/memory/health.test.ts +0 -130
  500. package/src/memory/health.ts +0 -74
  501. package/src/memory/maintainer.ts +0 -272
  502. package/src/memory/maintenance.test.ts +0 -176
  503. package/src/memory/maintenance.ts +0 -330
  504. package/src/memory/migrate.ts +0 -79
  505. package/src/memory/operations.ts +0 -138
  506. package/src/memory/proposals.test.ts +0 -168
  507. package/src/memory/proposals.ts +0 -576
  508. package/src/memory/recall.test.ts +0 -104
  509. package/src/memory/recall.ts +0 -271
  510. package/src/memory/references.ts +0 -77
  511. package/src/memory/runContext.ts +0 -93
  512. package/src/memory/secrets.ts +0 -6
  513. package/src/memory/store.test.ts +0 -66
  514. package/src/memory/store.ts +0 -385
  515. package/src/memory/wiki.test.ts +0 -47
  516. package/src/memory/wiki.ts +0 -422
  517. package/src/memory/wikiIndex.test.ts +0 -88
  518. package/src/memory/wikiIndex.ts +0 -116
  519. package/src/plugins/api.ts +0 -181
  520. package/src/plugins/attachments.test.ts +0 -84
  521. package/src/plugins/attachments.ts +0 -141
  522. package/src/plugins/builtin.ts +0 -82
  523. package/src/plugins/catalogue.test.ts +0 -254
  524. package/src/plugins/catalogue.ts +0 -251
  525. package/src/plugins/cli.ts +0 -184
  526. package/src/plugins/discover.ts +0 -151
  527. package/src/plugins/firstParty.test.ts +0 -143
  528. package/src/plugins/firstParty.ts +0 -129
  529. package/src/plugins/hooks.test.ts +0 -250
  530. package/src/plugins/hooks.ts +0 -239
  531. package/src/plugins/identity.ts +0 -37
  532. package/src/plugins/install.test.ts +0 -107
  533. package/src/plugins/install.ts +0 -106
  534. package/src/plugins/inventory.ts +0 -123
  535. package/src/plugins/manifest.ts +0 -76
  536. package/src/plugins/plugins.test.ts +0 -205
  537. package/src/plugins/plugins.ts +0 -189
  538. package/src/plugins/proposal.ts +0 -121
  539. package/src/plugins/runtime.test.ts +0 -40
  540. package/src/plugins/runtime.ts +0 -82
  541. package/src/plugins/trust.ts +0 -142
  542. package/src/plugins/types.ts +0 -149
  543. package/src/prompt/compile.test.ts +0 -261
  544. package/src/prompt/compile.ts +0 -732
  545. package/src/server/methods.ts +0 -314
  546. package/src/server/remote.ts +0 -77
  547. package/src/server/rpc.ts +0 -116
  548. package/src/server/serve.ts +0 -28
  549. package/src/server/server.test.ts +0 -174
  550. package/src/sessions/approvals.ts +0 -118
  551. package/src/sessions/contracts.ts +0 -310
  552. package/src/sessions/conversation.test.ts +0 -150
  553. package/src/sessions/extensionSession.test.ts +0 -74
  554. package/src/sessions/extensionUi.test.ts +0 -65
  555. package/src/sessions/extensionUi.ts +0 -102
  556. package/src/sessions/history.ts +0 -51
  557. package/src/sessions/lineageJoin.ts +0 -75
  558. package/src/sessions/policy.ts +0 -32
  559. package/src/sessions/pricing.ts +0 -60
  560. package/src/sessions/reasoningSummaries.ts +0 -59
  561. package/src/sessions/registry.ts +0 -294
  562. package/src/sessions/runIndex.ts +0 -99
  563. package/src/sessions/runStore.test.ts +0 -152
  564. package/src/sessions/runStore.ts +0 -332
  565. package/src/sessions/runner.ts +0 -569
  566. package/src/sessions/runtimeResources.test.ts +0 -61
  567. package/src/sessions/sessions.test.ts +0 -455
  568. package/src/sessions/sessions.ts +0 -295
  569. package/src/skills/registry.test.ts +0 -104
  570. package/src/skills/registry.ts +0 -407
  571. package/src/terminal/cli.ts +0 -149
  572. package/src/terminal/client.ts +0 -74
  573. package/src/terminal/controller.ts +0 -227
  574. package/src/terminal/launch.test.ts +0 -34
  575. package/src/terminal/launch.ts +0 -88
  576. package/src/terminal/piExtension.ts +0 -210
  577. package/src/terminal/pluginControl.test.ts +0 -146
  578. package/src/terminal/pluginMenu.ts +0 -112
  579. package/src/terminal/socket.test.ts +0 -71
  580. package/src/terminal/socket.ts +0 -221
  581. package/src/terminal/standalone.test.ts +0 -130
  582. package/src/terminal/standalone.ts +0 -144
  583. package/src/terminal/terminal.test.ts +0 -330
  584. package/src/terminal/terminals.ts +0 -443
  585. package/src/tools/askUser.ts +0 -45
  586. package/src/tools/definitions.ts +0 -187
  587. package/src/tools/memoryTools.ts +0 -22
  588. package/src/tools/pluginPropose.ts +0 -41
  589. package/src/tools/types.ts +0 -39
  590. package/src/web/safeRequest.ts +0 -171
  591. package/src/web/text.ts +0 -53
  592. package/src/web/tools.ts +0 -134
  593. package/src/web/web.test.ts +0 -141
@@ -0,0 +1,47 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { HarnessError, invalid } from "../core/errors.js";
4
+ import { readJson, safeId, writeJson } from "../core/fs.js";
5
+ const path = (root, runId) => join(root, 'runs', safeId(runId), 'capabilities.json');
6
+ function strings(value) {
7
+ return Array.isArray(value) ? [...new Set(value.filter((item) => typeof item === 'string' && item.length > 0))] : [];
8
+ }
9
+ export function capabilitySet(value) {
10
+ if (!value || typeof value !== 'object' || value.version !== 1)
11
+ throw invalid('A capability set must use version 1.');
12
+ const record = value;
13
+ return { version: 1, tools: strings(record.tools), connectors: strings(record.connectors), contributions: strings(record.contributions) };
14
+ }
15
+ /** Writes a run's capability set once. A resumed or duplicate launch cannot replace it. */
16
+ export function freezeRun(root, runId, caller, set) {
17
+ const target = path(root, runId);
18
+ const snapshot = {
19
+ version: 1,
20
+ caller: { agentId: caller.agentId ?? null, projectId: caller.projectId ?? null },
21
+ tools: strings(set.tools),
22
+ connectors: strings(set.connectors),
23
+ contributions: strings(set.contributions)
24
+ };
25
+ const existing = existsSync(target) ? readJson(target) : null;
26
+ if (existing) {
27
+ if (JSON.stringify(existing) !== JSON.stringify(snapshot))
28
+ throw new HarnessError('capabilities_frozen', 'This run already has a different frozen capability set.');
29
+ return existing;
30
+ }
31
+ writeJson(target, snapshot);
32
+ return snapshot;
33
+ }
34
+ export function loadRun(root, runId) {
35
+ const stored = readJson(path(root, runId));
36
+ if (!stored || typeof stored !== 'object' || stored.version !== 1)
37
+ return null;
38
+ const record = stored;
39
+ const caller = record.caller && typeof record.caller === 'object' ? record.caller : {};
40
+ return {
41
+ version: 1,
42
+ caller: { agentId: typeof caller.agentId === 'string' ? caller.agentId : null, projectId: typeof caller.projectId === 'string' ? caller.projectId : null },
43
+ tools: strings(record.tools),
44
+ connectors: strings(record.connectors),
45
+ contributions: strings(record.contributions)
46
+ };
47
+ }
@@ -0,0 +1,29 @@
1
+ import type { AttachScope, Attachment } from "../plugins/attachments.js";
2
+ import type { ContributionKind, ContributionState, PluginSource } from "../plugins/types.js";
3
+ export type CapabilityKind = ContributionKind | 'plugin';
4
+ /** One item the caller can switch on or off, or that a plugin makes available. */
5
+ export interface Capability {
6
+ id: string;
7
+ pluginId: string;
8
+ kind: CapabilityKind;
9
+ name: string;
10
+ description: string;
11
+ source: PluginSource;
12
+ state: ContributionState;
13
+ attachment: Attachment | null;
14
+ }
15
+ export interface CapabilityCatalogue {
16
+ plugins: import("../plugins/types.js").Plugin[];
17
+ capabilities: Capability[];
18
+ }
19
+ /** The callable capabilities a run starts with. Permission to run still goes through the gate. */
20
+ export interface CapabilitySet {
21
+ version: 1;
22
+ tools: string[];
23
+ connectors: string[];
24
+ contributions: string[];
25
+ }
26
+ export interface CapabilityScope extends AttachScope {
27
+ cwd?: string | null;
28
+ accountId?: string | null;
29
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+ // The `xharness` command.
3
+ //
4
+ // xharness serve --state <dir> [--data <dir>] [--name <product>] [--builtins <dir>]…
5
+ // [--host-secrets] [--host-policy] [--host-tools] [--host-directory]
6
+ // Serves the harness to a host process over stdin/stdout (newline-delimited JSON).
7
+ // xharness wiki <command> Project notes, skills and history, from inside a terminal session.
8
+ // xharness refine <command> Refine a variant from evidence (refine demo needs no model).
9
+ // xharness mcp <command> Connected apps, from inside a terminal session.
10
+ // xharness plugins <command> List, install, switch and trust plugins.
11
+ // xharness web <command> Search keys for web_search.
12
+ // xharness browser <command> How the agent's browser runs.
13
+ import { resolve } from 'node:path';
14
+ import manifest from "../../package.json" with { type: 'json' };
15
+ import { log } from "./core/bus.js";
16
+ import { createHarness } from "./harness.js";
17
+ import { runPluginsCli, terminalAsk } from "./plugins/cli.js";
18
+ import { runHubCli } from "./hub/cli.js";
19
+ import { runRefineCli } from "./refine/cli.js";
20
+ import { runBrowserCli, runWebCli } from "./world/cli.js";
21
+ import { remoteDirectory, remotePolicy, remoteSecrets, remoteTools } from "./server/remote.js";
22
+ import { RpcPeer, stdioTransport } from "./server/rpc.js";
23
+ import { attach } from "./server/serve.js";
24
+ import { runAppsCli, runWikiCli } from "./terminal/cli.js";
25
+ import { runStandaloneTerminal, standaloneArguments } from "./terminal/standalone.js";
26
+ const USAGE = `Usage: xharness [--data <dir>] [--state <dir>]
27
+ xharness <terminal | serve | wiki | mcp | plugins | hub | refine | web | browser> [arguments]
28
+
29
+ --version Print the package version
30
+ (no command) Start the interactive Harness terminal
31
+ terminal Start the interactive Harness terminal
32
+ serve --state <dir> [--data <dir>] [--name <product>] [--builtins <dir>]
33
+ [--host-secrets] [--host-policy] [--host-tools] [--host-directory]
34
+ Serve the harness over newline-delimited JSON
35
+ wiki <command> Wiki, skill and history commands for a terminal session
36
+ mcp <command> Connected-app commands for a terminal session
37
+ plugins <command> List, install, switch and trust plugins (plugins help)
38
+ hub <command> Browse and install curated items (hub help)
39
+ refine <command> Refine a harness from evidence (refine demo, refine run)
40
+ web <command> Search keys for the web tools (web help)
41
+ browser <command> How the agent's browser runs (browser help)
42
+
43
+ Standalone terminal options:
44
+ --data <dir> Data directory (installed default: ~/.xingular-harness/data;
45
+ npm run dev default: ~/.xingular-harness-dev/data)
46
+ --state <dir> State directory (installed default: ~/.xingular-harness/state;
47
+ npm run dev default: ~/.xingular-harness-dev/state)
48
+ `;
49
+ function flags(argv) {
50
+ const values = {};
51
+ const switches = new Set();
52
+ for (let index = 0; index < argv.length; index += 1) {
53
+ const name = argv[index];
54
+ if (!name.startsWith('--'))
55
+ continue;
56
+ const next = argv[index + 1];
57
+ if (next !== undefined && !next.startsWith('--')) {
58
+ ;
59
+ (values[name.slice(2)] ??= []).push(next);
60
+ index += 1;
61
+ }
62
+ else
63
+ switches.add(name.slice(2));
64
+ }
65
+ return { values, switches };
66
+ }
67
+ function serveCommand(argv) {
68
+ const { values, switches } = flags(argv);
69
+ const stateArgument = values.state?.[0];
70
+ if (!stateArgument) {
71
+ process.stderr.write('serve needs --state <dir>.\n');
72
+ return Promise.resolve(2);
73
+ }
74
+ // The socket path is built from this folder, so a relative one would depend on where the host ran.
75
+ const stateDir = resolve(stateArgument);
76
+ const peer = new RpcPeer(stdioTransport());
77
+ const options = {
78
+ stateDir,
79
+ dataRoot: values.data?.[0] ? resolve(values.data[0]) : null,
80
+ productName: values.name?.[0],
81
+ builtins: values.builtins,
82
+ ...(switches.has('host-secrets') ? { secrets: remoteSecrets(peer) } : {}),
83
+ ...(switches.has('host-policy') ? { policy: remotePolicy(peer) } : {}),
84
+ ...(switches.has('host-directory') ? { directory: remoteDirectory(peer) } : {})
85
+ };
86
+ const harness = createHarness(options);
87
+ if (switches.has('host-tools'))
88
+ harness.sessions.provide(remoteTools(peer));
89
+ attach(harness, peer);
90
+ return new Promise((resolve) => {
91
+ let closing = false;
92
+ const shutdown = () => {
93
+ if (closing)
94
+ return;
95
+ closing = true;
96
+ void Promise.race([harness.close(), new Promise((done) => setTimeout(done, 5000))]).then(() => resolve(0));
97
+ };
98
+ peer.handle('harness.shutdown', () => void setImmediate(shutdown));
99
+ process.stdin.on('end', shutdown);
100
+ process.on('SIGTERM', shutdown);
101
+ process.on('SIGINT', shutdown);
102
+ peer.send({ notice: { type: 'ready' } });
103
+ log('ready');
104
+ });
105
+ }
106
+ async function main() {
107
+ const argv = process.argv.slice(2);
108
+ if (argv.length === 1 && (argv[0] === '--version' || argv[0] === '-v')) {
109
+ process.stdout.write(`${manifest.version}\n`);
110
+ return 0;
111
+ }
112
+ const [command, ...rest] = argv;
113
+ if (argv.includes('--help') || argv.includes('-h')) {
114
+ process.stdout.write(USAGE);
115
+ return 0;
116
+ }
117
+ const terminalArgs = standaloneArguments(argv);
118
+ if (terminalArgs !== null)
119
+ return runStandaloneTerminal(terminalArgs);
120
+ if (command === 'serve')
121
+ return serveCommand(rest);
122
+ if (command === 'wiki')
123
+ return runWikiCli(rest);
124
+ if (command === 'mcp')
125
+ return runAppsCli(rest);
126
+ if (command === 'plugins')
127
+ return runPluginsCli(rest, { ask: terminalAsk() });
128
+ if (command === 'hub')
129
+ return runHubCli(rest);
130
+ if (command === 'refine')
131
+ return runRefineCli(rest);
132
+ if (command === 'web')
133
+ return runWebCli(rest);
134
+ if (command === 'browser')
135
+ return runBrowserCli(rest);
136
+ process.stdout.write(USAGE);
137
+ return command ? 2 : 0;
138
+ }
139
+ void main().then((code) => process.exit(code), (error) => {
140
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
141
+ process.exit(1);
142
+ });
@@ -0,0 +1,23 @@
1
+ export interface Notice {
2
+ /** `accounts.changed`, `accounts.login`, `accounts.loginEvent`, `wiki.changed`, `wiki.maintenance`, … */
3
+ type: string;
4
+ [key: string]: unknown;
5
+ }
6
+ export type NoticeListener = (notice: Notice) => void;
7
+ export declare class Bus {
8
+ private readonly listeners;
9
+ on(listener: NoticeListener): () => void;
10
+ emit(notice: Notice): void;
11
+ }
12
+ /**
13
+ * Sends diagnostics somewhere other than stderr, or back to stderr with `null`. A host whose stderr is
14
+ * the terminal a frontend is drawing on must not write into it, so it sets a sink.
15
+ */
16
+ export declare function setLogSink(sink: ((text: string) => void) | null): void;
17
+ /** One line of diagnostics. Diagnostics go to stderr by default; stdout may be carrying a protocol. */
18
+ export declare function logLine(text: string): void;
19
+ /** Redacts common credentials and URL query values before diagnostic text is persisted or shown. */
20
+ export declare function redactLogText(text: string): string;
21
+ /** Records useful failure detail without persisting credentials or response bodies. */
22
+ export declare function logDiagnostic(scope: string, error: unknown, metadata?: Record<string, unknown>): void;
23
+ export declare function log(...parts: unknown[]): void;
@@ -0,0 +1,76 @@
1
+ // Notices: what the harness tells whoever embeds it. Run events travel separately, through the
2
+ // run tracker; a notice says that some state changed and should be read again.
3
+ export class Bus {
4
+ listeners = new Set();
5
+ on(listener) {
6
+ this.listeners.add(listener);
7
+ return () => this.listeners.delete(listener);
8
+ }
9
+ emit(notice) {
10
+ for (const listener of this.listeners) {
11
+ try {
12
+ listener(notice);
13
+ }
14
+ catch (error) {
15
+ log('a notice listener failed', error instanceof Error ? error.message : String(error));
16
+ }
17
+ }
18
+ }
19
+ }
20
+ let logSink = null;
21
+ /**
22
+ * Sends diagnostics somewhere other than stderr, or back to stderr with `null`. A host whose stderr is
23
+ * the terminal a frontend is drawing on must not write into it, so it sets a sink.
24
+ */
25
+ export function setLogSink(sink) {
26
+ logSink = sink;
27
+ }
28
+ /** One line of diagnostics. Diagnostics go to stderr by default; stdout may be carrying a protocol. */
29
+ export function logLine(text) {
30
+ if (logSink)
31
+ logSink(text);
32
+ else
33
+ process.stderr.write(`${text}\n`);
34
+ }
35
+ /** Redacts common credentials and URL query values before diagnostic text is persisted or shown. */
36
+ export function redactLogText(text) {
37
+ return text
38
+ .replace(/\bBearer\s+\S+/gi, 'Bearer [redacted]')
39
+ .replace(/(["']?(?:authorization|proxy-authorization|cookie|set-cookie|x-[\w-]*(?:token|key)|[\w-]*(?:api[_-]?key|access[_-]?token|refresh[_-]?token|id[_-]?token|token|secret|password|client[_-]?secret))["']?\s*[:=]\s*["']?)[^"'\s,;]+/gi, '$1[redacted]')
40
+ .replace(/\b(?:sk|sess)-[A-Za-z0-9_-]{16,}\b/gi, '[redacted]')
41
+ .replace(/\bhttps?:\/\/[^\s"'<>]+/gi, (raw) => {
42
+ const punctuation = /[),.;!?]+$/.exec(raw)?.[0] ?? '';
43
+ const address = punctuation ? raw.slice(0, -punctuation.length) : raw;
44
+ try {
45
+ const url = new URL(address);
46
+ url.username = '';
47
+ url.password = '';
48
+ url.search = '';
49
+ url.hash = '';
50
+ return `${url.href}${punctuation}`;
51
+ }
52
+ catch {
53
+ return raw;
54
+ }
55
+ });
56
+ }
57
+ /** Records useful failure detail without persisting credentials or response bodies. */
58
+ export function logDiagnostic(scope, error, metadata = {}) {
59
+ const failure = error instanceof Error ? error : new Error(String(error));
60
+ const details = {
61
+ ...metadata,
62
+ message: failure.message,
63
+ ...(failure.stack ? { stack: failure.stack } : {})
64
+ };
65
+ let serialized;
66
+ try {
67
+ serialized = JSON.stringify(details);
68
+ }
69
+ catch {
70
+ serialized = JSON.stringify({ message: failure.message, stack: failure.stack });
71
+ }
72
+ logLine(`[harness] ${redactLogText(scope)} ${redactLogText(serialized)}`);
73
+ }
74
+ export function log(...parts) {
75
+ logLine(`[harness] ${parts.map((part) => (typeof part === 'string' ? part : JSON.stringify(part))).join(' ')}`);
76
+ }
@@ -0,0 +1,22 @@
1
+ import { type Project } from "./projects.js";
2
+ export interface CallerContext {
3
+ /** Opaque, host-owned policy data frozen when this session starts. The harness only forwards it to the embedding app's tool policy. */
4
+ policyContext?: unknown;
5
+ runId?: string | null;
6
+ sessionId?: string | null;
7
+ projectId?: string | null;
8
+ /** The caller: decides which plugins and connectors reach it, and whose history it recalls. */
9
+ agentId?: string | null;
10
+ /** Callers whose conversations this one may not recall (opaque ids from the embedding host). */
11
+ recallExcludeAgents?: string[] | null;
12
+ /** The caller's name, recorded on what it writes. */
13
+ agentName?: string | null;
14
+ /** `Chat` for an agent's own conversation, `Code` for a session in a project. */
15
+ actor?: string | null;
16
+ /** `cli` when the caller reaches the harness through a terminal command. */
17
+ surface?: string | null;
18
+ }
19
+ export declare const isSession: (context: CallerContext) => boolean;
20
+ export declare const actorOf: (context: CallerContext) => string;
21
+ export declare const usesCli: (context: CallerContext) => boolean;
22
+ export declare function projectOf(root: string, context: CallerContext): Project | null;
@@ -0,0 +1,16 @@
1
+ // Who a session works as. The embedding application supplies this when a session starts; the
2
+ // harness never looks an agent up by itself. The ids are opaque to the harness.
3
+ import { findProject } from "./projects.js";
4
+ export const isSession = (context) => context.actor === 'Code';
5
+ export const actorOf = (context) => (isSession(context) ? 'Code' : 'Chat');
6
+ export const usesCli = (context) => context.surface === 'cli';
7
+ export function projectOf(root, context) {
8
+ if (!context.projectId)
9
+ return null;
10
+ try {
11
+ return findProject(root, context.projectId);
12
+ }
13
+ catch {
14
+ return null;
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ export interface Change {
2
+ /** The Wiki folder the entry is in. */
3
+ wiki: string;
4
+ id: string;
5
+ /** The file that was written. */
6
+ path: string;
7
+ /** Its new contents, front matter included. */
8
+ text: string;
9
+ actor: string;
10
+ reason: string;
11
+ }
12
+ type Listener = (change: Change) => void;
13
+ export declare function noteChange(change: Change): void;
14
+ export declare function onChange(listener: Listener): () => void;
15
+ export {};
@@ -0,0 +1,15 @@
1
+ const listeners = new Set();
2
+ export function noteChange(change) {
3
+ for (const listener of listeners) {
4
+ try {
5
+ listener(change);
6
+ }
7
+ catch {
8
+ // A listener must never break the write it is told about.
9
+ }
10
+ }
11
+ }
12
+ export function onChange(listener) {
13
+ listeners.add(listener);
14
+ return () => void listeners.delete(listener);
15
+ }
@@ -0,0 +1,2 @@
1
+ export declare const EFFORTS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
2
+ export type Effort = (typeof EFFORTS)[number];
@@ -0,0 +1 @@
1
+ export const EFFORTS = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
@@ -0,0 +1,18 @@
1
+ /** Names the harness shows but does not own. Every lookup may answer `null`. */
2
+ export interface Directory {
3
+ /** An agent's display name. */
4
+ agentName(agentId: string): string | null;
5
+ /** The agent a conversation belongs to, when the session id is not the agent's own id. */
6
+ sessionAgent(sessionId: string): string | null;
7
+ }
8
+ /** The name used when an application gives none. */
9
+ export declare const DEFAULT_PRODUCT_NAME = "Xingular Harness";
10
+ export declare const EMPTY_DIRECTORY: Directory;
11
+ export interface HarnessEnv {
12
+ /** The data root: `wiki/`, `registry/`, `runs/`, `config/`, `index.sqlite`. */
13
+ root: string;
14
+ directory: Directory;
15
+ /** How the harness names itself to a model and in the Wiki it creates. */
16
+ productName: string;
17
+ }
18
+ export declare function createEnv(root: string, options?: Partial<Omit<HarnessEnv, 'root'>>): HarnessEnv;
@@ -0,0 +1,8 @@
1
+ // What every harness module is given: where the data lives, and what the embedding application
2
+ // knows that the harness does not.
3
+ /** The name used when an application gives none. */
4
+ export const DEFAULT_PRODUCT_NAME = 'Xingular Harness';
5
+ export const EMPTY_DIRECTORY = { agentName: () => null, sessionAgent: () => null };
6
+ export function createEnv(root, options = {}) {
7
+ return { root, directory: options.directory ?? EMPTY_DIRECTORY, productName: options.productName ?? DEFAULT_PRODUCT_NAME };
8
+ }
@@ -0,0 +1,15 @@
1
+ /** A typed failure: a stable code, a message a person can read, and an optional hint on what to do next. */
2
+ export declare class HarnessError extends Error {
3
+ readonly code: string;
4
+ readonly retryHint: string | null;
5
+ constructor(code: string, message: string, retryHint?: string | null);
6
+ withHint(hint: string): HarnessError;
7
+ }
8
+ export declare const invalid: (message: string) => HarnessError;
9
+ export declare const notFound: (what: string) => HarnessError;
10
+ export interface ErrorShape {
11
+ code: string;
12
+ message: string;
13
+ retryHint?: string | null;
14
+ }
15
+ export declare function toErrorShape(error: unknown, fallbackCode?: string): ErrorShape;
@@ -0,0 +1,24 @@
1
+ /** A typed failure: a stable code, a message a person can read, and an optional hint on what to do next. */
2
+ export class HarnessError extends Error {
3
+ code;
4
+ retryHint;
5
+ constructor(code, message, retryHint = null) {
6
+ super(message);
7
+ this.name = 'HarnessError';
8
+ this.code = code;
9
+ this.retryHint = retryHint;
10
+ }
11
+ withHint(hint) {
12
+ return new HarnessError(this.code, this.message, hint);
13
+ }
14
+ }
15
+ export const invalid = (message) => new HarnessError('invalid_request', message);
16
+ export const notFound = (what) => new HarnessError('not_found', `${what} was not found.`);
17
+ export function toErrorShape(error, fallbackCode = 'harness_error') {
18
+ if (error instanceof HarnessError)
19
+ return { code: error.code, message: error.message, retryHint: error.retryHint };
20
+ const code = error?.code;
21
+ if (error instanceof Error && typeof code === 'string' && code.startsWith('E'))
22
+ return { code: 'io_error', message: error.message };
23
+ return { code: fallbackCode, message: error instanceof Error ? error.message : String(error) };
24
+ }
@@ -0,0 +1,12 @@
1
+ export declare function split(text: string): {
2
+ yaml: string;
3
+ body: string;
4
+ } | null;
5
+ /** The frontmatter as a plain object and the body, or `null` when the block is missing or is not a mapping. */
6
+ export declare function parse(text: string): {
7
+ front: Record<string, unknown>;
8
+ body: string;
9
+ } | null;
10
+ /** The text after a readable frontmatter block, or the whole text when there is none. */
11
+ export declare function bodyOf(text: string): string;
12
+ export declare function serialize(front: Record<string, unknown>, body: string): string;
@@ -0,0 +1,50 @@
1
+ // Markdown files with a YAML frontmatter block (`---` … `---`), used by Wiki pages, facts, blocks and registry items.
2
+ import { parse as parseYaml, stringify } from 'yaml';
3
+ import { HarnessError } from "./errors.js";
4
+ export function split(text) {
5
+ const rest = text.startsWith('---\n') ? text.slice(4) : text.startsWith('---\r\n') ? text.slice(5) : null;
6
+ if (rest === null)
7
+ return null;
8
+ const end = rest.indexOf('\n---');
9
+ if (end < 0)
10
+ return null;
11
+ return { yaml: rest.slice(0, end), body: rest.slice(end + 4).replace(/^[\r\n]+/, '') };
12
+ }
13
+ /** The frontmatter as a plain object and the body, or `null` when the block is missing or is not a mapping. */
14
+ export function parse(text) {
15
+ const parts = split(text);
16
+ if (!parts)
17
+ return null;
18
+ try {
19
+ const front = parseYaml(parts.yaml);
20
+ if (!front || typeof front !== 'object' || Array.isArray(front))
21
+ return null;
22
+ return { front: front, body: parts.body };
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ /** The text after a readable frontmatter block, or the whole text when there is none. */
29
+ export function bodyOf(text) {
30
+ const parts = split(text);
31
+ if (!parts)
32
+ return text;
33
+ try {
34
+ parseYaml(parts.yaml);
35
+ return parts.body;
36
+ }
37
+ catch {
38
+ return text;
39
+ }
40
+ }
41
+ export function serialize(front, body) {
42
+ let yaml;
43
+ try {
44
+ yaml = stringify(front, { lineWidth: 0 });
45
+ }
46
+ catch (error) {
47
+ throw new HarnessError('invalid_data', error instanceof Error ? error.message : String(error));
48
+ }
49
+ return `---\n${yaml}---\n\n${body.trimEnd()}\n`;
50
+ }
@@ -0,0 +1,18 @@
1
+ /** Writes through a temporary sibling file and renames it into place so readers never see a partial file. */
2
+ export declare function atomicWrite(path: string, contents: string | Uint8Array): void;
3
+ export declare function writeJson(path: string, value: unknown): void;
4
+ /** `null` when the file does not exist; a file that exists but does not parse is an error. */
5
+ export declare function readJson<T>(path: string): T | null;
6
+ /** `readJson` for callers that treat an unreadable file like a missing one. */
7
+ export declare function readJsonOr<T>(path: string, fallback: T): T;
8
+ export declare function readText(path: string): string | null;
9
+ export declare function appendLine(path: string, line: string): void;
10
+ /** Accepts only IDs that are safe as a single path segment. */
11
+ export declare function safeId(id: string): string;
12
+ /** Accepts a relative path that stays inside its base directory. */
13
+ export declare function safeRelative(path: string): string;
14
+ /** Millisecond UTC timestamp, the format every record uses. */
15
+ export declare function now(): string;
16
+ export declare function newId(): string;
17
+ export declare function isDir(path: string): boolean;
18
+ export declare function isFile(path: string): boolean;