blun-king-cli 9.1.414 → 9.1.415

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
@@ -483,6 +483,15 @@ Nutzerentscheidung. Auslöser und Bedingung bleiben bei Fortsetzung und Neustart
483
483
  erhalten, ohne Berechtigungen zu erteilen. Bereits gespeicherte ältere
484
484
  Checkpoints bleiben lesbar.
485
485
 
486
+ Ab BLUN King 9.1.415 übernimmt der sitzungsübergreifende Arbeitsfokus den
487
+ gespeicherten Auslöser vollständig. Die nächste Aktion und die Bedingung, unter
488
+ der sie ausgeführt werden darf, bleiben getrennt sichtbar. Dadurch erscheint
489
+ eine Wartephase nach einem Neustart oder Kontextwechsel nicht mehr als sofortiger
490
+ Arbeitsauftrag. Art und Bedingung des Auslösers verändern außerdem die Identität
491
+ des dauerhaften Fokuszustands; fehlerhafte oder zur Phase widersprüchliche
492
+ Auslöser werden verworfen. Ältere Checkpoints ohne ausdrücklichen Auslöser
493
+ behalten ihr bisheriges Verhalten.
494
+
486
495
  Der eigentliche Anhang und die vollständige Nutzernachricht bleiben für den Zug
487
496
  unverändert verfügbar. Die Begrenzung betrifft ausschließlich die kleine
488
497
  lexikalische Vorauswahl von höchstens zwei Werkzeugschemas; ToolSearch und alle
package/README.md CHANGED
@@ -489,6 +489,15 @@ Nutzerentscheidung. Auslöser und Bedingung bleiben bei Fortsetzung und Neustart
489
489
  erhalten, ohne Berechtigungen zu erteilen. Bereits gespeicherte ältere
490
490
  Checkpoints bleiben lesbar.
491
491
 
492
+ Ab BLUN King 9.1.415 übernimmt der sitzungsübergreifende Arbeitsfokus den
493
+ gespeicherten Auslöser vollständig. Die nächste Aktion und die Bedingung, unter
494
+ der sie ausgeführt werden darf, bleiben getrennt sichtbar. Dadurch erscheint
495
+ eine Wartephase nach einem Neustart oder Kontextwechsel nicht mehr als sofortiger
496
+ Arbeitsauftrag. Art und Bedingung des Auslösers verändern außerdem die Identität
497
+ des dauerhaften Fokuszustands; fehlerhafte oder zur Phase widersprüchliche
498
+ Auslöser werden verworfen. Ältere Checkpoints ohne ausdrücklichen Auslöser
499
+ behalten ihr bisheriges Verhalten.
500
+
492
501
  Der eigentliche Anhang und die vollständige Nutzernachricht bleiben für den Zug
493
502
  unverändert verfügbar. Die Begrenzung betrifft ausschließlich die kleine
494
503
  lexikalische Vorauswahl von höchstens zwei Werkzeugschemas; ToolSearch und alle
@@ -53,7 +53,7 @@ function buildCognitiveFocusProjection(state, { focusScopes, maxItems = 6, maxCh
53
53
  state.observations.forEach((item, index) => {
54
54
  const domain = String(item?.domain ?? '');
55
55
  const key = clean(item?.key, 128);
56
- const value = clean(item?.value, 512);
56
+ const value = clean(item?.value, 640);
57
57
  const scope = clean(item?.scope, 128);
58
58
  const observationId = clean(item?.observation_id, 128);
59
59
  const supersedes = item?.supersedes === null || item?.supersedes === undefined
@@ -7,6 +7,10 @@ const STATUSES = new Set(['active', 'paused', 'blocked']);
7
7
  const EPISTEMIC_STATES = new Set([
8
8
  'verified', 'credible_unverified', 'hypothesis', 'uncertain_memory', 'stale', 'unknown', 'legacy_unknown',
9
9
  ]);
10
+ const TRIGGER_KINDS = new Set([
11
+ 'immediate', 'external_event', 'time', 'dependency', 'user_decision',
12
+ ]);
13
+ const TRIGGER_KEYS = new Set(['kind', 'condition']);
10
14
  const NEXT_TRIGGER = new Map([
11
15
  ['active', 'Continue the active goal from its last verified state.'],
12
16
  ['paused', 'Wait until the goal is explicitly resumed.'],
@@ -40,6 +44,23 @@ function buildCognitiveWorkFocus(goal) {
40
44
  const nextAction = bounded(checkpoint?.nextAction);
41
45
  const checkpointEvidence = bounded(checkpoint?.expectedEvidence);
42
46
  const checkpointEpistemicState = bounded(checkpoint?.epistemicState, 32);
47
+ const rawNextTrigger = checkpoint?.nextTrigger;
48
+ let triggerKind = '';
49
+ let triggerCondition = '';
50
+ if (rawNextTrigger !== undefined) {
51
+ if (!rawNextTrigger || typeof rawNextTrigger !== 'object' || Array.isArray(rawNextTrigger)
52
+ || Object.keys(rawNextTrigger).length !== TRIGGER_KEYS.size
53
+ || Object.keys(rawNextTrigger).some((key) => !TRIGGER_KEYS.has(key))) return null;
54
+ triggerKind = String(rawNextTrigger.kind ?? '').trim();
55
+ triggerCondition = bounded(rawNextTrigger.condition);
56
+ if (!TRIGGER_KINDS.has(triggerKind) || !triggerCondition
57
+ || checkpointPhase === 'wait' && triggerKind === 'immediate'
58
+ || checkpointPhase !== 'wait' && triggerKind !== 'immediate') return null;
59
+ }
60
+ const hasExplicitTrigger = Boolean(triggerKind && triggerCondition);
61
+ const triggerValue = hasExplicitTrigger
62
+ ? `${triggerKind.replaceAll('_', ' ')} - ${triggerCondition}`
63
+ : nextAction;
43
64
  const problemFrame = checkpoint?.problemFrame && typeof checkpoint.problemFrame === 'object'
44
65
  && !Array.isArray(checkpoint.problemFrame) ? checkpoint.problemFrame : null;
45
66
  const frameMissingKnowledge = Array.isArray(problemFrame?.missingKnowledge)
@@ -69,6 +90,8 @@ function buildCognitiveWorkFocus(goal) {
69
90
  hasCheckpoint ? lastVerified : '',
70
91
  hasCheckpoint ? nextAction : '',
71
92
  hasCheckpoint ? checkpointEvidence : '',
93
+ hasExplicitTrigger ? triggerKind : '',
94
+ hasExplicitTrigger ? triggerCondition : '',
72
95
  epistemicState,
73
96
  hasProblemFrame ? frameSuccessCriterion : '',
74
97
  hasProblemFrame ? frameMissingKnowledge.join('\0') : '',
@@ -91,6 +114,7 @@ function buildCognitiveWorkFocus(goal) {
91
114
  value: bounded(hasCheckpoint
92
115
  ? [
93
116
  `Goal is ${status}. Phase ${checkpointPhase}. Last verified: ${lastVerified}`,
117
+ `Next action: ${nextAction}`,
94
118
  hasProblemFrame ? `Missing knowledge: ${frameMissingKnowledge.join(' | ')}` : '',
95
119
  hasProblemFrame ? `Risk: ${frameRisk}` : '',
96
120
  hasProblemFrame ? `Selected action: ${frameSelectedAction}` : '',
@@ -100,7 +124,7 @@ function buildCognitiveWorkFocus(goal) {
100
124
  },
101
125
  {
102
126
  domain: 'next_trigger', key: `${keyRoot}:next`,
103
- value: status === 'active' && hasCheckpoint ? nextAction : NEXT_TRIGGER.get(status),
127
+ value: status === 'active' && hasCheckpoint ? triggerValue : NEXT_TRIGGER.get(status),
104
128
  confidence: 1, epistemicState, scope: focusScope,
105
129
  },
106
130
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blun-king-cli",
3
- "version": "9.1.414",
3
+ "version": "9.1.415",
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": {