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 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 ? `Goal is ${status}. Phase ${checkpointPhase}. Last verified: ${lastVerified}` : `Goal is ${status}.`,
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 === "auto") return;
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` only when:\n\n- the user explicitly asks you to start a goal or work autonomously toward an outcome, or\n- a host goal-intake prompt asks you to create one.\n\nDo NOT create a goal for greetings, ordinary questions, 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.\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";
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
- var CreateGoalToolInputSchema, CreateGoalTool;
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. `auto` mode auto-approves the goal
260277
- * upstream and never reaches this prompt, so the menu only covers manual/yolo.
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 === "auto") return void 0;
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 ActionCheckpointInputSchema, UpdateGoalToolInputSchema, UpdateGoalTool;
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
- ActionCheckpointInputSchema = object({
262739
- revision: number$1().int().min(1),
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",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.410",
3
+ "version": "9.1.412",
4
4
  "description": "BLUN CLI - your own AI agent with a Telegram channel. Get it done. With BLUN.",
5
5
  "license": "MIT",
6
6
  "bin": {