@draht/coding-agent 2026.3.25 → 2026.4.5
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 +107 -0
- package/README.md +6 -2
- package/dist/core/agent-session-runtime.d.ts +136 -0
- package/dist/core/agent-session-runtime.d.ts.map +1 -0
- package/dist/core/agent-session-runtime.js +267 -0
- package/dist/core/agent-session-runtime.js.map +1 -0
- package/dist/core/agent-session.d.ts +22 -44
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +44 -248
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +3 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +5 -2
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +2 -0
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +2 -2
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +2 -2
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +9 -9
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +2 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +2 -2
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/types.d.ts +16 -16
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +10 -0
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +5 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +70 -8
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/model-registry.d.ts +21 -3
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +90 -70
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +4 -4
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts +6 -0
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +37 -5
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +2 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +5 -1
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +6 -3
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +17 -23
- package/dist/core/sdk.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +49 -10
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +1 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +4 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +8 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +90 -87
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +6 -11
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +4 -4
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +87 -74
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +2 -2
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +69 -49
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/docs/development.md +2 -2
- package/docs/extensions.md +78 -22
- package/docs/models.md +6 -0
- package/docs/packages.md +3 -3
- package/docs/rpc.md +2 -2
- package/docs/sdk.md +170 -82
- package/docs/tree.md +1 -1
- package/examples/extensions/custom-compaction.ts +17 -4
- package/examples/extensions/handoff.ts +5 -2
- package/examples/extensions/hello.ts +18 -17
- package/examples/extensions/qna.ts +5 -2
- package/examples/extensions/rpc-demo.ts +3 -9
- package/examples/extensions/status-line.ts +0 -8
- package/examples/extensions/subagent/index.ts +1 -1
- package/examples/extensions/summarize.ts +15 -4
- package/examples/extensions/todo.ts +0 -2
- package/examples/extensions/tools.ts +0 -5
- package/examples/extensions/widget-placement.ts +4 -12
- package/examples/sdk/02-custom-model.ts +1 -1
- package/examples/sdk/09-api-keys-and-oauth.ts +3 -3
- package/examples/sdk/12-full-control.ts +1 -1
- package/examples/sdk/13-session-runtime.ts +49 -0
- package/examples/sdk/README.md +5 -4
- package/package.json +4 -4
|
@@ -16,14 +16,14 @@ import type { Agent, AgentEvent, AgentMessage, AgentState, AgentTool, ThinkingLe
|
|
|
16
16
|
import type { ImageContent, Model, TextContent } from "@draht/ai";
|
|
17
17
|
import { type BashResult } from "./bash-executor.js";
|
|
18
18
|
import { type CompactionResult } from "./compaction/index.js";
|
|
19
|
-
import { type ContextUsage, type ExtensionCommandContextActions, type ExtensionErrorListener, ExtensionRunner, type ExtensionUIContext, type InputSource, type ShutdownHandler, type ToolDefinition, type ToolInfo } from "./extensions/index.js";
|
|
19
|
+
import { type ContextUsage, type ExtensionCommandContextActions, type ExtensionErrorListener, ExtensionRunner, type ExtensionUIContext, type InputSource, type SessionStartEvent, type ShutdownHandler, type ToolDefinition, type ToolInfo } from "./extensions/index.js";
|
|
20
20
|
import type { CustomMessage } from "./messages.js";
|
|
21
21
|
import type { ModelRegistry } from "./model-registry.js";
|
|
22
22
|
import { type PromptTemplate } from "./prompt-templates.js";
|
|
23
23
|
import type { ResourceLoader } from "./resource-loader.js";
|
|
24
24
|
import type { BranchSummaryEntry, SessionManager } from "./session-manager.js";
|
|
25
25
|
import type { SettingsManager } from "./settings-manager.js";
|
|
26
|
-
import type
|
|
26
|
+
import { type BashOperations } from "./tools/bash.js";
|
|
27
27
|
/** Parsed skill block from a user message */
|
|
28
28
|
export interface ParsedSkillBlock {
|
|
29
29
|
name: string;
|
|
@@ -46,6 +46,16 @@ export type AgentSessionEvent = AgentEvent | {
|
|
|
46
46
|
aborted: boolean;
|
|
47
47
|
willRetry: boolean;
|
|
48
48
|
errorMessage?: string;
|
|
49
|
+
} | {
|
|
50
|
+
type: "compaction_start";
|
|
51
|
+
reason: "manual" | "threshold" | "overflow";
|
|
52
|
+
} | {
|
|
53
|
+
type: "compaction_end";
|
|
54
|
+
reason: "manual" | "threshold" | "overflow";
|
|
55
|
+
result: CompactionResult | undefined;
|
|
56
|
+
aborted: boolean;
|
|
57
|
+
willRetry: boolean;
|
|
58
|
+
errorMessage?: string;
|
|
49
59
|
} | {
|
|
50
60
|
type: "auto_retry_start";
|
|
51
61
|
attempt: number;
|
|
@@ -57,6 +67,10 @@ export type AgentSessionEvent = AgentEvent | {
|
|
|
57
67
|
success: boolean;
|
|
58
68
|
attempt: number;
|
|
59
69
|
finalError?: string;
|
|
70
|
+
} | {
|
|
71
|
+
type: "queue_update";
|
|
72
|
+
steering: readonly string[];
|
|
73
|
+
followUp: readonly string[];
|
|
60
74
|
};
|
|
61
75
|
/** Listener function for agent session events */
|
|
62
76
|
export type AgentSessionEventListener = (event: AgentSessionEvent) => void;
|
|
@@ -89,6 +103,8 @@ export interface AgentSessionConfig {
|
|
|
89
103
|
extensionRunnerRef?: {
|
|
90
104
|
current?: ExtensionRunner;
|
|
91
105
|
};
|
|
106
|
+
/** Session start event metadata emitted when extensions bind to this runtime. */
|
|
107
|
+
sessionStartEvent?: SessionStartEvent;
|
|
92
108
|
}
|
|
93
109
|
export interface ExtensionBindings {
|
|
94
110
|
uiContext?: ExtensionUIContext;
|
|
@@ -166,6 +182,7 @@ export declare class AgentSession {
|
|
|
166
182
|
private _extensionRunnerRef?;
|
|
167
183
|
private _initialActiveToolNames?;
|
|
168
184
|
private _baseToolsOverride?;
|
|
185
|
+
private _sessionStartEvent;
|
|
169
186
|
private _extensionUIContext?;
|
|
170
187
|
private _extensionCommandContextActions?;
|
|
171
188
|
private _extensionShutdownHandler?;
|
|
@@ -180,6 +197,7 @@ export declare class AgentSession {
|
|
|
180
197
|
constructor(config: AgentSessionConfig);
|
|
181
198
|
/** Model registry for API key resolution and model discovery */
|
|
182
199
|
get modelRegistry(): ModelRegistry;
|
|
200
|
+
private _getRequiredRequestAuth;
|
|
183
201
|
/**
|
|
184
202
|
* Install tool hooks once on the Agent instance.
|
|
185
203
|
*
|
|
@@ -370,23 +388,11 @@ export declare class AgentSession {
|
|
|
370
388
|
* Abort current operation and wait for agent to become idle.
|
|
371
389
|
*/
|
|
372
390
|
abort(): Promise<void>;
|
|
373
|
-
/**
|
|
374
|
-
* Start a new session, optionally with initial messages and parent tracking.
|
|
375
|
-
* Clears all messages and starts a new session.
|
|
376
|
-
* Listeners are preserved and will continue receiving events.
|
|
377
|
-
* @param options.parentSession - Optional parent session path for tracking
|
|
378
|
-
* @param options.setup - Optional callback to initialize session (e.g., append messages)
|
|
379
|
-
* @returns true if completed, false if cancelled by extension
|
|
380
|
-
*/
|
|
381
|
-
newSession(options?: {
|
|
382
|
-
parentSession?: string;
|
|
383
|
-
setup?: (sessionManager: SessionManager) => Promise<void>;
|
|
384
|
-
}): Promise<boolean>;
|
|
385
391
|
private _emitModelSelect;
|
|
386
392
|
/**
|
|
387
393
|
* Set model directly.
|
|
388
|
-
* Validates
|
|
389
|
-
* @throws Error if no
|
|
394
|
+
* Validates that auth is configured, saves to session and settings.
|
|
395
|
+
* @throws Error if no auth is configured for the model
|
|
390
396
|
*/
|
|
391
397
|
setModel(model: Model<any>): Promise<void>;
|
|
392
398
|
/**
|
|
@@ -396,7 +402,6 @@ export declare class AgentSession {
|
|
|
396
402
|
* @returns The new model info, or undefined if only one model available
|
|
397
403
|
*/
|
|
398
404
|
cycleModel(direction?: "forward" | "backward"): Promise<ModelCycleResult | undefined>;
|
|
399
|
-
private _getScopedModelsWithApiKey;
|
|
400
405
|
private _cycleScopedModel;
|
|
401
406
|
private _cycleAvailableModel;
|
|
402
407
|
/**
|
|
@@ -518,30 +523,10 @@ export declare class AgentSession {
|
|
|
518
523
|
* Called after agent turn completes to maintain proper message ordering.
|
|
519
524
|
*/
|
|
520
525
|
private _flushPendingBashMessages;
|
|
521
|
-
/**
|
|
522
|
-
* Switch to a different session file.
|
|
523
|
-
* Aborts current operation, loads messages, restores model/thinking.
|
|
524
|
-
* Listeners are preserved and will continue receiving events.
|
|
525
|
-
* @returns true if switch completed, false if cancelled by extension
|
|
526
|
-
*/
|
|
527
|
-
switchSession(sessionPath: string): Promise<boolean>;
|
|
528
526
|
/**
|
|
529
527
|
* Set a display name for the current session.
|
|
530
528
|
*/
|
|
531
529
|
setSessionName(name: string): void;
|
|
532
|
-
/**
|
|
533
|
-
* Create a fork from a specific entry.
|
|
534
|
-
* Emits before_fork/fork session events to extensions.
|
|
535
|
-
*
|
|
536
|
-
* @param entryId ID of the entry to fork from
|
|
537
|
-
* @returns Object with:
|
|
538
|
-
* - selectedText: The text of the selected user message (for editor pre-fill)
|
|
539
|
-
* - cancelled: True if an extension cancelled the fork
|
|
540
|
-
*/
|
|
541
|
-
fork(entryId: string): Promise<{
|
|
542
|
-
selectedText: string;
|
|
543
|
-
cancelled: boolean;
|
|
544
|
-
}>;
|
|
545
530
|
/**
|
|
546
531
|
* Navigate to a different node in the session tree.
|
|
547
532
|
* Unlike fork() which creates a new session file, this stays in the same file.
|
|
@@ -590,13 +575,6 @@ export declare class AgentSession {
|
|
|
590
575
|
* @returns The resolved output file path.
|
|
591
576
|
*/
|
|
592
577
|
exportToJsonl(outputPath?: string): string;
|
|
593
|
-
/**
|
|
594
|
-
* Import a JSONL session file.
|
|
595
|
-
* Copies the file into the session directory and switches to it (like /resume).
|
|
596
|
-
* @param inputPath Path to the JSONL file to import.
|
|
597
|
-
* @returns true if the session was switched successfully.
|
|
598
|
-
*/
|
|
599
|
-
importFromJsonl(inputPath: string): Promise<boolean>;
|
|
600
578
|
/**
|
|
601
579
|
* Get text content of last assistant message.
|
|
602
580
|
* Useful for /copy command.
|