@inhuman.tools/harness 0.2.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/compact.prompt +12 -2
- package/dist/builtin-tools/catalog-entry.d.ts.map +1 -1
- package/dist/builtin-tools/catalog-entry.js +1 -0
- package/dist/builtin-tools/catalog-entry.js.map +1 -1
- package/dist/builtin-tools/index.d.ts +1 -2
- package/dist/builtin-tools/index.d.ts.map +1 -1
- package/dist/builtin-tools/index.js +1 -2
- package/dist/builtin-tools/index.js.map +1 -1
- package/dist/builtin-tools/metadata/context-need.d.ts +1 -0
- package/dist/builtin-tools/metadata/context-need.d.ts.map +1 -1
- package/dist/builtin-tools/metadata/context-need.js +13 -6
- package/dist/builtin-tools/metadata/context-need.js.map +1 -1
- package/dist/builtin-tools/metadata/context-recall.d.ts +1 -5
- package/dist/builtin-tools/metadata/context-recall.d.ts.map +1 -1
- package/dist/builtin-tools/metadata/context-recall.js +10 -7
- package/dist/builtin-tools/metadata/context-recall.js.map +1 -1
- package/dist/builtin-tools/metadata/update-metadata.d.ts +1 -0
- package/dist/builtin-tools/metadata/update-metadata.d.ts.map +1 -1
- package/dist/builtin-tools/metadata/update-metadata.js +12 -12
- package/dist/builtin-tools/metadata/update-metadata.js.map +1 -1
- package/dist/builtin-tools/named-agents/agent-catalog.d.ts.map +1 -1
- package/dist/builtin-tools/named-agents/agent-catalog.js +9 -9
- package/dist/builtin-tools/named-agents/agent-catalog.js.map +1 -1
- package/dist/builtin-tools/named-agents/agent-stdlib.d.ts.map +1 -1
- package/dist/builtin-tools/named-agents/agent-stdlib.js +2 -0
- package/dist/builtin-tools/named-agents/agent-stdlib.js.map +1 -1
- package/dist/builtin-tools/schemas/tool-result.d.ts +2 -0
- package/dist/builtin-tools/schemas/tool-result.d.ts.map +1 -1
- package/dist/builtin-tools/schemas/tool-result.js +2 -0
- package/dist/builtin-tools/schemas/tool-result.js.map +1 -1
- package/dist/builtin-tools/shell/job-stop.d.ts +1 -0
- package/dist/builtin-tools/shell/job-stop.d.ts.map +1 -1
- package/dist/builtin-tools/shell/shell-tool.d.ts +1 -0
- package/dist/builtin-tools/shell/shell-tool.d.ts.map +1 -1
- package/dist/builtin-tools/toolkit/dist-tools.d.ts +1 -0
- package/dist/builtin-tools/toolkit/dist-tools.d.ts.map +1 -1
- package/dist/builtin-tools/toolkit/dist-tools.js +1 -0
- package/dist/builtin-tools/toolkit/dist-tools.js.map +1 -1
- package/dist/connections/adopt.d.ts +2 -0
- package/dist/connections/adopt.d.ts.map +1 -1
- package/dist/connections/adopt.js.map +1 -1
- package/dist/connections/index.d.ts +1 -1
- package/dist/connections/index.d.ts.map +1 -1
- package/dist/extensions/behavior.d.ts.map +1 -1
- package/dist/extensions/behavior.js +17 -4
- package/dist/extensions/behavior.js.map +1 -1
- package/dist/extensions/consent.d.ts +0 -68
- package/dist/extensions/consent.d.ts.map +1 -1
- package/dist/extensions/consent.js +0 -69
- package/dist/extensions/consent.js.map +1 -1
- package/dist/extensions/contributions.d.ts.map +1 -1
- package/dist/extensions/contributions.js +1 -0
- package/dist/extensions/contributions.js.map +1 -1
- package/dist/extensions/dispatch.d.ts +1 -9
- package/dist/extensions/dispatch.d.ts.map +1 -1
- package/dist/extensions/dispatch.js +5 -7
- package/dist/extensions/dispatch.js.map +1 -1
- package/dist/extensions/eval.d.ts.map +1 -1
- package/dist/extensions/eval.js +2 -0
- package/dist/extensions/eval.js.map +1 -1
- package/dist/extensions/hook-deadline.d.ts +28 -0
- package/dist/extensions/hook-deadline.d.ts.map +1 -0
- package/dist/extensions/hook-deadline.js +72 -0
- package/dist/extensions/hook-deadline.js.map +1 -0
- package/dist/extensions/host.d.ts +2 -0
- package/dist/extensions/host.d.ts.map +1 -1
- package/dist/extensions/host.js +15 -0
- package/dist/extensions/host.js.map +1 -1
- package/dist/extensions/inventory.d.ts +9 -0
- package/dist/extensions/inventory.d.ts.map +1 -1
- package/dist/extensions/inventory.js +15 -1
- package/dist/extensions/inventory.js.map +1 -1
- package/dist/extensions/notes.d.ts +1 -0
- package/dist/extensions/notes.d.ts.map +1 -1
- package/dist/extensions/notes.js +1 -0
- package/dist/extensions/notes.js.map +1 -1
- package/dist/extensions/schemas/bot-definition.d.ts +1 -1
- package/dist/extensions/schemas/bot-definition.d.ts.map +1 -1
- package/dist/extensions/schemas/plugin-manifest.d.ts +4 -4
- package/dist/extensions/schemas/plugin-manifest.d.ts.map +1 -1
- package/dist/extensions/schemas/plugin-manifest.js +13 -1
- package/dist/extensions/schemas/plugin-manifest.js.map +1 -1
- package/dist/extensions/state.d.ts.map +1 -1
- package/dist/extensions/state.js +5 -0
- package/dist/extensions/state.js.map +1 -1
- package/dist/extensions/value.d.ts +4 -0
- package/dist/extensions/value.d.ts.map +1 -1
- package/dist/extensions/value.js.map +1 -1
- package/dist/protocol/schemas/health.d.ts +1 -3
- package/dist/protocol/schemas/health.d.ts.map +1 -1
- package/dist/protocol/schemas/health.js.map +1 -1
- package/dist/protocol/schemas/identity.d.ts +0 -4
- package/dist/protocol/schemas/identity.d.ts.map +1 -1
- package/dist/protocol/schemas/identity.js.map +1 -1
- package/dist/protocol/schemas/loss.d.ts +0 -2
- package/dist/protocol/schemas/loss.d.ts.map +1 -1
- package/dist/protocol/schemas/loss.js.map +1 -1
- package/dist/protocol/schemas/message.d.ts +0 -1
- package/dist/protocol/schemas/message.d.ts.map +1 -1
- package/dist/protocol/supervision/loss.d.ts +0 -1
- package/dist/protocol/supervision/loss.d.ts.map +1 -1
- package/dist/protocol/supervision/loss.js +0 -3
- package/dist/protocol/supervision/loss.js.map +1 -1
- package/dist/providers/auth/index.d.ts +2 -2
- package/dist/providers/auth/index.d.ts.map +1 -1
- package/dist/providers/auth/index.js +2 -2
- package/dist/providers/auth/index.js.map +1 -1
- package/dist/providers/auth/loopback.d.ts +0 -2
- package/dist/providers/auth/loopback.d.ts.map +1 -1
- package/dist/providers/auth/loopback.js.map +1 -1
- package/dist/providers/chatgpt/connection.d.ts +1 -0
- package/dist/providers/chatgpt/connection.d.ts.map +1 -1
- package/dist/providers/chatgpt/connection.js +1 -1
- package/dist/providers/chatgpt/connection.js.map +1 -1
- package/dist/providers/grok/connection.d.ts +2 -1
- package/dist/providers/grok/connection.d.ts.map +1 -1
- package/dist/providers/grok/connection.js +1 -1
- package/dist/providers/grok/connection.js.map +1 -1
- package/dist/providers/mcp/fetch.d.ts.map +1 -1
- package/dist/providers/mcp/fetch.js +2 -6
- package/dist/providers/mcp/fetch.js.map +1 -1
- package/dist/providers/nous/driver.d.ts +1 -0
- package/dist/providers/nous/driver.d.ts.map +1 -1
- package/dist/providers/openai-compat/actor.d.ts.map +1 -1
- package/dist/providers/openai-compat/actor.js +167 -39
- package/dist/providers/openai-compat/actor.js.map +1 -1
- package/dist/providers/openai-compat/adopt.d.ts +2 -0
- package/dist/providers/openai-compat/adopt.d.ts.map +1 -1
- package/dist/providers/openai-compat/adopt.js.map +1 -1
- package/dist/providers/openai-compat/connection.d.ts +9 -2
- package/dist/providers/openai-compat/connection.d.ts.map +1 -1
- package/dist/providers/openai-compat/connection.js +35 -27
- package/dist/providers/openai-compat/connection.js.map +1 -1
- package/dist/providers/openai-compat/fetch-types.d.ts.map +1 -1
- package/dist/providers/openai-compat/fetch-types.js +2 -6
- package/dist/providers/openai-compat/fetch-types.js.map +1 -1
- package/dist/providers/openai-compat/index.d.ts +2 -2
- package/dist/providers/openai-compat/index.d.ts.map +1 -1
- package/dist/providers/openai-compat/index.js +2 -2
- package/dist/providers/openai-compat/index.js.map +1 -1
- package/dist/providers/openai-compat/model-capabilities.d.ts +7 -0
- package/dist/providers/openai-compat/model-capabilities.d.ts.map +1 -0
- package/dist/providers/openai-compat/model-capabilities.js +24 -0
- package/dist/providers/openai-compat/model-capabilities.js.map +1 -0
- package/dist/providers/openai-compat/schema.d.ts +1 -1
- package/dist/providers/web/registrations/ids.d.ts +0 -2
- package/dist/providers/web/registrations/ids.d.ts.map +1 -1
- package/dist/providers/web/registrations/ids.js +0 -1
- package/dist/providers/web/registrations/ids.js.map +1 -1
- package/dist/runtime/bot-mcp.d.ts.map +1 -1
- package/dist/runtime/bot-mcp.js +1 -4
- package/dist/runtime/bot-mcp.js.map +1 -1
- package/dist/runtime/intent-recovery.d.ts +3 -20
- package/dist/runtime/intent-recovery.d.ts.map +1 -1
- package/dist/runtime/intent-recovery.js +1 -122
- package/dist/runtime/intent-recovery.js.map +1 -1
- package/dist/server/ask-answer.d.ts.map +1 -1
- package/dist/server/ask-answer.js +3 -3
- package/dist/server/ask-answer.js.map +1 -1
- package/dist/server/daemon/kernel/KernelDaemon.d.ts +4 -0
- package/dist/server/daemon/kernel/KernelDaemon.d.ts.map +1 -1
- package/dist/server/daemon/kernel/KernelDaemon.js +100 -40
- package/dist/server/daemon/kernel/KernelDaemon.js.map +1 -1
- package/dist/server/daemon/kernel/completion-catalog.d.ts +8 -0
- package/dist/server/daemon/kernel/completion-catalog.d.ts.map +1 -1
- package/dist/server/daemon/kernel/completion-catalog.js +16 -0
- package/dist/server/daemon/kernel/completion-catalog.js.map +1 -1
- package/dist/server/daemon/kernel/fs-reflection/reflectKernel.d.ts.map +1 -1
- package/dist/server/daemon/kernel/fs-reflection/reflectKernel.js +47 -1
- package/dist/server/daemon/kernel/fs-reflection/reflectKernel.js.map +1 -1
- package/dist/server/daemon/kernel/glance-ask-line.d.ts +1 -6
- package/dist/server/daemon/kernel/glance-ask-line.d.ts.map +1 -1
- package/dist/server/daemon/kernel/glance-ask-line.js +1 -35
- package/dist/server/daemon/kernel/glance-ask-line.js.map +1 -1
- package/dist/server/daemon/kernel/settings-files.d.ts +1 -1
- package/dist/server/daemon/kernel/settings-files.d.ts.map +1 -1
- package/dist/server/daemon/kernel/settings-files.js +3 -6
- package/dist/server/daemon/kernel/settings-files.js.map +1 -1
- package/dist/server/daemon/project/ProjectDaemon.d.ts +4 -0
- package/dist/server/daemon/project/ProjectDaemon.d.ts.map +1 -1
- package/dist/server/daemon/project/ProjectDaemon.js +11 -0
- package/dist/server/daemon/project/ProjectDaemon.js.map +1 -1
- package/dist/server/daemon/session/SessionDaemon.d.ts +5 -3
- package/dist/server/daemon/session/SessionDaemon.d.ts.map +1 -1
- package/dist/server/daemon/session/SessionDaemon.js +54 -37
- package/dist/server/daemon/session/SessionDaemon.js.map +1 -1
- package/dist/server/daemon/session/SessionOrchestrator.d.ts +1 -0
- package/dist/server/daemon/session/SessionOrchestrator.d.ts.map +1 -1
- package/dist/server/daemon/session/SessionOrchestrator.js +1371 -1146
- package/dist/server/daemon/session/SessionOrchestrator.js.map +1 -1
- package/dist/server/daemon/session/agent-runtime.d.ts +2 -0
- package/dist/server/daemon/session/agent-runtime.d.ts.map +1 -1
- package/dist/server/daemon/session/agent-runtime.js +55 -6
- package/dist/server/daemon/session/agent-runtime.js.map +1 -1
- package/dist/server/daemon/session/ambient-compact.d.ts +3 -21
- package/dist/server/daemon/session/ambient-compact.d.ts.map +1 -1
- package/dist/server/daemon/session/ambient-compact.js +7 -116
- package/dist/server/daemon/session/ambient-compact.js.map +1 -1
- package/dist/server/daemon/session/behavior-host.d.ts +9 -3
- package/dist/server/daemon/session/behavior-host.d.ts.map +1 -1
- package/dist/server/daemon/session/behavior-host.js +222 -47
- package/dist/server/daemon/session/behavior-host.js.map +1 -1
- package/dist/server/daemon/session/compact.d.ts +0 -1
- package/dist/server/daemon/session/compact.d.ts.map +1 -1
- package/dist/server/daemon/session/compact.js +7 -1
- package/dist/server/daemon/session/compact.js.map +1 -1
- package/dist/server/daemon/session/plugin-abi.d.ts.map +1 -1
- package/dist/server/daemon/session/plugin-abi.js +7 -11
- package/dist/server/daemon/session/plugin-abi.js.map +1 -1
- package/dist/server/daemon/session/prompt-message-of.d.ts +1 -8
- package/dist/server/daemon/session/prompt-message-of.d.ts.map +1 -1
- package/dist/server/daemon/session/prompt-message-of.js +2 -12
- package/dist/server/daemon/session/prompt-message-of.js.map +1 -1
- package/dist/server/daemon/session/re-act-loop-intent-detected-trigger.d.ts +3 -42
- package/dist/server/daemon/session/re-act-loop-intent-detected-trigger.d.ts.map +1 -1
- package/dist/server/daemon/session/re-act-loop-intent-detected-trigger.js +4 -145
- package/dist/server/daemon/session/re-act-loop-intent-detected-trigger.js.map +1 -1
- package/dist/server/daemon/session/round-boundary.d.ts +13 -0
- package/dist/server/daemon/session/round-boundary.d.ts.map +1 -0
- package/dist/server/daemon/session/round-boundary.js +196 -0
- package/dist/server/daemon/session/round-boundary.js.map +1 -0
- package/dist/server/daemon/session/round-stop.d.ts +1 -25
- package/dist/server/daemon/session/round-stop.d.ts.map +1 -1
- package/dist/server/daemon/session/round-stop.js +1 -75
- package/dist/server/daemon/session/round-stop.js.map +1 -1
- package/dist/server/daemon/session/turn-iterator.d.ts +1 -44
- package/dist/server/daemon/session/turn-iterator.d.ts.map +1 -1
- package/dist/server/daemon/session/turn-iterator.js +1 -435
- package/dist/server/daemon/session/turn-iterator.js.map +1 -1
- package/dist/server/daemon/session/turn-resolvers.d.ts +1 -16
- package/dist/server/daemon/session/turn-resolvers.d.ts.map +1 -1
- package/dist/server/daemon/session/turn-resolvers.js +1 -28
- package/dist/server/daemon/session/turn-resolvers.js.map +1 -1
- package/dist/server/daemon/session/visual-store.d.ts +2 -2
- package/dist/server/daemon/session/visual-store.d.ts.map +1 -1
- package/dist/server/daemon/session/visual-store.js +19 -20
- package/dist/server/daemon/session/visual-store.js.map +1 -1
- package/dist/server/drivers/request-timeout.d.ts +1 -0
- package/dist/server/drivers/request-timeout.d.ts.map +1 -1
- package/dist/server/drivers/request-timeout.js +2 -1
- package/dist/server/drivers/request-timeout.js.map +1 -1
- package/dist/server/runtime-bin.js +5 -8
- package/dist/server/runtime-bin.js.map +1 -1
- package/dist/server/schemas/index.d.ts +0 -1
- package/dist/server/schemas/index.d.ts.map +1 -1
- package/dist/server/schemas/index.js +0 -1
- package/dist/server/schemas/index.js.map +1 -1
- package/dist/server/schemas/json-record.d.ts +0 -6
- package/dist/server/schemas/json-record.d.ts.map +1 -1
- package/dist/server/schemas/json-record.js +0 -16
- package/dist/server/schemas/json-record.js.map +1 -1
- package/dist/server/schemas/well-known.d.ts +0 -2
- package/dist/server/schemas/well-known.d.ts.map +1 -1
- package/dist/server/schemas/well-known.js +0 -1
- package/dist/server/schemas/well-known.js.map +1 -1
- package/dist/server/testkit/scripted-model.d.ts +11 -0
- package/dist/server/testkit/scripted-model.d.ts.map +1 -1
- package/dist/server/testkit/scripted-model.js +42 -3
- package/dist/server/testkit/scripted-model.js.map +1 -1
- package/dist/server/toolkit/actor.d.ts +0 -1
- package/dist/server/toolkit/actor.d.ts.map +1 -1
- package/dist/server/toolkit/actor.js +2 -5
- package/dist/server/toolkit/actor.js.map +1 -1
- package/dist/server/toolkit/catalog.d.ts +0 -2
- package/dist/server/toolkit/catalog.d.ts.map +1 -1
- package/dist/server/toolkit/catalog.js +0 -81
- package/dist/server/toolkit/catalog.js.map +1 -1
- package/dist/server/toolkit/pack-catalog.d.ts +2 -1
- package/dist/server/toolkit/pack-catalog.d.ts.map +1 -1
- package/dist/server/toolkit/pack-catalog.js +1 -0
- package/dist/server/toolkit/pack-catalog.js.map +1 -1
- package/dist/server/toolkit/tool-entry.d.ts.map +1 -1
- package/dist/server/toolkit/tool-entry.js +1 -0
- package/dist/server/toolkit/tool-entry.js.map +1 -1
- package/dist/server/toolkit/tool-table.d.ts +0 -1
- package/dist/server/toolkit/tool-table.d.ts.map +1 -1
- package/dist/server/toolkit/tool-table.js +0 -3
- package/dist/server/toolkit/tool-table.js.map +1 -1
- package/dist/server/util/read-field.d.ts +0 -2
- package/dist/server/util/read-field.d.ts.map +1 -1
- package/dist/server/util/read-field.js +0 -9
- package/dist/server/util/read-field.js.map +1 -1
- package/dist/server/util/tool-call-json.d.ts +0 -1
- package/dist/server/util/tool-call-json.d.ts.map +1 -1
- package/dist/server/util/tool-call-json.js +0 -25
- package/dist/server/util/tool-call-json.js.map +1 -1
- package/dist/session/index.d.ts +4 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +10 -1
- package/dist/session/index.js.map +1 -1
- package/dist/tool-runtime/guard-tool.d.ts +3 -0
- package/dist/tool-runtime/guard-tool.d.ts.map +1 -1
- package/dist/tool-runtime/guard-tool.js +37 -3
- package/dist/tool-runtime/guard-tool.js.map +1 -1
- package/dist/yjs/document-service.d.ts +2 -4
- package/dist/yjs/document-service.d.ts.map +1 -1
- package/dist/yjs/document-service.js +0 -6
- package/dist/yjs/document-service.js.map +1 -1
- package/package.json +40 -40
|
@@ -1,76 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* What the provider's stop reason means for the loop. Pure over the tape: the reason
|
|
3
|
-
* is a fact on the completion, and the router reads it the way it reads any other
|
|
4
|
-
* enrichment.
|
|
5
|
-
*/
|
|
6
|
-
import { jobTriggersReactLoop, ProgrammaticJob, tapeCompletion, ToolCallJob, } from "@inhuman.tools/harness-model";
|
|
7
|
-
import { splitThink } from "@inhuman.tools/tool-call-normalize";
|
|
8
|
-
export const CONTENT_FILTER_STOP = "content_filter";
|
|
9
|
-
export const LENGTH_STOP = "length";
|
|
10
|
-
/** Consecutive actor rounds, newest last, that ended on the output limit with no work tool between them. */
|
|
11
|
-
export function lengthStreak(turn) {
|
|
12
|
-
let count = 0;
|
|
13
|
-
for (let index = turn.doneWork.length - 1; index >= 0; index -= 1) {
|
|
14
|
-
const cell = turn.doneWork[index];
|
|
15
|
-
const pew = tapeCompletion(cell);
|
|
16
|
-
if (pew != null) {
|
|
17
|
-
if (pew.completionMode === "isolated")
|
|
18
|
-
continue;
|
|
19
|
-
if (pew.finishReason !== LENGTH_STOP)
|
|
20
|
-
break;
|
|
21
|
-
count += 1;
|
|
22
|
-
continue;
|
|
23
|
-
}
|
|
24
|
-
if (cell instanceof ToolCallJob && jobTriggersReactLoop(cell))
|
|
25
|
-
break;
|
|
26
|
-
if (cell instanceof ProgrammaticJob)
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
return count;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* `null` leaves the round to the ordinary rules. Only a round with no work tool is judged:
|
|
33
|
-
* a `length` stop that still produced whole calls is a round like any other.
|
|
34
|
-
*/
|
|
35
|
-
export function roundStop(turn, pew, workTools) {
|
|
36
|
-
if (pew.finishReason === CONTENT_FILTER_STOP) {
|
|
37
|
-
return {
|
|
38
|
-
kind: "stop",
|
|
39
|
-
message: "The provider's content filter stopped this response, so it is blocked or incomplete. This is not an empty answer. Rephrase the request, or send another message to try again.",
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
if (pew.finishReason !== LENGTH_STOP || workTools > 0)
|
|
43
|
-
return null;
|
|
44
|
-
const answered = splitThink(pew.responseText).content.trim() !== "";
|
|
45
|
-
if (!answered) {
|
|
46
|
-
return {
|
|
47
|
-
kind: "stop",
|
|
48
|
-
message: "The model used up its output budget while reasoning and gave no answer. It was not nudged again. Raise the output limit or the reasoning budget, or ask again more narrowly.",
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
const allowed = turn.lengthContinuations ?? 0;
|
|
52
|
-
const streak = lengthStreak(turn);
|
|
53
|
-
if (streak <= allowed)
|
|
54
|
-
return { kind: "continue" };
|
|
55
|
-
return {
|
|
56
|
-
kind: "stop",
|
|
57
|
-
message: `The answer hit the output limit ${streak} times in a row${allowed === 0 ? "" : ` (limit ${allowed} continuations)`} and was cut off. Send another message to continue it.`,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
/** The receipt for a call that was not run. */
|
|
61
|
-
export function refusalText(dropReason, filtered) {
|
|
62
|
-
if (dropReason === "truncated") {
|
|
63
|
-
return "Your tool call was truncated (the response hit its output limit mid-call), so it was not run. Re-issue it.";
|
|
64
|
-
}
|
|
65
|
-
if (dropReason !== "") {
|
|
66
|
-
return "Your tool call's arguments could not be parsed, so it was not run. Re-issue it with valid arguments.";
|
|
67
|
-
}
|
|
68
|
-
return filtered ? "Not run: the provider's content filter stopped this response." : "Not run.";
|
|
69
|
-
}
|
|
70
|
-
export function maxRoundsMessage(limit) {
|
|
71
|
-
return `Stopped after ${limit} model rounds: the round limit for this turn (maxRounds) is reached. Send another message to continue.`;
|
|
72
|
-
}
|
|
73
|
-
export function roundCapReached(turn) {
|
|
74
|
-
return turn.maxRounds != null && turn.maxRounds > 0 && turn.rounds >= turn.maxRounds;
|
|
75
|
-
}
|
|
1
|
+
export { CONTENT_FILTER_STOP, LENGTH_STOP, refusalText, maxRoundsMessage, roundCapReached, } from "@inhuman.tools/turn/runtime";
|
|
76
2
|
//# sourceMappingURL=round-stop.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-stop.js","sourceRoot":"","sources":["../../../../src/server/daemon/session/round-stop.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"round-stop.js","sourceRoot":"","sources":["../../../../src/server/daemon/session/round-stop.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,45 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { type ToolCall } from "@inhuman.tools/tool-call-normalize";
|
|
3
|
-
import type { NoteLog, Settle } from "../../../extensions/index.js";
|
|
4
|
-
import { type startAmbientCompact } from "./ambient-compact.js";
|
|
5
|
-
import { type ReActLoopIntentDetectedTriggerVerdict } from "./re-act-loop-intent-detected-trigger.js";
|
|
6
|
-
import type { TurnResolvers } from "./turn-resolvers.js";
|
|
7
|
-
/** Sequence rules depend on document data and explicit ports, never a daemon. */
|
|
8
|
-
export interface TurnIteratorHost {
|
|
9
|
-
readonly session: SessionRoot;
|
|
10
|
-
readonly resolvers: TurnResolvers;
|
|
11
|
-
readonly notes: NoteLog;
|
|
12
|
-
readonly compactKeepTurns: number;
|
|
13
|
-
readonly hardCompactTrigger: string;
|
|
14
|
-
admit(call: ToolCall): ToolCallJob | ProgrammaticJob;
|
|
15
|
-
waitInbound(signal: AbortSignal): Promise<boolean>;
|
|
16
|
-
openRound(resumed: boolean): Promise<boolean>;
|
|
17
|
-
closeRound(settle: Settle): Promise<void>;
|
|
18
|
-
classifyIntent(completion: CompletionExpectation, signal: AbortSignal): Promise<ReActLoopIntentDetectedTriggerVerdict>;
|
|
19
|
-
startAmbientCompact(options: Omit<Parameters<typeof startAmbientCompact>[0], "complete" | "inflight">): void;
|
|
20
|
-
/**
|
|
21
|
-
* The loop limits to record on this turn when it starts. Absent means unlimited rounds and
|
|
22
|
-
* the default number of length continuations.
|
|
23
|
-
*/
|
|
24
|
-
loopLimits?(turn: SessionTurn): {
|
|
25
|
-
readonly maxRounds: number;
|
|
26
|
-
readonly lengthContinuations: number;
|
|
27
|
-
};
|
|
28
|
-
/** True for a third-party MCP server. Absent, or an unknown connection, is local and runs in order. */
|
|
29
|
-
remoteMcp?(connectionKey: string): boolean;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Append-and-iterate view of the persisted tape. The doneWork/queue
|
|
33
|
-
* split is the durable cursor; entering a cell is independent of resolving it.
|
|
34
|
-
* No snapshot iterator: appends are visited in this same pass.
|
|
35
|
-
*/
|
|
36
|
-
export declare class TurnSequence implements Iterable<TurnChunk> {
|
|
37
|
-
readonly turn: SessionTurn;
|
|
38
|
-
readonly signal?: AbortSignal | undefined;
|
|
39
|
-
constructor(turn: SessionTurn, signal?: AbortSignal | undefined);
|
|
40
|
-
push(...cells: TurnChunk[]): void;
|
|
41
|
-
[Symbol.iterator](): Iterator<TurnChunk>;
|
|
42
|
-
private take;
|
|
43
|
-
}
|
|
44
|
-
export declare function iterateTurn(turn: SessionTurn, host: TurnIteratorHost, signal: AbortSignal): Promise<void>;
|
|
1
|
+
export { iterateTurn, type TurnIteratorHost } from "@inhuman.tools/turn/runtime";
|
|
45
2
|
//# sourceMappingURL=turn-iterator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-iterator.d.ts","sourceRoot":"","sources":["../../../../src/server/daemon/session/turn-iterator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"turn-iterator.d.ts","sourceRoot":"","sources":["../../../../src/server/daemon/session/turn-iterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,436 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { step, trace } from "@inhuman.tools/harness-diagnostics";
|
|
3
|
-
import { callbackRequiredNote, CompactJob, CompletionExpectation, CompletionJob, CONTEXT_NEED_TOOL_NAME, ContextNeedToolJob, DEFAULT_LENGTH_CONTINUATIONS, ResponseCallOrder, SystemToolJob, contextNeedRound, isTitledOnlyCompletion, jobTriggersReactLoop, METADATA_SAME_ROUND_NOTE, parseCompactTrigger, ProgrammaticJob, ReACTChunk, SessionTurn, tapeCompletion, ToolCallJob, TurnPromptChunk, TurnSteerChunk, UPDATE_METADATA_TOOL_NAME, } from "@inhuman.tools/harness-model";
|
|
4
|
-
import { runInAction } from "mobx";
|
|
5
|
-
import { compactDecision, historyBehind, stampRetentionClock, keepFloors, stampCompactInputs, sliceCompactZones, tailCompactCandidate, Transcript, } from "../../../context/index.js";
|
|
6
|
-
import { joinSystemNotes, sealedActorRounds, SIDE_CHANNEL_REMINDER_EVERY, sideChannelReminderNote, turnLoopStopped, } from "../../../session/index.js";
|
|
7
|
-
import { catalogOf } from "../../../tool-catalog/index.js";
|
|
8
|
-
import { ambientCutoff, ambientModel } from "./ambient-compact.js";
|
|
9
|
-
import { LENGTH_CONTINUE_NOTE, questionLineFromSpeech, RE_ACT_LOOP_INTENT_DETECTED_TRIGGER_NOTE, THOUGHT_CONTINUE_NOTE, thoughtWithoutAnswer, thoughtWithoutAnswerCapped, } from "./re-act-loop-intent-detected-trigger.js";
|
|
10
|
-
import { CONTENT_FILTER_STOP, maxRoundsMessage, refusalText, roundCapReached, roundStop } from "./round-stop.js";
|
|
11
|
-
import { toolCallFromResponse } from "../../util/tool-call-json.js";
|
|
12
|
-
/**
|
|
13
|
-
* Append-and-iterate view of the persisted tape. The doneWork/queue
|
|
14
|
-
* split is the durable cursor; entering a cell is independent of resolving it.
|
|
15
|
-
* No snapshot iterator: appends are visited in this same pass.
|
|
16
|
-
*/
|
|
17
|
-
export class TurnSequence {
|
|
18
|
-
turn;
|
|
19
|
-
signal;
|
|
20
|
-
constructor(turn, signal) {
|
|
21
|
-
this.turn = turn;
|
|
22
|
-
this.signal = signal;
|
|
23
|
-
}
|
|
24
|
-
push(...cells) {
|
|
25
|
-
for (const cell of cells)
|
|
26
|
-
this.turn.enqueue(cell);
|
|
27
|
-
}
|
|
28
|
-
*[Symbol.iterator]() {
|
|
29
|
-
for (let cell = this.take(); cell != null; cell = this.take()) {
|
|
30
|
-
yield cell;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
take() {
|
|
34
|
-
if (this.turn.reducerExited || this.turn.cancelRequested || this.signal?.aborted)
|
|
35
|
-
return undefined;
|
|
36
|
-
return this.turn.take();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
export async function iterateTurn(turn, host, signal) {
|
|
40
|
-
if (turnLoopStopped(turn, signal))
|
|
41
|
-
return;
|
|
42
|
-
const session = host.session;
|
|
43
|
-
const connectionId = session.kvs.connection?.trim() ?? "";
|
|
44
|
-
const model = session.kvs.model?.trim() ?? "";
|
|
45
|
-
const sequence = new TurnSequence(turn, signal);
|
|
46
|
-
// Recorded once: a live setting change does not move a turn that is already running.
|
|
47
|
-
turn.stampLoopLimits(host.loopLimits?.(turn) ?? { maxRounds: 0, lengthContinuations: DEFAULT_LENGTH_CONTINUATIONS });
|
|
48
|
-
for (const chunk of sequence) {
|
|
49
|
-
if (turnLoopStopped(turn, signal))
|
|
50
|
-
return;
|
|
51
|
-
switch (true) {
|
|
52
|
-
case chunk instanceof CompactJob: {
|
|
53
|
-
await host.resolvers.compact(chunk, signal);
|
|
54
|
-
if (chunk.cutoff)
|
|
55
|
-
reenterAfterCompact(turn, chunk);
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
case chunk instanceof TurnPromptChunk:
|
|
59
|
-
case chunk instanceof ReACTChunk: {
|
|
60
|
-
await host.closeRound({ ok: true, value: false });
|
|
61
|
-
if (turnLoopStopped(turn, signal))
|
|
62
|
-
return;
|
|
63
|
-
if (chunk instanceof ReACTChunk &&
|
|
64
|
-
chunk.openPage &&
|
|
65
|
-
!behaviorNotesPending(session, host.notes) &&
|
|
66
|
-
!(session.steerTurn === turn && session.steerQueue.length > 0) &&
|
|
67
|
-
session.pendingNotices.length === 0) {
|
|
68
|
-
chunk.skipped = true;
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
if (connectionId === "") {
|
|
72
|
-
turn.broke = "no connection is configured for this session";
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
if (chunk instanceof ReACTChunk && !session.liveChain.includes(turn))
|
|
76
|
-
return;
|
|
77
|
-
if (roundCapReached(turn)) {
|
|
78
|
-
turn.stopLoop(maxRoundsMessage(turn.maxRounds ?? 0));
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
if (!(await host.waitInbound(signal)) || turnLoopStopped(turn, signal))
|
|
82
|
-
return;
|
|
83
|
-
const resumed = turn.doneWork.some((done) => done !== chunk && (done instanceof TurnPromptChunk || done instanceof ReACTChunk));
|
|
84
|
-
const opened = await host.openRound(resumed);
|
|
85
|
-
if (turnLoopStopped(turn, signal))
|
|
86
|
-
return;
|
|
87
|
-
if (!opened) {
|
|
88
|
-
turn.broke = "a plugin refused to open the round";
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
turn.claimApprovalNotes();
|
|
92
|
-
session.claimSteers(turn);
|
|
93
|
-
session.claimNotices(turn);
|
|
94
|
-
const messages = historyBehind(turn, compactRead(host.compactKeepTurns, session.kvs));
|
|
95
|
-
const completion = new CompletionExpectation({
|
|
96
|
-
promptText: chunk instanceof TurnPromptChunk ? turn.completionMessage : prompt.user ``,
|
|
97
|
-
connectionId,
|
|
98
|
-
model,
|
|
99
|
-
messages,
|
|
100
|
-
reasoningEffort: session.agent.spec.reasoningEffort,
|
|
101
|
-
});
|
|
102
|
-
let holdNotes = false;
|
|
103
|
-
if (chunk instanceof ReACTChunk) {
|
|
104
|
-
const prior = tapeCompletion(turn.doneWork.findLast((cell) => tapeCompletion(cell) != null));
|
|
105
|
-
const workTools = priorWorkToolCount(session, prior);
|
|
106
|
-
const titledOnly = prior != null && titledOnlyCompletion(session, prior);
|
|
107
|
-
const pack = loopEndPack(session, host.notes);
|
|
108
|
-
const pending = behaviorNotesPending(session, host.notes);
|
|
109
|
-
// Open Call, not empty tape: work tools do not close ask.
|
|
110
|
-
const callbackRows = openCallbackRowsForTurn(session, turn);
|
|
111
|
-
const awaiting = callbackRows.length > 0;
|
|
112
|
-
const continuing = chunk.intentContinue || chunk.truncated;
|
|
113
|
-
completion.systemNote = chunk.truncated
|
|
114
|
-
? LENGTH_CONTINUE_NOTE
|
|
115
|
-
: chunk.intentContinue
|
|
116
|
-
? prior != null && thoughtWithoutAnswer(prior)
|
|
117
|
-
? THOUGHT_CONTINUE_NOTE
|
|
118
|
-
: RE_ACT_LOOP_INTENT_DETECTED_TRIGGER_NOTE
|
|
119
|
-
: awaiting
|
|
120
|
-
? callbackRequiredNote(session.agent.spec.voidLegal, callbackRows)
|
|
121
|
-
: workTools === 0 && pending && pack.note !== ""
|
|
122
|
-
? pack.note
|
|
123
|
-
: titledOnly
|
|
124
|
-
? METADATA_SAME_ROUND_NOTE
|
|
125
|
-
: workTools === 0
|
|
126
|
-
? pack.note
|
|
127
|
-
: prompt.system ``;
|
|
128
|
-
if (!continuing &&
|
|
129
|
-
!awaiting &&
|
|
130
|
-
workTools === 0 &&
|
|
131
|
-
pack.consumedIds.length > 0 &&
|
|
132
|
-
((pending && pack.note !== "") || !titledOnly)) {
|
|
133
|
-
host.notes.consume(session.sessionId, pack.consumedIds, turn.uuid);
|
|
134
|
-
}
|
|
135
|
-
holdNotes = continuing || awaiting || (titledOnly && !(pending && pack.note !== ""));
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
// `agent__respond` is a fixed tool, so a first round learns the open request ids here.
|
|
139
|
-
const callbackRows = openCallbackRowsForTurn(session, turn);
|
|
140
|
-
if (callbackRows.length > 0) {
|
|
141
|
-
completion.systemNote = callbackRequiredNote(session.agent.spec.voidLegal, callbackRows);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (!holdNotes) {
|
|
145
|
-
const left = host.notes.peek(session.sessionId).filter((note) => note.text.trim() !== "");
|
|
146
|
-
if (left.length > 0) {
|
|
147
|
-
completion.systemNote = joinSystemNotes([
|
|
148
|
-
completion.systemNote,
|
|
149
|
-
asSystemPrompt(left.map((note) => note.text).join("\n\n")),
|
|
150
|
-
]);
|
|
151
|
-
host.notes.consume(session.sessionId, left.map((note) => note.id), turn.uuid);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
const frozenNames = turn.tools.entries.map((entry) => entry.name);
|
|
155
|
-
completion.systemNote = joinSystemNotes([
|
|
156
|
-
completion.systemNote,
|
|
157
|
-
sideChannelReminderNote(sealedActorRounds(turn), SIDE_CHANNEL_REMINDER_EVERY, frozenNames.length > 0 ? frozenNames : null),
|
|
158
|
-
]);
|
|
159
|
-
sequence.push(new CompletionJob({ expectation: completion }));
|
|
160
|
-
// R3: read the live inputs once (wall clock, prior warmUntilMs, estimated savings) and record them.
|
|
161
|
-
stampRetentionClock(completion);
|
|
162
|
-
step(`turn round ${turn.doneWork.length + turn.queue.length} ${turn.prompt}`);
|
|
163
|
-
trace("harness:turn", `round ${turn.uuid} queued=${turn.queue.length}`);
|
|
164
|
-
break;
|
|
165
|
-
}
|
|
166
|
-
case chunk instanceof CompletionJob: {
|
|
167
|
-
const pew = chunk.expectation;
|
|
168
|
-
if (pew == null)
|
|
169
|
-
break;
|
|
170
|
-
await host.resolvers.completion(chunk, signal);
|
|
171
|
-
if (turnLoopStopped(turn, signal))
|
|
172
|
-
return;
|
|
173
|
-
if (pew.outcome !== "successful") {
|
|
174
|
-
// A round that failed ends the turn. Say why on the turn, not only in diagnostics.
|
|
175
|
-
if (pew.outcome === "failed" && pew.endCause !== "cancel") {
|
|
176
|
-
turn.broke = `model round failed: ${pew.failReason?.trim() || pew.endDetail?.trim() || "no reason given"}`;
|
|
177
|
-
}
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
// A call the stream cut off, or any call from a response the provider's filter stopped,
|
|
181
|
-
// is never run. It gets a sealed failed receipt so the model hears about it.
|
|
182
|
-
// The actor normalized the rest once, and the assistant message records them.
|
|
183
|
-
const filtered = pew.finishReason === CONTENT_FILTER_STOP;
|
|
184
|
-
const refusals = pew.responseCalls.filter((call) => filtered || call.dropReason !== "");
|
|
185
|
-
const calls = pew.responseCalls.filter((call) => !refusals.includes(call)).map(toolCallFromResponse);
|
|
186
|
-
const order = new ResponseCallOrder({
|
|
187
|
-
entryClass: (name) => catalogOf(session)?.catalogEntry(name)?.class,
|
|
188
|
-
remoteMcp: (key) => host.remoteMcp?.(key) ?? false,
|
|
189
|
-
});
|
|
190
|
-
const startCall = (call) => runInAction(() => {
|
|
191
|
-
const tool = host.admit(call);
|
|
192
|
-
order.place(tool);
|
|
193
|
-
sequence.push(tool);
|
|
194
|
-
return tool;
|
|
195
|
-
});
|
|
196
|
-
const refused = refusals.map((call) => runInAction(() => {
|
|
197
|
-
const tool = new SystemToolJob({
|
|
198
|
-
toolCallId: call.toolCallId,
|
|
199
|
-
name: call.name,
|
|
200
|
-
argsJson: "{}",
|
|
201
|
-
humanApprove: false,
|
|
202
|
-
completed: true,
|
|
203
|
-
outcomeJson: JSON.stringify({ ok: false, text: refusalText(call.dropReason, filtered) }),
|
|
204
|
-
});
|
|
205
|
-
sequence.push(tool);
|
|
206
|
-
return tool;
|
|
207
|
-
}));
|
|
208
|
-
// Ack title then need before any other call starts, even if they were not first.
|
|
209
|
-
// Construction appends the job, which makes it reachable, so the rest stay
|
|
210
|
-
// unconstructed until that wait finishes.
|
|
211
|
-
const early = [
|
|
212
|
-
...calls.filter((call) => call.function.name === UPDATE_METADATA_TOOL_NAME),
|
|
213
|
-
...calls.filter((call) => call.function.name === CONTEXT_NEED_TOOL_NAME),
|
|
214
|
-
];
|
|
215
|
-
const opened = [];
|
|
216
|
-
for (const call of early) {
|
|
217
|
-
const tool = startCall(call);
|
|
218
|
-
opened.push(tool);
|
|
219
|
-
if (tool instanceof ContextNeedToolJob) {
|
|
220
|
-
const parsed = tool.need;
|
|
221
|
-
step(`context-need ${parsed == null
|
|
222
|
-
? "invalid"
|
|
223
|
-
: JSON.stringify({
|
|
224
|
-
...parsed,
|
|
225
|
-
used: turn.contextUsed,
|
|
226
|
-
limit: turn.contextLimit,
|
|
227
|
-
})}`);
|
|
228
|
-
}
|
|
229
|
-
if ((await host.resolvers.work(tool, signal)) === "aborted")
|
|
230
|
-
return;
|
|
231
|
-
if (turnLoopStopped(turn, signal))
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
const rest = calls
|
|
235
|
-
.filter((call) => call.function.name !== UPDATE_METADATA_TOOL_NAME && call.function.name !== CONTEXT_NEED_TOOL_NAME)
|
|
236
|
-
.map(startCall);
|
|
237
|
-
const tools = [...opened, ...rest, ...refused];
|
|
238
|
-
const work = tools.filter((tool) => !(tool instanceof ToolCallJob) || jobTriggersReactLoop(tool));
|
|
239
|
-
if (work.length === 0) {
|
|
240
|
-
for (const tool of rest) {
|
|
241
|
-
if ((await host.resolvers.work(tool, signal)) === "aborted")
|
|
242
|
-
return;
|
|
243
|
-
if (turnLoopStopped(turn, signal))
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
const read = compactRead(host.compactKeepTurns, session.kvs);
|
|
248
|
-
const eat = Transcript.fromCells(historyBehind(turn, read));
|
|
249
|
-
const zones = sliceCompactZones(eat, keepFloors(turn.contextNeed, session.kvs, false, read.configFloor));
|
|
250
|
-
const zoneSlice = { prefix: zones.prefix, keep: zones.keep };
|
|
251
|
-
const forced = tailCompactCandidate(turn, parseCompactTrigger(host.hardCompactTrigger), zoneSlice);
|
|
252
|
-
if (forced != null) {
|
|
253
|
-
const job = new CompactJob({ reason: forced });
|
|
254
|
-
// F8: the cut's inputs are facts of this job from here on, not live settings.
|
|
255
|
-
stampCompactInputs(job, read.configFloor, session.kvs);
|
|
256
|
-
sequence.push(job);
|
|
257
|
-
}
|
|
258
|
-
const option = compactDecision(turn, zoneSlice);
|
|
259
|
-
const cutoff = option == null ? null : ambientCutoff(zones.keep);
|
|
260
|
-
const summarizer = ambientModel(session.kvs, model);
|
|
261
|
-
if (option != null && cutoff != null && connectionId !== "" && summarizer !== "") {
|
|
262
|
-
host.startAmbientCompact({
|
|
263
|
-
home: turn,
|
|
264
|
-
cutoff,
|
|
265
|
-
prefix: zones.prefix,
|
|
266
|
-
focus: option.focus,
|
|
267
|
-
connectionId,
|
|
268
|
-
model: summarizer,
|
|
269
|
-
});
|
|
270
|
-
}
|
|
271
|
-
const sideChannelOnly = tools.length > 0 && work.length === 0;
|
|
272
|
-
const titledOnly = sideChannelOnly && titledOnlyCompletion(session, pew);
|
|
273
|
-
const needRound = contextNeedRound(pew);
|
|
274
|
-
const awaitingCallback = openCallbackRowsForTurn(session, turn).length > 0;
|
|
275
|
-
const textOnly = work.length === 0 && !titledOnly;
|
|
276
|
-
if (textOnly) {
|
|
277
|
-
await host.closeRound({ ok: true, value: pew.responseText });
|
|
278
|
-
if (turnLoopStopped(turn, signal))
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
const hadPending = session.pendingNotices.length > 0;
|
|
282
|
-
if (work.length === 0)
|
|
283
|
-
session.claimNotices(turn);
|
|
284
|
-
if (work.length > 0)
|
|
285
|
-
turn.questionLine = "";
|
|
286
|
-
const idleNudge = titledOnly || needRound === "keep" || (work.length === 0 && awaitingCallback);
|
|
287
|
-
const stop = roundStop(turn, pew, work.length);
|
|
288
|
-
if (stop?.kind === "stop") {
|
|
289
|
-
turn.stopLoop(stop.message);
|
|
290
|
-
}
|
|
291
|
-
else if (stop?.kind === "continue") {
|
|
292
|
-
turn.questionLine = "";
|
|
293
|
-
sequence.push(new ReACTChunk({ truncated: true }));
|
|
294
|
-
}
|
|
295
|
-
else if (work.length > 0 ||
|
|
296
|
-
(session.steerTurn === turn && session.steerQueue.length > 0) ||
|
|
297
|
-
hadPending ||
|
|
298
|
-
(idleNudge && roundsWithoutWork(turn) <= IDLE_ROUND_MAX)) {
|
|
299
|
-
sequence.push(new ReACTChunk());
|
|
300
|
-
}
|
|
301
|
-
else if (idleNudge) {
|
|
302
|
-
sequence.push(new ReACTChunk({ openPage: true }));
|
|
303
|
-
}
|
|
304
|
-
else if (textOnly &&
|
|
305
|
-
needRound !== "seal" &&
|
|
306
|
-
thoughtWithoutAnswer(pew) &&
|
|
307
|
-
!behaviorNotesPending(session, host.notes)) {
|
|
308
|
-
turn.questionLine = "";
|
|
309
|
-
sequence.push(new ReACTChunk(thoughtWithoutAnswerCapped(turn) ? { openPage: true } : { intentContinue: true }));
|
|
310
|
-
}
|
|
311
|
-
else if (textOnly && needRound !== "seal") {
|
|
312
|
-
if (behaviorNotesPending(session, host.notes)) {
|
|
313
|
-
sequence.push(new ReACTChunk({ openPage: true }));
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
const intern = await host.classifyIntent(pew, signal);
|
|
317
|
-
if (turnLoopStopped(turn, signal))
|
|
318
|
-
return;
|
|
319
|
-
if (intern === "continue") {
|
|
320
|
-
turn.questionLine = "";
|
|
321
|
-
sequence.push(new ReACTChunk({ intentContinue: true }));
|
|
322
|
-
}
|
|
323
|
-
else {
|
|
324
|
-
if (intern === "question")
|
|
325
|
-
turn.questionLine = questionLineFromSpeech(pew.responseText);
|
|
326
|
-
sequence.push(new ReACTChunk({ openPage: true }));
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
break;
|
|
331
|
-
}
|
|
332
|
-
case chunk instanceof ToolCallJob:
|
|
333
|
-
case chunk instanceof ProgrammaticJob: {
|
|
334
|
-
trace("harness:turn", `work ${turn.uuid} ${chunk instanceof ToolCallJob ? chunk.name : "scheme"} ${chunk.toolCallId}`);
|
|
335
|
-
if (!chunk.completed && (await host.resolvers.work(chunk, signal)) === "aborted")
|
|
336
|
-
return;
|
|
337
|
-
if (turnLoopStopped(turn, signal))
|
|
338
|
-
return;
|
|
339
|
-
break;
|
|
340
|
-
}
|
|
341
|
-
default:
|
|
342
|
-
break;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
/** Runaway guard for rounds that only title, re-ask for context, or leave a Call unanswered. */
|
|
347
|
-
const IDLE_ROUND_MAX = 4;
|
|
348
|
-
/** Consecutive actor rounds since the last work tool or steer, including the latest. */
|
|
349
|
-
function roundsWithoutWork(turn) {
|
|
350
|
-
let count = 0;
|
|
351
|
-
for (let index = turn.doneWork.length - 1; index >= 0; index -= 1) {
|
|
352
|
-
const cell = turn.doneWork[index];
|
|
353
|
-
const pew = tapeCompletion(cell);
|
|
354
|
-
if (pew != null) {
|
|
355
|
-
if (pew.completionMode !== "isolated")
|
|
356
|
-
count += 1;
|
|
357
|
-
continue;
|
|
358
|
-
}
|
|
359
|
-
if (cell instanceof ToolCallJob && jobTriggersReactLoop(cell))
|
|
360
|
-
break;
|
|
361
|
-
if (cell instanceof ProgrammaticJob || cell instanceof TurnSteerChunk)
|
|
362
|
-
break;
|
|
363
|
-
}
|
|
364
|
-
return count;
|
|
365
|
-
}
|
|
366
|
-
function behaviorNotesPending(session, notes) {
|
|
367
|
-
return notes.peek(session.sessionId).some((note) => note.text.trim() !== "");
|
|
368
|
-
}
|
|
369
|
-
/** Pack unconsumed behavior notes for the next model input. */
|
|
370
|
-
function loopEndPack(session, notes) {
|
|
371
|
-
const parts = [];
|
|
372
|
-
const consumedIds = [];
|
|
373
|
-
for (const note of notes.peek(session.sessionId)) {
|
|
374
|
-
if (note.text.trim() === "")
|
|
375
|
-
continue;
|
|
376
|
-
parts.push(note.text);
|
|
377
|
-
consumedIds.push(note.id);
|
|
378
|
-
}
|
|
379
|
-
return { note: asSystemPrompt(parts.join("\n\n")), consumedIds };
|
|
380
|
-
}
|
|
381
|
-
function openCallbackRowsForTurn(session, turn) {
|
|
382
|
-
const futureRequestIds = new Set();
|
|
383
|
-
let unit = session.head;
|
|
384
|
-
const seen = new Set();
|
|
385
|
-
while (unit != null && unit !== turn && !seen.has(unit)) {
|
|
386
|
-
seen.add(unit);
|
|
387
|
-
const reqId = unit.agentRequestId.trim();
|
|
388
|
-
if (reqId !== "")
|
|
389
|
-
futureRequestIds.add(reqId);
|
|
390
|
-
if (!(unit.turnTail instanceof SessionTurn))
|
|
391
|
-
break;
|
|
392
|
-
unit = unit.turnTail;
|
|
393
|
-
}
|
|
394
|
-
const rows = session.openCallbackRows();
|
|
395
|
-
if (futureRequestIds.size === 0)
|
|
396
|
-
return rows;
|
|
397
|
-
return rows.filter((row) => !futureRequestIds.has(row.requestId));
|
|
398
|
-
}
|
|
399
|
-
function callIsSideChannel(session, name) {
|
|
400
|
-
return catalogOf(session)?.catalogEntry(name)?.isSideChannel === true;
|
|
401
|
-
}
|
|
402
|
-
function titledOnlyCompletion(session, chunk) {
|
|
403
|
-
return isTitledOnlyCompletion({
|
|
404
|
-
responseText: chunk.responseText,
|
|
405
|
-
responseCalls: chunk.responseCalls.map((call) => ({
|
|
406
|
-
name: call.name,
|
|
407
|
-
isSideChannel: callIsSideChannel(session, call.name),
|
|
408
|
-
})),
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
function priorWorkToolCount(session, completion) {
|
|
412
|
-
if (completion == null)
|
|
413
|
-
return 0;
|
|
414
|
-
return completion.responseCalls.filter((call) => !callIsSideChannel(session, call.name)).length;
|
|
415
|
-
}
|
|
416
|
-
/**
|
|
417
|
-
* A speculative continuation queued behind this cutoff is inert, so a
|
|
418
|
-
* text-only overflow exits on the card and paints as an interrupted turn.
|
|
419
|
-
* Slash compact is the card. A second cutoff in the same turn stays a card
|
|
420
|
-
* too: the gauge is still the pre-fold report, and promoting again spins.
|
|
421
|
-
*/
|
|
422
|
-
function reenterAfterCompact(turn, compact) {
|
|
423
|
-
if (compact.reason === "user")
|
|
424
|
-
return;
|
|
425
|
-
const next = turn.queue[0];
|
|
426
|
-
if (!(next instanceof ReACTChunk) || !next.openPage)
|
|
427
|
-
return;
|
|
428
|
-
const priorCutoff = turn.doneWork.some((chunk) => chunk !== compact && chunk instanceof CompactJob && chunk.cutoff);
|
|
429
|
-
if (priorCutoff)
|
|
430
|
-
return;
|
|
431
|
-
next.openPage = false;
|
|
432
|
-
}
|
|
433
|
-
function compactRead(configFloor, kv) {
|
|
434
|
-
return { configFloor: Math.max(configFloor, 1), kv };
|
|
435
|
-
}
|
|
1
|
+
export { iterateTurn } from "@inhuman.tools/turn/runtime";
|
|
436
2
|
//# sourceMappingURL=turn-iterator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-iterator.js","sourceRoot":"","sources":["../../../../src/server/daemon/session/turn-iterator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"turn-iterator.js","sourceRoot":"","sources":["../../../../src/server/daemon/session/turn-iterator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAyB,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,17 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import type { CompleteRequest, CompleteResult } from "@inhuman.tools/harness-provider-sdk";
|
|
3
|
-
import { type CompactHost } from "../../../session/index.js";
|
|
4
|
-
/** Resolution changes the work node. The iterator reads that node afterward. */
|
|
5
|
-
export interface TurnResolvers {
|
|
6
|
-
completion(job: CompletionJob, signal: AbortSignal): Promise<void>;
|
|
7
|
-
work(job: ToolCallJob | ProgrammaticJob, signal: AbortSignal): Promise<"settled" | "aborted">;
|
|
8
|
-
compact(job: CompactJob, signal: AbortSignal): Promise<void>;
|
|
9
|
-
}
|
|
10
|
-
export interface TurnResolverHost {
|
|
11
|
-
complete(request: CompleteRequest): Promise<CompleteResult>;
|
|
12
|
-
join(job: ToolCallJob | ProgrammaticJob, signal: AbortSignal): Promise<"settled" | "aborted">;
|
|
13
|
-
compactHost(): CompactHost;
|
|
14
|
-
}
|
|
15
|
-
/** Production effects; tests substitute this whole strategy without a daemon. */
|
|
16
|
-
export declare function createTurnResolvers(host: TurnResolverHost): TurnResolvers;
|
|
1
|
+
export { createTurnResolvers, type TurnResolverHost, type TurnResolvers } from "@inhuman.tools/turn/runtime";
|
|
17
2
|
//# sourceMappingURL=turn-resolvers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turn-resolvers.d.ts","sourceRoot":"","sources":["../../../../src/server/daemon/session/turn-resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"turn-resolvers.d.ts","sourceRoot":"","sources":["../../../../src/server/daemon/session/turn-resolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,6BAA6B,CAAC"}
|