@selesai/code 0.9.11 → 0.9.12

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 (580) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/config.d.ts +4 -6
  3. package/dist/config.js +10 -14
  4. package/dist/core/agent-session.d.ts +0 -1
  5. package/dist/core/agent-session.js +3 -49
  6. package/dist/core/extensions/types.d.ts +0 -2
  7. package/dist/core/settings-manager.d.ts +0 -2
  8. package/dist/core/settings-manager.js +0 -3
  9. package/dist/core/tools/index.d.ts +0 -1
  10. package/dist/core/tools/index.js +0 -1
  11. package/dist/defaults/settings.json +0 -1
  12. package/dist/extensions/model-prompt-injector/index.test.ts +0 -10
  13. package/dist/extensions/model-prompt-injector/index.ts +0 -3
  14. package/dist/extensions/pi-intercom/CHANGELOG.md +53 -16
  15. package/dist/extensions/pi-intercom/README.md +41 -8
  16. package/dist/extensions/pi-intercom/banner.png +0 -0
  17. package/dist/extensions/pi-intercom/broker/broker.ts +498 -215
  18. package/dist/extensions/pi-intercom/broker/client.ts +39 -12
  19. package/dist/extensions/pi-intercom/broker/extension.test.ts +102 -3
  20. package/dist/extensions/pi-intercom/broker/paths.test.ts +2 -2
  21. package/dist/extensions/pi-intercom/broker/protocol.ts +26 -0
  22. package/dist/extensions/pi-intercom/broker/spawn.test.ts +5 -20
  23. package/dist/extensions/pi-intercom/config.test.ts +41 -0
  24. package/dist/extensions/pi-intercom/config.ts +21 -0
  25. package/dist/extensions/pi-intercom/extension-api.ts +40 -0
  26. package/dist/extensions/pi-intercom/index.ts +362 -26
  27. package/dist/extensions/pi-intercom/intercom.integration.test.ts +819 -13
  28. package/dist/extensions/pi-intercom/package.json +1 -1
  29. package/dist/extensions/pi-intercom/project-agent.ts +2 -2
  30. package/dist/extensions/pi-intercom/skills/pi-intercom/SKILL.md +8 -110
  31. package/dist/extensions/pi-intercom/types.ts +32 -5
  32. package/dist/extensions/pi-intercom/ui/inline-message.ts +6 -0
  33. package/dist/extensions/pi-subagents/.github/assets/subagent-fleet-inspector.png +0 -0
  34. package/dist/extensions/pi-subagents/.github/workflows/release.yml +28 -0
  35. package/dist/extensions/pi-subagents/.github/workflows/test.yml +51 -0
  36. package/dist/extensions/pi-subagents/.greptile/config.json +33 -0
  37. package/dist/extensions/pi-subagents/.greptile/files.json +8 -0
  38. package/dist/extensions/pi-subagents/.greptile/rules.md +16 -0
  39. package/dist/extensions/pi-subagents/CHANGELOG.md +309 -87
  40. package/dist/extensions/pi-subagents/README.md +15 -17
  41. package/dist/extensions/pi-subagents/agents/oracle.md +3 -1
  42. package/dist/extensions/pi-subagents/agents/researcher.md +32 -13
  43. package/dist/extensions/pi-subagents/agents/reviewer.md +13 -2
  44. package/dist/extensions/pi-subagents/agents/scout.md +2 -2
  45. package/dist/extensions/pi-subagents/agents/worker.md +2 -1
  46. package/dist/extensions/pi-subagents/async-retention-discovery-worker.mjs +180 -0
  47. package/dist/extensions/pi-subagents/docs/configuration.md +106 -27
  48. package/dist/extensions/pi-subagents/docs/extension-api.md +85 -21
  49. package/dist/extensions/pi-subagents/docs/missions.md +41 -4
  50. package/dist/extensions/pi-subagents/docs/models.md +52 -9
  51. package/dist/extensions/pi-subagents/docs/observability.md +103 -16
  52. package/dist/extensions/pi-subagents/docs/tool-reference.md +60 -45
  53. package/dist/extensions/pi-subagents/docs/watchdog.md +60 -3
  54. package/dist/extensions/pi-subagents/docs/workflows.md +181 -7
  55. package/dist/extensions/pi-subagents/index.ts +10 -1
  56. package/dist/extensions/pi-subagents/install.mjs +4 -4
  57. package/dist/extensions/pi-subagents/package-lock.json +1483 -1470
  58. package/dist/extensions/pi-subagents/package.json +6 -3
  59. package/dist/extensions/pi-subagents/prompts/council.md +60 -0
  60. package/dist/extensions/pi-subagents/prompts/parallel-review.md +5 -1
  61. package/dist/extensions/pi-subagents/prompts/review-loop.md +9 -5
  62. package/dist/extensions/pi-subagents/skills/council-mode/SKILL.md +254 -0
  63. package/dist/extensions/pi-subagents/skills/pi-subagents/SKILL.md +18 -17
  64. package/dist/extensions/pi-subagents/skills/pi-subagents/references/constraints-and-recipes.md +31 -9
  65. package/dist/extensions/pi-subagents/skills/pi-subagents/references/execution-controls.md +107 -140
  66. package/dist/extensions/pi-subagents/skills/pi-subagents/references/management-authoring-rpc.md +9 -12
  67. package/dist/extensions/pi-subagents/skills/pi-subagents/references/multi-lane-orchestration.md +39 -0
  68. package/dist/extensions/pi-subagents/skills/pi-subagents/references/prompting-and-roles.md +44 -92
  69. package/dist/extensions/pi-subagents/src/agents/agent-management.ts +261 -368
  70. package/dist/extensions/pi-subagents/src/agents/agent-serializer.ts +6 -2
  71. package/dist/extensions/pi-subagents/src/agents/agents.ts +388 -85
  72. package/dist/extensions/pi-subagents/src/agents/builtin-names.ts +14 -0
  73. package/dist/extensions/pi-subagents/src/agents/runtime-agent-registry.ts +418 -0
  74. package/dist/extensions/pi-subagents/src/agents/skills.ts +1 -1
  75. package/dist/extensions/pi-subagents/src/api/agents.ts +7 -0
  76. package/dist/extensions/pi-subagents/src/api/external-job-provider.ts +195 -0
  77. package/dist/extensions/pi-subagents/src/api/preflight.ts +88 -27
  78. package/dist/extensions/pi-subagents/src/api/project-panes.ts +2 -0
  79. package/dist/extensions/pi-subagents/src/api/shared-types.ts +2 -0
  80. package/dist/extensions/pi-subagents/src/extension/config.ts +20 -11
  81. package/dist/extensions/pi-subagents/src/extension/doctor.ts +14 -6
  82. package/dist/extensions/pi-subagents/src/extension/fanout-child.ts +5 -4
  83. package/dist/extensions/pi-subagents/src/extension/index.ts +270 -187
  84. package/dist/extensions/pi-subagents/src/extension/public-execution.ts +65 -28
  85. package/dist/extensions/pi-subagents/src/extension/rpc.ts +120 -11
  86. package/dist/extensions/pi-subagents/src/extension/schemas.ts +46 -64
  87. package/dist/extensions/pi-subagents/src/extension/tool-description.ts +51 -37
  88. package/dist/extensions/pi-subagents/src/extension/tool-result.ts +19 -0
  89. package/dist/extensions/pi-subagents/src/inspectors/herdr/actions.ts +2 -2
  90. package/dist/extensions/pi-subagents/src/inspectors/herdr/client.ts +3 -3
  91. package/dist/extensions/pi-subagents/src/inspectors/herdr/focus.ts +55 -0
  92. package/dist/extensions/pi-subagents/src/inspectors/herdr/inspector-runner.ts +2 -1
  93. package/dist/extensions/pi-subagents/src/inspectors/herdr/project-panes.ts +230 -46
  94. package/dist/extensions/pi-subagents/src/integrations/herdr-status.ts +26 -4
  95. package/dist/extensions/pi-subagents/src/intercom/native-supervisor-channel.ts +32 -10
  96. package/dist/extensions/pi-subagents/src/missions/lifecycle.ts +6 -1
  97. package/dist/extensions/pi-subagents/src/missions/store.ts +4 -9
  98. package/dist/extensions/pi-subagents/src/missions/workflow-state.ts +2 -2
  99. package/dist/extensions/pi-subagents/src/policy/authority.ts +2 -0
  100. package/dist/extensions/pi-subagents/src/profiles/profiles.ts +3 -1
  101. package/dist/extensions/pi-subagents/src/runs/background/active-run-index.ts +31 -8
  102. package/dist/extensions/pi-subagents/src/runs/background/async-execution.ts +210 -52
  103. package/dist/extensions/pi-subagents/src/runs/background/async-job-tracker.ts +63 -33
  104. package/dist/extensions/pi-subagents/src/runs/background/async-resume.ts +71 -17
  105. package/dist/extensions/pi-subagents/src/runs/background/async-retention.ts +886 -0
  106. package/dist/extensions/pi-subagents/src/runs/background/async-status-snapshot.ts +14 -5
  107. package/dist/extensions/pi-subagents/src/runs/background/async-status.ts +49 -56
  108. package/dist/extensions/pi-subagents/src/runs/background/auto-drain.ts +1 -0
  109. package/dist/extensions/pi-subagents/src/runs/background/chain-append.ts +3 -33
  110. package/dist/extensions/pi-subagents/src/runs/background/chain-root-attachment.ts +5 -0
  111. package/dist/extensions/pi-subagents/src/runs/background/completion-dedupe.ts +5 -1
  112. package/dist/extensions/pi-subagents/src/runs/background/completion-replay.ts +22 -12
  113. package/dist/extensions/pi-subagents/src/runs/background/control-channel.ts +105 -71
  114. package/dist/extensions/pi-subagents/src/runs/background/fleet-view.ts +68 -19
  115. package/dist/extensions/pi-subagents/src/runs/background/index-segment.ts +59 -0
  116. package/dist/extensions/pi-subagents/src/runs/background/inspect-rpc.ts +443 -0
  117. package/dist/extensions/pi-subagents/src/runs/background/notify.ts +94 -10
  118. package/dist/extensions/pi-subagents/src/runs/background/result-files.ts +158 -90
  119. package/dist/extensions/pi-subagents/src/runs/background/result-watcher.ts +141 -53
  120. package/dist/extensions/pi-subagents/src/runs/background/resume-guidance.ts +8 -5
  121. package/dist/extensions/pi-subagents/src/runs/background/retained-children.ts +14 -4
  122. package/dist/extensions/pi-subagents/src/runs/background/run-id-query.ts +7 -0
  123. package/dist/extensions/pi-subagents/src/runs/background/run-id-resolver.ts +13 -14
  124. package/dist/extensions/pi-subagents/src/runs/background/run-status.ts +46 -25
  125. package/dist/extensions/pi-subagents/src/runs/background/scheduled-runs.ts +823 -0
  126. package/dist/extensions/pi-subagents/src/runs/background/stale-run-reconciler.ts +9 -3
  127. package/dist/extensions/pi-subagents/src/runs/background/steering.ts +11 -1
  128. package/dist/extensions/pi-subagents/src/runs/background/subagent-runner.ts +594 -216
  129. package/dist/extensions/pi-subagents/src/runs/background/subagent-wait.ts +17 -13
  130. package/dist/extensions/pi-subagents/src/runs/background/terminal-run-index.ts +138 -0
  131. package/dist/extensions/pi-subagents/src/runs/background/wait-completions.ts +23 -4
  132. package/dist/extensions/pi-subagents/src/runs/background/wait-subscriptions.ts +82 -4
  133. package/dist/extensions/pi-subagents/src/runs/background/wait-tool.ts +5 -3
  134. package/dist/extensions/pi-subagents/src/runs/foreground/async-steering-action.ts +21 -14
  135. package/dist/extensions/pi-subagents/src/runs/foreground/async-stop-action.ts +23 -2
  136. package/dist/extensions/pi-subagents/src/runs/foreground/execution.ts +153 -58
  137. package/dist/extensions/pi-subagents/src/runs/foreground/foreground-history.ts +7 -9
  138. package/dist/extensions/pi-subagents/src/runs/foreground/subagent-executor.ts +1283 -1657
  139. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-detach-reconcile.ts +274 -0
  140. package/dist/extensions/pi-subagents/src/runs/foreground/workflow-foreground-steering.ts +6 -5
  141. package/dist/extensions/pi-subagents/src/runs/shared/acceptance.ts +59 -10
  142. package/dist/extensions/pi-subagents/src/runs/shared/agent-contract.ts +1 -1
  143. package/dist/extensions/pi-subagents/src/runs/shared/chain-outputs.ts +1 -3
  144. package/dist/extensions/pi-subagents/src/runs/shared/child-identity.ts +36 -0
  145. package/dist/extensions/pi-subagents/src/runs/shared/completion-guard.ts +52 -2
  146. package/dist/extensions/pi-subagents/src/runs/shared/dynamic-fanout.ts +1 -1
  147. package/dist/extensions/pi-subagents/src/runs/shared/extension-bindings.ts +78 -0
  148. package/dist/extensions/pi-subagents/src/runs/shared/external-cli-runner.ts +2 -0
  149. package/dist/extensions/pi-subagents/src/runs/shared/external-job-bridge.ts +460 -0
  150. package/dist/extensions/pi-subagents/src/runs/shared/external-job-runner.ts +389 -0
  151. package/dist/extensions/pi-subagents/src/runs/shared/fast-mode-extension.ts +10 -0
  152. package/dist/extensions/pi-subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +14 -0
  153. package/dist/extensions/pi-subagents/src/runs/shared/model-exclusions.ts +243 -0
  154. package/dist/extensions/pi-subagents/src/runs/shared/model-fallback.ts +201 -85
  155. package/dist/extensions/pi-subagents/src/runs/shared/model-scope.ts +106 -39
  156. package/dist/extensions/pi-subagents/src/runs/shared/mutation-evidence.ts +145 -0
  157. package/dist/extensions/pi-subagents/src/runs/shared/orca-progress-tabs.ts +150 -27
  158. package/dist/extensions/pi-subagents/src/runs/shared/parallel-handoff.ts +46 -4
  159. package/dist/extensions/pi-subagents/src/runs/shared/parallel-utils.ts +19 -15
  160. package/dist/extensions/pi-subagents/src/runs/shared/permissions.ts +5 -1
  161. package/dist/extensions/pi-subagents/src/runs/shared/pi-args.ts +86 -2
  162. package/dist/extensions/pi-subagents/src/runs/shared/pi-spawn.ts +9 -9
  163. package/dist/extensions/pi-subagents/src/runs/shared/session-lease.ts +0 -6
  164. package/dist/extensions/pi-subagents/src/runs/shared/structured-output.ts +18 -4
  165. package/dist/extensions/pi-subagents/src/runs/shared/subagent-control.ts +51 -7
  166. package/dist/extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.ts +62 -21
  167. package/dist/extensions/pi-subagents/src/runs/shared/tool-availability.ts +1 -3
  168. package/dist/extensions/pi-subagents/src/runs/shared/tool-timeout.ts +1 -3
  169. package/dist/extensions/pi-subagents/src/runs/shared/workflow-graph.ts +1 -23
  170. package/dist/extensions/pi-subagents/src/runs/shared/worktree.ts +14 -2
  171. package/dist/extensions/pi-subagents/src/shared/artifacts.ts +2 -2
  172. package/dist/extensions/pi-subagents/src/shared/atomic-json.ts +22 -2
  173. package/dist/extensions/pi-subagents/src/shared/capacity-resilient-json.ts +102 -0
  174. package/dist/extensions/pi-subagents/src/shared/completion-owner.ts +14 -0
  175. package/dist/extensions/pi-subagents/src/shared/file-system-retry.ts +49 -1
  176. package/dist/extensions/pi-subagents/src/shared/fork-context.ts +59 -1
  177. package/dist/extensions/pi-subagents/src/shared/launch-contract.ts +12 -5
  178. package/dist/extensions/pi-subagents/src/shared/model-info.ts +20 -0
  179. package/dist/extensions/pi-subagents/src/shared/prompt-resources.ts +0 -40
  180. package/dist/extensions/pi-subagents/src/shared/settings.ts +11 -30
  181. package/dist/extensions/pi-subagents/src/shared/thinking-ceiling.ts +52 -0
  182. package/dist/extensions/pi-subagents/src/shared/types.ts +228 -49
  183. package/dist/extensions/pi-subagents/src/shared/utils.ts +11 -3
  184. package/dist/extensions/pi-subagents/src/shared/watch-strategy.ts +10 -0
  185. package/dist/extensions/pi-subagents/src/slash/prompt-workflows.ts +0 -162
  186. package/dist/extensions/pi-subagents/src/slash/slash-bridge.ts +2 -5
  187. package/dist/extensions/pi-subagents/src/slash/slash-commands.ts +105 -13
  188. package/dist/extensions/pi-subagents/src/slash/slash-live-state.ts +6 -36
  189. package/dist/extensions/pi-subagents/src/tui/fleet-status.ts +829 -0
  190. package/dist/extensions/pi-subagents/src/tui/fleet.ts +1415 -0
  191. package/dist/extensions/pi-subagents/src/tui/render.ts +78 -7
  192. package/dist/extensions/pi-subagents/src/watchdog/change-signature.ts +1 -1
  193. package/dist/extensions/pi-subagents/src/watchdog/lsp-diagnostics.ts +1 -0
  194. package/dist/extensions/pi-subagents/src/watchdog/permission-arbiter.ts +59 -51
  195. package/dist/extensions/pi-subagents/src/watchdog/register-main.ts +8 -2
  196. package/dist/extensions/pi-subagents/src/watchdog/tool-actions.ts +2 -1
  197. package/dist/extensions/pi-subagents/src/workflows/chat-progress.ts +4 -4
  198. package/dist/extensions/pi-subagents/src/workflows/scripted-workflow.ts +471 -86
  199. package/dist/extensions/pi-subagents/src/workflows/workflow-receipt.ts +140 -0
  200. package/dist/extensions/pi-subagents/test/e2e/real-session-subagent.test.ts +2 -2
  201. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/cli.d.ts +3 -0
  202. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/register-bedrock.d.ts +2 -0
  203. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/bun/restore-sandbox-env.d.ts +17 -0
  204. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/args.d.ts +57 -0
  205. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/config-selector.d.ts +16 -0
  206. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/file-processor.d.ts +15 -0
  207. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/initial-message.d.ts +18 -0
  208. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/list-models.d.ts +9 -0
  209. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/project-trust.d.ts +10 -0
  210. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/session-picker.d.ts +10 -0
  211. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli/startup-ui.d.ts +20 -0
  212. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/cli.d.ts +3 -0
  213. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/config.d.ts +96 -0
  214. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-runtime.d.ts +119 -0
  215. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session-services.d.ts +85 -0
  216. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/agent-session.d.ts +620 -0
  217. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-guidance.d.ts +5 -0
  218. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/auth-storage.d.ts +56 -0
  219. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/bash-executor.d.ts +32 -0
  220. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/cache-stats.d.ts +49 -0
  221. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/branch-summarization.d.ts +93 -0
  222. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/compaction.d.ts +128 -0
  223. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/index.d.ts +7 -0
  224. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/compaction/utils.d.ts +38 -0
  225. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/defaults.d.ts +3 -0
  226. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/diagnostics.d.ts +15 -0
  227. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/event-bus.d.ts +9 -0
  228. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/exec.d.ts +29 -0
  229. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/experimental.d.ts +2 -0
  230. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/ansi-to-html.d.ts +22 -0
  231. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/index.d.ts +37 -0
  232. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/export-html/tool-renderer.d.ts +34 -0
  233. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/index.d.ts +12 -0
  234. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/loader.d.ts +23 -0
  235. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/runner.d.ts +171 -0
  236. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/types.d.ts +1261 -0
  237. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/extensions/wrapper.d.ts +20 -0
  238. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/footer-data-provider.d.ts +54 -0
  239. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/http-dispatcher.d.ts +22 -0
  240. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/index.d.ts +13 -0
  241. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/keybindings.d.ts +358 -0
  242. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/messages.d.ts +77 -0
  243. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-config.d.ts +512 -0
  244. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-registry.d.ts +43 -0
  245. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-resolver.d.ts +121 -0
  246. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/model-runtime.d.ts +82 -0
  247. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/models-store.d.ts +17 -0
  248. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/output-guard.d.ts +7 -0
  249. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/package-manager.d.ts +210 -0
  250. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/project-trust.d.ts +15 -0
  251. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/prompt-templates.d.ts +54 -0
  252. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-attribution.d.ts +4 -0
  253. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/provider-composer.d.ts +55 -0
  254. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/radius.d.ts +2 -0
  255. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/remote-catalog-provider.d.ts +5 -0
  256. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resolve-config-value.d.ts +30 -0
  257. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/resource-loader.d.ts +206 -0
  258. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/runtime-credentials.d.ts +15 -0
  259. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/sdk.d.ts +106 -0
  260. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-cwd.d.ts +19 -0
  261. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/session-manager.d.ts +356 -0
  262. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/settings-manager.d.ts +297 -0
  263. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/skills.d.ts +60 -0
  264. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/slash-commands.d.ts +15 -0
  265. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/source-info.d.ts +18 -0
  266. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/system-prompt.d.ts +28 -0
  267. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/telemetry.d.ts +3 -0
  268. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/timings.d.ts +10 -0
  269. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/bash.d.ts +68 -0
  270. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit-diff.d.ts +106 -0
  271. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/edit.d.ts +51 -0
  272. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/file-mutation-queue.d.ts +6 -0
  273. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/find.d.ts +35 -0
  274. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/grep.d.ts +37 -0
  275. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/index.d.ts +40 -0
  276. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/ls.d.ts +37 -0
  277. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/output-accumulator.d.ts +52 -0
  278. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/path-utils.d.ts +10 -0
  279. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/read.d.ts +35 -0
  280. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/render-utils.d.ts +24 -0
  281. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/tool-definition-wrapper.d.ts +14 -0
  282. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/truncate.d.ts +70 -0
  283. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/tools/write.d.ts +26 -0
  284. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/trust-manager.d.ts +36 -0
  285. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/core/usage-totals.d.ts +19 -0
  286. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/index.d.ts +3 -0
  287. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/client.d.ts +61 -0
  288. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/huggingface.d.ts +23 -0
  289. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/index.d.ts +3 -0
  290. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/provider.d.ts +10 -0
  291. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/extensions/llama/ui.d.ts +42 -0
  292. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/index.d.ts +35 -0
  293. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/main.d.ts +12 -0
  294. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/migrations.d.ts +33 -0
  295. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/index.d.ts +9 -0
  296. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/armin.d.ts +34 -0
  297. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/assistant-message.d.ts +22 -0
  298. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bash-execution.d.ts +34 -0
  299. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/bordered-loader.d.ts +16 -0
  300. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/branch-summary-message.d.ts +16 -0
  301. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/compaction-summary-message.d.ts +16 -0
  302. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/config-selector.d.ts +102 -0
  303. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/countdown-timer.d.ts +14 -0
  304. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-editor.d.ts +21 -0
  305. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-entry.d.ts +19 -0
  306. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/custom-message.d.ts +20 -0
  307. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/daxnuts.d.ts +23 -0
  308. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/diff.d.ts +12 -0
  309. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/dynamic-border.d.ts +15 -0
  310. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/earendil-announcement.d.ts +5 -0
  311. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-editor.d.ts +22 -0
  312. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-input.d.ts +23 -0
  313. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/extension-selector.d.ts +26 -0
  314. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/first-time-setup.d.ts +25 -0
  315. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/footer.d.ts +32 -0
  316. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/index.d.ts +34 -0
  317. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/keybinding-hints.d.ts +13 -0
  318. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/login-dialog.d.ts +52 -0
  319. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/model-selector.d.ts +54 -0
  320. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/oauth-selector.d.ts +33 -0
  321. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/scoped-models-selector.d.ts +42 -0
  322. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector-search.d.ts +23 -0
  323. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/session-selector.d.ts +95 -0
  324. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/settings-selector.d.ts +77 -0
  325. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/show-images-selector.d.ts +10 -0
  326. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/skill-invocation-message.d.ts +17 -0
  327. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/status-indicator.d.ts +28 -0
  328. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/theme-selector.d.ts +11 -0
  329. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/thinking-selector.d.ts +11 -0
  330. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tool-execution.d.ts +63 -0
  331. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/tree-selector.d.ts +94 -0
  332. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/trust-selector.d.ts +23 -0
  333. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message-selector.d.ts +30 -0
  334. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/user-message.d.ts +14 -0
  335. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/components/visual-truncate.d.ts +24 -0
  336. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/interactive-mode.d.ts +394 -0
  337. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/model-search.d.ts +12 -0
  338. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme-controller.d.ts +29 -0
  339. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/interactive/theme/theme.d.ts +120 -0
  340. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/print-mode.d.ts +28 -0
  341. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/jsonl.d.ts +17 -0
  342. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-client.d.ts +246 -0
  343. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-mode.d.ts +20 -0
  344. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/modes/rpc/rpc-types.d.ts +457 -0
  345. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/package-manager-cli.d.ts +8 -0
  346. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/rpc-entry.d.ts +3 -0
  347. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/ansi.d.ts +2 -0
  348. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/changelog.d.ts +22 -0
  349. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/child-process.d.ts +18 -0
  350. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-image.d.ts +11 -0
  351. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard-native.d.ts +11 -0
  352. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/clipboard.d.ts +4 -0
  353. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/deprecation.d.ts +4 -0
  354. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/exif-orientation.d.ts +5 -0
  355. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/frontmatter.d.ts +8 -0
  356. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/fs-watch.d.ts +5 -0
  357. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/git.d.ts +26 -0
  358. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/html.d.ts +7 -0
  359. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-convert.d.ts +10 -0
  360. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-process.d.ts +18 -0
  361. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-core.d.ts +30 -0
  362. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize-worker.d.ts +2 -0
  363. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/image-resize.d.ts +16 -0
  364. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/json.d.ts +3 -0
  365. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/mime.d.ts +3 -0
  366. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/open-browser.d.ts +9 -0
  367. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/paths.d.ts +31 -0
  368. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/photon.d.ts +21 -0
  369. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/pi-user-agent.d.ts +2 -0
  370. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/shell.d.ts +31 -0
  371. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/sleep.d.ts +5 -0
  372. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/syntax-highlight.d.ts +12 -0
  373. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/tools-manager.d.ts +3 -0
  374. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/version-check.d.ts +15 -0
  375. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/dist/utils/windows-self-update.d.ts +3 -0
  376. package/dist/extensions/pi-subagents/test/fixtures/pi-coding-agent-shim/index.mjs +1 -1
  377. package/dist/extensions/pi-subagents/test/integration/acceptance-file-report.test.ts +0 -54
  378. package/dist/extensions/pi-subagents/test/integration/async-execution.test.ts +1053 -414
  379. package/dist/extensions/pi-subagents/test/integration/async-job-tracker.test.ts +194 -4
  380. package/dist/extensions/pi-subagents/test/integration/async-status.test.ts +59 -4
  381. package/dist/extensions/pi-subagents/test/integration/error-handling.test.ts +0 -77
  382. package/dist/extensions/pi-subagents/test/integration/external-cli-runner.test.ts +107 -6
  383. package/dist/extensions/pi-subagents/test/integration/fork-context-execution.test.ts +211 -897
  384. package/dist/extensions/pi-subagents/test/integration/intercom-result-delivery.test.ts +265 -375
  385. package/dist/extensions/pi-subagents/test/integration/orca-progress-tabs.test.ts +77 -7
  386. package/dist/extensions/pi-subagents/test/integration/render-fork-badge.test.ts +1 -1
  387. package/dist/extensions/pi-subagents/test/integration/render-widget.test.ts +10 -10
  388. package/dist/extensions/pi-subagents/test/integration/result-watcher.test.ts +547 -30
  389. package/dist/extensions/pi-subagents/test/integration/single-execution.test.ts +2112 -310
  390. package/dist/extensions/pi-subagents/test/integration/slash-commands.test.ts +274 -34
  391. package/dist/extensions/pi-subagents/test/integration/slash-live-state.test.ts +1 -1
  392. package/dist/extensions/pi-subagents/test/integration/template-resolution.test.ts +20 -3
  393. package/dist/extensions/pi-subagents/test/support/isolated-temp-root.mjs +9 -0
  394. package/dist/extensions/pi-subagents/test/support/mock-pi-script.mjs +30 -5
  395. package/dist/extensions/pi-subagents/test/support/mock-pi.ts +2 -0
  396. package/dist/extensions/pi-subagents/test/support/real-session-runner.ts +4 -2
  397. package/dist/extensions/pi-subagents/test/support/register-loader.mjs +1 -0
  398. package/dist/extensions/pi-subagents/test/unit/acceptance.test.ts +197 -0
  399. package/dist/extensions/pi-subagents/test/unit/agent-contract.test.ts +14 -0
  400. package/dist/extensions/pi-subagents/test/unit/agent-disabled.test.ts +1 -1
  401. package/dist/extensions/pi-subagents/test/unit/agent-frontmatter.test.ts +204 -27
  402. package/dist/extensions/pi-subagents/test/unit/agent-management.test.ts +444 -145
  403. package/dist/extensions/pi-subagents/test/unit/agent-overrides.test.ts +256 -4
  404. package/dist/extensions/pi-subagents/test/unit/artifacts.test.ts +9 -7
  405. package/dist/extensions/pi-subagents/test/unit/async-interrupt-action.test.ts +152 -22
  406. package/dist/extensions/pi-subagents/test/unit/async-recovery-descriptor.test.ts +29 -0
  407. package/dist/extensions/pi-subagents/test/unit/async-resume.test.ts +205 -23
  408. package/dist/extensions/pi-subagents/test/unit/async-retention.test.ts +579 -0
  409. package/dist/extensions/pi-subagents/test/unit/atomic-json.test.ts +24 -0
  410. package/dist/extensions/pi-subagents/test/unit/authority-policy.test.ts +1 -0
  411. package/dist/extensions/pi-subagents/test/unit/auto-drain.test.ts +3 -3
  412. package/dist/extensions/pi-subagents/test/unit/capacity-resilient-json.test.ts +155 -0
  413. package/dist/extensions/pi-subagents/test/unit/compaction-resume.test.ts +2 -2
  414. package/dist/extensions/pi-subagents/test/unit/completion-dedupe.test.ts +7 -0
  415. package/dist/extensions/pi-subagents/test/unit/completion-guard.test.ts +123 -0
  416. package/dist/extensions/pi-subagents/test/unit/completion-replay.test.ts +81 -3
  417. package/dist/extensions/pi-subagents/test/unit/control-channel.test.ts +109 -7
  418. package/dist/extensions/pi-subagents/test/unit/default-extensions.test.ts +2 -2
  419. package/dist/extensions/pi-subagents/test/unit/doctor.test.ts +5 -2
  420. package/dist/extensions/pi-subagents/test/unit/dynamic-fanout.test.ts +3 -2
  421. package/dist/extensions/pi-subagents/test/unit/extension-bindings.test.ts +79 -0
  422. package/dist/extensions/pi-subagents/test/unit/external-cli-runner.test.ts +22 -0
  423. package/dist/extensions/pi-subagents/test/unit/external-job-runner.test.ts +961 -0
  424. package/dist/extensions/pi-subagents/test/unit/file-system-retry.test.ts +64 -0
  425. package/dist/extensions/pi-subagents/test/unit/fleet-status.test.ts +1110 -0
  426. package/dist/extensions/pi-subagents/test/unit/fleet.test.ts +1664 -0
  427. package/dist/extensions/pi-subagents/test/unit/fork-context.test.ts +81 -1
  428. package/dist/extensions/pi-subagents/test/unit/herdr-inspector.test.ts +138 -11
  429. package/dist/extensions/pi-subagents/test/unit/herdr-status-bridge.test.ts +41 -2
  430. package/dist/extensions/pi-subagents/test/unit/index-child-registration.test.ts +210 -79
  431. package/dist/extensions/pi-subagents/test/unit/index-segment.test.ts +95 -0
  432. package/dist/extensions/pi-subagents/test/unit/inspect-rpc.test.ts +596 -0
  433. package/dist/extensions/pi-subagents/test/unit/mission-lifecycle.test.ts +10 -1
  434. package/dist/extensions/pi-subagents/test/unit/mission-store.test.ts +3 -5
  435. package/dist/extensions/pi-subagents/test/unit/model-exclusions.test.ts +167 -0
  436. package/dist/extensions/pi-subagents/test/unit/model-fallback.test.ts +319 -18
  437. package/dist/extensions/pi-subagents/test/unit/model-info.test.ts +78 -0
  438. package/dist/extensions/pi-subagents/test/unit/model-scope-settings.test.ts +19 -5
  439. package/dist/extensions/pi-subagents/test/unit/model-scope.test.ts +44 -0
  440. package/dist/extensions/pi-subagents/test/unit/mutation-evidence.test.ts +129 -0
  441. package/dist/extensions/pi-subagents/test/unit/native-supervisor-channel.test.ts +231 -2
  442. package/dist/extensions/pi-subagents/test/unit/nested-control.test.ts +28 -1
  443. package/dist/extensions/pi-subagents/test/unit/notify.test.ts +106 -2
  444. package/dist/extensions/pi-subagents/test/unit/orca-progress-tabs.test.ts +204 -7
  445. package/dist/extensions/pi-subagents/test/unit/package-manifest.test.ts +59 -4
  446. package/dist/extensions/pi-subagents/test/unit/path-handling.test.ts +2 -6
  447. package/dist/extensions/pi-subagents/test/unit/pi-args-permission-system.test.ts +34 -2
  448. package/dist/extensions/pi-subagents/test/unit/pi-args.test.ts +116 -6
  449. package/dist/extensions/pi-subagents/test/unit/pi-coding-agent-dir.test.ts +12 -3
  450. package/dist/extensions/pi-subagents/test/unit/pi-spawn.test.ts +56 -61
  451. package/dist/extensions/pi-subagents/test/unit/preflight.test.ts +416 -1
  452. package/dist/extensions/pi-subagents/test/unit/profiles.test.ts +9 -2
  453. package/dist/extensions/pi-subagents/test/unit/project-panes-public-api.test.ts +42 -0
  454. package/dist/extensions/pi-subagents/test/unit/prompt-workflows.test.ts +21 -30
  455. package/dist/extensions/pi-subagents/test/unit/public-execution.test.ts +86 -11
  456. package/dist/extensions/pi-subagents/test/unit/render-helpers.test.ts +49 -1
  457. package/dist/extensions/pi-subagents/test/unit/result-files.test.ts +233 -5
  458. package/dist/extensions/pi-subagents/test/unit/retained-children.test.ts +28 -5
  459. package/dist/extensions/pi-subagents/test/unit/rpc.test.ts +323 -20
  460. package/dist/extensions/pi-subagents/test/unit/run-id-resolver.test.ts +66 -10
  461. package/dist/extensions/pi-subagents/test/unit/run-status.test.ts +68 -5
  462. package/dist/extensions/pi-subagents/test/unit/runtime-agent-registration.test.ts +174 -0
  463. package/dist/extensions/pi-subagents/test/unit/scheduled-runs.test.ts +679 -0
  464. package/dist/extensions/pi-subagents/test/unit/scheduled-store-root.test.ts +67 -0
  465. package/dist/extensions/pi-subagents/test/unit/schemas.test.ts +55 -44
  466. package/dist/extensions/pi-subagents/test/unit/scripted-workflow.test.ts +399 -84
  467. package/dist/extensions/pi-subagents/test/unit/session-lease.test.ts +13 -0
  468. package/dist/extensions/pi-subagents/test/unit/skills-fallback.test.ts +1 -1
  469. package/dist/extensions/pi-subagents/test/unit/slash-bridge.test.ts +15 -10
  470. package/dist/extensions/pi-subagents/test/unit/stale-run-reconciler.test.ts +11 -7
  471. package/dist/extensions/pi-subagents/test/unit/steering-action.test.ts +2 -0
  472. package/dist/extensions/pi-subagents/test/unit/steering.test.ts +40 -1
  473. package/dist/extensions/pi-subagents/test/unit/subagent-action-recovery.test.ts +10 -2
  474. package/dist/extensions/pi-subagents/test/unit/subagent-control.test.ts +38 -3
  475. package/dist/extensions/pi-subagents/test/unit/subagent-prompt-runtime.test.ts +110 -12
  476. package/dist/extensions/pi-subagents/test/unit/subagent-wait.test.ts +204 -19
  477. package/dist/extensions/pi-subagents/test/unit/temp-paths.test.ts +25 -0
  478. package/dist/extensions/pi-subagents/test/unit/thinking-ceiling.test.ts +73 -0
  479. package/dist/extensions/pi-subagents/test/unit/tool-description.test.ts +90 -50
  480. package/dist/extensions/pi-subagents/test/unit/tool-timeout.test.ts +1 -2
  481. package/dist/extensions/pi-subagents/test/unit/wait-subscriptions.test.ts +234 -7
  482. package/dist/extensions/pi-subagents/test/unit/watch-strategy.test.ts +24 -0
  483. package/dist/extensions/pi-subagents/test/unit/watchdog-permission-arbiter.test.ts +36 -0
  484. package/dist/extensions/pi-subagents/test/unit/workflow-chat-progress.test.ts +37 -9
  485. package/dist/extensions/pi-subagents/test/unit/workflow-detach-reconcile.test.ts +302 -0
  486. package/dist/extensions/pi-subagents/test/unit/workflow-launch-params.test.ts +167 -7
  487. package/dist/extensions/pi-subagents/test/unit/workflow-receipt.test.ts +113 -0
  488. package/dist/extensions/pi-subagents/test/unit/worktree.test.ts +6 -6
  489. package/dist/extensions/ponytail/index.js +31 -25
  490. package/dist/extensions/ponytail/ponytail-config.cjs +34 -7
  491. package/dist/extensions/ponytail/ponytail-instructions.cjs +7 -9
  492. package/dist/extensions/ponytail/test/extension.test.js +7 -8
  493. package/dist/extensions/ponytail/test/helpers.test.js +1 -1
  494. package/dist/skills/brandkit/SKILL.md +799 -0
  495. package/dist/skills/design-taste-frontend/SKILL.md +1207 -0
  496. package/dist/skills/design-taste-frontend-v1/SKILL.md +227 -0
  497. package/dist/skills/full-output-enforcement/SKILL.md +50 -0
  498. package/dist/skills/gpt-taste/SKILL.md +75 -0
  499. package/dist/skills/high-end-visual-design/SKILL.md +99 -0
  500. package/dist/skills/image-to-code/SKILL.md +1229 -0
  501. package/dist/skills/imagegen-frontend-mobile/SKILL.md +1466 -0
  502. package/dist/skills/imagegen-frontend-web/SKILL.md +988 -0
  503. package/dist/skills/industrial-brutalist-ui/SKILL.md +93 -0
  504. package/dist/skills/minimalist-ui/SKILL.md +86 -0
  505. package/dist/skills/pi-subagents/SKILL.md +18 -17
  506. package/dist/skills/pi-subagents/references/constraints-and-recipes.md +31 -9
  507. package/dist/skills/pi-subagents/references/execution-controls.md +95 -143
  508. package/dist/skills/pi-subagents/references/management-authoring-rpc.md +9 -12
  509. package/dist/skills/pi-subagents/references/multi-lane-orchestration.md +39 -0
  510. package/dist/skills/pi-subagents/references/prompting-and-roles.md +45 -94
  511. package/dist/skills/ponytail/SKILL.md +12 -8
  512. package/dist/skills/ponytail-audit/SKILL.md +0 -1
  513. package/dist/skills/ponytail-debt/SKILL.md +0 -1
  514. package/dist/skills/ponytail-gain/SKILL.md +0 -1
  515. package/dist/skills/ponytail-help/SKILL.md +4 -3
  516. package/dist/skills/ponytail-review/SKILL.md +0 -1
  517. package/dist/skills/redesign-existing-projects/SKILL.md +179 -0
  518. package/dist/skills/stitch-design-taste/SKILL.md +185 -0
  519. package/dist/skills/unlazy/CHANGELOG.md +100 -0
  520. package/dist/skills/unlazy/CONTRIBUTING.md +66 -0
  521. package/dist/skills/unlazy/LICENSE +21 -0
  522. package/dist/skills/unlazy/README.md +242 -0
  523. package/dist/skills/unlazy/SECURITY.md +70 -0
  524. package/dist/skills/unlazy/SKILL.md +100 -0
  525. package/dist/skills/unlazy/package.json +13 -0
  526. package/dist/skills/unlazy/references/dispatch.md +82 -0
  527. package/dist/skills/unlazy/references/gates.md +132 -0
  528. package/dist/skills/unlazy/references/method.md +49 -0
  529. package/dist/skills/unlazy/references/orchestration.md +99 -0
  530. package/dist/skills/unlazy/references/parallel.md +123 -0
  531. package/dist/skills/unlazy/references/token-economy.md +39 -0
  532. package/dist/skills/unlazy/research/validation-protocol.md +81 -0
  533. package/dist/skills/unlazy/scripts/dispatch-check.mjs +108 -0
  534. package/dist/skills/unlazy/scripts/gate-check.mjs +894 -0
  535. package/dist/skills/unlazy/scripts/gate-lint.mjs +178 -0
  536. package/dist/skills/unlazy/scripts/install-hooks.mjs +206 -0
  537. package/dist/skills/unlazy/scripts/lib/check-supervisor.mjs +46 -0
  538. package/dist/skills/unlazy/scripts/lib/dispatch.mjs +283 -0
  539. package/dist/skills/unlazy/scripts/lib/gates.mjs +629 -0
  540. package/dist/skills/unlazy/scripts/lib/process-tree.mjs +161 -0
  541. package/dist/skills/unlazy/scripts/lib/regex-worker.mjs +9 -0
  542. package/dist/skills/unlazy/scripts/stop-hook.mjs +174 -0
  543. package/dist/skills/unlazy/templates/PLAN.md +65 -0
  544. package/dist/skills/unlazy/templates/gates-leaf.md +51 -0
  545. package/dist/skills/unlazy/templates/gates-node.md +50 -0
  546. package/dist/skills/unlazy/tests/contract-tests.mjs +127 -0
  547. package/dist/skills/unlazy/tests/dispatch-tests.mjs +481 -0
  548. package/dist/skills/unlazy/tests/hardening-tests.mjs +903 -0
  549. package/dist/skills/unlazy/tests/lint-tests.mjs +242 -0
  550. package/dist/skills/unlazy/tests/run-tests.mjs +554 -0
  551. package/dist/skills/unlazy/tests/self-check.mjs +165 -0
  552. package/dist/skills/unlazy/tests/stress-tests.mjs +356 -0
  553. package/dist/skills/web-design-guidelines/SKILL.md +40 -0
  554. package/docs/settings.md +0 -5
  555. package/package.json +1 -1
  556. package/dist/core/tools/schema-prune.d.ts +0 -16
  557. package/dist/core/tools/schema-prune.js +0 -39
  558. package/dist/core/tools/schema-prune.test.d.ts +0 -1
  559. package/dist/core/tools/schema-prune.test.js +0 -111
  560. package/dist/extensions/pi-subagents/UPSTREAM-V0.50-MAPPING.md +0 -172
  561. package/dist/extensions/pi-subagents/prompts/parallel-context-build.md +0 -55
  562. package/dist/extensions/pi-subagents/prompts/parallel-handoff-plan.md +0 -61
  563. package/dist/extensions/pi-subagents/src/agents/task-aware-routing.ts +0 -132
  564. package/dist/extensions/pi-subagents/src/extension/chain-validation.ts +0 -181
  565. package/dist/extensions/pi-subagents/src/runs/foreground/chain-clarify.ts +0 -1354
  566. package/dist/extensions/pi-subagents/src/runs/foreground/chain-execution.ts +0 -1581
  567. package/dist/extensions/pi-subagents/src/shared/env.ts +0 -16
  568. package/dist/extensions/pi-subagents/src/shared/session-lineage.ts +0 -71
  569. package/dist/extensions/pi-subagents/src/slash/inline-subagents.ts +0 -136
  570. package/dist/extensions/pi-subagents/src/workflows/workflow-auto-relaunch.ts +0 -41
  571. package/dist/extensions/pi-subagents/test/integration/chain-clarify.test.ts +0 -466
  572. package/dist/extensions/pi-subagents/test/integration/chain-execution.test.ts +0 -1859
  573. package/dist/extensions/pi-subagents/test/integration/parallel-execution.test.ts +0 -733
  574. package/dist/extensions/pi-subagents/test/unit/builtin-agent-documentation.test.ts +0 -63
  575. package/dist/extensions/pi-subagents/test/unit/chain-validation.test.ts +0 -326
  576. package/dist/extensions/pi-subagents/test/unit/handoff-adoption.test.ts +0 -103
  577. package/dist/extensions/pi-subagents/test/unit/inline-subagents.test.ts +0 -127
  578. package/dist/extensions/pi-subagents/test/unit/session-lineage.test.ts +0 -73
  579. package/dist/extensions/pi-subagents/test/unit/task-aware-routing.test.ts +0 -213
  580. package/dist/extensions/pi-subagents/test/unit/workflow-auto-relaunch.test.ts +0 -65
@@ -0,0 +1,165 @@
1
+ #!/usr/bin/env node
2
+ // self-check.mjs : structural checks on the skill's own scripts.
3
+ //
4
+ // node tests/self-check.mjs
5
+ //
6
+ // Lives in a file rather than as an inline `node -e` in GATES.md on purpose: a
7
+ // one-liner containing quotes, "^" or "!" is parsed differently by cmd.exe and
8
+ // by sh, so an inline check can pass on one platform and report a phantom
9
+ // failure on the other. A CHECK line should name a script, not embed one.
10
+ //
11
+ // Prints "self-check ok (N/N)" on success, which is what the gate matches.
12
+
13
+ import { readFileSync } from "node:fs";
14
+ import { join, dirname } from "node:path";
15
+ import { fileURLToPath } from "node:url";
16
+
17
+ const ROOT = join(dirname(fileURLToPath(import.meta.url)), "..");
18
+ const SCRIPTS = [
19
+ "scripts/gate-check.mjs",
20
+ "scripts/gate-lint.mjs",
21
+ "scripts/dispatch-check.mjs",
22
+ "scripts/stop-hook.mjs",
23
+ "scripts/install-hooks.mjs",
24
+ "scripts/lib/gates.mjs",
25
+ "scripts/lib/dispatch.mjs",
26
+ "scripts/lib/check-supervisor.mjs",
27
+ "scripts/lib/process-tree.mjs",
28
+ "scripts/lib/regex-worker.mjs",
29
+ "tests/run-tests.mjs",
30
+ "tests/dispatch-tests.mjs",
31
+ "tests/hardening-tests.mjs",
32
+ "tests/stress-tests.mjs",
33
+ "tests/lint-tests.mjs",
34
+ "tests/contract-tests.mjs",
35
+ "tests/self-check.mjs",
36
+ ];
37
+
38
+ const read = (p) => readFileSync(join(ROOT, p), "utf8");
39
+ const checks = [];
40
+ const check = (name, fn) => checks.push({ name, fn });
41
+
42
+ check("zero non-stdlib imports", () => {
43
+ const bad = [];
44
+ for (const p of SCRIPTS) {
45
+ for (const m of read(p).matchAll(/^\s*import\s[^;]*?from\s+["']([^"']+)["']/gm)) {
46
+ const spec = m[1];
47
+ if (!spec.startsWith("node:") && !spec.startsWith(".")) bad.push(p + " -> " + spec);
48
+ }
49
+ }
50
+ return bad.length ? "non-stdlib import: " + bad.join(", ") : null;
51
+ });
52
+
53
+ check("one shared gate parser", () => {
54
+ // The v2.0 checker and hook each had their own GATE_RE and disagreed about a
55
+ // gate's id when it carried no "Gn:" prefix. Parsing now lives only in the lib.
56
+ // This file names GATE_RE to describe the rule, so it scans only scripts/.
57
+ const owners = SCRIPTS.filter(p => p.startsWith("scripts/") && read(p).includes("GATE_RE"));
58
+ return owners.length === 1 && owners[0] === "scripts/lib/gates.mjs"
59
+ ? null
60
+ : "GATE_RE should exist only in scripts/lib/gates.mjs, found in: " + owners.join(", ");
61
+ });
62
+
63
+ check("no index-arithmetic argument filtering", () => {
64
+ // The v2.0 arg filter dropped index tIdx+1, which is 0 when --timeout is
65
+ // absent, silently discarding the first file argument.
66
+ return read("scripts/gate-check.mjs").includes("i !== tIdx + 1")
67
+ ? "gate-check.mjs still filters arguments by index arithmetic"
68
+ : null;
69
+ });
70
+
71
+ check("gate files are written atomically", () => {
72
+ const src = read("scripts/gate-check.mjs");
73
+ if (!src.includes("writeAtomic")) return "gate-check.mjs does not write via writeAtomic";
74
+ if (!src.includes("withFileLock")) return "gate-check.mjs does not take a lock before writing";
75
+ return null;
76
+ });
77
+
78
+ check("checks wait for close and cap output", () => {
79
+ const src = read("scripts/gate-check.mjs");
80
+ if (!src.includes('child.once("close"')) return "gate runner does not settle on stdio close";
81
+ if (src.includes('child.once("exit"')) return "gate runner settles on exit before stdio close";
82
+ if (!src.includes("MAX_OUTPUT_BYTES")) return "gate runner has no explicit output cap";
83
+ return null;
84
+ });
85
+
86
+ check("approval identity binds execution semantics", () => {
87
+ const src = read("scripts/gate-check.mjs");
88
+ const required = [
89
+ "check:", "expect:", "cwd", "shell", "timeoutMs", "maxOutputBytes",
90
+ "regexTimeoutMs", "regexStartupTimeoutMs", "maxRegexWorkers", "platform", "path:",
91
+ ];
92
+ const missing = required.filter(token => !src.includes(token));
93
+ return missing.length ? "approval oracle missing source tokens: " + missing.join(", ") : null;
94
+ });
95
+
96
+ check("the hook resolves a scope rather than globbing the tree", () => {
97
+ const src = read("scripts/stop-hook.mjs");
98
+ if (!src.includes("resolveTarget")) return "stop-hook.mjs does not resolve a scope";
99
+ if (!src.includes("hookStatePath")) return "stop-hook.mjs does not use a per-scope state path";
100
+ return null;
101
+ });
102
+
103
+ check("every local resource the skill names exists", () => {
104
+ const skill = read("SKILL.md");
105
+ const missing = [];
106
+ const named = new Set();
107
+ for (const m of skill.matchAll(/`((?:references|templates|scripts)\/[^`\s]+|SECURITY\.md)`/g)) named.add(m[1]);
108
+ for (const path of named) {
109
+ try { read(path); } catch { missing.push(path); }
110
+ }
111
+ return missing.length ? "SKILL.md names missing local resources: " + missing.join(", ") : null;
112
+ });
113
+
114
+ check("all executable sources retain the Node 16 floor", () => {
115
+ const bad = SCRIPTS.filter(p => /Node 1[89]\+/.test(read(p)));
116
+ return bad.length ? "newer runtime claim in: " + bad.join(", ") : null;
117
+ });
118
+
119
+ check("the PLAN template carries a revisioned contract denominator", () => {
120
+ const plan = read("templates/PLAN.md");
121
+ const required = [
122
+ "Current contract inventory", "Contract revision", "Required outcome or constraint",
123
+ "Owner", "Observing gate or manual review", "Disposition", "REMOVED_BY_USER",
124
+ ];
125
+ const missing = required.filter((token) => !plan.includes(token));
126
+ return missing.length ? "PLAN contract inventory missing: " + missing.join(", ") : null;
127
+ });
128
+
129
+ check("request reconciliation keeps the focused solo cheap path", () => {
130
+ const skill = read("SKILL.md");
131
+ if (!skill.toLowerCase().includes("re-read the current request")) return "SKILL.md lacks final request reread";
132
+ if (!skill.includes("a PLAN table is not required")) return "focused solo path was made needlessly orchestrated";
133
+ if (!read("references/orchestration.md").includes("review every current contract row")) {
134
+ return "orchestration guide lacks final contract reconciliation";
135
+ }
136
+ return null;
137
+ });
138
+
139
+ check("abandonment is terminal handoff rather than ALL MET", () => {
140
+ const checker = read("scripts/gate-check.mjs");
141
+ const hook = read("scripts/stop-hook.mjs");
142
+ if (!checker.includes("HANDOFF REQUIRED") || !checker.includes("totalAbandoned === 0")) {
143
+ return "gate checker can still classify abandonment as completion";
144
+ }
145
+ if (!hook.includes("HANDOFF REQUIRED") || !hook.includes("handoffs")) {
146
+ return "Stop hook does not surface bounded abandonment handoff";
147
+ }
148
+ return null;
149
+ });
150
+
151
+ let passed = 0;
152
+ const failures = [];
153
+ for (const c of checks) {
154
+ let problem;
155
+ try { problem = c.fn(); } catch (e) { problem = e.message; }
156
+ if (problem) { failures.push(c.name + ": " + problem); console.log("FAIL " + c.name + "\n " + problem); }
157
+ else { passed++; console.log("ok " + c.name); }
158
+ }
159
+
160
+ console.log("");
161
+ if (failures.length) {
162
+ console.log("self-check FAILED (" + passed + "/" + checks.length + ")");
163
+ process.exit(1);
164
+ }
165
+ console.log("self-check ok (" + passed + "/" + checks.length + ")");
@@ -0,0 +1,356 @@
1
+ #!/usr/bin/env node
2
+ // Concurrency and mutation stress tests. Zero dependencies. Node 16+.
3
+
4
+ import {
5
+ existsSync, linkSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync,
6
+ symlinkSync, writeFileSync,
7
+ } from "node:fs";
8
+ import { execFile, spawnSync } from "node:child_process";
9
+ import { dirname, join } from "node:path";
10
+ import { tmpdir } from "node:os";
11
+ import { fileURLToPath } from "node:url";
12
+ import { claimLeases, releaseLeases, writeAtomic } from "../scripts/lib/gates.mjs";
13
+
14
+ const HERE = dirname(fileURLToPath(import.meta.url));
15
+ const GATE_CHECK = join(HERE, "..", "scripts", "gate-check.mjs");
16
+ const STOP_HOOK = join(HERE, "..", "scripts", "stop-hook.mjs");
17
+ const INSTALL = join(HERE, "..", "scripts", "install-hooks.mjs");
18
+ const tests = [];
19
+ const test = (name, fn) => tests.push({ name, fn });
20
+
21
+ function sandbox() {
22
+ const dir = mkdtempSync(join(tmpdir(), "unlazy-stress-"));
23
+ return {
24
+ dir,
25
+ path(rel) { return join(dir, rel); },
26
+ write(rel, value) {
27
+ const path = join(dir, rel);
28
+ mkdirSync(dirname(path), { recursive: true });
29
+ writeFileSync(path, value);
30
+ return path;
31
+ },
32
+ read(rel) { return readFileSync(join(dir, rel), "utf8"); },
33
+ cleanup() { rmSync(dir, { recursive: true, force: true }); },
34
+ };
35
+ }
36
+
37
+ function run(script, args, options = {}) {
38
+ return new Promise((done) => {
39
+ const child = execFile(process.execPath, [script, ...args], {
40
+ cwd: options.cwd,
41
+ encoding: "utf8",
42
+ maxBuffer: 8 * 1024 * 1024,
43
+ env: { ...process.env, ...(options.env || {}) },
44
+ timeout: options.timeoutMs,
45
+ }, (error, stdout, stderr) => {
46
+ done({ code: error ? (typeof error.code === "number" ? error.code : 1) : 0, out: (stdout || "") + (stderr || "") });
47
+ });
48
+ if (options.stdin !== undefined) child.stdin.end(options.stdin);
49
+ });
50
+ }
51
+
52
+ const assert = (condition, message) => { if (!condition) throw new Error(message); };
53
+ const has = (text, value) => assert(text.includes(value), "missing " + JSON.stringify(value) + "\n" + text);
54
+
55
+ test("leases: 200 simultaneous conflicting claim pairs never both succeed", async () => {
56
+ const s = sandbox();
57
+ try {
58
+ for (let iteration = 0; iteration < 200; iteration++) {
59
+ const [left, right] = await Promise.all([
60
+ claimLeases(s.dir, { scope: "left", leaf: "leaf-left", globs: ["src/shared/**"] }),
61
+ claimLeases(s.dir, { scope: "right", leaf: "leaf-right", globs: ["src/shared/file.js"] }),
62
+ ]);
63
+ const successes = Number(left.ok) + Number(right.ok);
64
+ assert(successes === 1, "iteration " + iteration + " had " + successes + " successful claims");
65
+ await Promise.all([
66
+ releaseLeases(s.dir, { scope: "left" }),
67
+ releaseLeases(s.dir, { scope: "right" }),
68
+ ]);
69
+ }
70
+ } finally { s.cleanup(); }
71
+ });
72
+
73
+ test("leases: the same scope and leaf cannot be claimed by two workers", async () => {
74
+ const s = sandbox();
75
+ try {
76
+ const [left, right] = await Promise.all([
77
+ claimLeases(s.dir, { scope: "same", leaf: "leaf", globs: ["src/shared/**"] }),
78
+ claimLeases(s.dir, { scope: "same", leaf: "leaf", globs: ["src/shared/**"] }),
79
+ ]);
80
+ assert(Number(left.ok) + Number(right.ok) === 1,
81
+ "duplicate logical owners both claimed one lease: " + JSON.stringify({ left, right }));
82
+ const loser = left.ok ? right : left;
83
+ assert(loser.conflicts.length === 1, "losing duplicate claim did not report its conflict");
84
+ assert(loser.conflicts[0].with === "same/leaf", "duplicate conflict named the wrong owner");
85
+ const released = await releaseLeases(s.dir, { scope: "same", leaf: "leaf" });
86
+ assert(released === 1, "expected one exclusive lease to release, got " + released);
87
+ } finally { s.cleanup(); }
88
+ });
89
+
90
+ test("leases: an explicit release cleans orphaned leases after a scope directory is gone", async () => {
91
+ const s = sandbox();
92
+ try {
93
+ const claimed = await claimLeases(s.dir, { scope: "gone", leaf: "leaf-gone", globs: ["src/gone/**"] });
94
+ assert(claimed.ok, "fixture lease was not created");
95
+ const result = await run(GATE_CHECK, ["--scope", "gone", "--leaf", "leaf-gone", "--release"], { cwd: s.dir });
96
+ assert(result.code === 0, result.out);
97
+ has(result.out, "released 1 lease(s) for gone/leaf-gone");
98
+ const lockNames = readdirSync(s.path(".unlazy/locks"));
99
+ assert(!lockNames.some((name) => name.endsWith(".lease")), "orphan lease remained: " + lockNames.join(", "));
100
+
101
+ s.write(".unlazy/live/gates/leaf-live.md", "# malformed zero-gate ledger\n");
102
+ const liveClaim = await claimLeases(s.dir, { scope: "live", leaf: "leaf-live", globs: ["src/live/**"] });
103
+ assert(liveClaim.ok, "live fixture lease was not created");
104
+ const liveRelease = await run(GATE_CHECK, ["--scope", "live", "--leaf", "leaf-live", "--release"], { cwd: s.dir });
105
+ assert(liveRelease.code === 0, "malformed live ledger blocked release\n" + liveRelease.out);
106
+ has(liveRelease.out, "released 1 lease(s) for live/leaf-live");
107
+ } finally { s.cleanup(); }
108
+ });
109
+
110
+ test("hook: repeated 64-writer bursts are serialized without lost increments", async () => {
111
+ const s = sandbox();
112
+ try {
113
+ s.write("GATES.md", "- [ ] G1: pending\n EVIDENCE: pending\n");
114
+ const payload = JSON.stringify({ cwd: s.dir, session_id: "one-session" });
115
+ for (let round = 1; round <= 3; round++) {
116
+ rmSync(s.path(".unlazy-hook-state.json"), { force: true });
117
+ const results = await Promise.all(Array.from({ length: 64 }, () =>
118
+ run(STOP_HOOK, [], { cwd: s.dir, stdin: payload })));
119
+ const crashed = results.filter((result) => result.code !== 0);
120
+ assert(crashed.length === 0,
121
+ "round " + round + ": " + crashed.length + " hook process(es) failed\n" +
122
+ [...new Set(crashed.map((result) => "exit=" + result.code + "\n" + result.out.trim()))]
123
+ .slice(0, 4).join("\n---\n"));
124
+ const failedUpdates = results
125
+ .filter((result) => result.out.includes("could not update the serialized hook state"))
126
+ .map((result) => result.out.trim());
127
+ assert(failedUpdates.length === 0,
128
+ "round " + round + ": " + failedUpdates.length + " hook(s) failed open on the state update\n" +
129
+ [...new Set(failedUpdates)].slice(0, 4).join("\n---\n"));
130
+ const state = JSON.parse(s.read(".unlazy-hook-state.json"));
131
+ const sessions = Object.values(state.sessions);
132
+ assert(sessions.length === 1, "round " + round + ": expected one session, got " + sessions.length);
133
+ assert(sessions[0].blocks === 64, "round " + round + ": expected 64 blocks, got " + sessions[0].blocks);
134
+ }
135
+ } finally { s.cleanup(); }
136
+ });
137
+
138
+ test("hook: sessions remain isolated and completion/no-gates clears stale state", async () => {
139
+ const s = sandbox();
140
+ try {
141
+ s.write("GATES.md", "- [ ] G1: pending\n EVIDENCE: pending\n");
142
+ for (const id of ["alpha", "beta"]) {
143
+ const payload = JSON.stringify({ cwd: s.dir, session_id: id });
144
+ await Promise.all(Array.from({ length: 3 }, () => run(STOP_HOOK, [], { cwd: s.dir, stdin: payload })));
145
+ }
146
+ let state = JSON.parse(s.read(".unlazy-hook-state.json"));
147
+ assert(Object.keys(state.sessions).length === 2, "sessions were mixed: " + JSON.stringify(state));
148
+ assert(Object.values(state.sessions).every((value) => value.blocks === 3), "session counters were not isolated");
149
+
150
+ s.write("GATES.md", "- [x] G1: done\n EVIDENCE: measured\n");
151
+ await run(STOP_HOOK, [], { cwd: s.dir, stdin: JSON.stringify({ cwd: s.dir, session_id: "alpha" }) });
152
+ state = JSON.parse(s.read(".unlazy-hook-state.json"));
153
+ assert(Object.keys(state.sessions).length === 1, "completed alpha state was not cleared");
154
+
155
+ rmSync(s.path("GATES.md"));
156
+ await run(STOP_HOOK, [], { cwd: s.dir, stdin: JSON.stringify({ cwd: s.dir, session_id: "beta" }) });
157
+ assert(!existsSync(s.path(".unlazy-hook-state.json")), "no-gates path did not clear final state");
158
+ } finally { s.cleanup(); }
159
+ });
160
+
161
+ test("atomic writer: predictable pre-created temp links are never followed", async () => {
162
+ if (process.platform === "win32") return;
163
+ const s = sandbox();
164
+ try {
165
+ s.write("victim.txt", "safe\n");
166
+ const target = s.path("state.json");
167
+ symlinkSync(s.path("victim.txt"), target + "." + process.pid + ".tmp");
168
+ writeAtomic(target, "new\n");
169
+ assert(s.read("victim.txt") === "safe\n", "predictable temp symlink was followed");
170
+ assert(s.read("state.json") === "new\n", "target was not written");
171
+ } finally { s.cleanup(); }
172
+ });
173
+
174
+ test("status log: an existing symlink is refused without touching its target", async () => {
175
+ if (process.platform === "win32") return;
176
+ const s = sandbox();
177
+ try {
178
+ s.write(".unlazy/api/GATES.md", "# Gates\n\n- [ ] G1: pending\n EVIDENCE: pending\n");
179
+ s.write("victim.txt", "safe\n");
180
+ symlinkSync(s.path("victim.txt"), s.path(".unlazy/api/status.log"));
181
+ const result = await run(GATE_CHECK, ["--scope", "api", "--log", "attacker-controlled append"], { cwd: s.dir });
182
+ assert(result.code === 2, "symlinked status log should fail closed\n" + result.out);
183
+ has(result.out, "cannot append status");
184
+ assert(s.read("victim.txt") === "safe\n", "status append followed the symlink");
185
+ } finally { s.cleanup(); }
186
+ });
187
+
188
+ test("status log: an existing hard link is refused without touching its sibling", async () => {
189
+ const s = sandbox();
190
+ try {
191
+ s.write(".unlazy/api/GATES.md", "# Gates\n\n- [ ] G1: pending\n EVIDENCE: pending\n");
192
+ s.write("victim.txt", "safe\n");
193
+ linkSync(s.path("victim.txt"), s.path(".unlazy/api/status.log"));
194
+ const result = await run(GATE_CHECK, ["--scope", "api", "--log", "attacker-controlled append"], { cwd: s.dir });
195
+ assert(result.code === 2, "hard-linked status log should fail closed\n" + result.out);
196
+ has(result.out, "cannot append status");
197
+ assert(s.read("victim.txt") === "safe\n", "status append followed the hard link");
198
+ } finally { s.cleanup(); }
199
+ });
200
+
201
+ test("status log: a FIFO is rejected without blocking the logger", async () => {
202
+ if (process.platform === "win32") return;
203
+ const s = sandbox();
204
+ try {
205
+ s.write(".unlazy/api/GATES.md", "# Gates\n\n- [ ] G1: pending\n EVIDENCE: pending\n");
206
+ const fifo = s.path(".unlazy/api/status.log");
207
+ const made = spawnSync("mkfifo", [fifo], { encoding: "utf8" });
208
+ assert(made.status === 0, "could not create FIFO fixture: " + made.stderr);
209
+ const started = Date.now();
210
+ const result = await run(GATE_CHECK, ["--scope", "api", "--log", "must not block"], {
211
+ cwd: s.dir,
212
+ timeoutMs: 2000,
213
+ });
214
+ assert(result.code === 2, "FIFO logger did not fail closed\n" + result.out);
215
+ assert(Date.now() - started < 1800, "FIFO validation waited for the outer timeout");
216
+ has(result.out, "cannot append status");
217
+ } finally { s.cleanup(); }
218
+ });
219
+
220
+ test("installer: malformed settings shapes are refused without mutation", async () => {
221
+ const fixtures = [
222
+ "[]\n",
223
+ JSON.stringify({ hooks: [] }, null, 2) + "\n",
224
+ JSON.stringify({ hooks: { Stop: {} } }, null, 2) + "\n",
225
+ JSON.stringify({ hooks: { Stop: [{ hooks: {} }] } }, null, 2) + "\n",
226
+ JSON.stringify({ hooks: { Stop: [{ hooks: [null] }] } }, null, 2) + "\n",
227
+ ];
228
+ for (const fixture of fixtures) {
229
+ const s = sandbox();
230
+ try {
231
+ s.write(".claude/settings.local.json", fixture);
232
+ const result = await run(INSTALL, [], { cwd: s.dir });
233
+ assert(result.code === 1, "invalid shape should fail\n" + result.out);
234
+ assert(s.read(".claude/settings.local.json") === fixture, "invalid settings were mutated");
235
+ } finally { s.cleanup(); }
236
+ }
237
+ });
238
+
239
+ test("installer: a FIFO settings target is rejected without blocking", async () => {
240
+ if (process.platform === "win32") return;
241
+ const s = sandbox();
242
+ try {
243
+ mkdirSync(s.path(".claude"), { recursive: true });
244
+ const target = s.path(".claude/settings.local.json");
245
+ const made = spawnSync("mkfifo", [target], { encoding: "utf8" });
246
+ assert(made.status === 0, "could not create FIFO fixture: " + made.stderr);
247
+ const started = Date.now();
248
+ const result = await run(INSTALL, [], { cwd: s.dir, timeoutMs: 2000 });
249
+ assert(result.code === 1, "FIFO installer target did not fail closed\n" + result.out);
250
+ assert(Date.now() - started < 1800, "FIFO installer validation blocked");
251
+ has(result.out, "Refusing to touch");
252
+ } finally { s.cleanup(); }
253
+ });
254
+
255
+ test("installer: uninstall preserves a sibling in the same matcher group and writes a backup", async () => {
256
+ const s = sandbox();
257
+ try {
258
+ const original = JSON.stringify({
259
+ hooks: {
260
+ Stop: [{
261
+ matcher: "",
262
+ hooks: [
263
+ { type: "command", command: "node other-tool.mjs" },
264
+ { type: "command", command: "node /tmp/unlazy/scripts/stop-hook.mjs --unlazy" },
265
+ ],
266
+ }],
267
+ },
268
+ }, null, 2) + "\n";
269
+ s.write(".claude/settings.local.json", original);
270
+ const result = await run(INSTALL, ["--uninstall"], { cwd: s.dir });
271
+ assert(result.code === 0, result.out);
272
+ const after = JSON.parse(s.read(".claude/settings.local.json"));
273
+ assert(after.hooks.Stop.length === 1, "matcher group was removed");
274
+ assert(after.hooks.Stop[0].matcher === "", "matcher metadata was lost");
275
+ assert(after.hooks.Stop[0].hooks.length === 1, "wrong handler count");
276
+ has(after.hooks.Stop[0].hooks[0].command, "other-tool.mjs");
277
+ assert(s.read(".claude/settings.local.json.unlazy.bak") === original, "backup did not preserve original bytes");
278
+ } finally { s.cleanup(); }
279
+ });
280
+
281
+ test("installer: marker substrings do not claim an unrelated stop hook", async () => {
282
+ const s = sandbox();
283
+ try {
284
+ const unrelated = [
285
+ "node /opt/other/stop-hook.mjs --unlazy-helper",
286
+ "node /opt/unlazy/scripts/stop-hook.mjs --unlazy-helper",
287
+ "node " + JSON.stringify(STOP_HOOK) + " --unlazy-helper",
288
+ "node " + JSON.stringify(STOP_HOOK) + " \"--unlazy-helper\"",
289
+ ];
290
+ s.write(".claude/settings.local.json", JSON.stringify({
291
+ hooks: { Stop: [{ hooks: unrelated.map((command) => ({ type: "command", command, timeout: 20 })) }] },
292
+ }, null, 2) + "\n");
293
+ const result = await run(INSTALL, ["--uninstall"], { cwd: s.dir });
294
+ assert(result.code === 0, result.out);
295
+ has(result.out, "Nothing to remove");
296
+ const after = JSON.parse(s.read(".claude/settings.local.json"));
297
+ assert(after.hooks.Stop[0].hooks.map((hook) => hook.command).join("\n") === unrelated.join("\n"),
298
+ "unrelated hook was removed");
299
+ } finally { s.cleanup(); }
300
+ });
301
+
302
+ test("installer: a matching command with broken managed fields is repaired", async () => {
303
+ const s = sandbox();
304
+ try {
305
+ const installed = await run(INSTALL, [], { cwd: s.dir });
306
+ assert(installed.code === 0, installed.out);
307
+ const settings = JSON.parse(s.read(".claude/settings.local.json"));
308
+ const handler = settings.hooks.Stop[0].hooks[0];
309
+ handler.type = "prompt";
310
+ handler.timeout = 1;
311
+ s.write(".claude/settings.local.json", JSON.stringify(settings, null, 2) + "\n");
312
+ const repaired = await run(INSTALL, [], { cwd: s.dir });
313
+ assert(repaired.code === 0, repaired.out);
314
+ assert(!repaired.out.includes("Already installed"), "broken handler was treated as current");
315
+ const after = JSON.parse(s.read(".claude/settings.local.json"));
316
+ const managed = after.hooks.Stop.flatMap((group) => group.hooks)
317
+ .filter((item) => typeof item.command === "string" && item.command.includes("--unlazy"));
318
+ assert(managed.length === 1, "repair did not leave exactly one managed handler");
319
+ assert(managed[0].type === "command", "repair did not restore command type");
320
+ assert(managed[0].timeout === 20, "repair did not restore timeout");
321
+ } finally { s.cleanup(); }
322
+ });
323
+
324
+ test("installer: scope input is validated and local state warning is explicit", async () => {
325
+ const s = sandbox();
326
+ try {
327
+ const invalid = await run(INSTALL, ["--scope", "bad;echo"], { cwd: s.dir });
328
+ assert(invalid.code === 2, invalid.out);
329
+ assert(!existsSync(s.path(".claude/settings.local.json")), "invalid scope wrote settings");
330
+ const good = await run(INSTALL, ["--scope", "api"], { cwd: s.dir });
331
+ assert(good.code === 0, good.out);
332
+ has(good.out, ".unlazy/");
333
+ has(good.out, ".unlazy-hook-state.json");
334
+ const settings = JSON.parse(s.read(".claude/settings.local.json"));
335
+ const command = settings.hooks.Stop[0].hooks[0].command;
336
+ has(command, "--scope api");
337
+ } finally { s.cleanup(); }
338
+ });
339
+
340
+ let passed = 0;
341
+ const failures = [];
342
+ for (const item of tests) {
343
+ try {
344
+ await item.fn();
345
+ passed++;
346
+ console.log("ok " + item.name);
347
+ } catch (error) {
348
+ failures.push(item.name);
349
+ console.log("FAIL " + item.name + "\n " + String(error.message).replace(/\n/g, "\n "));
350
+ }
351
+ }
352
+ console.log("\n" + passed + "/" + tests.length + " passed");
353
+ if (failures.length) {
354
+ console.log("failed: " + failures.join(", "));
355
+ process.exit(1);
356
+ }
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: web-design-guidelines
3
+ description: Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices".
4
+ license: MIT
5
+ metadata:
6
+ author: vercel
7
+ version: "1.0.0"
8
+ argument-hint: <file-or-pattern>
9
+ ---
10
+
11
+ # Web Interface Guidelines
12
+
13
+ Review files for compliance with Web Interface Guidelines.
14
+
15
+ ## How It Works
16
+
17
+ 1. Fetch the latest guidelines from the source URL below
18
+ 2. Read the specified files (or prompt user for files/pattern)
19
+ 3. Check against all rules in the fetched guidelines
20
+ 4. Output findings in the terse `file:line` format
21
+
22
+ ## Guidelines Source
23
+
24
+ Fetch fresh guidelines before each review:
25
+
26
+ ```
27
+ https://raw.githubusercontent.com/vercel-labs/web-interface-guidelines/main/command.md
28
+ ```
29
+
30
+ Use WebFetch to retrieve the latest rules. The fetched content contains all the rules and output format instructions.
31
+
32
+ ## Usage
33
+
34
+ When a user provides a file or pattern argument:
35
+ 1. Fetch guidelines from the source URL above
36
+ 2. Read the specified files
37
+ 3. Apply all rules from the fetched guidelines
38
+ 4. Output findings using the format specified in the guidelines
39
+
40
+ If no files specified, ask the user which files to review.
package/docs/settings.md CHANGED
@@ -277,11 +277,6 @@ When selesai reads extensions from both `~/.selesai/agent/extensions/` and `~/.p
277
277
 
278
278
  Keys are top-level entry names (dir name for packaged extensions, file name for loose `.ts`). Values are `"selesai"` or `"pi"`. See [Shared Host Extensions](shared-host-extensions.md) for the full flow.
279
279
 
280
- ### Prompt size
281
-
282
- | Setting | Type | Default | Description |
283
- |---------|------|---------|-------------|
284
- | `pruneToolDescriptions` | boolean | `true` | Strip per-field parameter-schema descriptions from provider tool payloads (top-level tool descriptions and UI/docs schemas are unchanged). Set `false` to send full schemas. |
285
280
 
286
281
  ## Example
287
282
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@selesai/code",
3
- "version": "0.9.11",
3
+ "version": "0.9.12",
4
4
  "description": "Maintained, extension-first Pi coding agent with built-in workflows, subagents, web research, questions, skills, and an enhanced terminal UI.",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1,16 +0,0 @@
1
- import type { AgentTool } from "@earendil-works/pi-agent-core";
2
- import type { TSchema } from "typebox";
3
- /**
4
- * Structural deep clone that omits every `description` key at any depth while
5
- * preserving all other own keys (including TypeBox internals such as `~kind`
6
- * and `~optional` symbols and function-valued keys). Uses Reflect.ownKeys +
7
- * property descriptors so non-enumerable metadata survives; never mutates the
8
- * input.
9
- */
10
- export declare function stripSchemaDescriptions<T>(value: T): T;
11
- /**
12
- * Returns a shallow copy of the tool with its parameter schema descriptions
13
- * stripped. Top-level tool fields (name, description, execute, ...) are
14
- * untouched.
15
- */
16
- export declare function stripToolParameterDescriptions<T extends TSchema>(tool: AgentTool<T>): AgentTool<T>;
@@ -1,39 +0,0 @@
1
- // Memoized stripped clones, keyed by the original schema root. The input is
2
- // never mutated; repeat calls return the same cached clone.
3
- const strippedSchemaCache = new WeakMap();
4
- /**
5
- * Structural deep clone that omits every `description` key at any depth while
6
- * preserving all other own keys (including TypeBox internals such as `~kind`
7
- * and `~optional` symbols and function-valued keys). Uses Reflect.ownKeys +
8
- * property descriptors so non-enumerable metadata survives; never mutates the
9
- * input.
10
- */
11
- export function stripSchemaDescriptions(value) {
12
- if (!value || typeof value !== "object")
13
- return value;
14
- const cached = strippedSchemaCache.get(value);
15
- if (cached !== undefined)
16
- return cached;
17
- const result = Array.isArray(value) ? [] : Object.create(Object.getPrototypeOf(value));
18
- for (const key of Reflect.ownKeys(value)) {
19
- const descriptor = Object.getOwnPropertyDescriptor(value, key);
20
- if (!descriptor)
21
- continue;
22
- if (key === "description")
23
- continue;
24
- if ("value" in descriptor) {
25
- descriptor.value = stripSchemaDescriptions(descriptor.value);
26
- }
27
- Object.defineProperty(result, key, descriptor);
28
- }
29
- strippedSchemaCache.set(value, result);
30
- return result;
31
- }
32
- /**
33
- * Returns a shallow copy of the tool with its parameter schema descriptions
34
- * stripped. Top-level tool fields (name, description, execute, ...) are
35
- * untouched.
36
- */
37
- export function stripToolParameterDescriptions(tool) {
38
- return { ...tool, parameters: stripSchemaDescriptions(tool.parameters) };
39
- }
@@ -1 +0,0 @@
1
- export {};