@aiden-ade/sandbox-agent 0.1.60 → 0.1.62
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/dist/index.cjs +465 -342
- package/package.json +1 -1
- package/dist/__tests__/binding-switch-git.test.d.ts +0 -2
- package/dist/__tests__/binding-switch-git.test.d.ts.map +0 -1
- package/dist/__tests__/binding-switch-git.test.js +0 -610
- package/dist/__tests__/binding-switch-git.test.js.map +0 -1
- package/dist/__tests__/cli-ensure-install.test.d.ts +0 -2
- package/dist/__tests__/cli-ensure-install.test.d.ts.map +0 -1
- package/dist/__tests__/cli-ensure-install.test.js +0 -109
- package/dist/__tests__/cli-ensure-install.test.js.map +0 -1
- package/dist/__tests__/cli-executable.test.d.ts +0 -2
- package/dist/__tests__/cli-executable.test.d.ts.map +0 -1
- package/dist/__tests__/cli-executable.test.js +0 -129
- package/dist/__tests__/cli-executable.test.js.map +0 -1
- package/dist/__tests__/cli-help.test.d.ts +0 -2
- package/dist/__tests__/cli-help.test.d.ts.map +0 -1
- package/dist/__tests__/cli-help.test.js +0 -34
- package/dist/__tests__/cli-help.test.js.map +0 -1
- package/dist/__tests__/computer-readiness.test.d.ts +0 -2
- package/dist/__tests__/computer-readiness.test.d.ts.map +0 -1
- package/dist/__tests__/computer-readiness.test.js +0 -63
- package/dist/__tests__/computer-readiness.test.js.map +0 -1
- package/dist/__tests__/core-agent-workflow-context.test.d.ts +0 -2
- package/dist/__tests__/core-agent-workflow-context.test.d.ts.map +0 -1
- package/dist/__tests__/core-agent-workflow-context.test.js +0 -139
- package/dist/__tests__/core-agent-workflow-context.test.js.map +0 -1
- package/dist/__tests__/daemon-reconcile-ask.test.d.ts +0 -2
- package/dist/__tests__/daemon-reconcile-ask.test.d.ts.map +0 -1
- package/dist/__tests__/daemon-reconcile-ask.test.js +0 -86
- package/dist/__tests__/daemon-reconcile-ask.test.js.map +0 -1
- package/dist/__tests__/daemon-socket.integration.test.d.ts +0 -2
- package/dist/__tests__/daemon-socket.integration.test.d.ts.map +0 -1
- package/dist/__tests__/daemon-socket.integration.test.js +0 -450
- package/dist/__tests__/daemon-socket.integration.test.js.map +0 -1
- package/dist/__tests__/daemon.test.d.ts +0 -2
- package/dist/__tests__/daemon.test.d.ts.map +0 -1
- package/dist/__tests__/daemon.test.js +0 -3975
- package/dist/__tests__/daemon.test.js.map +0 -1
- package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts +0 -2
- package/dist/__tests__/ensure-shared-checkout-branch.test.d.ts.map +0 -1
- package/dist/__tests__/ensure-shared-checkout-branch.test.js +0 -129
- package/dist/__tests__/ensure-shared-checkout-branch.test.js.map +0 -1
- package/dist/__tests__/event-outbox-persist-failure.test.d.ts +0 -2
- package/dist/__tests__/event-outbox-persist-failure.test.d.ts.map +0 -1
- package/dist/__tests__/event-outbox-persist-failure.test.js +0 -84
- package/dist/__tests__/event-outbox-persist-failure.test.js.map +0 -1
- package/dist/__tests__/event-outbox.test.d.ts +0 -2
- package/dist/__tests__/event-outbox.test.d.ts.map +0 -1
- package/dist/__tests__/event-outbox.test.js +0 -256
- package/dist/__tests__/event-outbox.test.js.map +0 -1
- package/dist/__tests__/fake-provider-cli.test.d.ts +0 -2
- package/dist/__tests__/fake-provider-cli.test.d.ts.map +0 -1
- package/dist/__tests__/fake-provider-cli.test.js +0 -46
- package/dist/__tests__/fake-provider-cli.test.js.map +0 -1
- package/dist/__tests__/generated-images.test.d.ts +0 -2
- package/dist/__tests__/generated-images.test.d.ts.map +0 -1
- package/dist/__tests__/generated-images.test.js +0 -132
- package/dist/__tests__/generated-images.test.js.map +0 -1
- package/dist/__tests__/lifecycle-logger.test.d.ts +0 -2
- package/dist/__tests__/lifecycle-logger.test.d.ts.map +0 -1
- package/dist/__tests__/lifecycle-logger.test.js +0 -49
- package/dist/__tests__/lifecycle-logger.test.js.map +0 -1
- package/dist/__tests__/local-skill-scan.test.d.ts +0 -2
- package/dist/__tests__/local-skill-scan.test.d.ts.map +0 -1
- package/dist/__tests__/local-skill-scan.test.js +0 -91
- package/dist/__tests__/local-skill-scan.test.js.map +0 -1
- package/dist/__tests__/local-workspace-migration.test.d.ts +0 -2
- package/dist/__tests__/local-workspace-migration.test.d.ts.map +0 -1
- package/dist/__tests__/local-workspace-migration.test.js +0 -195
- package/dist/__tests__/local-workspace-migration.test.js.map +0 -1
- package/dist/__tests__/mcp-inspect-timeout.test.d.ts +0 -2
- package/dist/__tests__/mcp-inspect-timeout.test.d.ts.map +0 -1
- package/dist/__tests__/mcp-inspect-timeout.test.js +0 -97
- package/dist/__tests__/mcp-inspect-timeout.test.js.map +0 -1
- package/dist/__tests__/mcp-readiness.test.d.ts +0 -2
- package/dist/__tests__/mcp-readiness.test.d.ts.map +0 -1
- package/dist/__tests__/mcp-readiness.test.js +0 -267
- package/dist/__tests__/mcp-readiness.test.js.map +0 -1
- package/dist/__tests__/mcp-registration-cli.test.d.ts +0 -2
- package/dist/__tests__/mcp-registration-cli.test.d.ts.map +0 -1
- package/dist/__tests__/mcp-registration-cli.test.js +0 -71
- package/dist/__tests__/mcp-registration-cli.test.js.map +0 -1
- package/dist/__tests__/mcp-registration.test.d.ts +0 -2
- package/dist/__tests__/mcp-registration.test.d.ts.map +0 -1
- package/dist/__tests__/mcp-registration.test.js +0 -426
- package/dist/__tests__/mcp-registration.test.js.map +0 -1
- package/dist/__tests__/model-scan-runner.test.d.ts +0 -2
- package/dist/__tests__/model-scan-runner.test.d.ts.map +0 -1
- package/dist/__tests__/model-scan-runner.test.js +0 -67
- package/dist/__tests__/model-scan-runner.test.js.map +0 -1
- package/dist/__tests__/network-diagnostics.test.d.ts +0 -2
- package/dist/__tests__/network-diagnostics.test.d.ts.map +0 -1
- package/dist/__tests__/network-diagnostics.test.js +0 -26
- package/dist/__tests__/network-diagnostics.test.js.map +0 -1
- package/dist/__tests__/observable-map.test.d.ts +0 -2
- package/dist/__tests__/observable-map.test.d.ts.map +0 -1
- package/dist/__tests__/observable-map.test.js +0 -54
- package/dist/__tests__/observable-map.test.js.map +0 -1
- package/dist/__tests__/provider-auth-preflight.test.d.ts +0 -2
- package/dist/__tests__/provider-auth-preflight.test.d.ts.map +0 -1
- package/dist/__tests__/provider-auth-preflight.test.js +0 -123
- package/dist/__tests__/provider-auth-preflight.test.js.map +0 -1
- package/dist/__tests__/provider-model-discovery.test.d.ts +0 -2
- package/dist/__tests__/provider-model-discovery.test.d.ts.map +0 -1
- package/dist/__tests__/provider-model-discovery.test.js +0 -472
- package/dist/__tests__/provider-model-discovery.test.js.map +0 -1
- package/dist/__tests__/remove-worktrees-if-clean.test.d.ts +0 -2
- package/dist/__tests__/remove-worktrees-if-clean.test.d.ts.map +0 -1
- package/dist/__tests__/remove-worktrees-if-clean.test.js +0 -221
- package/dist/__tests__/remove-worktrees-if-clean.test.js.map +0 -1
- package/dist/__tests__/resume-fallback-env.test.d.ts +0 -2
- package/dist/__tests__/resume-fallback-env.test.d.ts.map +0 -1
- package/dist/__tests__/resume-fallback-env.test.js +0 -28
- package/dist/__tests__/resume-fallback-env.test.js.map +0 -1
- package/dist/__tests__/run-journal.test.d.ts +0 -2
- package/dist/__tests__/run-journal.test.d.ts.map +0 -1
- package/dist/__tests__/run-journal.test.js +0 -121
- package/dist/__tests__/run-journal.test.js.map +0 -1
- package/dist/__tests__/run-start-gate.test.d.ts +0 -2
- package/dist/__tests__/run-start-gate.test.d.ts.map +0 -1
- package/dist/__tests__/run-start-gate.test.js +0 -29
- package/dist/__tests__/run-start-gate.test.js.map +0 -1
- package/dist/__tests__/runtime-capabilities-sync.test.d.ts +0 -2
- package/dist/__tests__/runtime-capabilities-sync.test.d.ts.map +0 -1
- package/dist/__tests__/runtime-capabilities-sync.test.js +0 -66
- package/dist/__tests__/runtime-capabilities-sync.test.js.map +0 -1
- package/dist/__tests__/runtime-config.test.d.ts +0 -2
- package/dist/__tests__/runtime-config.test.d.ts.map +0 -1
- package/dist/__tests__/runtime-config.test.js +0 -102
- package/dist/__tests__/runtime-config.test.js.map +0 -1
- package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts +0 -2
- package/dist/__tests__/runtime-presenter-heartbeat.test.d.ts.map +0 -1
- package/dist/__tests__/runtime-presenter-heartbeat.test.js +0 -159
- package/dist/__tests__/runtime-presenter-heartbeat.test.js.map +0 -1
- package/dist/__tests__/sandbox-outbox.test.d.ts +0 -2
- package/dist/__tests__/sandbox-outbox.test.d.ts.map +0 -1
- package/dist/__tests__/sandbox-outbox.test.js +0 -214
- package/dist/__tests__/sandbox-outbox.test.js.map +0 -1
- package/dist/__tests__/sandbox-workflow-context.test.d.ts +0 -2
- package/dist/__tests__/sandbox-workflow-context.test.d.ts.map +0 -1
- package/dist/__tests__/sandbox-workflow-context.test.js +0 -396
- package/dist/__tests__/sandbox-workflow-context.test.js.map +0 -1
- package/dist/__tests__/service-manager.test.d.ts +0 -2
- package/dist/__tests__/service-manager.test.d.ts.map +0 -1
- package/dist/__tests__/service-manager.test.js +0 -50
- package/dist/__tests__/service-manager.test.js.map +0 -1
- package/dist/__tests__/sleep-inhibitor.test.d.ts +0 -2
- package/dist/__tests__/sleep-inhibitor.test.d.ts.map +0 -1
- package/dist/__tests__/sleep-inhibitor.test.js +0 -236
- package/dist/__tests__/sleep-inhibitor.test.js.map +0 -1
- package/dist/__tests__/status-local-workspace.test.d.ts +0 -2
- package/dist/__tests__/status-local-workspace.test.d.ts.map +0 -1
- package/dist/__tests__/status-local-workspace.test.js +0 -121
- package/dist/__tests__/status-local-workspace.test.js.map +0 -1
- package/dist/__tests__/suspension-detector.test.d.ts +0 -2
- package/dist/__tests__/suspension-detector.test.d.ts.map +0 -1
- package/dist/__tests__/suspension-detector.test.js +0 -112
- package/dist/__tests__/suspension-detector.test.js.map +0 -1
- package/dist/__tests__/web-presenter-parent-events.test.d.ts +0 -2
- package/dist/__tests__/web-presenter-parent-events.test.d.ts.map +0 -1
- package/dist/__tests__/web-presenter-parent-events.test.js +0 -130
- package/dist/__tests__/web-presenter-parent-events.test.js.map +0 -1
- package/dist/__tests__/workspace-relocation.test.d.ts +0 -2
- package/dist/__tests__/workspace-relocation.test.d.ts.map +0 -1
- package/dist/__tests__/workspace-relocation.test.js +0 -66
- package/dist/__tests__/workspace-relocation.test.js.map +0 -1
- package/dist/__tests__/workspace-run-lease.test.d.ts +0 -2
- package/dist/__tests__/workspace-run-lease.test.d.ts.map +0 -1
- package/dist/__tests__/workspace-run-lease.test.js +0 -230
- package/dist/__tests__/workspace-run-lease.test.js.map +0 -1
- package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts +0 -2
- package/dist/__tests__/ws-client-heartbeat-volatile.test.d.ts.map +0 -1
- package/dist/__tests__/ws-client-heartbeat-volatile.test.js +0 -61
- package/dist/__tests__/ws-client-heartbeat-volatile.test.js.map +0 -1
- package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts +0 -2
- package/dist/__tests__/ws-client-heartbeat.integration.test.d.ts.map +0 -1
- package/dist/__tests__/ws-client-heartbeat.integration.test.js +0 -109
- package/dist/__tests__/ws-client-heartbeat.integration.test.js.map +0 -1
- package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts +0 -2
- package/dist/__tests__/ws-client-user-message-ack.integration.test.d.ts.map +0 -1
- package/dist/__tests__/ws-client-user-message-ack.integration.test.js +0 -167
- package/dist/__tests__/ws-client-user-message-ack.integration.test.js.map +0 -1
- package/dist/aiden-system-prompt.d.ts +0 -6
- package/dist/aiden-system-prompt.d.ts.map +0 -1
- package/dist/aiden-system-prompt.js +0 -6
- package/dist/aiden-system-prompt.js.map +0 -1
- package/dist/binding-switch-git.d.ts +0 -26
- package/dist/binding-switch-git.d.ts.map +0 -1
- package/dist/binding-switch-git.js +0 -973
- package/dist/binding-switch-git.js.map +0 -1
- package/dist/cli-ensure-install.d.ts +0 -39
- package/dist/cli-ensure-install.d.ts.map +0 -1
- package/dist/cli-ensure-install.js +0 -133
- package/dist/cli-ensure-install.js.map +0 -1
- package/dist/cli-executable.d.ts +0 -97
- package/dist/cli-executable.d.ts.map +0 -1
- package/dist/cli-executable.js +0 -432
- package/dist/cli-executable.js.map +0 -1
- package/dist/cli-help.d.ts +0 -7
- package/dist/cli-help.d.ts.map +0 -1
- package/dist/cli-help.js +0 -49
- package/dist/cli-help.js.map +0 -1
- package/dist/computer-readiness.d.ts +0 -42
- package/dist/computer-readiness.d.ts.map +0 -1
- package/dist/computer-readiness.js +0 -191
- package/dist/computer-readiness.js.map +0 -1
- package/dist/core-agent.d.ts +0 -47
- package/dist/core-agent.d.ts.map +0 -1
- package/dist/core-agent.js +0 -364
- package/dist/core-agent.js.map +0 -1
- package/dist/daemon.d.ts +0 -392
- package/dist/daemon.d.ts.map +0 -1
- package/dist/daemon.js +0 -4711
- package/dist/daemon.js.map +0 -1
- package/dist/event-outbox.d.ts +0 -83
- package/dist/event-outbox.d.ts.map +0 -1
- package/dist/event-outbox.js +0 -440
- package/dist/event-outbox.js.map +0 -1
- package/dist/fake-provider-cli.d.ts +0 -13
- package/dist/fake-provider-cli.d.ts.map +0 -1
- package/dist/fake-provider-cli.js +0 -53
- package/dist/fake-provider-cli.js.map +0 -1
- package/dist/generated-images.d.ts +0 -2
- package/dist/generated-images.d.ts.map +0 -1
- package/dist/generated-images.js +0 -2
- package/dist/generated-images.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -209
- package/dist/index.js.map +0 -1
- package/dist/lifecycle-logger.d.ts +0 -25
- package/dist/lifecycle-logger.d.ts.map +0 -1
- package/dist/lifecycle-logger.js +0 -73
- package/dist/lifecycle-logger.js.map +0 -1
- package/dist/local-skill-scan.d.ts +0 -21
- package/dist/local-skill-scan.d.ts.map +0 -1
- package/dist/local-skill-scan.js +0 -109
- package/dist/local-skill-scan.js.map +0 -1
- package/dist/local-workspace-migration.d.ts +0 -68
- package/dist/local-workspace-migration.d.ts.map +0 -1
- package/dist/local-workspace-migration.js +0 -157
- package/dist/local-workspace-migration.js.map +0 -1
- package/dist/mcp-readiness.d.ts +0 -59
- package/dist/mcp-readiness.d.ts.map +0 -1
- package/dist/mcp-readiness.js +0 -202
- package/dist/mcp-readiness.js.map +0 -1
- package/dist/mcp-registration.d.ts +0 -75
- package/dist/mcp-registration.d.ts.map +0 -1
- package/dist/mcp-registration.js +0 -563
- package/dist/mcp-registration.js.map +0 -1
- package/dist/model-scan-runner.d.ts +0 -15
- package/dist/model-scan-runner.d.ts.map +0 -1
- package/dist/model-scan-runner.js +0 -51
- package/dist/model-scan-runner.js.map +0 -1
- package/dist/network-diagnostics.d.ts +0 -8
- package/dist/network-diagnostics.d.ts.map +0 -1
- package/dist/network-diagnostics.js +0 -56
- package/dist/network-diagnostics.js.map +0 -1
- package/dist/observable-map.d.ts +0 -25
- package/dist/observable-map.d.ts.map +0 -1
- package/dist/observable-map.js +0 -42
- package/dist/observable-map.js.map +0 -1
- package/dist/provider-auth-preflight.d.ts +0 -22
- package/dist/provider-auth-preflight.d.ts.map +0 -1
- package/dist/provider-auth-preflight.js +0 -110
- package/dist/provider-auth-preflight.js.map +0 -1
- package/dist/provider-model-discovery.d.ts +0 -38
- package/dist/provider-model-discovery.d.ts.map +0 -1
- package/dist/provider-model-discovery.js +0 -519
- package/dist/provider-model-discovery.js.map +0 -1
- package/dist/resume-fallback-env.d.ts +0 -20
- package/dist/resume-fallback-env.d.ts.map +0 -1
- package/dist/resume-fallback-env.js +0 -30
- package/dist/resume-fallback-env.js.map +0 -1
- package/dist/run-journal.d.ts +0 -53
- package/dist/run-journal.d.ts.map +0 -1
- package/dist/run-journal.js +0 -193
- package/dist/run-journal.js.map +0 -1
- package/dist/run-start-gate.d.ts +0 -9
- package/dist/run-start-gate.d.ts.map +0 -1
- package/dist/run-start-gate.js +0 -24
- package/dist/run-start-gate.js.map +0 -1
- package/dist/runtime-backends.d.ts +0 -2
- package/dist/runtime-backends.d.ts.map +0 -1
- package/dist/runtime-backends.js +0 -2
- package/dist/runtime-backends.js.map +0 -1
- package/dist/runtime-capabilities-sync.d.ts +0 -33
- package/dist/runtime-capabilities-sync.d.ts.map +0 -1
- package/dist/runtime-capabilities-sync.js +0 -56
- package/dist/runtime-capabilities-sync.js.map +0 -1
- package/dist/runtime-config.d.ts +0 -24
- package/dist/runtime-config.d.ts.map +0 -1
- package/dist/runtime-config.js +0 -124
- package/dist/runtime-config.js.map +0 -1
- package/dist/sandbox-outbox.d.ts +0 -122
- package/dist/sandbox-outbox.d.ts.map +0 -1
- package/dist/sandbox-outbox.js +0 -180
- package/dist/sandbox-outbox.js.map +0 -1
- package/dist/sandbox.d.ts +0 -44
- package/dist/sandbox.d.ts.map +0 -1
- package/dist/sandbox.js +0 -438
- package/dist/sandbox.js.map +0 -1
- package/dist/service-manager.d.ts +0 -28
- package/dist/service-manager.d.ts.map +0 -1
- package/dist/service-manager.js +0 -259
- package/dist/service-manager.js.map +0 -1
- package/dist/sleep-inhibitor.d.ts +0 -111
- package/dist/sleep-inhibitor.d.ts.map +0 -1
- package/dist/sleep-inhibitor.js +0 -412
- package/dist/sleep-inhibitor.js.map +0 -1
- package/dist/suspension-detector.d.ts +0 -48
- package/dist/suspension-detector.d.ts.map +0 -1
- package/dist/suspension-detector.js +0 -89
- package/dist/suspension-detector.js.map +0 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -6
- package/dist/types.js.map +0 -1
- package/dist/updater.d.ts +0 -15
- package/dist/updater.d.ts.map +0 -1
- package/dist/updater.js +0 -50
- package/dist/updater.js.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -2
- package/dist/version.js.map +0 -1
- package/dist/web-presenter.d.ts +0 -55
- package/dist/web-presenter.d.ts.map +0 -1
- package/dist/web-presenter.js +0 -265
- package/dist/web-presenter.js.map +0 -1
- package/dist/workspace-relocation.d.ts +0 -22
- package/dist/workspace-relocation.d.ts.map +0 -1
- package/dist/workspace-relocation.js +0 -90
- package/dist/workspace-relocation.js.map +0 -1
- package/dist/workspace-run-lease.d.ts +0 -97
- package/dist/workspace-run-lease.d.ts.map +0 -1
- package/dist/workspace-run-lease.js +0 -241
- package/dist/workspace-run-lease.js.map +0 -1
- package/dist/ws-client.d.ts +0 -194
- package/dist/ws-client.d.ts.map +0 -1
- package/dist/ws-client.js +0 -282
- package/dist/ws-client.js.map +0 -1
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { accessSync, constants, existsSync, statSync } from "node:fs";
|
|
2
|
-
import { configExistsAtPath } from "./runtime-config.js";
|
|
3
|
-
export class WorkspaceAccessTracker {
|
|
4
|
-
inspect;
|
|
5
|
-
issue = null;
|
|
6
|
-
constructor(inspect = (path) => inspectWorkspaceReadiness(path)) {
|
|
7
|
-
this.inspect = inspect;
|
|
8
|
-
}
|
|
9
|
-
track(path, readiness) {
|
|
10
|
-
if (readiness.ready) {
|
|
11
|
-
this.issue = null;
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
this.issue = { path, readiness };
|
|
15
|
-
}
|
|
16
|
-
recheck() {
|
|
17
|
-
if (!this.issue)
|
|
18
|
-
return null;
|
|
19
|
-
const readiness = this.inspect(this.issue.path);
|
|
20
|
-
if (readiness.ready) {
|
|
21
|
-
this.issue = null;
|
|
22
|
-
return readiness;
|
|
23
|
-
}
|
|
24
|
-
this.issue = { path: this.issue.path, readiness };
|
|
25
|
-
return readiness;
|
|
26
|
-
}
|
|
27
|
-
recoveryPath() {
|
|
28
|
-
return this.issue?.path ?? null;
|
|
29
|
-
}
|
|
30
|
-
currentReadiness() {
|
|
31
|
-
return this.issue?.readiness ?? null;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
const DEFAULT_WORKSPACE_PROBE = {
|
|
35
|
-
stat: (path) => statSync(path),
|
|
36
|
-
access: (path, mode) => accessSync(path, mode),
|
|
37
|
-
exists: (path) => existsSync(path),
|
|
38
|
-
};
|
|
39
|
-
function workspaceVolumeRoot(path) {
|
|
40
|
-
const windowsDrive = path.match(/^([A-Za-z]):[\\/]/);
|
|
41
|
-
if (windowsDrive)
|
|
42
|
-
return `${windowsDrive[1]}:\\`;
|
|
43
|
-
const parts = path.replace(/\\/g, "/").split("/").filter(Boolean);
|
|
44
|
-
if (parts[0] === "Volumes" && parts[1])
|
|
45
|
-
return `/Volumes/${parts[1]}`;
|
|
46
|
-
if (parts[0] === "mnt" && parts[1])
|
|
47
|
-
return `/mnt/${parts[1]}`;
|
|
48
|
-
if (parts[0] === "media" && parts[1] && parts[2]) {
|
|
49
|
-
return `/media/${parts[1]}/${parts[2]}`;
|
|
50
|
-
}
|
|
51
|
-
if (parts[0] === "run" && parts[1] === "media" && parts[2] && parts[3]) {
|
|
52
|
-
return `/run/media/${parts[2]}/${parts[3]}`;
|
|
53
|
-
}
|
|
54
|
-
return null;
|
|
55
|
-
}
|
|
56
|
-
function workspaceFailure(path, error, probe) {
|
|
57
|
-
const code = error?.code;
|
|
58
|
-
if (code === "EACCES" || code === "EPERM") {
|
|
59
|
-
return {
|
|
60
|
-
ready: false,
|
|
61
|
-
code: "workspace_permission_denied",
|
|
62
|
-
message: "Alan needs permission to access this project folder.",
|
|
63
|
-
action: { kind: "open_computers", label: "Allow access" },
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
const volumeRoot = workspaceVolumeRoot(path);
|
|
67
|
-
const volumeError = ["EIO", "ENODEV", "ENOTCONN", "ENXIO", "ESTALE"].includes(code ?? "");
|
|
68
|
-
const missingVolume = code === "ENOENT" && volumeRoot !== null && !probe.exists(volumeRoot);
|
|
69
|
-
if (volumeError || missingVolume) {
|
|
70
|
-
return {
|
|
71
|
-
ready: false,
|
|
72
|
-
code: "workspace_volume_unavailable",
|
|
73
|
-
message: "The drive containing this project is unavailable. Connect it and Alan will retry.",
|
|
74
|
-
action: { kind: "open_computers", label: "View computer" },
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
ready: false,
|
|
79
|
-
code: "workspace_missing",
|
|
80
|
-
message: "This project folder was moved or removed. Locate it before starting the run.",
|
|
81
|
-
action: { kind: "open_computers", label: "Locate project" },
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
export function inspectWorkspaceReadiness(workspacePath, probe = DEFAULT_WORKSPACE_PROBE) {
|
|
85
|
-
if (workspacePath === undefined) {
|
|
86
|
-
return {
|
|
87
|
-
ready: true,
|
|
88
|
-
message: "No explicit workspace path is required.",
|
|
89
|
-
action: null,
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
if (typeof workspacePath !== "string" || workspacePath.length === 0) {
|
|
93
|
-
return workspaceFailure("", Object.assign(new Error("missing"), { code: "ENOENT" }), probe);
|
|
94
|
-
}
|
|
95
|
-
try {
|
|
96
|
-
const stat = probe.stat(workspacePath);
|
|
97
|
-
if (!stat.isDirectory()) {
|
|
98
|
-
return workspaceFailure(workspacePath, Object.assign(new Error("not a directory"), { code: "ENOTDIR" }), probe);
|
|
99
|
-
}
|
|
100
|
-
probe.access(workspacePath, constants.R_OK | constants.W_OK | constants.X_OK);
|
|
101
|
-
return {
|
|
102
|
-
ready: true,
|
|
103
|
-
message: "Workspace path is configured and accessible.",
|
|
104
|
-
action: null,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
return workspaceFailure(workspacePath, error, probe);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
function check(key, status, message, options) {
|
|
112
|
-
return {
|
|
113
|
-
key,
|
|
114
|
-
status,
|
|
115
|
-
code: options?.code ?? null,
|
|
116
|
-
message,
|
|
117
|
-
action: options?.action ?? null,
|
|
118
|
-
checkedAtMs: options?.nowMs ?? Date.now(),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
export function buildComputerReadiness(input) {
|
|
122
|
-
const nowMs = input.nowMs ?? Date.now();
|
|
123
|
-
const configPresent = configExistsAtPath(input.configPath);
|
|
124
|
-
const configMatchesProfile = !configPresent ||
|
|
125
|
-
!input.configEndpointProfile ||
|
|
126
|
-
input.configEndpointProfile === input.endpointProfile ||
|
|
127
|
-
(input.endpointProfile === "custom" && input.configEndpointProfile === "custom");
|
|
128
|
-
const workspaceReadiness = inspectWorkspaceReadiness(input.workspacePath);
|
|
129
|
-
return [
|
|
130
|
-
check("machine_discovered", input.runtimeId ? "pass" : "fail", input.runtimeId ? "Runtime identity is configured." : "Runtime identity is missing.", { nowMs }),
|
|
131
|
-
check("config_present", configPresent ? "pass" : "fail", configPresent
|
|
132
|
-
? "Selected profile config file exists."
|
|
133
|
-
: "Selected profile config file is missing. Run setup or login.", {
|
|
134
|
-
nowMs,
|
|
135
|
-
code: configPresent ? undefined : "config_missing",
|
|
136
|
-
action: configPresent ? null : { kind: "run_setup", label: "Run setup" },
|
|
137
|
-
}),
|
|
138
|
-
check("config_matches_profile", !configMatchesProfile ? "fail" : input.endpointMismatchDetail ? "warn" : "pass", !configMatchesProfile
|
|
139
|
-
? "Config profile does not match the selected environment."
|
|
140
|
-
: input.endpointMismatchDetail
|
|
141
|
-
? `${input.endpointMismatchDetail} The daemon is using the profile endpoints instead — re-run setup to repair the stored config.`
|
|
142
|
-
: "Config profile matches the selected environment.", {
|
|
143
|
-
nowMs,
|
|
144
|
-
code: !configMatchesProfile
|
|
145
|
-
? "config_profile_mismatch"
|
|
146
|
-
: input.endpointMismatchDetail
|
|
147
|
-
? "config_endpoint_mismatch"
|
|
148
|
-
: undefined,
|
|
149
|
-
action: !configMatchesProfile || input.endpointMismatchDetail
|
|
150
|
-
? { kind: "run_setup", label: "Re-run setup" }
|
|
151
|
-
: null,
|
|
152
|
-
}),
|
|
153
|
-
check("runtime_auth_valid", input.runtimeAuthValid ? "pass" : "fail", input.runtimeAuthValid ? "Runtime token is present." : "Runtime token is missing or invalid.", {
|
|
154
|
-
nowMs,
|
|
155
|
-
code: input.runtimeAuthValid ? undefined : "runtime_auth_invalid",
|
|
156
|
-
action: input.runtimeAuthValid ? null : { kind: "run_setup", label: "Refresh setup" },
|
|
157
|
-
}),
|
|
158
|
-
check("local_api_healthy", input.localApiHealthy ? "pass" : "fail", input.localApiHealthy
|
|
159
|
-
? "Local daemon API is reachable."
|
|
160
|
-
: "Local daemon API is unreachable or token mismatched.", {
|
|
161
|
-
nowMs,
|
|
162
|
-
code: input.localApiHealthy ? undefined : "local_api_unhealthy",
|
|
163
|
-
action: input.localApiHealthy ? null : { kind: "reconnect", label: "Reconnect" },
|
|
164
|
-
}),
|
|
165
|
-
check("ws_connected", input.connected ? "pass" : "fail", input.connected
|
|
166
|
-
? "Daemon is connected to Alan backend."
|
|
167
|
-
: "Daemon is disconnected from Alan backend.", {
|
|
168
|
-
nowMs,
|
|
169
|
-
code: input.connected ? undefined : "ws_disconnected",
|
|
170
|
-
action: input.connected ? null : { kind: "reconnect", label: "Reconnect" },
|
|
171
|
-
}),
|
|
172
|
-
check("workspace_ready", workspaceReadiness.ready ? "pass" : "fail", workspaceReadiness.message, {
|
|
173
|
-
nowMs,
|
|
174
|
-
code: workspaceReadiness.code,
|
|
175
|
-
action: workspaceReadiness.action,
|
|
176
|
-
}),
|
|
177
|
-
check("provider_available", input.providerAvailable === false ? "fail" : "pass", input.providerAvailable === false
|
|
178
|
-
? "Requested provider CLI is not available."
|
|
179
|
-
: "Provider CLI availability looks good.", {
|
|
180
|
-
nowMs,
|
|
181
|
-
code: input.providerAvailable === false ? "provider_unavailable" : undefined,
|
|
182
|
-
action: input.providerAvailable === false
|
|
183
|
-
? { kind: "install_provider", label: "Install provider" }
|
|
184
|
-
: null,
|
|
185
|
-
}),
|
|
186
|
-
check("protocol_compatible", input.protocolCompatible === false ? "fail" : "pass", input.protocolCompatible === false
|
|
187
|
-
? "Daemon protocol is incompatible with backend."
|
|
188
|
-
: "Daemon protocol is compatible.", { nowMs, code: input.protocolCompatible === false ? "protocol_mismatch" : undefined }),
|
|
189
|
-
];
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=computer-readiness.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"computer-readiness.js","sourceRoot":"","sources":["../src/computer-readiness.ts"],"names":[],"mappings":"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"}
|
package/dist/core-agent.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sandbox CoreAgent — E2B-specific subclass of BaseMachineAgent.
|
|
3
|
-
*
|
|
4
|
-
* Platform responsibilities:
|
|
5
|
-
* - buildCliEnvironment: extend process.env + inject E2B node bin path
|
|
6
|
-
* - buildExtraSystemPromptParts: inject artifact IDs from ALAN_* env vars
|
|
7
|
-
* - submitAnswer / submitPlanApproval: resolve interactive-tool prompts relayed via WS
|
|
8
|
-
*
|
|
9
|
-
* Everything else (retry loop, system-prompt assembly, backend selection) lives
|
|
10
|
-
* in BaseMachineAgent.
|
|
11
|
-
*/
|
|
12
|
-
import type { ChildProcessWithoutNullStreams } from "node:child_process";
|
|
13
|
-
import { type AgentRuntimeConfig, BaseMachineAgent } from "@alan-ai/agent-core";
|
|
14
|
-
import type { AgentConfig } from "./types.js";
|
|
15
|
-
export declare class CoreAgent extends BaseMachineAgent {
|
|
16
|
-
private childProcess;
|
|
17
|
-
private _aborted;
|
|
18
|
-
private providerApiKey;
|
|
19
|
-
private onProviderSpawned?;
|
|
20
|
-
/** How long to wait after SIGTERM before escalating to SIGKILL. */
|
|
21
|
-
private static readonly SIGKILL_DELAY_MS;
|
|
22
|
-
constructor(presenter: ConstructorParameters<typeof BaseMachineAgent>[0], runtime: AgentRuntimeConfig & {
|
|
23
|
-
providerApiKey?: string;
|
|
24
|
-
onProviderSpawned?: (pid: number) => void;
|
|
25
|
-
});
|
|
26
|
-
abort(): void;
|
|
27
|
-
kill(): boolean;
|
|
28
|
-
private killChildProcess;
|
|
29
|
-
/**
|
|
30
|
-
* Re-resolve this agent's CLI executable from scratch when a spawn fails
|
|
31
|
-
* ENOENT. The daemon caches resolved CLI paths, so a provider binary that was
|
|
32
|
-
* moved or reinstalled mid-session would otherwise fail every turn with
|
|
33
|
-
* "CLI command not found" until the daemon restarts. Invalidating the cache
|
|
34
|
-
* and re-resolving once lets the current run recover against the new location.
|
|
35
|
-
*/
|
|
36
|
-
protected revalidateRuntimeCommand(): string | null;
|
|
37
|
-
/**
|
|
38
|
-
* Send a tool_result to the CLI's stdin (stream-json format).
|
|
39
|
-
* Used for interactive tools like AskUserQuestion and ExitPlanMode.
|
|
40
|
-
*/
|
|
41
|
-
sendToolResponse(toolId: string, response: string): boolean;
|
|
42
|
-
getProviderPid(): number | null;
|
|
43
|
-
protected getOnProcessSpawned(): ((child: ChildProcessWithoutNullStreams) => void) | undefined;
|
|
44
|
-
protected buildCliEnvironment(): Promise<Record<string, string>>;
|
|
45
|
-
protected buildExtraSystemPromptParts(config: AgentConfig): string[];
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=core-agent.d.ts.map
|
package/dist/core-agent.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-agent.d.ts","sourceRoot":"","sources":["../src/core-agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAAE,KAAK,kBAAkB,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAC;AAGjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,SAAU,SAAQ,gBAAgB;IAC7C,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,iBAAiB,CAAC,CAAwB;IAElD,mEAAmE;IACnE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;gBAG9C,SAAS,EAAE,qBAAqB,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAC5D,OAAO,EAAE,kBAAkB,GAAG;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;KAC3C;IAOI,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,OAAO;IAStB,OAAO,CAAC,gBAAgB;IA2BxB;;;;;;OAMG;IACH,SAAS,CAAC,wBAAwB,IAAI,MAAM,GAAG,IAAI;IAqBnD;;;OAGG;IACI,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO;IAoE3D,cAAc,IAAI,MAAM,GAAG,IAAI;IAItC,SAAS,CAAC,mBAAmB,IAAI,CAAC,CAAC,KAAK,EAAE,8BAA8B,KAAK,IAAI,CAAC,GAAG,SAAS;cAgB9E,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA0BtE,SAAS,CAAC,2BAA2B,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,EAAE;CAwKrE"}
|
package/dist/core-agent.js
DELETED
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Sandbox CoreAgent — E2B-specific subclass of BaseMachineAgent.
|
|
3
|
-
*
|
|
4
|
-
* Platform responsibilities:
|
|
5
|
-
* - buildCliEnvironment: extend process.env + inject E2B node bin path
|
|
6
|
-
* - buildExtraSystemPromptParts: inject artifact IDs from ALAN_* env vars
|
|
7
|
-
* - submitAnswer / submitPlanApproval: resolve interactive-tool prompts relayed via WS
|
|
8
|
-
*
|
|
9
|
-
* Everything else (retry loop, system-prompt assembly, backend selection) lives
|
|
10
|
-
* in BaseMachineAgent.
|
|
11
|
-
*/
|
|
12
|
-
import { platform } from "node:os";
|
|
13
|
-
import { BaseMachineAgent, killProcessTree } from "@alan-ai/agent-core";
|
|
14
|
-
import { ensureProviderCliInstalled } from "./cli-ensure-install.js";
|
|
15
|
-
import { getDaemonCliEnvironment, revalidateBackendRuntimeCommand } from "./cli-executable.js";
|
|
16
|
-
export class CoreAgent extends BaseMachineAgent {
|
|
17
|
-
childProcess = null;
|
|
18
|
-
_aborted = false;
|
|
19
|
-
providerApiKey;
|
|
20
|
-
onProviderSpawned;
|
|
21
|
-
/** How long to wait after SIGTERM before escalating to SIGKILL. */
|
|
22
|
-
static SIGKILL_DELAY_MS = 3000;
|
|
23
|
-
constructor(presenter, runtime) {
|
|
24
|
-
super(presenter, runtime);
|
|
25
|
-
this.providerApiKey = runtime.providerApiKey;
|
|
26
|
-
this.onProviderSpawned = runtime.onProviderSpawned;
|
|
27
|
-
}
|
|
28
|
-
abort() {
|
|
29
|
-
this._aborted = true;
|
|
30
|
-
super.abort();
|
|
31
|
-
}
|
|
32
|
-
kill() {
|
|
33
|
-
this._aborted = true;
|
|
34
|
-
super.abort();
|
|
35
|
-
const child = this.childProcess;
|
|
36
|
-
if (!child || child.killed || child.exitCode !== null)
|
|
37
|
-
return false;
|
|
38
|
-
return this.killChildProcess(child);
|
|
39
|
-
}
|
|
40
|
-
killChildProcess(child) {
|
|
41
|
-
const pid = child.pid;
|
|
42
|
-
if (!pid)
|
|
43
|
-
return false;
|
|
44
|
-
console.info("[CoreAgent] Killing agent process", { pid });
|
|
45
|
-
killProcessTree(pid, {
|
|
46
|
-
signal: "SIGTERM",
|
|
47
|
-
child,
|
|
48
|
-
onError: (stage, err) => console.warn(`[CoreAgent] SIGTERM failed (${stage})`, { pid, err }),
|
|
49
|
-
});
|
|
50
|
-
setTimeout(() => {
|
|
51
|
-
if (child.killed || child.exitCode !== null)
|
|
52
|
-
return;
|
|
53
|
-
console.warn("[CoreAgent] Escalating to SIGKILL", { pid });
|
|
54
|
-
killProcessTree(pid, {
|
|
55
|
-
signal: "SIGKILL",
|
|
56
|
-
child,
|
|
57
|
-
onError: (stage, err) => console.warn(`[CoreAgent] SIGKILL failed (${stage})`, { pid, err }),
|
|
58
|
-
});
|
|
59
|
-
}, CoreAgent.SIGKILL_DELAY_MS);
|
|
60
|
-
return true;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Re-resolve this agent's CLI executable from scratch when a spawn fails
|
|
64
|
-
* ENOENT. The daemon caches resolved CLI paths, so a provider binary that was
|
|
65
|
-
* moved or reinstalled mid-session would otherwise fail every turn with
|
|
66
|
-
* "CLI command not found" until the daemon restarts. Invalidating the cache
|
|
67
|
-
* and re-resolving once lets the current run recover against the new location.
|
|
68
|
-
*/
|
|
69
|
-
revalidateRuntimeCommand() {
|
|
70
|
-
const resolved = revalidateBackendRuntimeCommand(this.runtime.backendKind) ?? null;
|
|
71
|
-
if (!resolved && this.runtime.backendKind) {
|
|
72
|
-
// This hook is synchronous (agent-core spawn-retry contract), so a binary
|
|
73
|
-
// that is genuinely absent — not just relocated — cannot be installed
|
|
74
|
-
// inline. Kick off the one-shot on-demand install in the background so
|
|
75
|
-
// the next send resolves the CLI instead of dead-ending on ENOENT again.
|
|
76
|
-
const backendKind = this.runtime.backendKind;
|
|
77
|
-
void ensureProviderCliInstalled(backendKind).then((installed) => {
|
|
78
|
-
if (installed) {
|
|
79
|
-
console.info("[CoreAgent] Installed missing provider CLI after spawn ENOENT", {
|
|
80
|
-
backendKind,
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return resolved;
|
|
86
|
-
}
|
|
87
|
-
// ── Interactive tool response (WS relay → stdin) ───────────────────────
|
|
88
|
-
/**
|
|
89
|
-
* Send a tool_result to the CLI's stdin (stream-json format).
|
|
90
|
-
* Used for interactive tools like AskUserQuestion and ExitPlanMode.
|
|
91
|
-
*/
|
|
92
|
-
sendToolResponse(toolId, response) {
|
|
93
|
-
if (!this.childProcess)
|
|
94
|
-
return false;
|
|
95
|
-
const stdin = this.childProcess.stdin;
|
|
96
|
-
if (!stdin || stdin.destroyed)
|
|
97
|
-
return false;
|
|
98
|
-
// Ownership guard: never write an answer for a tool this agent never emitted.
|
|
99
|
-
// The daemon scopes delivery by run/conversation, but this is the structural
|
|
100
|
-
// backstop — a stdin write "succeeds" regardless of whether the tool_use id is
|
|
101
|
-
// this CLI's, so a mis-routed response must be rejected before it corrupts a
|
|
102
|
-
// foreign turn. Skip only if the presenter cannot answer ownership.
|
|
103
|
-
if (this.presenter.hasKnownToolUse && !this.presenter.hasKnownToolUse(toolId)) {
|
|
104
|
-
console.warn(`[CoreAgent] Ignoring tool_response for unknown tool ${toolId}`);
|
|
105
|
-
return false;
|
|
106
|
-
}
|
|
107
|
-
try {
|
|
108
|
-
let message;
|
|
109
|
-
if (this.presenter.pendingAskUserToolIds?.has(toolId)) {
|
|
110
|
-
// AskUserQuestion: the Claude CLI auto-denies this tool in bypassPermissions mode,
|
|
111
|
-
// producing a fallback assistant turn ("I asked a question but got no response…").
|
|
112
|
-
// The claude parser suppresses that fallback turn and keeps stdin open.
|
|
113
|
-
// The user's real answer must arrive as a NEW plain-text user turn — NOT a
|
|
114
|
-
// tool_result — because the CLI has already closed the tool_use/tool_result pair.
|
|
115
|
-
// Sending a tool_result for an auto-denied tool_use_id would be rejected or ignored.
|
|
116
|
-
// The desktop CoreAgent uses the same approach; keep both paths in sync.
|
|
117
|
-
this.presenter.pendingAskUserToolIds.delete(toolId);
|
|
118
|
-
this.presenter.onAskUserAnswered?.(toolId);
|
|
119
|
-
message = JSON.stringify({
|
|
120
|
-
type: "user",
|
|
121
|
-
message: {
|
|
122
|
-
role: "user",
|
|
123
|
-
content: [{ type: "text", text: response }],
|
|
124
|
-
},
|
|
125
|
-
session_id: "default",
|
|
126
|
-
parent_tool_use_id: null,
|
|
127
|
-
});
|
|
128
|
-
console.info(`[CoreAgent] Sent AskUserQuestion answer for tool ${toolId} as new user turn`);
|
|
129
|
-
}
|
|
130
|
-
else {
|
|
131
|
-
// Regular tool_result for ExitPlanMode and other interactive tools.
|
|
132
|
-
message = JSON.stringify({
|
|
133
|
-
type: "user",
|
|
134
|
-
message: {
|
|
135
|
-
role: "user",
|
|
136
|
-
content: [
|
|
137
|
-
{
|
|
138
|
-
type: "tool_result",
|
|
139
|
-
tool_use_id: toolId,
|
|
140
|
-
content: response,
|
|
141
|
-
},
|
|
142
|
-
],
|
|
143
|
-
},
|
|
144
|
-
session_id: "default",
|
|
145
|
-
parent_tool_use_id: null,
|
|
146
|
-
});
|
|
147
|
-
console.info(`[CoreAgent] Sent tool_response for tool ${toolId}`);
|
|
148
|
-
}
|
|
149
|
-
stdin.write(`${message}\n`);
|
|
150
|
-
return true;
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
console.error("[CoreAgent] Failed to write tool_response to stdin", err);
|
|
154
|
-
return false;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
// ── BaseMachineAgent hooks ─────────────────────────────────────────────
|
|
158
|
-
getProviderPid() {
|
|
159
|
-
return this.childProcess?.pid ?? null;
|
|
160
|
-
}
|
|
161
|
-
getOnProcessSpawned() {
|
|
162
|
-
return (child) => {
|
|
163
|
-
this.childProcess = child;
|
|
164
|
-
if (child.pid)
|
|
165
|
-
this.onProviderSpawned?.(child.pid);
|
|
166
|
-
child.on("exit", () => {
|
|
167
|
-
this.childProcess = null;
|
|
168
|
-
});
|
|
169
|
-
child.on("error", () => {
|
|
170
|
-
this.childProcess = null;
|
|
171
|
-
});
|
|
172
|
-
if (this._aborted) {
|
|
173
|
-
this.killChildProcess(child);
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
async buildCliEnvironment() {
|
|
178
|
-
const env = {};
|
|
179
|
-
for (const [key, value] of Object.entries(process.env)) {
|
|
180
|
-
if (value !== undefined)
|
|
181
|
-
env[key] = value;
|
|
182
|
-
}
|
|
183
|
-
const augmented = getDaemonCliEnvironment();
|
|
184
|
-
if (this.runtime.backendKind === "supatest_cli" && this.providerApiKey) {
|
|
185
|
-
augmented.SUPATEST_API_KEY = this.providerApiKey;
|
|
186
|
-
}
|
|
187
|
-
if (this.runtime.backendKind === "grok_cli" && this.providerApiKey) {
|
|
188
|
-
augmented.XAI_API_KEY = this.providerApiKey;
|
|
189
|
-
}
|
|
190
|
-
if (platform() !== "win32") {
|
|
191
|
-
const home = augmented.HOME ?? "/home/user";
|
|
192
|
-
const extraPaths = [`${home}/.local/node/bin`, `${home}/.local/bin`];
|
|
193
|
-
const separator = ":";
|
|
194
|
-
const basePath = augmented.PATH ?? "";
|
|
195
|
-
const existingSegments = new Set(basePath.split(separator).filter(Boolean));
|
|
196
|
-
const missing = extraPaths.filter((p) => !existingSegments.has(p));
|
|
197
|
-
if (missing.length > 0) {
|
|
198
|
-
augmented.PATH = `${missing.join(separator)}${separator}${basePath}`;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return augmented;
|
|
202
|
-
}
|
|
203
|
-
buildExtraSystemPromptParts(config) {
|
|
204
|
-
const parts = [];
|
|
205
|
-
// Inject current user identity so the agent knows who initiated the session.
|
|
206
|
-
if (config.currentUser) {
|
|
207
|
-
const u = config.currentUser;
|
|
208
|
-
const lines = ["# Current User"];
|
|
209
|
-
if (u.name)
|
|
210
|
-
lines.push(`- **Name**: ${u.name}`);
|
|
211
|
-
lines.push(`- **Email**: ${u.email}`);
|
|
212
|
-
lines.push(`- **User ID**: ${u.id}`);
|
|
213
|
-
lines.push("");
|
|
214
|
-
lines.push("This is the person who initiated this conversation. When creating tasks or assigning work, default to assigning to this user unless explicitly instructed otherwise.");
|
|
215
|
-
parts.push(lines.join("\n"));
|
|
216
|
-
}
|
|
217
|
-
// Inject task metadata so the agent has full context about the task it's working on.
|
|
218
|
-
// Prefer config.taskMeta (sent by the dispatch pipeline); fall back to env vars.
|
|
219
|
-
if (config.taskMeta) {
|
|
220
|
-
const meta = config.taskMeta;
|
|
221
|
-
const lines = ["# Task Context"];
|
|
222
|
-
lines.push(`- **Title**: ${meta.title}`);
|
|
223
|
-
lines.push(`- **Status**: ${meta.status.replace(/_/g, " ")}`);
|
|
224
|
-
if (meta.priority && meta.priority !== "none") {
|
|
225
|
-
lines.push(`- **Priority**: ${meta.priority.toUpperCase()}`);
|
|
226
|
-
}
|
|
227
|
-
if (meta.labels && meta.labels.length > 0) {
|
|
228
|
-
lines.push(`- **Labels**: ${meta.labels.join(", ")}`);
|
|
229
|
-
}
|
|
230
|
-
if (meta.assignees && meta.assignees.length > 0) {
|
|
231
|
-
const assigneeStr = meta.assignees.map((a) => a.name ?? a.email).join(", ");
|
|
232
|
-
lines.push(`- **Assignees**: ${assigneeStr}`);
|
|
233
|
-
}
|
|
234
|
-
if (meta.description) {
|
|
235
|
-
lines.push(`- **Description**:\n${meta.description}`);
|
|
236
|
-
}
|
|
237
|
-
if (meta.descriptionAttachmentIds && meta.descriptionAttachmentIds.length > 0) {
|
|
238
|
-
lines.push("");
|
|
239
|
-
lines.push("## Task Description Images");
|
|
240
|
-
lines.push('The task description contains images. Use the `attachment` MCP tool with op="get" to view them:');
|
|
241
|
-
for (const att of meta.descriptionAttachmentIds) {
|
|
242
|
-
lines.push(`- Attachment ID: \`${att.id}\` (${att.filename})`);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
if (meta.linkedResources && meta.linkedResources.length > 0) {
|
|
246
|
-
lines.push("");
|
|
247
|
-
lines.push("## Linked Task Resources");
|
|
248
|
-
for (const resource of meta.linkedResources) {
|
|
249
|
-
lines.push(`- ${resource.type}: "${resource.title}" (${resource.url ?? resource.id})`);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
parts.push(lines.join("\n"));
|
|
253
|
-
}
|
|
254
|
-
// Inject pull-request metadata for Review Agent sessions started from a PR.
|
|
255
|
-
if (config.prMeta) {
|
|
256
|
-
const pr = config.prMeta;
|
|
257
|
-
const lines = ["# Pull Request Context"];
|
|
258
|
-
lines.push(`- **Repo**: ${pr.owner}/${pr.repo}`);
|
|
259
|
-
lines.push(`- **PR**: #${pr.prNumber} — ${pr.title}`);
|
|
260
|
-
lines.push(`- **State**: ${pr.state}`);
|
|
261
|
-
if (pr.author)
|
|
262
|
-
lines.push(`- **Author**: ${pr.author}`);
|
|
263
|
-
const baseHead = `${pr.baseBranch || "?"} ← ${pr.headBranch || "?"}`;
|
|
264
|
-
lines.push(`- **Base ← Head**: ${baseHead}`);
|
|
265
|
-
if (pr.mergeable === false) {
|
|
266
|
-
lines.push(`- **Mergeable**: no`);
|
|
267
|
-
}
|
|
268
|
-
else if (pr.mergeable === true) {
|
|
269
|
-
lines.push(`- **Mergeable**: yes`);
|
|
270
|
-
}
|
|
271
|
-
if (pr.labels && pr.labels.length > 0) {
|
|
272
|
-
lines.push(`- **Labels**: ${pr.labels.join(", ")}`);
|
|
273
|
-
}
|
|
274
|
-
const sizeBits = [];
|
|
275
|
-
if (typeof pr.changedFilesCount === "number")
|
|
276
|
-
sizeBits.push(`${pr.changedFilesCount} files`);
|
|
277
|
-
if (typeof pr.additions === "number")
|
|
278
|
-
sizeBits.push(`+${pr.additions}`);
|
|
279
|
-
if (typeof pr.deletions === "number")
|
|
280
|
-
sizeBits.push(`-${pr.deletions}`);
|
|
281
|
-
if (sizeBits.length > 0)
|
|
282
|
-
lines.push(`- **Size**: ${sizeBits.join(" / ")}`);
|
|
283
|
-
if (pr.linkedTaskReadableId) {
|
|
284
|
-
lines.push(`- **Linked task**: ${pr.linkedTaskReadableId}`);
|
|
285
|
-
}
|
|
286
|
-
if (pr.linkedTaskId) {
|
|
287
|
-
lines.push(`- **Linked task ID**: ${pr.linkedTaskId}`);
|
|
288
|
-
}
|
|
289
|
-
if (pr.htmlUrl)
|
|
290
|
-
lines.push(`- **URL**: ${pr.htmlUrl}`);
|
|
291
|
-
if (pr.body) {
|
|
292
|
-
lines.push("");
|
|
293
|
-
lines.push("## PR Description");
|
|
294
|
-
lines.push(pr.body);
|
|
295
|
-
}
|
|
296
|
-
if (pr.changedFiles && pr.changedFiles.length > 0) {
|
|
297
|
-
lines.push("");
|
|
298
|
-
lines.push("## Changed Files (first 50)");
|
|
299
|
-
for (const file of pr.changedFiles) {
|
|
300
|
-
lines.push(`- ${file.status}: \`${file.path}\` (+${file.additions} / -${file.deletions})`);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
parts.push(lines.join("\n"));
|
|
304
|
-
}
|
|
305
|
-
// Inject artifact context so the agent associates MCP artifacts with the right owner.
|
|
306
|
-
// Session context dictates ownership: task session → taskId; workflow session →
|
|
307
|
-
// workflowId + workflowExecutionId. Never both. Prefer config fields (sent by
|
|
308
|
-
// dispatch pipeline); fall back to ALAN_* env vars.
|
|
309
|
-
const taskId = config.taskId ?? process.env.ALAN_TASK_ID;
|
|
310
|
-
const workflowId = config.workflowId ?? process.env.ALAN_WORKFLOW_ID;
|
|
311
|
-
const workflowExecutionId = config.workflowExecutionId ?? process.env.ALAN_WORKFLOW_EXECUTION_ID;
|
|
312
|
-
const conversationId = config.conversationId ?? process.env.ALAN_SESSION_ID;
|
|
313
|
-
const teamId = config.teamId ?? process.env.ALAN_TEAM_ID;
|
|
314
|
-
const artifactIds = [];
|
|
315
|
-
if (teamId)
|
|
316
|
-
artifactIds.push(`- teamId: "${teamId}"`);
|
|
317
|
-
// workflowId wins when present — workflow machine sessions always have ALAN_TASK_ID=machineId
|
|
318
|
-
// (not a real task), so taskId must not shadow workflowId for artifact routing.
|
|
319
|
-
// When workflowExecutionId is set but workflowId is missing, this is a workflow session
|
|
320
|
-
// where ALAN_WORKFLOW_ID wasn't injected — skip taskId entirely so the backend can
|
|
321
|
-
// auto-resolve workflow context from conversationId.
|
|
322
|
-
const isWorkflowSession = !!(workflowId || workflowExecutionId);
|
|
323
|
-
if (workflowId) {
|
|
324
|
-
artifactIds.push(`- workflowId: "${workflowId}"`);
|
|
325
|
-
if (workflowExecutionId)
|
|
326
|
-
artifactIds.push(`- workflowExecutionId: "${workflowExecutionId}"`);
|
|
327
|
-
}
|
|
328
|
-
else if (taskId && !isWorkflowSession) {
|
|
329
|
-
artifactIds.push(`- taskId: "${taskId}"`);
|
|
330
|
-
}
|
|
331
|
-
if (conversationId)
|
|
332
|
-
artifactIds.push(`- conversationId: "${conversationId}"`);
|
|
333
|
-
if (artifactIds.length > 0) {
|
|
334
|
-
const artifactTools = ["create_plan", "create_document_artifact", "create_test_report"];
|
|
335
|
-
if (taskId || isWorkflowSession)
|
|
336
|
-
artifactTools.push("upsert_prototype_version");
|
|
337
|
-
parts.push([
|
|
338
|
-
`When creating artifacts using MCP tools (${artifactTools.join(", ")}), always pass these IDs:`,
|
|
339
|
-
...artifactIds,
|
|
340
|
-
].join("\n"));
|
|
341
|
-
}
|
|
342
|
-
if (teamId && conversationId && !taskId && !isWorkflowSession) {
|
|
343
|
-
parts.push("This is a standalone chat. For create_plan, create_document_artifact, and create_test_report, omit taskId and workflowId; conversationId is the artifact owner. Do not use create_document unless the user explicitly asks for a standalone team Document.");
|
|
344
|
-
}
|
|
345
|
-
if (workflowId && conversationId && teamId) {
|
|
346
|
-
parts.push([
|
|
347
|
-
"## Prototype Artifacts",
|
|
348
|
-
"When the user asks to create, build, modify, or iterate on a prototype, do not create local prototype files such as prototype/index.html.",
|
|
349
|
-
"Instead, generate a Vite React TypeScript source snapshot and call the Alan MCP tool upsert_prototype_version with teamId, workflowId, workflowExecutionId, conversationId, title, sourceSnapshot, and packageJson.",
|
|
350
|
-
"For follow-up changes to the same prototype, call list_prototypes (with workflowId) or get_prototype if needed, then call upsert_prototype_version again with the existing prototypeId and parentVersionId.",
|
|
351
|
-
].join("\n"));
|
|
352
|
-
}
|
|
353
|
-
else if (taskId && conversationId && teamId) {
|
|
354
|
-
parts.push([
|
|
355
|
-
"## Prototype Artifacts",
|
|
356
|
-
"When the user asks to create, build, modify, or iterate on a prototype, do not create local prototype files such as prototype/index.html.",
|
|
357
|
-
"Instead, generate a Vite React TypeScript source snapshot and call the Alan MCP tool upsert_prototype_version with teamId, taskId, conversationId, title, sourceSnapshot, and packageJson.",
|
|
358
|
-
"For follow-up changes to the same prototype, call list_prototypes or get_prototype if needed, then call upsert_prototype_version again with the existing prototypeId and parentVersionId so the task Prototypes panel renders the new version.",
|
|
359
|
-
].join("\n"));
|
|
360
|
-
}
|
|
361
|
-
return parts;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
//# sourceMappingURL=core-agent.js.map
|
package/dist/core-agent.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"core-agent.js","sourceRoot":"","sources":["../src/core-agent.ts"],"names":[],"mappings":"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"}
|