agents 0.0.0-5969a16 → 0.0.0-59ac254

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.
Files changed (104) hide show
  1. package/README.md +5 -3
  2. package/dist/ai-chat-agent.d.ts +100 -19
  3. package/dist/ai-chat-agent.js +812 -352
  4. package/dist/ai-chat-agent.js.map +1 -1
  5. package/dist/ai-chat-v5-migration-DguhuLKF.js +155 -0
  6. package/dist/ai-chat-v5-migration-DguhuLKF.js.map +1 -0
  7. package/dist/ai-chat-v5-migration.d.ts +7 -4
  8. package/dist/ai-chat-v5-migration.js +3 -20
  9. package/dist/ai-react.d.ts +20 -23
  10. package/dist/ai-react.js +408 -349
  11. package/dist/ai-react.js.map +1 -1
  12. package/dist/ai-types-CwgHzwUb.js +24 -0
  13. package/dist/ai-types-CwgHzwUb.js.map +1 -0
  14. package/dist/ai-types-D_hTbf25.d.ts +103 -0
  15. package/dist/ai-types.d.ts +6 -92
  16. package/dist/ai-types.js +3 -8
  17. package/dist/cli/index.d.ts +1 -0
  18. package/dist/cli/index.js +28 -0
  19. package/dist/cli/index.js.map +1 -0
  20. package/dist/client-C_M5uPrn.d.ts +834 -0
  21. package/dist/client-CcyhkGfN.js +117 -0
  22. package/dist/client-CcyhkGfN.js.map +1 -0
  23. package/dist/client-ClORm6f0.d.ts +104 -0
  24. package/dist/client-QZa2Rq0l.js +1105 -0
  25. package/dist/client-QZa2Rq0l.js.map +1 -0
  26. package/dist/client.d.ts +11 -92
  27. package/dist/client.js +4 -13
  28. package/dist/codemode/ai.d.ts +27 -0
  29. package/dist/codemode/ai.js +152 -0
  30. package/dist/codemode/ai.js.map +1 -0
  31. package/dist/context-BkKbAa1R.js +8 -0
  32. package/dist/context-BkKbAa1R.js.map +1 -0
  33. package/dist/context-_sPQqJWv.d.ts +24 -0
  34. package/dist/context.d.ts +6 -0
  35. package/dist/context.js +3 -0
  36. package/dist/do-oauth-client-provider-B-ryFIPr.d.ts +70 -0
  37. package/dist/do-oauth-client-provider-B1fVIshX.js +155 -0
  38. package/dist/do-oauth-client-provider-B1fVIshX.js.map +1 -0
  39. package/dist/index-CyDpAVHZ.d.ts +58 -0
  40. package/dist/index-DUnsVDnf.d.ts +577 -0
  41. package/dist/index.d.ts +55 -556
  42. package/dist/index.js +8 -32
  43. package/dist/mcp/client.d.ts +4 -11
  44. package/dist/mcp/client.js +4 -10
  45. package/dist/mcp/do-oauth-client-provider.d.ts +2 -50
  46. package/dist/mcp/do-oauth-client-provider.js +3 -8
  47. package/dist/mcp/index.d.ts +200 -75
  48. package/dist/mcp/index.js +1423 -1080
  49. package/dist/mcp/index.js.map +1 -1
  50. package/dist/mcp/x402.d.ts +22 -25
  51. package/dist/mcp/x402.js +190 -3187
  52. package/dist/mcp/x402.js.map +1 -1
  53. package/dist/mcp-CzbSsLfc.d.ts +61 -0
  54. package/dist/observability/index.d.ts +3 -46
  55. package/dist/observability/index.js +8 -12
  56. package/dist/react-DbzUBop3.d.ts +131 -0
  57. package/dist/react.d.ts +15 -123
  58. package/dist/react.js +183 -113
  59. package/dist/react.js.map +1 -1
  60. package/dist/schedule.d.ts +13 -10
  61. package/dist/schedule.js +43 -33
  62. package/dist/schedule.js.map +1 -1
  63. package/dist/serializable-C4GLimgv.d.ts +39 -0
  64. package/dist/serializable.d.ts +7 -32
  65. package/dist/serializable.js +1 -1
  66. package/dist/src-BmbDclOA.js +1181 -0
  67. package/dist/src-BmbDclOA.js.map +1 -0
  68. package/package.json +65 -32
  69. package/dist/_esm-LV5FJ3HK.js +0 -3922
  70. package/dist/_esm-LV5FJ3HK.js.map +0 -1
  71. package/dist/ai-chat-v5-migration.js.map +0 -1
  72. package/dist/ai-types.js.map +0 -1
  73. package/dist/ccip-CMBYN64O.js +0 -15
  74. package/dist/ccip-CMBYN64O.js.map +0 -1
  75. package/dist/chunk-5Y6BEZDY.js +0 -276
  76. package/dist/chunk-5Y6BEZDY.js.map +0 -1
  77. package/dist/chunk-BER7KXUJ.js +0 -18
  78. package/dist/chunk-BER7KXUJ.js.map +0 -1
  79. package/dist/chunk-JJBFIGUC.js +0 -5202
  80. package/dist/chunk-JJBFIGUC.js.map +0 -1
  81. package/dist/chunk-PR4QN5HX.js +0 -43
  82. package/dist/chunk-PR4QN5HX.js.map +0 -1
  83. package/dist/chunk-QEPGNUG6.js +0 -650
  84. package/dist/chunk-QEPGNUG6.js.map +0 -1
  85. package/dist/chunk-QEVM4BVL.js +0 -116
  86. package/dist/chunk-QEVM4BVL.js.map +0 -1
  87. package/dist/chunk-RS5OCNEQ.js +0 -1323
  88. package/dist/chunk-RS5OCNEQ.js.map +0 -1
  89. package/dist/chunk-TYAY6AU6.js +0 -159
  90. package/dist/chunk-TYAY6AU6.js.map +0 -1
  91. package/dist/chunk-UJVEAURM.js +0 -150
  92. package/dist/chunk-UJVEAURM.js.map +0 -1
  93. package/dist/chunk-XFS5ERG3.js +0 -127
  94. package/dist/chunk-XFS5ERG3.js.map +0 -1
  95. package/dist/client-BohGLma8.d.ts +0 -5041
  96. package/dist/client.js.map +0 -1
  97. package/dist/index.js.map +0 -1
  98. package/dist/mcp/client.js.map +0 -1
  99. package/dist/mcp/do-oauth-client-provider.js.map +0 -1
  100. package/dist/observability/index.js.map +0 -1
  101. package/dist/secp256k1-M22GZP2U.js +0 -2193
  102. package/dist/secp256k1-M22GZP2U.js.map +0 -1
  103. package/dist/serializable.js.map +0 -1
  104. package/src/index.ts +0 -1987
package/dist/react.js CHANGED
@@ -1,119 +1,189 @@
1
- import "./chunk-BER7KXUJ.js";
2
- import "./chunk-PR4QN5HX.js";
3
-
4
- // src/react.tsx
1
+ import { t as MessageType } from "./ai-types-CwgHzwUb.js";
2
+ import { use, useCallback, useEffect, useMemo, useRef, useState } from "react";
5
3
  import { usePartySocket } from "partysocket/react";
6
- import { useCallback, useRef } from "react";
4
+
5
+ //#region src/react.tsx
6
+ /**
7
+ * Convert a camelCase string to a kebab-case string
8
+ * @param str The string to convert
9
+ * @returns The kebab-case string
10
+ */
7
11
  function camelCaseToKebabCase(str) {
8
- if (str === str.toUpperCase() && str !== str.toLowerCase()) {
9
- return str.toLowerCase().replace(/_/g, "-");
10
- }
11
- let kebabified = str.replace(
12
- /[A-Z]/g,
13
- (letter) => `-${letter.toLowerCase()}`
14
- );
15
- kebabified = kebabified.startsWith("-") ? kebabified.slice(1) : kebabified;
16
- return kebabified.replace(/_/g, "-").replace(/-$/, "");
12
+ if (str === str.toUpperCase() && str !== str.toLowerCase()) return str.toLowerCase().replace(/_/g, "-");
13
+ let kebabified = str.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);
14
+ kebabified = kebabified.startsWith("-") ? kebabified.slice(1) : kebabified;
15
+ return kebabified.replace(/_/g, "-").replace(/-$/, "");
17
16
  }
18
- function useAgent(options) {
19
- const agentNamespace = camelCaseToKebabCase(options.agent);
20
- const pendingCallsRef = useRef(
21
- /* @__PURE__ */ new Map()
22
- );
23
- const agent = usePartySocket({
24
- party: agentNamespace,
25
- prefix: "agents",
26
- room: options.name || "default",
27
- ...options,
28
- onMessage: (message) => {
29
- if (typeof message.data === "string") {
30
- let parsedMessage;
31
- try {
32
- parsedMessage = JSON.parse(message.data);
33
- } catch (_error) {
34
- return options.onMessage?.(message);
35
- }
36
- if (parsedMessage.type === "cf_agent_state" /* CF_AGENT_STATE */) {
37
- options.onStateUpdate?.(parsedMessage.state, "server");
38
- return;
39
- }
40
- if (parsedMessage.type === "cf_agent_mcp_servers" /* CF_AGENT_MCP_SERVERS */) {
41
- options.onMcpUpdate?.(parsedMessage.mcp);
42
- return;
43
- }
44
- if (parsedMessage.type === "rpc" /* RPC */) {
45
- const response = parsedMessage;
46
- const pending = pendingCallsRef.current.get(response.id);
47
- if (!pending) return;
48
- if (!response.success) {
49
- pending.reject(new Error(response.error));
50
- pendingCallsRef.current.delete(response.id);
51
- pending.stream?.onError?.(response.error);
52
- return;
53
- }
54
- if ("done" in response) {
55
- if (response.done) {
56
- pending.resolve(response.result);
57
- pendingCallsRef.current.delete(response.id);
58
- pending.stream?.onDone?.(response.result);
59
- } else {
60
- pending.stream?.onChunk?.(response.result);
61
- }
62
- } else {
63
- pending.resolve(response.result);
64
- pendingCallsRef.current.delete(response.id);
65
- }
66
- return;
67
- }
68
- }
69
- options.onMessage?.(message);
70
- }
71
- });
72
- const call = useCallback(
73
- (method, args = [], streamOptions) => {
74
- return new Promise((resolve, reject) => {
75
- const id = Math.random().toString(36).slice(2);
76
- pendingCallsRef.current.set(id, {
77
- reject,
78
- resolve,
79
- stream: streamOptions
80
- });
81
- const request = {
82
- args,
83
- id,
84
- method,
85
- type: "rpc" /* RPC */
86
- };
87
- agent.send(JSON.stringify(request));
88
- });
89
- },
90
- [agent]
91
- );
92
- agent.setState = (state) => {
93
- agent.send(JSON.stringify({ state, type: "cf_agent_state" /* CF_AGENT_STATE */ }));
94
- options.onStateUpdate?.(state, "client");
95
- };
96
- agent.call = call;
97
- agent.agent = agentNamespace;
98
- agent.name = options.name || "default";
99
- agent.stub = new Proxy(
100
- {},
101
- {
102
- get: (_target, method) => {
103
- return (...args) => {
104
- return call(method, args);
105
- };
106
- }
107
- }
108
- );
109
- if (agent.agent !== agent.agent.toLowerCase()) {
110
- console.warn(
111
- `Agent name: ${agent.agent} should probably be in lowercase. Received: ${agent.agent}`
112
- );
113
- }
114
- return agent;
17
+ const queryCache = /* @__PURE__ */ new Map();
18
+ function createCacheKey(agentNamespace, name, deps) {
19
+ return JSON.stringify([
20
+ agentNamespace,
21
+ name || "default",
22
+ ...deps
23
+ ]);
24
+ }
25
+ function getCacheEntry(key) {
26
+ const entry = queryCache.get(key);
27
+ if (!entry) return void 0;
28
+ if (Date.now() >= entry.expiresAt) {
29
+ queryCache.delete(key);
30
+ return;
31
+ }
32
+ return entry;
33
+ }
34
+ function setCacheEntry(key, promise, cacheTtl) {
35
+ const entry = {
36
+ promise,
37
+ expiresAt: Date.now() + cacheTtl
38
+ };
39
+ queryCache.set(key, entry);
40
+ return entry;
115
41
  }
116
- export {
117
- useAgent
42
+ function deleteCacheEntry(key) {
43
+ queryCache.delete(key);
44
+ }
45
+ const _testUtils = {
46
+ queryCache,
47
+ setCacheEntry,
48
+ getCacheEntry,
49
+ deleteCacheEntry,
50
+ clearCache: () => queryCache.clear()
118
51
  };
52
+ function useAgent(options) {
53
+ const agentNamespace = camelCaseToKebabCase(options.agent);
54
+ const { query, queryDeps, cacheTtl, ...restOptions } = options;
55
+ const pendingCallsRef = useRef(/* @__PURE__ */ new Map());
56
+ const cacheKey = useMemo(() => createCacheKey(agentNamespace, options.name, queryDeps || []), [
57
+ agentNamespace,
58
+ options.name,
59
+ queryDeps
60
+ ]);
61
+ const ttl = cacheTtl ?? 300 * 1e3;
62
+ const [cacheInvalidatedAt, setCacheInvalidatedAt] = useState(0);
63
+ const queryPromise = useMemo(() => {
64
+ if (!query || typeof query !== "function") return null;
65
+ const cached = getCacheEntry(cacheKey);
66
+ if (cached) return cached.promise;
67
+ const promise = query().catch((error) => {
68
+ console.error(`[useAgent] Query failed for agent "${options.agent}":`, error);
69
+ deleteCacheEntry(cacheKey);
70
+ throw error;
71
+ });
72
+ setCacheEntry(cacheKey, promise, ttl);
73
+ return promise;
74
+ }, [
75
+ cacheKey,
76
+ query,
77
+ options.agent,
78
+ ttl,
79
+ cacheInvalidatedAt
80
+ ]);
81
+ useEffect(() => {
82
+ if (!queryPromise || ttl <= 0) return;
83
+ const entry = getCacheEntry(cacheKey);
84
+ if (!entry) return;
85
+ const timeUntilExpiry = entry.expiresAt - Date.now();
86
+ const timer = setTimeout(() => {
87
+ deleteCacheEntry(cacheKey);
88
+ setCacheInvalidatedAt(Date.now());
89
+ }, Math.max(0, timeUntilExpiry));
90
+ return () => clearTimeout(timer);
91
+ }, [
92
+ cacheKey,
93
+ queryPromise,
94
+ ttl
95
+ ]);
96
+ let resolvedQuery;
97
+ if (query) if (typeof query === "function") {
98
+ const queryResult = use(queryPromise);
99
+ if (queryResult) {
100
+ for (const [key, value] of Object.entries(queryResult)) if (value !== null && value !== void 0 && typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") console.warn(`[useAgent] Query parameter "${key}" is an object and will be converted to "[object Object]". Query parameters should be string, number, boolean, or null.`);
101
+ resolvedQuery = queryResult;
102
+ }
103
+ } else resolvedQuery = query;
104
+ const agent = usePartySocket({
105
+ party: agentNamespace,
106
+ prefix: "agents",
107
+ room: options.name || "default",
108
+ query: resolvedQuery,
109
+ ...restOptions,
110
+ onMessage: (message) => {
111
+ if (typeof message.data === "string") {
112
+ let parsedMessage;
113
+ try {
114
+ parsedMessage = JSON.parse(message.data);
115
+ } catch (_error) {
116
+ return options.onMessage?.(message);
117
+ }
118
+ if (parsedMessage.type === MessageType.CF_AGENT_STATE) {
119
+ options.onStateUpdate?.(parsedMessage.state, "server");
120
+ return;
121
+ }
122
+ if (parsedMessage.type === MessageType.CF_AGENT_MCP_SERVERS) {
123
+ options.onMcpUpdate?.(parsedMessage.mcp);
124
+ return;
125
+ }
126
+ if (parsedMessage.type === MessageType.RPC) {
127
+ const response = parsedMessage;
128
+ const pending = pendingCallsRef.current.get(response.id);
129
+ if (!pending) return;
130
+ if (!response.success) {
131
+ pending.reject(new Error(response.error));
132
+ pendingCallsRef.current.delete(response.id);
133
+ pending.stream?.onError?.(response.error);
134
+ return;
135
+ }
136
+ if ("done" in response) if (response.done) {
137
+ pending.resolve(response.result);
138
+ pendingCallsRef.current.delete(response.id);
139
+ pending.stream?.onDone?.(response.result);
140
+ } else pending.stream?.onChunk?.(response.result);
141
+ else {
142
+ pending.resolve(response.result);
143
+ pendingCallsRef.current.delete(response.id);
144
+ }
145
+ return;
146
+ }
147
+ }
148
+ options.onMessage?.(message);
149
+ }
150
+ });
151
+ const call = useCallback((method, args = [], streamOptions) => {
152
+ return new Promise((resolve, reject) => {
153
+ const id = Math.random().toString(36).slice(2);
154
+ pendingCallsRef.current.set(id, {
155
+ reject,
156
+ resolve,
157
+ stream: streamOptions
158
+ });
159
+ const request = {
160
+ args,
161
+ id,
162
+ method,
163
+ type: MessageType.RPC
164
+ };
165
+ agent.send(JSON.stringify(request));
166
+ });
167
+ }, [agent]);
168
+ agent.setState = (state) => {
169
+ agent.send(JSON.stringify({
170
+ state,
171
+ type: MessageType.CF_AGENT_STATE
172
+ }));
173
+ options.onStateUpdate?.(state, "client");
174
+ };
175
+ agent.call = call;
176
+ agent.agent = agentNamespace;
177
+ agent.name = options.name || "default";
178
+ agent.stub = new Proxy({}, { get: (_target, method) => {
179
+ return (...args) => {
180
+ return call(method, args);
181
+ };
182
+ } });
183
+ if (agent.agent !== agent.agent.toLowerCase()) console.warn(`Agent name: ${agent.agent} should probably be in lowercase. Received: ${agent.agent}`);
184
+ return agent;
185
+ }
186
+
187
+ //#endregion
188
+ export { _testUtils, useAgent };
119
189
  //# sourceMappingURL=react.js.map
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.tsx"],"sourcesContent":["import type { PartySocket } from \"partysocket\";\nimport { usePartySocket } from \"partysocket/react\";\nimport { useCallback, useRef } from \"react\";\nimport type { Agent, MCPServersState, RPCRequest, RPCResponse } from \"./\";\nimport type { StreamOptions } from \"./client\";\nimport type { Method, RPCMethod } from \"./serializable\";\nimport { MessageType } from \"./ai-types\";\n\n/**\n * Convert a camelCase string to a kebab-case string\n * @param str The string to convert\n * @returns The kebab-case string\n */\nfunction camelCaseToKebabCase(str: string): string {\n // If string is all uppercase, convert to lowercase\n if (str === str.toUpperCase() && str !== str.toLowerCase()) {\n return str.toLowerCase().replace(/_/g, \"-\");\n }\n\n // Otherwise handle camelCase to kebab-case\n let kebabified = str.replace(\n /[A-Z]/g,\n (letter) => `-${letter.toLowerCase()}`\n );\n kebabified = kebabified.startsWith(\"-\") ? kebabified.slice(1) : kebabified;\n // Convert any remaining underscores to hyphens and remove trailing -'s\n return kebabified.replace(/_/g, \"-\").replace(/-$/, \"\");\n}\n\n/**\n * Options for the useAgent hook\n * @template State Type of the Agent's state\n */\nexport type UseAgentOptions<State = unknown> = Omit<\n Parameters<typeof usePartySocket>[0],\n \"party\" | \"room\"\n> & {\n /** Name of the agent to connect to */\n agent: string;\n /** Name of the specific Agent instance */\n name?: string;\n /** Called when the Agent's state is updated */\n onStateUpdate?: (state: State, source: \"server\" | \"client\") => void;\n /** Called when MCP server state is updated */\n onMcpUpdate?: (mcpServers: MCPServersState) => void;\n};\n\ntype AllOptional<T> = T extends [infer A, ...infer R]\n ? undefined extends A\n ? AllOptional<R>\n : false\n : true; // no params means optional by default\n\ntype RPCMethods<T> = {\n [K in keyof T as T[K] extends RPCMethod<T[K]> ? K : never]: RPCMethod<T[K]>;\n};\n\ntype OptionalParametersMethod<T extends RPCMethod> =\n AllOptional<Parameters<T>> extends true ? T : never;\n\n// all methods of the Agent, excluding the ones that are declared in the base Agent class\n// biome-ignore lint: suppressions/parse\ntype AgentMethods<T> = Omit<RPCMethods<T>, keyof Agent<any, any>>;\n\ntype OptionalAgentMethods<T> = {\n [K in keyof AgentMethods<T> as AgentMethods<T>[K] extends OptionalParametersMethod<\n AgentMethods<T>[K]\n >\n ? K\n : never]: OptionalParametersMethod<AgentMethods<T>[K]>;\n};\n\ntype RequiredAgentMethods<T> = Omit<\n AgentMethods<T>,\n keyof OptionalAgentMethods<T>\n>;\n\ntype AgentPromiseReturnType<T, K extends keyof AgentMethods<T>> =\n // biome-ignore lint: suppressions/parse\n ReturnType<AgentMethods<T>[K]> extends Promise<any>\n ? ReturnType<AgentMethods<T>[K]>\n : Promise<ReturnType<AgentMethods<T>[K]>>;\n\ntype OptionalArgsAgentMethodCall<AgentT> = <\n K extends keyof OptionalAgentMethods<AgentT>\n>(\n method: K,\n args?: Parameters<OptionalAgentMethods<AgentT>[K]>,\n streamOptions?: StreamOptions\n) => AgentPromiseReturnType<AgentT, K>;\n\ntype RequiredArgsAgentMethodCall<AgentT> = <\n K extends keyof RequiredAgentMethods<AgentT>\n>(\n method: K,\n args: Parameters<RequiredAgentMethods<AgentT>[K]>,\n streamOptions?: StreamOptions\n) => AgentPromiseReturnType<AgentT, K>;\n\ntype AgentMethodCall<AgentT> = OptionalArgsAgentMethodCall<AgentT> &\n RequiredArgsAgentMethodCall<AgentT>;\n\ntype UntypedAgentMethodCall = <T = unknown>(\n method: string,\n args?: unknown[],\n streamOptions?: StreamOptions\n) => Promise<T>;\n\ntype AgentStub<T> = {\n [K in keyof AgentMethods<T>]: (\n ...args: Parameters<AgentMethods<T>[K]>\n ) => AgentPromiseReturnType<AgentMethods<T>, K>;\n};\n\n// we neet to use Method instead of RPCMethod here for retro-compatibility\ntype UntypedAgentStub = Record<string, Method>;\n\n/**\n * React hook for connecting to an Agent\n * @template State Type of the Agent's state\n * @template Agent Type of the Agent\n * @param options Connection options\n * @returns WebSocket connection with setState and call methods\n */\nexport function useAgent<State = unknown>(\n options: UseAgentOptions<State>\n): PartySocket & {\n agent: string;\n name: string;\n setState: (state: State) => void;\n call: UntypedAgentMethodCall;\n stub: UntypedAgentStub;\n};\nexport function useAgent<\n AgentT extends {\n get state(): State;\n },\n State\n>(\n options: UseAgentOptions<State>\n): PartySocket & {\n agent: string;\n name: string;\n setState: (state: State) => void;\n call: AgentMethodCall<AgentT>;\n stub: AgentStub<AgentT>;\n};\nexport function useAgent<State>(\n options: UseAgentOptions<unknown>\n): PartySocket & {\n agent: string;\n name: string;\n setState: (state: State) => void;\n call: UntypedAgentMethodCall | AgentMethodCall<unknown>;\n stub: UntypedAgentStub;\n} {\n const agentNamespace = camelCaseToKebabCase(options.agent);\n // Keep track of pending RPC calls\n const pendingCallsRef = useRef(\n new Map<\n string,\n {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n stream?: StreamOptions;\n }\n >()\n );\n\n // TODO: if options.query is a function, then use\n // \"use()\" to get the value and pass it\n // as a query parameter to usePartySocket\n const agent = usePartySocket({\n party: agentNamespace,\n prefix: \"agents\",\n room: options.name || \"default\",\n ...options,\n onMessage: (message) => {\n if (typeof message.data === \"string\") {\n let parsedMessage: Record<string, unknown>;\n try {\n parsedMessage = JSON.parse(message.data);\n } catch (_error) {\n // silently ignore invalid messages for now\n // TODO: log errors with log levels\n return options.onMessage?.(message);\n }\n if (parsedMessage.type === MessageType.CF_AGENT_STATE) {\n options.onStateUpdate?.(parsedMessage.state as State, \"server\");\n return;\n }\n if (parsedMessage.type === MessageType.CF_AGENT_MCP_SERVERS) {\n options.onMcpUpdate?.(parsedMessage.mcp as MCPServersState);\n return;\n }\n if (parsedMessage.type === MessageType.RPC) {\n const response = parsedMessage as RPCResponse;\n const pending = pendingCallsRef.current.get(response.id);\n if (!pending) return;\n\n if (!response.success) {\n pending.reject(new Error(response.error));\n pendingCallsRef.current.delete(response.id);\n pending.stream?.onError?.(response.error);\n return;\n }\n\n // Handle streaming responses\n if (\"done\" in response) {\n if (response.done) {\n pending.resolve(response.result);\n pendingCallsRef.current.delete(response.id);\n pending.stream?.onDone?.(response.result);\n } else {\n pending.stream?.onChunk?.(response.result);\n }\n } else {\n // Non-streaming response\n pending.resolve(response.result);\n pendingCallsRef.current.delete(response.id);\n }\n return;\n }\n }\n options.onMessage?.(message);\n }\n }) as PartySocket & {\n agent: string;\n name: string;\n setState: (state: State) => void;\n call: UntypedAgentMethodCall;\n stub: UntypedAgentStub;\n };\n // Create the call method\n const call = useCallback(\n <T = unknown,>(\n method: string,\n args: unknown[] = [],\n streamOptions?: StreamOptions\n ): Promise<T> => {\n return new Promise((resolve, reject) => {\n const id = Math.random().toString(36).slice(2);\n pendingCallsRef.current.set(id, {\n reject,\n resolve: resolve as (value: unknown) => void,\n stream: streamOptions\n });\n\n const request: RPCRequest = {\n args,\n id,\n method,\n type: MessageType.RPC\n };\n\n agent.send(JSON.stringify(request));\n });\n },\n [agent]\n );\n\n agent.setState = (state: State) => {\n agent.send(JSON.stringify({ state, type: MessageType.CF_AGENT_STATE }));\n options.onStateUpdate?.(state, \"client\");\n };\n\n agent.call = call;\n agent.agent = agentNamespace;\n agent.name = options.name || \"default\";\n // biome-ignore lint: suppressions/parse\n agent.stub = new Proxy<any>(\n {},\n {\n get: (_target, method) => {\n return (...args: unknown[]) => {\n return call(method as string, args);\n };\n }\n }\n );\n\n // warn if agent isn't in lowercase\n if (agent.agent !== agent.agent.toLowerCase()) {\n console.warn(\n `Agent name: ${agent.agent} should probably be in lowercase. Received: ${agent.agent}`\n );\n }\n\n return agent;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"react.js","names":["entry: CacheEntry","resolvedQuery: QueryObject | undefined","parsedMessage: Record<string, unknown>","request: RPCRequest"],"sources":["../src/react.tsx"],"sourcesContent":["import type { PartySocket } from \"partysocket\";\nimport { usePartySocket } from \"partysocket/react\";\nimport { useCallback, useRef, use, useMemo, useState, useEffect } from \"react\";\nimport type { Agent, MCPServersState, RPCRequest, RPCResponse } from \"./\";\nimport type { StreamOptions } from \"./client\";\nimport type { Method, RPCMethod } from \"./serializable\";\nimport { MessageType } from \"./ai-types\";\n\n/**\n * Convert a camelCase string to a kebab-case string\n * @param str The string to convert\n * @returns The kebab-case string\n */\nfunction camelCaseToKebabCase(str: string): string {\n // If string is all uppercase, convert to lowercase\n if (str === str.toUpperCase() && str !== str.toLowerCase()) {\n return str.toLowerCase().replace(/_/g, \"-\");\n }\n\n // Otherwise handle camelCase to kebab-case\n let kebabified = str.replace(\n /[A-Z]/g,\n (letter) => `-${letter.toLowerCase()}`\n );\n kebabified = kebabified.startsWith(\"-\") ? kebabified.slice(1) : kebabified;\n // Convert any remaining underscores to hyphens and remove trailing -'s\n return kebabified.replace(/_/g, \"-\").replace(/-$/, \"\");\n}\n\ntype QueryObject = Record<string, string | null>;\n\ninterface CacheEntry {\n promise: Promise<QueryObject>;\n expiresAt: number;\n}\n\nconst queryCache = new Map<string, CacheEntry>();\n\nfunction createCacheKey(\n agentNamespace: string,\n name: string | undefined,\n deps: unknown[]\n): string {\n return JSON.stringify([agentNamespace, name || \"default\", ...deps]);\n}\n\nfunction getCacheEntry(key: string): CacheEntry | undefined {\n const entry = queryCache.get(key);\n if (!entry) return undefined;\n\n if (Date.now() >= entry.expiresAt) {\n queryCache.delete(key);\n return undefined;\n }\n\n return entry;\n}\n\nfunction setCacheEntry(\n key: string,\n promise: Promise<QueryObject>,\n cacheTtl: number\n): CacheEntry {\n const entry: CacheEntry = {\n promise,\n expiresAt: Date.now() + cacheTtl\n };\n queryCache.set(key, entry);\n return entry;\n}\n\nfunction deleteCacheEntry(key: string): void {\n queryCache.delete(key);\n}\n\n// Export for testing purposes\nexport const _testUtils = {\n queryCache,\n setCacheEntry,\n getCacheEntry,\n deleteCacheEntry,\n clearCache: () => queryCache.clear()\n};\n\n/**\n * Options for the useAgent hook\n * @template State Type of the Agent's state\n */\nexport type UseAgentOptions<State = unknown> = Omit<\n Parameters<typeof usePartySocket>[0],\n \"party\" | \"room\" | \"query\"\n> & {\n /** Name of the agent to connect to */\n agent: string;\n /** Name of the specific Agent instance */\n name?: string;\n /** Query parameters - can be static object or async function */\n query?: QueryObject | (() => Promise<QueryObject>);\n /** Dependencies for async query caching */\n queryDeps?: unknown[];\n /** Cache TTL in milliseconds for auth tokens/time-sensitive data */\n cacheTtl?: number;\n /** Called when the Agent's state is updated */\n onStateUpdate?: (state: State, source: \"server\" | \"client\") => void;\n /** Called when MCP server state is updated */\n onMcpUpdate?: (mcpServers: MCPServersState) => void;\n};\n\ntype AllOptional<T> = T extends [infer A, ...infer R]\n ? undefined extends A\n ? AllOptional<R>\n : false\n : true; // no params means optional by default\n\ntype RPCMethods<T> = {\n [K in keyof T as T[K] extends RPCMethod<T[K]> ? K : never]: RPCMethod<T[K]>;\n};\n\ntype OptionalParametersMethod<T extends RPCMethod> =\n AllOptional<Parameters<T>> extends true ? T : never;\n\n// all methods of the Agent, excluding the ones that are declared in the base Agent class\n// biome-ignore lint: suppressions/parse\ntype AgentMethods<T> = Omit<RPCMethods<T>, keyof Agent<any, any>>;\n\ntype OptionalAgentMethods<T> = {\n [K in keyof AgentMethods<T> as AgentMethods<T>[K] extends OptionalParametersMethod<\n AgentMethods<T>[K]\n >\n ? K\n : never]: OptionalParametersMethod<AgentMethods<T>[K]>;\n};\n\ntype RequiredAgentMethods<T> = Omit<\n AgentMethods<T>,\n keyof OptionalAgentMethods<T>\n>;\n\ntype AgentPromiseReturnType<T, K extends keyof AgentMethods<T>> =\n // biome-ignore lint: suppressions/parse\n ReturnType<AgentMethods<T>[K]> extends Promise<any>\n ? ReturnType<AgentMethods<T>[K]>\n : Promise<ReturnType<AgentMethods<T>[K]>>;\n\ntype OptionalArgsAgentMethodCall<AgentT> = <\n K extends keyof OptionalAgentMethods<AgentT>\n>(\n method: K,\n args?: Parameters<OptionalAgentMethods<AgentT>[K]>,\n streamOptions?: StreamOptions\n) => AgentPromiseReturnType<AgentT, K>;\n\ntype RequiredArgsAgentMethodCall<AgentT> = <\n K extends keyof RequiredAgentMethods<AgentT>\n>(\n method: K,\n args: Parameters<RequiredAgentMethods<AgentT>[K]>,\n streamOptions?: StreamOptions\n) => AgentPromiseReturnType<AgentT, K>;\n\ntype AgentMethodCall<AgentT> = OptionalArgsAgentMethodCall<AgentT> &\n RequiredArgsAgentMethodCall<AgentT>;\n\ntype UntypedAgentMethodCall = <T = unknown>(\n method: string,\n args?: unknown[],\n streamOptions?: StreamOptions\n) => Promise<T>;\n\ntype AgentStub<T> = {\n [K in keyof AgentMethods<T>]: (\n ...args: Parameters<AgentMethods<T>[K]>\n ) => AgentPromiseReturnType<AgentMethods<T>, K>;\n};\n\n// we neet to use Method instead of RPCMethod here for retro-compatibility\ntype UntypedAgentStub = Record<string, Method>;\n\n/**\n * React hook for connecting to an Agent\n */\nexport function useAgent<State = unknown>(\n options: UseAgentOptions<State>\n): PartySocket & {\n agent: string;\n name: string;\n setState: (state: State) => void;\n call: UntypedAgentMethodCall;\n stub: UntypedAgentStub;\n};\nexport function useAgent<\n AgentT extends {\n get state(): State;\n },\n State\n>(\n options: UseAgentOptions<State>\n): PartySocket & {\n agent: string;\n name: string;\n setState: (state: State) => void;\n call: AgentMethodCall<AgentT>;\n stub: AgentStub<AgentT>;\n};\nexport function useAgent<State>(\n options: UseAgentOptions<unknown>\n): PartySocket & {\n agent: string;\n name: string;\n setState: (state: State) => void;\n call: UntypedAgentMethodCall | AgentMethodCall<unknown>;\n stub: UntypedAgentStub;\n} {\n const agentNamespace = camelCaseToKebabCase(options.agent);\n const { query, queryDeps, cacheTtl, ...restOptions } = options;\n\n // Keep track of pending RPC calls\n const pendingCallsRef = useRef(\n new Map<\n string,\n {\n resolve: (value: unknown) => void;\n reject: (error: Error) => void;\n stream?: StreamOptions;\n }\n >()\n );\n\n const cacheKey = useMemo(\n () => createCacheKey(agentNamespace, options.name, queryDeps || []),\n [agentNamespace, options.name, queryDeps]\n );\n\n const ttl = cacheTtl ?? 5 * 60 * 1000;\n\n // Track cache invalidation to force re-render when TTL expires\n const [cacheInvalidatedAt, setCacheInvalidatedAt] = useState<number>(0);\n\n // Get or create the query promise\n // biome-ignore lint/correctness/useExhaustiveDependencies: cacheInvalidatedAt intentionally forces re-evaluation when TTL expires\n const queryPromise = useMemo(() => {\n if (!query || typeof query !== \"function\") {\n return null;\n }\n\n // Always check cache first to deduplicate concurrent requests\n const cached = getCacheEntry(cacheKey);\n if (cached) {\n return cached.promise;\n }\n\n // Create new promise\n const promise = query().catch((error) => {\n console.error(\n `[useAgent] Query failed for agent \"${options.agent}\":`,\n error\n );\n deleteCacheEntry(cacheKey);\n throw error;\n });\n\n // Always cache to deduplicate concurrent requests\n setCacheEntry(cacheKey, promise, ttl);\n\n return promise;\n }, [cacheKey, query, options.agent, ttl, cacheInvalidatedAt]);\n\n // Schedule cache invalidation when TTL expires\n useEffect(() => {\n if (!queryPromise || ttl <= 0) return;\n\n const entry = getCacheEntry(cacheKey);\n if (!entry) return;\n\n const timeUntilExpiry = entry.expiresAt - Date.now();\n\n // Always set a timer (with min 0ms) to ensure cleanup function is returned\n const timer = setTimeout(\n () => {\n deleteCacheEntry(cacheKey);\n setCacheInvalidatedAt(Date.now());\n },\n Math.max(0, timeUntilExpiry)\n );\n\n return () => clearTimeout(timer);\n }, [cacheKey, queryPromise, ttl]);\n\n let resolvedQuery: QueryObject | undefined;\n\n if (query) {\n if (typeof query === \"function\") {\n // Use React's use() to resolve the promise\n const queryResult = use(queryPromise!);\n\n // Check for non-primitive values and warn\n if (queryResult) {\n for (const [key, value] of Object.entries(queryResult)) {\n if (\n value !== null &&\n value !== undefined &&\n typeof value !== \"string\" &&\n typeof value !== \"number\" &&\n typeof value !== \"boolean\"\n ) {\n console.warn(\n `[useAgent] Query parameter \"${key}\" is an object and will be converted to \"[object Object]\". ` +\n \"Query parameters should be string, number, boolean, or null.\"\n );\n }\n }\n resolvedQuery = queryResult;\n }\n } else {\n // Sync query - use directly\n resolvedQuery = query;\n }\n }\n\n const agent = usePartySocket({\n party: agentNamespace,\n prefix: \"agents\",\n room: options.name || \"default\",\n query: resolvedQuery,\n ...restOptions,\n onMessage: (message) => {\n if (typeof message.data === \"string\") {\n let parsedMessage: Record<string, unknown>;\n try {\n parsedMessage = JSON.parse(message.data);\n } catch (_error) {\n // silently ignore invalid messages for now\n // TODO: log errors with log levels\n return options.onMessage?.(message);\n }\n if (parsedMessage.type === MessageType.CF_AGENT_STATE) {\n options.onStateUpdate?.(parsedMessage.state as State, \"server\");\n return;\n }\n if (parsedMessage.type === MessageType.CF_AGENT_MCP_SERVERS) {\n options.onMcpUpdate?.(parsedMessage.mcp as MCPServersState);\n return;\n }\n if (parsedMessage.type === MessageType.RPC) {\n const response = parsedMessage as RPCResponse;\n const pending = pendingCallsRef.current.get(response.id);\n if (!pending) return;\n\n if (!response.success) {\n pending.reject(new Error(response.error));\n pendingCallsRef.current.delete(response.id);\n pending.stream?.onError?.(response.error);\n return;\n }\n\n // Handle streaming responses\n if (\"done\" in response) {\n if (response.done) {\n pending.resolve(response.result);\n pendingCallsRef.current.delete(response.id);\n pending.stream?.onDone?.(response.result);\n } else {\n pending.stream?.onChunk?.(response.result);\n }\n } else {\n // Non-streaming response\n pending.resolve(response.result);\n pendingCallsRef.current.delete(response.id);\n }\n return;\n }\n }\n options.onMessage?.(message);\n }\n }) as PartySocket & {\n agent: string;\n name: string;\n setState: (state: State) => void;\n call: UntypedAgentMethodCall;\n stub: UntypedAgentStub;\n };\n // Create the call method\n const call = useCallback(\n <T = unknown,>(\n method: string,\n args: unknown[] = [],\n streamOptions?: StreamOptions\n ): Promise<T> => {\n return new Promise((resolve, reject) => {\n const id = Math.random().toString(36).slice(2);\n pendingCallsRef.current.set(id, {\n reject,\n resolve: resolve as (value: unknown) => void,\n stream: streamOptions\n });\n\n const request: RPCRequest = {\n args,\n id,\n method,\n type: MessageType.RPC\n };\n\n agent.send(JSON.stringify(request));\n });\n },\n [agent]\n );\n\n agent.setState = (state: State) => {\n agent.send(JSON.stringify({ state, type: MessageType.CF_AGENT_STATE }));\n options.onStateUpdate?.(state, \"client\");\n };\n\n agent.call = call;\n agent.agent = agentNamespace;\n agent.name = options.name || \"default\";\n // biome-ignore lint: suppressions/parse\n agent.stub = new Proxy<any>(\n {},\n {\n get: (_target, method) => {\n return (...args: unknown[]) => {\n return call(method as string, args);\n };\n }\n }\n );\n\n // warn if agent isn't in lowercase\n if (agent.agent !== agent.agent.toLowerCase()) {\n console.warn(\n `Agent name: ${agent.agent} should probably be in lowercase. Received: ${agent.agent}`\n );\n }\n\n return agent;\n}\n"],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { z } from "zod";
2
2
 
3
+ //#region src/schedule.d.ts
4
+
3
5
  /**
4
6
  * Get the schedule prompt for a given event
5
7
  * @param event - The event to get the schedule prompt for
@@ -28,13 +30,13 @@ declare const scheduleSchema: z.ZodObject<
28
30
  "strip",
29
31
  z.ZodTypeAny,
30
32
  {
31
- type: "scheduled" | "delayed" | "cron" | "no-schedule";
33
+ type: "cron" | "scheduled" | "delayed" | "no-schedule";
32
34
  date?: Date | undefined;
33
35
  cron?: string | undefined;
34
36
  delayInSeconds?: number | undefined;
35
37
  },
36
38
  {
37
- type: "scheduled" | "delayed" | "cron" | "no-schedule";
39
+ type: "cron" | "scheduled" | "delayed" | "no-schedule";
38
40
  date?: Date | undefined;
39
41
  cron?: string | undefined;
40
42
  delayInSeconds?: number | undefined;
@@ -46,7 +48,7 @@ declare const scheduleSchema: z.ZodObject<
46
48
  {
47
49
  description: string;
48
50
  when: {
49
- type: "scheduled" | "delayed" | "cron" | "no-schedule";
51
+ type: "cron" | "scheduled" | "delayed" | "no-schedule";
50
52
  date?: Date | undefined;
51
53
  cron?: string | undefined;
52
54
  delayInSeconds?: number | undefined;
@@ -55,7 +57,7 @@ declare const scheduleSchema: z.ZodObject<
55
57
  {
56
58
  description: string;
57
59
  when: {
58
- type: "scheduled" | "delayed" | "cron" | "no-schedule";
60
+ type: "cron" | "scheduled" | "delayed" | "no-schedule";
59
61
  date?: Date | undefined;
60
62
  cron?: string | undefined;
61
63
  delayInSeconds?: number | undefined;
@@ -83,13 +85,13 @@ declare const unstable_scheduleSchema: z.ZodObject<
83
85
  "strip",
84
86
  z.ZodTypeAny,
85
87
  {
86
- type: "scheduled" | "delayed" | "cron" | "no-schedule";
88
+ type: "cron" | "scheduled" | "delayed" | "no-schedule";
87
89
  date?: Date | undefined;
88
90
  cron?: string | undefined;
89
91
  delayInSeconds?: number | undefined;
90
92
  },
91
93
  {
92
- type: "scheduled" | "delayed" | "cron" | "no-schedule";
94
+ type: "cron" | "scheduled" | "delayed" | "no-schedule";
93
95
  date?: Date | undefined;
94
96
  cron?: string | undefined;
95
97
  delayInSeconds?: number | undefined;
@@ -101,7 +103,7 @@ declare const unstable_scheduleSchema: z.ZodObject<
101
103
  {
102
104
  description: string;
103
105
  when: {
104
- type: "scheduled" | "delayed" | "cron" | "no-schedule";
106
+ type: "cron" | "scheduled" | "delayed" | "no-schedule";
105
107
  date?: Date | undefined;
106
108
  cron?: string | undefined;
107
109
  delayInSeconds?: number | undefined;
@@ -110,18 +112,19 @@ declare const unstable_scheduleSchema: z.ZodObject<
110
112
  {
111
113
  description: string;
112
114
  when: {
113
- type: "scheduled" | "delayed" | "cron" | "no-schedule";
115
+ type: "cron" | "scheduled" | "delayed" | "no-schedule";
114
116
  date?: Date | undefined;
115
117
  cron?: string | undefined;
116
118
  delayInSeconds?: number | undefined;
117
119
  };
118
120
  }
119
121
  >;
120
-
122
+ //#endregion
121
123
  export {
122
- type Schedule,
124
+ Schedule,
123
125
  getSchedulePrompt,
124
126
  scheduleSchema,
125
127
  unstable_getSchedulePrompt,
126
128
  unstable_scheduleSchema
127
129
  };
130
+ //# sourceMappingURL=schedule.d.ts.map
package/dist/schedule.js CHANGED
@@ -1,9 +1,13 @@
1
- import "./chunk-PR4QN5HX.js";
2
-
3
- // src/schedule.ts
4
1
  import { z } from "zod";
2
+
3
+ //#region src/schedule.ts
4
+ /**
5
+ * Get the schedule prompt for a given event
6
+ * @param event - The event to get the schedule prompt for
7
+ * @returns The schedule prompt
8
+ */
5
9
  function getSchedulePrompt(event) {
6
- return `
10
+ return `
7
11
  [Schedule Parser Component]
8
12
 
9
13
  Current time: ${event.date.toUTCString()}
@@ -51,36 +55,42 @@ Example outputs:
51
55
  [End Schedule Parser Component]
52
56
  `;
53
57
  }
54
- var didWarnAboutUnstableGetSchedulePrompt = false;
58
+ let didWarnAboutUnstableGetSchedulePrompt = false;
59
+ /**
60
+ * @deprecated this has been renamed to getSchedulePrompt, and unstable_getSchedulePrompt will be removed in the next major version
61
+ * @param event - The event to get the schedule prompt for
62
+ * @returns The schedule prompt
63
+ */
55
64
  function unstable_getSchedulePrompt(event) {
56
- if (!didWarnAboutUnstableGetSchedulePrompt) {
57
- didWarnAboutUnstableGetSchedulePrompt = true;
58
- console.warn(
59
- "unstable_getSchedulePrompt is deprecated, use getSchedulePrompt instead. unstable_getSchedulePrompt will be removed in the next major version."
60
- );
61
- }
62
- return getSchedulePrompt(event);
65
+ if (!didWarnAboutUnstableGetSchedulePrompt) {
66
+ didWarnAboutUnstableGetSchedulePrompt = true;
67
+ console.warn("unstable_getSchedulePrompt is deprecated, use getSchedulePrompt instead. unstable_getSchedulePrompt will be removed in the next major version.");
68
+ }
69
+ return getSchedulePrompt(event);
63
70
  }
64
- var scheduleSchema = z.object({
65
- description: z.string().describe("A description of the task"),
66
- when: z.object({
67
- cron: z.string().optional().describe(
68
- "execute task on a recurring interval specified as cron syntax (only use if the type is cron)"
69
- ),
70
- date: z.coerce.date().optional().describe(
71
- "execute task at the specified date and time (only use if the type is scheduled)"
72
- ),
73
- delayInSeconds: z.number().optional().describe(
74
- "execute task after a delay in seconds (only use if the type is delayed)"
75
- ),
76
- type: z.enum(["scheduled", "delayed", "cron", "no-schedule"]).describe("The type of scheduling details")
77
- })
71
+ /**
72
+ * The schema for the schedule prompt
73
+ */
74
+ const scheduleSchema = z.object({
75
+ description: z.string().describe("A description of the task"),
76
+ when: z.object({
77
+ cron: z.string().optional().describe("execute task on a recurring interval specified as cron syntax (only use if the type is cron)"),
78
+ date: z.coerce.date().optional().describe("execute task at the specified date and time (only use if the type is scheduled)"),
79
+ delayInSeconds: z.number().optional().describe("execute task after a delay in seconds (only use if the type is delayed)"),
80
+ type: z.enum([
81
+ "scheduled",
82
+ "delayed",
83
+ "cron",
84
+ "no-schedule"
85
+ ]).describe("The type of scheduling details")
86
+ })
78
87
  });
79
- var unstable_scheduleSchema = scheduleSchema;
80
- export {
81
- getSchedulePrompt,
82
- scheduleSchema,
83
- unstable_getSchedulePrompt,
84
- unstable_scheduleSchema
85
- };
88
+ /**
89
+ * @deprecated this has been renamed to scheduleSchema, and unstable_scheduleSchema will be removed in the next major version
90
+ * @returns The schedule schema
91
+ */
92
+ const unstable_scheduleSchema = scheduleSchema;
93
+
94
+ //#endregion
95
+ export { getSchedulePrompt, scheduleSchema, unstable_getSchedulePrompt, unstable_scheduleSchema };
86
96
  //# sourceMappingURL=schedule.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schedule.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/**\n * Get the schedule prompt for a given event\n * @param event - The event to get the schedule prompt for\n * @returns The schedule prompt\n */\nexport function getSchedulePrompt(event: { date: Date }) {\n return `\n[Schedule Parser Component]\n\nCurrent time: ${event.date.toUTCString()}\n\nThis component parses natural language scheduling requests into a structured format. It extracts:\n1. A clean task description (without timing information)\n2. Scheduling details in one of these formats:\n - scheduled: Specific date/time events\n - delayed: Relative time delays (in seconds)\n - cron: Recurring patterns\n - no-schedule: Tasks without timing\n\nRules:\n- Task descriptions should be clean and focused on the action\n- Use numbers (0-6) for days in cron patterns (0=Sunday)\n- For recurring tasks, use standard cron syntax\n- For relative times, convert to seconds\n- For specific dates, use the current time as reference\n\nExample outputs:\n{\n \"description\": \"meeting with team\",\n \"when\": {\n \"type\": \"scheduled\",\n \"date\": \"tomorrow at 14:00\"\n }\n}\n\n{\n \"description\": \"backup database\",\n \"when\": {\n \"type\": \"cron\",\n \"cron\": \"0 0 * * *\"\n }\n}\n\n{\n \"description\": \"send report\",\n \"when\": {\n \"type\": \"delayed\",\n \"delayInSeconds\": 1800\n }\n}\n\n[End Schedule Parser Component]\n`;\n}\n\nlet didWarnAboutUnstableGetSchedulePrompt = false;\n\n/**\n * @deprecated this has been renamed to getSchedulePrompt, and unstable_getSchedulePrompt will be removed in the next major version\n * @param event - The event to get the schedule prompt for\n * @returns The schedule prompt\n */\nexport function unstable_getSchedulePrompt(event: { date: Date }) {\n if (!didWarnAboutUnstableGetSchedulePrompt) {\n didWarnAboutUnstableGetSchedulePrompt = true;\n console.warn(\n \"unstable_getSchedulePrompt is deprecated, use getSchedulePrompt instead. unstable_getSchedulePrompt will be removed in the next major version.\"\n );\n }\n return getSchedulePrompt(event);\n}\n\n/**\n * The schema for the schedule prompt\n */\nexport const scheduleSchema = z.object({\n description: z.string().describe(\"A description of the task\"),\n when: z.object({\n cron: z\n .string()\n .optional()\n .describe(\n \"execute task on a recurring interval specified as cron syntax (only use if the type is cron)\"\n ),\n date: z.coerce\n .date()\n .optional()\n .describe(\n \"execute task at the specified date and time (only use if the type is scheduled)\"\n ),\n delayInSeconds: z\n .number()\n .optional()\n .describe(\n \"execute task after a delay in seconds (only use if the type is delayed)\"\n ),\n type: z\n .enum([\"scheduled\", \"delayed\", \"cron\", \"no-schedule\"])\n .describe(\"The type of scheduling details\")\n })\n});\n\n/**\n * The type for the schedule prompt\n */\nexport type Schedule = z.infer<typeof scheduleSchema>;\n\n/**\n * @deprecated this has been renamed to scheduleSchema, and unstable_scheduleSchema will be removed in the next major version\n * @returns The schedule schema\n */\nexport const unstable_scheduleSchema = scheduleSchema;\n"],"mappings":";;;AAAA,SAAS,SAAS;AAOX,SAAS,kBAAkB,OAAuB;AACvD,SAAO;AAAA;AAAA;AAAA,gBAGO,MAAM,KAAK,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4CxC;AAEA,IAAI,wCAAwC;AAOrC,SAAS,2BAA2B,OAAuB;AAChE,MAAI,CAAC,uCAAuC;AAC1C,4CAAwC;AACxC,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AACA,SAAO,kBAAkB,KAAK;AAChC;AAKO,IAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,aAAa,EAAE,OAAO,EAAE,SAAS,2BAA2B;AAAA,EAC5D,MAAM,EAAE,OAAO;AAAA,IACb,MAAM,EACH,OAAO,EACP,SAAS,EACT;AAAA,MACC;AAAA,IACF;AAAA,IACF,MAAM,EAAE,OACL,KAAK,EACL,SAAS,EACT;AAAA,MACC;AAAA,IACF;AAAA,IACF,gBAAgB,EACb,OAAO,EACP,SAAS,EACT;AAAA,MACC;AAAA,IACF;AAAA,IACF,MAAM,EACH,KAAK,CAAC,aAAa,WAAW,QAAQ,aAAa,CAAC,EACpD,SAAS,gCAAgC;AAAA,EAC9C,CAAC;AACH,CAAC;AAWM,IAAM,0BAA0B;","names":[]}
1
+ {"version":3,"file":"schedule.js","names":[],"sources":["../src/schedule.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/**\n * Get the schedule prompt for a given event\n * @param event - The event to get the schedule prompt for\n * @returns The schedule prompt\n */\nexport function getSchedulePrompt(event: { date: Date }) {\n return `\n[Schedule Parser Component]\n\nCurrent time: ${event.date.toUTCString()}\n\nThis component parses natural language scheduling requests into a structured format. It extracts:\n1. A clean task description (without timing information)\n2. Scheduling details in one of these formats:\n - scheduled: Specific date/time events\n - delayed: Relative time delays (in seconds)\n - cron: Recurring patterns\n - no-schedule: Tasks without timing\n\nRules:\n- Task descriptions should be clean and focused on the action\n- Use numbers (0-6) for days in cron patterns (0=Sunday)\n- For recurring tasks, use standard cron syntax\n- For relative times, convert to seconds\n- For specific dates, use the current time as reference\n\nExample outputs:\n{\n \"description\": \"meeting with team\",\n \"when\": {\n \"type\": \"scheduled\",\n \"date\": \"tomorrow at 14:00\"\n }\n}\n\n{\n \"description\": \"backup database\",\n \"when\": {\n \"type\": \"cron\",\n \"cron\": \"0 0 * * *\"\n }\n}\n\n{\n \"description\": \"send report\",\n \"when\": {\n \"type\": \"delayed\",\n \"delayInSeconds\": 1800\n }\n}\n\n[End Schedule Parser Component]\n`;\n}\n\nlet didWarnAboutUnstableGetSchedulePrompt = false;\n\n/**\n * @deprecated this has been renamed to getSchedulePrompt, and unstable_getSchedulePrompt will be removed in the next major version\n * @param event - The event to get the schedule prompt for\n * @returns The schedule prompt\n */\nexport function unstable_getSchedulePrompt(event: { date: Date }) {\n if (!didWarnAboutUnstableGetSchedulePrompt) {\n didWarnAboutUnstableGetSchedulePrompt = true;\n console.warn(\n \"unstable_getSchedulePrompt is deprecated, use getSchedulePrompt instead. unstable_getSchedulePrompt will be removed in the next major version.\"\n );\n }\n return getSchedulePrompt(event);\n}\n\n/**\n * The schema for the schedule prompt\n */\nexport const scheduleSchema = z.object({\n description: z.string().describe(\"A description of the task\"),\n when: z.object({\n cron: z\n .string()\n .optional()\n .describe(\n \"execute task on a recurring interval specified as cron syntax (only use if the type is cron)\"\n ),\n date: z.coerce\n .date()\n .optional()\n .describe(\n \"execute task at the specified date and time (only use if the type is scheduled)\"\n ),\n delayInSeconds: z\n .number()\n .optional()\n .describe(\n \"execute task after a delay in seconds (only use if the type is delayed)\"\n ),\n type: z\n .enum([\"scheduled\", \"delayed\", \"cron\", \"no-schedule\"])\n .describe(\"The type of scheduling details\")\n })\n});\n\n/**\n * The type for the schedule prompt\n */\nexport type Schedule = z.infer<typeof scheduleSchema>;\n\n/**\n * @deprecated this has been renamed to scheduleSchema, and unstable_scheduleSchema will be removed in the next major version\n * @returns The schedule schema\n */\nexport const unstable_scheduleSchema = scheduleSchema;\n"],"mappings":";;;;;;;;AAOA,SAAgB,kBAAkB,OAAuB;AACvD,QAAO;;;gBAGO,MAAM,KAAK,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CzC,IAAI,wCAAwC;;;;;;AAO5C,SAAgB,2BAA2B,OAAuB;AAChE,KAAI,CAAC,uCAAuC;AAC1C,0CAAwC;AACxC,UAAQ,KACN,iJACD;;AAEH,QAAO,kBAAkB,MAAM;;;;;AAMjC,MAAa,iBAAiB,EAAE,OAAO;CACrC,aAAa,EAAE,QAAQ,CAAC,SAAS,4BAA4B;CAC7D,MAAM,EAAE,OAAO;EACb,MAAM,EACH,QAAQ,CACR,UAAU,CACV,SACC,+FACD;EACH,MAAM,EAAE,OACL,MAAM,CACN,UAAU,CACV,SACC,kFACD;EACH,gBAAgB,EACb,QAAQ,CACR,UAAU,CACV,SACC,0EACD;EACH,MAAM,EACH,KAAK;GAAC;GAAa;GAAW;GAAQ;GAAc,CAAC,CACrD,SAAS,iCAAiC;EAC9C,CAAC;CACH,CAAC;;;;;AAWF,MAAa,0BAA0B"}
@@ -0,0 +1,39 @@
1
+ //#region src/serializable.d.ts
2
+ type SerializableValue =
3
+ | undefined
4
+ | null
5
+ | string
6
+ | number
7
+ | boolean
8
+ | {
9
+ [key: string]: SerializableValue;
10
+ }
11
+ | SerializableValue[];
12
+ type SerializableReturnValue =
13
+ | SerializableValue
14
+ | void
15
+ | Promise<SerializableValue>
16
+ | Promise<void>;
17
+ type AllSerializableValues<A$1> = A$1 extends [infer First, ...infer Rest]
18
+ ? First extends SerializableValue
19
+ ? AllSerializableValues<Rest>
20
+ : false
21
+ : true;
22
+ type Method = (...args: any[]) => any;
23
+ type RPCMethod<T = Method> = T extends Method
24
+ ? T extends (...arg: infer A) => infer R
25
+ ? AllSerializableValues<A> extends true
26
+ ? R extends SerializableReturnValue
27
+ ? T
28
+ : never
29
+ : never
30
+ : never
31
+ : never;
32
+ //#endregion
33
+ export {
34
+ SerializableValue as i,
35
+ RPCMethod as n,
36
+ SerializableReturnValue as r,
37
+ Method as t
38
+ };
39
+ //# sourceMappingURL=serializable-C4GLimgv.d.ts.map
@@ -1,32 +1,7 @@
1
- type SerializableValue =
2
- | undefined
3
- | null
4
- | string
5
- | number
6
- | boolean
7
- | {
8
- [key: string]: SerializableValue;
9
- }
10
- | SerializableValue[];
11
- type SerializableReturnValue =
12
- | SerializableValue
13
- | void
14
- | Promise<SerializableValue>
15
- | Promise<void>;
16
- type AllSerializableValues<A> = A extends [infer First, ...infer Rest]
17
- ? First extends SerializableValue
18
- ? AllSerializableValues<Rest>
19
- : false
20
- : true;
21
- type Method = (...args: any[]) => any;
22
- type RPCMethod<T = Method> = T extends Method
23
- ? T extends (...arg: infer A) => infer R
24
- ? AllSerializableValues<A> extends true
25
- ? R extends SerializableReturnValue
26
- ? T
27
- : never
28
- : never
29
- : never
30
- : never;
31
-
32
- export type { Method, RPCMethod, SerializableReturnValue, SerializableValue };
1
+ import {
2
+ i as SerializableValue,
3
+ n as RPCMethod,
4
+ r as SerializableReturnValue,
5
+ t as Method
6
+ } from "./serializable-C4GLimgv.js";
7
+ export { Method, RPCMethod, SerializableReturnValue, SerializableValue };
@@ -1 +1 @@
1
- //# sourceMappingURL=serializable.js.map
1
+ export { };