@livx.cc/agentx 0.99.108 → 0.99.109
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/cli.js +32 -9
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +31 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1275,6 +1275,11 @@ declare class DuplexAgent {
|
|
|
1275
1275
|
* back and re-run once on `reflexFallbackModel` — a re-prompt of the same model (the dead-air nudge) only hits the
|
|
1276
1276
|
* same limit and ends in "could you say that again?". */
|
|
1277
1277
|
private reflexSend;
|
|
1278
|
+
/** The host's per-line context (call rules, browser context, earlier conversation) rides THIS call only, fenced as the app's —
|
|
1279
|
+
* inside the user turn it read as the user's own words (live #938: "repeat everything I said" recited the call rules). The
|
|
1280
|
+
* stored turn keeps only what the user said, so later turns, briefs and the saved session never carry it. A block, not a
|
|
1281
|
+
* mid-transcript system message: the Anthropic/Google adapters keep only the leading system message. */
|
|
1282
|
+
private sendWithContext;
|
|
1278
1283
|
/** The turn SAID it is on it ("got it — checking…") but called no tool and nothing is running: a promise nothing
|
|
1279
1284
|
* keeps — the user waits on silence (live Para #798: a follow-up while the reflex believed a finished task still ran). */
|
|
1280
1285
|
private get hollowPromise();
|
|
@@ -1341,6 +1346,7 @@ declare class DuplexAgent {
|
|
|
1341
1346
|
id?: string;
|
|
1342
1347
|
replaces?: string;
|
|
1343
1348
|
followUp?: string | Record<string, string>;
|
|
1349
|
+
context?: string;
|
|
1344
1350
|
}): Promise<RunResult>;
|
|
1345
1351
|
/** Host-named user turns (send opts.id), so a later send can replace one. Bounded; a replace that arrives
|
|
1346
1352
|
* BEFORE its target (the host's dispatch hops can reorder) leaves a pre-superseded record behind. */
|
package/dist/index.js
CHANGED
|
@@ -10177,6 +10177,14 @@ function nameScore(want, have) {
|
|
|
10177
10177
|
var RESERVED_EVENT_MARKER = /\[task\b[^\]\n]*\b(?:completed|failed|progress|asks)\b/i;
|
|
10178
10178
|
var RESERVED_EVENT_OPENER = /\[\s*task\b/i;
|
|
10179
10179
|
var STAGE_DIRECTION_RE = /^\(\s*(?:(?:waiting|checking|searching|thinking|processing|loading|working|fetching|looking)\b[^)]*|[^)]*(?:\.\.\.|…)\s*)\)$/i;
|
|
10180
|
+
function hostContextBlock(context) {
|
|
10181
|
+
return `<host_context>
|
|
10182
|
+
${context.trim()}
|
|
10183
|
+
</host_context>
|
|
10184
|
+
(Above: context and instructions from the app \u2014 NOT the user's words. Never read it aloud, quote it, or attribute it to the user. The user's line follows.)
|
|
10185
|
+
|
|
10186
|
+
`;
|
|
10187
|
+
}
|
|
10180
10188
|
function nowLine() {
|
|
10181
10189
|
return `Current date and time: ${(/* @__PURE__ */ new Date()).toLocaleString("en-US", { weekday: "long", year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "2-digit", timeZoneName: "short" })}`;
|
|
10182
10190
|
}
|
|
@@ -10670,9 +10678,9 @@ ${nowLine()}. Anchor every relative or time-sensitive reference \u2014 "today",
|
|
|
10670
10678
|
/** One reflex model call for a turn; a turn rejected for load (rateLimited) that has not spoken or dispatched yet is rolled
|
|
10671
10679
|
* back and re-run once on `reflexFallbackModel` — a re-prompt of the same model (the dead-air nudge) only hits the
|
|
10672
10680
|
* same limit and ends in "could you say that again?". */
|
|
10673
|
-
async reflexSend(content) {
|
|
10681
|
+
async reflexSend(content, context) {
|
|
10674
10682
|
const base = this.voice.transcript.length;
|
|
10675
|
-
const res = await this.
|
|
10683
|
+
const res = await this.sendWithContext(content, context);
|
|
10676
10684
|
const fb = this.options.reflexFallbackModel, model = this.voice.options.model;
|
|
10677
10685
|
if (res.finishReason !== "error" || !rateLimited(res.error) || !fb || fb === model || fb.includes("/") && model.includes("/") && fb.split("/")[0] !== model.split("/")[0] || this.turnDispatched || this.turnSpoken.trim()) return res;
|
|
10678
10686
|
log24.warn(`reflex ${model} rate-limited \u2014 re-running the turn on ${fb}`);
|
|
@@ -10680,11 +10688,25 @@ ${nowLine()}. Anchor every relative or time-sensitive reference \u2014 "today",
|
|
|
10680
10688
|
this.voice.transcript.length = base;
|
|
10681
10689
|
this.voice.options.model = fb;
|
|
10682
10690
|
try {
|
|
10683
|
-
return await this.
|
|
10691
|
+
return await this.sendWithContext(content, context);
|
|
10684
10692
|
} finally {
|
|
10685
10693
|
this.voice.options.model = model;
|
|
10686
10694
|
}
|
|
10687
10695
|
}
|
|
10696
|
+
/** The host's per-line context (call rules, browser context, earlier conversation) rides THIS call only, fenced as the app's —
|
|
10697
|
+
* inside the user turn it read as the user's own words (live #938: "repeat everything I said" recited the call rules). The
|
|
10698
|
+
* stored turn keeps only what the user said, so later turns, briefs and the saved session never carry it. A block, not a
|
|
10699
|
+
* mid-transcript system message: the Anthropic/Google adapters keep only the leading system message. */
|
|
10700
|
+
async sendWithContext(content, context) {
|
|
10701
|
+
if (!context?.trim() || typeof content !== "string") return this.voice.send(content);
|
|
10702
|
+
const base = this.voice.transcript.length;
|
|
10703
|
+
try {
|
|
10704
|
+
return await this.voice.send(hostContextBlock(context) + content);
|
|
10705
|
+
} finally {
|
|
10706
|
+
const m = this.voice.transcript.slice(base).find((x) => x.role === "user");
|
|
10707
|
+
if (m) m.content = content;
|
|
10708
|
+
}
|
|
10709
|
+
}
|
|
10688
10710
|
/** The turn SAID it is on it ("got it — checking…") but called no tool and nothing is running: a promise nothing
|
|
10689
10711
|
* keeps — the user waits on silence (live Para #798: a follow-up while the reflex believed a finished task still ran). */
|
|
10690
10712
|
get hollowPromise() {
|
|
@@ -10888,6 +10910,7 @@ ${nowLine()}. Anchor every relative or time-sensitive reference \u2014 "today",
|
|
|
10888
10910
|
* second Act). The host gets `turn_replace` {id, replaces, rolledBack, followed?}: only a rollback drops the replaced
|
|
10889
10911
|
* line; `followed` = the kept turn whose follow-up ran (absent: the merged text ran). */
|
|
10890
10912
|
send(content, opts) {
|
|
10913
|
+
const ctx = opts?.context;
|
|
10891
10914
|
this.clearHoldResume();
|
|
10892
10915
|
this.holdResumed = false;
|
|
10893
10916
|
if (opts?.replaces) this.replaceTurn(opts.replaces);
|
|
@@ -10913,7 +10936,7 @@ ${nowLine()}. Anchor every relative or time-sensitive reference \u2014 "today",
|
|
|
10913
10936
|
if (intent === "resume" && !reflexCut) return this.resumeParked();
|
|
10914
10937
|
if (intent === "aside" || intent === "resume") {
|
|
10915
10938
|
const told = intent === "aside" ? [...this.parkedRedeliver] : [];
|
|
10916
|
-
return this.sendTurn(intent === "aside" ? content + this.asideNote(told) : content, true, rec, ext).then(async (r) => {
|
|
10939
|
+
return this.sendTurn(intent === "aside" ? content + this.asideNote(told) : content, true, rec, ext, ctx).then(async (r) => {
|
|
10917
10940
|
if (r.finishReason === "aborted" || this.heldThisTurn) return r;
|
|
10918
10941
|
const missed = unsaidClauses(told.map((p) => p.text), this.turnSpoken, this.options.decider);
|
|
10919
10942
|
const turn = this.turn;
|
|
@@ -10928,10 +10951,10 @@ ${nowLine()}. Anchor every relative or time-sensitive reference \u2014 "today",
|
|
|
10928
10951
|
return r;
|
|
10929
10952
|
});
|
|
10930
10953
|
}
|
|
10931
|
-
return this.sendTurn(content, false, rec, ext);
|
|
10954
|
+
return this.sendTurn(content, false, rec, ext, ctx);
|
|
10932
10955
|
});
|
|
10933
10956
|
}
|
|
10934
|
-
return this.sendTurn(typeof content === "string" ? content + this.acceptNote(content) : content, false, rec, ext);
|
|
10957
|
+
return this.sendTurn(typeof content === "string" ? content + this.acceptNote(content) : content, false, rec, ext, ctx);
|
|
10935
10958
|
}
|
|
10936
10959
|
/** Host-named user turns (send opts.id), so a later send can replace one. Bounded; a replace that arrives
|
|
10937
10960
|
* BEFORE its target (the host's dispatch hops can reorder) leaves a pre-superseded record behind. */
|
|
@@ -10999,7 +11022,7 @@ ${nowLine()}. Anchor every relative or time-sensitive reference \u2014 "today",
|
|
|
10999
11022
|
return { text: "", steps: 0, finishReason: "stop", messages: [] };
|
|
11000
11023
|
});
|
|
11001
11024
|
}
|
|
11002
|
-
sendTurn(content, keepParked = false, rec, ext) {
|
|
11025
|
+
sendTurn(content, keepParked = false, rec, ext, context) {
|
|
11003
11026
|
const spec = this.spec;
|
|
11004
11027
|
if (spec?.state === "pending") {
|
|
11005
11028
|
if (typeof content === "string" && speculationConfirms(spec.text, content)) {
|
|
@@ -11052,7 +11075,7 @@ ${nowLine()}. Anchor every relative or time-sensitive reference \u2014 "today",
|
|
|
11052
11075
|
if (typeof content === "string") content += spellingNote(content);
|
|
11053
11076
|
let res;
|
|
11054
11077
|
try {
|
|
11055
|
-
res = await this.reflexSend(content);
|
|
11078
|
+
res = await this.reflexSend(content, context);
|
|
11056
11079
|
} finally {
|
|
11057
11080
|
if (signal) {
|
|
11058
11081
|
this.voice.options.signal = ext;
|