@gajae-code/coding-agent 0.3.0 → 0.3.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 +18 -0
- package/dist/types/async/job-manager.d.ts +7 -0
- package/dist/types/cli/args.d.ts +1 -1
- package/dist/types/commands/deep-interview.d.ts +3 -0
- package/dist/types/config/keybindings.d.ts +5 -0
- package/dist/types/config/settings-schema.d.ts +4 -4
- package/dist/types/debug/crash-diagnostics.d.ts +45 -0
- package/dist/types/debug/runtime-gauges.d.ts +6 -0
- package/dist/types/deep-interview/render-middleware.d.ts +1 -0
- package/dist/types/eval/py/executor.d.ts +2 -0
- package/dist/types/eval/py/kernel.d.ts +2 -0
- package/dist/types/exec/bash-executor.d.ts +10 -0
- package/dist/types/gjc-runtime/cli-write-receipt.d.ts +24 -0
- package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +1 -0
- package/dist/types/gjc-runtime/state-migrations.d.ts +9 -0
- package/dist/types/gjc-runtime/state-schema.d.ts +317 -0
- package/dist/types/gjc-runtime/state-writer.d.ts +10 -0
- package/dist/types/gjc-runtime/workflow-command-ref.d.ts +43 -0
- package/dist/types/harness-control-plane/control-endpoint.d.ts +3 -2
- package/dist/types/hooks/skill-state.d.ts +21 -0
- package/dist/types/internal-urls/agent-protocol.d.ts +2 -2
- package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
- package/dist/types/internal-urls/registry-helpers.d.ts +8 -7
- package/dist/types/internal-urls/types.d.ts +4 -0
- package/dist/types/lsp/index.d.ts +10 -10
- package/dist/types/modes/bridge/auth.d.ts +12 -0
- package/dist/types/modes/bridge/bridge-client-bridge.d.ts +9 -0
- package/dist/types/modes/bridge/bridge-mode.d.ts +44 -0
- package/dist/types/modes/bridge/bridge-ui-context.d.ts +88 -0
- package/dist/types/modes/bridge/event-stream.d.ts +8 -0
- package/dist/types/modes/components/custom-editor.d.ts +6 -0
- package/dist/types/modes/components/jobs-overlay-model.d.ts +31 -0
- package/dist/types/modes/components/jobs-overlay.d.ts +30 -0
- package/dist/types/modes/components/status-line/types.d.ts +2 -0
- package/dist/types/modes/components/status-line.d.ts +2 -0
- package/dist/types/modes/controllers/input-controller.d.ts +1 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +8 -0
- package/dist/types/modes/index.d.ts +1 -0
- package/dist/types/modes/interactive-mode.d.ts +1 -0
- package/dist/types/modes/jobs-observer.d.ts +57 -0
- package/dist/types/modes/rpc/host-tools.d.ts +1 -16
- package/dist/types/modes/rpc/host-uris.d.ts +1 -38
- package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +20 -0
- package/dist/types/modes/shared/agent-wire/command-validation.d.ts +2 -0
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +24 -0
- package/dist/types/modes/shared/agent-wire/handshake.d.ts +46 -0
- package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +16 -0
- package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +17 -0
- package/dist/types/modes/shared/agent-wire/protocol.d.ts +44 -0
- package/dist/types/modes/shared/agent-wire/responses.d.ts +4 -0
- package/dist/types/modes/shared/agent-wire/scopes.d.ts +18 -0
- package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +42 -0
- package/dist/types/modes/shared/agent-wire/ui-result.d.ts +27 -0
- package/dist/types/modes/types.d.ts +1 -0
- package/dist/types/sdk.d.ts +2 -0
- package/dist/types/session/agent-session.d.ts +11 -1
- package/dist/types/skill-state/workflow-state-contract.d.ts +1 -2
- package/dist/types/skill-state/workflow-state-version.d.ts +3 -0
- package/dist/types/task/id.d.ts +7 -0
- package/dist/types/task/index.d.ts +5 -0
- package/dist/types/task/receipt.d.ts +85 -0
- package/dist/types/task/spawn-gate.d.ts +38 -0
- package/dist/types/task/types.d.ts +143 -11
- package/dist/types/tools/cron.d.ts +6 -0
- package/dist/types/tools/index.d.ts +2 -0
- package/dist/types/tools/path-utils.d.ts +1 -0
- package/dist/types/tools/subagent.d.ts +15 -0
- package/package.json +7 -7
- package/scripts/build-binary.ts +7 -0
- package/src/async/job-manager.ts +36 -0
- package/src/cli/args.ts +9 -2
- package/src/commands/deep-interview.ts +1 -0
- package/src/commands/harness.ts +289 -19
- package/src/commands/launch.ts +2 -2
- package/src/commands/state.ts +2 -1
- package/src/commands/team.ts +22 -4
- package/src/config/keybindings.ts +6 -0
- package/src/config/settings-schema.ts +6 -3
- package/src/dap/client.ts +17 -3
- package/src/debug/crash-diagnostics.ts +223 -0
- package/src/debug/runtime-gauges.ts +20 -0
- package/src/deep-interview/render-middleware.ts +6 -0
- package/src/defaults/gjc/skills/deep-interview/SKILL.md +1 -1
- package/src/defaults/gjc/skills/ralplan/SKILL.md +31 -2
- package/src/defaults/gjc/skills/ultragoal/SKILL.md +28 -2
- package/src/eval/py/executor.ts +21 -1
- package/src/eval/py/kernel.ts +15 -0
- package/src/exec/bash-executor.ts +41 -0
- package/src/gjc-runtime/cli-write-receipt.ts +31 -0
- package/src/gjc-runtime/deep-interview-runtime.ts +69 -32
- package/src/gjc-runtime/ralplan-runtime.ts +213 -36
- package/src/gjc-runtime/state-migrations.ts +54 -7
- package/src/gjc-runtime/state-runtime.ts +461 -64
- package/src/gjc-runtime/state-schema.ts +192 -0
- package/src/gjc-runtime/state-writer.ts +32 -1
- package/src/gjc-runtime/team-runtime.ts +177 -105
- package/src/gjc-runtime/ultragoal-runtime.ts +114 -26
- package/src/gjc-runtime/workflow-command-ref.ts +239 -0
- package/src/gjc-runtime/workflow-manifest.generated.json +108 -4
- package/src/gjc-runtime/workflow-manifest.ts +3 -1
- package/src/harness-control-plane/control-endpoint.ts +19 -8
- package/src/harness-control-plane/owner.ts +57 -10
- package/src/harness-control-plane/state-machine.ts +2 -1
- package/src/hooks/skill-state.ts +176 -26
- package/src/internal-urls/agent-protocol.ts +68 -21
- package/src/internal-urls/artifact-protocol.ts +12 -17
- package/src/internal-urls/docs-index.generated.ts +3 -2
- package/src/internal-urls/registry-helpers.ts +19 -16
- package/src/internal-urls/types.ts +4 -0
- package/src/lsp/client.ts +18 -2
- package/src/main.ts +21 -5
- package/src/modes/bridge/auth.ts +41 -0
- package/src/modes/bridge/bridge-client-bridge.ts +47 -0
- package/src/modes/bridge/bridge-mode.ts +520 -0
- package/src/modes/bridge/bridge-ui-context.ts +200 -0
- package/src/modes/bridge/event-stream.ts +70 -0
- package/src/modes/components/custom-editor.ts +101 -0
- package/src/modes/components/hook-selector.ts +61 -18
- package/src/modes/components/jobs-overlay-model.ts +109 -0
- package/src/modes/components/jobs-overlay.ts +172 -0
- package/src/modes/components/status-line/presets.ts +7 -5
- package/src/modes/components/status-line/segments.ts +25 -0
- package/src/modes/components/status-line/types.ts +2 -0
- package/src/modes/components/status-line.ts +9 -1
- package/src/modes/controllers/extension-ui-controller.ts +39 -3
- package/src/modes/controllers/input-controller.ts +97 -9
- package/src/modes/controllers/selector-controller.ts +29 -0
- package/src/modes/index.ts +1 -0
- package/src/modes/interactive-mode.ts +27 -0
- package/src/modes/jobs-observer.ts +204 -0
- package/src/modes/rpc/host-tools.ts +1 -186
- package/src/modes/rpc/host-uris.ts +1 -235
- package/src/modes/rpc/rpc-client.ts +25 -10
- package/src/modes/rpc/rpc-mode.ts +12 -381
- package/src/modes/shared/agent-wire/command-dispatch.ts +341 -0
- package/src/modes/shared/agent-wire/command-validation.ts +131 -0
- package/src/modes/shared/agent-wire/event-envelope.ts +108 -0
- package/src/modes/shared/agent-wire/handshake.ts +117 -0
- package/src/modes/shared/agent-wire/host-tool-bridge.ts +194 -0
- package/src/modes/shared/agent-wire/host-uri-bridge.ts +236 -0
- package/src/modes/shared/agent-wire/protocol.ts +96 -0
- package/src/modes/shared/agent-wire/responses.ts +17 -0
- package/src/modes/shared/agent-wire/scopes.ts +89 -0
- package/src/modes/shared/agent-wire/ui-request-broker.ts +150 -0
- package/src/modes/shared/agent-wire/ui-result.ts +48 -0
- package/src/modes/types.ts +1 -0
- package/src/prompts/tools/subagent.md +12 -7
- package/src/prompts/tools/task-summary.md +3 -9
- package/src/prompts/tools/task.md +5 -1
- package/src/sdk.ts +4 -0
- package/src/session/agent-session.ts +214 -38
- package/src/skill-state/deep-interview-mutation-guard.ts +23 -4
- package/src/skill-state/workflow-state-contract.ts +7 -4
- package/src/skill-state/workflow-state-version.ts +3 -0
- package/src/slash-commands/builtin-registry.ts +8 -0
- package/src/task/executor.ts +29 -5
- package/src/task/id.ts +33 -0
- package/src/task/index.ts +257 -67
- package/src/task/output-manager.ts +5 -4
- package/src/task/receipt.ts +297 -0
- package/src/task/render.ts +48 -131
- package/src/task/spawn-gate.ts +132 -0
- package/src/task/types.ts +48 -7
- package/src/tools/ask.ts +73 -33
- package/src/tools/ast-edit.ts +1 -0
- package/src/tools/ast-grep.ts +1 -0
- package/src/tools/bash.ts +1 -1
- package/src/tools/cron.ts +48 -0
- package/src/tools/find.ts +4 -1
- package/src/tools/index.ts +2 -0
- package/src/tools/path-utils.ts +3 -2
- package/src/tools/read.ts +1 -0
- package/src/tools/search.ts +1 -0
- package/src/tools/skill.ts +6 -1
- package/src/tools/subagent.ts +237 -84
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { BRIDGE_PROTOCOL_VERSION, type BridgeFrameType } from "./protocol";
|
|
2
|
+
import type { BridgeCommandScope } from "./scopes";
|
|
3
|
+
export type BridgeCapability = "events" | "prompt" | "permission" | "elicitation" | "ui.declarative" | "ui.editor" | "ui.terminal_input" | "host_tools" | "host_uri" | "client_bridge.read_text_file" | "client_bridge.write_text_file" | "client_bridge.create_terminal";
|
|
4
|
+
export interface BridgeProtocolRange {
|
|
5
|
+
min: number;
|
|
6
|
+
max: number;
|
|
7
|
+
}
|
|
8
|
+
export interface BridgeHandshakeRequest {
|
|
9
|
+
protocol_version_range: BridgeProtocolRange;
|
|
10
|
+
capabilities: BridgeCapability[];
|
|
11
|
+
requested_scopes: BridgeCommandScope[];
|
|
12
|
+
last_seq?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface BridgeEndpointDescriptor {
|
|
15
|
+
events: string;
|
|
16
|
+
commands: string;
|
|
17
|
+
uiResponses: string;
|
|
18
|
+
claimControl: string;
|
|
19
|
+
disconnectControl: string;
|
|
20
|
+
hostToolResults: string;
|
|
21
|
+
hostUriResults: string;
|
|
22
|
+
}
|
|
23
|
+
export interface BridgeHandshakeAccepted {
|
|
24
|
+
status: "accepted";
|
|
25
|
+
protocol_version: typeof BRIDGE_PROTOCOL_VERSION;
|
|
26
|
+
session_id: string;
|
|
27
|
+
accepted_capabilities: BridgeCapability[];
|
|
28
|
+
accepted_scopes: BridgeCommandScope[];
|
|
29
|
+
unsupported: BridgeCapability[];
|
|
30
|
+
endpoints: BridgeEndpointDescriptor;
|
|
31
|
+
frame_types: BridgeFrameType[];
|
|
32
|
+
}
|
|
33
|
+
export interface BridgeHandshakeRejected {
|
|
34
|
+
status: "rejected";
|
|
35
|
+
reason: "incompatible_version" | "unauthorized" | "invalid_request";
|
|
36
|
+
message: string;
|
|
37
|
+
}
|
|
38
|
+
export type BridgeHandshakeResponse = BridgeHandshakeAccepted | BridgeHandshakeRejected;
|
|
39
|
+
export declare function isBridgeHandshakeRequest(value: unknown): value is BridgeHandshakeRequest;
|
|
40
|
+
export declare function negotiateBridgeHandshake(request: BridgeHandshakeRequest, server: {
|
|
41
|
+
sessionId: string;
|
|
42
|
+
capabilities: readonly BridgeCapability[];
|
|
43
|
+
scopes: readonly BridgeCommandScope[];
|
|
44
|
+
endpoints: BridgeEndpointDescriptor;
|
|
45
|
+
frameTypes: readonly BridgeFrameType[];
|
|
46
|
+
}): BridgeHandshakeResponse;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AgentTool, AgentToolResult, AgentToolUpdateCallback } from "@gajae-code/agent-core";
|
|
2
|
+
import type { RpcHostToolCallRequest, RpcHostToolCancelRequest, RpcHostToolDefinition, RpcHostToolResult, RpcHostToolUpdate } from "../../rpc/rpc-types";
|
|
3
|
+
type RpcHostToolOutput = (frame: RpcHostToolCallRequest | RpcHostToolCancelRequest) => void;
|
|
4
|
+
export declare function isRpcHostToolResult(value: unknown): value is RpcHostToolResult;
|
|
5
|
+
export declare function isRpcHostToolUpdate(value: unknown): value is RpcHostToolUpdate;
|
|
6
|
+
export declare class RpcHostToolBridge {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(output: RpcHostToolOutput);
|
|
9
|
+
getToolNames(): string[];
|
|
10
|
+
setTools(tools: RpcHostToolDefinition[]): AgentTool[];
|
|
11
|
+
handleResult(frame: RpcHostToolResult): boolean;
|
|
12
|
+
handleUpdate(frame: RpcHostToolUpdate): boolean;
|
|
13
|
+
requestExecution(definition: RpcHostToolDefinition, toolCallId: string, args: Record<string, unknown>, signal?: AbortSignal, onUpdate?: AgentToolUpdateCallback<unknown>): Promise<AgentToolResult<unknown>>;
|
|
14
|
+
rejectAllPending(message: string): void;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InternalUrlRouter } from "../../../internal-urls";
|
|
2
|
+
import type { InternalResource, InternalUrl, ResolveContext, WriteContext } from "../../../internal-urls/types";
|
|
3
|
+
import type { RpcHostUriCancelRequest, RpcHostUriRequest, RpcHostUriResult, RpcHostUriSchemeDefinition } from "../../rpc/rpc-types";
|
|
4
|
+
type RpcHostUriOutput = (frame: RpcHostUriRequest | RpcHostUriCancelRequest) => void;
|
|
5
|
+
export declare function isRpcHostUriResult(value: unknown): value is RpcHostUriResult;
|
|
6
|
+
export declare class RpcHostUriBridge {
|
|
7
|
+
#private;
|
|
8
|
+
constructor(output: RpcHostUriOutput, router?: InternalUrlRouter);
|
|
9
|
+
getSchemes(): string[];
|
|
10
|
+
setSchemes(schemes: RpcHostUriSchemeDefinition[]): string[];
|
|
11
|
+
clear(message?: string): void;
|
|
12
|
+
handleResult(frame: RpcHostUriResult): boolean;
|
|
13
|
+
rejectAllPending(message: string): void;
|
|
14
|
+
requestRead(scheme: string, url: InternalUrl, context?: ResolveContext): Promise<InternalResource>;
|
|
15
|
+
requestWrite(_scheme: string, url: InternalUrl, content: string, context?: WriteContext): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared agent-wire protocol primitives for GJC bridge surfaces.
|
|
3
|
+
*
|
|
4
|
+
* This module is the transport-agnostic, versioned frame contract that the
|
|
5
|
+
* RPC mode and the (in-progress) `--mode bridge` wiring site both build on.
|
|
6
|
+
* It carries the SEMANTIC agent surface — events, responses, and UI/permission
|
|
7
|
+
* requests — never pixels. See `.gjc/specs/deep-interview-gjc-backend-bridge.md`
|
|
8
|
+
* and `.gjc/plans/ralplan/gjc-backend-bridge/pending-approval.md`.
|
|
9
|
+
*/
|
|
10
|
+
import type { AgentSessionEvent } from "../../../session/agent-session";
|
|
11
|
+
/** Wire protocol version. Bump on breaking envelope/semantic changes. */
|
|
12
|
+
export declare const BRIDGE_PROTOCOL_VERSION: 1;
|
|
13
|
+
/** The discriminant of every `AgentSessionEvent` the agent can emit. */
|
|
14
|
+
export type AgentSessionEventType = AgentSessionEvent["type"];
|
|
15
|
+
/** Every agent-session event type, derived from the exhaustive registry. */
|
|
16
|
+
export declare const AGENT_SESSION_EVENT_TYPES: readonly AgentSessionEventType[];
|
|
17
|
+
/** Top-level frame categories carried over any bridge transport. */
|
|
18
|
+
export type BridgeFrameType = "ready" | "event" | "response" | "ui_request" | "permission_request" | "host_tool_call" | "host_uri_request" | "reset" | "error";
|
|
19
|
+
/**
|
|
20
|
+
* Universal frame envelope. Every frame on every transport carries these
|
|
21
|
+
* fields so clients can order (`seq`), resume (`seq` cursor), and correlate
|
|
22
|
+
* request/response pairs (`correlation_id`). `session_id` is present from v1
|
|
23
|
+
* even though v1 runs one session per process, so in-process multiplexing is
|
|
24
|
+
* an additive, non-breaking change later.
|
|
25
|
+
*/
|
|
26
|
+
export interface BridgeFrameEnvelope<TType extends BridgeFrameType = BridgeFrameType, TPayload = unknown> {
|
|
27
|
+
protocol_version: typeof BRIDGE_PROTOCOL_VERSION;
|
|
28
|
+
session_id: string;
|
|
29
|
+
/** Monotonic per-session sequence number, starting at 1. */
|
|
30
|
+
seq: number;
|
|
31
|
+
/** Unique id for this frame. */
|
|
32
|
+
frame_id: string;
|
|
33
|
+
/** Ties a request frame to its response frame, when applicable. */
|
|
34
|
+
correlation_id?: string;
|
|
35
|
+
type: TType;
|
|
36
|
+
payload: TPayload;
|
|
37
|
+
}
|
|
38
|
+
/** Payload carried by an `event` frame. */
|
|
39
|
+
export interface BridgeEventPayload {
|
|
40
|
+
event_type: AgentSessionEventType;
|
|
41
|
+
event: AgentSessionEvent;
|
|
42
|
+
}
|
|
43
|
+
/** An `AgentSessionEvent` serialized into a versioned wire frame. */
|
|
44
|
+
export type BridgeEventFrame = BridgeFrameEnvelope<"event", BridgeEventPayload>;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Shared RPC-compatible response helpers for agent-wire consumers. */
|
|
2
|
+
import type { RpcCommand, RpcResponse } from "../../rpc/rpc-types";
|
|
3
|
+
export declare function rpcSuccess<T extends RpcCommand["type"]>(id: string | undefined, command: T, data?: object | null): RpcResponse;
|
|
4
|
+
export declare function rpcError(id: string | undefined, command: string, message: string): RpcResponse;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coarse bridge authorization scopes for RPC commands.
|
|
3
|
+
*
|
|
4
|
+
* The v1 bridge exposes a network-reachable control surface, so every
|
|
5
|
+
* `RpcCommand` must be assigned to one coarse scope before any REST handler can
|
|
6
|
+
* dispatch it. The registry is intentionally typed as `Record<RpcCommandType,
|
|
7
|
+
* BridgeCommandScope>` so adding a new RPC command without a scope is a compile
|
|
8
|
+
* failure.
|
|
9
|
+
*/
|
|
10
|
+
import type { RpcCommand } from "../../rpc/rpc-types";
|
|
11
|
+
export type RpcCommandType = RpcCommand["type"];
|
|
12
|
+
export type BridgeCommandScope = "prompt" | "control" | "bash" | "export" | "session" | "model" | "message:read" | "host_tools" | "host_uri" | "admin";
|
|
13
|
+
export declare const BRIDGE_COMMAND_SCOPES: readonly BridgeCommandScope[];
|
|
14
|
+
export declare const RPC_COMMAND_TYPES: readonly RpcCommandType[];
|
|
15
|
+
export declare function isRpcCommandType(value: unknown): value is RpcCommandType;
|
|
16
|
+
export declare const MANDATORY_FLOOR_COMMAND_SCOPES: readonly BridgeCommandScope[];
|
|
17
|
+
export declare function scopeForRpcCommand(type: RpcCommandType): BridgeCommandScope;
|
|
18
|
+
export declare function isRpcCommandAllowed(type: RpcCommandType, scopes: ReadonlySet<BridgeCommandScope>): boolean;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type UiRequestCancelReason = "timeout" | "abort" | "disconnect";
|
|
2
|
+
export interface UiRequestCancelled {
|
|
3
|
+
status: "cancelled";
|
|
4
|
+
reason: UiRequestCancelReason;
|
|
5
|
+
}
|
|
6
|
+
export type UiRequestResolution<TResponse> = TResponse | UiRequestCancelled;
|
|
7
|
+
export type UiBrokerResponseResult = {
|
|
8
|
+
status: "accepted";
|
|
9
|
+
} | {
|
|
10
|
+
status: "rejected";
|
|
11
|
+
code: "not_controller" | "already_resolved" | "unknown_request";
|
|
12
|
+
};
|
|
13
|
+
export interface UiRequestBrokerOptions<TRequest> {
|
|
14
|
+
emitRequest: (correlationId: string, request: TRequest) => void;
|
|
15
|
+
}
|
|
16
|
+
export interface UiRequestOptions {
|
|
17
|
+
correlationId?: string;
|
|
18
|
+
timeoutMs?: number;
|
|
19
|
+
signal?: AbortSignal;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Broker for one active session. v1 supports one controller token at a time;
|
|
23
|
+
* other clients may observe frames but cannot answer correlated requests.
|
|
24
|
+
*/
|
|
25
|
+
export declare class UiRequestBroker<TRequest, TResponse> {
|
|
26
|
+
#private;
|
|
27
|
+
constructor(options: UiRequestBrokerOptions<TRequest>);
|
|
28
|
+
get ownerToken(): string | undefined;
|
|
29
|
+
get pendingCount(): number;
|
|
30
|
+
claimController(ownerToken?: string): {
|
|
31
|
+
status: "claimed";
|
|
32
|
+
ownerToken: string;
|
|
33
|
+
} | {
|
|
34
|
+
status: "busy";
|
|
35
|
+
};
|
|
36
|
+
releaseController(ownerToken: string): boolean;
|
|
37
|
+
request(request: TRequest, options?: UiRequestOptions): Promise<UiRequestResolution<TResponse>>;
|
|
38
|
+
respond(correlationId: string, ownerToken: string, response: TResponse): UiBrokerResponseResult;
|
|
39
|
+
cancelAll(reason: UiRequestCancelReason): void;
|
|
40
|
+
cancel(correlationId: string, reason: UiRequestCancelReason): boolean;
|
|
41
|
+
disconnectController(ownerToken: string): boolean;
|
|
42
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed UI/manipulation result semantics for bridge-capability handling.
|
|
3
|
+
*
|
|
4
|
+
* `unsupported` is distinct from both a real value and user cancellation. This
|
|
5
|
+
* prevents local-only or undeclared `ExtensionUIContext` surfaces from becoming
|
|
6
|
+
* silent no-ops that look like user intent.
|
|
7
|
+
*/
|
|
8
|
+
export interface BridgeUiValue<TValue> {
|
|
9
|
+
status: "value";
|
|
10
|
+
value: TValue;
|
|
11
|
+
}
|
|
12
|
+
export interface BridgeUiCancelled {
|
|
13
|
+
status: "cancelled";
|
|
14
|
+
reason?: "user" | "timeout" | "abort" | "disconnect";
|
|
15
|
+
}
|
|
16
|
+
export interface BridgeUiUnsupported {
|
|
17
|
+
status: "unsupported";
|
|
18
|
+
capability: string;
|
|
19
|
+
reason: string;
|
|
20
|
+
}
|
|
21
|
+
export type BridgeUiResult<TValue> = BridgeUiValue<TValue> | BridgeUiCancelled | BridgeUiUnsupported;
|
|
22
|
+
export declare function uiValue<TValue>(value: TValue): BridgeUiValue<TValue>;
|
|
23
|
+
export declare function uiCancelled(reason?: BridgeUiCancelled["reason"]): BridgeUiCancelled;
|
|
24
|
+
export declare function uiUnsupported(capability: string, reason: string): BridgeUiUnsupported;
|
|
25
|
+
export declare function isUiUnsupported<TValue>(result: BridgeUiResult<TValue>): result is BridgeUiUnsupported;
|
|
26
|
+
export declare function isUiCancelled<TValue>(result: BridgeUiResult<TValue>): result is BridgeUiCancelled;
|
|
27
|
+
export declare function isUiValue<TValue>(result: BridgeUiResult<TValue>): result is BridgeUiValue<TValue>;
|
|
@@ -228,6 +228,7 @@ export interface InteractiveModeContext {
|
|
|
228
228
|
showHookConfirm(title: string, message: string): Promise<boolean>;
|
|
229
229
|
showDebugSelector(): void;
|
|
230
230
|
showSessionObserver(): void;
|
|
231
|
+
showJobsOverlay(): void;
|
|
231
232
|
resetObserverRegistry(): void;
|
|
232
233
|
handleCtrlC(): void;
|
|
233
234
|
handleCtrlD(): void;
|
package/dist/types/sdk.d.ts
CHANGED
|
@@ -93,6 +93,8 @@ export interface CreateAgentSessionOptions {
|
|
|
93
93
|
requireYieldTool?: boolean;
|
|
94
94
|
/** Task recursion depth (for subagent sessions). Default: 0 */
|
|
95
95
|
taskDepth?: number;
|
|
96
|
+
/** Current role-agent type/name for nested task sessions. */
|
|
97
|
+
currentAgentType?: string;
|
|
96
98
|
/** Parent Hindsight state to alias for subagent memory tools. */
|
|
97
99
|
parentHindsightSessionState?: HindsightSessionState;
|
|
98
100
|
/** Pre-allocated agent identity for IRC routing. Default: "0-Main" for top-level, parentTaskPrefix-derived for sub. */
|
|
@@ -133,7 +133,7 @@ export type AgentSessionEvent = AgentEvent | {
|
|
|
133
133
|
};
|
|
134
134
|
/** Listener function for agent session events */
|
|
135
135
|
export type AgentSessionEventListener = (event: AgentSessionEvent) => void;
|
|
136
|
-
export type AsyncJobSnapshotItem = Pick<AsyncJob, "id" | "type" | "status" | "label" | "startTime">;
|
|
136
|
+
export type AsyncJobSnapshotItem = Pick<AsyncJob, "id" | "type" | "status" | "label" | "startTime" | "metadata">;
|
|
137
137
|
export interface AsyncJobSnapshot {
|
|
138
138
|
running: AsyncJobSnapshotItem[];
|
|
139
139
|
recent: AsyncJobSnapshotItem[];
|
|
@@ -358,6 +358,7 @@ export declare class AgentSession {
|
|
|
358
358
|
* Does NOT push to the agent's steering/followUp queue — that happens
|
|
359
359
|
* separately inside `sendCustomMessage`. */
|
|
360
360
|
enqueueCustomMessageDisplay(text: string, mode: "steer" | "followUp"): string;
|
|
361
|
+
getAgentId(): string | undefined;
|
|
361
362
|
getAsyncJobSnapshot(options?: {
|
|
362
363
|
recentLimit?: number;
|
|
363
364
|
}): AsyncJobSnapshot | null;
|
|
@@ -577,6 +578,10 @@ export declare class AgentSession {
|
|
|
577
578
|
};
|
|
578
579
|
/** Number of pending messages (includes steering, follow-up, and next-turn messages) */
|
|
579
580
|
get queuedMessageCount(): number;
|
|
581
|
+
/** Whether the agent has queued steering messages that a `user_interrupt`
|
|
582
|
+
* abort would resume into (steer-on-interrupt). Drives the Esc-on-steer UX:
|
|
583
|
+
* the first Esc consumes the steer and auto-continues, a second Esc aborts. */
|
|
584
|
+
get hasQueuedSteering(): boolean;
|
|
580
585
|
/** Get pending messages (read-only). Returns the public text-only view;
|
|
581
586
|
* internal `{text, tag?}` records are mapped to `.text` so callers
|
|
582
587
|
* (`updatePendingMessagesDisplay`, `restoreQueuedMessagesToEditor`) see
|
|
@@ -606,6 +611,11 @@ export declare class AgentSession {
|
|
|
606
611
|
goalReason?: "interrupted" | "internal";
|
|
607
612
|
timeoutMs?: number;
|
|
608
613
|
cause?: "user_interrupt" | "new_session" | "session_switch" | "compaction" | "handoff" | "tool_abort" | "internal";
|
|
614
|
+
/** Suppress the "Operation aborted" line on the resulting aborted message
|
|
615
|
+
* by stamping `SILENT_ABORT_MARKER`. Used when Esc consumes a queued steer
|
|
616
|
+
* and resumes via steer-on-interrupt, so the interrupt reads as a quiet
|
|
617
|
+
* hand-off rather than a failure. */
|
|
618
|
+
silent?: boolean;
|
|
609
619
|
}): Promise<void>;
|
|
610
620
|
/**
|
|
611
621
|
* Start a new session, optionally with initial messages and parent tracking.
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type CanonicalGjcWorkflowSkill } from "./active-state";
|
|
2
|
+
export { WORKFLOW_STATE_RECEIPT_FRESH_MS, WORKFLOW_STATE_RECEIPT_VERSION, WORKFLOW_STATE_VERSION, } from "./workflow-state-version";
|
|
2
3
|
export type { CanonicalGjcWorkflowSkill };
|
|
3
|
-
export declare const WORKFLOW_STATE_RECEIPT_VERSION = 1;
|
|
4
|
-
export declare const WORKFLOW_STATE_RECEIPT_FRESH_MS: number;
|
|
5
4
|
export type WorkflowStateMutationOwner = "gjc-state-cli" | "gjc-runtime" | "gjc-hook";
|
|
6
5
|
export type WorkflowStateReceiptStatus = "fresh" | "stale";
|
|
7
6
|
export interface WorkflowStateContentChecksum {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const TASK_ID_PATTERN: RegExp;
|
|
2
|
+
export declare const TASK_ID_DESCRIPTION = "filesystem-safe identifier matching ^[A-Za-z0-9][A-Za-z0-9_-]{0,47}$";
|
|
3
|
+
export declare function isValidTaskId(id: string): boolean;
|
|
4
|
+
export declare function getTaskIdValidationError(id: unknown): string | undefined;
|
|
5
|
+
export declare function validateTaskId(id: string): string;
|
|
6
|
+
export declare function isValidAllocatedTaskId(id: string): boolean;
|
|
7
|
+
export declare function validateAllocatedTaskId(id: string): string;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AgentTool, AgentToolResult, AgentToolUpdateCallback } from "@gajae-code/agent-core";
|
|
2
|
+
import type { Model } from "@gajae-code/ai";
|
|
2
3
|
import type { ToolSession } from "..";
|
|
3
4
|
import type { Theme } from "../modes/theme/theme";
|
|
4
5
|
import { type TaskToolDetails, type TaskToolSchemaInstance } from "./types";
|
|
@@ -7,9 +8,13 @@ import { renderResult, renderCall as renderTaskCall } from "./render";
|
|
|
7
8
|
export { loadBundledAgents as BUNDLED_AGENTS } from "./agents";
|
|
8
9
|
export { discoverCommands, expandCommand, getCommand } from "./commands";
|
|
9
10
|
export { discoverAgents, getAgent } from "./discovery";
|
|
11
|
+
export { isValidAllocatedTaskId, isValidTaskId, TASK_ID_DESCRIPTION, TASK_ID_PATTERN, validateAllocatedTaskId, validateTaskId, } from "./id";
|
|
10
12
|
export { AgentOutputManager } from "./output-manager";
|
|
13
|
+
export type { TaskResultReceipt } from "./receipt";
|
|
14
|
+
export { assertNoRawTaskFields, buildTaskReceipt, buildTaskRoi, buildTaskRoiSummary, findRawTaskLeakKeys, sanitizeTaskToolDetails, } from "./receipt";
|
|
11
15
|
export type { AgentDefinition, AgentProgress, SingleResult, SubagentLifecyclePayload, SubagentProgressPayload, TaskParams, TaskToolDetails, } from "./types";
|
|
12
16
|
export { TASK_SUBAGENT_EVENT_CHANNEL, TASK_SUBAGENT_LIFECYCLE_CHANNEL, TASK_SUBAGENT_PROGRESS_CHANNEL, taskSchema, } from "./types";
|
|
17
|
+
export declare function resolveForkContextMaxTokens(configured: number, model: Model | undefined): number;
|
|
13
18
|
/**
|
|
14
19
|
* Task tool - Delegate tasks to specialized agents.
|
|
15
20
|
*
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { SingleResult, TaskToolDetails } from "./types";
|
|
2
|
+
export interface TaskRoi {
|
|
3
|
+
tokens: number;
|
|
4
|
+
contextTokens?: number;
|
|
5
|
+
clonedTokens?: number;
|
|
6
|
+
costTotal?: number;
|
|
7
|
+
outputBytes?: number;
|
|
8
|
+
outputLines?: number;
|
|
9
|
+
producedChanges: boolean;
|
|
10
|
+
materialContribution: boolean;
|
|
11
|
+
lowRoi: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface TaskResultReceipt {
|
|
14
|
+
index: number;
|
|
15
|
+
id: string;
|
|
16
|
+
agent: string;
|
|
17
|
+
agentSource: SingleResult["agentSource"];
|
|
18
|
+
task: string;
|
|
19
|
+
assignment?: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
status: "completed" | "failed" | "aborted" | "merge_failed" | "paused";
|
|
22
|
+
exitCode: number;
|
|
23
|
+
aborted?: boolean;
|
|
24
|
+
paused?: boolean;
|
|
25
|
+
truncated: boolean;
|
|
26
|
+
durationMs: number;
|
|
27
|
+
tokens: number;
|
|
28
|
+
contextTokens?: number;
|
|
29
|
+
contextWindow?: number;
|
|
30
|
+
modelOverride?: string | string[];
|
|
31
|
+
usage?: SingleResult["usage"];
|
|
32
|
+
cost?: number;
|
|
33
|
+
branchName?: string;
|
|
34
|
+
retryFailure?: {
|
|
35
|
+
attempt: number;
|
|
36
|
+
errorSummary: string;
|
|
37
|
+
};
|
|
38
|
+
errorSummary?: string;
|
|
39
|
+
abortSummary?: string;
|
|
40
|
+
preview: string;
|
|
41
|
+
previewTruncated: boolean;
|
|
42
|
+
outputRef?: {
|
|
43
|
+
uri: string;
|
|
44
|
+
sizeBytes: number;
|
|
45
|
+
lineCount: number;
|
|
46
|
+
sha256?: string;
|
|
47
|
+
};
|
|
48
|
+
outputUnavailable?: boolean;
|
|
49
|
+
review?: {
|
|
50
|
+
overallCorrectness?: string;
|
|
51
|
+
findingCount: number;
|
|
52
|
+
findings?: Array<{
|
|
53
|
+
severity?: string;
|
|
54
|
+
summary: string;
|
|
55
|
+
}>;
|
|
56
|
+
};
|
|
57
|
+
extractedToolCounts?: Record<string, number>;
|
|
58
|
+
forkContext?: SingleResult["forkContext"];
|
|
59
|
+
roi?: TaskRoi;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Heuristic task ROI signal built only from receipt-safe accounting fields.
|
|
63
|
+
* Advisory only: these flags never change task success/failure semantics.
|
|
64
|
+
*/
|
|
65
|
+
export declare function buildTaskRoi(raw: SingleResult): TaskRoi;
|
|
66
|
+
export declare function buildTaskRoiSummary(receipts: readonly TaskResultReceipt[]): TaskToolDetails["roiSummary"];
|
|
67
|
+
export declare function buildTaskReceipt(raw: SingleResult): TaskResultReceipt;
|
|
68
|
+
/**
|
|
69
|
+
* Raw, pre-sanitization task details: the internal shape produced during task
|
|
70
|
+
* execution, where `results` are full `SingleResult` objects. The public
|
|
71
|
+
* `TaskToolDetails` exposes only receipts.
|
|
72
|
+
*/
|
|
73
|
+
export interface RawTaskToolDetails {
|
|
74
|
+
projectAgentsDir: string | null;
|
|
75
|
+
results: SingleResult[];
|
|
76
|
+
totalDurationMs: number;
|
|
77
|
+
usage?: TaskToolDetails["usage"];
|
|
78
|
+
async?: TaskToolDetails["async"];
|
|
79
|
+
forkContextClonedTokens?: number;
|
|
80
|
+
roiSummary?: TaskToolDetails["roiSummary"];
|
|
81
|
+
}
|
|
82
|
+
/** Central converter from raw task details to receipt-only public details. */
|
|
83
|
+
export declare function sanitizeTaskToolDetails(raw: RawTaskToolDetails): TaskToolDetails;
|
|
84
|
+
export declare function findRawTaskLeakKeys(value: unknown): string[];
|
|
85
|
+
export declare function assertNoRawTaskFields(value: unknown, surface: string): void;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/** The hard, locked batch threshold enforced by the runtime gate. */
|
|
2
|
+
export declare const DEFAULT_SPAWN_THRESHOLD = 4;
|
|
3
|
+
/** The justification a large batch or reviewer-spawned explorer must supply to pass the hard gate. */
|
|
4
|
+
export interface SpawnPlanReceipt {
|
|
5
|
+
whyParallel: string;
|
|
6
|
+
whyNotLocal: string;
|
|
7
|
+
independence: string;
|
|
8
|
+
expectedReceiptShape: string;
|
|
9
|
+
maxInlineTokens: number;
|
|
10
|
+
}
|
|
11
|
+
export interface SpawnGateRequest {
|
|
12
|
+
/** Number of children the batch wants to spawn. */
|
|
13
|
+
childCount: number;
|
|
14
|
+
/** The spawn-plan receipt, when provided. */
|
|
15
|
+
plan?: SpawnPlanReceipt;
|
|
16
|
+
}
|
|
17
|
+
export interface ReviewerExploreGateRequest {
|
|
18
|
+
/** Agent type/name doing the spawning, when known. */
|
|
19
|
+
spawningAgentType?: string | null;
|
|
20
|
+
/** Target agent type/name requested by the task call. */
|
|
21
|
+
targetAgent: string;
|
|
22
|
+
/** The spawn-plan receipt, when provided. */
|
|
23
|
+
plan?: SpawnPlanReceipt;
|
|
24
|
+
}
|
|
25
|
+
export type SpawnGateOutcome = "allowed" | "rejected";
|
|
26
|
+
export interface SpawnGateDecision {
|
|
27
|
+
outcome: SpawnGateOutcome;
|
|
28
|
+
/** Human-readable reason, suitable for a blocked-result message. */
|
|
29
|
+
reason: string;
|
|
30
|
+
/** Whether a plan was required for this request. */
|
|
31
|
+
planRequired: boolean;
|
|
32
|
+
/** Missing plan field names when rejected for an incomplete plan. */
|
|
33
|
+
missingFields: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
export declare function findMissingPlanFields(plan: SpawnPlanReceipt | undefined): string[];
|
|
36
|
+
export declare function decide(childCount: number, threshold: number, plan: SpawnPlanReceipt | undefined): SpawnGateDecision;
|
|
37
|
+
export declare function evaluateSpawnGate(request: SpawnGateRequest): SpawnGateDecision;
|
|
38
|
+
export declare function evaluateReviewerExploreGate(request: ReviewerExploreGateRequest): SpawnGateDecision;
|