@nowcrew/daemon 0.6.88-beta.3 → 0.6.88-beta.30
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/README.md +89 -14
- package/dist/agent-ability/controller.js +11 -1
- package/dist/agent-ability/git-errors.js +22 -0
- package/dist/agent-ability/materializer.js +21 -10
- package/dist/agent-ability/resolver.js +12 -4
- package/dist/agent-environment-contract.js +55 -0
- package/dist/agent-environment-control.js +24 -0
- package/dist/agent-environment-execution.js +98 -0
- package/dist/agent-environments.js +275 -0
- package/dist/agent-memory/policy.js +3 -1
- package/dist/automatic-daemon-installer.js +51 -2
- package/dist/automatic-install-target.js +8 -0
- package/dist/computer-main.js +18 -0
- package/dist/computer-profile.js +17 -4
- package/dist/computer-setup-client.js +318 -0
- package/dist/computer-setup-orchestration.js +203 -0
- package/dist/computer-setup.js +244 -0
- package/dist/config.js +30 -12
- package/dist/console-formatter.js +3 -3
- package/dist/console.js +15 -2
- package/dist/daemon-update-eligibility.js +1 -1
- package/dist/execution-journal.js +9 -6
- package/dist/execution-protocol.js +2 -1
- package/dist/execution-runner.js +16 -10
- package/dist/i18n.js +19 -0
- package/dist/list-models.js +13 -11
- package/dist/local-execution-lease.js +22 -0
- package/dist/local-executor.js +88 -92
- package/dist/local-memory/candidate.js +43 -0
- package/dist/local-memory/index-budget.js +8 -0
- package/dist/local-memory/inventory-cli.js +61 -0
- package/dist/local-memory/inventory-preview.js +159 -0
- package/dist/local-memory/inventory-source.js +159 -0
- package/dist/local-memory/pending-match.js +29 -0
- package/dist/local-memory/pending-query.js +100 -0
- package/dist/local-memory/pending-schema.js +29 -0
- package/dist/local-memory/pending-source.js +126 -0
- package/dist/local-memory/pending.js +34 -84
- package/dist/local-memory/prompt.js +20 -12
- package/dist/local-memory/read-cli.js +97 -12
- package/dist/local-memory/rollout.js +82 -0
- package/dist/local-memory/runtime.js +24 -17
- package/dist/local-memory/work-log-execution.js +31 -0
- package/dist/local-memory/work-log.js +58 -0
- package/dist/local-memory/write.js +27 -58
- package/dist/local-runtime-environment.js +50 -0
- package/dist/machine-environment-cache.js +147 -0
- package/dist/machine-environment-contract.js +10 -0
- package/dist/machine-environment-control.js +27 -0
- package/dist/machine-environment-policy.js +75 -0
- package/dist/machine-environment-process.js +110 -0
- package/dist/machine-info.js +70 -25
- package/dist/machine-runtime-environment.js +189 -0
- package/dist/machine-shell-environment-capture.js +135 -0
- package/dist/machine-windows-environment-capture.js +215 -0
- package/dist/machine-windows-environment-script.js +158 -0
- package/dist/main.js +4 -69
- package/dist/marketplace-controller.js +75 -0
- package/dist/marketplace-protocol.js +38 -0
- package/dist/marketplace-runner.js +234 -0
- package/dist/marketplace-serve.js +17 -0
- package/dist/message-file-preview.js +246 -0
- package/dist/native-thread-context.js +59 -0
- package/dist/pre-admission-rejection.js +64 -0
- package/dist/project-skills/execution-adapter.js +3 -2
- package/dist/project-skills/runtime-launch.js +14 -0
- package/dist/prompt.js +15 -15
- package/dist/provider-env.js +26 -15
- package/dist/runner.js +31 -19
- package/dist/runtime-environment-merge.js +16 -0
- package/dist/runtime-health-handler.js +10 -0
- package/dist/runtime-health.js +3 -1
- package/dist/runtime-path.js +22 -12
- package/dist/runtime-probe.js +35 -6
- package/dist/runtimes/acp-probe-transport.js +69 -0
- package/dist/runtimes/claude-models.js +20 -9
- package/dist/runtimes/claude-session-start-hook.js +24 -0
- package/dist/runtimes/claude-thread-runner.js +266 -0
- package/dist/runtimes/claude.js +23 -4
- package/dist/runtimes/codex-app-server-runner.js +43 -4
- package/dist/runtimes/deepseek-harness-launch.js +10 -0
- package/dist/runtimes/deepseek-harness-profile.js +92 -0
- package/dist/runtimes/deepseek-harness-runner.js +226 -0
- package/dist/runtimes/deepseek-harness.js +76 -15
- package/dist/runtimes/harness-probe-retry.js +42 -0
- package/dist/runtimes/hermes-models.js +2 -1
- package/dist/runtimes/kimi-acp-runner.js +84 -15
- package/dist/runtimes/opencode-runner.js +7 -1
- package/dist/runtimes/opencode.js +2 -2
- package/dist/serve.js +95 -184
- package/dist/server-url.js +25 -0
- package/dist/session.js +4 -0
- package/dist/slog.js +2 -1
- package/dist/storage-identity.js +0 -3
- package/dist/storage-runtime.js +2 -2
- package/dist/storage-serve-adapter.js +6 -72
- package/dist/supervised-runtime.js +28 -18
- package/dist/thread-input-delivery.js +217 -0
- package/dist/token.js +0 -1
- package/dist/workspace-control-handler.js +27 -0
- package/dist/workspace-fs.js +66 -15
- package/dist/workspace.js +1 -1
- package/package.json +5 -4
- package/dist/codex-home-launch.js +0 -7
- package/dist/codex-home-mode-controller.js +0 -68
- package/dist/daemon-migration-controller.js +0 -211
- package/dist/daemon-migration-wiring.js +0 -22
- package/dist/runtimes/codex-home-migration-cli.js +0 -26
- package/dist/runtimes/codex-home-migration.js +0 -112
- package/dist/runtimes/codex-home.js +0 -236
- package/dist/storage-control.js +0 -212
- package/dist/storage-copy.js +0 -628
- package/dist/storage-credential-guard.js +0 -21
- package/dist/storage-doctor.js +0 -228
- package/dist/storage-manifest.js +0 -1027
- package/dist/storage-migration-controller.js +0 -440
- package/dist/storage-migration-manifest.js +0 -105
- package/dist/storage-migration-policy.js +0 -100
- package/dist/storage-runtime-controller.js +0 -381
- package/dist/storage-runtime-readiness.js +0 -240
- package/dist/storage-safe-fs.js +0 -302
- package/dist/storage-status-delivery.js +0 -224
- package/dist/storage-status-replay.js +0 -140
- package/dist/storage-target-confirmation.js +0 -129
- package/dist/storage-worker-command.js +0 -37
- package/dist/storage-worker-executor.js +0 -449
- package/dist/storage-worker-handoff.js +0 -151
- package/dist/storage-worker-operation.js +0 -294
- package/dist/storage-worker-status.js +0 -259
package/dist/storage-control.js
DELETED
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
export const STORAGE_MIGRATION_CAPABILITY = "storage_migration_v1";
|
|
3
|
-
export const STORAGE_MIGRATION_STATUS_CAPABILITY = "storage_migration_status_v1";
|
|
4
|
-
const IdentitySchema = z.object({
|
|
5
|
-
migrationId: z.string().uuid(),
|
|
6
|
-
environment: z.string().regex(/^[a-z0-9][a-z0-9_-]{0,31}$/u),
|
|
7
|
-
workspaceId: z.string().uuid(),
|
|
8
|
-
ownerEpoch: z.number().int().positive().safe().optional(),
|
|
9
|
-
ownershipClaimFingerprint: z.string().regex(/^sha256:[0-9a-f]{64}$/u).optional(),
|
|
10
|
-
});
|
|
11
|
-
const DoctorRequestSchema = IdentitySchema.extend({ type: z.literal("daemon:storage-doctor") }).strict();
|
|
12
|
-
const MigrateRequestSchema = IdentitySchema.extend({
|
|
13
|
-
type: z.literal("daemon:storage-migrate"),
|
|
14
|
-
manifestDigest: z.string().regex(/^[0-9a-f]{64}$/u),
|
|
15
|
-
}).strict();
|
|
16
|
-
const StatusSchema = z.enum([
|
|
17
|
-
"preflight_running", "preflight_passed", "backing_up", "initial_sync", "quiescing", "final_sync", "verified",
|
|
18
|
-
"service_switched", "hello_confirmed", "completed", "failed", "rollback_pending", "rolled_back",
|
|
19
|
-
"rollback_failed",
|
|
20
|
-
]);
|
|
21
|
-
const TOKEN = /(?:\bsk_(?:machine|user|agent)_[A-Za-z0-9_-]{4,}\b|\bbearer\s+[^\s]+|(?:password|secret|token)\s*[:=]\s*[^\s]+)/giu;
|
|
22
|
-
const safeError = (error) => (error instanceof Error ? error.message : String(error))
|
|
23
|
-
.replaceAll(TOKEN, "<redacted>").slice(0, 500) || "storage migration failed";
|
|
24
|
-
const stableErrorCode = (candidate, fallback) => typeof candidate === "string" && /^[a-z0-9._-]{1,128}$/u.test(candidate) ? candidate : fallback;
|
|
25
|
-
export function createStorageControlController(input) {
|
|
26
|
-
const environment = z.string().regex(/^[a-z0-9][a-z0-9_-]{0,31}$/u).parse(input.environment);
|
|
27
|
-
const workspaceId = z.string().uuid().parse(input.workspaceId);
|
|
28
|
-
const profile = z.string().regex(/^[a-z0-9][a-z0-9_-]{0,47}$/u).parse(input.profile);
|
|
29
|
-
const sourceStorageFingerprint = z.string().regex(/^sha256:[0-9a-f]{64}$/u).parse(input.sourceStorageFingerprint);
|
|
30
|
-
const targetStorageFingerprint = z.string().regex(/^sha256:[0-9a-f]{64}$/u).parse(input.targetStorageFingerprint);
|
|
31
|
-
const ownership = input.ownership === undefined ? undefined : Object.freeze({
|
|
32
|
-
ownerEpoch: z.number().int().positive().safe().parse(input.ownership.ownerEpoch),
|
|
33
|
-
ownershipClaimFingerprint: z.string().regex(/^sha256:[0-9a-f]{64}$/u)
|
|
34
|
-
.parse(input.ownership.ownershipClaimFingerprint),
|
|
35
|
-
});
|
|
36
|
-
const preflights = new Map();
|
|
37
|
-
const preflightRuns = new Map();
|
|
38
|
-
const appliedMigrationIds = new Set();
|
|
39
|
-
let runningMigrationId = null;
|
|
40
|
-
const preflightTimeoutMs = z.number().int().positive().max(24 * 60 * 60 * 1000)
|
|
41
|
-
.parse(input.preflightTimeoutMs ?? 30 * 60 * 1000);
|
|
42
|
-
const frame = (identity, status, extra = {}) => ({
|
|
43
|
-
type: "daemon:storage-migration-status",
|
|
44
|
-
migrationId: identity.migrationId,
|
|
45
|
-
status,
|
|
46
|
-
environment,
|
|
47
|
-
workspaceId,
|
|
48
|
-
profile,
|
|
49
|
-
...(ownership === undefined ? {} : ownership),
|
|
50
|
-
...extra,
|
|
51
|
-
});
|
|
52
|
-
const failure = (identity, errorCode, error, reopenAdmission = false, extra = {}) => {
|
|
53
|
-
reportStatus(frame(identity, "failed", {
|
|
54
|
-
errorCode,
|
|
55
|
-
...extra,
|
|
56
|
-
...(error === undefined ? {} : { errorMessage: safeError(error) }),
|
|
57
|
-
...(reopenAdmission || error?.reopenAdmission === true
|
|
58
|
-
? { reopenAdmission: true }
|
|
59
|
-
: {}),
|
|
60
|
-
}));
|
|
61
|
-
};
|
|
62
|
-
const reportStatus = (statusFrame) => {
|
|
63
|
-
try {
|
|
64
|
-
input.sendStatus(statusFrame);
|
|
65
|
-
}
|
|
66
|
-
catch (error) {
|
|
67
|
-
input.onStatusError?.(error, statusFrame);
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
const matchesIdentity = (identity) => identity.environment === environment && identity.workspaceId === workspaceId
|
|
71
|
-
&& (ownership === undefined
|
|
72
|
-
|| (identity.ownerEpoch === ownership.ownerEpoch
|
|
73
|
-
&& identity.ownershipClaimFingerprint === ownership.ownershipClaimFingerprint));
|
|
74
|
-
const preflightKey = (identity) => `${identity.migrationId}\0${identity.environment}\0${identity.workspaceId}`;
|
|
75
|
-
const runPreflight = (identity, failureFallback = "doctor_failed") => {
|
|
76
|
-
const key = preflightKey(identity);
|
|
77
|
-
const existing = preflightRuns.get(key);
|
|
78
|
-
if (existing !== undefined)
|
|
79
|
-
return existing;
|
|
80
|
-
const controller = new AbortController();
|
|
81
|
-
let scannedEntries = 0;
|
|
82
|
-
let timedOut = false;
|
|
83
|
-
reportStatus(frame(identity, "preflight_running", {
|
|
84
|
-
progress: { state: "running", scannedEntries: 0 },
|
|
85
|
-
}));
|
|
86
|
-
const doctorPromise = Promise.resolve().then(() => input.runDoctor(identity.migrationId, {
|
|
87
|
-
signal: controller.signal,
|
|
88
|
-
onProgress: (progress) => {
|
|
89
|
-
if (timedOut)
|
|
90
|
-
return;
|
|
91
|
-
scannedEntries = progress.scannedEntries;
|
|
92
|
-
reportStatus(frame(identity, "preflight_running", {
|
|
93
|
-
progress: { state: "running", scannedEntries },
|
|
94
|
-
}));
|
|
95
|
-
},
|
|
96
|
-
}));
|
|
97
|
-
let timeoutHandle;
|
|
98
|
-
const timeout = new Promise((_, reject) => {
|
|
99
|
-
timeoutHandle = setTimeout(() => {
|
|
100
|
-
timedOut = true;
|
|
101
|
-
controller.abort();
|
|
102
|
-
reject(Object.assign(new Error("storage doctor preflight timed out"), {
|
|
103
|
-
code: "preflight_stale",
|
|
104
|
-
scannedEntries,
|
|
105
|
-
}));
|
|
106
|
-
}, preflightTimeoutMs);
|
|
107
|
-
timeoutHandle.unref?.();
|
|
108
|
-
});
|
|
109
|
-
void doctorPromise.catch(() => undefined);
|
|
110
|
-
let outcome;
|
|
111
|
-
outcome = Promise.race([doctorPromise, timeout]).then((doctor) => {
|
|
112
|
-
if (doctor.manifest.migrationId !== identity.migrationId
|
|
113
|
-
|| doctor.environment !== environment || doctor.workspaceId !== workspaceId
|
|
114
|
-
|| doctor.profile !== profile) {
|
|
115
|
-
failure(identity, "storage_identity_mismatch", undefined, true);
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
if (!doctor.applyAllowed) {
|
|
119
|
-
failure(identity, doctor.blockers[0]?.code ?? "doctor_blocked", undefined, true);
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
preflights.set(identity.migrationId, doctor);
|
|
123
|
-
reportStatus(frame(identity, "preflight_passed", {
|
|
124
|
-
sourceStorageFingerprint,
|
|
125
|
-
targetStorageFingerprint,
|
|
126
|
-
manifestDigest: doctor.manifestDigest,
|
|
127
|
-
}));
|
|
128
|
-
return doctor;
|
|
129
|
-
}).catch((error) => {
|
|
130
|
-
const code = error.code;
|
|
131
|
-
if (code === "preflight_stale") {
|
|
132
|
-
failure(identity, "preflight_stale", undefined, true, {
|
|
133
|
-
retryable: true,
|
|
134
|
-
progress: { state: "stale", scannedEntries: Number(error.scannedEntries) || scannedEntries },
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
else if (code === "preflight_aborted") {
|
|
138
|
-
failure(identity, "preflight_aborted", error, true, {
|
|
139
|
-
retryable: true,
|
|
140
|
-
progress: { state: "stale", scannedEntries },
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
else {
|
|
144
|
-
failure(identity, stableErrorCode(code, failureFallback), error, true);
|
|
145
|
-
}
|
|
146
|
-
return null;
|
|
147
|
-
}).finally(() => {
|
|
148
|
-
if (timeoutHandle !== undefined)
|
|
149
|
-
clearTimeout(timeoutHandle);
|
|
150
|
-
if (preflightRuns.get(key) === outcome)
|
|
151
|
-
preflightRuns.delete(key);
|
|
152
|
-
});
|
|
153
|
-
preflightRuns.set(key, outcome);
|
|
154
|
-
return outcome;
|
|
155
|
-
};
|
|
156
|
-
const handle = async (raw) => {
|
|
157
|
-
const type = typeof raw === "object" && raw !== null && "type" in raw ? raw.type : null;
|
|
158
|
-
if (type !== "daemon:storage-doctor" && type !== "daemon:storage-migrate")
|
|
159
|
-
return false;
|
|
160
|
-
const schema = type === "daemon:storage-doctor" ? DoctorRequestSchema : MigrateRequestSchema;
|
|
161
|
-
const parsed = schema.safeParse(raw);
|
|
162
|
-
if (!parsed.success)
|
|
163
|
-
return true;
|
|
164
|
-
const identity = parsed.data;
|
|
165
|
-
if (!matchesIdentity(identity)) {
|
|
166
|
-
failure(identity, "storage_identity_mismatch", undefined, true);
|
|
167
|
-
return true;
|
|
168
|
-
}
|
|
169
|
-
if (type === "daemon:storage-doctor") {
|
|
170
|
-
await runPreflight(identity);
|
|
171
|
-
return true;
|
|
172
|
-
}
|
|
173
|
-
if (runningMigrationId !== null) {
|
|
174
|
-
if (runningMigrationId !== identity.migrationId)
|
|
175
|
-
failure(identity, "migration_active");
|
|
176
|
-
return true;
|
|
177
|
-
}
|
|
178
|
-
const migrate = MigrateRequestSchema.parse(identity);
|
|
179
|
-
if (appliedMigrationIds.has(identity.migrationId))
|
|
180
|
-
return true;
|
|
181
|
-
let doctor = preflights.get(identity.migrationId);
|
|
182
|
-
if (doctor === undefined) {
|
|
183
|
-
const rebuilt = await runPreflight(identity, "preflight_rebuild_failed");
|
|
184
|
-
if (rebuilt === null)
|
|
185
|
-
return true;
|
|
186
|
-
doctor = rebuilt;
|
|
187
|
-
}
|
|
188
|
-
if (!doctor.applyAllowed || doctor.manifestDigest !== migrate.manifestDigest
|
|
189
|
-
|| doctor.manifest.migrationId !== identity.migrationId
|
|
190
|
-
|| doctor.environment !== environment || doctor.workspaceId !== workspaceId || doctor.profile !== profile) {
|
|
191
|
-
failure(identity, "preflight_digest_mismatch", undefined, true);
|
|
192
|
-
return true;
|
|
193
|
-
}
|
|
194
|
-
preflights.delete(identity.migrationId);
|
|
195
|
-
runningMigrationId = identity.migrationId;
|
|
196
|
-
try {
|
|
197
|
-
await input.runMigration(doctor, (status) => {
|
|
198
|
-
if (StatusSchema.safeParse(status).success)
|
|
199
|
-
reportStatus(frame(identity, status));
|
|
200
|
-
});
|
|
201
|
-
appliedMigrationIds.add(identity.migrationId);
|
|
202
|
-
}
|
|
203
|
-
catch (error) {
|
|
204
|
-
failure(identity, stableErrorCode(error.code, "storage_migration_failed"), error);
|
|
205
|
-
}
|
|
206
|
-
finally {
|
|
207
|
-
runningMigrationId = null;
|
|
208
|
-
}
|
|
209
|
-
return true;
|
|
210
|
-
};
|
|
211
|
-
return Object.freeze({ handle });
|
|
212
|
-
}
|