@elyracode/coding-agent 0.1.0 → 0.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 +17 -0
- package/dist/cli/config-selector.d.ts +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +1 -1
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +35 -0
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session.d.ts +7 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +55 -3
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +3 -3
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +1 -1
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +9 -9
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/memory.d.ts +23 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +173 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +12 -12
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/session-manager.d.ts +6 -6
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +4 -4
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +6 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +16 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/smart-router.d.ts +43 -0
- package/dist/core/smart-router.d.ts.map +1 -0
- package/dist/core/smart-router.js +206 -0
- package/dist/core/smart-router.js.map +1 -0
- package/dist/core/stack-detector.d.ts +21 -0
- package/dist/core/stack-detector.d.ts.map +1 -0
- package/dist/core/stack-detector.js +120 -0
- package/dist/core/stack-detector.js.map +1 -0
- package/dist/core/system-prompt.d.ts +4 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +27 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -2
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +3 -3
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +1 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +20 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +26 -0
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +10 -10
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/docs/extensions.md +17 -17
- package/docs/index.md +1 -1
- package/docs/prompt-templates.md +1 -1
- package/docs/providers.md +1 -1
- package/docs/quickstart.md +5 -5
- package/docs/rpc.md +6 -6
- package/docs/sdk.md +2 -2
- package/docs/session-format.md +3 -3
- package/docs/settings.md +4 -4
- package/docs/skills.md +2 -2
- package/docs/termux.md +3 -3
- package/docs/themes.md +1 -1
- package/docs/tui.md +1 -1
- package/docs/usage.md +2 -2
- package/examples/extensions/auto-commit-on-exit.ts +5 -5
- package/examples/extensions/bash-spawn-hook.ts +2 -2
- package/examples/extensions/bookmark.ts +5 -5
- package/examples/extensions/border-status-editor.ts +7 -7
- package/examples/extensions/built-in-tool-renderer.ts +5 -5
- package/examples/extensions/claude-rules.ts +3 -3
- package/examples/extensions/commands.ts +4 -4
- package/examples/extensions/confirm-destructive.ts +3 -3
- package/examples/extensions/custom-compaction.ts +2 -2
- package/examples/extensions/custom-footer.ts +2 -2
- package/examples/extensions/custom-header.ts +3 -3
- package/examples/extensions/custom-provider-anthropic/index.ts +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
- package/examples/extensions/custom-provider-gitlab-duo/package.json +2 -2
- package/examples/extensions/dirty-repo-guard.ts +7 -7
- package/examples/extensions/doom-overlay/index.ts +2 -2
- package/examples/extensions/dynamic-resources/index.ts +2 -2
- package/examples/extensions/dynamic-tools.ts +4 -4
- package/examples/extensions/event-bus.ts +8 -8
- package/examples/extensions/file-trigger.ts +3 -3
- package/examples/extensions/git-checkpoint.ts +7 -7
- package/examples/extensions/github-issue-autocomplete.ts +6 -6
- package/examples/extensions/handoff.ts +2 -2
- package/examples/extensions/hello.ts +2 -2
- package/examples/extensions/hidden-thinking-label.ts +3 -3
- package/examples/extensions/inline-bash.ts +3 -3
- package/examples/extensions/input-transform.ts +2 -2
- package/examples/extensions/interactive-shell.ts +2 -2
- package/examples/extensions/mac-system-theme.ts +3 -3
- package/examples/extensions/message-renderer.ts +4 -4
- package/examples/extensions/minimal-mode.ts +8 -8
- package/examples/extensions/modal-editor.ts +2 -2
- package/examples/extensions/model-status.ts +2 -2
- package/examples/extensions/notify.ts +2 -2
- package/examples/extensions/overlay-qa-tests.ts +14 -14
- package/examples/extensions/overlay-test.ts +2 -2
- package/examples/extensions/permission-gate.ts +2 -2
- package/examples/extensions/pirate.ts +3 -3
- package/examples/extensions/plan-mode/index.ts +22 -22
- package/examples/extensions/preset.ts +23 -23
- package/examples/extensions/prompt-customizer.ts +2 -2
- package/examples/extensions/protected-paths.ts +2 -2
- package/examples/extensions/provider-payload.ts +3 -3
- package/examples/extensions/qna.ts +2 -2
- package/examples/extensions/question.ts +2 -2
- package/examples/extensions/questionnaire.ts +2 -2
- package/examples/extensions/rainbow-editor.ts +2 -2
- package/examples/extensions/reload-runtime.ts +4 -4
- package/examples/extensions/rpc-demo.ts +10 -10
- package/examples/extensions/sandbox/index.ts +8 -8
- package/examples/extensions/sandbox/package.json +2 -2
- package/examples/extensions/send-user-message.ts +13 -13
- package/examples/extensions/session-name.ts +4 -4
- package/examples/extensions/shutdown-command.ts +10 -10
- package/examples/extensions/snake.ts +3 -3
- package/examples/extensions/space-invaders.ts +3 -3
- package/examples/extensions/ssh.ts +10 -10
- package/examples/extensions/status-line.ts +4 -4
- package/examples/extensions/structured-output.ts +2 -2
- package/examples/extensions/subagent/index.ts +3 -3
- package/examples/extensions/summarize.ts +2 -2
- package/examples/extensions/system-prompt-header.ts +3 -3
- package/examples/extensions/tic-tac-toe.ts +15 -15
- package/examples/extensions/timed-confirm.ts +4 -4
- package/examples/extensions/titlebar-spinner.ts +8 -8
- package/examples/extensions/todo.ts +5 -5
- package/examples/extensions/tool-override.ts +3 -3
- package/examples/extensions/tools.ts +9 -9
- package/examples/extensions/trigger-compact.ts +3 -3
- package/examples/extensions/truncated-tool.ts +3 -3
- package/examples/extensions/widget-placement.ts +2 -2
- package/examples/extensions/with-deps/index.ts +2 -2
- package/examples/extensions/with-deps/package.json +2 -2
- package/examples/extensions/working-indicator.ts +5 -5
- package/examples/extensions/working-message-test.ts +2 -2
- package/package.json +5 -5
|
@@ -26,9 +26,12 @@ import { exportSessionToHtml } from "./export-html/index.js";
|
|
|
26
26
|
import { createToolHtmlRenderer } from "./export-html/tool-renderer.js";
|
|
27
27
|
import { ExtensionRunner, wrapRegisteredTools, } from "./extensions/index.js";
|
|
28
28
|
import { emitSessionShutdownEvent } from "./extensions/runner.js";
|
|
29
|
+
import { loadMemory } from "./memory.js";
|
|
29
30
|
import { expandPromptTemplate } from "./prompt-templates.js";
|
|
30
31
|
import { CURRENT_SESSION_VERSION, getLatestCompactionEntry } from "./session-manager.js";
|
|
32
|
+
import { routeNextTurn } from "./smart-router.js";
|
|
31
33
|
import { createSyntheticSourceInfo } from "./source-info.js";
|
|
34
|
+
import { detectStack } from "./stack-detector.js";
|
|
32
35
|
import { buildSystemPrompt } from "./system-prompt.js";
|
|
33
36
|
import { createLocalBashOperations } from "./tools/bash.js";
|
|
34
37
|
import { createAllToolDefinitions } from "./tools/index.js";
|
|
@@ -130,6 +133,7 @@ export class AgentSession {
|
|
|
130
133
|
// (session persistence, extensions, auto-compaction, retry logic)
|
|
131
134
|
this._unsubscribeAgent = this.agent.subscribe(this._handleAgentEvent);
|
|
132
135
|
this._installAgentToolHooks();
|
|
136
|
+
this._installSmartRouting();
|
|
133
137
|
this._buildRuntime({
|
|
134
138
|
activeToolNames: this._initialActiveToolNames,
|
|
135
139
|
includeAllExtensionTools: true,
|
|
@@ -506,7 +510,7 @@ export class AgentSession {
|
|
|
506
510
|
* Call this when completely done with the session.
|
|
507
511
|
*/
|
|
508
512
|
dispose() {
|
|
509
|
-
this._extensionRunner.invalidate("This extension ctx is stale after session replacement or reload. Do not use a captured
|
|
513
|
+
this._extensionRunner.invalidate("This extension ctx is stale after session replacement or reload. Do not use a captured elyra or command ctx after ctx.newSession(), ctx.fork(), ctx.switchSession(), or ctx.reload(). For newSession, fork, and switchSession, move post-replacement work into withSession and use the ctx passed to withSession. For reload, do not use the old ctx after await ctx.reload().");
|
|
510
514
|
this._disconnectFromAgent();
|
|
511
515
|
this._eventListeners = [];
|
|
512
516
|
cleanupSessionResources(this.sessionId);
|
|
@@ -663,6 +667,11 @@ export class AgentSession {
|
|
|
663
667
|
const appendSystemPrompt = loaderAppendSystemPrompt.length > 0 ? loaderAppendSystemPrompt.join("\n\n") : undefined;
|
|
664
668
|
const loadedSkills = this._resourceLoader.getSkills().skills;
|
|
665
669
|
const loadedContextFiles = this._resourceLoader.getAgentsFiles().agentsFiles;
|
|
670
|
+
// Load codebase memory if enabled
|
|
671
|
+
const memoryContent = this.settingsManager.getCodebaseMemory() ? loadMemory(this._cwd) : undefined;
|
|
672
|
+
// Detect project technology stack
|
|
673
|
+
const stackResult = detectStack(this._cwd);
|
|
674
|
+
const stackInfo = stackResult.summary || undefined;
|
|
666
675
|
this._baseSystemPromptOptions = {
|
|
667
676
|
cwd: this._cwd,
|
|
668
677
|
skills: loadedSkills,
|
|
@@ -672,6 +681,8 @@ export class AgentSession {
|
|
|
672
681
|
selectedTools: validToolNames,
|
|
673
682
|
toolSnippets,
|
|
674
683
|
promptGuidelines,
|
|
684
|
+
memoryContent,
|
|
685
|
+
stackInfo,
|
|
675
686
|
};
|
|
676
687
|
return buildSystemPrompt(this._baseSystemPromptOptions);
|
|
677
688
|
}
|
|
@@ -680,7 +691,7 @@ export class AgentSession {
|
|
|
680
691
|
// =========================================================================
|
|
681
692
|
/**
|
|
682
693
|
* Send a prompt to the agent.
|
|
683
|
-
* - Handles extension commands (registered via
|
|
694
|
+
* - Handles extension commands (registered via elyra.registerCommand) immediately, even during streaming
|
|
684
695
|
* - Expands file-based prompt templates by default
|
|
685
696
|
* - During streaming, queues via steer() or followUp() based on streamingBehavior option
|
|
686
697
|
* - Validates model and API key before sending (when not streaming)
|
|
@@ -693,7 +704,7 @@ export class AgentSession {
|
|
|
693
704
|
let messages;
|
|
694
705
|
try {
|
|
695
706
|
// Handle extension commands first (execute immediately, even during streaming)
|
|
696
|
-
// Extension commands manage their own LLM interaction via
|
|
707
|
+
// Extension commands manage their own LLM interaction via elyra.sendMessage()
|
|
697
708
|
if (expandPromptTemplates && text.startsWith("/")) {
|
|
698
709
|
const handled = await this._tryExecuteExtensionCommand(text);
|
|
699
710
|
if (handled) {
|
|
@@ -1857,6 +1868,47 @@ export class AgentSession {
|
|
|
1857
1868
|
}
|
|
1858
1869
|
this.setActiveToolsByName([...new Set(nextActiveToolNames)]);
|
|
1859
1870
|
}
|
|
1871
|
+
/**
|
|
1872
|
+
* Install smart model routing via the prepareNextTurn hook.
|
|
1873
|
+
* When enabled, the router analyzes turn complexity and swaps to a
|
|
1874
|
+
* cheaper or more powerful model automatically.
|
|
1875
|
+
*/
|
|
1876
|
+
_installSmartRouting() {
|
|
1877
|
+
const existingHook = this.agent.prepareNextTurn;
|
|
1878
|
+
this.agent.prepareNextTurn = async (signal) => {
|
|
1879
|
+
// Run existing hook first (if any)
|
|
1880
|
+
const existing = existingHook ? await existingHook(signal) : undefined;
|
|
1881
|
+
if (!this.settingsManager.getSmartRouting()) {
|
|
1882
|
+
return existing;
|
|
1883
|
+
}
|
|
1884
|
+
// Build available models list from scoped models or all available
|
|
1885
|
+
let availableModels;
|
|
1886
|
+
if (this._scopedModels.length > 0) {
|
|
1887
|
+
availableModels = this._scopedModels
|
|
1888
|
+
.filter((sm) => this._modelRegistry.hasConfiguredAuth(sm.model))
|
|
1889
|
+
.map((sm) => sm.model);
|
|
1890
|
+
}
|
|
1891
|
+
else {
|
|
1892
|
+
availableModels = await this._modelRegistry.getAvailable();
|
|
1893
|
+
}
|
|
1894
|
+
if (availableModels.length <= 1) {
|
|
1895
|
+
return existing;
|
|
1896
|
+
}
|
|
1897
|
+
const config = {
|
|
1898
|
+
enabled: true,
|
|
1899
|
+
availableModels,
|
|
1900
|
+
preferredModel: this.agent.state.model,
|
|
1901
|
+
};
|
|
1902
|
+
const result = routeNextTurn({ messages: this.agent.state.messages, thinkingLevel: this.agent.state.thinkingLevel }, config);
|
|
1903
|
+
if (!result) {
|
|
1904
|
+
return existing;
|
|
1905
|
+
}
|
|
1906
|
+
return {
|
|
1907
|
+
...existing,
|
|
1908
|
+
model: result.model,
|
|
1909
|
+
};
|
|
1910
|
+
};
|
|
1911
|
+
}
|
|
1860
1912
|
_buildRuntime(options) {
|
|
1861
1913
|
const autoResizeImages = this.settingsManager.getImageAutoResize();
|
|
1862
1914
|
const shellCommandPrefix = this.settingsManager.getShellCommandPrefix();
|