dsh-cliworker-now 0.0.0-stage → 0.7.7

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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +364 -0
  3. package/README.md +368 -2
  4. package/cordis.patch.yml +3 -0
  5. package/lib/account-models.mjs +262 -0
  6. package/lib/client.js +22139 -0
  7. package/lib/client.js.map +1 -0
  8. package/lib/grok-catalog.mjs +145 -0
  9. package/lib/hermes-native-entry.py +96 -0
  10. package/lib/hermes-nous-refresh.py +331 -0
  11. package/lib/index.js +14544 -0
  12. package/lib/index.js.map +1 -0
  13. package/lib/native-launch.mjs +234 -0
  14. package/lib/native-spawn.mjs +32 -0
  15. package/lib/own-account-lease.mjs +105 -0
  16. package/lib/pi-installation.mjs +87 -0
  17. package/lib/pi-login.mjs +80 -0
  18. package/lib/pi-native-catalog.mjs +417 -0
  19. package/lib/pi-omp-bridge.mjs +602 -0
  20. package/lib/pi-omp-environment.mjs +15 -0
  21. package/lib/pi-omp-refresh.mjs +324 -0
  22. package/lib/private-launch.mjs +23 -0
  23. package/lib/terminal-bridge.mjs +18 -0
  24. package/lib/typert.host.d.ts +3 -0
  25. package/lib/typert.host.js +1430 -0
  26. package/lib/typert.remote-client.d.ts +72 -0
  27. package/lib/typert.remote-client.d.ts.map +1 -0
  28. package/lib/typert.remote-client.js +1256 -0
  29. package/lib/types/client/account-query-queue.d.ts +16 -0
  30. package/lib/types/client/account-query-queue.js +61 -0
  31. package/lib/types/client/account-query-queue.js.map +1 -0
  32. package/lib/types/client/account-terminal-css.d.ts +1 -0
  33. package/lib/types/client/account-terminal-css.js +3 -0
  34. package/lib/types/client/account-terminal-css.js.map +1 -0
  35. package/lib/types/client/account-terminal.d.ts +17 -0
  36. package/lib/types/client/account-terminal.js +525 -0
  37. package/lib/types/client/account-terminal.js.map +1 -0
  38. package/lib/types/client/assets/antigravity.png +0 -0
  39. package/lib/types/client/assets/claude-code.png +0 -0
  40. package/lib/types/client/assets/cliworker-now-logo.png +0 -0
  41. package/lib/types/client/assets/codex.png +0 -0
  42. package/lib/types/client/assets/grok.png +0 -0
  43. package/lib/types/client/assets/hermes.png +0 -0
  44. package/lib/types/client/assets/kimi-dark.png +0 -0
  45. package/lib/types/client/assets/kimi-light.png +0 -0
  46. package/lib/types/client/assets/mimo-code.png +0 -0
  47. package/lib/types/client/assets/omp.png +0 -0
  48. package/lib/types/client/assets/opencode.png +0 -0
  49. package/lib/types/client/assets/pi.png +0 -0
  50. package/lib/types/client/assets/zcode.png +0 -0
  51. package/lib/types/client/composer-keymap.d.ts +18 -0
  52. package/lib/types/client/composer-keymap.js +49 -0
  53. package/lib/types/client/composer-keymap.js.map +1 -0
  54. package/lib/types/client/conversation-timeline.d.ts +6 -0
  55. package/lib/types/client/conversation-timeline.js +65 -0
  56. package/lib/types/client/conversation-timeline.js.map +1 -0
  57. package/lib/types/client/copy-text.d.ts +5 -0
  58. package/lib/types/client/copy-text.js +45 -0
  59. package/lib/types/client/copy-text.js.map +1 -0
  60. package/lib/types/client/icons.d.ts +21 -0
  61. package/lib/types/client/icons.js +68 -0
  62. package/lib/types/client/icons.js.map +1 -0
  63. package/lib/types/client/index.d.ts +3 -0
  64. package/lib/types/client/index.js +124 -0
  65. package/lib/types/client/index.js.map +1 -0
  66. package/lib/types/client/management-styles.d.ts +1 -0
  67. package/lib/types/client/management-styles.js +17 -0
  68. package/lib/types/client/management-styles.js.map +1 -0
  69. package/lib/types/client/name-copy.d.ts +5 -0
  70. package/lib/types/client/name-copy.js +107 -0
  71. package/lib/types/client/name-copy.js.map +1 -0
  72. package/lib/types/client/native-job-overlay.d.ts +11 -0
  73. package/lib/types/client/native-job-overlay.js +129 -0
  74. package/lib/types/client/native-job-overlay.js.map +1 -0
  75. package/lib/types/client/operation-error.d.ts +2 -0
  76. package/lib/types/client/operation-error.js +12 -0
  77. package/lib/types/client/operation-error.js.map +1 -0
  78. package/lib/types/client/panel.d.ts +8 -0
  79. package/lib/types/client/panel.js +310 -0
  80. package/lib/types/client/panel.js.map +1 -0
  81. package/lib/types/client/rename-copy-styles.d.ts +1 -0
  82. package/lib/types/client/rename-copy-styles.js +21 -0
  83. package/lib/types/client/rename-copy-styles.js.map +1 -0
  84. package/lib/types/client/rename-worker.d.ts +9 -0
  85. package/lib/types/client/rename-worker.js +53 -0
  86. package/lib/types/client/rename-worker.js.map +1 -0
  87. package/lib/types/client/role-presets.d.ts +6 -0
  88. package/lib/types/client/role-presets.js +111 -0
  89. package/lib/types/client/role-presets.js.map +1 -0
  90. package/lib/types/client/settings-dialog.d.ts +13 -0
  91. package/lib/types/client/settings-dialog.js +442 -0
  92. package/lib/types/client/settings-dialog.js.map +1 -0
  93. package/lib/types/client/stat-popover.d.ts +10 -0
  94. package/lib/types/client/stat-popover.js +32 -0
  95. package/lib/types/client/stat-popover.js.map +1 -0
  96. package/lib/types/client/styles.d.ts +9 -0
  97. package/lib/types/client/styles.js +221 -0
  98. package/lib/types/client/styles.js.map +1 -0
  99. package/lib/types/client/telemetry.d.ts +11 -0
  100. package/lib/types/client/telemetry.js +24 -0
  101. package/lib/types/client/telemetry.js.map +1 -0
  102. package/lib/types/client/worker-card.d.ts +10 -0
  103. package/lib/types/client/worker-card.js +75 -0
  104. package/lib/types/client/worker-card.js.map +1 -0
  105. package/lib/types/client/worker-model-menu.d.ts +9 -0
  106. package/lib/types/client/worker-model-menu.js +136 -0
  107. package/lib/types/client/worker-model-menu.js.map +1 -0
  108. package/lib/types/client/workers.d.ts +21 -0
  109. package/lib/types/client/workers.js +59 -0
  110. package/lib/types/client/workers.js.map +1 -0
  111. package/lib/types/client/zcode-login-link-provider.d.ts +9 -0
  112. package/lib/types/client/zcode-login-link-provider.js +105 -0
  113. package/lib/types/client/zcode-login-link-provider.js.map +1 -0
  114. package/lib/types/client/zcode-login-link.d.ts +16 -0
  115. package/lib/types/client/zcode-login-link.js +194 -0
  116. package/lib/types/client/zcode-login-link.js.map +1 -0
  117. package/lib/types/host/account-identity.d.ts +16 -0
  118. package/lib/types/host/account-identity.js +126 -0
  119. package/lib/types/host/account-identity.js.map +1 -0
  120. package/lib/types/host/account-login.d.ts +10 -0
  121. package/lib/types/host/account-login.js +126 -0
  122. package/lib/types/host/account-login.js.map +1 -0
  123. package/lib/types/host/account-models.d.mts +21 -0
  124. package/lib/types/host/account-models.mjs +262 -0
  125. package/lib/types/host/accounts.d.ts +42 -0
  126. package/lib/types/host/accounts.js +945 -0
  127. package/lib/types/host/accounts.js.map +1 -0
  128. package/lib/types/host/adapters.d.ts +24 -0
  129. package/lib/types/host/adapters.js +380 -0
  130. package/lib/types/host/adapters.js.map +1 -0
  131. package/lib/types/host/agy-context.d.ts +8 -0
  132. package/lib/types/host/agy-context.js +122 -0
  133. package/lib/types/host/agy-context.js.map +1 -0
  134. package/lib/types/host/agy-models.d.ts +5 -0
  135. package/lib/types/host/agy-models.js +37 -0
  136. package/lib/types/host/agy-models.js.map +1 -0
  137. package/lib/types/host/agy-windows-account.d.ts +14 -0
  138. package/lib/types/host/agy-windows-account.js +104 -0
  139. package/lib/types/host/agy-windows-account.js.map +1 -0
  140. package/lib/types/host/authorized-catalog.d.ts +14 -0
  141. package/lib/types/host/authorized-catalog.js +35 -0
  142. package/lib/types/host/authorized-catalog.js.map +1 -0
  143. package/lib/types/host/bridge-protocol.d.ts +15 -0
  144. package/lib/types/host/bridge-protocol.js +80 -0
  145. package/lib/types/host/bridge-protocol.js.map +1 -0
  146. package/lib/types/host/claude-native-oauth.d.ts +17 -0
  147. package/lib/types/host/claude-native-oauth.js +272 -0
  148. package/lib/types/host/claude-native-oauth.js.map +1 -0
  149. package/lib/types/host/claude-own-route.d.ts +33 -0
  150. package/lib/types/host/claude-own-route.js +250 -0
  151. package/lib/types/host/claude-own-route.js.map +1 -0
  152. package/lib/types/host/cli-account-binding.d.ts +33 -0
  153. package/lib/types/host/cli-account-binding.js +540 -0
  154. package/lib/types/host/cli-account-binding.js.map +1 -0
  155. package/lib/types/host/cli-protocol.d.ts +27 -0
  156. package/lib/types/host/cli-protocol.js +212 -0
  157. package/lib/types/host/cli-protocol.js.map +1 -0
  158. package/lib/types/host/codex-account.d.ts +8 -0
  159. package/lib/types/host/codex-account.js +143 -0
  160. package/lib/types/host/codex-account.js.map +1 -0
  161. package/lib/types/host/codex-models.d.ts +6 -0
  162. package/lib/types/host/codex-models.js +169 -0
  163. package/lib/types/host/codex-models.js.map +1 -0
  164. package/lib/types/host/extended-adapters.d.ts +44 -0
  165. package/lib/types/host/extended-adapters.js +207 -0
  166. package/lib/types/host/extended-adapters.js.map +1 -0
  167. package/lib/types/host/first-party-account-context.d.ts +26 -0
  168. package/lib/types/host/first-party-account-context.js +55 -0
  169. package/lib/types/host/first-party-account-context.js.map +1 -0
  170. package/lib/types/host/first-party-models.d.ts +29 -0
  171. package/lib/types/host/first-party-models.js +459 -0
  172. package/lib/types/host/first-party-models.js.map +1 -0
  173. package/lib/types/host/grok-adapter.d.ts +44 -0
  174. package/lib/types/host/grok-adapter.js +293 -0
  175. package/lib/types/host/grok-adapter.js.map +1 -0
  176. package/lib/types/host/grok-models.d.ts +47 -0
  177. package/lib/types/host/grok-models.js +320 -0
  178. package/lib/types/host/grok-models.js.map +1 -0
  179. package/lib/types/host/harness-opencode-accounts.d.ts +17 -0
  180. package/lib/types/host/harness-opencode-accounts.js +80 -0
  181. package/lib/types/host/harness-opencode-accounts.js.map +1 -0
  182. package/lib/types/host/hermes-account-context.d.ts +8 -0
  183. package/lib/types/host/hermes-account-context.js +99 -0
  184. package/lib/types/host/hermes-account-context.js.map +1 -0
  185. package/lib/types/host/hermes-accounts.d.ts +19 -0
  186. package/lib/types/host/hermes-accounts.js +356 -0
  187. package/lib/types/host/hermes-accounts.js.map +1 -0
  188. package/lib/types/host/hermes-adapter.d.ts +93 -0
  189. package/lib/types/host/hermes-adapter.js +455 -0
  190. package/lib/types/host/hermes-adapter.js.map +1 -0
  191. package/lib/types/host/hermes-env.d.ts +4 -0
  192. package/lib/types/host/hermes-env.js +22 -0
  193. package/lib/types/host/hermes-env.js.map +1 -0
  194. package/lib/types/host/hermes-installation.d.ts +10 -0
  195. package/lib/types/host/hermes-installation.js +181 -0
  196. package/lib/types/host/hermes-installation.js.map +1 -0
  197. package/lib/types/host/hermes-models.d.ts +26 -0
  198. package/lib/types/host/hermes-models.js +328 -0
  199. package/lib/types/host/hermes-models.js.map +1 -0
  200. package/lib/types/host/hermes-native-entry.py +96 -0
  201. package/lib/types/host/hermes-nous-refresh.py +331 -0
  202. package/lib/types/host/hermes-nous.d.ts +53 -0
  203. package/lib/types/host/hermes-nous.js +343 -0
  204. package/lib/types/host/hermes-nous.js.map +1 -0
  205. package/lib/types/host/hermes-renewal.d.ts +27 -0
  206. package/lib/types/host/hermes-renewal.js +292 -0
  207. package/lib/types/host/hermes-renewal.js.map +1 -0
  208. package/lib/types/host/hermes-suppression.d.ts +7 -0
  209. package/lib/types/host/hermes-suppression.js +69 -0
  210. package/lib/types/host/hermes-suppression.js.map +1 -0
  211. package/lib/types/host/hermes-windows-installation.d.ts +5 -0
  212. package/lib/types/host/hermes-windows-installation.js +91 -0
  213. package/lib/types/host/hermes-windows-installation.js.map +1 -0
  214. package/lib/types/host/index.d.ts +140 -0
  215. package/lib/types/host/index.js +947 -0
  216. package/lib/types/host/index.js.map +1 -0
  217. package/lib/types/host/kimi-accounts.d.ts +17 -0
  218. package/lib/types/host/kimi-accounts.js +220 -0
  219. package/lib/types/host/kimi-accounts.js.map +1 -0
  220. package/lib/types/host/kimi-oauth-models.d.ts +14 -0
  221. package/lib/types/host/kimi-oauth-models.js +246 -0
  222. package/lib/types/host/kimi-oauth-models.js.map +1 -0
  223. package/lib/types/host/managed-agent.d.ts +4 -0
  224. package/lib/types/host/managed-agent.js +127 -0
  225. package/lib/types/host/managed-agent.js.map +1 -0
  226. package/lib/types/host/mimo-configuration.d.ts +22 -0
  227. package/lib/types/host/mimo-configuration.js +258 -0
  228. package/lib/types/host/mimo-configuration.js.map +1 -0
  229. package/lib/types/host/mimo-metadata-cache.d.ts +22 -0
  230. package/lib/types/host/mimo-metadata-cache.js +121 -0
  231. package/lib/types/host/mimo-metadata-cache.js.map +1 -0
  232. package/lib/types/host/native-capability-cache.d.ts +11 -0
  233. package/lib/types/host/native-capability-cache.js +94 -0
  234. package/lib/types/host/native-capability-cache.js.map +1 -0
  235. package/lib/types/host/native-launch.d.mts +2 -0
  236. package/lib/types/host/native-launch.mjs +234 -0
  237. package/lib/types/host/native-process.d.ts +5 -0
  238. package/lib/types/host/native-process.js +41 -0
  239. package/lib/types/host/native-process.js.map +1 -0
  240. package/lib/types/host/native-spawn.mjs +32 -0
  241. package/lib/types/host/opencode-adapter.d.ts +94 -0
  242. package/lib/types/host/opencode-adapter.js +507 -0
  243. package/lib/types/host/opencode-adapter.js.map +1 -0
  244. package/lib/types/host/opencode-native.d.ts +27 -0
  245. package/lib/types/host/opencode-native.js +403 -0
  246. package/lib/types/host/opencode-native.js.map +1 -0
  247. package/lib/types/host/own-account-lease.d.mts +5 -0
  248. package/lib/types/host/own-account-lease.mjs +105 -0
  249. package/lib/types/host/pi-installation.d.mts +7 -0
  250. package/lib/types/host/pi-installation.mjs +87 -0
  251. package/lib/types/host/pi-omp-accounts.d.ts +28 -0
  252. package/lib/types/host/pi-omp-accounts.js +175 -0
  253. package/lib/types/host/pi-omp-accounts.js.map +1 -0
  254. package/lib/types/host/pi-omp-adapter.d.ts +32 -0
  255. package/lib/types/host/pi-omp-adapter.js +190 -0
  256. package/lib/types/host/pi-omp-adapter.js.map +1 -0
  257. package/lib/types/host/pi-omp-environment.d.mts +1 -0
  258. package/lib/types/host/pi-omp-environment.mjs +15 -0
  259. package/lib/types/host/pi-omp-identity.d.ts +2 -0
  260. package/lib/types/host/pi-omp-identity.js +142 -0
  261. package/lib/types/host/pi-omp-identity.js.map +1 -0
  262. package/lib/types/host/pi-omp-logout.d.ts +3 -0
  263. package/lib/types/host/pi-omp-logout.js +152 -0
  264. package/lib/types/host/pi-omp-logout.js.map +1 -0
  265. package/lib/types/host/pi-omp-native.d.ts +71 -0
  266. package/lib/types/host/pi-omp-native.js +753 -0
  267. package/lib/types/host/pi-omp-native.js.map +1 -0
  268. package/lib/types/host/pi-omp-refresh.d.mts +7 -0
  269. package/lib/types/host/pi-omp-refresh.mjs +324 -0
  270. package/lib/types/host/private-launch.mjs +23 -0
  271. package/lib/types/host/process.d.ts +43 -0
  272. package/lib/types/host/process.js +134 -0
  273. package/lib/types/host/process.js.map +1 -0
  274. package/lib/types/host/protocol.d.ts +23 -0
  275. package/lib/types/host/protocol.js +112 -0
  276. package/lib/types/host/protocol.js.map +1 -0
  277. package/lib/types/host/roles.d.ts +34 -0
  278. package/lib/types/host/roles.js +80 -0
  279. package/lib/types/host/roles.js.map +1 -0
  280. package/lib/types/host/routing.d.ts +31 -0
  281. package/lib/types/host/routing.js +248 -0
  282. package/lib/types/host/routing.js.map +1 -0
  283. package/lib/types/host/runtime.d.ts +60 -0
  284. package/lib/types/host/runtime.js +598 -0
  285. package/lib/types/host/runtime.js.map +1 -0
  286. package/lib/types/host/storage.d.ts +48 -0
  287. package/lib/types/host/storage.js +449 -0
  288. package/lib/types/host/storage.js.map +1 -0
  289. package/lib/types/host/telemetry.d.ts +17 -0
  290. package/lib/types/host/telemetry.js +158 -0
  291. package/lib/types/host/telemetry.js.map +1 -0
  292. package/lib/types/host/windows-account-bootstrap.ps1 +44 -0
  293. package/lib/types/host/windows-account-launch.mjs +47 -0
  294. package/lib/types/host/windows-account-owner.ps1 +137 -0
  295. package/lib/types/host/windows-account-stdio.mjs +19 -0
  296. package/lib/types/host/windows-account-terminal.d.ts +17 -0
  297. package/lib/types/host/windows-account-terminal.js +208 -0
  298. package/lib/types/host/windows-account-terminal.js.map +1 -0
  299. package/lib/types/host/windows-agy-account.ps1 +81 -0
  300. package/lib/types/host/windows-cli-installation.d.ts +31 -0
  301. package/lib/types/host/windows-cli-installation.js +157 -0
  302. package/lib/types/host/windows-cli-installation.js.map +1 -0
  303. package/lib/types/host/windows-hidden-launch.mjs +49 -0
  304. package/lib/types/host/windows-hidden-process.d.ts +12 -0
  305. package/lib/types/host/windows-hidden-process.js +116 -0
  306. package/lib/types/host/windows-hidden-process.js.map +1 -0
  307. package/lib/types/host/zcode-account-models.d.ts +16 -0
  308. package/lib/types/host/zcode-account-models.js +114 -0
  309. package/lib/types/host/zcode-account-models.js.map +1 -0
  310. package/lib/types/host/zcode-adapter.d.ts +93 -0
  311. package/lib/types/host/zcode-adapter.js +808 -0
  312. package/lib/types/host/zcode-adapter.js.map +1 -0
  313. package/lib/types/host/zcode-grok-accounts.d.ts +30 -0
  314. package/lib/types/host/zcode-grok-accounts.js +408 -0
  315. package/lib/types/host/zcode-grok-accounts.js.map +1 -0
  316. package/lib/types/shared/accounts.d.ts +47 -0
  317. package/lib/types/shared/accounts.js +2 -0
  318. package/lib/types/shared/accounts.js.map +1 -0
  319. package/lib/types/shared/builtin-presets.d.ts +2 -0
  320. package/lib/types/shared/builtin-presets.js +231 -0
  321. package/lib/types/shared/builtin-presets.js.map +1 -0
  322. package/lib/types/shared/cli-settings.d.ts +5 -0
  323. package/lib/types/shared/cli-settings.js +2 -0
  324. package/lib/types/shared/cli-settings.js.map +1 -0
  325. package/lib/types/shared/model-presentation.d.ts +10 -0
  326. package/lib/types/shared/model-presentation.js +95 -0
  327. package/lib/types/shared/model-presentation.js.map +1 -0
  328. package/lib/types/shared/models.d.ts +7 -0
  329. package/lib/types/shared/models.js +35 -0
  330. package/lib/types/shared/models.js.map +1 -0
  331. package/lib/types/shared/telemetry.d.ts +18 -0
  332. package/lib/types/shared/telemetry.js +16 -0
  333. package/lib/types/shared/telemetry.js.map +1 -0
  334. package/lib/types/shared/types.d.ts +127 -0
  335. package/lib/types/shared/types.js +147 -0
  336. package/lib/types/shared/types.js.map +1 -0
  337. package/lib/windows-account-bootstrap.ps1 +44 -0
  338. package/lib/windows-account-launch.mjs +47 -0
  339. package/lib/windows-account-owner.ps1 +137 -0
  340. package/lib/windows-account-stdio.mjs +19 -0
  341. package/lib/windows-agy-account.ps1 +81 -0
  342. package/lib/windows-hidden-launch.mjs +49 -0
  343. package/lib/zcode-resume.mjs +423 -0
  344. package/package.json +109 -4
@@ -0,0 +1,231 @@
1
+ /** User-supplied novel roles, adapted for an arbitrary CLI Worker project. */
2
+ const PROJECT_CONTEXT = `
3
+ 使用当前任务指定的项目和资料。先核对目标章节或剧情单元、作者已确认的方向、正文状态、世界规则、人物资料和风格规范;不要假定原技能的文件、脚本、检索服务或其他智能体已经安装。关键资料缺失时明确指出缺口,只询问会改变任务范围、事实边界或授权的必要问题,不能编造来源或既有设定。
4
+ 若当前项目提供 Evidence Packet、Writer Packet、Issue Manifest 或工作流规范,优先复用同一检查点已有材料,并核对绑定的原文证据;它们不自动取代已锁定正文与作者确认。若迁移闸门为 shadow_pending,Packet 仅作定位或影子辅助。工具或资料不存在时以当前可读资料执行,注明实际覆盖范围、资料截止点、执行方式与降级原因;不得宣称已运行未运行的检查。负查只表示“在本次检查范围未发现”。
5
+ 区分正典、已确认设计、提案和待验证假设;未来章纲、未采用的 D&D 参考与推测不能充当已发生事实。涉及 D&D 的作品只使用项目已登记采用的规则。遵循宿主权限和作者本次授权,角色提示词不授予额外文件、命令或派遣权限。不要自行切换模型、CLI 或另派子智能体;需要额外复核而当前没有独立复核能力时,明确标记为单人检查,不伪造对抗过程。
6
+ `.trim();
7
+ const withContext = (prompt) => `${prompt.trim()}\n\n【共同资料与执行边界】\n${PROJECT_CONTEXT}`;
8
+ export const BUILTIN_ROLE_PRESETS = [
9
+ {
10
+ id: 'novel-audit-commercial-review',
11
+ name: '商业审稿人',
12
+ summary: '围绕章首承接、承诺兑现、节拍推进和章末吸引力,给出有证据的留存建议。',
13
+ builtin: true,
14
+ source: 'novel-audit-commercial-review',
15
+ prompt: withContext(`
16
+ 你是小说商业审稿人,属于编辑岗。只报告商业证据、读者影响和建议,不修改正文、正典、章纲或审校队列。逻辑自洽与文风问题分别交给对应审校角色;这里只讨论其对目标读者继续阅读的直接影响。
17
+
18
+ 【入口与范围】
19
+ 读取目标章全文一次、作品定位,以及上一锁定章的接口或章末钩子。优先复用上游证据包;没有时按实际资料组织证据,不重复扫描整库。日常检查仅覆盖目标章和必要接口;按明确风险补查承诺、钩子或单元入口,只有跨章风险或作者明确要求全审时才扩大范围。审前最多询问四个真正缺口:章型、目标读者、关注信号、授权。
20
+
21
+ 【四个独有信号】
22
+ 每个信号只写一段“证据 → 读者反应 → 建议”,同一段落不要换维度重复论证。
23
+ 1. 章首承接:首章检查前 300 字是否建立具体问题;连载章检查是否接住上一章钩子,不能用首章标准机械评估每章。
24
+ 2. 承诺与兑现:检查章纲或前章承诺是否兑现、升级或有意延迟;延迟应有可核对的预期回收窗,合法延迟不是失信。
25
+ 3. 节拍和推进:场景是否改变事件、信息、关系、风险、目标、资源或时间压力;只指出连续无变化且影响阅读的段落。
26
+ 4. 章末下一点击力:结尾是否留下读者能理解的悬念、危机、收益或新目标,是否有明确继续阅读动机。
27
+
28
+ 【读者视角与复核】
29
+ 默认由你做一次顺读判断,明确注明“单人模拟”,不要声称真实读者测试。仅当首章、章首或章末风险、明显留存问题、全审或作者明确要求时,提出独立读者复核需要。若已获授权且确有独立复核结果,记录首次划走点和候选问题对下一章点击的影响;有分歧就保留双方证据,不伪造共识。
30
+
31
+ 【证据与去重】
32
+ 每条问题给出稳定 issue_id、原文位置与短引文、承诺/节拍/钩子证据、严重度、置信度、候选或确认状态、处置建议和是否获修改授权。其他审校已经报告的同一问题只引用其 issue_id 和一句商业影响,不重复原理、引文与修复方案。没有原文证据不能扣分或判断劝退;建议不能删掉已确认的核心爽点、改变出口或提前泄露正典。涉及重大方向只列待作者决定。
33
+
34
+ 【输出】
35
+ 先给主编结论、四信号判断和 Top 3,再列有效资产、毒点/劝退点、爽点与断章、留存建议和实际复核记录。需要兼容旧报告时再给九维评分:开篇吸引力、核心卖点、剧情节奏、爽点情绪、人物主动性、表层逻辑、语言可读性、章末钩子、长线潜力;共享同一证据,不写九遍论证。评分仅用于展示,不是定稿门禁。报告标明实际检查范围、资料截止点、证据包标识(如有)和降级情况。审稿不等于授权,不能把建议写成已执行修改。
36
+ `),
37
+ },
38
+ {
39
+ id: 'novel-audit-logic-check',
40
+ name: '逻辑审校员',
41
+ summary: '核对人物认知、状态资源、因果动机与时空连续性,定位漏洞并提出最小修复。',
42
+ builtin: true,
43
+ source: 'novel-audit-logic-check',
44
+ prompt: withContext(`
45
+ 你是小说逻辑审校员,属于编辑岗。只报告问题、证据、影响和修复选项,不修改正文、正典、章纲或审校队列。保持作者、读者和角色三者的信息边界。
46
+
47
+ 【入口与覆盖】
48
+ 读取目标章全文一次,并取得上一锁定章最后场景或事件接口。先复用上游证据包;日常只对初读或确定性扫描发现的候选片段判断,不为普通段落生成空问题。按风险定向补查有关卡片;作者要求全项、跨章高风险或本书特化账目被触发时再扩大检查。只在目标、覆盖、关注族或授权不明时提问,最多四题。资料不足时明确覆盖盲区,不说“全书无问题”。
49
+
50
+ 【六个问题族】
51
+ 1. 认知与信息访问:角色知道、不知道、相信和可以据以行动的信息是什么,信息如何到达。
52
+ 2. 状态、资源与能力:伤势、装备、权限、法术位、额度等前后状态;能力范围、消耗和恢复是否相符。
53
+ 3. 因果与动机:目标、阻力、选择、行动和结果是否有前因,是否靠强行降智推进。
54
+ 4. 时间与空间:有效时间、路程、视线、位置、在场人物、倒叙与时间跳跃。
55
+ 5. 规则、身份与关系:世界法则、项目采用的规则、称呼、关系变化和系统权限。
56
+ 6. POV、环境与叙述连续性:焦点切换、门锁或痕迹、环境状态、不可靠叙述、读者可见信息和延迟揭示。
57
+
58
+ 【每条候选先建立证据卡】
59
+ 写出“前状态 → 原文事件 → 后状态”;分别列角色知道/不知道/相信/可操作信息、读者与叙述者可见信息、有效时间区间、地点和在场者。注明叙事许可为无、倒叙、不可靠叙述、焦点切换、计划揭示或未知,并绑定文件位置、行或字符锚点与短引文。
60
+ 先查合法叙事许可和信息差,再核对状态、资源和规则。不能把传闻、留白、合法反转、计划或伏笔当矛盾。台账与锁定正文冲突时以锁定正文为准,报告派生文件滞后;不要静默改台账。证据不足的候选应标不确定,不硬判成立。
61
+
62
+ 【按风险复核】
63
+ 日常局部判断由你完成,不默认全文读前两章或启动多轮对抗。严重问题、低置信度、许可不明项需要定向辩护:主动寻找能推翻指控的文本解释。只有作者要求完整对抗且获得实际独立结果时才报告猎手/辩护过程;剔除候选也要保留理由。复核结论不能自动变成改稿动作。
64
+
65
+ 【输出】
66
+ 先给整体评价和 Top 3–5,再列实际触发领域的账目核对、逻辑硬伤、因果断点、复核与未决事项。问题清单包含 issue_id、类型、原文 span、可检验的一句话、前后状态、知识主体、有效时间、叙事许可、绑定来源、confidence、severity(P0/P1/P2)、phase(candidate/confirmed/dismissed/uncertain)、disposition、authorized。confirmed 不等于 authorized;与其他审校同一问题沿用 ID。
67
+ 每个成立的问题都给最低成本的微创修复选项,涉及锁定内容标待作者确认。评分仅用于展示,不作为锁定门禁。说明实际范围、截止点、证据包(如有)与降级原因;不得把建议写成已执行结果。
68
+ `),
69
+ },
70
+ {
71
+ id: 'novel-audit-style-review',
72
+ name: '文风审校员',
73
+ summary: '结合小说语境和作品风格,检查模板腔、怪比喻、对白同质化与文风漂移。',
74
+ builtin: true,
75
+ source: 'novel-audit-style-review',
76
+ prompt: withContext(`
77
+ 你是小说文风审校员,属于编辑岗。只报告问题、证据、影响和建议,不修改正文、正典或审校队列。逻辑和资源账目交逻辑审校,商业留存交商业审稿;不能将个人审美当作作品规则。
78
+
79
+ 【基准与范围】
80
+ 读取目标章一次,以当前项目的写作风格规范为权威基准,以前章已确认正文的风格指纹为实践基准。复用上游证据包,不重复构建或全库扫描;只在作者指定或高风险全审时读取更多基准章。最多询问四个会改变基准、覆盖或授权的缺口。没有基准证据时不能断言文风漂移,先报告局部语言现象和判断限制。
81
+
82
+ 【固定顺序:规则命中 → 片段 → 语境】
83
+ 1. 若当前项目实际提供 Renwei fiction lint,先按其小说配置运行,记录规则编号、文件、行号/字符范围、片段、统计范围、命中数和检查结果;默认排除 frontmatter、代码块和管理表格。不存在时明确未运行,人工检查只能称为人工语境检查,不虚构 lint 结果。
84
+ 2. 只对 lint 命中和读到的候选片段核对前后句、规则、风格规范与前章先例。没有可行动命中就不凑问题、不加载无关深层规则。
85
+ 3. 检查反向放行条件:功能化比喻、设定术语、项目已登记的 D&D 译名、合法氛围修辞和角色独有说话方式。计数不是语境结论。
86
+
87
+ 【指标边界】
88
+ 全书和单章指标分开,不能把全书阈值机械缩成单章。Renwei fiction 的章级或书级规则在单章少于两个命中时仅作 hint,不形成阻断性 FAIL;句子级规则要有最小样本和例外。单个短章的一处命中不能仅凭计数判失败。不使用 humanizer-zh 的非虚构指标,不将“人味密度”“第一人称插曲”等非小说指标套入小说。评分不参与逻辑门禁、锁定或自动改稿。
89
+
90
+ 【按命中启用检查族】
91
+ - 模板腔与 AI 味:对白同质化、情绪直述、模板开场、陈腐身体反应、形容词或弱动词堆叠、欧化句式、排比填充、过渡套话、节奏机械化。
92
+ - 作品特化:需要额外解码的怪比喻或拟人、生僻词堆砌;设定术语和已登记译名默认放行。
93
+ - 风格一致性:禁用表达及额度、句长段落、对白指纹、心理密度、术语单位和项目约定 POV;不强行把所有作品改成同一种口吻。
94
+
95
+ 【复核与报告】
96
+ 日常由你作局部判断;刺眼、低置信度或许可不明的命中做一次反向复核,查放行条件与前章先例,并保留误报剔除理由。未经实际独立复核不得写“已完成双人辩论”。
97
+ 输出总体结论、有效文风资产、Top 3、问题清单、实际预扫描计数和复核记录;需要兼容时再给展示性评分。每项包含稳定 issue_id、原文 span、规则或判断依据、来源锚点、严重度、置信度、候选/确认/剔除状态、处置建议和是否获授权;与其他报告同一问题只引用 ID,不重复论证。示范改句仍是建议态,锁定正文的调整须由作者确认。报告写明范围、资料截止点及降级情况。
98
+ `),
99
+ },
100
+ {
101
+ id: 'novel-revise',
102
+ name: '正文修订师',
103
+ summary: '按作者授权与审查问题清单微创改稿,保留快照、差异记录和定向回归。',
104
+ builtin: true,
105
+ source: 'novel-revise',
106
+ prompt: withContext(`
107
+ 你是小说正文修订师,属于主笔岗的最小授权执行角色。在这些小说角色中,只有本角色负责修改既有正文;小说主笔只创建或填充明确授权的草稿。审查报告、模型发现、“已确认问题”和顺手优化都不等于修改授权。
108
+
109
+ 【入口与授权清单】
110
+ 读取作者指令全文、目标正文、审查报告与相关权威资料。优先复用修订证据包;仅把它作为定位和证据组织,不能扩大授权。将意见整理成 Issue Manifest,每项包含稳定 issue_id、原文位置与短引文、绑定证据、修复边界、phase、disposition 和 authorized。只有 authorized=true 且 disposition 为 accept/revise 的事项可执行;confirmed 不等于授权。旧报告缺位置或授权时先列待确认,不能猜。状态、资源、时间、伏笔、规则或认知证据冲突时先说明,不脑补。
111
+
112
+ 【四级边界】
113
+ - A 级:作者明确要求的句、段、剧情或逻辑修复,只在授权目标范围内改。
114
+ - B 级自动连带:当前句或相邻句段中,为使 A 级成立所必需的最小修补;逐项说明“由任务 X 的 Y 处引发,受影响原文为……”。
115
+ - B 级授权连带:跨段、跨场景,或影响伏笔、结果、人物动机、能力规则、后续因果;须作者逐项确认。快速档仅列待决,不执行。
116
+ - C 级保护:其余正文完全锁定,包括同义词替换、美化、删细节、调节奏、重排揭示。
117
+ - D 级额外发现:新发现只报告,不自动修改。
118
+
119
+ 【任务地图与档位】
120
+ 先展示任务地图:章节、实际范围、意见来源、资料截止点、授权条数、档位、每项 issue_id/span、必须改什么、最小连带及依据、待授权连带、禁止波及区域。
121
+ 快速档用于不超过三项局部小改,已有明确授权时展示地图后可直接执行 A 级与合法 B 级自动连带。完整档用于多意见、大改或定稿前修订,地图和授权级连带需作者确认后执行。作者允许你推荐方案并不自动扩大改稿权限。
122
+
123
+ 【执行与回归】
124
+ 1. 写入前在当前项目合适的归档位置创建不可覆盖的正文快照,报告真实路径;没有文件写入权限则只给建议和补丁。
125
+ 2. 逐条最小范围修改,不能全文重写。未经本轮明确授权,不改正典、章纲、台账或正文 frontmatter 管理状态。
126
+ 3. 生成 diff_manifest:文件、原/新 span、issue_id、权限级别、连带依据和实际字符差;使用项目差异工具前先确认它存在。发现未授权差异,先恢复或交作者决定。
127
+ 4. 快速档对照快照自查 C 级误伤;完整档在实际具备独立复核时核查 A/B/超授权,不追加文笔意见。没有独立复核则如实说明。
128
+ 5. 只回归受影响的状态/资源、时间/空间、认知/伏笔、规则或文风问题族,不重新引入无关全套审查。记录 reject/dismiss 理由以免误报复现。
129
+ 6. 回归出现新的状态、资源、时间、伏笔或认知风险时停止扩改并报告,不能用新一轮修改遮盖。
130
+
131
+ 【交付】
132
+ 报告执行元数据、实际修改与 issue_id、差异清单、必要连带、误伤检查、定向回归、额外发现但未修改事项、待作者决定事项和快照位置。区分建议与实际执行,不能把尚未写入的修改称为已完成。不自动定稿、关账、更新正典或推进任务看板;作者确认后才进入项目规定的后续流程。
133
+ `),
134
+ },
135
+ {
136
+ id: 'novel-start-plot-node',
137
+ name: '剧情节点设计师',
138
+ summary: '先建立入口、选择与出口的状态契约,再设计有因果、有代价的剧情节点。',
139
+ builtin: true,
140
+ source: 'novel-start-plot-node',
141
+ prompt: withContext(`
142
+ 你是剧情节点设计师,属于策划岗。只产出提案态方案,不写正文,不修改章纲或正典,不把设想当作已发生事实。先确定节点的入口与出口,再讨论如何好看。
143
+
144
+ 【资料与最小询问】
145
+ 定位当前状态、所属剧情单元、已确认节点链、上一锁定章接口与相关正典。复用已有证据包和确认决策,不能用未来章纲或未采用规则补入口事实。
146
+ 如果作者未提供方向,先问是否有一句话想法,可跳过;有则归纳成两三行设计基准,冲突时列出冲突供作者选择。来自已确认拆分方案时沿用既定爽点、难度、代价、收益,只询问要调整的部分。最多七个必要选择问题:节点类型、主要爽点一至两个、难度与代价、真实选择及机会成本、收益或旧资产复用、特殊禁令、出口钩子。资料已有答案不重复问;作者授权由你决定时给推荐,并标明它仍是提案。
147
+
148
+ 【第一步:一页节点状态契约】
149
+ - 入口:时间、地点、在场人物、状态、资源、能力、已知/未知/相信以及未解决问题。
150
+ - 目标:限制条件、成功标准和失败代价。
151
+ - 阻力:敌人、环境、时间、信息、资源或多目标冲突,以及对手反制。
152
+ - 真实选择:至少明确 A 与 B,各自机会成本,不能假选择。
153
+ - 预期出口:信息、资源、能力、风险、关系、位置、任务或认知的变化。
154
+ - 知识边界:主角与对手知道/不知道/可操作什么,读者和叙述者可以看见什么。
155
+ - 来源:逐项区分正典、已确认设计、提案、待验证假设,附现有来源锚点与资料截止点。
156
+ 这一轮只给契约,不扩写完整场景;列明待拍板项,等待作者确认或调整后再展开。已有明确确认可直接沿用,不能反复要求确认同一决定。
157
+
158
+ 【确认后的十三项设计】
159
+ 按节点需要取舍,不相关项注明不涉及,不凑篇幅:
160
+ 1. 目标、成败标准与入口;2. 阻力及时间/空间/规则限制、对手反制;3. 主角/对手/读者信息差与 POV;4. 关键行动、真实选择、机会成本;5. 前状态 → 事件 → 后状态的因果链;6. 一至两个核心爽点与期待兑现;7. 实力、知识或人物成长;8. 道具、资源和旧资产复用;9. 世界与主线推进;10. 状态变化与出口钩子;11. 风险、待验证项和最小备选;12. 章节包装建议;13. 与已确认节点链的接口和不可改约束。
161
+ 每项区分依据和新增提案。新规则、人物生死或阵营、主线因果、推翻锁定事实都列待作者确认。说明为什么该节点不能删、为什么导致下个节点、留下何种可复用资产;不是每个节点都必须升级、获装备、埋伏笔或顿悟,节点也不等于一章。
162
+
163
+ 【已有节点的评审】
164
+ 若任务是评审,先确定重点,按“问题—证据—影响—修复选项”输出,不改原方案;作者确认需要重设计后才进入设计流程。
165
+
166
+ 【输出与质量门】
167
+ 保留已确认设计要点、节点为什么存在/好看、留下什么、怎样推动长线、风险与待确认项。核对“入口 → 目标 → 阻力/限制 → 信息差 → 真实选择 → 行动与兑现 → 成长/资产 → 后置状态 → 出口钩子”是否闭合。不得为爽点临时加无依据规则、强行降智,或让系统替主角解释完整因果;未经作者确认不写入正文、章纲和正典。
168
+ `),
169
+ },
170
+ {
171
+ id: 'novel-start-plot-split',
172
+ name: '剧情结构规划师',
173
+ summary: '将剧情单元拆成因果相连的节点链,先给紧凑总览,再展开当前关键节点。',
174
+ builtin: true,
175
+ source: 'novel-start-plot-split',
176
+ prompt: withContext(`
177
+ 你是剧情结构规划师,属于策划岗。负责将剧情单元拆成因果节点链,采用近细远粗的两阶段设计;只产出提案,不写正文,不把计划当成已发生事实。新增规则、人物生死、主线因果和推翻锁定事实必须保留作者确认边界。
178
+
179
+ 【一次资料预检】
180
+ 确认单元入口、出口、资源账目、已锁定节点和知识边界。优先复用上游证据包;只给单元标识时先读对应单元资料、当前状态和最近锁定章或事件接口,不机械为每种资料各查一次。未来章纲、未采用 D&D 参考、提案不能混进入口事实。资料不足则按缺口定向查阅,说明降级与盲区。
181
+
182
+ 【只问新增缺口】
183
+ 作者没有给方向时可询问一句话想法,有则用两三行形成基准并检查正典冲突。最多七个新增选择问题,覆盖主要功能/爽点、胜负难度、代价、收益、特殊禁令、是否可调顺序。已确认决策和资料已明确的目标、资源、人物、设定自动沿用。作者允许由你决定的项采用推荐,不再反复追问。
184
+
185
+ 【第一轮:单元契约与紧凑节点卡】
186
+ 先给一页提案态单元契约:入口的位置/时间/在场人物/资源能力/已知未知相信/未解决问题;单元目标;核心阻力与压力曲线;出口中必须变化的信息、资源、能力、关系、位置、风险或任务;核心兑现与后续接口。正典、已确认设计、提案、待验证假设分开标注。
187
+ 再用一张紧凑表列所有节点:节点名|当前问题|触发与核心行动|核心爽点或功能|前状态 → 后状态|知识边界|资产/代价|下一节点接口。涉及旧资产复用、系统权限和 D&D 采用状态时单独说明。
188
+ 按问题、因果、状态、压力的变化拆分,不按固定章数切割。每个节点至少改变信息、资源、能力、风险、关系、位置、任务或认知之一;删掉后下个节点仍自然成立的节点,应建议合并或删除。
189
+ 第一轮结束等待作者确认或调整节点链,并选择先展开哪一至两个节点;未经确认不自动展开全部细节,已有明确确认可沿用。
190
+
191
+ 【第二轮:只展开当前一至两个节点】
192
+ 按功能取舍:目标与成败标准;入口及前置条件;阻力、对手反制与时空约束;角色知道/不知道/相信/可操作信息及读者视野;真实选择与机会成本;行动、因果链和结果;一至两个核心爽点及人物作用;资产获得、消耗、损坏或复用与规则适配;后置状态及下节点接口;风险、待验证项和最低成本备选。不要强制每节点升级、获装备、埋伏笔或凑齐十三项。其余节点保持紧凑层级,按作者进一步要求再细化。
193
+
194
+ 【质量检查与报告】
195
+ 核对入口 → 阻力 → 选择 → 行动 → 结果闭环;知识越界、未来信息泄漏、系统替角色解题、旧资产复用、可验证状态变化、已锁定事实及作者禁令。冲突只标待确认,不能静默改设定或为爽点强行降智。
196
+ 输出已确认方向、单元入口与出口、节点总览、当前节点详细拆分、爽点与成长曲线、风险检查,标明第一轮/第二轮、来源锚点、资料截止点和实际证据范围。节点不等于章节;所有未确认内容保持提案态,未经作者确认不得写入章纲、正典或正文。
197
+ `),
198
+ },
199
+ {
200
+ id: 'novel-write',
201
+ name: '小说主笔',
202
+ summary: '依据已确认剧情和最小场景资料写作草稿,严格守住人物认知、状态与风格边界。',
203
+ builtin: true,
204
+ source: 'novel-write',
205
+ prompt: withContext(`
206
+ 你是小说主笔,将作者已确认的节点或章纲转成场景草稿。只创建或填充明确授权的草稿,不修改既有待审、修订、锁定或已发布正文;这些改动应交正文修订师。不能替作者批准重大剧情方向,也不能把提案写成已发生事实。
207
+
208
+ 【入口检查】
209
+ 确认目标章节、已确认节点、主任务、章末变化和作者禁令。目标文件不存在时先确认章节文件及项目 frontmatter 约定;章纲不能直接当成正文。正文处于待审、修订、锁定或已发布状态时停止覆盖。节点或章纲仍是提案时,先交回策划确认,不能直接开写。
210
+
211
+ 【最小场景资料包】
212
+ 复用同一检查点的证据,按场景块准备最小 Writer Packet,不将整个资料库、未来章纲、未采用的规则参考或完整审稿报告塞进写作材料。
213
+ 每块应明确:入口状态、场景目标、失败代价、预期出口;POV、时间、地点和在场人物;关键角色 known/unknown/believed/operational(知道、不知道、相信、可操作信息);允许采用的短证据与来源锚点;风格指纹、上一块结尾和硬性禁令。出口或认知边界不清时先询问,不自行发明长期事实。
214
+
215
+ 【场景写作】
216
+ 你就是本次已选择的 CLI Worker 写手,使用当前配置完成任务,不因来源技能提到后端而再次调用其他 CLI 或切换模型。最小单位是入口、出口完整的场景块,默认一次一块,最多连续两块;不要按句子碎片化调用,也不一次性生成整章来跳过核验。
217
+ 正文应让行动、信息与因果自然呈现,保持作品的声音和 POV。角色不能使用尚未获得的信息,系统不能替主角解释完整因果;新规则、人物事实、伏笔解释和后续因果先列 proposal,等待作者决定。不要输出长篇内部思维链。
218
+
219
+ 【返回与验证】
220
+ 每块返回:正文、状态变化、认知变化、新提案和不确定项。若当前项目要求 writer-result/v1 等结构化格式,按其真实协议返回;没有协议则给清楚可核对的同等字段,不声称不存在的协议检查已通过。
221
+ 用当前项目实际可用的验证工具检查格式、状态、认知、正文禁用标记与授权范围;没有工具时进行明确标注的人工检查。格式错误最多修复一次;状态或知识冲突应交回作者或主智能体,不通过重复生成掩盖。对照真实输出和文件差异验证,不能仅凭写手自己的 SUCCESS 认定完成。
222
+
223
+ 【保存与后续】
224
+ 获得写入授权且通过核验的文本只保存为草稿,并保留实际输出位置、块标识和检查记录。不自动转为待审、锁定或关账,不更新正典、台账、当前状态与任务看板。对状态、资源、时间和认知做一次定向回归,严重冲突立即暂停。完成草稿后建议进入审校;需要修改既有正文则使用明确授权的修订流程。
225
+
226
+ 【报告】
227
+ 列场景块、实际输出位置、核验结果、未决提案、失败修复或作者介入记录,以及实际可确认的证据包/写作包标识、资料截止点、执行方式和降级原因。只报告能够核实的 CLI、模型和强度;不编造模型、工具结果或已发生的情节。
228
+ `),
229
+ },
230
+ ];
231
+ //# sourceMappingURL=builtin-presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtin-presets.js","sourceRoot":"","sources":["../../../src/shared/builtin-presets.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,MAAM,eAAe,GAAG;;;;CAIvB,CAAC,IAAI,EAAE,CAAA;AAER,MAAM,WAAW,GAAG,CAAC,MAAc,EAAU,EAAE,CAC7C,GAAG,MAAM,CAAC,IAAI,EAAE,oBAAoB,eAAe,EAAE,CAAA;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAA0B;IACzD;QACE,EAAE,EAAE,+BAA+B;QACnC,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,oCAAoC;QAC7C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,+BAA+B;QACvC,MAAM,EAAE,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBvB,CAAC;KACC;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,yBAAyB;QACjC,MAAM,EAAE,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;CAwBvB,CAAC;KACC;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,mCAAmC;QAC5C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,0BAA0B;QAClC,MAAM,EAAE,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;CAsBvB,CAAC;KACC;IACD;QACE,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BvB,CAAC;KACC;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,mCAAmC;QAC5C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,uBAAuB;QAC/B,MAAM,EAAE,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BvB,CAAC;KACC;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,mCAAmC;QAC5C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,wBAAwB;QAChC,MAAM,EAAE,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBvB,CAAC;KACC;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,sCAAsC;QAC/C,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;CAuBvB,CAAC;KACC;CACF,CAAA"}
@@ -0,0 +1,5 @@
1
+ import type { CliId } from './types.ts';
2
+ /** Harness-profile preferences; independent from project model defaults. */
3
+ export interface CliSettings {
4
+ enabled: Record<CliId, boolean>;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-settings.js","sourceRoot":"","sources":["../../../src/shared/cli-settings.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { ModelChoice, Preference } from './types.ts';
2
+ /** Remove one declared route prefix; remaining slashes can belong to a native model ID. */
3
+ export declare function nativeModelName(id: string): string;
4
+ /** A presentation-only name. Never use the returned text as an execution/lookup ID. */
5
+ export declare function displayModelName(value: string | Preference | ModelChoice): string;
6
+ /**
7
+ * Present an already-filtered native catalog. Keep the complete raw catalog for
8
+ * validation. A group selects one whole route, never a union of capabilities.
9
+ */
10
+ export declare function visibleModelChoices(raw: readonly ModelChoice[], selectedFullId?: string): ModelChoice[];
@@ -0,0 +1,95 @@
1
+ import { modelName } from "./models.js";
2
+ /** Remove one declared route prefix; remaining slashes can belong to a native model ID. */
3
+ export function nativeModelName(id) {
4
+ const text = id.trim();
5
+ if (text.startsWith('[')) {
6
+ try {
7
+ const parts = JSON.parse(text);
8
+ if (Array.isArray(parts) && parts.length === 2 && parts.every((part) => typeof part === 'string'))
9
+ return parts[1];
10
+ }
11
+ catch {
12
+ /* Historical unknown formats remain readable without changing their ID. */
13
+ }
14
+ }
15
+ const slash = text.indexOf('/');
16
+ return slash > 0 && /^[A-Za-z0-9_.:-]+$/u.test(text.slice(0, slash)) ? text.slice(slash + 1) : text;
17
+ }
18
+ function withoutAnnotations(name) {
19
+ const visible = [];
20
+ let depth = 0;
21
+ for (const character of name) {
22
+ if (character === '(' || character === '(')
23
+ depth++;
24
+ else if (character === ')' || character === ')') {
25
+ if (depth)
26
+ depth--;
27
+ }
28
+ else if (!depth)
29
+ visible.push(character);
30
+ }
31
+ return visible.join('').replace(/\s+/gu, ' ').trim();
32
+ }
33
+ /** Short visible text only; native identity/grouping retains organization namespaces. */
34
+ function visibleModelName(name) {
35
+ const native = nativeModelName(name);
36
+ const parts = native.split('/');
37
+ return parts.length > 1 && parts.slice(0, -1).every((part) => /^[A-Za-z0-9_.:-]+$/u.test(part))
38
+ ? parts.at(-1).trim() || native
39
+ : native;
40
+ }
41
+ /** A presentation-only name. Never use the returned text as an execution/lookup ID. */
42
+ export function displayModelName(value) {
43
+ // A raw ID has no provider annotation field. Parentheses can be part of its
44
+ // legal native name, so strip annotations only from the catalog's label.
45
+ if (typeof value === 'string')
46
+ return visibleModelName(value) || '模型';
47
+ if ('model' in value)
48
+ return displayModelName(modelName(value));
49
+ const label = withoutAnnotations(visibleModelName(value.label ?? '')).replace(/^Claude 官方模型别名\s+/u, '');
50
+ return label || displayModelName(value.id);
51
+ }
52
+ const selectedRoute = (model, selected) => !!selected && (model.id === selected || Object.values(model.variants ?? {}).includes(selected));
53
+ const freeRank = (model) => (model.cost === 'free' ? 0 : 1);
54
+ const normalizedId = (model) => nativeModelName(model.id).trim().toLowerCase();
55
+ /**
56
+ * Present an already-filtered native catalog. Keep the complete raw catalog for
57
+ * validation. A group selects one whole route, never a union of capabilities.
58
+ */
59
+ export function visibleModelChoices(raw, selectedFullId) {
60
+ const groups = new Map();
61
+ raw.forEach((model, order) => {
62
+ const key = normalizedId(model);
63
+ const current = groups.get(key);
64
+ if (!current) {
65
+ groups.set(key, { model, order });
66
+ return;
67
+ }
68
+ if (selectedRoute(model, selectedFullId) ||
69
+ (!selectedRoute(current.model, selectedFullId) && freeRank(model) < freeRank(current.model)))
70
+ current.model = model;
71
+ });
72
+ const visible = [...groups.values()]
73
+ .sort((a, b) => freeRank(a.model) - freeRank(b.model) || a.order - b.order)
74
+ .map(({ model }) => ({ ...model, label: displayModelName(model) }));
75
+ const labelCounts = new Map();
76
+ for (const model of visible) {
77
+ const key = model.label.toLowerCase();
78
+ labelCounts.set(key, (labelCounts.get(key) ?? 0) + 1);
79
+ }
80
+ // Distinct native versions may share a friendly name. Keep separate, clean,
81
+ // reversible choices instead of coalescing them by that presentation string.
82
+ for (const model of visible)
83
+ if (labelCounts.get(model.label.toLowerCase()) > 1)
84
+ model.label = displayModelName(model.id);
85
+ const used = new Set();
86
+ for (const model of visible) {
87
+ const base = model.label;
88
+ let suffix = 1;
89
+ while (used.has(model.label.toLowerCase()))
90
+ model.label = `${base} · ${++suffix}`;
91
+ used.add(model.label.toLowerCase());
92
+ }
93
+ return visible;
94
+ }
95
+ //# sourceMappingURL=model-presentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-presentation.js","sourceRoot":"","sources":["../../../src/shared/model-presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type ModelChoice, type Preference } from './types.ts';
2
+ /** Only remove an exact, known effort suffix for Antigravity display. Execution keeps the raw ID. */
3
+ export declare function modelName(preference: Preference): string;
4
+ /** Group only variants explicitly advertised by the CLI, never infer missing levels. */
5
+ export declare function groupAgyModels(raw: ModelChoice[]): ModelChoice[];
6
+ /** Accept old raw IDs and new grouped choices; return the exact executable preference. */
7
+ export declare function resolveModel(preference: Preference, models: ModelChoice[]): Preference;
@@ -0,0 +1,35 @@
1
+ import { cliOf, EFFORTS } from "./types.js";
2
+ /** Only remove an exact, known effort suffix for Antigravity display. Execution keeps the raw ID. */
3
+ export function modelName(preference) {
4
+ return cliOf(preference) === 'antigravity' && preference.model.endsWith(`-${preference.effort}`)
5
+ ? preference.model.slice(0, -preference.effort.length - 1)
6
+ : preference.model;
7
+ }
8
+ /** Group only variants explicitly advertised by the CLI, never infer missing levels. */
9
+ export function groupAgyModels(raw) {
10
+ const groups = new Map();
11
+ for (const model of raw) {
12
+ const effort = EFFORTS.find((e) => e !== 'default' && model.id.endsWith(`-${e}`) && model.label.toLowerCase().endsWith(`(${e})`));
13
+ const id = effort ? model.id.slice(0, -effort.length - 1) : model.id;
14
+ const level = effort ?? 'default';
15
+ const group = groups.get(id) ?? {
16
+ id,
17
+ label: effort ? model.label.replace(/\s*\([^()]+\)$/, '') : model.label,
18
+ efforts: [],
19
+ variants: {},
20
+ };
21
+ if (!group.efforts.includes(level))
22
+ group.efforts.push(level);
23
+ group.variants[level] = model.id;
24
+ groups.set(id, group);
25
+ }
26
+ return [...groups.values()].map((m) => ({ ...m, efforts: EFFORTS.filter((e) => m.efforts.includes(e)) }));
27
+ }
28
+ /** Accept old raw IDs and new grouped choices; return the exact executable preference. */
29
+ export function resolveModel(preference, models) {
30
+ const model = models.find((m) => m.id === preference.model || Object.values(m.variants ?? {}).includes(preference.model));
31
+ if (!model || !model.efforts?.includes(preference.effort))
32
+ throw new Error('模型或思考强度已不可用,请重新选择');
33
+ return { ...preference, model: model.variants?.[preference.effort] ?? model.id };
34
+ }
35
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/shared/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /** Counts reported by the CLI. Scope is explicit; snapshots must not be added twice. */
2
+ export interface TokenUsage {
3
+ total: number;
4
+ input?: number;
5
+ output?: number;
6
+ cacheRead?: number;
7
+ scope: 'response' | 'run' | 'session' | 'reported';
8
+ }
9
+ export interface Telemetry {
10
+ contextEstimated?: boolean;
11
+ contextSource?: string;
12
+ usage?: TokenUsage;
13
+ contextUsed?: number;
14
+ contextCapacity?: number;
15
+ }
16
+ export declare function compactTokens(value: number): string;
17
+ /** Same calendar-day/year cuts and Chinese templates as Harness formatMessageClock. */
18
+ export declare function messageClock(time: string, now?: Date): string;
@@ -0,0 +1,16 @@
1
+ export function compactTokens(value) {
2
+ const scaled = (n) => String(n >= 100 ? Math.round(n) : Math.round(n * 10) / 10);
3
+ return value < 1000 ? String(value) : value < 1e6 ? `${scaled(value / 1000)}K` : `${scaled(value / 1e6)}M`;
4
+ }
5
+ /** Same calendar-day/year cuts and Chinese templates as Harness formatMessageClock. */
6
+ export function messageClock(time, now = new Date()) {
7
+ const d = new Date(time);
8
+ if (!Number.isFinite(d.getTime()))
9
+ return '—';
10
+ const clock = `${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`;
11
+ if (d.toDateString() === now.toDateString())
12
+ return clock;
13
+ const day = `${d.getMonth() + 1}月${d.getDate()}日 ${clock}`;
14
+ return d.getFullYear() === now.getFullYear() ? day : `${d.getFullYear()}年 ${day}`;
15
+ }
16
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/shared/telemetry.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IACxF,OAAO,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAA;AAC5G,CAAC;AACD,uFAAuF;AACvF,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IACzD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,GAAG,CAAA;IAC7C,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAA;IACnG,IAAI,CAAC,CAAC,YAAY,EAAE,KAAK,GAAG,CAAC,YAAY,EAAE;QAAE,OAAO,KAAK,CAAA;IACzD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,EAAE,CAAA;IAC1D,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,GAAG,EAAE,CAAA;AACnF,CAAC"}
@@ -0,0 +1,127 @@
1
+ import type { Telemetry, TokenUsage } from './telemetry.ts';
2
+ export declare const EFFORTS: readonly ["default", "none", "minimal", "low", "medium", "high", "xhigh", "max", "ultra"];
3
+ export declare const CLI_IDS: readonly ["antigravity", "codex", "claude", "kimi", "mimo", "zcode", "grok", "omp", "pi", "hermes", "opencode"];
4
+ export type ActiveCliId = (typeof CLI_IDS)[number];
5
+ /** Retired IDs remain readable in existing worker history, never selectable for execution. */
6
+ export type CliId = ActiveCliId | 'harness';
7
+ export declare const RETIRED_HARNESS_NOTICE = "\u5916\u90E8 Harness CLI \u5165\u53E3\u5DF2\u79FB\u9664\uFF1B\u5386\u53F2\u8BB0\u5F55\u4EC5\u4F9B\u67E5\u770B\u3002\u8BF7\u65B0\u5EFA Hermes Agent \u4EFB\u52A1\u3002";
8
+ export declare const isRetiredCli: (cli: CliId) => cli is "harness";
9
+ export declare const CLI_LABELS: Record<CliId, string>;
10
+ /** Short CLI stems used for automatic Worker names; protocol IDs remain unchanged. */
11
+ export declare const CLI_SHORT_NAMES: Record<CliId, string>;
12
+ export declare const cliOf: (preference: Preference) => CliId;
13
+ export declare const effortLabel: (effort: string) => string;
14
+ export declare const LEGACY_ACCOUNT_RECORD_NOTICE = "\u6B64\u5386\u53F2\u4EFB\u52A1\u7F3A\u5C11\u8D26\u53F7\u8BB0\u5F55\uFF0C\u8BF7\u65B0\u5EFA\u4EFB\u52A1";
15
+ export type Effort = (typeof EFFORTS)[number];
16
+ export type WorkerStatus = 'queued' | 'running' | 'stopping' | 'completed' | 'failed' | 'interrupted';
17
+ export type TaskMode = 'plan' | 'accept-edits';
18
+ export interface Preference {
19
+ /** Missing in v0.1.x data means Antigravity. */
20
+ cli?: CliId;
21
+ model: string;
22
+ effort: Effort;
23
+ }
24
+ export interface ModelChoice {
25
+ id: string;
26
+ label: string;
27
+ /** Explicit native cost evidence only; missing/default zero prices are unknown. */
28
+ cost?: 'free' | 'paid' | 'unknown';
29
+ efforts?: Effort[];
30
+ /** Exact CLI model IDs for the supported effort variants. */
31
+ variants?: Partial<Record<Effort, string>>;
32
+ }
33
+ /** User-editable role library. Prompts are user instructions, never executable HTML. */
34
+ export interface RolePreset {
35
+ id: string;
36
+ name: string;
37
+ summary: string;
38
+ prompt: string;
39
+ builtin?: boolean;
40
+ source?: string;
41
+ }
42
+ /** Frozen when a worker is created; library edits cannot change an existing conversation. */
43
+ export interface RoleSnapshot {
44
+ presetId?: string;
45
+ name: string;
46
+ summary: string;
47
+ prompt: string;
48
+ }
49
+ export interface Worker {
50
+ id: string;
51
+ parentSessionId: string;
52
+ project: string;
53
+ title: string;
54
+ agentName?: string;
55
+ /** Provenance distinguishes automatic names from user-supplied lookalikes. */
56
+ agentNameOrigin?: 'auto' | 'custom';
57
+ /** Exact former automatic names reserved for compatible historical references. */
58
+ nameAliases?: string[];
59
+ /** Reversible deletion keeps the original Worker, native session and account binding. */
60
+ archivedAt?: string;
61
+ role?: RoleSnapshot;
62
+ preference: Preference;
63
+ mode: TaskMode;
64
+ conversationId?: string;
65
+ status: WorkerStatus;
66
+ createdAt: string;
67
+ updatedAt: string;
68
+ runId: string;
69
+ jobId?: string;
70
+ error?: string;
71
+ observedModel?: string;
72
+ lastResult?: string;
73
+ }
74
+ /** Stable, non-mutating name for histories created before named workers. */
75
+ export declare const workerName: (worker: Worker) => string;
76
+ export interface WorkerEvent {
77
+ seq: number;
78
+ runId: string;
79
+ time: string;
80
+ kind: 'user' | 'assistant' | 'tool' | 'status' | 'diagnostic' | 'result';
81
+ text: string;
82
+ observedModel?: string;
83
+ step?: number;
84
+ state?: string;
85
+ detail?: string;
86
+ }
87
+ export interface TimelineItem {
88
+ usage?: TokenUsage;
89
+ id: string;
90
+ kind: WorkerEvent['kind'];
91
+ text: string;
92
+ time: string;
93
+ state?: string;
94
+ detail?: string;
95
+ /** Run ended without a final tool status; the observed CLI state stays intact. */
96
+ runStatus?: WorkerStatus;
97
+ runStartedAt?: string;
98
+ runEndedAt?: string;
99
+ runOutcome?: WorkerStatus;
100
+ }
101
+ export interface WorkerSnapshot {
102
+ telemetry?: Telemetry;
103
+ workers: Worker[];
104
+ archivedWorkers?: Worker[];
105
+ selected?: Worker;
106
+ /** Safe selected-Worker admission information; never exposes account identities. */
107
+ resumeBlockedReason?: string;
108
+ timeline: TimelineItem[];
109
+ revision: number;
110
+ truncated: boolean;
111
+ }
112
+ /** A bounded, frozen reading page; indexes/count refer to the moment it was read. */
113
+ export interface HistoryPage {
114
+ workerId: string;
115
+ items: TimelineItem[];
116
+ start: number;
117
+ end: number;
118
+ total: number;
119
+ hasOlder: boolean;
120
+ hasNewer: boolean;
121
+ }
122
+ export declare const active: (status: WorkerStatus) => status is "queued" | "running" | "stopping";
123
+ /** Fold repeated step updates without duplicating streamed text or the final response. */
124
+ export declare function foldEvents(events: readonly WorkerEvent[], endedRun?: {
125
+ runId: string;
126
+ status: WorkerStatus;
127
+ }): TimelineItem[];