@rowan-agent/agent 0.8.4 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -5
- package/dist/index.d.ts +475 -14
- package/dist/index.js +2030 -1017
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import Type from 'typebox';
|
|
2
1
|
import * as _rowan_agent_models from '@rowan-agent/models';
|
|
3
2
|
import { LlmContentPart, ContentBlock, ModelRef, ModelConfig, StreamFn } from '@rowan-agent/models';
|
|
4
3
|
export { ModelConfig, ModelRef, StreamFn } from '@rowan-agent/models';
|
|
4
|
+
import Type from 'typebox';
|
|
5
5
|
|
|
6
6
|
type AgentMessage = {
|
|
7
7
|
id: string;
|
|
@@ -78,6 +78,11 @@ type PhaseExecution = {
|
|
|
78
78
|
* Extension types — simplified for the new hook-based system.
|
|
79
79
|
*/
|
|
80
80
|
|
|
81
|
+
interface SourceInfo {
|
|
82
|
+
source: string;
|
|
83
|
+
baseDir?: string;
|
|
84
|
+
displayName?: string;
|
|
85
|
+
}
|
|
81
86
|
/** Phase run function type for extensions */
|
|
82
87
|
type PhaseRun = (context: PhaseContext, execution: PhaseExecution) => Promise<PhaseOutput | void>;
|
|
83
88
|
/** Phase definition shape used by extensions */
|
|
@@ -135,6 +140,28 @@ interface ToolExecutionResult$1 {
|
|
|
135
140
|
/** Whether this is an error result */
|
|
136
141
|
isError?: boolean;
|
|
137
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Registered tool with source metadata.
|
|
145
|
+
*/
|
|
146
|
+
interface RegisteredTool {
|
|
147
|
+
definition: ToolDefinition;
|
|
148
|
+
sourceInfo: SourceInfo;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Structured extension error with attribution.
|
|
152
|
+
*/
|
|
153
|
+
interface ExtensionError {
|
|
154
|
+
/** Path of the extension that caused the error */
|
|
155
|
+
extensionPath: string;
|
|
156
|
+
/** Event or operation that caused the error */
|
|
157
|
+
event: string;
|
|
158
|
+
/** Error message */
|
|
159
|
+
error: string;
|
|
160
|
+
/** Optional stack trace */
|
|
161
|
+
stack?: string;
|
|
162
|
+
}
|
|
163
|
+
/** Error listener callback type. */
|
|
164
|
+
type ExtensionErrorListener = (error: ExtensionError) => void;
|
|
138
165
|
type ExecOptions = {
|
|
139
166
|
/** Working directory for the command. Defaults to cwd passed to runtime. */
|
|
140
167
|
cwd?: string;
|
|
@@ -150,6 +177,18 @@ type ExecResult = {
|
|
|
150
177
|
stdout: string;
|
|
151
178
|
stderr: string;
|
|
152
179
|
};
|
|
180
|
+
/**
|
|
181
|
+
* Shared runtime state created by loader, used during registration and runtime.
|
|
182
|
+
* All ExtensionAPI instances reference this shared state.
|
|
183
|
+
*
|
|
184
|
+
* It only owns the lifetime guard shared by captured Extension API objects.
|
|
185
|
+
*/
|
|
186
|
+
interface ExtensionRuntime {
|
|
187
|
+
/** Throws when this extension instance is stale after runtime replacement. */
|
|
188
|
+
assertActive: () => void;
|
|
189
|
+
/** Marks this extension instance as stale after runtime replacement or reload. */
|
|
190
|
+
invalidate: (message?: string) => void;
|
|
191
|
+
}
|
|
153
192
|
/**
|
|
154
193
|
* Result of loading extensions from filesystem.
|
|
155
194
|
* The runner takes these and creates Extension tracking objects.
|
|
@@ -274,6 +313,17 @@ type HookEventType = HookEvent["type"];
|
|
|
274
313
|
type HookHandler<K extends HookEventType> = (event: Extract<HookEvent, {
|
|
275
314
|
type: K;
|
|
276
315
|
}>) => HookResultMap[K] | Promise<HookResultMap[K]> | void | Promise<void>;
|
|
316
|
+
declare class HooksManager {
|
|
317
|
+
private handlers;
|
|
318
|
+
on<K extends HookEventType>(eventType: K, handler: HookHandler<K>): void;
|
|
319
|
+
off<K extends HookEventType>(eventType: K, handler: HookHandler<K>): void;
|
|
320
|
+
emit<K extends HookEventType>(eventType: K, event: Extract<HookEvent, {
|
|
321
|
+
type: K;
|
|
322
|
+
}>): Promise<void>;
|
|
323
|
+
emitFirst<K extends HookEventType>(eventType: K, event: Extract<HookEvent, {
|
|
324
|
+
type: K;
|
|
325
|
+
}>): Promise<HookResultMap[K] | undefined>;
|
|
326
|
+
}
|
|
277
327
|
|
|
278
328
|
/**
|
|
279
329
|
* @module extensions/context
|
|
@@ -424,7 +474,9 @@ interface ExtensionAPI {
|
|
|
424
474
|
* Extension factory function.
|
|
425
475
|
* Receives ExtensionAPI for registering hooks, phases, and providers.
|
|
426
476
|
*/
|
|
427
|
-
type
|
|
477
|
+
type ExtensionDisposer = () => void | Promise<void>;
|
|
478
|
+
type ExtensionFactoryResult = void | ExtensionDisposer;
|
|
479
|
+
type ExtensionFactory = (api: ExtensionAPI) => ExtensionFactoryResult | Promise<ExtensionFactoryResult>;
|
|
428
480
|
|
|
429
481
|
/** Unified phase output — model decides routing via route. */
|
|
430
482
|
type PhaseOutput = {
|
|
@@ -467,6 +519,9 @@ type PhaseExecutionIdentity = Readonly<{
|
|
|
467
519
|
agentId: string;
|
|
468
520
|
runId: string;
|
|
469
521
|
executionId: string;
|
|
522
|
+
/** Opaque metadata captured at the durable boundary; Rowan does not decode it. */
|
|
523
|
+
agentMetadata?: Readonly<Record<string, unknown>>;
|
|
524
|
+
runMetadata?: Readonly<Record<string, unknown>>;
|
|
470
525
|
}>;
|
|
471
526
|
/** Everything a phase needs to execute */
|
|
472
527
|
interface PhaseContext {
|
|
@@ -565,6 +620,108 @@ type CoreToolContext = {
|
|
|
565
620
|
maxBashOutputBytes?: number;
|
|
566
621
|
};
|
|
567
622
|
|
|
623
|
+
type PhaseRegistrySelection = Readonly<{
|
|
624
|
+
entryPhaseId: string | null;
|
|
625
|
+
phaseIds: readonly string[];
|
|
626
|
+
}>;
|
|
627
|
+
type AgentDefinition = Readonly<{
|
|
628
|
+
name: string;
|
|
629
|
+
description: string;
|
|
630
|
+
content: string;
|
|
631
|
+
tools?: readonly string[];
|
|
632
|
+
skills?: readonly string[];
|
|
633
|
+
phases?: PhaseRegistrySelection;
|
|
634
|
+
context?: readonly string[];
|
|
635
|
+
model?: ModelRef;
|
|
636
|
+
}>;
|
|
637
|
+
/** Parse one Markdown definition using the same frontmatter vocabulary as Phase resources. */
|
|
638
|
+
declare function parseAgentDefinition(raw: string): AgentDefinition;
|
|
639
|
+
|
|
640
|
+
type ResourceKind = "agent" | "tool" | "skill" | "phase";
|
|
641
|
+
type ResourceSourceId = string;
|
|
642
|
+
/** Rowan-native contribution aliases. Hosts may adapt their domain handlers to
|
|
643
|
+
* these existing Tool/Phase lifecycles without importing host Scope types. */
|
|
644
|
+
type ToolContribution = Tool;
|
|
645
|
+
type PhaseContribution = Phase;
|
|
646
|
+
type ResourceView = Readonly<{
|
|
647
|
+
agents: readonly ResourceSourceId[];
|
|
648
|
+
tools: readonly ResourceSourceId[];
|
|
649
|
+
skills: readonly ResourceSourceId[];
|
|
650
|
+
phases: readonly ResourceSourceId[];
|
|
651
|
+
}>;
|
|
652
|
+
type ResourceRef = Readonly<{
|
|
653
|
+
kind: ResourceKind;
|
|
654
|
+
sourceId: ResourceSourceId;
|
|
655
|
+
name: string;
|
|
656
|
+
}>;
|
|
657
|
+
type ResourceDiagnostic = Readonly<{
|
|
658
|
+
kind: "invalid" | "missing" | "collision";
|
|
659
|
+
sourceId: ResourceSourceId;
|
|
660
|
+
message: string;
|
|
661
|
+
path?: string;
|
|
662
|
+
}>;
|
|
663
|
+
type LoadResult = Readonly<{
|
|
664
|
+
revision: string;
|
|
665
|
+
registered: readonly ResourceRef[];
|
|
666
|
+
skipped: readonly ResourceDiagnostic[];
|
|
667
|
+
}>;
|
|
668
|
+
type LoadInput<T> = Readonly<{
|
|
669
|
+
sourceId: ResourceSourceId;
|
|
670
|
+
directory?: string;
|
|
671
|
+
values?: readonly T[];
|
|
672
|
+
}>;
|
|
673
|
+
type ResolvedResourceView = Readonly<{
|
|
674
|
+
agents: readonly AgentDefinition[];
|
|
675
|
+
tools: readonly Tool[];
|
|
676
|
+
skills: readonly Skill[];
|
|
677
|
+
phases: readonly Phase[];
|
|
678
|
+
revisions: Readonly<Record<ResourceKind, readonly string[]>>;
|
|
679
|
+
refs: Readonly<Record<ResourceKind, readonly ResourceRef[]>>;
|
|
680
|
+
}>;
|
|
681
|
+
type ResourceRegistryErrorCode = "invalid_source_id" | "invalid_resource_name" | "resource_collision" | "resource_input_missing" | "resource_directory_not_supported" | "unknown_resource_source" | "implicit_source_protected";
|
|
682
|
+
declare class ResourceRegistryError extends Error {
|
|
683
|
+
readonly code: ResourceRegistryErrorCode;
|
|
684
|
+
constructor(code: ResourceRegistryErrorCode, message: string);
|
|
685
|
+
}
|
|
686
|
+
type RegistryValue = AgentDefinition | Tool | Skill | Phase;
|
|
687
|
+
/**
|
|
688
|
+
* Runtime Resource Registry source transaction and view resolver.
|
|
689
|
+
*
|
|
690
|
+
* Directory normalization is intentionally added by the typed loader slice;
|
|
691
|
+
* this first module owns only the atomic source/revision/collision semantics.
|
|
692
|
+
*/
|
|
693
|
+
declare class ResourceRegistry {
|
|
694
|
+
private readonly sources;
|
|
695
|
+
/** Sources registered by the bootstrap boundary (currently Extensions). */
|
|
696
|
+
private readonly implicitSources;
|
|
697
|
+
private revisionSequence;
|
|
698
|
+
loadAgents(input: LoadInput<AgentDefinition>): Promise<LoadResult>;
|
|
699
|
+
loadSkills(input: LoadInput<Skill>): Promise<LoadResult>;
|
|
700
|
+
loadPhases(input: LoadInput<Phase>): Promise<LoadResult>;
|
|
701
|
+
loadTools(input: Readonly<{
|
|
702
|
+
sourceId: ResourceSourceId;
|
|
703
|
+
values: readonly ToolContribution[];
|
|
704
|
+
}>): Promise<LoadResult>;
|
|
705
|
+
unload(input: Readonly<{
|
|
706
|
+
kind: ResourceKind;
|
|
707
|
+
sourceId: ResourceSourceId;
|
|
708
|
+
}>): Promise<LoadResult>;
|
|
709
|
+
resolveView(view: ResourceView): ResolvedResourceView;
|
|
710
|
+
/** Mark one already-loaded source as implicit for every Resource View. */
|
|
711
|
+
protected markImplicit(kind: ResourceKind, sourceId: ResourceSourceId): void;
|
|
712
|
+
/** Bootstrap-only helper for replacing an implicit contribution source. */
|
|
713
|
+
protected replaceImplicit<T extends RegistryValue>(kind: ResourceKind, sourceId: ResourceSourceId, values: readonly T[]): Promise<LoadResult>;
|
|
714
|
+
protected hasImplicit(kind: ResourceKind, sourceId: ResourceSourceId): boolean;
|
|
715
|
+
private withImplicit;
|
|
716
|
+
private collect;
|
|
717
|
+
private commit;
|
|
718
|
+
private resolveKind;
|
|
719
|
+
private resolveRevisions;
|
|
720
|
+
private resolveRefs;
|
|
721
|
+
private sourcesFor;
|
|
722
|
+
private nextRevision;
|
|
723
|
+
}
|
|
724
|
+
|
|
568
725
|
/** Durable and transient DTOs owned by the event-driven Agent Runtime. */
|
|
569
726
|
declare const opaqueIdBrand: unique symbol;
|
|
570
727
|
type OpaqueId<Kind extends string> = string & {
|
|
@@ -865,6 +1022,260 @@ type ToolProgress = Readonly<{
|
|
|
865
1022
|
}>;
|
|
866
1023
|
type RunEvent = DurableRunEvent | MessageDelta | ToolProgress;
|
|
867
1024
|
|
|
1025
|
+
/**
|
|
1026
|
+
* Extension runner — manages extension loading and hook execution.
|
|
1027
|
+
*
|
|
1028
|
+
* Architecture reference: PI's ExtensionRunner
|
|
1029
|
+
* - Per-extension tracking via Extension objects
|
|
1030
|
+
* - Shared ExtensionRuntime with invalidate/assertActive
|
|
1031
|
+
* - Direct `on()` API for hook registration
|
|
1032
|
+
* - Error listener pattern for structured error handling
|
|
1033
|
+
* - Tool registration support
|
|
1034
|
+
*/
|
|
1035
|
+
|
|
1036
|
+
type ExtensionRunnerOptions = {
|
|
1037
|
+
entryPhaseId?: string | null;
|
|
1038
|
+
cwd?: string;
|
|
1039
|
+
};
|
|
1040
|
+
/**
|
|
1041
|
+
* Manages extensions and provides hooks for the agent loop.
|
|
1042
|
+
*
|
|
1043
|
+
* Features:
|
|
1044
|
+
* - Per-extension tracking (handlers, tools, phases)
|
|
1045
|
+
* - Shared runtime with lifecycle protection (invalidate/assertActive)
|
|
1046
|
+
* - Error listener pattern for structured error handling
|
|
1047
|
+
* - Direct hook API and extension-loaded hook API
|
|
1048
|
+
* - Tool registration for LLM-callable tools
|
|
1049
|
+
* - EventBus for inter-extension communication
|
|
1050
|
+
*
|
|
1051
|
+
* @example
|
|
1052
|
+
* ```ts
|
|
1053
|
+
* const runner = createExtensionRunner();
|
|
1054
|
+
*
|
|
1055
|
+
* // Direct hook registration
|
|
1056
|
+
* const unsub = runner.on("before_tool_call", (event) => {
|
|
1057
|
+
* return { allow: false, reason: "Blocked" };
|
|
1058
|
+
* });
|
|
1059
|
+
*
|
|
1060
|
+
* // Error handling
|
|
1061
|
+
* runner.onError((error) => {
|
|
1062
|
+
* console.error(`Extension error in ${error.extensionPath}:`, error.error);
|
|
1063
|
+
* });
|
|
1064
|
+
*
|
|
1065
|
+
* // Load extensions
|
|
1066
|
+
* await runner.loadExtensions(extensions);
|
|
1067
|
+
* runner.bind();
|
|
1068
|
+
* ```
|
|
1069
|
+
*/
|
|
1070
|
+
declare class ExtensionRunner {
|
|
1071
|
+
readonly hooks: HooksManager;
|
|
1072
|
+
readonly runtime: ExtensionRuntime;
|
|
1073
|
+
readonly events: EventBus;
|
|
1074
|
+
private readonly cwd;
|
|
1075
|
+
private readonly abortController;
|
|
1076
|
+
private _idle;
|
|
1077
|
+
private readonly extensions;
|
|
1078
|
+
private readonly phases;
|
|
1079
|
+
private _phaseCache;
|
|
1080
|
+
private readonly pendingProviders;
|
|
1081
|
+
private bound;
|
|
1082
|
+
private readonly errorListeners;
|
|
1083
|
+
/** Current agent context — set by the agent before each phase */
|
|
1084
|
+
currentContext?: AgentContext;
|
|
1085
|
+
constructor(options?: ExtensionRunnerOptions);
|
|
1086
|
+
/** Whether the agent is currently idle (not streaming). */
|
|
1087
|
+
get isIdle(): boolean;
|
|
1088
|
+
/** Set idle state — called by the agent loop. */
|
|
1089
|
+
setIdle(idle: boolean): void;
|
|
1090
|
+
/** Abort signal for the current runner instance. */
|
|
1091
|
+
get signal(): AbortSignal;
|
|
1092
|
+
/** Abort the current runner operation. */
|
|
1093
|
+
abort(): void;
|
|
1094
|
+
/**
|
|
1095
|
+
* Register an error listener.
|
|
1096
|
+
* Returns an unsubscribe function.
|
|
1097
|
+
*/
|
|
1098
|
+
onError(listener: ExtensionErrorListener): () => void;
|
|
1099
|
+
/**
|
|
1100
|
+
* Emit a structured extension error to all listeners.
|
|
1101
|
+
*/
|
|
1102
|
+
emitError(error: ExtensionError): void;
|
|
1103
|
+
/**
|
|
1104
|
+
* Mark all extension contexts as stale.
|
|
1105
|
+
* After calling this, any captured ExtensionAPI or ExtensionContext will throw
|
|
1106
|
+
* on use. Used during runtime replacement or reload.
|
|
1107
|
+
*/
|
|
1108
|
+
invalidate(message?: string): void;
|
|
1109
|
+
/**
|
|
1110
|
+
* Subscribe to a specific hook event type.
|
|
1111
|
+
* Returns an unsubscribe function.
|
|
1112
|
+
*
|
|
1113
|
+
* @example
|
|
1114
|
+
* ```ts
|
|
1115
|
+
* const unsub = runner.on("before_tool_call", (event) => {
|
|
1116
|
+
* return { allow: false, reason: "Blocked" };
|
|
1117
|
+
* });
|
|
1118
|
+
* unsub(); // Cancel subscription
|
|
1119
|
+
* ```
|
|
1120
|
+
*/
|
|
1121
|
+
on<K extends HookEventType>(type: K, handler: HookHandler<K>): () => void;
|
|
1122
|
+
/**
|
|
1123
|
+
* Load and initialize extensions.
|
|
1124
|
+
* Creates Extension tracking objects and calls each factory with an ExtensionAPI.
|
|
1125
|
+
*/
|
|
1126
|
+
loadExtensions(extensions: LoadedExtension[]): Promise<void>;
|
|
1127
|
+
/** Dispose all active Extensions in reverse activation order. */
|
|
1128
|
+
close(): Promise<void>;
|
|
1129
|
+
/** Get all registered tools from all extensions. */
|
|
1130
|
+
getAllRegisteredTools(): RegisteredTool[];
|
|
1131
|
+
/**
|
|
1132
|
+
* Get a tool definition by name. Returns undefined if not found.
|
|
1133
|
+
*/
|
|
1134
|
+
getToolDefinition(toolName: string): RegisteredTool["definition"] | undefined;
|
|
1135
|
+
getPhase(name: string): Phase | undefined;
|
|
1136
|
+
getPhases(): Phase[];
|
|
1137
|
+
createPhaseRegistry(input?: {
|
|
1138
|
+
entryPhaseId?: string | null;
|
|
1139
|
+
}): PhaseRegistry;
|
|
1140
|
+
/** Adapt an extension RegisteredPhase to the core Phase type. */
|
|
1141
|
+
private adaptToPhase;
|
|
1142
|
+
/**
|
|
1143
|
+
* Bind the runner — flushes pending provider registrations and
|
|
1144
|
+
* replaces runtime stubs with real implementations.
|
|
1145
|
+
*/
|
|
1146
|
+
bind(): void;
|
|
1147
|
+
/**
|
|
1148
|
+
* Generic emit — fire-and-forget for any event type.
|
|
1149
|
+
*/
|
|
1150
|
+
emit<K extends HookEventType>(eventType: K, event: Parameters<HookHandler<K>>[0]): Promise<void>;
|
|
1151
|
+
/**
|
|
1152
|
+
* Unified hook emission — returns the first non-undefined result.
|
|
1153
|
+
*/
|
|
1154
|
+
private emitHook;
|
|
1155
|
+
emitBeforePhase(phaseId: string, input: PhaseContext): Promise<{
|
|
1156
|
+
abort?: any;
|
|
1157
|
+
skip?: any;
|
|
1158
|
+
input?: PhaseContext;
|
|
1159
|
+
}>;
|
|
1160
|
+
emitAfterPhase(phaseId: string, output: PhaseOutput): Promise<{
|
|
1161
|
+
abort?: any;
|
|
1162
|
+
retry?: PhaseContext;
|
|
1163
|
+
output?: PhaseOutput;
|
|
1164
|
+
}>;
|
|
1165
|
+
emitBeforePrompt(phaseId: string, input: PhaseContext): Promise<PhaseContext>;
|
|
1166
|
+
emitBeforeToolCall(tool: Tool$1, args: unknown): Promise<{
|
|
1167
|
+
allow: boolean;
|
|
1168
|
+
reason?: string;
|
|
1169
|
+
}>;
|
|
1170
|
+
emitAfterToolCall(tool: Tool$1, result: ToolResult): Promise<ToolResult>;
|
|
1171
|
+
/**
|
|
1172
|
+
* Create an ExtensionAPI for a specific extension.
|
|
1173
|
+
* Registration methods write to the extension tracking object.
|
|
1174
|
+
* Action methods delegate to the shared runtime.
|
|
1175
|
+
*/
|
|
1176
|
+
private createExtensionAPI;
|
|
1177
|
+
private registerTool;
|
|
1178
|
+
private registerPhase;
|
|
1179
|
+
private registerProvider;
|
|
1180
|
+
private unregisterProvider;
|
|
1181
|
+
private flushPendingProviders;
|
|
1182
|
+
private getRegisteredPhase;
|
|
1183
|
+
private collectRegisteredPhases;
|
|
1184
|
+
private rollbackExtension;
|
|
1185
|
+
private disposeExtension;
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
type ExtensionContribution = LoadedExtension;
|
|
1189
|
+
type ExtensionLoadInput = LoadInput<ExtensionContribution>;
|
|
1190
|
+
type ExtensionActivationError = Readonly<{
|
|
1191
|
+
path: string;
|
|
1192
|
+
error: string;
|
|
1193
|
+
}>;
|
|
1194
|
+
type ExtensionActivationResult = Readonly<{
|
|
1195
|
+
active: readonly string[];
|
|
1196
|
+
errors: readonly ExtensionActivationError[];
|
|
1197
|
+
revision?: string;
|
|
1198
|
+
registered?: readonly string[];
|
|
1199
|
+
skipped?: readonly ResourceDiagnostic[];
|
|
1200
|
+
}>;
|
|
1201
|
+
type ExtensionLifetimeErrorCode = "extensions_frozen" | "extensions_closed";
|
|
1202
|
+
declare class ExtensionLifetimeError extends Error {
|
|
1203
|
+
readonly code: ExtensionLifetimeErrorCode;
|
|
1204
|
+
constructor(code: ExtensionLifetimeErrorCode, message: string);
|
|
1205
|
+
}
|
|
1206
|
+
/** Runtime-global Extension activation and lifetime boundary. */
|
|
1207
|
+
declare class RuntimeExtensionLifetime {
|
|
1208
|
+
private readonly runner;
|
|
1209
|
+
private frozen;
|
|
1210
|
+
private closed;
|
|
1211
|
+
constructor(options?: {
|
|
1212
|
+
cwd?: string;
|
|
1213
|
+
});
|
|
1214
|
+
activate(extensions: readonly LoadedExtension[]): Promise<ExtensionActivationResult>;
|
|
1215
|
+
tools(): readonly RegisteredTool[];
|
|
1216
|
+
phases(): readonly Phase[];
|
|
1217
|
+
get extensionRunner(): ExtensionRunner;
|
|
1218
|
+
close(): Promise<void>;
|
|
1219
|
+
}
|
|
1220
|
+
/** Bootstrap-only Registry facade; its Extension method disappears after init. */
|
|
1221
|
+
declare class RuntimeBootstrapRegistry extends ResourceRegistry {
|
|
1222
|
+
private readonly extensions;
|
|
1223
|
+
private readonly extensionSourceId;
|
|
1224
|
+
constructor(extensions?: RuntimeExtensionLifetime);
|
|
1225
|
+
/** Install Rowan-owned implicit resources before any host source is read. */
|
|
1226
|
+
ensureCoreResources(): Promise<void>;
|
|
1227
|
+
loadExtensions(input: readonly LoadedExtension[] | ExtensionLoadInput): Promise<ExtensionActivationResult>;
|
|
1228
|
+
get extensionRunner(): ExtensionRunner;
|
|
1229
|
+
get extensionTools(): readonly RegisteredTool[];
|
|
1230
|
+
get extensionPhases(): readonly Phase[];
|
|
1231
|
+
closeExtensions(): Promise<void>;
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
type DefinitionLayer = Readonly<{
|
|
1235
|
+
description?: string;
|
|
1236
|
+
content?: string;
|
|
1237
|
+
model?: ModelRef;
|
|
1238
|
+
tools?: readonly string[];
|
|
1239
|
+
skills?: readonly string[];
|
|
1240
|
+
phases?: PhaseRegistrySelection;
|
|
1241
|
+
}>;
|
|
1242
|
+
type AgentConfiguration = Readonly<{
|
|
1243
|
+
identity: string;
|
|
1244
|
+
definition: Readonly<{
|
|
1245
|
+
name: string;
|
|
1246
|
+
layer?: DefinitionLayer;
|
|
1247
|
+
}>;
|
|
1248
|
+
resourceView: ResourceView;
|
|
1249
|
+
contexts?: readonly ContextCandidate[];
|
|
1250
|
+
cwd?: string;
|
|
1251
|
+
maxAttempts?: number;
|
|
1252
|
+
model: ModelConfig | ModelRef;
|
|
1253
|
+
stream?: StreamFn;
|
|
1254
|
+
}>;
|
|
1255
|
+
type ConfigurationSnapshot = Readonly<{
|
|
1256
|
+
identity: string;
|
|
1257
|
+
definition: AgentDefinition;
|
|
1258
|
+
resources: Readonly<{
|
|
1259
|
+
tools: readonly Tool[];
|
|
1260
|
+
skills: readonly Skill[];
|
|
1261
|
+
phases?: PhaseRegistry;
|
|
1262
|
+
revisions: Readonly<Record<ResourceKind, readonly string[]>>;
|
|
1263
|
+
refs: Readonly<Record<ResourceKind, readonly ResourceRef[]>>;
|
|
1264
|
+
}>;
|
|
1265
|
+
contexts: readonly ContextCandidate[];
|
|
1266
|
+
resourceView: ResourceView;
|
|
1267
|
+
cwd?: string;
|
|
1268
|
+
maxAttempts?: number;
|
|
1269
|
+
model: ModelConfig | ModelRef;
|
|
1270
|
+
stream?: StreamFn;
|
|
1271
|
+
}>;
|
|
1272
|
+
/** Resolve one Definition request into one immutable, source-qualified snapshot. */
|
|
1273
|
+
declare function resolveConfigurationSnapshot(registry: ResourceRegistry, input: AgentConfiguration): ConfigurationSnapshot;
|
|
1274
|
+
/** Materialize the immutable resolver output at the legacy execution seam.
|
|
1275
|
+
* The conversion is intentionally one-way: callers cannot feed concrete
|
|
1276
|
+
* candidate bags back through the public configuration request. */
|
|
1277
|
+
declare function materializeConfigurationSnapshot(snapshot: ConfigurationSnapshot): AgentConfig;
|
|
1278
|
+
|
|
868
1279
|
type UserInput = string | Readonly<{
|
|
869
1280
|
content: UserContent;
|
|
870
1281
|
metadata?: Metadata;
|
|
@@ -872,6 +1283,10 @@ type UserInput = string | Readonly<{
|
|
|
872
1283
|
type ToolInvocationContext = Readonly<{
|
|
873
1284
|
agentId: AgentId;
|
|
874
1285
|
runId: RunId;
|
|
1286
|
+
/** Opaque JSON metadata captured from the Agent and Run records. Rowan does
|
|
1287
|
+
* not interpret host/domain fields. */
|
|
1288
|
+
agentMetadata?: Metadata;
|
|
1289
|
+
runMetadata?: Metadata;
|
|
875
1290
|
toolCallId: ToolCallId;
|
|
876
1291
|
reportProgress(progress: JsonValue): void;
|
|
877
1292
|
}>;
|
|
@@ -881,6 +1296,10 @@ type Tool = Readonly<{
|
|
|
881
1296
|
parameters: Type.TSchema;
|
|
882
1297
|
execute(args: JsonValue, context: ToolInvocationContext, signal: AbortSignal): Promise<ToolExecutionResult>;
|
|
883
1298
|
}>;
|
|
1299
|
+
type ContextCandidate = Readonly<{
|
|
1300
|
+
name: string;
|
|
1301
|
+
value: JsonValue;
|
|
1302
|
+
}>;
|
|
884
1303
|
type BeforeToolCall = (input: Readonly<{
|
|
885
1304
|
tool: Tool;
|
|
886
1305
|
args: JsonValue;
|
|
@@ -903,17 +1322,21 @@ type AfterToolCall = (input: Readonly<{
|
|
|
903
1322
|
context: ToolInvocationContext;
|
|
904
1323
|
signal: AbortSignal;
|
|
905
1324
|
}>) => ToolExecutionResult | Promise<ToolExecutionResult>;
|
|
906
|
-
type
|
|
907
|
-
systemPrompt: string;
|
|
1325
|
+
type AgentResources = Readonly<{
|
|
908
1326
|
tools: readonly Tool[];
|
|
909
1327
|
skills: readonly Skill[];
|
|
910
1328
|
phases?: PhaseRegistry;
|
|
1329
|
+
contexts?: readonly ContextCandidate[];
|
|
1330
|
+
/** Source-qualified snapshot metadata retained for restart/recovery checks. */
|
|
1331
|
+
resourceView?: ResourceView;
|
|
1332
|
+
resourceRefs?: readonly ResourceRef[];
|
|
1333
|
+
resourceRevisions?: Readonly<Record<ResourceKind, readonly string[]>>;
|
|
911
1334
|
}>;
|
|
912
1335
|
type AgentConfig = Readonly<{
|
|
913
1336
|
identity: string;
|
|
914
|
-
|
|
1337
|
+
definition: AgentDefinition;
|
|
1338
|
+
resources: AgentResources;
|
|
915
1339
|
cwd?: string;
|
|
916
|
-
extensions?: readonly LoadedExtension[];
|
|
917
1340
|
maxAttempts?: number;
|
|
918
1341
|
beforeToolCall?: BeforeToolCall;
|
|
919
1342
|
afterToolCall?: AfterToolCall;
|
|
@@ -924,6 +1347,8 @@ type AgentConfig = Readonly<{
|
|
|
924
1347
|
model: ModelRef;
|
|
925
1348
|
stream: StreamFn;
|
|
926
1349
|
})>;
|
|
1350
|
+
/** Definition-reference request accepted at the public Runtime seam. */
|
|
1351
|
+
type AgentConfigRequest = AgentConfig | AgentConfiguration;
|
|
927
1352
|
type AgentRecord = Readonly<{
|
|
928
1353
|
id: AgentId;
|
|
929
1354
|
metadata?: Metadata;
|
|
@@ -1070,7 +1495,7 @@ type RunBoundary = Readonly<{
|
|
|
1070
1495
|
}>;
|
|
1071
1496
|
type ConfigResolution = Readonly<{
|
|
1072
1497
|
kind: "available";
|
|
1073
|
-
config:
|
|
1498
|
+
config: AgentConfigRequest;
|
|
1074
1499
|
} | {
|
|
1075
1500
|
kind: "deferred";
|
|
1076
1501
|
retryAfterMs?: number;
|
|
@@ -1088,7 +1513,7 @@ interface ConfigProvider {
|
|
|
1088
1513
|
put(input: {
|
|
1089
1514
|
agentId: AgentId;
|
|
1090
1515
|
agentMetadata?: Metadata;
|
|
1091
|
-
config:
|
|
1516
|
+
config: AgentConfigRequest;
|
|
1092
1517
|
operationId: string;
|
|
1093
1518
|
signal: AbortSignal;
|
|
1094
1519
|
}): Promise<ConfigPutResult>;
|
|
@@ -1219,6 +1644,7 @@ type AgentRuntimeOptions = Readonly<{
|
|
|
1219
1644
|
store: DurableStore;
|
|
1220
1645
|
configs?: ConfigProvider;
|
|
1221
1646
|
concurrency?: number;
|
|
1647
|
+
bootstrap?: (registry: RuntimeBootstrapRegistry) => void | Promise<void>;
|
|
1222
1648
|
}>;
|
|
1223
1649
|
type DurableConsumer = Readonly<{
|
|
1224
1650
|
caughtUp: Promise<void>;
|
|
@@ -1242,11 +1668,22 @@ interface AgentRun {
|
|
|
1242
1668
|
cancel(reason?: string): Promise<RunBoundary>;
|
|
1243
1669
|
}
|
|
1244
1670
|
interface AgentRuntime$1 {
|
|
1245
|
-
|
|
1671
|
+
loadAgents(input: LoadInput<AgentDefinition>): Promise<LoadResult>;
|
|
1672
|
+
loadSkills(input: LoadInput<Skill>): Promise<LoadResult>;
|
|
1673
|
+
loadPhases(input: LoadInput<Phase>): Promise<LoadResult>;
|
|
1674
|
+
loadTools(input: Readonly<{
|
|
1675
|
+
sourceId: string;
|
|
1676
|
+
values: readonly Tool[];
|
|
1677
|
+
}>): Promise<LoadResult>;
|
|
1678
|
+
unload(input: Readonly<{
|
|
1679
|
+
kind: ResourceKind;
|
|
1680
|
+
sourceId: string;
|
|
1681
|
+
}>): Promise<LoadResult>;
|
|
1682
|
+
createAgent(config: AgentConfigRequest, options?: {
|
|
1246
1683
|
idempotencyKey?: string;
|
|
1247
1684
|
metadata?: Metadata;
|
|
1248
1685
|
}): Promise<AgentId>;
|
|
1249
|
-
updateAgentConfig(agentId: AgentId, config:
|
|
1686
|
+
updateAgentConfig(agentId: AgentId, config: AgentConfigRequest, options: {
|
|
1250
1687
|
idempotencyKey: string;
|
|
1251
1688
|
}): Promise<void>;
|
|
1252
1689
|
start(agentId: AgentId, input: UserInput, options: {
|
|
@@ -1287,16 +1724,28 @@ declare class AgentRuntime implements AgentRuntime$1 {
|
|
|
1287
1724
|
private readonly executions;
|
|
1288
1725
|
private readonly consumers;
|
|
1289
1726
|
private readonly transientEvents;
|
|
1727
|
+
private readonly resources;
|
|
1290
1728
|
private heartbeat?;
|
|
1291
1729
|
private pumping;
|
|
1292
1730
|
private closed;
|
|
1293
1731
|
private constructor();
|
|
1294
1732
|
static init(options: AgentRuntimeOptions): Promise<AgentRuntime>;
|
|
1295
|
-
|
|
1733
|
+
loadAgents(input: LoadInput<AgentDefinition>): Promise<LoadResult>;
|
|
1734
|
+
loadSkills(input: LoadInput<Skill>): Promise<LoadResult>;
|
|
1735
|
+
loadPhases(input: LoadInput<Phase>): Promise<LoadResult>;
|
|
1736
|
+
loadTools(input: Readonly<{
|
|
1737
|
+
sourceId: string;
|
|
1738
|
+
values: readonly Tool[];
|
|
1739
|
+
}>): Promise<LoadResult>;
|
|
1740
|
+
unload(input: Readonly<{
|
|
1741
|
+
kind: ResourceKind;
|
|
1742
|
+
sourceId: string;
|
|
1743
|
+
}>): Promise<LoadResult>;
|
|
1744
|
+
createAgent(config: AgentConfigRequest, options?: {
|
|
1296
1745
|
idempotencyKey?: string;
|
|
1297
1746
|
metadata?: Metadata;
|
|
1298
1747
|
}): Promise<AgentId>;
|
|
1299
|
-
updateAgentConfig(agentId: AgentId, config:
|
|
1748
|
+
updateAgentConfig(agentId: AgentId, config: AgentConfigRequest, options: {
|
|
1300
1749
|
idempotencyKey: string;
|
|
1301
1750
|
}): Promise<void>;
|
|
1302
1751
|
start(agentId: AgentId, input: UserInput, options: {
|
|
@@ -1344,6 +1793,7 @@ declare class AgentRuntime implements AgentRuntime$1 {
|
|
|
1344
1793
|
signal?: AbortSignal;
|
|
1345
1794
|
}): Promise<RunBoundary>;
|
|
1346
1795
|
private assertOpen;
|
|
1796
|
+
private materializeConfig;
|
|
1347
1797
|
private startHeartbeat;
|
|
1348
1798
|
}
|
|
1349
1799
|
|
|
@@ -1678,7 +2128,7 @@ declare class InMemoryConfigProvider implements ConfigProvider {
|
|
|
1678
2128
|
put(input: {
|
|
1679
2129
|
agentId: AgentId;
|
|
1680
2130
|
agentMetadata?: Metadata;
|
|
1681
|
-
config:
|
|
2131
|
+
config: AgentConfigRequest;
|
|
1682
2132
|
operationId: string;
|
|
1683
2133
|
signal: AbortSignal;
|
|
1684
2134
|
}): Promise<ConfigPutResult>;
|
|
@@ -1806,6 +2256,17 @@ declare function loadExtensionsFromPath(path: string): Promise<{
|
|
|
1806
2256
|
}>;
|
|
1807
2257
|
}>;
|
|
1808
2258
|
|
|
2259
|
+
/** Parsed frontmatter result */
|
|
2260
|
+
interface FrontmatterResult<T = Record<string, unknown>> {
|
|
2261
|
+
frontmatter: T;
|
|
2262
|
+
body: string;
|
|
2263
|
+
}
|
|
2264
|
+
/**
|
|
2265
|
+
* Parse YAML frontmatter from markdown content.
|
|
2266
|
+
* Parse YAML frontmatter and return the markdown body after the closing delimiter.
|
|
2267
|
+
*/
|
|
2268
|
+
declare function parseFrontmatter<T = Record<string, unknown>>(raw: string): FrontmatterResult<T>;
|
|
2269
|
+
|
|
1809
2270
|
declare function createCoreTools(input?: CoreToolContext): Tool[];
|
|
1810
2271
|
|
|
1811
|
-
export { type AfterToolCall, type AgentConfig, type
|
|
2272
|
+
export { type AfterToolCall, type AgentConfig, type AgentConfigRequest, type AgentConfiguration, type AgentDefinition, type AgentId, type AgentListCursor, type AgentRecord, type AgentResources, type AgentRun, AgentRuntime, type AgentRuntimeOptions, type AgentSummary, type AnyRuntimeError, type AssistantContent, type AssistantMessage, type BeforeToolCall, type ConfigProvider, type ConfigPutResult, type ConfigResolution, type ConfigToken, type ConfigurationSnapshot, type ContextCandidate, type CoreToolContext, type DefinitionLayer, type DurableConsumer, type DurableRunEvent, type DurableStore, type DurableToolResult, type EventCursor, type EventId, type ExecutionCheckpoint, type ExecutionId, type ExecutionToken, type ExtensionAPI, type ExtensionActivationError, type ExtensionActivationResult, type ExtensionContribution, type ExtensionDisposer, type ExtensionFactory, type ExtensionFactoryResult, ExtensionLifetimeError, type ExtensionLifetimeErrorCode, type ExtensionLoadInput, type FrontmatterResult, type HookEvent, type HookEventType, type HookHandler, InMemoryConfigProvider, InMemoryStore, type InputRequest, type InputRequestId, type InputRequiredCommit, type JsonObject, type JsonPrimitive, type JsonValue, type LoadExtensionsResult, type LoadInput, type LoadResult, type LoadedExtension, type Message, type MessageBase, type MessageCommitted, type MessageContent, type MessageDelta, type MessageId, type Metadata, type OpaqueId, type Outcome, type OwnerLease, type OwnerToken, type Page, type Phase, type PhaseContext, type PhaseContribution, type PhaseExecutionIdentity, type PhaseInvocation, type PhaseOutput, type PhaseRegistry, type PhaseRegistrySelection, type PhaseState, type ResolvedResourceView, type ResourceDiagnostic, type ResourceKind, type ResourceRef, ResourceRegistry, ResourceRegistryError, type ResourceRegistryErrorCode, type ResourceSourceId, type ResourceView, type RunBoundary, type RunClaim, type RunEvent, type RunFailure, type RunId, type RunListCursor, type RunRecord, type RunSnapshot, type RunState, type RunStateChanged, type RunSummary, RuntimeBootstrapRegistry, RuntimeError, type RuntimeErrorCode, type RuntimeErrorDetails, RuntimeExtensionLifetime, type Skill, SqliteStore, type TextContent, type ThinkingContent, type Tool, type ToolCallId, type ToolCallSnapshot, type ToolCallState, type ToolContribution, type ToolDefinition, type ToolExecutionResult, type ToolInvocationContext, type ToolMessage, type ToolMessageContent, type ToolProgress, type ToolResultContent, type ToolStateChanged, type ToolUseContent, type UserContent, type UserInput, type UserMessage, brandConfigToken, createCoreTools, isRuntimeError, loadExtensionsFromPath as loadExtensions, loadPhases, loadSkills, materializeConfigurationSnapshot, parseAgentDefinition, parseFrontmatter, resolveConfigurationSnapshot };
|