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
@@ -1,10 +1,11 @@
1
- import { appendFile, stat } from 'node:fs/promises';
1
+ import { createHash } from 'node:crypto';
2
+ import { appendFile, readFile, stat } from 'node:fs/promises';
2
3
  import { join } from 'node:path';
3
4
  import { errorMessage } from '../common/errors.js';
4
- import { ensureDirectory, toProjectRelative } from '../common/fs.js';
5
+ import { ensureDirectory, pathExists, toProjectRelative } from '../common/fs.js';
5
6
  import { createRedactor } from '../common/redact.js';
6
7
  import { ENGINE_VERSION } from '../common/version.js';
7
- import { traceDirectoryOf } from '../tasks/identity.js';
8
+ import { legacyTraceDirectoryOf, traceDirectoryOf } from '../tasks/identity.js';
8
9
  /**
9
10
  * Largest consolidated harness log of one task; further output is omitted with a visible note.
10
11
  */
@@ -18,7 +19,7 @@ const MAX_EVENT_LOG_BYTES = 16 * 1024 * 1024;
18
19
  */
19
20
  const MAX_FIELD_CHARS = 200_000;
20
21
  /**
21
- * File names inside `traces/<task-id>/`.
22
+ * File names inside `traces/<task-file-basename>/`.
22
23
  *
23
24
  * @private task traces
24
25
  */
@@ -35,7 +36,16 @@ export const TRACE_FILES = {
35
36
  localEvents: join('local', 'events.jsonl'),
36
37
  };
37
38
  /**
38
- * Root-level audit trail of one task: `traces/<task-id>/`.
39
+ * Git blob hash of a source's content: the exact source revision evidence refers to (no Git call needed).
40
+ *
41
+ * @private task traces
42
+ */
43
+ export function sourceRevision(content) {
44
+ const bytes = typeof content === 'string' ? Buffer.from(content) : content;
45
+ return createHash('sha1').update(`blob ${bytes.length}\0`).update(bytes).digest('hex');
46
+ }
47
+ /**
48
+ * Root-level audit trail of one task: `traces/<task-file-basename>/`, named literally after the task's source file.
39
49
  *
40
50
  * Writing never throws; an unavailable trace is reported once through `problem` instead of inventing a saved path.
41
51
  *
@@ -43,10 +53,10 @@ export const TRACE_FILES = {
43
53
  */
44
54
  export class TaskTrace {
45
55
  project;
46
- taskId;
56
+ subject;
47
57
  /** Absolute directory. */
48
58
  directory;
49
- /** Project-relative POSIX directory (`traces/<task-id>`). */
59
+ /** Project-relative POSIX directory (`traces/<task-file-basename>`). */
50
60
  relativeDirectory;
51
61
  /** Why evidence could not be written (first failure). */
52
62
  problem;
@@ -54,26 +64,54 @@ export class TaskTrace {
54
64
  redact;
55
65
  truncated = new Set();
56
66
  sizes = new Map();
57
- constructor(project, taskId, secrets) {
67
+ constructor(project,
68
+ /** The task the trace belongs to (declared name and actual source). */
69
+ subject, secrets) {
58
70
  this.project = project;
59
- this.taskId = taskId;
60
- this.relativeDirectory = traceDirectoryOf(taskId);
61
- this.directory = join(project.root, 'traces', taskId);
71
+ this.subject = subject;
72
+ this.relativeDirectory = traceDirectoryOf(subject.source);
73
+ this.directory = join(project.root, this.relativeDirectory);
62
74
  this.redact = createRedactor(secrets);
63
75
  }
76
+ /** Declared task name the trace belongs to (recorded in its events; not its directory name). */
77
+ get taskName() {
78
+ return this.subject.name;
79
+ }
80
+ /** Literal source basename naming the trace directory (`traces/<basename>/`). */
81
+ get key() {
82
+ return this.relativeDirectory.slice('traces/'.length);
83
+ }
64
84
  /**
65
- * Opens (creating when needed) the trace directory of a task.
85
+ * Opens (creating when needed) the trace directory of a task, named literally after its source file.
86
+ *
87
+ * Evidence an older engine stored under the task's name-derived directory stays where it is; when it verifiably
88
+ * belongs to this task (same declared name or source), the new trace links it as historical evidence.
66
89
  */
67
- static async open(project, taskId, secrets = []) {
68
- const trace = new TaskTrace(project, taskId, secrets);
90
+ static async open(project, subject, secrets = []) {
91
+ const trace = new TaskTrace(project, subject, secrets);
92
+ let fresh = false;
69
93
  try {
94
+ fresh = !(await pathExists(trace.directory));
70
95
  await ensureDirectory(trace.directory);
71
96
  }
72
97
  catch (error) {
73
98
  trace.problem = `Trace storage ${trace.relativeDirectory} is unavailable: ${errorMessage(error)}`;
74
99
  }
100
+ if (fresh && !trace.problem) {
101
+ const legacy = await historicalEvidence(project, subject);
102
+ if (legacy && legacy !== trace.relativeDirectory)
103
+ await trace.event('historical-evidence', { directory: `${legacy}/`, name: subject.name, source: subject.source });
104
+ }
75
105
  return trace;
76
106
  }
107
+ /**
108
+ * Records the declared name, actual source path and source revision of the evidence that follows (every run,
109
+ * retry, occurrence and consultation remains attributable after renames).
110
+ */
111
+ async provenance(data = {}) {
112
+ const content = await readFile(join(this.project.root, this.subject.source)).catch(() => undefined);
113
+ await this.event('provenance', { name: this.subject.name, source: this.subject.source, sourceRevision: content ? sourceRevision(content) : null, ...data });
114
+ }
77
115
  /** Project-relative path of the consolidated harness log. */
78
116
  get harnessLog() {
79
117
  return `${this.relativeDirectory}/${TRACE_FILES.harness}`;
@@ -151,13 +189,34 @@ export class TaskTrace {
151
189
  await this.queue;
152
190
  }
153
191
  }
192
+ /**
193
+ * The name-derived evidence directory of an older engine when it verifiably belongs to the task (its events name the
194
+ * same declared name or source); ambiguous directories are not attributed.
195
+ */
196
+ async function historicalEvidence(project, subject) {
197
+ const legacy = legacyTraceDirectoryOf(subject.name);
198
+ const events = await readFile(join(project.root, legacy, TRACE_FILES.events), 'utf8').catch(() => undefined);
199
+ if (!events)
200
+ return undefined;
201
+ for (const line of events.split('\n')) {
202
+ try {
203
+ const event = JSON.parse(line);
204
+ if (event.source === subject.source || event.title === subject.name || event.name === subject.name)
205
+ return legacy;
206
+ }
207
+ catch {
208
+ // a torn line proves nothing
209
+ }
210
+ }
211
+ return undefined;
212
+ }
154
213
  /**
155
214
  * Header line of a new trace (engine version and task identity).
156
215
  *
157
216
  * @private task traces
158
217
  */
159
218
  export function traceHeader(task) {
160
- return `ptbk ${ENGINE_VERSION} · task ${task.id} · "${task.title}" · ${task.source}`;
219
+ return `ptbk ${ENGINE_VERSION} · task {{${task.title}}} · ${task.source}`;
161
220
  }
162
221
  /**
163
222
  * Renders one line of harness output: JSON events as indented readable text (losslessly), other text verbatim.
@@ -1 +1 @@
1
- {"version":3,"file":"task-trace.js","sourceRoot":"","sources":["../../src/engine/task-trace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-trace.js","sourceRoot":"","sources":["../../src/engine/task-trace.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import { type AgentCatalog } from '../project/agents.js';
3
3
  import type { Project } from '../project/workspace.js';
4
4
  import { type BridgeTool } from './bridge.js';
5
5
  import type { HarnessPool } from './harnesses.js';
6
- import type { RequestStore, UserRequest } from './requests.js';
6
+ import type { TaskChats } from '../chats/task-chats.js';
7
7
  import type { TaskTrace } from './task-trace.js';
8
8
  /**
9
9
  * Shared consultation budget of one task.
@@ -23,14 +23,16 @@ export type TeamContext = {
23
23
  readonly catalog: AgentCatalog;
24
24
  readonly pool: HarnessPool;
25
25
  readonly settings: EffectiveSettings;
26
- readonly requests: RequestStore;
27
- /** Task reference, stable ID and title. */
26
+ /** Chats of the executing task (absent where no human chat or recorded consultation is possible, e.g. planning). */
27
+ readonly chats?: TaskChats;
28
+ /** Task reference, name and occurrence (for a conversation-scoped consultation: the originating chat). */
28
29
  readonly task: {
29
30
  readonly ref: string;
30
- readonly id?: string;
31
31
  readonly title: string;
32
32
  readonly occurrence?: string;
33
33
  };
34
+ /** Whether the consultation serves an executing task (default) or a human-facing conversation without a task. */
35
+ readonly scope?: 'task' | 'conversation';
34
36
  /** The task's audit trail (consultations are recorded in its harness log). */
35
37
  readonly trace?: TaskTrace;
36
38
  /** Consulting agent. */
@@ -39,14 +41,25 @@ export type TeamContext = {
39
41
  readonly harness: string;
40
42
  /** Consultation depth of this turn (0 for the task's own agent). */
41
43
  readonly depth: number;
42
- /** Task-wide budget. */
44
+ /** Budget of the task, or of the originating chat turn. */
43
45
  readonly budget: ConsultationBudget;
46
+ /** Reports an advisor's execution context (shown separately from the consulting agent's own run). */
47
+ readonly onConsultation?: (consultation: {
48
+ readonly advisor: string;
49
+ readonly by: string;
50
+ readonly harness: string;
51
+ readonly model?: string;
52
+ readonly state: 'started' | 'finished';
53
+ }) => void;
44
54
  /** Whether the user may be asked. */
45
55
  readonly questionsAllowed: boolean;
46
56
  /** Cancellation. */
47
57
  readonly signal: AbortSignal;
48
- /** Records a created user request. */
49
- readonly onUserRequest: (request: UserRequest) => void;
58
+ /** Records the chat now waiting for the user (the task checkpoints after its turn). */
59
+ readonly onUserChat: (chat: {
60
+ readonly chat: string;
61
+ readonly awaited: number;
62
+ }) => void;
50
63
  /** Activity reporting. */
51
64
  readonly onActivity: (text: string) => void;
52
65
  };
@@ -2,34 +2,31 @@ import { join } from 'node:path';
2
2
  import { writeFile, rm } from 'node:fs/promises';
3
3
  import { ensureDirectory } from '../common/fs.js';
4
4
  import { shortId } from '../common/ids.js';
5
+ import { normalizeAgentName, referenceName } from '../book/references.js';
5
6
  import { setting } from '../project/config.js';
6
7
  import { resolveEffectiveAgent } from '../project/agents.js';
7
8
  import { EXPERT_DOCUMENTATION_DIRECTORY } from '../project/expert.js';
8
9
  import { runHarness } from '../harness/run.js';
9
10
  import { ToolBridge } from './bridge.js';
10
11
  import { renderAgentInstructions } from './prompt.js';
12
+ import { validateChoices } from '../chats/chat-book.js';
11
13
  /**
12
- * Creates a durable user request for a question and returns its reference promptly.
14
+ * Starts or continues the agent→User chat for a genuine blocker and returns promptly (the human answers later).
13
15
  */
14
16
  async function askUser(context, question, choices, reason, attempted = '') {
15
- if (!context.questionsAllowed)
17
+ if (!context.questionsAllowed || !context.chats)
16
18
  return { text: 'The user is not available for questions in this run (--no-questions). Decide reasonably or report blocked.', isError: true };
17
19
  if (!question.trim())
18
20
  return { text: 'The question is empty.', isError: true };
19
- const request = await context.requests.create({
20
- kind: Array.isArray(choices) && choices.length ? 'confirmation' : 'question',
21
- reason: reason || `${context.agentName} needs your input on "${context.task.title}".`,
22
- question,
23
- attempted,
24
- choices: Array.isArray(choices) ? choices : undefined,
25
- origin: { kind: 'task', taskRef: context.task.ref, taskId: context.task.id, taskTitle: context.task.title, agent: context.agentName, occurrence: context.task.occurrence },
26
- blocking: true,
27
- });
28
- context.onUserRequest(request);
29
- context.onActivity(`asked the user (${request.id})`);
30
- await context.trace?.event('user-request', { requestId: request.id, agent: context.agentName, question, reason: request.reason, attempted: request.attempted, choices: request.choices });
21
+ const problem = validateChoices(choices);
22
+ if (problem)
23
+ return { text: `Invalid choices: ${problem}`, isError: true };
24
+ const chat = await context.chats.askUser({ agent: context.agentName, question, reason, attempted, choices: Array.isArray(choices) && choices.length ? choices : undefined });
25
+ context.onUserChat(chat);
26
+ context.onActivity(`${chat.reused ? 'still waiting for' : 'asked'} the user in the chat {{${chat.chat}}}`);
27
+ await context.trace?.event('user-chat', { chat: chat.chat, agent: context.agentName, question, reason, attempted, choices, reused: chat.reused });
31
28
  return {
32
- text: `Created user request ${request.id}. The user answers asynchronously. End your turn now with PTBK_RESULT {"status":"waiting-for-user","summary":"…"}; the task resumes automatically with the answer.`,
29
+ text: `The question is in the chat {{${chat.chat}}}, waiting for the user. End your turn now with PTBK_RESULT {"status":"waiting-for-user","summary":"…"}; the task resumes automatically with the reply.`,
33
30
  };
34
31
  }
35
32
  /**
@@ -41,7 +38,7 @@ async function consultAgent(context, reference, question) {
41
38
  if (context.depth + 1 > maxDepth)
42
39
  return { text: `Consultation depth limit (${maxDepth}) reached; answer without further consultation.`, isError: true };
43
40
  if (context.budget.calls >= maxCalls)
44
- return { text: `Consultation limit (${maxCalls} per task) reached.`, isError: true };
41
+ return { text: `Consultation limit (${maxCalls} per ${context.scope === 'conversation' ? 'chat turn' : 'task'}) reached.`, isError: true };
45
42
  const advisor = await resolveEffectiveAgent(context.catalog, reference);
46
43
  const errors = advisor.diagnostics.filter((diagnostic) => diagnostic.severity === 'error');
47
44
  if (errors.length)
@@ -57,14 +54,17 @@ async function consultAgent(context, reference, question) {
57
54
  const promptDirectory = await ensureDirectory(context.project.runtime.temporary);
58
55
  const promptFile = join(promptDirectory, `consultation-${shortId()}.md`);
59
56
  const prompt = [
60
- `# Consultation\n\nYou are **${advisor.name}**, consulted by ${context.agentName} who is working on the task "${context.task.title}" in the project at \`${context.project.root}\`.`,
57
+ context.scope === 'conversation'
58
+ ? `# Consultation\n\nYou are **${advisor.name}**, consulted by ${context.agentName} who is answering the project owner in the chat "${context.task.title}" of the project at \`${context.project.root}\`. Your advice is relayed and attributed to you; you do not perform work here.`
59
+ : `# Consultation\n\nYou are **${advisor.name}**, consulted by ${context.agentName} who is working on the task "${context.task.title}" in the project at \`${context.project.root}\`.`,
61
60
  `## Your role\n\n${renderAgentInstructions(advisor)}`,
62
61
  `## Question\n\n${question}`,
63
62
  '## Rules\n\n- You are read-only: inspect files if useful, but never modify anything or run write operations.\n- Answer directly and concisely within your own role. You cannot grant permissions beyond the task.\n- No completion line is needed.',
64
63
  ].join('\n\n');
65
64
  await writeFile(promptFile, prompt);
66
65
  await context.trace?.section(`Consultation · ${context.agentName} asks ${advisor.name} (depth ${context.depth + 1})`, [`Harness: ${plugin.displayName} ${context.pool.inspection(harnessId)?.version ?? ''}`.trim(), `Question:\n${question}`]);
67
- await context.trace?.event('consultation-started', { advisor: advisor.name, by: context.agentName, depth: context.depth + 1, harness: harnessId });
66
+ await context.trace?.event('consultation-started', { advisor: advisor.name, by: context.agentName, depth: context.depth + 1, harness: harnessId, model: context.settings.harnesses[harnessId]?.model ?? null });
67
+ context.onConsultation?.({ advisor: advisor.name, by: context.agentName, harness: harnessId, model: context.settings.harnesses[harnessId]?.model, state: 'started' });
68
68
  const controller = new AbortController();
69
69
  const abort = () => controller.abort();
70
70
  context.signal.addEventListener('abort', abort, { once: true });
@@ -88,14 +88,20 @@ async function consultAgent(context, reference, question) {
88
88
  },
89
89
  onOutput: (stream, line) => context.trace?.output(stream, line),
90
90
  }, context.pool.inspection(harnessId)?.executablePath ?? plugin.executable);
91
- await context.trace?.event('consultation-finished', { advisor: advisor.name, outcome: result.outcome, diagnostic: result.diagnostic });
91
+ await context.trace?.event('consultation-finished', { advisor: advisor.name, outcome: result.outcome, diagnostic: result.diagnostic, model: result.model ?? null });
92
92
  if (result.outcome !== 'completed')
93
93
  return { text: `Consultation of ${advisor.name} ended without an answer: ${result.diagnostic}`, isError: true };
94
94
  const limit = setting(context.settings, 'team.maxResponseChars');
95
95
  const answer = result.finalMessage.trim() || '(no answer)';
96
- return { text: answer.length > limit ? `${answer.slice(0, limit)}\n[… response truncated at ${limit} characters]` : answer };
96
+ const bounded = answer.length > limit ? `${answer.slice(0, limit)}\n[… response truncated at ${limit} characters]` : answer;
97
+ // Task-scoped agent↔agent conversation: a chat Book saved with the owning task's one result commit.
98
+ const chat = await context.chats?.recordConsultation({ from: context.agentName, to: advisor.name, question, answer: bounded }).catch(() => undefined);
99
+ if (chat)
100
+ await context.trace?.event('consultation-chat', { chat });
101
+ return { text: bounded };
97
102
  }
98
103
  finally {
104
+ context.onConsultation?.({ advisor: advisor.name, by: context.agentName, harness: harnessId, state: 'finished' });
99
105
  context.signal.removeEventListener('abort', abort);
100
106
  await bridge.close();
101
107
  await rm(promptFile, { force: true });
@@ -111,7 +117,7 @@ export function teamTools(context, options = {}) {
111
117
  const tools = [
112
118
  {
113
119
  name: 'consult',
114
- description: 'Consult another agent of this project (reference like "@Lawyer" or "{Frontend Developer}"), "@Expert" for Promptbook expertise, or "@User" to ask the human (only for a genuine blocker, see ask_user). Returns the advisor\'s answer; for @User it returns a pending request reference.',
120
+ description: 'Consult another agent of this project (reference like "@Lawyer" or "{Frontend Developer}"), "@Expert" for Promptbook expertise, or "@User" to ask the human (only for a genuine blocker, see ask_user). Returns the advisor\'s answer; for @User it starts a chat waiting for the human.',
115
121
  inputSchema: {
116
122
  type: 'object',
117
123
  properties: { agent: { type: 'string', description: 'Agent reference, e.g. @Lawyer' }, question: { type: 'string' }, choices: { type: 'array', items: { type: 'string' }, description: 'Optional predefined answers (only for @User)' } },
@@ -120,7 +126,7 @@ export function teamTools(context, options = {}) {
120
126
  handler: async (input) => {
121
127
  const reference = String(input.agent ?? '').trim();
122
128
  const question = String(input.question ?? '');
123
- const normalized = reference.replace(/^@|^\{|\}$/g, '').toLowerCase().replace(/[\s_-]/g, '');
129
+ const normalized = normalizeAgentName(referenceName(reference));
124
130
  if (['void', 'null', '0'].includes(normalized))
125
131
  return { text: 'Void/Null is a no-op reference; no consultation happened.' };
126
132
  if (normalized === 'user') {
@@ -128,14 +134,14 @@ export function teamTools(context, options = {}) {
128
134
  return { text: 'Advisors cannot ask the user; answer with what you know.', isError: true };
129
135
  return await askUser(context, question, input.choices, '');
130
136
  }
131
- return await consultAgent(context, reference.startsWith('@') || reference.startsWith('{') ? reference : `{${reference}}`, question);
137
+ return await consultAgent(context, reference.startsWith('@') || reference.startsWith('{') ? reference : `{{${reference}}}`, question);
132
138
  },
133
139
  },
134
140
  ];
135
141
  if (includeUser) {
136
142
  tools.push({
137
143
  name: 'ask_user',
138
- description: 'Exceptional: ask the human only when the work is genuinely blocked on something you cannot safely resolve (required login/2FA, missing authority, a consequential ambiguity the task and project do not settle). Never ask to confirm an already authorized or routine action, to choose ordinary implementation details, or to repeat the task. Returns a pending request reference immediately; then end your turn with status waiting-for-user.',
144
+ description: 'Exceptional: ask the human only when the work is genuinely blocked on something you cannot safely resolve (required login/2FA, missing authority, a consequential ambiguity the task and project do not settle). Never ask to confirm an already authorized or routine action, to choose ordinary implementation details, or to repeat the task. Your question goes into a durable chat with the user; then end your turn with status waiting-for-user.',
139
145
  inputSchema: {
140
146
  type: 'object',
141
147
  properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/engine/team.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"team.js","sourceRoot":"","sources":["../../src/engine/team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAA0B,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAqB,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAoC,MAAM,aAAa,CAAC;AAE3E,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAgDxD;;GAEG;AACH,KAAK,UAAU,OAAO,CAAC,OAAoB,EAAE,QAAgB,EAAE,OAAgB,EAAE,MAAc,EAAE,SAAS,GAAG,EAAE;IAC3G,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,4GAA4G,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9L,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/E,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,OAAoB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3L,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,2BAA2B,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IAC3G,MAAM,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAClJ,OAAO;QACH,IAAI,EAAE,iCAAiC,IAAI,CAAC,IAAI,0JAA0J;KAC7M,CAAC;AACN,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,OAAoB,EAAE,SAAiB,EAAE,QAAgB;IACjF,MAAM,QAAQ,GAAG,OAAO,CAAS,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAS,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,6BAA6B,QAAQ,iDAAiD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzJ,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,uBAAuB,QAAQ,QAAQ,OAAO,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjL,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IAC3F,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,SAAS,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACpI,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAClK,IAAI,CAAC,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,qDAAqD,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACtG,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAE,CAAC;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,OAAO,CAAC,UAAU,CAAC,cAAc,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,QAAQ,GAAG,CAAC,CAAC;IACvF,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7I,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,eAAe,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,gBAAgB,OAAO,EAAE,KAAK,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG;QACX,OAAO,CAAC,KAAK,KAAK,cAAc;YAC5B,CAAC,CAAC,+BAA+B,OAAO,CAAC,IAAI,oBAAoB,OAAO,CAAC,SAAS,oDAAoD,OAAO,CAAC,IAAI,CAAC,KAAK,yBAAyB,OAAO,CAAC,OAAO,CAAC,IAAI,iFAAiF;YACtR,CAAC,CAAC,+BAA+B,OAAO,CAAC,IAAI,oBAAoB,OAAO,CAAC,SAAS,gCAAgC,OAAO,CAAC,IAAI,CAAC,KAAK,yBAAyB,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK;QAC1L,mBAAmB,uBAAuB,CAAC,OAAO,CAAC,EAAE;QACrD,kBAAkB,QAAQ,EAAE;QAC5B,oPAAoP;KACvP,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACf,MAAM,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,kBAAkB,OAAO,CAAC,SAAS,SAAS,OAAO,CAAC,IAAI,WAAW,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,YAAY,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,cAAc,QAAQ,EAAE,CAAC,CAAC,CAAC;IAChP,MAAM,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;IAChN,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACtK,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,UAAU,CAC3B,MAAM,EACN;YACI,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;YACjC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;YACzB,MAAM;YACN,UAAU;YACV,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS;YAC1D,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,SAAS,EAAE,OAAO,CAAS,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC;YAC5D,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,YAAY,EAAE,OAAO,CAAU,OAAO,CAAC,QAAQ,EAAE,wBAAwB,CAAC;YAC1E,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,cAAc,IAAI,SAAS;YAC/E,mBAAmB,EAAE,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,EAAE;YACtF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACf,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;oBAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACxF,CAAC;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;SAClE,EACD,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,cAAc,IAAI,MAAM,CAAC,UAAU,CAC1E,CAAC;QACF,MAAM,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QACpK,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW;YAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,OAAO,CAAC,IAAI,6BAA6B,MAAM,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QACpJ,MAAM,KAAK,GAAG,OAAO,CAAS,OAAO,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,aAAa,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,8BAA8B,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5H,oGAAoG;QACpG,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtJ,IAAI,IAAI;YAAE,MAAM,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;YAAS,CAAC;QACP,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAClH,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,OAAoB,EAAE,UAAqC,EAAE;IACnF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IAChD,MAAM,KAAK,GAAiB;QACxB;YACI,IAAI,EAAE,SAAS;YACf,WAAW,EACP,0RAA0R;YAC9R,WAAW,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+BAA+B,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,8CAA8C,EAAE,EAAE;gBACzO,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;aAClC;YACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACrB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;gBAC9C,MAAM,UAAU,GAAG,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAAE,OAAO,EAAE,IAAI,EAAE,2DAA2D,EAAE,CAAC;gBAC7H,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;oBACxB,IAAI,CAAC,WAAW;wBAAE,OAAO,EAAE,IAAI,EAAE,0DAA0D,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oBAC7G,OAAO,MAAM,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC/D,CAAC;gBACD,OAAO,MAAM,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC1I,CAAC;SACJ;KACJ,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,UAAU;YAChB,WAAW,EACP,ybAAyb;YAC7b,WAAW,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;oBAClF,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,6BAA6B,EAAE;oBACjG,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sDAAsD,EAAE;oBAC/F,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6CAA6C,EAAE;iBAC5F;gBACD,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;aACnC;YACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;SAC3J,CAAC,CAAC;IACP,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { Project } from '../project/workspace.js';
2
2
  /**
3
3
  * Records a system diagnostic (`.ptbk/logs/diagnostics.jsonl`), e.g. for initialization, startup or updates without a
4
- * task; task evidence lives in `traces/<task-id>/`. Returns the log path or `undefined` (never a fictitious path).
4
+ * task; task evidence lives in `traces/<task-file-basename>/`. Returns the log path or `undefined` (never a fictitious path).
5
5
  *
6
6
  * @private execution evidence
7
7
  */
@@ -6,7 +6,7 @@ import { ENGINE_VERSION } from '../common/version.js';
6
6
  import { rotateServiceLog } from '../service/records.js';
7
7
  /**
8
8
  * Records a system diagnostic (`.ptbk/logs/diagnostics.jsonl`), e.g. for initialization, startup or updates without a
9
- * task; task evidence lives in `traces/<task-id>/`. Returns the log path or `undefined` (never a fictitious path).
9
+ * task; task evidence lives in `traces/<task-file-basename>/`. Returns the log path or `undefined` (never a fictitious path).
10
10
  *
11
11
  * @private execution evidence
12
12
  */