@xingular/harness 1.0.0 → 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 (257) hide show
  1. package/CHANGELOG.md +33 -5
  2. package/README.md +70 -19
  3. package/dist/cli.js +10321 -5785
  4. package/dist/sdk/agents/builtin.d.ts +2 -0
  5. package/dist/sdk/agents/builtin.js +34 -0
  6. package/dist/sdk/agents/narrow.d.ts +13 -0
  7. package/dist/sdk/agents/narrow.js +29 -0
  8. package/dist/sdk/agents/profiles.d.ts +80 -0
  9. package/dist/sdk/agents/profiles.js +221 -0
  10. package/dist/sdk/annotations/bridge.d.ts +42 -0
  11. package/dist/sdk/annotations/bridge.js +264 -0
  12. package/dist/sdk/annotations/capture.d.ts +116 -0
  13. package/dist/sdk/annotations/capture.js +308 -0
  14. package/dist/sdk/annotations/delivery.d.ts +72 -0
  15. package/dist/sdk/annotations/delivery.js +130 -0
  16. package/dist/sdk/annotations/inspect.d.ts +10 -0
  17. package/dist/sdk/annotations/inspect.js +33 -0
  18. package/dist/sdk/annotations/isolated.d.ts +6 -0
  19. package/dist/sdk/annotations/isolated.js +51 -0
  20. package/dist/sdk/annotations/pageScript.d.ts +28 -0
  21. package/dist/sdk/annotations/pageScript.js +570 -0
  22. package/dist/sdk/annotations/part.d.ts +10 -0
  23. package/dist/sdk/annotations/part.js +144 -0
  24. package/dist/sdk/annotations/queue.d.ts +4 -0
  25. package/dist/sdk/annotations/queue.js +40 -0
  26. package/dist/sdk/annotations/serverMethods.d.ts +3 -0
  27. package/dist/sdk/annotations/serverMethods.js +62 -0
  28. package/dist/sdk/annotations/store.d.ts +160 -0
  29. package/dist/sdk/annotations/store.js +386 -0
  30. package/dist/sdk/browser/index.d.ts +14 -3
  31. package/dist/sdk/browser/index.js +11 -4
  32. package/dist/sdk/browser/serverMethods.d.ts +3 -0
  33. package/dist/sdk/browser/serverMethods.js +7 -0
  34. package/dist/sdk/browser/session.d.ts +1 -0
  35. package/dist/sdk/browser/session.js +45 -9
  36. package/dist/sdk/cli.js +19 -11
  37. package/dist/sdk/core/bus.js +1 -1
  38. package/dist/sdk/core/env.d.ts +1 -1
  39. package/dist/sdk/core/env.js +1 -1
  40. package/dist/sdk/doctor/serverMethods.d.ts +3 -0
  41. package/dist/sdk/doctor/serverMethods.js +8 -0
  42. package/dist/sdk/harness.d.ts +15 -0
  43. package/dist/sdk/harness.js +44 -5
  44. package/dist/sdk/history/recall.js +8 -8
  45. package/dist/sdk/history/serverMethods.d.ts +3 -0
  46. package/dist/sdk/history/serverMethods.js +8 -0
  47. package/dist/sdk/hub/cli.d.ts +1 -1
  48. package/dist/sdk/hub/cli.js +1 -1
  49. package/dist/sdk/hub/schema.d.ts +1 -1
  50. package/dist/sdk/hub/serverMethods.d.ts +3 -0
  51. package/dist/sdk/hub/serverMethods.js +11 -0
  52. package/dist/sdk/index.d.ts +10 -0
  53. package/dist/sdk/index.js +7 -0
  54. package/dist/sdk/mcp/connections.js +14 -7
  55. package/dist/sdk/mcp/serverMethods.d.ts +3 -0
  56. package/dist/sdk/mcp/serverMethods.js +22 -0
  57. package/dist/sdk/plugins/builtin.d.ts +1 -0
  58. package/dist/sdk/plugins/builtin.js +128 -33
  59. package/dist/sdk/plugins/builtinRegistry.d.ts +53 -0
  60. package/dist/sdk/plugins/builtinRegistry.js +49 -0
  61. package/dist/sdk/plugins/cli.d.ts +1 -1
  62. package/dist/sdk/plugins/cli.js +4 -3
  63. package/dist/sdk/prompt/compile.d.ts +5 -2
  64. package/dist/sdk/prompt/compile.js +25 -8
  65. package/dist/sdk/refine/cli.d.ts +1 -1
  66. package/dist/sdk/refine/cli.js +2 -2
  67. package/dist/sdk/refine/serverMethods.d.ts +3 -0
  68. package/dist/sdk/refine/serverMethods.js +20 -0
  69. package/dist/sdk/server/methods.js +9 -86
  70. package/dist/sdk/server/params.d.ts +4 -0
  71. package/dist/sdk/server/params.js +11 -0
  72. package/dist/sdk/sessions/contracts.d.ts +17 -0
  73. package/dist/sdk/sessions/contracts.js +42 -3
  74. package/dist/sdk/sessions/planMode.d.ts +5 -2
  75. package/dist/sdk/sessions/planMode.js +12 -3
  76. package/dist/sdk/sessions/reasoningSummaries.d.ts +2 -2
  77. package/dist/sdk/sessions/reasoningSummaries.js +3 -3
  78. package/dist/sdk/sessions/registry.d.ts +1 -0
  79. package/dist/sdk/sessions/registry.js +4 -1
  80. package/dist/sdk/sessions/runIndex.js +7 -7
  81. package/dist/sdk/sessions/runStore.js +3 -1
  82. package/dist/sdk/sessions/runner.js +2 -2
  83. package/dist/sdk/sessions/sessions.d.ts +17 -5
  84. package/dist/sdk/sessions/sessions.js +79 -12
  85. package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
  86. package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
  87. package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
  88. package/dist/sdk/sessions/sideQuestions.js +290 -0
  89. package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
  90. package/dist/sdk/sessions/subagentServerMethods.js +41 -0
  91. package/dist/sdk/sessions/subagentService.d.ts +13 -2
  92. package/dist/sdk/sessions/subagentService.js +34 -16
  93. package/dist/sdk/sessions/subagents.d.ts +9 -1
  94. package/dist/sdk/sessions/subagents.js +19 -0
  95. package/dist/sdk/terminal/browser.d.ts +62 -0
  96. package/dist/sdk/terminal/browser.js +41 -0
  97. package/dist/sdk/terminal/browserControl.d.ts +29 -0
  98. package/dist/sdk/terminal/browserControl.js +186 -0
  99. package/dist/sdk/terminal/commandHelp.d.ts +17 -0
  100. package/dist/sdk/terminal/commandHelp.js +20 -0
  101. package/dist/sdk/terminal/controller.d.ts +7 -1
  102. package/dist/sdk/terminal/controller.js +34 -2
  103. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
  104. package/dist/sdk/terminal/opentui/subagentsWidget.js +52 -0
  105. package/dist/sdk/terminal/piExtension.js +33 -48
  106. package/dist/sdk/terminal/socket.d.ts +6 -3
  107. package/dist/sdk/terminal/socket.js +40 -9
  108. package/dist/sdk/terminal/standalone.d.ts +2 -0
  109. package/dist/sdk/terminal/standalone.js +50 -10
  110. package/dist/sdk/terminal/subagentMonitor.d.ts +38 -0
  111. package/dist/sdk/terminal/subagentMonitor.js +121 -0
  112. package/dist/sdk/terminal/terminals.d.ts +42 -6
  113. package/dist/sdk/terminal/terminals.js +359 -18
  114. package/dist/sdk/terminal/trajectory.js +2 -2
  115. package/dist/sdk/terminal/tui/annotateCommand.d.ts +3 -0
  116. package/dist/sdk/terminal/tui/annotateCommand.js +22 -0
  117. package/dist/sdk/terminal/tui/commandPages.d.ts +5 -1
  118. package/dist/sdk/terminal/tui/commandPages.js +54 -6
  119. package/dist/sdk/terminal/tui/commands.d.ts +8 -4
  120. package/dist/sdk/terminal/tui/commands.js +181 -58
  121. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +2 -2
  122. package/dist/sdk/terminal/tui/dialogGeometry.js +4 -2
  123. package/dist/sdk/terminal/tui/dialogs.d.ts +6 -1
  124. package/dist/sdk/terminal/tui/dialogs.js +9 -2
  125. package/dist/sdk/terminal/tui/modelPicker.js +1 -6
  126. package/dist/sdk/terminal/tui/page.d.ts +3 -0
  127. package/dist/sdk/terminal/tui/pageOverlay.js +17 -6
  128. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +26 -4
  129. package/dist/sdk/terminal/tui/pages/accountsPage.js +264 -36
  130. package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
  131. package/dist/sdk/terminal/tui/pages/agentsPage.js +190 -0
  132. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +94 -0
  133. package/dist/sdk/terminal/tui/pages/annotatePage.js +341 -0
  134. package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
  135. package/dist/sdk/terminal/tui/pages/browserPage.js +738 -0
  136. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +2 -0
  137. package/dist/sdk/terminal/tui/pages/doctorPage.js +103 -15
  138. package/dist/sdk/terminal/tui/pages/notesPage.d.ts +75 -0
  139. package/dist/sdk/terminal/tui/pages/notesPage.js +201 -0
  140. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +8 -0
  141. package/dist/sdk/terminal/tui/pages/settingsPage.js +16 -1
  142. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +23 -0
  143. package/dist/sdk/terminal/tui/pages/subagentsPage.js +70 -0
  144. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +12 -5
  145. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +156 -83
  146. package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
  147. package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
  148. package/dist/sdk/terminal/tui/planMode.d.ts +1 -1
  149. package/dist/sdk/terminal/tui/planMode.js +1 -1
  150. package/dist/sdk/terminal/tui/pluginCommands.d.ts +14 -0
  151. package/dist/sdk/terminal/tui/pluginCommands.js +27 -0
  152. package/dist/sdk/terminal/tui/questions.d.ts +2 -0
  153. package/dist/sdk/terminal/tui/runtime.js +4 -2
  154. package/dist/sdk/terminal/tui/settingsModel.d.ts +2 -0
  155. package/dist/sdk/terminal/tui/settingsModel.js +32 -2
  156. package/dist/sdk/terminal/tui/sideQuestion.d.ts +26 -26
  157. package/dist/sdk/terminal/tui/sideQuestion.js +131 -98
  158. package/dist/sdk/terminal/tui/ui.d.ts +2 -0
  159. package/dist/sdk/terminal/tui/ui.js +1 -0
  160. package/dist/sdk/tools/askUser.js +26 -8
  161. package/dist/sdk/tools/checklist.js +2 -2
  162. package/dist/sdk/tools/harnessTools.d.ts +2 -0
  163. package/dist/sdk/tools/harnessTools.js +1 -1
  164. package/dist/sdk/tools/spawnSubagent.js +13 -4
  165. package/dist/sdk/web/part.d.ts +10 -0
  166. package/dist/sdk/web/part.js +6 -0
  167. package/dist/sdk/web/serverMethods.d.ts +3 -0
  168. package/dist/sdk/web/serverMethods.js +7 -0
  169. package/dist/sdk/wiki/serverMethods.d.ts +3 -0
  170. package/dist/sdk/wiki/serverMethods.js +26 -0
  171. package/dist/sdk/worktrees/cli.d.ts +11 -0
  172. package/dist/sdk/worktrees/cli.js +146 -0
  173. package/dist/sdk/worktrees/copy.d.ts +9 -0
  174. package/dist/sdk/worktrees/copy.js +111 -0
  175. package/dist/sdk/worktrees/git.d.ts +16 -0
  176. package/dist/sdk/worktrees/git.js +81 -0
  177. package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
  178. package/dist/sdk/worktrees/serverMethods.js +30 -0
  179. package/dist/sdk/worktrees/service.d.ts +73 -0
  180. package/dist/sdk/worktrees/service.js +483 -0
  181. package/dist/sdk/worktrees/setup.d.ts +23 -0
  182. package/dist/sdk/worktrees/setup.js +65 -0
  183. package/dist/sdk/worktrees/types.d.ts +91 -0
  184. package/dist/sdk/worktrees/types.js +1 -0
  185. package/dist/sdk/world/cli.d.ts +2 -2
  186. package/dist/sdk/world/cli.js +6 -6
  187. package/dist/sdk/world/world.d.ts +3 -1
  188. package/dist/sdk/world/world.js +8 -9
  189. package/dist/terminal-opentui.js +14540 -7374
  190. package/dist/terminal-pi.js +285 -666
  191. package/docs/README.md +22 -2
  192. package/docs/architecture/00-overview.md +28 -16
  193. package/docs/architecture/02-sessions-and-runs.md +72 -15
  194. package/docs/architecture/03-variants.md +10 -2
  195. package/docs/architecture/04-prompt.md +26 -6
  196. package/docs/architecture/06-plugins-and-capabilities.md +39 -3
  197. package/docs/architecture/07-tools-and-gate.md +21 -6
  198. package/docs/architecture/09-accounts-and-connectors.md +8 -0
  199. package/docs/architecture/10-server-protocol.md +111 -2
  200. package/docs/architecture/11-terminal.md +185 -5
  201. package/docs/architecture/12-storage.md +15 -1
  202. package/docs/architecture/13-world-tools.md +28 -6
  203. package/docs/architecture/14-surfaces-and-parity.md +89 -0
  204. package/docs/architecture/README.md +15 -4
  205. package/docs/architecture/proposals/PROP-0006-run-checklist.md +4 -2
  206. package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
  207. package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
  208. package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
  209. package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
  210. package/docs/architecture/proposals/PROP-0017-page-annotations.md +127 -0
  211. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +179 -0
  212. package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
  213. package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
  214. package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
  215. package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
  216. package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
  217. package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
  218. package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
  219. package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +94 -0
  220. package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
  221. package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
  222. package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
  223. package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
  224. package/docs/architecture/proposals/README.md +25 -0
  225. package/docs/decisions/ADR-0009-xharness-command.md +6 -5
  226. package/docs/decisions/ADR-0014-public-release-baseline.md +3 -2
  227. package/docs/decisions/ADR-0015-resource-browser.md +28 -0
  228. package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
  229. package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
  230. package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
  231. package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
  232. package/docs/decisions/ADR-0020-page-annotations.md +37 -0
  233. package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
  234. package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
  235. package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
  236. package/docs/decisions/ADR-0024-xagent-command.md +40 -0
  237. package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
  238. package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
  239. package/docs/decisions/ADR-0027-connected-sketch-display.md +60 -0
  240. package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
  241. package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
  242. package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
  243. package/docs/doctor.md +10 -4
  244. package/docs/features/README.md +26 -0
  245. package/docs/features/interfaces/README.md +1 -1
  246. package/docs/future-work.md +48 -0
  247. package/docs/parity.md +78 -0
  248. package/docs/releases/1.0.0.md +2 -2
  249. package/docs/releases/4.0.0.md +46 -0
  250. package/docs/releases/README.md +20 -15
  251. package/docs/study/00-index.md +5 -0
  252. package/docs/study/autonomous-engineering-sources.md +277 -0
  253. package/docs/study/autonomy-sources.md +147 -0
  254. package/docs/study/proactive-autonomy.md +408 -0
  255. package/docs/study/tui-resource-browser.md +78 -0
  256. package/docs/terminal-tui.md +325 -93
  257. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,8 +1,36 @@
1
1
  # Changelog
2
2
 
3
- ## 1.0.0 — release candidate
3
+ ## 1.1.1 — agent profiles and named subagents
4
4
 
5
- - Establish the public stable baseline under Apache-2.0, with compiled ESM SDK modules and declarations. Preserve historical version tags; explicitly assign npm latest only after approval and successful validation.
5
+ The first published release of the 1.1 line, and npm `latest`. It follows the 1.0.0 baseline; earlier 2.x–4.x numbers keep their existing meaning and are not reused. The 1.1.0 tag was pushed, but its release run stopped before publishing, so nothing was published under 1.1.0. This release carries the same changes, plus the release-pipeline fixes below.
6
+
7
+ - The release pack and smoke scripts take their npm cache from the system temp folder. They previously used a macOS-only path, which failed on Linux runners.
8
+ - The `/help` terminal check matches the documented grouped, scrollable help: it pages until every group is seen, and its expected group is `Plugins`.
9
+
10
+ ### Changes in 1.1.0
11
+
12
+
13
+ - Add agent profiles (PROP-0029, ADR-0030). A subagent can start from a named profile: the built-in `worker` and `explorer`, a person's `<data root>/agents/<name>.md`, a repository's `.xingular/agents/<name>.md`, or a variant's c5 subagent. A profile narrows the child's tools and plugins and may choose its variant, model and effort. New `agents.list|get|create|remove` methods, `RunRecord.profile`, and `agent`/`unavailableTools` on the spawn result. The prompt's `subagents` section lists every profile. The terminal's `/agents` page browses, creates, edits (in `$EDITOR`), copies and deletes them, and the terminal now passes its variant to subagents, so c5 names work there.
14
+ - The terminal registers `checklist_write` (closing the terminal half of PAR-001), shows each write as a checklist block, and terminal subagents inherit it. The tool description and a new Progress paragraph in the prompt ask the model to keep a checklist for multi-step work, because the person follows progress from it. Each agent keeps its own checklist; there is no shared task pool.
15
+ - The subagent rows move under the status line, after one blank row, and lose their heading. Each row shows the status mark, the profile name in its colour, the title the parent gave the child and `n of m tasks` from its checklist. `/subagents` shows the same fields.
16
+ - Fix the transcript summary of `spawn_subagent`, which read the wrong argument names.
17
+ - Subagents take a title the parent sets (PROP-0030). `spawn_subagent` requires `title`, at most six words; `subagents.spawn` takes an optional one, which defaults to the first line of the brief. The live rows, `/subagents` and the transcript's spawn row show the title instead of the child's session name or brief. `RunRecord.title` stores it.
18
+ - A running subagent's row shows the working spinner in its profile's colour, and an in-progress checklist item shows a yellow dot.
19
+
20
+ ## 4.0.0 — breaking terminal command namespace, managed worktrees, and annotations
21
+
22
+ - **Breaking terminal commands:** built-in plugin commands now use the `/plugin:` namespace. Existing `/doctor` and `/trajectory` commands become `/plugin:doctor` and `/plugin:trajectory`; update scripts and keybindings that invoke the old names. New feature commands are namespaced from their introduction.
23
+ - Add Harness-managed Git worktrees for sessions and the terminal, including isolated creation, leases, safe setup scripts, handoff, pruning, and bounded snapshots of work before removal.
24
+ - Add page annotations and queued page notes, with capture, review, resolution, sharing, and delivery through Harness methods and terminal `/plugin:annotate` and `/plugin:notes` surfaces.
25
+ - Add a unified terminal resource browser with persistent full-screen sections for browser tabs, plugins, skills, connectors, variants, and other Harness resources.
26
+ - Upgrade `/plugin:trajectory` to a full-screen Runs/Events browser with searchable event details, selected-event JSON, and responsive split-pane layout.
27
+ - Expand terminal controls for browsing subagent activity and managing browser and plugin settings; document the terminal/host parity boundary.
28
+ - Fix SQLite parameter binding for the supported Node 22 runtime and prevent early-exiting Git commands from raising an unhandled broken-pipe error.
29
+ - Generalize release packaging, smoke checks, registry verification, and CI workflows to use the package version, and require a clean committed tree for release candidates.
30
+
31
+ ## 1.0.0 — stable baseline
32
+
33
+ - Established the public stable baseline under Apache-2.0, with compiled ESM SDK modules and declarations. Preserved historical version tags and assigned npm latest after release validation.
6
34
  - Add /doctor with passive readiness inspection, selected live probes, cancellable reports and Node/RPC APIs.
7
35
  - Include the generic isolated browser backend and document its boundary with App browser UI and native computer control.
8
36
  - Add exact-tarball installation/consumer checks and a Bun-aware, two-OS release pipeline.
@@ -23,9 +51,9 @@
23
51
 
24
52
  ## 4.0.0 - 2026-10-22
25
53
 
26
- - Rename the published CLI executable to `xharness`; invoking it without a subcommand opens the OpenTUI terminal. The previous `xingular-harness` executable is removed, so scripts and shell aliases must be updated.
27
- - Name how refinement's executions run. `refine.start` (and `harness.refine.start`) accepts `executor: { model?, effort?, accountId?, poolId? }`, and `xharness refine run` accepts `--executor-model <id>` (`--model` still sets the improver). A host's own session settings win, then `executor`, then the account default, so a server client can pin the executor model without supplying a host. `summary.json` records `settings: { executor, improver }`. See PROP-0003.
28
- - Keep refinement workspaces on request. `refine.start` (and `harness.refine.start`) accepts `retainWorkspaces: true`, and `xharness refine run` accepts `--retain-workspaces`: each base, candidate and final execution's workspace is copied whole — binary files included — to `<data>/refine/<id>/rollouts/<label>/workspace/` before the host cleans it up. `refine.candidates` reports each execution's `workspace` path or `null`. Evidence, selection, reflection and the library never read these folders, so refinement stays answer-free; they exist so an outside measurement can grade what an execution produced. Off by default. See PROP-0002.
54
+ - Publish the CLI executable as `xagent`; invoking it without a subcommand opens the OpenTUI terminal. The previous `xingular-harness` executable and interim `xharness` command are removed, so scripts and shell aliases must be updated.
55
+ - Name how refinement's executions run. `refine.start` (and `harness.refine.start`) accepts `executor: { model?, effort?, accountId?, poolId? }`, and `xagent refine run` accepts `--executor-model <id>` (`--model` still sets the improver). A host's own session settings win, then `executor`, then the account default, so a server client can pin the executor model without supplying a host. `summary.json` records `settings: { executor, improver }`. See PROP-0003.
56
+ - Keep refinement workspaces on request. `refine.start` (and `harness.refine.start`) accepts `retainWorkspaces: true`, and `xagent refine run` accepts `--retain-workspaces`: each base, candidate and final execution's workspace is copied whole — binary files included — to `<data>/refine/<id>/rollouts/<label>/workspace/` before the host cleans it up. `refine.candidates` reports each execution's `workspace` path or `null`. Evidence, selection, reflection and the library never read these folders, so refinement stays answer-free; they exist so an outside measurement can grade what an execution produced. Off by default. See PROP-0002.
29
57
  - Shape every final reply. The compiler adds a fixed `reporting` section ("Reporting your work", `REPORTING_GUIDANCE`, `SECTION_ORDER.reporting = 95`) to every pack, after the tools: answer or outcome first, then only the parts with content — Files (a table when three or more), Blocked, Worth a look, Check by hand, Next steps — and Markdown tables where several items share fields. A format the person, the application or the current mode asks for wins. The stable prefix changes once, so existing sessions miss the provider cache once. See PROP-0001 and ADR-0007.
30
58
  - Make typing in the OpenTUI terminal fast while idle and while a reply streams. Keys render on demand instead of on a fixed 60 Hz tick (idle p50 13.1 → 5.1 ms); the view is a reconciled Solid store, so a streamed delta updates its markdown block in place instead of rebuilding it; background updates are coalesced to one per frame (30 Hz during a run) while input publishes at once; finished messages and session statistics are cached. Streaming CPU fell from 73% to about 15% in the profile. See `docs/experiments/EXP-0002-opentui-typing-latency/`.
31
59
  - Never swallow keys typed while a question waits: a character the question dock does not use moves focus to the composer and is typed there. Previously such keys were dropped until the dock collapsed.
package/README.md CHANGED
@@ -38,7 +38,8 @@ index](docs/README.md) links the architecture and other project records.
38
38
  ### Session options for applications
39
39
 
40
40
  - Interactive sessions offer `spawn_subagent` and `wait_subagents` by default. `subagents: null` disables them; `{ maxDepth }` configures native nesting (default one, maximum three), independently of the host caller depth. Unattended sessions remain disabled unless the host explicitly supplies subagent options. A frozen capability set can narrow these tools further.
41
- - `harness.subagents.spawn({ parentRunId, brief, tools?, wait? })` opens a fresh child of the same caller with no wider capabilities. It returns `{ runId, nativeSessionId }` once open; `wait: true` also waits for settlement. `harness.subagents.wait({ parentRunId, runIds? })` joins selected direct children, or the current children when omitted, and returns their outcomes. `results` reads the same bounded outcome records without waiting. RPC exposes `subagents.spawn`, `subagents.wait`, and `subagents.results`; `sessions.spawnSubagent` remains a compatibility alias.
41
+ - `harness.subagents.spawn({ parentRunId, brief, agent?, tools?, wait? })` opens a fresh child of the same caller with no wider capabilities. `agent` names an agent profile (below). It returns `{ runId, nativeSessionId, agent?, unavailableTools? }` once open; `wait: true` also waits for settlement. `harness.subagents.wait({ parentRunId, runIds? })` joins selected direct children, or the current children when omitted, and returns their outcomes. `results` reads the same bounded outcome records without waiting. RPC exposes `subagents.spawn`, `subagents.wait`, and `subagents.results`; `sessions.spawnSubagent` remains a compatibility alias.
42
+ - **Agent profiles** (PROP-0029) are what a subagent starts from: the built-in `worker` (reads, edits, writes, runs commands) and `explorer` (reads only), a person's own `<data root>/agents/<name>.md`, a repository's `<project>/.xingular/agents/<name>.md`, and the variant's c5 subagents, later ones winning. A profile is Markdown with frontmatter (`description`, `color`, `tools`, `plugins`, `variant`, `model`, `effort`) and its body is the role. It only narrows the parent's tools and plugins. `listProfiles`, `resolveProfile`, `createProfile` and `removeProfile` (RPC `agents.list|get|create|remove`) read and write them, and the child's `RunRecord.profile` names the one it used.
42
43
  - The model's `spawn_subagent` returns immediately by default; `wait: true` returns an inline result. `wait_subagents` joins selected children. The SDK and standalone terminal share this execution service. Terminal calls use its private control channel, including when connected apps are disabled.
43
44
  - Parents receive results at native turn boundaries and join outstanding children before completing. Typed native-history receipts prevent duplicate automatic delivery; explicit waits can reread results. Ownership is recorded before startup so an explicit resume can recover even a lost spawn return. Startup reservations without a run become interrupted outcomes. A restarted Harness never restarts model work automatically. Recovery requires the same recorded account, caller, working folder, and selected history branch. Session IDs are opaque; consumers follow `parentRunId` and `relation`.
44
45
  - `providers: false` runs a session with the harness's own tools only.
@@ -66,7 +67,7 @@ import { createHarness } from '@xingular/harness'
66
67
  const harness = createHarness({
67
68
  dataRoot: '/path/to/data', // variants/, library/, refine/, wiki/, registry/, runs/, index.sqlite
68
69
  stateDir: '/path/to/state', // device-local: accounts, approvals, connections, sockets
69
- productName: 'My App', // how the harness names itself to a model (default 'Xingular Harness')
70
+ productName: 'My App', // how the harness names itself to a model (default 'Xingular Agent')
70
71
  secrets, // SecretStore; defaults to an owner-only file in stateDir
71
72
  policy, // ToolPolicy: what a run may do, and what needs a person
72
73
  directory, // names for the ids the application uses
@@ -194,7 +195,7 @@ working folder brings.
194
195
  terminal process claims once (`control.claim`) and shares with its bridge in memory; the socket's
195
196
  `plugins.list` is open to the session, and `plugins.attach`, `plugins.detach`, `plugins.trust`
196
197
  and `plugins.untrust` refuse without that key. A change applies when the session restarts.
197
- Outside a session, `xharness plugins list | show | install | remove | update | attach |
198
+ Outside a session, `xagent plugins list | show | install | remove | update | attach |
198
199
  detach | trust | untrust` acts directly, as the person who typed it; `trust` shows the files
199
200
  and wants a typed yes or `--yes`. It does not open the data root, so it settles no run.
200
201
  - **Unattended runs load no extension found on disk.** A variant's own trusted plugins still
@@ -263,7 +264,7 @@ After the CLI package is published to npm or your company's npm registry, instal
263
264
 
264
265
  ```sh
265
266
  npm install --global @xingular/harness
266
- xharness
267
+ xagent
267
268
  ```
268
269
 
269
270
  The machine needs Node 22.19 or newer and Bun 1.3.14 or newer. Harness runs its own OpenTUI
@@ -296,7 +297,41 @@ terminal that cannot start. The harness runs `dist/terminal-opentui.js`, which u
296
297
  session runtime, accounts, command pages, approvals, questions, plugins and run records as the
297
298
  embedded SDK. See [the terminal guide](docs/terminal-tui.md).
298
299
 
299
- Building a checkout does not update an existing global `xharness` installation.
300
+ ### Worktrees
301
+
302
+ Run `xagent --worktree` (or `-w [name]`) inside a git repository to start in a fresh managed
303
+ worktree: a detached checkout under `<state dir>/worktrees/` that carries your uncommitted
304
+ changes, copies ignored files named in `.worktreeinclude`, and runs the repository's
305
+ `.xharness/worktree-setup` once you trust it (`xagent worktree trust-setup`). The 15 most recent
306
+ managed worktrees per repository are kept; older ones are pruned, and unsaved work is kept as a
307
+ snapshot you can restore. `/plugin:worktree` in a session, `xagent worktree <command>` in a shell, and
308
+ the `worktrees.*` server methods offer the same actions: new, switch, create branch, hand off to
309
+ or from the main checkout, remove, restore, prune and adopt. An application passes a worktree's id
310
+ as `run.worktreeId` and the session works in it. See
311
+ [PROP-0016](docs/architecture/proposals/PROP-0016-managed-worktrees.md).
312
+
313
+ ### Page notes
314
+
315
+ `/plugin:annotate [url]` opens a visible capture browser (its own window and profile, separate from the
316
+ agent's browser). Note the whole page, select a passage, or click an element there, then write the
317
+ note in the terminal. `/plugin:notes` lists, edits, resolves, reveals and deletes notes. A note is private
318
+ until you share it with the session; its agent then reads it with `page_notes_list` and
319
+ `page_notes_read`, with quoted page text marked untrusted. Notes live in `<data root>/annotations/`
320
+ and the `annotations.*` server methods give a host the same store. A host with its own web view
321
+ runs the same page helper (`annotations.pageScript`). See
322
+ [PROP-0017](docs/architecture/proposals/PROP-0017-page-annotations.md).
323
+
324
+ `/plugin:annotate` turns this into an inspector:
325
+ - Hover a component in the browser or an app window, click it, and write a comment in the popover.
326
+ - Then keep it as a note, add it to the agent's queue, or send it now. The agent reports back with `page_notes_mark_fixed`.
327
+ - App windows work two ways:
328
+ - **DevTools port:** start an Electron app with `--remote-debugging-port=9229` and run `/plugin:annotate --app 9229`.
329
+ - **Page bridge:** for a macOS web view such as Tauri, run `/plugin:annotate --bridge` and load the script tag it shows while developing the app. Allow `http://127.0.0.1:<port>` in the app's `script-src` and `connect-src`.
330
+ - A host drives the same flow with `annotations.capture.*`, and sends to its own sessions with `annotations.compose` and `annotations.delivered`.
331
+
332
+ See [PROP-0018](docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md).
333
+
334
+ Building a checkout does not update an existing global `xagent` installation.
300
335
  To replace that command with this checkout, run `npm pack`, then install the exact tarball
301
336
  filename it prints with `npm install --global ./<tarball-filename>`. This is a local install;
302
337
  it does not publish a release. Close an already-running terminal session and launch the command
@@ -311,14 +346,27 @@ Pi supplies the persistent execution runtime, native history and rich content co
311
346
  existing isolated account, compiled context, approval gate, telemetry and Wiki/socket commands
312
347
  remain behind the terminal. No Pi `InteractiveMode` is constructed.
313
348
 
349
+ Core terminal commands stay unprefixed. Built-in and Pi extension plugin commands use
350
+ `/plugin:<command>`; for example, annotate a page with `/plugin:annotate https://example.com`.
351
+ Old unprefixed plugin command forms are no longer aliases.
352
+
314
353
  `/resume` stays inside the prepared account history and working folder. Cancel an active response
315
354
  before changing or reloading a session. Full OMP visual parity is not established by the current
316
- verification. `/accounts`, `/permissions`, `/plugins`, `/hub`, `/components`, `/settings`, `/trajectory`
317
- and `/log` each open their own centered page dialog with local tabs. `/permissions` reviews device-local Pi
318
- terminal grants and the Full Permission switch; tool grants apply across terminal sessions sharing this
319
- Harness state, and Full Permission requires confirmation. `/components` browses reusable skills,
320
- prompts and rules; a confirmed skill or rule addition creates a variant version for future sessions while
321
- the current terminal stays pinned. `/trajectory` opens recorded runs for the current native conversation,
355
+ verification. `/harness` opens one browser for Foundation, Variant, Skills, Plugins,
356
+ Connections (MCP), Tools and Library. `/skills`, `/plugins`, `/connections` (`/mcp`) and `/tools`
357
+ open its sections directly; `/hub` opens Discover and `/components` opens Library. Resource
358
+ sections share Installed / Discover, source filters, search and a detail inspector. Tab focuses
359
+ controls, arrows change the focused choice, Ctrl+F returns to search and Escape goes back.
360
+ Skills show actual session availability even with invocation shortcuts off. With shortcuts on,
361
+ Use inserts `$name` into the draft without sending it; typing `$` also completes loaded skills.
362
+ To keep an existing message and attachments, open Ctrl+K, choose Skills, then Use.
363
+ Variant inspection distinguishes the pinned session version from the latest saved version.
364
+ Adding a library skill or rule creates a validated version for future sessions.
365
+
366
+ `/accounts`, `/permissions`, `/settings`, `/plugin:trajectory` and `/log` retain their own centered pages.
367
+ `/permissions` reviews device-local Pi terminal grants and the Full Permission switch; tool grants
368
+ apply across terminal sessions sharing this Harness state, and Full Permission requires confirmation.
369
+ `/plugin:trajectory` opens recorded runs for the current native conversation,
322
370
  with event navigation and a detail inspector. `/log` shows a static, redacted snapshot of Harness
323
371
  diagnostics and run events for the current conversation; press Escape to close. See
324
372
  [terminal architecture and evidence](docs/terminal-tui.md),
@@ -336,7 +384,7 @@ command the model runs in the shell cannot make it.
336
384
  A running session stays on the account it started with. To use another account for this
337
385
  session, choose **Use for this session**: the terminal child restarts and the same conversation
338
386
  resumes on that account. Removing an account that a running terminal is using is refused. Only
339
- terminals in this process are counted, so an account used by another running `xharness` window can
387
+ terminals in this process are counted, so an account used by another running `xagent` window can
340
388
  still be removed; that session then asks for another account the next time it starts.
341
389
 
342
390
  The installed standalone command defaults to `~/.xingular-harness/data` and
@@ -362,6 +410,7 @@ for integrations such as Xingular Agent/App.
362
410
  runs/<id>/ run.json, events.jsonl, context.json, caller.json, subagents.json (reserved child IDs)
363
411
  config/ what is switched on for whom (plugin-attachments.json),
364
412
  settings the harness reads
413
+ agents/<name>.md a person's agent profiles (a repository keeps its own in .xingular/agents/)
365
414
  index.sqlite a rebuildable index of runs for recall (FTS5)
366
415
  projects.json read only: the application owns it
367
416
 
@@ -402,7 +451,7 @@ cannot carry it. See the [terminal guide](docs/terminal-tui.md#bash-command-mode
402
451
 
403
452
  ## Curated Hub
404
453
 
405
- `xharness hub list [--refresh]`, `xharness hub show publisher/name@version`, and
454
+ `xagent hub list [--refresh]`, `xagent hub show publisher/name@version`, and
406
455
  `hub install publisher/name@version` browse and install exact catalog versions. `/hub` offers the
407
456
  same review in the interactive terminal, using its private control key for installation. Both the
408
457
  terminal and embedding applications use `hub.list`, `hub.get`, `hub.preview`, `hub.install`,
@@ -447,22 +496,24 @@ omit this option retain the existing lifecycle and direct-write contract.
447
496
 
448
497
  ## Readiness diagnostics
449
498
 
450
- Use `/doctor` in the terminal for local readiness checks and explicitly selected live probes. The same
499
+ Use `/plugin:doctor` in the terminal for local readiness checks and explicitly selected live probes. The same
451
500
  structured jobs are available through `harness.doctor` and `doctor.*` server methods. See
452
501
  [Doctor](docs/doctor.md) for coverage, consent, isolation, and provider callbacks.
453
502
 
454
- ## Public 1.0.0 release candidate
503
+ ## Public 4.0.0 release candidate
455
504
 
456
505
  The public package is ESM: import from `@xingular/harness` or supported subpaths such as
457
506
  `@xingular/harness/variant/seed`. JavaScript and declarations are shipped in `dist/sdk`; a
458
507
  TypeScript loader is not required. Node 22.19 or later is required. The interactive terminal
459
- also requires Bun (release builds use 1.4.2); the CLI reports its version with `xharness --version`.
508
+ also requires Bun (release builds use 1.4.2); the CLI reports its version with `xagent --version`.
460
509
  Original project code is Apache-2.0. See LICENSE, NOTICE.md and THIRD_PARTY_LICENSES.md.
461
510
 
462
511
  A host providing its own browser tools sets `browser: false` on `createHarness` to disable the
463
512
  generic backend and prevent tool-name collisions. The desktop App uses this for shared tabs.
464
513
  The default standalone Harness keeps its isolated browser backend enabled.
465
514
 
466
- This candidate intentionally resets development numbering to 1.0.0 while preserving old versions.
467
- See [release notes](docs/releases/1.0.0.md) and [release procedure](docs/releases/README.md).
468
- Publication requires registry verification, green CI and approval of the candidate/tag push.
515
+ This additive release follows the published 1.0.0 baseline, which intentionally reset development
516
+ numbering while preserving older published versions. See [4.0.0 release notes](docs/releases/4.0.0.md),
517
+ [1.0.0 release notes](docs/releases/1.0.0.md), and the [release procedure](docs/releases/README.md).
518
+ Publication requires registry verification, green CI on supported operating systems, and approval of
519
+ the exact candidate and tag push.