pi-harness-runtime 0.9.25 → 1.1.0
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/CHANGELOG.md +49 -7
- package/README.md +173 -51
- package/harness/auto-compact.ts +1 -1
- package/harness/autonomous-review.ts +88 -0
- package/harness/context-compact-orchestrator.ts +23 -23
- package/harness/context-window-manager.ts +5 -5
- package/harness/continue-prompt.ts +3 -3
- package/harness/e2e/minimax-quota-scraper.ts +5 -5
- package/harness/e2e/openai-quota-scraper.ts +13 -8
- package/harness/forked-summarizer.ts +4 -4
- package/harness/herdr-agents.ts +91 -0
- package/harness/index.ts +5 -5
- package/harness/loop-code-agent.ts +284 -0
- package/harness/loop-controller.ts +201 -0
- package/harness/loop-review-agent.ts +295 -0
- package/harness/loop-runtime.ts +10 -10
- package/harness/loop-types.ts +118 -0
- package/harness/notification-events.ts +3 -3
- package/harness/output-limit-handler.ts +1 -1
- package/harness/partial-recovery.ts +3 -3
- package/harness/session-memory.ts +5 -5
- package/index.ts +139 -34
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/a2a-adapter/src/types.ts +5 -5
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/dist/inbox.d.ts +3 -3
- package/packages/autonomous-runtime/dist/inbox.js +12 -12
- package/packages/autonomous-runtime/dist/lease.js +14 -14
- package/packages/autonomous-runtime/dist/types.js +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/autonomous-runtime/src/inbox.ts +12 -12
- package/packages/autonomous-runtime/src/lease.ts +15 -15
- package/packages/autonomous-runtime/src/types.ts +13 -13
- package/packages/autonomous-runtime/tsconfig.tsbuildinfo +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/dist/types.js +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/capability-registry/src/types.ts +5 -5
- package/packages/checkpoint/README.md +6 -6
- package/packages/checkpoint/dist/differ.js +2 -2
- package/packages/checkpoint/dist/engine.js +3 -3
- package/packages/checkpoint/dist/index.js +5 -5
- package/packages/checkpoint/dist/storage.js +3 -3
- package/packages/checkpoint/dist/types.js +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/checkpoint/src/differ.ts +2 -2
- package/packages/checkpoint/src/engine.ts +3 -3
- package/packages/checkpoint/src/index.ts +5 -5
- package/packages/checkpoint/src/storage.ts +3 -3
- package/packages/checkpoint/src/types.ts +10 -10
- package/packages/checkpoint/tsconfig.tsbuildinfo +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/dist/src/clipboard.d.ts.map +1 -1
- package/packages/clipboard/dist/src/clipboard.js +15 -7
- package/packages/clipboard/dist/src/clipboard.js.map +1 -1
- package/packages/clipboard/dist/src/copy-sync.d.ts +27 -0
- package/packages/clipboard/dist/src/copy-sync.d.ts.map +1 -0
- package/packages/clipboard/dist/src/copy-sync.js +170 -0
- package/packages/clipboard/dist/src/copy-sync.js.map +1 -0
- package/packages/clipboard/dist/src/gist-relay.d.ts +48 -0
- package/packages/clipboard/dist/src/gist-relay.d.ts.map +1 -0
- package/packages/clipboard/dist/src/gist-relay.js +186 -0
- package/packages/clipboard/dist/src/gist-relay.js.map +1 -0
- package/packages/clipboard/dist/src/github-login.d.ts +16 -0
- package/packages/clipboard/dist/src/github-login.d.ts.map +1 -0
- package/packages/clipboard/dist/src/github-login.js +69 -0
- package/packages/clipboard/dist/src/github-login.js.map +1 -0
- package/packages/clipboard/dist/src/index.d.ts +2 -0
- package/packages/clipboard/dist/src/index.d.ts.map +1 -1
- package/packages/clipboard/dist/src/index.js +2 -1
- package/packages/clipboard/dist/src/index.js.map +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard/src/clipboard.ts +16 -9
- package/packages/clipboard/src/copy-sync.ts +201 -0
- package/packages/clipboard/src/gist-relay.ts +240 -0
- package/packages/clipboard/src/github-login.ts +107 -0
- package/packages/clipboard/src/index.ts +2 -0
- package/packages/clipboard/test/mojibake.test.mjs +143 -0
- package/packages/code-generation/README.md +13 -13
- package/packages/code-generation/dist/faker.js +4 -4
- package/packages/code-generation/dist/generator.js +3 -3
- package/packages/code-generation/dist/index.js +3 -3
- package/packages/code-generation/dist/templates/registry.js +1 -1
- package/packages/code-generation/dist/types.js +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-generation/src/faker.ts +5 -5
- package/packages/code-generation/src/generator.ts +4 -4
- package/packages/code-generation/src/index.ts +3 -3
- package/packages/code-generation/src/templates/registry.ts +1 -1
- package/packages/code-generation/src/types.ts +10 -10
- package/packages/code-generation/tsconfig.tsbuildinfo +1 -1
- package/packages/code-review/README.md +13 -13
- package/packages/code-review/dist/engine.js +3 -3
- package/packages/code-review/dist/index.js +3 -3
- package/packages/code-review/dist/types.js +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/code-review/src/engine.ts +3 -3
- package/packages/code-review/src/index.ts +3 -3
- package/packages/code-review/src/types.ts +10 -10
- package/packages/code-review/tsconfig.tsbuildinfo +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/context-compiler/dist/compiler.js +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-compiler/src/compiler.ts +1 -1
- package/packages/context-compiler/src/types.ts +11 -11
- package/packages/context-compiler/test/context-compiler.test.ts +11 -11
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/README.md +27 -27
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/cost-optimizer/src/types.ts +5 -5
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/dist/analyzer.js +7 -7
- package/packages/django-plugin/package.json +1 -1
- package/packages/django-plugin/src/analyzer.ts +7 -7
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/dist/engine.js +9 -9
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-engine/src/engine.ts +9 -9
- package/packages/evaluation-engine/src/types.ts +3 -3
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/dist/src/herdr-bus.d.ts +121 -0
- package/packages/event-bus/dist/src/herdr-bus.d.ts.map +1 -0
- package/packages/event-bus/dist/src/herdr-bus.js +322 -0
- package/packages/event-bus/dist/src/herdr-bus.js.map +1 -0
- package/packages/event-bus/dist/src/index.d.ts +2 -0
- package/packages/event-bus/dist/src/index.d.ts.map +1 -1
- package/packages/event-bus/dist/src/index.js +1 -0
- package/packages/event-bus/dist/src/index.js.map +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-bus/src/herdr-bus.ts +525 -0
- package/packages/event-bus/src/index.ts +29 -0
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/dist/replay.js +7 -7
- package/packages/experience-replay/package.json +1 -1
- package/packages/experience-replay/src/replay.ts +7 -7
- package/packages/experience-replay/src/types.ts +5 -5
- package/packages/feedback-collector/package.json +1 -1
- package/packages/framework-detector/README.md +18 -18
- package/packages/framework-detector/dist/detector.js +3 -3
- package/packages/framework-detector/dist/index.js +3 -3
- package/packages/framework-detector/dist/signatures/registry.js +24 -24
- package/packages/framework-detector/dist/types.js +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-detector/src/detector.ts +3 -3
- package/packages/framework-detector/src/index.ts +3 -3
- package/packages/framework-detector/src/signatures/registry.ts +24 -24
- package/packages/framework-detector/src/types.ts +7 -7
- package/packages/framework-detector/tsconfig.tsbuildinfo +1 -1
- package/packages/framework-plugin-sdk/README.md +23 -23
- package/packages/framework-plugin-sdk/dist/index.js +2 -2
- package/packages/framework-plugin-sdk/dist/manager.js +3 -3
- package/packages/framework-plugin-sdk/dist/types.js +2 -2
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/framework-plugin-sdk/src/index.ts +2 -2
- package/packages/framework-plugin-sdk/src/manager.ts +3 -3
- package/packages/framework-plugin-sdk/src/types.ts +10 -10
- package/packages/framework-plugin-sdk/tsconfig.tsbuildinfo +1 -1
- package/packages/frappe-plugin/dist/analyzer.js +8 -8
- package/packages/frappe-plugin/dist/types.js +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/frappe-plugin/src/analyzer.ts +8 -8
- package/packages/frappe-plugin/src/types.ts +10 -10
- package/packages/generic-web-plugin/dist/analyzer.js +5 -5
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/generic-web-plugin/src/analyzer.ts +5 -5
- package/packages/health-monitor/package.json +1 -1
- package/packages/health-monitor/src/monitor.ts +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/laravel-plugin/dist/analyzer.js +11 -11
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/laravel-plugin/src/analyzer.ts +11 -11
- package/packages/learning-engine/dist/engine.js +5 -5
- package/packages/learning-engine/dist/types.js +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/learning-engine/src/engine.ts +5 -5
- package/packages/learning-engine/src/types.ts +6 -6
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/dist/engine.js +8 -8
- package/packages/memory-engine/dist/types.js +2 -2
- package/packages/memory-engine/package.json +1 -1
- package/packages/memory-engine/src/engine.ts +8 -8
- package/packages/memory-engine/src/types.ts +9 -9
- package/packages/model-registry/package.json +1 -1
- package/packages/model-registry/src/types.ts +4 -4
- package/packages/nextjs-plugin/dist/analyzer.js +9 -9
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/nextjs-plugin/src/analyzer.ts +9 -9
- package/packages/notification/dist/notification-center.js +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/notification-center.ts +1 -1
- package/packages/observability/dist/alerts.js +2 -2
- package/packages/observability/dist/health.js +4 -4
- package/packages/observability/dist/index.js +6 -6
- package/packages/observability/dist/logger.js +7 -7
- package/packages/observability/dist/metrics.js +11 -11
- package/packages/observability/dist/tracer.js +3 -3
- package/packages/observability/dist/types.js +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/observability/src/alerts.ts +2 -2
- package/packages/observability/src/health.ts +4 -4
- package/packages/observability/src/index.ts +6 -6
- package/packages/observability/src/logger.ts +7 -7
- package/packages/observability/src/metrics.ts +11 -11
- package/packages/observability/src/tracer.ts +3 -3
- package/packages/observability/src/types.ts +7 -7
- package/packages/observability/test/observability.test.ts +4 -4
- package/packages/observability/tsconfig.tsbuildinfo +1 -1
- package/packages/performance-optimizer/dist/optimizer.js +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/performance-optimizer/src/optimizer.ts +1 -1
- package/packages/performance-optimizer/src/types.ts +4 -4
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/dist/analyzer.js +4 -4
- package/packages/project-analyzer/dist/index.js +8 -8
- package/packages/project-analyzer/dist/signals.js +3 -3
- package/packages/project-analyzer/dist/types.js +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-analyzer/src/analyzer.ts +4 -4
- package/packages/project-analyzer/src/index.ts +9 -9
- package/packages/project-analyzer/src/signals.ts +4 -4
- package/packages/project-analyzer/src/types.ts +15 -15
- package/packages/project-analyzer/test/index.test.ts +17 -17
- package/packages/project-analyzer/tsconfig.tsbuildinfo +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/dist/section-builder.js +1 -1
- package/packages/prompt-compiler/dist/types.js +3 -3
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-compiler/src/section-builder.ts +1 -1
- package/packages/prompt-compiler/src/types.ts +12 -12
- package/packages/prompt-compiler/test/prompt-compiler.test.ts +12 -12
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/dist/builder.js +1 -1
- package/packages/provider-adapter-sdk/dist/index.js +5 -5
- package/packages/provider-adapter-sdk/dist/registry.js +1 -1
- package/packages/provider-adapter-sdk/dist/tester.js +1 -1
- package/packages/provider-adapter-sdk/dist/types.js +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-adapter-sdk/src/builder.ts +1 -1
- package/packages/provider-adapter-sdk/src/index.ts +6 -6
- package/packages/provider-adapter-sdk/src/registry.ts +1 -1
- package/packages/provider-adapter-sdk/src/tester.ts +1 -1
- package/packages/provider-adapter-sdk/src/types.ts +5 -5
- package/packages/provider-adapter-sdk/tsconfig.tsbuildinfo +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-router/src/types.ts +4 -4
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/dist/deepagents-adapter.js +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/providers/src/deepagents-adapter.ts +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/dist/analyzer.js +7 -7
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/react-vite-plugin/src/analyzer.ts +7 -7
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/dist/compiler.js +17 -17
- package/packages/requirement-compiler/dist/types.js +2 -2
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/requirement-compiler/src/compiler.ts +17 -17
- package/packages/requirement-compiler/src/types.ts +21 -21
- package/packages/requirement-compiler/test/requirement-compiler.test.ts +17 -17
- package/packages/runtime/dist/command-executor.js +1 -1
- package/packages/runtime/dist/local-runtime-agent.js +1 -1
- package/packages/runtime/dist/policy-engine.js +1 -1
- package/packages/runtime/dist/runtime-api.js +1 -1
- package/packages/runtime/dist/workspace-manager.js +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/runtime/src/command-executor.ts +1 -1
- package/packages/runtime/src/local-runtime-agent.ts +1 -1
- package/packages/runtime/src/policy-engine.ts +1 -1
- package/packages/runtime/src/runtime-api.ts +1 -1
- package/packages/runtime/src/workspace-manager.ts +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/README.md +18 -18
- package/packages/session/dist/history.js +3 -3
- package/packages/session/dist/index.js +5 -5
- package/packages/session/dist/manager.js +3 -3
- package/packages/session/dist/policy.js +2 -2
- package/packages/session/dist/store.js +2 -2
- package/packages/session/dist/types.js +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session/src/history.ts +3 -3
- package/packages/session/src/index.ts +5 -5
- package/packages/session/src/manager.ts +3 -3
- package/packages/session/src/policy.ts +4 -4
- package/packages/session/src/store.ts +3 -3
- package/packages/session/src/types.ts +10 -10
- package/packages/session/tsconfig.tsbuildinfo +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skill-registry/src/types.ts +4 -4
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/dist/compiler.js +7 -7
- package/packages/task-compiler/dist/decompose.js +11 -11
- package/packages/task-compiler/dist/file-scope.js +6 -6
- package/packages/task-compiler/dist/graph.js +6 -6
- package/packages/task-compiler/dist/index.js +2 -2
- package/packages/task-compiler/dist/types.js +5 -5
- package/packages/task-compiler/dist/validate.js +2 -2
- package/packages/task-compiler/dist/verification.js +2 -2
- package/packages/task-compiler/package.json +1 -1
- package/packages/task-compiler/src/command-policy.ts +1 -1
- package/packages/task-compiler/src/compiler.ts +7 -7
- package/packages/task-compiler/src/decompose.ts +11 -11
- package/packages/task-compiler/src/file-scope.ts +6 -6
- package/packages/task-compiler/src/graph.ts +6 -6
- package/packages/task-compiler/src/index.ts +3 -3
- package/packages/task-compiler/src/types.ts +14 -14
- package/packages/task-compiler/src/validate.ts +2 -2
- package/packages/task-compiler/src/verification.ts +2 -2
- package/packages/task-compiler/test/task-compiler.test.ts +10 -10
- package/packages/test-data-generator/README.md +13 -13
- package/packages/test-data-generator/dist/faker-adapter.js +4 -4
- package/packages/test-data-generator/dist/generator.js +3 -3
- package/packages/test-data-generator/dist/index.js +3 -3
- package/packages/test-data-generator/dist/types.js +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-data-generator/src/faker-adapter.ts +4 -4
- package/packages/test-data-generator/src/generator.ts +3 -3
- package/packages/test-data-generator/src/index.ts +3 -3
- package/packages/test-data-generator/src/types.ts +9 -9
- package/packages/test-data-generator/tsconfig.tsbuildinfo +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +22 -0
- package/packages/todo-bd-sync/src/detector.ts +150 -0
- package/packages/todo-bd-sync/src/extension.ts +101 -0
- package/packages/todo-bd-sync/src/index.ts +401 -0
- package/packages/todo-bd-sync/src/sync.ts +322 -0
- package/packages/todo-bd-sync/src/todo-reminder.ts +418 -0
- package/packages/todo-bd-sync/src/types.ts +137 -0
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/types/src/agent-worker-types.ts +5 -5
- package/packages/types/src/runtime-types.ts +12 -12
- package/packages/types/tsconfig.tsbuildinfo +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/renderer.ts +7 -7
- package/skills/harness-runtime/SKILL.md +15 -15
|
@@ -17,7 +17,7 @@ export function buildGraph(tasks) {
|
|
|
17
17
|
for (const task of tasks) {
|
|
18
18
|
taskMap.set(task.id, task);
|
|
19
19
|
}
|
|
20
|
-
//
|
|
20
|
+
// --- Compute dependents --------------------------------------------
|
|
21
21
|
const dependents = new Map();
|
|
22
22
|
for (const task of tasks) {
|
|
23
23
|
dependents.set(task.id, []);
|
|
@@ -29,14 +29,14 @@ export function buildGraph(tasks) {
|
|
|
29
29
|
list.push(task.id);
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
//
|
|
32
|
+
// --- Find roots and terminals -------------------------------------
|
|
33
33
|
const roots = tasks
|
|
34
34
|
.filter((t) => t.dependencies.length === 0)
|
|
35
35
|
.map((t) => t.id);
|
|
36
36
|
const terminals = tasks
|
|
37
37
|
.filter((t) => (dependents.get(t.id)?.length ?? 0) === 0)
|
|
38
38
|
.map((t) => t.id);
|
|
39
|
-
//
|
|
39
|
+
// --- Deterministic topological sort --------------------------------
|
|
40
40
|
const order = topologicalSort([...tasks], taskMap);
|
|
41
41
|
return {
|
|
42
42
|
jobId: tasks[0]?.jobId ?? "",
|
|
@@ -46,7 +46,7 @@ export function buildGraph(tasks) {
|
|
|
46
46
|
topologicalOrder: order,
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
//
|
|
49
|
+
// --- Kahn's topological sort with deterministic tiebreaking -----------------
|
|
50
50
|
function topologicalSort(tasks, taskMap) {
|
|
51
51
|
const result = [];
|
|
52
52
|
// in-degree for each task
|
|
@@ -103,7 +103,7 @@ function topologicalSort(tasks, taskMap) {
|
|
|
103
103
|
}
|
|
104
104
|
return result;
|
|
105
105
|
}
|
|
106
|
-
//
|
|
106
|
+
// --- Dependency depth helper -----------------------------------------------
|
|
107
107
|
function countDepth(taskId, taskMap) {
|
|
108
108
|
const task = taskMap.get(taskId);
|
|
109
109
|
if (!task || task.dependencies.length === 0)
|
|
@@ -116,7 +116,7 @@ function countDepth(taskId, taskMap) {
|
|
|
116
116
|
}
|
|
117
117
|
return max + 1;
|
|
118
118
|
}
|
|
119
|
-
//
|
|
119
|
+
// --- Dependency map (for use by topologicalSort) ---------------------------
|
|
120
120
|
const dependents = new Map();
|
|
121
121
|
export { dependents };
|
|
122
122
|
//# sourceMappingURL=graph.js.map
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
* jobId: "job-001",
|
|
13
13
|
* });
|
|
14
14
|
*/
|
|
15
|
-
//
|
|
15
|
+
// --- SDK Version -------------------------------------------------------
|
|
16
16
|
export { SDK_VERSION } from "./types.js";
|
|
17
|
-
//
|
|
17
|
+
// --- Main API ---------------------------------------------------------
|
|
18
18
|
export { compileTasks } from "./compiler.js";
|
|
19
19
|
export { TaskCompilerError, TaskCompilerErrorCode } from "./types.js";
|
|
20
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Core types for task decomposition, DAG construction, and verification.
|
|
5
5
|
*/
|
|
6
|
-
//
|
|
6
|
+
// --- SDK Version -------------------------------------------------------
|
|
7
7
|
export const SDK_VERSION = "1.0.0";
|
|
8
|
-
//
|
|
8
|
+
// --- Standard Engineering Flow ----------------------------------------
|
|
9
9
|
export const STANDARD_FLOW = [
|
|
10
10
|
"analysis",
|
|
11
11
|
"design",
|
|
@@ -16,7 +16,7 @@ export const STANDARD_FLOW = [
|
|
|
16
16
|
"repair",
|
|
17
17
|
"documentation",
|
|
18
18
|
];
|
|
19
|
-
//
|
|
19
|
+
// --- Provider Hints ---------------------------------------------------
|
|
20
20
|
export const PROVIDER_HINTS = {
|
|
21
21
|
analysis: ["codex", "gpt", "glm"],
|
|
22
22
|
design: ["codex", "gpt", "glm"],
|
|
@@ -27,7 +27,7 @@ export const PROVIDER_HINTS = {
|
|
|
27
27
|
repair: ["glm", "claude"],
|
|
28
28
|
documentation: ["codex", "gpt"],
|
|
29
29
|
};
|
|
30
|
-
//
|
|
30
|
+
// --- Default Command Policy ---------------------------------------------
|
|
31
31
|
export const PROHIBITED_BY_DEFAULT = [
|
|
32
32
|
"git commit",
|
|
33
33
|
"git push",
|
|
@@ -51,7 +51,7 @@ export const DEFAULT_TASK_COMPILER_CONFIG = {
|
|
|
51
51
|
extraProhibitedCommands: [],
|
|
52
52
|
clock: () => new Date(),
|
|
53
53
|
};
|
|
54
|
-
//
|
|
54
|
+
// --- Compiler Errors -----------------------------------------------------
|
|
55
55
|
export var TaskCompilerErrorCode;
|
|
56
56
|
(function (TaskCompilerErrorCode) {
|
|
57
57
|
TaskCompilerErrorCode["CYCLIC_DEPENDENCY"] = "CYCLIC_DEPENDENCY";
|
|
@@ -124,7 +124,7 @@ export function assertEveryCriterionAssigned(graph, criterionIds) {
|
|
|
124
124
|
throw new TaskCompilerError(TaskCompilerErrorCode.UNSATISFIED_CRITERION, `Acceptance criteria not assigned to any task: ${unassigned.join(", ")}`, { unassignedCriteria: unassigned });
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
|
-
//
|
|
127
|
+
// --- File overlap detection ------------------------------------------
|
|
128
128
|
function findFileOverlap(a, b) {
|
|
129
129
|
const conflicts = [];
|
|
130
130
|
for (const patternA of a.include) {
|
|
@@ -146,7 +146,7 @@ function patternSubsumes(parent, child) {
|
|
|
146
146
|
const p = parent.replace(/\/\*\*$/, "");
|
|
147
147
|
return child.startsWith(`${p}/`) || child.startsWith(p);
|
|
148
148
|
}
|
|
149
|
-
//
|
|
149
|
+
// --- Dependency helpers ------------------------------------------------
|
|
150
150
|
function getAllDependencies(taskId, graph) {
|
|
151
151
|
const taskMap = new Map(graph.tasks.map((t) => [t.id, t]));
|
|
152
152
|
const visited = new Set();
|
|
@@ -14,7 +14,7 @@ export function assignVerification(tasks, requirement) {
|
|
|
14
14
|
return { ...task, expectedOutputs: outputs };
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
|
-
//
|
|
17
|
+
// --- Output builders by task type -------------------------------------
|
|
18
18
|
function buildOutputs(task, requirement) {
|
|
19
19
|
switch (task.type) {
|
|
20
20
|
case "implementation": {
|
|
@@ -52,7 +52,7 @@ function buildOutputs(task, requirement) {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
|
-
//
|
|
55
|
+
// --- Type-specific output builders -----------------------------------
|
|
56
56
|
function buildImplementationOutputs(task, requirement) {
|
|
57
57
|
const outputs = [];
|
|
58
58
|
// Required: at least one file was modified
|
|
@@ -135,7 +135,7 @@ export function applyCommandPolicy(
|
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
//
|
|
138
|
+
// --- Extract project commands from ProjectProfile ---------------------------
|
|
139
139
|
|
|
140
140
|
interface ProjectCommandSet {
|
|
141
141
|
permitted: string[];
|
|
@@ -55,7 +55,7 @@ export async function compileTasks(
|
|
|
55
55
|
fullConfig.clock;
|
|
56
56
|
const jobId = input.jobId;
|
|
57
57
|
|
|
58
|
-
//
|
|
58
|
+
// --- Step 1: Decompose requirement into candidates -------------------------
|
|
59
59
|
|
|
60
60
|
const candidates = decomposeRequirement(input);
|
|
61
61
|
|
|
@@ -67,25 +67,25 @@ export async function compileTasks(
|
|
|
67
67
|
);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
//
|
|
70
|
+
// --- Step 2: Assign file scope and ownership -----------------------------
|
|
71
71
|
|
|
72
72
|
const tasksWithScope = assignFileScope(candidates, input.project);
|
|
73
73
|
|
|
74
|
-
//
|
|
74
|
+
// --- Step 3: Assign verification outputs --------------------------------
|
|
75
75
|
|
|
76
76
|
const tasksWithVerification = assignVerification(
|
|
77
77
|
tasksWithScope,
|
|
78
78
|
input.requirement,
|
|
79
79
|
);
|
|
80
80
|
|
|
81
|
-
//
|
|
81
|
+
// --- Step 4: Apply command policy -----------------------------------
|
|
82
82
|
|
|
83
83
|
const tasksWithPolicy = applyCommandPolicy(
|
|
84
84
|
tasksWithVerification,
|
|
85
85
|
input.project,
|
|
86
86
|
);
|
|
87
87
|
|
|
88
|
-
//
|
|
88
|
+
// --- Step 5: Assign jobId, provider hints, and finalize ---------------
|
|
89
89
|
|
|
90
90
|
const finalizedTasks = tasksWithPolicy.map((task) => ({
|
|
91
91
|
...task,
|
|
@@ -93,11 +93,11 @@ export async function compileTasks(
|
|
|
93
93
|
preferredProvider: PROVIDER_HINTS[task.type]?.[0],
|
|
94
94
|
}));
|
|
95
95
|
|
|
96
|
-
//
|
|
96
|
+
// --- Step 6: Build graph ---------------------------------------------
|
|
97
97
|
|
|
98
98
|
const graph = buildGraph(finalizedTasks);
|
|
99
99
|
|
|
100
|
-
//
|
|
100
|
+
// --- Step 7: Validate ------------------------------------------------
|
|
101
101
|
|
|
102
102
|
assertNoEmptyObjectives(graph);
|
|
103
103
|
assertNoCycles(graph);
|
|
@@ -26,7 +26,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
26
26
|
const candidates: TaskCandidate[] = [];
|
|
27
27
|
let priority = 1;
|
|
28
28
|
|
|
29
|
-
//
|
|
29
|
+
// --- Stage detection ------------------------------------------------
|
|
30
30
|
|
|
31
31
|
const needsAnalysis =
|
|
32
32
|
requirement.problemStatement.length > 200 || requirement.goals.length > 3;
|
|
@@ -37,7 +37,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
37
37
|
(r) => r.risk === "destructive_operation",
|
|
38
38
|
);
|
|
39
39
|
|
|
40
|
-
//
|
|
40
|
+
// --- Analysis ------------------------------------------------------
|
|
41
41
|
|
|
42
42
|
if (needsAnalysis) {
|
|
43
43
|
candidates.push({
|
|
@@ -52,7 +52,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
//
|
|
55
|
+
// --- Design --------------------------------------------------------
|
|
56
56
|
|
|
57
57
|
if (needsDesign) {
|
|
58
58
|
candidates.push({
|
|
@@ -67,7 +67,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
//
|
|
70
|
+
// --- Implementation ------------------------------------------------
|
|
71
71
|
|
|
72
72
|
for (let i = 0; i < requirement.goals.length; i++) {
|
|
73
73
|
const goal = requirement.goals[i];
|
|
@@ -103,7 +103,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
105
|
|
|
106
|
-
//
|
|
106
|
+
// --- Unit tests ---------------------------------------------------
|
|
107
107
|
|
|
108
108
|
if (hasTests) {
|
|
109
109
|
candidates.push({
|
|
@@ -118,7 +118,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
118
118
|
});
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
//
|
|
121
|
+
// --- E2E tests ---------------------------------------------------
|
|
122
122
|
|
|
123
123
|
if (hasBrowserWorkflow && input.insertE2E !== false) {
|
|
124
124
|
candidates.push({
|
|
@@ -137,7 +137,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
137
137
|
});
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
//
|
|
140
|
+
// --- Review --------------------------------------------------------
|
|
141
141
|
|
|
142
142
|
const reviewDeps: string[] = [];
|
|
143
143
|
if (hasTests) reviewDeps.push("test-0");
|
|
@@ -156,7 +156,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
156
156
|
priority: priority++,
|
|
157
157
|
});
|
|
158
158
|
|
|
159
|
-
//
|
|
159
|
+
// --- Repair --------------------------------------------------------
|
|
160
160
|
|
|
161
161
|
if (needsRepair) {
|
|
162
162
|
candidates.push({
|
|
@@ -171,7 +171,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
171
171
|
});
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
//
|
|
174
|
+
// --- Documentation ------------------------------------------------
|
|
175
175
|
|
|
176
176
|
candidates.push({
|
|
177
177
|
id: "docs-0",
|
|
@@ -184,7 +184,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
184
184
|
priority: priority++,
|
|
185
185
|
});
|
|
186
186
|
|
|
187
|
-
//
|
|
187
|
+
// --- Enforce complexity threshold ---------------------------------
|
|
188
188
|
|
|
189
189
|
const result: TaskCandidate[] = [];
|
|
190
190
|
for (const c of candidates) {
|
|
@@ -198,7 +198,7 @@ export function decomposeRequirement(input: TaskCompileInput): TaskCandidate[] {
|
|
|
198
198
|
return result;
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
//
|
|
201
|
+
// --- Helpers ------------------------------------------------------------
|
|
202
202
|
|
|
203
203
|
function estimateComplexity(text: string): ComplexityEstimate {
|
|
204
204
|
const words = text.split(/\s+/).length;
|
|
@@ -62,7 +62,7 @@ export function assignFileScope(
|
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
//
|
|
65
|
+
// --- File inference by task type ---------------------------------------
|
|
66
66
|
|
|
67
67
|
function inferFiles(
|
|
68
68
|
candidate: TaskCandidate,
|
|
@@ -120,7 +120,7 @@ function inferFiles(
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
|
|
123
|
-
//
|
|
123
|
+
// --- Extract file mentions from objective text --------------------------
|
|
124
124
|
|
|
125
125
|
function extractFileMentions(text: string): string[] {
|
|
126
126
|
// Match common file/directory patterns in natural language:
|
|
@@ -135,7 +135,7 @@ function extractFileMentions(text: string): string[] {
|
|
|
135
135
|
return [...new Set(matches)];
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
//
|
|
138
|
+
// --- Ownership mode ----------------------------------------------------
|
|
139
139
|
|
|
140
140
|
function getOwnershipMode(type: TaskType): FileOwnershipMode {
|
|
141
141
|
// Parallel tasks with "exclusive" mode cannot modify the same files
|
|
@@ -155,7 +155,7 @@ function getOwnershipMode(type: TaskType): FileOwnershipMode {
|
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
//
|
|
158
|
+
// --- Exclusions --------------------------------------------------------
|
|
159
159
|
|
|
160
160
|
function getExclusions(_type: TaskType, project: ProjectProfile): string[] {
|
|
161
161
|
const exclusions: string[] = [
|
|
@@ -179,7 +179,7 @@ function getExclusions(_type: TaskType, project: ProjectProfile): string[] {
|
|
|
179
179
|
return exclusions;
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
//
|
|
182
|
+
// --- Capability inference -----------------------------------------------
|
|
183
183
|
|
|
184
184
|
function inferCapabilities(type: TaskType): string[] {
|
|
185
185
|
const caps: Record<TaskType, string[]> = {
|
|
@@ -195,7 +195,7 @@ function inferCapabilities(type: TaskType): string[] {
|
|
|
195
195
|
return caps[type] ?? ["code"];
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
//
|
|
198
|
+
// --- Extension detection -------------------------------------------------
|
|
199
199
|
|
|
200
200
|
function detectSourceExtensions(project: ProjectProfile): string[] {
|
|
201
201
|
const frameworks = project.frameworks ?? [];
|
|
@@ -21,7 +21,7 @@ export function buildGraph(tasks: CompiledTask[]): TaskGraph {
|
|
|
21
21
|
taskMap.set(task.id, task);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
//
|
|
24
|
+
// --- Compute dependents --------------------------------------------
|
|
25
25
|
|
|
26
26
|
const dependents = new Map<string, string[]>();
|
|
27
27
|
for (const task of tasks) {
|
|
@@ -34,7 +34,7 @@ export function buildGraph(tasks: CompiledTask[]): TaskGraph {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
//
|
|
37
|
+
// --- Find roots and terminals -------------------------------------
|
|
38
38
|
|
|
39
39
|
const roots = tasks
|
|
40
40
|
.filter((t) => t.dependencies.length === 0)
|
|
@@ -44,7 +44,7 @@ export function buildGraph(tasks: CompiledTask[]): TaskGraph {
|
|
|
44
44
|
.filter((t) => (dependents.get(t.id)?.length ?? 0) === 0)
|
|
45
45
|
.map((t) => t.id);
|
|
46
46
|
|
|
47
|
-
//
|
|
47
|
+
// --- Deterministic topological sort --------------------------------
|
|
48
48
|
|
|
49
49
|
const order = topologicalSort([...tasks], taskMap);
|
|
50
50
|
|
|
@@ -57,7 +57,7 @@ export function buildGraph(tasks: CompiledTask[]): TaskGraph {
|
|
|
57
57
|
};
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
//
|
|
60
|
+
// --- Kahn's topological sort with deterministic tiebreaking -----------------
|
|
61
61
|
|
|
62
62
|
function topologicalSort(
|
|
63
63
|
tasks: CompiledTask[],
|
|
@@ -121,7 +121,7 @@ function topologicalSort(
|
|
|
121
121
|
return result;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
//
|
|
124
|
+
// --- Dependency depth helper -----------------------------------------------
|
|
125
125
|
|
|
126
126
|
function countDepth(
|
|
127
127
|
taskId: string,
|
|
@@ -137,7 +137,7 @@ function countDepth(
|
|
|
137
137
|
return max + 1;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
-
//
|
|
140
|
+
// --- Dependency map (for use by topologicalSort) ---------------------------
|
|
141
141
|
|
|
142
142
|
const dependents = new Map<string, string[]>();
|
|
143
143
|
|
|
@@ -13,15 +13,15 @@
|
|
|
13
13
|
* });
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
//
|
|
16
|
+
// --- SDK Version -------------------------------------------------------
|
|
17
17
|
|
|
18
18
|
export { SDK_VERSION } from "./types.js";
|
|
19
19
|
|
|
20
|
-
//
|
|
20
|
+
// --- Main API ---------------------------------------------------------
|
|
21
21
|
|
|
22
22
|
export { compileTasks } from "./compiler.js";
|
|
23
23
|
|
|
24
|
-
//
|
|
24
|
+
// --- Exported types (for consumers) ------------------------------------
|
|
25
25
|
|
|
26
26
|
export type {
|
|
27
27
|
CompiledTask,
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* Core types for task decomposition, DAG construction, and verification.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
//
|
|
7
|
+
// --- SDK Version -------------------------------------------------------
|
|
8
8
|
|
|
9
9
|
export const SDK_VERSION = "1.0.0" as const;
|
|
10
10
|
|
|
11
|
-
//
|
|
11
|
+
// --- Task Types --------------------------------------------------------
|
|
12
12
|
|
|
13
13
|
export type TaskType =
|
|
14
14
|
| "analysis"
|
|
@@ -22,7 +22,7 @@ export type TaskType =
|
|
|
22
22
|
|
|
23
23
|
export type ComplexityEstimate = 1 | 2 | 3 | 5 | 8;
|
|
24
24
|
|
|
25
|
-
//
|
|
25
|
+
// --- Task Output --------------------------------------------------------
|
|
26
26
|
|
|
27
27
|
export interface TaskOutput {
|
|
28
28
|
kind: "file" | "test_result" | "report" | "schema" | "diff" | "verification";
|
|
@@ -31,7 +31,7 @@ export interface TaskOutput {
|
|
|
31
31
|
required: boolean;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
//
|
|
34
|
+
// --- Compiled Task -----------------------------------------------------
|
|
35
35
|
|
|
36
36
|
export interface CompiledTask {
|
|
37
37
|
id: string;
|
|
@@ -53,7 +53,7 @@ export interface CompiledTask {
|
|
|
53
53
|
priority?: number;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
//
|
|
56
|
+
// --- File Ownership ----------------------------------------------------
|
|
57
57
|
|
|
58
58
|
export type FileOwnershipMode = "exclusive" | "shared_read";
|
|
59
59
|
|
|
@@ -64,7 +64,7 @@ export interface FileOwnership {
|
|
|
64
64
|
mode: FileOwnershipMode;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
//
|
|
67
|
+
// --- Task Graph --------------------------------------------------------
|
|
68
68
|
|
|
69
69
|
export interface TaskGraph {
|
|
70
70
|
jobId: string;
|
|
@@ -74,7 +74,7 @@ export interface TaskGraph {
|
|
|
74
74
|
topologicalOrder: string[];
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
//
|
|
77
|
+
// --- Standard Engineering Flow ----------------------------------------
|
|
78
78
|
|
|
79
79
|
export const STANDARD_FLOW: TaskType[] = [
|
|
80
80
|
"analysis",
|
|
@@ -87,7 +87,7 @@ export const STANDARD_FLOW: TaskType[] = [
|
|
|
87
87
|
"documentation",
|
|
88
88
|
];
|
|
89
89
|
|
|
90
|
-
//
|
|
90
|
+
// --- Provider Hints ---------------------------------------------------
|
|
91
91
|
|
|
92
92
|
export const PROVIDER_HINTS: Partial<Record<TaskType, string[]>> = {
|
|
93
93
|
analysis: ["codex", "gpt", "glm"],
|
|
@@ -100,7 +100,7 @@ export const PROVIDER_HINTS: Partial<Record<TaskType, string[]>> = {
|
|
|
100
100
|
documentation: ["codex", "gpt"],
|
|
101
101
|
};
|
|
102
102
|
|
|
103
|
-
//
|
|
103
|
+
// --- Default Command Policy ---------------------------------------------
|
|
104
104
|
|
|
105
105
|
export const PROHIBITED_BY_DEFAULT: string[] = [
|
|
106
106
|
"git commit",
|
|
@@ -120,7 +120,7 @@ export const PROHIBITED_BY_DEFAULT: string[] = [
|
|
|
120
120
|
"TRUNCATE",
|
|
121
121
|
];
|
|
122
122
|
|
|
123
|
-
//
|
|
123
|
+
// --- Forward-declared types (from other workspace packages) -------------
|
|
124
124
|
// In production these are imported from @pi-harness/requirement-compiler and @pi/project-analyzer.
|
|
125
125
|
// Declaring them as interfaces here allows the type checker to resolve without building those packages first.
|
|
126
126
|
|
|
@@ -149,7 +149,7 @@ export interface ProjectProfile {
|
|
|
149
149
|
}>;
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
//
|
|
152
|
+
// --- Compiler Input ----------------------------------------------------
|
|
153
153
|
|
|
154
154
|
export interface TaskCompileInput {
|
|
155
155
|
requirement: CompiledRequirement;
|
|
@@ -167,7 +167,7 @@ export interface DependencyInfo {
|
|
|
167
167
|
files: string[];
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
//
|
|
170
|
+
// --- Candidate Task ---------------------------------------------------
|
|
171
171
|
|
|
172
172
|
export interface TaskCandidate {
|
|
173
173
|
id: string;
|
|
@@ -180,7 +180,7 @@ export interface TaskCandidate {
|
|
|
180
180
|
priority?: number;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
|
-
//
|
|
183
|
+
// --- Compiler Configuration ----------------------------------------------
|
|
184
184
|
|
|
185
185
|
export interface TaskCompilerConfig {
|
|
186
186
|
insertE2E: boolean;
|
|
@@ -196,7 +196,7 @@ export const DEFAULT_TASK_COMPILER_CONFIG: TaskCompilerConfig = {
|
|
|
196
196
|
clock: () => new Date(),
|
|
197
197
|
};
|
|
198
198
|
|
|
199
|
-
//
|
|
199
|
+
// --- Compiler Errors -----------------------------------------------------
|
|
200
200
|
|
|
201
201
|
export enum TaskCompilerErrorCode {
|
|
202
202
|
CYCLIC_DEPENDENCY = "CYCLIC_DEPENDENCY",
|
|
@@ -167,7 +167,7 @@ export function assertEveryCriterionAssigned(
|
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
//
|
|
170
|
+
// --- File overlap detection ------------------------------------------
|
|
171
171
|
|
|
172
172
|
function findFileOverlap(
|
|
173
173
|
a: import("./types.js").FileOwnership,
|
|
@@ -195,7 +195,7 @@ function patternSubsumes(parent: string, child: string): boolean {
|
|
|
195
195
|
return child.startsWith(`${p}/`) || child.startsWith(p);
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
//
|
|
198
|
+
// --- Dependency helpers ------------------------------------------------
|
|
199
199
|
|
|
200
200
|
function getAllDependencies(taskId: string, graph: TaskGraph): Set<string> {
|
|
201
201
|
const taskMap = new Map(graph.tasks.map((t) => [t.id, t]));
|
|
@@ -21,7 +21,7 @@ export function assignVerification(
|
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
//
|
|
24
|
+
// --- Output builders by task type -------------------------------------
|
|
25
25
|
|
|
26
26
|
function buildOutputs(
|
|
27
27
|
task: CompiledTask,
|
|
@@ -64,7 +64,7 @@ function buildOutputs(
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
//
|
|
67
|
+
// --- Type-specific output builders -----------------------------------
|
|
68
68
|
|
|
69
69
|
function buildImplementationOutputs(
|
|
70
70
|
task: CompiledTask,
|