@kaoruisaac/pedelec 0.1.0 → 0.1.3

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/dist/index.d.ts CHANGED
@@ -1,18 +1,92 @@
1
1
  export type PedelecOptions = {
2
2
  bridgeTimeoutMs?: number;
3
3
  };
4
- export type ProviderCode = "codex" | "gemini" | "opencode" | "cursor" | "claude";
5
- type CreateSessionInputWithProvider = {
4
+ export type ProviderCode = "codex" | "gemini" | "opencode" | "cursor" | "claude" | "ollama";
5
+ export type JsonPrimitive = string | number | boolean | null;
6
+ export type JsonValue = JsonPrimitive | JsonValue[] | {
7
+ [key: string]: JsonValue;
8
+ };
9
+ export type ToolArgsSchemaMeta<TDefault extends JsonValue = JsonValue> = {
10
+ description?: string;
11
+ default?: TDefault;
12
+ examples?: TDefault[];
13
+ };
14
+ export type ToolArgsStringSchema = ToolArgsSchemaMeta<string> & {
15
+ type: "string";
16
+ enum?: string[];
17
+ minLength?: number;
18
+ maxLength?: number;
19
+ pattern?: string;
20
+ };
21
+ export type ToolArgsNumberSchema = ToolArgsSchemaMeta<number> & {
22
+ type: "number";
23
+ enum?: number[];
24
+ minimum?: number;
25
+ maximum?: number;
26
+ };
27
+ export type ToolArgsIntegerSchema = ToolArgsSchemaMeta<number> & {
28
+ type: "integer";
29
+ enum?: number[];
30
+ minimum?: number;
31
+ maximum?: number;
32
+ };
33
+ export type ToolArgsBooleanSchema = ToolArgsSchemaMeta<boolean> & {
34
+ type: "boolean";
35
+ enum?: boolean[];
36
+ };
37
+ export type ToolArgsArraySchema = ToolArgsSchemaMeta<JsonValue[]> & {
38
+ type: "array";
39
+ items: ToolArgsSchemaNode;
40
+ minItems?: number;
41
+ maxItems?: number;
42
+ uniqueItems?: boolean;
43
+ };
44
+ export type ToolArgsObjectSchema = ToolArgsSchemaMeta<Record<string, JsonValue>> & {
45
+ type: "object";
46
+ properties?: Record<string, ToolArgsSchemaNode>;
47
+ required?: string[];
48
+ };
49
+ export type ToolArgsOneOfSchema = ToolArgsSchemaMeta & {
50
+ oneOf: ToolArgsSchemaNode[];
51
+ };
52
+ export type ToolArgsSchemaNode = ToolArgsStringSchema | ToolArgsNumberSchema | ToolArgsIntegerSchema | ToolArgsBooleanSchema | ToolArgsArraySchema | ToolArgsObjectSchema | ToolArgsOneOfSchema;
53
+ export type ToolArgsSchema = ToolArgsObjectSchema;
54
+ export type ToolSpecificHandler<TArgs = unknown, TResult = unknown> = (args: TArgs, ctx: ToolCallContext) => TResult | Promise<TResult>;
55
+ export type ToolDefinition<TArgs = unknown, TResult = unknown, TName extends string = string> = {
56
+ name: TName;
57
+ description: string;
58
+ argsSchema: ToolArgsSchema;
59
+ timeoutMs?: number;
60
+ handler?: ToolSpecificHandler<TArgs, TResult>;
61
+ };
62
+ export type SkillsInput<TTools extends readonly ToolDefinition[] = readonly ToolDefinition[]> = {
63
+ guidance: string;
64
+ tools: TTools;
65
+ };
66
+ export type ToolNameOf<TTools extends readonly ToolDefinition[]> = Extract<TTools[number]["name"], string>;
67
+ export type SerializableToolManifest = {
68
+ name: string;
69
+ description: string;
70
+ argsSchema: ToolArgsSchema;
71
+ timeoutMs?: number;
72
+ };
73
+ export type SerializableSkillsManifest = {
74
+ guidance: string;
75
+ tools: SerializableToolManifest[];
76
+ };
77
+ type CreateSessionInputWithProvider<TTools extends readonly ToolDefinition[] = readonly ToolDefinition[]> = {
6
78
  provider: ProviderCode;
7
79
  model?: string;
8
- skillsUrls?: string[];
80
+ skills?: SkillsInput<TTools>;
81
+ autoEndOnDisconnect?: boolean;
9
82
  };
10
- type CreateSessionInputWithDefaults = {
83
+ type CreateSessionInputWithDefaults<TTools extends readonly ToolDefinition[] = readonly ToolDefinition[]> = {
11
84
  provider?: undefined;
12
85
  model?: never;
13
- skillsUrls?: string[];
86
+ skills?: SkillsInput<TTools>;
87
+ autoEndOnDisconnect?: boolean;
14
88
  };
15
- export type CreateSessionInput = CreateSessionInputWithProvider | CreateSessionInputWithDefaults;
89
+ export type CreateSessionInput<TTools extends readonly ToolDefinition[] = readonly ToolDefinition[]> = CreateSessionInputWithProvider<TTools> | CreateSessionInputWithDefaults<TTools>;
16
90
  export type ProviderInfo = {
17
91
  name: string;
18
92
  code: ProviderCode;
@@ -22,7 +96,7 @@ export type ProviderInfo = {
22
96
  };
23
97
  export type PedelecSettings = {
24
98
  defaultProvider: ProviderCode | null;
25
- defaultModel: string | null;
99
+ defaultModels: Partial<Record<ProviderCode, string>>;
26
100
  };
27
101
  export type ApprovalStatus = {
28
102
  installed: boolean;
@@ -35,6 +109,43 @@ export type PedelecError = {
35
109
  details?: unknown;
36
110
  };
37
111
  export type PedelecSessionStatus = "idle" | "running" | "waiting_tool_result" | "ended" | "error";
112
+ export type PedelecEventContext = {
113
+ sessionId: string;
114
+ provider: string;
115
+ model?: string;
116
+ sessionCreatedAt: number;
117
+ eventReceivedAt?: number;
118
+ eventEmittedAt: number;
119
+ turnId?: string;
120
+ turnStartedAt?: number;
121
+ turnKind?: "user" | "prepare";
122
+ source: "core" | "sdk";
123
+ };
124
+ export type ChatEventContext = PedelecEventContext & {
125
+ type: "chat_delta";
126
+ turnId: string;
127
+ turnStartedAt: number;
128
+ eventReceivedAt: number;
129
+ };
130
+ export type ToolCallContext = PedelecEventContext & {
131
+ type: "tool_call";
132
+ toolRequestId: string;
133
+ tool: string;
134
+ turnId: string;
135
+ turnStartedAt: number;
136
+ eventReceivedAt: number;
137
+ };
138
+ export type StatusEventContext = PedelecEventContext & {
139
+ type: "status_changed" | "sdk_status_changed";
140
+ status: PedelecSessionStatus;
141
+ previousStatus: PedelecSessionStatus;
142
+ };
143
+ export type ErrorEventContext = PedelecEventContext & {
144
+ type: "error" | "sdk_error";
145
+ };
146
+ export type EndedEventContext = PedelecEventContext & {
147
+ type: "ended" | "sdk_ended";
148
+ };
38
149
  type SessionEvent = {
39
150
  type: "chat_delta";
40
151
  channelId: string;
@@ -72,11 +183,16 @@ type SessionEvent = {
72
183
  sessionId: string;
73
184
  seq?: number;
74
185
  };
75
- type ChatHandler = (text: string) => void;
76
- type ToolHandler = (tool: string, args: unknown) => unknown | Promise<unknown>;
77
- type ErrorHandler = (error: PedelecError) => void;
78
- type StatusHandler = (status: PedelecSessionStatus) => void;
79
- type EndedHandler = () => void;
186
+ type EventDispatchMeta = {
187
+ source: "core" | "sdk";
188
+ eventReceivedAt?: number;
189
+ };
190
+ type ChatHandler = (text: string, ctx: ChatEventContext) => void;
191
+ type GenericToolHandler<TToolName extends string = string> = (tool: TToolName, args: unknown, ctx: ToolCallContext) => unknown | Promise<unknown>;
192
+ type ErrorHandler = (error: PedelecError, ctx: ErrorEventContext) => void;
193
+ type StatusHandler = (status: PedelecSessionStatus, ctx: StatusEventContext) => void;
194
+ type EndedHandler = (ctx: EndedEventContext) => void;
195
+ export declare function defineTool<TArgs = unknown, TResult = unknown, const TName extends string = string>(tool: ToolDefinition<TArgs, TResult, TName>): ToolDefinition<TArgs, TResult, TName>;
80
196
  export declare class Pedelec {
81
197
  private readonly pageWindow;
82
198
  private readonly channelId;
@@ -88,11 +204,12 @@ export declare class Pedelec {
88
204
  private disconnectedError;
89
205
  private port;
90
206
  constructor(options?: PedelecOptions);
91
- createSession(input?: CreateSessionInput): Promise<PedelecSession>;
207
+ createSession(): Promise<PedelecSession<string>>;
208
+ createSession<const TTools extends readonly ToolDefinition[]>(input: CreateSessionInput<TTools>): Promise<PedelecSession<ToolNameOf<TTools>>>;
92
209
  listProviders(): Promise<ProviderInfo[]>;
93
210
  getSettings(): Promise<PedelecSettings>;
94
211
  getApprovalStatus(): Promise<ApprovalStatus>;
95
- resumeSession(sessionId: string): Promise<PedelecSession>;
212
+ resumeSession(sessionId: string): Promise<PedelecSession<string>>;
96
213
  request<T>(type: string, payload?: Record<string, unknown>): Promise<T>;
97
214
  unregisterSession(sessionId: string): void;
98
215
  private resolveCreateSessionInput;
@@ -107,34 +224,57 @@ export declare class Pedelec {
107
224
  private handleDisconnect;
108
225
  private broadcastError;
109
226
  }
110
- export declare class PedelecSession {
227
+ export declare class PedelecSession<TToolName extends string = string> {
111
228
  private readonly client;
112
229
  readonly sessionId: string;
113
230
  readonly provider: string;
114
231
  readonly model?: string;
232
+ readonly sessionCreatedAt: number;
115
233
  private status;
116
234
  private pendingSend;
117
- private toolHandler;
235
+ private pendingPrepare;
236
+ private preparePromise;
237
+ private prepared;
238
+ private activeTurn;
239
+ private genericToolHandler;
240
+ private inlineToolHandlers;
241
+ private readonly namedToolHandlers;
118
242
  private readonly chatHandlers;
119
243
  private readonly errorHandlers;
120
244
  private readonly statusHandlers;
121
245
  private readonly endedHandlers;
122
- constructor(client: Pedelec, sessionId: string, provider: string, model?: string);
246
+ constructor(client: Pedelec, sessionId: string, provider: string, model?: string, inlineToolHandlers?: Map<string, ToolSpecificHandler>);
247
+ prepare(): Promise<void>;
123
248
  sendText(text: string): Promise<void>;
124
249
  onChat(handler: ChatHandler): () => void;
125
- onTool(handler: ToolHandler): () => void;
250
+ onTool(handler: GenericToolHandler<TToolName>): () => void;
251
+ onTool<TArgs = unknown, TResult = unknown>(toolName: TToolName, handler: ToolSpecificHandler<TArgs, TResult>): () => void;
126
252
  onError(handler: ErrorHandler): () => void;
127
253
  onStatus(handler: StatusHandler): () => void;
128
254
  onEnded(handler: EndedHandler): () => void;
129
255
  getStatus(): PedelecSessionStatus;
130
256
  end(): Promise<void>;
131
- handleEvent(event: SessionEvent): void;
257
+ handleEvent(event: SessionEvent, meta?: EventDispatchMeta): void;
258
+ replaceInlineToolHandlers(handlers: Map<string, ToolSpecificHandler>): void;
132
259
  private handleToolCall;
133
260
  private resolvePendingSend;
261
+ private resolvePendingPrepare;
262
+ private resolveActivePending;
134
263
  private rejectPendingSend;
264
+ private rejectPendingPrepare;
265
+ private rejectActivePending;
135
266
  private clearPendingSend;
267
+ private clearPendingPrepare;
136
268
  private markEnded;
137
269
  private emitError;
138
270
  private setStatus;
271
+ private requireActiveTurn;
272
+ private finishActiveTurn;
273
+ private createBaseContext;
274
+ private createChatContext;
275
+ private createToolCallContext;
276
+ private createStatusContext;
277
+ private createErrorContext;
278
+ private createEndedContext;
139
279
  }
140
280
  export {};