@nowcrew/daemon 0.6.88-beta.2 → 0.6.88-beta.20

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 (74) hide show
  1. package/README.md +38 -10
  2. package/dist/agent-memory/policy.js +3 -1
  3. package/dist/daemon-update-eligibility.js +1 -1
  4. package/dist/execution-journal.js +9 -6
  5. package/dist/execution-protocol.js +2 -1
  6. package/dist/execution-runner.js +5 -3
  7. package/dist/list-models.js +2 -0
  8. package/dist/local-execution-lease.js +22 -0
  9. package/dist/local-executor.js +57 -37
  10. package/dist/local-memory/candidate.js +43 -0
  11. package/dist/local-memory/index-budget.js +8 -0
  12. package/dist/local-memory/inventory-cli.js +61 -0
  13. package/dist/local-memory/inventory-preview.js +154 -0
  14. package/dist/local-memory/inventory-source.js +159 -0
  15. package/dist/local-memory/pending-match.js +29 -0
  16. package/dist/local-memory/pending-query.js +100 -0
  17. package/dist/local-memory/pending-schema.js +29 -0
  18. package/dist/local-memory/pending-source.js +126 -0
  19. package/dist/local-memory/pending.js +34 -84
  20. package/dist/local-memory/prompt.js +14 -11
  21. package/dist/local-memory/read-cli.js +59 -8
  22. package/dist/local-memory/runtime.js +24 -17
  23. package/dist/local-memory/work-log-execution.js +31 -0
  24. package/dist/local-memory/work-log.js +58 -0
  25. package/dist/local-memory/write.js +27 -58
  26. package/dist/machine-info.js +54 -16
  27. package/dist/main.js +4 -69
  28. package/dist/native-thread-context.js +59 -0
  29. package/dist/pre-admission-rejection.js +64 -0
  30. package/dist/project-skills/execution-adapter.js +3 -2
  31. package/dist/project-skills/runtime-launch.js +14 -0
  32. package/dist/prompt.js +15 -15
  33. package/dist/provider-env.js +3 -4
  34. package/dist/runner.js +14 -15
  35. package/dist/runtime-probe.js +34 -5
  36. package/dist/runtimes/acp-probe-transport.js +69 -0
  37. package/dist/runtimes/claude-session-start-hook.js +24 -0
  38. package/dist/runtimes/claude-thread-runner.js +266 -0
  39. package/dist/runtimes/claude.js +23 -4
  40. package/dist/runtimes/codex-app-server-runner.js +43 -4
  41. package/dist/runtimes/deepseek-harness-profile.js +92 -0
  42. package/dist/runtimes/deepseek-harness-runner.js +224 -0
  43. package/dist/runtimes/deepseek-harness.js +64 -11
  44. package/dist/runtimes/harness-probe-retry.js +42 -0
  45. package/dist/runtimes/kimi-acp-runner.js +63 -10
  46. package/dist/runtimes/opencode-runner.js +7 -1
  47. package/dist/serve.js +58 -88
  48. package/dist/session.js +4 -0
  49. package/dist/storage-identity.js +0 -3
  50. package/dist/storage-serve-adapter.js +6 -72
  51. package/dist/supervised-runtime.js +28 -18
  52. package/dist/thread-input-delivery.js +217 -0
  53. package/package.json +2 -2
  54. package/dist/daemon-migration-controller.js +0 -211
  55. package/dist/daemon-migration-wiring.js +0 -22
  56. package/dist/storage-control.js +0 -212
  57. package/dist/storage-copy.js +0 -628
  58. package/dist/storage-credential-guard.js +0 -21
  59. package/dist/storage-doctor.js +0 -228
  60. package/dist/storage-manifest.js +0 -1027
  61. package/dist/storage-migration-controller.js +0 -440
  62. package/dist/storage-migration-manifest.js +0 -105
  63. package/dist/storage-migration-policy.js +0 -100
  64. package/dist/storage-runtime-controller.js +0 -381
  65. package/dist/storage-runtime-readiness.js +0 -240
  66. package/dist/storage-safe-fs.js +0 -302
  67. package/dist/storage-status-delivery.js +0 -224
  68. package/dist/storage-status-replay.js +0 -140
  69. package/dist/storage-target-confirmation.js +0 -129
  70. package/dist/storage-worker-command.js +0 -37
  71. package/dist/storage-worker-executor.js +0 -449
  72. package/dist/storage-worker-handoff.js +0 -151
  73. package/dist/storage-worker-operation.js +0 -294
  74. package/dist/storage-worker-status.js +0 -259
@@ -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
- }