@xingular/harness 0.1.7 → 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 (683) hide show
  1. package/CHANGELOG.md +97 -1
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +22 -0
  4. package/README.md +187 -85
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/dist/cli.js +13701 -13498
  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 +808 -151
  373. package/docs/README.md +22 -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-0002-native-subagent-lifecycle.md +49 -0
  403. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
  404. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
  405. package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
  406. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  407. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  408. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +38 -0
  409. package/docs/decisions/ADR-0009-xharness-command.md +38 -0
  410. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  411. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  412. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  413. package/docs/decisions/ADR-0013-doctor.md +27 -0
  414. package/docs/decisions/ADR-0014-public-release-baseline.md +21 -0
  415. package/docs/doctor.md +74 -0
  416. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  417. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  418. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  419. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  420. package/docs/features/README.md +20 -0
  421. package/docs/features/automations/README.md +41 -0
  422. package/docs/features/cores/README.md +39 -0
  423. package/docs/features/google-harness2/README.md +52 -0
  424. package/docs/features/integrations/README.md +40 -0
  425. package/docs/features/interfaces/README.md +29 -0
  426. package/docs/features/memory/README.md +28 -0
  427. package/docs/releases/1.0.0.md +40 -0
  428. package/docs/releases/README.md +36 -0
  429. package/docs/study/00-index.md +78 -0
  430. package/docs/study/arms/00-matrix.md +20 -0
  431. package/docs/study/arms/01-system-prompt.md +211 -0
  432. package/docs/study/arms/02-tools.md +79 -0
  433. package/docs/study/arms/03-subagents.md +90 -0
  434. package/docs/study/arms/04-skills.md +75 -0
  435. package/docs/study/arms/05-context-management.md +90 -0
  436. package/docs/study/arms/06-memory.md +90 -0
  437. package/docs/study/arms/07-governance.md +71 -0
  438. package/docs/study/arms/08-execution.md +69 -0
  439. package/docs/study/arms/09-observability.md +60 -0
  440. package/docs/study/arms/10-refinement.md +110 -0
  441. package/docs/study/btw-comparison.md +37 -0
  442. package/docs/study/feature-gap-review.md +42 -0
  443. package/docs/study/insights.md +123 -0
  444. package/docs/study/roadmap.md +72 -0
  445. package/docs/study/sources/claude-code.md +44 -0
  446. package/docs/study/sources/deepseek-harness.md +102 -0
  447. package/docs/study/sources/harness2.md +50 -0
  448. package/docs/study/sources/kimi-cli.md +42 -0
  449. package/docs/study/sources/omp.md +93 -0
  450. package/docs/study/sources/opencode.md +43 -0
  451. package/docs/study/sources/openhands.md +46 -0
  452. package/docs/study/sources/smolagents.md +40 -0
  453. package/docs/study/sources/swe-agent.md +34 -0
  454. package/docs/system-prompt-design.md +196 -0
  455. package/docs/terminal-tui.md +473 -56
  456. package/package.json +43 -13
  457. package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
  458. package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
  459. package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
  460. package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
  461. package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
  462. package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
  463. package/docs/evidence/terminal-2026-10-17/verification.json +0 -130
  464. package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
  465. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
  466. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
  467. package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
  468. package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
  469. package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
  470. package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
  471. package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
  472. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
  473. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
  474. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
  475. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
  476. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +0 -95
  477. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
  478. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
  479. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
  480. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
  481. package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +0 -27
  482. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
  483. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +0 -18
  484. package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +0 -95
  485. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
  486. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
  487. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +0 -60
  488. package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +0 -24
  489. package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
  490. package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +0 -57
  491. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
  492. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
  493. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +0 -58
  494. package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
  495. package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +0 -320
  496. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +0 -30
  497. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +0 -133
  498. package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +0 -20
  499. package/docs/evidence/terminal-2026-10-17-followup/verification.json +0 -207
  500. package/src/accounts/accounts.test.ts +0 -333
  501. package/src/accounts/accounts.ts +0 -658
  502. package/src/accounts/env.test.ts +0 -95
  503. package/src/accounts/env.ts +0 -338
  504. package/src/accounts/secrets.ts +0 -50
  505. package/src/accounts/store.ts +0 -338
  506. package/src/capabilities/api.ts +0 -75
  507. package/src/capabilities/runSnapshot.ts +0 -59
  508. package/src/capabilities/types.ts +0 -34
  509. package/src/cli.ts +0 -118
  510. package/src/core/bus.ts +0 -34
  511. package/src/core/changes.ts +0 -33
  512. package/src/core/env.ts +0 -27
  513. package/src/core/errors.ts +0 -32
  514. package/src/core/frontmatter.ts +0 -47
  515. package/src/core/fs.test.ts +0 -38
  516. package/src/core/fs.ts +0 -92
  517. package/src/core/index.ts +0 -193
  518. package/src/core/path.test.ts +0 -14
  519. package/src/core/path.ts +0 -79
  520. package/src/core/projects.ts +0 -90
  521. package/src/core/text.ts +0 -39
  522. package/src/harness.ts +0 -312
  523. package/src/hub/catalog.json +0 -123
  524. package/src/hub/cli.ts +0 -59
  525. package/src/hub/hub.test.ts +0 -205
  526. package/src/hub/hub.ts +0 -256
  527. package/src/hub/schema.ts +0 -81
  528. package/src/index.ts +0 -75
  529. package/src/mcp/connections.ts +0 -614
  530. package/src/mcp/manager.ts +0 -130
  531. package/src/mcp/oauth.ts +0 -195
  532. package/src/mcp/scopeMigration.test.ts +0 -79
  533. package/src/mcp/scopeMigration.ts +0 -204
  534. package/src/mcp/service.test.ts +0 -376
  535. package/src/mcp/service.ts +0 -549
  536. package/src/mcp/types.ts +0 -108
  537. package/src/memory/api.test.ts +0 -82
  538. package/src/memory/api.ts +0 -303
  539. package/src/memory/blocks.test.ts +0 -78
  540. package/src/memory/blocks.ts +0 -408
  541. package/src/memory/caller.ts +0 -69
  542. package/src/memory/curation.test.ts +0 -163
  543. package/src/memory/curation.ts +0 -64
  544. package/src/memory/dispatch.ts +0 -59
  545. package/src/memory/facts.test.ts +0 -41
  546. package/src/memory/facts.ts +0 -248
  547. package/src/memory/graph.ts +0 -103
  548. package/src/memory/health.test.ts +0 -130
  549. package/src/memory/health.ts +0 -74
  550. package/src/memory/maintainer.ts +0 -272
  551. package/src/memory/maintenance.test.ts +0 -176
  552. package/src/memory/maintenance.ts +0 -518
  553. package/src/memory/migrate.ts +0 -79
  554. package/src/memory/operations.ts +0 -150
  555. package/src/memory/proposals.test.ts +0 -168
  556. package/src/memory/proposals.ts +0 -584
  557. package/src/memory/recall.test.ts +0 -115
  558. package/src/memory/recall.ts +0 -278
  559. package/src/memory/references.ts +0 -77
  560. package/src/memory/runContext.ts +0 -93
  561. package/src/memory/secrets.ts +0 -6
  562. package/src/memory/store.test.ts +0 -66
  563. package/src/memory/store.ts +0 -385
  564. package/src/memory/wiki.test.ts +0 -47
  565. package/src/memory/wiki.ts +0 -422
  566. package/src/memory/wikiIndex.test.ts +0 -88
  567. package/src/memory/wikiIndex.ts +0 -116
  568. package/src/plugins/api.ts +0 -181
  569. package/src/plugins/attachments.test.ts +0 -84
  570. package/src/plugins/attachments.ts +0 -141
  571. package/src/plugins/builtin.ts +0 -82
  572. package/src/plugins/catalogue.test.ts +0 -254
  573. package/src/plugins/catalogue.ts +0 -251
  574. package/src/plugins/cli.ts +0 -184
  575. package/src/plugins/discover.ts +0 -151
  576. package/src/plugins/firstParty.test.ts +0 -143
  577. package/src/plugins/firstParty.ts +0 -129
  578. package/src/plugins/hooks.test.ts +0 -250
  579. package/src/plugins/hooks.ts +0 -239
  580. package/src/plugins/identity.ts +0 -37
  581. package/src/plugins/install.test.ts +0 -107
  582. package/src/plugins/install.ts +0 -106
  583. package/src/plugins/inventory.ts +0 -123
  584. package/src/plugins/manifest.ts +0 -76
  585. package/src/plugins/plugins.test.ts +0 -205
  586. package/src/plugins/plugins.ts +0 -189
  587. package/src/plugins/proposal.ts +0 -121
  588. package/src/plugins/runtime.test.ts +0 -40
  589. package/src/plugins/runtime.ts +0 -82
  590. package/src/plugins/trust.ts +0 -142
  591. package/src/plugins/types.ts +0 -149
  592. package/src/prompt/compile.test.ts +0 -261
  593. package/src/prompt/compile.ts +0 -732
  594. package/src/server/methods.ts +0 -349
  595. package/src/server/remote.ts +0 -77
  596. package/src/server/rpc.ts +0 -116
  597. package/src/server/serve.ts +0 -28
  598. package/src/server/server.test.ts +0 -174
  599. package/src/sessions/approvals.ts +0 -118
  600. package/src/sessions/contracts.ts +0 -336
  601. package/src/sessions/conversation.test.ts +0 -177
  602. package/src/sessions/extensionSession.test.ts +0 -74
  603. package/src/sessions/extensionUi.test.ts +0 -65
  604. package/src/sessions/extensionUi.ts +0 -102
  605. package/src/sessions/history.ts +0 -51
  606. package/src/sessions/lineageJoin.ts +0 -75
  607. package/src/sessions/policy.ts +0 -36
  608. package/src/sessions/pricing.ts +0 -60
  609. package/src/sessions/questionBatches.test.ts +0 -110
  610. package/src/sessions/reasoningSummaries.ts +0 -59
  611. package/src/sessions/registry.ts +0 -381
  612. package/src/sessions/runIndex.ts +0 -99
  613. package/src/sessions/runStore.test.ts +0 -152
  614. package/src/sessions/runStore.ts +0 -332
  615. package/src/sessions/runner.ts +0 -604
  616. package/src/sessions/runtimeResources.test.ts +0 -61
  617. package/src/sessions/sessions.test.ts +0 -549
  618. package/src/sessions/sessions.ts +0 -339
  619. package/src/skills/registry.test.ts +0 -104
  620. package/src/skills/registry.ts +0 -413
  621. package/src/terminal/accountsMenu.test.ts +0 -225
  622. package/src/terminal/accountsMenu.ts +0 -382
  623. package/src/terminal/cli.ts +0 -149
  624. package/src/terminal/client.ts +0 -74
  625. package/src/terminal/control.test.ts +0 -23
  626. package/src/terminal/control.ts +0 -23
  627. package/src/terminal/controller.ts +0 -291
  628. package/src/terminal/hubMenu.ts +0 -24
  629. package/src/terminal/launch.test.ts +0 -25
  630. package/src/terminal/launch.ts +0 -48
  631. package/src/terminal/piExtension.lifecycle.test.ts +0 -55
  632. package/src/terminal/piExtension.ts +0 -259
  633. package/src/terminal/pluginControl.test.ts +0 -146
  634. package/src/terminal/pluginMenu.ts +0 -112
  635. package/src/terminal/socket.test.ts +0 -71
  636. package/src/terminal/socket.ts +0 -232
  637. package/src/terminal/standalone.test.ts +0 -167
  638. package/src/terminal/standalone.ts +0 -153
  639. package/src/terminal/terminal.test.ts +0 -399
  640. package/src/terminal/terminals.ts +0 -553
  641. package/src/terminal/tui/application.test.ts +0 -114
  642. package/src/terminal/tui/application.ts +0 -491
  643. package/src/terminal/tui/commands.test.ts +0 -218
  644. package/src/terminal/tui/commands.ts +0 -361
  645. package/src/terminal/tui/dialogs.ts +0 -301
  646. package/src/terminal/tui/editor.test.ts +0 -84
  647. package/src/terminal/tui/editor.ts +0 -79
  648. package/src/terminal/tui/keybindings.test.ts +0 -22
  649. package/src/terminal/tui/keybindings.ts +0 -50
  650. package/src/terminal/tui/piAdapter.ts +0 -62
  651. package/src/terminal/tui/presentation.test.ts +0 -79
  652. package/src/terminal/tui/questions.test.ts +0 -41
  653. package/src/terminal/tui/questions.ts +0 -47
  654. package/src/terminal/tui/runtime.socket.test.ts +0 -104
  655. package/src/terminal/tui/runtime.test.ts +0 -215
  656. package/src/terminal/tui/runtime.ts +0 -388
  657. package/src/terminal/tui/sessionUi.ts +0 -24
  658. package/src/terminal/tui/settings.test.ts +0 -150
  659. package/src/terminal/tui/settings.ts +0 -188
  660. package/src/terminal/tui/status.test.ts +0 -70
  661. package/src/terminal/tui/status.ts +0 -109
  662. package/src/terminal/tui/theme.ts +0 -174
  663. package/src/terminal/tui/tools.test.ts +0 -145
  664. package/src/terminal/tui/tools.ts +0 -142
  665. package/src/terminal/tui/transcript.test.ts +0 -25
  666. package/src/terminal/tui/transcript.ts +0 -124
  667. package/src/terminal/tui/ui.test.ts +0 -313
  668. package/src/terminal/tui/ui.ts +0 -166
  669. package/src/terminal/tui/welcome.ts +0 -102
  670. package/src/tools/askUser.test.ts +0 -69
  671. package/src/tools/askUser.ts +0 -59
  672. package/src/tools/definitions.ts +0 -187
  673. package/src/tools/maintenance.ts +0 -24
  674. package/src/tools/memoryTools.ts +0 -22
  675. package/src/tools/pluginPropose.ts +0 -41
  676. package/src/tools/registryWrite.test.ts +0 -101
  677. package/src/tools/registryWrite.ts +0 -182
  678. package/src/tools/spawnSubagent.ts +0 -92
  679. package/src/tools/types.ts +0 -39
  680. package/src/web/safeRequest.ts +0 -171
  681. package/src/web/text.ts +0 -53
  682. package/src/web/tools.ts +0 -134
  683. 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;