@nowcrew/daemon 0.6.88-beta.3 → 0.6.88-beta.31

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 (129) hide show
  1. package/README.md +89 -14
  2. package/dist/agent-ability/controller.js +11 -1
  3. package/dist/agent-ability/git-errors.js +22 -0
  4. package/dist/agent-ability/materializer.js +21 -10
  5. package/dist/agent-ability/resolver.js +12 -4
  6. package/dist/agent-environment-contract.js +55 -0
  7. package/dist/agent-environment-control.js +24 -0
  8. package/dist/agent-environment-execution.js +98 -0
  9. package/dist/agent-environments.js +275 -0
  10. package/dist/agent-memory/policy.js +3 -1
  11. package/dist/automatic-daemon-installer.js +51 -2
  12. package/dist/automatic-install-target.js +8 -0
  13. package/dist/computer-main.js +18 -0
  14. package/dist/computer-profile.js +17 -4
  15. package/dist/computer-setup-client.js +318 -0
  16. package/dist/computer-setup-orchestration.js +203 -0
  17. package/dist/computer-setup.js +244 -0
  18. package/dist/config.js +30 -12
  19. package/dist/console-formatter.js +3 -3
  20. package/dist/console.js +15 -2
  21. package/dist/daemon-update-eligibility.js +1 -1
  22. package/dist/execution-journal.js +9 -6
  23. package/dist/execution-protocol.js +2 -1
  24. package/dist/execution-runner.js +16 -10
  25. package/dist/i18n.js +19 -0
  26. package/dist/list-models.js +13 -11
  27. package/dist/local-execution-lease.js +22 -0
  28. package/dist/local-executor.js +88 -92
  29. package/dist/local-memory/candidate.js +43 -0
  30. package/dist/local-memory/index-budget.js +8 -0
  31. package/dist/local-memory/inventory-cli.js +61 -0
  32. package/dist/local-memory/inventory-preview.js +159 -0
  33. package/dist/local-memory/inventory-source.js +159 -0
  34. package/dist/local-memory/pending-match.js +29 -0
  35. package/dist/local-memory/pending-query.js +100 -0
  36. package/dist/local-memory/pending-schema.js +29 -0
  37. package/dist/local-memory/pending-source.js +126 -0
  38. package/dist/local-memory/pending.js +34 -84
  39. package/dist/local-memory/prompt.js +20 -12
  40. package/dist/local-memory/read-cli.js +97 -12
  41. package/dist/local-memory/rollout.js +82 -0
  42. package/dist/local-memory/runtime.js +24 -17
  43. package/dist/local-memory/work-log-execution.js +31 -0
  44. package/dist/local-memory/work-log.js +58 -0
  45. package/dist/local-memory/write.js +27 -58
  46. package/dist/local-runtime-environment.js +50 -0
  47. package/dist/machine-environment-cache.js +147 -0
  48. package/dist/machine-environment-contract.js +10 -0
  49. package/dist/machine-environment-control.js +27 -0
  50. package/dist/machine-environment-policy.js +75 -0
  51. package/dist/machine-environment-process.js +110 -0
  52. package/dist/machine-info.js +70 -25
  53. package/dist/machine-runtime-environment.js +189 -0
  54. package/dist/machine-shell-environment-capture.js +135 -0
  55. package/dist/machine-windows-environment-capture.js +215 -0
  56. package/dist/machine-windows-environment-script.js +158 -0
  57. package/dist/main.js +4 -69
  58. package/dist/marketplace-controller.js +75 -0
  59. package/dist/marketplace-protocol.js +38 -0
  60. package/dist/marketplace-runner.js +234 -0
  61. package/dist/marketplace-serve.js +17 -0
  62. package/dist/message-file-preview.js +246 -0
  63. package/dist/native-thread-context.js +59 -0
  64. package/dist/pre-admission-rejection.js +64 -0
  65. package/dist/project-skills/execution-adapter.js +3 -2
  66. package/dist/project-skills/runtime-launch.js +14 -0
  67. package/dist/prompt.js +15 -15
  68. package/dist/provider-env.js +26 -15
  69. package/dist/runner.js +31 -19
  70. package/dist/runtime-environment-merge.js +16 -0
  71. package/dist/runtime-health-handler.js +10 -0
  72. package/dist/runtime-health.js +3 -1
  73. package/dist/runtime-path.js +22 -12
  74. package/dist/runtime-probe.js +35 -6
  75. package/dist/runtimes/acp-probe-transport.js +69 -0
  76. package/dist/runtimes/claude-models.js +20 -9
  77. package/dist/runtimes/claude-session-start-hook.js +24 -0
  78. package/dist/runtimes/claude-thread-runner.js +266 -0
  79. package/dist/runtimes/claude.js +23 -4
  80. package/dist/runtimes/codex-app-server-runner.js +43 -4
  81. package/dist/runtimes/deepseek-harness-launch.js +10 -0
  82. package/dist/runtimes/deepseek-harness-profile.js +92 -0
  83. package/dist/runtimes/deepseek-harness-runner.js +226 -0
  84. package/dist/runtimes/deepseek-harness.js +76 -15
  85. package/dist/runtimes/harness-probe-retry.js +42 -0
  86. package/dist/runtimes/hermes-models.js +2 -1
  87. package/dist/runtimes/kimi-acp-runner.js +84 -15
  88. package/dist/runtimes/opencode-runner.js +7 -1
  89. package/dist/runtimes/opencode.js +2 -2
  90. package/dist/serve.js +95 -184
  91. package/dist/server-url.js +25 -0
  92. package/dist/session.js +4 -0
  93. package/dist/slog.js +2 -1
  94. package/dist/storage-identity.js +0 -3
  95. package/dist/storage-runtime.js +2 -2
  96. package/dist/storage-serve-adapter.js +6 -72
  97. package/dist/supervised-runtime.js +28 -18
  98. package/dist/thread-input-delivery.js +217 -0
  99. package/dist/token.js +0 -1
  100. package/dist/workspace-control-handler.js +27 -0
  101. package/dist/workspace-fs.js +66 -15
  102. package/dist/workspace.js +1 -1
  103. package/package.json +5 -4
  104. package/dist/codex-home-launch.js +0 -7
  105. package/dist/codex-home-mode-controller.js +0 -68
  106. package/dist/daemon-migration-controller.js +0 -211
  107. package/dist/daemon-migration-wiring.js +0 -22
  108. package/dist/runtimes/codex-home-migration-cli.js +0 -26
  109. package/dist/runtimes/codex-home-migration.js +0 -112
  110. package/dist/runtimes/codex-home.js +0 -236
  111. package/dist/storage-control.js +0 -212
  112. package/dist/storage-copy.js +0 -628
  113. package/dist/storage-credential-guard.js +0 -21
  114. package/dist/storage-doctor.js +0 -228
  115. package/dist/storage-manifest.js +0 -1027
  116. package/dist/storage-migration-controller.js +0 -440
  117. package/dist/storage-migration-manifest.js +0 -105
  118. package/dist/storage-migration-policy.js +0 -100
  119. package/dist/storage-runtime-controller.js +0 -381
  120. package/dist/storage-runtime-readiness.js +0 -240
  121. package/dist/storage-safe-fs.js +0 -302
  122. package/dist/storage-status-delivery.js +0 -224
  123. package/dist/storage-status-replay.js +0 -140
  124. package/dist/storage-target-confirmation.js +0 -129
  125. package/dist/storage-worker-command.js +0 -37
  126. package/dist/storage-worker-executor.js +0 -449
  127. package/dist/storage-worker-handoff.js +0 -151
  128. package/dist/storage-worker-operation.js +0 -294
  129. 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
- }