Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/update-dsh-rc2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@orbisapp/remote-dsh": patch
---

Update the Orbis DSH plugin to the DSH 0.1.1-rc.2 SDK and extend the Orbis v2 bridge with capability-gated image upload/download, file and session prompt-reference completion, Ask User question responses, plan-mode selection, and read-only subagent listings. Project DSH plan-mode, goal/todo, and question state plus run-activity and presence signals into canonical Orbis snapshots and events; preserve interrupted assistant messages as aborted entries; and expand disposable real-profile smoke coverage for the new protocol paths.
41 changes: 40 additions & 1 deletion packages/orbis-agent-backend/src/backend.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import type { AgentDriverDescriptor } from "./capabilities";
import { AgentBackendError } from "./errors";
import type {
AgentAttachmentReadResult,
AgentJsonValue,
AgentModelSelection,
AgentPromptContentBlock,
AgentPermissionResponseInput,
AgentPermissionResponseResult,
AgentQuestionResponseInput,
AgentQuestionResponseResult,
AgentSessionEventListener,
} from "./events";
import type {
Expand All @@ -18,6 +22,11 @@ import type {
} from "./identifiers";
import { agentBackendId } from "./identifiers";
import type { AgentSessionProjection } from "./projection";
import type {
AgentPromptReferenceCompletionInput,
AgentPromptReferenceCompletionResult,
} from "./references";
import type { AgentSessionSubagentEntry } from "./subagents";

export type AgentBackendKind = "local" | "remote";

Expand Down Expand Up @@ -51,6 +60,9 @@ export type AgentRuntimeStatus =
| "ready"
| "running";

/** Observes lifecycle transitions for one session runtime façade. */
export type AgentRuntimeStatusListener = (status: AgentRuntimeStatus) => void;

export interface AgentSessionRecord {
readonly createdAt: AgentTimestamp;
readonly ref: AgentSessionRef;
Expand Down Expand Up @@ -146,6 +158,7 @@ export interface AgentWorkspaceRegisterResult {
/** Client-writable session state. Runtime and transcript fields are event-owned. */
export interface AgentSessionUpdatePatch {
readonly configOptions?: Readonly<Record<string, AgentJsonValue>>;
/** Driver-owned session mode; plan mode uses the canonical "plan" value. */
readonly mode?: string | null;
readonly model?: AgentModelSelection | null;
readonly title?: string | null;
Expand All @@ -172,9 +185,9 @@ export type AgentPromptDelivery =
| "steer";

export interface AgentPromptInput {
readonly content: readonly AgentPromptContentBlock[];
readonly delivery?: AgentPromptDelivery;
readonly idempotencyKey?: string;
readonly text: string;
}

export interface AgentPromptReceipt {
Expand All @@ -196,8 +209,10 @@ export interface AgentSessionRuntime {
cancel(input?: AgentCancelInput): Promise<AgentCancelResult>;
close(): Promise<void>;
getStatus(): AgentRuntimeStatus;
observeStatus(listener: AgentRuntimeStatusListener): () => void;
prompt(input: AgentPromptInput): Promise<AgentPromptReceipt>;
respondPermission(input: AgentPermissionResponseInput): Promise<AgentPermissionResponseResult>;
respondQuestion(input: AgentQuestionResponseInput): Promise<AgentQuestionResponseResult>;
subscribe(listener: AgentSessionEventListener): () => void;
}

Expand All @@ -210,13 +225,25 @@ export interface AgentHarnessDriver {

close(): Promise<void>;
connectRuntime(ref: AgentSessionRef): Promise<AgentSessionRuntime>;
completePromptReferences(
input: AgentPromptReferenceCompletionInput,
): Promise<AgentPromptReferenceCompletionResult | undefined>;
createSession(input?: Omit<AgentSessionCreateInput, "driverId">): Promise<AgentSessionRecord>;
listModels(): Promise<readonly AgentModelMetadata[]>;
listWorkspaces(): Promise<readonly AgentWorkspaceDescriptor[]>;
listSessions(
input?: Omit<AgentSessionListInput, "driverId">,
): Promise<readonly AgentSessionSummary[]>;
listSessionSubagents(
ref: AgentSessionRef,
signal?: AbortSignal,
): Promise<readonly AgentSessionSubagentEntry[]>;
readSession(ref: AgentSessionRef): Promise<AgentSessionProjection>;
readAttachment(
ref: AgentSessionRef,
attachmentId: string,
signal?: AbortSignal,
): Promise<AgentAttachmentReadResult>;
updateSession(
ref: AgentSessionRef,
input: AgentSessionUpdateInput,
Expand All @@ -241,7 +268,19 @@ export interface AgentBackend {
listModels(input?: AgentModelListInput): Promise<readonly AgentModelMetadata[]>;
listWorkspaces(input: AgentWorkspaceListInput): Promise<readonly AgentWorkspaceDescriptor[]>;
listSessions(input?: AgentSessionListInput): Promise<readonly AgentSessionSummary[]>;
listSessionSubagents(
ref: AgentSessionRef,
signal?: AbortSignal,
): Promise<readonly AgentSessionSubagentEntry[]>;
readSession(ref: AgentSessionRef): Promise<AgentSessionProjection>;
completePromptReferences(
input: AgentPromptReferenceCompletionInput,
): Promise<AgentPromptReferenceCompletionResult | undefined>;
readAttachment(
ref: AgentSessionRef,
attachmentId: string,
signal?: AbortSignal,
): Promise<AgentAttachmentReadResult>;
registerWorkspace(input: AgentWorkspaceRegisterInput): Promise<AgentWorkspaceRegisterResult>;
updateSession(
ref: AgentSessionRef,
Expand Down
5 changes: 5 additions & 0 deletions packages/orbis-agent-backend/src/capabilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,20 @@ export const AGENT_DRIVER_CAPABILITIES = [
"input.attachments",
"model.select",
"permission.respond",
"plan.select",
"prompt.follow_up",
"prompt.references.files",
"prompt.references.sessions",
"prompt.steer",
"question.respond",
"run.cancel",
"session.create",
"session.dispose",
"session.fork",
"session.list",
"session.read",
"session.resume",
"session.subagents.list",
"thinking.select",
"workspace.open",
"workspace.select",
Expand Down
Loading
Loading