kernl 0.1.1
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/.turbo/turbo-build.log +5 -0
- package/CHANGELOG.md +53 -0
- package/LICENSE +201 -0
- package/dist/agent.d.ts +43 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +130 -0
- package/dist/context.d.ts +70 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +111 -0
- package/dist/env.d.ts +45 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +31 -0
- package/dist/error.d.ts +1 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +1 -0
- package/dist/guardrail.d.ts +178 -0
- package/dist/guardrail.d.ts.map +1 -0
- package/dist/guardrail.js +34 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/kernel.d.ts +7 -0
- package/dist/kernel.d.ts.map +1 -0
- package/dist/kernel.js +7 -0
- package/dist/kernl.d.ts +18 -0
- package/dist/kernl.d.ts.map +1 -0
- package/dist/kernl.js +16 -0
- package/dist/lib/env.d.ts +43 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +29 -0
- package/dist/lib/error.d.ts +88 -0
- package/dist/lib/error.d.ts.map +1 -0
- package/dist/lib/error.js +117 -0
- package/dist/lib/logger.d.ts +36 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +43 -0
- package/dist/lib/serde/__tests__/codec.test.d.ts +2 -0
- package/dist/lib/serde/__tests__/codec.test.d.ts.map +1 -0
- package/dist/lib/serde/__tests__/codec.test.js +75 -0
- package/dist/lib/serde/codec.d.ts +12 -0
- package/dist/lib/serde/codec.d.ts.map +1 -0
- package/dist/lib/serde/codec.js +54 -0
- package/dist/lib/serde/json.d.ts +8 -0
- package/dist/lib/serde/json.d.ts.map +1 -0
- package/dist/lib/serde/json.js +13 -0
- package/dist/lib/serde/thread.d.ts +1 -0
- package/dist/lib/serde/thread.d.ts.map +1 -0
- package/dist/lib/serde/thread.js +172 -0
- package/dist/lib/serde/tool.d.ts +36 -0
- package/dist/lib/serde/tool.d.ts.map +1 -0
- package/dist/lib/serde/tool.js +1 -0
- package/dist/lib/utils.d.ts +19 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +41 -0
- package/dist/lifecycle.d.ts +133 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +29 -0
- package/dist/logger.d.ts +36 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +43 -0
- package/dist/mcp/__tests__/base.test.d.ts +2 -0
- package/dist/mcp/__tests__/base.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/base.test.js +268 -0
- package/dist/mcp/__tests__/fixtures/echo-server.d.ts +3 -0
- package/dist/mcp/__tests__/fixtures/echo-server.d.ts.map +1 -0
- package/dist/mcp/__tests__/fixtures/echo-server.js +92 -0
- package/dist/mcp/__tests__/fixtures/math-server.d.ts +3 -0
- package/dist/mcp/__tests__/fixtures/math-server.d.ts.map +1 -0
- package/dist/mcp/__tests__/fixtures/math-server.js +98 -0
- package/dist/mcp/__tests__/fixtures/server.d.ts +3 -0
- package/dist/mcp/__tests__/fixtures/server.d.ts.map +1 -0
- package/dist/mcp/__tests__/fixtures/server.js +162 -0
- package/dist/mcp/__tests__/fixtures/test-server.d.ts +3 -0
- package/dist/mcp/__tests__/fixtures/test-server.d.ts.map +1 -0
- package/dist/mcp/__tests__/fixtures/test-server.js +163 -0
- package/dist/mcp/__tests__/fixtures/utils.d.ts +17 -0
- package/dist/mcp/__tests__/fixtures/utils.d.ts.map +1 -0
- package/dist/mcp/__tests__/fixtures/utils.js +42 -0
- package/dist/mcp/__tests__/integration.test.d.ts +2 -0
- package/dist/mcp/__tests__/integration.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/integration.test.js +360 -0
- package/dist/mcp/__tests__/stdio.test.d.ts +2 -0
- package/dist/mcp/__tests__/stdio.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/stdio.test.js +180 -0
- package/dist/mcp/__tests__/test-utils.d.ts +17 -0
- package/dist/mcp/__tests__/test-utils.d.ts.map +1 -0
- package/dist/mcp/__tests__/test-utils.js +42 -0
- package/dist/mcp/__tests__/utils.test.d.ts +2 -0
- package/dist/mcp/__tests__/utils.test.d.ts.map +1 -0
- package/dist/mcp/__tests__/utils.test.js +300 -0
- package/dist/mcp/base.d.ts +88 -0
- package/dist/mcp/base.d.ts.map +1 -0
- package/dist/mcp/base.js +68 -0
- package/dist/mcp/http.d.ts +34 -0
- package/dist/mcp/http.d.ts.map +1 -0
- package/dist/mcp/http.js +100 -0
- package/dist/mcp/node.d.ts +60 -0
- package/dist/mcp/node.d.ts.map +1 -0
- package/dist/mcp/node.js +297 -0
- package/dist/mcp/sse.d.ts +34 -0
- package/dist/mcp/sse.d.ts.map +1 -0
- package/dist/mcp/sse.js +97 -0
- package/dist/mcp/stdio.d.ts +32 -0
- package/dist/mcp/stdio.d.ts.map +1 -0
- package/dist/mcp/stdio.js +96 -0
- package/dist/mcp/types.d.ts +172 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +16 -0
- package/dist/mcp/utils.d.ts +23 -0
- package/dist/mcp/utils.d.ts.map +1 -0
- package/dist/mcp/utils.js +44 -0
- package/dist/model.d.ts +175 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +1 -0
- package/dist/providers/ai.d.ts +1 -0
- package/dist/providers/ai.d.ts.map +1 -0
- package/dist/providers/ai.js +1 -0
- package/dist/providers/default.d.ts +16 -0
- package/dist/providers/default.d.ts.map +1 -0
- package/dist/providers/default.js +17 -0
- package/dist/providers/registry.d.ts +1 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +1 -0
- package/dist/sched/scheduler.d.ts +20 -0
- package/dist/sched/scheduler.d.ts.map +1 -0
- package/dist/sched/scheduler.js +1 -0
- package/dist/sched/task.d.ts +92 -0
- package/dist/sched/task.d.ts.map +1 -0
- package/dist/sched/task.js +102 -0
- package/dist/serde/__tests__/codec.test.d.ts +2 -0
- package/dist/serde/__tests__/codec.test.d.ts.map +1 -0
- package/dist/serde/__tests__/codec.test.js +75 -0
- package/dist/serde/codec.d.ts +12 -0
- package/dist/serde/codec.d.ts.map +1 -0
- package/dist/serde/codec.js +54 -0
- package/dist/serde/json.d.ts +8 -0
- package/dist/serde/json.d.ts.map +1 -0
- package/dist/serde/json.js +13 -0
- package/dist/serde/thread.d.ts +687 -0
- package/dist/serde/thread.d.ts.map +1 -0
- package/dist/serde/thread.js +158 -0
- package/dist/serde/tool.d.ts +36 -0
- package/dist/serde/tool.d.ts.map +1 -0
- package/dist/serde/tool.js +1 -0
- package/dist/session.d.ts +1 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +1 -0
- package/dist/task.d.ts +87 -0
- package/dist/task.d.ts.map +1 -0
- package/dist/task.js +97 -0
- package/dist/thread/__tests__/mock.d.ts +28 -0
- package/dist/thread/__tests__/mock.d.ts.map +1 -0
- package/dist/thread/__tests__/mock.js +74 -0
- package/dist/thread/__tests__/thread.test.d.ts +2 -0
- package/dist/thread/__tests__/thread.test.d.ts.map +1 -0
- package/dist/thread/__tests__/thread.test.js +1412 -0
- package/dist/thread/index.d.ts +2 -0
- package/dist/thread/index.d.ts.map +1 -0
- package/dist/thread/index.js +1 -0
- package/dist/thread/thread.d.ts +66 -0
- package/dist/thread/thread.d.ts.map +1 -0
- package/dist/thread/thread.js +472 -0
- package/dist/thread/utils.d.ts +19 -0
- package/dist/thread/utils.d.ts.map +1 -0
- package/dist/thread/utils.js +50 -0
- package/dist/tool/__tests__/fixtures.d.ts +45 -0
- package/dist/tool/__tests__/fixtures.d.ts.map +1 -0
- package/dist/tool/__tests__/fixtures.js +97 -0
- package/dist/tool/__tests__/tool.test.d.ts +2 -0
- package/dist/tool/__tests__/tool.test.d.ts.map +1 -0
- package/dist/tool/__tests__/tool.test.js +172 -0
- package/dist/tool/__tests__/toolkit.test.d.ts +2 -0
- package/dist/tool/__tests__/toolkit.test.d.ts.map +1 -0
- package/dist/tool/__tests__/toolkit.test.js +134 -0
- package/dist/tool/index.d.ts +4 -0
- package/dist/tool/index.d.ts.map +1 -0
- package/dist/tool/index.js +2 -0
- package/dist/tool/mcp.d.ts +75 -0
- package/dist/tool/mcp.d.ts.map +1 -0
- package/dist/tool/mcp.js +111 -0
- package/dist/tool/tool.d.ts +95 -0
- package/dist/tool/tool.d.ts.map +1 -0
- package/dist/tool/tool.js +176 -0
- package/dist/tool/toolkit.d.ts +121 -0
- package/dist/tool/toolkit.d.ts.map +1 -0
- package/dist/tool/toolkit.js +180 -0
- package/dist/tool/types.d.ts +187 -0
- package/dist/tool/types.d.ts.map +1 -0
- package/dist/tool/types.js +1 -0
- package/dist/tools.d.ts +362 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +220 -0
- package/dist/trace/processor.d.ts +1 -0
- package/dist/trace/processor.d.ts.map +1 -0
- package/dist/trace/processor.js +1 -0
- package/dist/trace/traces.d.ts +1 -0
- package/dist/trace/traces.d.ts.map +1 -0
- package/dist/trace/traces.js +73 -0
- package/dist/trace/utils.d.ts +22 -0
- package/dist/trace/utils.d.ts.map +1 -0
- package/dist/trace/utils.js +30 -0
- package/dist/types/agent.d.ts +91 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +1 -0
- package/dist/types/proto.d.ts +1551 -0
- package/dist/types/proto.d.ts.map +1 -0
- package/dist/types/proto.js +531 -0
- package/dist/types/thread.d.ts +71 -0
- package/dist/types/thread.d.ts.map +1 -0
- package/dist/types/thread.js +5 -0
- package/dist/usage.d.ts +43 -0
- package/dist/usage.d.ts.map +1 -0
- package/dist/usage.js +61 -0
- package/package.json +52 -0
- package/src/agent.ts +203 -0
- package/src/context.ts +265 -0
- package/src/guardrail.ts +277 -0
- package/src/index.ts +3 -0
- package/src/kernl.ts +22 -0
- package/src/lib/env.ts +36 -0
- package/src/lib/error.ts +158 -0
- package/src/lib/logger.ts +78 -0
- package/src/lib/serde/json.ts +18 -0
- package/src/lib/serde/thread.ts +188 -0
- package/src/lifecycle.ts +181 -0
- package/src/mcp/__tests__/base.test.ts +344 -0
- package/src/mcp/__tests__/fixtures/server.ts +179 -0
- package/src/mcp/__tests__/fixtures/utils.ts +58 -0
- package/src/mcp/__tests__/integration.test.ts +447 -0
- package/src/mcp/__tests__/stdio.test.ts +236 -0
- package/src/mcp/__tests__/utils.test.ts +360 -0
- package/src/mcp/base.ts +162 -0
- package/src/mcp/http.ts +147 -0
- package/src/mcp/sse.ts +137 -0
- package/src/mcp/stdio.ts +136 -0
- package/src/mcp/types.ts +202 -0
- package/src/mcp/utils.ts +62 -0
- package/src/task.ts +119 -0
- package/src/thread/__tests__/mock.ts +95 -0
- package/src/thread/__tests__/thread.test.ts +1574 -0
- package/src/thread/index.ts +1 -0
- package/src/thread/thread.ts +611 -0
- package/src/thread/utils.ts +67 -0
- package/src/tool/__tests__/fixtures.ts +106 -0
- package/src/tool/__tests__/tool.test.ts +235 -0
- package/src/tool/__tests__/toolkit.test.ts +174 -0
- package/src/tool/index.ts +10 -0
- package/src/tool/tool.ts +264 -0
- package/src/tool/toolkit.ts +234 -0
- package/src/tool/types.ts +243 -0
- package/src/trace/processor.ts +0 -0
- package/src/trace/traces.ts +86 -0
- package/src/trace/utils.ts +38 -0
- package/src/types/agent.ts +145 -0
- package/src/types/thread.ts +86 -0
- package/tsconfig.json +13 -0
- package/vitest.config.ts +14 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Task represents a unit of work scheduled by the kernl.
|
|
3
|
+
* Analogous to task_struct in the Linux kernel.
|
|
4
|
+
*/
|
|
5
|
+
export class Task {
|
|
6
|
+
pid;
|
|
7
|
+
// tgid: string | null; /* task groupid */
|
|
8
|
+
// prio: TaskPriority;
|
|
9
|
+
instructions;
|
|
10
|
+
// sched: TaskSched; /* scheduling (timers, timeouts, deadlines) */
|
|
11
|
+
state;
|
|
12
|
+
owner;
|
|
13
|
+
context;
|
|
14
|
+
// cred: Credentials; /* Effective (overridable) subjective task credentials (COW): */
|
|
15
|
+
// realcred: Credentials; /* Objective and real subjective task credentials (COW): */
|
|
16
|
+
/**
|
|
17
|
+
* Might want the ability to pick up a new thread of execution from a compressed task checkpoint instead of including
|
|
18
|
+
* all of the events from the old threads (which may no longer be useful if they completed with good artifacts + reasoning / action summaries).
|
|
19
|
+
* At that point its really more about tracing.
|
|
20
|
+
*/
|
|
21
|
+
threads;
|
|
22
|
+
current;
|
|
23
|
+
result;
|
|
24
|
+
// checkpoints: TaskCheckpoint<TContext>[]; /* checkpoints for resuming execution */
|
|
25
|
+
// TODO: Deferred fields for later implementation
|
|
26
|
+
// tgid: string; // Thread group ID
|
|
27
|
+
// limits: TaskLimits; // Resource limits (max ticks, tokens, timeout)
|
|
28
|
+
// nsproxy: NamespaceProxy; // Namespace isolation
|
|
29
|
+
constructor(init) {
|
|
30
|
+
this.pid = init.pid;
|
|
31
|
+
this.instructions = init.instructions;
|
|
32
|
+
this.state = init.state;
|
|
33
|
+
this.owner = init.owner;
|
|
34
|
+
this.context = init.context;
|
|
35
|
+
this.threads = [];
|
|
36
|
+
this.current = null;
|
|
37
|
+
this.result = null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The various states that a task may be in.
|
|
42
|
+
*/
|
|
43
|
+
export var TaskState;
|
|
44
|
+
(function (TaskState) {
|
|
45
|
+
/**
|
|
46
|
+
* Task is either:
|
|
47
|
+
* - Currently executing
|
|
48
|
+
* - In run queue waiting to be scheduled (might want to differentiate between running + queued here)
|
|
49
|
+
*/
|
|
50
|
+
TaskState["RUNNING"] = "running";
|
|
51
|
+
/**
|
|
52
|
+
* Task is sleeping/blocked, waiting for a condition.
|
|
53
|
+
* Can be woken up by:
|
|
54
|
+
* - The condition being met (e.g., approval granted)
|
|
55
|
+
* - A signal (e.g., user cancellation)
|
|
56
|
+
*
|
|
57
|
+
* Examples:
|
|
58
|
+
* - Waiting for tool approval
|
|
59
|
+
* - Waiting for user input
|
|
60
|
+
* - Sleeping on a timer
|
|
61
|
+
*/
|
|
62
|
+
TaskState["INTERRUPTIBLE"] = "interruptible";
|
|
63
|
+
/**
|
|
64
|
+
* Task is sleeping/blocked and CANNOT be interrupted by signals.
|
|
65
|
+
* Only wakes when the condition is met.
|
|
66
|
+
*
|
|
67
|
+
* Examples:
|
|
68
|
+
* - Waiting for critical I/O (model API call)
|
|
69
|
+
* - Waiting for resource that MUST complete
|
|
70
|
+
*
|
|
71
|
+
* Use sparingly - these tasks can't be cancelled!
|
|
72
|
+
*/
|
|
73
|
+
TaskState["UNINTERRUPTIBLE"] = "uninterruptible";
|
|
74
|
+
/**
|
|
75
|
+
* Task has been stopped by a signal (SIGSTOP).
|
|
76
|
+
* Will remain stopped until explicitly continued (SIGCONT).
|
|
77
|
+
*
|
|
78
|
+
* Examples:
|
|
79
|
+
* - User explicitly paused the agent
|
|
80
|
+
* - Debugger attached
|
|
81
|
+
*/
|
|
82
|
+
TaskState["STOPPED"] = "stopped";
|
|
83
|
+
/**
|
|
84
|
+
* Task is being traced by a debugger.
|
|
85
|
+
* Similar to STOPPED but for debugging.
|
|
86
|
+
*/
|
|
87
|
+
TaskState["TRACED"] = "traced";
|
|
88
|
+
/**
|
|
89
|
+
* Task has finished execution but hasn't been cleaned up yet.
|
|
90
|
+
* Waiting for parent to read exit status (wait/waitpid).
|
|
91
|
+
*
|
|
92
|
+
* Examples:
|
|
93
|
+
* - Agent completed but result not yet retrieved
|
|
94
|
+
* - Child agent finished, parent needs to collect result
|
|
95
|
+
*/
|
|
96
|
+
TaskState["ZOMBIE"] = "zombie";
|
|
97
|
+
/**
|
|
98
|
+
* Task is being removed from the system.
|
|
99
|
+
* Final cleanup in progress, about to be fully deleted.
|
|
100
|
+
*/
|
|
101
|
+
TaskState["DEAD"] = "dead";
|
|
102
|
+
})(TaskState || (TaskState = {}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.test.d.ts","sourceRoot":"","sources":["../../../src/serde/__tests__/codec.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { json } from "../codec";
|
|
4
|
+
describe("json codec", () => {
|
|
5
|
+
it("should parse valid JSON and validate against schema", () => {
|
|
6
|
+
const schema = z.object({
|
|
7
|
+
name: z.string(),
|
|
8
|
+
age: z.number(),
|
|
9
|
+
});
|
|
10
|
+
const codec = json(schema);
|
|
11
|
+
const result = codec.decode('{"name": "Alice", "age": 30}');
|
|
12
|
+
expect(result).toEqual({ name: "Alice", age: 30 });
|
|
13
|
+
});
|
|
14
|
+
it("should reject invalid JSON syntax", () => {
|
|
15
|
+
const schema = z.object({
|
|
16
|
+
name: z.string(),
|
|
17
|
+
});
|
|
18
|
+
const codec = json(schema);
|
|
19
|
+
expect(() => {
|
|
20
|
+
codec.decode('{"name": "Alice"');
|
|
21
|
+
}).toThrow();
|
|
22
|
+
});
|
|
23
|
+
it("should reject valid JSON that doesn't match schema", () => {
|
|
24
|
+
const schema = z.object({
|
|
25
|
+
name: z.string(),
|
|
26
|
+
age: z.number(),
|
|
27
|
+
});
|
|
28
|
+
const codec = json(schema);
|
|
29
|
+
// Valid JSON but age is a string, not a number
|
|
30
|
+
expect(() => {
|
|
31
|
+
codec.decode('{"name": "Alice", "age": "30"}');
|
|
32
|
+
}).toThrow();
|
|
33
|
+
});
|
|
34
|
+
it("should reject JSON missing required fields", () => {
|
|
35
|
+
const schema = z.object({
|
|
36
|
+
name: z.string(),
|
|
37
|
+
age: z.number(),
|
|
38
|
+
});
|
|
39
|
+
const codec = json(schema);
|
|
40
|
+
// Valid JSON but missing age field
|
|
41
|
+
expect(() => {
|
|
42
|
+
codec.decode('{"name": "Alice"}');
|
|
43
|
+
}).toThrow();
|
|
44
|
+
});
|
|
45
|
+
it("should handle nested objects", () => {
|
|
46
|
+
const schema = z.object({
|
|
47
|
+
user: z.object({
|
|
48
|
+
name: z.string(),
|
|
49
|
+
email: z.string().email(),
|
|
50
|
+
}),
|
|
51
|
+
metadata: z.object({
|
|
52
|
+
createdAt: z.string(),
|
|
53
|
+
}),
|
|
54
|
+
});
|
|
55
|
+
const codec = json(schema);
|
|
56
|
+
const result = codec.decode('{"user": {"name": "Bob", "email": "bob@example.com"}, "metadata": {"createdAt": "2024-01-01"}}');
|
|
57
|
+
expect(result).toEqual({
|
|
58
|
+
user: { name: "Bob", email: "bob@example.com" },
|
|
59
|
+
metadata: { createdAt: "2024-01-01" },
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
it("should reject nested objects that don't match schema", () => {
|
|
63
|
+
const schema = z.object({
|
|
64
|
+
user: z.object({
|
|
65
|
+
name: z.string(),
|
|
66
|
+
email: z.string().email(),
|
|
67
|
+
}),
|
|
68
|
+
});
|
|
69
|
+
const codec = json(schema);
|
|
70
|
+
// Invalid email format
|
|
71
|
+
expect(() => {
|
|
72
|
+
codec.decode('{"user": {"name": "Bob", "email": "not-an-email"}}');
|
|
73
|
+
}).toThrow();
|
|
74
|
+
});
|
|
75
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const stringToNumber: z.ZodCodec<z.ZodString, z.ZodNumber>;
|
|
3
|
+
export declare const stringToInt: z.ZodCodec<z.ZodString, z.ZodInt>;
|
|
4
|
+
export declare const isotime: z.ZodCodec<z.ZodISODateTime, z.ZodDate>;
|
|
5
|
+
export declare const epochsec: z.ZodCodec<z.ZodInt, z.ZodDate>;
|
|
6
|
+
export declare const epochms: z.ZodCodec<z.ZodInt, z.ZodDate>;
|
|
7
|
+
export declare const json: <T extends z.core.$ZodType>(schema: T) => z.ZodCodec<z.ZodString, T>;
|
|
8
|
+
export declare const stringToURL: z.ZodCodec<z.ZodURL, z.ZodCustom<import("url").URL, import("url").URL>>;
|
|
9
|
+
export declare const stringToHttpURL: z.ZodCodec<z.ZodURL, z.ZodCustom<import("url").URL, import("url").URL>>;
|
|
10
|
+
export declare const base64ToBytes: z.ZodCodec<z.ZodBase64, z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>>;
|
|
11
|
+
export declare const base64urlToBytes: z.ZodCodec<z.ZodBase64URL, z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>>;
|
|
12
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/serde/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc,sCAO1B,CAAC;AAEF,eAAO,MAAM,WAAW,mCAOvB,CAAC;AAEF,eAAO,MAAM,OAAO,yCAGlB,CAAC;AAEH,eAAO,MAAM,QAAQ,iCAGnB,CAAC;AAEH,eAAO,MAAM,OAAO,iCAGlB,CAAC;AAEH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,+BAgBrD,CAAC;AAEL,eAAO,MAAM,WAAW,yEAGtB,CAAC;AAEH,eAAO,MAAM,eAAe,yEAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,wFAGxB,CAAC;AAEH,eAAO,MAAM,gBAAgB,2FAO5B,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const stringToNumber = z.codec(z.string().regex(z.regexes.number), z.number(), {
|
|
3
|
+
decode: (str) => Number.parseFloat(str),
|
|
4
|
+
encode: (num) => num.toString(),
|
|
5
|
+
});
|
|
6
|
+
export const stringToInt = z.codec(z.string().regex(z.regexes.integer), z.int(), {
|
|
7
|
+
decode: (str) => Number.parseInt(str, 10),
|
|
8
|
+
encode: (num) => num.toString(),
|
|
9
|
+
});
|
|
10
|
+
export const isotime = z.codec(z.iso.datetime(), z.date(), {
|
|
11
|
+
decode: (isoString) => new Date(isoString),
|
|
12
|
+
encode: (date) => date.toISOString(),
|
|
13
|
+
});
|
|
14
|
+
export const epochsec = z.codec(z.int().min(0), z.date(), {
|
|
15
|
+
decode: (seconds) => new Date(seconds * 1000),
|
|
16
|
+
encode: (date) => Math.floor(date.getTime() / 1000),
|
|
17
|
+
});
|
|
18
|
+
export const epochms = z.codec(z.int().min(0), z.date(), {
|
|
19
|
+
decode: (millis) => new Date(millis),
|
|
20
|
+
encode: (date) => date.getTime(),
|
|
21
|
+
});
|
|
22
|
+
export const json = (schema) => z.codec(z.string(), schema, {
|
|
23
|
+
decode: (jsonString, ctx) => {
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(jsonString);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
ctx.issues.push({
|
|
29
|
+
code: "invalid_format",
|
|
30
|
+
format: "json",
|
|
31
|
+
input: jsonString,
|
|
32
|
+
message: err.message,
|
|
33
|
+
});
|
|
34
|
+
return z.NEVER;
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
encode: (value) => JSON.stringify(value),
|
|
38
|
+
});
|
|
39
|
+
export const stringToURL = z.codec(z.url(), z.instanceof(URL), {
|
|
40
|
+
decode: (urlString) => new URL(urlString),
|
|
41
|
+
encode: (url) => url.href,
|
|
42
|
+
});
|
|
43
|
+
export const stringToHttpURL = z.codec(z.httpUrl(), z.instanceof(URL), {
|
|
44
|
+
decode: (urlString) => new URL(urlString),
|
|
45
|
+
encode: (url) => url.href,
|
|
46
|
+
});
|
|
47
|
+
export const base64ToBytes = z.codec(z.base64(), z.instanceof(Uint8Array), {
|
|
48
|
+
decode: (base64String) => z.util.base64ToUint8Array(base64String),
|
|
49
|
+
encode: (bytes) => z.util.uint8ArrayToBase64(bytes),
|
|
50
|
+
});
|
|
51
|
+
export const base64urlToBytes = z.codec(z.base64url(), z.instanceof(Uint8Array), {
|
|
52
|
+
decode: (base64urlString) => z.util.base64urlToUint8Array(base64urlString),
|
|
53
|
+
encode: (bytes) => z.util.uint8ArrayToBase64url(bytes),
|
|
54
|
+
});
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Represents a JSON-serializable value that can be safely stringified and sent to the model.
|
|
4
|
+
* Recursive type that allows nested structures.
|
|
5
|
+
*/
|
|
6
|
+
export declare const JSONValue: z.ZodType<unknown>;
|
|
7
|
+
export type JSONValue = z.infer<typeof JSONValue>;
|
|
8
|
+
//# sourceMappingURL=json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/serde/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CASxC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Represents a JSON-serializable value that can be safely stringified and sent to the model.
|
|
4
|
+
* Recursive type that allows nested structures.
|
|
5
|
+
*/
|
|
6
|
+
export const JSONValue = z.lazy(() => z.union([
|
|
7
|
+
z.string(),
|
|
8
|
+
z.number(),
|
|
9
|
+
z.boolean(),
|
|
10
|
+
z.null(),
|
|
11
|
+
z.array(JSONValue),
|
|
12
|
+
z.record(z.string(), JSONValue),
|
|
13
|
+
]));
|