moderado 0.4.10 → 0.4.26
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 +38 -13
- package/dist/args.d.ts +1 -1
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +8 -1
- package/dist/args.js.map +1 -1
- package/dist/commands/chat.d.ts +1 -2
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +42 -20
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/skills.js +2 -2
- package/dist/commands/skills.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/self_update.d.ts +53 -0
- package/dist/self_update.d.ts.map +1 -0
- package/dist/self_update.js +515 -0
- package/dist/self_update.js.map +1 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +16 -8
- package/dist/skills.js.map +1 -1
- package/dist/ui/help_modal.js +1 -1
- package/dist/ui/help_modal.js.map +1 -1
- package/dist/ui/provider_connect.d.ts.map +1 -1
- package/dist/ui/provider_connect.js +82 -55
- package/dist/ui/provider_connect.js.map +1 -1
- package/dist/ui/renderer.d.ts +6 -0
- package/dist/ui/renderer.d.ts.map +1 -1
- package/dist/ui/renderer.js +23 -4
- package/dist/ui/renderer.js.map +1 -1
- package/dist/ui/welcome.d.ts +30 -7
- package/dist/ui/welcome.d.ts.map +1 -1
- package/dist/ui/welcome.js +157 -59
- package/dist/ui/welcome.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -88,19 +88,44 @@ npm install -g moderado
|
|
|
88
88
|
moderado --help
|
|
89
89
|
```
|
|
90
90
|
|
|
91
|
-
The latest published release is 0.4.
|
|
92
|
-
Gateway
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
Install the latest release with `npm install -g moderado`. To
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
91
|
+
The latest published release is 0.4.26. Its `/connect` flow handles the
|
|
92
|
+
Gateway and direct providers; `/login` is no longer offered. The previous
|
|
93
|
+
0.4.8 release uses `/login` for the Gateway. The earlier 0.3.10 release is
|
|
94
|
+
self-contained and works without the Gateway. All three use the `moderado`
|
|
95
|
+
command name.
|
|
96
|
+
|
|
97
|
+
Install the latest release with `npm install -g moderado`. To install a specific
|
|
98
|
+
version, run `npm install -g moderado@<version>`. Prebuilt binaries and the curl
|
|
99
|
+
installer are documented in the root README. Windows installation options are
|
|
100
|
+
npm and Scoop. See `docs/DISTRIBUTION.md` for package-manager details.
|
|
101
|
+
|
|
102
|
+
### Update an existing installation
|
|
103
|
+
|
|
104
|
+
These commands are available starting with Moderado v0.4.18.
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
moderado update # latest release within the installed major version
|
|
108
|
+
moderado upgrade # latest release, including a major version change
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Both commands update the current installation in place and report the installed
|
|
112
|
+
and target versions. If already current, the command reports that and exits
|
|
113
|
+
successfully. Restart Moderado after a successful update to use the new version.
|
|
114
|
+
|
|
115
|
+
Global npm installs and standalone binaries installed at the default
|
|
116
|
+
`~/.local/bin/moderado` path by the Moderado installer are updated in place.
|
|
117
|
+
The npm update preserves the existing global prefix and does not update other
|
|
118
|
+
global packages. Standalone installs made with a custom `--dir` path are not
|
|
119
|
+
recognized for in-place updates and require the original installer. Homebrew
|
|
120
|
+
and Scoop installations remain managed by their package managers: use
|
|
121
|
+
`brew upgrade moderado` or `scoop update moderado`. Other npm-compatible package
|
|
122
|
+
managers should be updated with the manager that installed Moderado.
|
|
123
|
+
|
|
124
|
+
If Moderado cannot safely identify or replace the installation, it exits with
|
|
125
|
+
an actionable error and leaves the current installation intact. Update it
|
|
126
|
+
manually with its original installer or package manager, for example
|
|
127
|
+
`npm install -g moderado` or the Homebrew/Scoop command above. An interrupted
|
|
128
|
+
update reports cancellation; run the command again when ready.
|
|
104
129
|
To build from source instead:
|
|
105
130
|
|
|
106
131
|
```bash
|
package/dist/args.d.ts
CHANGED
package/dist/args.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAM,EAA0B,GAAG,aAAa,CAsFlF;AAED,wBAAgB,WAAW,IAAI,MAAM,CAoCpC"}
|
package/dist/args.js
CHANGED
|
@@ -48,6 +48,9 @@ export function parseCliArgs(args = process.argv.slice(2)) {
|
|
|
48
48
|
else if (first === 'models') {
|
|
49
49
|
command = 'models';
|
|
50
50
|
}
|
|
51
|
+
else if (first === 'update' || first === 'upgrade') {
|
|
52
|
+
command = first;
|
|
53
|
+
}
|
|
51
54
|
else if (first === 'run') {
|
|
52
55
|
command = 'run';
|
|
53
56
|
task = positionals.slice(1).join(' ');
|
|
@@ -92,14 +95,18 @@ export function getHelpText() {
|
|
|
92
95
|
|
|
93
96
|
USAGE:
|
|
94
97
|
moderado models [options]
|
|
98
|
+
moderado update
|
|
99
|
+
moderado upgrade
|
|
95
100
|
moderado run "<task>" [options]
|
|
96
101
|
moderado "<task>" [options]
|
|
97
102
|
|
|
98
103
|
COMMANDS:
|
|
99
104
|
models Discover live models, capability & access tiers
|
|
100
105
|
run "<task>" Execute a bounded coding task in the workspace\n skills List built-in and user skills
|
|
101
|
-
skills on|off NAME
|
|
106
|
+
skills on|off NAME|PATTERN Enable or disable user skills (* matches all)
|
|
102
107
|
doctor Check local Moderado setup
|
|
108
|
+
update Update within the current major version
|
|
109
|
+
upgrade Upgrade across major versions
|
|
103
110
|
|
|
104
111
|
OPTIONS:
|
|
105
112
|
-w, --workspace <path> Target workspace directory (default: current directory)
|
package/dist/args.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AA4BtC,MAAM,UAAU,YAAY,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG;QACpB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE;QAChE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,GAAG,EAAE;QAC9C,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;QACrC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE;QAC1E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,OAAO,EAAE,IAAI,EAAE;QACvD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE;QACzC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAiB,EAAE,OAAO,EAAE,KAAK,EAAE;QACpD,WAAW,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QACzD,cAAc,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;QACxE,iBAAiB,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QAC/D,YAAY,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QAC1D,eAAe,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QAC7D,OAAO,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QACrD,IAAI,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QAClD,OAAO,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QACrD,YAAY,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QAC1D,qBAAqB,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,OAAO,EAAE,KAAK,EAAE;QACnE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;QAC9D,OAAO,EAAE,EAAE,IAAI,EAAE,SAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;KAClE,CAAC;IAEF,MAAM,MAAM,GAAG,SAAS,CAAC;QACvB,IAAI;QACJ,OAAO,EAAE,aAAa;QACtB,gBAAgB,EAAE,IAAI;KACvB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACvC,IAAI,
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/chat.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ export declare function resolveTurnAssistantAnswer(result: {
|
|
|
37
37
|
answer: string;
|
|
38
38
|
isError: boolean;
|
|
39
39
|
};
|
|
40
|
+
export declare function saveFailedTurnPrompt(history: ChatMessage[], prompt: string): ChatMessage[];
|
|
40
41
|
export declare function isBareExitCommand(input: string): boolean;
|
|
41
42
|
/** Resolve the required, explicit local destination for `/session share`. */
|
|
42
43
|
export declare function resolveSessionSharePath(workspaceRoot: string, outputPath: string): string;
|
|
@@ -69,7 +70,6 @@ export declare function handleGenerationKeypress(str: string, key: {
|
|
|
69
70
|
onBtw?: (command: string) => void;
|
|
70
71
|
}): void;
|
|
71
72
|
export declare function isNetworkCommand(request: Pick<ApprovalRequest, 'toolName' | 'exactPayload'>): boolean;
|
|
72
|
-
export declare function isNetworkConsentReply(input: string, previousAnswer: string): boolean;
|
|
73
73
|
export declare function isLocalModelQuery(input: string): boolean;
|
|
74
74
|
export declare function isLocalProviderQuery(input: string): boolean;
|
|
75
75
|
export declare function isLocalIdentityQuery(input: string): boolean;
|
|
@@ -100,7 +100,6 @@ export declare function buildSearchAnswerTask(question: string, result: ToolResu
|
|
|
100
100
|
export declare function replaceEvidenceTurn(messages: ChatMessage[], evidenceTask: string, question: string): ChatMessage[];
|
|
101
101
|
export interface ApprovalPolicyOptions {
|
|
102
102
|
autoApprove: boolean;
|
|
103
|
-
networkAccessApproved: boolean;
|
|
104
103
|
requestInteractiveApproval: (request: ApprovalRequest, signal?: AbortSignal) => Promise<ApprovalDecision>;
|
|
105
104
|
}
|
|
106
105
|
export declare function decideApproval(request: ApprovalRequest, options: ApprovalPolicyOptions, signal?: AbortSignal): Promise<ApprovalDecision>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/chat.js
CHANGED
|
@@ -14,7 +14,7 @@ import { connectProviderInteractive, isAuthenticationFailure, isModeradoCloudOAu
|
|
|
14
14
|
import { initWorkspace } from './init.js';
|
|
15
15
|
import { expandMentions, createWorkspaceFileSource } from '../ui/file_mentions.js';
|
|
16
16
|
import { listFiles } from '../vendor/tools/index.js';
|
|
17
|
-
import { exitCleanly, promptInteractiveTurn, renderChatAnswerDelta, renderChatComposerCursor, renderChatThoughtTimeUpdate, renderChatUsageUpdate, renderGatewayFallbackUpdate, renderFullWelcomeScreen, renderWelcomePopupLayer, terminalCleanExitDone, wrapText } from '../ui/welcome.js';
|
|
17
|
+
import { exitCleanly, promptInteractiveTurn, renderChatAnswerDelta, renderChatComposerCursor, renderChatThoughtTimeUpdate, renderChatUsageUpdate, renderGatewayFallbackUpdate, renderFullWelcomeScreen, renderWelcomePopupLayer, terminalCleanExitDone, wrapText, getChatAnswerArea } from '../ui/welcome.js';
|
|
18
18
|
import { accumulateSessionUsage, compactSessionMessages, createSession, exportSessionMarkdown, formatSessionCost, SessionStore } from '../sessions.js';
|
|
19
19
|
import { layerPromptBox, renderBoxLines, selectConfirmPopup, selectListPopup } from '../ui/popup.js';
|
|
20
20
|
import { askModalChoice } from '../ui/prompt.js';
|
|
@@ -192,6 +192,11 @@ export function resolveTurnAssistantAnswer(result, previousHistoryLength, lastEr
|
|
|
192
192
|
isError: false,
|
|
193
193
|
};
|
|
194
194
|
}
|
|
195
|
+
export function saveFailedTurnPrompt(history, prompt) {
|
|
196
|
+
if (!prompt.trim())
|
|
197
|
+
return history;
|
|
198
|
+
return [...history, { role: 'user', content: prompt }];
|
|
199
|
+
}
|
|
195
200
|
export function isBareExitCommand(input) {
|
|
196
201
|
return input.trim().toLowerCase() === 'exit';
|
|
197
202
|
}
|
|
@@ -300,9 +305,6 @@ export function isNetworkCommand(request) {
|
|
|
300
305
|
const text = Array.isArray(command) ? command.join(' ').toLowerCase() : '';
|
|
301
306
|
return request.toolName === 'run_command' && /\b(curl|wget|invoke-webrequest|iwr|irm)\b|https?:\/\//.test(text);
|
|
302
307
|
}
|
|
303
|
-
export function isNetworkConsentReply(input, previousAnswer) {
|
|
304
|
-
return /^(y|yes)$/i.test(input.trim()) && /\b(weather|internet|online|look up|web|curl)\b/i.test(previousAnswer);
|
|
305
|
-
}
|
|
306
308
|
export function isLocalModelQuery(input) {
|
|
307
309
|
const text = input.trim().toLowerCase().replace(/[?!.]+$/, '').trim();
|
|
308
310
|
if (!text)
|
|
@@ -450,9 +452,8 @@ export function replaceEvidenceTurn(messages, evidenceTask, question) {
|
|
|
450
452
|
return messages.map((message) => (message.role === 'user' && message.content === evidenceTask ? { role: 'user', content: question } : message));
|
|
451
453
|
}
|
|
452
454
|
export async function decideApproval(request, options, signal) {
|
|
453
|
-
if (isNetworkCommand(request)
|
|
454
|
-
return
|
|
455
|
-
}
|
|
455
|
+
if (isNetworkCommand(request))
|
|
456
|
+
return options.requestInteractiveApproval(request, signal);
|
|
456
457
|
if (options.autoApprove && !request.toolName.startsWith('mcp.')) {
|
|
457
458
|
return { requestId: request.requestId, status: 'approved' };
|
|
458
459
|
}
|
|
@@ -762,11 +763,9 @@ export async function handleChatSession(args, version, signal) {
|
|
|
762
763
|
await reloadMcpTools();
|
|
763
764
|
const terminalApproval = new TerminalApprovalHandler();
|
|
764
765
|
const checkpoints = new WorkspaceCheckpointStore();
|
|
765
|
-
let networkAccessApproved = false;
|
|
766
766
|
let suspendGenerationInput;
|
|
767
767
|
const approvalHandler = { requestApproval: async (req, sig) => decideApproval(req, {
|
|
768
768
|
autoApprove: activeAutoApprove,
|
|
769
|
-
networkAccessApproved,
|
|
770
769
|
requestInteractiveApproval: async (request, approvalSignal) => {
|
|
771
770
|
const resumeGenerationInput = suspendGenerationInput?.();
|
|
772
771
|
try {
|
|
@@ -782,6 +781,7 @@ export async function handleChatSession(args, version, signal) {
|
|
|
782
781
|
let conversationHistory = [...activeSession.messages];
|
|
783
782
|
let lastQuestion = '';
|
|
784
783
|
let lastAnswer = '';
|
|
784
|
+
let lastTurnDone = false;
|
|
785
785
|
let lastThoughtTime = 0;
|
|
786
786
|
let lastOutputTokenRate;
|
|
787
787
|
let lastTokenUsage;
|
|
@@ -799,7 +799,7 @@ export async function handleChatSession(args, version, signal) {
|
|
|
799
799
|
else {
|
|
800
800
|
const turn = await promptInteractiveTurn({
|
|
801
801
|
model: currentModel ?? 'No model connected — use /connect', tokens: Math.round(sessionTokens), cost: costLabel(), workspace: canonicalWorkspace, version,
|
|
802
|
-
usageAvailable: activeSession.usage.available, usageEstimated: activeSession.usage.estimated, initialMode: activeMode, initialAutoApprove: activeAutoApprove, isFirstTurn: isFirst, signal, chatQuestion: lastQuestion || undefined, chatAnswer: lastAnswer || undefined, chatThoughtTime: lastThoughtTime, outputTokenRate: lastOutputTokenRate, tokenUsage: lastTokenUsage,
|
|
802
|
+
usageAvailable: activeSession.usage.available, usageEstimated: activeSession.usage.estimated, initialMode: activeMode, initialAutoApprove: activeAutoApprove, isFirstTurn: isFirst, signal, chatQuestion: lastQuestion || undefined, chatAnswer: lastAnswer || undefined, chatThoughtTime: lastThoughtTime, chatTaskDone: lastTurnDone, outputTokenRate: lastOutputTokenRate, tokenUsage: lastTokenUsage,
|
|
803
803
|
queuedCommands: commandQueue.items,
|
|
804
804
|
onExit: exitMessage,
|
|
805
805
|
questionHistory: conversationHistory.flatMap((message) => message.role === 'user' && message.content?.trim() ? [message.content] : []),
|
|
@@ -1196,14 +1196,14 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1196
1196
|
if ((parts[1] === 'on' || parts[1] === 'off') && parts[2]) {
|
|
1197
1197
|
try {
|
|
1198
1198
|
enabledSkillNames = setSkillEnabled(parts[2], parts[1] === 'on');
|
|
1199
|
-
lastAnswer = `User skill ${parts[2]} ${parts[1] === 'on' ? 'enabled' : 'disabled'}.\n\n${formatSkillsList(discoveredSkills, true, undefined, enabledSkillNames)}`;
|
|
1199
|
+
lastAnswer = `User skill${parts[2].includes('*') ? 's matching' : ''} ${parts[2]} ${parts[1] === 'on' ? 'enabled' : 'disabled'}.\n\n${formatSkillsList(discoveredSkills, true, undefined, enabledSkillNames)}`;
|
|
1200
1200
|
}
|
|
1201
1201
|
catch (error) {
|
|
1202
1202
|
lastAnswer = error instanceof Error ? error.message : String(error);
|
|
1203
1203
|
}
|
|
1204
1204
|
}
|
|
1205
1205
|
else if (parts[1] === 'on' || parts[1] === 'off') {
|
|
1206
|
-
lastAnswer = `Usage: /skills ${parts[1]} NAME`;
|
|
1206
|
+
lastAnswer = `Usage: /skills ${parts[1]} NAME|PATTERN (* matches all user skills)`;
|
|
1207
1207
|
}
|
|
1208
1208
|
else if (parts[1]) {
|
|
1209
1209
|
const skill = discoveredSkills.find((item) => item.name === parts[1]);
|
|
@@ -1239,7 +1239,7 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1239
1239
|
' /review - Review current workspace changes for bugs\n' +
|
|
1240
1240
|
' /map - Show a compact workspace file map\n' +
|
|
1241
1241
|
' /budget - Set a per-task token limit (/budget 5000, /budget off)\n' +
|
|
1242
|
-
' /skills - List skills; use /skills on NAME
|
|
1242
|
+
' /skills - List skills; use /skills on|off NAME|PATTERN (* for all)\n' +
|
|
1243
1243
|
' /clear - Reset conversation memory\n' +
|
|
1244
1244
|
' /help - Display commands, shortcuts & version\n' +
|
|
1245
1245
|
' /exit - Exit Moderado';
|
|
@@ -1259,7 +1259,6 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1259
1259
|
}
|
|
1260
1260
|
const expandedTurn = await expandMentions(trimmed, createWorkspaceFileSource(canonicalWorkspace));
|
|
1261
1261
|
const effectivePrompt = expandedTurn.text;
|
|
1262
|
-
networkAccessApproved = isNetworkConsentReply(trimmed, lastAnswer);
|
|
1263
1262
|
// 1. Instant local meta queries (model/provider status)
|
|
1264
1263
|
const localMetaAnswer = resolveLocalMetaQuery(trimmed, {
|
|
1265
1264
|
currentModel,
|
|
@@ -1405,13 +1404,15 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1405
1404
|
const requestSignal = signal ? AbortSignal.any([signal, requestAbort.signal]) : requestAbort.signal;
|
|
1406
1405
|
let streamedAnswer = '';
|
|
1407
1406
|
lastAnswer = '';
|
|
1407
|
+
lastTurnDone = false;
|
|
1408
|
+
let taskStep;
|
|
1408
1409
|
let firstAssistantDeltaAt;
|
|
1409
1410
|
let outputTokenRate;
|
|
1410
1411
|
let budgetWarningIssued = false;
|
|
1411
1412
|
let budgetStopped = false;
|
|
1412
1413
|
let lastUsagePaint = 0;
|
|
1413
1414
|
const usedModels = new Set();
|
|
1414
|
-
let answerPosition = { row: 15, column:
|
|
1415
|
+
let answerPosition = { row: 15, column: getChatAnswerArea(process.stdout.columns).startColumn };
|
|
1415
1416
|
let lastErrorEvent;
|
|
1416
1417
|
const redrawChatFrame = () => {
|
|
1417
1418
|
const thoughtTime = Math.max(0.001, (Date.now() - startedAt) / 1000);
|
|
@@ -1428,6 +1429,7 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1428
1429
|
chatQuestion: trimmed,
|
|
1429
1430
|
chatAnswer: displayAnswer,
|
|
1430
1431
|
chatThoughtTime: thoughtTime,
|
|
1432
|
+
chatTaskDone: lastTurnDone,
|
|
1431
1433
|
outputTokenRate,
|
|
1432
1434
|
tokenUsage: turnUsage,
|
|
1433
1435
|
budgetStatus: budgetStopped ? 'Budget reached' : budgetWarningIssued ? 'Budget ≥80%' : undefined,
|
|
@@ -1436,9 +1438,8 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1436
1438
|
}, process.stdout.rows));
|
|
1437
1439
|
process.stdout.write(renderChatComposerCursor({ width: process.stdout.columns }, commandQueue.currentDraft.length));
|
|
1438
1440
|
if (displayAnswer) {
|
|
1439
|
-
const
|
|
1440
|
-
|
|
1441
|
-
answerPosition = renderChatAnswerDelta(displayAnswer, { row: 15, column: 1 }, maxWidth);
|
|
1441
|
+
const area = getChatAnswerArea(process.stdout.columns);
|
|
1442
|
+
answerPosition = renderChatAnswerDelta(displayAnswer, { row: 15, column: area.startColumn }, area.wrapWidth, area.startColumn);
|
|
1442
1443
|
}
|
|
1443
1444
|
};
|
|
1444
1445
|
const onGenerationKeypress = (str, key) => {
|
|
@@ -1528,7 +1529,7 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1528
1529
|
redrawChatFrame();
|
|
1529
1530
|
thinkingTimer = setInterval(() => {
|
|
1530
1531
|
if (!firstAssistantDeltaAt && !turnUsage) {
|
|
1531
|
-
process.stdout.write(renderChatThoughtTimeUpdate((Date.now() - startedAt) / 1000));
|
|
1532
|
+
process.stdout.write(renderChatThoughtTimeUpdate((Date.now() - startedAt) / 1000, taskStep, process.stdout.columns));
|
|
1532
1533
|
}
|
|
1533
1534
|
}, 400);
|
|
1534
1535
|
const evidenceTask = liveSearch ? buildSearchAnswerTask(effectivePrompt, liveSearch) : undefined;
|
|
@@ -1540,6 +1541,11 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1540
1541
|
eventListener: (event) => {
|
|
1541
1542
|
if (event.type === 'model_change')
|
|
1542
1543
|
usedModels.add(event.newModelId);
|
|
1544
|
+
if (event.type === 'progress') {
|
|
1545
|
+
taskStep = { step: event.step, maxSteps: event.maxSteps ?? 0 };
|
|
1546
|
+
if (!firstAssistantDeltaAt)
|
|
1547
|
+
process.stdout.write(renderChatThoughtTimeUpdate((Date.now() - startedAt) / 1000, taskStep, process.stdout.columns));
|
|
1548
|
+
}
|
|
1543
1549
|
if (event.type === 'gateway_status')
|
|
1544
1550
|
process.stdout.write(renderGatewayFallbackUpdate(event, process.stdout.columns || 80));
|
|
1545
1551
|
if (event.type === 'usage') {
|
|
@@ -1566,7 +1572,8 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1566
1572
|
clearInterval(thinkingTimer);
|
|
1567
1573
|
}
|
|
1568
1574
|
streamedAnswer += event.delta;
|
|
1569
|
-
const
|
|
1575
|
+
const area = getChatAnswerArea(process.stdout.columns);
|
|
1576
|
+
const renderedDelta = renderChatAnswerDelta(event.delta, answerPosition, area.wrapWidth, area.startColumn);
|
|
1570
1577
|
answerPosition = renderedDelta;
|
|
1571
1578
|
process.stdout.write(renderedDelta.sequence);
|
|
1572
1579
|
process.stdout.write(renderChatComposerCursor({ width: process.stdout.columns }, commandQueue.currentDraft.length));
|
|
@@ -1663,6 +1670,13 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1663
1670
|
streamedAnswer = lastAnswer;
|
|
1664
1671
|
}
|
|
1665
1672
|
else if (resolution.isError) {
|
|
1673
|
+
conversationHistory = saveFailedTurnPrompt(conversationHistory, effectivePrompt);
|
|
1674
|
+
activeSession.messages = conversationHistory;
|
|
1675
|
+
activeSession.providerId = activeConnection?.id;
|
|
1676
|
+
activeSession.providerName = activeConnection?.displayName;
|
|
1677
|
+
activeSession.modelId = result.selectedModel.id;
|
|
1678
|
+
activeSession.mode = activeMode;
|
|
1679
|
+
sessionStore.save(activeSession);
|
|
1666
1680
|
streamedAnswer = lastAnswer;
|
|
1667
1681
|
}
|
|
1668
1682
|
else {
|
|
@@ -1676,6 +1690,7 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1676
1690
|
}
|
|
1677
1691
|
if (activeMode === 'Plan')
|
|
1678
1692
|
activePlan = lastAnswer;
|
|
1693
|
+
lastTurnDone = result.status === 'completed' && !budgetStopped && !resolution.isError;
|
|
1679
1694
|
lastQuestion = trimmed;
|
|
1680
1695
|
lastThoughtTime = Math.max(0.001, (Date.now() - startedAt) / 1000);
|
|
1681
1696
|
lastOutputTokenRate = outputTokenRate;
|
|
@@ -1696,6 +1711,13 @@ export async function handleChatSession(args, version, signal) {
|
|
|
1696
1711
|
? ` (other configured providers: ${otherConnections.join(', ')})`
|
|
1697
1712
|
: '';
|
|
1698
1713
|
lastQuestion = trimmed;
|
|
1714
|
+
conversationHistory = saveFailedTurnPrompt(conversationHistory, effectivePrompt);
|
|
1715
|
+
activeSession.messages = conversationHistory;
|
|
1716
|
+
activeSession.providerId = activeConnection?.id;
|
|
1717
|
+
activeSession.providerName = activeConnection?.displayName;
|
|
1718
|
+
activeSession.modelId = currentModel;
|
|
1719
|
+
activeSession.mode = activeMode;
|
|
1720
|
+
sessionStore.save(activeSession);
|
|
1699
1721
|
const rawErr = err?.message || 'Inference error';
|
|
1700
1722
|
const cleanErr = rawErr
|
|
1701
1723
|
.replace(/^(?:NVIDIA NIM|OpenAI|OpenRouter|[a-zA-Z0-9_-]+)\s*(?:request failed|rate limit exceeded|service or model unavailable)?\s*(?:\([^)]*\))?\s*(?:during\s*streamChat)?:\s*/i, '')
|