happy-imou-cloud 2.0.20 → 2.0.21
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/dist/{BaseReasoningProcessor-B9z785Pi.cjs → BaseReasoningProcessor-0nj-PMFc.cjs} +3 -3
- package/dist/{BaseReasoningProcessor-iTk5q5Vy.mjs → BaseReasoningProcessor-DnVC7liC.mjs} +3 -3
- package/dist/{ProviderSelectionHandler-DUBEXkmo.cjs → ProviderSelectionHandler-Bafuy28L.cjs} +2 -2
- package/dist/{ProviderSelectionHandler-s79sTquD.mjs → ProviderSelectionHandler-R-2r7ItM.mjs} +2 -2
- package/dist/{api-_Y2kzqZL.mjs → api-DJe9WP9M.mjs} +77 -4
- package/dist/{api-BKnzORe4.cjs → api-MGlKcEf3.cjs} +78 -3
- package/dist/{command-BDkgHdQU.mjs → command-CfyFnMv2.mjs} +3 -3
- package/dist/{command-BBNzMWEG.cjs → command-DAlFmWmr.cjs} +3 -3
- package/dist/{index-Bg4KLXYY.mjs → index-CHXCgpwi.mjs} +8 -8
- package/dist/{index-0TIyXMQu.cjs → index-CgVjDJpt.cjs} +11 -11
- package/dist/index.cjs +3 -3
- package/dist/index.mjs +3 -3
- package/dist/lib.cjs +1 -1
- package/dist/lib.d.cts +393 -36
- package/dist/lib.d.mts +393 -36
- package/dist/lib.mjs +1 -1
- package/dist/{persistence-BCkHc68b.mjs → persistence-CkP90vEt.mjs} +1 -1
- package/dist/{persistence-D5uolhHo.cjs → persistence-DLFUNI9q.cjs} +1 -1
- package/dist/{registerKillSessionHandler-BMUE5Oaj.cjs → registerKillSessionHandler-Cs_INk4A.cjs} +356 -3
- package/dist/{registerKillSessionHandler-DJMH-gar.mjs → registerKillSessionHandler-DsHTZDsU.mjs} +354 -4
- package/dist/{runClaude-BUhD2jR2.cjs → runClaude-BGSgcyUp.cjs} +72 -9
- package/dist/{runClaude-BMv-eao6.mjs → runClaude-DAQAEmHe.mjs} +72 -9
- package/dist/{runCodex-DwnLnXWK.mjs → runCodex-B2UpSn82.mjs} +84 -14
- package/dist/{runCodex-DyNSDN6X.cjs → runCodex-earICaxw.cjs} +84 -14
- package/dist/{runGemini-uVHDcJ09.mjs → runGemini-BBUmH1Qh.mjs} +73 -9
- package/dist/{runGemini-UKpRbyNY.cjs → runGemini-D5RAIaR0.cjs} +73 -9
- package/package.json +1 -1
- package/scripts/release-smoke.mjs +3 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useStdout, useInput, Box, Text, render } from 'ink';
|
|
2
2
|
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import { l as logger, b as connectionState, A as ApiClient } from './api-
|
|
5
|
-
import { B as BasePermissionHandler, C as ConversationHistory$1, e as ensureManagedProviderMachine, M as MissingMachineIdError, s as syncControlledByUserState, b as MessageQueue2, h as hashObject, d as MessageBuffer,
|
|
6
|
-
import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, s as saveGeminiModelToConfig, a as createGeminiBackend, b as stopCaffeinate } from './index-
|
|
7
|
-
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-
|
|
4
|
+
import { l as logger, b as connectionState, A as ApiClient } from './api-DJe9WP9M.mjs';
|
|
5
|
+
import { B as BasePermissionHandler, C as ConversationHistory$1, e as ensureManagedProviderMachine, M as MissingMachineIdError, s as syncControlledByUserState, b as MessageQueue2, h as hashObject, r as resolveHappyOrgQueuedTurn, d as MessageBuffer, f as registerKillSessionHandler, i as buildHappyOrgTurnPrompt, w as waitForResponseCompleteWithAbort, j as finalizeHappyOrgTurn, k as closeProviderSession, l as launchRuntimeHandleWithFactoryResult, m as inferToolResultError, n as forwardAgentMessageToProviderSession } from './registerKillSessionHandler-DsHTZDsU.mjs';
|
|
6
|
+
import { g as getInitialGeminiModel, r as readGeminiLocalConfig, G as GEMINI_MODEL_ENV, s as saveGeminiModelToConfig, a as createGeminiBackend, b as stopCaffeinate } from './index-CHXCgpwi.mjs';
|
|
7
|
+
import { B as BaseReasoningProcessor, b as bootstrapManagedProviderSession } from './BaseReasoningProcessor-DnVC7liC.mjs';
|
|
8
8
|
import 'cross-spawn';
|
|
9
9
|
import '@agentclientprotocol/sdk';
|
|
10
10
|
import 'ps-list';
|
|
@@ -15,7 +15,7 @@ import 'node:child_process';
|
|
|
15
15
|
import 'node:readline';
|
|
16
16
|
import 'tweetnacl';
|
|
17
17
|
import 'axios';
|
|
18
|
-
import './persistence-
|
|
18
|
+
import './persistence-CkP90vEt.mjs';
|
|
19
19
|
import 'open';
|
|
20
20
|
import 'chalk';
|
|
21
21
|
import 'fs';
|
|
@@ -511,12 +511,32 @@ async function runGemini(opts) {
|
|
|
511
511
|
await syncControlledByUserState(session, false);
|
|
512
512
|
const messageQueue = new MessageQueue2((mode) => hashObject({
|
|
513
513
|
permissionMode: mode.permissionMode,
|
|
514
|
-
model: mode.model
|
|
514
|
+
model: mode.model,
|
|
515
|
+
happyOrg: mode.happyOrg ? {
|
|
516
|
+
taskId: mode.happyOrg.context.taskId,
|
|
517
|
+
organizationId: mode.happyOrg.context.organizationId,
|
|
518
|
+
memberAgentId: mode.happyOrg.context.memberAgentId,
|
|
519
|
+
supervisorAgentId: mode.happyOrg.context.supervisorAgentId,
|
|
520
|
+
reopenContext: mode.happyOrg.reopenContext ?? null
|
|
521
|
+
} : null
|
|
515
522
|
}));
|
|
516
523
|
const conversationHistory = new ConversationHistory({ maxMessages: 20, maxCharacters: 5e4 });
|
|
517
524
|
let currentPermissionMode = void 0;
|
|
518
525
|
let currentModel = void 0;
|
|
519
526
|
session.onUserMessage((message) => {
|
|
527
|
+
const happyOrgResult = resolveHappyOrgQueuedTurn({
|
|
528
|
+
metadata: session.getMetadataSnapshot(),
|
|
529
|
+
message
|
|
530
|
+
});
|
|
531
|
+
if (happyOrgResult.nextMetadata) {
|
|
532
|
+
session.updateMetadata(() => happyOrgResult.nextMetadata);
|
|
533
|
+
}
|
|
534
|
+
if (happyOrgResult.blocked) {
|
|
535
|
+
if (happyOrgResult.statusMessage) {
|
|
536
|
+
session.sendSessionEvent({ type: "message", message: happyOrgResult.statusMessage });
|
|
537
|
+
}
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
520
540
|
let messagePermissionMode = currentPermissionMode;
|
|
521
541
|
if (message.meta?.permissionMode) {
|
|
522
542
|
const validModes = ["default", "read-only", "safe-yolo", "yolo"];
|
|
@@ -560,8 +580,9 @@ async function runGemini(opts) {
|
|
|
560
580
|
const mode = {
|
|
561
581
|
permissionMode: messagePermissionMode || "default",
|
|
562
582
|
model: messageModel,
|
|
563
|
-
originalUserMessage
|
|
583
|
+
originalUserMessage,
|
|
564
584
|
// Store original message separately
|
|
585
|
+
happyOrg: happyOrgResult.queuedTurn
|
|
565
586
|
};
|
|
566
587
|
messageQueue.push(fullPrompt, mode);
|
|
567
588
|
conversationHistory.addUserMessage(originalUserMessage);
|
|
@@ -712,8 +733,10 @@ async function runGemini(opts) {
|
|
|
712
733
|
};
|
|
713
734
|
let accumulatedResponse = "";
|
|
714
735
|
let isResponseInProgress = false;
|
|
736
|
+
let currentResponseMessageId = null;
|
|
715
737
|
let hadToolCallInTurn = false;
|
|
716
738
|
let taskStartedSent = false;
|
|
739
|
+
let currentHappyOrgTurn = null;
|
|
717
740
|
const disposeRuntimeHandle = async () => {
|
|
718
741
|
if (!runtimeHandle) {
|
|
719
742
|
return;
|
|
@@ -728,6 +751,13 @@ async function runGemini(opts) {
|
|
|
728
751
|
logger.debug("[Gemini] Error disposing runtime session:", error);
|
|
729
752
|
}
|
|
730
753
|
};
|
|
754
|
+
const emitTurnReport = (report) => {
|
|
755
|
+
session.sendAgentMessage("gemini", {
|
|
756
|
+
type: "turn-report",
|
|
757
|
+
id: randomUUID(),
|
|
758
|
+
report
|
|
759
|
+
});
|
|
760
|
+
};
|
|
731
761
|
function setupGeminiMessageHandler(activeRuntimeHandle) {
|
|
732
762
|
const forwardAgentMessage = (agentMessage) => {
|
|
733
763
|
forwardAgentMessageToProviderSession(agentMessage, {
|
|
@@ -742,11 +772,15 @@ async function runGemini(opts) {
|
|
|
742
772
|
if (msg.textDelta) {
|
|
743
773
|
if (!isResponseInProgress) {
|
|
744
774
|
messageBuffer.removeLastMessage("system");
|
|
745
|
-
messageBuffer.addMessage(msg.textDelta, "assistant");
|
|
775
|
+
currentResponseMessageId = messageBuffer.addMessage(msg.textDelta, "assistant");
|
|
746
776
|
isResponseInProgress = true;
|
|
747
777
|
logger.debug(`[gemini] Started new response, first chunk length: ${msg.textDelta.length}`);
|
|
748
778
|
} else {
|
|
749
|
-
|
|
779
|
+
if (currentResponseMessageId) {
|
|
780
|
+
messageBuffer.updateMessage(currentResponseMessageId, msg.textDelta);
|
|
781
|
+
} else {
|
|
782
|
+
currentResponseMessageId = messageBuffer.addMessage(msg.textDelta, "assistant");
|
|
783
|
+
}
|
|
750
784
|
logger.debug(`[gemini] Updated response, chunk length: ${msg.textDelta.length}, total accumulated: ${accumulatedResponse.length + msg.textDelta.length}`);
|
|
751
785
|
}
|
|
752
786
|
accumulatedResponse += msg.textDelta;
|
|
@@ -780,6 +814,7 @@ async function runGemini(opts) {
|
|
|
780
814
|
session.keepAlive(thinking, "remote");
|
|
781
815
|
accumulatedResponse = "";
|
|
782
816
|
isResponseInProgress = false;
|
|
817
|
+
currentResponseMessageId = null;
|
|
783
818
|
let errorMessage = "Unknown error";
|
|
784
819
|
if (msg.detail) {
|
|
785
820
|
if (typeof msg.detail === "object") {
|
|
@@ -985,6 +1020,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
985
1020
|
const userMessageToShow = message.mode?.originalUserMessage || message.message;
|
|
986
1021
|
messageBuffer.addMessage(userMessageToShow, "user");
|
|
987
1022
|
isProcessingMessage = true;
|
|
1023
|
+
let turnStatus = "task_complete";
|
|
1024
|
+
currentHappyOrgTurn = message.mode.happyOrg ?? null;
|
|
988
1025
|
try {
|
|
989
1026
|
let activeHandle = runtimeHandle;
|
|
990
1027
|
if (!activeHandle) {
|
|
@@ -1003,6 +1040,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1003
1040
|
}
|
|
1004
1041
|
accumulatedResponse = "";
|
|
1005
1042
|
isResponseInProgress = false;
|
|
1043
|
+
currentResponseMessageId = null;
|
|
1006
1044
|
hadToolCallInTurn = false;
|
|
1007
1045
|
taskStartedSent = false;
|
|
1008
1046
|
let promptToSend = message.message;
|
|
@@ -1011,6 +1049,9 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1011
1049
|
promptToSend = historyContext + promptToSend;
|
|
1012
1050
|
logger.debug(`[gemini] Injected conversation history context (${historyContext.length} chars)`);
|
|
1013
1051
|
}
|
|
1052
|
+
if (message.mode.happyOrg) {
|
|
1053
|
+
promptToSend = buildHappyOrgTurnPrompt(promptToSend, message.mode.happyOrg);
|
|
1054
|
+
}
|
|
1014
1055
|
logger.debug(`[gemini] Sending prompt to Gemini (length: ${promptToSend.length}): ${promptToSend.substring(0, 100)}...`);
|
|
1015
1056
|
logger.debug(`[gemini] Full prompt: ${promptToSend}`);
|
|
1016
1057
|
const MAX_RETRIES = 3;
|
|
@@ -1060,6 +1101,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1060
1101
|
logger.debug("[gemini] Error in gemini session:", error);
|
|
1061
1102
|
const isAbortError = error instanceof Error && error.name === "AbortError";
|
|
1062
1103
|
if (isAbortError) {
|
|
1104
|
+
turnStatus = "turn_aborted";
|
|
1063
1105
|
messageBuffer.addMessage("Aborted by user", "status");
|
|
1064
1106
|
session.sendSessionEvent({ type: "message", message: "Aborted by user" });
|
|
1065
1107
|
} else {
|
|
@@ -1108,6 +1150,26 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1108
1150
|
permissionHandler.reset();
|
|
1109
1151
|
reasoningProcessor.abort();
|
|
1110
1152
|
diffProcessor.reset();
|
|
1153
|
+
const finalizedTurn = finalizeHappyOrgTurn({
|
|
1154
|
+
metadata: session.getMetadataSnapshot?.() ?? null,
|
|
1155
|
+
queuedTurn: message.mode.happyOrg,
|
|
1156
|
+
responseText: accumulatedResponse,
|
|
1157
|
+
turnStatus
|
|
1158
|
+
});
|
|
1159
|
+
if (finalizedTurn.nextMetadata && typeof session.updateMetadata === "function") {
|
|
1160
|
+
session.updateMetadata(() => finalizedTurn.nextMetadata);
|
|
1161
|
+
}
|
|
1162
|
+
if (finalizedTurn.report) {
|
|
1163
|
+
emitTurnReport(finalizedTurn.report);
|
|
1164
|
+
}
|
|
1165
|
+
if (finalizedTurn.terminateMessage) {
|
|
1166
|
+
messageBuffer.addMessage(finalizedTurn.terminateMessage, "status");
|
|
1167
|
+
session.sendSessionEvent({ type: "message", message: finalizedTurn.terminateMessage });
|
|
1168
|
+
}
|
|
1169
|
+
accumulatedResponse = finalizedTurn.cleanedText;
|
|
1170
|
+
if (currentResponseMessageId && finalizedTurn.cleanedText.trim()) {
|
|
1171
|
+
messageBuffer.updateMessage(currentResponseMessageId, finalizedTurn.cleanedText, { mode: "replace" });
|
|
1172
|
+
}
|
|
1111
1173
|
if (accumulatedResponse.trim()) {
|
|
1112
1174
|
const { text: messageText, options } = parseOptionsFromText(accumulatedResponse);
|
|
1113
1175
|
conversationHistory.addAssistantMessage(messageText);
|
|
@@ -1136,6 +1198,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1136
1198
|
});
|
|
1137
1199
|
hadToolCallInTurn = false;
|
|
1138
1200
|
taskStartedSent = false;
|
|
1201
|
+
currentResponseMessageId = null;
|
|
1202
|
+
currentHappyOrgTurn = null;
|
|
1139
1203
|
thinking = false;
|
|
1140
1204
|
session.keepAlive(thinking, "remote");
|
|
1141
1205
|
emitReadyIfIdle();
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
var ink = require('ink');
|
|
4
4
|
var React = require('react');
|
|
5
5
|
var node_crypto = require('node:crypto');
|
|
6
|
-
var api = require('./api-
|
|
7
|
-
var registerKillSessionHandler = require('./registerKillSessionHandler-
|
|
8
|
-
var index = require('./index-
|
|
9
|
-
var BaseReasoningProcessor = require('./BaseReasoningProcessor-
|
|
6
|
+
var api = require('./api-MGlKcEf3.cjs');
|
|
7
|
+
var registerKillSessionHandler = require('./registerKillSessionHandler-Cs_INk4A.cjs');
|
|
8
|
+
var index = require('./index-CgVjDJpt.cjs');
|
|
9
|
+
var BaseReasoningProcessor = require('./BaseReasoningProcessor-0nj-PMFc.cjs');
|
|
10
10
|
require('cross-spawn');
|
|
11
11
|
require('@agentclientprotocol/sdk');
|
|
12
12
|
require('ps-list');
|
|
@@ -17,7 +17,7 @@ require('node:child_process');
|
|
|
17
17
|
require('node:readline');
|
|
18
18
|
require('tweetnacl');
|
|
19
19
|
require('axios');
|
|
20
|
-
require('./persistence-
|
|
20
|
+
require('./persistence-DLFUNI9q.cjs');
|
|
21
21
|
require('open');
|
|
22
22
|
require('chalk');
|
|
23
23
|
require('fs');
|
|
@@ -513,12 +513,32 @@ async function runGemini(opts) {
|
|
|
513
513
|
await registerKillSessionHandler.syncControlledByUserState(session, false);
|
|
514
514
|
const messageQueue = new registerKillSessionHandler.MessageQueue2((mode) => registerKillSessionHandler.hashObject({
|
|
515
515
|
permissionMode: mode.permissionMode,
|
|
516
|
-
model: mode.model
|
|
516
|
+
model: mode.model,
|
|
517
|
+
happyOrg: mode.happyOrg ? {
|
|
518
|
+
taskId: mode.happyOrg.context.taskId,
|
|
519
|
+
organizationId: mode.happyOrg.context.organizationId,
|
|
520
|
+
memberAgentId: mode.happyOrg.context.memberAgentId,
|
|
521
|
+
supervisorAgentId: mode.happyOrg.context.supervisorAgentId,
|
|
522
|
+
reopenContext: mode.happyOrg.reopenContext ?? null
|
|
523
|
+
} : null
|
|
517
524
|
}));
|
|
518
525
|
const conversationHistory = new ConversationHistory({ maxMessages: 20, maxCharacters: 5e4 });
|
|
519
526
|
let currentPermissionMode = void 0;
|
|
520
527
|
let currentModel = void 0;
|
|
521
528
|
session.onUserMessage((message) => {
|
|
529
|
+
const happyOrgResult = registerKillSessionHandler.resolveHappyOrgQueuedTurn({
|
|
530
|
+
metadata: session.getMetadataSnapshot(),
|
|
531
|
+
message
|
|
532
|
+
});
|
|
533
|
+
if (happyOrgResult.nextMetadata) {
|
|
534
|
+
session.updateMetadata(() => happyOrgResult.nextMetadata);
|
|
535
|
+
}
|
|
536
|
+
if (happyOrgResult.blocked) {
|
|
537
|
+
if (happyOrgResult.statusMessage) {
|
|
538
|
+
session.sendSessionEvent({ type: "message", message: happyOrgResult.statusMessage });
|
|
539
|
+
}
|
|
540
|
+
return;
|
|
541
|
+
}
|
|
522
542
|
let messagePermissionMode = currentPermissionMode;
|
|
523
543
|
if (message.meta?.permissionMode) {
|
|
524
544
|
const validModes = ["default", "read-only", "safe-yolo", "yolo"];
|
|
@@ -562,8 +582,9 @@ async function runGemini(opts) {
|
|
|
562
582
|
const mode = {
|
|
563
583
|
permissionMode: messagePermissionMode || "default",
|
|
564
584
|
model: messageModel,
|
|
565
|
-
originalUserMessage
|
|
585
|
+
originalUserMessage,
|
|
566
586
|
// Store original message separately
|
|
587
|
+
happyOrg: happyOrgResult.queuedTurn
|
|
567
588
|
};
|
|
568
589
|
messageQueue.push(fullPrompt, mode);
|
|
569
590
|
conversationHistory.addUserMessage(originalUserMessage);
|
|
@@ -714,8 +735,10 @@ async function runGemini(opts) {
|
|
|
714
735
|
};
|
|
715
736
|
let accumulatedResponse = "";
|
|
716
737
|
let isResponseInProgress = false;
|
|
738
|
+
let currentResponseMessageId = null;
|
|
717
739
|
let hadToolCallInTurn = false;
|
|
718
740
|
let taskStartedSent = false;
|
|
741
|
+
let currentHappyOrgTurn = null;
|
|
719
742
|
const disposeRuntimeHandle = async () => {
|
|
720
743
|
if (!runtimeHandle) {
|
|
721
744
|
return;
|
|
@@ -730,6 +753,13 @@ async function runGemini(opts) {
|
|
|
730
753
|
api.logger.debug("[Gemini] Error disposing runtime session:", error);
|
|
731
754
|
}
|
|
732
755
|
};
|
|
756
|
+
const emitTurnReport = (report) => {
|
|
757
|
+
session.sendAgentMessage("gemini", {
|
|
758
|
+
type: "turn-report",
|
|
759
|
+
id: node_crypto.randomUUID(),
|
|
760
|
+
report
|
|
761
|
+
});
|
|
762
|
+
};
|
|
733
763
|
function setupGeminiMessageHandler(activeRuntimeHandle) {
|
|
734
764
|
const forwardAgentMessage = (agentMessage) => {
|
|
735
765
|
registerKillSessionHandler.forwardAgentMessageToProviderSession(agentMessage, {
|
|
@@ -744,11 +774,15 @@ async function runGemini(opts) {
|
|
|
744
774
|
if (msg.textDelta) {
|
|
745
775
|
if (!isResponseInProgress) {
|
|
746
776
|
messageBuffer.removeLastMessage("system");
|
|
747
|
-
messageBuffer.addMessage(msg.textDelta, "assistant");
|
|
777
|
+
currentResponseMessageId = messageBuffer.addMessage(msg.textDelta, "assistant");
|
|
748
778
|
isResponseInProgress = true;
|
|
749
779
|
api.logger.debug(`[gemini] Started new response, first chunk length: ${msg.textDelta.length}`);
|
|
750
780
|
} else {
|
|
751
|
-
|
|
781
|
+
if (currentResponseMessageId) {
|
|
782
|
+
messageBuffer.updateMessage(currentResponseMessageId, msg.textDelta);
|
|
783
|
+
} else {
|
|
784
|
+
currentResponseMessageId = messageBuffer.addMessage(msg.textDelta, "assistant");
|
|
785
|
+
}
|
|
752
786
|
api.logger.debug(`[gemini] Updated response, chunk length: ${msg.textDelta.length}, total accumulated: ${accumulatedResponse.length + msg.textDelta.length}`);
|
|
753
787
|
}
|
|
754
788
|
accumulatedResponse += msg.textDelta;
|
|
@@ -782,6 +816,7 @@ async function runGemini(opts) {
|
|
|
782
816
|
session.keepAlive(thinking, "remote");
|
|
783
817
|
accumulatedResponse = "";
|
|
784
818
|
isResponseInProgress = false;
|
|
819
|
+
currentResponseMessageId = null;
|
|
785
820
|
let errorMessage = "Unknown error";
|
|
786
821
|
if (msg.detail) {
|
|
787
822
|
if (typeof msg.detail === "object") {
|
|
@@ -987,6 +1022,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
987
1022
|
const userMessageToShow = message.mode?.originalUserMessage || message.message;
|
|
988
1023
|
messageBuffer.addMessage(userMessageToShow, "user");
|
|
989
1024
|
isProcessingMessage = true;
|
|
1025
|
+
let turnStatus = "task_complete";
|
|
1026
|
+
currentHappyOrgTurn = message.mode.happyOrg ?? null;
|
|
990
1027
|
try {
|
|
991
1028
|
let activeHandle = runtimeHandle;
|
|
992
1029
|
if (!activeHandle) {
|
|
@@ -1005,6 +1042,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1005
1042
|
}
|
|
1006
1043
|
accumulatedResponse = "";
|
|
1007
1044
|
isResponseInProgress = false;
|
|
1045
|
+
currentResponseMessageId = null;
|
|
1008
1046
|
hadToolCallInTurn = false;
|
|
1009
1047
|
taskStartedSent = false;
|
|
1010
1048
|
let promptToSend = message.message;
|
|
@@ -1013,6 +1051,9 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1013
1051
|
promptToSend = historyContext + promptToSend;
|
|
1014
1052
|
api.logger.debug(`[gemini] Injected conversation history context (${historyContext.length} chars)`);
|
|
1015
1053
|
}
|
|
1054
|
+
if (message.mode.happyOrg) {
|
|
1055
|
+
promptToSend = registerKillSessionHandler.buildHappyOrgTurnPrompt(promptToSend, message.mode.happyOrg);
|
|
1056
|
+
}
|
|
1016
1057
|
api.logger.debug(`[gemini] Sending prompt to Gemini (length: ${promptToSend.length}): ${promptToSend.substring(0, 100)}...`);
|
|
1017
1058
|
api.logger.debug(`[gemini] Full prompt: ${promptToSend}`);
|
|
1018
1059
|
const MAX_RETRIES = 3;
|
|
@@ -1062,6 +1103,7 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1062
1103
|
api.logger.debug("[gemini] Error in gemini session:", error);
|
|
1063
1104
|
const isAbortError = error instanceof Error && error.name === "AbortError";
|
|
1064
1105
|
if (isAbortError) {
|
|
1106
|
+
turnStatus = "turn_aborted";
|
|
1065
1107
|
messageBuffer.addMessage("Aborted by user", "status");
|
|
1066
1108
|
session.sendSessionEvent({ type: "message", message: "Aborted by user" });
|
|
1067
1109
|
} else {
|
|
@@ -1110,6 +1152,26 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1110
1152
|
permissionHandler.reset();
|
|
1111
1153
|
reasoningProcessor.abort();
|
|
1112
1154
|
diffProcessor.reset();
|
|
1155
|
+
const finalizedTurn = registerKillSessionHandler.finalizeHappyOrgTurn({
|
|
1156
|
+
metadata: session.getMetadataSnapshot?.() ?? null,
|
|
1157
|
+
queuedTurn: message.mode.happyOrg,
|
|
1158
|
+
responseText: accumulatedResponse,
|
|
1159
|
+
turnStatus
|
|
1160
|
+
});
|
|
1161
|
+
if (finalizedTurn.nextMetadata && typeof session.updateMetadata === "function") {
|
|
1162
|
+
session.updateMetadata(() => finalizedTurn.nextMetadata);
|
|
1163
|
+
}
|
|
1164
|
+
if (finalizedTurn.report) {
|
|
1165
|
+
emitTurnReport(finalizedTurn.report);
|
|
1166
|
+
}
|
|
1167
|
+
if (finalizedTurn.terminateMessage) {
|
|
1168
|
+
messageBuffer.addMessage(finalizedTurn.terminateMessage, "status");
|
|
1169
|
+
session.sendSessionEvent({ type: "message", message: finalizedTurn.terminateMessage });
|
|
1170
|
+
}
|
|
1171
|
+
accumulatedResponse = finalizedTurn.cleanedText;
|
|
1172
|
+
if (currentResponseMessageId && finalizedTurn.cleanedText.trim()) {
|
|
1173
|
+
messageBuffer.updateMessage(currentResponseMessageId, finalizedTurn.cleanedText, { mode: "replace" });
|
|
1174
|
+
}
|
|
1113
1175
|
if (accumulatedResponse.trim()) {
|
|
1114
1176
|
const { text: messageText, options } = parseOptionsFromText(accumulatedResponse);
|
|
1115
1177
|
conversationHistory.addAssistantMessage(messageText);
|
|
@@ -1138,6 +1200,8 @@ Guide: https://goo.gle/gemini-cli-auth-docs#workspace-gca`;
|
|
|
1138
1200
|
});
|
|
1139
1201
|
hadToolCallInTurn = false;
|
|
1140
1202
|
taskStartedSent = false;
|
|
1203
|
+
currentResponseMessageId = null;
|
|
1204
|
+
currentHappyOrgTurn = null;
|
|
1141
1205
|
thinking = false;
|
|
1142
1206
|
session.keepAlive(thinking, "remote");
|
|
1143
1207
|
emitReadyIfIdle();
|
package/package.json
CHANGED
|
@@ -166,9 +166,9 @@ function shouldRunProviderSmoke(provider) {
|
|
|
166
166
|
return process.env[`HAPPY_SMOKE_${provider.toUpperCase()}`] === '1';
|
|
167
167
|
}
|
|
168
168
|
|
|
169
|
-
function shouldSkipPackedInstallVerification() {
|
|
170
|
-
return process.env.npm_lifecycle_event === 'prepublishOnly';
|
|
171
|
-
}
|
|
169
|
+
function shouldSkipPackedInstallVerification() {
|
|
170
|
+
return process.env.npm_lifecycle_event === 'prepublishOnly';
|
|
171
|
+
}
|
|
172
172
|
|
|
173
173
|
function main() {
|
|
174
174
|
const tsc = resolveTool('tsc', 'typescript');
|