openvibe 0.58.2 → 0.59.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/README.md +1 -1
- package/dist/core/agent-modes.d.ts +16 -0
- package/dist/core/agent-modes.d.ts.map +1 -0
- package/dist/core/agent-modes.js +88 -0
- package/dist/core/agent-modes.js.map +1 -0
- package/dist/core/agent-session.d.ts +26 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +84 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +23 -3
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt.d.ts +2 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +9 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { readFileSync } from "node:fs";
|
|
16
16
|
import { basename, dirname } from "node:path";
|
|
17
|
-
import { isContextOverflow, resetApiProviders, supportsXhigh } from "@mariozechner/pi-ai";
|
|
17
|
+
import { isContextOverflow, modelsAreEqual, resetApiProviders, supportsXhigh } from "@mariozechner/pi-ai";
|
|
18
18
|
import { theme } from "../modes/interactive/theme/theme.js";
|
|
19
19
|
import { stripFrontmatter } from "../utils/frontmatter.js";
|
|
20
20
|
import { sleep } from "../utils/sleep.js";
|
|
@@ -29,6 +29,7 @@ import { getLatestCompactionEntry } from "./session-manager.js";
|
|
|
29
29
|
import { BUILTIN_SLASH_COMMANDS } from "./slash-commands.js";
|
|
30
30
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
31
31
|
import { createAllTools } from "./tools/index.js";
|
|
32
|
+
import { AGENT_MODES } from "./agent-modes.js";
|
|
32
33
|
/**
|
|
33
34
|
* Parse a skill block from message text.
|
|
34
35
|
* Returns null if the text doesn't contain a skill block.
|
|
@@ -106,6 +107,8 @@ export class AgentSession {
|
|
|
106
107
|
_toolPromptGuidelines = new Map();
|
|
107
108
|
// Base system prompt (without extension appends) - used to apply fresh appends each turn
|
|
108
109
|
_baseSystemPrompt = "";
|
|
110
|
+
// Current agent mode
|
|
111
|
+
_mode = "default";
|
|
109
112
|
constructor(config) {
|
|
110
113
|
this.agent = config.agent;
|
|
111
114
|
this.sessionManager = config.sessionManager;
|
|
@@ -118,6 +121,7 @@ export class AgentSession {
|
|
|
118
121
|
this._extensionRunnerRef = config.extensionRunnerRef;
|
|
119
122
|
this._initialActiveToolNames = config.initialActiveToolNames;
|
|
120
123
|
this._baseToolsOverride = config.baseToolsOverride;
|
|
124
|
+
this._mode = config.initialMode ?? "default";
|
|
121
125
|
// Always subscribe to agent events for internal handling
|
|
122
126
|
// (session persistence, extensions, auto-compaction, retry logic)
|
|
123
127
|
this._unsubscribeAgent = this.agent.subscribe(this._handleAgentEvent);
|
|
@@ -418,6 +422,84 @@ export class AgentSession {
|
|
|
418
422
|
get thinkingLevel() {
|
|
419
423
|
return this.agent.state.thinkingLevel;
|
|
420
424
|
}
|
|
425
|
+
/** Current agent mode */
|
|
426
|
+
get mode() {
|
|
427
|
+
return this._mode;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Set agent mode.
|
|
431
|
+
* Updates tools, thinking level, and system prompt based on the mode.
|
|
432
|
+
*/
|
|
433
|
+
setMode(mode) {
|
|
434
|
+
if (this._mode === mode)
|
|
435
|
+
return;
|
|
436
|
+
this._mode = mode;
|
|
437
|
+
const modeConfig = AGENT_MODES[mode];
|
|
438
|
+
const modeThinkingLevel = modeConfig.thinkingLevel;
|
|
439
|
+
const modeTools = modeConfig.tools;
|
|
440
|
+
this.agent.setThinkingLevel(modeThinkingLevel);
|
|
441
|
+
this.setActiveToolsByName(modeTools);
|
|
442
|
+
this._baseSystemPrompt = this._rebuildSystemPrompt(modeTools, modeThinkingLevel);
|
|
443
|
+
this.agent.setSystemPrompt(this._baseSystemPrompt);
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* Cycle to next agent mode.
|
|
447
|
+
* @returns New mode name
|
|
448
|
+
*/
|
|
449
|
+
cycleMode() {
|
|
450
|
+
const modes = ["default", "plan", "spec"];
|
|
451
|
+
const currentIndex = modes.indexOf(this._mode);
|
|
452
|
+
const nextIndex = (currentIndex + 1) % modes.length;
|
|
453
|
+
const nextMode = modes[nextIndex];
|
|
454
|
+
this.setMode(nextMode);
|
|
455
|
+
return nextMode;
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Set the model for the agent.
|
|
459
|
+
* Updates thinking level based on model capabilities.
|
|
460
|
+
*/
|
|
461
|
+
async setModel(model) {
|
|
462
|
+
const previousModel = this.agent.state.model;
|
|
463
|
+
this.agent.setModel(model);
|
|
464
|
+
let effectiveThinking = this.thinkingLevel;
|
|
465
|
+
if (!model.reasoning) {
|
|
466
|
+
effectiveThinking = "off";
|
|
467
|
+
}
|
|
468
|
+
else if (effectiveThinking === "xhigh" && !supportsXhigh(model)) {
|
|
469
|
+
effectiveThinking = "high";
|
|
470
|
+
}
|
|
471
|
+
if (effectiveThinking !== this.thinkingLevel) {
|
|
472
|
+
this.agent.setThinkingLevel(effectiveThinking);
|
|
473
|
+
this.sessionManager.appendThinkingLevelChange(effectiveThinking);
|
|
474
|
+
}
|
|
475
|
+
this._baseSystemPrompt = this._rebuildSystemPrompt(this.getActiveToolNames(), effectiveThinking);
|
|
476
|
+
this.agent.setSystemPrompt(this._baseSystemPrompt);
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* Cycle to next model in scoped models list.
|
|
480
|
+
* @returns Model cycle result or undefined if no scoped models
|
|
481
|
+
*/
|
|
482
|
+
async cycleModel() {
|
|
483
|
+
if (this._scopedModels.length === 0) {
|
|
484
|
+
return undefined;
|
|
485
|
+
}
|
|
486
|
+
const currentModel = this.agent.state.model;
|
|
487
|
+
let currentIndex = -1;
|
|
488
|
+
for (let i = 0; i < this._scopedModels.length; i++) {
|
|
489
|
+
if (modelsAreEqual(this._scopedModels[i].model, currentModel)) {
|
|
490
|
+
currentIndex = i;
|
|
491
|
+
break;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
const nextIndex = (currentIndex + 1) % this._scopedModels.length;
|
|
495
|
+
const nextModelConfig = this._scopedModels[nextIndex];
|
|
496
|
+
await this.setModel(nextModelConfig.model);
|
|
497
|
+
return {
|
|
498
|
+
model: nextModelConfig.model,
|
|
499
|
+
thinkingLevel: this.thinkingLevel,
|
|
500
|
+
isScoped: true,
|
|
501
|
+
};
|
|
502
|
+
}
|
|
421
503
|
/** Whether agent is currently streaming a response */
|
|
422
504
|
get isStreaming() {
|
|
423
505
|
return this.agent.state.isStreaming;
|
|
@@ -561,6 +643,7 @@ export class AgentSession {
|
|
|
561
643
|
toolSnippets,
|
|
562
644
|
promptGuidelines,
|
|
563
645
|
thinkingLevel: thinkingLevel ?? this.thinkingLevel,
|
|
646
|
+
mode: this._mode,
|
|
564
647
|
});
|
|
565
648
|
}
|
|
566
649
|
// =========================================================================
|