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.
- package/README.md +27 -9
- package/dist/book/commitments.d.ts +38 -10
- package/dist/book/commitments.js +61 -17
- package/dist/book/commitments.js.map +1 -1
- package/dist/book/convert.d.ts +36 -0
- package/dist/book/convert.js +156 -0
- package/dist/book/convert.js.map +1 -0
- package/dist/book/parse.d.ts +50 -13
- package/dist/book/parse.js +132 -45
- package/dist/book/parse.js.map +1 -1
- package/dist/book/references.d.ts +12 -4
- package/dist/book/references.js +34 -9
- package/dist/book/references.js.map +1 -1
- package/dist/book/write.d.ts +42 -0
- package/dist/book/write.js +74 -0
- package/dist/book/write.js.map +1 -0
- package/dist/browser/browser.d.ts +122 -12
- package/dist/browser/browser.js +372 -21
- package/dist/browser/browser.js.map +1 -1
- package/dist/browser/recording.d.ts +3 -3
- package/dist/browser/recording.js +5 -5
- package/dist/browser/recording.js.map +1 -1
- package/dist/chats/chat-book.d.ts +105 -0
- package/dist/chats/chat-book.js +180 -0
- package/dist/chats/chat-book.js.map +1 -0
- package/dist/chats/conversation.d.ts +54 -0
- package/dist/chats/conversation.js +188 -0
- package/dist/chats/conversation.js.map +1 -0
- package/dist/chats/local.d.ts +46 -0
- package/dist/chats/local.js +184 -0
- package/dist/chats/local.js.map +1 -0
- package/dist/chats/migration.d.ts +12 -0
- package/dist/chats/migration.js +62 -0
- package/dist/chats/migration.js.map +1 -0
- package/dist/chats/service.d.ts +81 -0
- package/dist/chats/service.js +122 -0
- package/dist/chats/service.js.map +1 -0
- package/dist/chats/store.d.ts +132 -0
- package/dist/chats/store.js +181 -0
- package/dist/chats/store.js.map +1 -0
- package/dist/chats/task-chats.d.ts +52 -0
- package/dist/chats/task-chats.js +96 -0
- package/dist/chats/task-chats.js.map +1 -0
- package/dist/cli/chats.d.ts +45 -0
- package/dist/cli/chats.js +108 -0
- package/dist/cli/chats.js.map +1 -0
- package/dist/cli/commands/add.js +32 -22
- package/dist/cli/commands/add.js.map +1 -1
- package/dist/cli/commands/answer.d.ts +2 -1
- package/dist/cli/commands/answer.js +35 -41
- package/dist/cli/commands/answer.js.map +1 -1
- package/dist/cli/commands/ask.d.ts +7 -0
- package/dist/cli/commands/ask.js +37 -0
- package/dist/cli/commands/ask.js.map +1 -0
- package/dist/cli/commands/boilerplates.js +14 -3
- package/dist/cli/commands/boilerplates.js.map +1 -1
- package/dist/cli/commands/chat.d.ts +9 -0
- package/dist/cli/commands/chat.js +89 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/dashboard.d.ts +3 -1
- package/dist/cli/commands/dashboard.js +41 -3
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/find.js +6 -8
- package/dist/cli/commands/find.js.map +1 -1
- package/dist/cli/commands/fix.js +4 -6
- package/dist/cli/commands/fix.js.map +1 -1
- package/dist/cli/commands/init.d.ts +0 -1
- package/dist/cli/commands/init.js +38 -38
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/lint.js +16 -2
- package/dist/cli/commands/lint.js.map +1 -1
- package/dist/cli/commands/list.js +21 -13
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/migrate.d.ts +2 -1
- package/dist/cli/commands/migrate.js +70 -24
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/pause.d.ts +8 -0
- package/dist/cli/commands/pause.js +40 -0
- package/dist/cli/commands/pause.js.map +1 -0
- package/dist/cli/commands/plan.js +6 -9
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/recover.js +7 -3
- package/dist/cli/commands/recover.js.map +1 -1
- package/dist/cli/commands/restart.d.ts +3 -1
- package/dist/cli/commands/restart.js +74 -18
- package/dist/cli/commands/restart.js.map +1 -1
- package/dist/cli/commands/resume.d.ts +8 -0
- package/dist/cli/commands/resume.js +15 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/run.js +6 -9
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/start.js +40 -36
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/status.d.ts +2 -1
- package/dist/cli/commands/status.js +5 -1
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/stop.d.ts +3 -1
- package/dist/cli/commands/stop.js +18 -8
- package/dist/cli/commands/stop.js.map +1 -1
- package/dist/cli/commands/verify.js +7 -7
- package/dist/cli/commands/verify.js.map +1 -1
- package/dist/cli/common.d.ts +13 -0
- package/dist/cli/common.js +22 -0
- package/dist/cli/common.js.map +1 -1
- package/dist/cli/engine-delegation.d.ts +14 -0
- package/dist/cli/engine-delegation.js +46 -0
- package/dist/cli/engine-delegation.js.map +1 -0
- package/dist/cli/lifecycle.d.ts +40 -0
- package/dist/cli/lifecycle.js +71 -0
- package/dist/cli/lifecycle.js.map +1 -0
- package/dist/cli/registry.js +113 -31
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli/service-view.d.ts +14 -2
- package/dist/cli/service-view.js +46 -5
- package/dist/cli/service-view.js.map +1 -1
- package/dist/cli/sources.js +5 -8
- package/dist/cli/sources.js.map +1 -1
- package/dist/cli/spec.js +1 -1
- package/dist/cli/spec.js.map +1 -1
- package/dist/common/app-data.d.ts +9 -0
- package/dist/common/app-data.js +20 -0
- package/dist/common/app-data.js.map +1 -0
- package/dist/common/errors.d.ts +2 -0
- package/dist/common/errors.js.map +1 -1
- package/dist/common/time.d.ts +6 -0
- package/dist/common/time.js +9 -0
- package/dist/common/time.js.map +1 -1
- package/dist/engine/agenda.d.ts +213 -43
- package/dist/engine/agenda.js +846 -260
- package/dist/engine/agenda.js.map +1 -1
- package/dist/engine/executor.d.ts +23 -7
- package/dist/engine/executor.js +131 -84
- package/dist/engine/executor.js.map +1 -1
- package/dist/engine/generated.d.ts +21 -1
- package/dist/engine/generated.js +36 -21
- package/dist/engine/generated.js.map +1 -1
- package/dist/engine/preview.js +10 -10
- package/dist/engine/preview.js.map +1 -1
- package/dist/engine/prompt.d.ts +16 -4
- package/dist/engine/prompt.js +22 -4
- package/dist/engine/prompt.js.map +1 -1
- package/dist/engine/routing.js +28 -4
- package/dist/engine/routing.js.map +1 -1
- package/dist/engine/snapshot.d.ts +178 -29
- package/dist/engine/state.d.ts +40 -13
- package/dist/engine/state.js +20 -5
- package/dist/engine/state.js.map +1 -1
- package/dist/engine/task-trace.d.ts +35 -7
- package/dist/engine/task-trace.js +74 -15
- package/dist/engine/task-trace.js.map +1 -1
- package/dist/engine/team.d.ts +20 -7
- package/dist/engine/team.js +30 -24
- package/dist/engine/team.js.map +1 -1
- package/dist/engine/traces.d.ts +1 -1
- package/dist/engine/traces.js +1 -1
- package/dist/expert/_main.md +67 -52
- package/dist/expert/agents/_index.md +11 -13
- package/dist/expert/agents/chatter.md +31 -0
- package/dist/expert/agents/consistency.md +6 -11
- package/dist/expert/agents/core-agents.md +9 -7
- package/dist/expert/agents/expert.md +2 -2
- package/dist/expert/agents/fixer.md +24 -0
- package/dist/expert/agents/learning.md +1 -1
- package/dist/expert/agents/non-agents.md +6 -4
- package/dist/expert/agents/teacher.md +1 -1
- package/dist/expert/agents/visual-identity.md +4 -4
- package/dist/expert/book-language/_index.md +9 -8
- package/dist/expert/book-language/commitments/_index.md +23 -3
- package/dist/expert/book-language/commitments/agent.md +11 -0
- package/dist/expert/book-language/commitments/chat-member.md +7 -0
- package/dist/expert/book-language/commitments/chat-message.md +11 -0
- package/dist/expert/book-language/commitments/chat-status.md +7 -0
- package/dist/expert/book-language/commitments/chat.md +11 -0
- package/dist/expert/book-language/commitments/entity.md +9 -0
- package/dist/expert/book-language/commitments/from.md +1 -1
- package/dist/expert/book-language/commitments/goal.md +6 -2
- package/dist/expert/book-language/commitments/link.md +9 -0
- package/dist/expert/book-language/commitments/task-depends-on.md +1 -1
- package/dist/expert/book-language/commitments/task-parent.md +1 -1
- package/dist/expert/book-language/commitments/task.md +7 -3
- package/dist/expert/book-language/commitments/team.md +1 -1
- package/dist/expert/book-language/inheritance.md +2 -2
- package/dist/expert/book-language/references.md +20 -24
- package/dist/expert/book-language/syntax.md +54 -11
- package/dist/expert/cli/acceptance.md +59 -24
- package/dist/expert/cli/api.md +23 -9
- package/dist/expert/cli/authoring.md +6 -4
- package/dist/expert/cli/autonomous-operation.md +3 -3
- package/dist/expert/cli/browser.md +29 -18
- package/dist/expert/cli/channels.md +5 -7
- package/dist/expert/cli/chat-ui.md +32 -0
- package/dist/expert/cli/chats.md +59 -0
- package/dist/expert/cli/cli.md +44 -26
- package/dist/expert/cli/configuration.md +3 -3
- package/dist/expert/cli/controls.md +13 -7
- package/dist/expert/cli/dashboard-details.md +23 -0
- package/dist/expert/cli/dashboard-layout.md +19 -12
- package/dist/expert/cli/dashboard.md +12 -8
- package/dist/expert/cli/execution.md +8 -6
- package/dist/expert/cli/first-task.md +4 -4
- package/dist/expert/cli/generated-names.md +44 -0
- package/dist/expert/cli/git-persistence.md +19 -17
- package/dist/expert/cli/global-dashboard.md +33 -0
- package/dist/expert/cli/goal-discovery.md +1 -1
- package/dist/expert/cli/help.md +1 -1
- package/dist/expert/cli/initialization-ui.md +2 -0
- package/dist/expert/cli/initialization.md +9 -7
- package/dist/expert/cli/interactive-ui.md +9 -5
- package/dist/expert/cli/locking.md +21 -0
- package/dist/expert/cli/migration.md +22 -6
- package/dist/expert/cli/process-modes.md +21 -13
- package/dist/expert/cli/recovery.md +8 -6
- package/dist/expert/cli/recurrence.md +1 -1
- package/dist/expert/cli/rich-input.md +2 -2
- package/dist/expert/cli/service-lifecycle.md +57 -0
- package/dist/expert/cli/start.md +2 -2
- package/dist/expert/cli/status-view.md +16 -12
- package/dist/expert/cli/task-books.md +11 -15
- package/dist/expert/cli/task-identity.md +8 -10
- package/dist/expert/cli/task-markdown.md +6 -10
- package/dist/expert/cli/task-origins.md +3 -1
- package/dist/expert/cli/task-relationships.md +5 -9
- package/dist/expert/cli/team.md +17 -7
- package/dist/expert/cli/terminal.md +20 -12
- package/dist/expert/cli/trace-configuration.md +1 -1
- package/dist/expert/cli/traces.md +19 -23
- package/dist/expert/cli/user-interactions.md +14 -26
- package/dist/expert/cli/workspace.md +15 -9
- package/dist/expert/concepts/engine-and-project.md +11 -0
- package/dist/expert/concepts/project-model.md +39 -0
- package/dist/expert/dictionary.md +21 -15
- package/dist/harness/plugins/claude-code/index.js +1 -0
- package/dist/harness/plugins/claude-code/index.js.map +1 -1
- package/dist/harness/plugins/cline/index.js +1 -0
- package/dist/harness/plugins/cline/index.js.map +1 -1
- package/dist/harness/plugins/openai-codex/index.js +1 -0
- package/dist/harness/plugins/openai-codex/index.js.map +1 -1
- package/dist/harness/plugins/opencode/index.js +1 -0
- package/dist/harness/plugins/opencode/index.js.map +1 -1
- package/dist/harness/types.d.ts +3 -1
- package/dist/project/agents.d.ts +29 -81
- package/dist/project/agents.js +48 -267
- package/dist/project/agents.js.map +1 -1
- package/dist/project/books.d.ts +150 -0
- package/dist/project/books.js +253 -0
- package/dist/project/books.js.map +1 -0
- package/dist/project/config.js +2 -2
- package/dist/project/config.js.map +1 -1
- package/dist/project/defaults.d.ts +35 -6
- package/dist/project/defaults.js +73 -40
- package/dist/project/defaults.js.map +1 -1
- package/dist/project/expert.js +18 -10
- package/dist/project/expert.js.map +1 -1
- package/dist/project/git.d.ts +4 -3
- package/dist/project/git.js +16 -5
- package/dist/project/git.js.map +1 -1
- package/dist/project/setup.d.ts +4 -1
- package/dist/project/setup.js +26 -6
- package/dist/project/setup.js.map +1 -1
- package/dist/service/actions.d.ts +34 -10
- package/dist/service/actions.js +51 -19
- package/dist/service/actions.js.map +1 -1
- package/dist/service/control.d.ts +53 -1
- package/dist/service/control.js +64 -4
- package/dist/service/control.js.map +1 -1
- package/dist/service/discovery.d.ts +133 -0
- package/dist/service/discovery.js +138 -0
- package/dist/service/discovery.js.map +1 -0
- package/dist/service/host.d.ts +8 -1
- package/dist/service/host.js +65 -18
- package/dist/service/host.js.map +1 -1
- package/dist/service/http.d.ts +3 -0
- package/dist/service/http.js +26 -6
- package/dist/service/http.js.map +1 -1
- package/dist/service/launcher.d.ts +66 -13
- package/dist/service/launcher.js +78 -18
- package/dist/service/launcher.js.map +1 -1
- package/dist/service/records.d.ts +12 -2
- package/dist/service/records.js +19 -5
- package/dist/service/records.js.map +1 -1
- package/dist/service/spa/app.css +83 -2
- package/dist/service/spa/app.js +393 -72
- package/dist/service/supervisor.js +7 -1
- package/dist/service/supervisor.js.map +1 -1
- package/dist/service/worker.js +14 -5
- package/dist/service/worker.js.map +1 -1
- package/dist/tasks/authoring.d.ts +3 -5
- package/dist/tasks/authoring.js +6 -7
- package/dist/tasks/authoring.js.map +1 -1
- package/dist/tasks/book-task.d.ts +18 -10
- package/dist/tasks/book-task.js +27 -23
- package/dist/tasks/book-task.js.map +1 -1
- package/dist/tasks/eligibility.d.ts +15 -7
- package/dist/tasks/eligibility.js +41 -14
- package/dist/tasks/eligibility.js.map +1 -1
- package/dist/tasks/identity.d.ts +41 -15
- package/dist/tasks/identity.js +100 -31
- package/dist/tasks/identity.js.map +1 -1
- package/dist/tasks/markdown.d.ts +7 -14
- package/dist/tasks/markdown.js +15 -29
- package/dist/tasks/markdown.js.map +1 -1
- package/dist/tasks/model.d.ts +20 -4
- package/dist/tasks/model.js +17 -0
- package/dist/tasks/model.js.map +1 -1
- package/dist/tasks/sources.d.ts +7 -2
- package/dist/tasks/sources.js +46 -35
- package/dist/tasks/sources.js.map +1 -1
- package/dist/ui/chat-client.d.ts +70 -0
- package/dist/ui/chat-client.js +209 -0
- package/dist/ui/chat-client.js.map +1 -0
- package/dist/ui/dashboard.d.ts +8 -5
- package/dist/ui/dashboard.js +227 -86
- package/dist/ui/dashboard.js.map +1 -1
- package/dist/ui/details.d.ts +64 -0
- package/dist/ui/details.js +175 -0
- package/dist/ui/details.js.map +1 -0
- package/dist/ui/global-dashboard.d.ts +59 -0
- package/dist/ui/global-dashboard.js +307 -0
- package/dist/ui/global-dashboard.js.map +1 -0
- package/dist/ui/status-view.d.ts +7 -0
- package/dist/ui/status-view.js +94 -36
- package/dist/ui/status-view.js.map +1 -1
- package/package.json +1 -1
- package/dist/engine/requests.d.ts +0 -111
- package/dist/engine/requests.js +0 -173
- package/dist/engine/requests.js.map +0 -1
- package/dist/expert/book-language/commitments/task-id.md +0 -9
- package/dist/tasks/prepare.d.ts +0 -33
- package/dist/tasks/prepare.js +0 -90
- package/dist/tasks/prepare.js.map +0 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import {
|
|
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-
|
|
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
|
-
*
|
|
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
|
-
|
|
56
|
+
subject;
|
|
47
57
|
/** Absolute directory. */
|
|
48
58
|
directory;
|
|
49
|
-
/** Project-relative POSIX directory (`traces/<task-
|
|
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,
|
|
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.
|
|
60
|
-
this.relativeDirectory = traceDirectoryOf(
|
|
61
|
-
this.directory = join(project.root,
|
|
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,
|
|
68
|
-
const trace = new TaskTrace(project,
|
|
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
|
|
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":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-trace.js","sourceRoot":"","sources":["../../src/engine/task-trace.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/team.d.ts
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
27
|
-
|
|
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
|
-
/**
|
|
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
|
|
49
|
-
readonly
|
|
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
|
};
|
package/dist/engine/team.js
CHANGED
|
@@ -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
|
-
*
|
|
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
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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: `
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 =
|
|
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.
|
|
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: {
|
package/dist/engine/team.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,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;
|
|
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"}
|
package/dist/engine/traces.d.ts
CHANGED
|
@@ -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-
|
|
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
|
*/
|
package/dist/engine/traces.js
CHANGED
|
@@ -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-
|
|
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
|
*/
|