pi-harness-runtime 0.9.25 → 0.10.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 +27 -7
- package/README.md +51 -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 +1 -1
- 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 +46 -32
- 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/package.json +1 -1
- package/packages/clipboard/src/clipboard.ts +16 -9
- 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/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
|
@@ -15,7 +15,7 @@ import { dirname } from "node:path";
|
|
|
15
15
|
import type { TaskRecord, TaskStatus, TaskEvent } from "./types.js";
|
|
16
16
|
import { getInboxDir, getTasksPath } from "./types.js";
|
|
17
17
|
|
|
18
|
-
//
|
|
18
|
+
// --- Errors -------------------------------------------------------------------
|
|
19
19
|
|
|
20
20
|
export class InboxError extends Error {
|
|
21
21
|
constructor(msg: string) {
|
|
@@ -24,7 +24,7 @@ export class InboxError extends Error {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
//
|
|
27
|
+
// --- TaskInbox ----------------------------------------------------------------
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Manages the append-only task inbox at `~/.pi/harness/inbox/tasks.jsonl`.
|
|
@@ -32,9 +32,9 @@ export class InboxError extends Error {
|
|
|
32
32
|
* Storage layout:
|
|
33
33
|
* ```
|
|
34
34
|
* ~/.pi/harness/inbox/
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
35
|
+
* +-- tasks.jsonl # append-only log (one JSON line per task)
|
|
36
|
+
* +-- claimed/ # active leases (one JSON file per task)
|
|
37
|
+
* +-- BACKLOG.md # human-friendly authoring surface (optional)
|
|
38
38
|
* ```
|
|
39
39
|
*
|
|
40
40
|
* Operations are:
|
|
@@ -61,7 +61,7 @@ export class TaskInbox {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
//
|
|
64
|
+
// --- append --------------------------------------------------------------
|
|
65
65
|
|
|
66
66
|
/**
|
|
67
67
|
* Append a new task to tasks.jsonl.
|
|
@@ -85,7 +85,7 @@ export class TaskInbox {
|
|
|
85
85
|
this._cache = null; // invalidate
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
-
//
|
|
88
|
+
// --- list -----------------------------------------------------------------
|
|
89
89
|
|
|
90
90
|
/**
|
|
91
91
|
* Read all tasks from tasks.jsonl.
|
|
@@ -131,7 +131,7 @@ export class TaskInbox {
|
|
|
131
131
|
return filtered;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
//
|
|
134
|
+
// --- get -----------------------------------------------------------------
|
|
135
135
|
|
|
136
136
|
/** Retrieve a single task by id, or null if not found. */
|
|
137
137
|
get(id: string): TaskRecord | null {
|
|
@@ -139,7 +139,7 @@ export class TaskInbox {
|
|
|
139
139
|
return tasks.find((t) => t.id === id) ?? null;
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
//
|
|
142
|
+
// --- transition ----------------------------------------------------------
|
|
143
143
|
|
|
144
144
|
/**
|
|
145
145
|
* Update a task's status in-place inside tasks.jsonl.
|
|
@@ -197,7 +197,7 @@ export class TaskInbox {
|
|
|
197
197
|
return updated;
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
//
|
|
200
|
+
// --- markDone / markFailed -----------------------------------------------
|
|
201
201
|
|
|
202
202
|
/** Convenience: mark a task as completed with a result. */
|
|
203
203
|
complete(taskId: string, result: TaskRecord["result"]): TaskRecord {
|
|
@@ -231,7 +231,7 @@ export class TaskInbox {
|
|
|
231
231
|
);
|
|
232
232
|
}
|
|
233
233
|
|
|
234
|
-
//
|
|
234
|
+
// --- reindex -------------------------------------------------------------
|
|
235
235
|
|
|
236
236
|
/** Rewrite tasks.jsonl from the given task list. */
|
|
237
237
|
private _rewriteAll(tasks: TaskRecord[]): void {
|
|
@@ -252,7 +252,7 @@ export class TaskInbox {
|
|
|
252
252
|
this._cache = null;
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
-
//
|
|
255
|
+
// --- count ---------------------------------------------------------------
|
|
256
256
|
|
|
257
257
|
/** Return counts of tasks grouped by status. */
|
|
258
258
|
stats(): Record<TaskStatus, number> {
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* Filesystem layout:
|
|
8
8
|
* ```
|
|
9
9
|
* ~/.pi/harness/inbox/
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* +-- tasks.jsonl # task records
|
|
11
|
+
* +-- claimed/
|
|
12
|
+
* +-- <task-id>.lease.json # one lease file per claimed task
|
|
13
13
|
* ```
|
|
14
14
|
*
|
|
15
15
|
* Safety properties:
|
|
@@ -33,7 +33,7 @@ import { join } from "node:path";
|
|
|
33
33
|
import type { TaskLease } from "./types.js";
|
|
34
34
|
import { getLeasesDir } from "./types.js";
|
|
35
35
|
|
|
36
|
-
//
|
|
36
|
+
// --- Errors -------------------------------------------------------------------
|
|
37
37
|
|
|
38
38
|
export class LeaseError extends Error {
|
|
39
39
|
constructor(msg: string) {
|
|
@@ -42,7 +42,7 @@ export class LeaseError extends Error {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
//
|
|
45
|
+
// --- Constants ----------------------------------------------------------------
|
|
46
46
|
|
|
47
47
|
/** Default lease duration before heartbeat extension is required. */
|
|
48
48
|
export const DEFAULT_LEASE_TTL_MS = 30_000; // 30 s
|
|
@@ -53,7 +53,7 @@ export const HEARTBEAT_INTERVAL_MS = 5_000; // 5 s
|
|
|
53
53
|
/** Default worker heartbeat interval extension. */
|
|
54
54
|
export const HEARTBEAT_EXTENSION_MS = 30_000; // extend by 30 s
|
|
55
55
|
|
|
56
|
-
//
|
|
56
|
+
// --- LeaseManager -------------------------------------------------------------
|
|
57
57
|
|
|
58
58
|
export interface LeaseOptions {
|
|
59
59
|
leasesDir?: string;
|
|
@@ -80,7 +80,7 @@ export class LeaseManager {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
-
//
|
|
83
|
+
// --- claim ---------------------------------------------------------------
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Atomically claim a task for a worker.
|
|
@@ -143,7 +143,7 @@ export class LeaseManager {
|
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
//
|
|
146
|
+
// --- heartbeat ------------------------------------------------------------
|
|
147
147
|
|
|
148
148
|
/**
|
|
149
149
|
* Extend a lease's expiry time.
|
|
@@ -170,7 +170,7 @@ export class LeaseManager {
|
|
|
170
170
|
return updated;
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
//
|
|
173
|
+
// --- release -------------------------------------------------------------
|
|
174
174
|
|
|
175
175
|
/**
|
|
176
176
|
* Explicitly release a lease (task completed or failed without retry).
|
|
@@ -186,7 +186,7 @@ export class LeaseManager {
|
|
|
186
186
|
this._removeLease(taskId);
|
|
187
187
|
}
|
|
188
188
|
|
|
189
|
-
//
|
|
189
|
+
// --- get -----------------------------------------------------------------
|
|
190
190
|
|
|
191
191
|
/** Read a lease by taskId. Returns null if not found. */
|
|
192
192
|
get(taskId: string): TaskLease | null {
|
|
@@ -199,14 +199,14 @@ export class LeaseManager {
|
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
|
|
202
|
-
//
|
|
202
|
+
// --- isExpired ------------------------------------------------------------
|
|
203
203
|
|
|
204
204
|
/** Check if a lease has expired (expiresAt is in the past). */
|
|
205
205
|
isExpired(lease: TaskLease): boolean {
|
|
206
206
|
return new Date(lease.expiresAt).getTime() < Date.now();
|
|
207
207
|
}
|
|
208
208
|
|
|
209
|
-
//
|
|
209
|
+
// --- reap ----------------------------------------------------------------
|
|
210
210
|
|
|
211
211
|
/**
|
|
212
212
|
* Scan all leases and return the ones that have expired.
|
|
@@ -256,7 +256,7 @@ export class LeaseManager {
|
|
|
256
256
|
return released;
|
|
257
257
|
}
|
|
258
258
|
|
|
259
|
-
//
|
|
259
|
+
// --- recoverOrphanLeases -------------------------------------------------
|
|
260
260
|
|
|
261
261
|
/**
|
|
262
262
|
* On worker startup, release any leases held by dead workers.
|
|
@@ -269,7 +269,7 @@ export class LeaseManager {
|
|
|
269
269
|
return this.reapAndRelease();
|
|
270
270
|
}
|
|
271
271
|
|
|
272
|
-
//
|
|
272
|
+
// --- listActive -----------------------------------------------------------
|
|
273
273
|
|
|
274
274
|
/** Return all active (non-expired) leases. */
|
|
275
275
|
listActive(): TaskLease[] {
|
|
@@ -298,7 +298,7 @@ export class LeaseManager {
|
|
|
298
298
|
return active;
|
|
299
299
|
}
|
|
300
300
|
|
|
301
|
-
//
|
|
301
|
+
// --- internals -----------------------------------------------------------
|
|
302
302
|
|
|
303
303
|
private _leasePath(taskId: string): string {
|
|
304
304
|
return join(this.leasesDir, `${taskId}.lease.json`);
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { env } from "node:process";
|
|
9
9
|
|
|
10
|
-
//
|
|
10
|
+
// --- Capability model ----------------------------------------------------------
|
|
11
11
|
|
|
12
12
|
/** A named capability that the privilege broker may grant. */
|
|
13
13
|
export type CapabilityName =
|
|
@@ -35,7 +35,7 @@ export type ApprovalClass =
|
|
|
35
35
|
| "human_approval_required" // must ask operator
|
|
36
36
|
| "forbidden"; // never grant, regardless of override
|
|
37
37
|
|
|
38
|
-
//
|
|
38
|
+
// --- Task lifecycle -----------------------------------------------------------
|
|
39
39
|
|
|
40
40
|
export type TaskStatus =
|
|
41
41
|
| "queued"
|
|
@@ -68,7 +68,7 @@ export type TaskEvent = {
|
|
|
68
68
|
payload?: Record<string, unknown>;
|
|
69
69
|
};
|
|
70
70
|
|
|
71
|
-
//
|
|
71
|
+
// --- Task record -------------------------------------------------------------
|
|
72
72
|
|
|
73
73
|
/** The primary durable record for a task. */
|
|
74
74
|
export interface TaskRecord {
|
|
@@ -96,7 +96,7 @@ export interface TaskRecord {
|
|
|
96
96
|
history: TaskEvent[];
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
//
|
|
99
|
+
// --- Leasing ------------------------------------------------------------------
|
|
100
100
|
|
|
101
101
|
/** A lease held by a worker on a specific task. */
|
|
102
102
|
export interface TaskLease {
|
|
@@ -108,7 +108,7 @@ export interface TaskLease {
|
|
|
108
108
|
attempt: number; // which attempt this lease covers
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
//
|
|
111
|
+
// --- Worker registry ----------------------------------------------------------
|
|
112
112
|
|
|
113
113
|
/** Heartbeat emitted by a worker every 5 s to worker-registry.json. */
|
|
114
114
|
export interface WorkerHeartbeat {
|
|
@@ -119,7 +119,7 @@ export interface WorkerHeartbeat {
|
|
|
119
119
|
inflightTaskIds: string[];
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
//
|
|
122
|
+
// --- Privilege broker ---------------------------------------------------------
|
|
123
123
|
|
|
124
124
|
/** A resolved grant from the privilege broker. */
|
|
125
125
|
export interface CapabilityGrant {
|
|
@@ -131,7 +131,7 @@ export interface CapabilityGrant {
|
|
|
131
131
|
timeoutMs: number;
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
-
//
|
|
134
|
+
// --- Approval -----------------------------------------------------------------
|
|
135
135
|
|
|
136
136
|
/** An in-flight human approval request. */
|
|
137
137
|
export interface ApprovalRequest {
|
|
@@ -145,7 +145,7 @@ export interface ApprovalRequest {
|
|
|
145
145
|
expiresAt: string; // ISO-8601 — timeout threshold
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
//
|
|
148
|
+
// --- Scheduler ---------------------------------------------------------------
|
|
149
149
|
|
|
150
150
|
/** A scheduled recurring task. */
|
|
151
151
|
export interface ScheduledTask {
|
|
@@ -165,7 +165,7 @@ export type ScheduleSpec =
|
|
|
165
165
|
| { kind: "interval"; intervalMs: number }
|
|
166
166
|
| { kind: "once"; at: string };
|
|
167
167
|
|
|
168
|
-
//
|
|
168
|
+
// --- Notification -------------------------------------------------------------
|
|
169
169
|
|
|
170
170
|
export type RuntimeNotificationEvent =
|
|
171
171
|
| "task.claimed"
|
|
@@ -189,7 +189,7 @@ export interface NotificationEvent {
|
|
|
189
189
|
payload: Record<string, unknown>;
|
|
190
190
|
}
|
|
191
191
|
|
|
192
|
-
//
|
|
192
|
+
// --- Checkpoint ---------------------------------------------------------------
|
|
193
193
|
|
|
194
194
|
export interface Checkpoint {
|
|
195
195
|
taskId: string;
|
|
@@ -198,7 +198,7 @@ export interface Checkpoint {
|
|
|
198
198
|
savedAt: string; // ISO-8601
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
//
|
|
201
|
+
// --- Execution context --------------------------------------------------------
|
|
202
202
|
|
|
203
203
|
/** The context given to the loop runtime when executing a task. */
|
|
204
204
|
export interface ExecutionContext {
|
|
@@ -212,7 +212,7 @@ export interface ExecutionContext {
|
|
|
212
212
|
okfBundles: string[]; // content hashes available to planner
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
-
//
|
|
215
|
+
// --- Task result -------------------------------------------------------------
|
|
216
216
|
|
|
217
217
|
export interface TaskResult {
|
|
218
218
|
taskId: string;
|
|
@@ -227,7 +227,7 @@ export interface TaskResult {
|
|
|
227
227
|
modelUsage?: { inputTokens: number; outputTokens: number; provider: string };
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
//
|
|
230
|
+
// --- Storage paths ------------------------------------------------------------
|
|
231
231
|
|
|
232
232
|
const DEFAULT_ROOT = `${env["HOME"] ?? "."}/.pi/harness`;
|
|
233
233
|
|