inferoa 0.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/LICENSE +176 -0
- package/README.md +154 -0
- package/dist/src/app.d.ts +16 -0
- package/dist/src/app.js +17 -0
- package/dist/src/app.js.map +1 -0
- package/dist/src/autoresearch/state.d.ts +106 -0
- package/dist/src/autoresearch/state.js +469 -0
- package/dist/src/autoresearch/state.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +415 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/code-intelligence/codegraph-engine.d.ts +55 -0
- package/dist/src/code-intelligence/codegraph-engine.js +593 -0
- package/dist/src/code-intelligence/codegraph-engine.js.map +1 -0
- package/dist/src/code-intelligence/hub.d.ts +37 -0
- package/dist/src/code-intelligence/hub.js +65 -0
- package/dist/src/code-intelligence/hub.js.map +1 -0
- package/dist/src/config/config.d.ts +12 -0
- package/dist/src/config/config.js +229 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/defaults.d.ts +2 -0
- package/dist/src/config/defaults.js +44 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/config/secret-vault.d.ts +3 -0
- package/dist/src/config/secret-vault.js +106 -0
- package/dist/src/config/secret-vault.js.map +1 -0
- package/dist/src/context/compressor.d.ts +33 -0
- package/dist/src/context/compressor.js +501 -0
- package/dist/src/context/compressor.js.map +1 -0
- package/dist/src/context/prompt.d.ts +26 -0
- package/dist/src/context/prompt.js +572 -0
- package/dist/src/context/prompt.js.map +1 -0
- package/dist/src/daemon/serve.d.ts +2 -0
- package/dist/src/daemon/serve.js +11 -0
- package/dist/src/daemon/serve.js.map +1 -0
- package/dist/src/daemon/supervisor.d.ts +33 -0
- package/dist/src/daemon/supervisor.js +252 -0
- package/dist/src/daemon/supervisor.js.map +1 -0
- package/dist/src/goals/state.d.ts +105 -0
- package/dist/src/goals/state.js +736 -0
- package/dist/src/goals/state.js.map +1 -0
- package/dist/src/model/endpoint-signals.d.ts +15 -0
- package/dist/src/model/endpoint-signals.js +186 -0
- package/dist/src/model/endpoint-signals.js.map +1 -0
- package/dist/src/model/gateway.d.ts +11 -0
- package/dist/src/model/gateway.js +455 -0
- package/dist/src/model/gateway.js.map +1 -0
- package/dist/src/plans/state.d.ts +28 -0
- package/dist/src/plans/state.js +123 -0
- package/dist/src/plans/state.js.map +1 -0
- package/dist/src/runtime.d.ts +92 -0
- package/dist/src/runtime.js +757 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/session/store.d.ts +84 -0
- package/dist/src/session/store.js +593 -0
- package/dist/src/session/store.js.map +1 -0
- package/dist/src/session/workspace.d.ts +2 -0
- package/dist/src/session/workspace.js +14 -0
- package/dist/src/session/workspace.js.map +1 -0
- package/dist/src/skills/registry.d.ts +24 -0
- package/dist/src/skills/registry.js +203 -0
- package/dist/src/skills/registry.js.map +1 -0
- package/dist/src/tools/autoresearch-tools.d.ts +6 -0
- package/dist/src/tools/autoresearch-tools.js +412 -0
- package/dist/src/tools/autoresearch-tools.js.map +1 -0
- package/dist/src/tools/clarify-tool.d.ts +3 -0
- package/dist/src/tools/clarify-tool.js +107 -0
- package/dist/src/tools/clarify-tool.js.map +1 -0
- package/dist/src/tools/code-intelligence.d.ts +15 -0
- package/dist/src/tools/code-intelligence.js +391 -0
- package/dist/src/tools/code-intelligence.js.map +1 -0
- package/dist/src/tools/context.d.ts +11 -0
- package/dist/src/tools/context.js +2 -0
- package/dist/src/tools/context.js.map +1 -0
- package/dist/src/tools/goal-tools.d.ts +3 -0
- package/dist/src/tools/goal-tools.js +279 -0
- package/dist/src/tools/goal-tools.js.map +1 -0
- package/dist/src/tools/omni-tools.d.ts +8 -0
- package/dist/src/tools/omni-tools.js +349 -0
- package/dist/src/tools/omni-tools.js.map +1 -0
- package/dist/src/tools/permissions.d.ts +11 -0
- package/dist/src/tools/permissions.js +74 -0
- package/dist/src/tools/permissions.js.map +1 -0
- package/dist/src/tools/plan-tools.d.ts +3 -0
- package/dist/src/tools/plan-tools.js +314 -0
- package/dist/src/tools/plan-tools.js.map +1 -0
- package/dist/src/tools/process-tools.d.ts +6 -0
- package/dist/src/tools/process-tools.js +199 -0
- package/dist/src/tools/process-tools.js.map +1 -0
- package/dist/src/tools/registry.d.ts +20 -0
- package/dist/src/tools/registry.js +187 -0
- package/dist/src/tools/registry.js.map +1 -0
- package/dist/src/tools/schemas.d.ts +3 -0
- package/dist/src/tools/schemas.js +500 -0
- package/dist/src/tools/schemas.js.map +1 -0
- package/dist/src/tools/skill-tools.d.ts +6 -0
- package/dist/src/tools/skill-tools.js +124 -0
- package/dist/src/tools/skill-tools.js.map +1 -0
- package/dist/src/tools/text-args.d.ts +5 -0
- package/dist/src/tools/text-args.js +22 -0
- package/dist/src/tools/text-args.js.map +1 -0
- package/dist/src/tools/web-search.d.ts +5 -0
- package/dist/src/tools/web-search.js +602 -0
- package/dist/src/tools/web-search.js.map +1 -0
- package/dist/src/tools/workspace-tools.d.ts +17 -0
- package/dist/src/tools/workspace-tools.js +561 -0
- package/dist/src/tools/workspace-tools.js.map +1 -0
- package/dist/src/tui/activity.d.ts +11 -0
- package/dist/src/tui/activity.js +75 -0
- package/dist/src/tui/activity.js.map +1 -0
- package/dist/src/tui/ansi.d.ts +24 -0
- package/dist/src/tui/ansi.js +131 -0
- package/dist/src/tui/ansi.js.map +1 -0
- package/dist/src/tui/app.d.ts +163 -0
- package/dist/src/tui/app.js +4204 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/cache-footer.d.ts +21 -0
- package/dist/src/tui/cache-footer.js +75 -0
- package/dist/src/tui/cache-footer.js.map +1 -0
- package/dist/src/tui/clarify.d.ts +14 -0
- package/dist/src/tui/clarify.js +187 -0
- package/dist/src/tui/clarify.js.map +1 -0
- package/dist/src/tui/composer.d.ts +79 -0
- package/dist/src/tui/composer.js +592 -0
- package/dist/src/tui/composer.js.map +1 -0
- package/dist/src/tui/event-view.d.ts +5 -0
- package/dist/src/tui/event-view.js +392 -0
- package/dist/src/tui/event-view.js.map +1 -0
- package/dist/src/tui/home.d.ts +7 -0
- package/dist/src/tui/home.js +92 -0
- package/dist/src/tui/home.js.map +1 -0
- package/dist/src/tui/markdown.d.ts +18 -0
- package/dist/src/tui/markdown.js +271 -0
- package/dist/src/tui/markdown.js.map +1 -0
- package/dist/src/tui/mode-footer.d.ts +9 -0
- package/dist/src/tui/mode-footer.js +62 -0
- package/dist/src/tui/mode-footer.js.map +1 -0
- package/dist/src/tui/plan-view.d.ts +8 -0
- package/dist/src/tui/plan-view.js +45 -0
- package/dist/src/tui/plan-view.js.map +1 -0
- package/dist/src/tui/prompt-queue.d.ts +18 -0
- package/dist/src/tui/prompt-queue.js +27 -0
- package/dist/src/tui/prompt-queue.js.map +1 -0
- package/dist/src/tui/resize.d.ts +7 -0
- package/dist/src/tui/resize.js +15 -0
- package/dist/src/tui/resize.js.map +1 -0
- package/dist/src/tui/session-picker.d.ts +10 -0
- package/dist/src/tui/session-picker.js +17 -0
- package/dist/src/tui/session-picker.js.map +1 -0
- package/dist/src/tui/session-transcript.d.ts +2 -0
- package/dist/src/tui/session-transcript.js +44 -0
- package/dist/src/tui/session-transcript.js.map +1 -0
- package/dist/src/tui/slash-notice.d.ts +2 -0
- package/dist/src/tui/slash-notice.js +9 -0
- package/dist/src/tui/slash-notice.js.map +1 -0
- package/dist/src/tui/slash.d.ts +21 -0
- package/dist/src/tui/slash.js +103 -0
- package/dist/src/tui/slash.js.map +1 -0
- package/dist/src/tui/splash.d.ts +4 -0
- package/dist/src/tui/splash.js +64 -0
- package/dist/src/tui/splash.js.map +1 -0
- package/dist/src/tui/tool-renderer.d.ts +6 -0
- package/dist/src/tui/tool-renderer.js +1024 -0
- package/dist/src/tui/tool-renderer.js.map +1 -0
- package/dist/src/tui/transcript-spacing.d.ts +1 -0
- package/dist/src/tui/transcript-spacing.js +4 -0
- package/dist/src/tui/transcript-spacing.js.map +1 -0
- package/dist/src/types.d.ts +220 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/util/abort.d.ts +3 -0
- package/dist/src/util/abort.js +19 -0
- package/dist/src/util/abort.js.map +1 -0
- package/dist/src/util/clock.d.ts +2 -0
- package/dist/src/util/clock.js +7 -0
- package/dist/src/util/clock.js.map +1 -0
- package/dist/src/util/fs.d.ts +13 -0
- package/dist/src/util/fs.js +75 -0
- package/dist/src/util/fs.js.map +1 -0
- package/dist/src/util/hash.d.ts +6 -0
- package/dist/src/util/hash.js +50 -0
- package/dist/src/util/hash.js.map +1 -0
- package/dist/src/util/limit.d.ts +11 -0
- package/dist/src/util/limit.js +29 -0
- package/dist/src/util/limit.js.map +1 -0
- package/dist/src/util/types.d.ts +22 -0
- package/dist/src/util/types.js +33 -0
- package/dist/src/util/types.js.map +1 -0
- package/dist/src/validation/acceptance.d.ts +12 -0
- package/dist/src/validation/acceptance.js +251 -0
- package/dist/src/validation/acceptance.js.map +1 -0
- package/dist/src/validation/milestone.d.ts +2 -0
- package/dist/src/validation/milestone.js +141 -0
- package/dist/src/validation/milestone.js.map +1 -0
- package/docs/final-acceptance-task.md +193 -0
- package/docs/public-source-hygiene.md +21 -0
- package/docs/roadmap.md +265 -0
- package/docs/tui-product-design.md +270 -0
- package/package.json +67 -0
- package/skills/coding-workflow/SKILL.md +16 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type SupervisorJob } from "../session/store.js";
|
|
2
|
+
export interface DaemonStatus {
|
|
3
|
+
pid?: number;
|
|
4
|
+
alive: boolean;
|
|
5
|
+
pid_file: string;
|
|
6
|
+
jobs: SupervisorJob[];
|
|
7
|
+
}
|
|
8
|
+
export declare function daemonPidFile(stateDir?: string): string;
|
|
9
|
+
export declare function startDaemon(options: {
|
|
10
|
+
stateDir?: string;
|
|
11
|
+
foreground?: boolean;
|
|
12
|
+
}): Promise<DaemonStatus>;
|
|
13
|
+
export declare function daemonStatus(stateDir?: string): Promise<DaemonStatus>;
|
|
14
|
+
export declare function queueDaemonRun(options: {
|
|
15
|
+
stateDir?: string;
|
|
16
|
+
workspaceRoot: string;
|
|
17
|
+
sessionId?: string;
|
|
18
|
+
prompt: string;
|
|
19
|
+
title?: string;
|
|
20
|
+
}): Promise<SupervisorJob>;
|
|
21
|
+
export declare function cancelDaemonJob(stateDir: string | undefined, jobId: string): Promise<SupervisorJob>;
|
|
22
|
+
export declare function detachDaemonJob(stateDir: string | undefined, jobId: string): Promise<SupervisorJob>;
|
|
23
|
+
export declare function attachDaemonJob(stateDir: string | undefined, jobId: string, options?: {
|
|
24
|
+
follow?: boolean;
|
|
25
|
+
pollMs?: number;
|
|
26
|
+
}): Promise<{
|
|
27
|
+
job: SupervisorJob;
|
|
28
|
+
events: unknown[];
|
|
29
|
+
}>;
|
|
30
|
+
export declare function serveDaemon(options?: {
|
|
31
|
+
stateDir?: string;
|
|
32
|
+
once?: boolean;
|
|
33
|
+
}): Promise<void>;
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { promises as fs } from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { loadConfig } from "../config/config.js";
|
|
6
|
+
import { resolveWorkspace } from "../session/workspace.js";
|
|
7
|
+
import { SessionStore } from "../session/store.js";
|
|
8
|
+
import { Runtime } from "../runtime.js";
|
|
9
|
+
import { homeStateDir, pathExists } from "../util/fs.js";
|
|
10
|
+
import { randomId } from "../util/hash.js";
|
|
11
|
+
export function daemonPidFile(stateDir) {
|
|
12
|
+
return path.join(resolvedStateDir(stateDir), "daemon.json");
|
|
13
|
+
}
|
|
14
|
+
export async function startDaemon(options) {
|
|
15
|
+
if (options.foreground) {
|
|
16
|
+
await serveDaemon({ stateDir: options.stateDir });
|
|
17
|
+
return daemonStatus(options.stateDir);
|
|
18
|
+
}
|
|
19
|
+
const status = await daemonStatus(options.stateDir);
|
|
20
|
+
if (status.alive) {
|
|
21
|
+
return status;
|
|
22
|
+
}
|
|
23
|
+
const servePath = fileURLToPath(new URL("./serve.js", import.meta.url));
|
|
24
|
+
const args = [servePath];
|
|
25
|
+
if (options.stateDir) {
|
|
26
|
+
args.push("--state-dir", options.stateDir);
|
|
27
|
+
}
|
|
28
|
+
const env = { ...process.env };
|
|
29
|
+
if (options.stateDir) {
|
|
30
|
+
env.INFEROA_STATE_DIR = options.stateDir;
|
|
31
|
+
}
|
|
32
|
+
else if (!env.INFEROA_STATE_DIR) {
|
|
33
|
+
delete env.INFEROA_STATE_DIR;
|
|
34
|
+
}
|
|
35
|
+
const child = spawn(process.execPath, args, {
|
|
36
|
+
detached: true,
|
|
37
|
+
stdio: "ignore",
|
|
38
|
+
env,
|
|
39
|
+
});
|
|
40
|
+
child.unref();
|
|
41
|
+
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
42
|
+
return daemonStatus(options.stateDir);
|
|
43
|
+
}
|
|
44
|
+
export async function daemonStatus(stateDir) {
|
|
45
|
+
const store = await SessionStore.open(stateDir);
|
|
46
|
+
try {
|
|
47
|
+
const pidFile = daemonPidFile(stateDir);
|
|
48
|
+
let pid;
|
|
49
|
+
if (await pathExists(pidFile)) {
|
|
50
|
+
const data = JSON.parse(await fs.readFile(pidFile, "utf8"));
|
|
51
|
+
pid = data.pid;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
pid,
|
|
55
|
+
alive: pid ? processAlive(pid) : false,
|
|
56
|
+
pid_file: pidFile,
|
|
57
|
+
jobs: store.listSupervisorJobs(),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
store.close();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export async function queueDaemonRun(options) {
|
|
65
|
+
const { config } = await loadConfig(options.workspaceRoot);
|
|
66
|
+
const workspace = await resolveWorkspace(options.workspaceRoot, config, options.workspaceRoot);
|
|
67
|
+
const store = await SessionStore.open(options.stateDir);
|
|
68
|
+
try {
|
|
69
|
+
const session = options.sessionId
|
|
70
|
+
? store.getSession(options.sessionId) ?? store.findSessionByPrefix(workspace.id, options.sessionId)
|
|
71
|
+
: store.createSession(workspace, options.title ?? `daemon:${options.prompt.slice(0, 40)}`);
|
|
72
|
+
if (!session) {
|
|
73
|
+
throw new Error(`Unknown session for daemon run: ${options.sessionId}`);
|
|
74
|
+
}
|
|
75
|
+
return store.createSupervisorJob(session.session_id, workspace.root, options.prompt);
|
|
76
|
+
}
|
|
77
|
+
finally {
|
|
78
|
+
store.close();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export async function cancelDaemonJob(stateDir, jobId) {
|
|
82
|
+
const store = await SessionStore.open(stateDir);
|
|
83
|
+
try {
|
|
84
|
+
const job = store.getSupervisorJob(jobId);
|
|
85
|
+
if (!job) {
|
|
86
|
+
throw new Error(`Unknown job: ${jobId}`);
|
|
87
|
+
}
|
|
88
|
+
if (job.status === "queued") {
|
|
89
|
+
store.updateSupervisorJob(jobId, { status: "cancelled" });
|
|
90
|
+
store.appendEvent({
|
|
91
|
+
session_id: job.session_id,
|
|
92
|
+
type: "daemon.job.cancelled",
|
|
93
|
+
data: { job_id: jobId },
|
|
94
|
+
});
|
|
95
|
+
return store.getSupervisorJob(jobId);
|
|
96
|
+
}
|
|
97
|
+
if (["complete", "failed", "cancelled"].includes(job.status)) {
|
|
98
|
+
store.appendEvent({
|
|
99
|
+
session_id: job.session_id,
|
|
100
|
+
type: "daemon.job.cancel_observed",
|
|
101
|
+
data: { job_id: jobId, status: job.status },
|
|
102
|
+
});
|
|
103
|
+
return job;
|
|
104
|
+
}
|
|
105
|
+
store.updateSupervisorJob(jobId, { status: "cancel_requested" });
|
|
106
|
+
store.appendEvent({
|
|
107
|
+
session_id: job.session_id,
|
|
108
|
+
type: "daemon.job.cancel_requested",
|
|
109
|
+
data: { job_id: jobId },
|
|
110
|
+
});
|
|
111
|
+
return store.getSupervisorJob(jobId);
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
store.close();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export async function detachDaemonJob(stateDir, jobId) {
|
|
118
|
+
const store = await SessionStore.open(stateDir);
|
|
119
|
+
try {
|
|
120
|
+
const job = store.getSupervisorJob(jobId);
|
|
121
|
+
if (!job) {
|
|
122
|
+
throw new Error(`Unknown job: ${jobId}`);
|
|
123
|
+
}
|
|
124
|
+
if (job.status === "queued" || job.status === "running") {
|
|
125
|
+
store.updateSupervisorJob(jobId, { status: "detached" });
|
|
126
|
+
store.appendEvent({ session_id: job.session_id, type: "daemon.job.detached", data: { job_id: jobId } });
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
store.appendEvent({ session_id: job.session_id, type: "daemon.job.detach_observed", data: { job_id: jobId, status: job.status } });
|
|
130
|
+
}
|
|
131
|
+
return store.getSupervisorJob(jobId);
|
|
132
|
+
}
|
|
133
|
+
finally {
|
|
134
|
+
store.close();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export async function attachDaemonJob(stateDir, jobId, options = {}) {
|
|
138
|
+
const store = await SessionStore.open(stateDir);
|
|
139
|
+
try {
|
|
140
|
+
let job = store.getSupervisorJob(jobId);
|
|
141
|
+
if (!job) {
|
|
142
|
+
throw new Error(`Unknown job: ${jobId}`);
|
|
143
|
+
}
|
|
144
|
+
store.appendEvent({ session_id: job.session_id, type: "daemon.job.attached", data: { job_id: jobId } });
|
|
145
|
+
if (job.status === "detached") {
|
|
146
|
+
store.updateSupervisorJob(jobId, { status: "running" });
|
|
147
|
+
job = store.getSupervisorJob(jobId);
|
|
148
|
+
}
|
|
149
|
+
if (!options.follow) {
|
|
150
|
+
return { job, events: store.listEvents(job.session_id, 80) };
|
|
151
|
+
}
|
|
152
|
+
let seen = 0;
|
|
153
|
+
while (true) {
|
|
154
|
+
job = store.getSupervisorJob(jobId);
|
|
155
|
+
const events = store.listEvents(job.session_id);
|
|
156
|
+
const next = events.filter((event) => (event.id ?? 0) > seen);
|
|
157
|
+
for (const event of next) {
|
|
158
|
+
console.log(`${event.created_at} ${event.type} ${JSON.stringify(event.data)}`);
|
|
159
|
+
seen = Math.max(seen, event.id ?? seen);
|
|
160
|
+
}
|
|
161
|
+
if (["complete", "failed", "cancelled"].includes(job.status)) {
|
|
162
|
+
return { job, events: store.listEvents(job.session_id, 80) };
|
|
163
|
+
}
|
|
164
|
+
await new Promise((resolve) => setTimeout(resolve, options.pollMs ?? 1000));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
store.close();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
export async function serveDaemon(options = {}) {
|
|
172
|
+
const stateDir = options.stateDir ?? process.env.INFEROA_STATE_DIR;
|
|
173
|
+
const store = await SessionStore.open(stateDir);
|
|
174
|
+
const pidFile = daemonPidFile(stateDir);
|
|
175
|
+
await fs.mkdir(path.dirname(pidFile), { recursive: true });
|
|
176
|
+
await fs.writeFile(pidFile, JSON.stringify({ pid: process.pid, started_at: new Date().toISOString() }, null, 2));
|
|
177
|
+
try {
|
|
178
|
+
while (true) {
|
|
179
|
+
const queued = [...store.listSupervisorJobs("queued"), ...store.listSupervisorJobs("detached")];
|
|
180
|
+
for (const job of queued) {
|
|
181
|
+
const latest = store.getSupervisorJob(job.job_id);
|
|
182
|
+
if (!latest || (latest.status !== "queued" && latest.status !== "detached")) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
await runJob(store, latest, stateDir);
|
|
186
|
+
}
|
|
187
|
+
if (options.once) {
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
store.close();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function resolvedStateDir(stateDir) {
|
|
198
|
+
return stateDir || process.env.INFEROA_STATE_DIR || homeStateDir();
|
|
199
|
+
}
|
|
200
|
+
async function runJob(store, job, stateDir) {
|
|
201
|
+
if (job.status === "cancelled") {
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
const runId = randomId("run");
|
|
205
|
+
store.updateSupervisorJob(job.job_id, { status: "running", run_id: runId });
|
|
206
|
+
store.appendEvent({
|
|
207
|
+
session_id: job.session_id,
|
|
208
|
+
run_id: runId,
|
|
209
|
+
type: "daemon.job.started",
|
|
210
|
+
data: { job_id: job.job_id },
|
|
211
|
+
});
|
|
212
|
+
try {
|
|
213
|
+
const { config } = await loadConfig(job.workspace_root);
|
|
214
|
+
const workspace = await resolveWorkspace(job.workspace_root, config, job.workspace_root);
|
|
215
|
+
const runtime = new Runtime(config, workspace, store);
|
|
216
|
+
await runtime.run({
|
|
217
|
+
prompt: job.prompt,
|
|
218
|
+
session_id: job.session_id,
|
|
219
|
+
client_id: `daemon:${process.pid}`,
|
|
220
|
+
owner_kind: "daemon",
|
|
221
|
+
request_class: "background",
|
|
222
|
+
});
|
|
223
|
+
const after = store.getSupervisorJob(job.job_id);
|
|
224
|
+
if (after?.status === "cancel_requested") {
|
|
225
|
+
store.updateSupervisorJob(job.job_id, { status: "cancelled" });
|
|
226
|
+
store.appendEvent({ session_id: job.session_id, run_id: runId, type: "daemon.job.cancelled", data: { job_id: job.job_id } });
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
store.updateSupervisorJob(job.job_id, { status: "complete" });
|
|
230
|
+
store.appendEvent({ session_id: job.session_id, run_id: runId, type: "daemon.job.complete", data: { job_id: job.job_id } });
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
store.updateSupervisorJob(job.job_id, { status: "failed" });
|
|
235
|
+
store.appendEvent({
|
|
236
|
+
session_id: job.session_id,
|
|
237
|
+
run_id: runId,
|
|
238
|
+
type: "daemon.job.failed",
|
|
239
|
+
data: { job_id: job.job_id, error: error instanceof Error ? error.message : String(error) },
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function processAlive(pid) {
|
|
244
|
+
try {
|
|
245
|
+
process.kill(pid, 0);
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
//# sourceMappingURL=supervisor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.js","sourceRoot":"","sources":["../../../src/daemon/supervisor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import type { JsonObject, ModelUsage } from "../types.js";
|
|
2
|
+
import { SessionStore } from "../session/store.js";
|
|
3
|
+
export type GoalStatus = "active" | "paused" | "budget-limited" | "complete" | "dropped";
|
|
4
|
+
export type GoalStepStatus = "pending" | "in_progress" | "completed" | "blocked" | "skipped";
|
|
5
|
+
export interface GoalRecord {
|
|
6
|
+
id: string;
|
|
7
|
+
objective: string;
|
|
8
|
+
status: GoalStatus;
|
|
9
|
+
token_budget?: number;
|
|
10
|
+
tokens_used: number;
|
|
11
|
+
time_used_ms: number;
|
|
12
|
+
time_used_seconds: number;
|
|
13
|
+
tool_rounds_used: number;
|
|
14
|
+
tool_calls_used: number;
|
|
15
|
+
planning?: GoalPlanningState;
|
|
16
|
+
plan?: GoalPlanSnapshot;
|
|
17
|
+
summary?: string;
|
|
18
|
+
created_at: string;
|
|
19
|
+
updated_at: string;
|
|
20
|
+
}
|
|
21
|
+
export interface GoalPlanningState {
|
|
22
|
+
summary?: string;
|
|
23
|
+
active_step_id?: string;
|
|
24
|
+
steps: GoalPlanningStep[];
|
|
25
|
+
updated_at: string;
|
|
26
|
+
}
|
|
27
|
+
export interface GoalPlanningStep {
|
|
28
|
+
id: string;
|
|
29
|
+
title: string;
|
|
30
|
+
status: GoalStepStatus;
|
|
31
|
+
notes?: string;
|
|
32
|
+
evidence?: JsonObject;
|
|
33
|
+
updated_at: string;
|
|
34
|
+
}
|
|
35
|
+
export interface GoalPlanningInput {
|
|
36
|
+
summary?: string;
|
|
37
|
+
active_step_id?: string;
|
|
38
|
+
steps: GoalPlanningStepInput[];
|
|
39
|
+
}
|
|
40
|
+
export interface GoalPlanningStepInput {
|
|
41
|
+
id?: string;
|
|
42
|
+
title: string;
|
|
43
|
+
status?: GoalStepStatus;
|
|
44
|
+
notes?: string;
|
|
45
|
+
evidence?: JsonObject;
|
|
46
|
+
}
|
|
47
|
+
export interface GoalStepUpdateInput {
|
|
48
|
+
step_id: string;
|
|
49
|
+
title?: string;
|
|
50
|
+
status?: GoalStepStatus;
|
|
51
|
+
notes?: string;
|
|
52
|
+
evidence?: JsonObject;
|
|
53
|
+
active_step_id?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface GoalPlanSnapshot {
|
|
56
|
+
id: string;
|
|
57
|
+
objective: string;
|
|
58
|
+
summary?: string;
|
|
59
|
+
body?: string;
|
|
60
|
+
approved_at: string;
|
|
61
|
+
}
|
|
62
|
+
export interface GoalState {
|
|
63
|
+
enabled: boolean;
|
|
64
|
+
goal: GoalRecord;
|
|
65
|
+
}
|
|
66
|
+
export interface GoalCompletionReport {
|
|
67
|
+
objective: string;
|
|
68
|
+
report: string;
|
|
69
|
+
}
|
|
70
|
+
export interface GoalCreateInput {
|
|
71
|
+
objective: string;
|
|
72
|
+
token_budget?: number;
|
|
73
|
+
}
|
|
74
|
+
export declare function readGoalState(store: SessionStore, sessionId: string): GoalState | undefined;
|
|
75
|
+
export declare function createGoalState(input: GoalCreateInput, now?: Date): GoalState;
|
|
76
|
+
export declare function replaceGoalPlanning(state: GoalState, input: GoalPlanningInput, now?: Date): GoalState;
|
|
77
|
+
export declare function attachGoalPlanSnapshot(state: GoalState, plan: GoalPlanSnapshot, now?: Date): GoalState;
|
|
78
|
+
export declare function updateGoalPlanningStep(state: GoalState, input: GoalStepUpdateInput, now?: Date): GoalState;
|
|
79
|
+
export declare function createGoalPlanning(input: GoalPlanningInput, now?: Date): GoalPlanningState;
|
|
80
|
+
export declare function writeGoalState(store: SessionStore, sessionId: string, state: GoalState, runId?: string): GoalState;
|
|
81
|
+
export declare function goalCompletionReportForRun(store: SessionStore, sessionId: string, runId: string): string | undefined;
|
|
82
|
+
export declare function recordGoalCompletionReport(store: SessionStore, sessionId: string, runId: string): GoalCompletionReport | undefined;
|
|
83
|
+
export declare function goalStateToJson(state: GoalState): JsonObject;
|
|
84
|
+
export declare function applyGoalUsage(store: SessionStore, sessionId: string, usage: {
|
|
85
|
+
tokens?: number;
|
|
86
|
+
time_seconds?: number;
|
|
87
|
+
duration_ms?: number;
|
|
88
|
+
tool_rounds?: number;
|
|
89
|
+
tool_calls?: number;
|
|
90
|
+
}, runId?: string): GoalState | undefined;
|
|
91
|
+
export declare function modelUsageTokenCost(usage: ModelUsage | undefined): number;
|
|
92
|
+
export declare function renderGoalModeSection(state: GoalState | undefined): string | undefined;
|
|
93
|
+
export declare function completionBudgetReport(goal: GoalRecord): string | undefined;
|
|
94
|
+
export declare function goalDurationMs(goal: GoalRecord): number;
|
|
95
|
+
export declare function formatGoalDuration(goal: GoalRecord): string;
|
|
96
|
+
export declare function renderTrustedObjective(objective: string): string;
|
|
97
|
+
export declare function escapeXmlText(input: string): string;
|
|
98
|
+
export declare function cloneGoalState(state: GoalState): GoalState;
|
|
99
|
+
export declare function incompleteGoalPlanningSteps(goal: GoalRecord): GoalPlanningStep[];
|
|
100
|
+
export declare function incompleteGoalPlanningMessage(goal: GoalRecord): string | undefined;
|
|
101
|
+
export declare function goalPlanningProgressSummary(planning: GoalPlanningState): string;
|
|
102
|
+
export declare function goalPlanningStepsFromMarkdown(body: string | undefined): GoalPlanningStepInput[];
|
|
103
|
+
export declare function validateTokenBudget(value: unknown): asserts value is number | undefined;
|
|
104
|
+
export declare function isAccountingGoal(goal: GoalRecord): boolean;
|
|
105
|
+
export declare function parseGoalStepStatus(value: unknown): GoalStepStatus | undefined;
|