@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
package/README.md CHANGED
@@ -1,30 +1,62 @@
1
1
  # Xingular Harness
2
2
 
3
- A Pi agent harness, as one TypeScript package (`@xingular/harness`). It is everything a model
4
- needs to work for someone over time, and nothing about any particular application:
5
-
6
- | Part | Folder | What it does |
3
+ A Pi agent harness built on **recursive harnessing** ([Harness²](https://arxiv.org/abs/2610.14224),
4
+ Apache-2.0, Google LLC), as one TypeScript package (`@xingular/harness`). It lets a running host
5
+ improve the harness itself, with model weights fixed. To say that precisely, the harness has two
6
+ halves:
7
+
8
+ - **The foundation is fixed.** Pi sessions, the prompt compiler, the run recorder, the tool gate,
9
+ accounts, plugin-code trust, the refinement method and the extension points. Only a release
10
+ changes it.
11
+ - **A Harness Variant (HV) mutates.** It is what a model is told and can load: eight components
12
+ (c1–c8) for one scope. Each scope has versioned, validated HVs; a run pins one version, and
13
+ refinement proposes a better HV that a person adopts.
14
+
15
+ *The foundation runs a variant, records how it went, and lets refinement propose a better
16
+ variant; only a person adopts one.* Refinement edits a copy of a variant and never the
17
+ foundation. See [Foundation and variants](docs/architecture/00-overview.md#foundation-and-variants).
18
+
19
+ Recursive refinement proposes HV improvements from run evidence. A person adopts candidates;
20
+ model weights and the foundation stay fixed. See the [Google Harness² feature guide](docs/features/google-harness2/README.md)
21
+ for the method and HV components.
22
+
23
+ | Area | Main features | Guide |
7
24
  |---|---|---|
8
- | Accounts | `src/accounts/` | Several isolated Pi accounts and pools, sign-in, model lists, health and limits. A session keeps the account it started with. |
9
- | Sessions | `src/sessions/` | Pi SDK turns, run records and `events.jsonl`, interrupt, approvals, questions, recovery after a crash. |
10
- | Prompt | `src/prompt/` | The system prompt compiled from sections with budgets and profiles; a stable prefix, and changing state delivered as updates in native history. |
11
- | Memory | `src/memory/` | The Wiki: pages, facts, memory blocks, revisions, proposals with an evidence gate, undo, an Inbox, recall over past runs, and sleep-time consolidation. |
12
- | Skills | `src/skills/` | Skills, prompts, and rules: a person's own in the data root, and built-in ones shipped with the harness or the application. |
13
- | Plugins | `src/plugins/` | What a Pi session loads, chosen by the harness and never by Pi's own discovery; trust for a working folder's code; the list of every plugin and what reaches one caller. |
14
- | Tools | `src/tools/` | Tool definitions, the memory tools, `ask_user`; a gate that asks the application's policy, then standing approvals, then the person. |
15
- | Connected apps | `src/mcp/` | MCP connections, OAuth, per-session grants, redaction, a trace of what each call returned. |
16
- | Terminal | `src/terminal/` | A Harness-owned terminal frontend over persistent Pi sessions, isolated accounts, compiled instructions, the tool gate and telemetry bridge, native history, plugin UI, `/plugins`, `/hub`, `/accounts`, and the existing session socket. |
17
- | Server | `src/server/` | The same API over newline-delimited JSON, for a host that is not a Node program. |
18
-
19
- It was split out of Xingular Agent, which is now an application built on it.
20
- The [documentation index](docs/README.md) links current terminal architecture and decisions.
25
+ | Core runtime | Accounts, sessions and runs, prompt compilation, tool governance | [Cores](docs/features/cores/README.md) |
26
+ | Harness² | HVs, recursive refinement, answer-free selection, experience library | [Google Harness²](docs/features/google-harness2/README.md) |
27
+ | Automations | Subagents, recovery, optional run reflections, plugin hooks | [Automations](docs/features/automations/README.md) |
28
+ | Memory | Wiki notes, run recall, trajectory search and reads | [Memory](docs/features/memory/README.md) |
29
+ | Integrations | Application extension points, plugins, connected apps and Hub | [Integrations](docs/features/integrations/README.md) |
30
+ | Interfaces | Node embedding, standalone terminal and JSON-lines server | [Interfaces](docs/features/interfaces/README.md) |
31
+
32
+ The binding design of every part is the [architecture specification](docs/architecture/README.md).
33
+
34
+ Try refinement with no model and no credentials: `npm run build && node dist/cli.js refine demo --k 2`.
35
+ The [feature guide](docs/features/README.md) groups capabilities by area; the [documentation
36
+ index](docs/README.md) links the architecture and other project records.
21
37
 
22
38
  ### Session options for applications
23
39
 
24
- - `subagents: { maxDepth }` offers `spawn_subagent`: the model may start a child run of the same caller (`relation: 'subagent'`). The child has no more tools than the parent and settles before the tool returns.
40
+ - Interactive sessions offer `spawn_subagent` and `wait_subagents` by default. `subagents: null` disables them; `{ maxDepth }` configures native nesting (default one, maximum three), independently of the host caller depth. Unattended sessions remain disabled unless the host explicitly supplies subagent options. A frozen capability set can narrow these tools further.
41
+ - `harness.subagents.spawn({ parentRunId, brief, tools?, wait? })` opens a fresh child of the same caller with no wider capabilities. It returns `{ runId, nativeSessionId }` once open; `wait: true` also waits for settlement. `harness.subagents.wait({ parentRunId, runIds? })` joins selected direct children, or the current children when omitted, and returns their outcomes. `results` reads the same bounded outcome records without waiting. RPC exposes `subagents.spawn`, `subagents.wait`, and `subagents.results`; `sessions.spawnSubagent` remains a compatibility alias.
42
+ - The model's `spawn_subagent` returns immediately by default; `wait: true` returns an inline result. `wait_subagents` joins selected children. The SDK and standalone terminal share this execution service. Terminal calls use its private control channel, including when connected apps are disabled.
43
+ - Parents receive results at native turn boundaries and join outstanding children before completing. Typed native-history receipts prevent duplicate automatic delivery; explicit waits can reread results. Ownership is recorded before startup so an explicit resume can recover even a lost spawn return. Startup reservations without a run become interrupted outcomes. A restarted Harness never restarts model work automatically. Recovery requires the same recorded account, caller, working folder, and selected history branch. Session IDs are opaque; consumers follow `parentRunId` and `relation`.
25
44
  - `providers: false` runs a session with the harness's own tools only.
26
- - On the caller, `vaultAccess: 'propose'` writes no memory directly, and `recallExcludeAgents` hides those agents' conversations from recall.
27
- - `maintenanceRunTrigger: false` (a harness option) leaves memory to explicit proposals and scheduled merges.
45
+ - `variant: { scope }` runs the session on that scope's head variant (or `{ scope, version }`, or `{ dir }` for a variant on disk). The version is pinned for the run and recorded on it.
46
+ - On the caller, `recallExcludeAgents` hides those agents' conversations from history and trajectory tools.
47
+ - `harnessTools: false` runs a session without the History, Wiki and skill tools (and without `ask_user` and `checklist_write`).
48
+ - Every session with harness tools gets `checklist_write`: the model sends its whole checklist (`pending`, `in_progress`, `completed`, at most 50 steps) and the run records it as a `checklist.updated` event. `checklistOf(events)` or the `runs.checklist` method reads the latest one. Plan mode allows it.
49
+ - `continueFrom: <run id>` continues a run that stopped before it finished (interrupted or failed) as a new run. `harness.recovery.interruptedRunIds` lists the runs `open` marked interrupted, and `continuationOf(root, runId, sessionDir)` (`runs.continuation`) says whether one can be continued and what it left: checklist, unanswered approvals and questions, the last tool and whether it finished, unfinished subagents. The new run reopens the same native history, records `resumedFromRunId`, keeps the account, variant version and capability set (`continuation_mismatch` otherwise), and the model is told where the earlier run stopped. The harness never continues a run by itself; which runs to continue, and when, is the application's choice.
50
+ - The first-party `lessons` plugin (off by default) reflects on a completed top-level run with enough tool calls and may keep one general lesson in the Wiki under `library/lessons/`, in refinement's cue/lesson shape. It uses the run's own account and model, read-only file tools, and is capped (`minToolCalls`, `maxLessons`, `maxChars`). See PROP-0008.
51
+
52
+ Every session also gets `trajectory_search` and `trajectory_read` from the built-in History plugin.
53
+ Search lists runs in the current data root, including active runs, with filters and a continuation
54
+ cursor. Read returns pages of the canonical execution events, including captured prompt/context,
55
+ tool, decision, retry, compaction, and usage evidence. Active runs show the latest events saved so
56
+ far; settled reads stop at the first outcome. Payloads are bounded and marked when truncated, and
57
+ the tools omit account identifiers, credential fields, attachment bytes, native adapter payloads,
58
+ and provider reasoning text or summaries.
59
+ They report recorded evidence without scoring runs, and do not backfill older records.
28
60
 
29
61
  ## Using it from Node
30
62
 
@@ -32,16 +64,19 @@ The [documentation index](docs/README.md) links current terminal architecture an
32
64
  import { createHarness } from '@xingular/harness'
33
65
 
34
66
  const harness = createHarness({
35
- dataRoot: '/path/to/data', // knowledge and history: wiki/, registry/, runs/, index.sqlite
67
+ dataRoot: '/path/to/data', // variants/, library/, refine/, wiki/, registry/, runs/, index.sqlite
36
68
  stateDir: '/path/to/state', // device-local: accounts, approvals, connections, sockets
37
69
  productName: 'My App', // how the harness names itself to a model (default 'Xingular Harness')
38
70
  secrets, // SecretStore; defaults to an owner-only file in stateDir
39
71
  policy, // ToolPolicy: what a run may do, and what needs a person
40
72
  directory, // names for the ids the application uses
41
73
  builtins: ['/path/to/builtin'], // folders of built-in skills, prompts, and rules
42
- plugins: [myPlugin] // the application's own parts, described as plugins
74
+ plugins: [myPlugin], // the application's own parts, described as plugins
75
+ refineHost // where refinement executions work, as whom, with which tools
43
76
  })
44
77
 
78
+ harness.refine.start({ task: { id, scope: 'agent-1', prompt }, k: 1, mode: 'parallel' })
79
+
45
80
  harness.sessions.provide((session) => myTools(session)) // the application's own tools
46
81
  harness.runs.listen((event, run) => show(event)) // every run event, after it is saved
47
82
 
@@ -49,6 +84,7 @@ await harness.sessions.run({
49
84
  run: { id, sessionId },
50
85
  cwd, sessionDir, text,
51
86
  caller: { agentId, agentName, actor: 'Chat' },
87
+ variant: { scope: 'agent-1' },
52
88
  launch: { sections: [{ id: 'identity', title: 'Identity', body, budget: 2000, order: 10 }] },
53
89
  tools: { allow: ['read', 'bash', 'my_tool'], gated: ['bash'] }
54
90
  })
@@ -56,14 +92,14 @@ await harness.sessions.run({
56
92
 
57
93
  ## How an application extends it
58
94
 
59
- The harness knows a caller (an opaque id that owns memory), never an agent, a group, or a task.
60
- An application adds what it knows through six points:
95
+ The harness knows a caller and a harness scope (opaque ids), never an agent, a group, or a task.
96
+ An application adds what it knows through seven points:
61
97
 
62
98
  1. **Prompt sections** (`Launch.sections`, `Launch.toolGroups`, `Launch.references`). Each
63
- section has an `order` and may be `dynamic`. The harness adds its own (`blocks` 30, `rules` 40,
64
- `references` 50, `skills` 60, `knowledge` 80, `tools` 90), applies budgets and the caller's
65
- context profile, keeps stable sections in the system prompt, and sends dynamic ones as
66
- updates.
99
+ section has an `order` and may be `dynamic`. The harness adds its own (`system` 25,
100
+ `guardrails` 40, `memory` 45, `references` 50, `subagents` 64, `scripts` 66, `wiki` 80,
101
+ `tools` 90), applies budgets, keeps stable sections in the system prompt, and sends dynamic
102
+ ones as updates.
67
103
  2. **Tool providers** (`harness.sessions.provide`). A provider returns `ToolSpec`s for a session;
68
104
  only the names in the session's `allow` list are registered, in that order.
69
105
  A tool may return `attachments` as `{ id, name, mimeType }` references. The harness records
@@ -72,9 +108,6 @@ An application adds what it knows through six points:
72
108
  The harness provides the web tools itself: `webTools({ secrets })` gives `web_search` (Brave Search,
73
109
  key read from the secret store) and `web_fetch` (checked reads of public pages). An application
74
110
  passes it to `harness.sessions.provide` and switches the names on for each agent.
75
- `registryTools({ harness })` gives `registry_write` (a skill, rule, or prompt) and `plugin_write`
76
- (a plugin). Each writes for the calling agent only: the item is on for that agent, and a plugin's
77
- code is trusted once written. An item others already use goes to the Inbox instead.
78
111
  3. **`ToolPolicy`**. `scope` says whether a call is inside what the run may do (or needs one
79
112
  approval). A decision with `humanOnly` is for a person alone: the always-approve switch and
80
113
  remembered answers do not apply to it. `authorize` says whether the tool is still switched on;
@@ -87,6 +120,11 @@ An application adds what it knows through six points:
87
120
  the application and says which tools, prompt sections and tool groups it provides. It is data:
88
121
  it changes what `plugins.list` and `plugins.inventory` report, never what runs. `WEB_PLUGIN`
89
122
  describes the web tools. A host that is not a Node program sends them with `plugins.describe`.
123
+ 7. **`RefineHost`** (`HarnessOptions.refineHost`). Where a refinement execution works
124
+ (`prepareWorkspace`: an isolated folder, such as a git worktree), as whom and with which tools
125
+ (`session`), and what it produced (`deliverable`). Executions run as unattended runs with
126
+ trigger `probe`, so a `ToolPolicy` can refuse anything with effects outside that folder;
127
+ improver sessions run with trigger `improver`, file tools only, on a copy of the evidence.
90
128
 
91
129
  `apps.expose(...)` additionally offers the application's tools through the connected-apps
92
130
  broker (`mcp_list_tools`, `mcp_call_tool`), which is how a terminal session reaches them.
@@ -95,7 +133,7 @@ broker (`mcp_list_tools`, `mcp_call_tool`), which is how a terminal session reac
95
133
 
96
134
  A plugin is a bundle with a title, a description and contributions: instructions, skills,
97
135
  commands, tools, connections, code (a Pi extension) and themes. A Pi package is a plugin as it
98
- is; so are the harness's own parts (Memory, Wiki, History, Ask the user, Connected apps, Pi), the
136
+ is; so are the harness's own parts (Harness, Wiki, History, Subagents, Ask the user, Connected apps, Pi), the
99
137
  application's, a person's registry ("Yours"), the folder every account shares, and what a
100
138
  working folder brings.
101
139
 
@@ -129,11 +167,10 @@ working folder brings.
129
167
  input does so before the gate sees it. Every resource reload revalidates the parent's original
130
168
  trusted selection; changed or revoked code requires review and a fresh terminal.
131
169
  - **A required part can be extended.** A package names the part it adds to and, optionally, a
132
- hooks file: `"harness": { "extends": ["memory"], "hooks": "./hooks.mjs" }`. The harness runs
133
- hooks itself (`src/plugins/hooks.ts`), in its own process, because most memory is written while
134
- no session is open. `export default function (harness) { harness.on('memory.saved', async
135
- (event, ctx) => …) }`; the events are `memory.saved`, `memory.block.changed`,
136
- `wiki.page.saved` and `history.run.ended`. A hook is told after the write and cannot stop it,
170
+ hooks file: `"harness": { "extends": ["wiki"], "hooks": "./hooks.mjs" }`. The harness runs
171
+ hooks itself (`src/plugins/hooks.ts`), in its own process, because notes are often written while
172
+ no session is open. `export default function (harness) { harness.on('wiki.page.saved', async
173
+ (event, ctx) => …) }`; the events are `wiki.page.saved` and `history.run.ended`. A hook is told after the write and cannot stop it,
137
174
  has 30 seconds, and what it throws is kept in `plugin-hooks.json` and shown on its plugin. It
138
175
  runs only while its plugin is switched on for everyone and trusted; what is loaded is checked
139
176
  against that before each delivery. `ctx.call(connection, tool, args)` reaches a connected app
@@ -157,10 +194,11 @@ working folder brings.
157
194
  terminal process claims once (`control.claim`) and shares with its bridge in memory; the socket's
158
195
  `plugins.list` is open to the session, and `plugins.attach`, `plugins.detach`, `plugins.trust`
159
196
  and `plugins.untrust` refuse without that key. A change applies when the session restarts.
160
- Outside a session, `xingular-harness plugins list | show | install | remove | update | attach |
197
+ Outside a session, `xharness plugins list | show | install | remove | update | attach |
161
198
  detach | trust | untrust` acts directly, as the person who typed it; `trust` shows the files
162
199
  and wants a typed yes or `--yes`. It does not open the data root, so it settles no run.
163
- - **Unattended runs and memory maintenance load no extension**, as before.
200
+ - **Unattended runs load no extension found on disk.** A variant's own trusted plugins still
201
+ load, so a refinement probe runs the plugin it is testing.
164
202
  - **A person switches things on and off for a scope.** `plugins.attach` and `plugins.detach`
165
203
  take a plugin's or a contribution's `id` and a `scope` (`{}` for everywhere, `{ agentId }`, or
166
204
  `{ projectId }`). The narrowest scope that says something wins: an agent, then a project, then
@@ -204,7 +242,8 @@ table. With the `--host-*` flags the harness calls the host for `secrets.get|set
204
242
  `policy.scope|authorize|approval|connections`, and `tools.call`; the host registers its tools
205
243
  with `tools.register` and its names with `directory.set`.
206
244
 
207
- `skills.import` accepts complete user-owned skill folders:
245
+ `variants.importComponents` adds complete skill folders, or single-file rules and prompts, to the
246
+ component library:
208
247
 
209
248
  ```ts
210
249
  { skills: [{ name, files: [{ path, content, encoding }] }] }
@@ -215,7 +254,8 @@ It validates bounded relative paths and file encodings, requires a root
215
254
  has no knowledge of the application feature that may call it.
216
255
 
217
256
  `npm run prove` starts that server on a throwaway data root, with no application present, and
218
- exercises accounts, memory, skills, the prompt, connected apps, and a recorded session.
257
+ exercises accounts, variants, the Wiki, the prompt, connected apps, a recorded session, a
258
+ plugin hook, and the refinement demo end to end.
219
259
 
220
260
  ## Run it as a standalone Harness terminal
221
261
 
@@ -223,13 +263,12 @@ After the CLI package is published to npm or your company's npm registry, instal
223
263
 
224
264
  ```sh
225
265
  npm install --global @xingular/harness
226
- xingular-harness
266
+ xharness
227
267
  ```
228
268
 
229
- The machine needs Node 22.19 or newer. Harness runs its own terminal frontend through the
230
- active Node runtime on every platform, using its pinned Pi SDK; no separate global `pi`
231
- installation is required. On first launch, it creates a `Default` isolated account. Use
232
- `/accounts` or `/login` to sign in.
269
+ The machine needs Node 22.19 or newer and Bun 1.3.14 or newer. Harness runs its own OpenTUI
270
+ terminal frontend with Bun, using its pinned Pi SDK; no separate global `pi` installation is
271
+ required. On first launch, it creates a `Default` isolated account. Use `/accounts` to sign in.
233
272
 
234
273
  Provider sign-in progress lives in the running Harness process. An embedding application can call
235
274
  `accounts.loginStatus` after reconnecting to recover the current device code or prompt by account;
@@ -244,30 +283,48 @@ npm run dev
244
283
  ```
245
284
 
246
285
  `npm run dev` rebuilds the CLI and opens the Harness terminal in the current working directory.
247
- It uses the normal Harness data and state directories. Press `/quit` or Ctrl+C to close it.
248
- For separate development data, pass the usual `--data <dir>` and `--state <dir>` arguments:
249
- `npm run dev -- --data <dir> --state <dir>`.
250
-
251
- Building a checkout does not update an existing global `xingular-harness` installation.
286
+ It uses separate development directories by default: `~/.xingular-harness-dev/data` and
287
+ `~/.xingular-harness-dev/state`. This keeps development harness data and device settings—including
288
+ accounts, Pi settings, approvals, and connections—separate from the installed command. Press
289
+ `/quit`, Ctrl+C or Ctrl+D to close it. Override either directory with `--data <dir>` or
290
+ `--state <dir>`; for example: `npm run dev -- --data <dir> --state <dir>`. An omitted option keeps
291
+ its development specific default.
292
+
293
+ The OpenTUI/Solid frontend is the only terminal. Install Bun 1.3.14 or newer and run
294
+ `npm run build:tui` (or `npm run build`); without Bun the build fails rather than producing a
295
+ terminal that cannot start. The harness runs `dist/terminal-opentui.js`, which uses the same
296
+ session runtime, accounts, command pages, approvals, questions, plugins and run records as the
297
+ embedded SDK. See [the terminal guide](docs/terminal-tui.md).
298
+
299
+ Building a checkout does not update an existing global `xharness` installation.
252
300
  To replace that command with this checkout, run `npm pack`, then install the exact tarball
253
301
  filename it prints with `npm install --global ./<tarball-filename>`. This is a local install;
254
302
  it does not publish a release. Close an already-running terminal session and launch the command
255
303
  again to load the new frontend. A package version alone cannot distinguish an unreleased local
256
304
  build from an older installed build with the same version.
257
305
 
258
- This opens the Harness-owned terminal frontend in the current working directory. Its
259
- presentation follows the inspected Oh My Pi 18.11.3 titanium and light palettes, centered welcome, filled
260
- status band and curved `╰─` prompt, with Harness identity and existing capabilities. Harness
261
- owns screen composition, editing/input dispatch, scrolling, command routing and plugin UI;
262
- Pi supplies the persistent execution runtime, native history and rich content components.
263
- The existing isolated account, compiled context, approval gate, telemetry and Wiki/socket
264
- commands remain behind the terminal. No Pi `InteractiveMode` is constructed.
265
-
266
- `/resume` stays inside the prepared history and working folder; `/import` accepts an explicitly
267
- selected native JSONL file only for the same working folder. Cancel an active response before
268
- changing or reloading a session. Full OMP visual parity is not established by the current
269
- verification. See [terminal architecture and evidence](docs/terminal-tui.md),
270
- [the decision](docs/decisions/ADR-0001-owned-terminal.md), and [third-party notices](NOTICE.md).
306
+ This opens the Harness-owned OpenTUI terminal in the current working directory. Its presentation
307
+ uses the Harness titanium palette and an OpenCode-inspired layout: the transcript above a
308
+ borderless composer with the working status above it and the model, context and token line below.
309
+ Harness owns screen composition, editing/input dispatch, scrolling, command routing and plugin UI;
310
+ Pi supplies the persistent execution runtime, native history and rich content components. The
311
+ existing isolated account, compiled context, approval gate, telemetry and Wiki/socket commands
312
+ remain behind the terminal. No Pi `InteractiveMode` is constructed.
313
+
314
+ `/resume` stays inside the prepared account history and working folder. Cancel an active response
315
+ before changing or reloading a session. Full OMP visual parity is not established by the current
316
+ verification. `/accounts`, `/permissions`, `/plugins`, `/hub`, `/components`, `/settings`, `/trajectory`
317
+ and `/log` each open their own centered page dialog with local tabs. `/permissions` reviews device-local Pi
318
+ terminal grants and the Full Permission switch; tool grants apply across terminal sessions sharing this
319
+ Harness state, and Full Permission requires confirmation. `/components` browses reusable skills,
320
+ prompts and rules; a confirmed skill or rule addition creates a variant version for future sessions while
321
+ the current terminal stays pinned. `/trajectory` opens recorded runs for the current native conversation,
322
+ with event navigation and a detail inspector. `/log` shows a static, redacted snapshot of Harness
323
+ diagnostics and run events for the current conversation; press Escape to close. See
324
+ [terminal architecture and evidence](docs/terminal-tui.md),
325
+ [the ownership decision](docs/decisions/ADR-0001-owned-terminal.md),
326
+ [the OpenTUI-only decision](docs/decisions/ADR-0006-opentui-only-terminal.md), and
327
+ [third-party notices](NOTICE.md).
271
328
 
272
329
  ### `/accounts` in the terminal
273
330
 
@@ -279,36 +336,45 @@ command the model runs in the shell cannot make it.
279
336
  A running session stays on the account it started with. To use another account for this
280
337
  session, choose **Use for this session**: the terminal child restarts and the same conversation
281
338
  resumes on that account. Removing an account that a running terminal is using is refused. Only
282
- terminals in this process are counted, so an account used by another running `xingular-harness` window can
339
+ terminals in this process are counted, so an account used by another running `xharness` window can
283
340
  still be removed; that session then asks for another account the next time it starts.
284
341
 
285
- The default data and device state directories are `~/.xingular-harness/data` and
286
- `~/.xingular-harness/state`. Override them with `--data <dir>` and `--state <dir>`. Session
287
- history is stored per working directory and can be reopened with the terminal's `/resume`
288
- command. The explicit `terminal` command is an alias for the default launch. Use `--help` to see the commands;
289
- `serve` remains the host-facing RPC service for integrations such as Xingular Agent/App.
342
+ The installed standalone command defaults to `~/.xingular-harness/data` and
343
+ `~/.xingular-harness/state`; `npm run dev` instead defaults to the separate
344
+ `~/.xingular-harness-dev/data` and `~/.xingular-harness-dev/state`. Override either with
345
+ `--data <dir>` and `--state <dir>`. Session history is stored per working directory and can be
346
+ reopened with the terminal's `/resume` command. The explicit `terminal` command is an alias for
347
+ the default launch. Use `--help` to see the commands; `serve` remains the host-facing RPC service
348
+ for integrations such as Xingular Agent/App.
290
349
 
291
350
  ## Storage
292
351
 
293
352
  ```
294
353
  <data root>/
295
- wiki/ home.md, library/, projects/<slug>/, facts/, blocks/, revisions, inbox, log
296
- registry/ skills/, prompts/, rules/ (a person's own; never copied)
354
+ variants/<scope>/ versions/<fingerprint>/variant/, head.json, lineage.jsonl (the eight components)
355
+ refine/<id>/ summary.json, task.json, variants/<label>/, rollouts/, context/, selection/, reflection/, improver/
356
+ library/<scope>/<area>/ INDEX.md, variants/<task>/{variant/, EXPERIENCE.md} (the experience library)
357
+ wiki/ home.md, library/, projects/<slug>/ (project notes)
358
+ wiki-history/ earlier versions of notes
359
+ legacy/ what an earlier Wiki kept (memory blocks, facts, revisions, Inbox), moved once
360
+ registry/ skills/, prompts/, rules/ (the component library; the Hub installs here)
297
361
  plugins/<name>/ packages kept with a person's data; each is found as an installed plugin
298
- runs/<id>/ run.json, events.jsonl, context.json, caller.json
299
- config/ context profiles, what is switched on for whom (plugin-attachments.json),
362
+ runs/<id>/ run.json, events.jsonl, context.json, caller.json, subagents.json (reserved child IDs)
363
+ config/ what is switched on for whom (plugin-attachments.json),
300
364
  settings the harness reads
301
- index.sqlite a rebuildable index of Wiki entries and runs (FTS5)
365
+ index.sqlite a rebuildable index of runs for recall (FTS5)
302
366
  projects.json read only: the application owns it
303
367
 
304
368
  <state dir>/
305
369
  accounts/ registry, per-account Pi agent folders, audit log
306
370
  approvals.json standing approvals
307
371
  plugin-trust.json the code a person trusted, by hash, and whether earlier packages were taken over
372
+ variant-plugin-trust.json harness-variant plugin code a person trusted, and scopes whose probes may run improver code
308
373
  plugin-registered.json what each extension registered the last time a session loaded it
309
374
  plugin-hooks.json what each hooks file listens for and how its last run went
310
375
  connections.json connected apps (secrets are in the SecretStore)
311
376
  run/ the session socket and the terminal commands
377
+ harness.log diagnostics from the standalone terminal, kept off its screen
312
378
  ```
313
379
 
314
380
  The files are the source of truth; `index.sqlite` can be deleted and rebuilt
@@ -318,28 +384,39 @@ The files are the source of truth; `index.sqlite` can be deleted and rebuilt
318
384
 
319
385
  ```sh
320
386
  npm run ci # typecheck, unit/golden tests, and standalone proof; matches GitHub CI
321
- npm run build # dist/cli.js (the xingular-harness command) and dist/terminal-pi.js
387
+ npm run build # dist/cli.js, dist/terminal-pi.js, and the OpenTUI frontend
388
+ npm run build:tui # only the OpenTUI frontend
322
389
  ```
323
390
 
324
- Node 22.19 or newer.
391
+ Node 22.19 or newer and Bun 1.3.14 or newer.
325
392
 
326
393
  ## Images
327
394
 
328
- `SessionRunInput.requiresImageInput` optionally requires a vision-capable resolved Pi model before a prompt is delivered. The check includes direct `images` input, and the generic tool wrapper rejects image results on text-only models. Direct prompt images use Pi's `{ type: 'image', data, mimeType }` content shape. Applications own file formats, attachment selection, extraction and image preparation; the Harness only transports typed image content and validates model capability.
395
+ `SessionRunInput.requiresImageInput` optionally requires a vision-capable resolved Pi model before a prompt is delivered. The check includes direct `images` input, and the generic tool wrapper rejects image results on text-only models. Direct prompt images use Pi's `{ type: 'image', data, mimeType }` content shape. Applications own attachment selection, extraction and image preparation; the Harness transports typed image content and validates model capability. In the standalone terminal, pasting Finder-copied HEIC/HEIF files on macOS converts them to temporary PNGs so Pi can read their pixels. See [the terminal guide](docs/terminal-tui.md#clipboard-image-paste).
396
+
397
+ `SessionRunInput.initialBashCommand` is an opt-in for one new interactive user turn. It must match
398
+ the leading `!` command in `text`; Harness checks it through the same per-call gate as model-issued
399
+ Bash, executes it once in Pi's native session, records its bounded result, and asks the model to
400
+ inspect that result before replying. Automatic, plan, resumed, relation, probe, and improver runs
401
+ cannot carry it. See the [terminal guide](docs/terminal-tui.md#bash-command-mode).
329
402
 
330
403
  ## Curated Hub
331
404
 
332
- `xingular-harness hub list [--refresh]`, `hub show publisher/name@version`, and
405
+ `xharness hub list [--refresh]`, `xharness hub show publisher/name@version`, and
333
406
  `hub install publisher/name@version` browse and install exact catalog versions. `/hub` offers the
334
407
  same review in the interactive terminal, using its private control key for installation. Both the
335
- terminal and embedding applications use `hub.list`, `hub.get`, `hub.install`, and `hub.readDocument`.
336
- `hub.get { id, version, preview: true }` verifies data payload bytes without installing them.
408
+ terminal and embedding applications use `hub.list`, `hub.get`, `hub.preview`, `hub.install`,
409
+ `hub.uninstall`, and `hub.readDocument`. `hub.get { id, version, preview: true }` verifies data
410
+ payload bytes without installing them. `hub.preview { id, version, offset }` returns bounded,
411
+ UTF-8-safe pages of up to 16 KiB from a verified payload.
337
412
 
338
413
  Registry bundles import complete skills or single Markdown prompts/rules, disabled. Pi packages
339
414
  reuse the existing installer and require an exact npm version or full GitHub commit. Documents
340
415
  are saved as inert JSON for a compatible host to interpret; the harness does not apply them.
341
416
  Installation grants no attachment, trust, credentials, or permission. Writes are serialized and
342
- existing registry files are never overwritten.
417
+ existing registry files are never overwritten. Receipts report whether their resources are intact;
418
+ uninstall removes only the exact receipt's resources, including local edits within those paths, and
419
+ revokes its attachment choices.
343
420
 
344
421
  Installed documents and provenance live under `<data root>/hub/`; the catalog cache is
345
422
  `<state dir>/hub/catalog.json`. An offline snapshot ships with the package. Explicit refresh keeps
@@ -358,9 +435,34 @@ An embedding application may set `externalMaintenance: true`, supply trusted `Ca
358
435
  `vaultAccess` (`self` or `curator`), and register `maintenanceTools`/`MAINTENANCE_PLUGIN`.
359
436
  Self callers directly edit only their own writable persona/notes; shared knowledge and text-resource
360
437
  writes become persistent proposals. Curator tools read original evidence, compare captured target
361
- revisions, apply reviewed changes, persist receipts and undo without overwriting later edits.
438
+ revisions, read all host-assigned requests together, and apply reconciled Wiki proposals as one
439
+ undoable change set. Resource proposals keep their own receipts; executable proposals remain inert
440
+ until the user reviews/trusts them. Later user edits are never overwritten.
362
441
  `maintenance.list`, `maintenance.review` and `maintenance.retry` let the host dispatch its own
363
442
  recorded sessions. Curator runs do not recursively queue maintenance. Optional assigned IDs freeze
364
443
  which requests a batch may claim. These fields are trusted host context, never model arguments.
365
- Executable proposals remain inert until the user reviews/trusts them. Standalone callers that omit
366
- this option retain the existing lifecycle and direct-write contract.
444
+ `maintenance_read_batch` reads those assigned requests together; `maintenance_apply_batch` records
445
+ one decision for each and applies the evidence-checked Wiki set atomically. Standalone callers that
446
+ omit this option retain the existing lifecycle and direct-write contract.
447
+
448
+ ## Readiness diagnostics
449
+
450
+ Use `/doctor` in the terminal for local readiness checks and explicitly selected live probes. The same
451
+ structured jobs are available through `harness.doctor` and `doctor.*` server methods. See
452
+ [Doctor](docs/doctor.md) for coverage, consent, isolation, and provider callbacks.
453
+
454
+ ## Public 1.0.0 release candidate
455
+
456
+ The public package is ESM: import from `@xingular/harness` or supported subpaths such as
457
+ `@xingular/harness/variant/seed`. JavaScript and declarations are shipped in `dist/sdk`; a
458
+ TypeScript loader is not required. Node 22.19 or later is required. The interactive terminal
459
+ also requires Bun (release builds use 1.4.2); the CLI reports its version with `xharness --version`.
460
+ Original project code is Apache-2.0. See LICENSE, NOTICE.md and THIRD_PARTY_LICENSES.md.
461
+
462
+ A host providing its own browser tools sets `browser: false` on `createHarness` to disable the
463
+ generic backend and prevent tool-name collisions. The desktop App uses this for shared tabs.
464
+ The default standalone Harness keeps its isolated browser backend enabled.
465
+
466
+ This candidate intentionally resets development numbering to 1.0.0 while preserving old versions.
467
+ See [release notes](docs/releases/1.0.0.md) and [release procedure](docs/releases/README.md).
468
+ Publication requires registry verification, green CI and approval of the candidate/tag push.