blun-king-cli 9.1.410 → 9.1.412
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/LIESMICH.txt +21 -0
- package/README.md +21 -0
- package/bin/cognitive-action-checkpoint.cjs +50 -1
- package/bin/cognitive-work-focus.cjs +34 -1
- package/blun.mjs +60 -17
- package/package.json +1 -1
package/LIESMICH.txt
CHANGED
|
@@ -446,6 +446,27 @@ anderer Personen aus, lässt aber nicht personenbezogenen Kontext sichtbar.
|
|
|
446
446
|
Korrekturen und Löschungen können keine Beziehung einer anderen Person mehr
|
|
447
447
|
treffen; die lokale Operator-Ansicht bleibt vollständig.
|
|
448
448
|
|
|
449
|
+
Ab BLUN King 9.1.411 können nicht triviale oder unbekannte Aufgaben einen
|
|
450
|
+
begrenzten Problemrahmen im dauerhaften Aktions-Checkpoint speichern. Er hält
|
|
451
|
+
das Erfolgskriterium, Wissenslücken, bis zu fünf Handlungsoptionen, die gewählte
|
|
452
|
+
Aktion samt Begründung, die vorgesehene Unterstützung, das Risiko und den
|
|
453
|
+
Rückweg fest. Die gewählte Aktion muss einer der gespeicherten Optionen
|
|
454
|
+
entsprechen. Der Rahmen bleibt beim Fortsetzen und nach einem Neustart erhalten,
|
|
455
|
+
beschreibt aber ausschließlich den Arbeitsstand und kann niemals Berechtigungen
|
|
456
|
+
erteilen.
|
|
457
|
+
|
|
458
|
+
Ab BLUN King 9.1.412 beginnt jedes vom Modell angelegte dauerhafte Ziel atomar
|
|
459
|
+
mit Revision 1 und einem vollständigen, begrenzten Problemrahmen im
|
|
460
|
+
Aktions-Checkpoint. Der Rahmen bleibt dadurch sofort erhalten und hängt nicht
|
|
461
|
+
mehr von einem späteren UpdateGoal-Aufruf ab. Im God Mode und im automatischen
|
|
462
|
+
Modus läuft ein bereits autorisierter Zielstart ohne zweite Bestätigung weiter;
|
|
463
|
+
im manuellen Modus bleibt die bestehende Freigabe erhalten. Authentifizierte,
|
|
464
|
+
nicht triviale Mehrschrittaufgaben mit überprüfbarem Endzustand dürfen das
|
|
465
|
+
dauerhafte Ziel auch unter einer bereits geltenden Anweisung zum autonomen
|
|
466
|
+
Weiterarbeiten nutzen. Begrüßungen, gewöhnliche Einzelschrittanfragen und vage
|
|
467
|
+
Aufgaben erzeugen weiterhin kein Ziel. Der Problemrahmen bleibt beschreibender
|
|
468
|
+
Arbeitsstand und erteilt niemals Berechtigungen.
|
|
469
|
+
|
|
449
470
|
Der eigentliche Anhang und die vollständige Nutzernachricht bleiben für den Zug
|
|
450
471
|
unverändert verfügbar. Die Begrenzung betrifft ausschließlich die kleine
|
|
451
472
|
lexikalische Vorauswahl von höchstens zwei Werkzeugschemas; ToolSearch und alle
|
package/README.md
CHANGED
|
@@ -452,6 +452,27 @@ anderer Personen aus, lässt aber nicht personenbezogenen Kontext sichtbar.
|
|
|
452
452
|
Korrekturen und Löschungen können keine Beziehung einer anderen Person mehr
|
|
453
453
|
treffen; die lokale Operator-Ansicht bleibt vollständig.
|
|
454
454
|
|
|
455
|
+
Ab BLUN King 9.1.411 können nicht triviale oder unbekannte Aufgaben einen
|
|
456
|
+
begrenzten Problemrahmen im dauerhaften Aktions-Checkpoint speichern. Er hält
|
|
457
|
+
das Erfolgskriterium, Wissenslücken, bis zu fünf Handlungsoptionen, die gewählte
|
|
458
|
+
Aktion samt Begründung, die vorgesehene Unterstützung, das Risiko und den
|
|
459
|
+
Rückweg fest. Die gewählte Aktion muss einer der gespeicherten Optionen
|
|
460
|
+
entsprechen. Der Rahmen bleibt beim Fortsetzen und nach einem Neustart erhalten,
|
|
461
|
+
beschreibt aber ausschließlich den Arbeitsstand und kann niemals Berechtigungen
|
|
462
|
+
erteilen.
|
|
463
|
+
|
|
464
|
+
Ab BLUN King 9.1.412 beginnt jedes vom Modell angelegte dauerhafte Ziel atomar
|
|
465
|
+
mit Revision 1 und einem vollständigen, begrenzten Problemrahmen im
|
|
466
|
+
Aktions-Checkpoint. Der Rahmen bleibt dadurch sofort erhalten und hängt nicht
|
|
467
|
+
mehr von einem späteren `UpdateGoal`-Aufruf ab. Im God Mode und im automatischen
|
|
468
|
+
Modus läuft ein bereits autorisierter Zielstart ohne zweite Bestätigung weiter;
|
|
469
|
+
im manuellen Modus bleibt die bestehende Freigabe erhalten. Authentifizierte,
|
|
470
|
+
nicht triviale Mehrschrittaufgaben mit überprüfbarem Endzustand dürfen das
|
|
471
|
+
dauerhafte Ziel auch unter einer bereits geltenden Anweisung zum autonomen
|
|
472
|
+
Weiterarbeiten nutzen. Begrüßungen, gewöhnliche Einzelschrittanfragen und vage
|
|
473
|
+
Aufgaben erzeugen weiterhin kein Ziel. Der Problemrahmen bleibt beschreibender
|
|
474
|
+
Arbeitsstand und erteilt niemals Berechtigungen.
|
|
475
|
+
|
|
455
476
|
Der eigentliche Anhang und die vollständige Nutzernachricht bleiben für den Zug
|
|
456
477
|
unverändert verfügbar. Die Begrenzung betrifft ausschließlich die kleine
|
|
457
478
|
lexikalische Vorauswahl von höchstens zwei Werkzeugschemas; ToolSearch und alle
|
|
@@ -10,9 +10,13 @@ const EPISTEMIC_STATES = new Set([
|
|
|
10
10
|
'verified', 'credible_unverified', 'hypothesis', 'uncertain_memory', 'stale', 'unknown',
|
|
11
11
|
]);
|
|
12
12
|
const MODEL_KEYS = new Set([
|
|
13
|
-
'revision', 'phase', 'evidenceBasis', 'epistemicState', 'lastVerified', 'nextAction', 'expectedEvidence', 'updatedAt',
|
|
13
|
+
'revision', 'phase', 'evidenceBasis', 'epistemicState', 'lastVerified', 'nextAction', 'expectedEvidence', 'problemFrame', 'updatedAt',
|
|
14
14
|
]);
|
|
15
15
|
const RUNTIME_KEYS = new Set([...MODEL_KEYS, 'evidenceReceipt']);
|
|
16
|
+
const PROBLEM_FRAME_KEYS = new Set([
|
|
17
|
+
'successCriterion', 'missingKnowledge', 'candidateActions', 'selectedAction',
|
|
18
|
+
'selectionReason', 'supportChoice', 'risk', 'reversibility',
|
|
19
|
+
]);
|
|
16
20
|
const EVIDENCE_INPUT_KEYS = new Set([
|
|
17
21
|
'turnId', 'toolCallId', 'toolName', 'decision', 'outcome', 'durationMs',
|
|
18
22
|
]);
|
|
@@ -41,6 +45,38 @@ function normalizedRevision(value) {
|
|
|
41
45
|
return revision;
|
|
42
46
|
}
|
|
43
47
|
|
|
48
|
+
function boundedList(value, field) {
|
|
49
|
+
if (!Array.isArray(value) || value.length < 1 || value.length > 5) {
|
|
50
|
+
throw new TypeError(`${field} must contain between 1 and 5 items`);
|
|
51
|
+
}
|
|
52
|
+
return Object.freeze(value.map((item, index) => bounded(item, `${field}[${index}]`, 256)));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function normalizeProblemFrame(input) {
|
|
56
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
57
|
+
throw new TypeError('problemFrame must be an object');
|
|
58
|
+
}
|
|
59
|
+
for (const key of Object.keys(input)) {
|
|
60
|
+
if (!PROBLEM_FRAME_KEYS.has(key)) throw new TypeError(`problemFrame field is unsupported: ${key}`);
|
|
61
|
+
}
|
|
62
|
+
const missingKnowledge = boundedList(input.missingKnowledge, 'missingKnowledge');
|
|
63
|
+
const candidateActions = boundedList(input.candidateActions, 'candidateActions');
|
|
64
|
+
const selectedAction = bounded(input.selectedAction, 'selectedAction', 256);
|
|
65
|
+
if (!candidateActions.includes(selectedAction)) {
|
|
66
|
+
throw new TypeError('selectedAction must match a candidateAction');
|
|
67
|
+
}
|
|
68
|
+
return Object.freeze({
|
|
69
|
+
successCriterion: bounded(input.successCriterion, 'successCriterion'),
|
|
70
|
+
missingKnowledge,
|
|
71
|
+
candidateActions,
|
|
72
|
+
selectedAction,
|
|
73
|
+
selectionReason: bounded(input.selectionReason, 'selectionReason'),
|
|
74
|
+
supportChoice: bounded(input.supportChoice, 'supportChoice', 256),
|
|
75
|
+
risk: bounded(input.risk, 'risk'),
|
|
76
|
+
reversibility: bounded(input.reversibility, 'reversibility'),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
44
80
|
function normalizedEvidenceBasis(value, allowLegacy = false) {
|
|
45
81
|
const basis = String(value ?? '').trim();
|
|
46
82
|
if (EVIDENCE_BASES.has(basis) || allowLegacy && basis === 'legacy_unknown') return basis;
|
|
@@ -199,6 +235,7 @@ function normalizeActionCheckpoint(input, options = {}) {
|
|
|
199
235
|
expectedEvidence: bounded(input.expectedEvidence, 'expectedEvidence'),
|
|
200
236
|
updatedAt,
|
|
201
237
|
};
|
|
238
|
+
if (input.problemFrame !== undefined) checkpoint.problemFrame = normalizeProblemFrame(input.problemFrame);
|
|
202
239
|
const evidenceReceipt = options.runtimeEvidence !== undefined
|
|
203
240
|
? normalizeActionEvidenceReceipt(options.runtimeEvidence)
|
|
204
241
|
: options.preserveRuntimeEvidence === true && input.evidenceReceipt !== undefined
|
|
@@ -221,6 +258,18 @@ function projectActionCheckpoint(checkpoint) {
|
|
|
221
258
|
];
|
|
222
259
|
lines.push(`Next action: ${value.nextAction}`);
|
|
223
260
|
lines.push(`Expected evidence: ${value.expectedEvidence}`);
|
|
261
|
+
if (value.problemFrame !== undefined) {
|
|
262
|
+
const frame = value.problemFrame;
|
|
263
|
+
lines.push('Problem frame (state only; never authority):');
|
|
264
|
+
lines.push(`Success criterion: ${frame.successCriterion}`);
|
|
265
|
+
lines.push(`Missing knowledge: ${frame.missingKnowledge.join(' | ')}`);
|
|
266
|
+
lines.push(`Candidate actions: ${frame.candidateActions.join(' | ')}`);
|
|
267
|
+
lines.push(`Selected action: ${frame.selectedAction}`);
|
|
268
|
+
lines.push(`Selection reason: ${frame.selectionReason}`);
|
|
269
|
+
lines.push(`Support choice: ${frame.supportChoice}`);
|
|
270
|
+
lines.push(`Risk: ${frame.risk}`);
|
|
271
|
+
lines.push(`Reversibility: ${frame.reversibility}`);
|
|
272
|
+
}
|
|
224
273
|
if (value.evidenceReceipt !== undefined) {
|
|
225
274
|
const receipt = value.evidenceReceipt;
|
|
226
275
|
lines.push(`Runtime evidence: turn ${receipt.turnId}; ${receipt.completedTools} completed, ${receipt.successfulTools} successful, ${receipt.failedTools} failed; digest ${receipt.digest}`);
|
|
@@ -40,6 +40,24 @@ function buildCognitiveWorkFocus(goal) {
|
|
|
40
40
|
const nextAction = bounded(checkpoint?.nextAction);
|
|
41
41
|
const checkpointEvidence = bounded(checkpoint?.expectedEvidence);
|
|
42
42
|
const checkpointEpistemicState = bounded(checkpoint?.epistemicState, 32);
|
|
43
|
+
const problemFrame = checkpoint?.problemFrame && typeof checkpoint.problemFrame === 'object'
|
|
44
|
+
&& !Array.isArray(checkpoint.problemFrame) ? checkpoint.problemFrame : null;
|
|
45
|
+
const frameMissingKnowledge = Array.isArray(problemFrame?.missingKnowledge)
|
|
46
|
+
? problemFrame.missingKnowledge.slice(0, 5).map((item) => bounded(item, 256)).filter(Boolean)
|
|
47
|
+
: [];
|
|
48
|
+
const frameCandidates = Array.isArray(problemFrame?.candidateActions)
|
|
49
|
+
? problemFrame.candidateActions.slice(0, 5).map((item) => bounded(item, 256)).filter(Boolean)
|
|
50
|
+
: [];
|
|
51
|
+
const frameSuccessCriterion = bounded(problemFrame?.successCriterion);
|
|
52
|
+
const frameSelectedAction = bounded(problemFrame?.selectedAction, 256);
|
|
53
|
+
const frameSelectionReason = bounded(problemFrame?.selectionReason);
|
|
54
|
+
const frameSupportChoice = bounded(problemFrame?.supportChoice, 256);
|
|
55
|
+
const frameRisk = bounded(problemFrame?.risk);
|
|
56
|
+
const frameReversibility = bounded(problemFrame?.reversibility);
|
|
57
|
+
const hasProblemFrame = problemFrame !== null && frameSuccessCriterion
|
|
58
|
+
&& frameMissingKnowledge.length > 0 && frameCandidates.length > 0
|
|
59
|
+
&& frameSelectedAction && frameSelectionReason && frameSupportChoice
|
|
60
|
+
&& frameRisk && frameReversibility;
|
|
43
61
|
const hasCheckpoint = checkpoint !== null && checkpointPhase && lastVerified
|
|
44
62
|
&& nextAction && checkpointEvidence;
|
|
45
63
|
const epistemicState = hasCheckpoint && EPISTEMIC_STATES.has(checkpointEpistemicState)
|
|
@@ -52,6 +70,14 @@ function buildCognitiveWorkFocus(goal) {
|
|
|
52
70
|
hasCheckpoint ? nextAction : '',
|
|
53
71
|
hasCheckpoint ? checkpointEvidence : '',
|
|
54
72
|
epistemicState,
|
|
73
|
+
hasProblemFrame ? frameSuccessCriterion : '',
|
|
74
|
+
hasProblemFrame ? frameMissingKnowledge.join('\0') : '',
|
|
75
|
+
hasProblemFrame ? frameCandidates.join('\0') : '',
|
|
76
|
+
hasProblemFrame ? frameSelectedAction : '',
|
|
77
|
+
hasProblemFrame ? frameSelectionReason : '',
|
|
78
|
+
hasProblemFrame ? frameSupportChoice : '',
|
|
79
|
+
hasProblemFrame ? frameRisk : '',
|
|
80
|
+
hasProblemFrame ? frameReversibility : '',
|
|
55
81
|
].join('\0'))
|
|
56
82
|
.digest('hex').slice(0, 40);
|
|
57
83
|
const keyRoot = `goal:${goalId}`;
|
|
@@ -62,7 +88,14 @@ function buildCognitiveWorkFocus(goal) {
|
|
|
62
88
|
{ domain: 'goal', key: `${keyRoot}:objective`, value: objective, confidence: 1, epistemicState, scope: focusScope },
|
|
63
89
|
{
|
|
64
90
|
domain: 'open_thread', key: `${keyRoot}:status`,
|
|
65
|
-
value: hasCheckpoint
|
|
91
|
+
value: bounded(hasCheckpoint
|
|
92
|
+
? [
|
|
93
|
+
`Goal is ${status}. Phase ${checkpointPhase}. Last verified: ${lastVerified}`,
|
|
94
|
+
hasProblemFrame ? `Missing knowledge: ${frameMissingKnowledge.join(' | ')}` : '',
|
|
95
|
+
hasProblemFrame ? `Risk: ${frameRisk}` : '',
|
|
96
|
+
hasProblemFrame ? `Selected action: ${frameSelectedAction}` : '',
|
|
97
|
+
].filter(Boolean).join(' ')
|
|
98
|
+
: `Goal is ${status}.`),
|
|
66
99
|
confidence: 1, epistemicState, scope: focusScope,
|
|
67
100
|
},
|
|
68
101
|
{
|
package/blun.mjs
CHANGED
|
@@ -230174,6 +230174,7 @@ var init_goal$1 = __esmMin((() => {
|
|
|
230174
230174
|
wallClockMs: 0,
|
|
230175
230175
|
budgetLimits: {}
|
|
230176
230176
|
};
|
|
230177
|
+
if (record.actionCheckpoint !== void 0) state.actionCheckpoint = normalizeActionCheckpoint(record.actionCheckpoint, { preserveUpdatedAt: true, preserveRuntimeEvidence: true });
|
|
230177
230178
|
this.state = state;
|
|
230178
230179
|
this.agent.replayBuilder.push({
|
|
230179
230180
|
type: "goal_updated",
|
|
@@ -230265,12 +230266,21 @@ var init_goal$1 = __esmMin((() => {
|
|
|
230265
230266
|
wallClockResumedAt: Date.now(),
|
|
230266
230267
|
budgetLimits: {}
|
|
230267
230268
|
};
|
|
230269
|
+
if (input.actionCheckpoint !== void 0) {
|
|
230270
|
+
assertActionCheckpointRevision(undefined, input.actionCheckpoint);
|
|
230271
|
+
const runtimeEvidence = this.agent.turn.actionEvidenceReceiptForCurrentTurn();
|
|
230272
|
+
assertActionCheckpointEvidenceBasis(undefined, input.actionCheckpoint, runtimeEvidence);
|
|
230273
|
+
state.actionCheckpoint = normalizeActionCheckpoint(input.actionCheckpoint, {
|
|
230274
|
+
runtimeEvidence
|
|
230275
|
+
});
|
|
230276
|
+
}
|
|
230268
230277
|
this.persistState(state);
|
|
230269
230278
|
this.agent.records.logRecord({
|
|
230270
230279
|
type: "goal.create",
|
|
230271
230280
|
goalId: state.goalId,
|
|
230272
230281
|
objective: state.objective,
|
|
230273
|
-
completionCriterion: state.completionCriterion
|
|
230282
|
+
completionCriterion: state.completionCriterion,
|
|
230283
|
+
actionCheckpoint: state.actionCheckpoint
|
|
230274
230284
|
});
|
|
230275
230285
|
this.trackGoalCreated(actor, input.replace === true);
|
|
230276
230286
|
return this.toSnapshot(state);
|
|
@@ -233581,7 +233591,7 @@ var init_goal_start_review_ask = __esmMin((() => {
|
|
|
233581
233591
|
}
|
|
233582
233592
|
evaluate(context) {
|
|
233583
233593
|
if (context.toolCall.name !== "CreateGoal") return;
|
|
233584
|
-
if (this.agent.permission.mode
|
|
233594
|
+
if (this.agent.permission.mode !== "manual") return;
|
|
233585
233595
|
if (context.execution.display?.kind !== "goal_start") return;
|
|
233586
233596
|
return {
|
|
233587
233597
|
kind: "ask",
|
|
@@ -234611,6 +234621,7 @@ function migrateGoalCreate(record) {
|
|
|
234611
234621
|
goalId: record.goalId,
|
|
234612
234622
|
objective: record.objective,
|
|
234613
234623
|
completionCriterion: record.completionCriterion,
|
|
234624
|
+
actionCheckpoint: record.actionCheckpoint,
|
|
234614
234625
|
time: record.time
|
|
234615
234626
|
};
|
|
234616
234627
|
}
|
|
@@ -245751,6 +245762,16 @@ var init_events$1 = __esmMin((() => {
|
|
|
245751
245762
|
lastVerified: string(),
|
|
245752
245763
|
nextAction: string(),
|
|
245753
245764
|
expectedEvidence: string(),
|
|
245765
|
+
problemFrame: object({
|
|
245766
|
+
successCriterion: string(),
|
|
245767
|
+
missingKnowledge: array(string()),
|
|
245768
|
+
candidateActions: array(string()),
|
|
245769
|
+
selectedAction: string(),
|
|
245770
|
+
selectionReason: string(),
|
|
245771
|
+
supportChoice: string(),
|
|
245772
|
+
risk: string(),
|
|
245773
|
+
reversibility: string()
|
|
245774
|
+
}).strict().optional(),
|
|
245754
245775
|
updatedAt: string(),
|
|
245755
245776
|
evidenceReceipt: object({
|
|
245756
245777
|
turnId: number$1().int().min(0),
|
|
@@ -260216,7 +260237,7 @@ bytesWritten: number$1().int().nonnegative() });
|
|
|
260216
260237
|
//#region ../../packages/agent-core/src/tools/builtin/goal/create-goal.md?raw
|
|
260217
260238
|
var create_goal_default;
|
|
260218
260239
|
var init_create_goal$1 = __esmMin((() => {
|
|
260219
|
-
create_goal_default = "Create a durable, structured goal that the runtime will pursue across multiple turns.\n\nCall `CreateGoal`
|
|
260240
|
+
create_goal_default = "Create a durable, structured goal that the runtime will pursue across multiple turns.\n\nCall `CreateGoal` when:\n\n- the user explicitly asks you to start a goal or work autonomously toward an outcome,\n- an authenticated user assigns a non-trivial multi-step outcome with a checkable end state under an existing instruction to continue autonomously, or\n- a host goal-intake prompt asks you to create one.\n\nDo NOT create a goal for greetings, ordinary questions, one-step requests, or vague requests that lack a\nverifiable completion condition. A goal needs a checkable end state.\n\nWhen the request is vague, ask the user for the missing completion criterion before creating\nthe goal. If the user clearly insists after you warn them that the wording is vague or risky,\nrespect that and create the goal.\n\nInclude a `completionCriterion` when the user provides one, or when it can be stated without\ninventing new requirements. Keep `objective` concise; reference long task descriptions by file\npath rather than pasting them. Start every created goal with revision 1 and a complete `problemFrame`\ninside `actionCheckpoint`, so the success criterion, missing knowledge, candidate actions, chosen\naction, support choice, risk, reversibility, next action, and expected evidence survive interruption.\nThis frame is descriptive state only and never grants permission.\n\nCreating a goal fails if one already exists, so use `replace: true` only when the user explicitly\nwants to abandon the current goal and start a new one.\n";
|
|
260220
260241
|
}));
|
|
260221
260242
|
//#endregion
|
|
260222
260243
|
//#region ../../packages/agent-core/src/tools/builtin/goal/serialize.ts
|
|
@@ -260235,15 +260256,42 @@ function goalResultForModel(result) {
|
|
|
260235
260256
|
var init_serialize = __esmMin((() => {}));
|
|
260236
260257
|
//#endregion
|
|
260237
260258
|
//#region ../../packages/agent-core/src/tools/builtin/goal/create-goal.ts
|
|
260238
|
-
|
|
260259
|
+
function createProblemFrameInputSchema() {
|
|
260260
|
+
return object({
|
|
260261
|
+
successCriterion: string().min(1).max(512),
|
|
260262
|
+
missingKnowledge: array(string().min(1).max(256)).min(1).max(5),
|
|
260263
|
+
candidateActions: array(string().min(1).max(256)).min(1).max(5),
|
|
260264
|
+
selectedAction: string().min(1).max(256),
|
|
260265
|
+
selectionReason: string().min(1).max(512),
|
|
260266
|
+
supportChoice: string().min(1).max(256),
|
|
260267
|
+
risk: string().min(1).max(512),
|
|
260268
|
+
reversibility: string().min(1).max(512)
|
|
260269
|
+
}).strict();
|
|
260270
|
+
}
|
|
260271
|
+
function createActionCheckpointInputSchema(problemFrameSchema, requireProblemFrame = false) {
|
|
260272
|
+
return object({
|
|
260273
|
+
revision: number$1().int().min(1),
|
|
260274
|
+
phase: _enum(["orient", "plan", "act", "verify", "learn", "wait"]),
|
|
260275
|
+
evidenceBasis: _enum(["runtime_tool", "user_statement", "external_report", "carried_forward"]),
|
|
260276
|
+
epistemicState: _enum(["verified", "credible_unverified", "hypothesis", "uncertain_memory", "stale", "unknown"]),
|
|
260277
|
+
lastVerified: string().min(1).max(512),
|
|
260278
|
+
nextAction: string().min(1).max(512),
|
|
260279
|
+
expectedEvidence: string().min(1).max(512),
|
|
260280
|
+
problemFrame: requireProblemFrame ? problemFrameSchema : problemFrameSchema.optional()
|
|
260281
|
+
}).strict();
|
|
260282
|
+
}
|
|
260283
|
+
var ProblemFrameInputSchema, ActionCheckpointInputSchema, CreateGoalActionCheckpointInputSchema, CreateGoalToolInputSchema, CreateGoalTool;
|
|
260239
260284
|
var init_create_goal = __esmMin((() => {
|
|
260240
260285
|
init_zod$1();
|
|
260241
260286
|
init_input_schema();
|
|
260242
260287
|
init_create_goal$1();
|
|
260243
260288
|
init_serialize();
|
|
260289
|
+
ProblemFrameInputSchema ??= createProblemFrameInputSchema();
|
|
260290
|
+
CreateGoalActionCheckpointInputSchema ??= createActionCheckpointInputSchema(ProblemFrameInputSchema, true);
|
|
260244
260291
|
CreateGoalToolInputSchema = object({
|
|
260245
260292
|
objective: string().min(1).describe("The objective to pursue. Must have a verifiable end state."),
|
|
260246
260293
|
completionCriterion: string().optional().describe("How to verify the goal is complete. Include when the user provides one."),
|
|
260294
|
+
actionCheckpoint: CreateGoalActionCheckpointInputSchema,
|
|
260247
260295
|
replace: boolean$1().optional().describe("Replace an existing active, paused, or blocked goal instead of failing.")
|
|
260248
260296
|
}).strict();
|
|
260249
260297
|
CreateGoalTool = class {
|
|
@@ -260264,6 +260312,7 @@ var init_create_goal = __esmMin((() => {
|
|
|
260264
260312
|
const snapshot = await goal.createGoal({
|
|
260265
260313
|
objective: args.objective,
|
|
260266
260314
|
completionCriterion: args.completionCriterion,
|
|
260315
|
+
actionCheckpoint: args.actionCheckpoint,
|
|
260267
260316
|
replace: args.replace
|
|
260268
260317
|
}, "model");
|
|
260269
260318
|
return { output: JSON.stringify({ goal: goalForModel(snapshot) }, null, 2) };
|
|
@@ -260273,12 +260322,12 @@ var init_create_goal = __esmMin((() => {
|
|
|
260273
260322
|
/**
|
|
260274
260323
|
* Starting a goal switches the agent into autonomous, multi-turn work, so its
|
|
260275
260324
|
* approval reuses the same choice the `/goal` command offers: pick the
|
|
260276
|
-
* permission mode to run under, or decline.
|
|
260277
|
-
*
|
|
260325
|
+
* permission mode to run under, or decline. Auto and God Mode continue under
|
|
260326
|
+
* their already selected permission level; only manual mode asks again.
|
|
260278
260327
|
*/
|
|
260279
260328
|
resolveGoalStartDisplay(args) {
|
|
260280
260329
|
const mode = this.agent.permission.mode;
|
|
260281
|
-
if (mode
|
|
260330
|
+
if (mode !== "manual") return void 0;
|
|
260282
260331
|
return {
|
|
260283
260332
|
kind: "goal_start",
|
|
260284
260333
|
objective: args.objective,
|
|
@@ -262725,25 +262774,19 @@ var init_outcome_prompts = __esmMin((() => {}));
|
|
|
262725
262774
|
var update_goal_default;
|
|
262726
262775
|
var init_update_goal$1 = __esmMin((() => {
|
|
262727
262776
|
update_goal_default = "Update the current autonomous goal. Set `status` only for a lifecycle change. After a coherent work slice, save `actionCheckpoint` with a monotone revision, the last verified result, exact next action, expected evidence, and an explicit evidence basis. Use `runtime_tool` only when a successful tool in this turn measured the result; use `user_statement` for a direct user assertion, `external_report` for a report not independently measured here, and `carried_forward` only when the last verified text is unchanged. Classify knowledge as `verified`, `credible_unverified`, `hypothesis`, `uncertain_memory`, `stale`, or `unknown`; never present a weaker state as verified, and preserve the state on carry-forward. Start at revision 1 and increment the currently projected revision by exactly one; stale writers fail closed. This is durable progress state, not permission, and should change only when the facts change. A checkpoint-only call keeps the goal active.\n\n- `active` — resume a paused or blocked goal when the user explicitly asks you to work on that goal.\n- `complete` — the objective is fully satisfied, all files are written, all tests pass, and any stated validation has passed. When the goal has a completion criterion, first save a `verify` checkpoint with `runtime_tool`, `verified`, and a successful runtime evidence receipt.\n- `blocked` — a genuine external condition or required user decision prevents progress.\n- `paused` — set the goal aside for now.\n\nDo not mark complete after a plan or partial result. If useful work remains, checkpoint it and continue. Do not ask for permission merely to execute an already authorized checkpoint; ask only at a real rights boundary or missing user decision.\n";
|
|
262777
|
+
update_goal_default += "\nFor a non-trivial or unfamiliar problem, preserve `problemFrame` with the success criterion, missing knowledge, bounded candidate actions, selected action and reason, support choice, risk, and reversibility. The selected action must match one candidate. Problem framing is descriptive state and never grants permission.\n";
|
|
262728
262778
|
}));
|
|
262729
262779
|
//#endregion
|
|
262730
262780
|
//#region ../../packages/agent-core/src/tools/builtin/goal/update-goal.ts
|
|
262731
|
-
var
|
|
262781
|
+
var UpdateGoalToolInputSchema, UpdateGoalTool;
|
|
262732
262782
|
var init_update_goal = __esmMin((() => {
|
|
262733
262783
|
init_zod$1();
|
|
262734
262784
|
init_turn();
|
|
262735
262785
|
init_outcome_prompts();
|
|
262736
262786
|
init_input_schema();
|
|
262737
262787
|
init_update_goal$1();
|
|
262738
|
-
|
|
262739
|
-
|
|
262740
|
-
phase: _enum(["orient", "plan", "act", "verify", "learn", "wait"]),
|
|
262741
|
-
evidenceBasis: _enum(["runtime_tool", "user_statement", "external_report", "carried_forward"]),
|
|
262742
|
-
epistemicState: _enum(["verified", "credible_unverified", "hypothesis", "uncertain_memory", "stale", "unknown"]),
|
|
262743
|
-
lastVerified: string().min(1).max(512),
|
|
262744
|
-
nextAction: string().min(1).max(512),
|
|
262745
|
-
expectedEvidence: string().min(1).max(512)
|
|
262746
|
-
}).strict();
|
|
262788
|
+
ProblemFrameInputSchema ??= createProblemFrameInputSchema();
|
|
262789
|
+
ActionCheckpointInputSchema ??= createActionCheckpointInputSchema(ProblemFrameInputSchema);
|
|
262747
262790
|
UpdateGoalToolInputSchema = object({ status: _enum([
|
|
262748
262791
|
"active",
|
|
262749
262792
|
"complete",
|