@abitat_reece/host-daemon 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.
Files changed (81) hide show
  1. package/dist/cli/conversation-runtime.d.ts +23 -0
  2. package/dist/cli/conversation-runtime.d.ts.map +1 -0
  3. package/dist/cli/conversation-runtime.js +73 -0
  4. package/dist/cli/conversation-runtime.js.map +1 -0
  5. package/dist/cli/daemon-connection.d.ts +14 -0
  6. package/dist/cli/daemon-connection.d.ts.map +1 -0
  7. package/dist/cli/daemon-connection.js +17 -0
  8. package/dist/cli/daemon-connection.js.map +1 -0
  9. package/dist/cli/heartbeat-loop.d.ts +2 -0
  10. package/dist/cli/heartbeat-loop.d.ts.map +1 -0
  11. package/dist/cli/heartbeat-loop.js +10 -0
  12. package/dist/cli/heartbeat-loop.js.map +1 -0
  13. package/dist/cli/index.d.ts +3 -0
  14. package/dist/cli/index.d.ts.map +1 -0
  15. package/dist/cli/index.js +371 -0
  16. package/dist/cli/index.js.map +1 -0
  17. package/dist/cli/retryable-task.d.ts +5 -0
  18. package/dist/cli/retryable-task.d.ts.map +1 -0
  19. package/dist/cli/retryable-task.js +16 -0
  20. package/dist/cli/retryable-task.js.map +1 -0
  21. package/dist/cli/start-options.d.ts +5 -0
  22. package/dist/cli/start-options.d.ts.map +1 -0
  23. package/dist/cli/start-options.js +6 -0
  24. package/dist/cli/start-options.js.map +1 -0
  25. package/dist/config/host-config.d.ts +10 -0
  26. package/dist/config/host-config.d.ts.map +1 -0
  27. package/dist/config/host-config.js +15 -0
  28. package/dist/config/host-config.js.map +1 -0
  29. package/dist/git/changeset.d.ts +9 -0
  30. package/dist/git/changeset.d.ts.map +1 -0
  31. package/dist/git/changeset.js +78 -0
  32. package/dist/git/changeset.js.map +1 -0
  33. package/dist/git/paths.d.ts +12 -0
  34. package/dist/git/paths.d.ts.map +1 -0
  35. package/dist/git/paths.js +72 -0
  36. package/dist/git/paths.js.map +1 -0
  37. package/dist/git/publish.d.ts +24 -0
  38. package/dist/git/publish.d.ts.map +1 -0
  39. package/dist/git/publish.js +23 -0
  40. package/dist/git/publish.js.map +1 -0
  41. package/dist/git/repo.d.ts +21 -0
  42. package/dist/git/repo.d.ts.map +1 -0
  43. package/dist/git/repo.js +113 -0
  44. package/dist/git/repo.js.map +1 -0
  45. package/dist/git/worktree.d.ts +25 -0
  46. package/dist/git/worktree.d.ts.map +1 -0
  47. package/dist/git/worktree.js +33 -0
  48. package/dist/git/worktree.js.map +1 -0
  49. package/dist/remote-control/manager.d.ts +46 -0
  50. package/dist/remote-control/manager.d.ts.map +1 -0
  51. package/dist/remote-control/manager.js +86 -0
  52. package/dist/remote-control/manager.js.map +1 -0
  53. package/dist/runtime/adapter.d.ts +27 -0
  54. package/dist/runtime/adapter.d.ts.map +1 -0
  55. package/dist/runtime/adapter.js +2 -0
  56. package/dist/runtime/adapter.js.map +1 -0
  57. package/dist/runtime/cli.d.ts +41 -0
  58. package/dist/runtime/cli.d.ts.map +1 -0
  59. package/dist/runtime/cli.js +540 -0
  60. package/dist/runtime/cli.js.map +1 -0
  61. package/dist/runtime/index.d.ts +10 -0
  62. package/dist/runtime/index.d.ts.map +1 -0
  63. package/dist/runtime/index.js +39 -0
  64. package/dist/runtime/index.js.map +1 -0
  65. package/dist/runtime/mock.d.ts +3 -0
  66. package/dist/runtime/mock.d.ts.map +1 -0
  67. package/dist/runtime/mock.js +34 -0
  68. package/dist/runtime/mock.js.map +1 -0
  69. package/dist/runtime/pty.d.ts +32 -0
  70. package/dist/runtime/pty.d.ts.map +1 -0
  71. package/dist/runtime/pty.js +197 -0
  72. package/dist/runtime/pty.js.map +1 -0
  73. package/dist/tools/scanner.d.ts +14 -0
  74. package/dist/tools/scanner.d.ts.map +1 -0
  75. package/dist/tools/scanner.js +53 -0
  76. package/dist/tools/scanner.js.map +1 -0
  77. package/dist/transport/api-client.d.ts +153 -0
  78. package/dist/transport/api-client.d.ts.map +1 -0
  79. package/dist/transport/api-client.js +93 -0
  80. package/dist/transport/api-client.js.map +1 -0
  81. package/package.json +41 -0
@@ -0,0 +1,23 @@
1
+ import type { RunEventIngestRequest } from "@abitat_reece/shared";
2
+ import type { RuntimeAdapter } from "../runtime/adapter.js";
3
+ interface RunEventClient {
4
+ ingestRunEvent(conversationId: string, input: RunEventIngestRequest): Promise<unknown>;
5
+ }
6
+ interface RunConversationRuntimeInput {
7
+ conversationId: string;
8
+ worktreePath: string;
9
+ prompt: string;
10
+ model?: string;
11
+ instructions: string;
12
+ allowedTools: string[];
13
+ captureSummary?: boolean;
14
+ resumeSessionId?: string;
15
+ skipGitRepoCheck?: boolean;
16
+ }
17
+ interface RunConversationRuntimeOptions {
18
+ eventIngestAttempts?: number;
19
+ eventIngestRetryDelayMs?: number;
20
+ }
21
+ export declare function runConversationRuntime(client: RunEventClient, adapter: RuntimeAdapter, input: RunConversationRuntimeInput, options?: RunConversationRuntimeOptions): Promise<string | undefined>;
22
+ export {};
23
+ //# sourceMappingURL=conversation-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-runtime.d.ts","sourceRoot":"","sources":["../../src/cli/conversation-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAE1E,UAAU,cAAc;IACtB,cAAc,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxF;AAED,UAAU,2BAA2B;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,UAAU,6BAA6B;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAKD,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,2BAA2B,EAClC,OAAO,GAAE,6BAAkC,+BAgD5C"}
@@ -0,0 +1,73 @@
1
+ const DEFAULT_EVENT_INGEST_ATTEMPTS = 5;
2
+ const DEFAULT_EVENT_INGEST_RETRY_DELAY_MS = 250;
3
+ export async function runConversationRuntime(client, adapter, input, options = {}) {
4
+ let sequence = 1;
5
+ let runtimeSessionId = input.resumeSessionId;
6
+ const summaryLines = [];
7
+ const ingestOptions = {
8
+ attempts: Math.max(1, options.eventIngestAttempts ?? DEFAULT_EVENT_INGEST_ATTEMPTS),
9
+ retryDelayMs: Math.max(0, options.eventIngestRetryDelayMs ?? DEFAULT_EVENT_INGEST_RETRY_DELAY_MS)
10
+ };
11
+ await adapter.run(input, async (event) => {
12
+ runtimeSessionId = runtimeSessionId ?? parseRuntimeSessionId(event.content);
13
+ if (input.captureSummary && event.type === "stdout") {
14
+ summaryLines.push(event.content);
15
+ }
16
+ await ingestRunEvent(client, input.conversationId, {
17
+ sequence,
18
+ type: event.type,
19
+ content: event.content,
20
+ metadata: {}
21
+ }, ingestOptions);
22
+ sequence += 1;
23
+ });
24
+ if (input.captureSummary) {
25
+ await ingestRunEvent(client, input.conversationId, {
26
+ sequence,
27
+ type: "summary",
28
+ content: summaryText(summaryLines),
29
+ metadata: { action: "summarize" }
30
+ }, ingestOptions);
31
+ }
32
+ return runtimeSessionId;
33
+ }
34
+ async function ingestRunEvent(client, conversationId, input, options) {
35
+ let lastError;
36
+ for (let attempt = 1; attempt <= options.attempts; attempt += 1) {
37
+ try {
38
+ await client.ingestRunEvent(conversationId, input);
39
+ return;
40
+ }
41
+ catch (error) {
42
+ lastError = error;
43
+ if (attempt < options.attempts) {
44
+ await delay(options.retryDelayMs);
45
+ }
46
+ }
47
+ }
48
+ console.warn(`run event ingest failed for ${conversationId} sequence ${input.sequence}: ${errorMessage(lastError)}`);
49
+ }
50
+ function parseRuntimeSessionId(content) {
51
+ const trimmed = content.trim();
52
+ const directMatch = /^session id:\s*(\S+)/i.exec(trimmed);
53
+ const resumeMatch = /\bcodex resume\s+(\S+)/i.exec(trimmed);
54
+ return directMatch?.[1] ?? resumeMatch?.[1];
55
+ }
56
+ function summaryText(lines) {
57
+ const summary = lines
58
+ .map((line) => line.trim())
59
+ .filter(Boolean)
60
+ .join("\n")
61
+ .trim();
62
+ return summary || "Summary completed, but Codex did not return text.";
63
+ }
64
+ function errorMessage(error) {
65
+ return error instanceof Error ? error.message : "unknown error";
66
+ }
67
+ function delay(ms) {
68
+ if (ms <= 0) {
69
+ return Promise.resolve();
70
+ }
71
+ return new Promise((resolve) => setTimeout(resolve, ms));
72
+ }
73
+ //# sourceMappingURL=conversation-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-runtime.js","sourceRoot":"","sources":["../../src/cli/conversation-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { HostConfig } from "../config/host-config.js";
2
+ interface ResolveDaemonConnectionInput {
3
+ config: HostConfig | null;
4
+ env: Partial<Record<string, string | undefined>>;
5
+ }
6
+ export interface DaemonConnection {
7
+ apiUrl: string;
8
+ hostToken?: string;
9
+ machineId: string;
10
+ paired: boolean;
11
+ }
12
+ export declare function resolveDaemonConnection(input: ResolveDaemonConnectionInput): DaemonConnection;
13
+ export {};
14
+ //# sourceMappingURL=daemon-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-connection.d.ts","sourceRoot":"","sources":["../../src/cli/daemon-connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,UAAU,4BAA4B;IACpC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,GAAG,gBAAgB,CAgB7F"}
@@ -0,0 +1,17 @@
1
+ export function resolveDaemonConnection(input) {
2
+ if (input.config) {
3
+ return {
4
+ apiUrl: input.config.apiUrl,
5
+ hostToken: input.config.hostToken,
6
+ machineId: input.config.machineId,
7
+ paired: true
8
+ };
9
+ }
10
+ return {
11
+ apiUrl: input.env.ABITAT_API_URL ?? "http://localhost:3000",
12
+ hostToken: input.env.ABITAT_HOST_TOKEN,
13
+ machineId: input.env.ABITAT_MACHINE_ID ?? "machine_demo",
14
+ paired: false
15
+ };
16
+ }
17
+ //# sourceMappingURL=daemon-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-connection.js","sourceRoot":"","sources":["../../src/cli/daemon-connection.ts"],"names":[],"mappings":"AAcA,MAAM,UAAU,uBAAuB,CAAC,KAAmC;IACzE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;YAC3B,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;YACjC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,SAAS;YACjC,MAAM,EAAE,IAAI;SACb,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,IAAI,uBAAuB;QAC3D,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB;QACtC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,IAAI,cAAc;QACxD,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runHeartbeatWithRecovery(beat: () => Promise<void>, logError?: (message: string) => void): Promise<void>;
2
+ //# sourceMappingURL=heartbeat-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-loop.d.ts","sourceRoot":"","sources":["../../src/cli/heartbeat-loop.ts"],"names":[],"mappings":"AAAA,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACzB,QAAQ,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAoB,iBAQpD"}
@@ -0,0 +1,10 @@
1
+ export async function runHeartbeatWithRecovery(beat, logError = console.error) {
2
+ try {
3
+ await beat();
4
+ }
5
+ catch (error) {
6
+ const message = error instanceof Error ? error.message : "heartbeat failed";
7
+ logError(`heartbeat failed; retrying: ${message}`);
8
+ }
9
+ }
10
+ //# sourceMappingURL=heartbeat-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heartbeat-loop.js","sourceRoot":"","sources":["../../src/cli/heartbeat-loop.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAyB,EACzB,WAAsC,OAAO,CAAC,KAAK;IAEnD,IAAI,CAAC;QACH,MAAM,IAAI,EAAE,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC;QAC5E,QAAQ,CAAC,+BAA+B,OAAO,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,371 @@
1
+ #!/usr/bin/env node
2
+ import { homedir } from "node:os";
3
+ import { access } from "node:fs/promises";
4
+ import { runtimeSchema } from "@abitat_reece/shared";
5
+ import { defaultConfigPath, loadHostConfig, saveHostConfig } from "../config/host-config.js";
6
+ import { collectChangeset } from "../git/changeset.js";
7
+ import { branchNameForConversation, resolveRepoPath } from "../git/paths.js";
8
+ import { commitAndPushWorktree, tryCreatePullRequest } from "../git/publish.js";
9
+ import { cleanupConversationWorktree, setupConversationWorktree } from "../git/worktree.js";
10
+ import { createRemoteControlManager } from "../remote-control/manager.js";
11
+ import { createRuntimeAdapter } from "../runtime/index.js";
12
+ import { HostApiClient } from "../transport/api-client.js";
13
+ import { createToolScanner } from "../tools/scanner.js";
14
+ import { runConversationRuntime } from "./conversation-runtime.js";
15
+ import { resolveDaemonConnection } from "./daemon-connection.js";
16
+ import { runHeartbeatWithRecovery } from "./heartbeat-loop.js";
17
+ import { createRetryableTask } from "./retryable-task.js";
18
+ import { parseStartOptions } from "./start-options.js";
19
+ const args = process.argv.slice(2);
20
+ const command = args[0] ?? "start";
21
+ void main();
22
+ async function main() {
23
+ if (command === "pair") {
24
+ await pairDaemon(args);
25
+ return;
26
+ }
27
+ if (command === "start") {
28
+ await startDaemon(args);
29
+ return;
30
+ }
31
+ if (command === "cleanup-worktree") {
32
+ await cleanupWorktree(args);
33
+ return;
34
+ }
35
+ console.error(`Unknown command: ${command}`);
36
+ console.error("Usage: abitat-host pair --code ABITAT-123456 | abitat-host start --mock");
37
+ process.exitCode = 1;
38
+ }
39
+ async function pairDaemon(args) {
40
+ const pairingCode = readOption(args, "--code") ?? "";
41
+ const apiUrl = process.env.ABITAT_API_URL ?? "http://localhost:3000";
42
+ const machineName = process.env.ABITAT_MACHINE_NAME ?? "Abitat Host";
43
+ const configPath = process.env.ABITAT_CONFIG_PATH ?? defaultConfigPath();
44
+ const client = new HostApiClient(apiUrl);
45
+ const response = await client.pair({
46
+ pairingCode,
47
+ machineName,
48
+ daemonVersion: "0.1.0"
49
+ });
50
+ await saveHostConfig({ apiUrl, ...response }, configPath);
51
+ console.log(`paired machineId=${response.machineId}`);
52
+ console.log(`config=${configPath}`);
53
+ }
54
+ async function startDaemon(args) {
55
+ const options = parseStartOptions(args);
56
+ const runtime = runtimeSchema.parse(options.mock || args.length === 0 ? "mock" : "codex");
57
+ const workspaceRoot = process.env.ABITAT_WORKSPACE_ROOT ?? `${homedir()}/AbitatWorkspace`;
58
+ const pollIntervalMs = Number(process.env.ABITAT_DAEMON_POLL_INTERVAL_MS ?? 2000);
59
+ const configPath = process.env.ABITAT_CONFIG_PATH ?? defaultConfigPath();
60
+ const config = await readConfigIfAvailable(configPath);
61
+ let connection = resolveDaemonConnection({ config, env: process.env });
62
+ let client = new HostApiClient(connection.apiUrl, connection.hostToken);
63
+ const activeState = createActiveDaemonState();
64
+ console.log("Abitat Workspace host daemon");
65
+ console.log(`mode=${runtime}`);
66
+ console.log(`workspaceRoot=${workspaceRoot}`);
67
+ console.log(`pollIntervalMs=${pollIntervalMs}`);
68
+ console.log(`machineId=${connection.machineId}`);
69
+ console.log(`paired=${connection.paired}`);
70
+ console.log("status=online");
71
+ // Auto-pair when starting unpaired (e.g. local dev via `pnpm dev`).
72
+ if (!connection.paired) {
73
+ const pairingCode = process.env.ABITAT_PAIRING_CODE;
74
+ if (pairingCode) {
75
+ try {
76
+ const pairClient = new HostApiClient(connection.apiUrl);
77
+ const result = await pairClient.pair({
78
+ pairingCode,
79
+ machineName: process.env.ABITAT_MACHINE_NAME ?? "Abitat Host",
80
+ daemonVersion: "0.1.0"
81
+ });
82
+ await saveHostConfig({ apiUrl: connection.apiUrl, ...result }, configPath);
83
+ connection = resolveDaemonConnection({
84
+ config: await loadHostConfig(configPath),
85
+ env: process.env
86
+ });
87
+ client = new HostApiClient(connection.apiUrl, connection.hostToken);
88
+ console.log(`paired=${connection.paired}`);
89
+ console.log(`machineId=${connection.machineId}`);
90
+ }
91
+ catch (error) {
92
+ console.error("auto-pair failed:", error instanceof Error ? error.message : error);
93
+ }
94
+ }
95
+ }
96
+ const toolScanUpload = createRetryableTask(async () => {
97
+ await uploadToolScan(client, connection.machineId);
98
+ });
99
+ const remoteControlManager = process.env.ABITAT_ENABLE_REMOTE_CONTROL === "1"
100
+ ? createRemoteControlManager(client, {
101
+ apiUrl: connection.apiUrl,
102
+ helperPath: process.env.ABITAT_REMOTE_CONTROL_HELPER_PATH,
103
+ hostToken: connection.hostToken
104
+ })
105
+ : null;
106
+ const beat = async () => {
107
+ const timestamp = new Date().toISOString();
108
+ console.log(`heartbeat=${timestamp}`);
109
+ if (connection.paired) {
110
+ await toolScanUpload.run();
111
+ }
112
+ if (connection.paired) {
113
+ const activeConversationIds = getActiveConversationIds(activeState);
114
+ await client.heartbeat({
115
+ machineId: connection.machineId,
116
+ status: "online",
117
+ activeConversationId: activeConversationIds[0],
118
+ activeConversationIds
119
+ });
120
+ }
121
+ await pollDaemonJob(client, connection.machineId, workspaceRoot, activeState, connection.apiUrl, connection.hostToken);
122
+ if (connection.paired && remoteControlManager) {
123
+ await remoteControlManager.tick(connection.machineId);
124
+ }
125
+ };
126
+ await runHeartbeatWithRecovery(beat);
127
+ const heartbeat = setInterval(() => {
128
+ void runHeartbeatWithRecovery(beat);
129
+ }, Math.max(pollIntervalMs, 1000));
130
+ process.on("SIGINT", () => {
131
+ clearInterval(heartbeat);
132
+ remoteControlManager?.stopAll();
133
+ void stopDaemon(client, connection);
134
+ });
135
+ }
136
+ function createActiveDaemonState() {
137
+ return {
138
+ conversationIds: new Set(),
139
+ tasks: new Set()
140
+ };
141
+ }
142
+ function getActiveConversationIds(activeState) {
143
+ return Array.from(activeState.conversationIds);
144
+ }
145
+ function trackBackgroundTask(activeState, task) {
146
+ activeState.tasks.add(task);
147
+ void task
148
+ .catch((error) => {
149
+ console.error(error instanceof Error ? error.message : "background job failed");
150
+ })
151
+ .finally(() => {
152
+ activeState.tasks.delete(task);
153
+ });
154
+ }
155
+ async function uploadToolScan(client, machineId) {
156
+ const tools = await createToolScanner().scan();
157
+ await client.uploadTools(machineId, tools);
158
+ console.log(`tools=${tools.filter((tool) => tool.installed).length}/${tools.length}`);
159
+ }
160
+ async function pollDaemonJob(client, machineId, workspaceRoot, activeState, apiUrl, hostToken) {
161
+ const { job } = await client.pollJob(machineId, getActiveConversationIds(activeState));
162
+ if (!job) {
163
+ return;
164
+ }
165
+ console.log(`job=${job.id} type=${job.type}`);
166
+ if (job.type === "commit_and_push") {
167
+ try {
168
+ activeState.conversationIds.add(job.conversationId);
169
+ await commitAndPushConversation(client, job);
170
+ }
171
+ finally {
172
+ activeState.conversationIds.delete(job.conversationId);
173
+ }
174
+ return;
175
+ }
176
+ if (job.type === "summarize_conversation") {
177
+ activeState.conversationIds.add(job.conversationId);
178
+ const task = runSummarizeConversationJob(client, job, activeState, apiUrl, hostToken);
179
+ trackBackgroundTask(activeState, task);
180
+ return;
181
+ }
182
+ if (job.type !== "start_conversation") {
183
+ await client.ackJob(job.id, { status: "running" });
184
+ return;
185
+ }
186
+ activeState.conversationIds.add(job.conversationId);
187
+ const task = runStartConversationJob(client, job, workspaceRoot, activeState, apiUrl, hostToken);
188
+ trackBackgroundTask(activeState, task);
189
+ }
190
+ async function runStartConversationJob(client, job, workspaceRoot, activeState, apiUrl, hostToken) {
191
+ try {
192
+ const setup = job.payload.resumeSessionId && job.payload.worktreePath && job.payload.branchName
193
+ ? {
194
+ branchName: job.payload.branchName,
195
+ repoPath: job.payload.hostLocalPath
196
+ ? undefined
197
+ : resolveRepoPath(workspaceRoot, job.payload.repoUrl),
198
+ worktreePath: job.payload.worktreePath
199
+ }
200
+ : job.payload.hostLocalPath
201
+ ? await setupLocalConversationFolder(job)
202
+ : await setupConversationWorktree({
203
+ workspaceRoot,
204
+ conversationId: job.conversationId,
205
+ conversationType: job.payload.conversationType,
206
+ prompt: job.payload.taskTitle ?? job.payload.prompt,
207
+ repoUrl: job.payload.repoUrl,
208
+ defaultBranch: "main"
209
+ });
210
+ console.log(`branch=${setup.branchName}`);
211
+ console.log(`worktree=${setup.worktreePath}`);
212
+ await client.ackJob(job.id, {
213
+ status: "running",
214
+ branchName: setup.branchName,
215
+ worktreePath: setup.worktreePath
216
+ });
217
+ const runtimeSessionId = await runConversationRuntime(client, createRuntimeAdapter(job.payload.agentRuntime, {
218
+ presentation: job.payload.presentation,
219
+ pty: { apiUrl, hostToken }
220
+ }), {
221
+ conversationId: job.conversationId,
222
+ worktreePath: setup.worktreePath,
223
+ prompt: job.payload.prompt,
224
+ model: job.payload.model,
225
+ instructions: job.payload.instructions,
226
+ allowedTools: job.payload.allowedTools,
227
+ resumeSessionId: job.payload.resumeSessionId,
228
+ skipGitRepoCheck: Boolean(job.payload.hostLocalPath)
229
+ });
230
+ const changeSet = await collectChangeset(setup.worktreePath);
231
+ await client.uploadChangeSet(job.conversationId, changeSet);
232
+ await client.ackJob(job.id, {
233
+ status: "completed",
234
+ branchName: setup.branchName,
235
+ worktreePath: setup.worktreePath,
236
+ runtimeSessionId
237
+ });
238
+ }
239
+ catch (error) {
240
+ await client.ackJob(job.id, {
241
+ status: "failed",
242
+ errorMessage: error instanceof Error ? error.message : "worktree setup failed"
243
+ });
244
+ }
245
+ finally {
246
+ activeState.conversationIds.delete(job.conversationId);
247
+ }
248
+ }
249
+ async function runSummarizeConversationJob(client, job, activeState, apiUrl, hostToken) {
250
+ try {
251
+ const worktreePath = job.payload.worktreePath ?? job.payload.hostLocalPath ?? "";
252
+ if (!worktreePath || !job.payload.branchName || !job.payload.resumeSessionId) {
253
+ throw new Error("Summary job is missing existing Codex thread metadata");
254
+ }
255
+ await access(worktreePath);
256
+ await client.ackJob(job.id, {
257
+ status: "running",
258
+ branchName: job.payload.branchName,
259
+ worktreePath
260
+ });
261
+ const runtimeSessionId = await runConversationRuntime(client, createRuntimeAdapter(job.payload.agentRuntime, {
262
+ presentation: "inline",
263
+ pty: { apiUrl, hostToken }
264
+ }), {
265
+ allowedTools: job.payload.allowedTools,
266
+ captureSummary: true,
267
+ conversationId: job.conversationId,
268
+ instructions: job.payload.instructions,
269
+ model: job.payload.model,
270
+ prompt: job.payload.prompt,
271
+ resumeSessionId: job.payload.resumeSessionId,
272
+ skipGitRepoCheck: Boolean(job.payload.hostLocalPath),
273
+ worktreePath
274
+ });
275
+ await client.ackJob(job.id, {
276
+ status: "completed",
277
+ branchName: job.payload.branchName,
278
+ runtimeSessionId,
279
+ worktreePath
280
+ });
281
+ }
282
+ catch (error) {
283
+ await client.ackJob(job.id, {
284
+ status: "failed",
285
+ errorMessage: error instanceof Error ? error.message : "summary job failed"
286
+ });
287
+ }
288
+ finally {
289
+ activeState.conversationIds.delete(job.conversationId);
290
+ }
291
+ }
292
+ async function setupLocalConversationFolder(job) {
293
+ const worktreePath = job.payload.hostLocalPath ?? "";
294
+ await access(worktreePath);
295
+ return {
296
+ branchName: branchNameForConversation({
297
+ conversationId: job.conversationId,
298
+ conversationType: job.payload.conversationType,
299
+ prompt: job.payload.taskTitle ?? job.payload.prompt
300
+ }),
301
+ repoPath: undefined,
302
+ worktreePath
303
+ };
304
+ }
305
+ async function commitAndPushConversation(client, job) {
306
+ await client.ackJob(job.id, { status: "running" });
307
+ try {
308
+ const result = await commitAndPushWorktree({
309
+ worktreePath: job.payload.worktreePath,
310
+ branchName: job.payload.branchName,
311
+ commitMessage: job.payload.commitMessage
312
+ });
313
+ const prResult = await tryCreatePullRequest({
314
+ worktreePath: job.payload.worktreePath,
315
+ branchName: job.payload.branchName
316
+ });
317
+ await client.ackJob(job.id, {
318
+ status: "completed",
319
+ commitSha: result.commitSha,
320
+ prUrl: "prUrl" in prResult ? prResult.prUrl : undefined,
321
+ errorMessage: "errorMessage" in prResult ? prResult.errorMessage : undefined
322
+ });
323
+ }
324
+ catch (error) {
325
+ await client.ackJob(job.id, {
326
+ status: "failed",
327
+ errorMessage: error instanceof Error ? error.message : "commit and push failed"
328
+ });
329
+ }
330
+ }
331
+ async function cleanupWorktree(args) {
332
+ const workspaceRoot = process.env.ABITAT_WORKSPACE_ROOT ?? `${homedir()}/AbitatWorkspace`;
333
+ const repoUrl = readOption(args, "--repo-url") ?? "";
334
+ const worktreePath = readOption(args, "--path") ?? "";
335
+ if (!repoUrl || !worktreePath) {
336
+ throw new Error("Usage: abitat-host cleanup-worktree --repo-url <url> --path <worktree>");
337
+ }
338
+ await cleanupConversationWorktree({
339
+ workspaceRoot,
340
+ repoPath: resolveRepoPath(workspaceRoot, repoUrl),
341
+ worktreePath
342
+ });
343
+ console.log(`cleanup=${worktreePath}`);
344
+ }
345
+ async function readConfigIfAvailable(path) {
346
+ try {
347
+ return await loadHostConfig(path);
348
+ }
349
+ catch {
350
+ return null;
351
+ }
352
+ }
353
+ function readOption(args, option) {
354
+ const index = args.indexOf(option);
355
+ return index >= 0 ? args[index + 1] : undefined;
356
+ }
357
+ async function stopDaemon(client, connection) {
358
+ if (connection.paired) {
359
+ await client
360
+ .heartbeat({
361
+ machineId: connection.machineId,
362
+ status: "offline"
363
+ })
364
+ .catch((error) => {
365
+ console.error(error instanceof Error ? error.message : "offline heartbeat failed");
366
+ });
367
+ }
368
+ console.log("status=stopped");
369
+ process.exit(0);
370
+ }
371
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function createRetryableTask(task: () => Promise<void>): {
2
+ readonly completed: boolean;
3
+ run(): Promise<void>;
4
+ };
5
+ //# sourceMappingURL=retryable-task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retryable-task.d.ts","sourceRoot":"","sources":["../../src/cli/retryable-task.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;;;EAiB5D"}
@@ -0,0 +1,16 @@
1
+ export function createRetryableTask(task) {
2
+ let completed = false;
3
+ return {
4
+ get completed() {
5
+ return completed;
6
+ },
7
+ async run() {
8
+ if (completed) {
9
+ return;
10
+ }
11
+ await task();
12
+ completed = true;
13
+ }
14
+ };
15
+ }
16
+ //# sourceMappingURL=retryable-task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retryable-task.js","sourceRoot":"","sources":["../../src/cli/retryable-task.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,IAAyB;IAC3D,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,OAAO;QACL,IAAI,SAAS;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,GAAG;YACP,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YAED,MAAM,IAAI,EAAE,CAAC;YACb,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface StartOptions {
2
+ mock: boolean;
3
+ }
4
+ export declare function parseStartOptions(args: string[]): StartOptions;
5
+ //# sourceMappingURL=start-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-options.d.ts","sourceRoot":"","sources":["../../src/cli/start-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAI9D"}
@@ -0,0 +1,6 @@
1
+ export function parseStartOptions(args) {
2
+ return {
3
+ mock: args.includes("--mock")
4
+ };
5
+ }
6
+ //# sourceMappingURL=start-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-options.js","sourceRoot":"","sources":["../../src/cli/start-options.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface HostConfig {
2
+ apiUrl: string;
3
+ hostToken: string;
4
+ machineId: string;
5
+ workspaceId: string;
6
+ }
7
+ export declare function defaultConfigPath(): string;
8
+ export declare function loadHostConfig(path?: string): Promise<HostConfig>;
9
+ export declare function saveHostConfig(config: HostConfig, path?: string): Promise<void>;
10
+ //# sourceMappingURL=host-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host-config.d.ts","sourceRoot":"","sources":["../../src/config/host-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,WAEhC;AAED,wBAAsB,cAAc,CAAC,IAAI,SAAsB,uBAG9D;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,SAAsB,iBAGlF"}