@chinhae/atw-cli 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/README.md +128 -451
  2. package/dist/cli/index.d.ts.map +1 -1
  3. package/dist/cli/index.js +24 -1
  4. package/dist/cli/index.js.map +1 -1
  5. package/dist/commands/channel/adapters/claude.d.ts +44 -2
  6. package/dist/commands/channel/adapters/claude.d.ts.map +1 -1
  7. package/dist/commands/channel/adapters/claude.js +124 -23
  8. package/dist/commands/channel/adapters/claude.js.map +1 -1
  9. package/dist/commands/channel/adapters/codex.d.ts +36 -6
  10. package/dist/commands/channel/adapters/codex.d.ts.map +1 -1
  11. package/dist/commands/channel/adapters/codex.js +150 -10
  12. package/dist/commands/channel/adapters/codex.js.map +1 -1
  13. package/dist/commands/channel/adapters/index.d.ts +33 -4
  14. package/dist/commands/channel/adapters/index.d.ts.map +1 -1
  15. package/dist/commands/channel/adapters/index.js +159 -6
  16. package/dist/commands/channel/adapters/index.js.map +1 -1
  17. package/dist/commands/channel/adapters/omp.d.ts +106 -0
  18. package/dist/commands/channel/adapters/omp.d.ts.map +1 -0
  19. package/dist/commands/channel/adapters/omp.js +405 -0
  20. package/dist/commands/channel/adapters/omp.js.map +1 -0
  21. package/dist/commands/channel/adapters/pi.d.ts +123 -0
  22. package/dist/commands/channel/adapters/pi.d.ts.map +1 -0
  23. package/dist/commands/channel/adapters/pi.js +387 -0
  24. package/dist/commands/channel/adapters/pi.js.map +1 -0
  25. package/dist/commands/channel/adapters/types.d.ts +16 -0
  26. package/dist/commands/channel/adapters/types.d.ts.map +1 -1
  27. package/dist/commands/channel/agent-loader.d.ts +1 -0
  28. package/dist/commands/channel/agent-loader.d.ts.map +1 -1
  29. package/dist/commands/channel/agent-loader.js +45 -5
  30. package/dist/commands/channel/agent-loader.js.map +1 -1
  31. package/dist/commands/channel/dev-parse-trace.d.ts +1 -1
  32. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -1
  33. package/dist/commands/channel/dev-parse-trace.js +25 -2
  34. package/dist/commands/channel/dev-parse-trace.js.map +1 -1
  35. package/dist/commands/channel/index.d.ts.map +1 -1
  36. package/dist/commands/channel/index.js +44 -12
  37. package/dist/commands/channel/index.js.map +1 -1
  38. package/dist/commands/channel/run.d.ts +39 -2
  39. package/dist/commands/channel/run.d.ts.map +1 -1
  40. package/dist/commands/channel/run.js +227 -68
  41. package/dist/commands/channel/run.js.map +1 -1
  42. package/dist/commands/channel/spawn.d.ts +7 -2
  43. package/dist/commands/channel/spawn.d.ts.map +1 -1
  44. package/dist/commands/channel/spawn.js +35 -1
  45. package/dist/commands/channel/spawn.js.map +1 -1
  46. package/dist/commands/channel/store/events.d.ts +2 -2
  47. package/dist/commands/channel/store/events.d.ts.map +1 -1
  48. package/dist/commands/channel/store/events.js +1 -1
  49. package/dist/commands/channel/store/events.js.map +1 -1
  50. package/dist/commands/channel/supervisor/shutdown.d.ts +2 -0
  51. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -1
  52. package/dist/commands/channel/supervisor/shutdown.js +6 -1
  53. package/dist/commands/channel/supervisor/shutdown.js.map +1 -1
  54. package/dist/commands/channel/supervisor.d.ts +2 -2
  55. package/dist/commands/channel/supervisor.d.ts.map +1 -1
  56. package/dist/commands/channel/supervisor.js +26 -3
  57. package/dist/commands/channel/supervisor.js.map +1 -1
  58. package/dist/commands/init.d.ts.map +1 -1
  59. package/dist/commands/init.js +6 -1
  60. package/dist/commands/init.js.map +1 -1
  61. package/dist/commands/mem.d.ts +2 -1
  62. package/dist/commands/mem.d.ts.map +1 -1
  63. package/dist/commands/mem.js +162 -13
  64. package/dist/commands/mem.js.map +1 -1
  65. package/dist/commands/mode.d.ts.map +1 -1
  66. package/dist/commands/mode.js +5 -3
  67. package/dist/commands/mode.js.map +1 -1
  68. package/dist/commands/uninstall.d.ts +5 -3
  69. package/dist/commands/uninstall.d.ts.map +1 -1
  70. package/dist/commands/uninstall.js +40 -16
  71. package/dist/commands/uninstall.js.map +1 -1
  72. package/dist/commands/update.d.ts +34 -0
  73. package/dist/commands/update.d.ts.map +1 -1
  74. package/dist/commands/update.js +209 -11
  75. package/dist/commands/update.js.map +1 -1
  76. package/dist/commands/verify.d.ts +18 -0
  77. package/dist/commands/verify.d.ts.map +1 -0
  78. package/dist/commands/verify.js +75 -0
  79. package/dist/commands/verify.js.map +1 -0
  80. package/dist/configurators/index.d.ts.map +1 -1
  81. package/dist/configurators/index.js +3 -2
  82. package/dist/configurators/index.js.map +1 -1
  83. package/dist/configurators/omp.d.ts +22 -0
  84. package/dist/configurators/omp.d.ts.map +1 -1
  85. package/dist/configurators/omp.js +101 -2
  86. package/dist/configurators/omp.js.map +1 -1
  87. package/dist/configurators/shared.d.ts.map +1 -1
  88. package/dist/configurators/shared.js +39 -7
  89. package/dist/configurators/shared.js.map +1 -1
  90. package/dist/configurators/workflow.d.ts.map +1 -1
  91. package/dist/configurators/workflow.js +5 -1
  92. package/dist/configurators/workflow.js.map +1 -1
  93. package/dist/constants/paths.d.ts +4 -0
  94. package/dist/constants/paths.d.ts.map +1 -1
  95. package/dist/constants/paths.js +4 -0
  96. package/dist/constants/paths.js.map +1 -1
  97. package/dist/migrations/manifests/0.7.0.json +1378 -0
  98. package/dist/templates/atw/definition-of-done.md +65 -0
  99. package/dist/templates/atw/gitignore.txt +7 -0
  100. package/dist/templates/atw/index.d.ts +11 -0
  101. package/dist/templates/atw/index.d.ts.map +1 -1
  102. package/dist/templates/atw/index.js +22 -0
  103. package/dist/templates/atw/index.js.map +1 -1
  104. package/dist/templates/atw/scripts/common/active_task.py +2 -2
  105. package/dist/templates/atw/scripts/common/workflow_phase.py +33 -0
  106. package/dist/templates/atw/scripts/cross_model_review.py +3312 -0
  107. package/dist/templates/atw/scripts/decision_log.py +2002 -0
  108. package/dist/templates/atw/scripts/floor_guard.py +642 -0
  109. package/dist/templates/atw/scripts/task.py +25 -6
  110. package/dist/templates/atw/scripts/tickets.py +480 -10
  111. package/dist/templates/atw/workflow-general.md +6 -1
  112. package/dist/templates/atw/workflow.md +346 -26
  113. package/dist/templates/claude/settings.json +12 -0
  114. package/dist/templates/codex/hooks/session-start.py +2 -2
  115. package/dist/templates/common/bundled-skills/atw-askme/SKILL.md +1 -1
  116. package/dist/templates/common/bundled-skills/atw-askme-with-docs/SKILL.md +1 -1
  117. package/dist/templates/common/bundled-skills/atw-channel/SKILL.md +5 -2
  118. package/dist/templates/common/bundled-skills/atw-channel/references/command-reference.md +44 -5
  119. package/dist/templates/common/bundled-skills/atw-channel/references/progress-debugging.md +9 -0
  120. package/dist/templates/common/bundled-skills/atw-channel/references/workers.md +48 -4
  121. package/dist/templates/common/bundled-skills/atw-code-review/SKILL.md +78 -3
  122. package/dist/templates/common/bundled-skills/atw-codebase-design/SKILL.md +2 -2
  123. package/dist/templates/common/bundled-skills/atw-codebase-design/{DESIGN-IT-TWICE.md → design-it-twice.md} +3 -3
  124. package/dist/templates/common/bundled-skills/atw-cross-model-review/SKILL.md +361 -0
  125. package/dist/templates/common/bundled-skills/atw-cross-model-review/agents/openai.yaml +5 -0
  126. package/dist/templates/common/bundled-skills/atw-cross-model-review/references/four-tiers.md +42 -0
  127. package/dist/templates/common/bundled-skills/atw-cross-model-review/references/log-review-questions.md +38 -0
  128. package/dist/templates/common/bundled-skills/atw-cross-model-review/references/questions.md +54 -0
  129. package/dist/templates/common/bundled-skills/atw-cross-model-review/references/recheck-questions.md +42 -0
  130. package/dist/templates/common/bundled-skills/atw-cross-model-review/references/report-format.md +22 -0
  131. package/dist/templates/common/bundled-skills/atw-diagnosing-bugs/SKILL.md +13 -2
  132. package/dist/templates/common/bundled-skills/atw-domain-modeling/SKILL.md +2 -2
  133. package/dist/templates/common/bundled-skills/atw-handoff/SKILL.md +1 -1
  134. package/dist/templates/common/bundled-skills/atw-implement/SKILL.md +37 -1
  135. package/dist/templates/common/bundled-skills/atw-implement-all/SKILL.md +219 -24
  136. package/dist/templates/common/bundled-skills/atw-implement-spec/SKILL.md +237 -18
  137. package/dist/templates/common/bundled-skills/atw-improve-codebase-architecture/SKILL.md +2 -2
  138. package/dist/templates/common/bundled-skills/atw-init-repo/SKILL.md +1 -1
  139. package/dist/templates/common/bundled-skills/atw-init-repo/references/issue-tracker-atw-local.md +7 -1
  140. package/dist/templates/common/bundled-skills/atw-init-repo/references/issue-tracker-atw.md +7 -1
  141. package/dist/templates/common/bundled-skills/atw-map/SKILL.md +1 -1
  142. package/dist/templates/common/bundled-skills/atw-meta/SKILL.md +1 -1
  143. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/add-project-local-conventions.md +4 -3
  144. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-skills-or-commands.md +21 -16
  145. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/change-task-lifecycle.md +1 -1
  146. package/dist/templates/common/bundled-skills/atw-meta/references/customize-local/overview.md +1 -0
  147. package/dist/templates/common/bundled-skills/atw-meta/references/local-architecture/task-system.md +2 -1
  148. package/dist/templates/common/bundled-skills/atw-meta/references/platform-files/hooks-and-settings.md +1 -0
  149. package/dist/templates/common/bundled-skills/atw-noob-mode/SKILL.md +1 -1
  150. package/dist/templates/common/bundled-skills/atw-performance/SKILL.md +134 -0
  151. package/dist/templates/common/bundled-skills/atw-performance/agents/openai.yaml +3 -0
  152. package/dist/templates/common/bundled-skills/atw-performance/references/optimization-patterns.md +250 -0
  153. package/dist/templates/common/bundled-skills/atw-performance/references/performance-checklist.md +238 -0
  154. package/dist/templates/common/bundled-skills/atw-performance/references/performance-optimization.md +264 -0
  155. package/dist/templates/common/bundled-skills/atw-prototype/SKILL.md +3 -3
  156. package/dist/templates/common/bundled-skills/atw-prototype/{LOGIC.md → logic.md} +1 -1
  157. package/dist/templates/common/bundled-skills/atw-prototype/references/design-direction.md +1 -1
  158. package/dist/templates/common/bundled-skills/atw-prototype/references/style-explorer.md +1 -1
  159. package/dist/templates/common/bundled-skills/atw-prototype/{UI.md → ui.md} +4 -4
  160. package/dist/templates/common/bundled-skills/atw-reflect/SKILL.md +77 -0
  161. package/dist/templates/common/bundled-skills/atw-reflect/agents/openai.yaml +5 -0
  162. package/dist/templates/common/bundled-skills/atw-reflect/references/divergent-reviewer.md +38 -0
  163. package/dist/templates/common/bundled-skills/atw-reflect/references/judgment-reviewer.md +37 -0
  164. package/dist/templates/common/bundled-skills/atw-reflect/references/synthesizer.md +63 -0
  165. package/dist/templates/common/bundled-skills/atw-reflect/references/tooling-reviewer.md +48 -0
  166. package/dist/templates/common/bundled-skills/atw-security/SKILL.md +248 -0
  167. package/dist/templates/common/bundled-skills/atw-security/agents/openai.yaml +3 -0
  168. package/dist/templates/common/bundled-skills/atw-security/references/hardening-patterns.md +324 -0
  169. package/dist/templates/common/bundled-skills/atw-security/references/security-checklist.md +248 -0
  170. package/dist/templates/common/bundled-skills/atw-session-insight/SKILL.md +1 -1
  171. package/dist/templates/common/bundled-skills/atw-session-insight/references/cli-quick-reference.md +11 -2
  172. package/dist/templates/common/bundled-skills/atw-spec/SKILL.md +1 -1
  173. package/dist/templates/common/bundled-skills/atw-tdd/SKILL.md +25 -0
  174. package/dist/templates/common/bundled-skills/atw-tickets/SKILL.md +1 -1
  175. package/dist/templates/common/bundled-skills/atw-triage/SKILL.md +5 -5
  176. package/dist/templates/common/bundled-skills/atw-ui/SKILL.md +54 -1
  177. package/dist/templates/common/bundled-skills/atw-ui/references/accessibility-checklist.md +160 -0
  178. package/dist/templates/common/bundled-skills/atw-verify-skill/SKILL.md +58 -0
  179. package/dist/templates/common/bundled-skills/atw-verify-skill/agents/openai.yaml +5 -0
  180. package/dist/templates/common/bundled-skills/atw-verify-skill/references/feature-map-example/README.md +47 -0
  181. package/dist/templates/common/bundled-skills/atw-verify-skill/references/feature-map-example/create-note.md +39 -0
  182. package/dist/templates/common/bundled-skills/atw-verify-skill/references/feature-map-example/search.md +45 -0
  183. package/dist/templates/common/bundled-skills/atw-verify-skill/references/generate.md +107 -0
  184. package/dist/templates/common/bundled-skills/atw-verify-skill/references/health-check.md +100 -0
  185. package/dist/templates/common/bundled-skills/atw-verify-skill/references/verify-skill-template.md +99 -0
  186. package/dist/templates/common/bundled-skills/atw-what-happened/SKILL.md +49 -0
  187. package/dist/templates/common/bundled-skills/atw-what-happened/agents/openai.yaml +5 -0
  188. package/dist/templates/common/commands/finish-work.md +10 -1
  189. package/dist/templates/common/commands/start.md +3 -1
  190. package/dist/templates/common/skills/update-spec.md +40 -4
  191. package/dist/templates/copilot/hooks/session-start.py +2 -2
  192. package/dist/templates/dsh/DSH.md +2 -2
  193. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +10 -0
  194. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +10 -0
  195. package/dist/templates/omp/config.yml +15 -0
  196. package/dist/templates/omp/extensions/atw/index.ts.txt +135 -18
  197. package/dist/templates/omp/index.d.ts +1 -0
  198. package/dist/templates/omp/index.d.ts.map +1 -1
  199. package/dist/templates/omp/index.js +3 -0
  200. package/dist/templates/omp/index.js.map +1 -1
  201. package/dist/templates/opencode/lib/session-utils.js +4 -2
  202. package/dist/templates/opencode/plugins/inject-workflow-state.js +5 -1
  203. package/dist/templates/pi/extensions/atw/index.ts.txt +80 -7
  204. package/dist/templates/shared-hooks/index.d.ts +8 -1
  205. package/dist/templates/shared-hooks/index.d.ts.map +1 -1
  206. package/dist/templates/shared-hooks/index.js +8 -0
  207. package/dist/templates/shared-hooks/index.js.map +1 -1
  208. package/dist/templates/shared-hooks/inject-workflow-state.py +131 -14
  209. package/dist/templates/shared-hooks/session-start.py +4 -2
  210. package/dist/templates/shared-hooks/show-notice.py +135 -0
  211. package/dist/templates/snow/SNOW.md +1 -1
  212. package/dist/utils/initialized.d.ts +9 -0
  213. package/dist/utils/initialized.d.ts.map +1 -0
  214. package/dist/utils/initialized.js +24 -0
  215. package/dist/utils/initialized.js.map +1 -0
  216. package/dist/utils/managed-removal.d.ts +2 -0
  217. package/dist/utils/managed-removal.d.ts.map +1 -1
  218. package/dist/utils/managed-removal.js +23 -3
  219. package/dist/utils/managed-removal.js.map +1 -1
  220. package/dist/utils/optional-skills.d.ts +2 -0
  221. package/dist/utils/optional-skills.d.ts.map +1 -1
  222. package/dist/utils/optional-skills.js +1 -1
  223. package/dist/utils/optional-skills.js.map +1 -1
  224. package/dist/utils/template-hash.d.ts.map +1 -1
  225. package/dist/utils/template-hash.js +3 -0
  226. package/dist/utils/template-hash.js.map +1 -1
  227. package/dist/utils/uninstall-scrubbers.d.ts +10 -0
  228. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -1
  229. package/dist/utils/uninstall-scrubbers.js +50 -0
  230. package/dist/utils/uninstall-scrubbers.js.map +1 -1
  231. package/dist/utils/verify-entries.d.ts +51 -0
  232. package/dist/utils/verify-entries.d.ts.map +1 -0
  233. package/dist/utils/verify-entries.js +399 -0
  234. package/dist/utils/verify-entries.js.map +1 -0
  235. package/package.json +2 -2
  236. /package/dist/templates/common/bundled-skills/atw-codebase-design/{DEEPENING.md → deepening.md} +0 -0
  237. /package/dist/templates/common/bundled-skills/atw-domain-modeling/{ADR-FORMAT.md → adr-format.md} +0 -0
  238. /package/dist/templates/common/bundled-skills/atw-domain-modeling/{GLOSSARY-FORMAT.md → glossary-format.md} +0 -0
  239. /package/dist/templates/common/bundled-skills/atw-improve-codebase-architecture/{HTML-REPORT.md → html-report.md} +0 -0
  240. /package/dist/templates/common/bundled-skills/atw-triage/{AGENT-BRIEF.md → agent-brief.md} +0 -0
  241. /package/dist/templates/common/bundled-skills/atw-triage/{OUT-OF-SCOPE.md → out-of-scope.md} +0 -0
@@ -0,0 +1,106 @@
1
+ import type { ParseResult, WorkerModes } from "./types.js";
2
+ /**
3
+ * omp `--mode rpc --no-ui` adapter (one JSON object per line both ways, not
4
+ * JSON-RPC). The event frames are pi's (omp is a pi fork), so the frame
5
+ * helpers are shared with `pi.ts`; turn ends, interrupts and startup differ.
6
+ *
7
+ * Wire shape (research/pi-omp-channel-workers.md 1.2, research/tools-side-pi-omp.md
8
+ * 2.2 / 3.2 / 4.2; command names checked against the omp 18.10.3 binary):
9
+ *
10
+ * Startup: omp writes `ready` before it handles commands.
11
+ * Outbound: set_event_filter (messageUpdates "delta") → get_available_thinking_levels
12
+ * (only with --effort) → get_state → get_session_stats (cost baseline)
13
+ * → prompt per user message; abort_and_prompt for an interrupt.
14
+ * Inbound:
15
+ * ready → handshake may start
16
+ * response get_state → persistSessionId + progress(kind=model)
17
+ * response prompt/abort_and_prompt success:false (current) → error
18
+ * response prompt data.agentInvoked:false (current) → handled locally, no prompt_result follows: turn over
19
+ * prompt_result, id = current prompt → turn over: ask get_session_stats, then done / error
20
+ * prompt_result, id = interrupted → progress(turn_cost, unreported when 0) only
21
+ * response get_session_stats → progress(token_usage) + progress(turn_cost) + held done/error
22
+ * message_update text_delta → progress(kind=output, stream_id omp-<messageId>)
23
+ * message_end assistant → say(all text blocks joined); adds usage.cost.total to the turn
24
+ * tool_execution_start → progress(tool, input_summary)
25
+ * extension_ui_request (dialog) → reply cancelled
26
+ *
27
+ * Every accepted prompt ends with exactly one `prompt_result` carrying its
28
+ * id. `abort_and_prompt` aborts and starts the replacement in one command;
29
+ * the interrupted prompt's own `prompt_result{status:"aborted"}` arrives
30
+ * before the new turn starts, and must not end the turn the supervisor has
31
+ * already begun. Until it arrives, frames belong to the interrupted turn.
32
+ */
33
+ export interface OmpCtx {
34
+ nextId: number;
35
+ /** omp's `ready` frame has arrived. */
36
+ started: boolean;
37
+ filterSeen: boolean;
38
+ levels?: string[];
39
+ stateSeen: boolean;
40
+ /** Set by the handshake once everything above has answered. */
41
+ ready: boolean;
42
+ /** Last `get_session_stats.cost` reading; undefined until known. */
43
+ statsCost?: number;
44
+ baseSeen: boolean;
45
+ /** Id of the prompt whose `prompt_result` ends the running turn. */
46
+ current?: string;
47
+ /** Id of an interrupted prompt whose `prompt_result` is still to come. */
48
+ interrupted?: string;
49
+ streamSeq: number;
50
+ turnCost: number;
51
+ lastErrorMessage?: string;
52
+ /** Finished turn whose terminal event waits for get_session_stats. */
53
+ held?: {
54
+ statsId: string;
55
+ messageCost: number;
56
+ aborted: boolean;
57
+ failed: boolean;
58
+ errorMessage?: string;
59
+ stale: boolean;
60
+ };
61
+ }
62
+ export declare function createOmpCtx(): OmpCtx;
63
+ /**
64
+ * Keep every event type (prompt_result and responses are never filtered) but
65
+ * drop the cumulative `partial` snapshot from `message_update`: in the
66
+ * default mode four sentences made 0.5 MB of stdout (omp-1).
67
+ */
68
+ export declare function encodeOmpEventFilter(): string;
69
+ export declare function encodeOmpLevelsRequest(): string;
70
+ export declare function encodeOmpStateRequest(): string;
71
+ export declare function encodeOmpBaseStatsRequest(): string;
72
+ export declare function encodeOmpUserMessage(ctx: OmpCtx, text: string): string;
73
+ /**
74
+ * Running turn → one `abort_and_prompt`. Idle (or finished but still waiting
75
+ * for stats) → a plain prompt; a held terminal belongs to the old turn and
76
+ * must not end the new one.
77
+ */
78
+ export declare function encodeOmpInterruptMessage(ctx: OmpCtx, text: string): string;
79
+ export declare function parseOmpLine(line: string, ctx: OmpCtx): ParseResult;
80
+ /**
81
+ * Settings for omp's `--config` overlay, built per run from the switches
82
+ * and the model; undefined when nothing needs overriding.
83
+ */
84
+ export declare function buildOmpConfigOverlay(view: WorkerModes & {
85
+ model?: string;
86
+ }): Record<string, unknown> | undefined;
87
+ /** The overlay file's text: JSON is valid YAML, which is how omp reads `--config`. */
88
+ export declare function renderOmpConfigOverlay(overlay: Record<string, unknown>): string;
89
+ export declare function buildOmpArgs(opts: {
90
+ resumeSessionId?: string;
91
+ model?: string;
92
+ systemPrompt?: string;
93
+ systemPromptFile?: string;
94
+ configOverlayFile?: string;
95
+ modes?: WorkerModes;
96
+ }): string[];
97
+ /**
98
+ * `omp --help` 18.10.3 `--thinking`, minus `auto`: it asks the `judge` model
99
+ * to grade every request first (research tools-side 2.2).
100
+ */
101
+ export declare const OMP_EFFORT_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
102
+ export declare function validateOmpModes(modes: WorkerModes & {
103
+ resume?: string;
104
+ model?: string;
105
+ }): void;
106
+ //# sourceMappingURL=omp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omp.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/adapters/omp.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAgB,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,KAAK,EAAE,OAAO,CAAC;IACf,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,sEAAsE;IACtE,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,OAAO,CAAC;QAChB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,wBAAgB,YAAY,IAAI,MAAM,CAWrC;AAWD;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAK7C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAkBD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK3E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CA8CnE;AAuND;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAsBrC;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAER;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB,GAAG,MAAM,EAAE,CA0CX;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,sEAQpB,CAAC;AAEX,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,IAAI,CAwBN"}
@@ -0,0 +1,405 @@
1
+ import { assistantText, cancelDialog, costEvent, isObject, modelEvents, takeTurnCost, tokenUsageEvents, toolProgress, } from "./pi.js";
2
+ export function createOmpCtx() {
3
+ return {
4
+ nextId: 1,
5
+ started: false,
6
+ filterSeen: false,
7
+ stateSeen: false,
8
+ ready: false,
9
+ baseSeen: false,
10
+ streamSeq: 0,
11
+ turnCost: 0,
12
+ };
13
+ }
14
+ const FILTER_ID = "atw-filter";
15
+ const LEVELS_ID = "atw-levels";
16
+ const STATE_ID = "atw-state";
17
+ const BASE_STATS_ID = "atw-stats-base";
18
+ function command(id, type, extra = {}) {
19
+ return JSON.stringify({ id, type, ...extra }) + "\n";
20
+ }
21
+ /**
22
+ * Keep every event type (prompt_result and responses are never filtered) but
23
+ * drop the cumulative `partial` snapshot from `message_update`: in the
24
+ * default mode four sentences made 0.5 MB of stdout (omp-1).
25
+ */
26
+ export function encodeOmpEventFilter() {
27
+ return command(FILTER_ID, "set_event_filter", {
28
+ events: null,
29
+ messageUpdates: "delta",
30
+ });
31
+ }
32
+ export function encodeOmpLevelsRequest() {
33
+ return command(LEVELS_ID, "get_available_thinking_levels");
34
+ }
35
+ export function encodeOmpStateRequest() {
36
+ return command(STATE_ID, "get_state");
37
+ }
38
+ export function encodeOmpBaseStatsRequest() {
39
+ return command(BASE_STATS_ID, "get_session_stats");
40
+ }
41
+ /**
42
+ * omp runs a prompt that starts with `/` as a built-in or custom command
43
+ * (omp-4: `/tools` printed the tool list, no model call). Every check is a
44
+ * plain `startsWith("/")` on the raw text, so a leading space keeps it a
45
+ * message for the model.
46
+ */
47
+ function escapeSlash(text) {
48
+ return text.startsWith("/") ? ` ${text}` : text;
49
+ }
50
+ function promptCommand(ctx, type, text) {
51
+ const id = `atw-prompt-${ctx.nextId++}`;
52
+ ctx.current = id;
53
+ return command(id, type, { message: escapeSlash(text) });
54
+ }
55
+ export function encodeOmpUserMessage(ctx, text) {
56
+ return promptCommand(ctx, "prompt", text);
57
+ }
58
+ /**
59
+ * Running turn → one `abort_and_prompt`. Idle (or finished but still waiting
60
+ * for stats) → a plain prompt; a held terminal belongs to the old turn and
61
+ * must not end the new one.
62
+ */
63
+ export function encodeOmpInterruptMessage(ctx, text) {
64
+ if (ctx.held)
65
+ ctx.held.stale = true;
66
+ if (!ctx.current)
67
+ return promptCommand(ctx, "prompt", text);
68
+ ctx.interrupted = ctx.current;
69
+ return promptCommand(ctx, "abort_and_prompt", text);
70
+ }
71
+ export function parseOmpLine(line, ctx) {
72
+ const trimmed = line.trim();
73
+ if (!trimmed)
74
+ return { events: [] };
75
+ let msg;
76
+ try {
77
+ msg = JSON.parse(trimmed);
78
+ }
79
+ catch {
80
+ return {
81
+ events: [
82
+ {
83
+ kind: "error",
84
+ payload: {
85
+ message: "Failed to parse omp stdout line",
86
+ raw_excerpt: trimmed.slice(0, 200),
87
+ },
88
+ },
89
+ ],
90
+ };
91
+ }
92
+ if (!isObject(msg))
93
+ return { events: [] };
94
+ switch (msg.type) {
95
+ case "ready":
96
+ ctx.started = true;
97
+ return { events: [] };
98
+ case "response":
99
+ return handleResponse(msg, ctx);
100
+ case "prompt_result":
101
+ return handlePromptResult(msg, ctx);
102
+ case "message_start":
103
+ if (isObject(msg.message) && msg.message.role === "assistant") {
104
+ ctx.streamSeq += 1;
105
+ }
106
+ return { events: [] };
107
+ case "message_update":
108
+ return handleMessageUpdate(msg, ctx);
109
+ case "message_end":
110
+ return handleMessageEnd(msg, ctx);
111
+ case "tool_execution_start":
112
+ if (ctx.interrupted)
113
+ return { events: [] };
114
+ return toolProgress(msg);
115
+ case "extension_ui_request":
116
+ return cancelDialog(msg);
117
+ default:
118
+ return { events: [] };
119
+ }
120
+ }
121
+ function handleResponse(msg, ctx) {
122
+ const data = isObject(msg.data) ? msg.data : {};
123
+ if (msg.id === FILTER_ID) {
124
+ ctx.filterSeen = true;
125
+ return { events: [] };
126
+ }
127
+ if (msg.id === LEVELS_ID) {
128
+ ctx.levels = Array.isArray(data.levels)
129
+ ? data.levels.filter((l) => typeof l === "string")
130
+ : [];
131
+ return { events: [] };
132
+ }
133
+ if (msg.id === STATE_ID) {
134
+ ctx.stateSeen = true;
135
+ const events = modelEvents(data);
136
+ const sessionId = data.sessionId;
137
+ return typeof sessionId === "string" && sessionId
138
+ ? { events, side: { persistSessionId: sessionId } }
139
+ : { events };
140
+ }
141
+ if (msg.id === BASE_STATS_ID) {
142
+ ctx.baseSeen = true;
143
+ if (typeof data.cost === "number")
144
+ ctx.statsCost = data.cost;
145
+ return { events: [] };
146
+ }
147
+ if (ctx.held && msg.id === ctx.held.statsId) {
148
+ return finishHeld(data, ctx);
149
+ }
150
+ if (msg.id !== undefined && msg.id === ctx.current) {
151
+ if (msg.success === false) {
152
+ ctx.current = undefined;
153
+ ctx.interrupted = undefined;
154
+ const error = typeof msg.error === "string" ? msg.error : "";
155
+ return {
156
+ events: [
157
+ {
158
+ kind: "error",
159
+ payload: { message: error || "omp rejected the prompt" },
160
+ },
161
+ ],
162
+ };
163
+ }
164
+ // 在本地处理掉的输入(例如空消息)不会再有 prompt_result,这一轮就此结束。
165
+ if (data.agentInvoked === false)
166
+ return endTurn(ctx, "completed");
167
+ }
168
+ return { events: [] };
169
+ }
170
+ function handlePromptResult(msg, ctx) {
171
+ if (ctx.interrupted && msg.id === ctx.interrupted) {
172
+ // 被我们打断的那一轮:supervisor 已开始新一轮,只交出它的花费。
173
+ ctx.interrupted = undefined;
174
+ const cost = takeTurnCost(ctx, ctx.turnCost);
175
+ ctx.turnCost = 0;
176
+ ctx.lastErrorMessage = undefined;
177
+ return { events: [costEvent(cost, true)] };
178
+ }
179
+ if (!ctx.current || msg.id !== ctx.current)
180
+ return { events: [] };
181
+ const error = isObject(msg.error) ? msg.error.message : msg.error;
182
+ return endTurn(ctx, String(msg.status), typeof error === "string" && error ? error : undefined);
183
+ }
184
+ function endTurn(ctx, status, error) {
185
+ const messageCost = ctx.turnCost;
186
+ const errorMessage = error ?? ctx.lastErrorMessage;
187
+ ctx.turnCost = 0;
188
+ ctx.lastErrorMessage = undefined;
189
+ ctx.current = undefined;
190
+ const statsId = `atw-stats-${ctx.nextId++}`;
191
+ ctx.held = {
192
+ statsId,
193
+ messageCost,
194
+ aborted: status === "aborted",
195
+ failed: status !== "completed" && status !== "aborted",
196
+ errorMessage,
197
+ stale: false,
198
+ };
199
+ return {
200
+ events: [],
201
+ side: { reply: [command(statsId, "get_session_stats")] },
202
+ };
203
+ }
204
+ function finishHeld(data, ctx) {
205
+ const held = ctx.held;
206
+ if (!held)
207
+ return { events: [] };
208
+ ctx.held = undefined;
209
+ const events = tokenUsageEvents(data);
210
+ const turnCost = takeTurnCost(ctx, held.messageCost, typeof data.cost === "number" ? data.cost : undefined);
211
+ events.push(costEvent(turnCost, held.aborted));
212
+ // 打断撞上取花费的空当:这一轮已被 supervisor 记为打断,不再发结束事件。
213
+ if (held.stale)
214
+ return { events };
215
+ const terminal = held.aborted || held.failed
216
+ ? {
217
+ kind: "error",
218
+ payload: {
219
+ message: held.errorMessage ??
220
+ (held.aborted ? "omp aborted the turn" : "omp turn failed"),
221
+ },
222
+ }
223
+ : { kind: "done", payload: { total_cost_usd: turnCost } };
224
+ events.push(terminal);
225
+ return { events };
226
+ }
227
+ function handleMessageUpdate(msg, ctx) {
228
+ if (ctx.interrupted)
229
+ return { events: [] };
230
+ const ev = msg.assistantMessageEvent;
231
+ if (!isObject(ev) || ev.type !== "text_delta")
232
+ return { events: [] };
233
+ if (typeof ev.delta !== "string" || !ev.delta)
234
+ return { events: [] };
235
+ const stream = typeof msg.messageId === "string" && msg.messageId
236
+ ? msg.messageId
237
+ : `seq-${ctx.streamSeq}`;
238
+ const detail = {
239
+ kind: "output",
240
+ text_delta: ev.delta,
241
+ stream_id: `omp-${stream}`,
242
+ };
243
+ return { events: [{ kind: "progress", payload: { detail } }] };
244
+ }
245
+ function handleMessageEnd(msg, ctx) {
246
+ const message = isObject(msg.message) ? msg.message : undefined;
247
+ if (message?.role !== "assistant")
248
+ return { events: [] };
249
+ const usage = isObject(message.usage) ? message.usage : undefined;
250
+ const cost = usage && isObject(usage.cost) ? usage.cost.total : undefined;
251
+ if (typeof cost === "number")
252
+ ctx.turnCost += cost;
253
+ if (typeof message.errorMessage === "string") {
254
+ ctx.lastErrorMessage = message.errorMessage;
255
+ }
256
+ // 被打断的半截消息不当回答发出;半截文字已在增量里。
257
+ if (ctx.interrupted || message.stopReason === "aborted") {
258
+ return { events: [] };
259
+ }
260
+ const text = assistantText(message);
261
+ return text
262
+ ? { events: [{ kind: "message", payload: { text } }] }
263
+ : { events: [] };
264
+ }
265
+ /** Every chat role (research 01 3.2), plus `judge`, which TTSR and `auto` thinking call. */
266
+ const OMP_PINNED_ROLES = [
267
+ "default",
268
+ "smol",
269
+ "slow",
270
+ "plan",
271
+ "vision",
272
+ "commit",
273
+ "tiny",
274
+ "memory",
275
+ "task",
276
+ "advisor",
277
+ "judge",
278
+ ];
279
+ /**
280
+ * Discovery sources off in a clean environment: user and project context
281
+ * files (`AGENTS.md`, `CLAUDE.md`), MCP servers, other tools' plugins.
282
+ * Arrays in an overlay replace the lower layer, so the list is complete
283
+ * (research 01 3.2, measured: only read/grep/glob left, no context files).
284
+ */
285
+ const OMP_CLEAN_DISABLED_PROVIDERS = [
286
+ "native",
287
+ "claude",
288
+ "claude-plugins",
289
+ "codex",
290
+ "cursor",
291
+ "gemini",
292
+ "opencode",
293
+ "vscode",
294
+ "windsurf",
295
+ "mcp-json",
296
+ "agents",
297
+ "agents-md",
298
+ "claude-md",
299
+ "github",
300
+ "cline",
301
+ "omp-plugins",
302
+ "agent-plugins",
303
+ "custom-context",
304
+ "ssh-json",
305
+ "builtin-defaults",
306
+ ];
307
+ /** A reviewer: read-only and clean together. Only then are omp's helper roles pinned. */
308
+ function isReviewer(modes) {
309
+ return Boolean(modes.readOnly && modes.clean);
310
+ }
311
+ /**
312
+ * Settings for omp's `--config` overlay, built per run from the switches
313
+ * and the model; undefined when nothing needs overriding.
314
+ */
315
+ export function buildOmpConfigOverlay(view) {
316
+ const overlay = {};
317
+ if (view.clean) {
318
+ overlay.disabledProviders = [...OMP_CLEAN_DISABLED_PROVIDERS];
319
+ }
320
+ // 只给 read 不给 write 时,omp 会为 MCP 与扩展工具挂一条 xd:// 写通道。
321
+ if (view.readOnly)
322
+ overlay.tools = { xdev: false };
323
+ if (isReviewer(view) && view.model) {
324
+ // 不论用户配置里的角色是否可用,一律钉成复查员的模型,也不许换模型重试。
325
+ overlay.modelRoles = Object.fromEntries(OMP_PINNED_ROLES.map((role) => [role, view.model]));
326
+ overlay.retry = { modelFallback: false };
327
+ overlay.ttsr = { enabled: false, judge: "off" };
328
+ overlay.compaction = { enabled: false };
329
+ }
330
+ if (view.standardSpeed) {
331
+ // 快速档就是这几项设成 priority(Claude 的 fast mode 也走 tier.anthropic)。
332
+ overlay.tier = { openai: "none", anthropic: "none", google: "none" };
333
+ overlay.providers = { fireworksTier: "standard" };
334
+ }
335
+ return Object.keys(overlay).length > 0 ? overlay : undefined;
336
+ }
337
+ /** The overlay file's text: JSON is valid YAML, which is how omp reads `--config`. */
338
+ export function renderOmpConfigOverlay(overlay) {
339
+ return JSON.stringify(overlay, null, 2) + "\n";
340
+ }
341
+ export function buildOmpArgs(opts) {
342
+ const modes = opts.modes ?? {};
343
+ // --no-ui:要批准的工具直接失败,不会挂起等一个没人回答的弹窗。
344
+ const args = ["--mode", "rpc", "--no-ui"];
345
+ if (modes.readOnly) {
346
+ args.push("--tools", "read,grep,glob", "--approval-mode", "always-ask");
347
+ }
348
+ else {
349
+ // 默认可写,与 Claude 对接的全部放行相当,不受用户设的审批模式影响。
350
+ args.push("--approval-mode", "yolo");
351
+ }
352
+ if (modes.clean) {
353
+ args.push("--no-extensions", "--no-skills", "--no-rules", "--no-lsp", "--no-title");
354
+ }
355
+ if (modes.noSession)
356
+ args.push("--no-session");
357
+ if (modes.effort)
358
+ args.push("--thinking", modes.effort);
359
+ if (opts.resumeSessionId)
360
+ args.push("--resume", opts.resumeSessionId);
361
+ if (opts.model) {
362
+ args.push("--model", opts.model);
363
+ if (isReviewer(modes)) {
364
+ args.push("--smol", opts.model, "--slow", opts.model, "--plan", opts.model);
365
+ }
366
+ }
367
+ if (opts.configOverlayFile)
368
+ args.push("--config", opts.configOverlayFile);
369
+ if (opts.systemPromptFile) {
370
+ args.push("--append-system-prompt", opts.systemPromptFile);
371
+ }
372
+ else if (opts.systemPrompt?.trim()) {
373
+ args.push("--append-system-prompt", opts.systemPrompt);
374
+ }
375
+ return args;
376
+ }
377
+ /**
378
+ * `omp --help` 18.10.3 `--thinking`, minus `auto`: it asks the `judge` model
379
+ * to grade every request first (research tools-side 2.2).
380
+ */
381
+ export const OMP_EFFORT_LEVELS = [
382
+ "off",
383
+ "minimal",
384
+ "low",
385
+ "medium",
386
+ "high",
387
+ "xhigh",
388
+ "max",
389
+ ];
390
+ export function validateOmpModes(modes) {
391
+ if (modes.resume && modes.noSession) {
392
+ throw new Error("omp: --resume cannot be combined with --no-session (an unsaved session cannot be resumed)");
393
+ }
394
+ if (modes.effort === "auto") {
395
+ throw new Error("omp: --effort 'auto' is not allowed: omp would call its judge model to pick a level for every request");
396
+ }
397
+ if (modes.effort !== undefined &&
398
+ !OMP_EFFORT_LEVELS.includes(modes.effort)) {
399
+ throw new Error(`Invalid --effort '${modes.effort}' for omp. Must be one of: ${OMP_EFFORT_LEVELS.join(", ")}`);
400
+ }
401
+ if (isReviewer(modes) && !modes.model) {
402
+ throw new Error("omp: --read-only with --clean needs --model (every helper role is pinned to the reviewer's model)");
403
+ }
404
+ }
405
+ //# sourceMappingURL=omp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"omp.js","sourceRoot":"","sources":["../../../../src/commands/channel/adapters/omp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,123 @@
1
+ import type { AdapterEvent, ParseResult, WorkerModes } from "./types.js";
2
+ /**
3
+ * pi `--mode rpc` adapter (one JSON object per line both ways, not JSON-RPC).
4
+ *
5
+ * Wire shape (real data — research/pi-omp-channel-workers.md 1.1,
6
+ * research/tools-side-pi-omp.md 3.1 / 4.1):
7
+ *
8
+ * Outbound: get_available_thinking_levels (only with --effort) → get_state
9
+ * → get_session_stats (cost baseline) → prompt per user message;
10
+ * abort → prompt for an interrupt.
11
+ * Inbound:
12
+ * response get_state → persistSessionId + progress(kind=model)
13
+ * response prompt success:false → error
14
+ * response abort (ours) → reply the held replacement prompt
15
+ * response get_session_stats → progress(token_usage) + progress(turn_cost) + held done/error
16
+ * message_start assistant → new output stream
17
+ * message_update text_delta → progress(kind=output, stream_id, text_delta)
18
+ * message_end assistant → say(all text blocks joined, as pi's get_last_assistant_text); adds usage.cost.total to the turn
19
+ * tool_execution_start → progress(tool, input_summary)
20
+ * agent_settled → turn over: ask get_session_stats, then done / error
21
+ * extension_ui_request (dialog) → reply cancelled
22
+ *
23
+ * A turn ends at `agent_settled`, not `agent_end` (retries and queued work
24
+ * can follow `agent_end`). pi rejects a prompt sent while a turn is running,
25
+ * so an interrupt is two-phase: send `abort`, swallow the old turn's
26
+ * `agent_settled{aborted:true}` (the supervisor has already started the new
27
+ * turn), and send the replacement prompt once the abort response is back.
28
+ *
29
+ * Cost: `get_session_stats.cost` is the session's running total of every
30
+ * `usage.cost.total` — assistant messages plus tool-reported usage and
31
+ * compaction / branch summaries (research/tools-side-pi-omp.md 3.1), so a
32
+ * turn's cost is its growth since the previous reading; the handshake takes
33
+ * the first reading (a resumed session starts above 0). The turn's
34
+ * `message_end` costs are the fallback when stats carry no number, and stand
35
+ * in for an interrupted turn, which gets no stats request of its own.
36
+ */
37
+ export interface PiCtx {
38
+ nextId: number;
39
+ /** Set by the handshake once get_state has answered. */
40
+ ready: boolean;
41
+ /** get_available_thinking_levels answer for the handshake. */
42
+ levels?: string[];
43
+ stateSeen: boolean;
44
+ /** Last `get_session_stats.cost` reading; undefined until known. */
45
+ statsCost?: number;
46
+ baseSeen: boolean;
47
+ /** A prompt was sent and its turn has not settled yet. */
48
+ active: boolean;
49
+ /** Abort sent; the replacement prompt waits for the abort response. */
50
+ abort?: {
51
+ id: string;
52
+ prompt: string;
53
+ };
54
+ streamSeq: number;
55
+ turnCost: number;
56
+ lastStopReason?: string;
57
+ lastErrorMessage?: string;
58
+ /** Settled turn whose terminal event waits for get_session_stats. */
59
+ held?: {
60
+ statsId: string;
61
+ messageCost: number;
62
+ aborted: boolean;
63
+ failed: boolean;
64
+ errorMessage?: string;
65
+ stale: boolean;
66
+ };
67
+ }
68
+ export declare function createPiCtx(): PiCtx;
69
+ export declare function encodePiLevelsRequest(): string;
70
+ export declare function encodePiStateRequest(): string;
71
+ export declare function encodePiBaseStatsRequest(): string;
72
+ export declare function encodePiUserMessage(ctx: PiCtx, text: string): string;
73
+ /**
74
+ * Running turn → `abort` now, replacement prompt after its response. Idle
75
+ * (or settled but still waiting for stats) → the prompt goes straight out;
76
+ * a held terminal belongs to the old turn and must not end the new one.
77
+ */
78
+ export declare function encodePiInterruptMessage(ctx: PiCtx, text: string): string;
79
+ export declare function isObject(x: unknown): x is Record<string, unknown>;
80
+ export declare function parsePiLine(line: string, ctx: PiCtx): ParseResult;
81
+ /** Tool calls become progress (pi and omp share the `tool_execution_start` frame). */
82
+ export declare function toolProgress(msg: Record<string, unknown>): ParseResult;
83
+ /** A dialog `extension_ui_request` would block until answered: answer it cancelled. */
84
+ export declare function cancelDialog(msg: Record<string, unknown>): ParseResult;
85
+ /** `get_state.model` as `provider/id` (pi and omp). */
86
+ export declare function modelEvents(data: Record<string, unknown>): AdapterEvent[];
87
+ /** `get_session_stats.tokens` (pi and omp). */
88
+ export declare function tokenUsageEvents(data: Record<string, unknown>): AdapterEvent[];
89
+ /** All text blocks of one assistant message joined, as pi's get_last_assistant_text. */
90
+ export declare function assistantText(message: Record<string, unknown>): string;
91
+ /**
92
+ * The turn's cost: growth of the stats running total when both readings are
93
+ * known, otherwise the turn's `message_end` costs (which also advance the
94
+ * remembered total, so the next reading is not counted twice).
95
+ */
96
+ export declare function takeTurnCost(ctx: {
97
+ statsCost?: number;
98
+ }, messageCost: number, statsCost?: number): number;
99
+ /** pi reports 0 for an interrupted turn (measured, S2) although it did cost. */
100
+ export declare function costEvent(cost: number, interrupted: boolean): AdapterEvent;
101
+ /** Prompt files and text both go through `--append-system-prompt` (pi reads a path's contents). */
102
+ export declare function buildPiArgs(opts: {
103
+ resumeSessionId?: string;
104
+ model?: string;
105
+ systemPrompt?: string;
106
+ systemPromptFile?: string;
107
+ modes?: WorkerModes;
108
+ }): string[];
109
+ /** `pi --help` 1.2.0 `--thinking`. Which of these a model has is checked in the handshake. */
110
+ export declare const PI_EFFORT_LEVELS: readonly ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
111
+ /**
112
+ * pi only warns on an unknown `--thinking` and falls back to the default.
113
+ * `--session-id` (resume) and `--no-session` cannot be combined.
114
+ */
115
+ export declare function validatePiModes(modes: WorkerModes & {
116
+ resume?: string;
117
+ }): void;
118
+ /**
119
+ * pi (and omp) silently clamp a level the model lacks to the nearest one it
120
+ * has, so the handshake refuses it before any message reaches the model.
121
+ */
122
+ export declare function checkPiEffortForModel(effort: string, levels: string[], model: string | undefined, tool?: "pi" | "omp"): void;
123
+ //# sourceMappingURL=pi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/adapters/pi.ts"],"names":[],"mappings":"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"}