ptbk 0.119.0-16 → 0.119.0-21

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 (330) hide show
  1. package/README.md +27 -9
  2. package/dist/book/commitments.d.ts +38 -10
  3. package/dist/book/commitments.js +61 -17
  4. package/dist/book/commitments.js.map +1 -1
  5. package/dist/book/convert.d.ts +36 -0
  6. package/dist/book/convert.js +156 -0
  7. package/dist/book/convert.js.map +1 -0
  8. package/dist/book/parse.d.ts +50 -13
  9. package/dist/book/parse.js +132 -45
  10. package/dist/book/parse.js.map +1 -1
  11. package/dist/book/references.d.ts +12 -4
  12. package/dist/book/references.js +34 -9
  13. package/dist/book/references.js.map +1 -1
  14. package/dist/book/write.d.ts +42 -0
  15. package/dist/book/write.js +74 -0
  16. package/dist/book/write.js.map +1 -0
  17. package/dist/browser/browser.d.ts +122 -12
  18. package/dist/browser/browser.js +372 -21
  19. package/dist/browser/browser.js.map +1 -1
  20. package/dist/browser/recording.d.ts +3 -3
  21. package/dist/browser/recording.js +5 -5
  22. package/dist/browser/recording.js.map +1 -1
  23. package/dist/chats/chat-book.d.ts +105 -0
  24. package/dist/chats/chat-book.js +180 -0
  25. package/dist/chats/chat-book.js.map +1 -0
  26. package/dist/chats/conversation.d.ts +54 -0
  27. package/dist/chats/conversation.js +188 -0
  28. package/dist/chats/conversation.js.map +1 -0
  29. package/dist/chats/local.d.ts +46 -0
  30. package/dist/chats/local.js +184 -0
  31. package/dist/chats/local.js.map +1 -0
  32. package/dist/chats/migration.d.ts +12 -0
  33. package/dist/chats/migration.js +62 -0
  34. package/dist/chats/migration.js.map +1 -0
  35. package/dist/chats/service.d.ts +81 -0
  36. package/dist/chats/service.js +122 -0
  37. package/dist/chats/service.js.map +1 -0
  38. package/dist/chats/store.d.ts +132 -0
  39. package/dist/chats/store.js +181 -0
  40. package/dist/chats/store.js.map +1 -0
  41. package/dist/chats/task-chats.d.ts +52 -0
  42. package/dist/chats/task-chats.js +96 -0
  43. package/dist/chats/task-chats.js.map +1 -0
  44. package/dist/cli/chats.d.ts +45 -0
  45. package/dist/cli/chats.js +108 -0
  46. package/dist/cli/chats.js.map +1 -0
  47. package/dist/cli/commands/add.js +32 -22
  48. package/dist/cli/commands/add.js.map +1 -1
  49. package/dist/cli/commands/answer.d.ts +2 -1
  50. package/dist/cli/commands/answer.js +35 -41
  51. package/dist/cli/commands/answer.js.map +1 -1
  52. package/dist/cli/commands/ask.d.ts +7 -0
  53. package/dist/cli/commands/ask.js +37 -0
  54. package/dist/cli/commands/ask.js.map +1 -0
  55. package/dist/cli/commands/boilerplates.js +14 -3
  56. package/dist/cli/commands/boilerplates.js.map +1 -1
  57. package/dist/cli/commands/chat.d.ts +9 -0
  58. package/dist/cli/commands/chat.js +89 -0
  59. package/dist/cli/commands/chat.js.map +1 -0
  60. package/dist/cli/commands/dashboard.d.ts +3 -1
  61. package/dist/cli/commands/dashboard.js +41 -3
  62. package/dist/cli/commands/dashboard.js.map +1 -1
  63. package/dist/cli/commands/find.js +6 -8
  64. package/dist/cli/commands/find.js.map +1 -1
  65. package/dist/cli/commands/fix.js +4 -6
  66. package/dist/cli/commands/fix.js.map +1 -1
  67. package/dist/cli/commands/init.d.ts +0 -1
  68. package/dist/cli/commands/init.js +38 -38
  69. package/dist/cli/commands/init.js.map +1 -1
  70. package/dist/cli/commands/lint.js +16 -2
  71. package/dist/cli/commands/lint.js.map +1 -1
  72. package/dist/cli/commands/list.js +21 -13
  73. package/dist/cli/commands/list.js.map +1 -1
  74. package/dist/cli/commands/migrate.d.ts +2 -1
  75. package/dist/cli/commands/migrate.js +70 -24
  76. package/dist/cli/commands/migrate.js.map +1 -1
  77. package/dist/cli/commands/pause.d.ts +8 -0
  78. package/dist/cli/commands/pause.js +40 -0
  79. package/dist/cli/commands/pause.js.map +1 -0
  80. package/dist/cli/commands/plan.js +6 -9
  81. package/dist/cli/commands/plan.js.map +1 -1
  82. package/dist/cli/commands/recover.js +7 -3
  83. package/dist/cli/commands/recover.js.map +1 -1
  84. package/dist/cli/commands/restart.d.ts +3 -1
  85. package/dist/cli/commands/restart.js +74 -18
  86. package/dist/cli/commands/restart.js.map +1 -1
  87. package/dist/cli/commands/resume.d.ts +8 -0
  88. package/dist/cli/commands/resume.js +15 -0
  89. package/dist/cli/commands/resume.js.map +1 -0
  90. package/dist/cli/commands/run.js +6 -9
  91. package/dist/cli/commands/run.js.map +1 -1
  92. package/dist/cli/commands/start.js +40 -36
  93. package/dist/cli/commands/start.js.map +1 -1
  94. package/dist/cli/commands/status.d.ts +2 -1
  95. package/dist/cli/commands/status.js +5 -1
  96. package/dist/cli/commands/status.js.map +1 -1
  97. package/dist/cli/commands/stop.d.ts +3 -1
  98. package/dist/cli/commands/stop.js +18 -8
  99. package/dist/cli/commands/stop.js.map +1 -1
  100. package/dist/cli/commands/verify.js +7 -7
  101. package/dist/cli/commands/verify.js.map +1 -1
  102. package/dist/cli/common.d.ts +13 -0
  103. package/dist/cli/common.js +22 -0
  104. package/dist/cli/common.js.map +1 -1
  105. package/dist/cli/engine-delegation.d.ts +14 -0
  106. package/dist/cli/engine-delegation.js +46 -0
  107. package/dist/cli/engine-delegation.js.map +1 -0
  108. package/dist/cli/lifecycle.d.ts +40 -0
  109. package/dist/cli/lifecycle.js +71 -0
  110. package/dist/cli/lifecycle.js.map +1 -0
  111. package/dist/cli/registry.js +113 -31
  112. package/dist/cli/registry.js.map +1 -1
  113. package/dist/cli/service-view.d.ts +14 -2
  114. package/dist/cli/service-view.js +46 -5
  115. package/dist/cli/service-view.js.map +1 -1
  116. package/dist/cli/sources.js +5 -8
  117. package/dist/cli/sources.js.map +1 -1
  118. package/dist/cli/spec.js +1 -1
  119. package/dist/cli/spec.js.map +1 -1
  120. package/dist/common/app-data.d.ts +9 -0
  121. package/dist/common/app-data.js +20 -0
  122. package/dist/common/app-data.js.map +1 -0
  123. package/dist/common/errors.d.ts +2 -0
  124. package/dist/common/errors.js.map +1 -1
  125. package/dist/common/time.d.ts +6 -0
  126. package/dist/common/time.js +9 -0
  127. package/dist/common/time.js.map +1 -1
  128. package/dist/engine/agenda.d.ts +213 -43
  129. package/dist/engine/agenda.js +846 -260
  130. package/dist/engine/agenda.js.map +1 -1
  131. package/dist/engine/executor.d.ts +23 -7
  132. package/dist/engine/executor.js +131 -84
  133. package/dist/engine/executor.js.map +1 -1
  134. package/dist/engine/generated.d.ts +21 -1
  135. package/dist/engine/generated.js +36 -21
  136. package/dist/engine/generated.js.map +1 -1
  137. package/dist/engine/preview.js +10 -10
  138. package/dist/engine/preview.js.map +1 -1
  139. package/dist/engine/prompt.d.ts +16 -4
  140. package/dist/engine/prompt.js +22 -4
  141. package/dist/engine/prompt.js.map +1 -1
  142. package/dist/engine/routing.js +28 -4
  143. package/dist/engine/routing.js.map +1 -1
  144. package/dist/engine/snapshot.d.ts +178 -29
  145. package/dist/engine/state.d.ts +40 -13
  146. package/dist/engine/state.js +20 -5
  147. package/dist/engine/state.js.map +1 -1
  148. package/dist/engine/task-trace.d.ts +35 -7
  149. package/dist/engine/task-trace.js +74 -15
  150. package/dist/engine/task-trace.js.map +1 -1
  151. package/dist/engine/team.d.ts +20 -7
  152. package/dist/engine/team.js +30 -24
  153. package/dist/engine/team.js.map +1 -1
  154. package/dist/engine/traces.d.ts +1 -1
  155. package/dist/engine/traces.js +1 -1
  156. package/dist/expert/_main.md +67 -52
  157. package/dist/expert/agents/_index.md +11 -13
  158. package/dist/expert/agents/chatter.md +31 -0
  159. package/dist/expert/agents/consistency.md +6 -11
  160. package/dist/expert/agents/core-agents.md +9 -7
  161. package/dist/expert/agents/expert.md +2 -2
  162. package/dist/expert/agents/fixer.md +24 -0
  163. package/dist/expert/agents/learning.md +1 -1
  164. package/dist/expert/agents/non-agents.md +6 -4
  165. package/dist/expert/agents/teacher.md +1 -1
  166. package/dist/expert/agents/visual-identity.md +4 -4
  167. package/dist/expert/book-language/_index.md +9 -8
  168. package/dist/expert/book-language/commitments/_index.md +23 -3
  169. package/dist/expert/book-language/commitments/agent.md +11 -0
  170. package/dist/expert/book-language/commitments/chat-member.md +7 -0
  171. package/dist/expert/book-language/commitments/chat-message.md +11 -0
  172. package/dist/expert/book-language/commitments/chat-status.md +7 -0
  173. package/dist/expert/book-language/commitments/chat.md +11 -0
  174. package/dist/expert/book-language/commitments/entity.md +9 -0
  175. package/dist/expert/book-language/commitments/from.md +1 -1
  176. package/dist/expert/book-language/commitments/goal.md +6 -2
  177. package/dist/expert/book-language/commitments/link.md +9 -0
  178. package/dist/expert/book-language/commitments/task-depends-on.md +1 -1
  179. package/dist/expert/book-language/commitments/task-parent.md +1 -1
  180. package/dist/expert/book-language/commitments/task.md +7 -3
  181. package/dist/expert/book-language/commitments/team.md +1 -1
  182. package/dist/expert/book-language/inheritance.md +2 -2
  183. package/dist/expert/book-language/references.md +20 -24
  184. package/dist/expert/book-language/syntax.md +54 -11
  185. package/dist/expert/cli/acceptance.md +59 -24
  186. package/dist/expert/cli/api.md +23 -9
  187. package/dist/expert/cli/authoring.md +6 -4
  188. package/dist/expert/cli/autonomous-operation.md +3 -3
  189. package/dist/expert/cli/browser.md +29 -18
  190. package/dist/expert/cli/channels.md +5 -7
  191. package/dist/expert/cli/chat-ui.md +32 -0
  192. package/dist/expert/cli/chats.md +59 -0
  193. package/dist/expert/cli/cli.md +44 -26
  194. package/dist/expert/cli/configuration.md +3 -3
  195. package/dist/expert/cli/controls.md +13 -7
  196. package/dist/expert/cli/dashboard-details.md +23 -0
  197. package/dist/expert/cli/dashboard-layout.md +19 -12
  198. package/dist/expert/cli/dashboard.md +12 -8
  199. package/dist/expert/cli/execution.md +8 -6
  200. package/dist/expert/cli/first-task.md +4 -4
  201. package/dist/expert/cli/generated-names.md +44 -0
  202. package/dist/expert/cli/git-persistence.md +19 -17
  203. package/dist/expert/cli/global-dashboard.md +33 -0
  204. package/dist/expert/cli/goal-discovery.md +1 -1
  205. package/dist/expert/cli/help.md +1 -1
  206. package/dist/expert/cli/initialization-ui.md +2 -0
  207. package/dist/expert/cli/initialization.md +9 -7
  208. package/dist/expert/cli/interactive-ui.md +9 -5
  209. package/dist/expert/cli/locking.md +21 -0
  210. package/dist/expert/cli/migration.md +22 -6
  211. package/dist/expert/cli/process-modes.md +21 -13
  212. package/dist/expert/cli/recovery.md +8 -6
  213. package/dist/expert/cli/recurrence.md +1 -1
  214. package/dist/expert/cli/rich-input.md +2 -2
  215. package/dist/expert/cli/service-lifecycle.md +57 -0
  216. package/dist/expert/cli/start.md +2 -2
  217. package/dist/expert/cli/status-view.md +16 -12
  218. package/dist/expert/cli/task-books.md +11 -15
  219. package/dist/expert/cli/task-identity.md +8 -10
  220. package/dist/expert/cli/task-markdown.md +6 -10
  221. package/dist/expert/cli/task-origins.md +3 -1
  222. package/dist/expert/cli/task-relationships.md +5 -9
  223. package/dist/expert/cli/team.md +17 -7
  224. package/dist/expert/cli/terminal.md +20 -12
  225. package/dist/expert/cli/trace-configuration.md +1 -1
  226. package/dist/expert/cli/traces.md +19 -23
  227. package/dist/expert/cli/user-interactions.md +14 -26
  228. package/dist/expert/cli/workspace.md +15 -9
  229. package/dist/expert/concepts/engine-and-project.md +11 -0
  230. package/dist/expert/concepts/project-model.md +39 -0
  231. package/dist/expert/dictionary.md +21 -15
  232. package/dist/harness/plugins/claude-code/index.js +1 -0
  233. package/dist/harness/plugins/claude-code/index.js.map +1 -1
  234. package/dist/harness/plugins/cline/index.js +1 -0
  235. package/dist/harness/plugins/cline/index.js.map +1 -1
  236. package/dist/harness/plugins/openai-codex/index.js +1 -0
  237. package/dist/harness/plugins/openai-codex/index.js.map +1 -1
  238. package/dist/harness/plugins/opencode/index.js +1 -0
  239. package/dist/harness/plugins/opencode/index.js.map +1 -1
  240. package/dist/harness/types.d.ts +3 -1
  241. package/dist/project/agents.d.ts +29 -81
  242. package/dist/project/agents.js +48 -267
  243. package/dist/project/agents.js.map +1 -1
  244. package/dist/project/books.d.ts +150 -0
  245. package/dist/project/books.js +253 -0
  246. package/dist/project/books.js.map +1 -0
  247. package/dist/project/config.js +2 -2
  248. package/dist/project/config.js.map +1 -1
  249. package/dist/project/defaults.d.ts +35 -6
  250. package/dist/project/defaults.js +73 -40
  251. package/dist/project/defaults.js.map +1 -1
  252. package/dist/project/expert.js +18 -10
  253. package/dist/project/expert.js.map +1 -1
  254. package/dist/project/git.d.ts +4 -3
  255. package/dist/project/git.js +16 -5
  256. package/dist/project/git.js.map +1 -1
  257. package/dist/project/setup.d.ts +4 -1
  258. package/dist/project/setup.js +26 -6
  259. package/dist/project/setup.js.map +1 -1
  260. package/dist/service/actions.d.ts +34 -10
  261. package/dist/service/actions.js +51 -19
  262. package/dist/service/actions.js.map +1 -1
  263. package/dist/service/control.d.ts +53 -1
  264. package/dist/service/control.js +64 -4
  265. package/dist/service/control.js.map +1 -1
  266. package/dist/service/discovery.d.ts +133 -0
  267. package/dist/service/discovery.js +138 -0
  268. package/dist/service/discovery.js.map +1 -0
  269. package/dist/service/host.d.ts +8 -1
  270. package/dist/service/host.js +65 -18
  271. package/dist/service/host.js.map +1 -1
  272. package/dist/service/http.d.ts +3 -0
  273. package/dist/service/http.js +26 -6
  274. package/dist/service/http.js.map +1 -1
  275. package/dist/service/launcher.d.ts +66 -13
  276. package/dist/service/launcher.js +78 -18
  277. package/dist/service/launcher.js.map +1 -1
  278. package/dist/service/records.d.ts +12 -2
  279. package/dist/service/records.js +19 -5
  280. package/dist/service/records.js.map +1 -1
  281. package/dist/service/spa/app.css +83 -2
  282. package/dist/service/spa/app.js +393 -72
  283. package/dist/service/supervisor.js +7 -1
  284. package/dist/service/supervisor.js.map +1 -1
  285. package/dist/service/worker.js +14 -5
  286. package/dist/service/worker.js.map +1 -1
  287. package/dist/tasks/authoring.d.ts +3 -5
  288. package/dist/tasks/authoring.js +6 -7
  289. package/dist/tasks/authoring.js.map +1 -1
  290. package/dist/tasks/book-task.d.ts +18 -10
  291. package/dist/tasks/book-task.js +27 -23
  292. package/dist/tasks/book-task.js.map +1 -1
  293. package/dist/tasks/eligibility.d.ts +15 -7
  294. package/dist/tasks/eligibility.js +41 -14
  295. package/dist/tasks/eligibility.js.map +1 -1
  296. package/dist/tasks/identity.d.ts +41 -15
  297. package/dist/tasks/identity.js +100 -31
  298. package/dist/tasks/identity.js.map +1 -1
  299. package/dist/tasks/markdown.d.ts +7 -14
  300. package/dist/tasks/markdown.js +15 -29
  301. package/dist/tasks/markdown.js.map +1 -1
  302. package/dist/tasks/model.d.ts +20 -4
  303. package/dist/tasks/model.js +17 -0
  304. package/dist/tasks/model.js.map +1 -1
  305. package/dist/tasks/sources.d.ts +7 -2
  306. package/dist/tasks/sources.js +46 -35
  307. package/dist/tasks/sources.js.map +1 -1
  308. package/dist/ui/chat-client.d.ts +70 -0
  309. package/dist/ui/chat-client.js +209 -0
  310. package/dist/ui/chat-client.js.map +1 -0
  311. package/dist/ui/dashboard.d.ts +8 -5
  312. package/dist/ui/dashboard.js +227 -86
  313. package/dist/ui/dashboard.js.map +1 -1
  314. package/dist/ui/details.d.ts +64 -0
  315. package/dist/ui/details.js +175 -0
  316. package/dist/ui/details.js.map +1 -0
  317. package/dist/ui/global-dashboard.d.ts +59 -0
  318. package/dist/ui/global-dashboard.js +307 -0
  319. package/dist/ui/global-dashboard.js.map +1 -0
  320. package/dist/ui/status-view.d.ts +7 -0
  321. package/dist/ui/status-view.js +94 -36
  322. package/dist/ui/status-view.js.map +1 -1
  323. package/package.json +1 -1
  324. package/dist/engine/requests.d.ts +0 -111
  325. package/dist/engine/requests.js +0 -173
  326. package/dist/engine/requests.js.map +0 -1
  327. package/dist/expert/book-language/commitments/task-id.md +0 -9
  328. package/dist/tasks/prepare.d.ts +0 -33
  329. package/dist/tasks/prepare.js +0 -90
  330. package/dist/tasks/prepare.js.map +0 -1
@@ -0,0 +1,175 @@
1
+ import { formatShortTime } from '../common/time.js';
2
+ /**
3
+ * What the current service state means, including a pending intent and whether work is still draining.
4
+ *
5
+ * @private service controls view
6
+ */
7
+ export function lifecycleExplanation(snapshot) {
8
+ const { state, lifecycle } = snapshot.service;
9
+ const task = snapshot.current ? `"${snapshot.current.taskTitle}"` : 'the current task';
10
+ switch (state) {
11
+ case 'running':
12
+ return snapshot.current ? 'new tasks start when ready' : 'idle is normal; new tasks start when ready';
13
+ case 'pausing':
14
+ return `${task} finishes first, then no task starts until resumed`;
15
+ case 'pause':
16
+ return 'alive and controllable; no task runs or starts';
17
+ case 'stopping':
18
+ if (lifecycle?.intent === 'force-stop')
19
+ return 'force stop: owned work is being interrupted (recoverable)';
20
+ if (lifecycle?.shutdown)
21
+ return lifecycle.intent === 'restart' ? 'shutting down for a restart (one replacement starts next)' : 'shutting down';
22
+ return `${task} finishes first, then the service ${lifecycle?.intent === 'restart' ? 'restarts (exactly one replacement)' : 'exits'}`;
23
+ case 'stopped':
24
+ return 'no engine is running (an observation, not a live state)';
25
+ case 'finished':
26
+ return 'the finite run ended';
27
+ }
28
+ }
29
+ /**
30
+ * Human description of the live service state with its pending intent (never a fifth `stopped` live state).
31
+ *
32
+ * @private service controls view
33
+ */
34
+ export function lifecycleSummary(snapshot) {
35
+ return `${snapshot.service.state} — ${lifecycleExplanation(snapshot)}`;
36
+ }
37
+ /**
38
+ * The lifecycle actions applicable in the current state, shared by the terminal panel, browser and one-shot hints.
39
+ *
40
+ * @private service controls view
41
+ */
42
+ export function lifecycleActions(snapshot) {
43
+ const { state, lifecycle, mode } = snapshot.service;
44
+ if (state === 'stopped' || state === 'finished')
45
+ return [{ key: '', label: 'start', command: 'ptbk start', action: '' }];
46
+ const actions = [];
47
+ const restartable = lifecycle?.restartable ?? mode !== 'run';
48
+ if (state === 'running')
49
+ actions.push({ key: 'P', label: 'pause', command: 'ptbk pause', action: 'pause' });
50
+ if (state === 'pause')
51
+ actions.push({ key: 'P', label: 'resume', command: 'ptbk resume', action: 'resume' });
52
+ if (state === 'pausing')
53
+ actions.push({ key: 'U', label: 'cancel pause', command: 'ptbk resume', action: 'resume' });
54
+ if (state === 'stopping' && lifecycle?.cancellable) {
55
+ actions.push({ key: 'U', label: `cancel ${lifecycle.intent === 'restart' ? 'restart' : 'stop'}`, command: 'ptbk resume', action: 'resume' });
56
+ actions.push({ key: 'P', label: 'pause instead', command: 'ptbk pause', action: 'pause', confirm: `Cancel the pending ${lifecycle.intent === 'restart' ? 'restart' : 'stop'} and pause instead?` });
57
+ }
58
+ if (state !== 'stopping' || (lifecycle?.intent === 'restart' && lifecycle.cancellable))
59
+ actions.push({ key: 'X', label: state === 'pausing' ? 'stop instead of pause' : 'stop (graceful)', command: 'ptbk stop', action: 'stop' });
60
+ if (restartable && state !== 'stopping')
61
+ actions.push({ key: 'R', label: 'restart', command: 'ptbk restart', action: 'restart', confirm: 'Restart the service? The current task finishes first; then exactly one replacement starts with the same configuration.' });
62
+ if (lifecycle?.intent !== 'force-stop')
63
+ actions.push({ key: 'F', label: 'force stop', command: 'ptbk stop --force', action: 'force-stop', confirm: 'Force stop now? Owned work is interrupted immediately (recoverable, never marked done).' });
64
+ return actions;
65
+ }
66
+ /**
67
+ * Human label of a model in one execution context.
68
+ *
69
+ * @private execution details view
70
+ */
71
+ export function modelLabel(model) {
72
+ switch (model.status) {
73
+ case 'reported':
74
+ return `${model.value} (reported by the harness)`;
75
+ case 'requested':
76
+ return `${model.value} (requested; not yet confirmed by the harness)`;
77
+ case 'automatic':
78
+ return 'automatic — harness default, concrete model not reported';
79
+ case 'unknown':
80
+ return 'unknown — not reported';
81
+ }
82
+ }
83
+ /**
84
+ * Human label of a thinking level in one execution context, in the harness's own terminology.
85
+ *
86
+ * @private execution details view
87
+ */
88
+ export function thinkingLabel(thinking) {
89
+ const term = thinking.term ? ` — ${thinking.term}` : '';
90
+ switch (thinking.status) {
91
+ case 'requested':
92
+ return `${thinking.value}${term}`;
93
+ case 'automatic':
94
+ return `automatic (harness default, level not reported)${term}`;
95
+ case 'not-applicable':
96
+ return 'not applicable — this harness has no thinking-level setting';
97
+ case 'unknown':
98
+ return thinking.value ? `${thinking.value} (unverified)` : 'unknown — not reported';
99
+ }
100
+ }
101
+ /**
102
+ * Compact one-line configuration of the task's own execution context: agent, harness, model and thinking level.
103
+ *
104
+ * @private execution details view
105
+ */
106
+ export function executionOneLine(execution) {
107
+ const own = execution.contexts.find((context) => context.role === 'task') ?? execution.contexts[0];
108
+ if (!own)
109
+ return `Agent ${execution.agent.name}`;
110
+ const model = own.model.value ? `${own.model.value}${own.model.status === 'reported' ? '' : ` (${own.model.status})`}` : own.model.status === 'automatic' ? 'automatic model' : 'model unknown';
111
+ const thinking = own.thinkingLevel.status === 'requested' ? `${own.thinkingLevel.term?.split(' (')[0] ?? 'thinking'} ${own.thinkingLevel.value}` : own.thinkingLevel.status === 'not-applicable' ? 'thinking n/a' : `thinking ${own.thinkingLevel.status}`;
112
+ return `${execution.status === 'historical' ? 'Last run: ' : ''}Agent ${execution.agent.name} · Harness ${own.harness.name}${own.harness.version ? ` ${own.harness.version}` : ''} · Model ${model} · ${thinking}`;
113
+ }
114
+ /**
115
+ * Lines of the expandable execution detail panel (also the raw EXECUTION section).
116
+ *
117
+ * @private execution details view
118
+ */
119
+ export function executionDetailLines(execution, style) {
120
+ const muted = style?.muted ?? ((text) => text);
121
+ const bold = style?.bold ?? ((text) => text);
122
+ if (!execution)
123
+ return [muted('No execution yet in this service (nothing is running and no previous run is recorded).')];
124
+ const lines = [];
125
+ lines.push(execution.status === 'active'
126
+ ? `${bold('Current execution')} ${muted(`· ${execution.task.kind} · phase ${execution.phase ?? 'unknown'}${execution.attempt ? ` · attempt ${execution.attempt}/${execution.attemptBudget ?? '?'}` : ''}`)}`
127
+ : `${bold('Last finished execution (historical, not running now)')} ${muted(`· ${execution.outcome ?? ''}${execution.endedAt ? ` at ${formatShortTime(Date.parse(execution.endedAt))}` : ''}`)}`);
128
+ lines.push(`Task ${execution.task.title}${muted(` (${execution.task.ref})`)}`);
129
+ if (execution.task.source)
130
+ lines.push(`Source ${execution.task.source}${execution.task.trace ? muted(` · trace ${execution.task.trace}`) : ''}`);
131
+ lines.push(`Agent ${execution.agent.name}${execution.agent.source ? muted(` · ${execution.agent.source}`) : ''}`);
132
+ for (const context of execution.contexts) {
133
+ if (context.role === 'consultation')
134
+ lines.push(bold(`Consultation · ${context.by ?? '?'} asks ${context.agent} (${context.state})`));
135
+ lines.push(`${context.role === 'consultation' ? ' ' : ''}Harness ${context.harness.name}${context.harness.version ? ` ${context.harness.version}` : ''}${muted(` (${context.harness.id})`)}`);
136
+ lines.push(`${context.role === 'consultation' ? ' ' : ''}Model ${modelLabel(context.model)}${context.model.source ? muted(` · ${context.model.source}`) : ''}`);
137
+ lines.push(`${context.role === 'consultation' ? ' ' : ''}Thinking ${thinkingLabel(context.thinkingLevel)}${context.thinkingLevel.source ? muted(` · ${context.thinkingLevel.source}`) : ''}`);
138
+ }
139
+ return lines;
140
+ }
141
+ /**
142
+ * Lines of the expandable browser detail panel (also the raw BROWSER section). Never includes profile contents.
143
+ *
144
+ * @private browser details view
145
+ */
146
+ export function browserDetailLines(browser, style, options = {}) {
147
+ const muted = style?.muted ?? ((text) => text);
148
+ const warn = style?.warning ?? ((text) => text);
149
+ if (!browser)
150
+ return [muted('Browser information is not available from this service.')];
151
+ const lines = [
152
+ `Profile ${browser.sourceLabel}${muted(` (${browser.source})`)}`,
153
+ `Path ${browser.profilePath}`,
154
+ `Mode ${browser.mode.requested}${browser.mode.actual && browser.mode.actual !== browser.mode.requested ? ` (actually ${browser.mode.actual})` : ''}${browser.mode.note ? muted(` · ${browser.mode.note}`) : ''}`,
155
+ `State ${browser.state}${browser.pid ? muted(` · PID ${browser.pid}`) : ''}${browser.executable ? muted(` · ${browser.executable}`) : ''}`,
156
+ `Owner ${browser.ownership.state}${browser.ownership.holder ? ` — ${browser.ownership.holder}` : ''}`,
157
+ ];
158
+ if (browser.savedProfile)
159
+ lines.push(muted(`Saved ${browser.savedProfile}`));
160
+ if (browser.pending)
161
+ lines.push(warn(`Pending ${browser.pending}`));
162
+ if (browser.lastFailure)
163
+ lines.push(warn(`Failure ${formatShortTime(Date.parse(browser.lastFailure.at))} ${browser.lastFailure.summary}`), ...(browser.lastFailure.evidence ? [muted(` ${browser.lastFailure.evidence}`)] : []));
164
+ if (browser.recovery && (browser.recovery.state !== 'idle' || browser.recovery.attempts)) {
165
+ lines.push(`Recovery ${browser.recovery.state}${browser.recovery.attempts ? ` · ${browser.recovery.attempts} attempt(s)` : ''}${browser.recovery.nextRetryAt ? ` · next retry ${formatShortTime(Date.parse(browser.recovery.nextRetryAt))}` : ''}${browser.recovery.blocker ? ` · ${browser.recovery.blocker}` : ''}`);
166
+ }
167
+ if (browser.lastAction)
168
+ lines.push(`Action ${browser.lastAction.action}: ${browser.lastAction.state} — ${browser.lastAction.outcome}`);
169
+ if (browser.checkedAt)
170
+ lines.push(muted(`Checked ${formatShortTime(Date.parse(browser.checkedAt))}`));
171
+ if (options.keys)
172
+ lines.push(muted('1 recheck diagnostics · 2 retry startup · 3 restart this project’s browser (not the engine)'));
173
+ return lines;
174
+ }
175
+ //# sourceMappingURL=details.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"details.js","sourceRoot":"","sources":["../../src/ui/details.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { type DiscoveredEngine, type DiscoveryEntry } from '../service/discovery.js';
2
+ import type { ControlClient } from '../service/control.js';
3
+ import { type TerminalProfile } from './terminal.js';
4
+ /**
5
+ * One row of the global table.
6
+ *
7
+ * @private global dashboard
8
+ */
9
+ export type GlobalRow = {
10
+ readonly entry: DiscoveryEntry;
11
+ readonly status: DiscoveredEngine['status'];
12
+ readonly state?: string;
13
+ readonly work?: string;
14
+ readonly intent?: string;
15
+ readonly waitingChats?: number;
16
+ readonly reason?: string;
17
+ readonly observedAt: string;
18
+ readonly client?: ControlClient;
19
+ /** When the row was first seen as ended (it disappears shortly after). */
20
+ readonly endedAt?: number;
21
+ };
22
+ /**
23
+ * Observation of the whole host: rows by instance, or why discovery failed.
24
+ *
25
+ * @private global dashboard
26
+ */
27
+ export type HostObservation = {
28
+ readonly rows: readonly GlobalRow[];
29
+ readonly problem?: string;
30
+ readonly observedAt: string;
31
+ };
32
+ /**
33
+ * Observes every registered engine of this OS user, verifying each before it is shown as live. Rows of engines that
34
+ * ended stay briefly labelled `ended` instead of disappearing or being retained as live.
35
+ *
36
+ * @private global dashboard
37
+ */
38
+ export declare function observeHost(previous: ReadonlyMap<string, GlobalRow>, env?: NodeJS.ProcessEnv): Promise<HostObservation>;
39
+ /**
40
+ * Plain line describing one row.
41
+ *
42
+ * @private global dashboard
43
+ */
44
+ export declare function plainRow(row: GlobalRow): string;
45
+ /**
46
+ * Plain events between two observations: started, changed and ended engines.
47
+ *
48
+ * @private global dashboard
49
+ */
50
+ export declare function plainHostDifference(previous: HostObservation | undefined, next: HostObservation): string[];
51
+ /**
52
+ * Runs `ptbk dashboard --global`: a continuously refreshed, keyboard-navigable table of running project engines of
53
+ * this OS user, from any directory and across installations/versions. It stays open with zero entries, attaches to a
54
+ * selected project's ordinary dashboard without `cd`, a new worker or a lock, and returns to the table afterwards.
55
+ * Leaving closes only this viewer.
56
+ *
57
+ * @private global dashboard
58
+ */
59
+ export declare function runGlobalDashboard(terminal: TerminalProfile, attach: (row: GlobalRow) => Promise<string | undefined>, env?: NodeJS.ProcessEnv): Promise<void>;
@@ -0,0 +1,307 @@
1
+ import { userInfo } from 'node:os';
2
+ import { errorMessage } from '../common/errors.js';
3
+ import { clockTime, formatShortTime } from '../common/time.js';
4
+ import { discoveryDirectory, readRegistry, verifyEngine } from '../service/discovery.js';
5
+ import { truncate } from './ansi.js';
6
+ import { KeyboardSession } from './keys.js';
7
+ import { renderPanel } from './panels.js';
8
+ import { FullScreen } from './screen.js';
9
+ import { symbols } from './terminal.js';
10
+ /**
11
+ * How often the host-wide table refreshes.
12
+ */
13
+ const REFRESH_MS = 2000;
14
+ /**
15
+ * How long an ended engine stays visible (labelled ended) before it disappears.
16
+ */
17
+ const ENDED_VISIBLE_MS = 8000;
18
+ /**
19
+ * Widest table rendering.
20
+ */
21
+ const MAX_WIDTH = 160;
22
+ /**
23
+ * Widest project name in a row (the full path follows on its own line).
24
+ */
25
+ const MAX_NAME_WIDTH = 28;
26
+ /**
27
+ * Observes every registered engine of this OS user, verifying each before it is shown as live. Rows of engines that
28
+ * ended stay briefly labelled `ended` instead of disappearing or being retained as live.
29
+ *
30
+ * @private global dashboard
31
+ */
32
+ export async function observeHost(previous, env = process.env) {
33
+ const registry = await readRegistry(env);
34
+ const observedAt = new Date().toISOString();
35
+ const verified = await Promise.all(registry.entries.map((entry) => verifyEngine(entry, env).catch((error) => ({ status: 'unreachable', entry, reason: errorMessage(error) }))));
36
+ const rows = new Map();
37
+ for (const engine of verified) {
38
+ rows.set(engine.entry.instanceId, {
39
+ entry: engine.entry,
40
+ status: engine.status,
41
+ state: engine.status === 'live' ? engine.summary.state : undefined,
42
+ work: engine.status === 'live' ? engine.summary.work : undefined,
43
+ intent: engine.status === 'live' ? engine.summary.intent : undefined,
44
+ waitingChats: engine.status === 'live' ? engine.summary.waitingChats : undefined,
45
+ reason: engine.status === 'live' ? undefined : engine.reason,
46
+ observedAt: engine.status === 'live' ? engine.summary.observedAt : observedAt,
47
+ client: engine.status === 'live' ? engine.client : undefined,
48
+ endedAt: engine.status === 'ended' ? Date.now() : undefined,
49
+ });
50
+ }
51
+ // Engines whose registration vanished (orderly shutdown) are shown as ended for a moment.
52
+ for (const [instance, row] of previous) {
53
+ if (rows.has(instance))
54
+ continue;
55
+ const endedAt = row.endedAt ?? Date.now();
56
+ if (Date.now() - endedAt < ENDED_VISIBLE_MS)
57
+ rows.set(instance, { ...row, status: 'ended', client: undefined, reason: row.reason ?? 'The engine has stopped.', endedAt });
58
+ }
59
+ for (const [instance, row] of rows)
60
+ if (row.status === 'ended' && row.endedAt && Date.now() - row.endedAt >= ENDED_VISIBLE_MS)
61
+ rows.delete(instance);
62
+ return { rows: [...rows.values()].sort((a, b) => a.entry.projectRoot.localeCompare(b.entry.projectRoot) || a.entry.startedAt.localeCompare(b.entry.startedAt)), problem: registry.problem, observedAt };
63
+ }
64
+ /**
65
+ * Plain line describing one row.
66
+ *
67
+ * @private global dashboard
68
+ */
69
+ export function plainRow(row) {
70
+ const state = row.status === 'live' ? `${row.state}${row.intent ? ` (${row.intent})` : ''}` : row.status;
71
+ return `${row.entry.projectName} [${state}] ptbk ${row.entry.engineVersion} · ${row.entry.mode} · PID ${row.entry.pid} · ${row.entry.projectRoot}${row.work ? ` · ${row.work}` : ''}${row.reason ? ` · ${row.reason}` : ''}`;
72
+ }
73
+ /**
74
+ * Plain events between two observations: started, changed and ended engines.
75
+ *
76
+ * @private global dashboard
77
+ */
78
+ export function plainHostDifference(previous, next) {
79
+ const lines = [];
80
+ if (!previous) {
81
+ lines.push(`Watching running Promptbook engines of this OS user (${next.rows.filter((row) => row.status !== 'ended').length} found; registry ${discoveryDirectoryLabel()}).`);
82
+ if (next.problem)
83
+ lines.push(`DISCOVERY PROBLEM: ${next.problem}`);
84
+ for (const row of next.rows)
85
+ lines.push(` ${plainRow(row)}`);
86
+ if (!next.rows.length)
87
+ lines.push(' No running engines; still watching for new ones.');
88
+ return lines;
89
+ }
90
+ const before = new Map(previous.rows.map((row) => [row.entry.instanceId, row]));
91
+ for (const row of next.rows) {
92
+ const old = before.get(row.entry.instanceId);
93
+ if (!old)
94
+ lines.push(`+ ${plainRow(row)}`);
95
+ else if (old.status !== row.status || old.state !== row.state || old.intent !== row.intent)
96
+ lines.push(`${row.status === 'ended' ? '-' : '~'} ${plainRow(row)}`);
97
+ }
98
+ if (next.problem && next.problem !== previous.problem)
99
+ lines.push(`DISCOVERY PROBLEM: ${next.problem}`);
100
+ return lines;
101
+ }
102
+ /**
103
+ * The registry location shown to the user.
104
+ */
105
+ function discoveryDirectoryLabel() {
106
+ return discoveryDirectory();
107
+ }
108
+ /**
109
+ * Runs `ptbk dashboard --global`: a continuously refreshed, keyboard-navigable table of running project engines of
110
+ * this OS user, from any directory and across installations/versions. It stays open with zero entries, attaches to a
111
+ * selected project's ordinary dashboard without `cd`, a new worker or a lock, and returns to the table afterwards.
112
+ * Leaving closes only this viewer.
113
+ *
114
+ * @private global dashboard
115
+ */
116
+ export async function runGlobalDashboard(terminal, attach, env = process.env) {
117
+ if (!terminal.pretty || !terminal.interactive) {
118
+ await runPlainGlobalDashboard(terminal, env);
119
+ return;
120
+ }
121
+ const screen = new FullScreen();
122
+ const marks = symbols(terminal.unicode);
123
+ const { style } = terminal;
124
+ let observation = { rows: [], observedAt: new Date().toISOString() };
125
+ let selected;
126
+ /** The first engine is preselected once; after that the selection only changes by the user. */
127
+ let autoSelect = true;
128
+ let feedback = '';
129
+ let attached = false;
130
+ let closed = false;
131
+ let finish;
132
+ const done = new Promise((resolve) => {
133
+ finish = resolve;
134
+ });
135
+ const user = (() => {
136
+ try {
137
+ return userInfo().username;
138
+ }
139
+ catch {
140
+ return 'this user';
141
+ }
142
+ })();
143
+ const visible = () => observation.rows;
144
+ const draw = () => {
145
+ if (closed || attached)
146
+ return;
147
+ const width = Math.min(terminal.columns(), MAX_WIDTH);
148
+ const rows = visible();
149
+ const live = rows.filter((row) => row.status === 'live').length;
150
+ const lines = [];
151
+ lines.push(...renderPanel({
152
+ title: `${marks.bullet} Promptbook · all running engines`,
153
+ titleRight: `updated ${formatShortTime(Date.parse(observation.observedAt))}`,
154
+ lines: [`${style.bold(String(live))} live engine${live === 1 ? '' : 's'} on this computer${rows.length !== live ? style.muted(` · ${rows.length - live} other row(s)`) : ''}`, style.muted(`Engines of ${user} only (other OS users are not visible) · registry ${discoveryDirectoryLabel()}`)],
155
+ width,
156
+ tone: 'accent',
157
+ unicode: terminal.unicode,
158
+ style,
159
+ }));
160
+ if (observation.problem)
161
+ lines.push(...renderPanel({ title: 'Discovery problem', lines: [style.error(observation.problem), style.muted('The list below may be incomplete; this is not an empty system.')], width, tone: 'error', unicode: terminal.unicode, style }));
162
+ const table = [];
163
+ if (!rows.length)
164
+ table.push(style.muted('No running Promptbook engines. Still watching — a project started later (ptbk start) appears here.'));
165
+ for (const row of rows) {
166
+ const focused = row.entry.instanceId === selected;
167
+ const stateText = row.status === 'live' ? `${row.state ?? '?'}${row.intent ? ` → ${row.intent}` : ''}` : row.status;
168
+ const tone = row.status !== 'live' ? style.muted : row.state === 'running' ? style.success : row.state === 'stopping' ? style.error : style.warning;
169
+ table.push(`${focused ? style.accent(marks.pointer) : ' '} ${style.bold(truncate(row.entry.projectName, MAX_NAME_WIDTH))} ${tone(stateText)} ${style.muted(`${row.entry.mode} · PID ${row.entry.pid} · ptbk ${row.entry.engineVersion}`)}${row.waitingChats ? style.warning(` ${marks.warn} ${row.waitingChats} waiting for you`) : ''}`);
170
+ table.push(style.muted(` ${truncate(row.entry.projectRoot, width - 8)}`));
171
+ const detail = row.status === 'live' ? row.work : row.reason;
172
+ if (detail)
173
+ table.push(` ${truncate(detail, width - 8)}`);
174
+ }
175
+ lines.push(...renderPanel({ title: 'Engines', titleRight: 'Enter opens the project dashboard', lines: table, width, unicode: terminal.unicode, style }));
176
+ lines.push(style.muted(` ↑↓ select · Enter attach (returns here when you leave) · Q/Ctrl+C close this viewer (engines keep running)${feedback ? ` ${marks.arrow} ${feedback}` : ''}`));
177
+ screen.draw(lines);
178
+ };
179
+ const move = (delta) => {
180
+ const rows = visible();
181
+ autoSelect = false;
182
+ if (!rows.length)
183
+ return;
184
+ const index = Math.max(0, rows.findIndex((row) => row.entry.instanceId === selected));
185
+ selected = rows[(index + delta + rows.length) % rows.length].entry.instanceId;
186
+ draw();
187
+ };
188
+ const close = () => {
189
+ closed = true;
190
+ keyboard.stop();
191
+ screen.leave();
192
+ process.stdout.off('resize', onResize);
193
+ finish?.();
194
+ };
195
+ const open = async () => {
196
+ const row = visible().find((candidate) => candidate.entry.instanceId === selected);
197
+ if (!row) {
198
+ feedback = 'Select an engine first.';
199
+ draw();
200
+ return;
201
+ }
202
+ if (row.status !== 'live') {
203
+ feedback = `${row.entry.projectName} cannot be opened: ${row.reason ?? row.status}.`;
204
+ draw();
205
+ return;
206
+ }
207
+ attached = true;
208
+ keyboard.stop();
209
+ screen.leave();
210
+ let outcome;
211
+ try {
212
+ outcome = await attach(row);
213
+ }
214
+ catch (error) {
215
+ outcome = `Could not attach: ${errorMessage(error)}`;
216
+ }
217
+ attached = false;
218
+ if (closed)
219
+ return;
220
+ feedback = outcome ?? `Back from ${row.entry.projectName}; it keeps running.`;
221
+ screen.enter();
222
+ screen.invalidate();
223
+ keyboard.start();
224
+ draw();
225
+ };
226
+ const onKey = (event) => {
227
+ if (attached)
228
+ return;
229
+ if (event.type === 'key') {
230
+ if (event.name === 'c' && event.ctrl)
231
+ close();
232
+ else if (event.name === 'up')
233
+ move(-1);
234
+ else if (event.name === 'down')
235
+ move(1);
236
+ else if (event.name === 'enter')
237
+ void open();
238
+ return;
239
+ }
240
+ if (event.type === 'text' && event.text.toLowerCase() === 'q')
241
+ close();
242
+ };
243
+ const keyboard = new KeyboardSession(onKey);
244
+ const onResize = () => {
245
+ screen.invalidate();
246
+ draw();
247
+ };
248
+ screen.enter();
249
+ keyboard.start();
250
+ process.stdout.on('resize', onResize);
251
+ draw();
252
+ void (async () => {
253
+ let rows = new Map();
254
+ while (!closed) {
255
+ try {
256
+ observation = await observeHost(rows, env);
257
+ rows = new Map(observation.rows.map((row) => [row.entry.instanceId, row]));
258
+ // Keep the selected service selected; an ended target is never silently replaced by another row.
259
+ if (selected && !rows.has(selected)) {
260
+ selected = undefined;
261
+ autoSelect = false;
262
+ feedback = 'The selected engine has ended; choose another with ↑↓.';
263
+ }
264
+ else if (!selected && autoSelect && observation.rows[0]) {
265
+ selected = observation.rows[0].entry.instanceId;
266
+ autoSelect = false;
267
+ }
268
+ }
269
+ catch (error) {
270
+ observation = { ...observation, problem: errorMessage(error), observedAt: new Date().toISOString() };
271
+ }
272
+ draw();
273
+ await new Promise((resolve) => setTimeout(resolve, REFRESH_MS));
274
+ }
275
+ })();
276
+ await done;
277
+ process.stdout.write(`${style.muted(`Closed the global dashboard at ${clockTime()}; every engine keeps running.`)}\n`);
278
+ }
279
+ /**
280
+ * Continuous plain observation of the host (raw/noninteractive): readable events, no prompts or cursor control.
281
+ */
282
+ async function runPlainGlobalDashboard(terminal, env) {
283
+ let stop = false;
284
+ const onSignal = () => {
285
+ stop = true;
286
+ };
287
+ process.once('SIGINT', onSignal);
288
+ process.once('SIGTERM', onSignal);
289
+ let previous;
290
+ let rows = new Map();
291
+ try {
292
+ while (!stop) {
293
+ const next = await observeHost(rows, env);
294
+ rows = new Map(next.rows.map((row) => [row.entry.instanceId, row]));
295
+ for (const line of plainHostDifference(previous, next))
296
+ terminal.write(`${clockTime()} ${line}\n`);
297
+ previous = next;
298
+ for (let waited = 0; waited < REFRESH_MS && !stop; waited += 200)
299
+ await new Promise((resolve) => setTimeout(resolve, 200));
300
+ }
301
+ }
302
+ finally {
303
+ process.off('SIGINT', onSignal);
304
+ process.off('SIGTERM', onSignal);
305
+ }
306
+ }
307
+ //# sourceMappingURL=global-dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-dashboard.js","sourceRoot":"","sources":["../../src/ui/global-dashboard.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,13 @@ export type StatusViewOptions = {
51
51
  readonly activityOffset: number;
52
52
  readonly focusRequest: number;
53
53
  readonly connectionLost?: string;
54
+ /** Expanded detail panels (viewer-local presentation state; initially collapsed). */
55
+ readonly details?: {
56
+ readonly execution: boolean;
57
+ readonly browser: boolean;
58
+ };
59
+ /** A pending confirmation or action feedback shown in the service-controls panel. */
60
+ readonly controlNote?: string;
54
61
  };
55
62
  };
56
63
  /**