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
@@ -5,7 +5,10 @@ import { ensureDirectory, pathExists, toProjectRelative } from '../../common/fs.
5
5
  import { loadSettings, setting } from '../../project/config.js';
6
6
  import { commitPaths, inspectGit } from '../../project/git.js';
7
7
  import { newTaskPath } from '../../tasks/authoring.js';
8
- import { selectedProject, writableTasksDirectory } from '../common.js';
8
+ import { generatedName } from '../../tasks/identity.js';
9
+ import { parseBook } from '../../book/parse.js';
10
+ import { normalizeAgentName } from '../../book/references.js';
11
+ import { projectTakenNames, selectedProject, writableTasksDirectory } from '../common.js';
9
12
  import { flag, option } from '../context.js';
10
13
  /**
11
14
  * `ptbk generate-boilerplates`: unfinished, non-runnable placeholders (`@@@`) to fill in later.
@@ -24,7 +27,7 @@ export default async function generateBoilerplates(context) {
24
27
  if (files < 1 || sections < 1 || files > 100 || sections > 50)
25
28
  throw usageError('--count must be between 1 and 100 files and 1 to 50 sections.', 'generate-boilerplates');
26
29
  const templateName = option(context, 'template');
27
- let template = 'TASK @@@\n\n@@@\n';
30
+ let template = 'TASK @@@\nGOAL @@@\n';
28
31
  if (templateName) {
29
32
  const path = join(tasksDirectory, 'templates', templateName.endsWith('.book') ? templateName : `${templateName}.book`);
30
33
  if (!(await pathExists(path)))
@@ -34,10 +37,18 @@ export default async function generateBoilerplates(context) {
34
37
  await ensureDirectory(tasksDirectory);
35
38
  const created = [];
36
39
  const timeZone = setting(settings, 'timezone');
40
+ const taken = await projectTakenNames(project, settings);
37
41
  for (let index = 0; index < files; index++) {
38
42
  if (sections === 1) {
39
43
  const path = await newTaskPath(tasksDirectory, `boilerplate ${index + 1}`, Date.now(), timeZone);
40
- await writeFile(path, template.includes('@@@') ? template : `TASK @@@\n\n${template}`, { flag: 'wx' });
44
+ // Each placeholder gets its own generated name, so boilerplates never shadow each other.
45
+ const document = parseBook(template);
46
+ const base = document.kind === 'task' && document.name ? document.name : '@@@';
47
+ const name = generatedName(/@@@/.test(base) ? base : `@@@ ${base}`, { taken, timeZone });
48
+ taken.add(normalizeAgentName(name));
49
+ const lines = document.kind === 'task' ? [...document.lines] : ['', ...template.split(/\r?\n/)];
50
+ lines[document.kind === 'task' ? document.headerLine : 0] = `TASK ${name}`;
51
+ await writeFile(path, `${lines.join('\n').replace(/\n*$/, '')}\n`, { flag: 'wx' });
41
52
  created.push(path);
42
53
  }
43
54
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"boilerplates.js","sourceRoot":"","sources":["../../../src/cli/commands/boilerplates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boilerplates.js","sourceRoot":"","sources":["../../../src/cli/commands/boilerplates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type CommandContext } from '../context.js';
2
+ /**
3
+ * `ptbk chat`: directly open a new persistent conversation with one agent, reopen a named one, or list chats.
4
+ *
5
+ * No dashboard is required; Ctrl+C closes only this client (the service and the conversation stay).
6
+ *
7
+ * @private command
8
+ */
9
+ export default function chat(context: CommandContext): Promise<number>;
@@ -0,0 +1,89 @@
1
+ import { EXIT, PtbkError } from '../../common/errors.js';
2
+ import { renderChatList, runChatClient } from '../../ui/chat-client.js';
3
+ import { CANCELLED } from '../../ui/prompts.js';
4
+ import { defaultChatAgent } from '../../chats/service.js';
5
+ import { explicitChatAgent, openChatSource, pickChatAgent, waitForReply } from '../chats.js';
6
+ import { printJson, readStdin, selectedProject } from '../common.js';
7
+ import { flag, option } from '../context.js';
8
+ /**
9
+ * Longest wait for the agent's reply in noninteractive use.
10
+ */
11
+ const REPLY_WAIT_MS = 10 * 60_000;
12
+ /**
13
+ * `ptbk chat`: directly open a new persistent conversation with one agent, reopen a named one, or list chats.
14
+ *
15
+ * No dashboard is required; Ctrl+C closes only this client (the service and the conversation stay).
16
+ *
17
+ * @private command
18
+ */
19
+ export default async function chat(context) {
20
+ const { terminal } = context;
21
+ const project = await selectedProject(context);
22
+ let replyError;
23
+ const { source, service, local } = await openChatSource(context, project, { onReplyError: (error) => (replyError = error) });
24
+ if (flag(context, 'list')) {
25
+ const chats = await source.list();
26
+ if (flag(context, 'json'))
27
+ printJson(chats);
28
+ else
29
+ terminal.write(renderChatList(chats));
30
+ return EXIT.success;
31
+ }
32
+ let message = context.positionals.join(' ');
33
+ if (flag(context, 'stdin'))
34
+ message = (await readStdin()).replace(/\s+$/, '');
35
+ const open = option(context, 'open');
36
+ if (open !== undefined) {
37
+ const detail = await source.get(open);
38
+ if (terminal.interactive && !message && flag(context, 'json') !== true) {
39
+ await runChatClient(terminal, source, { kind: 'existing', name: detail.summary.name });
40
+ if (!service && local?.pendingReplies)
41
+ terminal.write(terminal.style.muted('Chat closed; saving the reply in progress before exiting (Ctrl+C abandons it, the service replies later).\n'));
42
+ return EXIT.success;
43
+ }
44
+ if (message) {
45
+ const sent = await source.send(detail.summary.name, message, detail.messages.length);
46
+ terminal.write(`Sent to {{${sent.name}}}${sent.commit ? ` (${sent.commit.slice(0, 8)})` : ''}.\n`);
47
+ return EXIT.success;
48
+ }
49
+ await source.read(detail.summary.name);
50
+ if (flag(context, 'json'))
51
+ printJson(detail);
52
+ else
53
+ terminal.write(`${detail.summary.name} (${detail.summary.status})\n${detail.messages.map((item) => `\n${item.sender} ${item.at}\n${item.text}${item.choices?.length ? `\n» ${item.choices.join('\n» ')}` : ''}`).join('\n')}\n`);
54
+ return EXIT.success;
55
+ }
56
+ const agents = await source.agents();
57
+ const agentOption = option(context, 'agent');
58
+ let agent;
59
+ if (agentOption)
60
+ agent = explicitChatAgent(agents, agentOption);
61
+ else if (terminal.interactive) {
62
+ const picked = await pickChatAgent(terminal, agents);
63
+ if (picked === CANCELLED) {
64
+ terminal.write('No chat was started.\n');
65
+ return EXIT.incomplete;
66
+ }
67
+ agent = picked;
68
+ }
69
+ else
70
+ agent = defaultChatAgent(agents);
71
+ const title = option(context, 'title');
72
+ if (terminal.interactive && !message) {
73
+ await runChatClient(terminal, source, { kind: 'new', agent, title });
74
+ if (!service && local?.pendingReplies)
75
+ terminal.write(terminal.style.muted('Chat closed; saving the reply in progress before exiting (Ctrl+C abandons it, the service replies later).\n'));
76
+ return EXIT.success;
77
+ }
78
+ if (!message)
79
+ throw new PtbkError('The first message is required without an interactive terminal.', { kind: 'usage', next: ['Pass it as an argument or use --stdin.'] });
80
+ const created = await source.create(agent.reference, message, title);
81
+ terminal.write(`Started the chat {{${created.name}}}${created.commit ? ` (${created.commit.slice(0, 8)})` : ''}.\n`);
82
+ const reply = await waitForReply(source, created.name, 1, REPLY_WAIT_MS, () => replyError);
83
+ if (reply)
84
+ terminal.write(`\n${reply.sender}:\n${reply.text}\n`);
85
+ else
86
+ terminal.write(`No reply yet${replyError ? `: ${replyError}` : ''}. Continue with \`ptbk chat --open "${created.name}"\`.\n`);
87
+ return EXIT.success;
88
+ }
89
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/cli/commands/chat.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { type CommandContext } from '../context.js';
2
2
  /**
3
- * `ptbk dashboard`: attach a live view to the existing service (never starts or initializes anything).
3
+ * `ptbk dashboard`: attach a live view to the existing service (never starts or initializes anything); with
4
+ * `--global`, the host-wide overview of every running engine. A service of an incompatible ptbk version is shown by
5
+ * its own installation.
4
6
  *
5
7
  * @private command
6
8
  */
@@ -1,15 +1,51 @@
1
- import { EXIT, PtbkError } from '../../common/errors.js';
1
+ import { EXIT, PtbkError, usageError } from '../../common/errors.js';
2
+ import { projectAt } from '../../project/workspace.js';
2
3
  import { lookupService } from '../../service/control.js';
3
4
  import { runDashboard } from '../../ui/dashboard.js';
5
+ import { runGlobalDashboard } from '../../ui/global-dashboard.js';
4
6
  import { selectedProject } from '../common.js';
5
7
  import { flag } from '../context.js';
8
+ import { delegateToEngine } from '../engine-delegation.js';
6
9
  import { controlSource } from '../sources.js';
7
10
  /**
8
- * `ptbk dashboard`: attach a live view to the existing service (never starts or initializes anything).
11
+ * `ptbk dashboard --global`: the host-wide live table of running engines, independent of the current directory. It
12
+ * never initializes or selects that directory, never starts a worker and never acquires a project lock; attaching
13
+ * opens the selected project's ordinary dashboard and returns to the table.
14
+ */
15
+ async function globalDashboard(context) {
16
+ for (const name of ['path', 'tasks']) {
17
+ if (context.explicit.has(name))
18
+ throw usageError(`--global observes every project; --${name} would select one project.`, 'dashboard', 'Use `ptbk dashboard --path <dir>` for one project, or `ptbk dashboard --global` for all of them.');
19
+ }
20
+ const noQr = flag(context, 'qr') === false;
21
+ await runGlobalDashboard(context.terminal, async (row) => {
22
+ // Resolve the target from verified discovery information, never from the launch directory.
23
+ const project = projectAt(row.entry.projectRoot);
24
+ const lookup = await lookupService(project);
25
+ if (lookup.state !== 'running')
26
+ return `${row.entry.projectName} is no longer running${lookup.state === 'unreachable' ? ` (${lookup.reason})` : ''}; nothing was started.`;
27
+ if (lookup.record.instanceId !== row.entry.instanceId)
28
+ return `${row.entry.projectName} is now owned by another engine instance; select its new row to attach.`;
29
+ if (!lookup.engine.compatible) {
30
+ // Another engine version renders its own dashboard, so the view keeps that engine's version and shape.
31
+ await delegateToEngine(project, lookup, ['dashboard', '--path', project.root, ...(noQr ? ['--no-qr'] : [])], context.cwd, context.env);
32
+ return undefined;
33
+ }
34
+ await runDashboard(context.terminal, controlSource(lookup.client), { noQr });
35
+ return undefined;
36
+ }, context.env);
37
+ return EXIT.success;
38
+ }
39
+ /**
40
+ * `ptbk dashboard`: attach a live view to the existing service (never starts or initializes anything); with
41
+ * `--global`, the host-wide overview of every running engine. A service of an incompatible ptbk version is shown by
42
+ * its own installation.
9
43
  *
10
44
  * @private command
11
45
  */
12
46
  export default async function dashboard(context) {
47
+ if (flag(context, 'global'))
48
+ return await globalDashboard(context);
13
49
  const project = await selectedProject(context);
14
50
  const lookup = await lookupService(project);
15
51
  if (lookup.state === 'stopped') {
@@ -17,12 +53,14 @@ export default async function dashboard(context) {
17
53
  kind: 'not-found',
18
54
  project: project.root,
19
55
  effect: 'Nothing was started; the dashboard only attaches to an existing service.',
20
- next: ['Start the agenda with `ptbk start`, then run `ptbk dashboard` again.'],
56
+ next: ['Start the agenda with `ptbk start`, then run `ptbk dashboard` again.', 'See every running project with `ptbk dashboard --global`.'],
21
57
  });
22
58
  }
23
59
  if (lookup.state === 'unreachable') {
24
60
  throw new PtbkError('The recorded ptbk service does not answer.', { kind: 'technical', project: project.root, reason: lookup.reason, next: ['Run `ptbk status` to inspect it, or `ptbk restart`.'] });
25
61
  }
62
+ if (!lookup.engine.compatible)
63
+ return await delegateToEngine(project, lookup, context.argv, context.cwd, context.env);
26
64
  await runDashboard(context.terminal, controlSource(lookup.client), { noQr: flag(context, 'qr') === false });
27
65
  return EXIT.success;
28
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAuB,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;GAIG;AACH,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,SAAS,CAAC,OAAuB;IAC3D,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,8CAA8C,EAAE;YAChE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,MAAM,EAAE,0EAA0E;YAClF,IAAI,EAAE,CAAC,sEAAsE,CAAC;SACjF,CAAC,CAAC;IACP,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,aAAa,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,4CAA4C,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,qDAAqD,CAAC,EAAE,CAAC,CAAC;IAC1M,CAAC;IACD,MAAM,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5G,OAAO,IAAI,CAAC,OAAO,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/commands/dashboard.ts"],"names":[],"mappings":"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"}
@@ -4,9 +4,8 @@ import { toProjectRelative } from '../../common/fs.js';
4
4
  import { loadSettings, setting } from '../../project/config.js';
5
5
  import { commitPaths, inspectGit, listProjectFiles } from '../../project/git.js';
6
6
  import { newTaskPath, renderTaskBook } from '../../tasks/authoring.js';
7
- import { generateTaskId } from '../../tasks/identity.js';
8
7
  import { readTaskQueue } from '../../tasks/sources.js';
9
- import { printJson, selectedProject, writableTasksDirectory } from '../common.js';
8
+ import { generatedTaskName, printJson, selectedProject, writableTasksDirectory } from '../common.js';
10
9
  import { flag, option } from '../context.js';
11
10
  /**
12
11
  * `ptbk find-unwritten`: tasks still containing the `@@@` placeholder (read-only).
@@ -59,23 +58,22 @@ export async function findRefactorCandidates(context) {
59
58
  if (flag(context, 'create-tasks') && top.length) {
60
59
  const tasksDirectory = await writableTasksDirectory(context, project, settings);
61
60
  const created = [];
62
- const ids = [];
61
+ const names = [];
63
62
  for (const candidate of top) {
64
63
  const path = await newTaskPath(tasksDirectory, `refactor ${candidate.path}`, Date.now(), setting(settings, 'timezone'));
65
- const id = generateTaskId(`refactor ${candidate.path}`);
64
+ const title = await generatedTaskName(project, settings, `Refactor ${candidate.path}`, names);
66
65
  await writeFile(path, renderTaskBook({
67
- title: `Refactor ${candidate.path}`,
66
+ title,
68
67
  description: `\`${candidate.path}\` has ${candidate.lines} lines. Split it into cohesive, well-named units without changing behavior; keep tests passing.`,
69
- id,
70
68
  commitments: ['TASK PRIORITY 0', 'TASK ORIGIN refactor candidate'],
71
69
  }), { flag: 'wx' });
72
70
  created.push(path);
73
- ids.push(id);
71
+ names.push(title);
74
72
  }
75
73
  const gitInfo = await inspectGit(project.root);
76
74
  const commit = flag(context, 'commit') ?? setting(settings, 'execution.commit');
77
75
  if (commit && gitInfo.state === 'repository')
78
- await commitPaths({ projectRoot: project.root, repositoryRoot: gitInfo.root, paths: created, subject: `Add ${created.length} refactoring task(s)`, trailers: { 'Task-ID': ids }, temporaryDirectory: project.runtime.temporary, env: context.env });
76
+ await commitPaths({ projectRoot: project.root, repositoryRoot: gitInfo.root, paths: created, subject: `Add ${created.length} refactoring task(s)`, trailers: { 'Task-Name': names }, temporaryDirectory: project.runtime.temporary, env: context.env });
79
77
  context.terminal.write(`Created ${created.length} refactoring task(s).\n`);
80
78
  }
81
79
  if (flag(context, 'json'))
@@ -1 +1 @@
1
- {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/cli/commands/find.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/cli/commands/find.ts"],"names":[],"mappings":"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"}
@@ -5,10 +5,9 @@ import { ensureDirectory } from '../../common/fs.js';
5
5
  import { runCheck, validateCheckCommand } from '../../project/checks.js';
6
6
  import { loadSettings, setting } from '../../project/config.js';
7
7
  import { newTaskPath, renderTaskBook } from '../../tasks/authoring.js';
8
- import { generateTaskId } from '../../tasks/identity.js';
9
8
  import { lookupService } from '../../service/control.js';
10
9
  import { ServiceHost } from '../../service/host.js';
11
- import { selectedProject, settingOverrides, tasksOverride, writableTasksDirectory } from '../common.js';
10
+ import { generatedTaskName, selectedProject, settingOverrides, tasksOverride, writableTasksDirectory } from '../common.js';
12
11
  import { flag, option } from '../context.js';
13
12
  /**
14
13
  * `ptbk fix`: run the project check; repair only failing validation (never the ordinary queue).
@@ -41,15 +40,14 @@ export default async function fix(context) {
41
40
  await ensureDirectory(tasksDirectory);
42
41
  const taskPath = await newTaskPath(tasksDirectory, 'repair failing project check', Date.now(), setting(settings, 'timezone'));
43
42
  const agent = option(context, 'agent') ?? setting(settings, 'routing.defaultAgent');
44
- const commitments = [`TASK AGENT ${agent.startsWith('@') || agent.startsWith('{') ? agent : `{${agent}}`}`, 'TASK ORIGIN maintenance: failing project check'];
43
+ const commitments = [`TASK AGENT ${agent.startsWith('@') || agent.startsWith('{') ? agent : `{{${agent}}}`}`, 'TASK ORIGIN maintenance: failing project check'];
45
44
  if (option(context, 'harness'))
46
45
  commitments.push(`TASK HARNESS ${option(context, 'harness')}`);
47
46
  if (option(context, 'model'))
48
47
  commitments.push(`TASK MODEL ${option(context, 'model')}`);
49
48
  await writeFile(taskPath, renderTaskBook({
50
- title: 'Repair the failing project check',
49
+ title: await generatedTaskName(project, settings, 'Repair the failing project check'),
51
50
  description: `The project check \`${check}\` fails (exit ${String(result.exitCode)}). Fix the underlying defects without weakening validation: do not delete assertions, disable rules, lower thresholds or skip checks.\n\nCheck output (tail):\n\n\`\`\`\n${result.output.slice(-6000)}\n\`\`\``,
52
- id: generateTaskId('repair failing project check'),
53
51
  commitments,
54
52
  }), { flag: 'wx' });
55
53
  const harness = option(context, 'harness') ?? setting(settings, 'routing.harness') ?? Object.entries(settings.harnesses).find(([, value]) => value.enabled)?.[0];
@@ -63,7 +61,7 @@ export default async function fix(context) {
63
61
  tasksDirectory: tasksOverride(context),
64
62
  persistent: null,
65
63
  allowTunnelInstall: false,
66
- run: { selection: { agent: agent.startsWith('@') || agent.startsWith('{') ? agent : `{${agent}}`, harness, model: option(context, 'model') } },
64
+ run: { selection: { agent: agent.startsWith('@') || agent.startsWith('{') ? agent : `{{${agent}}}`, harness, model: option(context, 'model') } },
67
65
  onEvent: (text, level) => terminal.write(`${clockTime()} ${level === 'info' ? '' : `${level.toUpperCase()}: `}${text}\n`),
68
66
  });
69
67
  await host.start();
@@ -1 +1 @@
1
- {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../../src/cli/commands/fix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../../../src/cli/commands/fix.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,6 @@ export type InitResult = {
16
16
  readonly commit?: string;
17
17
  /** The ordinary Expert bootstrap task created by this run. */
18
18
  readonly firstTask?: {
19
- readonly id: string;
20
19
  readonly title: string;
21
20
  readonly path: string;
22
21
  };
@@ -1,9 +1,11 @@
1
1
  import { readFile, writeFile } from 'node:fs/promises';
2
- import { homedir } from 'node:os';
3
2
  import { dirname, join, relative, resolve, sep } from 'node:path';
4
3
  import { EXIT, PtbkError, errorMessage, usageError } from '../../common/errors.js';
5
4
  import { ensureDirectory, isDirectory, pathExists, toProjectRelative } from '../../common/fs.js';
6
5
  import { ENGINE_VERSION } from '../../common/version.js';
6
+ import { describeBrowserProfile, userChromeProfile } from '../../browser/browser.js';
7
+ import { BookIndex } from '../../project/books.js';
8
+ import { generatedName } from '../../tasks/identity.js';
7
9
  import { checkCandidates, validateCheckCommand } from '../../project/checks.js';
8
10
  import { enabledHarnesses, getPath, loadSettings, readProjectConfigFile, setting, updateProjectConfig } from '../../project/config.js';
9
11
  import { INITIAL_ASSETS, INITIAL_SPECIFICATION, bootstrapTask, sampleReadme } from '../../project/defaults.js';
@@ -19,7 +21,6 @@ import { checkHarnessVersion, installHarness, loginHarness, updateHarness } from
19
21
  import { lookupService } from '../../service/control.js';
20
22
  import { launchDaemon } from '../../service/launcher.js';
21
23
  import { newTaskPath, renderTaskBook } from '../../tasks/authoring.js';
22
- import { generateTaskId } from '../../tasks/identity.js';
23
24
  import { wrap } from '../../ui/ansi.js';
24
25
  import { materializeAttachments, isImagePath } from '../../ui/attachments.js';
25
26
  import { celebrate } from '../../ui/celebration.js';
@@ -28,6 +29,7 @@ import { CANCELLED, composeRich, confirm, inputLine, selectMany, selectOne, togg
28
29
  import { symbols } from '../../ui/terminal.js';
29
30
  import { readStdin, settingOverrides, tasksOverride, validateCombinations } from '../common.js';
30
31
  import { flag, option } from '../context.js';
32
+ import { liveSnapshot } from '../service-view.js';
31
33
  /**
32
34
  * Raised when the user abandons the wizard (Ctrl+C); completed steps are kept, nothing further is applied.
33
35
  */
@@ -51,16 +53,6 @@ function answered(value) {
51
53
  throw wasInterrupted() ? new WizardCancelled('cancelled') : new WizardBack('back');
52
54
  return value;
53
55
  }
54
- /**
55
- * Default Chrome user-data directory of this platform.
56
- */
57
- function defaultChromeProfile() {
58
- if (process.platform === 'darwin')
59
- return join(homedir(), 'Library', 'Application Support', 'Google', 'Chrome');
60
- if (process.platform === 'win32')
61
- return join(process.env.LOCALAPPDATA ?? join(homedir(), 'AppData', 'Local'), 'Google', 'Chrome', 'User Data');
62
- return join(homedir(), '.config', 'google-chrome');
63
- }
64
56
  /**
65
57
  * Titles of the user-facing steps.
66
58
  */
@@ -441,22 +433,28 @@ export async function initializeProject(context, options = {}) {
441
433
  shown.add('browser');
442
434
  const choice = answered(await selectOne(terminal, {
443
435
  frame: frame('browser', 'agents share one browser for websites'),
444
- question: 'Which browser profile should agents share for websites in this project?',
436
+ question: 'Which browser profile should agents use for websites in this project?',
445
437
  choices: [
446
- { value: 'isolated', label: 'Isolated project profile', description: 'persistent profile in .ptbk/, separate from your browser' },
447
- { value: 'other', label: 'Another existing profile', description: 'e.g. a profile shared by several projects' },
448
- { value: 'user', label: 'Your Chrome profile', description: 'reuses your logged-in sessions' },
438
+ { value: 'global', label: 'Dedicated Promptbook profile', description: 'a separate Promptbook-only profile, reused by your other projects (one project at a time); not your Chrome profile' },
439
+ { value: 'isolated', label: 'Isolated project profile', description: 'only this project, stored in .ptbk/ (Git-ignored)' },
440
+ { value: 'user', label: 'Your Chrome profile', description: 'reuses your logged-in sessions; agents act as you' },
441
+ { value: 'custom', label: 'Custom profile path', description: 'another existing browser profile directory' },
449
442
  ],
450
- defaultValue: 'isolated',
443
+ defaultValue: 'global',
451
444
  }));
452
- if (choice === 'other')
453
- state.browserProfile = answered(await inputLine(terminal, { frame: frame('browser'), question: 'Path of the browser profile directory:' }));
445
+ if (choice === 'custom') {
446
+ state.browserProfile = answered(await inputLine(terminal, {
447
+ frame: frame('browser'),
448
+ question: 'Path of the existing browser profile directory:',
449
+ validate: (value) => (!value.trim() ? 'Enter a path.' : ['global', 'isolated', 'user'].includes(value.trim()) ? 'Choose that option instead of typing its name.' : undefined),
450
+ })).trim();
451
+ }
454
452
  else if (choice === 'user') {
455
- const ok = answered(await confirm(terminal, { frame: frame('browser'), question: `Agents will act with every session in ${defaultChromeProfile()}, and their actions affect that profile. Use it?`, defaultYes: false }));
456
- state.browserProfile = ok ? defaultChromeProfile() : 'isolated';
453
+ const ok = answered(await confirm(terminal, { frame: frame('browser'), question: `Agents will act with every session in ${userChromeProfile()} and their actions affect that profile; Chrome must be closed while they use it. Use it?`, defaultYes: false }));
454
+ state.browserProfile = ok ? 'user' : 'global';
457
455
  }
458
456
  else
459
- state.browserProfile = 'isolated';
457
+ state.browserProfile = choice;
460
458
  state.browserMode = answered(await selectOne(terminal, {
461
459
  frame: frame('browser'),
462
460
  question: 'Browser visibility:',
@@ -466,7 +464,7 @@ export async function initializeProject(context, options = {}) {
466
464
  ],
467
465
  defaultValue: state.browserMode ?? 'headless',
468
466
  }));
469
- answers.set('browser', `Browser: ${state.browserProfile === 'isolated' ? 'isolated project profile' : state.browserProfile}, ${state.browserMode}`);
467
+ answers.set('browser', `Browser: ${describeBrowserProfile(state.browserProfile ?? 'global')}, ${state.browserMode}`);
470
468
  },
471
469
  // 7. Trace recording and Git inclusion (three explicit project choices).
472
470
  traces: async () => {
@@ -489,7 +487,7 @@ export async function initializeProject(context, options = {}) {
489
487
  state.traces = answered(await toggleList(terminal, {
490
488
  frame: frame('traces', 'every task keeps its own audit trail'),
491
489
  question: 'Traces: how should task evidence be kept?',
492
- intro: 'Each task records its harness output, events and (when enabled) browser video in traces/<task-id>/, linked to its commits by Task-ID. Traces can contain project data and page content; sign-in steps are not recorded.',
490
+ intro: 'Each task records its harness output, events and (when enabled) browser video in traces/<task-file-basename>/, linked to its commits by the Task-Name trailer. Traces can contain project data and page content; sign-in steps are not recorded.',
493
491
  toggles: [
494
492
  { key: 'commit', label: 'Commit traces to Git', description: 'include each task’s traces in its result commit (shared with everyone who can read the repository); otherwise traces stay local and the whole traces/ folder is ignored' },
495
493
  { key: 'ignoreVideos', label: 'Ignore trace videos in Git', description: 'keep browser videos local even when traces are committed (videos are large and may show sensitive pages)' },
@@ -755,10 +753,11 @@ export async function initializeProject(context, options = {}) {
755
753
  const traceIgnore = await ensureTraceIgnoreRules(root, savedPolicy && configBefore?.raw.traces ? savedPolicy : tracePolicy);
756
754
  if (traceIgnore)
757
755
  createdPaths.push(traceIgnore);
758
- for (const path of await ensureCoreAgents(root, agentsDirectory))
759
- createdPaths.push(path);
756
+ // Default roles first: a missing Chatter's initial TEAM covers the completed role set.
760
757
  for (const path of await ensureDefaultRoles(root, agentsDirectory))
761
758
  createdPaths.push(path);
759
+ for (const path of await ensureCoreAgents(root, agentsDirectory))
760
+ createdPaths.push(path);
762
761
  for (const path of await ensureTemplates(root, tasksDirectory))
763
762
  createdPaths.push(path);
764
763
  await ensureDirectory(join(root, tasksDirectory));
@@ -834,7 +833,7 @@ export async function initializeProject(context, options = {}) {
834
833
  if (state.saveCheck !== undefined)
835
834
  settingsChanges['execution.check'] = state.saveCheck;
836
835
  if (!rawConfig.browser || option(context, 'browser-profile') !== undefined)
837
- settingsChanges['browser.profile'] = state.browserProfile ?? 'isolated';
836
+ settingsChanges['browser.profile'] = state.browserProfile ?? 'global';
838
837
  if (!rawConfig.browser || option(context, 'browser-mode') !== undefined)
839
838
  settingsChanges['browser.mode'] = state.browserMode ?? 'headless';
840
839
  for (const [key, value] of [
@@ -859,21 +858,22 @@ export async function initializeProject(context, options = {}) {
859
858
  const marker = ((await readProjectConfigFile(project)).raw.initialized ?? {});
860
859
  let firstTask;
861
860
  const tasksRoot = join(root, tasksDirectory);
862
- if (newPurpose && !marker.starterTask && !(await hasFirstTask({ root, tasksDirectory, timeZone, knownIds: [] }))) {
861
+ if (newPurpose && !marker.starterTask && !(await hasFirstTask({ root, tasksDirectory, timeZone }))) {
863
862
  const blank = blankIntent(state.intent?.segments ?? []);
864
863
  const specification = join(root, INITIAL_SPECIFICATION);
865
864
  const draftPath = await newTaskPath(tasksRoot, blank ? 'review initialized project' : 'transform project', Date.now(), timeZone);
866
865
  const link = relative(dirname(draftPath), specification).split(sep).join('/');
867
866
  const content = bootstrapTask({ blank, specificationLink: link });
868
- const id = generateTaskId(blank ? 'readiness review' : 'bootstrap');
869
- await writeFile(draftPath, renderTaskBook({ title: content.title, description: content.description, id, commitments: ['TASK AGENT @Expert', 'TASK ORIGIN initialization'] }), { flag: 'wx' });
867
+ // A generated name: the readable title plus creation date/time, distinct from every Book of the project.
868
+ const title = generatedName(content.title, { taken: (await BookIndex.load(root, { agents: agentsDirectory, tasks: tasksDirectory })).names(), timeZone });
869
+ await writeFile(draftPath, renderTaskBook({ title, description: content.description, commitments: ['TASK AGENT @Expert', 'TASK ORIGIN initialization'] }), { flag: 'wx' });
870
870
  createdPaths.push(draftPath);
871
- firstTask = { id, title: content.title, path: draftPath };
871
+ firstTask = { title, path: draftPath };
872
872
  }
873
873
  const effectiveInstallation = installation === 'existing' ? (marker.installation ?? 'local') : installation;
874
874
  if (firstTask || !marker.engineVersion || marker.installation !== effectiveInstallation) {
875
875
  const raw = (await readProjectConfigFile(project)).raw;
876
- raw.initialized = { ...raw.initialized, engineVersion: marker.engineVersion ?? ENGINE_VERSION, ...(firstTask ? { starterTask: firstTask.id } : {}), installation: effectiveInstallation };
876
+ raw.initialized = { ...raw.initialized, engineVersion: marker.engineVersion ?? ENGINE_VERSION, ...(firstTask ? { starterTask: firstTask.title } : {}), installation: effectiveInstallation };
877
877
  await writeFile(project.configPath, `${JSON.stringify(raw, null, 4)}\n`);
878
878
  createdPaths.push(project.configPath);
879
879
  }
@@ -893,7 +893,7 @@ export async function initializeProject(context, options = {}) {
893
893
  repositoryRoot: repository.repositoryRoot,
894
894
  paths: uniquePaths,
895
895
  subject: configBefore ? 'Update project setup' : 'Initialize project',
896
- trailers: { 'Task-ID': firstTask ? [firstTask.id] : [] },
896
+ trailers: { 'Task-Name': firstTask ? [firstTask.title] : [] },
897
897
  temporaryDirectory: project.runtime.temporary,
898
898
  env: context.env,
899
899
  });
@@ -940,16 +940,16 @@ async function startService(context, project) {
940
940
  const overrides = settingOverrides(context);
941
941
  const existing = await lookupService(project);
942
942
  if (existing.state === 'running') {
943
- return { kind: 'reused', snapshot: await existing.client.request('snapshot'), note: `The ${existing.record.mode} service (PID ${existing.record.pid}) was already running and keeps its configuration.` };
943
+ return { kind: 'reused', snapshot: await liveSnapshot(project, existing), note: `The ${existing.record.mode} service (PID ${existing.record.pid}) was already running and keeps its configuration.` };
944
944
  }
945
945
  const settings = await loadSettings(project, { env: context.env, cli: overrides });
946
946
  const persistent = setting(settings, 'service.persist');
947
947
  const launched = await launchDaemon(project, { cli: overrides, tasksDirectory: tasksOverride(context), persistent, env: context.env });
948
- let snapshot = await launched.lookup.client.request('snapshot');
948
+ let snapshot = await liveSnapshot(project, launched.lookup);
949
949
  const deadline = Date.now() + 10_000;
950
- while (snapshot.service.state === 'starting' && Date.now() < deadline) {
950
+ while (snapshot.phase === 'starting' && Date.now() < deadline) {
951
951
  await new Promise((resolvePromise) => setTimeout(resolvePromise, 300));
952
- snapshot = await launched.lookup.client.request('snapshot');
952
+ snapshot = await liveSnapshot(project, launched.lookup);
953
953
  }
954
954
  return { kind: launched.started ? 'started' : 'reused', snapshot, note: launched.persistence?.note ?? (persistent ? undefined : 'Restart persistence is disabled (--no-persist).') };
955
955
  }
@@ -988,7 +988,7 @@ function renderInitSummary(context, input) {
988
988
  : ready
989
989
  ? [['ptbk start', service?.kind === 'failed' ? 'start the service after fixing the problem above' : 'start the agenda in the background']]
990
990
  : [['ptbk init', 'resume setup after resolving the items above']];
991
- const first = result.firstTask ? `${result.firstTask.title} → Expert (Task-ID ${result.firstTask.id}, ${toProjectRelative(root, result.firstTask.path)})` : undefined;
991
+ const first = result.firstTask ? `{{${result.firstTask.title}}} → Expert (${toProjectRelative(root, result.firstTask.path)})` : undefined;
992
992
  const headline = !ready ? 'Setup incomplete' : running ? 'Project ready · agenda running' : 'Setup complete · service not running';
993
993
  if (!terminal.pretty) {
994
994
  const lines = [`${headline}: ${root} (ptbk ${ENGINE_VERSION})`];