@h-rig/contracts 0.0.6-alpha.0

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.
@@ -0,0 +1 @@
1
+ // @bun
@@ -0,0 +1,119 @@
1
+ // @bun
2
+ // packages/contracts/src/keybindings.ts
3
+ import { Schema as Schema2 } from "effect";
4
+
5
+ // packages/contracts/src/baseSchemas.ts
6
+ import { Schema } from "effect";
7
+ var TrimmedString = Schema.Trim;
8
+ var TrimmedNonEmptyString = TrimmedString.check(Schema.isNonEmpty());
9
+ var NonNegativeInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));
10
+ var PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
11
+ var IsoDateTime = Schema.String;
12
+ var makeEntityId = (brand) => TrimmedNonEmptyString.pipe(Schema.brand(brand));
13
+ var ThreadId = makeEntityId("ThreadId");
14
+ var ProjectId = makeEntityId("ProjectId");
15
+ var WorkspaceId = makeEntityId("WorkspaceId");
16
+ var GraphId = makeEntityId("GraphId");
17
+ var TaskId = makeEntityId("TaskId");
18
+ var RunId = makeEntityId("RunId");
19
+ var EngineRuntimeId = makeEntityId("EngineRuntimeId");
20
+ var ConversationId = makeEntityId("ConversationId");
21
+ var ActionId = makeEntityId("ActionId");
22
+ var ArtifactId = makeEntityId("ArtifactId");
23
+ var WorktreeId = makeEntityId("WorktreeId");
24
+ var ValidationResultId = makeEntityId("ValidationResultId");
25
+ var ReviewResultId = makeEntityId("ReviewResultId");
26
+ var CommandId = makeEntityId("CommandId");
27
+ var EventId = makeEntityId("EventId");
28
+ var MessageId = makeEntityId("MessageId");
29
+ var TurnId = makeEntityId("TurnId");
30
+ var ProviderItemId = makeEntityId("ProviderItemId");
31
+ var RuntimeSessionId = makeEntityId("RuntimeSessionId");
32
+ var RuntimeItemId = makeEntityId("RuntimeItemId");
33
+ var RuntimeRequestId = makeEntityId("RuntimeRequestId");
34
+ var RuntimeTaskId = makeEntityId("RuntimeTaskId");
35
+ var ApprovalRequestId = makeEntityId("ApprovalRequestId");
36
+ var CheckpointRef = makeEntityId("CheckpointRef");
37
+ var RemoteEndpointId = makeEntityId("RemoteEndpointId");
38
+
39
+ // packages/contracts/src/keybindings.ts
40
+ var MAX_KEYBINDING_VALUE_LENGTH = 64;
41
+ var MAX_KEYBINDING_WHEN_LENGTH = 256;
42
+ var MAX_WHEN_EXPRESSION_DEPTH = 64;
43
+ var MAX_SCRIPT_ID_LENGTH = 24;
44
+ var MAX_KEYBINDINGS_COUNT = 256;
45
+ var STATIC_KEYBINDING_COMMANDS = [
46
+ "terminal.toggle",
47
+ "terminal.split",
48
+ "terminal.new",
49
+ "terminal.close",
50
+ "diff.toggle",
51
+ "chat.new",
52
+ "chat.newLocal",
53
+ "editor.openFavorite"
54
+ ];
55
+ var SCRIPT_RUN_COMMAND_PATTERN = Schema2.TemplateLiteral([
56
+ Schema2.Literal("script."),
57
+ Schema2.NonEmptyString.check(Schema2.isMaxLength(MAX_SCRIPT_ID_LENGTH), Schema2.isPattern(/^[a-z0-9][a-z0-9-]*$/)),
58
+ Schema2.Literal(".run")
59
+ ]);
60
+ var KeybindingCommand = Schema2.Union([
61
+ Schema2.Literals(STATIC_KEYBINDING_COMMANDS),
62
+ SCRIPT_RUN_COMMAND_PATTERN
63
+ ]);
64
+ var KeybindingValue = TrimmedString.check(Schema2.isMinLength(1), Schema2.isMaxLength(MAX_KEYBINDING_VALUE_LENGTH));
65
+ var KeybindingWhen = TrimmedString.check(Schema2.isMinLength(1), Schema2.isMaxLength(MAX_KEYBINDING_WHEN_LENGTH));
66
+ var KeybindingRule = Schema2.Struct({
67
+ key: KeybindingValue,
68
+ command: KeybindingCommand,
69
+ when: Schema2.optional(KeybindingWhen)
70
+ });
71
+ var KeybindingsConfig = Schema2.Array(KeybindingRule).check(Schema2.isMaxLength(MAX_KEYBINDINGS_COUNT));
72
+ var KeybindingShortcut = Schema2.Struct({
73
+ key: KeybindingValue,
74
+ metaKey: Schema2.Boolean,
75
+ ctrlKey: Schema2.Boolean,
76
+ shiftKey: Schema2.Boolean,
77
+ altKey: Schema2.Boolean,
78
+ modKey: Schema2.Boolean
79
+ });
80
+ var KeybindingWhenNode = Schema2.Union([
81
+ Schema2.Struct({
82
+ type: Schema2.Literal("identifier"),
83
+ name: Schema2.NonEmptyString
84
+ }),
85
+ Schema2.Struct({
86
+ type: Schema2.Literal("not"),
87
+ node: Schema2.suspend(() => KeybindingWhenNode)
88
+ }),
89
+ Schema2.Struct({
90
+ type: Schema2.Literal("and"),
91
+ left: Schema2.suspend(() => KeybindingWhenNode),
92
+ right: Schema2.suspend(() => KeybindingWhenNode)
93
+ }),
94
+ Schema2.Struct({
95
+ type: Schema2.Literal("or"),
96
+ left: Schema2.suspend(() => KeybindingWhenNode),
97
+ right: Schema2.suspend(() => KeybindingWhenNode)
98
+ })
99
+ ]);
100
+ var ResolvedKeybindingRule = Schema2.Struct({
101
+ command: KeybindingCommand,
102
+ shortcut: KeybindingShortcut,
103
+ whenAst: Schema2.optional(KeybindingWhenNode)
104
+ }).annotate({ parseOptions: { onExcessProperty: "ignore" } });
105
+ var ResolvedKeybindingsConfig = Schema2.Array(ResolvedKeybindingRule).check(Schema2.isMaxLength(MAX_KEYBINDINGS_COUNT));
106
+ export {
107
+ SCRIPT_RUN_COMMAND_PATTERN,
108
+ ResolvedKeybindingsConfig,
109
+ ResolvedKeybindingRule,
110
+ MAX_WHEN_EXPRESSION_DEPTH,
111
+ MAX_SCRIPT_ID_LENGTH,
112
+ MAX_KEYBINDING_VALUE_LENGTH,
113
+ MAX_KEYBINDINGS_COUNT,
114
+ KeybindingsConfig,
115
+ KeybindingWhenNode,
116
+ KeybindingShortcut,
117
+ KeybindingRule,
118
+ KeybindingCommand
119
+ };
@@ -0,0 +1,64 @@
1
+ // @bun
2
+ // packages/contracts/src/model.ts
3
+ import { Schema } from "effect";
4
+ var CODEX_REASONING_EFFORT_OPTIONS = ["xhigh", "high", "medium", "low"];
5
+ var CodexModelOptions = Schema.Struct({
6
+ reasoningEffort: Schema.optional(Schema.Literals(CODEX_REASONING_EFFORT_OPTIONS)),
7
+ fastMode: Schema.optional(Schema.Boolean)
8
+ });
9
+ var ClaudeModelOptions = Schema.Struct({});
10
+ var ProviderModelOptions = Schema.Struct({
11
+ codex: Schema.optional(CodexModelOptions),
12
+ claude: Schema.optional(ClaudeModelOptions)
13
+ });
14
+ var MODEL_OPTIONS_BY_PROVIDER = {
15
+ codex: [
16
+ { slug: "gpt-5.4", name: "GPT-5.4" },
17
+ { slug: "gpt-5.3-codex", name: "GPT-5.3 Codex" },
18
+ { slug: "gpt-5.3-codex-spark", name: "GPT-5.3 Codex Spark" },
19
+ { slug: "gpt-5.2-codex", name: "GPT-5.2 Codex" },
20
+ { slug: "gpt-5.2", name: "GPT-5.2" }
21
+ ],
22
+ claude: [
23
+ { slug: "claude-sonnet-4-6", name: "Claude Sonnet 4.6" },
24
+ { slug: "claude-opus-4-1", name: "Claude Opus 4.1" },
25
+ { slug: "claude-3-7-sonnet-latest", name: "Claude 3.7 Sonnet" }
26
+ ]
27
+ };
28
+ var DEFAULT_MODEL_BY_PROVIDER = {
29
+ codex: "gpt-5.4",
30
+ claude: "claude-sonnet-4-6"
31
+ };
32
+ var MODEL_SLUG_ALIASES_BY_PROVIDER = {
33
+ codex: {
34
+ "5.4": "gpt-5.4",
35
+ "5.3": "gpt-5.3-codex",
36
+ "gpt-5.3": "gpt-5.3-codex",
37
+ "5.3-spark": "gpt-5.3-codex-spark",
38
+ "gpt-5.3-spark": "gpt-5.3-codex-spark"
39
+ },
40
+ claude: {
41
+ sonnet: "claude-sonnet-4-6",
42
+ opus: "claude-opus-4-1",
43
+ "3.7-sonnet": "claude-3-7-sonnet-latest"
44
+ }
45
+ };
46
+ var REASONING_EFFORT_OPTIONS_BY_PROVIDER = {
47
+ codex: CODEX_REASONING_EFFORT_OPTIONS,
48
+ claude: []
49
+ };
50
+ var DEFAULT_REASONING_EFFORT_BY_PROVIDER = {
51
+ codex: "high",
52
+ claude: null
53
+ };
54
+ export {
55
+ REASONING_EFFORT_OPTIONS_BY_PROVIDER,
56
+ ProviderModelOptions,
57
+ MODEL_SLUG_ALIASES_BY_PROVIDER,
58
+ MODEL_OPTIONS_BY_PROVIDER,
59
+ DEFAULT_REASONING_EFFORT_BY_PROVIDER,
60
+ DEFAULT_MODEL_BY_PROVIDER,
61
+ CodexModelOptions,
62
+ ClaudeModelOptions,
63
+ CODEX_REASONING_EFFORT_OPTIONS
64
+ };