@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
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function resolveGoalConductorTarget(goalId, dependencies) {
|
|
2
|
+
if (!goalId || goalId.length > 256) {
|
|
3
|
+
return { ok: false, reason: 'goal-conductor-explicit-goal-required' };
|
|
4
|
+
}
|
|
5
|
+
const source = dependencies.listGoalsDetailed({ status: 'active' });
|
|
6
|
+
if (source.sourceState === 'degraded' || !source.complete) {
|
|
7
|
+
return { ok: false, reason: 'goal-conductor-goal-source-degraded' };
|
|
8
|
+
}
|
|
9
|
+
const goal = source.goals.find((entry) => entry.id === goalId);
|
|
10
|
+
if (!goal)
|
|
11
|
+
return { ok: false, reason: 'goal-conductor-target-not-active' };
|
|
12
|
+
if (!goal.project)
|
|
13
|
+
return { ok: false, reason: 'goal-conductor-target-project-missing' };
|
|
14
|
+
const enrolled = dependencies.listEnrolled();
|
|
15
|
+
if (!enrolled.includes(goal.project)) {
|
|
16
|
+
return { ok: false, reason: 'goal-conductor-target-project-not-enrolled' };
|
|
17
|
+
}
|
|
18
|
+
const milestone = dependencies.nextActionableMilestone(goal);
|
|
19
|
+
if (!milestone) {
|
|
20
|
+
return { ok: false, reason: 'goal-conductor-target-has-no-actionable-milestone' };
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
ok: true,
|
|
24
|
+
reason: 'goal-conductor-target-resolved',
|
|
25
|
+
goal,
|
|
26
|
+
milestone,
|
|
27
|
+
target: {
|
|
28
|
+
goalId: goal.id,
|
|
29
|
+
milestoneId: milestone.id,
|
|
30
|
+
goalDigest: dependencies.goalSnapshotDigest(goal),
|
|
31
|
+
projectPath: goal.project,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=conductor-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conductor-target.js","sourceRoot":"","sources":["../../../src/core/goals/conductor-target.ts"],"names":[],"mappings":"AAwBA,MAAM,UAAU,0BAA0B,CACxC,MAAc,EACd,YAA6C;IAE7C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACnC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;IACxE,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,qCAAqC,EAAE,CAAC;IACtE,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC/D,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC;IAC5E,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,uCAAuC,EAAE,CAAC;IACzF,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC;IAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC;IAC7E,CAAC;IACD,MAAM,SAAS,GAAG,YAAY,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,mDAAmD,EAAE,CAAC;IACpF,CAAC;IACD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,gCAAgC;QACxC,IAAI;QACJ,SAAS;QACT,MAAM,EAAE;YACN,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,WAAW,EAAE,SAAS,CAAC,EAAE;YACzB,UAAU,EAAE,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC;YACjD,WAAW,EAAE,IAAI,CAAC,OAAO;SAC1B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -38,6 +38,10 @@ export interface ConductorCycleSummary {
|
|
|
38
38
|
killSwitchTripped: boolean;
|
|
39
39
|
/** True when live conductor authority is intentionally unavailable. */
|
|
40
40
|
activationRefused?: boolean;
|
|
41
|
+
/** Structured fail-closed reason for a dormant/invalid one-shot request. */
|
|
42
|
+
activationRefusalReason?: string;
|
|
43
|
+
/** Metadata-only identifier of the durably consumed one-shot permit. */
|
|
44
|
+
activationPermitId?: string;
|
|
41
45
|
/**
|
|
42
46
|
* Per-goal activity for rich UI display: [{goalId, objective, fractionDone,
|
|
43
47
|
* milestoneTitle, proposalFiled}]. Only populated for goals where work was
|
|
@@ -77,3 +81,14 @@ export declare function runConductor(cfg: AshlrConfig, opts: {
|
|
|
77
81
|
dryRun: boolean;
|
|
78
82
|
maxGoalsPerCycle?: number;
|
|
79
83
|
} & Pick<AdvanceOptions, 'budget' | 'allowCloud' | 'allowAnyRepo'>): Promise<ConductorCycleSummary>;
|
|
84
|
+
/**
|
|
85
|
+
* Execute one explicitly targeted, signed goal milestone.
|
|
86
|
+
*
|
|
87
|
+
* This does not enable the general conductor. It has no resident/watch shape,
|
|
88
|
+
* no cloud option, no retry, and no daemon fallback. Production remains dormant
|
|
89
|
+
* because the immutable conductor trust-root set is intentionally empty; this
|
|
90
|
+
* source path alone grants no activation authority.
|
|
91
|
+
*/
|
|
92
|
+
export declare function runAuthorizedConductorOnce(cfg: AshlrConfig, request: {
|
|
93
|
+
goalId: string;
|
|
94
|
+
}): Promise<ConductorCycleSummary>;
|
|
@@ -18,6 +18,17 @@
|
|
|
18
18
|
* - Kill-switch is checked before each goal advance so a running conductor loop
|
|
19
19
|
* can be stopped between milestones without waiting for a swarm to finish.
|
|
20
20
|
*/
|
|
21
|
+
function emptyConductorSummary() {
|
|
22
|
+
return {
|
|
23
|
+
goalsAdvanced: 0,
|
|
24
|
+
milestonesAdvanced: 0,
|
|
25
|
+
proposalsFiled: 0,
|
|
26
|
+
goalsDone: 0,
|
|
27
|
+
daemonFallback: false,
|
|
28
|
+
killSwitchTripped: false,
|
|
29
|
+
goalActivity: [],
|
|
30
|
+
};
|
|
31
|
+
}
|
|
21
32
|
// ---------------------------------------------------------------------------
|
|
22
33
|
// runConductor
|
|
23
34
|
// ---------------------------------------------------------------------------
|
|
@@ -36,15 +47,7 @@
|
|
|
36
47
|
* with remaining goals.
|
|
37
48
|
*/
|
|
38
49
|
export async function runConductor(cfg, opts) {
|
|
39
|
-
const summary =
|
|
40
|
-
goalsAdvanced: 0,
|
|
41
|
-
milestonesAdvanced: 0,
|
|
42
|
-
proposalsFiled: 0,
|
|
43
|
-
goalsDone: 0,
|
|
44
|
-
daemonFallback: false,
|
|
45
|
-
killSwitchTripped: false,
|
|
46
|
-
goalActivity: [],
|
|
47
|
-
};
|
|
50
|
+
const summary = emptyConductorSummary();
|
|
48
51
|
if (!opts.dryRun) {
|
|
49
52
|
const { liveConductorActivationAuthorized } = await import('../daemon/activation-permit.js');
|
|
50
53
|
if (!liveConductorActivationAuthorized()) {
|
|
@@ -150,4 +153,108 @@ export async function runConductor(cfg, opts) {
|
|
|
150
153
|
}
|
|
151
154
|
return summary;
|
|
152
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Execute one explicitly targeted, signed goal milestone.
|
|
158
|
+
*
|
|
159
|
+
* This does not enable the general conductor. It has no resident/watch shape,
|
|
160
|
+
* no cloud option, no retry, and no daemon fallback. Production remains dormant
|
|
161
|
+
* because the immutable conductor trust-root set is intentionally empty; this
|
|
162
|
+
* source path alone grants no activation authority.
|
|
163
|
+
*/
|
|
164
|
+
export async function runAuthorizedConductorOnce(cfg, request) {
|
|
165
|
+
const summary = emptyConductorSummary();
|
|
166
|
+
const refuse = (reason) => {
|
|
167
|
+
summary.activationRefused = true;
|
|
168
|
+
summary.activationRefusalReason = reason;
|
|
169
|
+
return summary;
|
|
170
|
+
};
|
|
171
|
+
if (!request.goalId)
|
|
172
|
+
return refuse('goal-conductor-explicit-goal-required');
|
|
173
|
+
const { killSwitchOn, listEnrolled } = await import('../sandbox/policy.js');
|
|
174
|
+
if (killSwitchOn()) {
|
|
175
|
+
summary.killSwitchTripped = true;
|
|
176
|
+
return summary;
|
|
177
|
+
}
|
|
178
|
+
const { goalSnapshotDigest, listGoalsDetailed, loadGoal } = await import('./store.js');
|
|
179
|
+
const { nextActionableMilestone, advanceGoalCycle, progressOf } = await import('./advance.js');
|
|
180
|
+
const { resolveGoalConductorTarget } = await import('./conductor-target.js');
|
|
181
|
+
const resolution = resolveGoalConductorTarget(request.goalId, {
|
|
182
|
+
listGoalsDetailed,
|
|
183
|
+
listEnrolled,
|
|
184
|
+
nextActionableMilestone,
|
|
185
|
+
goalSnapshotDigest,
|
|
186
|
+
});
|
|
187
|
+
if (!resolution.ok || !resolution.target || !resolution.goal || !resolution.milestone) {
|
|
188
|
+
return refuse(resolution.reason);
|
|
189
|
+
}
|
|
190
|
+
const { target, goal, milestone } = resolution;
|
|
191
|
+
const activationModule = await import('../daemon/activation-permit.js');
|
|
192
|
+
const activation = activationModule.consumeGoalConductorActivationPermit(cfg, target);
|
|
193
|
+
if (!activation.authorized || !activation.capability)
|
|
194
|
+
return refuse(activation.reason);
|
|
195
|
+
summary.activationPermitId = activation.permitId;
|
|
196
|
+
// Reopen after durable receipt creation. Any steering between preflight and
|
|
197
|
+
// consumption burns the permit and makes zero provider contacts.
|
|
198
|
+
const current = loadGoal(goal.id);
|
|
199
|
+
if (!current || goalSnapshotDigest(current) !== target.goalDigest) {
|
|
200
|
+
return refuse('goal-conductor-target-drifted-after-consumption');
|
|
201
|
+
}
|
|
202
|
+
const currentMilestone = nextActionableMilestone(current);
|
|
203
|
+
if (!currentMilestone || currentMilestone.id !== target.milestoneId) {
|
|
204
|
+
return refuse('goal-conductor-milestone-drifted-after-consumption');
|
|
205
|
+
}
|
|
206
|
+
if (!activationModule.isGoalConductorActivationCapability(activation.capability, target)) {
|
|
207
|
+
return refuse('goal-conductor-capability-invalid-or-consumed');
|
|
208
|
+
}
|
|
209
|
+
if (!activation.permitId)
|
|
210
|
+
return refuse('goal-conductor-activation-permit-id-missing');
|
|
211
|
+
// This is intentionally the final pre-provider boundary, after the one-shot
|
|
212
|
+
// capability's action-time runtime revalidation. All thirteen possible
|
|
213
|
+
// contacts are reserved atomically here, then a non-serializable claim seam
|
|
214
|
+
// is carried to the exact planner/orchestrator inference sites.
|
|
215
|
+
const executionConfig = activation.configSnapshot ?? cfg;
|
|
216
|
+
const { reserveGoalConductorProviderQuota } = await import('./conductor-quota.js');
|
|
217
|
+
const quota = reserveGoalConductorProviderQuota(executionConfig, {
|
|
218
|
+
permitId: activation.permitId,
|
|
219
|
+
goalId: target.goalId,
|
|
220
|
+
milestoneId: target.milestoneId,
|
|
221
|
+
goalDigest: target.goalDigest,
|
|
222
|
+
projectPath: target.projectPath,
|
|
223
|
+
});
|
|
224
|
+
if (!quota.launchAuthorized)
|
|
225
|
+
return refuse(quota.reason);
|
|
226
|
+
try {
|
|
227
|
+
const result = await advanceGoalCycle(goal.id, executionConfig, {
|
|
228
|
+
maxRetries: 0,
|
|
229
|
+
allowCloud: false,
|
|
230
|
+
allowAnyRepo: false,
|
|
231
|
+
budget: {
|
|
232
|
+
maxTokens: activationModule.GOAL_CONDUCTOR_ONCE_MAX_TOKENS,
|
|
233
|
+
maxSteps: activationModule.GOAL_CONDUCTOR_ONCE_MAX_STEPS,
|
|
234
|
+
allowCloud: false,
|
|
235
|
+
},
|
|
236
|
+
expectedGoalDigest: target.goalDigest,
|
|
237
|
+
expectedMilestoneId: target.milestoneId,
|
|
238
|
+
providerQuota: quota.providerQuota,
|
|
239
|
+
});
|
|
240
|
+
summary.goalsAdvanced = 1;
|
|
241
|
+
summary.milestonesAdvanced = 1;
|
|
242
|
+
summary.proposalsFiled = result.proposalsFiled;
|
|
243
|
+
summary.goalsDone = result.goalDone ? 1 : 0;
|
|
244
|
+
const refreshed = loadGoal(goal.id);
|
|
245
|
+
const progress = refreshed ? progressOf(refreshed) : { fractionDone: 0 };
|
|
246
|
+
summary.goalActivity.push({
|
|
247
|
+
goalId: goal.id,
|
|
248
|
+
objective: goal.objective,
|
|
249
|
+
fractionDone: progress.fractionDone,
|
|
250
|
+
milestoneTitle: milestone.title,
|
|
251
|
+
proposalFiled: result.proposalsFiled > 0,
|
|
252
|
+
goalCompleted: result.goalDone,
|
|
253
|
+
});
|
|
254
|
+
return summary;
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
return refuse(`goal-conductor-advance-failed:${error instanceof Error ? error.message : String(error)}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
153
260
|
//# sourceMappingURL=conductor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conductor.js","sourceRoot":"","sources":["../../../src/core/goals/conductor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"conductor.js","sourceRoot":"","sources":["../../../src/core/goals/conductor.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,21 @@ export interface UpdateMilestoneStatusOptions extends GoalPersistenceOptions {
|
|
|
59
59
|
proposalId?: string | null;
|
|
60
60
|
specId?: string | null;
|
|
61
61
|
}
|
|
62
|
+
export interface ClaimGoalMilestoneResult {
|
|
63
|
+
claimed: boolean;
|
|
64
|
+
reason: string;
|
|
65
|
+
goal?: Goal;
|
|
66
|
+
}
|
|
67
|
+
/** Stable digest used by signed one-shot conductor target bindings. */
|
|
68
|
+
export declare function goalSnapshotDigest(goal: Goal): string;
|
|
69
|
+
/** Full persisted-record guard so parseable corruption cannot look authoritative. */
|
|
70
|
+
export declare function isValidGoalRecord(parsed: unknown): parsed is Goal;
|
|
71
|
+
/**
|
|
72
|
+
* Repair-only admission guard. It relaxes exactly one legacy defect: a valid
|
|
73
|
+
* top-level `updatedAt` may precede the goal's valid `createdAt`. Every other
|
|
74
|
+
* goal, mission, project, status, id, and milestone invariant remains strict.
|
|
75
|
+
*/
|
|
76
|
+
export declare function isValidGoalRecordForTimestampRepair(parsed: unknown): parsed is Goal;
|
|
62
77
|
/**
|
|
63
78
|
* Create a new Goal from an objective, persist it, and return it.
|
|
64
79
|
*
|
|
@@ -70,8 +85,9 @@ export interface UpdateMilestoneStatusOptions extends GoalPersistenceOptions {
|
|
|
70
85
|
* M109: stamps `owner` from cfg.user?.id ?? cfg.user?.name when cfg is
|
|
71
86
|
* provided (undefined otherwise — backward-compatible).
|
|
72
87
|
*
|
|
73
|
-
* NEVER runs a swarm, authors a spec, or emits an outward action.
|
|
74
|
-
*
|
|
88
|
+
* NEVER runs a swarm, authors a spec, or emits an outward action. A duplicate
|
|
89
|
+
* deterministic id returns the actual persisted goal; a new-record write
|
|
90
|
+
* failure throws so callers cannot report an object that was never created.
|
|
75
91
|
*/
|
|
76
92
|
export declare function createGoal(objective: string, opts?: {
|
|
77
93
|
project?: string | null;
|
|
@@ -117,11 +133,19 @@ export declare function listGoalsDetailed(filter?: {
|
|
|
117
133
|
export declare function listGoals(filter?: {
|
|
118
134
|
status?: GoalStatus;
|
|
119
135
|
}): Goal[];
|
|
136
|
+
export declare function saveGoal(goal: Goal, opts?: GoalPersistenceOptions, stillAuthorized?: () => boolean): boolean;
|
|
120
137
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
138
|
+
* Atomically claim the exact signed goal generation and milestone for one
|
|
139
|
+
* conductor attempt. All ordinary saveGoal writers share this per-goal lock,
|
|
140
|
+
* so drift cannot slip between digest validation and the in-progress write.
|
|
123
141
|
*/
|
|
124
|
-
export declare function
|
|
142
|
+
export declare function claimGoalMilestoneIfCurrent(input: {
|
|
143
|
+
goalId: string;
|
|
144
|
+
milestoneId: string;
|
|
145
|
+
expectedGoalDigest: string;
|
|
146
|
+
now?: string;
|
|
147
|
+
stillAuthorized?: () => boolean;
|
|
148
|
+
}): ClaimGoalMilestoneResult;
|
|
125
149
|
/**
|
|
126
150
|
* Delete a Goal record by id. Idempotent — deleting an absent goal is a no-op.
|
|
127
151
|
* Pure FS under ~/.ashlr/goals; never touches a user repo. Never throws.
|