ptbk 0.119.0-17 → 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 (327) 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 +1 -1
  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 +2 -2
  165. package/dist/expert/agents/visual-identity.md +4 -4
  166. package/dist/expert/book-language/_index.md +9 -8
  167. package/dist/expert/book-language/commitments/_index.md +23 -3
  168. package/dist/expert/book-language/commitments/agent.md +11 -0
  169. package/dist/expert/book-language/commitments/chat-member.md +7 -0
  170. package/dist/expert/book-language/commitments/chat-message.md +11 -0
  171. package/dist/expert/book-language/commitments/chat-status.md +7 -0
  172. package/dist/expert/book-language/commitments/chat.md +11 -0
  173. package/dist/expert/book-language/commitments/entity.md +9 -0
  174. package/dist/expert/book-language/commitments/goal.md +6 -2
  175. package/dist/expert/book-language/commitments/link.md +9 -0
  176. package/dist/expert/book-language/commitments/task-depends-on.md +1 -1
  177. package/dist/expert/book-language/commitments/task-parent.md +1 -1
  178. package/dist/expert/book-language/commitments/task.md +7 -3
  179. package/dist/expert/book-language/commitments/team.md +1 -1
  180. package/dist/expert/book-language/references.md +20 -83
  181. package/dist/expert/book-language/syntax.md +54 -11
  182. package/dist/expert/cli/acceptance.md +59 -24
  183. package/dist/expert/cli/api.md +23 -9
  184. package/dist/expert/cli/authoring.md +6 -4
  185. package/dist/expert/cli/autonomous-operation.md +3 -3
  186. package/dist/expert/cli/browser.md +29 -18
  187. package/dist/expert/cli/channels.md +5 -7
  188. package/dist/expert/cli/chat-ui.md +32 -0
  189. package/dist/expert/cli/chats.md +59 -0
  190. package/dist/expert/cli/cli.md +44 -26
  191. package/dist/expert/cli/configuration.md +3 -3
  192. package/dist/expert/cli/controls.md +13 -7
  193. package/dist/expert/cli/dashboard-details.md +23 -0
  194. package/dist/expert/cli/dashboard-layout.md +19 -12
  195. package/dist/expert/cli/dashboard.md +12 -8
  196. package/dist/expert/cli/execution.md +8 -6
  197. package/dist/expert/cli/first-task.md +4 -4
  198. package/dist/expert/cli/generated-names.md +44 -0
  199. package/dist/expert/cli/git-persistence.md +19 -17
  200. package/dist/expert/cli/global-dashboard.md +33 -0
  201. package/dist/expert/cli/goal-discovery.md +1 -1
  202. package/dist/expert/cli/help.md +1 -1
  203. package/dist/expert/cli/initialization-ui.md +2 -0
  204. package/dist/expert/cli/initialization.md +9 -7
  205. package/dist/expert/cli/interactive-ui.md +9 -5
  206. package/dist/expert/cli/locking.md +21 -0
  207. package/dist/expert/cli/migration.md +22 -6
  208. package/dist/expert/cli/process-modes.md +21 -13
  209. package/dist/expert/cli/recovery.md +8 -6
  210. package/dist/expert/cli/recurrence.md +1 -1
  211. package/dist/expert/cli/rich-input.md +2 -2
  212. package/dist/expert/cli/service-lifecycle.md +57 -0
  213. package/dist/expert/cli/start.md +2 -2
  214. package/dist/expert/cli/status-view.md +16 -12
  215. package/dist/expert/cli/task-books.md +11 -15
  216. package/dist/expert/cli/task-identity.md +8 -10
  217. package/dist/expert/cli/task-markdown.md +6 -10
  218. package/dist/expert/cli/task-origins.md +3 -1
  219. package/dist/expert/cli/task-relationships.md +5 -9
  220. package/dist/expert/cli/team.md +17 -7
  221. package/dist/expert/cli/terminal.md +20 -12
  222. package/dist/expert/cli/trace-configuration.md +1 -1
  223. package/dist/expert/cli/traces.md +19 -23
  224. package/dist/expert/cli/user-interactions.md +14 -26
  225. package/dist/expert/cli/workspace.md +15 -9
  226. package/dist/expert/concepts/engine-and-project.md +11 -0
  227. package/dist/expert/concepts/project-model.md +39 -0
  228. package/dist/expert/dictionary.md +21 -15
  229. package/dist/harness/plugins/claude-code/index.js +1 -0
  230. package/dist/harness/plugins/claude-code/index.js.map +1 -1
  231. package/dist/harness/plugins/cline/index.js +1 -0
  232. package/dist/harness/plugins/cline/index.js.map +1 -1
  233. package/dist/harness/plugins/openai-codex/index.js +1 -0
  234. package/dist/harness/plugins/openai-codex/index.js.map +1 -1
  235. package/dist/harness/plugins/opencode/index.js +1 -0
  236. package/dist/harness/plugins/opencode/index.js.map +1 -1
  237. package/dist/harness/types.d.ts +3 -1
  238. package/dist/project/agents.d.ts +29 -81
  239. package/dist/project/agents.js +47 -266
  240. package/dist/project/agents.js.map +1 -1
  241. package/dist/project/books.d.ts +150 -0
  242. package/dist/project/books.js +253 -0
  243. package/dist/project/books.js.map +1 -0
  244. package/dist/project/config.js +2 -2
  245. package/dist/project/config.js.map +1 -1
  246. package/dist/project/defaults.d.ts +33 -5
  247. package/dist/project/defaults.js +67 -36
  248. package/dist/project/defaults.js.map +1 -1
  249. package/dist/project/expert.js +17 -9
  250. package/dist/project/expert.js.map +1 -1
  251. package/dist/project/git.d.ts +4 -3
  252. package/dist/project/git.js +16 -5
  253. package/dist/project/git.js.map +1 -1
  254. package/dist/project/setup.d.ts +4 -1
  255. package/dist/project/setup.js +26 -6
  256. package/dist/project/setup.js.map +1 -1
  257. package/dist/service/actions.d.ts +34 -10
  258. package/dist/service/actions.js +51 -19
  259. package/dist/service/actions.js.map +1 -1
  260. package/dist/service/control.d.ts +53 -1
  261. package/dist/service/control.js +64 -4
  262. package/dist/service/control.js.map +1 -1
  263. package/dist/service/discovery.d.ts +133 -0
  264. package/dist/service/discovery.js +138 -0
  265. package/dist/service/discovery.js.map +1 -0
  266. package/dist/service/host.d.ts +8 -1
  267. package/dist/service/host.js +65 -18
  268. package/dist/service/host.js.map +1 -1
  269. package/dist/service/http.d.ts +3 -0
  270. package/dist/service/http.js +26 -6
  271. package/dist/service/http.js.map +1 -1
  272. package/dist/service/launcher.d.ts +66 -13
  273. package/dist/service/launcher.js +78 -18
  274. package/dist/service/launcher.js.map +1 -1
  275. package/dist/service/records.d.ts +12 -2
  276. package/dist/service/records.js +19 -5
  277. package/dist/service/records.js.map +1 -1
  278. package/dist/service/spa/app.css +83 -2
  279. package/dist/service/spa/app.js +393 -72
  280. package/dist/service/supervisor.js +7 -1
  281. package/dist/service/supervisor.js.map +1 -1
  282. package/dist/service/worker.js +14 -5
  283. package/dist/service/worker.js.map +1 -1
  284. package/dist/tasks/authoring.d.ts +3 -5
  285. package/dist/tasks/authoring.js +6 -7
  286. package/dist/tasks/authoring.js.map +1 -1
  287. package/dist/tasks/book-task.d.ts +18 -10
  288. package/dist/tasks/book-task.js +27 -23
  289. package/dist/tasks/book-task.js.map +1 -1
  290. package/dist/tasks/eligibility.d.ts +15 -7
  291. package/dist/tasks/eligibility.js +41 -14
  292. package/dist/tasks/eligibility.js.map +1 -1
  293. package/dist/tasks/identity.d.ts +41 -15
  294. package/dist/tasks/identity.js +100 -31
  295. package/dist/tasks/identity.js.map +1 -1
  296. package/dist/tasks/markdown.d.ts +7 -14
  297. package/dist/tasks/markdown.js +15 -29
  298. package/dist/tasks/markdown.js.map +1 -1
  299. package/dist/tasks/model.d.ts +20 -4
  300. package/dist/tasks/model.js +17 -0
  301. package/dist/tasks/model.js.map +1 -1
  302. package/dist/tasks/sources.d.ts +7 -2
  303. package/dist/tasks/sources.js +46 -35
  304. package/dist/tasks/sources.js.map +1 -1
  305. package/dist/ui/chat-client.d.ts +70 -0
  306. package/dist/ui/chat-client.js +209 -0
  307. package/dist/ui/chat-client.js.map +1 -0
  308. package/dist/ui/dashboard.d.ts +8 -5
  309. package/dist/ui/dashboard.js +227 -86
  310. package/dist/ui/dashboard.js.map +1 -1
  311. package/dist/ui/details.d.ts +64 -0
  312. package/dist/ui/details.js +175 -0
  313. package/dist/ui/details.js.map +1 -0
  314. package/dist/ui/global-dashboard.d.ts +59 -0
  315. package/dist/ui/global-dashboard.js +307 -0
  316. package/dist/ui/global-dashboard.js.map +1 -0
  317. package/dist/ui/status-view.d.ts +7 -0
  318. package/dist/ui/status-view.js +94 -36
  319. package/dist/ui/status-view.js.map +1 -1
  320. package/package.json +1 -1
  321. package/dist/engine/requests.d.ts +0 -111
  322. package/dist/engine/requests.js +0 -173
  323. package/dist/engine/requests.js.map +0 -1
  324. package/dist/expert/book-language/commitments/task-id.md +0 -9
  325. package/dist/tasks/prepare.d.ts +0 -33
  326. package/dist/tasks/prepare.js +0 -90
  327. package/dist/tasks/prepare.js.map +0 -1
@@ -13,6 +13,10 @@ import { discoveryEnvironment, readLaunchMetadata, readProcessRecord, rotateServ
13
13
  * How long a launch waits for the worker to become controllable.
14
14
  */
15
15
  const LAUNCH_TIMEOUT_MS = 60_000;
16
+ /**
17
+ * How long a restarted daemon's replacement may take to become controllable after the old worker ended.
18
+ */
19
+ const REPLACEMENT_START_MS = 60_000;
16
20
  /**
17
21
  * A launch lock older than this is stale.
18
22
  */
@@ -133,17 +137,18 @@ export async function launchDaemon(project, request) {
133
137
  });
134
138
  }
135
139
  /**
136
- * Stops the project's daemon (intentional stop: no automatic startup until the next explicit start).
140
+ * Requests the shared engine stop operation of the project's service (any placement) and waits, bounded, for the
141
+ * owner to end: graceful by default (the current task settles first), or an immediate force stop of owned work.
137
142
  *
138
- * Succeeds only after the owner released the project.
143
+ * An intentional completed stop is recorded by the engine itself, so cancelling a pending stop leaves no
144
+ * permanent-stop setting behind. A lost reply is reported as unconfirmed and never replayed.
139
145
  *
140
146
  * @private daemon launcher
141
147
  */
142
- export async function stopDaemon(project, options) {
148
+ export async function stopService(project, options) {
143
149
  const lookup = await lookupService(project);
144
150
  if (lookup.state === 'stopped') {
145
- if (options.intentional)
146
- await markStopped(project);
151
+ await markIntentionalStop(project);
147
152
  return { wasRunning: false, stopped: true, message: lookup.stale ? 'The service was not running (a stale record was found and ignored).' : 'The service was not running.' };
148
153
  }
149
154
  if (lookup.state === 'unreachable') {
@@ -155,30 +160,85 @@ export async function stopDaemon(project, options) {
155
160
  next: ['Run `ptbk status` again; if the process is a stuck ptbk worker, terminate that PID manually.'],
156
161
  });
157
162
  }
158
- if (lookup.record.mode !== 'daemon') {
159
- throw new PtbkError(`The project is running in ${lookup.record.mode} mode, not as a daemon.`, {
160
- kind: 'conflict',
161
- project: project.root,
162
- next: [lookup.record.mode === 'run' ? 'Wait for the finite run to finish, or interrupt it in its terminal.' : 'Use the controls of the foreground terminal (X or Ctrl+C) to stop it.'],
163
- });
163
+ let accepted;
164
+ try {
165
+ accepted = await lookup.client.request(options.force ? 'force-stop' : 'stop');
166
+ }
167
+ catch (error) {
168
+ // Engines that predate the shared lifecycle know only `stop`/`stop-now`.
169
+ if (!(error instanceof PtbkError) || error.details.kind !== 'usage' || !/Unknown control method/.test(error.message))
170
+ throw error;
171
+ accepted = await lookup.client.request(options.force ? 'stop-now' : 'stop');
164
172
  }
165
- if (options.intentional)
166
- await markStopped(project);
167
- await lookup.client.request(options.cancelCurrent ? 'stop-now' : 'stop');
168
173
  const deadline = Date.now() + (options.timeoutMs ?? 120_000);
169
174
  while (Date.now() < deadline) {
170
175
  const record = await readProcessRecord(project);
171
176
  if ((!record || record.instanceId !== lookup.record.instanceId) && !isProcessAlive(lookup.record.pid)) {
172
- return { wasRunning: true, record: lookup.record, stopped: true, message: 'Stopped.' };
177
+ return { wasRunning: true, record: lookup.record, stopped: true, accepted, message: options.force ? 'Force-stopped.' : 'Stopped.' };
178
+ }
179
+ await new Promise((resolve) => setTimeout(resolve, 250));
180
+ }
181
+ return { wasRunning: true, record: lookup.record, stopped: false, accepted, message: `Stop accepted (${accepted.state ?? 'stopping'}), but the service is still finishing its current work.` };
182
+ }
183
+ /**
184
+ * Restarts the project's running engine through its shared lifecycle: it drains like a graceful stop (with visible
185
+ * restart intent), releases ownership and exactly one replacement starts with the same project, saved launch
186
+ * configuration and installation (a daemon's supervisor or the owning foreground invocation). Changed launch overrides
187
+ * of a daemon are saved first; an engine without the restart operation reports `unsupported`.
188
+ *
189
+ * @private daemon launcher
190
+ */
191
+ export async function restartService(project, lookup, options) {
192
+ const previous = lookup.record;
193
+ if (previous.mode === 'run')
194
+ throw new PtbkError('A finite run cannot be restarted.', { kind: 'usage', project: project.root, next: ['Wait for it to finish (or stop it), then run it again.'] });
195
+ if (options.launch && previous.mode === 'daemon') {
196
+ const launch = await readLaunchMetadata(project);
197
+ if (launch)
198
+ await writeLaunchMetadata(project, { ...launch, ...options.launch, intentionallyStopped: false, savedAt: new Date().toISOString() });
199
+ }
200
+ try {
201
+ await lookup.client.request('restart');
202
+ }
203
+ catch (error) {
204
+ if (error instanceof PtbkError && error.details.kind === 'usage' && /Unknown control method/.test(error.message))
205
+ return { kind: 'unsupported', previous };
206
+ throw error;
207
+ }
208
+ const deadline = Date.now() + (options.timeoutMs ?? 180_000);
209
+ let previousEndedAt;
210
+ while (Date.now() < deadline) {
211
+ const record = await readProcessRecord(project);
212
+ if (record && record.instanceId !== previous.instanceId) {
213
+ const fresh = await lookupService(project);
214
+ if (fresh.state === 'running' && fresh.record.instanceId !== previous.instanceId)
215
+ return { kind: 'restarted', previous, lookup: fresh };
216
+ }
217
+ if (!isProcessAlive(previous.pid))
218
+ previousEndedAt ??= Date.now();
219
+ // The old owner ended without a working replacement: report the failed start, never a running service.
220
+ const supervisorGone = !previous.supervisorPid || !isProcessAlive(previous.supervisorPid);
221
+ if (previous.mode === 'daemon' && previousEndedAt !== undefined && !record && (supervisorGone || Date.now() - previousEndedAt > REPLACEMENT_START_MS)) {
222
+ const workerLog = await tail(servicePaths(project).workerLog);
223
+ throw new PtbkError('The service stopped, but its replacement did not start.', {
224
+ kind: 'technical',
225
+ project: project.root,
226
+ reason: workerLog.split('\n').slice(-3).join(' ') || 'No output was produced.',
227
+ trace: servicePaths(project).workerLog,
228
+ next: ['Fix the cause shown in the worker log, then run `ptbk start`.'],
229
+ });
173
230
  }
174
231
  await new Promise((resolve) => setTimeout(resolve, 250));
175
232
  }
176
- return { wasRunning: true, record: lookup.record, stopped: false, message: 'Stop was requested, but the service is still finishing its current work.' };
233
+ return { kind: 'pending', previous, message: 'Restart accepted; the service is still finishing its current work before the replacement starts.' };
177
234
  }
178
235
  /**
179
- * Records an intentional stop and removes startup registration.
236
+ * Records an intentional stop: no automatic startup until the next authorized start (launch metadata flag and
237
+ * startup registration).
238
+ *
239
+ * @private daemon launcher
180
240
  */
181
- async function markStopped(project) {
241
+ export async function markIntentionalStop(project) {
182
242
  const launch = await readLaunchMetadata(project);
183
243
  if (launch)
184
244
  await writeLaunchMetadata(project, { ...launch, intentionallyStopped: true, savedAt: new Date().toISOString() });
@@ -1 +1 @@
1
- {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/service/launcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"launcher.js","sourceRoot":"","sources":["../../src/service/launcher.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,13 @@ export type LaunchMetadata = {
67
67
  /** Time of saving. */
68
68
  readonly savedAt: string;
69
69
  };
70
+ /**
71
+ * Exit code of a daemon worker that shut down for a restart: its supervisor starts exactly one replacement with the
72
+ * saved launch configuration and installation (no backoff, independent of crash persistence).
73
+ *
74
+ * @private service records
75
+ */
76
+ export declare const RESTART_EXIT_CODE = 75;
70
77
  /**
71
78
  * Paths of service records.
72
79
  *
@@ -122,9 +129,12 @@ export declare function discoveryEnvironment(env?: NodeJS.ProcessEnv): Record<st
122
129
  */
123
130
  export declare function restoreDiscoveryEnvironment(saved: Readonly<Record<string, string>> | undefined, nodePath: string, base?: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
124
131
  /**
125
- * Acquires the project ownership lock (only one process mutates/executes a project).
132
+ * Acquires the project ownership lock (only one process mutates/executes a project, whatever its installation,
133
+ * version or path spelling: the lock lives in the canonical project's `.ptbk/`).
126
134
  *
127
- * A stale lock (dead PID) is replaced; a live owner is reported, never terminated.
135
+ * A lock whose process no longer exists is replaced; a live holder is reported (with its known engine identity, or
136
+ * the uncertainty of a possibly reused PID) and never terminated or taken over. The returned release removes only
137
+ * this owner's own lock.
128
138
  *
129
139
  * @private service records
130
140
  */
@@ -5,6 +5,13 @@ import { PtbkError } from '../common/errors.js';
5
5
  import { ensureDirectory, readJsonIfExists, writeJsonAtomic } from '../common/fs.js';
6
6
  import { isProcessAlive } from '../common/process.js';
7
7
  import { ENGINE_ROOT, ENGINE_VERSION } from '../common/version.js';
8
+ /**
9
+ * Exit code of a daemon worker that shut down for a restart: its supervisor starts exactly one replacement with the
10
+ * saved launch configuration and installation (no backoff, independent of crash persistence).
11
+ *
12
+ * @private service records
13
+ */
14
+ export const RESTART_EXIT_CODE = 75;
8
15
  /**
9
16
  * Paths of service records.
10
17
  *
@@ -146,9 +153,12 @@ export function restoreDiscoveryEnvironment(saved, nodePath, base = process.env)
146
153
  return env;
147
154
  }
148
155
  /**
149
- * Acquires the project ownership lock (only one process mutates/executes a project).
156
+ * Acquires the project ownership lock (only one process mutates/executes a project, whatever its installation,
157
+ * version or path spelling: the lock lives in the canonical project's `.ptbk/`).
150
158
  *
151
- * A stale lock (dead PID) is replaced; a live owner is reported, never terminated.
159
+ * A lock whose process no longer exists is replaced; a live holder is reported (with its known engine identity, or
160
+ * the uncertainty of a possibly reused PID) and never terminated or taken over. The returned release removes only
161
+ * this owner's own lock.
152
162
  *
153
163
  * @private service records
154
164
  */
@@ -182,12 +192,16 @@ export async function acquireProjectLock(project, instanceId, kind) {
182
192
  holder = undefined;
183
193
  }
184
194
  if (holder && isProcessAlive(holder.pid) && holder.pid !== process.pid) {
195
+ const record = await readProcessRecord(project);
196
+ const known = record?.instanceId === holder.instanceId ? `the ${record.mode} engine ptbk ${record.engineVersion} (PID ${record.pid})` : undefined;
185
197
  throw new PtbkError('Another ptbk process owns this project.', {
186
198
  kind: 'conflict',
187
199
  project: project.root,
188
- reason: `${holder.kind} process ${holder.pid} (instance ${holder.instanceId}) holds ${project.runtime.lock} since ${holder.at}.`,
189
- effect: 'Nothing was started.',
190
- next: ['Use `ptbk status` to inspect it, or `ptbk stop` to stop a daemon.'],
200
+ reason: known
201
+ ? `${known} holds ${project.runtime.lock} since ${holder.at}.`
202
+ : `${holder.kind} process ${holder.pid} (instance ${holder.instanceId}) holds ${project.runtime.lock} since ${holder.at}; it could not be verified as a running engine (it may be finishing an operation, or the PID may have been reused).`,
203
+ effect: 'Nothing was started; the other process was not touched.',
204
+ next: ['Use `ptbk status` to inspect it, or `ptbk stop` to stop the running engine.'],
191
205
  });
192
206
  }
193
207
  await rm(project.runtime.lock, { force: true });
@@ -1 +1 @@
1
- {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/service/records.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/service/records.ts"],"names":[],"mappings":"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"}
@@ -86,9 +86,12 @@ body {
86
86
  grid-template-columns: minmax(0, 2fr) minmax(0, 1fr);
87
87
  grid-template-areas:
88
88
  'attention attention'
89
+ 'controls controls'
90
+ 'chats chats'
89
91
  'work queue'
92
+ 'details details'
90
93
  'activity connection'
91
- 'controls connection';
94
+ 'inventory connection';
92
95
  gap: 14px;
93
96
  max-width: 1280px;
94
97
  margin: 0 auto;
@@ -98,7 +101,7 @@ body {
98
101
  @media (max-width: 900px) {
99
102
  .app {
100
103
  grid-template-columns: minmax(0, 1fr);
101
- grid-template-areas: 'attention' 'work' 'controls' 'queue' 'activity' 'connection';
104
+ grid-template-areas: 'attention' 'controls' 'chats' 'work' 'details' 'queue' 'activity' 'connection' 'inventory';
102
105
  }
103
106
  }
104
107
 
@@ -160,6 +163,48 @@ body {
160
163
  grid-area: controls;
161
164
  }
162
165
 
166
+ .controls .state {
167
+ font-weight: 600;
168
+ text-transform: none;
169
+ letter-spacing: 0;
170
+ font-size: 14px;
171
+ }
172
+
173
+ .controls.pausing,
174
+ .controls.pause {
175
+ border-left: 4px solid var(--warning);
176
+ }
177
+
178
+ .controls.stopping {
179
+ border-left: 4px solid var(--danger);
180
+ }
181
+
182
+ .details-panels {
183
+ grid-area: details;
184
+ display: grid;
185
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
186
+ gap: 14px;
187
+ }
188
+
189
+ @media (max-width: 900px) {
190
+ .details-panels {
191
+ grid-template-columns: minmax(0, 1fr);
192
+ }
193
+ }
194
+
195
+ .details-panels details > summary {
196
+ font-weight: 600;
197
+ padding: 2px 0;
198
+ }
199
+
200
+ .details-panels details[open] > summary {
201
+ margin-bottom: 8px;
202
+ }
203
+
204
+ .inventory {
205
+ grid-area: inventory;
206
+ }
207
+
163
208
  .request {
164
209
  border-top: 1px solid var(--border);
165
210
  padding: 12px 0 4px;
@@ -431,3 +476,39 @@ details summary {
431
476
  max-width: 560px;
432
477
  margin: 12vh auto;
433
478
  }
479
+
480
+ .chats {
481
+ grid-area: chats;
482
+ }
483
+
484
+ .chats .messages {
485
+ max-height: 55vh;
486
+ overflow-y: auto;
487
+ display: flex;
488
+ flex-direction: column;
489
+ gap: 10px;
490
+ margin: 10px 0;
491
+ }
492
+
493
+ .message {
494
+ max-width: 85%;
495
+ padding: 8px 12px;
496
+ border-radius: var(--radius);
497
+ background: var(--surface-2);
498
+ border: 1px solid var(--border);
499
+ }
500
+
501
+ .message.user {
502
+ align-self: flex-end;
503
+ border-color: var(--accent);
504
+ }
505
+
506
+ .message .meta {
507
+ font-size: 12px;
508
+ color: var(--muted);
509
+ }
510
+
511
+ .message .text {
512
+ white-space: pre-wrap;
513
+ overflow-wrap: anywhere;
514
+ }