@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,7 @@
1
+ import type { ToolSpec } from "./types.js";
2
+ export declare const SESSION_NAME = "session_name";
3
+ export interface NamedSession {
4
+ readonly sessionName?: string;
5
+ setSessionName(name: string): void;
6
+ }
7
+ export declare function sessionNameTool(current: () => NamedSession | undefined): ToolSpec;
@@ -0,0 +1,31 @@
1
+ // Pi owns session names and their history. Both execution paths bind this tool to
2
+ // the current native session; it never receives a target session id from the model.
3
+ import { invalid } from "../core/errors.js";
4
+ export const SESSION_NAME = 'session_name';
5
+ export function sessionNameTool(current) {
6
+ return {
7
+ name: SESSION_NAME,
8
+ label: 'Name the session',
9
+ description: 'Set or revise this session’s name. Name meaningful work early, then revise the name when the overall objective changes; greetings alone need no name. ' +
10
+ 'Use one short imperative sentence describing the objective, at most six words, such as "Add web browser integrations". ' +
11
+ 'You may revise a manually assigned name. Keep a useful current name when the objective is unchanged. This only names your own session.',
12
+ parameters: Type => Type.Object({ name: Type.String({ description: 'One short sentence describing the objective, at most six words' }) }),
13
+ planModeSafe: () => true,
14
+ execute: async (input) => {
15
+ if (typeof input.name !== 'string')
16
+ throw invalid('Send name as a short sentence of at most six words.');
17
+ if (/[\x00-\x08\x0e-\x1f\x7f-\x9f]/u.test(input.name)) {
18
+ throw invalid('Session names cannot contain terminal escapes or control characters.');
19
+ }
20
+ const name = input.name.replace(/\s+/gu, ' ').trim();
21
+ if (!name || name.split(' ').length > 6)
22
+ throw invalid('Use a non-empty session name of at most six words.');
23
+ const session = current();
24
+ if (!session)
25
+ throw invalid('The native session is unavailable; try naming it again once it is ready.');
26
+ if (session.sessionName !== name)
27
+ session.setSessionName(name);
28
+ return `Session name: ${name}`;
29
+ }
30
+ };
31
+ }
@@ -0,0 +1,4 @@
1
+ import type { Subagents } from "../sessions/subagentService.js";
2
+ import type { ToolSpec } from "./types.js";
3
+ export { SPAWN_SUBAGENT, SUBAGENT_RELATION, DEFAULT_SUBAGENT_DEPTH, MAX_SUBAGENT_DEPTH, subagentDepth, subagentReport, type SubagentOptions } from "../sessions/subagents.js";
4
+ export declare function subagentTools(service: Subagents, parentRunId: string): ToolSpec[];
@@ -0,0 +1,58 @@
1
+ import { HarnessError, invalid } from "../core/errors.js";
2
+ import { SPAWN_SUBAGENT, WAIT_SUBAGENTS, SUBAGENT_RECEIPT, MAX_SUBAGENT_TITLE_WORDS, subagentTitle } from "../sessions/subagents.js";
3
+ export { SPAWN_SUBAGENT, SUBAGENT_RELATION, DEFAULT_SUBAGENT_DEPTH, MAX_SUBAGENT_DEPTH, subagentDepth, subagentReport } from "../sessions/subagents.js";
4
+ function reported(parentRunId, results, spawned) {
5
+ const included = [];
6
+ let length = 0;
7
+ for (const result of results) {
8
+ if (length + result.text.length > 24_000 && included.length)
9
+ break;
10
+ included.push(result);
11
+ length += result.text.length + 300;
12
+ }
13
+ const receipt = { version: 1, ownerRunId: parentRunId, ...(spawned ? { spawned } : {}), delivered: included.map((result) => result.runId) };
14
+ return { text: JSON.stringify({ results: included, ...(results.length > included.length ? { remaining: results.slice(included.length).map((result) => result.runId) } : {}) }), details: { [SUBAGENT_RECEIPT]: receipt } };
15
+ }
16
+ export function subagentTools(service, parentRunId) {
17
+ const execute = (fn) => async (input) => {
18
+ try {
19
+ return await fn(input);
20
+ }
21
+ catch (error) {
22
+ if (error instanceof HarnessError)
23
+ return error.message;
24
+ throw error;
25
+ }
26
+ };
27
+ return [{
28
+ name: SPAWN_SUBAGENT,
29
+ label: 'Start a subagent',
30
+ description: 'Start a fresh child run for independent work: a copy of yourself, or an agent profile from your Subagents list when you name it in agent (for example worker to make changes, explorer to find and explain). Give a short title, which the user sees in the roster, and a complete brief: the child has no conversation history and no more capabilities than you. Returns its run ID immediately by default so you can continue working. Results arrive automatically before you finish. Use wait_subagents to join selected children, or wait: true for an inline result. Stopping you stops your children.',
31
+ parameters: (Type) => Type.Object({
32
+ title: Type.String({ description: `A short imperative title for the roster, at most ${MAX_SUBAGENT_TITLE_WORDS} words, such as "Map the auth flow"` }),
33
+ brief: Type.String(),
34
+ agent: Type.Optional(Type.String({ description: 'The name of an agent profile from your Subagents list; omit for a copy of yourself' })),
35
+ tools: Type.Optional(Type.Array(Type.String())),
36
+ wait: Type.Optional(Type.Boolean({ description: 'Wait for the child and return its result; default false' }))
37
+ }),
38
+ execute: execute(async (input) => {
39
+ const title = subagentTitle(input.title);
40
+ if (!title)
41
+ throw invalid(`Give the subagent a title of at most ${MAX_SUBAGENT_TITLE_WORDS} words, with no control characters.`);
42
+ const child = await service.spawn({ parentRunId, brief: input.brief, title, agent: input.agent, tools: input.tools, wait: input.wait });
43
+ if (input.wait === true)
44
+ return reported(parentRunId, service.results({ parentRunId, runIds: [child.runId] }), [child.runId]);
45
+ return { text: JSON.stringify(child), details: { [SUBAGENT_RECEIPT]: { version: 1, ownerRunId: parentRunId, spawned: [child.runId] } } };
46
+ })
47
+ }, {
48
+ name: WAIT_SUBAGENTS,
49
+ label: 'Wait for subagents',
50
+ description: 'Wait for all selected direct subagents to settle and return their results, including failures. Omit runIds to select your current children. Do useful independent work before waiting; results also arrive automatically before your final reply.',
51
+ parameters: (Type) => Type.Object({ runIds: Type.Optional(Type.Array(Type.String())) }),
52
+ execute: execute(async (input) => {
53
+ if (input.runIds !== undefined && !Array.isArray(input.runIds))
54
+ throw invalid('runIds must be an array of child run IDs.');
55
+ return reported(parentRunId, await service.wait({ parentRunId, runIds: input.runIds }));
56
+ })
57
+ }];
58
+ }
@@ -0,0 +1,48 @@
1
+ import type { CallerContext } from "../core/caller.js";
2
+ import type { CapabilitySet } from "../capabilities/types.js";
3
+ import type { ActiveRun } from "../sessions/registry.js";
4
+ import type { ToolAttachmentRef } from "../sessions/contracts.js";
5
+ import type { ProviderDiagnostics } from "../doctor/types.js";
6
+ export interface ToolResult {
7
+ text: string;
8
+ /** Native-history metadata; never interpreted as model instructions. */
9
+ details?: Record<string, unknown>;
10
+ image?: {
11
+ data: string;
12
+ mimeType: string;
13
+ };
14
+ /** Further images, after `image`. A screenshot tool returns one; a comparison may return several. */
15
+ images?: {
16
+ data: string;
17
+ mimeType: string;
18
+ }[];
19
+ /** References to content stored by the provider; bytes never enter the run-event stream. */
20
+ attachments?: ToolAttachmentRef[];
21
+ }
22
+ export interface ToolSpec {
23
+ name: string;
24
+ label: string;
25
+ description: string;
26
+ /** Builds the TypeBox parameter schema. */
27
+ parameters: (type: typeof import('typebox').Type) => unknown;
28
+ /** Only reads or asks; such a tool stays callable in plan mode. */
29
+ readOnly?: boolean;
30
+ /** Whether this particular call is safe for plan-mode research. Refusals happen before approvals. */
31
+ planModeSafe?: (input: Record<string, unknown>) => boolean;
32
+ execute: (input: Record<string, unknown>) => Promise<string | ToolResult>;
33
+ }
34
+ /** What a tool provider is told about the session it is building tools for. */
35
+ export interface ToolSession {
36
+ run: ActiveRun;
37
+ caller: CallerContext;
38
+ /** The tool names switched on for this session. */
39
+ allow: readonly string[];
40
+ /** Hops from the user to this session (0 when the user started it). */
41
+ depth: number;
42
+ /** The session's working folder. */
43
+ cwd: string;
44
+ /** The capability set frozen when this run started. */
45
+ capabilities: CapabilitySet;
46
+ }
47
+ /** Builds the tools a session may be given. Only those named in `allow` are registered. */
48
+ export type ToolProvider = ((session: ToolSession) => ToolSpec[] | Promise<ToolSpec[]>) & ProviderDiagnostics;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,34 @@
1
+ import { type Variant } from "./surface.js";
2
+ export declare const KINDS: readonly ["skills", "prompts", "rules"];
3
+ export type ComponentKind = (typeof KINDS)[number];
4
+ export interface ComponentItem {
5
+ /** `<kind>/<name>`, stable across edits. */
6
+ id: string;
7
+ kind: string;
8
+ name: string;
9
+ description: string;
10
+ path: string;
11
+ /** Set on an item that ships with the application. */
12
+ builtin?: true;
13
+ }
14
+ export interface SkillBundleInput {
15
+ name: string;
16
+ files: {
17
+ path: string;
18
+ content: string;
19
+ encoding: 'utf8' | 'base64';
20
+ }[];
21
+ }
22
+ /** The folders built-in items are read from, each laid out like `registry/`. Later folders win. */
23
+ export declare function configureBuiltins(directories: readonly string[]): void;
24
+ /** The name and description of a skill or prompt file anywhere on disk, read the way a registry item is. */
25
+ export declare function describeFile(file: string): {
26
+ name: string;
27
+ description: string;
28
+ } | null;
29
+ export declare function list(root: string): ComponentItem[];
30
+ /** Whether a library skill or rule already has a corresponding entry in a variant. */
31
+ export declare function isInVariant(root: string, variant: Variant, id: string): boolean;
32
+ export declare function addToVariant(root: string, variant: Variant, id: string): Variant;
33
+ /** Imports inert registry resources. Prompts and rules are single UTF-8 Markdown documents. */
34
+ export declare function importItems(root: string, kind: ComponentKind, bundles: SkillBundleInput[]): ComponentItem[];
@@ -0,0 +1,230 @@
1
+ // The component library: skills, rules and prompts kept as files under `<data>/registry/`, and
2
+ // any built-in ones an application ships in folders laid out the same way. Nothing here reaches
3
+ // a session by itself: a person adds an item to a variant, where it becomes a skill (c6) or
4
+ // guardrail text (c2). The Hub installs into this library.
5
+ import { lstatSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
6
+ import { basename, dirname, join } from 'node:path';
7
+ import { invalid, notFound } from "../core/errors.js";
8
+ import * as frontmatter from "../core/frontmatter.js";
9
+ import { isDir, safeRelative } from "../core/fs.js";
10
+ import { compareText, lines, takeChars } from "../core/text.js";
11
+ import { GUARDRAILS, PI_SURFACE } from "./surface.js";
12
+ import { autotrigger } from "./variant.js";
13
+ export const KINDS = ['skills', 'prompts', 'rules'];
14
+ const MAX_SKILL_BUNDLES = 20;
15
+ const MAX_SKILL_FILES = 100;
16
+ const MAX_SKILL_IMPORT_BYTES = 10 * 1024 * 1024;
17
+ let builtinDirs = [];
18
+ /** The folders built-in items are read from, each laid out like `registry/`. Later folders win. */
19
+ export function configureBuiltins(directories) {
20
+ builtinDirs = [...directories];
21
+ }
22
+ const kindDir = (root, kind) => join(root, 'registry', kind);
23
+ function itemFrom(kind, stem, file) {
24
+ let text;
25
+ try {
26
+ text = readFileSync(file, 'utf8');
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ const parsed = frontmatter.parse(text);
32
+ const name = parsed?.front.name;
33
+ const description = parsed?.front.description;
34
+ // A frontmatter block whose name or description is not text is treated as no frontmatter.
35
+ const usable = parsed !== null && (name === undefined || name === null || typeof name === 'string') && (description === undefined || description === null || typeof description === 'string');
36
+ const body = usable ? parsed.body : text;
37
+ return {
38
+ id: `${kind}/${stem}`,
39
+ kind,
40
+ name: usable && typeof name === 'string' ? name : stem.replace(/[-_]/g, ' '),
41
+ description: usable && typeof description === 'string' ? description : takeChars(lines(body).find((line) => line.trim() && !line.startsWith('#')) ?? '', 160),
42
+ path: file
43
+ };
44
+ }
45
+ const stemOf = (name) => (name.lastIndexOf('.') > 0 ? name.slice(0, name.lastIndexOf('.')) : name);
46
+ /** The name and description of a skill or prompt file anywhere on disk, read the way a registry item is. */
47
+ export function describeFile(file) {
48
+ const stem = basename(file) === 'SKILL.md' ? basename(dirname(file)) : stemOf(basename(file));
49
+ const item = itemFrom('', stem, file);
50
+ return item && { name: item.name, description: item.description };
51
+ }
52
+ function itemsIn(directory) {
53
+ const items = [];
54
+ for (const kind of KINDS) {
55
+ let names;
56
+ try {
57
+ names = readdirSync(join(directory, kind));
58
+ }
59
+ catch {
60
+ continue;
61
+ }
62
+ for (const name of names) {
63
+ const path = join(directory, kind, name);
64
+ const stem = stemOf(name);
65
+ if (stem.startsWith('.'))
66
+ continue;
67
+ const file = isDir(path) ? join(path, 'SKILL.md') : name.endsWith('.md') ? path : null;
68
+ const item = file && itemFrom(kind, stem, file);
69
+ if (item)
70
+ items.push(item);
71
+ }
72
+ }
73
+ return items;
74
+ }
75
+ export function list(root) {
76
+ const items = new Map();
77
+ for (const directory of builtinDirs)
78
+ for (const item of itemsIn(directory))
79
+ items.set(item.id, { ...item, builtin: true });
80
+ for (const item of itemsIn(join(root, 'registry')))
81
+ items.set(item.id, item);
82
+ return [...items.values()].sort((left, right) => compareText(left.id, right.id));
83
+ }
84
+ /** A variant with one library item added: a skill as `skills/<name>/` with its files, a rule as guardrail text. */
85
+ function skillName(item) {
86
+ const slug = basename(item.path) === 'SKILL.md' ? basename(dirname(item.path)) : basename(item.path).replace(/\.md$/, '');
87
+ return slug.toLowerCase().replace(/[^a-z0-9_-]+/g, '-').replace(/^[-_]+|-+$/g, '') || 'skill';
88
+ }
89
+ /** Whether a library skill or rule already has a corresponding entry in a variant. */
90
+ export function isInVariant(root, variant, id) {
91
+ const item = list(root).find((candidate) => candidate.id === id);
92
+ if (!item)
93
+ return false;
94
+ if (item.kind === 'skills')
95
+ return variant['skills/' + skillName(item) + '/SKILL.md'] !== undefined;
96
+ if (item.kind === 'rules') {
97
+ const text = readFileSync(item.path, 'utf8');
98
+ const body = (frontmatter.parse(text)?.body ?? text).trim();
99
+ return Boolean(body) && (variant[GUARDRAILS] ?? '').includes(body);
100
+ }
101
+ return false;
102
+ }
103
+ export function addToVariant(root, variant, id) {
104
+ const item = list(root).find((candidate) => candidate.id === id);
105
+ if (!item)
106
+ throw notFound('That library item');
107
+ const next = { ...variant };
108
+ const text = readFileSync(item.path, 'utf8');
109
+ const body = (frontmatter.parse(text)?.body ?? text).trim();
110
+ if (item.kind === 'rules') {
111
+ const current = (next[GUARDRAILS] ?? '').trimEnd();
112
+ next[GUARDRAILS] = `${current ? `${current}\n\n` : ''}${body}\n`;
113
+ return next;
114
+ }
115
+ if (item.kind !== 'skills')
116
+ throw invalid('Only skills and rules can be added to a harness; prompts stay in the library.');
117
+ const name = skillName(item);
118
+ next[`skills/${name}/SKILL.md`] = `---\nname: ${name}\ndescription: ${(item.description || `the ${name} workflow applies`).replace(/\n/g, ' ')}\n---\n${body}\n`;
119
+ // A folder skill's helpers travel with it.
120
+ const folder = dirname(item.path);
121
+ if (basename(item.path) === 'SKILL.md' && isDir(join(folder, 'scripts'))) {
122
+ for (const file of readdirSync(join(folder, 'scripts')))
123
+ next[`skills/${name}/scripts/${file}`] = readFileSync(join(folder, 'scripts', file), 'utf8');
124
+ }
125
+ autotrigger(PI_SURFACE, next);
126
+ return next;
127
+ }
128
+ /** Imports inert registry resources. Prompts and rules are single UTF-8 Markdown documents. */
129
+ export function importItems(root, kind, bundles) {
130
+ if (!Array.isArray(bundles) || bundles.length === 0 || bundles.length > MAX_SKILL_BUNDLES) {
131
+ throw invalid(`Import between 1 and ${MAX_SKILL_BUNDLES} skills at a time.`);
132
+ }
133
+ const directory = kindDir(root, kind);
134
+ mkdirSync(directory, { recursive: true });
135
+ const existing = new Set(list(root).map((item) => item.id));
136
+ const seen = new Set();
137
+ let totalBytes = 0;
138
+ const prepared = bundles.map((bundle) => {
139
+ if (!bundle || typeof bundle.name !== 'string' || !Array.isArray(bundle.files) || bundle.files.length === 0 || bundle.files.length > MAX_SKILL_FILES) {
140
+ throw invalid('Each skill needs a name and a bounded list of files.');
141
+ }
142
+ const name = bundle.name.trim();
143
+ if (name.length > 64)
144
+ throw invalid('Use a skill name with at most 64 letters or numbers.');
145
+ const slug = Array.from(name.toLowerCase(), (character) => (/^[a-z0-9]$/.test(character) ? character : '-')).join('').split('-').filter(Boolean).join('-');
146
+ if (!slug || slug.length > 64)
147
+ throw invalid('Use a skill name with at most 64 letters or numbers.');
148
+ const id = `${kind}/${slug}`;
149
+ if (existing.has(id) || seen.has(id))
150
+ throw invalid(`The skill “${name}” already exists.`);
151
+ try {
152
+ lstatSync(join(directory, kind === 'skills' ? slug : `${slug}.md`));
153
+ throw invalid(`The skill “${name}” already exists.`);
154
+ }
155
+ catch (error) {
156
+ if (error.code !== 'ENOENT')
157
+ throw error;
158
+ }
159
+ seen.add(id);
160
+ const files = new Map();
161
+ for (const file of bundle.files) {
162
+ if (!file || typeof file.path !== 'string' || file.path.length > 240 || typeof file.content !== 'string' || !['utf8', 'base64'].includes(file.encoding)) {
163
+ throw invalid(`The skill “${name}” contains an invalid file.`);
164
+ }
165
+ let relative;
166
+ try {
167
+ relative = safeRelative(file.path);
168
+ }
169
+ catch {
170
+ throw invalid(`The skill “${name}” contains a path outside its folder.`);
171
+ }
172
+ if (relative.includes('\0') || relative.split('/').some((part) => part.startsWith('.') || part.includes(':'))) {
173
+ throw invalid(`The skill “${name}” contains an unsupported file path.`);
174
+ }
175
+ const portablePath = relative.normalize('NFC').toLowerCase();
176
+ if ([...files.keys()].some((path) => path.normalize('NFC').toLowerCase() === portablePath))
177
+ throw invalid(`The skill “${name}” contains a duplicate file path.`);
178
+ let byteLength;
179
+ if (file.encoding === 'base64') {
180
+ if (!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(file.content)) {
181
+ throw invalid(`The file “${relative}” is not valid base64.`);
182
+ }
183
+ if (file.content.length > Math.ceil(MAX_SKILL_IMPORT_BYTES / 3) * 4)
184
+ throw invalid('The skill import is larger than 10 MiB.');
185
+ byteLength = Math.floor(file.content.length * 3 / 4) - (file.content.endsWith('==') ? 2 : file.content.endsWith('=') ? 1 : 0);
186
+ }
187
+ else {
188
+ byteLength = Buffer.byteLength(file.content, 'utf8');
189
+ }
190
+ totalBytes += byteLength;
191
+ if (totalBytes > MAX_SKILL_IMPORT_BYTES)
192
+ throw invalid('The skill import is larger than 10 MiB.');
193
+ const bytes = file.encoding === 'base64' ? Buffer.from(file.content, 'base64') : Buffer.from(file.content, 'utf8');
194
+ if (file.encoding === 'base64' && bytes.toString('base64') !== file.content)
195
+ throw invalid(`The file “${relative}” is not valid base64.`);
196
+ files.set(relative, bytes);
197
+ }
198
+ if (kind === 'skills' && !files.has('SKILL.md'))
199
+ throw invalid(`The skill “${name}” must include SKILL.md at its root.`);
200
+ if (kind !== 'skills' && (bundle.files.length !== 1 || bundle.files[0].encoding !== 'utf8' || bundle.files[0].path !== 'CONTENT.md'))
201
+ throw invalid('A prompt or rule must contain one UTF-8 CONTENT.md file.');
202
+ return { name, slug, files };
203
+ });
204
+ const staging = mkdtempSync(join(directory, '.agent-template-import-'));
205
+ const installed = [];
206
+ try {
207
+ for (const bundle of prepared) {
208
+ const target = join(staging, bundle.slug);
209
+ for (const [relative, bytes] of bundle.files) {
210
+ const path = join(target, ...relative.split('/'));
211
+ mkdirSync(dirname(path), { recursive: true });
212
+ writeFileSync(path, bytes, { flag: 'wx' });
213
+ }
214
+ }
215
+ for (const bundle of prepared) {
216
+ const target = join(directory, kind === 'skills' ? bundle.slug : `${bundle.slug}.md`);
217
+ renameSync(kind === 'skills' ? join(staging, bundle.slug) : join(staging, bundle.slug, 'CONTENT.md'), target);
218
+ installed.push(target);
219
+ }
220
+ }
221
+ catch (error) {
222
+ for (const target of installed)
223
+ rmSync(target, { recursive: true, force: true });
224
+ throw error;
225
+ }
226
+ finally {
227
+ rmSync(staging, { recursive: true, force: true });
228
+ }
229
+ return list(root);
230
+ }
@@ -0,0 +1,66 @@
1
+ import { type Variant } from "./surface.js";
2
+ import type { VariantTrust } from "./trust.js";
3
+ /** Where the variant's own sections sit among the application's (identity 10, role 20). */
4
+ export declare const VARIANT_SECTION_ORDER: {
5
+ readonly system: 25;
6
+ readonly guardrails: 40;
7
+ readonly memory: 45;
8
+ readonly subagents: 64;
9
+ readonly scripts: 66;
10
+ };
11
+ /** Which variant a session runs. */
12
+ export type VariantChoice =
13
+ /** A scope's head, or one of its versions. */
14
+ {
15
+ scope: string;
16
+ version?: string | null;
17
+ }
18
+ /** A variant on disk, such as a refinement candidate. It is read, never written. */
19
+ | {
20
+ dir: string;
21
+ scope?: string | null;
22
+ };
23
+ export interface SubagentDefinition {
24
+ name: string;
25
+ description: string;
26
+ instructions: string;
27
+ }
28
+ export interface Materialised {
29
+ scope: string | null;
30
+ /** The fingerprint of the variant that ran. */
31
+ fingerprint: string;
32
+ /** The variant's folder; scripts and skills are read from it in place. */
33
+ dir: string;
34
+ /** The variant's files, path → text. */
35
+ files: Variant;
36
+ sections: {
37
+ id: string;
38
+ title: string;
39
+ body: string;
40
+ order: number;
41
+ }[];
42
+ /** The tool guidance, added after the tool groups. */
43
+ toolGuidance: string;
44
+ skillPaths: string[];
45
+ extensionPaths: string[];
46
+ /** Plugin files that did not load because their code is not trusted. */
47
+ untrustedPlugins: string[];
48
+ subagents: SubagentDefinition[];
49
+ }
50
+ /** Finds the variant a choice names. */
51
+ export declare function resolve(root: string, choice: VariantChoice): {
52
+ scope: string | null;
53
+ dir: string;
54
+ fingerprint: string;
55
+ variant: Variant;
56
+ };
57
+ export interface MaterialiseOptions {
58
+ trust?: VariantTrust | null;
59
+ /** Load improver-written plugin code without trust (refinement probes, when the person allowed it). */
60
+ probeCode?: boolean;
61
+ /** Whether the session can start subagents; when it cannot, c5 is not described. */
62
+ subagents?: boolean;
63
+ }
64
+ export declare function materialise(root: string, choice: VariantChoice, options?: MaterialiseOptions): Materialised;
65
+ /** One subagent's definition from the variant a run used. */
66
+ export declare function subagentOf(dir: string, name: string): SubagentDefinition | null;
@@ -0,0 +1,81 @@
1
+ // Turning a variant into what a Pi session receives: always-on prompt sections (c1–c4),
2
+ // the skills folder Pi advertises natively (c6), the scripts folder named in the prompt (c7),
3
+ // subagent definitions (c5), and plugin extensions that are trusted (c8).
4
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import { invalid } from "../core/errors.js";
7
+ import * as store from "./store.js";
8
+ import { GUARDRAILS, MEMORY, PI_SURFACE, SYSTEM_PROMPT, TOOL_GUIDANCE, patterns } from "./surface.js";
9
+ import { readVariant } from "./variant.js";
10
+ /** Where the variant's own sections sit among the application's (identity 10, role 20). */
11
+ export const VARIANT_SECTION_ORDER = { system: 25, guardrails: 40, memory: 45, subagents: 64, scripts: 66 };
12
+ function frontmatter(text, field) {
13
+ const m = new RegExp(`^${field}:\\s*(.+)$`, 'm').exec(text.slice(0, 600));
14
+ return m?.[1]?.trim() ?? null;
15
+ }
16
+ function bodyAfterFrontmatter(text) {
17
+ const m = /^---\n[\s\S]*?\n---\n?/.exec(text);
18
+ return (m ? text.slice(m[0].length) : text).trim();
19
+ }
20
+ /** Finds the variant a choice names. */
21
+ export function resolve(root, choice) {
22
+ if ('dir' in choice) {
23
+ if (!existsSync(choice.dir))
24
+ throw invalid('That variant folder does not exist.');
25
+ const variant = readVariant(PI_SURFACE, choice.dir);
26
+ return { scope: choice.scope ?? null, dir: choice.dir, fingerprint: store.fingerprint(variant), variant };
27
+ }
28
+ const fp = choice.version ?? store.head(root, choice.scope)?.fingerprint;
29
+ if (!fp)
30
+ throw invalid(`The variant '${choice.scope}' has no version yet.`);
31
+ const dir = store.versionPath(root, choice.scope, fp);
32
+ return { scope: choice.scope, dir, fingerprint: fp, variant: store.readVersion(root, choice.scope, fp) };
33
+ }
34
+ export function materialise(root, choice, options = {}) {
35
+ const { scope, dir, fingerprint, variant } = resolve(root, choice);
36
+ const r = patterns(PI_SURFACE);
37
+ const sections = [];
38
+ const add = (id, title, body, order) => {
39
+ if (body?.trim())
40
+ sections.push({ id, title, body: body.trim(), order });
41
+ };
42
+ add('system', 'Instructions', variant[SYSTEM_PROMPT], VARIANT_SECTION_ORDER.system);
43
+ add('guardrails', 'Guardrails', variant[GUARDRAILS], VARIANT_SECTION_ORDER.guardrails);
44
+ add('memory', 'Memory', variant[MEMORY], VARIANT_SECTION_ORDER.memory);
45
+ const subagents = [];
46
+ for (const rel of Object.keys(variant).sort()) {
47
+ const m = r.subagent.exec(rel);
48
+ if (!m)
49
+ continue;
50
+ const text = variant[rel];
51
+ subagents.push({ name: m[1], description: frontmatter(text, 'description') ?? '', instructions: bodyAfterFrontmatter(text) });
52
+ }
53
+ if (subagents.length && options.subagents !== false) {
54
+ add('subagents', 'Subagents', `Start one with spawn_subagent and agent set to its name. Each works in its own context and returns text.\n${subagents.map((agent) => `- ${agent.name} — ${agent.description}`).join('\n')}`, VARIANT_SECTION_ORDER.subagents);
55
+ }
56
+ const scripts = Object.keys(variant).filter((rel) => r.script.test(rel)).map((rel) => rel.slice('scripts/'.length)).sort();
57
+ if (scripts.length) {
58
+ add('scripts', 'Scripts', `Your helper scripts are in ${join(dir, 'scripts')}: ${scripts.join(', ')}. Run a .py one with python3 and a .mjs one with node, giving its full path. When instructions say \`scripts/<name>\`, they mean this folder.`, VARIANT_SECTION_ORDER.scripts);
59
+ }
60
+ const skillPaths = existsSync(join(dir, 'skills')) && readdirSync(join(dir, 'skills')).length ? [join(dir, 'skills')] : [];
61
+ const extensionPaths = [];
62
+ const untrustedPlugins = [];
63
+ for (const rel of Object.keys(variant).filter((path) => r.plugin.test(path)).sort()) {
64
+ const trusted = options.trust?.has((options.trust.review({ [rel]: variant[rel] })[0]?.hash) ?? '') ?? false;
65
+ if (trusted || options.probeCode)
66
+ extensionPaths.push(join(dir, rel));
67
+ else
68
+ untrustedPlugins.push(rel);
69
+ }
70
+ return { scope, fingerprint, dir, files: variant, sections, toolGuidance: (variant[TOOL_GUIDANCE] ?? '').trim(), skillPaths, extensionPaths, untrustedPlugins, subagents };
71
+ }
72
+ /** One subagent's definition from the variant a run used. */
73
+ export function subagentOf(dir, name) {
74
+ if (!/^[a-z0-9][a-z0-9_-]*$/.test(name))
75
+ return null;
76
+ const path = join(dir, 'sub_agents', name, 'AGENT.md');
77
+ if (!existsSync(path))
78
+ return null;
79
+ const text = readFileSync(path, 'utf8');
80
+ return { name, description: frontmatter(text, 'description') ?? '', instructions: bodyAfterFrontmatter(text) };
81
+ }
@@ -0,0 +1,4 @@
1
+ /** `harnesses/<scope>/versions/<fp>/tree/` and `library/<scope>/<area>/harnesses/<task>/harness/`. */
2
+ export declare function migrateVariantLayout(root: string): string[];
3
+ /** The device-local file of trusted plugin code. */
4
+ export declare function migrateTrustFile(stateDir: string): void;
@@ -0,0 +1,41 @@
1
+ // Moves state written before the foundation/variant naming (PROP-0009) to its new names. Every
2
+ // step renames and never overwrites, so running it again, or beside new data, changes nothing.
3
+ import { existsSync, readdirSync, renameSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ function move(from, to, moved) {
6
+ if (!existsSync(from) || existsSync(to))
7
+ return;
8
+ renameSync(from, to);
9
+ moved.push(to);
10
+ }
11
+ function folders(path) {
12
+ try {
13
+ return readdirSync(path, { withFileTypes: true }).filter((entry) => entry.isDirectory()).map((entry) => entry.name);
14
+ }
15
+ catch {
16
+ return [];
17
+ }
18
+ }
19
+ /** `harnesses/<scope>/versions/<fp>/tree/` and `library/<scope>/<area>/harnesses/<task>/harness/`. */
20
+ export function migrateVariantLayout(root) {
21
+ const moved = [];
22
+ move(join(root, 'harnesses'), join(root, 'variants'), moved);
23
+ for (const scope of folders(join(root, 'variants'))) {
24
+ const versions = join(root, 'variants', scope, 'versions');
25
+ for (const fingerprint of folders(versions))
26
+ move(join(versions, fingerprint, 'tree'), join(versions, fingerprint, 'variant'), moved);
27
+ }
28
+ for (const scope of folders(join(root, 'library'))) {
29
+ for (const area of folders(join(root, 'library', scope))) {
30
+ const base = join(root, 'library', scope, area);
31
+ move(join(base, 'harnesses'), join(base, 'variants'), moved);
32
+ for (const task of folders(join(base, 'variants')))
33
+ move(join(base, 'variants', task, 'harness'), join(base, 'variants', task, 'variant'), moved);
34
+ }
35
+ }
36
+ return moved;
37
+ }
38
+ /** The device-local file of trusted plugin code. */
39
+ export function migrateTrustFile(stateDir) {
40
+ move(join(stateDir, 'tree-plugin-trust.json'), join(stateDir, 'variant-plugin-trust.json'), []);
41
+ }
@@ -0,0 +1,20 @@
1
+ import { type Variant } from "./surface.js";
2
+ export interface SeedInput {
3
+ /** The caller whose rules, skills and memory blocks to carry over. */
4
+ agentId?: string | null;
5
+ projectId?: string | null;
6
+ /** The caller's own instructions. */
7
+ instructions?: string;
8
+ }
9
+ /** The legacy pieces for a caller, before they are put together. */
10
+ export declare function legacyPieces(root: string, input: SeedInput): {
11
+ rules: string[];
12
+ skills: Record<string, string>;
13
+ memory: string[];
14
+ };
15
+ /**
16
+ * Builds a valid seed variant. Rules become guardrails, blocks become memory, and every skill gets a
17
+ * trigger line. When the always-on text would be over the cap, memory is shortened first, then
18
+ * guardrails; nothing else is dropped.
19
+ */
20
+ export declare function seedVariant(root: string, input: SeedInput): Variant;