@interf/compiler 0.6.1 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -74
- package/builtin-workflows/interf/README.md +5 -5
- package/builtin-workflows/interf/compile/stages/shape/SKILL.md +4 -4
- package/builtin-workflows/interf/improve/SKILL.md +2 -2
- package/builtin-workflows/interf/use/query/SKILL.md +1 -1
- package/builtin-workflows/interf/workflow.json +6 -6
- package/builtin-workflows/interf/workflow.schema.json +1 -1
- package/dist/bin.js +2 -28
- package/dist/{commands → cli/commands}/check-draft.d.ts +2 -2
- package/dist/{commands → cli/commands}/check-draft.js +12 -12
- package/dist/{commands → cli/commands}/compile-controller.d.ts +3 -3
- package/dist/{commands → cli/commands}/compile-controller.js +36 -34
- package/dist/{commands → cli/commands}/compile.d.ts +2 -2
- package/dist/{commands → cli/commands}/compile.js +15 -11
- package/dist/{commands → cli/commands}/compiled-flow.d.ts +3 -4
- package/dist/{commands → cli/commands}/compiled-flow.js +9 -14
- package/dist/{commands → cli/commands}/create-workflow-wizard.d.ts +3 -3
- package/dist/{commands → cli/commands}/create-workflow-wizard.js +61 -34
- package/dist/{commands → cli/commands}/create.d.ts +1 -1
- package/dist/{commands → cli/commands}/create.js +15 -18
- package/dist/{commands → cli/commands}/dataset-selection.d.ts +1 -1
- package/dist/{commands → cli/commands}/default.js +3 -3
- package/dist/{commands → cli/commands}/doctor.js +5 -6
- package/dist/{commands → cli/commands}/executor-flow.d.ts +1 -1
- package/dist/{commands → cli/commands}/executor-flow.js +13 -16
- package/dist/{commands → cli/commands}/init.d.ts +4 -1
- package/dist/{commands → cli/commands}/init.js +157 -72
- package/dist/{commands → cli/commands}/list.js +5 -5
- package/dist/{commands → cli/commands}/reset.js +4 -4
- package/dist/{commands → cli/commands}/source-config-wizard.d.ts +8 -3
- package/dist/{commands → cli/commands}/source-config-wizard.js +161 -87
- package/dist/{commands → cli/commands}/status.js +20 -11
- package/dist/{commands → cli/commands}/test-flow.d.ts +13 -4
- package/dist/{commands → cli/commands}/test-flow.js +30 -26
- package/dist/cli/commands/test.d.ts +14 -0
- package/dist/{commands → cli/commands}/test.js +39 -23
- package/dist/{commands → cli/commands}/verify.js +4 -4
- package/dist/cli/index.d.ts +21 -0
- package/dist/cli/index.js +33 -0
- package/dist/index.d.ts +22 -11
- package/dist/index.js +15 -6
- package/dist/lib/agent-args.d.ts +1 -4
- package/dist/lib/agent-args.js +1 -52
- package/dist/lib/agent-constants.d.ts +1 -5
- package/dist/lib/agent-constants.js +1 -28
- package/dist/lib/agent-detection.d.ts +1 -7
- package/dist/lib/agent-detection.js +1 -65
- package/dist/lib/agent-execution.d.ts +1 -2
- package/dist/lib/agent-execution.js +1 -243
- package/dist/lib/agent-logs.d.ts +1 -2
- package/dist/lib/agent-logs.js +1 -17
- package/dist/lib/agent-preflight.d.ts +1 -7
- package/dist/lib/agent-preflight.js +1 -77
- package/dist/lib/agent-render.d.ts +1 -8
- package/dist/lib/agent-render.js +1 -218
- package/dist/lib/agent-shells.d.ts +1 -69
- package/dist/lib/agent-shells.js +1 -1021
- package/dist/lib/agent-status.d.ts +1 -3
- package/dist/lib/agent-status.js +1 -58
- package/dist/lib/agent-types.d.ts +1 -30
- package/dist/lib/agent-types.js +1 -1
- package/dist/lib/agents.d.ts +1 -6
- package/dist/lib/agents.js +1 -5
- package/dist/lib/builtin-compiled-workflow.d.ts +1 -38
- package/dist/lib/builtin-compiled-workflow.js +1 -94
- package/dist/lib/compiled-compile.d.ts +1 -48
- package/dist/lib/compiled-compile.js +1 -255
- package/dist/lib/compiled-paths.d.ts +1 -40
- package/dist/lib/compiled-paths.js +3 -106
- package/dist/lib/compiled-raw.d.ts +1 -49
- package/dist/lib/compiled-raw.js +3 -102
- package/dist/lib/compiled-reset.d.ts +1 -2
- package/dist/lib/compiled-reset.js +3 -72
- package/dist/lib/compiled-schema.d.ts +1 -31
- package/dist/lib/compiled-schema.js +1 -141
- package/dist/lib/execution-profile.d.ts +1 -17
- package/dist/lib/execution-profile.js +1 -84
- package/dist/lib/executors.d.ts +1 -32
- package/dist/lib/executors.js +1 -43
- package/dist/lib/interf-bootstrap.d.ts +1 -3
- package/dist/lib/interf-bootstrap.js +3 -18
- package/dist/lib/interf-detect.d.ts +1 -33
- package/dist/lib/interf-detect.js +3 -176
- package/dist/lib/interf-scaffold.d.ts +1 -2
- package/dist/lib/interf-scaffold.js +3 -114
- package/dist/lib/interf-workflow-package.d.ts +1 -25
- package/dist/lib/interf-workflow-package.js +1 -342
- package/dist/lib/interf.d.ts +1 -5
- package/dist/lib/interf.js +3 -4
- package/dist/lib/local-workflows.d.ts +1 -54
- package/dist/lib/local-workflows.js +1 -422
- package/dist/lib/package-root.d.ts +1 -0
- package/dist/lib/package-root.js +1 -0
- package/dist/lib/project-paths.d.ts +1 -11
- package/dist/lib/project-paths.js +3 -32
- package/dist/lib/runtime-acceptance.d.ts +1 -9
- package/dist/lib/runtime-acceptance.js +1 -269
- package/dist/lib/runtime-contracts.d.ts +1 -2
- package/dist/lib/runtime-contracts.js +1 -48
- package/dist/lib/runtime-inventory.d.ts +1 -7
- package/dist/lib/runtime-inventory.js +1 -29
- package/dist/lib/runtime-paths.d.ts +1 -8
- package/dist/lib/runtime-paths.js +1 -26
- package/dist/lib/runtime-prompt.d.ts +1 -2
- package/dist/lib/runtime-prompt.js +1 -48
- package/dist/lib/runtime-reconcile.d.ts +1 -2
- package/dist/lib/runtime-reconcile.js +1 -193
- package/dist/lib/runtime-runs.d.ts +1 -11
- package/dist/lib/runtime-runs.js +1 -262
- package/dist/lib/runtime-types.d.ts +1 -43
- package/dist/lib/runtime-types.js +1 -1
- package/dist/lib/runtime.d.ts +1 -6
- package/dist/lib/runtime.js +1 -5
- package/dist/lib/schema.d.ts +4 -1073
- package/dist/lib/schema.js +6 -542
- package/dist/lib/source-config.d.ts +1 -39
- package/dist/lib/source-config.js +3 -293
- package/dist/lib/state-artifacts.d.ts +1 -8
- package/dist/lib/state-artifacts.js +1 -13
- package/dist/lib/state-health.d.ts +1 -4
- package/dist/lib/state-health.js +1 -132
- package/dist/lib/state-io.d.ts +1 -10
- package/dist/lib/state-io.js +1 -76
- package/dist/lib/state-paths.d.ts +1 -4
- package/dist/lib/state-paths.js +1 -13
- package/dist/lib/state-view.d.ts +1 -4
- package/dist/lib/state-view.js +1 -103
- package/dist/lib/state.d.ts +1 -7
- package/dist/lib/state.js +1 -12
- package/dist/lib/test-execution.d.ts +1 -14
- package/dist/lib/test-execution.js +3 -525
- package/dist/lib/test-matrices.d.ts +1 -90
- package/dist/lib/test-matrices.js +3 -96
- package/dist/lib/test-paths.d.ts +1 -12
- package/dist/lib/test-paths.js +3 -59
- package/dist/lib/test-profile-presets.d.ts +1 -57
- package/dist/lib/test-profile-presets.js +3 -50
- package/dist/lib/test-sandbox.d.ts +1 -11
- package/dist/lib/test-sandbox.js +3 -105
- package/dist/lib/test-specs.d.ts +1 -7
- package/dist/lib/test-specs.js +3 -114
- package/dist/lib/test-targets.d.ts +1 -5
- package/dist/lib/test-targets.js +3 -38
- package/dist/lib/test-types.d.ts +1 -17
- package/dist/lib/test-types.js +3 -1
- package/dist/lib/test.d.ts +1 -4
- package/dist/lib/test.js +3 -3
- package/dist/lib/validate-compiled.d.ts +1 -27
- package/dist/lib/validate-compiled.js +1 -241
- package/dist/lib/validate-helpers.d.ts +1 -12
- package/dist/lib/validate-helpers.js +1 -41
- package/dist/lib/validate.d.ts +1 -21
- package/dist/lib/validate.js +1 -249
- package/dist/lib/workflow-authoring.d.ts +1 -26
- package/dist/lib/workflow-authoring.js +1 -119
- package/dist/lib/workflow-definitions.d.ts +1 -78
- package/dist/lib/workflow-definitions.js +1 -203
- package/dist/lib/workflow-edit-session.d.ts +1 -16
- package/dist/lib/workflow-edit-session.js +1 -57
- package/dist/lib/workflow-edit-utils.d.ts +1 -10
- package/dist/lib/workflow-edit-utils.js +1 -39
- package/dist/lib/workflow-helpers.d.ts +1 -38
- package/dist/lib/workflow-helpers.js +1 -167
- package/dist/lib/workflow-improvement.d.ts +1 -22
- package/dist/lib/workflow-improvement.js +1 -209
- package/dist/lib/workflow-primitives.d.ts +1 -2
- package/dist/lib/workflow-primitives.js +1 -5
- package/dist/lib/workflow-review-paths.d.ts +1 -10
- package/dist/lib/workflow-review-paths.js +1 -27
- package/dist/lib/workflow-stage-policy.d.ts +1 -5
- package/dist/lib/workflow-stage-policy.js +1 -31
- package/dist/lib/workflow-stage-runner.d.ts +1 -41
- package/dist/lib/workflow-stage-runner.js +1 -109
- package/dist/lib/workflows.d.ts +1 -15
- package/dist/lib/workflows.js +1 -31
- package/dist/packages/agents/index.d.ts +17 -0
- package/dist/packages/agents/index.js +15 -0
- package/dist/packages/agents/lib/agents.d.ts +6 -0
- package/dist/packages/agents/lib/agents.js +5 -0
- package/dist/packages/agents/lib/args.d.ts +4 -0
- package/dist/packages/agents/lib/args.js +52 -0
- package/dist/packages/agents/lib/constants.d.ts +5 -0
- package/dist/packages/agents/lib/constants.js +28 -0
- package/dist/packages/agents/lib/detection.d.ts +7 -0
- package/dist/packages/agents/lib/detection.js +65 -0
- package/dist/packages/agents/lib/execution-profile.d.ts +17 -0
- package/dist/packages/agents/lib/execution-profile.js +84 -0
- package/dist/packages/agents/lib/execution.d.ts +2 -0
- package/dist/packages/agents/lib/execution.js +243 -0
- package/dist/packages/agents/lib/executors.d.ts +32 -0
- package/dist/packages/agents/lib/executors.js +45 -0
- package/dist/packages/agents/lib/logs.d.ts +2 -0
- package/dist/packages/agents/lib/logs.js +17 -0
- package/dist/packages/agents/lib/preflight.d.ts +7 -0
- package/dist/packages/agents/lib/preflight.js +77 -0
- package/dist/packages/agents/lib/render.d.ts +8 -0
- package/dist/packages/agents/lib/render.js +218 -0
- package/dist/packages/agents/lib/schema.d.ts +8 -0
- package/dist/packages/agents/lib/schema.js +7 -0
- package/dist/packages/agents/lib/shells.d.ts +69 -0
- package/dist/packages/agents/lib/shells.js +1021 -0
- package/dist/packages/agents/lib/status.d.ts +3 -0
- package/dist/packages/agents/lib/status.js +58 -0
- package/dist/packages/agents/lib/types.d.ts +30 -0
- package/dist/packages/agents/lib/types.js +1 -0
- package/dist/{lib → packages/agents/lib}/user-config.d.ts +1 -0
- package/dist/{lib → packages/agents/lib}/user-config.js +3 -2
- package/dist/packages/compiler/compiled-compile.d.ts +48 -0
- package/dist/packages/compiler/compiled-compile.js +256 -0
- package/dist/packages/compiler/compiled-schema.d.ts +31 -0
- package/dist/packages/compiler/compiled-schema.js +141 -0
- package/dist/packages/compiler/index.d.ts +24 -0
- package/dist/packages/compiler/index.js +23 -0
- package/dist/packages/compiler/lib/schema.d.ts +684 -0
- package/dist/packages/compiler/lib/schema.js +361 -0
- package/dist/packages/compiler/runtime-acceptance.d.ts +9 -0
- package/dist/packages/compiler/runtime-acceptance.js +269 -0
- package/dist/packages/compiler/runtime-contracts.d.ts +2 -0
- package/dist/packages/compiler/runtime-contracts.js +48 -0
- package/dist/packages/compiler/runtime-inventory.d.ts +7 -0
- package/dist/packages/compiler/runtime-inventory.js +29 -0
- package/dist/packages/compiler/runtime-paths.d.ts +8 -0
- package/dist/packages/compiler/runtime-paths.js +26 -0
- package/dist/packages/compiler/runtime-prompt.d.ts +2 -0
- package/dist/packages/compiler/runtime-prompt.js +48 -0
- package/dist/packages/compiler/runtime-reconcile.d.ts +2 -0
- package/dist/packages/compiler/runtime-reconcile.js +193 -0
- package/dist/packages/compiler/runtime-runs.d.ts +11 -0
- package/dist/packages/compiler/runtime-runs.js +262 -0
- package/dist/packages/compiler/runtime-types.d.ts +43 -0
- package/dist/packages/compiler/runtime-types.js +1 -0
- package/dist/packages/compiler/runtime.d.ts +6 -0
- package/dist/packages/compiler/runtime.js +5 -0
- package/dist/packages/compiler/state-artifacts.d.ts +8 -0
- package/dist/packages/compiler/state-artifacts.js +13 -0
- package/dist/packages/compiler/state-health.d.ts +4 -0
- package/dist/packages/compiler/state-health.js +132 -0
- package/dist/packages/compiler/state-io.d.ts +10 -0
- package/dist/packages/compiler/state-io.js +76 -0
- package/dist/packages/compiler/state-paths.d.ts +4 -0
- package/dist/packages/compiler/state-paths.js +13 -0
- package/dist/packages/compiler/state-view.d.ts +4 -0
- package/dist/packages/compiler/state-view.js +103 -0
- package/dist/packages/compiler/state.d.ts +7 -0
- package/dist/packages/compiler/state.js +12 -0
- package/dist/packages/compiler/validate-compiled.d.ts +27 -0
- package/dist/packages/compiler/validate-compiled.js +241 -0
- package/dist/packages/compiler/validate-helpers.d.ts +12 -0
- package/dist/packages/compiler/validate-helpers.js +41 -0
- package/dist/packages/compiler/validate.d.ts +21 -0
- package/dist/packages/compiler/validate.js +249 -0
- package/dist/packages/compiler/workflow-primitives.d.ts +2 -0
- package/dist/packages/compiler/workflow-primitives.js +5 -0
- package/dist/packages/compiler/workflows.d.ts +15 -0
- package/dist/packages/compiler/workflows.js +31 -0
- package/dist/packages/project-model/compiled-paths.d.ts +40 -0
- package/dist/packages/project-model/compiled-paths.js +106 -0
- package/dist/packages/project-model/compiled-raw.d.ts +49 -0
- package/dist/packages/project-model/compiled-raw.js +102 -0
- package/dist/packages/project-model/compiled-reset.d.ts +2 -0
- package/dist/packages/project-model/compiled-reset.js +72 -0
- package/dist/packages/project-model/index.d.ts +11 -0
- package/dist/packages/project-model/index.js +10 -0
- package/dist/packages/project-model/interf-bootstrap.d.ts +3 -0
- package/dist/packages/project-model/interf-bootstrap.js +18 -0
- package/dist/packages/project-model/interf-detect.d.ts +33 -0
- package/dist/packages/project-model/interf-detect.js +176 -0
- package/dist/packages/project-model/interf-scaffold.d.ts +2 -0
- package/dist/packages/project-model/interf-scaffold.js +124 -0
- package/dist/packages/project-model/interf.d.ts +5 -0
- package/dist/packages/project-model/interf.js +4 -0
- package/dist/packages/project-model/lib/schema.d.ts +125 -0
- package/dist/packages/project-model/lib/schema.js +62 -0
- package/dist/packages/project-model/project-paths.d.ts +11 -0
- package/dist/packages/project-model/project-paths.js +32 -0
- package/dist/packages/project-model/source-config.d.ts +38 -0
- package/dist/packages/project-model/source-config.js +297 -0
- package/dist/packages/testing/index.d.ts +13 -0
- package/dist/packages/testing/index.js +10 -0
- package/dist/packages/testing/lib/schema.d.ts +261 -0
- package/dist/packages/testing/lib/schema.js +119 -0
- package/dist/packages/testing/test-execution.d.ts +14 -0
- package/dist/packages/testing/test-execution.js +525 -0
- package/dist/packages/testing/test-matrices.d.ts +90 -0
- package/dist/packages/testing/test-matrices.js +96 -0
- package/dist/packages/testing/test-paths.d.ts +12 -0
- package/dist/packages/testing/test-paths.js +59 -0
- package/dist/packages/testing/test-profile-presets.d.ts +57 -0
- package/dist/packages/testing/test-profile-presets.js +50 -0
- package/dist/packages/testing/test-sandbox.d.ts +11 -0
- package/dist/packages/testing/test-sandbox.js +105 -0
- package/dist/packages/testing/test-specs.d.ts +7 -0
- package/dist/packages/testing/test-specs.js +114 -0
- package/dist/packages/testing/test-targets.d.ts +5 -0
- package/dist/packages/testing/test-targets.js +38 -0
- package/dist/packages/testing/test-types.d.ts +16 -0
- package/dist/packages/testing/test-types.js +1 -0
- package/dist/packages/testing/test.d.ts +4 -0
- package/dist/packages/testing/test.js +3 -0
- package/dist/packages/workflow-authoring/index.d.ts +4 -0
- package/dist/packages/workflow-authoring/index.js +4 -0
- package/dist/packages/workflow-authoring/lib/workflow-edit-utils.d.ts +10 -0
- package/dist/packages/workflow-authoring/lib/workflow-edit-utils.js +39 -0
- package/dist/packages/workflow-authoring/workflow-authoring.d.ts +26 -0
- package/dist/packages/workflow-authoring/workflow-authoring.js +120 -0
- package/dist/packages/workflow-authoring/workflow-edit-session.d.ts +16 -0
- package/dist/packages/workflow-authoring/workflow-edit-session.js +57 -0
- package/dist/packages/workflow-authoring/workflow-improvement.d.ts +23 -0
- package/dist/packages/workflow-authoring/workflow-improvement.js +209 -0
- package/dist/packages/workflow-package/builtin-compiled-workflow.d.ts +38 -0
- package/dist/packages/workflow-package/builtin-compiled-workflow.js +94 -0
- package/dist/packages/workflow-package/index.d.ts +9 -0
- package/dist/packages/workflow-package/index.js +9 -0
- package/dist/packages/workflow-package/interf-workflow-package.d.ts +25 -0
- package/dist/packages/workflow-package/interf-workflow-package.js +342 -0
- package/dist/{lib/config.d.ts → packages/workflow-package/lib/package-root.d.ts} +0 -1
- package/dist/packages/workflow-package/lib/package-root.js +6 -0
- package/dist/packages/workflow-package/local-workflows.d.ts +54 -0
- package/dist/packages/workflow-package/local-workflows.js +422 -0
- package/dist/packages/workflow-package/workflow-definitions.d.ts +78 -0
- package/dist/packages/workflow-package/workflow-definitions.js +203 -0
- package/dist/packages/workflow-package/workflow-helpers.d.ts +38 -0
- package/dist/packages/workflow-package/workflow-helpers.js +167 -0
- package/dist/packages/workflow-package/workflow-review-paths.d.ts +10 -0
- package/dist/packages/workflow-package/workflow-review-paths.js +27 -0
- package/dist/packages/workflow-package/workflow-stage-policy.d.ts +5 -0
- package/dist/packages/workflow-package/workflow-stage-policy.js +31 -0
- package/dist/packages/workflow-package/workflow-stage-runner.d.ts +41 -0
- package/dist/packages/workflow-package/workflow-stage-runner.js +109 -0
- package/package.json +43 -19
- package/dist/commands/test.d.ts +0 -3
- package/dist/lib/compiled-home.d.ts +0 -5
- package/dist/lib/compiled-home.js +0 -32
- package/dist/lib/config.js +0 -9
- /package/dist/{commands → cli/commands}/dataset-selection.js +0 -0
- /package/dist/{commands → cli/commands}/default.d.ts +0 -0
- /package/dist/{commands → cli/commands}/doctor.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/reset.d.ts +0 -0
- /package/dist/{commands → cli/commands}/status.d.ts +0 -0
- /package/dist/{commands → cli/commands}/verify.d.ts +0 -0
|
@@ -1,243 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import { CODEX_NOISE_PATTERNS } from "./agent-constants.js";
|
|
4
|
-
import { buildAgentArgs, buildAgentEnv } from "./agent-args.js";
|
|
5
|
-
import { appendAgentEventLog, appendAgentStatusLog } from "./agent-logs.js";
|
|
6
|
-
import { displayAgentEvent, emitVisibleAgentText, summarizeAgentToolActivity, } from "./agent-render.js";
|
|
7
|
-
import { classifyTerminalVisibleStatus, extractAgentFailureStatus, hasAgentStalled, } from "./agent-status.js";
|
|
8
|
-
const STOP_SIGNAL_GRACE_MS = 1500;
|
|
9
|
-
export function spawnAgent(agent, dirPath, prompt, options = {}) {
|
|
10
|
-
return new Promise((resolve) => {
|
|
11
|
-
const args = buildAgentArgs(agent, prompt, options.executionProfile);
|
|
12
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
13
|
-
type: "spawn",
|
|
14
|
-
command: agent.command,
|
|
15
|
-
args,
|
|
16
|
-
cwd: dirPath,
|
|
17
|
-
});
|
|
18
|
-
const launchLine = `Launching ${agent.displayName}...`;
|
|
19
|
-
console.log(chalk.dim(` ${launchLine}`));
|
|
20
|
-
appendAgentStatusLog(options.statusLogPath, launchLine);
|
|
21
|
-
const proc = spawn(agent.command, args, {
|
|
22
|
-
cwd: dirPath,
|
|
23
|
-
env: buildAgentEnv(agent),
|
|
24
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
25
|
-
});
|
|
26
|
-
const timeoutMs = options.executionProfile?.timeoutMs ?? null;
|
|
27
|
-
let buffer = "";
|
|
28
|
-
let stderrBuffer = "";
|
|
29
|
-
let lastVisibleOutputAt = Date.now();
|
|
30
|
-
let lastActivityAt = Date.now();
|
|
31
|
-
let lastHeartbeatAt = 0;
|
|
32
|
-
let sawRawOutput = false;
|
|
33
|
-
let sawVisibleEvent = false;
|
|
34
|
-
let timedOut = false;
|
|
35
|
-
let completionSatisfied = false;
|
|
36
|
-
let failureStatus = null;
|
|
37
|
-
let terminalSignalSent = false;
|
|
38
|
-
let lastToolActivity = null;
|
|
39
|
-
let stopPhase = "running";
|
|
40
|
-
let stopTimer = null;
|
|
41
|
-
const lastVisibleText = { current: null };
|
|
42
|
-
const clearStopTimer = () => {
|
|
43
|
-
if (!stopTimer)
|
|
44
|
-
return;
|
|
45
|
-
clearTimeout(stopTimer);
|
|
46
|
-
stopTimer = null;
|
|
47
|
-
};
|
|
48
|
-
const requestProcessStop = (signal = "SIGINT") => {
|
|
49
|
-
if (proc.exitCode != null)
|
|
50
|
-
return;
|
|
51
|
-
if (signal === "SIGINT") {
|
|
52
|
-
if (stopPhase !== "running")
|
|
53
|
-
return;
|
|
54
|
-
stopPhase = "sigint";
|
|
55
|
-
}
|
|
56
|
-
else if (signal === "SIGTERM") {
|
|
57
|
-
if (stopPhase === "sigterm" || stopPhase === "sigkill")
|
|
58
|
-
return;
|
|
59
|
-
stopPhase = "sigterm";
|
|
60
|
-
}
|
|
61
|
-
else if (signal === "SIGKILL") {
|
|
62
|
-
if (stopPhase === "sigkill")
|
|
63
|
-
return;
|
|
64
|
-
stopPhase = "sigkill";
|
|
65
|
-
}
|
|
66
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
67
|
-
type: "signal",
|
|
68
|
-
signal,
|
|
69
|
-
});
|
|
70
|
-
proc.kill(signal);
|
|
71
|
-
clearStopTimer();
|
|
72
|
-
if (signal === "SIGKILL")
|
|
73
|
-
return;
|
|
74
|
-
stopTimer = setTimeout(() => {
|
|
75
|
-
if (proc.exitCode != null)
|
|
76
|
-
return;
|
|
77
|
-
requestProcessStop(signal === "SIGINT" ? "SIGTERM" : "SIGKILL");
|
|
78
|
-
}, STOP_SIGNAL_GRACE_MS);
|
|
79
|
-
};
|
|
80
|
-
const heartbeat = setInterval(() => {
|
|
81
|
-
const now = Date.now();
|
|
82
|
-
const minQuietMs = sawVisibleEvent ? 15000 : 8000;
|
|
83
|
-
const minHeartbeatGapMs = sawVisibleEvent ? 30000 : 12000;
|
|
84
|
-
if (now - lastVisibleOutputAt < minQuietMs)
|
|
85
|
-
return;
|
|
86
|
-
if (now - lastHeartbeatAt < minHeartbeatGapMs)
|
|
87
|
-
return;
|
|
88
|
-
lastHeartbeatAt = now;
|
|
89
|
-
const seconds = Math.floor((now - lastVisibleOutputAt) / 1000);
|
|
90
|
-
const activitySuffix = lastToolActivity ? ` while ${lastToolActivity}` : "";
|
|
91
|
-
const label = sawVisibleEvent
|
|
92
|
-
? `${agent.displayName} is still running${activitySuffix}... (${seconds}s since last output)`
|
|
93
|
-
: sawRawOutput
|
|
94
|
-
? `${agent.displayName} is active${activitySuffix}, but has not emitted visible progress yet... (${seconds}s)`
|
|
95
|
-
: `${agent.displayName} started, but has not emitted visible progress yet... (${seconds}s)`;
|
|
96
|
-
console.log(chalk.dim(` ${label}`));
|
|
97
|
-
appendAgentStatusLog(options.statusLogPath, label);
|
|
98
|
-
}, 5000);
|
|
99
|
-
const forwardSignal = () => {
|
|
100
|
-
requestProcessStop("SIGINT");
|
|
101
|
-
};
|
|
102
|
-
const maybeInterruptAfterTerminalStatus = () => {
|
|
103
|
-
if (options.completionCheck)
|
|
104
|
-
return;
|
|
105
|
-
if (terminalSignalSent || !lastVisibleText.terminalStatus)
|
|
106
|
-
return;
|
|
107
|
-
terminalSignalSent = true;
|
|
108
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
109
|
-
type: "terminal-status",
|
|
110
|
-
status: lastVisibleText.terminalStatus,
|
|
111
|
-
});
|
|
112
|
-
const terminalKind = classifyTerminalVisibleStatus(lastVisibleText.terminalStatus);
|
|
113
|
-
if (terminalKind === "done") {
|
|
114
|
-
completionSatisfied = true;
|
|
115
|
-
}
|
|
116
|
-
else if (terminalKind === "failure") {
|
|
117
|
-
failureStatus ||= lastVisibleText.terminalStatus;
|
|
118
|
-
}
|
|
119
|
-
requestProcessStop("SIGINT");
|
|
120
|
-
};
|
|
121
|
-
const timeout = typeof timeoutMs === "number" && timeoutMs > 0
|
|
122
|
-
? setInterval(() => {
|
|
123
|
-
const now = Date.now();
|
|
124
|
-
const idleMs = now - lastActivityAt;
|
|
125
|
-
if (!hasAgentStalled(lastActivityAt, now, timeoutMs))
|
|
126
|
-
return;
|
|
127
|
-
timedOut = true;
|
|
128
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
129
|
-
type: "stall-timeout",
|
|
130
|
-
timeout_ms: timeoutMs,
|
|
131
|
-
idle_ms: idleMs,
|
|
132
|
-
});
|
|
133
|
-
console.log(chalk.red(` ${agent.displayName} stalled for ${Math.round(idleMs / 1000)}s without agent output.`));
|
|
134
|
-
requestProcessStop("SIGINT");
|
|
135
|
-
}, 2000)
|
|
136
|
-
: null;
|
|
137
|
-
const completionPoll = options.completionCheck
|
|
138
|
-
? setInterval(() => {
|
|
139
|
-
if (timedOut || completionSatisfied)
|
|
140
|
-
return;
|
|
141
|
-
try {
|
|
142
|
-
if (!options.completionCheck?.())
|
|
143
|
-
return;
|
|
144
|
-
completionSatisfied = true;
|
|
145
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
146
|
-
type: "completion-check-satisfied",
|
|
147
|
-
});
|
|
148
|
-
requestProcessStop("SIGINT");
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
// Ignore completion check failures and let the agent continue.
|
|
152
|
-
}
|
|
153
|
-
}, 1000)
|
|
154
|
-
: null;
|
|
155
|
-
process.once("SIGINT", forwardSignal);
|
|
156
|
-
proc.stdout?.on("data", (chunk) => {
|
|
157
|
-
sawRawOutput = true;
|
|
158
|
-
lastActivityAt = Date.now();
|
|
159
|
-
buffer += chunk.toString();
|
|
160
|
-
const lines = buffer.split("\n");
|
|
161
|
-
buffer = lines.pop() ?? "";
|
|
162
|
-
for (const line of lines) {
|
|
163
|
-
if (!line.trim())
|
|
164
|
-
continue;
|
|
165
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
166
|
-
type: "stdout",
|
|
167
|
-
line,
|
|
168
|
-
});
|
|
169
|
-
try {
|
|
170
|
-
const event = JSON.parse(line);
|
|
171
|
-
const toolActivity = summarizeAgentToolActivity(event);
|
|
172
|
-
if (toolActivity) {
|
|
173
|
-
lastToolActivity = toolActivity;
|
|
174
|
-
}
|
|
175
|
-
failureStatus ||= extractAgentFailureStatus(event);
|
|
176
|
-
if (displayAgentEvent(event, options.statusLogPath, lastVisibleText)) {
|
|
177
|
-
sawVisibleEvent = true;
|
|
178
|
-
lastVisibleOutputAt = Date.now();
|
|
179
|
-
}
|
|
180
|
-
maybeInterruptAfterTerminalStatus();
|
|
181
|
-
}
|
|
182
|
-
catch {
|
|
183
|
-
if (emitVisibleAgentText(line, options.statusLogPath, lastVisibleText)) {
|
|
184
|
-
sawVisibleEvent = true;
|
|
185
|
-
lastVisibleOutputAt = Date.now();
|
|
186
|
-
}
|
|
187
|
-
maybeInterruptAfterTerminalStatus();
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
proc.stderr?.on("data", (chunk) => {
|
|
192
|
-
lastActivityAt = Date.now();
|
|
193
|
-
stderrBuffer += chunk.toString();
|
|
194
|
-
const lines = stderrBuffer.split("\n");
|
|
195
|
-
stderrBuffer = lines.pop() ?? "";
|
|
196
|
-
for (const line of lines) {
|
|
197
|
-
if (!line.trim())
|
|
198
|
-
continue;
|
|
199
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
200
|
-
type: "stderr",
|
|
201
|
-
line,
|
|
202
|
-
});
|
|
203
|
-
if (CODEX_NOISE_PATTERNS.some((pattern) => pattern.test(line)))
|
|
204
|
-
continue;
|
|
205
|
-
sawRawOutput = true;
|
|
206
|
-
lastVisibleOutputAt = Date.now();
|
|
207
|
-
process.stderr.write(`${line}\n`);
|
|
208
|
-
sawVisibleEvent = true;
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
proc.on("close", (code) => {
|
|
212
|
-
clearInterval(heartbeat);
|
|
213
|
-
if (timeout)
|
|
214
|
-
clearInterval(timeout);
|
|
215
|
-
if (completionPoll)
|
|
216
|
-
clearInterval(completionPoll);
|
|
217
|
-
clearStopTimer();
|
|
218
|
-
process.removeListener("SIGINT", forwardSignal);
|
|
219
|
-
const finalCode = timedOut ? 124 : failureStatus ? 1 : completionSatisfied ? 0 : (code ?? 0);
|
|
220
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
221
|
-
type: "close",
|
|
222
|
-
code: finalCode,
|
|
223
|
-
failure_status: failureStatus,
|
|
224
|
-
});
|
|
225
|
-
resolve(finalCode);
|
|
226
|
-
});
|
|
227
|
-
proc.on("error", () => {
|
|
228
|
-
clearInterval(heartbeat);
|
|
229
|
-
if (timeout)
|
|
230
|
-
clearInterval(timeout);
|
|
231
|
-
if (completionPoll)
|
|
232
|
-
clearInterval(completionPoll);
|
|
233
|
-
clearStopTimer();
|
|
234
|
-
process.removeListener("SIGINT", forwardSignal);
|
|
235
|
-
appendAgentEventLog(options.eventLogPath, {
|
|
236
|
-
type: "error",
|
|
237
|
-
message: `Failed to start ${agent.displayName}`,
|
|
238
|
-
});
|
|
239
|
-
console.log(chalk.red(` Failed to start ${agent.displayName}.`));
|
|
240
|
-
resolve(1);
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
}
|
|
1
|
+
export * from "../packages/agents/lib/execution.js";
|
package/dist/lib/agent-logs.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export declare function appendAgentStatusLog(statusLogPath: string | null | undefined, text: string): void;
|
|
1
|
+
export * from "../packages/agents/lib/logs.js";
|
package/dist/lib/agent-logs.js
CHANGED
|
@@ -1,17 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { dirname } from "node:path";
|
|
3
|
-
export function appendAgentEventLog(eventLogPath, event) {
|
|
4
|
-
if (!eventLogPath)
|
|
5
|
-
return;
|
|
6
|
-
mkdirSync(dirname(eventLogPath), { recursive: true });
|
|
7
|
-
appendFileSync(eventLogPath, `${JSON.stringify({
|
|
8
|
-
timestamp: new Date().toISOString(),
|
|
9
|
-
...event,
|
|
10
|
-
})}\n`);
|
|
11
|
-
}
|
|
12
|
-
export function appendAgentStatusLog(statusLogPath, text) {
|
|
13
|
-
if (!statusLogPath)
|
|
14
|
-
return;
|
|
15
|
-
mkdirSync(dirname(statusLogPath), { recursive: true });
|
|
16
|
-
appendFileSync(statusLogPath, `${new Date().toISOString()} ${text}\n`);
|
|
17
|
-
}
|
|
1
|
+
export * from "../packages/agents/lib/logs.js";
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function buildAgentPreflightPrompt(): string;
|
|
3
|
-
export declare function runAgentPreflight(agent: Agent, options?: AgentPreflightOptions): AgentPreflightResult;
|
|
4
|
-
export declare function ensureAgentAutomatedRunReady(agent: Agent, options?: {
|
|
5
|
-
force?: boolean;
|
|
6
|
-
runPreflight?: typeof runAgentPreflight;
|
|
7
|
-
}): AgentAutomationReadiness;
|
|
1
|
+
export * from "../packages/agents/lib/preflight.js";
|
|
@@ -1,77 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { spawnSync } from "node:child_process";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import { join } from "node:path";
|
|
5
|
-
import { CODEX_NOISE_PATTERNS } from "./agent-constants.js";
|
|
6
|
-
import { buildAgentArgs, buildAgentEnv } from "./agent-args.js";
|
|
7
|
-
const successfulPreflightAgents = new Set();
|
|
8
|
-
export function buildAgentPreflightPrompt() {
|
|
9
|
-
return [
|
|
10
|
-
"Interf doctor preflight.",
|
|
11
|
-
'Reply with exactly one line: "DONE: Interf doctor ok".',
|
|
12
|
-
"Do not use tools.",
|
|
13
|
-
"Do not read files.",
|
|
14
|
-
"Do not write files.",
|
|
15
|
-
].join(" ");
|
|
16
|
-
}
|
|
17
|
-
export function runAgentPreflight(agent, options = {}) {
|
|
18
|
-
const timeoutMs = options.timeoutMs ?? 60000;
|
|
19
|
-
const spawnSyncImpl = options.spawnSyncImpl ?? spawnSync;
|
|
20
|
-
const dirPath = mkdtempSync(join(tmpdir(), "interf-doctor-"));
|
|
21
|
-
try {
|
|
22
|
-
const result = spawnSyncImpl(agent.command, buildAgentArgs(agent, buildAgentPreflightPrompt()), {
|
|
23
|
-
cwd: dirPath,
|
|
24
|
-
encoding: "utf8",
|
|
25
|
-
env: buildAgentEnv(agent),
|
|
26
|
-
timeout: timeoutMs,
|
|
27
|
-
});
|
|
28
|
-
const stdout = typeof result.stdout === "string" ? result.stdout.trim() : "";
|
|
29
|
-
const stderr = sanitizeAgentStderr(typeof result.stderr === "string" ? result.stderr : "");
|
|
30
|
-
const timedOut = result.error?.name === "Error" && result.error.message.includes("timed out");
|
|
31
|
-
if (result.error) {
|
|
32
|
-
return {
|
|
33
|
-
ok: false,
|
|
34
|
-
code: typeof result.status === "number" ? result.status : null,
|
|
35
|
-
timedOut,
|
|
36
|
-
stdout,
|
|
37
|
-
stderr,
|
|
38
|
-
error: result.error.message,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
return {
|
|
42
|
-
ok: result.status === 0,
|
|
43
|
-
code: typeof result.status === "number" ? result.status : null,
|
|
44
|
-
timedOut: false,
|
|
45
|
-
stdout,
|
|
46
|
-
stderr,
|
|
47
|
-
error: result.status === 0 ? null : `Exited with code ${result.status ?? "unknown"}`,
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
rmSync(dirPath, { recursive: true, force: true });
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export function ensureAgentAutomatedRunReady(agent, options = {}) {
|
|
55
|
-
if (!options.force && successfulPreflightAgents.has(agent.name)) {
|
|
56
|
-
return { ok: true };
|
|
57
|
-
}
|
|
58
|
-
const runPreflight = options.runPreflight ?? runAgentPreflight;
|
|
59
|
-
const result = runPreflight(agent);
|
|
60
|
-
if (!result.ok) {
|
|
61
|
-
const details = [result.error, result.stderr].filter(Boolean).join(" ");
|
|
62
|
-
return {
|
|
63
|
-
ok: false,
|
|
64
|
-
error: `${agent.displayName} failed Interf executor preflight. Run \`interf doctor --live\` for details.${details ? ` ${details}` : ""}`,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
successfulPreflightAgents.add(agent.name);
|
|
68
|
-
return { ok: true };
|
|
69
|
-
}
|
|
70
|
-
function sanitizeAgentStderr(stderr) {
|
|
71
|
-
return stderr
|
|
72
|
-
.split("\n")
|
|
73
|
-
.filter((line) => line.trim().length > 0)
|
|
74
|
-
.filter((line) => !CODEX_NOISE_PATTERNS.some((pattern) => pattern.test(line)))
|
|
75
|
-
.join("\n")
|
|
76
|
-
.trim();
|
|
77
|
-
}
|
|
1
|
+
export * from "../packages/agents/lib/preflight.js";
|
|
@@ -1,8 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
current: string | null;
|
|
3
|
-
terminated?: boolean;
|
|
4
|
-
terminalStatus?: string | null;
|
|
5
|
-
}
|
|
6
|
-
export declare function emitVisibleAgentText(text: string, statusLogPath: string | null | undefined, lastVisibleText?: VisibleTextState): boolean;
|
|
7
|
-
export declare function displayAgentEvent(event: Record<string, unknown>, statusLogPath: string | null | undefined, lastVisibleText: VisibleTextState): boolean;
|
|
8
|
-
export declare function summarizeAgentToolActivity(event: Record<string, unknown>): string | null;
|
|
1
|
+
export * from "../packages/agents/lib/render.js";
|
package/dist/lib/agent-render.js
CHANGED
|
@@ -1,218 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import { SHOW_AGENT_TOOL_EVENTS, VISIBLE_STATUS_PREFIXES, } from "./agent-constants.js";
|
|
4
|
-
import { appendAgentStatusLog } from "./agent-logs.js";
|
|
5
|
-
export function emitVisibleAgentText(text, statusLogPath, lastVisibleText) {
|
|
6
|
-
if (lastVisibleText?.terminated) {
|
|
7
|
-
return false;
|
|
8
|
-
}
|
|
9
|
-
let displayed = false;
|
|
10
|
-
const lines = text
|
|
11
|
-
.split(/\r?\n/)
|
|
12
|
-
.map((line) => line.trim())
|
|
13
|
-
.filter((line) => shouldDisplayAgentText(line));
|
|
14
|
-
for (const line of lines) {
|
|
15
|
-
if (lastVisibleText && lastVisibleText.current === line) {
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
console.log(chalk.dim(` ${line}`));
|
|
19
|
-
appendAgentStatusLog(statusLogPath, line);
|
|
20
|
-
if (lastVisibleText) {
|
|
21
|
-
lastVisibleText.current = line;
|
|
22
|
-
if (isTerminalVisibleStatus(line)) {
|
|
23
|
-
lastVisibleText.terminated = true;
|
|
24
|
-
lastVisibleText.terminalStatus = line;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
displayed = true;
|
|
28
|
-
}
|
|
29
|
-
return displayed;
|
|
30
|
-
}
|
|
31
|
-
export function displayAgentEvent(event, statusLogPath, lastVisibleText) {
|
|
32
|
-
const type = event.type;
|
|
33
|
-
let displayed = false;
|
|
34
|
-
if (type === "tool_use" && SHOW_AGENT_TOOL_EVENTS) {
|
|
35
|
-
const name = event.name ?? "unknown";
|
|
36
|
-
const input = event.input;
|
|
37
|
-
let detail = "";
|
|
38
|
-
if (input) {
|
|
39
|
-
const path = (input.file_path ?? input.path ?? input.pattern ?? input.command ?? "");
|
|
40
|
-
if (path)
|
|
41
|
-
detail = chalk.dim(` ${path.slice(0, 80)}`);
|
|
42
|
-
}
|
|
43
|
-
console.log(chalk.blue(` → ${name}`) + detail);
|
|
44
|
-
displayed = true;
|
|
45
|
-
}
|
|
46
|
-
if (type === "assistant") {
|
|
47
|
-
const msg = event.message;
|
|
48
|
-
const content = msg?.content;
|
|
49
|
-
if (Array.isArray(content)) {
|
|
50
|
-
for (const block of content) {
|
|
51
|
-
if (block.type === "text" && block.text) {
|
|
52
|
-
const text = block.text.trim();
|
|
53
|
-
displayed = emitVisibleAgentText(text, statusLogPath, lastVisibleText) || displayed;
|
|
54
|
-
}
|
|
55
|
-
if (block.type === "tool_use" && SHOW_AGENT_TOOL_EVENTS) {
|
|
56
|
-
const name = block.name;
|
|
57
|
-
const input = block.input;
|
|
58
|
-
let detail = "";
|
|
59
|
-
if (input) {
|
|
60
|
-
const path = (input.file_path ?? input.path ?? input.pattern ?? input.command ?? "");
|
|
61
|
-
if (path)
|
|
62
|
-
detail = chalk.dim(` ${path.slice(0, 80)}`);
|
|
63
|
-
}
|
|
64
|
-
console.log(chalk.blue(` → ${name}`) + detail);
|
|
65
|
-
displayed = true;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (type === "item.started" || type === "item.completed") {
|
|
71
|
-
const item = event.item;
|
|
72
|
-
if (item) {
|
|
73
|
-
displayed = displayItemEvent(type, item, statusLogPath, lastVisibleText) || displayed;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (type === "result") {
|
|
77
|
-
const result = event.result;
|
|
78
|
-
const subtype = event.subtype;
|
|
79
|
-
if (result && subtype !== "tool_result") {
|
|
80
|
-
const lines = result.split("\n");
|
|
81
|
-
for (const line of lines) {
|
|
82
|
-
displayed = emitVisibleAgentText(line, statusLogPath, lastVisibleText) || displayed;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
const message = pickString(event.message) ??
|
|
87
|
-
pickString(event.text) ??
|
|
88
|
-
pickString(event.content) ??
|
|
89
|
-
pickString(event.output) ??
|
|
90
|
-
pickString(event.summary);
|
|
91
|
-
if (message && type !== "assistant" && type !== "result") {
|
|
92
|
-
const text = message.trim();
|
|
93
|
-
displayed = emitVisibleAgentText(text, statusLogPath, lastVisibleText) || displayed;
|
|
94
|
-
}
|
|
95
|
-
return displayed;
|
|
96
|
-
}
|
|
97
|
-
export function summarizeAgentToolActivity(event) {
|
|
98
|
-
const type = event.type;
|
|
99
|
-
if (type === "assistant") {
|
|
100
|
-
const message = event.message;
|
|
101
|
-
const content = message?.content;
|
|
102
|
-
if (Array.isArray(content)) {
|
|
103
|
-
for (const block of content) {
|
|
104
|
-
if (block.type === "tool_use") {
|
|
105
|
-
return summarizeToolUse(block.name, block.input);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (type === "item.started" || type === "item.completed") {
|
|
111
|
-
const item = event.item;
|
|
112
|
-
if (item?.type === "tool_use") {
|
|
113
|
-
return summarizeToolUse(item.name, item.input);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
function pickString(value) {
|
|
119
|
-
if (typeof value === "string")
|
|
120
|
-
return value;
|
|
121
|
-
if (!Array.isArray(value))
|
|
122
|
-
return null;
|
|
123
|
-
for (const entry of value) {
|
|
124
|
-
if (typeof entry === "string")
|
|
125
|
-
return entry;
|
|
126
|
-
if (entry && typeof entry === "object" && "text" in entry && typeof entry.text === "string") {
|
|
127
|
-
return entry.text;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
return null;
|
|
131
|
-
}
|
|
132
|
-
function displayItemEvent(type, item, statusLogPath, lastVisibleText) {
|
|
133
|
-
const itemType = item.type;
|
|
134
|
-
if (itemType === "agent_message") {
|
|
135
|
-
const text = item.text?.trim();
|
|
136
|
-
return text ? emitVisibleAgentText(text, statusLogPath, lastVisibleText) : false;
|
|
137
|
-
}
|
|
138
|
-
if (itemType === "command_execution" && type === "item.completed") {
|
|
139
|
-
const output = item.aggregated_output?.trim();
|
|
140
|
-
if (output) {
|
|
141
|
-
return emitVisibleAgentText(output, statusLogPath, lastVisibleText);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
if (!SHOW_AGENT_TOOL_EVENTS) {
|
|
145
|
-
return false;
|
|
146
|
-
}
|
|
147
|
-
const title = pickString(item.title) ?? pickString(item.name);
|
|
148
|
-
const input = item.input;
|
|
149
|
-
const detail = input ? describeInput(input) : "";
|
|
150
|
-
if (type === "item.started" && title) {
|
|
151
|
-
console.log(chalk.blue(` → ${title}`) + detail);
|
|
152
|
-
return true;
|
|
153
|
-
}
|
|
154
|
-
if (type === "item.completed" && title) {
|
|
155
|
-
console.log(chalk.blue(` → ${title}`) + detail);
|
|
156
|
-
return true;
|
|
157
|
-
}
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
function describeInput(input) {
|
|
161
|
-
const path = (input.file_path ?? input.path ?? input.pattern ?? input.command ?? "");
|
|
162
|
-
return path ? chalk.dim(` ${path.slice(0, 80)}`) : "";
|
|
163
|
-
}
|
|
164
|
-
function summarizeToolUse(name, input) {
|
|
165
|
-
if (!name)
|
|
166
|
-
return null;
|
|
167
|
-
const target = summarizeToolTarget(input);
|
|
168
|
-
switch (name) {
|
|
169
|
-
case "Read":
|
|
170
|
-
return target ? `reading ${target}` : "reading compiled files";
|
|
171
|
-
case "Write":
|
|
172
|
-
return target ? `writing ${target}` : "writing compiled files";
|
|
173
|
-
case "Edit":
|
|
174
|
-
return target ? `editing ${target}` : "editing compiled files";
|
|
175
|
-
case "Glob":
|
|
176
|
-
case "Grep":
|
|
177
|
-
return target ? `${name.toLowerCase()} on ${target}` : `${name.toLowerCase()}ing compiled files`;
|
|
178
|
-
case "Bash":
|
|
179
|
-
return target ? `running ${target}` : "running a local helper";
|
|
180
|
-
default:
|
|
181
|
-
return target ? `${name} on ${target}` : name;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
function summarizeToolTarget(input) {
|
|
185
|
-
if (!input)
|
|
186
|
-
return null;
|
|
187
|
-
const raw = (input.file_path ?? input.path ?? input.pattern ?? input.command ?? input.notebook_path);
|
|
188
|
-
if (!raw || raw.length === 0)
|
|
189
|
-
return null;
|
|
190
|
-
if (raw.includes("\n")) {
|
|
191
|
-
const commandName = summarizeMultilineCommand(raw);
|
|
192
|
-
return commandName ? `${commandName} helper` : "a multi-line local helper";
|
|
193
|
-
}
|
|
194
|
-
return basename(raw);
|
|
195
|
-
}
|
|
196
|
-
function summarizeMultilineCommand(command) {
|
|
197
|
-
const lines = command
|
|
198
|
-
.split("\n")
|
|
199
|
-
.map((line) => line.trim())
|
|
200
|
-
.filter((line) => line.length > 0 && !line.startsWith("#"));
|
|
201
|
-
for (const line of lines) {
|
|
202
|
-
const token = line.split(/\s+/)[0];
|
|
203
|
-
if (!token)
|
|
204
|
-
continue;
|
|
205
|
-
if (token.includes("="))
|
|
206
|
-
continue;
|
|
207
|
-
return basename(token);
|
|
208
|
-
}
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
function shouldDisplayAgentText(text) {
|
|
212
|
-
if (text.length === 0 || text.length >= 300)
|
|
213
|
-
return false;
|
|
214
|
-
return VISIBLE_STATUS_PREFIXES.some((prefix) => text.startsWith(prefix));
|
|
215
|
-
}
|
|
216
|
-
function isTerminalVisibleStatus(text) {
|
|
217
|
-
return text.startsWith("DONE:") || text.startsWith("BLOCKED:") || text.startsWith("ERROR:");
|
|
218
|
-
}
|
|
1
|
+
export * from "../packages/agents/lib/render.js";
|
|
@@ -1,69 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export interface NativeStageDefinition {
|
|
3
|
-
id: string;
|
|
4
|
-
label: string;
|
|
5
|
-
description: string;
|
|
6
|
-
contractType: RuntimeContractType;
|
|
7
|
-
skillDir: string;
|
|
8
|
-
reads: WorkflowZoneId[];
|
|
9
|
-
writes: WorkflowZoneId[];
|
|
10
|
-
}
|
|
11
|
-
export declare function writeNativeAgentSurface(rootPath: string, agentsContent: string, skillName: string, skillContent: string): boolean;
|
|
12
|
-
export declare function renderCompiledAgents(compiledPath: string, name: string, workflowId: string, about?: string, options?: {
|
|
13
|
-
workflowOriginSelected?: string | null;
|
|
14
|
-
workflowLocalDraft?: boolean;
|
|
15
|
-
}): string;
|
|
16
|
-
export declare function renderCompiledQuerySkill(): string;
|
|
17
|
-
export declare function syncStageExecutionShellWrites(compiledPath: string, shellRoot: string, stage: NativeStageDefinition, writeArtifacts?: readonly string[]): void;
|
|
18
|
-
export declare function renderClaudeBootstrap(content: string): string;
|
|
19
|
-
export interface WorkflowAuthoringPreviewInfo {
|
|
20
|
-
compiledPath: string;
|
|
21
|
-
compileResult: {
|
|
22
|
-
ok: boolean;
|
|
23
|
-
failedStage: string | null;
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
export declare function createWorkflowAuthoringShell(options: {
|
|
27
|
-
workflowPath: string;
|
|
28
|
-
workflowId: string;
|
|
29
|
-
label: string;
|
|
30
|
-
baseWorkflowId: string;
|
|
31
|
-
datasetPath: string;
|
|
32
|
-
taskPrompt: string;
|
|
33
|
-
checks: SourceTruthCheck[];
|
|
34
|
-
preview?: WorkflowAuthoringPreviewInfo | null;
|
|
35
|
-
}): {
|
|
36
|
-
rootPath: string;
|
|
37
|
-
workflowBeforePath: string;
|
|
38
|
-
workflowAfterPath: string;
|
|
39
|
-
promptLogPath: string;
|
|
40
|
-
eventLogPath: string;
|
|
41
|
-
statusLogPath: string;
|
|
42
|
-
};
|
|
43
|
-
export declare function pruneStageExecutionShells(compiledPath: string): void;
|
|
44
|
-
export declare function projectCompiledQueryShell(compiledPath: string, compiledName: string, workflowId: string, about?: string, options?: {
|
|
45
|
-
workflowOriginSelected?: string | null;
|
|
46
|
-
workflowLocalDraft?: boolean;
|
|
47
|
-
}): boolean;
|
|
48
|
-
export declare function projectRawTestQueryShell(rootPath: string): boolean;
|
|
49
|
-
export declare function createStageExecutionShell(compiledPath: string, compiledName: string, workflowId: string, stage: NativeStageDefinition, writeArtifacts?: readonly string[]): {
|
|
50
|
-
rootPath: string;
|
|
51
|
-
};
|
|
52
|
-
export declare function freezeStageExecutionShell(rootPath: string): string | null;
|
|
53
|
-
export declare function createWorkflowImprovementShell(options: {
|
|
54
|
-
compiledPath: string;
|
|
55
|
-
compiledName: string;
|
|
56
|
-
workflowId: string;
|
|
57
|
-
runId: string;
|
|
58
|
-
loopIndex: number;
|
|
59
|
-
context: WorkflowImprovementContext;
|
|
60
|
-
}): {
|
|
61
|
-
rootPath: string;
|
|
62
|
-
loopRootPath: string;
|
|
63
|
-
workflowBeforePath: string;
|
|
64
|
-
workflowAfterPath: string;
|
|
65
|
-
promptLogPath: string;
|
|
66
|
-
eventLogPath: string;
|
|
67
|
-
statusLogPath: string;
|
|
68
|
-
};
|
|
69
|
-
export declare function freezeWorkflowImprovementShell(rootPath: string): string | null;
|
|
1
|
+
export * from "../packages/agents/lib/shells.js";
|