@gajae-code/coding-agent 0.11.11 → 0.12.1
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/CHANGELOG.md +131 -4
- package/dist/types/async/job-manager.d.ts +17 -3
- package/dist/types/cli/read-cli.d.ts +1 -0
- package/dist/types/commands/deep-interview.d.ts +9 -0
- package/dist/types/commands/harness.d.ts +22 -0
- package/dist/types/commands/read.d.ts +6 -0
- package/dist/types/config/model-registry.d.ts +4 -0
- package/dist/types/config/provider-auth-health.d.ts +14 -0
- package/dist/types/config/provider-ranking.d.ts +59 -0
- package/dist/types/config/settings-schema.d.ts +83 -1
- package/dist/types/config/settings.d.ts +2 -0
- package/dist/types/exa/mcp-client.d.ts +10 -1
- package/dist/types/exec/bash-executor.d.ts +45 -12
- package/dist/types/extensibility/extensions/types.d.ts +38 -4
- package/dist/types/extensibility/gjc-plugins/index.d.ts +12 -2
- package/dist/types/extensibility/gjc-plugins/installer.d.ts +63 -7
- package/dist/types/extensibility/gjc-plugins/lifecycle-reconciliation.d.ts +55 -0
- package/dist/types/extensibility/gjc-plugins/lifecycle.d.ts +64 -0
- package/dist/types/extensibility/gjc-plugins/runtime-quarantine.d.ts +67 -0
- package/dist/types/extensibility/gjc-plugins/session-validation.d.ts +3 -1
- package/dist/types/extensibility/gjc-plugins/types.d.ts +124 -0
- package/dist/types/extensibility/shared-events.d.ts +6 -0
- package/dist/types/gjc-runtime/deep-interview-ambiguity.d.ts +5 -12
- package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +17 -32
- package/dist/types/gjc-runtime/deep-interview-stage.d.ts +37 -0
- package/dist/types/gjc-runtime/deep-interview-state.d.ts +4 -135
- package/dist/types/gjc-runtime/gc-runtime.d.ts +1 -1
- package/dist/types/gjc-runtime/launch-tmux.d.ts +1 -0
- package/dist/types/gjc-runtime/memory-guard-owner-claims.d.ts +47 -0
- package/dist/types/gjc-runtime/ralplan-runtime.d.ts +70 -1
- package/dist/types/gjc-runtime/state-writer.d.ts +5 -46
- package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
- package/dist/types/gjc-runtime/team-runtime.d.ts +27 -1
- package/dist/types/gjc-runtime/team-store.d.ts +12 -0
- package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +43 -0
- package/dist/types/gjc-runtime/team-worker-memory-guard.d.ts +92 -0
- package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +17 -0
- package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +8 -0
- package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +31 -80
- package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -5
- package/dist/types/internal-urls/local-root-gc.d.ts +2 -0
- package/dist/types/main.d.ts +1 -1
- package/dist/types/memories/index.d.ts +2 -0
- package/dist/types/modes/acp/acp-agent.d.ts +10 -19
- package/dist/types/modes/components/assistant-message.d.ts +3 -1
- package/dist/types/modes/components/gjc-bundle-settings.d.ts +34 -0
- package/dist/types/modes/components/irc-sidebar.d.ts +41 -0
- package/dist/types/modes/components/notifications-settings-editor.d.ts +1 -0
- package/dist/types/modes/components/read-tool-group.d.ts +4 -4
- package/dist/types/modes/components/session-observer-overlay.d.ts +22 -0
- package/dist/types/modes/components/settings-selector.d.ts +11 -0
- package/dist/types/modes/components/status-line/gh.d.ts +5 -0
- package/dist/types/modes/components/tool-execution.d.ts +8 -0
- package/dist/types/modes/components/transcript-viewer-overlay.d.ts +18 -1
- package/dist/types/modes/controllers/event-controller.d.ts +3 -0
- package/dist/types/modes/interactive-mode.d.ts +2 -0
- package/dist/types/modes/irc-observation-ledger.d.ts +17 -1
- package/dist/types/modes/types.d.ts +2 -0
- package/dist/types/modes/utils/ui-helpers.d.ts +16 -0
- package/dist/types/reminders/star-reminder.d.ts +3 -13
- package/dist/types/runtime-mcp/manager.d.ts +1 -0
- package/dist/types/runtime-mcp/smithery-auth.d.ts +5 -0
- package/dist/types/sdk/acp/adapter.d.ts +3 -1
- package/dist/types/sdk/broker/lifecycle.d.ts +5 -0
- package/dist/types/sdk/broker/transport.d.ts +2 -0
- package/dist/types/sdk/bus/attachment-registry.d.ts +1 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +4 -1
- package/dist/types/sdk/bus/config.d.ts +6 -2
- package/dist/types/sdk/bus/control-drain-lease.d.ts +52 -0
- package/dist/types/sdk/bus/index.d.ts +44 -1
- package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +44 -0
- package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
- package/dist/types/sdk/bus/prompt-reconciliation.d.ts +2 -1
- package/dist/types/sdk/bus/reconciliation-store.d.ts +69 -0
- package/dist/types/sdk/bus/rich-draft.d.ts +1 -0
- package/dist/types/sdk/bus/rich-render.d.ts +2 -0
- package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +165 -0
- package/dist/types/sdk/bus/telegram-cli.d.ts +12 -0
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +11 -4
- package/dist/types/sdk/bus/telegram-daemon.d.ts +25 -1
- package/dist/types/sdk/bus/telegram-reference.d.ts +11 -1
- package/dist/types/sdk/bus/threaded-render.d.ts +3 -2
- package/dist/types/sdk/bus/topic-registry.d.ts +11 -1
- package/dist/types/sdk/host/control/operations.d.ts +1 -1
- package/dist/types/sdk/host/host.d.ts +2 -0
- package/dist/types/sdk/host/query/handlers.d.ts +5 -0
- package/dist/types/sdk/host/query/revision-store.d.ts +2 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
- package/dist/types/sdk/prompt-status.d.ts +23 -3
- package/dist/types/sdk/session.d.ts +6 -0
- package/dist/types/session/agent-session.d.ts +82 -12
- package/dist/types/session/artifacts.d.ts +8 -0
- package/dist/types/session/blob-store.d.ts +57 -4
- package/dist/types/session/internal/managed-session-storage.d.ts +8 -1
- package/dist/types/session/memory-guard-checkpoint-participant.d.ts +69 -0
- package/dist/types/session/session-manager.d.ts +48 -19
- package/dist/types/session/session-storage.d.ts +4 -0
- package/dist/types/session/streaming-output.d.ts +96 -12
- package/dist/types/setup/credential-import.d.ts +12 -0
- package/dist/types/skill-state/active-state.d.ts +12 -4
- package/dist/types/skill-state/workflow-hud.d.ts +9 -0
- package/dist/types/task/executor.d.ts +3 -2
- package/dist/types/task/index.d.ts +3 -1
- package/dist/types/task/provider-retry-status.d.ts +8 -0
- package/dist/types/task/receipt.d.ts +7 -1
- package/dist/types/task/types.d.ts +23 -0
- package/dist/types/tools/ask-answer-registry.d.ts +2 -2
- package/dist/types/tools/bash-interactive.d.ts +4 -1
- package/dist/types/tools/bash.d.ts +3 -1
- package/dist/types/tools/browser/launch.d.ts +7 -0
- package/dist/types/tools/fetch.d.ts +17 -1
- package/dist/types/tools/image-gen.d.ts +4 -0
- package/dist/types/tools/index.d.ts +4 -0
- package/dist/types/tools/output-meta.d.ts +44 -3
- package/dist/types/tools/path-utils.d.ts +1 -0
- package/dist/types/tools/read-internals.d.ts +12 -0
- package/dist/types/tools/read.d.ts +45 -7
- package/dist/types/tools/resource-gc.d.ts +4 -0
- package/dist/types/tools/review.d.ts +5 -7
- package/dist/types/tools/subagent.d.ts +2 -0
- package/dist/types/tools/tool-result.d.ts +7 -1
- package/dist/types/utils/gh.d.ts +13 -0
- package/dist/types/utils/image-resize.d.ts +1 -0
- package/dist/types/web/search/providers/kimi.d.ts +2 -0
- package/dist/types/web/search/providers/searxng.d.ts +7 -0
- package/dist/types/web/search/providers/xai.d.ts +2 -0
- package/package.json +11 -13
- package/scripts/acp-conformance-agent.ts +218 -0
- package/scripts/benchmark-sticky-viewport-pr1.ts +239 -0
- package/scripts/capture-gjc-bundle-settings.ts +306 -0
- package/scripts/capture-sticky-viewport-showcase.ts +292 -0
- package/scripts/generate-sdk-operation-inventory.ts +5 -0
- package/scripts/resident-memory-bench.ts +1341 -0
- package/scripts/run-acp-conformance.ts +285 -0
- package/scripts/verify-gjc-sdk-canonicalization.ts +122 -18
- package/scripts/verify-sticky-viewport-showcase.ts +611 -0
- package/src/async/job-manager.ts +78 -20
- package/src/capability/index.ts +8 -0
- package/src/cli/fast-help.ts +1 -1
- package/src/cli/plugin-cli.ts +176 -18
- package/src/cli/read-cli.ts +2 -1
- package/src/cli.ts +1 -0
- package/src/commands/deep-interview.ts +29 -9
- package/src/commands/harness.ts +35 -12
- package/src/commands/read.ts +11 -2
- package/src/commands/team.ts +20 -2
- package/src/config/file-lock.ts +11 -2
- package/src/config/model-registry.ts +21 -2
- package/src/config/provider-auth-health.ts +42 -0
- package/src/config/provider-ranking.ts +119 -0
- package/src/config/settings-schema.ts +74 -1
- package/src/config/settings.ts +246 -108
- package/src/coordinator-mcp/question-gate-codec.ts +1 -1
- package/src/coordinator-mcp/server.ts +5 -12
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +230 -82
- package/src/defaults/gjc/skills/ralplan/SKILL.md +77 -41
- package/src/defaults/gjc/skills/team/SKILL.md +3 -1
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +62 -39
- package/src/defaults/gjc/skills/ultragoal/validation-batch-contracts.md +12 -0
- package/src/defaults/gjc-defaults.ts +4 -4
- package/src/eval/py/executor.ts +7 -2
- package/src/exa/mcp-client.ts +12 -3
- package/src/exec/bash-executor.ts +144 -27
- package/src/extensibility/extensions/runner.ts +15 -0
- package/src/extensibility/extensions/types.ts +46 -5
- package/src/extensibility/gjc-plugins/constrained-hooks.ts +8 -2
- package/src/extensibility/gjc-plugins/index.ts +19 -2
- package/src/extensibility/gjc-plugins/installer.ts +189 -50
- package/src/extensibility/gjc-plugins/lifecycle-reconciliation.ts +199 -0
- package/src/extensibility/gjc-plugins/lifecycle.ts +626 -0
- package/src/extensibility/gjc-plugins/observability.ts +3 -3
- package/src/extensibility/gjc-plugins/prompt-appendix.ts +5 -1
- package/src/extensibility/gjc-plugins/runtime-adapters.ts +12 -2
- package/src/extensibility/gjc-plugins/runtime-quarantine.ts +121 -0
- package/src/extensibility/gjc-plugins/schema.ts +84 -12
- package/src/extensibility/gjc-plugins/session-validation.ts +9 -3
- package/src/extensibility/gjc-plugins/types.ts +141 -0
- package/src/extensibility/gjc-plugins/validation.ts +9 -0
- package/src/extensibility/shared-events.ts +5 -0
- package/src/gjc-runtime/deep-interview-ambiguity.ts +47 -82
- package/src/gjc-runtime/deep-interview-recorder.ts +227 -310
- package/src/gjc-runtime/deep-interview-runtime.ts +109 -270
- package/src/gjc-runtime/deep-interview-stage.ts +1016 -0
- package/src/gjc-runtime/deep-interview-state.ts +12 -943
- package/src/gjc-runtime/gc-render.ts +1 -0
- package/src/gjc-runtime/gc-runtime.ts +11 -1
- package/src/gjc-runtime/launch-tmux.ts +25 -6
- package/src/gjc-runtime/managed-owner-admission.ts +1 -1
- package/src/gjc-runtime/memory-guard-owner-claims.ts +389 -0
- package/src/gjc-runtime/ralplan-runtime.ts +1149 -98
- package/src/gjc-runtime/state-runtime.ts +2 -1
- package/src/gjc-runtime/state-writer.ts +70 -222
- package/src/gjc-runtime/team-launch.ts +42 -5
- package/src/gjc-runtime/team-runtime.ts +1085 -40
- package/src/gjc-runtime/team-store.ts +32 -0
- package/src/gjc-runtime/team-worker-heartbeat.ts +149 -0
- package/src/gjc-runtime/team-worker-memory-guard.ts +363 -0
- package/src/gjc-runtime/team-workers.ts +1 -0
- package/src/gjc-runtime/tmux-owner-isolation.ts +28 -0
- package/src/gjc-runtime/tmux-sessions.ts +58 -13
- package/src/gjc-runtime/ultragoal-receipt-freshness.ts +20 -0
- package/src/gjc-runtime/ultragoal-runtime.ts +414 -618
- package/src/gjc-runtime/workflow-manifest.generated.json +105 -449
- package/src/gjc-runtime/workflow-manifest.ts +38 -247
- package/src/hooks/native-skill-hook.ts +17 -4
- package/src/hooks/skill-state.ts +1 -23
- package/src/internal-urls/docs-index.generated.ts +21 -22
- package/src/internal-urls/local-root-gc.ts +127 -0
- package/src/main.ts +9 -5
- package/src/memories/index.ts +10 -0
- package/src/modes/DESIGN.md +98 -0
- package/src/modes/acp/acp-agent.ts +339 -191
- package/src/modes/acp/acp-event-mapper.ts +14 -7
- package/src/modes/acp/acp-mode.ts +39 -3
- package/src/modes/components/assistant-message.ts +123 -22
- package/src/modes/components/gjc-bundle-settings.ts +508 -0
- package/src/modes/components/irc-sidebar.ts +176 -62
- package/src/modes/components/model-selector.ts +61 -4
- package/src/modes/components/notifications-settings-editor.ts +12 -1
- package/src/modes/components/oauth-selector.ts +96 -28
- package/src/modes/components/read-tool-group.ts +82 -14
- package/src/modes/components/session-observer-overlay.ts +457 -83
- package/src/modes/components/settings-selector.ts +116 -23
- package/src/modes/components/status-line/gh.ts +16 -0
- package/src/modes/components/tool-execution.ts +138 -27
- package/src/modes/components/tool-status-header.ts +3 -14
- package/src/modes/components/transcript-viewer-overlay.ts +99 -24
- package/src/modes/controllers/command-controller.ts +4 -0
- package/src/modes/controllers/event-controller.ts +109 -27
- package/src/modes/controllers/extension-ui-controller.ts +26 -2
- package/src/modes/controllers/input-controller.ts +18 -3
- package/src/modes/controllers/selector-controller.ts +127 -36
- package/src/modes/interactive-mode.ts +62 -3
- package/src/modes/irc-observation-ledger.ts +71 -15
- package/src/modes/runtime-init.ts +22 -2
- package/src/modes/types.ts +2 -0
- package/src/modes/utils/ui-helpers.ts +94 -1
- package/src/prompts/agent-fragments/ralplan-persistence.md +4 -3
- package/src/prompts/agents/architect.md +9 -1
- package/src/prompts/agents/critic.md +9 -0
- package/src/prompts/system/eager-todo.md +8 -4
- package/src/prompts/system/system-prompt.md +11 -5
- package/src/prompts/tools/bash.md +5 -5
- package/src/prompts/tools/read.md +4 -2
- package/src/prompts/tools/search-tool-bm25.md +5 -0
- package/src/prompts/tools/task.md +1 -1
- package/src/reminders/star-reminder.ts +4 -42
- package/src/runtime-mcp/manager.ts +19 -4
- package/src/runtime-mcp/smithery-auth.ts +17 -2
- package/src/runtime-mcp/smithery-connect.ts +11 -1
- package/src/sdk/acp/adapter.ts +22 -6
- package/src/sdk/broker/lifecycle.ts +25 -6
- package/src/sdk/broker/transport.ts +35 -3
- package/src/sdk/bus/attachment-registry.ts +5 -1
- package/src/sdk/bus/chat-daemon-cli.ts +4 -39
- package/src/sdk/bus/chat-daemon-control.ts +6 -3
- package/src/sdk/bus/config.ts +18 -2
- package/src/sdk/bus/control-drain-lease.ts +104 -0
- package/src/sdk/bus/index.ts +984 -146
- package/src/sdk/bus/kind-aware-reconciliation.ts +317 -0
- package/src/sdk/bus/lifecycle-commands.ts +4 -1
- package/src/sdk/bus/lifecycle-control-runtime.ts +403 -88
- package/src/sdk/bus/prompt-reconciliation.ts +2 -1
- package/src/sdk/bus/reconciliation-store.ts +303 -0
- package/src/sdk/bus/rich-draft.ts +1 -1
- package/src/sdk/bus/rich-render.ts +2 -2
- package/src/sdk/bus/telegram-adoption-intent.ts +574 -0
- package/src/sdk/bus/telegram-cli.ts +33 -8
- package/src/sdk/bus/telegram-daemon-cli.ts +1 -0
- package/src/sdk/bus/telegram-daemon-contract.ts +11 -4
- package/src/sdk/bus/telegram-daemon.ts +916 -23
- package/src/sdk/bus/telegram-reference.ts +40 -3
- package/src/sdk/bus/threaded-render.ts +48 -3
- package/src/sdk/bus/topic-registry.ts +20 -0
- package/src/sdk/host/control/dispatch.ts +5 -1
- package/src/sdk/host/control/operations.ts +1 -1
- package/src/sdk/host/host.ts +23 -1
- package/src/sdk/host/query/handlers.ts +55 -0
- package/src/sdk/host/query/revision-store.ts +36 -2
- package/src/sdk/host/reverse-leases.ts +44 -7
- package/src/sdk/mcp/server.ts +46 -18
- package/src/sdk/prompt-status.ts +16 -3
- package/src/sdk/protocol/operation-inventory.generated.json +51 -0
- package/src/sdk/protocol/operation-registry.ts +7 -2
- package/src/sdk/session.ts +101 -10
- package/src/session/agent-session.ts +1286 -220
- package/src/session/artifacts.ts +22 -0
- package/src/session/auth-broker-config.ts +10 -3
- package/src/session/blob-store.ts +915 -24
- package/src/session/internal/managed-session-scope.ts +44 -6
- package/src/session/internal/managed-session-storage.ts +48 -6
- package/src/session/memory-guard-checkpoint-participant.ts +131 -0
- package/src/session/session-manager.ts +2364 -438
- package/src/session/session-storage.ts +9 -1
- package/src/session/streaming-output.ts +500 -111
- package/src/setup/credential-import.ts +75 -13
- package/src/setup/provider-onboarding.ts +19 -4
- package/src/skill-state/active-state.ts +32 -10
- package/src/skill-state/workflow-hud.ts +42 -2
- package/src/skill-state/workflow-mutation-guard.ts +560 -8
- package/src/task/executor.ts +122 -39
- package/src/task/index.ts +23 -14
- package/src/task/provider-retry-status.ts +16 -0
- package/src/task/receipt.ts +23 -7
- package/src/task/render.ts +6 -2
- package/src/task/types.ts +108 -0
- package/src/tools/ask-answer-registry.ts +12 -6
- package/src/tools/ask.ts +169 -118
- package/src/tools/ast-edit.ts +1 -0
- package/src/tools/ast-grep.ts +1 -0
- package/src/tools/bash-interactive.ts +8 -3
- package/src/tools/bash.ts +503 -60
- package/src/tools/browser/launch.ts +41 -6
- package/src/tools/fetch.ts +114 -23
- package/src/tools/find.ts +1 -0
- package/src/tools/image-gen.ts +29 -5
- package/src/tools/index.ts +4 -0
- package/src/tools/output-meta.ts +281 -20
- package/src/tools/path-utils.ts +8 -3
- package/src/tools/read-internals.ts +44 -0
- package/src/tools/read.ts +1560 -310
- package/src/tools/resource-gc.ts +182 -18
- package/src/tools/review.ts +5 -7
- package/src/tools/search.ts +1 -0
- package/src/tools/subagent-render.ts +6 -2
- package/src/tools/subagent.ts +6 -0
- package/src/tools/telegram-send.ts +6 -3
- package/src/tools/tool-result.ts +14 -1
- package/src/utils/gh.ts +39 -0
- package/src/utils/image-resize.ts +3 -0
- package/src/web/search/providers/anthropic.ts +4 -4
- package/src/web/search/providers/codex.ts +1 -1
- package/src/web/search/providers/kimi.ts +15 -5
- package/src/web/search/providers/searxng.ts +47 -4
- package/src/web/search/providers/xai.ts +7 -2
- package/dist/types/gjc-runtime/deep-interview-draft.d.ts +0 -8
- package/dist/types/gjc-runtime/deep-interview-payload.d.ts +0 -41
- package/dist/types/gjc-runtime/deep-interview-repair.d.ts +0 -17
- package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +0 -23
- package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +0 -30
- package/src/gjc-runtime/deep-interview-draft.ts +0 -843
- package/src/gjc-runtime/deep-interview-payload.ts +0 -262
- package/src/gjc-runtime/deep-interview-repair.ts +0 -1674
- package/src/gjc-runtime/ultragoal-pipeline.ts +0 -306
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Settings } from "../config/settings";
|
|
2
|
+
import type { TruncationDirection } from "../session/streaming-output";
|
|
3
|
+
/**
|
|
4
|
+
* Read execution routes that have distinct truncation-default contracts.
|
|
5
|
+
* Routes that share the same default are grouped only when their truncation
|
|
6
|
+
* policy is identical; selection and rendering remain owned by read.ts.
|
|
7
|
+
*/
|
|
8
|
+
export type ReadRoute = "local-bare-stream" | "local-bare-acp" | "archive-member-bare" | "local-range" | "local-multi-range" | "local-raw" | "local-summary" | "url-reader" | "url-cache-page" | "dir-local" | "dir-archive" | "sqlite-list" | "sqlite-rows" | "converted";
|
|
9
|
+
/** Resolve the configured default for a route; explicit parameters bypass it. */
|
|
10
|
+
export declare function pathDefault(route: ReadRoute, settings: Settings): TruncationDirection;
|
|
11
|
+
/** Resolve the effective caller-facing direction with explicit precedence. */
|
|
12
|
+
export declare function resolveEffectiveDirection(explicitParam: TruncationDirection | undefined, route: ReadRoute, settings: Settings): TruncationDirection;
|
|
@@ -4,10 +4,49 @@ import * as z from "zod/v4";
|
|
|
4
4
|
import type { RenderResultOptions } from "../extensibility/custom-tools/types";
|
|
5
5
|
import { type Theme } from "../modes/theme/theme";
|
|
6
6
|
import type { ToolSession } from "../sdk";
|
|
7
|
-
import {
|
|
7
|
+
import type { ReadWindow, TruncationResult } from "../session/streaming-output";
|
|
8
8
|
import { type OutputMeta } from "./output-meta";
|
|
9
|
+
export declare function streamLinesFromFile(filePath: string, startLine: number, maxLinesToCollect: number, maxBytes: number, selectedLineLimit: number | null, signal?: AbortSignal, collect?: "head" | "tail" | "both", collectEndExclusive?: number | null): Promise<{
|
|
10
|
+
lines: string[];
|
|
11
|
+
totalFileLines: number;
|
|
12
|
+
collectedBytes: number;
|
|
13
|
+
stoppedByByteLimit: boolean;
|
|
14
|
+
firstLinePreview?: {
|
|
15
|
+
text: string;
|
|
16
|
+
bytes: number;
|
|
17
|
+
};
|
|
18
|
+
firstLineByteLength?: number;
|
|
19
|
+
selectedBytesTotal: number;
|
|
20
|
+
windowBytesTotal: number;
|
|
21
|
+
windowLinesTotal: number;
|
|
22
|
+
windowStartIndex: number;
|
|
23
|
+
tailPartial?: {
|
|
24
|
+
text: string;
|
|
25
|
+
bytes: number;
|
|
26
|
+
sourceIndex: number;
|
|
27
|
+
sourceLineBytes: number;
|
|
28
|
+
};
|
|
29
|
+
maxBytes: number;
|
|
30
|
+
headLines?: string[];
|
|
31
|
+
headBytes?: number;
|
|
32
|
+
headStartIndex?: number;
|
|
33
|
+
degenerateTailBudget: boolean;
|
|
34
|
+
degenerateHeadBudget: boolean;
|
|
35
|
+
headStoppedByBytes: boolean;
|
|
36
|
+
headStoppedByLines: boolean;
|
|
37
|
+
ringBudgetLines: number;
|
|
38
|
+
ringEvictedForBytes: boolean;
|
|
39
|
+
ringEvictedForLines: boolean;
|
|
40
|
+
tailDroppedForBytes: boolean;
|
|
41
|
+
}>;
|
|
42
|
+
export declare function streamResultWindow(result: Awaited<ReturnType<typeof streamLinesFromFile>>, collect: "tail" | "both", startLine: number, collectEndExclusive: number | null): ReadWindow;
|
|
9
43
|
declare const readSchema: z.ZodObject<{
|
|
10
44
|
path: z.ZodString;
|
|
45
|
+
truncation: z.ZodOptional<z.ZodEnum<{
|
|
46
|
+
both: "both";
|
|
47
|
+
head: "head";
|
|
48
|
+
last: "last";
|
|
49
|
+
}>>;
|
|
11
50
|
}, z.core.$strict>;
|
|
12
51
|
export type ReadToolInput = z.infer<typeof readSchema>;
|
|
13
52
|
/** Project paths and output sizes without exposing read content or remote URLs. */
|
|
@@ -45,12 +84,6 @@ export interface ReadToolDetails {
|
|
|
45
84
|
conflictCount?: number;
|
|
46
85
|
}
|
|
47
86
|
type ReadParams = ReadToolInput;
|
|
48
|
-
/**
|
|
49
|
-
* Read tool implementation.
|
|
50
|
-
*
|
|
51
|
-
* Reads files with support for images, converted documents (via markit), and text.
|
|
52
|
-
* Directories return a formatted listing with modification times.
|
|
53
|
-
*/
|
|
54
87
|
export declare class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
|
|
55
88
|
#private;
|
|
56
89
|
private readonly session;
|
|
@@ -60,6 +93,11 @@ export declare class ReadTool implements AgentTool<typeof readSchema, ReadToolDe
|
|
|
60
93
|
readonly description: string;
|
|
61
94
|
readonly parameters: z.ZodObject<{
|
|
62
95
|
path: z.ZodString;
|
|
96
|
+
truncation: z.ZodOptional<z.ZodEnum<{
|
|
97
|
+
both: "both";
|
|
98
|
+
head: "head";
|
|
99
|
+
last: "last";
|
|
100
|
+
}>>;
|
|
63
101
|
}, z.core.$strict>;
|
|
64
102
|
readonly nonAbortable = true;
|
|
65
103
|
readonly strict = true;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { WindowsJobMemoryProbeResult } from "@gajae-code/natives";
|
|
2
2
|
import type { Settings } from "../config/settings";
|
|
3
|
+
import type { MemoryGuardWorkerSample } from "../runtime/memory-guard-contract";
|
|
3
4
|
import { type TabGcSnapshot } from "./browser/tab-supervisor";
|
|
4
5
|
export interface BrowserGcPolicy {
|
|
5
6
|
enabled: boolean;
|
|
@@ -35,10 +36,13 @@ export interface ResourceGcDeps {
|
|
|
35
36
|
removed: number;
|
|
36
37
|
}>;
|
|
37
38
|
screenshotArmed: () => boolean;
|
|
39
|
+
listTeamWorkers?: (cwd: string, sessionId: string) => Promise<MemoryGuardWorkerSample[]>;
|
|
40
|
+
applyTeamWorkerGuard?: (cwd: string, sessionId: string, workerId: string, excessBytes: number, incidentId: string) => Promise<void>;
|
|
38
41
|
}
|
|
39
42
|
export interface ResourceGcRegistration {
|
|
40
43
|
sessionId: string;
|
|
41
44
|
settings: Settings;
|
|
45
|
+
cwd?: string | (() => string);
|
|
42
46
|
}
|
|
43
47
|
/**
|
|
44
48
|
* Register a session with the resource GC. Starts the single shared timer on the first
|
|
@@ -50,14 +50,12 @@ export interface SubmitReviewDetails {
|
|
|
50
50
|
}
|
|
51
51
|
export type { ReportFindingDetails };
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
* `ReviewFinding` shape
|
|
53
|
+
* Convert tool-side `ReportFindingDetails` into the numeric-priority
|
|
54
|
+
* `ReviewFinding` shape used by caller-owned reviewer payloads.
|
|
55
55
|
*
|
|
56
56
|
* The `report_finding` tool exposes `priority` as a string enum (`"P0".."P3"`)
|
|
57
|
-
* for ergonomics,
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
* that surfaces a finding is rejected with `findings.0.priority: expected
|
|
61
|
-
* number, received string`.
|
|
57
|
+
* for ergonomics, while reviewer schemas may explicitly declare numeric
|
|
58
|
+
* priorities. This pure conversion does not add findings to completion data;
|
|
59
|
+
* callers that include `findings` own both that field and its output schema.
|
|
62
60
|
*/
|
|
63
61
|
export declare function toReviewFinding(details: ReportFindingDetails): ReviewFinding;
|
|
@@ -38,6 +38,8 @@ export interface SubagentSnapshot {
|
|
|
38
38
|
durationMs: number;
|
|
39
39
|
resultText?: string;
|
|
40
40
|
errorText?: string;
|
|
41
|
+
/** Safe setup failure cause retained from the executor launch path. */
|
|
42
|
+
setupFailureSummary?: string;
|
|
41
43
|
resultPreview?: string;
|
|
42
44
|
outputRef?: string;
|
|
43
45
|
truncated?: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AgentToolResult } from "@gajae-code/agent-core";
|
|
2
2
|
import type { ImageContent, TextContent } from "@gajae-code/ai";
|
|
3
|
-
import type { OutputSummary, TruncationResult } from "../session/streaming-output";
|
|
3
|
+
import type { OutputSummary, ReadWindow, TruncationResult } from "../session/streaming-output";
|
|
4
4
|
import type { OutputMeta, TruncationOptions, TruncationSummaryOptions, TruncationTextOptions } from "./output-meta";
|
|
5
5
|
type ToolContent = Array<TextContent | ImageContent>;
|
|
6
6
|
type DetailsWithMeta = {
|
|
@@ -12,6 +12,12 @@ export declare class ToolResultBuilder<TDetails extends DetailsWithMeta> {
|
|
|
12
12
|
text(text: string): this;
|
|
13
13
|
content(content: ToolContent): this;
|
|
14
14
|
truncation(result: TruncationResult, options: TruncationOptions): this;
|
|
15
|
+
truncationWindows(windows: ReadWindow, options?: {
|
|
16
|
+
artifactId?: string;
|
|
17
|
+
noticeOwner?: "body";
|
|
18
|
+
maxBytes?: number;
|
|
19
|
+
rangeBase?: "file" | "window";
|
|
20
|
+
}): this;
|
|
15
21
|
truncationFromSummary(summary: OutputSummary, options: TruncationSummaryOptions): this;
|
|
16
22
|
truncationFromText(text: string, options: TruncationTextOptions): this;
|
|
17
23
|
limits(limits: {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface GhResult {
|
|
2
|
+
exitCode: number;
|
|
3
|
+
stdout: string;
|
|
4
|
+
stderr: string;
|
|
5
|
+
timedOut?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export type RunGh = (args: string[], options?: {
|
|
8
|
+
timeoutMs?: number;
|
|
9
|
+
}) => Promise<GhResult>;
|
|
10
|
+
/** Run GitHub CLI without allowing it to consume the parent terminal's input. */
|
|
11
|
+
export declare function runGhDefault(args: string[], options?: {
|
|
12
|
+
timeoutMs?: number;
|
|
13
|
+
}): Promise<GhResult>;
|
|
@@ -16,6 +16,8 @@ export interface KimiSearchParams {
|
|
|
16
16
|
authStorage: AuthStorage;
|
|
17
17
|
sessionId?: string;
|
|
18
18
|
}
|
|
19
|
+
/** Test seam: the Kimi search base URL as resolved from trusted env. */
|
|
20
|
+
export declare function resolveKimiSearchBaseUrlForTest(): string;
|
|
19
21
|
/** Execute Kimi web search. */
|
|
20
22
|
export declare function searchKimi(params: KimiSearchParams): Promise<SearchResponse>;
|
|
21
23
|
/** Search provider for Kimi web search. */
|
|
@@ -28,6 +28,13 @@ import type { AuthStorage } from "@gajae-code/ai";
|
|
|
28
28
|
import type { SearchResponse } from "../../../web/search/types";
|
|
29
29
|
import type { SearchParams } from "./base";
|
|
30
30
|
import { SearchProvider } from "./base";
|
|
31
|
+
/** Test seam: the SearXNG endpoint and auth material as resolved from trusted env. */
|
|
32
|
+
export declare function resolveSearxngConfigForTest(): {
|
|
33
|
+
endpoint: string | null;
|
|
34
|
+
token: string | null;
|
|
35
|
+
basicUsername: string | null;
|
|
36
|
+
basicPassword: string | null;
|
|
37
|
+
};
|
|
31
38
|
/** Execute SearXNG web search. */
|
|
32
39
|
export declare function searchSearXNG(params: {
|
|
33
40
|
query: string;
|
|
@@ -32,6 +32,8 @@ export interface XaiSearchParams {
|
|
|
32
32
|
authStorage: AuthStorage;
|
|
33
33
|
sessionId?: string;
|
|
34
34
|
}
|
|
35
|
+
/** Test seam: the xAI search base URL as resolved from trusted env. */
|
|
36
|
+
export declare function resolveXaiSearchBaseUrlForTest(): string;
|
|
35
37
|
export declare function buildXaiRequestBody(params: {
|
|
36
38
|
query: string;
|
|
37
39
|
systemPrompt: string;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@gajae-code/coding-agent",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.12.1",
|
|
5
5
|
"description": "Gajae Code CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://gajae-code.com",
|
|
7
7
|
"author": "Yeachan-Heo and Gajae Code Contributors",
|
|
@@ -50,16 +50,16 @@
|
|
|
50
50
|
"check:sdk-closure": "bun ../../scripts/telegram-daemon-generation-guard.ts --validate-current-tree && bun test ../../scripts/telegram-daemon-generation-guard.test.ts && bun scripts/generate-sdk-operation-inventory.ts --check && bun scripts/generate-sdk-adapter-parity-manifest.ts --check && bun scripts/run-test-manifest.ts test/manifests/sdk-adapter-parity-v1.json && bun scripts/generate-telegram-baseline-manifest.ts --check && bun scripts/run-test-manifest.ts test/manifests/telegram-baseline-v1.json && bun test test/sdk-downgrade-rollback.test.ts test/sdk-downgrade-unknown-version.test.ts && bun scripts/verify-gjc-sdk-canonicalization.ts --self-test && bun scripts/verify-gjc-sdk-canonicalization.ts && bun scripts/verify-gjc-sdk-rename.ts"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@agentclientprotocol/sdk": "1.
|
|
53
|
+
"@agentclientprotocol/sdk": "1.3.0",
|
|
54
54
|
"@babel/parser": "^7.29.3",
|
|
55
55
|
"@mozilla/readability": "^0.6.0",
|
|
56
|
-
"@gajae-code/stats": "0.
|
|
57
|
-
"@gajae-code/agent-core": "0.
|
|
58
|
-
"@gajae-code/ai": "0.
|
|
59
|
-
"@gajae-code/bridge-client": "0.
|
|
60
|
-
"@gajae-code/natives": "0.
|
|
61
|
-
"@gajae-code/tui": "0.
|
|
62
|
-
"@gajae-code/utils": "0.
|
|
56
|
+
"@gajae-code/stats": "0.12.1",
|
|
57
|
+
"@gajae-code/agent-core": "0.12.1",
|
|
58
|
+
"@gajae-code/ai": "0.12.1",
|
|
59
|
+
"@gajae-code/bridge-client": "0.12.1",
|
|
60
|
+
"@gajae-code/natives": "0.12.1",
|
|
61
|
+
"@gajae-code/tui": "0.12.1",
|
|
62
|
+
"@gajae-code/utils": "0.12.1",
|
|
63
63
|
"@puppeteer/browsers": "^2.13.0",
|
|
64
64
|
"@types/turndown": "5.0.6",
|
|
65
65
|
"@xterm/headless": "^6.0.0",
|
|
@@ -327,6 +327,8 @@
|
|
|
327
327
|
"types": "./dist/types/export/html/*.d.ts",
|
|
328
328
|
"import": "./src/export/html/*.ts"
|
|
329
329
|
},
|
|
330
|
+
"./extensibility/gjc-plugins/installer": null,
|
|
331
|
+
"./extensibility/gjc-plugins/registry": null,
|
|
330
332
|
"./extensibility/*": {
|
|
331
333
|
"types": "./dist/types/extensibility/*.d.ts",
|
|
332
334
|
"import": "./src/extensibility/*.ts"
|
|
@@ -343,10 +345,6 @@
|
|
|
343
345
|
"types": "./dist/types/extensibility/custom-commands/bundled/ci-green/index.d.ts",
|
|
344
346
|
"import": "./src/extensibility/custom-commands/bundled/ci-green/index.ts"
|
|
345
347
|
},
|
|
346
|
-
"./extensibility/custom-commands/bundled/review": {
|
|
347
|
-
"types": "./dist/types/extensibility/custom-commands/bundled/review/index.d.ts",
|
|
348
|
-
"import": "./src/extensibility/custom-commands/bundled/review/index.ts"
|
|
349
|
-
},
|
|
350
348
|
"./extensibility/custom-tools": {
|
|
351
349
|
"types": "./dist/types/extensibility/custom-tools/index.d.ts",
|
|
352
350
|
"import": "./src/extensibility/custom-tools/index.ts"
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Credential-free ACP fixture launcher. The loopback endpoint is deliberately
|
|
5
|
+
* deterministic; the child remains the production `gjc --mode acp` surface.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from "node:fs/promises";
|
|
8
|
+
import * as os from "node:os";
|
|
9
|
+
import * as path from "node:path";
|
|
10
|
+
|
|
11
|
+
const root = path.resolve(import.meta.dir, "..", "..", "..");
|
|
12
|
+
const agentDir = await fs.mkdtemp(path.join(os.tmpdir(), "gjc-acp-conformance-"));
|
|
13
|
+
let child: ReturnType<typeof Bun.spawn> | undefined;
|
|
14
|
+
let server: ReturnType<typeof Bun.serve> | undefined;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Deterministic replies for the pinned `acp-core-v1` corpus. Each branch mirrors one
|
|
18
|
+
* upstream case expectation; nothing here reaches the network.
|
|
19
|
+
*/
|
|
20
|
+
function response(prompt: string): string {
|
|
21
|
+
if (prompt.includes("inspect-prompt")) return `received blocks: {"type":"resource"}`;
|
|
22
|
+
if (prompt.includes("this-command-does-not-exist")) return "unrecognized prompt";
|
|
23
|
+
if (/^\s*read\b/m.test(prompt)) return "read README.md: acpx";
|
|
24
|
+
if (/^\s*write\b/m.test(prompt)) {
|
|
25
|
+
const target = /write\s+(\S+)/.exec(prompt)?.[1] ?? "file";
|
|
26
|
+
return `wrote ${target}`;
|
|
27
|
+
}
|
|
28
|
+
const echo = /^\s*echo\s*(.*)$/m.exec(prompt);
|
|
29
|
+
if (echo) return echo[1] || "echo";
|
|
30
|
+
return "ok";
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function sse(value: unknown): string {
|
|
34
|
+
return `data: ${JSON.stringify(value)}\n\n`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function completion(delta: Record<string, unknown>, finishReason: string | null = null): string {
|
|
38
|
+
return sse({ id: "gjc-conformance", choices: [{ delta, finish_reason: finishReason }] });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function toolCall(name: "read" | "write", arguments_: Record<string, string>): string {
|
|
42
|
+
return completion(
|
|
43
|
+
{
|
|
44
|
+
tool_calls: [
|
|
45
|
+
{
|
|
46
|
+
index: 0,
|
|
47
|
+
id: `conformance-${name}`,
|
|
48
|
+
type: "function",
|
|
49
|
+
function: { name, arguments: JSON.stringify(arguments_) },
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
"tool_calls",
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function textCompletion(text: string): string {
|
|
58
|
+
return `${completion({ content: text })}${completion({}, "stop")}data: [DONE]\n\n`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async function cleanup(code = 0): Promise<never> {
|
|
62
|
+
server?.stop(true);
|
|
63
|
+
if (child && child.exitCode === null) child.kill();
|
|
64
|
+
await fs.rm(agentDir, { recursive: true, force: true });
|
|
65
|
+
process.exit(code);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
server = Bun.serve({
|
|
69
|
+
hostname: "127.0.0.1",
|
|
70
|
+
port: 0,
|
|
71
|
+
async fetch(request) {
|
|
72
|
+
const body = (await request.json().catch(() => ({}))) as {
|
|
73
|
+
messages?: Array<{ role?: string; content?: unknown }>;
|
|
74
|
+
};
|
|
75
|
+
// OpenAI-style content is either a plain string or an array of typed blocks.
|
|
76
|
+
const textOf = (content: unknown): string =>
|
|
77
|
+
typeof content === "string"
|
|
78
|
+
? content
|
|
79
|
+
: Array.isArray(content)
|
|
80
|
+
? content
|
|
81
|
+
.map(block =>
|
|
82
|
+
typeof block === "object" &&
|
|
83
|
+
block !== null &&
|
|
84
|
+
typeof (block as { text?: unknown }).text === "string"
|
|
85
|
+
? (block as { text: string }).text
|
|
86
|
+
: "",
|
|
87
|
+
)
|
|
88
|
+
.join("")
|
|
89
|
+
: "";
|
|
90
|
+
const messages = body.messages ?? [];
|
|
91
|
+
const prompt =
|
|
92
|
+
[...messages]
|
|
93
|
+
.reverse()
|
|
94
|
+
.filter(message => message.role === "user")
|
|
95
|
+
.map(message => textOf(message.content))
|
|
96
|
+
.find(text => text.length > 0) ?? "";
|
|
97
|
+
const hasToolResult = messages.some(message => message.role === "tool");
|
|
98
|
+
const isRead = /^\s*read\b/m.test(prompt);
|
|
99
|
+
const isWrite = /^\s*write\b/m.test(prompt);
|
|
100
|
+
const isLateTool = prompt.includes("late-tool 40 follow-up");
|
|
101
|
+
|
|
102
|
+
if (prompt.includes("sleep")) {
|
|
103
|
+
const requested = Number(/\bsleep\s+(\d+)/.exec(prompt)?.[1] ?? 0);
|
|
104
|
+
const delay = Math.min(Math.max(requested, 0), 30_000);
|
|
105
|
+
const stream = new ReadableStream<Uint8Array>({
|
|
106
|
+
start(controller) {
|
|
107
|
+
let closed = false;
|
|
108
|
+
const close = () => {
|
|
109
|
+
if (closed) return;
|
|
110
|
+
closed = true;
|
|
111
|
+
controller.close();
|
|
112
|
+
};
|
|
113
|
+
request.signal.addEventListener("abort", close, { once: true });
|
|
114
|
+
void Bun.sleep(delay).then(() => {
|
|
115
|
+
if (closed) return;
|
|
116
|
+
controller.enqueue(new TextEncoder().encode(textCompletion("slept")));
|
|
117
|
+
close();
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
return new Response(stream, { headers: { "content-type": "text/event-stream" } });
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
if ((isRead || isWrite || isLateTool) && !hasToolResult) {
|
|
125
|
+
if (isLateTool) {
|
|
126
|
+
const prefix = `${completion({ content: "preparing" })}${completion({ content: " writing now" })}${completion({ content: " before tool" })}`;
|
|
127
|
+
return new Response(
|
|
128
|
+
`${prefix}${toolCall("write", { path: ".acpx-conformance-late.txt", content: "late" })}data: [DONE]\n\n`,
|
|
129
|
+
{
|
|
130
|
+
headers: { "content-type": "text/event-stream" },
|
|
131
|
+
},
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
// Neutral pre-tool text: every corpus assertion below must come from the real
|
|
135
|
+
// tool result, never from a marker announced before the tool ran.
|
|
136
|
+
const provisional = isRead ? "checking the requested file" : "applying the requested write";
|
|
137
|
+
return new Response(
|
|
138
|
+
`${completion({ content: provisional })}${toolCall(
|
|
139
|
+
isRead ? "read" : "write",
|
|
140
|
+
isRead
|
|
141
|
+
? { path: "README.md" }
|
|
142
|
+
: {
|
|
143
|
+
path: /write\s+(\S+)/.exec(prompt)?.[1] ?? "file",
|
|
144
|
+
content: /write\s+\S+\s*(.*)/.exec(prompt)?.[1] ?? "",
|
|
145
|
+
},
|
|
146
|
+
)}data: [DONE]\n\n`,
|
|
147
|
+
{ headers: { "content-type": "text/event-stream" } },
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Derive the reply from what the tool actually returned so a broken permission
|
|
152
|
+
// bridge, filesystem bridge, or tool result cannot still satisfy the corpus.
|
|
153
|
+
const toolText = messages
|
|
154
|
+
.filter(message => message.role === "tool")
|
|
155
|
+
.map(message => textOf(message.content))
|
|
156
|
+
.join("\n");
|
|
157
|
+
const toolDenied = /rejected by user|permission denied|not permitted/i.test(toolText);
|
|
158
|
+
const reply = toolDenied
|
|
159
|
+
? `permission denied: ${toolText.slice(0, 200)}`
|
|
160
|
+
: isRead
|
|
161
|
+
? `read README.md: ${toolText.trim().slice(0, 200)}`
|
|
162
|
+
: isWrite
|
|
163
|
+
? `wrote ${/write\s+(\S+)/.exec(prompt)?.[1] ?? "file"}: ${toolText.trim().slice(0, 120)}`
|
|
164
|
+
: isLateTool
|
|
165
|
+
? `writing now: ${toolText.trim().slice(0, 120)}`
|
|
166
|
+
: response(prompt);
|
|
167
|
+
return new Response(textCompletion(reply), { headers: { "content-type": "text/event-stream" } });
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
await Bun.write(
|
|
172
|
+
path.join(agentDir, "models.json"),
|
|
173
|
+
JSON.stringify({
|
|
174
|
+
providers: {
|
|
175
|
+
conformance: {
|
|
176
|
+
api: "openai-completions",
|
|
177
|
+
baseUrl: `http://127.0.0.1:${server.port}/v1`,
|
|
178
|
+
auth: "none",
|
|
179
|
+
models: [{ id: "fixture", name: "fixture", input: ["text"], contextWindow: 1_000_000, maxTokens: 8192 }],
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
}),
|
|
183
|
+
);
|
|
184
|
+
|
|
185
|
+
// The pinned corpus reads `README.md` from the session cwd the runner passes on
|
|
186
|
+
// `session/new`. The runner creates that directory but seeds no content, so seed it
|
|
187
|
+
// here (never inside the upstream corpus) when the harness names it.
|
|
188
|
+
const scratchCwd = process.env.GJC_ACP_CONFORMANCE_CWD?.trim();
|
|
189
|
+
if (scratchCwd) {
|
|
190
|
+
const scratchReadme = path.join(scratchCwd, "README.md");
|
|
191
|
+
if (!(await Bun.file(scratchReadme).exists())) await Bun.write(scratchReadme, "acpx conformance workspace\n");
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
child = Bun.spawn(
|
|
195
|
+
[
|
|
196
|
+
"bun",
|
|
197
|
+
path.join(root, "packages", "coding-agent", "src", "cli.ts"),
|
|
198
|
+
"--mode",
|
|
199
|
+
"acp",
|
|
200
|
+
"--model",
|
|
201
|
+
"conformance/fixture",
|
|
202
|
+
],
|
|
203
|
+
{
|
|
204
|
+
cwd: root,
|
|
205
|
+
env: { ...process.env, GJC_CODING_AGENT_DIR: agentDir, PI_CODING_AGENT_DIR: agentDir },
|
|
206
|
+
stdin: "inherit",
|
|
207
|
+
stdout: "inherit",
|
|
208
|
+
stderr: "inherit",
|
|
209
|
+
},
|
|
210
|
+
);
|
|
211
|
+
process.once("SIGTERM", () => {
|
|
212
|
+
void cleanup(0);
|
|
213
|
+
});
|
|
214
|
+
process.once("SIGINT", () => {
|
|
215
|
+
void cleanup(0);
|
|
216
|
+
});
|
|
217
|
+
await child.exited;
|
|
218
|
+
await cleanup(child.exitCode ?? 1);
|