chatroom-cli 1.127.0 → 1.128.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/dist/index.js +76 -57
- package/dist/index.js.map +10 -9
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -48728,6 +48728,14 @@ var init_pi_sdk_package = __esm(() => {
|
|
|
48728
48728
|
};
|
|
48729
48729
|
});
|
|
48730
48730
|
|
|
48731
|
+
// src/daemon/infrastructure/local/harness/services/pi-sdk/assistant-error.ts
|
|
48732
|
+
function assistantErrorOf(event) {
|
|
48733
|
+
if (event.message.role !== "assistant" || event.message.stopReason !== "error")
|
|
48734
|
+
return;
|
|
48735
|
+
return event.message.errorMessage ?? UNKNOWN_PROVIDER_ERROR;
|
|
48736
|
+
}
|
|
48737
|
+
var UNKNOWN_PROVIDER_ERROR = "unknown provider error";
|
|
48738
|
+
|
|
48731
48739
|
// src/daemon/infrastructure/local/harness/services/pi-sdk/pi-sdk-stream-adapter.ts
|
|
48732
48740
|
var PiSdkStreamAdapter;
|
|
48733
48741
|
var init_pi_sdk_stream_adapter = __esm(() => {
|
|
@@ -48735,6 +48743,7 @@ var init_pi_sdk_stream_adapter = __esm(() => {
|
|
|
48735
48743
|
PiSdkStreamAdapter = class PiSdkStreamAdapter extends NativeStreamAdapterBase {
|
|
48736
48744
|
textBuffer = "";
|
|
48737
48745
|
thinkingBuffer = "";
|
|
48746
|
+
lastAssistantError;
|
|
48738
48747
|
constructor(logPrefix, emitLogLine, activityEmitter) {
|
|
48739
48748
|
super(logPrefix, emitLogLine, activityEmitter);
|
|
48740
48749
|
}
|
|
@@ -48774,17 +48783,43 @@ var init_pi_sdk_stream_adapter = __esm(() => {
|
|
|
48774
48783
|
this.writeLine(formatAgentLogLine(this.logPrefix, "tool_result", `${event.toolName} result: ${resultStr}`));
|
|
48775
48784
|
break;
|
|
48776
48785
|
}
|
|
48786
|
+
case "message_end":
|
|
48787
|
+
this.recordAssistantOutcome(event);
|
|
48788
|
+
break;
|
|
48777
48789
|
case "agent_end":
|
|
48778
|
-
|
|
48790
|
+
if (event.willRetry)
|
|
48791
|
+
break;
|
|
48792
|
+
this.settleRun("pi-sdk.agent_end");
|
|
48779
48793
|
break;
|
|
48780
48794
|
default:
|
|
48781
48795
|
break;
|
|
48782
48796
|
}
|
|
48783
48797
|
}
|
|
48798
|
+
recordAssistantOutcome(event) {
|
|
48799
|
+
const message = event.message;
|
|
48800
|
+
if (message.role !== "assistant")
|
|
48801
|
+
return;
|
|
48802
|
+
this.lastAssistantError = assistantErrorOf(event);
|
|
48803
|
+
if (this.lastAssistantError === undefined)
|
|
48804
|
+
return;
|
|
48805
|
+
this.writeLine(formatAgentLogLine(this.logPrefix, "run-error", `assistant error: ${this.lastAssistantError}`));
|
|
48806
|
+
}
|
|
48807
|
+
settleResolvedPrompt() {
|
|
48808
|
+
this.settleRun("pi-sdk.prompt.resolved");
|
|
48809
|
+
}
|
|
48784
48810
|
finish() {
|
|
48785
48811
|
this.flushText();
|
|
48786
48812
|
this.flushThinking();
|
|
48787
48813
|
}
|
|
48814
|
+
settleRun(source) {
|
|
48815
|
+
if (this.lastAssistantError !== undefined) {
|
|
48816
|
+
const error51 = this.lastAssistantError;
|
|
48817
|
+
if (this.completeTurn({ status: "failed", source, error: error51 }))
|
|
48818
|
+
this.notifyFailure(source);
|
|
48819
|
+
} else {
|
|
48820
|
+
this.completeTurn({ status: "completed", source });
|
|
48821
|
+
}
|
|
48822
|
+
}
|
|
48788
48823
|
appendText(delta) {
|
|
48789
48824
|
this.flushThinking();
|
|
48790
48825
|
this.textBuffer += delta;
|
|
@@ -48876,9 +48911,13 @@ function waitForResumeOrAbort4(session2) {
|
|
|
48876
48911
|
})
|
|
48877
48912
|
]);
|
|
48878
48913
|
}
|
|
48879
|
-
function
|
|
48914
|
+
async function createModelRuntime() {
|
|
48915
|
+
const sdk = await loadSdk4();
|
|
48916
|
+
return sdk.ModelRuntime.create();
|
|
48917
|
+
}
|
|
48918
|
+
function resolveRequiredModel(modelRuntime, model) {
|
|
48880
48919
|
const slash = model.indexOf("/");
|
|
48881
|
-
const resolved = slash === -1 ?
|
|
48920
|
+
const resolved = slash === -1 ? modelRuntime.getModels().find((entry) => entry.id === model) : modelRuntime.getModel(model.slice(0, slash), model.slice(slash + 1));
|
|
48882
48921
|
if (!resolved) {
|
|
48883
48922
|
throw new Error(`Pi model not found: ${model}`);
|
|
48884
48923
|
}
|
|
@@ -48912,10 +48951,8 @@ var init_pi_sdk_agent_service = __esm(() => {
|
|
|
48912
48951
|
}
|
|
48913
48952
|
async isInstalled() {
|
|
48914
48953
|
try {
|
|
48915
|
-
const
|
|
48916
|
-
|
|
48917
|
-
const modelRegistry = ModelRegistry.create(authStorage);
|
|
48918
|
-
return modelRegistry.getAvailable().length > 0;
|
|
48954
|
+
const modelRuntime = await createModelRuntime();
|
|
48955
|
+
return (await modelRuntime.getAvailable()).length > 0;
|
|
48919
48956
|
} catch (err) {
|
|
48920
48957
|
console.warn(`[pi-sdk] unavailable: ${formatPiSdkLoadError(err)}`);
|
|
48921
48958
|
return false;
|
|
@@ -48938,26 +48975,16 @@ var init_pi_sdk_agent_service = __esm(() => {
|
|
|
48938
48975
|
}
|
|
48939
48976
|
async listModels() {
|
|
48940
48977
|
try {
|
|
48941
|
-
const
|
|
48942
|
-
|
|
48943
|
-
const modelRegistry = ModelRegistry.create(authStorage);
|
|
48944
|
-
return modelRegistry.getAvailable().map((entry) => `${entry.provider}/${entry.id}`);
|
|
48978
|
+
const modelRuntime = await createModelRuntime();
|
|
48979
|
+
return (await modelRuntime.getAvailable()).map((entry) => `${entry.provider}/${entry.id}`);
|
|
48945
48980
|
} catch (err) {
|
|
48946
48981
|
console.warn(`[pi-sdk] listModels failed:`, err instanceof Error ? err.message : err);
|
|
48947
48982
|
return [];
|
|
48948
48983
|
}
|
|
48949
48984
|
}
|
|
48950
48985
|
async openResumedSession(args2) {
|
|
48951
|
-
const {
|
|
48952
|
-
|
|
48953
|
-
createAgentSession,
|
|
48954
|
-
DefaultResourceLoader,
|
|
48955
|
-
getAgentDir,
|
|
48956
|
-
ModelRegistry,
|
|
48957
|
-
SessionManager
|
|
48958
|
-
} = await loadSdk4();
|
|
48959
|
-
const authStorage = AuthStorage.create();
|
|
48960
|
-
const modelRegistry = ModelRegistry.create(authStorage);
|
|
48986
|
+
const { createAgentSession, DefaultResourceLoader, getAgentDir, SessionManager } = await loadSdk4();
|
|
48987
|
+
const modelRuntime = await createModelRuntime();
|
|
48961
48988
|
const sessions = await SessionManager.list(args2.workingDir, getPiSessionDir(args2.workingDir));
|
|
48962
48989
|
const match5 = sessions.find((s) => s.id === args2.harnessSessionId);
|
|
48963
48990
|
if (!match5) {
|
|
@@ -48972,8 +48999,7 @@ var init_pi_sdk_agent_service = __esm(() => {
|
|
|
48972
48999
|
const { session: session2 } = await withTimeout(createAgentSession({
|
|
48973
49000
|
cwd: args2.workingDir,
|
|
48974
49001
|
sessionManager: SessionManager.open(match5.path, getPiSessionDir(args2.workingDir)),
|
|
48975
|
-
|
|
48976
|
-
modelRegistry,
|
|
49002
|
+
modelRuntime,
|
|
48977
49003
|
resourceLoader
|
|
48978
49004
|
}), SESSION_CREATE_TIMEOUT_MS2, "createAgentSession");
|
|
48979
49005
|
return session2;
|
|
@@ -49027,19 +49053,11 @@ var init_pi_sdk_agent_service = __esm(() => {
|
|
|
49027
49053
|
return keeper;
|
|
49028
49054
|
}
|
|
49029
49055
|
async createSession(args2) {
|
|
49030
|
-
const {
|
|
49031
|
-
|
|
49032
|
-
createAgentSession,
|
|
49033
|
-
DefaultResourceLoader,
|
|
49034
|
-
getAgentDir,
|
|
49035
|
-
ModelRegistry,
|
|
49036
|
-
SessionManager
|
|
49037
|
-
} = await loadSdk4();
|
|
49038
|
-
const authStorage = AuthStorage.create();
|
|
49039
|
-
const modelRegistry = ModelRegistry.create(authStorage);
|
|
49056
|
+
const { createAgentSession, DefaultResourceLoader, getAgentDir, SessionManager } = await loadSdk4();
|
|
49057
|
+
const modelRuntime = await createModelRuntime();
|
|
49040
49058
|
const model = requireHarnessModel(args2.model, "pi-sdk spawn");
|
|
49041
49059
|
const parsed = parsePiSpawnModel(model);
|
|
49042
|
-
const resolvedModel = resolveRequiredModel(
|
|
49060
|
+
const resolvedModel = resolveRequiredModel(modelRuntime, parsed.model ?? model);
|
|
49043
49061
|
const thinkingLevel = resolvePiThinkingLevel(parsed?.thinking);
|
|
49044
49062
|
const agentDir = getAgentDir();
|
|
49045
49063
|
const resourceLoader = new DefaultResourceLoader({
|
|
@@ -49053,8 +49071,7 @@ var init_pi_sdk_agent_service = __esm(() => {
|
|
|
49053
49071
|
model: resolvedModel,
|
|
49054
49072
|
...thinkingLevel ? { thinkingLevel } : {},
|
|
49055
49073
|
sessionManager: SessionManager.create(getPiSessionDir(args2.workingDir)),
|
|
49056
|
-
|
|
49057
|
-
modelRegistry,
|
|
49074
|
+
modelRuntime,
|
|
49058
49075
|
resourceLoader
|
|
49059
49076
|
}), SESSION_CREATE_TIMEOUT_MS2, "createAgentSession");
|
|
49060
49077
|
return session2;
|
|
@@ -49201,9 +49218,7 @@ ${deferredResume}` : deferredResume;
|
|
|
49201
49218
|
exitSignal = "SIGTERM";
|
|
49202
49219
|
break;
|
|
49203
49220
|
}
|
|
49204
|
-
|
|
49205
|
-
adapter.completeTurn({ status: "completed", source: "pi-sdk.prompt.resolved" });
|
|
49206
|
-
}
|
|
49221
|
+
adapter.settleResolvedPrompt();
|
|
49207
49222
|
adapter.finish();
|
|
49208
49223
|
nextPrompt = null;
|
|
49209
49224
|
} catch (turnErr) {
|
|
@@ -122973,6 +122988,7 @@ class PiSdkSession {
|
|
|
122973
122988
|
listeners = new Set;
|
|
122974
122989
|
closed = false;
|
|
122975
122990
|
unsubscribe;
|
|
122991
|
+
lastAssistantError;
|
|
122976
122992
|
constructor(options) {
|
|
122977
122993
|
this.session = options.session;
|
|
122978
122994
|
this.opencodeSessionId = options.opencodeSessionId;
|
|
@@ -122988,14 +123004,21 @@ class PiSdkSession {
|
|
|
122988
123004
|
const text = input.parts.map((p) => p.text).join(`
|
|
122989
123005
|
`);
|
|
122990
123006
|
const messageId = randomUUID14();
|
|
123007
|
+
this.lastAssistantError = undefined;
|
|
122991
123008
|
const onSessionEvent = (event) => {
|
|
122992
123009
|
if (this.closed)
|
|
122993
123010
|
return;
|
|
123011
|
+
if (event.type === "message_end" && event.message.role === "assistant") {
|
|
123012
|
+
this.lastAssistantError = assistantErrorOf(event);
|
|
123013
|
+
}
|
|
122994
123014
|
this.emitFromPiEvent(event, messageId);
|
|
122995
123015
|
};
|
|
122996
123016
|
this.unsubscribe?.();
|
|
122997
123017
|
this.unsubscribe = this.session.subscribe(onSessionEvent);
|
|
122998
123018
|
await withTimeout(this.session.prompt(text), PROMPT_TIMEOUT_MS3, "session.prompt");
|
|
123019
|
+
if (this.lastAssistantError !== undefined) {
|
|
123020
|
+
throw new Error(this.lastAssistantError);
|
|
123021
|
+
}
|
|
122999
123022
|
this.emit({ type: "session.idle", payload: {}, timestamp: Date.now() });
|
|
123000
123023
|
}
|
|
123001
123024
|
onEvent(listener) {
|
|
@@ -123060,9 +123083,9 @@ async function loadSdk7() {
|
|
|
123060
123083
|
throw err;
|
|
123061
123084
|
}
|
|
123062
123085
|
}
|
|
123063
|
-
function resolveRequiredModel2(
|
|
123086
|
+
function resolveRequiredModel2(modelRuntime, model) {
|
|
123064
123087
|
const slash = model.indexOf("/");
|
|
123065
|
-
const resolved = slash === -1 ?
|
|
123088
|
+
const resolved = slash === -1 ? modelRuntime.getModels().find((entry) => entry.id === model) : modelRuntime.getModel(model.slice(0, slash), model.slice(slash + 1));
|
|
123066
123089
|
if (!resolved) {
|
|
123067
123090
|
throw new Error(`Pi model not found: ${model}`);
|
|
123068
123091
|
}
|
|
@@ -123075,15 +123098,13 @@ class PiSdkHarness {
|
|
|
123075
123098
|
cwd;
|
|
123076
123099
|
closed = false;
|
|
123077
123100
|
sessions = new Map;
|
|
123078
|
-
|
|
123079
|
-
|
|
123080
|
-
constructor(cwd, modelRegistry, authStorage) {
|
|
123101
|
+
modelRuntime;
|
|
123102
|
+
constructor(cwd, modelRuntime) {
|
|
123081
123103
|
this.cwd = cwd;
|
|
123082
|
-
this.
|
|
123083
|
-
this.authStorage = authStorage;
|
|
123104
|
+
this.modelRuntime = modelRuntime;
|
|
123084
123105
|
}
|
|
123085
123106
|
async models() {
|
|
123086
|
-
return this.
|
|
123107
|
+
return (await this.modelRuntime.getAvailable()).map((entry) => ({
|
|
123087
123108
|
id: `${entry.provider}/${entry.id}`,
|
|
123088
123109
|
name: entry.id,
|
|
123089
123110
|
provider: entry.provider
|
|
@@ -123094,7 +123115,7 @@ class PiSdkHarness {
|
|
|
123094
123115
|
}
|
|
123095
123116
|
async listProviders() {
|
|
123096
123117
|
const byProvider = new Map;
|
|
123097
|
-
for (const entry of this.
|
|
123118
|
+
for (const entry of await this.modelRuntime.getAvailable()) {
|
|
123098
123119
|
const models = byProvider.get(entry.provider) ?? [];
|
|
123099
123120
|
models.push({ modelID: entry.id, name: entry.id });
|
|
123100
123121
|
byProvider.set(entry.provider, models);
|
|
@@ -123170,7 +123191,7 @@ class PiSdkHarness {
|
|
|
123170
123191
|
const { createAgentSession, DefaultResourceLoader, getAgentDir } = await loadSdk7();
|
|
123171
123192
|
const parsed = args2.model ? parsePiSpawnModel(args2.model) : undefined;
|
|
123172
123193
|
const modelSlug = parsed?.model ?? args2.model;
|
|
123173
|
-
const resolvedModel = args2.requireModel ? resolveRequiredModel2(this.
|
|
123194
|
+
const resolvedModel = args2.requireModel ? resolveRequiredModel2(this.modelRuntime, requireHarnessModel(modelSlug, "pi-sdk openAgentSession")) : modelSlug ? resolveRequiredModel2(this.modelRuntime, modelSlug) : undefined;
|
|
123174
123195
|
const thinkingLevel = resolvePiThinkingLevel(parsed?.thinking);
|
|
123175
123196
|
if (args2.requireModel && !resolvedModel) {
|
|
123176
123197
|
throw new Error("No Pi model available — configure provider credentials in ~/.pi/agent/auth.json");
|
|
@@ -123184,8 +123205,7 @@ class PiSdkHarness {
|
|
|
123184
123205
|
const { session: session2 } = await withTimeout(createAgentSession({
|
|
123185
123206
|
cwd: this.cwd,
|
|
123186
123207
|
sessionManager: args2.sessionManager,
|
|
123187
|
-
|
|
123188
|
-
modelRegistry: this.modelRegistry,
|
|
123208
|
+
modelRuntime: this.modelRuntime,
|
|
123189
123209
|
resourceLoader,
|
|
123190
123210
|
...resolvedModel ? { model: resolvedModel } : {},
|
|
123191
123211
|
...thinkingLevel ? { thinkingLevel } : {}
|
|
@@ -123195,13 +123215,12 @@ class PiSdkHarness {
|
|
|
123195
123215
|
}
|
|
123196
123216
|
var SESSION_CREATE_TIMEOUT_MS3 = 60000, _sdkCache7, _sdkLoadError7, startPiSdkHarness = async (config4) => {
|
|
123197
123217
|
try {
|
|
123198
|
-
const
|
|
123199
|
-
const
|
|
123200
|
-
|
|
123201
|
-
if (modelRegistry.getAvailable().length === 0) {
|
|
123218
|
+
const sdk = await loadSdk7();
|
|
123219
|
+
const modelRuntime = await sdk.ModelRuntime.create();
|
|
123220
|
+
if ((await modelRuntime.getAvailable()).length === 0) {
|
|
123202
123221
|
throw new Error("No Pi models available");
|
|
123203
123222
|
}
|
|
123204
|
-
return new PiSdkHarness(config4.workingDir,
|
|
123223
|
+
return new PiSdkHarness(config4.workingDir, modelRuntime);
|
|
123205
123224
|
} catch (err) {
|
|
123206
123225
|
throw new Error(`pi-sdk unavailable: ${formatPiSdkLoadError(err)}`);
|
|
123207
123226
|
}
|
|
@@ -137899,4 +137918,4 @@ program2.hook("preAction", async (_thisCommand, actionCommand) => {
|
|
|
137899
137918
|
});
|
|
137900
137919
|
program2.parse();
|
|
137901
137920
|
|
|
137902
|
-
//# debugId=
|
|
137921
|
+
//# debugId=FEC6884486B357A364756E2164756E21
|