@ashlr/hub 3.2.6 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +290 -0
- package/README.md +4 -1
- package/dist/build-identity.json +2 -2
- package/dist/cli/activation.d.ts +41 -0
- package/dist/cli/activation.js +485 -0
- package/dist/cli/activation.js.map +1 -0
- package/dist/cli/audit.js +18 -0
- package/dist/cli/audit.js.map +1 -1
- package/dist/cli/backlog.d.ts +0 -5
- package/dist/cli/backlog.js +18 -0
- package/dist/cli/backlog.js.map +1 -1
- package/dist/cli/comms.js +20 -0
- package/dist/cli/comms.js.map +1 -1
- package/dist/cli/completions.d.ts +6 -1
- package/dist/cli/completions.js +37 -11
- package/dist/cli/completions.js.map +1 -1
- package/dist/cli/conductor-permit.d.ts +1 -0
- package/dist/cli/conductor-permit.js +122 -0
- package/dist/cli/conductor-permit.js.map +1 -0
- package/dist/cli/daemon.js +10 -3
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/demo.d.ts +0 -27
- package/dist/cli/demo.js +17 -0
- package/dist/cli/demo.js.map +1 -1
- package/dist/cli/goals.d.ts +2 -0
- package/dist/cli/goals.js +90 -5
- package/dist/cli/goals.js.map +1 -1
- package/dist/cli/help.js +21 -3
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/inbox.d.ts +14 -2
- package/dist/cli/inbox.js +137 -23
- package/dist/cli/inbox.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +16 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/loop.js +26 -5
- package/dist/cli/loop.js.map +1 -1
- package/dist/cli/onboard.d.ts +0 -13
- package/dist/cli/onboard.js +20 -0
- package/dist/cli/onboard.js.map +1 -1
- package/dist/cli/resources.js +15 -0
- package/dist/cli/resources.js.map +1 -1
- package/dist/cli/run.js +1 -1
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/sandbox.js +43 -0
- package/dist/cli/sandbox.js.map +1 -1
- package/dist/cli/tui.d.ts +0 -6
- package/dist/cli/tui.js +14 -0
- package/dist/cli/tui.js.map +1 -1
- package/dist/core/comms/elon-dialogue.js +16 -7
- package/dist/core/comms/elon-dialogue.js.map +1 -1
- package/dist/core/config.js +70 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/daemon/activation-permit.d.ts +357 -33
- package/dist/core/daemon/activation-permit.js +1585 -183
- package/dist/core/daemon/activation-permit.js.map +1 -1
- package/dist/core/daemon/goal-conductor-permit-operator.d.ts +75 -0
- package/dist/core/daemon/goal-conductor-permit-operator.js +842 -0
- package/dist/core/daemon/goal-conductor-permit-operator.js.map +1 -0
- package/dist/core/daemon/loop.d.ts +13 -1
- package/dist/core/daemon/loop.js +294 -29
- package/dist/core/daemon/loop.js.map +1 -1
- package/dist/core/daemon/runtime-activation-resident-start-protocol.d.ts +141 -0
- package/dist/core/daemon/runtime-activation-resident-start-protocol.js +462 -0
- package/dist/core/daemon/runtime-activation-resident-start-protocol.js.map +1 -0
- package/dist/core/daemon/runtime-activation-resident-start-runtime.d.ts +27 -0
- package/dist/core/daemon/runtime-activation-resident-start-runtime.js +28 -0
- package/dist/core/daemon/runtime-activation-resident-start-runtime.js.map +1 -0
- package/dist/core/daemon/runtime-activation-stopped-consumer.d.ts +139 -0
- package/dist/core/daemon/runtime-activation-stopped-consumer.js +995 -0
- package/dist/core/daemon/runtime-activation-stopped-consumer.js.map +1 -0
- package/dist/core/daemon/runtime-activation-stopped-runtime.d.ts +36 -0
- package/dist/core/daemon/runtime-activation-stopped-runtime.js +134 -0
- package/dist/core/daemon/runtime-activation-stopped-runtime.js.map +1 -0
- package/dist/core/daemon/runtime-activation-transaction.d.ts +41 -17
- package/dist/core/daemon/runtime-activation-transaction.js +80 -11
- package/dist/core/daemon/runtime-activation-transaction.js.map +1 -1
- package/dist/core/daemon/runtime-release-dependency-inventory.js +1 -0
- package/dist/core/daemon/runtime-release-dependency-inventory.js.map +1 -1
- package/dist/core/daemon/service-install-authority.d.ts +0 -4
- package/dist/core/daemon/service-install-authority.js +18 -3
- package/dist/core/daemon/service-install-authority.js.map +1 -1
- package/dist/core/dashboard.d.ts +10 -0
- package/dist/core/dashboard.js +103 -28
- package/dist/core/dashboard.js.map +1 -1
- package/dist/core/effective-config.js +7 -0
- package/dist/core/effective-config.js.map +1 -1
- package/dist/core/fleet/automerge-pass.js +33 -0
- package/dist/core/fleet/automerge-pass.js.map +1 -1
- package/dist/core/fleet/decisions-ledger.js +35 -12
- package/dist/core/fleet/decisions-ledger.js.map +1 -1
- package/dist/core/fleet/external-skill-git-capture.js +9 -1
- package/dist/core/fleet/external-skill-git-capture.js.map +1 -1
- package/dist/core/fleet/judge-decision-metadata.d.ts +8 -1
- package/dist/core/fleet/judge-decision-metadata.js +14 -1
- package/dist/core/fleet/judge-decision-metadata.js.map +1 -1
- package/dist/core/fleet/manager.d.ts +15 -1
- package/dist/core/fleet/manager.js +108 -30
- package/dist/core/fleet/manager.js.map +1 -1
- package/dist/core/fleet/post-merge-credit.d.ts +134 -9
- package/dist/core/fleet/post-merge-credit.js +350 -10
- package/dist/core/fleet/post-merge-credit.js.map +1 -1
- package/dist/core/fleet/quota.d.ts +74 -7
- package/dist/core/fleet/quota.js +688 -34
- package/dist/core/fleet/quota.js.map +1 -1
- package/dist/core/fleet/self-improve.d.ts +34 -1
- package/dist/core/fleet/self-improve.js +106 -1
- package/dist/core/fleet/self-improve.js.map +1 -1
- package/dist/core/fleet/skill-library.d.ts +21 -2
- package/dist/core/fleet/skill-library.js +54 -12
- package/dist/core/fleet/skill-library.js.map +1 -1
- package/dist/core/fleet/status.js +7 -5
- package/dist/core/fleet/status.js.map +1 -1
- package/dist/core/fleet/worked-ledger.d.ts +22 -0
- package/dist/core/fleet/worked-ledger.js +32 -0
- package/dist/core/fleet/worked-ledger.js.map +1 -1
- package/dist/core/foundry/automerge-scope-policy.d.ts +2 -2
- package/dist/core/foundry/automerge-scope-policy.js +9 -2
- package/dist/core/foundry/automerge-scope-policy.js.map +1 -1
- package/dist/core/goals/advance.js +34 -5
- package/dist/core/goals/advance.js.map +1 -1
- package/dist/core/goals/conductor-quota.d.ts +38 -0
- package/dist/core/goals/conductor-quota.js +110 -0
- package/dist/core/goals/conductor-quota.js.map +1 -0
- package/dist/core/goals/conductor-target.d.ts +24 -0
- package/dist/core/goals/conductor-target.js +35 -0
- package/dist/core/goals/conductor-target.js.map +1 -0
- package/dist/core/goals/conductor.d.ts +15 -0
- package/dist/core/goals/conductor.js +116 -9
- package/dist/core/goals/conductor.js.map +1 -1
- package/dist/core/goals/store.d.ts +29 -5
- package/dist/core/goals/store.js +197 -30
- package/dist/core/goals/store.js.map +1 -1
- package/dist/core/goals/timestamp-repair.d.ts +50 -0
- package/dist/core/goals/timestamp-repair.js +740 -0
- package/dist/core/goals/timestamp-repair.js.map +1 -0
- package/dist/core/inbox/apply.js +5 -2
- package/dist/core/inbox/apply.js.map +1 -1
- package/dist/core/inbox/merge.d.ts +94 -1
- package/dist/core/inbox/merge.js +349 -16
- package/dist/core/inbox/merge.js.map +1 -1
- package/dist/core/integrations/github.d.ts +2 -0
- package/dist/core/integrations/github.js +2 -1
- package/dist/core/integrations/github.js.map +1 -1
- package/dist/core/integrations/pulse-sync.js +13 -4
- package/dist/core/integrations/pulse-sync.js.map +1 -1
- package/dist/core/learn/reflect.d.ts +42 -4
- package/dist/core/learn/reflect.js +56 -5
- package/dist/core/learn/reflect.js.map +1 -1
- package/dist/core/run/best-of-n.d.ts +18 -0
- package/dist/core/run/best-of-n.js +163 -18
- package/dist/core/run/best-of-n.js.map +1 -1
- package/dist/core/run/engines.d.ts +8 -0
- package/dist/core/run/engines.js +9 -1
- package/dist/core/run/engines.js.map +1 -1
- package/dist/core/run/learned-router.js +28 -3
- package/dist/core/run/learned-router.js.map +1 -1
- package/dist/core/run/orchestrator.d.ts +7 -2
- package/dist/core/run/orchestrator.js +140 -60
- package/dist/core/run/orchestrator.js.map +1 -1
- package/dist/core/strategy/goal-planner.js +7 -1
- package/dist/core/strategy/goal-planner.js.map +1 -1
- package/dist/core/swarm/planner.d.ts +2 -2
- package/dist/core/swarm/planner.js +52 -5
- package/dist/core/swarm/planner.js.map +1 -1
- package/dist/core/swarm/rollback.d.ts +11 -0
- package/dist/core/swarm/rollback.js +54 -0
- package/dist/core/swarm/rollback.js.map +1 -1
- package/dist/core/swarm/runner.js +123 -11
- package/dist/core/swarm/runner.js.map +1 -1
- package/dist/core/types.d.ts +139 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/web/api.js +105 -7
- package/dist/core/web/api.js.map +1 -1
- package/dist/core/web/control.d.ts +20 -0
- package/dist/core/web/control.js +49 -34
- package/dist/core/web/control.js.map +1 -1
- package/dist/core/web/fleet-status-cache.d.ts +68 -0
- package/dist/core/web/fleet-status-cache.js +120 -0
- package/dist/core/web/fleet-status-cache.js.map +1 -0
- package/dist/core/web/public/next/assets/index-CY0U241s.css +1 -0
- package/dist/core/web/public/next/assets/index-Ct0mf8n4.js +69 -0
- package/dist/core/web/public/next/assets/index-Ct0mf8n4.js.map +1 -0
- package/dist/core/web/public/next/index.html +15 -0
- package/dist/release-dependency-inventory.json +1 -1
- package/dist/tui/app.js +2 -2
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/render.d.ts +2 -0
- package/dist/tui/render.js +162 -4
- package/dist/tui/render.js.map +1 -1
- package/docs/RUNTIME_ACTIVATION_AUTHORITY.md +126 -21
- package/docs/contracts/CONTRACT-M521.md +102 -0
- package/package.json +20 -3
- package/schema/config.schema.json +800 -5
- package/node_modules/which/CHANGELOG.md +0 -166
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal-planner.js","sourceRoot":"","sources":["../../../src/core/strategy/goal-planner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"goal-planner.js","sourceRoot":"","sources":["../../../src/core/strategy/goal-planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* carry deps on the tasks from the prior phase.
|
|
13
13
|
* - IDs are stable slugs: scaffold-1, build-1..N, integrate-1, verify-1, review-1.
|
|
14
14
|
*/
|
|
15
|
-
import type { SwarmPlan, AshlrConfig } from '../types.js';
|
|
15
|
+
import type { SwarmPlan, AshlrConfig, ProviderInferenceQuotaSession } from '../types.js';
|
|
16
16
|
/**
|
|
17
17
|
* Decompose a goal (+ optional spec body) into a phased SwarmPlan.
|
|
18
18
|
*
|
|
@@ -29,4 +29,4 @@ import type { SwarmPlan, AshlrConfig } from '../types.js';
|
|
|
29
29
|
export declare function planSwarm(input: {
|
|
30
30
|
goal: string;
|
|
31
31
|
specBody?: string;
|
|
32
|
-
}, cfg: AshlrConfig, signal?: AbortSignal): Promise<SwarmPlan>;
|
|
32
|
+
}, cfg: AshlrConfig, signal?: AbortSignal, providerQuota?: ProviderInferenceQuotaSession, signedTokenBudget?: number): Promise<SwarmPlan>;
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
* - IDs are stable slugs: scaffold-1, build-1..N, integrate-1, verify-1, review-1.
|
|
14
14
|
*/
|
|
15
15
|
import { getActiveClient } from '../run/provider-client.js';
|
|
16
|
+
import { GoalConductorQuotaRefusal, isGoalConductorQuotaRefusal, } from '../goals/conductor-quota.js';
|
|
17
|
+
import { conservativeRequestTokenReservation, MAX_GOVERNED_OUTPUT_TOKENS, supportsGovernedModelCalls, } from '../run/model-call-authority.js';
|
|
16
18
|
// ---------------------------------------------------------------------------
|
|
17
19
|
// Constants
|
|
18
20
|
// ---------------------------------------------------------------------------
|
|
@@ -277,7 +279,7 @@ function withUsage(plan, usage) {
|
|
|
277
279
|
* - Falls back to a sensible default plan on any failure.
|
|
278
280
|
* - LOCAL-first (opts.allowCloud defaults false).
|
|
279
281
|
*/
|
|
280
|
-
export async function planSwarm(input, cfg, signal) {
|
|
282
|
+
export async function planSwarm(input, cfg, signal, providerQuota, signedTokenBudget) {
|
|
281
283
|
const { goal, specBody } = input;
|
|
282
284
|
if (signal?.aborted)
|
|
283
285
|
throw abortReason(signal);
|
|
@@ -285,17 +287,51 @@ export async function planSwarm(input, cfg, signal) {
|
|
|
285
287
|
const userPrompt = specBody
|
|
286
288
|
? `Goal: ${goal}\n\nSpec:\n${specBody.slice(0, 8000)}` // guard against enormous spec bodies
|
|
287
289
|
: `Goal: ${goal}`;
|
|
290
|
+
const messages = [
|
|
291
|
+
{ role: 'system', content: PLANNING_SYSTEM },
|
|
292
|
+
{ role: 'user', content: userPrompt },
|
|
293
|
+
];
|
|
288
294
|
// Attempt a single LOCAL-first model call
|
|
289
295
|
let rawOutput;
|
|
290
296
|
let usage;
|
|
291
297
|
try {
|
|
298
|
+
let signedLimits;
|
|
299
|
+
let signedPromptReservation;
|
|
300
|
+
if (providerQuota) {
|
|
301
|
+
if (!Number.isSafeInteger(signedTokenBudget) || (signedTokenBudget ?? 0) < 1) {
|
|
302
|
+
throw new GoalConductorQuotaRefusal('goal-conductor-signed-planner-budget-invalid');
|
|
303
|
+
}
|
|
304
|
+
signedPromptReservation = conservativeRequestTokenReservation(messages, []);
|
|
305
|
+
const remaining = signedTokenBudget - signedPromptReservation;
|
|
306
|
+
if (remaining < 1) {
|
|
307
|
+
throw new GoalConductorQuotaRefusal('goal-conductor-signed-planner-budget-exhausted');
|
|
308
|
+
}
|
|
309
|
+
signedLimits = {
|
|
310
|
+
maxOutputTokens: Math.min(MAX_GOVERNED_OUTPUT_TOKENS, remaining),
|
|
311
|
+
};
|
|
312
|
+
}
|
|
292
313
|
const client = await getActiveClient(cfg, { allowCloud: false });
|
|
293
314
|
if (signal?.aborted)
|
|
294
315
|
throw abortReason(signal);
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
316
|
+
if (providerQuota && !supportsGovernedModelCalls(client)) {
|
|
317
|
+
throw new GoalConductorQuotaRefusal('goal-conductor-signed-planner-provider-ungoverned');
|
|
318
|
+
}
|
|
319
|
+
// The signed path consumes one of its pre-reserved tickets at the final
|
|
320
|
+
// synchronous boundary before inference. Ordinary swarms omit the session.
|
|
321
|
+
providerQuota?.claimNext();
|
|
322
|
+
const result = signedLimits
|
|
323
|
+
? await client.chat(messages, undefined, signal, signedLimits)
|
|
324
|
+
: await client.chat(messages, undefined, signal);
|
|
325
|
+
if (signedLimits && signedPromptReservation !== undefined) {
|
|
326
|
+
const exactUsage = result.usageKnown === true &&
|
|
327
|
+
Number.isSafeInteger(result.usage.tokensIn) && result.usage.tokensIn >= 0 &&
|
|
328
|
+
Number.isSafeInteger(result.usage.tokensOut) && result.usage.tokensOut >= 0 &&
|
|
329
|
+
result.usage.tokensIn <= signedPromptReservation &&
|
|
330
|
+
result.usage.tokensOut <= signedLimits.maxOutputTokens;
|
|
331
|
+
if (!exactUsage) {
|
|
332
|
+
throw new GoalConductorQuotaRefusal('goal-conductor-signed-planner-usage-invalid');
|
|
333
|
+
}
|
|
334
|
+
}
|
|
299
335
|
rawOutput = result.content;
|
|
300
336
|
usage = plannerUsage(result.usage);
|
|
301
337
|
if (signal?.aborted)
|
|
@@ -304,6 +340,11 @@ export async function planSwarm(input, cfg, signal) {
|
|
|
304
340
|
catch (err) {
|
|
305
341
|
if (signal?.aborted)
|
|
306
342
|
throw abortReason(signal);
|
|
343
|
+
if (isGoalConductorQuotaRefusal(err))
|
|
344
|
+
throw err;
|
|
345
|
+
if (providerQuota) {
|
|
346
|
+
throw new GoalConductorQuotaRefusal('goal-conductor-signed-planner-provider-failed');
|
|
347
|
+
}
|
|
307
348
|
const msg = err instanceof Error ? err.message : String(err);
|
|
308
349
|
process.stderr.write(`[ashlr swarm] planner model call failed: ${msg} — using default plan\n`);
|
|
309
350
|
return defaultPlan(goal);
|
|
@@ -316,10 +357,16 @@ export async function planSwarm(input, cfg, signal) {
|
|
|
316
357
|
}
|
|
317
358
|
}
|
|
318
359
|
catch (parseErr) {
|
|
360
|
+
if (providerQuota) {
|
|
361
|
+
throw new GoalConductorQuotaRefusal('goal-conductor-signed-planner-output-invalid');
|
|
362
|
+
}
|
|
319
363
|
const msg = parseErr instanceof Error ? parseErr.message : String(parseErr);
|
|
320
364
|
process.stderr.write(`[ashlr swarm] planner parse error: ${msg} — using default plan\n`);
|
|
321
365
|
}
|
|
322
366
|
// Fall back to default
|
|
367
|
+
if (providerQuota) {
|
|
368
|
+
throw new GoalConductorQuotaRefusal('goal-conductor-signed-planner-output-invalid');
|
|
369
|
+
}
|
|
323
370
|
process.stderr.write(`[ashlr swarm] planner could not extract a valid plan from model output — using default plan\n`);
|
|
324
371
|
return withUsage(defaultPlan(goal), usage);
|
|
325
372
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/core/swarm/planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"planner.js","sourceRoot":"","sources":["../../../src/core/swarm/planner.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,12 @@
|
|
|
13
13
|
* - rollbackTo is the ONLY potentially-destructive operation in M17.
|
|
14
14
|
* - NEVER pushes to a remote, NEVER deletes branches.
|
|
15
15
|
* - NEVER force-resets without opts.force === true.
|
|
16
|
+
* - NEVER force-resets the MAIN checkout of a repository (2026-08-17 incident:
|
|
17
|
+
* a bare `git stash`/`reset` against a primary checkout nearly destroyed
|
|
18
|
+
* live operator work). `--force` only proceeds when `project` is an
|
|
19
|
+
* isolated linked worktree — detected via git's own --git-dir vs
|
|
20
|
+
* --git-common-dir distinction, not by path heuristics. The main checkout
|
|
21
|
+
* always fails closed on --force, regardless of dirty state.
|
|
16
22
|
* - Refuses (ok:false) on non-repo, or dirty tree without --force.
|
|
17
23
|
* - Never throws — all error paths return { ok: false, detail }.
|
|
18
24
|
* - Uses execFileSync with 10 s timeout and stdio:'pipe'.
|
|
@@ -38,8 +44,13 @@ export declare function snapshotProject(project: string | null): RollbackSnapsho
|
|
|
38
44
|
* - NEVER pushes to a remote.
|
|
39
45
|
* - NEVER deletes branches.
|
|
40
46
|
* - NEVER force-resets without opts.force === true.
|
|
47
|
+
* - NEVER force-resets the main checkout — opts.force is refused outright
|
|
48
|
+
* when snap.project is not an isolated linked worktree, before any dirty
|
|
49
|
+
* check runs (an older-commit force-reset can also silently discard
|
|
50
|
+
* COMMITTED work made after the snapshot; see isPrimaryCheckout above).
|
|
41
51
|
* - Refuses (returns { ok: false, detail }) without throwing when:
|
|
42
52
|
* • snap.isRepo is false (nothing to restore)
|
|
53
|
+
* • opts.force is true and snap.project is the main checkout
|
|
43
54
|
* • the current working tree is dirty and opts.force is false
|
|
44
55
|
* • any git operation fails
|
|
45
56
|
* - With opts.force: uses `git reset --hard <head>` so local uncommitted
|
|
@@ -13,11 +13,18 @@
|
|
|
13
13
|
* - rollbackTo is the ONLY potentially-destructive operation in M17.
|
|
14
14
|
* - NEVER pushes to a remote, NEVER deletes branches.
|
|
15
15
|
* - NEVER force-resets without opts.force === true.
|
|
16
|
+
* - NEVER force-resets the MAIN checkout of a repository (2026-08-17 incident:
|
|
17
|
+
* a bare `git stash`/`reset` against a primary checkout nearly destroyed
|
|
18
|
+
* live operator work). `--force` only proceeds when `project` is an
|
|
19
|
+
* isolated linked worktree — detected via git's own --git-dir vs
|
|
20
|
+
* --git-common-dir distinction, not by path heuristics. The main checkout
|
|
21
|
+
* always fails closed on --force, regardless of dirty state.
|
|
16
22
|
* - Refuses (ok:false) on non-repo, or dirty tree without --force.
|
|
17
23
|
* - Never throws — all error paths return { ok: false, detail }.
|
|
18
24
|
* - Uses execFileSync with 10 s timeout and stdio:'pipe'.
|
|
19
25
|
*/
|
|
20
26
|
import { execFileSync } from 'node:child_process';
|
|
27
|
+
import { canonicalFilesystemPathIdentity } from '../sandbox/policy.js';
|
|
21
28
|
// ---------------------------------------------------------------------------
|
|
22
29
|
// Internal helpers
|
|
23
30
|
// ---------------------------------------------------------------------------
|
|
@@ -51,6 +58,31 @@ function isGitRepo(dir) {
|
|
|
51
58
|
const result = git(dir, ['rev-parse', '--git-dir']);
|
|
52
59
|
return result !== null;
|
|
53
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Returns true when `dir` is the MAIN checkout of its repository, i.e. NOT an
|
|
63
|
+
* isolated linked worktree (a sandbox, or any `git worktree add` checkout).
|
|
64
|
+
*
|
|
65
|
+
* Git exposes this distinction natively: a linked worktree's --git-dir lives
|
|
66
|
+
* under <common-dir>/worktrees/<name>, while the main worktree's --git-dir
|
|
67
|
+
* *is* the common dir. So --git-dir === --git-common-dir iff `dir` is the
|
|
68
|
+
* main checkout. This needs no knowledge of ashlr's own sandbox layout and
|
|
69
|
+
* correctly covers every isolation mechanism that uses real git worktrees.
|
|
70
|
+
*
|
|
71
|
+
* Fails closed: any unresolved rev-parse (not a repo, git error, etc.) is
|
|
72
|
+
* treated as "this is the main checkout" — an unknown answer must never be
|
|
73
|
+
* read as "safe to force-reset".
|
|
74
|
+
*/
|
|
75
|
+
function isPrimaryCheckout(dir) {
|
|
76
|
+
const gitDir = git(dir, ['rev-parse', '--path-format=absolute', '--git-dir']);
|
|
77
|
+
const commonDir = git(dir, ['rev-parse', '--path-format=absolute', '--git-common-dir']);
|
|
78
|
+
if (gitDir === null || commonDir === null)
|
|
79
|
+
return true;
|
|
80
|
+
const gitDirId = canonicalFilesystemPathIdentity(gitDir);
|
|
81
|
+
const commonDirId = canonicalFilesystemPathIdentity(commonDir);
|
|
82
|
+
if (gitDirId === null || commonDirId === null)
|
|
83
|
+
return true;
|
|
84
|
+
return gitDirId === commonDirId;
|
|
85
|
+
}
|
|
54
86
|
// ---------------------------------------------------------------------------
|
|
55
87
|
// Public API
|
|
56
88
|
// ---------------------------------------------------------------------------
|
|
@@ -134,8 +166,13 @@ export function snapshotProject(project) {
|
|
|
134
166
|
* - NEVER pushes to a remote.
|
|
135
167
|
* - NEVER deletes branches.
|
|
136
168
|
* - NEVER force-resets without opts.force === true.
|
|
169
|
+
* - NEVER force-resets the main checkout — opts.force is refused outright
|
|
170
|
+
* when snap.project is not an isolated linked worktree, before any dirty
|
|
171
|
+
* check runs (an older-commit force-reset can also silently discard
|
|
172
|
+
* COMMITTED work made after the snapshot; see isPrimaryCheckout above).
|
|
137
173
|
* - Refuses (returns { ok: false, detail }) without throwing when:
|
|
138
174
|
* • snap.isRepo is false (nothing to restore)
|
|
175
|
+
* • opts.force is true and snap.project is the main checkout
|
|
139
176
|
* • the current working tree is dirty and opts.force is false
|
|
140
177
|
* • any git operation fails
|
|
141
178
|
* - With opts.force: uses `git reset --hard <head>` so local uncommitted
|
|
@@ -161,6 +198,23 @@ export async function rollbackTo(snap, opts) {
|
|
|
161
198
|
};
|
|
162
199
|
}
|
|
163
200
|
const project = snap.project;
|
|
201
|
+
// --- Refuse --force against the main checkout, unconditionally ---
|
|
202
|
+
// This must run before the dirty-tree check: even a clean tree can lose
|
|
203
|
+
// committed work to `reset --hard`, and a dirty tree can lose live,
|
|
204
|
+
// uncommitted operator/agent edits with no recovery path at all.
|
|
205
|
+
if (opts.force && isPrimaryCheckout(project)) {
|
|
206
|
+
return {
|
|
207
|
+
ok: false,
|
|
208
|
+
detail: 'Rollback refused: --force would run `git reset --hard` against the ' +
|
|
209
|
+
'main checkout, not an isolated worktree. This can silently discard ' +
|
|
210
|
+
'live uncommitted work (yours or a concurrent agent\'s) and commits ' +
|
|
211
|
+
'made since the snapshot. Force-rollback is only permitted against an ' +
|
|
212
|
+
'isolated linked worktree (e.g. a sandbox created via `git worktree ' +
|
|
213
|
+
'add`). To roll back the main checkout, use the non-force path (`git ' +
|
|
214
|
+
'checkout`, which refuses to overwrite a dirty tree) or restore ' +
|
|
215
|
+
'manually with git after reviewing what would be discarded.',
|
|
216
|
+
};
|
|
217
|
+
}
|
|
164
218
|
// --- Check current dirty state ---
|
|
165
219
|
try {
|
|
166
220
|
const porcelain = git(project, ['status', '--porcelain']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../../src/core/swarm/rollback.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rollback.js","sourceRoot":"","sources":["../../../src/core/swarm/rollback.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,7 @@ import { scrubSecrets as scrubSensitiveText } from '../util/scrub.js';
|
|
|
47
47
|
import { mergeDelegationScope, summarizeDelegationScope } from '../run/delegation-scope.js';
|
|
48
48
|
import { assertSafeExecutionIdentity } from '../fleet/attempt-identity.js';
|
|
49
49
|
import { runEventSummary } from '../learning/causal.js';
|
|
50
|
+
import { isGoalConductorQuotaRefusal } from '../goals/conductor-quota.js';
|
|
50
51
|
import { PROPOSAL_PERSISTENCE_MISMATCH_REASON, PROPOSAL_PERSISTENCE_MISMATCH_RESULT, } from '../inbox/persistence-mismatch.js';
|
|
51
52
|
import { abandonExecutionAuthority, acquireExecutionAuthority, beginExecutionAuthority, finishExecutionAuthority, } from '../util/execution-lease.js';
|
|
52
53
|
import { assertMayMutate, killSwitchOn } from '../sandbox/policy.js';
|
|
@@ -58,6 +59,33 @@ let _riskScan = null;
|
|
|
58
59
|
let _shouldEscalate = null;
|
|
59
60
|
let _snapshotProject = null;
|
|
60
61
|
let _m17Loaded = false;
|
|
62
|
+
/**
|
|
63
|
+
* True when gate.js (risk-scan/escalation) failed to load. Set once by
|
|
64
|
+
* loadM17() and never retried (mirrors the _m17Loaded singleton-cache
|
|
65
|
+
* semantics of the other lazy deps). runSwarm() checks this BEFORE any task
|
|
66
|
+
* executes and refuses to run rather than operate with zero risk assessment
|
|
67
|
+
* — see the preflight check near the M19 governance gate.
|
|
68
|
+
*/
|
|
69
|
+
let _gateLoadFailed = false;
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// M17/M21 lazy-load observability — M197 structured-logging convention
|
|
72
|
+
// (mirrors goal-planner.ts's plannerLog, itself modeled on manager.ts /
|
|
73
|
+
// automerge-pass.ts). sign.js, gate.js, rollback.js, and sandbox/audit.js all
|
|
74
|
+
// exist in this repo today: a throw here means a genuine build problem (bad
|
|
75
|
+
// build, import cycle, partial dist) — NOT an absent module — so it must
|
|
76
|
+
// never be a silent catch.
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
function runnerLog(level, msg, extra) {
|
|
79
|
+
const line = extra
|
|
80
|
+
? `[ashlr] swarm/runner:${level} ${msg} ${JSON.stringify(extra)}`
|
|
81
|
+
: `[ashlr] swarm/runner:${level} ${msg}`;
|
|
82
|
+
if (level === 'error') {
|
|
83
|
+
console.error(line);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.warn(line);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
61
89
|
async function loadM17() {
|
|
62
90
|
if (_m17Loaded)
|
|
63
91
|
return;
|
|
@@ -67,23 +95,40 @@ async function loadM17() {
|
|
|
67
95
|
_signOutput = sign.signOutput;
|
|
68
96
|
_verifyOutput = sign.verifyOutput;
|
|
69
97
|
}
|
|
70
|
-
catch {
|
|
71
|
-
// sign.ts
|
|
98
|
+
catch (err) {
|
|
99
|
+
// sign.ts exists in the repo. Every call site already treats signing as
|
|
100
|
+
// best-effort (see the try/catch around _signOutput() — "absent
|
|
101
|
+
// signature means downstream verification skips this dep"), so a
|
|
102
|
+
// load failure degrades the same way, but LOUDLY: it must never vanish
|
|
103
|
+
// into a silent catch, since that's exactly how signing fails open.
|
|
104
|
+
runnerLog('error', '[M17][SECURITY] output signing unavailable this run — task results will NOT be signed and downstream tamper verification will silently skip them', { module: './sign.js', reason: err instanceof Error ? err.message : String(err) });
|
|
72
105
|
}
|
|
73
106
|
try {
|
|
74
107
|
const gate = await import('./gate.js');
|
|
75
108
|
_riskScan = gate.riskScan;
|
|
76
109
|
_shouldEscalate = gate.shouldEscalate;
|
|
77
110
|
}
|
|
78
|
-
catch {
|
|
79
|
-
// gate.ts
|
|
111
|
+
catch (err) {
|
|
112
|
+
// gate.ts exists in the repo. Unlike sign/rollback/audit (forensic or
|
|
113
|
+
// recovery aids), the risk-scan/escalation gate is the ONLY REAL-TIME
|
|
114
|
+
// PREVENTIVE control among the M17/M21 lazy deps — it's what stops risky
|
|
115
|
+
// autonomous output from proceeding unchecked. Losing it silently would
|
|
116
|
+
// mean every task result runs with zero risk assessment. FAIL CLOSED:
|
|
117
|
+
// flag it so runSwarm() refuses to start (see _gateLoadFailed) instead
|
|
118
|
+
// of degrading to no-op.
|
|
119
|
+
_gateLoadFailed = true;
|
|
120
|
+
runnerLog('error', '[M17][SECURITY] risk-scan/escalation gate unavailable — swarm will refuse to run rather than execute with zero risk assessment', { module: './gate.js', reason: err instanceof Error ? err.message : String(err) });
|
|
80
121
|
}
|
|
81
122
|
try {
|
|
82
123
|
const rb = await import('./rollback.js');
|
|
83
124
|
_snapshotProject = rb.snapshotProject;
|
|
84
125
|
}
|
|
85
|
-
catch {
|
|
86
|
-
// rollback.ts
|
|
126
|
+
catch (err) {
|
|
127
|
+
// rollback.ts exists in the repo. Snapshot creation is already
|
|
128
|
+
// best-effort at its call site ("snapshot failure never blocks the
|
|
129
|
+
// swarm"), so a load failure degrades the same way — but loudly, so an
|
|
130
|
+
// operator can see the undo safety net is missing this run.
|
|
131
|
+
runnerLog('warn', '[M17] rollback snapshot module unavailable this run — no pre-run git snapshot will be captured (no undo safety net)', { module: './rollback.js', reason: err instanceof Error ? err.message : String(err) });
|
|
87
132
|
}
|
|
88
133
|
}
|
|
89
134
|
let _createSandbox = null;
|
|
@@ -120,8 +165,12 @@ async function loadM21() {
|
|
|
120
165
|
const au = await import(/* @vite-ignore */ auSpec);
|
|
121
166
|
_audit = au.audit;
|
|
122
167
|
}
|
|
123
|
-
catch {
|
|
124
|
-
// audit.ts
|
|
168
|
+
catch (err) {
|
|
169
|
+
// audit.ts exists in the repo. Every call site already treats _audit?.()
|
|
170
|
+
// as optional + best-effort ("audit is best-effort"), so a load failure
|
|
171
|
+
// degrades the same way — but loudly, so an operator can see the audit
|
|
172
|
+
// trail is missing this run rather than assuming silence means clean.
|
|
173
|
+
runnerLog('warn', '[M21] audit logging module unavailable this run — no audit trail will be written (sandbox create/cleanup, proposal capture, etc. will NOT be recorded)', { module: '../sandbox/audit.js', reason: err instanceof Error ? err.message : String(err) });
|
|
125
174
|
}
|
|
126
175
|
try {
|
|
127
176
|
// M24: the inbox proposal sink — used ONLY when opts.propose is set.
|
|
@@ -478,6 +527,11 @@ enforceKillState = false) {
|
|
|
478
527
|
// subprocess. That single assignment is the load-bearing guard; this task
|
|
479
528
|
// sets nothing per-call.
|
|
480
529
|
noMemory: false,
|
|
530
|
+
...(opts.providerQuota ? {
|
|
531
|
+
noMemory: true,
|
|
532
|
+
noCapture: true,
|
|
533
|
+
providerQuota: opts.providerQuota,
|
|
534
|
+
} : {}),
|
|
481
535
|
...(opts.signal ? { signal: opts.signal } : {}),
|
|
482
536
|
...(taskDelegationScope ? { delegationScope: taskDelegationScope } : {}),
|
|
483
537
|
});
|
|
@@ -498,6 +552,8 @@ enforceKillState = false) {
|
|
|
498
552
|
}
|
|
499
553
|
}
|
|
500
554
|
catch (err) {
|
|
555
|
+
if (isGoalConductorQuotaRefusal(err))
|
|
556
|
+
throw err;
|
|
501
557
|
if (opts.signal?.aborted) {
|
|
502
558
|
taskRun.status = 'cancelled';
|
|
503
559
|
taskRun.error = 'Cancelled by the swarm owner.';
|
|
@@ -1407,6 +1463,44 @@ async function runSwarmInternal(input, cfg, opts, sink) {
|
|
|
1407
1463
|
}
|
|
1408
1464
|
}
|
|
1409
1465
|
// -------------------------------------------------------------------------
|
|
1466
|
+
// M17 SECURITY: fail CLOSED when the risk-scan/escalation gate (gate.js)
|
|
1467
|
+
// could not be loaded — see loadM17()/_gateLoadFailed. This is the ONE lazy
|
|
1468
|
+
// dep of the four (sign/gate/rollback/audit) that gets a hard refusal
|
|
1469
|
+
// rather than a loud degrade: it's the only real-time PREVENTIVE control —
|
|
1470
|
+
// sign/rollback/audit are forensic or recovery aids whose absence is bad
|
|
1471
|
+
// but doesn't let unreviewed risky output slip through. Matches the
|
|
1472
|
+
// requireSandbox convention already in this file: refuse rather than run
|
|
1473
|
+
// with the safety control silently missing.
|
|
1474
|
+
// -------------------------------------------------------------------------
|
|
1475
|
+
if (_gateLoadFailed) {
|
|
1476
|
+
const now = new Date().toISOString();
|
|
1477
|
+
const reason = 'the risk-scan/escalation gate (gate.js) failed to load, so task output ' +
|
|
1478
|
+
'cannot be automatically screened for risk before it proceeds';
|
|
1479
|
+
const gateBlockedRun = {
|
|
1480
|
+
id: opts.runId ?? makeId(),
|
|
1481
|
+
goal: input.goal,
|
|
1482
|
+
specId: input.specId ?? null,
|
|
1483
|
+
project,
|
|
1484
|
+
createdAt: now,
|
|
1485
|
+
updatedAt: now,
|
|
1486
|
+
budget,
|
|
1487
|
+
usage: newUsage(),
|
|
1488
|
+
parallel,
|
|
1489
|
+
status: 'failed',
|
|
1490
|
+
plan: { specId: input.specId ?? null, goal: input.goal, tasks: [] },
|
|
1491
|
+
tasks: [],
|
|
1492
|
+
result: `Refused: ${reason}. No tasks were executed; the working tree was NOT touched.`,
|
|
1493
|
+
proposalOutcome: {
|
|
1494
|
+
kind: 'engine-failed-no-diff',
|
|
1495
|
+
reason,
|
|
1496
|
+
},
|
|
1497
|
+
};
|
|
1498
|
+
emitLog(sink, gateBlockedRun.result ?? '');
|
|
1499
|
+
if (!opts.dryRun)
|
|
1500
|
+
persist(gateBlockedRun);
|
|
1501
|
+
return gateBlockedRun;
|
|
1502
|
+
}
|
|
1503
|
+
// -------------------------------------------------------------------------
|
|
1410
1504
|
// RESUME: load existing SwarmRun if resumeId provided.
|
|
1411
1505
|
// -------------------------------------------------------------------------
|
|
1412
1506
|
if (opts.resumeId) {
|
|
@@ -1624,7 +1718,7 @@ async function runSwarmInternal(input, cfg, opts, sink) {
|
|
|
1624
1718
|
// is loaded by the CLI layer (cli/swarm.ts) and passed in via the input
|
|
1625
1719
|
// if needed. The planner accepts undefined specBody and works goal-only.
|
|
1626
1720
|
const specBody = undefined;
|
|
1627
|
-
const plan = await planSwarm({ goal: input.goal, specBody }, cfg, opts.signal);
|
|
1721
|
+
const plan = await planSwarm({ goal: input.goal, specBody }, cfg, opts.signal, opts.providerQuota, opts.providerQuota ? run.budget.maxTokens : undefined);
|
|
1628
1722
|
if (plan.usage !== undefined) {
|
|
1629
1723
|
run.usage = addUsage(run.usage, plan.usage);
|
|
1630
1724
|
}
|
|
@@ -1661,7 +1755,9 @@ async function runSwarmInternal(input, cfg, opts, sink) {
|
|
|
1661
1755
|
return run;
|
|
1662
1756
|
}
|
|
1663
1757
|
run.status = 'failed';
|
|
1664
|
-
run.result =
|
|
1758
|
+
run.result = isGoalConductorQuotaRefusal(err)
|
|
1759
|
+
? `Swarm refused: ${err.message}. No unreserved provider inference was attempted.`
|
|
1760
|
+
: `Planning failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
1665
1761
|
maybePersist(run);
|
|
1666
1762
|
emitLog(sink, run.result);
|
|
1667
1763
|
// M21: clean up sandbox even on planning failure (no diff to capture yet).
|
|
@@ -1787,7 +1883,9 @@ async function runSwarmInternal(input, cfg, opts, sink) {
|
|
|
1787
1883
|
catch (err) {
|
|
1788
1884
|
// Unexpected error in the phase loop — surface cleanly.
|
|
1789
1885
|
run.status = 'failed';
|
|
1790
|
-
run.result =
|
|
1886
|
+
run.result = isGoalConductorQuotaRefusal(err)
|
|
1887
|
+
? `Swarm refused: ${err.message}. No unreserved provider inference was attempted.`
|
|
1888
|
+
: `Swarm failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
1791
1889
|
persist(run);
|
|
1792
1890
|
emitLog(sink, run.result);
|
|
1793
1891
|
// M21: capture diff of any partial work, then remove sandbox.
|
|
@@ -1869,6 +1967,20 @@ export async function runSwarm(input, cfg, opts, sink) {
|
|
|
1869
1967
|
emitLog(sink, refused.result ?? 'Swarm execution authority unavailable.');
|
|
1870
1968
|
return refused;
|
|
1871
1969
|
};
|
|
1970
|
+
if (opts.providerQuota) {
|
|
1971
|
+
const signedBudget = opts.budget;
|
|
1972
|
+
const invalidSignedShape = opts.allowCloud === true || signedBudget?.allowCloud === true ||
|
|
1973
|
+
opts.background === true || opts.dryRun === true || opts.approved === true ||
|
|
1974
|
+
opts.resumeId !== undefined || opts.runId !== opts.providerQuota.attemptId ||
|
|
1975
|
+
!Number.isSafeInteger(signedBudget?.maxSteps) ||
|
|
1976
|
+
(signedBudget?.maxSteps ?? 0) < 1 || (signedBudget?.maxSteps ?? 0) > 12 ||
|
|
1977
|
+
!Number.isSafeInteger(signedBudget?.maxTokens) ||
|
|
1978
|
+
(signedBudget?.maxTokens ?? 0) < 1 || (signedBudget?.maxTokens ?? 0) > 50_000;
|
|
1979
|
+
if (invalidSignedShape) {
|
|
1980
|
+
return refuseAuthority(opts.providerQuota.attemptId, 'signed provider quota requires a fresh foreground builtin run with the bounded one-shot budget');
|
|
1981
|
+
}
|
|
1982
|
+
opts = { ...opts, allowCloud: false, noCapture: true };
|
|
1983
|
+
}
|
|
1872
1984
|
let persistenceFailed = false;
|
|
1873
1985
|
const execute = async () => {
|
|
1874
1986
|
try {
|