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
package/dist/service/worker.js
CHANGED
|
@@ -4,7 +4,8 @@ import { errorMessage } from '../common/errors.js';
|
|
|
4
4
|
import { projectAt } from '../project/workspace.js';
|
|
5
5
|
import { recordDiagnostic } from '../engine/traces.js';
|
|
6
6
|
import { ServiceHost } from './host.js';
|
|
7
|
-
import {
|
|
7
|
+
import { markIntentionalStop } from './launcher.js';
|
|
8
|
+
import { readLaunchMetadata, restoreDiscoveryEnvironment, RESTART_EXIT_CODE, rotateServiceLog } from './records.js';
|
|
8
9
|
/**
|
|
9
10
|
* Number of appended event lines between rotation checks.
|
|
10
11
|
*/
|
|
@@ -30,7 +31,8 @@ function appendServiceLog(path, line) {
|
|
|
30
31
|
* Daemon worker entry: `node dist/service/worker.js <projectRoot>`.
|
|
31
32
|
*
|
|
32
33
|
* Restores the launching terminal's discovery paths before any Git or harness inspection, hosts the agenda and
|
|
33
|
-
* exits 0 only on a requested stop (a crash exit lets the supervisor restart it
|
|
34
|
+
* exits 0 only on a requested stop (a crash exit lets the supervisor restart it; a restart request exits with
|
|
35
|
+
* {@link RESTART_EXIT_CODE} after releasing ownership so the supervisor starts one replacement).
|
|
34
36
|
*/
|
|
35
37
|
async function main() {
|
|
36
38
|
const project = projectAt(process.argv[2] ?? '.');
|
|
@@ -57,21 +59,28 @@ async function main() {
|
|
|
57
59
|
allowTunnelInstall: true,
|
|
58
60
|
onEvent: (text, level) => appendServiceLog(eventLog, `${new Date().toISOString()} ${level.toUpperCase()} ${text}\n`),
|
|
59
61
|
});
|
|
62
|
+
// A catchable OS termination request drains gracefully (the host may still kill the process after its own grace period).
|
|
60
63
|
const stop = () => {
|
|
61
|
-
host.agenda.requestStop({
|
|
64
|
+
host.agenda.requestStop({ signal: true });
|
|
62
65
|
};
|
|
63
66
|
process.on('SIGTERM', stop);
|
|
64
67
|
process.on('SIGINT', stop);
|
|
65
68
|
process.on('SIGHUP', () => undefined);
|
|
66
69
|
await host.start();
|
|
70
|
+
let outcome;
|
|
67
71
|
try {
|
|
68
|
-
await host.runAgenda();
|
|
72
|
+
outcome = (await host.runAgenda()).outcome;
|
|
69
73
|
}
|
|
70
74
|
finally {
|
|
71
75
|
await host.shutdown();
|
|
72
76
|
}
|
|
77
|
+
// An intentional user stop suppresses automatic startup until the next authorized start; restart and OS
|
|
78
|
+
// termination do not.
|
|
79
|
+
if (host.agenda.intentionalStop)
|
|
80
|
+
await markIntentionalStop(project).catch(() => undefined);
|
|
81
|
+
return outcome === 'restart' ? RESTART_EXIT_CODE : 0;
|
|
73
82
|
}
|
|
74
|
-
main().then(() => process.exit(
|
|
83
|
+
main().then((code) => process.exit(code), async (error) => {
|
|
75
84
|
process.stderr.write(`${new Date().toISOString()} FATAL ${errorMessage(error)}\n${error?.stack ?? ''}\n`);
|
|
76
85
|
await recordDiagnostic(projectAt(process.argv[2] ?? '.'), { phase: 'daemon worker', message: errorMessage(error), details: { stack: error?.stack } }).catch(() => undefined);
|
|
77
86
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/service/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/service/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,17 +4,15 @@
|
|
|
4
4
|
* @private task authoring
|
|
5
5
|
*/
|
|
6
6
|
export type NewTaskBook = {
|
|
7
|
-
/**
|
|
7
|
+
/** Task name: the content of the opening `TASK` declaration and the task's identity (see `generatedName`). */
|
|
8
8
|
readonly title: string;
|
|
9
|
-
/**
|
|
9
|
+
/** Bounded work and intended result (written under GOAL, losslessly escaped). */
|
|
10
10
|
readonly description?: string;
|
|
11
|
-
/** Stable task ID (every new task gets one; see `generateTaskId`). */
|
|
12
|
-
readonly id: string;
|
|
13
11
|
/** Additional commitment lines, e.g. `['TASK AGENT @Developer', 'TASK PRIORITY 2']`. */
|
|
14
12
|
readonly commitments?: readonly string[];
|
|
15
13
|
};
|
|
16
14
|
/**
|
|
17
|
-
* Renders a task Book
|
|
15
|
+
* Renders a task Book in the canonical form: `TASK <name>`, the description under GOAL, then commitments.
|
|
18
16
|
*
|
|
19
17
|
* @private task authoring
|
|
20
18
|
*/
|
package/dist/tasks/authoring.js
CHANGED
|
@@ -2,19 +2,18 @@ import { join } from 'node:path';
|
|
|
2
2
|
import { pathExists } from '../common/fs.js';
|
|
3
3
|
import { slugify } from '../common/ids.js';
|
|
4
4
|
import { fileTimestamp } from '../common/time.js';
|
|
5
|
+
import { renderCommitment, renderDeclaration } from '../book/write.js';
|
|
5
6
|
/**
|
|
6
|
-
* Renders a task Book
|
|
7
|
+
* Renders a task Book in the canonical form: `TASK <name>`, the description under GOAL, then commitments.
|
|
7
8
|
*
|
|
8
9
|
* @private task authoring
|
|
9
10
|
*/
|
|
10
11
|
export function renderTaskBook(task) {
|
|
11
|
-
const
|
|
12
|
-
const lines = [`TASK ${title}`];
|
|
12
|
+
const lines = [renderDeclaration('task', task.title)];
|
|
13
13
|
if (task.description?.trim())
|
|
14
|
-
lines.push('', task.description
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
lines.push('', ...commitments);
|
|
14
|
+
lines.push(...renderCommitment('GOAL', task.description));
|
|
15
|
+
if (task.commitments?.length)
|
|
16
|
+
lines.push(...task.commitments);
|
|
18
17
|
return `${lines.join('\n')}\n`;
|
|
19
18
|
}
|
|
20
19
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../src/tasks/authoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../src/tasks/authoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAgBvE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAiB;IAC5C,MAAM,KAAK,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACxF,IAAI,IAAI,CAAC,WAAW,EAAE,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9D,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,cAAsB,EAAE,KAAa,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE,EAAE,QAAiB,EAAE,SAAS,GAAG,OAAO;IACrI,MAAM,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;IACjE,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;QACnG,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;IACzD,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,WAAW,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChE,KAAK,GAAG,QAAQ,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Task } from './model.js';
|
|
2
2
|
/**
|
|
3
3
|
* Splits a reference list (`#a, #b tasks/c.book`).
|
|
4
4
|
*
|
|
@@ -6,19 +6,27 @@ import type { Task } from './model.js';
|
|
|
6
6
|
*/
|
|
7
7
|
export declare function splitTaskReferences(value: string): string[];
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Options of reading one task Book.
|
|
10
10
|
*
|
|
11
|
-
*
|
|
11
|
+
* @private task Books
|
|
12
|
+
*/
|
|
13
|
+
export type TaskBookOptions = {
|
|
14
|
+
readonly source: string;
|
|
15
|
+
readonly path: string;
|
|
16
|
+
readonly relativePath: string;
|
|
17
|
+
readonly order: number;
|
|
18
|
+
readonly timeZone: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Reads a task Book (`TASK <name>` declares the task and its name) into a task.
|
|
22
|
+
*
|
|
23
|
+
* Malformed control commitments and syntax errors keep the task from running. A source in the task folder written in
|
|
24
|
+
* former syntax (a plain name line) is listed as a blocked task with a conversion hint, never dispatched; Books that
|
|
25
|
+
* declare (or formerly declared) an agent or chat are not tasks wherever they are stored.
|
|
12
26
|
*
|
|
13
27
|
* @private task Books
|
|
14
28
|
*/
|
|
15
|
-
export declare function readTaskBook(options:
|
|
16
|
-
source: string;
|
|
17
|
-
path: string;
|
|
18
|
-
relativePath: string;
|
|
19
|
-
order: number;
|
|
20
|
-
timeZone: string;
|
|
21
|
-
}): Task | undefined;
|
|
29
|
+
export declare function readTaskBook(options: TaskBookOptions): Task | undefined;
|
|
22
30
|
/**
|
|
23
31
|
* Appends a completion stamp (`TASK DONE <timestamp with offset>`).
|
|
24
32
|
*
|
package/dist/tasks/book-task.js
CHANGED
|
@@ -4,14 +4,15 @@ import { formatIsoWithOffset, parseDateTime } from '../common/time.js';
|
|
|
4
4
|
import { appendCommitment, setControlCommitment } from '../book/edit.js';
|
|
5
5
|
import { commitmentsOf, parseBook, singleValue } from '../book/parse.js';
|
|
6
6
|
import { THINKING_LEVELS } from '../project/config.js';
|
|
7
|
-
import {
|
|
7
|
+
import { nameKey, nameReference } from './model.js';
|
|
8
8
|
import { parsePriority } from './priority.js';
|
|
9
9
|
/**
|
|
10
10
|
* Control commitments a task recognizes.
|
|
11
11
|
*/
|
|
12
12
|
const TASK_CONTROLS = new Set([
|
|
13
|
-
'TASK',
|
|
14
13
|
'TASK ID',
|
|
14
|
+
'ENTITY',
|
|
15
|
+
'LINK',
|
|
15
16
|
'TASK AGENT',
|
|
16
17
|
'TASK HARNESS',
|
|
17
18
|
'TASK MODEL',
|
|
@@ -51,17 +52,21 @@ function runnerSelectors(value) {
|
|
|
51
52
|
return ticks.length ? ticks : value.split(/\s+/).filter(Boolean);
|
|
52
53
|
}
|
|
53
54
|
/**
|
|
54
|
-
* Reads a task Book
|
|
55
|
+
* Reads a task Book (`TASK <name>` declares the task and its name) into a task.
|
|
55
56
|
*
|
|
56
|
-
* Malformed control commitments
|
|
57
|
+
* Malformed control commitments and syntax errors keep the task from running. A source in the task folder written in
|
|
58
|
+
* former syntax (a plain name line) is listed as a blocked task with a conversion hint, never dispatched; Books that
|
|
59
|
+
* declare (or formerly declared) an agent or chat are not tasks wherever they are stored.
|
|
57
60
|
*
|
|
58
61
|
* @private task Books
|
|
59
62
|
*/
|
|
60
63
|
export function readTaskBook(options) {
|
|
61
64
|
const document = parseBook(options.source);
|
|
62
|
-
if (document.kind
|
|
63
|
-
return
|
|
64
|
-
|
|
65
|
+
if (document.kind === 'task')
|
|
66
|
+
return taskFromDocument(document, options);
|
|
67
|
+
const legacyTask = document.kind === 'invalid' && document.name && !document.declaredKind && document.legacy && document.legacy.entity !== 'agent' && document.legacy.entity !== 'chat';
|
|
68
|
+
const uppercaseTask = document.kind === 'invalid' && document.legacy?.uppercaseName && /^TASK /.test(document.lines[document.headerLine] ?? '');
|
|
69
|
+
return legacyTask || uppercaseTask ? taskFromDocument(document, options) : undefined;
|
|
65
70
|
}
|
|
66
71
|
/**
|
|
67
72
|
* Builds a task from a parsed task document.
|
|
@@ -81,22 +86,17 @@ function taskFromDocument(document, options) {
|
|
|
81
86
|
return result.value;
|
|
82
87
|
};
|
|
83
88
|
for (const commitment of document.commitments) {
|
|
84
|
-
if (commitment.
|
|
85
|
-
diagnostics.push({
|
|
86
|
-
line: commitment.startLine + 1,
|
|
87
|
-
message: `Unsupported task control \`TASK ${commitment.value.split(/\s+/)[0] ?? ''}\`; it cannot be ignored, so the task is blocked.`,
|
|
88
|
-
severity: 'error',
|
|
89
|
-
});
|
|
89
|
+
if (commitment.definition.unknown && /^TASK /.test(commitment.keyword)) {
|
|
90
|
+
diagnostics.push({ line: commitment.startLine + 1, message: `Unsupported task control \`${commitment.written}\`; it cannot be ignored, so the task is blocked.`, severity: 'error' });
|
|
90
91
|
}
|
|
91
|
-
else if (commitment.definition.scope === 'task' && !TASK_CONTROLS.has(commitment.keyword)) {
|
|
92
|
+
else if (commitment.definition.scope === 'task' && commitment.definition.kind !== 'declaration' && !TASK_CONTROLS.has(commitment.keyword)) {
|
|
92
93
|
diagnostics.push({ line: commitment.startLine + 1, message: `Unsupported task control \`${commitment.written}\`.`, severity: 'error' });
|
|
93
94
|
}
|
|
94
95
|
}
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
98
|
-
diagnostics.push({ line:
|
|
99
|
-
const id = idProblem ? undefined : declaredId;
|
|
96
|
+
const legacyId = commitmentsOf(document, 'TASK ID')[0]?.value || undefined;
|
|
97
|
+
const key = nameKey(document.name);
|
|
98
|
+
if (!key)
|
|
99
|
+
diagnostics.push({ line: document.headerLine + 1, message: 'The task name is empty after normalization.', severity: 'error' });
|
|
100
100
|
const thinking = single('TASK THINKING LEVEL');
|
|
101
101
|
if (thinking !== undefined && !THINKING_LEVELS.includes(thinking)) {
|
|
102
102
|
diagnostics.push({ line: 0, message: `TASK THINKING LEVEL "${thinking}" is not one of ${THINKING_LEVELS.join(', ')}.`, severity: 'error' });
|
|
@@ -146,12 +146,16 @@ function taskFromDocument(document, options) {
|
|
|
146
146
|
if (status === 'todo' && doneStamps.length && repeatMs === undefined)
|
|
147
147
|
status = 'done';
|
|
148
148
|
const text = options.source;
|
|
149
|
-
const
|
|
149
|
+
const description = commitmentsOf(document, 'GOAL')
|
|
150
|
+
.map((goal) => goal.body)
|
|
151
|
+
.join('\n\n');
|
|
152
|
+
const placeholder = /@@@/.test(document.name) || /@@@/.test(description) || /@@@/.test(document.legacy?.introduction?.text ?? '');
|
|
150
153
|
return {
|
|
151
|
-
ref:
|
|
152
|
-
|
|
154
|
+
ref: nameReference(document.name),
|
|
155
|
+
key,
|
|
156
|
+
legacyId,
|
|
153
157
|
title: document.name,
|
|
154
|
-
description: document.
|
|
158
|
+
description: description || (document.legacy?.introduction?.text ?? ''),
|
|
155
159
|
rules: commitmentsOf(document, 'RULE').map((rule) => rule.body),
|
|
156
160
|
source: { kind: 'book', path: options.path, relativePath: options.relativePath, fileHash: sha256(options.source), order: options.order },
|
|
157
161
|
status,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"book-task.js","sourceRoot":"","sources":["../../src/tasks/book-task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAsB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"book-task.js","sourceRoot":"","sources":["../../src/tasks/book-task.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ export type Readiness = {
|
|
|
29
29
|
} | {
|
|
30
30
|
readonly kind: 'awaiting-user';
|
|
31
31
|
readonly reason: string;
|
|
32
|
-
readonly
|
|
32
|
+
readonly chat: string;
|
|
33
33
|
} | {
|
|
34
34
|
readonly kind: 'blocked';
|
|
35
35
|
readonly reason: string;
|
|
@@ -84,20 +84,22 @@ export type EligibilityContext = {
|
|
|
84
84
|
readonly now: number;
|
|
85
85
|
/** Time zone for display. */
|
|
86
86
|
readonly timeZone: string;
|
|
87
|
-
/**
|
|
88
|
-
readonly
|
|
89
|
-
/**
|
|
87
|
+
/** Normalized name of the task currently owning execution. */
|
|
88
|
+
readonly activeKey?: string;
|
|
89
|
+
/** Chat waiting for the user, per task name key. */
|
|
90
90
|
readonly awaitingUser: ReadonlyMap<string, string>;
|
|
91
|
-
/** Runtime recovery/failure blockers per task
|
|
91
|
+
/** Runtime recovery/failure blockers per task name key. */
|
|
92
92
|
readonly recovery: ReadonlyMap<string, string>;
|
|
93
93
|
/** Task source files that are not committed (only relevant with automatic commits). */
|
|
94
94
|
readonly uncommittedSources: ReadonlySet<string>;
|
|
95
|
-
/** Retained activation time (recurrence anchor) per task
|
|
95
|
+
/** Retained activation time (recurrence anchor) per task name key. */
|
|
96
96
|
readonly activation: (task: Task) => number;
|
|
97
97
|
/** Routing check. */
|
|
98
98
|
readonly route: (task: Task) => Promise<RouteCheck>;
|
|
99
|
-
/** Unfinished Manager assignment task per target
|
|
99
|
+
/** Unfinished Manager assignment task per target name key. */
|
|
100
100
|
readonly assignmentFor: ReadonlyMap<string, string>;
|
|
101
|
+
/** Other task sources sharing a source's literal trace directory, per project-relative source path. */
|
|
102
|
+
readonly traceConflicts?: ReadonlyMap<string, readonly string[]>;
|
|
101
103
|
};
|
|
102
104
|
/**
|
|
103
105
|
* Evaluates the readiness of one task.
|
|
@@ -120,6 +122,12 @@ export type EvaluatedTask = {
|
|
|
120
122
|
* @private task eligibility
|
|
121
123
|
*/
|
|
122
124
|
export declare function evaluateQueue(tasks: readonly Task[], context: EligibilityContext): Promise<EvaluatedTask[]>;
|
|
125
|
+
/**
|
|
126
|
+
* Task sources whose literal trace directories collide (different sources, same basename): each maps to the others.
|
|
127
|
+
*
|
|
128
|
+
* @private task eligibility
|
|
129
|
+
*/
|
|
130
|
+
export declare function sourceTraceConflicts(tasks: readonly Task[]): Map<string, string[]>;
|
|
123
131
|
/**
|
|
124
132
|
* Whether a readiness counts as unfinished work (present or future), for goal discovery.
|
|
125
133
|
*
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { formatShortTime } from '../common/time.js';
|
|
2
|
+
import { traceBasenameOf, traceDirectoryConflicts } from './identity.js';
|
|
2
3
|
import { hasBlockingDiagnostics, isRecurring } from './model.js';
|
|
3
4
|
import { recurrenceState } from './recurrence.js';
|
|
4
5
|
import { findTask } from './sources.js';
|
|
@@ -16,15 +17,15 @@ function isComplete(task) {
|
|
|
16
17
|
function inDependencyCycle(start, tasks) {
|
|
17
18
|
const visiting = new Set();
|
|
18
19
|
const visit = (task) => {
|
|
19
|
-
if (visiting.has(task.
|
|
20
|
-
return task.
|
|
21
|
-
visiting.add(task.
|
|
20
|
+
if (visiting.has(task.key))
|
|
21
|
+
return task.key === start.key;
|
|
22
|
+
visiting.add(task.key);
|
|
22
23
|
for (const reference of task.dependsOn) {
|
|
23
24
|
const found = findTask(tasks, reference).task;
|
|
24
25
|
if (found && visit(found))
|
|
25
26
|
return true;
|
|
26
27
|
}
|
|
27
|
-
visiting.delete(task.
|
|
28
|
+
visiting.delete(task.key);
|
|
28
29
|
return false;
|
|
29
30
|
};
|
|
30
31
|
return visit(start);
|
|
@@ -35,7 +36,10 @@ function inDependencyCycle(start, tasks) {
|
|
|
35
36
|
* @private task eligibility
|
|
36
37
|
*/
|
|
37
38
|
export async function evaluateTask(task, tasks, context) {
|
|
38
|
-
if (
|
|
39
|
+
if (task.shadowedBy) {
|
|
40
|
+
return { kind: 'blocked', reason: `Shadowed: ${task.shadowedBy} wins the same name "${task.title}", so this copy is not a separate task.`, next: 'Rename one of them (Fixer can propose a correction).' };
|
|
41
|
+
}
|
|
42
|
+
if (context.activeKey === task.key)
|
|
39
43
|
return { kind: 'active', reason: 'Currently executing.' };
|
|
40
44
|
if (task.status === 'retired')
|
|
41
45
|
return { kind: 'retired', reason: 'Recurring work retired.' };
|
|
@@ -53,25 +57,34 @@ export async function evaluateTask(task, tasks, context) {
|
|
|
53
57
|
}
|
|
54
58
|
if (task.placeholder)
|
|
55
59
|
return { kind: 'placeholder', reason: 'Unwritten placeholder (@@@); write the task before it can run.' };
|
|
60
|
+
if (!traceBasenameOf(task.source.relativePath)) {
|
|
61
|
+
return { kind: 'blocked', reason: `The source filename ${task.source.relativePath} cannot name its trace directory.`, next: 'Rename the task source to a readable filename.' };
|
|
62
|
+
}
|
|
63
|
+
const sharing = context.traceConflicts?.get(task.source.relativePath);
|
|
64
|
+
if (sharing?.length) {
|
|
65
|
+
return {
|
|
66
|
+
kind: 'blocked',
|
|
67
|
+
reason: `Its evidence directory traces/${traceBasenameOf(task.source.relativePath)}/ would be shared with ${sharing.join(', ')} (same source basename).`,
|
|
68
|
+
next: 'Rename one of the task sources so each has its own trace directory.',
|
|
69
|
+
};
|
|
70
|
+
}
|
|
56
71
|
if (task.status === 'not-ready')
|
|
57
72
|
return { kind: 'not-ready', reason: 'Held as not ready.' };
|
|
58
73
|
if (task.status === 'failed')
|
|
59
74
|
return { kind: 'failed', reason: 'Marked as failed; use `ptbk recover` to retry or acknowledge.' };
|
|
60
75
|
if (task.status === 'needs-recovery')
|
|
61
76
|
return { kind: 'needs-recovery', reason: 'Interrupted work requires recovery (`ptbk recover`).' };
|
|
62
|
-
const recovery = context.recovery.get(task.
|
|
77
|
+
const recovery = context.recovery.get(task.key);
|
|
63
78
|
if (recovery)
|
|
64
79
|
return { kind: 'needs-recovery', reason: recovery };
|
|
65
|
-
const
|
|
66
|
-
if (
|
|
67
|
-
return { kind: 'awaiting-user', reason: `Waiting for your
|
|
80
|
+
const chat = context.awaitingUser.get(task.key);
|
|
81
|
+
if (chat)
|
|
82
|
+
return { kind: 'awaiting-user', reason: `Waiting for your reply in the chat {{${chat}}}.`, chat };
|
|
68
83
|
const waitingOn = [];
|
|
69
84
|
for (const reference of task.dependsOn) {
|
|
70
85
|
const found = findTask(tasks, reference);
|
|
71
|
-
if (found.ambiguous)
|
|
72
|
-
return { kind: 'blocked', reason: `Dependency ${reference} is ambiguous (${found.ambiguous.map((item) => item.source.relativePath).join(', ')}).` };
|
|
73
86
|
if (!found.task)
|
|
74
|
-
return { kind: 'blocked', reason: `Dependency ${reference} was not found.`, next: 'Fix the TASK DEPENDS ON reference.' };
|
|
87
|
+
return { kind: 'blocked', reason: `Dependency ${reference} was not found.`, next: 'Fix the TASK DEPENDS ON reference (dependencies name tasks).' };
|
|
75
88
|
if (!isComplete(found.task))
|
|
76
89
|
waitingOn.push(found.task.ref);
|
|
77
90
|
}
|
|
@@ -98,7 +111,7 @@ export async function evaluateTask(task, tasks, context) {
|
|
|
98
111
|
next: 'Commit it (or create tasks with `ptbk add`, which commits automatically).',
|
|
99
112
|
};
|
|
100
113
|
}
|
|
101
|
-
const assignment = context.assignmentFor.get(task.
|
|
114
|
+
const assignment = context.assignmentFor.get(task.key);
|
|
102
115
|
if (assignment)
|
|
103
116
|
return { kind: 'assigning', reason: `Manager is assigning routing (${assignment}).`, via: assignment };
|
|
104
117
|
const route = await context.route(task);
|
|
@@ -137,12 +150,26 @@ const KIND_RANK = {
|
|
|
137
150
|
*/
|
|
138
151
|
export async function evaluateQueue(tasks, context) {
|
|
139
152
|
const evaluated = [];
|
|
153
|
+
const withConflicts = { ...context, traceConflicts: context.traceConflicts ?? sourceTraceConflicts(tasks) };
|
|
140
154
|
for (const task of tasks)
|
|
141
|
-
evaluated.push({ task, readiness: await evaluateTask(task, tasks,
|
|
155
|
+
evaluated.push({ task, readiness: await evaluateTask(task, tasks, withConflicts) });
|
|
142
156
|
return evaluated.sort((a, b) => KIND_RANK[a.readiness.kind] - KIND_RANK[b.readiness.kind] ||
|
|
143
157
|
b.task.priority.value - a.task.priority.value ||
|
|
144
158
|
a.task.source.order - b.task.source.order);
|
|
145
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Task sources whose literal trace directories collide (different sources, same basename): each maps to the others.
|
|
162
|
+
*
|
|
163
|
+
* @private task eligibility
|
|
164
|
+
*/
|
|
165
|
+
export function sourceTraceConflicts(tasks) {
|
|
166
|
+
const conflicts = new Map();
|
|
167
|
+
for (const sources of traceDirectoryConflicts(tasks.map((task) => task.source.relativePath)).values()) {
|
|
168
|
+
for (const source of sources)
|
|
169
|
+
conflicts.set(source, sources.filter((other) => other !== source));
|
|
170
|
+
}
|
|
171
|
+
return conflicts;
|
|
172
|
+
}
|
|
146
173
|
/**
|
|
147
174
|
* Whether a readiness counts as unfinished work (present or future), for goal discovery.
|
|
148
175
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eligibility.js","sourceRoot":"","sources":["../../src/tasks/eligibility.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"eligibility.js","sourceRoot":"","sources":["../../src/tasks/eligibility.ts"],"names":[],"mappings":"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"}
|
package/dist/tasks/identity.d.ts
CHANGED
|
@@ -1,41 +1,67 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Deterministic, filesystem-safe directory name derived from a Book's **normalized** name.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Equivalent spellings (`{Improve CSV export}`, `@ImproveCsvExport`) map to the same key; it is a pure function of
|
|
5
|
+
* the normalized name, never an allocated ID. Letters/digits outside `[a-z0-9]` are hex-escaped so every script works.
|
|
6
6
|
*
|
|
7
7
|
* @private task identity
|
|
8
8
|
*/
|
|
9
|
-
export declare function
|
|
9
|
+
export declare function nameKeyPath(name: string): string;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Literal trace-directory component of a task source: its actual filename without the final `.book` (or legacy
|
|
12
|
+
* `.md`) extension, never derived from the declared TASK name, normalized, slugified, hashed or allocated.
|
|
13
|
+
*
|
|
14
|
+
* Returns `undefined` for a basename that cannot safely name a directory (empty, `.`/`..`, path separators).
|
|
15
|
+
*
|
|
16
|
+
* @private task identity
|
|
17
|
+
*/
|
|
18
|
+
export declare function traceBasenameOf(sourcePath: string): string | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Project-relative POSIX directory of a task's audit evidence: `traces/<task-file-basename>`, copying the actual
|
|
21
|
+
* source filename literally without its final extension (a storage convention, not the task's logical identity).
|
|
12
22
|
*
|
|
13
23
|
* @private task identity
|
|
14
24
|
*/
|
|
15
|
-
export declare function
|
|
25
|
+
export declare function traceDirectoryOf(sourcePath: string): string;
|
|
16
26
|
/**
|
|
17
|
-
*
|
|
27
|
+
* Directory where engines before the source-filename convention stored a task's evidence (`traces/<name-key>`).
|
|
28
|
+
* It remains historical evidence and is only linked, never written to again.
|
|
18
29
|
*
|
|
19
|
-
*
|
|
30
|
+
* @private task identity
|
|
31
|
+
*/
|
|
32
|
+
export declare function legacyTraceDirectoryOf(taskName: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Groups task sources whose trace directories would collide (different sources, same literal basename, e.g.
|
|
35
|
+
* `tasks/a.book` and `prompts/a.md`). Such evidence destinations are ambiguous and must be resolved explicitly.
|
|
20
36
|
*
|
|
21
37
|
* @private task identity
|
|
22
38
|
*/
|
|
23
|
-
export declare function
|
|
39
|
+
export declare function traceDirectoryConflicts(sourcePaths: Iterable<string>): Map<string, string[]>;
|
|
24
40
|
/**
|
|
25
|
-
* Markdown metadata line
|
|
41
|
+
* Legacy Markdown metadata line that once carried a generated task ID (read as history only, never written).
|
|
26
42
|
*
|
|
27
43
|
* @private task identity
|
|
28
44
|
*/
|
|
29
|
-
export declare const
|
|
45
|
+
export declare const MARKDOWN_LEGACY_ID_LINE: RegExp;
|
|
30
46
|
/**
|
|
31
|
-
*
|
|
47
|
+
* Picks a readable name that is distinct under normalization from the given taken keys (`Name`, `Name (2)`, …).
|
|
48
|
+
*
|
|
49
|
+
* The name is spelled so it can follow a declaration keyword; built-in names are never taken.
|
|
32
50
|
*
|
|
33
51
|
* @private task identity
|
|
34
52
|
*/
|
|
35
|
-
export declare function
|
|
53
|
+
export declare function distinctName(base: string, taken: ReadonlySet<string>): string;
|
|
36
54
|
/**
|
|
37
|
-
*
|
|
55
|
+
* The name of a newly created task or chat: a readable title plus its creation date and time
|
|
56
|
+
* (`Improve CSV export — 2026-10-18 01:25:00`), made distinct from every taken normalized name.
|
|
57
|
+
*
|
|
58
|
+
* Allocate it once per new entity; reopening, replying, retrying or recurring keeps the saved name. The date is
|
|
59
|
+
* ordinary name text, never parsed back.
|
|
38
60
|
*
|
|
39
61
|
* @private task identity
|
|
40
62
|
*/
|
|
41
|
-
export declare function
|
|
63
|
+
export declare function generatedName(title: string, options: {
|
|
64
|
+
readonly taken: ReadonlySet<string>;
|
|
65
|
+
readonly timeZone: string;
|
|
66
|
+
readonly now?: number;
|
|
67
|
+
}): string;
|