@xingular/harness 0.1.7 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (819) hide show
  1. package/CHANGELOG.md +125 -1
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +22 -0
  4. package/README.md +239 -86
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/dist/cli.js +17853 -13114
  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/agents/builtin.d.ts +2 -0
  18. package/dist/sdk/agents/builtin.js +34 -0
  19. package/dist/sdk/agents/narrow.d.ts +13 -0
  20. package/dist/sdk/agents/narrow.js +29 -0
  21. package/dist/sdk/agents/profiles.d.ts +80 -0
  22. package/dist/sdk/agents/profiles.js +221 -0
  23. package/dist/sdk/annotations/bridge.d.ts +42 -0
  24. package/dist/sdk/annotations/bridge.js +264 -0
  25. package/dist/sdk/annotations/capture.d.ts +116 -0
  26. package/dist/sdk/annotations/capture.js +308 -0
  27. package/dist/sdk/annotations/delivery.d.ts +72 -0
  28. package/dist/sdk/annotations/delivery.js +130 -0
  29. package/dist/sdk/annotations/inspect.d.ts +10 -0
  30. package/dist/sdk/annotations/inspect.js +33 -0
  31. package/dist/sdk/annotations/isolated.d.ts +6 -0
  32. package/dist/sdk/annotations/isolated.js +51 -0
  33. package/dist/sdk/annotations/pageScript.d.ts +28 -0
  34. package/dist/sdk/annotations/pageScript.js +570 -0
  35. package/dist/sdk/annotations/part.d.ts +10 -0
  36. package/dist/sdk/annotations/part.js +144 -0
  37. package/dist/sdk/annotations/queue.d.ts +4 -0
  38. package/dist/sdk/annotations/queue.js +40 -0
  39. package/dist/sdk/annotations/serverMethods.d.ts +3 -0
  40. package/dist/sdk/annotations/serverMethods.js +62 -0
  41. package/dist/sdk/annotations/store.d.ts +160 -0
  42. package/dist/sdk/annotations/store.js +386 -0
  43. package/dist/sdk/browser/config.d.ts +16 -0
  44. package/dist/sdk/browser/config.js +22 -0
  45. package/dist/sdk/browser/diagnostics.d.ts +4 -0
  46. package/dist/sdk/browser/diagnostics.js +38 -0
  47. package/dist/sdk/browser/index.d.ts +28 -0
  48. package/dist/sdk/browser/index.js +72 -0
  49. package/dist/sdk/browser/network.d.ts +10 -0
  50. package/dist/sdk/browser/network.js +59 -0
  51. package/dist/sdk/browser/serverMethods.d.ts +3 -0
  52. package/dist/sdk/browser/serverMethods.js +7 -0
  53. package/dist/sdk/browser/session.d.ts +85 -0
  54. package/dist/sdk/browser/session.js +228 -0
  55. package/dist/sdk/browser/tools.d.ts +8 -0
  56. package/dist/sdk/browser/tools.js +329 -0
  57. package/dist/sdk/capabilities/api.d.ts +22 -0
  58. package/dist/sdk/capabilities/api.js +54 -0
  59. package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
  60. package/dist/sdk/capabilities/runSnapshot.js +47 -0
  61. package/dist/sdk/capabilities/types.d.ts +29 -0
  62. package/dist/sdk/capabilities/types.js +1 -0
  63. package/dist/sdk/cli.d.ts +2 -0
  64. package/dist/sdk/cli.js +150 -0
  65. package/dist/sdk/core/bus.d.ts +23 -0
  66. package/dist/sdk/core/bus.js +76 -0
  67. package/dist/sdk/core/caller.d.ts +22 -0
  68. package/dist/sdk/core/caller.js +16 -0
  69. package/dist/sdk/core/changes.d.ts +15 -0
  70. package/dist/sdk/core/changes.js +15 -0
  71. package/dist/sdk/core/effort.d.ts +2 -0
  72. package/dist/sdk/core/effort.js +1 -0
  73. package/dist/sdk/core/env.d.ts +18 -0
  74. package/dist/sdk/core/env.js +8 -0
  75. package/dist/sdk/core/errors.d.ts +15 -0
  76. package/dist/sdk/core/errors.js +24 -0
  77. package/dist/sdk/core/frontmatter.d.ts +12 -0
  78. package/dist/sdk/core/frontmatter.js +50 -0
  79. package/dist/sdk/core/fs.d.ts +18 -0
  80. package/dist/sdk/core/fs.js +106 -0
  81. package/dist/sdk/core/index.d.ts +24 -0
  82. package/dist/sdk/core/index.js +187 -0
  83. package/dist/sdk/core/path.d.ts +7 -0
  84. package/dist/sdk/core/path.js +79 -0
  85. package/dist/sdk/core/projects.d.ts +18 -0
  86. package/dist/sdk/core/projects.js +67 -0
  87. package/dist/sdk/core/secrets.d.ts +2 -0
  88. package/dist/sdk/core/secrets.js +5 -0
  89. package/dist/sdk/core/text.d.ts +7 -0
  90. package/dist/sdk/core/text.js +40 -0
  91. package/dist/sdk/doctor/checks.d.ts +5 -0
  92. package/dist/sdk/doctor/checks.js +208 -0
  93. package/dist/sdk/doctor/probe.d.ts +4 -0
  94. package/dist/sdk/doctor/probe.js +92 -0
  95. package/dist/sdk/doctor/serverMethods.d.ts +3 -0
  96. package/dist/sdk/doctor/serverMethods.js +8 -0
  97. package/dist/sdk/doctor/service.d.ts +23 -0
  98. package/dist/sdk/doctor/service.js +144 -0
  99. package/dist/sdk/doctor/types.d.ts +141 -0
  100. package/dist/sdk/doctor/types.js +29 -0
  101. package/dist/sdk/harness.d.ts +148 -0
  102. package/dist/sdk/harness.js +338 -0
  103. package/dist/sdk/history/lessonPrompt.d.ts +2 -0
  104. package/dist/sdk/history/lessonPrompt.js +15 -0
  105. package/dist/sdk/history/lessons.d.ts +52 -0
  106. package/dist/sdk/history/lessons.js +173 -0
  107. package/dist/sdk/history/recall.d.ts +68 -0
  108. package/dist/sdk/history/recall.js +199 -0
  109. package/dist/sdk/history/serverMethods.d.ts +3 -0
  110. package/dist/sdk/history/serverMethods.js +8 -0
  111. package/dist/sdk/history/trajectory.d.ts +7 -0
  112. package/dist/sdk/history/trajectory.js +216 -0
  113. package/dist/sdk/hub/catalog.json +123 -0
  114. package/dist/sdk/hub/cli.d.ts +7 -0
  115. package/dist/sdk/hub/cli.js +81 -0
  116. package/dist/sdk/hub/hub.d.ts +74 -0
  117. package/dist/sdk/hub/hub.js +474 -0
  118. package/dist/sdk/hub/schema.d.ts +280 -0
  119. package/dist/sdk/hub/schema.js +78 -0
  120. package/dist/sdk/hub/serverMethods.d.ts +3 -0
  121. package/dist/sdk/hub/serverMethods.js +11 -0
  122. package/dist/sdk/index.d.ts +73 -0
  123. package/dist/sdk/index.js +55 -0
  124. package/dist/sdk/mcp/connections.d.ts +83 -0
  125. package/dist/sdk/mcp/connections.js +676 -0
  126. package/dist/sdk/mcp/manager.d.ts +26 -0
  127. package/dist/sdk/mcp/manager.js +124 -0
  128. package/dist/sdk/mcp/oauth.d.ts +35 -0
  129. package/dist/sdk/mcp/oauth.js +171 -0
  130. package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
  131. package/dist/sdk/mcp/scopeMigration.js +198 -0
  132. package/dist/sdk/mcp/serverMethods.d.ts +3 -0
  133. package/dist/sdk/mcp/serverMethods.js +22 -0
  134. package/dist/sdk/mcp/service.d.ts +160 -0
  135. package/dist/sdk/mcp/service.js +510 -0
  136. package/dist/sdk/mcp/types.d.ts +131 -0
  137. package/dist/sdk/mcp/types.js +49 -0
  138. package/dist/sdk/pi/runtime.d.ts +13 -0
  139. package/dist/sdk/pi/runtime.js +31 -0
  140. package/dist/sdk/plugins/api.d.ts +66 -0
  141. package/dist/sdk/plugins/api.js +155 -0
  142. package/dist/sdk/plugins/attachments.d.ts +46 -0
  143. package/dist/sdk/plugins/attachments.js +111 -0
  144. package/dist/sdk/plugins/builtin.d.ts +7 -0
  145. package/dist/sdk/plugins/builtin.js +163 -0
  146. package/dist/sdk/plugins/builtinRegistry.d.ts +53 -0
  147. package/dist/sdk/plugins/builtinRegistry.js +49 -0
  148. package/dist/sdk/plugins/catalogue.d.ts +29 -0
  149. package/dist/sdk/plugins/catalogue.js +196 -0
  150. package/dist/sdk/plugins/cli.d.ts +13 -0
  151. package/dist/sdk/plugins/cli.js +188 -0
  152. package/dist/sdk/plugins/discover.d.ts +42 -0
  153. package/dist/sdk/plugins/discover.js +115 -0
  154. package/dist/sdk/plugins/firstParty.d.ts +50 -0
  155. package/dist/sdk/plugins/firstParty.js +113 -0
  156. package/dist/sdk/plugins/hooks.d.ts +94 -0
  157. package/dist/sdk/plugins/hooks.js +162 -0
  158. package/dist/sdk/plugins/identity.d.ts +19 -0
  159. package/dist/sdk/plugins/identity.js +48 -0
  160. package/dist/sdk/plugins/install.d.ts +20 -0
  161. package/dist/sdk/plugins/install.js +110 -0
  162. package/dist/sdk/plugins/inventory.d.ts +22 -0
  163. package/dist/sdk/plugins/inventory.js +110 -0
  164. package/dist/sdk/plugins/manifest.d.ts +13 -0
  165. package/dist/sdk/plugins/manifest.js +56 -0
  166. package/dist/sdk/plugins/plugins.d.ts +104 -0
  167. package/dist/sdk/plugins/plugins.js +164 -0
  168. package/dist/sdk/plugins/runtime.d.ts +9 -0
  169. package/dist/sdk/plugins/runtime.js +95 -0
  170. package/dist/sdk/plugins/trust.d.ts +44 -0
  171. package/dist/sdk/plugins/trust.js +120 -0
  172. package/dist/sdk/plugins/types.d.ts +159 -0
  173. package/dist/sdk/plugins/types.js +7 -0
  174. package/dist/sdk/prompt/compile.d.ts +177 -0
  175. package/dist/sdk/prompt/compile.js +413 -0
  176. package/dist/sdk/refine/cli.d.ts +4 -0
  177. package/dist/sdk/refine/cli.js +186 -0
  178. package/dist/sdk/refine/demo.d.ts +21 -0
  179. package/dist/sdk/refine/demo.js +114 -0
  180. package/dist/sdk/refine/evidence.d.ts +55 -0
  181. package/dist/sdk/refine/evidence.js +330 -0
  182. package/dist/sdk/refine/host.d.ts +51 -0
  183. package/dist/sdk/refine/host.js +76 -0
  184. package/dist/sdk/refine/ledger.d.ts +48 -0
  185. package/dist/sdk/refine/ledger.js +76 -0
  186. package/dist/sdk/refine/library.d.ts +55 -0
  187. package/dist/sdk/refine/library.js +177 -0
  188. package/dist/sdk/refine/pi.d.ts +72 -0
  189. package/dist/sdk/refine/pi.js +248 -0
  190. package/dist/sdk/refine/prompts.d.ts +45 -0
  191. package/dist/sdk/refine/prompts.js +390 -0
  192. package/dist/sdk/refine/recursion.d.ts +113 -0
  193. package/dist/sdk/refine/recursion.js +258 -0
  194. package/dist/sdk/refine/runner.d.ts +81 -0
  195. package/dist/sdk/refine/runner.js +150 -0
  196. package/dist/sdk/refine/selection.d.ts +57 -0
  197. package/dist/sdk/refine/selection.js +251 -0
  198. package/dist/sdk/refine/serverMethods.d.ts +3 -0
  199. package/dist/sdk/refine/serverMethods.js +20 -0
  200. package/dist/sdk/refine/service.d.ts +84 -0
  201. package/dist/sdk/refine/service.js +165 -0
  202. package/dist/sdk/refine/suite.d.ts +67 -0
  203. package/dist/sdk/refine/suite.js +174 -0
  204. package/dist/sdk/refine/trajectory.d.ts +9 -0
  205. package/dist/sdk/refine/trajectory.js +68 -0
  206. package/dist/sdk/refine/types.d.ts +77 -0
  207. package/dist/sdk/refine/types.js +10 -0
  208. package/dist/sdk/server/methods.d.ts +3 -0
  209. package/dist/sdk/server/methods.js +293 -0
  210. package/dist/sdk/server/params.d.ts +4 -0
  211. package/dist/sdk/server/params.js +11 -0
  212. package/dist/sdk/server/remote.d.ts +19 -0
  213. package/dist/sdk/server/remote.js +84 -0
  214. package/dist/sdk/server/rpc.d.ts +20 -0
  215. package/dist/sdk/server/rpc.js +102 -0
  216. package/dist/sdk/server/serve.d.ts +10 -0
  217. package/dist/sdk/server/serve.js +18 -0
  218. package/dist/sdk/sessions/approvals.d.ts +47 -0
  219. package/dist/sdk/sessions/approvals.js +119 -0
  220. package/dist/sdk/sessions/continuation.d.ts +48 -0
  221. package/dist/sdk/sessions/continuation.js +85 -0
  222. package/dist/sdk/sessions/contracts.d.ts +551 -0
  223. package/dist/sdk/sessions/contracts.js +338 -0
  224. package/dist/sdk/sessions/extensionUi.d.ts +19 -0
  225. package/dist/sdk/sessions/extensionUi.js +64 -0
  226. package/dist/sdk/sessions/history.d.ts +16 -0
  227. package/dist/sdk/sessions/history.js +68 -0
  228. package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
  229. package/dist/sdk/sessions/lineageJoin.js +61 -0
  230. package/dist/sdk/sessions/planMode.d.ts +39 -0
  231. package/dist/sdk/sessions/planMode.js +93 -0
  232. package/dist/sdk/sessions/policy.d.ts +43 -0
  233. package/dist/sdk/sessions/policy.js +1 -0
  234. package/dist/sdk/sessions/pricing.d.ts +34 -0
  235. package/dist/sdk/sessions/pricing.js +40 -0
  236. package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
  237. package/dist/sdk/sessions/reasoningSummaries.js +61 -0
  238. package/dist/sdk/sessions/registry.d.ts +103 -0
  239. package/dist/sdk/sessions/registry.js +386 -0
  240. package/dist/sdk/sessions/runIndex.d.ts +21 -0
  241. package/dist/sdk/sessions/runIndex.js +65 -0
  242. package/dist/sdk/sessions/runStore.d.ts +66 -0
  243. package/dist/sdk/sessions/runStore.js +337 -0
  244. package/dist/sdk/sessions/runner.d.ts +213 -0
  245. package/dist/sdk/sessions/runner.js +589 -0
  246. package/dist/sdk/sessions/sessions.d.ts +152 -0
  247. package/dist/sdk/sessions/sessions.js +461 -0
  248. package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
  249. package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
  250. package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
  251. package/dist/sdk/sessions/sideQuestions.js +290 -0
  252. package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
  253. package/dist/sdk/sessions/subagentServerMethods.js +41 -0
  254. package/dist/sdk/sessions/subagentService.d.ts +52 -0
  255. package/dist/sdk/sessions/subagentService.js +265 -0
  256. package/dist/sdk/sessions/subagents.d.ts +58 -0
  257. package/dist/sdk/sessions/subagents.js +87 -0
  258. package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
  259. package/dist/sdk/terminal/accountsMenu.js +392 -0
  260. package/dist/sdk/terminal/browser.d.ts +62 -0
  261. package/dist/sdk/terminal/browser.js +41 -0
  262. package/dist/sdk/terminal/browserControl.d.ts +29 -0
  263. package/dist/sdk/terminal/browserControl.js +186 -0
  264. package/dist/sdk/terminal/cli.d.ts +20 -0
  265. package/dist/sdk/terminal/cli.js +121 -0
  266. package/dist/sdk/terminal/client.d.ts +15 -0
  267. package/dist/sdk/terminal/client.js +126 -0
  268. package/dist/sdk/terminal/commandHelp.d.ts +17 -0
  269. package/dist/sdk/terminal/commandHelp.js +20 -0
  270. package/dist/sdk/terminal/control.d.ts +4 -0
  271. package/dist/sdk/terminal/control.js +25 -0
  272. package/dist/sdk/terminal/controller.d.ts +78 -0
  273. package/dist/sdk/terminal/controller.js +383 -0
  274. package/dist/sdk/terminal/hubMenu.d.ts +10 -0
  275. package/dist/sdk/terminal/hubMenu.js +34 -0
  276. package/dist/sdk/terminal/launch.d.ts +5 -0
  277. package/dist/sdk/terminal/launch.js +27 -0
  278. package/dist/sdk/terminal/logs.d.ts +14 -0
  279. package/dist/sdk/terminal/logs.js +59 -0
  280. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
  281. package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
  282. package/dist/sdk/terminal/piExtension.d.ts +6 -0
  283. package/dist/sdk/terminal/piExtension.js +377 -0
  284. package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
  285. package/dist/sdk/terminal/pluginMenu.js +101 -0
  286. package/dist/sdk/terminal/socket.d.ts +73 -0
  287. package/dist/sdk/terminal/socket.js +287 -0
  288. package/dist/sdk/terminal/standalone.d.ts +20 -0
  289. package/dist/sdk/terminal/standalone.js +186 -0
  290. package/dist/sdk/terminal/subagentMonitor.d.ts +38 -0
  291. package/dist/sdk/terminal/subagentMonitor.js +121 -0
  292. package/dist/sdk/terminal/terminals.d.ts +212 -0
  293. package/dist/sdk/terminal/terminals.js +1108 -0
  294. package/dist/sdk/terminal/trajectory.d.ts +10 -0
  295. package/dist/sdk/terminal/trajectory.js +30 -0
  296. package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
  297. package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
  298. package/dist/sdk/terminal/tui/chrome.d.ts +64 -0
  299. package/dist/sdk/terminal/tui/chrome.js +169 -0
  300. package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
  301. package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
  302. package/dist/sdk/terminal/tui/commandPages.d.ts +11 -0
  303. package/dist/sdk/terminal/tui/commandPages.js +111 -0
  304. package/dist/sdk/terminal/tui/commands.d.ts +46 -0
  305. package/dist/sdk/terminal/tui/commands.js +399 -0
  306. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
  307. package/dist/sdk/terminal/tui/dialogGeometry.js +52 -0
  308. package/dist/sdk/terminal/tui/dialogs.d.ts +80 -0
  309. package/dist/sdk/terminal/tui/dialogs.js +370 -0
  310. package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
  311. package/dist/sdk/terminal/tui/keybindings.js +49 -0
  312. package/dist/sdk/terminal/tui/list.d.ts +73 -0
  313. package/dist/sdk/terminal/tui/list.js +196 -0
  314. package/dist/sdk/terminal/tui/modeChoices.d.ts +42 -0
  315. package/dist/sdk/terminal/tui/modeChoices.js +70 -0
  316. package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
  317. package/dist/sdk/terminal/tui/modelPicker.js +150 -0
  318. package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
  319. package/dist/sdk/terminal/tui/mouse.js +3 -0
  320. package/dist/sdk/terminal/tui/page.d.ts +17 -0
  321. package/dist/sdk/terminal/tui/page.js +1 -0
  322. package/dist/sdk/terminal/tui/pageOverlay.d.ts +27 -0
  323. package/dist/sdk/terminal/tui/pageOverlay.js +156 -0
  324. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +76 -0
  325. package/dist/sdk/terminal/tui/pages/accountsPage.js +409 -0
  326. package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
  327. package/dist/sdk/terminal/tui/pages/agentsPage.js +190 -0
  328. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
  329. package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
  330. package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
  331. package/dist/sdk/terminal/tui/pages/browserPage.js +738 -0
  332. package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
  333. package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
  334. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +39 -0
  335. package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
  336. package/dist/sdk/terminal/tui/pages/hubPage.d.ts +39 -0
  337. package/dist/sdk/terminal/tui/pages/hubPage.js +128 -0
  338. package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
  339. package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
  340. package/dist/sdk/terminal/tui/pages/notesPage.d.ts +75 -0
  341. package/dist/sdk/terminal/tui/pages/notesPage.js +201 -0
  342. package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
  343. package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
  344. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +57 -0
  345. package/dist/sdk/terminal/tui/pages/pluginsPage.js +243 -0
  346. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +63 -0
  347. package/dist/sdk/terminal/tui/pages/settingsPage.js +103 -0
  348. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +23 -0
  349. package/dist/sdk/terminal/tui/pages/subagentsPage.js +70 -0
  350. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +65 -0
  351. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +450 -0
  352. package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
  353. package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
  354. package/dist/sdk/terminal/tui/piAdapter.d.ts +18 -0
  355. package/dist/sdk/terminal/tui/piAdapter.js +48 -0
  356. package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
  357. package/dist/sdk/terminal/tui/planMode.js +2 -0
  358. package/dist/sdk/terminal/tui/pluginCommands.d.ts +14 -0
  359. package/dist/sdk/terminal/tui/pluginCommands.js +27 -0
  360. package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
  361. package/dist/sdk/terminal/tui/questionPicker.js +150 -0
  362. package/dist/sdk/terminal/tui/questions.d.ts +21 -0
  363. package/dist/sdk/terminal/tui/questions.js +42 -0
  364. package/dist/sdk/terminal/tui/runtime.d.ts +114 -0
  365. package/dist/sdk/terminal/tui/runtime.js +443 -0
  366. package/dist/sdk/terminal/tui/search.d.ts +22 -0
  367. package/dist/sdk/terminal/tui/search.js +60 -0
  368. package/dist/sdk/terminal/tui/selection.d.ts +16 -0
  369. package/dist/sdk/terminal/tui/selection.js +16 -0
  370. package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
  371. package/dist/sdk/terminal/tui/sessionUi.js +30 -0
  372. package/dist/sdk/terminal/tui/settingsModel.d.ts +14 -0
  373. package/dist/sdk/terminal/tui/settingsModel.js +114 -0
  374. package/dist/sdk/terminal/tui/sideQuestion.d.ts +53 -0
  375. package/dist/sdk/terminal/tui/sideQuestion.js +230 -0
  376. package/dist/sdk/terminal/tui/skillInvocation.d.ts +9 -0
  377. package/dist/sdk/terminal/tui/skillInvocation.js +43 -0
  378. package/dist/sdk/terminal/tui/status.d.ts +18 -0
  379. package/dist/sdk/terminal/tui/status.js +67 -0
  380. package/dist/sdk/terminal/tui/theme.d.ts +45 -0
  381. package/dist/sdk/terminal/tui/theme.js +176 -0
  382. package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
  383. package/dist/sdk/terminal/tui/treeModel.js +483 -0
  384. package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
  385. package/dist/sdk/terminal/tui/treePicker.js +251 -0
  386. package/dist/sdk/terminal/tui/ui.d.ts +49 -0
  387. package/dist/sdk/terminal/tui/ui.js +149 -0
  388. package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
  389. package/dist/sdk/terminal/tui/workingStatus.js +229 -0
  390. package/dist/sdk/tools/askUser.d.ts +6 -0
  391. package/dist/sdk/tools/askUser.js +92 -0
  392. package/dist/sdk/tools/checklist.d.ts +9 -0
  393. package/dist/sdk/tools/checklist.js +54 -0
  394. package/dist/sdk/tools/definitions.d.ts +30 -0
  395. package/dist/sdk/tools/definitions.js +117 -0
  396. package/dist/sdk/tools/dispatch.d.ts +16 -0
  397. package/dist/sdk/tools/dispatch.js +67 -0
  398. package/dist/sdk/tools/harnessTools.d.ts +8 -0
  399. package/dist/sdk/tools/harnessTools.js +20 -0
  400. package/dist/sdk/tools/sessionName.d.ts +7 -0
  401. package/dist/sdk/tools/sessionName.js +31 -0
  402. package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
  403. package/dist/sdk/tools/spawnSubagent.js +58 -0
  404. package/dist/sdk/tools/types.d.ts +48 -0
  405. package/dist/sdk/tools/types.js +1 -0
  406. package/dist/sdk/variant/components.d.ts +34 -0
  407. package/dist/sdk/variant/components.js +230 -0
  408. package/dist/sdk/variant/materialise.d.ts +66 -0
  409. package/dist/sdk/variant/materialise.js +81 -0
  410. package/dist/sdk/variant/migrate.d.ts +4 -0
  411. package/dist/sdk/variant/migrate.js +41 -0
  412. package/dist/sdk/variant/seed.d.ts +20 -0
  413. package/dist/sdk/variant/seed.js +116 -0
  414. package/dist/sdk/variant/store.d.ts +82 -0
  415. package/dist/sdk/variant/store.js +151 -0
  416. package/dist/sdk/variant/surface.d.ts +56 -0
  417. package/dist/sdk/variant/surface.js +81 -0
  418. package/dist/sdk/variant/trust.d.ts +27 -0
  419. package/dist/sdk/variant/trust.js +64 -0
  420. package/dist/sdk/variant/variant.d.ts +71 -0
  421. package/dist/sdk/variant/variant.js +331 -0
  422. package/dist/sdk/web/markdown.d.ts +10 -0
  423. package/dist/sdk/web/markdown.js +66 -0
  424. package/dist/sdk/web/part.d.ts +10 -0
  425. package/dist/sdk/web/part.js +6 -0
  426. package/dist/sdk/web/safeRequest.d.ts +34 -0
  427. package/dist/sdk/web/safeRequest.js +175 -0
  428. package/dist/sdk/web/search.d.ts +53 -0
  429. package/dist/sdk/web/search.js +168 -0
  430. package/dist/sdk/web/serverMethods.d.ts +3 -0
  431. package/dist/sdk/web/serverMethods.js +7 -0
  432. package/dist/sdk/web/text.d.ts +2 -0
  433. package/dist/sdk/web/text.js +7 -0
  434. package/dist/sdk/web/tools.d.ts +22 -0
  435. package/dist/sdk/web/tools.js +195 -0
  436. package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
  437. package/dist/sdk/wiki/notes.d.ts +68 -0
  438. package/dist/sdk/wiki/notes.js +297 -0
  439. package/dist/sdk/wiki/serverMethods.d.ts +3 -0
  440. package/dist/sdk/wiki/serverMethods.js +26 -0
  441. package/dist/sdk/worktrees/cli.d.ts +11 -0
  442. package/dist/sdk/worktrees/cli.js +146 -0
  443. package/dist/sdk/worktrees/copy.d.ts +9 -0
  444. package/dist/sdk/worktrees/copy.js +111 -0
  445. package/dist/sdk/worktrees/git.d.ts +16 -0
  446. package/dist/sdk/worktrees/git.js +81 -0
  447. package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
  448. package/dist/sdk/worktrees/serverMethods.js +30 -0
  449. package/dist/sdk/worktrees/service.d.ts +73 -0
  450. package/dist/sdk/worktrees/service.js +483 -0
  451. package/dist/sdk/worktrees/setup.d.ts +23 -0
  452. package/dist/sdk/worktrees/setup.js +65 -0
  453. package/dist/sdk/worktrees/types.d.ts +91 -0
  454. package/dist/sdk/worktrees/types.js +1 -0
  455. package/dist/sdk/world/actions.d.ts +23 -0
  456. package/dist/sdk/world/actions.js +31 -0
  457. package/dist/sdk/world/cli.d.ts +12 -0
  458. package/dist/sdk/world/cli.js +166 -0
  459. package/dist/sdk/world/images.d.ts +20 -0
  460. package/dist/sdk/world/images.js +48 -0
  461. package/dist/sdk/world/untrusted.d.ts +12 -0
  462. package/dist/sdk/world/untrusted.js +20 -0
  463. package/dist/sdk/world/world.d.ts +67 -0
  464. package/dist/sdk/world/world.js +79 -0
  465. package/dist/terminal-opentui.js +20778 -0
  466. package/dist/terminal-pi.js +794 -518
  467. package/docs/README.md +42 -0
  468. package/docs/architecture/00-overview.md +171 -0
  469. package/docs/architecture/01-extension-points.md +78 -0
  470. package/docs/architecture/02-sessions-and-runs.md +203 -0
  471. package/docs/architecture/03-variants.md +103 -0
  472. package/docs/architecture/04-prompt.md +122 -0
  473. package/docs/architecture/05-refinement.md +107 -0
  474. package/docs/architecture/06-plugins-and-capabilities.md +129 -0
  475. package/docs/architecture/07-tools-and-gate.md +103 -0
  476. package/docs/architecture/08-memory-and-history.md +94 -0
  477. package/docs/architecture/09-accounts-and-connectors.md +98 -0
  478. package/docs/architecture/10-server-protocol.md +193 -0
  479. package/docs/architecture/11-terminal.md +261 -0
  480. package/docs/architecture/12-storage.md +75 -0
  481. package/docs/architecture/13-world-tools.md +45 -0
  482. package/docs/architecture/14-surfaces-and-parity.md +89 -0
  483. package/docs/architecture/README.md +125 -0
  484. package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
  485. package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
  486. package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
  487. package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
  488. package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
  489. package/docs/architecture/proposals/PROP-0006-run-checklist.md +70 -0
  490. package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
  491. package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
  492. package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
  493. package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
  494. package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
  495. package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
  496. package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
  497. package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
  498. package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
  499. package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
  500. package/docs/architecture/proposals/PROP-0017-page-annotations.md +127 -0
  501. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -0
  502. package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
  503. package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
  504. package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
  505. package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
  506. package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
  507. package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
  508. package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
  509. package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +94 -0
  510. package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
  511. package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
  512. package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
  513. package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
  514. package/docs/architecture/proposals/README.md +101 -0
  515. package/docs/decisions/ADR-0002-native-subagent-lifecycle.md +49 -0
  516. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +70 -0
  517. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +50 -0
  518. package/docs/decisions/ADR-0005-app-provided-oauth-clients.md +54 -0
  519. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  520. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  521. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +38 -0
  522. package/docs/decisions/ADR-0009-xharness-command.md +39 -0
  523. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  524. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  525. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  526. package/docs/decisions/ADR-0013-doctor.md +27 -0
  527. package/docs/decisions/ADR-0014-public-release-baseline.md +22 -0
  528. package/docs/decisions/ADR-0015-resource-browser.md +28 -0
  529. package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
  530. package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
  531. package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
  532. package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
  533. package/docs/decisions/ADR-0020-page-annotations.md +37 -0
  534. package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
  535. package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
  536. package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
  537. package/docs/decisions/ADR-0024-xagent-command.md +40 -0
  538. package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
  539. package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
  540. package/docs/decisions/ADR-0027-connected-sketch-display.md +60 -0
  541. package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
  542. package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
  543. package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
  544. package/docs/doctor.md +80 -0
  545. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  546. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  547. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  548. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  549. package/docs/features/README.md +46 -0
  550. package/docs/features/automations/README.md +41 -0
  551. package/docs/features/cores/README.md +39 -0
  552. package/docs/features/google-harness2/README.md +52 -0
  553. package/docs/features/integrations/README.md +40 -0
  554. package/docs/features/interfaces/README.md +29 -0
  555. package/docs/features/memory/README.md +28 -0
  556. package/docs/future-work.md +48 -0
  557. package/docs/parity.md +78 -0
  558. package/docs/releases/1.0.0.md +40 -0
  559. package/docs/releases/4.0.0.md +46 -0
  560. package/docs/releases/README.md +41 -0
  561. package/docs/study/00-index.md +83 -0
  562. package/docs/study/arms/00-matrix.md +20 -0
  563. package/docs/study/arms/01-system-prompt.md +211 -0
  564. package/docs/study/arms/02-tools.md +79 -0
  565. package/docs/study/arms/03-subagents.md +90 -0
  566. package/docs/study/arms/04-skills.md +75 -0
  567. package/docs/study/arms/05-context-management.md +90 -0
  568. package/docs/study/arms/06-memory.md +90 -0
  569. package/docs/study/arms/07-governance.md +71 -0
  570. package/docs/study/arms/08-execution.md +69 -0
  571. package/docs/study/arms/09-observability.md +60 -0
  572. package/docs/study/arms/10-refinement.md +110 -0
  573. package/docs/study/autonomous-engineering-sources.md +277 -0
  574. package/docs/study/autonomy-sources.md +147 -0
  575. package/docs/study/btw-comparison.md +37 -0
  576. package/docs/study/feature-gap-review.md +42 -0
  577. package/docs/study/insights.md +123 -0
  578. package/docs/study/proactive-autonomy.md +408 -0
  579. package/docs/study/roadmap.md +72 -0
  580. package/docs/study/sources/claude-code.md +44 -0
  581. package/docs/study/sources/deepseek-harness.md +102 -0
  582. package/docs/study/sources/harness2.md +50 -0
  583. package/docs/study/sources/kimi-cli.md +42 -0
  584. package/docs/study/sources/omp.md +93 -0
  585. package/docs/study/sources/opencode.md +43 -0
  586. package/docs/study/sources/openhands.md +46 -0
  587. package/docs/study/sources/smolagents.md +40 -0
  588. package/docs/study/sources/swe-agent.md +34 -0
  589. package/docs/study/tui-resource-browser.md +78 -0
  590. package/docs/system-prompt-design.md +196 -0
  591. package/docs/terminal-tui.md +707 -58
  592. package/package.json +43 -13
  593. package/docs/evidence/terminal-2026-10-17/120x40-completed-transcript.ansi.gz +0 -0
  594. package/docs/evidence/terminal-2026-10-17/40x20-settings-interaction.ansi.gz +0 -0
  595. package/docs/evidence/terminal-2026-10-17/40x20-settings-keyboard.ansi.gz +0 -0
  596. package/docs/evidence/terminal-2026-10-17/40x20-welcome.ansi.gz +0 -0
  597. package/docs/evidence/terminal-2026-10-17/80x24-approval-0.ansi.gz +0 -0
  598. package/docs/evidence/terminal-2026-10-17/80x24-question.ansi.gz +0 -0
  599. package/docs/evidence/terminal-2026-10-17/verification.json +0 -130
  600. package/docs/evidence/terminal-2026-10-17-followup/120x40-completed-transcript.ansi.gz +0 -0
  601. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-interaction.ansi.gz +0 -0
  602. package/docs/evidence/terminal-2026-10-17-followup/40x20-settings-keyboard.ansi.gz +0 -0
  603. package/docs/evidence/terminal-2026-10-17-followup/40x20-welcome.ansi.gz +0 -0
  604. package/docs/evidence/terminal-2026-10-17-followup/80x24-approval-0.ansi.gz +0 -0
  605. package/docs/evidence/terminal-2026-10-17-followup/80x24-plugin-light.ansi.gz +0 -0
  606. package/docs/evidence/terminal-2026-10-17-followup/80x24-question-batch.ansi.gz +0 -0
  607. package/docs/evidence/terminal-2026-10-17-followup/80x24-question.ansi.gz +0 -0
  608. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-approval-0.ansi.gz +0 -0
  609. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-plugin-light.ansi.gz +0 -0
  610. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question-batch.ansi.gz +0 -0
  611. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/80x24-question.ansi.gz +0 -0
  612. package/docs/evidence/terminal-2026-10-17-followup/app-bundle/verification.json +0 -95
  613. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-approval-0.ansi.gz +0 -0
  614. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-plugin-light.ansi.gz +0 -0
  615. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question-batch.ansi.gz +0 -0
  616. package/docs/evidence/terminal-2026-10-17-followup/global-install/80x24-question.ansi.gz +0 -0
  617. package/docs/evidence/terminal-2026-10-17-followup/global-install/README.md +0 -27
  618. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command-80x24.ansi.gz +0 -0
  619. package/docs/evidence/terminal-2026-10-17-followup/global-install/shell-command.json +0 -18
  620. package/docs/evidence/terminal-2026-10-17-followup/global-install/verification.json +0 -95
  621. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-80x24.json.gz +0 -0
  622. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-final-80x24.json.gz +0 -0
  623. package/docs/evidence/terminal-2026-10-17-followup/harness-reference-scenario.json +0 -60
  624. package/docs/evidence/terminal-2026-10-17-followup/live-codex/README.md +0 -24
  625. package/docs/evidence/terminal-2026-10-17-followup/live-codex/complete-80x24.ansi.gz +0 -0
  626. package/docs/evidence/terminal-2026-10-17-followup/live-codex/verification.json +0 -57
  627. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24-early.json.gz +0 -0
  628. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-80x24.json.gz +0 -0
  629. package/docs/evidence/terminal-2026-10-17-followup/omp-reference-scenario.json +0 -58
  630. package/docs/evidence/terminal-2026-10-17-followup/omp-supplemental-static.json.gz +0 -0
  631. package/docs/evidence/terminal-2026-10-17-followup/rea-artifacts.json +0 -320
  632. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.json +0 -30
  633. package/docs/evidence/terminal-2026-10-17-followup/reference-comparison.md +0 -133
  634. package/docs/evidence/terminal-2026-10-17-followup/reference-source-observations.json +0 -20
  635. package/docs/evidence/terminal-2026-10-17-followup/verification.json +0 -207
  636. package/src/accounts/accounts.test.ts +0 -333
  637. package/src/accounts/accounts.ts +0 -658
  638. package/src/accounts/env.test.ts +0 -95
  639. package/src/accounts/env.ts +0 -338
  640. package/src/accounts/secrets.ts +0 -50
  641. package/src/accounts/store.ts +0 -338
  642. package/src/capabilities/api.ts +0 -75
  643. package/src/capabilities/runSnapshot.ts +0 -59
  644. package/src/capabilities/types.ts +0 -34
  645. package/src/cli.ts +0 -118
  646. package/src/core/bus.ts +0 -34
  647. package/src/core/changes.ts +0 -33
  648. package/src/core/env.ts +0 -27
  649. package/src/core/errors.ts +0 -32
  650. package/src/core/frontmatter.ts +0 -47
  651. package/src/core/fs.test.ts +0 -38
  652. package/src/core/fs.ts +0 -92
  653. package/src/core/index.ts +0 -193
  654. package/src/core/path.test.ts +0 -14
  655. package/src/core/path.ts +0 -79
  656. package/src/core/projects.ts +0 -90
  657. package/src/core/text.ts +0 -39
  658. package/src/harness.ts +0 -312
  659. package/src/hub/catalog.json +0 -123
  660. package/src/hub/cli.ts +0 -59
  661. package/src/hub/hub.test.ts +0 -205
  662. package/src/hub/hub.ts +0 -256
  663. package/src/hub/schema.ts +0 -81
  664. package/src/index.ts +0 -75
  665. package/src/mcp/connections.ts +0 -614
  666. package/src/mcp/manager.ts +0 -130
  667. package/src/mcp/oauth.ts +0 -195
  668. package/src/mcp/scopeMigration.test.ts +0 -79
  669. package/src/mcp/scopeMigration.ts +0 -204
  670. package/src/mcp/service.test.ts +0 -376
  671. package/src/mcp/service.ts +0 -549
  672. package/src/mcp/types.ts +0 -108
  673. package/src/memory/api.test.ts +0 -82
  674. package/src/memory/api.ts +0 -303
  675. package/src/memory/blocks.test.ts +0 -78
  676. package/src/memory/blocks.ts +0 -408
  677. package/src/memory/caller.ts +0 -69
  678. package/src/memory/curation.test.ts +0 -163
  679. package/src/memory/curation.ts +0 -64
  680. package/src/memory/dispatch.ts +0 -59
  681. package/src/memory/facts.test.ts +0 -41
  682. package/src/memory/facts.ts +0 -248
  683. package/src/memory/graph.ts +0 -103
  684. package/src/memory/health.test.ts +0 -130
  685. package/src/memory/health.ts +0 -74
  686. package/src/memory/maintainer.ts +0 -272
  687. package/src/memory/maintenance.test.ts +0 -176
  688. package/src/memory/maintenance.ts +0 -518
  689. package/src/memory/migrate.ts +0 -79
  690. package/src/memory/operations.ts +0 -150
  691. package/src/memory/proposals.test.ts +0 -168
  692. package/src/memory/proposals.ts +0 -584
  693. package/src/memory/recall.test.ts +0 -115
  694. package/src/memory/recall.ts +0 -278
  695. package/src/memory/references.ts +0 -77
  696. package/src/memory/runContext.ts +0 -93
  697. package/src/memory/secrets.ts +0 -6
  698. package/src/memory/store.test.ts +0 -66
  699. package/src/memory/store.ts +0 -385
  700. package/src/memory/wiki.test.ts +0 -47
  701. package/src/memory/wiki.ts +0 -422
  702. package/src/memory/wikiIndex.test.ts +0 -88
  703. package/src/memory/wikiIndex.ts +0 -116
  704. package/src/plugins/api.ts +0 -181
  705. package/src/plugins/attachments.test.ts +0 -84
  706. package/src/plugins/attachments.ts +0 -141
  707. package/src/plugins/builtin.ts +0 -82
  708. package/src/plugins/catalogue.test.ts +0 -254
  709. package/src/plugins/catalogue.ts +0 -251
  710. package/src/plugins/cli.ts +0 -184
  711. package/src/plugins/discover.ts +0 -151
  712. package/src/plugins/firstParty.test.ts +0 -143
  713. package/src/plugins/firstParty.ts +0 -129
  714. package/src/plugins/hooks.test.ts +0 -250
  715. package/src/plugins/hooks.ts +0 -239
  716. package/src/plugins/identity.ts +0 -37
  717. package/src/plugins/install.test.ts +0 -107
  718. package/src/plugins/install.ts +0 -106
  719. package/src/plugins/inventory.ts +0 -123
  720. package/src/plugins/manifest.ts +0 -76
  721. package/src/plugins/plugins.test.ts +0 -205
  722. package/src/plugins/plugins.ts +0 -189
  723. package/src/plugins/proposal.ts +0 -121
  724. package/src/plugins/runtime.test.ts +0 -40
  725. package/src/plugins/runtime.ts +0 -82
  726. package/src/plugins/trust.ts +0 -142
  727. package/src/plugins/types.ts +0 -149
  728. package/src/prompt/compile.test.ts +0 -261
  729. package/src/prompt/compile.ts +0 -732
  730. package/src/server/methods.ts +0 -349
  731. package/src/server/remote.ts +0 -77
  732. package/src/server/rpc.ts +0 -116
  733. package/src/server/serve.ts +0 -28
  734. package/src/server/server.test.ts +0 -174
  735. package/src/sessions/approvals.ts +0 -118
  736. package/src/sessions/contracts.ts +0 -336
  737. package/src/sessions/conversation.test.ts +0 -177
  738. package/src/sessions/extensionSession.test.ts +0 -74
  739. package/src/sessions/extensionUi.test.ts +0 -65
  740. package/src/sessions/extensionUi.ts +0 -102
  741. package/src/sessions/history.ts +0 -51
  742. package/src/sessions/lineageJoin.ts +0 -75
  743. package/src/sessions/policy.ts +0 -36
  744. package/src/sessions/pricing.ts +0 -60
  745. package/src/sessions/questionBatches.test.ts +0 -110
  746. package/src/sessions/reasoningSummaries.ts +0 -59
  747. package/src/sessions/registry.ts +0 -381
  748. package/src/sessions/runIndex.ts +0 -99
  749. package/src/sessions/runStore.test.ts +0 -152
  750. package/src/sessions/runStore.ts +0 -332
  751. package/src/sessions/runner.ts +0 -604
  752. package/src/sessions/runtimeResources.test.ts +0 -61
  753. package/src/sessions/sessions.test.ts +0 -549
  754. package/src/sessions/sessions.ts +0 -339
  755. package/src/skills/registry.test.ts +0 -104
  756. package/src/skills/registry.ts +0 -413
  757. package/src/terminal/accountsMenu.test.ts +0 -225
  758. package/src/terminal/accountsMenu.ts +0 -382
  759. package/src/terminal/cli.ts +0 -149
  760. package/src/terminal/client.ts +0 -74
  761. package/src/terminal/control.test.ts +0 -23
  762. package/src/terminal/control.ts +0 -23
  763. package/src/terminal/controller.ts +0 -291
  764. package/src/terminal/hubMenu.ts +0 -24
  765. package/src/terminal/launch.test.ts +0 -25
  766. package/src/terminal/launch.ts +0 -48
  767. package/src/terminal/piExtension.lifecycle.test.ts +0 -55
  768. package/src/terminal/piExtension.ts +0 -259
  769. package/src/terminal/pluginControl.test.ts +0 -146
  770. package/src/terminal/pluginMenu.ts +0 -112
  771. package/src/terminal/socket.test.ts +0 -71
  772. package/src/terminal/socket.ts +0 -232
  773. package/src/terminal/standalone.test.ts +0 -167
  774. package/src/terminal/standalone.ts +0 -153
  775. package/src/terminal/terminal.test.ts +0 -399
  776. package/src/terminal/terminals.ts +0 -553
  777. package/src/terminal/tui/application.test.ts +0 -114
  778. package/src/terminal/tui/application.ts +0 -491
  779. package/src/terminal/tui/commands.test.ts +0 -218
  780. package/src/terminal/tui/commands.ts +0 -361
  781. package/src/terminal/tui/dialogs.ts +0 -301
  782. package/src/terminal/tui/editor.test.ts +0 -84
  783. package/src/terminal/tui/editor.ts +0 -79
  784. package/src/terminal/tui/keybindings.test.ts +0 -22
  785. package/src/terminal/tui/keybindings.ts +0 -50
  786. package/src/terminal/tui/piAdapter.ts +0 -62
  787. package/src/terminal/tui/presentation.test.ts +0 -79
  788. package/src/terminal/tui/questions.test.ts +0 -41
  789. package/src/terminal/tui/questions.ts +0 -47
  790. package/src/terminal/tui/runtime.socket.test.ts +0 -104
  791. package/src/terminal/tui/runtime.test.ts +0 -215
  792. package/src/terminal/tui/runtime.ts +0 -388
  793. package/src/terminal/tui/sessionUi.ts +0 -24
  794. package/src/terminal/tui/settings.test.ts +0 -150
  795. package/src/terminal/tui/settings.ts +0 -188
  796. package/src/terminal/tui/status.test.ts +0 -70
  797. package/src/terminal/tui/status.ts +0 -109
  798. package/src/terminal/tui/theme.ts +0 -174
  799. package/src/terminal/tui/tools.test.ts +0 -145
  800. package/src/terminal/tui/tools.ts +0 -142
  801. package/src/terminal/tui/transcript.test.ts +0 -25
  802. package/src/terminal/tui/transcript.ts +0 -124
  803. package/src/terminal/tui/ui.test.ts +0 -313
  804. package/src/terminal/tui/ui.ts +0 -166
  805. package/src/terminal/tui/welcome.ts +0 -102
  806. package/src/tools/askUser.test.ts +0 -69
  807. package/src/tools/askUser.ts +0 -59
  808. package/src/tools/definitions.ts +0 -187
  809. package/src/tools/maintenance.ts +0 -24
  810. package/src/tools/memoryTools.ts +0 -22
  811. package/src/tools/pluginPropose.ts +0 -41
  812. package/src/tools/registryWrite.test.ts +0 -101
  813. package/src/tools/registryWrite.ts +0 -182
  814. package/src/tools/spawnSubagent.ts +0 -92
  815. package/src/tools/types.ts +0 -39
  816. package/src/web/safeRequest.ts +0 -171
  817. package/src/web/text.ts +0 -53
  818. package/src/web/tools.ts +0 -134
  819. package/src/web/web.test.ts +0 -141
@@ -0,0 +1,45 @@
1
+ # 13 World tools
2
+
3
+ The Foundation owns the generic isolated browser engine, per-session contexts and profiles,
4
+ network policy, and lifecycle. Built-in World plugins contribute the user-facing web search/page
5
+ tools, browser tools and annotations through the existing tool-provider surface. Every tool passes
6
+ the same capability and policy gate. Web requests use the public-address guard; browser requests
7
+ use the device-local private-address setting. Read page content is untrusted. Sending, purchasing,
8
+ deleting, changing accounts and granting access require explicit human approval. Sensitive fields
9
+ are not filled by the agent.
10
+
11
+ The App owns its shared WebKit browser UI, private/shared tab policy, selected-file uploads,
12
+ windows and the native computer bridge. These application objects do not enter the Harness.
13
+ Other hosts may add backend capabilities and diagnostics through ToolProvider or WorldPart.
14
+
15
+ Browser configuration is device-local. User-configured CDP attachment is explicit; diagnostics
16
+ never attach to it. Doctor browser probes instead use disposable headless profiles and an offline
17
+ synthetic page. Their input runs only after live-check confirmation, and their resources are
18
+ released on completion, timeout or cancellation. Computer interaction needs a host-provided
19
+ isolated surface; without one it is blocked.
20
+
21
+ Plugin ownership and the Foundation boundary are recorded in PROP-0012, ADR-0014 and PROP-0020.
22
+ World providers are assembled through `BuiltinPluginRegistry`; no eighth extension point is added.
23
+
24
+ An embedding host may set `browser: false` to disable the generic backend and its plugin
25
+ descriptor before supplying its own browser tool provider. The App uses this option for its
26
+ shared-tab browser, so matching tool names never silently select the wrong backend.
27
+
28
+ ## Page notes (PROP-0017)
29
+
30
+ The `annotations` world part offers `page_notes_list` and `page_notes_read`, read-only, to SDK and
31
+ terminal sessions. It is separate from the browser part, so a host that sets `browser: false` keeps
32
+ it. A tool returns only notes a person shared with the calling session or agent; quoted page text
33
+ and element names are marked untrusted. Capture happens in a visible capture browser in the
34
+ terminal, or in a host's own web view running the same page helper (`annotations.pageScript`).
35
+
36
+ **Inspector, queue and app targets (PROP-0018).**
37
+
38
+ - **Inspector.** In the page helper's inspector, hovering outlines a component and a click (or a drag over text) opens a comment popover inside the page, with three choices: save, queue for the agent, or send now.
39
+ - A queued note is shared with its session.
40
+ - `annotations/delivery.ts` sends a batch as one instruction, and sends notes the person asked for while the session was busy when its run ends.
41
+ - The agent reports a fix with `page_notes_mark_fixed`, the only page-note tool that writes. It never resolves a note or changes grants.
42
+ - **Targets.** Besides the browser window, capture can use an app's own windows:
43
+ - **DevTools port:** an app started with a DevTools port, on a loopback address only. It uses the app's existing windows, routes nothing, and never closes the app.
44
+ - **Page bridge:** a loopback server whose script an app loads while it is developed (`annotations/bridge.ts`), for web views without a DevTools port.
45
+ - **Trust.** In Chromium targets the helper runs in an isolated script world, so the page cannot forge a comment. A send from the bridge, or from a host web view without isolation, waits for the person to confirm it.
@@ -0,0 +1,89 @@
1
+ # 14 Surfaces and parity
2
+
3
+ ## Purpose
4
+
5
+ The harness has more than one front end: its own standalone terminal (`xagent`, page 11) and
6
+ every application that embeds it. This page fixes how capabilities relate to those front ends, so
7
+ that a person can do the same work in the terminal and in a host, and so that a reader knows that
8
+ a capability is Harness work even when a request names a host.
9
+
10
+ A *capability* is something a person or a model can do: start a session, approve a call, work in
11
+ a worktree, annotate a page, inspect a run. A *surface* is how one front end presents it: a
12
+ terminal command or page, a host screen.
13
+
14
+ ## Components
15
+
16
+ | Kind | What it is | Example |
17
+ |---|---|---|
18
+ | Foundation service | A member of `Harness` with server methods | `sessions`, `accounts`, `apps`, `worktrees` (PROP-0016), agent profiles (`agents.*`, PROP-0029) |
19
+ | Built-in feature plugin | A module in `BuiltinPluginRegistry` (`plugins/builtin.ts`) that may supply a `WorldPart`, server methods and terminal commands | web tools, browser tools, annotations, worktrees |
20
+ | First-party plugin | A descriptor in the registry (`plugins/builtin.ts`) | lessons, checklist |
21
+ | Terminal surface | A command, page or dialog in `terminal/` | `/plan`, `/doctor`, the resource browser |
22
+ | Host surface | A host screen built on the same methods and tools | the App's chat, Capability and Harness screens |
23
+ | Host-backed backend | An operating-system object only a host has, behind a generic Harness contract | the App's WebKit tabs, macOS computer bridge, keychain |
24
+ | Host-only surface | Presentation a terminal cannot show (INV-PAR-4) | reserved: interactive agent output ("OpenUI") |
25
+
26
+ ## Contracts
27
+
28
+ - A capability is reachable through server methods (page 10) and, where a model uses it, through a
29
+ tool that passes the gate (page 07). Both front ends use the same methods; neither has a private
30
+ path to Harness state.
31
+ - Required built-in plugin commands and Foundation commands use unprefixed names. Optional built-in
32
+ plugin commands and Pi extension commands use `/plugin:<command>`. A bare command, alias or loaded
33
+ prompt owns its name; a colliding prefixed command is hidden and rejected. Built-in plugin
34
+ categories are documented in page 06 and are not public plugin metadata.
35
+ - A capability may be limited to a run mode when Harness resolves the callable set; the register
36
+ records that restriction for both surfaces. `ask_user` is available only in attended plan runs,
37
+ and the terminal's `ask_user_question` alias follows the same restriction.
38
+ - Question choice sketches use one optional validated event contract: up to 80 printable ASCII
39
+ columns by 24 LF-separated lines (1,943 bytes maximum; page 02). Both surfaces use the same
40
+ literal ASCII source, persisted unchanged, in one shared preview with access to overflow; neither
41
+ changes the answer payload (PROP-0025, ADR-0026; originally PROP-0024). The terminal may project
42
+ recognized ASCII table-border rows—including title-bearing rules—and enclosed vertical table
43
+ edges into connected box-drawing glyphs, retaining internal framed table widths. For a
44
+ high-confidence frame, it may fill a missing boundary cell or realign a displaced edge only
45
+ through whitespace to matched corner columns; interior text and ambiguous rows remain unchanged
46
+ (PROP-0028, ADR-0029). Bare standalone hyphen dividers expand to the larger of viewport width and
47
+ original sketch widest line and join the outer single-line frame with `├` and `┤` (PROP-0026,
48
+ ADR-0027). Prose, content operators and ordinary pipes are not globally substituted. Hosts may
49
+ retain literal ASCII previews: equivalent capability does not require identical structural
50
+ typography. No schema, validation-bound, persistence or answer-payload change follows from these
51
+ display amendments. Terminal geometry, scrolling and projection boundaries follow page 11; hosts
52
+ may use native presentation without narrowing accepted metadata. Existing hosts with the old
53
+ bounds must update before accepting larger sketches. Acceptance of the expanded contract on both
54
+ surfaces is tracked in the parity register. Isolated production PTY evidence verifies bounded
55
+ fixture topology, not every emulator/font or live-model sketch quality.
56
+ - Side questions use one Harness service on both surfaces. Each caller supplies its visible
57
+ transcript projection; Harness adds the parent run's effective prompt and public events, then
58
+ starts an independent tool-free run.
59
+ - The register of capabilities and their surfaces is [`docs/parity.md`](../parity.md). It is
60
+ descriptive; the invariants below are binding.
61
+ - A host keeps its own register of host-only surfaces. The Harness names no host surface.
62
+
63
+ ## Invariants
64
+
65
+ - **INV-PAR-1** Every capability a person can use in a host is a Harness capability: a foundation
66
+ service, a world part or a first-party plugin, reachable through server methods. The standalone
67
+ terminal surfaces it. A host is a presentation of it.
68
+ - **INV-PAR-2** A capability is complete only when its terminal surface and its host surface both
69
+ pass acceptance. It lands in the Harness first, together with its terminal surface; the host
70
+ surface follows.
71
+ - **INV-PAR-3** A host-backed capability needs an operating-system object only a host has. The
72
+ Harness defines the generic contract and a terminal fallback (for example the headed isolated
73
+ browser for page annotations). Without a fallback, the terminal shows the capability as
74
+ unavailable, with the reason, in `/doctor` and `/tools`.
75
+ - **INV-PAR-4** A host-only surface owns no capability. Its actions are Harness methods or tools,
76
+ its data lives in Harness records, the terminal renders a text fallback, and each one is listed
77
+ in the host's register by an owner decision. A generic rich-output event kind for such surfaces
78
+ needs its own proposal; the name is reserved and nothing is designed.
79
+
80
+ ## Data
81
+
82
+ None of its own. Each capability stores its data as its own page says.
83
+
84
+ ## Source map
85
+
86
+ `src/harness.ts` (services), `src/world/world.ts` (world parts), `src/plugins/builtin.ts`
87
+ (first-party descriptors), `src/terminal/` (terminal surfaces), `src/server/methods.ts` (methods).
88
+ Decision: [PROP-0015](proposals/PROP-0015-one-capability-surface.md),
89
+ [ADR-0017](../decisions/ADR-0017-one-capability-surface.md).
@@ -0,0 +1,125 @@
1
+ # Harness architecture specification
2
+
3
+ **Status:** binding. **As of:** 2026-10-24, checked against `src/` on branch `release/1.0.0`.
4
+
5
+ This folder is the core specification of `@xingular/harness`. Code must conform to it. A change
6
+ that would alter what it says needs a proposal the user approves first (see
7
+ [Changing the architecture](#changing-the-architecture)).
8
+
9
+ Other documents explain and record; this folder decides. Where another document disagrees with a
10
+ page here, this page wins, and the disagreement is listed under [Known drift](#known-drift).
11
+
12
+ ## How to read it
13
+
14
+ Each page describes one part of the harness in the same order:
15
+
16
+ 1. **Purpose** — what the part is for, in one paragraph.
17
+ 2. **Components** — the modules and their main types.
18
+ 3. **Contracts** — the public API, server methods and file formats other code relies on.
19
+ 4. **Invariants** — numbered rules (`INV-<AREA>-<n>`). Cite them by ID in reviews and proposals.
20
+ 5. **Data** — what the part stores, and where.
21
+ 6. **Source map** — the files that implement it.
22
+
23
+ Types named in a page are declarations in `src/`. Where a page describes a logical role that is
24
+ not one class (a set of functions in one module, say), it says so.
25
+
26
+ ## Pages
27
+
28
+ | Page | Covers | Invariant prefix |
29
+ |---|---|---|
30
+ | [00 Overview](00-overview.md) | What the harness is, the foundation/variant split, layers, module map, ETCLOVG ownership | `INV-BND` |
31
+ | [01 Extension points](01-extension-points.md) | The seven surfaces an application extends the harness through | `INV-EXT` |
32
+ | [02 Sessions and runs](02-sessions-and-runs.md) | A session turn, run records and events, approvals, questions, subagents, plan mode, usage | `INV-RUN` |
33
+ | [03 Variants](03-variants.md) | The eight components, validation, versions, pinning, plugin-code trust; the rule that only a variant mutates | `INV-VAR`, `INV-FND` |
34
+ | [04 Prompt](04-prompt.md) | The compiler, the stable prefix, context updates | `INV-PRM` |
35
+ | [05 Refinement](05-refinement.md) | Propose–Probe–Compose, evidence, budget, selection, the experience library | `INV-REF` |
36
+ | [06 Plugins and capabilities](06-plugins-and-capabilities.md) | What a session loads, attachments, hooks, capability sets | `INV-PLG`, `INV-CAP` |
37
+ | [07 Tools and the gate](07-tools-and-gate.md) | The harness's own tools, tool providers, the per-call gate, standing approvals | `INV-GATE` |
38
+ | [08 Memory and history](08-memory-and-history.md) | Wiki notes, recall, trajectories, the rebuildable index | `INV-MEM` |
39
+ | [09 Accounts and connectors](09-accounts-and-connectors.md) | Isolated accounts, secrets, connected apps (MCP), the Hub | `INV-ACC`, `INV-MCP` |
40
+ | [10 Server protocol](10-server-protocol.md) | The newline-delimited JSON protocol and the method table | `INV-SRV` |
41
+ | [11 Terminal](11-terminal.md) | The Harness-owned terminal frontend and its process boundary | `INV-TUI` |
42
+ | [12 Storage](12-storage.md) | The data root and state directory, and who writes what | `INV-STO` |
43
+ | [13 World tools](13-world-tools.md) | Generic web and isolated browser backends, host boundary and diagnostics | — |
44
+ | [14 Surfaces and parity](14-surfaces-and-parity.md) | Every capability is a Harness capability with a terminal surface; host-backed capabilities; host-only surfaces | `INV-PAR` |
45
+ | [Proposals](proposals/README.md) | Architecture change proposals and their status | — |
46
+
47
+ Related records, not binding by themselves:
48
+
49
+ - [`../terminal-tui.md`](../terminal-tui.md): terminal detail and verification evidence. Page 11
50
+ states which parts of it are binding.
51
+ - [`../system-prompt-design.md`](../system-prompt-design.md): a draft prompt design (DESIGN-0001).
52
+ Only what page 04 states is binding.
53
+ - [`../decisions/`](../decisions/): accepted decisions (ADRs). Each binding consequence of an
54
+ accepted ADR is stated on a page here.
55
+ - [`../../README.md`](../../README.md): the embedding guide for application authors.
56
+ - [`../../../App/docs/architecture/overview.md`](../../../App/docs/architecture/overview.md): the
57
+ application side of the boundary.
58
+
59
+ ## Glossary
60
+
61
+ These words are used the same way across architecture pages and, for implemented concepts, in code
62
+ and the data layout. Terms marked as planned are future vocabulary only; they do not describe
63
+ current behavior.
64
+
65
+ | Word | Meaning |
66
+ |---|---|
67
+ | **Foundation** | The fixed half of the harness: code and invariants that no edit, improver or adoption can change. Changes by release, and by proposal when a contract moves. |
68
+ | **Agent Mode** | A planned foundation-level work style, with at most one mode active at a time. Plugins remain independently stackable contributions. This is distinct from plan mode and existing `mode` fields; it is not a runtime contract ([FW-0001](../future-work.md#fw-0001-agent-modes-starting-with-router-agent-mode)). |
69
+ | **Variant** | The mutating half: one tree of eight components (c1–c8) for one scope. Formerly "harness tree". |
70
+ | **Component** | One of c1–c8 inside a variant (system prompt, guardrails, memory, tool guidance, subagents, skills, scripts, plugins). |
71
+ | **Surface** | The foundation's definition of what a variant may contain (`PI_SURFACE`): paths, patterns, the always-on cap. |
72
+ | **Scope** | The opaque id a variant belongs to. The application decides what it stands for. |
73
+ | **Version** | A recorded variant: immutable, validated, named by its fingerprint. |
74
+ | **Head** | A scope's current variant: the version a new run pins. |
75
+ | **Lineage** | The parent chain of a scope's versions. |
76
+ | **Candidate** | A variant that refinement proposed and a person has not adopted. |
77
+ | **Adopt** | A person's act of committing a candidate as the head. The only way refinement's output reaches a run. |
78
+ | **Trust** | A person's approval of the exact text of a variant's plugin code (c8), by hash. |
79
+ | **Run** | One session turn on a pinned variant, recorded by the foundation. |
80
+
81
+ ## Changing the architecture
82
+
83
+ Every coding agent and contributor follows these steps.
84
+
85
+ 1. **Read first.** Before changing code, read the pages for the modules you touch.
86
+ 2. **Within the spec: just do it.** If the change fits every contract and invariant, make it. If it
87
+ adds detail without changing a rule (a new server method in an existing group, a new optional
88
+ field), update the page in the same commit.
89
+ 3. **Outside the spec: propose and stop.** If the change would alter a contract, an invariant, a
90
+ layer boundary, an extension point, or the storage layout, do not change code or pages yet.
91
+ Write `proposals/PROP-NNNN-<slug>.md` from the [template](proposals/README.md#template) with
92
+ status `Proposed`, add it to the proposals index, and ask the user to review it.
93
+ 4. **After approval.** The user sets or confirms status `Accepted`. Then implement it, update the
94
+ affected pages in the same change, and add an ADR in `../decisions/` when the choice is a
95
+ lasting one. A rejected proposal keeps its file with status `Rejected`.
96
+ 5. **Drift is reported, not fixed silently.** If code and a page already disagree, add the item to
97
+ [Known drift](#known-drift) and tell the user. Do not change either side to match without
98
+ asking; resolving drift that changes a rule is itself a proposal.
99
+
100
+ When unsure whether a change alters the architecture, treat it as if it does and write the
101
+ proposal.
102
+
103
+ ## Known drift
104
+
105
+ Disagreements found while writing this specification. Each needs a decision from the user (a
106
+ proposal, or a correction to the other document).
107
+
108
+ | ID | Where | What disagrees |
109
+ |---|---|---|
110
+ | D-1 | `AGENTS.md` (before this spec), `INV-RUN-6` | The old rule said only `sessions/runStore.ts` writes `runs/<id>/`. In code, four other harness modules also write side files there: `prompt/compile.ts` (`context.json`), `sessions/sessions.ts` (`caller.json`), `capabilities/runSnapshot.ts` (`capabilities.json`), `mcp/service.ts` (`mcp-context.json`). The spec states the rule the code keeps (see `INV-RUN-6`); whether to route all of them through `runStore.ts` is open. |
111
+ | D-2 | `README.md` "Plugins" | Describes a `plugin_propose` tool and an Inbox for proposed plugins. No such tool exists in `src/`. |
112
+ | D-3 | `README.md` "External curation" | Describes `externalMaintenance`, `vaultAccess`, `MAINTENANCE_PLUGIN`, `maintenance.*` methods and tools. None exist in `src/`. |
113
+ | D-4 | `INV-BND-2` | Several names carry an application's name: the context message type `xingular-context`, the approval extension `xagent-approvals`, the MCP client name `xagent`, and the terminal commands `xagent-wiki` / `xagent-mcp`. The default product name `Xingular Agent` is allowed; these are not. |
114
+ | D-5 | `INV-BND-2` | `RunRecord` carries `worktreeId` and `handoffId`, which are application concepts. They are stored and returned, never read, and are documented as the application's fields. Since PROP-0016 (2026-10-23) `worktreeId` has Harness meaning when it names a registered worktree; only `handoffId` remains an application field. |
115
+ | D-6 | `INV-BND-2` | Plan-mode instructions (`sessions/planMode.ts`) name a managed browser and computer controls, which the harness does not provide. |
116
+ | D-7 | `INV-MEM-3` | `wiki/notes.ts::remove` keeps a version but does not call `noteChange`, so hooks hear saves but not removals. |
117
+ | D-8 | old `AGENTS.md` | Listed `work` among the sections delivered as updates. The compiler's built-in dynamic sections are only `references` and `wiki`; `work` is dynamic only when the application marks it so. `INV-PRM-3` states the code's rule. |
118
+ | D-9 | World/browser implementation | Resolved for the 1.0.0 candidate by PROP-0012/ADR-0014 and page 13: the Harness owns a generic isolated browser; App browser UI, tab sharing and computer integration remain with the host. |
119
+ | D-10 | OpenTUI skill completion | At the start of PROP-0013, documentation claimed skill completion, but OpenTUI only rendered slash-command completions. The skill helper had no frontend caller. PROP-0013 explicitly resolves this drift. |
120
+ | D-11 | `INV-RUN-5`, unattended approval and question paths | Source inspection on 2026-10-23 found that `SessionRunInput.automatic` disables resource discovery and extension dialogs (`sessions/runner.ts:574`), but the general gate does not receive that flag. `Sessions.gate` explicitly refuses approvals for `probe`, `improver` and `reflection` triggers, then otherwise calls `requestApproval` (`sessions/sessions.ts:198`). `ask_user` was also constructed independently of `automatic` when harness tools were enabled (`sessions/sessions.ts:397`, `tools/askUser.ts:69`). That question-tool gap is resolved for newly resolved runs by PROP-0022/ADR-0022 (2026-10-24); an unattended continuation of a run pinned with that tool is rejected. Thus the flag alone does not establish the invariant that every unattended run refuses human interaction; host policy and capability selection can narrow these paths. This is a static source finding, not a live reproduction. See [proactive autonomy research](../study/proactive-autonomy.md#current-foundation-and-the-missing-loop). |
121
+ | D-12 | 12-storage layout | The isolated browser keeps device-local profiles and settings under `<state dir>/browser/` (`browser/config.ts`, `browser/session.ts`); page 12's layout did not list it. Resolved 2026-10-23: page 12 lists it. |
122
+ | D-13 | `docs/study/feature-gap-review.md` row 8 | Says browser and computer interaction are not built in. Page 13 (PROP-0012) records a generic isolated browser in the foundation; computer interaction needs a host surface. |
123
+ | D-14 | 12-storage layout | Page 12 lists browser settings under `<state dir>/browser/`, while `browser/config.ts` stores configuration in `<state dir>/browser.json`; browser profiles and downloads use the `browser/` directory. The layout needs an owner decision before either side is changed. |
124
+ | D-15 | Terminal sketch verification status — resolved 2026-10-24 by PROP-0028 | Pages 11 and 14 and `terminal-tui.md` said connected-sketch implementation verification was pending, while retained PTY evidence and PAR-014 recorded it as verified. Updated the docs to distinguish deterministic fixture verification from owner visual acceptance, every-emulator rendering and live-model sketch quality. |
125
+ | D-16 | Terminal slash-command highlighting — resolved 2026-10-24 | `terminal-tui.md` specified accent coloring for recognized leading commands while typing, but the OpenTUI composer only styled attachment labels. User-message bubbles also lacked command-token styling. The renderer now uses the active command registry for both surfaces. |
@@ -0,0 +1,106 @@
1
+ ---
2
+ id: PROP-0001
3
+ title: A built-in Reporting section that shapes the final reply
4
+ status: Implemented
5
+ created: 2026-10-21
6
+ updated: 2026-10-21
7
+ affects: [INV-PRM-2, 04-prompt.md]
8
+ ---
9
+
10
+ # PROP-0001: A built-in Reporting section that shapes the final reply
11
+
12
+ Accepted by the user on 2026-10-21 and implemented the same day; see
13
+ [ADR-0007](../../decisions/ADR-0007-reporting-section.md).
14
+
15
+ ## Problem
16
+
17
+ Nothing in the compiled prompt says how a run should end. `src/prompt/compile.ts` emits the tree's
18
+ sections, references, the Wiki pointer and the tools; a seed tree's `systemprompt.md` is empty
19
+ unless the application gives instructions (`src/tree/seed.ts`). Final replies therefore vary in
20
+ shape: the answer is often buried after a narration of steps, files changed are not listed, and
21
+ unverified work is not called out.
22
+
23
+ The person wants every final reply to answer first, list files read and changed, and say what is
24
+ blocked, what is worth a look, what to check by hand, and what comes next, using Markdown tables
25
+ where they help. The terminal already renders Markdown with tables (`docs/terminal-tui.md`,
26
+ "Markdown transcript"), so the gap is only in the prompt.
27
+
28
+ Other harnesses put this in their fixed prompt text:
29
+
30
+ | Harness | Where | What it says |
31
+ |---|---|---|
32
+ | opencode | `external/opencode/packages/core/src/plugin/system-prompt/gpt.txt:19-23` | "Final Answer": lead with the outcome; only as much structure as needed; the final answer is self-contained; a blocking question goes there |
33
+ | omp | `external/omp/packages/coding-agent/src/prompts/system/system-prompt.md:11-27, 249-257` | Numbers to compare → Markdown table; report only exercised verification; when blocked, state exactly what is missing and what was tried |
34
+ | kimi-cli | `external/kimi-cli/src/kimi_cli/agents/default/system.md:152-159` | Concise; never more than the user wants |
35
+ | Claude Code | published prompt (no clone) | Outcome first, tl;dr style; report failed or skipped checks; `path:line` references |
36
+ | Codex CLI | published prompt (no clone) | "Final answer structure": headers only when useful, bullets, file paths, a natural next step |
37
+
38
+ ## Affected rules
39
+
40
+ - `04-prompt.md`, Section order: "`SECTION_ORDER`: `system` 25, `guardrails` 40, `memory` 45,
41
+ `references` 50, `subagents` 64, `scripts` 66, `wiki` 80, `tools` 90."
42
+ - **INV-PRM-2** "The system prompt holds only stable text: identity, role, the tree's sections, tool
43
+ guidance and the tool manifest. Changing state never enters it."
44
+
45
+ ## Proposal
46
+
47
+ The compiler adds one harness-owned section to every pack:
48
+
49
+ - id `reporting`, title "Reporting your work", `SECTION_ORDER.reporting = 95` (after `tools`).
50
+ - Fixed text in `src/prompt/compile.ts` (`REPORTING_GUIDANCE`), budget 2,000 characters, never cut,
51
+ no volatile values. It is not dynamic, so `sessionLaunch` puts it in the stable prefix and
52
+ terminal sessions get it through `compile` + `render`.
53
+ - It names no application. It yields to any other format the person, the application or the
54
+ current mode (for example plan mode) asks for.
55
+
56
+ INV-PRM-2 becomes: "The system prompt holds only stable text: identity, role, the tree's sections,
57
+ the harness's reporting guidance, tool guidance and the tool manifest. Changing state never enters it."
58
+
59
+ Section text:
60
+
61
+ ```markdown
62
+ When you finish work, write the final reply for a person who did not watch you work.
63
+
64
+ - Start with the answer or outcome in one or two sentences. If they asked a question, answer it first.
65
+ - Then add only the parts that have content, in this order, under short bold labels:
66
+ - **Files**: what you read that mattered and what you changed, as `path:line` with a few words each. Use a table (File | Change | Why) when there are three or more.
67
+ - **Blocked**: what stopped you, what you tried, and what you need from the person.
68
+ - **Worth a look**: risks, surprises, or choices the person may disagree with.
69
+ - **Check by hand**: what you could not verify yourself and how to check it. Name the checks you ran and their result; never claim a check you did not run.
70
+ - **Next steps**: one to three concrete actions, the most useful first.
71
+ - Use a Markdown table when comparing options, listing several items with the same fields, or reporting the results of several checks. Use prose or bullets otherwise.
72
+ - Keep it short. Skip a part instead of writing "none". A one-line question gets a one-line answer.
73
+ - If the person, the application, or the current mode asks for a different format, follow that.
74
+ ```
75
+
76
+ ## Alternatives
77
+
78
+ - **Do nothing.** Reply shape stays model-dependent; the request is not met.
79
+ - **Default text in the tree (`systemprompt.md`).** Refinement could tune it per scope, but trees
80
+ created before the change never get it, and an adopted refinement could drop it.
81
+ - **An application section.** Every application would have to repeat it, and the terminal has none.
82
+ - **A harness-built file list from run events.** Always exact, but needs terminal and protocol
83
+ work. Deferred; the model writes the list for now.
84
+
85
+ ## Consequences
86
+
87
+ - Every system prompt gains about 1,200 characters. The prefix changes once, so each existing
88
+ session's provider cache misses once after upgrade; afterwards it is byte-stable.
89
+ - Applications need no change. The App's sidecar bundle must be rebuilt to pick it up.
90
+ - No change to stored data or the server protocol. `runs/<id>/context.json` lists the new
91
+ section in `sections` and `delivery.systemSectionIds`.
92
+
93
+ ## Migration
94
+
95
+ None for data. Undo by removing the section; the prefix changes once more.
96
+
97
+ ## Checks
98
+
99
+ - `compile.test.ts`: section-id lists end with `reporting`; the section is in the `sessionLaunch`
100
+ system prompt, byte-identical across compiles, and never in a context update.
101
+ - Harness `npm run typecheck`, `npm test`; App `npm run typecheck`, `npm test`,
102
+ `npm run check:layers`, `cd src-tauri && cargo test`.
103
+ - By hand: a terminal run that reads and edits files ends with a reply in this shape, and its
104
+ table renders.
105
+ - Cache effect measured with the App's `scripts/probe-chat-cache-app.py`, only with the account
106
+ owner's permission (INV-PRM-8).
@@ -0,0 +1,104 @@
1
+ ---
2
+ id: PROP-0002
3
+ title: Opt-in retention of each refinement execution's workspace
4
+ status: Implemented
5
+ created: 2026-10-21
6
+ updated: 2026-10-21
7
+ affects: [05-refinement.md, 10-server-protocol.md, 12-storage.md, INV-REF-1]
8
+ ---
9
+
10
+ # PROP-0002: Opt-in retention of each refinement execution's workspace
11
+
12
+ ## Problem
13
+
14
+ An external measurement of refinement must grade the files that the base executions and the
15
+ chosen final produced. Examples are a `.docx` memo, an `.xlsx` model, or a repository a verifier
16
+ runs tests in. Today those files are gone by the time the refinement finishes:
17
+
18
+ - `PiExecutor.execute` (`src/refine/pi.ts:83-119`) runs in the host's workspace, then always calls
19
+ `workspace.cleanup()` in `finally`.
20
+ - `DEFAULT_REFINE_HOST.prepareWorkspace` (`src/refine/host.ts`) removes its temporary folder in
21
+ that cleanup.
22
+ - Only `defaultDeliverable` survives, under `rollouts/<label>/deliverables/`. It keeps the reply and
23
+ the *text* files that changed, and drops binary files (`readable` rejects any buffer containing
24
+ `0`). It also stops at `FILES_LIMIT`.
25
+
26
+ An application can work around this by supplying its own `RefineHost` in-process. A client of the
27
+ server protocol cannot: `refine.start` has no host parameter, and it should not have one.
28
+
29
+ The request comes from the Evaluation repository. It needs to replicate the Harness² paper's
30
+ benchmarks (JobBench, LAB, WorkBuddy-Bench) and grade the base executions and the chosen
31
+ execution after selection, as upstream `harness2-judge` and `harness2-judge --bases` do.
32
+
33
+ ## Affected rules
34
+
35
+ - 05 Contracts: "`start({ task: { id, scope, prompt, ... }, k?, mode?: 'parallel' | 'sequential',
36
+ baseVersion?, improver? })` returns `{ id }` at once".
37
+ - 05 Data: `<data root>/refine/<id>/ summary.json, task.json, harnesses/<label>/, rollouts/<label>/, ...`.
38
+ - 10 Server protocol: the `refine.start` parameters.
39
+ - INV-REF-1 (unchanged, restated so it covers the new folder): "No rubric, score, grader output or
40
+ reviewer verdict reaches an improver, the selector or the library."
41
+
42
+ ## Proposal
43
+
44
+ **05 Contracts** become:
45
+
46
+ - `start({ task, k?, mode?, baseVersion?, improver?, retainWorkspaces? })`. When `retainWorkspaces`
47
+ is `true`, each execution's workspace is copied to `rollouts/<label>/workspace/` once the run has
48
+ settled and before the host's `cleanup` runs. The copy is whole: binary files, hidden files and
49
+ nested folders. Symbolic links are copied as links and are not followed. The default is `false`,
50
+ which keeps today's behaviour.
51
+ - The option covers base, candidate and final executions alike. `refine.candidates` reports
52
+ `workspace: '<path>' | null` on each execution, so a caller can find it without knowing the
53
+ layout.
54
+ - A failed copy is recorded as `workspaceError` in `rollout.json`. It never fails the execution or
55
+ the refinement.
56
+
57
+ **05 Data** gains `rollouts/<label>/workspace/`, which exists only with `retainWorkspaces`.
58
+
59
+ **INV-REF-1** gains one sentence: "Retained workspaces are output for measurement after the fact.
60
+ Evidence, selection, reflection and the library never read them." The evidence builder keeps
61
+ reading `deliverables/` only. A test asserts that no evidence folder contains a path under
62
+ `workspace/`.
63
+
64
+ **10 Server protocol.** `refine.start` accepts `retainWorkspaces: boolean`. The CLI gains
65
+ `refine run ... --retain-workspaces`.
66
+
67
+ The option names no application concept, and every host benefits from it, including the default
68
+ host and an application's own host.
69
+
70
+ ## Alternatives
71
+
72
+ - **Do nothing; the evaluator supplies a `RefineHost` whose `cleanup` is a no-op.** This only
73
+ works in-process. Evaluation drives the harness through the server and the CLI, as its
74
+ production adapters do. It would have to embed the harness as a library, which differs from the
75
+ production path it is meant to measure.
76
+ - **Let `deliverable` keep binary files.** This changes what improvers and the selector see:
77
+ binary bytes in the evidence, and a larger pool. That is a change to the method itself, not to
78
+ measurement.
79
+ - **Retain only the chosen final.** The base arm is measured on the base executions, as in
80
+ upstream `--bases`, so they are needed too. Retaining every execution is simpler and costs only
81
+ disk.
82
+
83
+ ## Consequences
84
+
85
+ - **Applications:** none, unless they opt in. A host's own `cleanup` still runs after the copy.
86
+ - **Stored data:** opted-in refinements grow by about R = 4k workspace copies. This is
87
+ disk-heavy for large sources. The option stays opt-in for that reason, and the docs say so.
88
+ - **Server protocol:** one optional parameter and one optional field on candidate views. Both are
89
+ additive. The App's sidecar schemas need the optional `workspace` field.
90
+
91
+ ## Migration
92
+
93
+ None. Existing records have no `workspace/` folder, and their candidate views report `null`.
94
+ Undoing the change means removing the option; retained folders stay as inert files.
95
+
96
+ ## Checks
97
+
98
+ - A unit test: a fake executor run with `retainWorkspaces` keeps a binary file and a nested
99
+ folder under `rollouts/<label>/workspace/`. Without the option, the folder is absent.
100
+ - A unit test: evidence folders never include `workspace/`, so the INV-REF-1 tripwire still holds.
101
+ - `npm run typecheck`, `npm test`, `npm run prove` (the CLI flag), and
102
+ `node dist/cli.js refine demo --k 2 --retain-workspaces`.
103
+ - App: `npm run typecheck`, `npm test`, `npm run check:layers`, and `cd src-tauri && cargo test`.
104
+ The sidecar schema test parses the new field.
@@ -0,0 +1,81 @@
1
+ ---
2
+ id: PROP-0003
3
+ title: Name the model and account of refinement's executions on refine.start
4
+ status: Implemented
5
+ created: 2026-10-21
6
+ updated: 2026-10-21
7
+ affects: [05-refinement.md, 10-server-protocol.md, 01-extension-points.md (RefineHost)]
8
+ ---
9
+
10
+ # PROP-0003: Name the model and account of refinement's executions on refine.start
11
+
12
+ ## Problem
13
+
14
+ `refine.start` lets a caller choose the model, effort and account of the improver, selector and
15
+ reflector sessions (`improver: ImproverSettings`). It does not let the caller choose them for the
16
+ executions (base, candidates, finals):
17
+
18
+ - `PiExecutor.execute` (`src/refine/pi.ts`) takes `model`, `effort`, `accountId` and `poolId` only
19
+ from `RefineHost.session(...)`.
20
+ - With no host (a plain `xharness serve`, which Evaluation drives), `DEFAULT_REFINE_HOST`
21
+ returns none of them. The executions then run on whatever Pi resolves as the default account's
22
+ default model.
23
+ - Runs do not consult saved per-mode choices either (`accounts.choices` is terminal-only).
24
+
25
+ So a server client cannot say "execute with `openai-codex/gpt-6-luna` on account X". Evaluation
26
+ cannot meet its own rule ("Live runs require an explicitly selected credential, model, and bounded
27
+ configuration. Do not silently substitute models or accounts"), and a measured run could silently
28
+ use a different executor model from the one recorded in its config.
29
+
30
+ ## Affected rules
31
+
32
+ - 05 Contracts: "`start({ task: { id, scope, prompt, ... }, k?, mode?, baseVersion?, improver?, retainWorkspaces? })`".
33
+ - 01 Extension points, `RefineHost.session` supplies the rollout's session settings. This stays
34
+ true; the proposal only adds a caller-supplied default beneath it.
35
+ - 10 Server protocol: the `refine.start` parameters.
36
+
37
+ ## Proposal
38
+
39
+ **05 Contracts:**
40
+
41
+ - `start` gains `executor?: { model?, effort?, accountId?, poolId? }`, with the same shape as
42
+ `ImproverSettings`.
43
+ - For each execution, the settings come from the host's `session(...)` value first, then from
44
+ `executor`, then from the account default.
45
+ - A host keeps full control.
46
+ - A caller with no host can still pin the model.
47
+ - `summary.json` records `settings: { executor, improver }` as the refinement was started. Each
48
+ probe run's own record holds the model it resolved, so the run records stay authoritative.
49
+
50
+ **10 Server protocol:** `refine.start` accepts `executor`, and `refine run` accepts
51
+ `--executor-model <id>`. The existing `--model` keeps meaning the improver model. Its usage text
52
+ says so.
53
+
54
+ No application concept is named. The default behaviour, with no `executor`, is unchanged.
55
+
56
+ ## Alternatives
57
+
58
+ - **Do nothing; set Pi's default model in the account's agent folder.** This relies on Pi's
59
+ settings file layout, which is an internal of the account folder, and it is not recorded with
60
+ the refinement. Rejected.
61
+ - **A `refine.host` RPC so a client can describe a host.** This is far larger: callbacks over the
62
+ protocol for `prepareWorkspace` and `deliverable`. The only need today is the session settings.
63
+ - **Reuse `improver` for executions.** The paper separates executor and editor models (GLM-5 or
64
+ Gemini executors, an Opus editor). Conflating them would make that design impossible to express.
65
+
66
+ ## Consequences
67
+
68
+ - **Applications:** none. The App supplies a host, and the host's values still win.
69
+ - **Stored data:** one optional object in `summary.json`.
70
+ - **Protocol:** one optional parameter, which is additive.
71
+
72
+ ## Migration
73
+
74
+ None. Old summaries have no `executor` field.
75
+
76
+ ## Checks
77
+
78
+ - A unit test: with no host, a refinement started with `executor.model` runs every probe with
79
+ that model. With a host that names a model, the host's model wins.
80
+ - `npm run typecheck`, `npm test`, `npm run prove`.
81
+ - App: `npm run typecheck`, `npm test`, `npm run check:layers`, and `cd src-tauri && cargo test`.
@@ -0,0 +1,71 @@
1
+ ---
2
+ id: PROP-0004
3
+ title: Flexible final-reply guidance with an optional human-inspection heading
4
+ status: Implemented
5
+ created: 2026-10-21
6
+ updated: 2026-10-21
7
+ affects: [INV-PRM-2, 04-prompt.md, ADR-0007, ADR-0008]
8
+ ---
9
+
10
+ # PROP-0004: Flexible final-reply guidance with an optional human-inspection heading
11
+
12
+ Accepted by the user and implemented; see [ADR-0008](../../decisions/ADR-0008-flexible-reporting-guidance.md).
13
+
14
+ ## Problem
15
+
16
+ The stable `reporting` section in `src/prompt/compile.ts` prescribes a fixed sequence of headings,
17
+ including **Worth a look** and **Check by hand**. This can force generic report structure when it adds
18
+ no value, and “Worth a look” does not clearly distinguish a concrete action that needs human
19
+ inspection because the agent could not perform it. The user requests flexible, content-driven
20
+ headings and a clearer label for genuinely unverified work.
21
+
22
+ ## Affected rules
23
+
24
+ - `04-prompt.md`, Reporting: “It is fixed text that shapes the final reply” and currently specifies
25
+ the ordered parts Files, Blocked, Worth a look, Check by hand, and Next steps.
26
+ - **INV-PRM-2**: “The system prompt holds only stable text: identity, role, the tree's sections, the
27
+ harness's reporting guidance, tool guidance and the tool manifest. Changing state never enters it.”
28
+ The invariant remains unchanged; the reporting text remains stable.
29
+ - [ADR-0007](../../decisions/ADR-0007-reporting-section.md) records the prior fixed heading list;
30
+ it is superseded by [ADR-0008](../../decisions/ADR-0008-flexible-reporting-guidance.md).
31
+
32
+ ## Proposal
33
+
34
+ Keep the harness-owned reporting section, its position, stable delivery, and concise outcome-first
35
+ rule. Replace the mandatory fixed heading sequence with guidance to use only structure that helps
36
+ explain the outcome; do not require generic headings such as **Worth a look** or **Check by hand**.
37
+
38
+ When a concrete verification step requires a person because the agent could not perform or observe
39
+ it, use the optional heading **Need human inspection**. Say what remains unverified, why the agent
40
+ could not verify it, and the specific check the person should perform. Do not use this heading for
41
+ checks the agent ran or for speculative, non-actionable risks. Continue to report checks truthfully
42
+ and honor any format requested by the person, application, or current mode.
43
+
44
+ ## Alternatives
45
+
46
+ - **Do nothing.** Keep the fixed headings, even when they produce generic or misleading sections.
47
+ - **Remove all guidance about unverified work.** This avoids a fixed heading but makes it easier to
48
+ omit concrete human follow-up.
49
+ - **Make “Need human inspection” mandatory.** Rejected because many tasks have no check requiring a
50
+ person.
51
+
52
+ ## Consequences
53
+
54
+ - The system prompt stays stable and harness-owned; all applications receive the revised guidance.
55
+ - Existing sessions get one provider-prefix change and may miss the prompt cache once after upgrade.
56
+ - No stored data or server protocol changes. Applications bundling the harness must rebuild to pick
57
+ up the new guidance.
58
+
59
+ ## Migration
60
+
61
+ None for stored data. The new text supersedes the reporting instructions in ADR-0007; reverting the
62
+ change would alter the stable prefix again.
63
+
64
+ ## Checks
65
+
66
+ - `src/prompt/compile.test.ts`: assert the stable system prompt carries the flexible guidance,
67
+ does not require the old fixed headings, and describes **Need human inspection** as conditional.
68
+ - Harness `npm run typecheck` and `npm test`.
69
+ - Xingular Agent `npm run typecheck`, `npm test`, `npm run check:layers`, and `cd src-tauri && cargo test`.
70
+ - Provider-cache impact is measured only with real application requests and the account owner's
71
+ permission, as required by INV-PRM-8.