@boxxy/server 0.0.0-stage → 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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -2
  3. package/dist/auth/authorize-call.d.ts +11 -0
  4. package/dist/auth/is-browser-request.d.ts +1 -0
  5. package/dist/auth/pick-request-scope.d.ts +9 -0
  6. package/dist/config/pick-server-secrets.d.ts +16 -0
  7. package/dist/config/read-caller-proof.d.ts +10 -0
  8. package/dist/config/read-server-config.d.ts +9 -0
  9. package/dist/config/read-trusted-issuers.d.ts +8 -0
  10. package/dist/config/server-config-schema.d.ts +42 -0
  11. package/dist/create-capacity-backoff.d.ts +2 -0
  12. package/dist/handlers/api.d.ts +1683 -0
  13. package/dist/handlers/attempt-handlers.d.ts +130 -0
  14. package/dist/handlers/build-owner-fact.d.ts +3 -0
  15. package/dist/handlers/item-handlers.d.ts +168 -0
  16. package/dist/handlers/outbox-handlers.d.ts +7 -0
  17. package/dist/handlers/plan-handlers.d.ts +62 -0
  18. package/dist/handlers/read-item-ids.d.ts +10 -0
  19. package/dist/handlers/relation-handlers.d.ts +41 -0
  20. package/dist/handlers/report-handlers.d.ts +102 -0
  21. package/dist/handlers/rules-handlers.d.ts +20 -0
  22. package/dist/handlers/runner-handlers.d.ts +65 -0
  23. package/dist/handlers/to-wire-json.d.ts +5 -0
  24. package/dist/handlers/write-levers.d.ts +11 -0
  25. package/dist/index.d.ts +12 -0
  26. package/dist/main.d.ts +1 -0
  27. package/dist/no-caller-proof.d.ts +2 -0
  28. package/dist/outbox/create-off-outbox.d.ts +3 -0
  29. package/dist/outbox/start-outbox-sender.d.ts +10 -0
  30. package/dist/read-limited-request.d.ts +1 -0
  31. package/dist/rules/create-rules-holder.d.ts +20 -0
  32. package/dist/rules/load-server-rules.d.ts +7 -0
  33. package/dist/rules/read-rules-checkout.d.ts +9 -0
  34. package/dist/serve-api.d.ts +50 -0
  35. package/dist/start-server.d.ts +18 -0
  36. package/dist/test-utils/build-mcp-request.d.ts +8 -0
  37. package/dist/test-utils/build-rpc-request.d.ts +7 -0
  38. package/dist/test-utils/build-session-input.d.ts +1 -0
  39. package/dist/test-utils/create-fake-caller-proof.d.ts +5 -0
  40. package/dist/test-utils/create-test-server.d.ts +30 -0
  41. package/dist/test-utils/list-owner-procedures.d.ts +5 -0
  42. package/dist/test-utils/read-mcp-answer.d.ts +11 -0
  43. package/dist/test-utils/wait-for.d.ts +1 -0
  44. package/dist/tick/run-tick.d.ts +24 -0
  45. package/dist/tick/start-tick-loop.d.ts +12 -0
  46. package/dist/types.d.ts +41 -0
  47. package/package.json +62 -4
  48. package/src/auth/authorize-call.ts +50 -0
  49. package/src/auth/is-browser-request.ts +8 -0
  50. package/src/auth/pick-request-scope.ts +37 -0
  51. package/src/config/pick-server-secrets.ts +48 -0
  52. package/src/config/read-caller-proof.ts +36 -0
  53. package/src/config/read-server-config.ts +41 -0
  54. package/src/config/read-trusted-issuers.ts +60 -0
  55. package/src/config/server-config-schema.ts +71 -0
  56. package/src/create-capacity-backoff.ts +18 -0
  57. package/src/handlers/api.ts +23 -0
  58. package/src/handlers/attempt-handlers.ts +244 -0
  59. package/src/handlers/build-owner-fact.ts +20 -0
  60. package/src/handlers/item-handlers.ts +462 -0
  61. package/src/handlers/outbox-handlers.ts +15 -0
  62. package/src/handlers/plan-handlers.ts +75 -0
  63. package/src/handlers/read-item-ids.ts +31 -0
  64. package/src/handlers/relation-handlers.ts +143 -0
  65. package/src/handlers/report-handlers.ts +112 -0
  66. package/src/handlers/rules-handlers.ts +46 -0
  67. package/src/handlers/runner-handlers.ts +117 -0
  68. package/src/handlers/to-wire-json.ts +20 -0
  69. package/src/handlers/write-levers.ts +53 -0
  70. package/src/index.ts +12 -0
  71. package/src/main.ts +31 -0
  72. package/src/no-caller-proof.ts +7 -0
  73. package/src/outbox/create-off-outbox.ts +21 -0
  74. package/src/outbox/start-outbox-sender.ts +89 -0
  75. package/src/read-limited-request.ts +43 -0
  76. package/src/rules/create-rules-holder.ts +107 -0
  77. package/src/rules/load-server-rules.ts +24 -0
  78. package/src/rules/read-rules-checkout.ts +65 -0
  79. package/src/serve-api.ts +178 -0
  80. package/src/start-server.ts +308 -0
  81. package/src/test-utils/build-mcp-request.ts +34 -0
  82. package/src/test-utils/build-rpc-request.ts +23 -0
  83. package/src/test-utils/build-session-input.ts +16 -0
  84. package/src/test-utils/create-fake-caller-proof.ts +18 -0
  85. package/src/test-utils/create-test-server.ts +142 -0
  86. package/src/test-utils/list-owner-procedures.ts +38 -0
  87. package/src/test-utils/read-mcp-answer.ts +26 -0
  88. package/src/test-utils/wait-for.ts +14 -0
  89. package/src/tick/run-tick.ts +212 -0
  90. package/src/tick/start-tick-loop.ts +46 -0
  91. package/src/types.ts +86 -0
@@ -0,0 +1,130 @@
1
+ import type { AttemptRow } from '@boxxy/model';
2
+ import type { ProvenCall } from '../types.ts';
3
+ export declare const attemptHandlers: {
4
+ current: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
5
+ call: ProvenCall | null;
6
+ }, import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
7
+ kind: import("zod").ZodLiteral<"attempt">;
8
+ attempt: import("zod").ZodType<AttemptRow, unknown, import("zod/v4/core").$ZodTypeInternals<AttemptRow, unknown>>;
9
+ item: import("zod").ZodType<import("@boxxy/model").ItemView, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").ItemView, unknown>>;
10
+ input: import("zod").ZodJSONSchema;
11
+ closeOut: import("zod").ZodObject<{
12
+ phase: import("zod").ZodString;
13
+ schema: import("zod").ZodJSONSchema;
14
+ outcomes: import("zod").ZodArray<import("zod").ZodString>;
15
+ }, import("zod/v4/core").$strip>;
16
+ skills: import("zod").ZodObject<{
17
+ pin: import("zod").ZodNullable<import("zod").ZodObject<{
18
+ source: import("zod").ZodString;
19
+ ref: import("zod").ZodString;
20
+ }, import("zod/v4/core").$strip>>;
21
+ names: import("zod").ZodArray<import("zod").ZodString>;
22
+ }, import("zod/v4/core").$strip>;
23
+ notes: import("zod").ZodArray<import("zod").ZodObject<{
24
+ seq: import("zod").ZodNumber;
25
+ text: import("zod").ZodString;
26
+ at: import("zod").ZodNumber;
27
+ }, import("zod/v4/core").$strip>>;
28
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
29
+ kind: import("zod").ZodLiteral<"refused">;
30
+ reason: import("zod").ZodEnum<{
31
+ "no-attempt": "no-attempt";
32
+ "not-current": "not-current";
33
+ }>;
34
+ }, import("zod/v4/core").$strip>], "kind">, Record<never, never>>;
35
+ closeOut: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
36
+ call: ProvenCall | null;
37
+ }, import("zod").ZodObject<{
38
+ session: import("zod").ZodObject<{
39
+ attempt: import("zod").ZodString;
40
+ agentSession: import("zod").ZodOptional<import("zod").ZodString>;
41
+ product: import("zod").ZodOptional<import("zod").ZodEnum<{
42
+ claude_code: "claude_code";
43
+ codex: "codex";
44
+ }>>;
45
+ }, import("zod/v4/core").$strip>;
46
+ closeOut: import("zod").ZodUnknown;
47
+ }, import("zod/v4/core").$strip>, import("zod").ZodType<import("@boxxy/model").CloseOutAnswer, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").CloseOutAnswer, unknown>>, Record<never, never>>;
48
+ evidence: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
49
+ call: ProvenCall | null;
50
+ }, import("zod").ZodObject<{
51
+ session: import("zod").ZodObject<{
52
+ attempt: import("zod").ZodString;
53
+ agentSession: import("zod").ZodOptional<import("zod").ZodString>;
54
+ product: import("zod").ZodOptional<import("zod").ZodEnum<{
55
+ claude_code: "claude_code";
56
+ codex: "codex";
57
+ }>>;
58
+ }, import("zod/v4/core").$strip>;
59
+ kind: import("zod").ZodEnum<{
60
+ "ci-run": "ci-run";
61
+ "live-check": "live-check";
62
+ test: "test";
63
+ }>;
64
+ ref: import("zod").ZodString;
65
+ observed: import("zod").ZodOptional<import("zod").ZodString>;
66
+ }, import("zod/v4/core").$strip>, import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
67
+ kind: import("zod").ZodLiteral<"recorded">;
68
+ factId: import("zod").ZodString;
69
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
70
+ kind: import("zod").ZodLiteral<"refused">;
71
+ reason: import("zod").ZodEnum<{
72
+ "no-attempt": "no-attempt";
73
+ "not-current": "not-current";
74
+ }>;
75
+ }, import("zod/v4/core").$strip>], "kind">, Record<never, never>>;
76
+ bindSession: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
77
+ call: ProvenCall | null;
78
+ }, import("zod").ZodObject<{
79
+ session: import("zod").ZodObject<{
80
+ attempt: import("zod").ZodNonOptional<import("zod").ZodString>;
81
+ agentSession: import("zod").ZodNonOptional<import("zod").ZodOptional<import("zod").ZodString>>;
82
+ product: import("zod").ZodNonOptional<import("zod").ZodOptional<import("zod").ZodEnum<{
83
+ claude_code: "claude_code";
84
+ codex: "codex";
85
+ }>>>;
86
+ }, import("zod/v4/core").$strip>;
87
+ seenAt: import("zod").ZodISODateTime;
88
+ missingSkills: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
89
+ }, import("zod/v4/core").$strip>, import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
90
+ kind: import("zod").ZodEnum<{
91
+ bound: "bound";
92
+ held: "held";
93
+ "no-attempt": "no-attempt";
94
+ "not-current": "not-current";
95
+ "skill-missing": "skill-missing";
96
+ }>;
97
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
98
+ kind: import("zod").ZodLiteral<"fault">;
99
+ fault: import("zod").ZodLiteral<"agent-session-owned">;
100
+ holder: import("zod").ZodString;
101
+ }, import("zod/v4/core").$strip>], "kind">, Record<never, never>>;
102
+ recordPullRequest: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
103
+ call: ProvenCall | null;
104
+ }, import("zod").ZodObject<{
105
+ session: import("zod").ZodObject<{
106
+ attempt: import("zod").ZodString;
107
+ agentSession: import("zod").ZodOptional<import("zod").ZodString>;
108
+ product: import("zod").ZodOptional<import("zod").ZodEnum<{
109
+ claude_code: "claude_code";
110
+ codex: "codex";
111
+ }>>;
112
+ }, import("zod/v4/core").$strip>;
113
+ url: import("zod").ZodURL;
114
+ }, import("zod/v4/core").$strip>, import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
115
+ kind: import("zod").ZodLiteral<"linked">;
116
+ repo: import("zod").ZodString;
117
+ number: import("zod").ZodNumber;
118
+ repeat: import("zod").ZodBoolean;
119
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
120
+ kind: import("zod").ZodLiteral<"retry">;
121
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
122
+ kind: import("zod").ZodLiteral<"refused">;
123
+ reason: import("zod").ZodEnum<{
124
+ "linked-elsewhere": "linked-elsewhere";
125
+ "no-attempt": "no-attempt";
126
+ "not-a-pull-request-url": "not-a-pull-request-url";
127
+ "not-current": "not-current";
128
+ }>;
129
+ }, import("zod/v4/core").$strip>], "kind">, Record<never, never>>;
130
+ };
@@ -0,0 +1,3 @@
1
+ import type { ItemId, NewFact, WorkFacts } from '@boxxy/model';
2
+ import type { ServerDeps } from '../types.ts';
3
+ export declare function buildOwnerFact<Type extends keyof WorkFacts>(deps: ServerDeps, item: ItemId, type: Type, payload: WorkFacts[Type]): NewFact<Type>;
@@ -0,0 +1,168 @@
1
+ import type { ItemView, NoteRow, RelationRow } from '@boxxy/model';
2
+ export declare const itemHandlers: {
3
+ file: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
4
+ call: import("../types.ts").ProvenCall | null;
5
+ }, import("zod").ZodObject<{
6
+ repo: import("zod").ZodString;
7
+ title: import("zod").ZodString;
8
+ outcome: import("zod").ZodString;
9
+ acceptance: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
10
+ kind: import("zod").ZodOptional<import("zod").ZodString>;
11
+ designMode: import("zod").ZodOptional<import("zod").ZodEnum<{
12
+ agent: "agent";
13
+ attended: "attended";
14
+ }>>;
15
+ blockedBy: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
16
+ labels: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
17
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
18
+ item: import("zod").ZodString;
19
+ }, import("zod/v4/core").$strip>, {
20
+ NOT_FOUND: {
21
+ message: string;
22
+ data: import("zod").ZodObject<{
23
+ item: import("zod").ZodString;
24
+ }, import("zod/v4/core").$strip>;
25
+ };
26
+ }>;
27
+ edit: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
28
+ call: import("../types.ts").ProvenCall | null;
29
+ }, import("zod").ZodObject<{
30
+ item: import("zod").ZodString;
31
+ title: import("zod").ZodOptional<import("zod").ZodString>;
32
+ outcome: import("zod").ZodOptional<import("zod").ZodString>;
33
+ acceptance: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
34
+ id: import("zod").ZodOptional<import("zod").ZodString>;
35
+ text: import("zod").ZodString;
36
+ }, import("zod/v4/core").$strip>>>;
37
+ designMode: import("zod").ZodOptional<import("zod").ZodEnum<{
38
+ agent: "agent";
39
+ attended: "attended";
40
+ }>>;
41
+ labels: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
42
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
43
+ item: import("zod").ZodString;
44
+ }, import("zod/v4/core").$strip>, {
45
+ NOT_FOUND: {
46
+ message: string;
47
+ data: import("zod").ZodObject<{
48
+ item: import("zod").ZodString;
49
+ }, import("zod/v4/core").$strip>;
50
+ };
51
+ }>;
52
+ close: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
53
+ call: import("../types.ts").ProvenCall | null;
54
+ }, import("zod").ZodObject<{
55
+ item: import("zod").ZodString;
56
+ reason: import("zod").ZodString;
57
+ of: import("zod").ZodOptional<import("zod").ZodString>;
58
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
59
+ item: import("zod").ZodString;
60
+ ended: import("zod").ZodArray<import("zod").ZodObject<{
61
+ attempt: import("zod").ZodString;
62
+ how: import("zod").ZodEnum<{
63
+ closing: "closing";
64
+ settled: "settled";
65
+ }>;
66
+ }, import("zod/v4/core").$strip>>;
67
+ }, import("zod/v4/core").$strip>, {
68
+ NOT_FOUND: {
69
+ message: string;
70
+ data: import("zod").ZodObject<{
71
+ item: import("zod").ZodString;
72
+ }, import("zod/v4/core").$strip>;
73
+ };
74
+ }>;
75
+ retry: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
76
+ call: import("../types.ts").ProvenCall | null;
77
+ }, import("zod").ZodObject<{
78
+ item: import("zod").ZodString;
79
+ phase: import("zod").ZodOptional<import("zod").ZodString>;
80
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
81
+ lever: import("zod").ZodNumber;
82
+ }, import("zod/v4/core").$strip>, {
83
+ NOT_FOUND: {
84
+ message: string;
85
+ data: import("zod").ZodObject<{
86
+ item: import("zod").ZodString;
87
+ }, import("zod/v4/core").$strip>;
88
+ };
89
+ UNKNOWN_PHASE: {
90
+ message: string;
91
+ };
92
+ }>;
93
+ wake: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
94
+ call: import("../types.ts").ProvenCall | null;
95
+ }, import("zod").ZodObject<{
96
+ item: import("zod").ZodString;
97
+ }, import("zod/v4/core").$strip>, import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
98
+ kind: import("zod").ZodLiteral<"requested">;
99
+ attempt: import("zod").ZodString;
100
+ atcSession: import("zod").ZodNullable<import("zod").ZodString>;
101
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
102
+ kind: import("zod").ZodLiteral<"not-sleeping">;
103
+ }, import("zod/v4/core").$strip>], "kind">, {
104
+ NOT_FOUND: {
105
+ message: string;
106
+ data: import("zod").ZodObject<{
107
+ item: import("zod").ZodString;
108
+ }, import("zod/v4/core").$strip>;
109
+ };
110
+ }>;
111
+ note: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
112
+ call: import("../types.ts").ProvenCall | null;
113
+ }, import("zod").ZodObject<{
114
+ item: import("zod").ZodString;
115
+ text: import("zod").ZodString;
116
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
117
+ item: import("zod").ZodString;
118
+ seq: import("zod").ZodNumber;
119
+ }, import("zod/v4/core").$strip>, {
120
+ NOT_FOUND: {
121
+ message: string;
122
+ data: import("zod").ZodObject<{
123
+ item: import("zod").ZodString;
124
+ }, import("zod/v4/core").$strip>;
125
+ };
126
+ }>;
127
+ get: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
128
+ call: import("../types.ts").ProvenCall | null;
129
+ }, import("zod").ZodObject<{
130
+ item: import("zod").ZodString;
131
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
132
+ item: import("zod").ZodType<ItemView, unknown, import("zod/v4/core").$ZodTypeInternals<ItemView, unknown>>;
133
+ notes: import("zod").ZodArray<import("zod").ZodType<NoteRow, unknown, import("zod/v4/core").$ZodTypeInternals<NoteRow, unknown>>>;
134
+ attempts: import("zod").ZodArray<import("zod").ZodType<import("@boxxy/model").AttemptRow, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").AttemptRow, unknown>>>;
135
+ relations: import("zod").ZodArray<import("zod").ZodType<RelationRow, unknown, import("zod/v4/core").$ZodTypeInternals<RelationRow, unknown>>>;
136
+ evidence: import("zod").ZodArray<import("zod").ZodType<import("@boxxy/model").EvidenceRow, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").EvidenceRow, unknown>>>;
137
+ pullRequests: import("zod").ZodArray<import("zod").ZodType<import("@boxxy/model").PullRequestRow, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").PullRequestRow, unknown>>>;
138
+ }, import("zod/v4/core").$strip>, {
139
+ NOT_FOUND: {
140
+ message: string;
141
+ data: import("zod").ZodObject<{
142
+ item: import("zod").ZodString;
143
+ }, import("zod/v4/core").$strip>;
144
+ };
145
+ }>;
146
+ list: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
147
+ call: import("../types.ts").ProvenCall | null;
148
+ }, import("zod").ZodObject<{
149
+ state: import("zod").ZodOptional<import("zod").ZodEnum<{
150
+ archived: "archived";
151
+ blocked: "blocked";
152
+ done: "done";
153
+ idea: "idea";
154
+ ready: "ready";
155
+ running: "running";
156
+ waiting: "waiting";
157
+ }>>;
158
+ repo: import("zod").ZodOptional<import("zod").ZodString>;
159
+ phase: import("zod").ZodOptional<import("zod").ZodString>;
160
+ text: import("zod").ZodOptional<import("zod").ZodString>;
161
+ label: import("zod").ZodOptional<import("zod").ZodString>;
162
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
163
+ after: import("zod").ZodOptional<import("zod").ZodString>;
164
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
165
+ items: import("zod").ZodArray<import("zod").ZodType<ItemView, unknown, import("zod/v4/core").$ZodTypeInternals<ItemView, unknown>>>;
166
+ next: import("zod").ZodNullable<import("zod").ZodString>;
167
+ }, import("zod/v4/core").$strip>, Record<never, never>>;
168
+ };
@@ -0,0 +1,7 @@
1
+ export declare const outboxHandlers: {
2
+ retry: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
3
+ call: import("../types.ts").ProvenCall | null;
4
+ }, import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
5
+ unparked: import("zod").ZodNumber;
6
+ }, import("zod/v4/core").$strip>, Record<never, never>>;
7
+ };
@@ -0,0 +1,62 @@
1
+ export declare const planHandlers: {
2
+ defer: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
3
+ call: import("../types.ts").ProvenCall | null;
4
+ }, import("zod").ZodObject<{
5
+ item: import("zod").ZodString;
6
+ until: import("zod").ZodOptional<import("zod").ZodISODateTime>;
7
+ reason: import("zod").ZodString;
8
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
9
+ lever: import("zod").ZodNumber;
10
+ }, import("zod/v4/core").$strip>, {
11
+ NOT_FOUND: {
12
+ message: string;
13
+ data: import("zod").ZodObject<{
14
+ item: import("zod").ZodString;
15
+ }, import("zod/v4/core").$strip>;
16
+ };
17
+ }>;
18
+ undefer: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
19
+ call: import("../types.ts").ProvenCall | null;
20
+ }, import("zod").ZodObject<{
21
+ item: import("zod").ZodString;
22
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
23
+ lever: import("zod").ZodNumber;
24
+ }, import("zod/v4/core").$strip>, {
25
+ NOT_FOUND: {
26
+ message: string;
27
+ data: import("zod").ZodObject<{
28
+ item: import("zod").ZodString;
29
+ }, import("zod/v4/core").$strip>;
30
+ };
31
+ }>;
32
+ expedite: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
33
+ call: import("../types.ts").ProvenCall | null;
34
+ }, import("zod").ZodObject<{
35
+ items: import("zod").ZodArray<import("zod").ZodString>;
36
+ reason: import("zod").ZodString;
37
+ expires: import("zod").ZodOptional<import("zod").ZodISODateTime>;
38
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
39
+ levers: import("zod").ZodArray<import("zod").ZodNumber>;
40
+ }, import("zod/v4/core").$strip>, {
41
+ NOT_FOUND: {
42
+ message: string;
43
+ data: import("zod").ZodObject<{
44
+ item: import("zod").ZodString;
45
+ }, import("zod/v4/core").$strip>;
46
+ };
47
+ }>;
48
+ unexpedite: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
49
+ call: import("../types.ts").ProvenCall | null;
50
+ }, import("zod").ZodObject<{
51
+ item: import("zod").ZodString;
52
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
53
+ lever: import("zod").ZodNumber;
54
+ }, import("zod/v4/core").$strip>, {
55
+ NOT_FOUND: {
56
+ message: string;
57
+ data: import("zod").ZodObject<{
58
+ item: import("zod").ZodString;
59
+ }, import("zod/v4/core").$strip>;
60
+ };
61
+ }>;
62
+ };
@@ -0,0 +1,10 @@
1
+ import type { ItemId, StoreReader } from '@boxxy/model';
2
+ import type { ServerDeps } from '../types.ts';
3
+ export type ItemIdsAnswer = {
4
+ readonly kind: 'found';
5
+ readonly items: ItemId[];
6
+ } | {
7
+ readonly kind: 'not-found';
8
+ readonly item: string;
9
+ };
10
+ export declare function readItemIds(tx: StoreReader, deps: ServerDeps, raw: readonly string[]): Promise<ItemIdsAnswer>;
@@ -0,0 +1,41 @@
1
+ export declare const relationHandlers: {
2
+ add: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
3
+ call: import("../types.ts").ProvenCall | null;
4
+ }, import("zod").ZodObject<{
5
+ source: import("zod").ZodString;
6
+ type: import("zod").ZodString;
7
+ target: import("zod").ZodString;
8
+ }, import("zod/v4/core").$strip>, import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
9
+ kind: import("zod").ZodLiteral<"added">;
10
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
11
+ kind: import("zod").ZodLiteral<"refused">;
12
+ reason: import("zod").ZodEnum<{
13
+ cycle: "cycle";
14
+ exists: "exists";
15
+ "unknown-type": "unknown-type";
16
+ }>;
17
+ }, import("zod/v4/core").$strip>], "kind">, {
18
+ NOT_FOUND: {
19
+ message: string;
20
+ data: import("zod").ZodObject<{
21
+ item: import("zod").ZodString;
22
+ }, import("zod/v4/core").$strip>;
23
+ };
24
+ }>;
25
+ remove: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
26
+ call: import("../types.ts").ProvenCall | null;
27
+ }, import("zod").ZodObject<{
28
+ source: import("zod").ZodString;
29
+ type: import("zod").ZodString;
30
+ target: import("zod").ZodString;
31
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
32
+ removed: import("zod").ZodBoolean;
33
+ }, import("zod/v4/core").$strip>, {
34
+ NOT_FOUND: {
35
+ message: string;
36
+ data: import("zod").ZodObject<{
37
+ item: import("zod").ZodString;
38
+ }, import("zod/v4/core").$strip>;
39
+ };
40
+ }>;
41
+ };
@@ -0,0 +1,102 @@
1
+ export declare const reportHandlers: {
2
+ cost: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
3
+ call: import("../types.ts").ProvenCall | null;
4
+ }, import("zod").ZodObject<{
5
+ item: import("zod").ZodString;
6
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
7
+ landedAt: import("zod").ZodNullable<import("zod").ZodString>;
8
+ attempts: import("zod").ZodNumber;
9
+ lines: import("zod").ZodArray<import("zod").ZodObject<{
10
+ phase: import("zod").ZodString;
11
+ rework: import("zod").ZodBoolean;
12
+ product: import("zod").ZodString;
13
+ model: import("zod").ZodNullable<import("zod").ZodString>;
14
+ requests: import("zod").ZodNumber;
15
+ inputTokens: import("zod").ZodNumber;
16
+ cacheReadTokens: import("zod").ZodNumber;
17
+ cacheCreationTokens: import("zod").ZodNumber;
18
+ outputTokens: import("zod").ZodNumber;
19
+ costUSD: import("zod").ZodNullable<import("zod").ZodNumber>;
20
+ costBasis: import("zod").ZodEnum<{
21
+ none: "none";
22
+ reported: "reported";
23
+ turn: "turn";
24
+ }>;
25
+ }, import("zod/v4/core").$strip>>;
26
+ totals: import("zod").ZodObject<{
27
+ requests: import("zod").ZodNumber;
28
+ costUSD: import("zod").ZodNumber;
29
+ reworkCostUSD: import("zod").ZodNumber;
30
+ requestsWithoutCost: import("zod").ZodNumber;
31
+ }, import("zod/v4/core").$strip>;
32
+ item: import("zod").ZodString;
33
+ behind: import("zod").ZodObject<{
34
+ facts: import("zod").ZodNumber;
35
+ oldestAt: import("zod").ZodNullable<import("zod").ZodNumber>;
36
+ }, import("zod/v4/core").$strip>;
37
+ }, import("zod/v4/core").$strip>, {
38
+ NOT_FOUND: {
39
+ message: string;
40
+ data: import("zod").ZodObject<{
41
+ item: import("zod").ZodString;
42
+ }, import("zod/v4/core").$strip>;
43
+ };
44
+ PEPYS_NOT_CONFIGURED: {
45
+ message: string;
46
+ };
47
+ PEPYS_UNAVAILABLE: {
48
+ message: string;
49
+ data: import("zod").ZodObject<{
50
+ reason: import("zod").ZodString;
51
+ }, import("zod/v4/core").$strip>;
52
+ };
53
+ }>;
54
+ stageTimes: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
55
+ call: import("../types.ts").ProvenCall | null;
56
+ }, import("zod").ZodObject<{
57
+ item: import("zod").ZodString;
58
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
59
+ environment: import("zod").ZodString;
60
+ steps: import("zod").ZodArray<import("zod").ZodObject<{
61
+ step: import("zod").ZodEnum<{
62
+ build: "build";
63
+ deploy: "deploy";
64
+ design: "design";
65
+ merge: "merge";
66
+ release: "release";
67
+ review: "review";
68
+ triage: "triage";
69
+ }>;
70
+ minutes: import("zod").ZodNullable<import("zod").ZodNumber>;
71
+ endedAt: import("zod").ZodNullable<import("zod").ZodString>;
72
+ }, import("zod/v4/core").$strip>>;
73
+ rework: import("zod").ZodObject<{
74
+ count: import("zod").ZodNumber;
75
+ minutes: import("zod").ZodNumber;
76
+ }, import("zod/v4/core").$strip>;
77
+ reviewWaitMinutes: import("zod").ZodNullable<import("zod").ZodNumber>;
78
+ sleepMinutes: import("zod").ZodNumber;
79
+ pullRequests: import("zod").ZodArray<import("zod").ZodString>;
80
+ item: import("zod").ZodString;
81
+ behind: import("zod").ZodObject<{
82
+ facts: import("zod").ZodNumber;
83
+ oldestAt: import("zod").ZodNullable<import("zod").ZodNumber>;
84
+ }, import("zod/v4/core").$strip>;
85
+ }, import("zod/v4/core").$strip>, {
86
+ NOT_FOUND: {
87
+ message: string;
88
+ data: import("zod").ZodObject<{
89
+ item: import("zod").ZodString;
90
+ }, import("zod/v4/core").$strip>;
91
+ };
92
+ PEPYS_NOT_CONFIGURED: {
93
+ message: string;
94
+ };
95
+ PEPYS_UNAVAILABLE: {
96
+ message: string;
97
+ data: import("zod").ZodObject<{
98
+ reason: import("zod").ZodString;
99
+ }, import("zod/v4/core").$strip>;
100
+ };
101
+ }>;
102
+ };
@@ -0,0 +1,20 @@
1
+ export declare const rulesHandlers: {
2
+ dryRun: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
3
+ call: import("../types.ts").ProvenCall | null;
4
+ }, import("zod").ZodObject<{
5
+ rules: import("zod").ZodString;
6
+ }, import("zod/v4/core").$strip>, import("zod").ZodDiscriminatedUnion<[import("zod").ZodObject<{
7
+ kind: import("zod").ZodLiteral<"loaded">;
8
+ version: import("zod").ZodString;
9
+ moved: import("zod").ZodNumber;
10
+ items: import("zod").ZodArray<import("zod").ZodObject<{
11
+ item: import("zod").ZodString;
12
+ now: import("zod").ZodType<import("@boxxy/model").Position, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").Position, unknown>>;
13
+ then: import("zod").ZodType<import("@boxxy/model").Position, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").Position, unknown>>;
14
+ moved: import("zod").ZodBoolean;
15
+ }, import("zod/v4/core").$strip>>;
16
+ }, import("zod/v4/core").$strip>, import("zod").ZodObject<{
17
+ kind: import("zod").ZodLiteral<"rejected">;
18
+ rejections: import("zod").ZodArray<import("zod").ZodType<import("@boxxy/model").LoadRejection, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").LoadRejection, unknown>>>;
19
+ }, import("zod/v4/core").$strip>], "kind">, Record<never, never>>;
20
+ };
@@ -0,0 +1,65 @@
1
+ import type { AttemptRow } from '@boxxy/model';
2
+ export declare const runnerHandlers: {
3
+ status: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
4
+ call: import("../types.ts").ProvenCall | null;
5
+ }, import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
6
+ paused: import("zod").ZodBoolean;
7
+ limits: import("zod").ZodArray<import("zod").ZodType<import("@boxxy/model").LimitFill, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").LimitFill, unknown>>>;
8
+ attempts: import("zod").ZodArray<import("zod").ZodObject<{
9
+ attempt: import("zod").ZodType<AttemptRow, unknown, import("zod/v4/core").$ZodTypeInternals<AttemptRow, unknown>>;
10
+ title: import("zod").ZodString;
11
+ waitingSince: import("zod").ZodNullable<import("zod").ZodNumber>;
12
+ }, import("zod/v4/core").$strip>>;
13
+ strays: import("zod").ZodArray<import("zod").ZodType<AttemptRow, unknown, import("zod/v4/core").$ZodTypeInternals<AttemptRow, unknown>>>;
14
+ notices: import("zod").ZodObject<{
15
+ unsent: import("zod").ZodNumber;
16
+ }, import("zod/v4/core").$strip>;
17
+ outbox: import("zod").ZodObject<{
18
+ sink: import("zod").ZodEnum<{
19
+ none: "none";
20
+ pepys: "pepys";
21
+ }>;
22
+ state: import("zod").ZodEnum<{
23
+ "backing-off": "backing-off";
24
+ blocked: "blocked";
25
+ idle: "idle";
26
+ off: "off";
27
+ sending: "sending";
28
+ }>;
29
+ unsent: import("zod").ZodNumber;
30
+ parked: import("zod").ZodNumber;
31
+ lag: import("zod").ZodNullable<import("zod").ZodNumber>;
32
+ failingSince: import("zod").ZodNullable<import("zod").ZodNumber>;
33
+ nextTryAt: import("zod").ZodNullable<import("zod").ZodNumber>;
34
+ lastError: import("zod").ZodNullable<import("zod").ZodObject<{
35
+ kind: import("zod").ZodEnum<{
36
+ "refused-batch": "refused-batch";
37
+ "refused-sink": "refused-sink";
38
+ retry: "retry";
39
+ }>;
40
+ status: import("zod").ZodNullable<import("zod").ZodNumber>;
41
+ message: import("zod").ZodString;
42
+ at: import("zod").ZodNumber;
43
+ }, import("zod/v4/core").$strip>>;
44
+ lastStoredAt: import("zod").ZodNullable<import("zod").ZodNumber>;
45
+ }, import("zod/v4/core").$strip>;
46
+ rules: import("zod").ZodObject<{
47
+ version: import("zod").ZodString;
48
+ commit: import("zod").ZodString;
49
+ lastRejected: import("zod").ZodNullable<import("zod").ZodObject<{
50
+ commit: import("zod").ZodString;
51
+ rejections: import("zod").ZodArray<import("zod").ZodType<import("@boxxy/model").LoadRejection, unknown, import("zod/v4/core").$ZodTypeInternals<import("@boxxy/model").LoadRejection, unknown>>>;
52
+ }, import("zod/v4/core").$strip>>;
53
+ }, import("zod/v4/core").$strip>;
54
+ }, import("zod/v4/core").$strip>, Record<never, never>>;
55
+ pause: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
56
+ call: import("../types.ts").ProvenCall | null;
57
+ }, import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
58
+ paused: import("zod").ZodLiteral<true>;
59
+ }, import("zod/v4/core").$strip>, Record<never, never>>;
60
+ resume: import("@orpc/server").ImplementedProcedure<import("../types.ts").RequestContext & object, {
61
+ call: import("../types.ts").ProvenCall | null;
62
+ }, import("zod").ZodObject<{}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
63
+ paused: import("zod").ZodLiteral<false>;
64
+ }, import("zod/v4/core").$strip>, Record<never, never>>;
65
+ };
@@ -0,0 +1,5 @@
1
+ import type { JsonValue } from '@boxxy/model';
2
+ export type WireJSON = null | boolean | number | string | WireJSON[] | {
3
+ [key: string]: WireJSON;
4
+ };
5
+ export declare function toWireJSON(value: JsonValue): WireJSON;
@@ -0,0 +1,11 @@
1
+ import type { LeverRow } from '@boxxy/model';
2
+ import type { ServerDeps } from '../types.ts';
3
+ export type LeverDraft = Pick<LeverRow, 'kind' | 'until' | 'expiresAt' | 'reason' | 'phase'>;
4
+ export type LeverAnswer = {
5
+ readonly kind: 'recorded';
6
+ readonly levers: readonly number[];
7
+ } | {
8
+ readonly kind: 'not-found';
9
+ readonly item: string;
10
+ };
11
+ export declare function writeLevers(deps: ServerDeps, items: readonly string[], draft: LeverDraft): Promise<LeverAnswer>;