stitchkit 0.59.0 → 0.59.2
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/README.md +44 -4
- package/dist/agent-runtime/runtime.d.ts.map +1 -1
- package/dist/agent-runtime/terminal-commit.d.ts +102 -0
- package/dist/agent-runtime/terminal-commit.d.ts.map +1 -0
- package/dist/agent-runtime.js +143 -46
- package/dist/application/activity.d.ts +70 -0
- package/dist/application/activity.d.ts.map +1 -0
- package/dist/application/events.d.ts +65 -0
- package/dist/application/events.d.ts.map +1 -0
- package/dist/application/grammy.d.ts +35 -0
- package/dist/application/grammy.d.ts.map +1 -0
- package/dist/application/graph.d.ts +11 -0
- package/dist/application/graph.d.ts.map +1 -0
- package/dist/application/health.d.ts +13 -0
- package/dist/application/health.d.ts.map +1 -0
- package/dist/application/kernel.d.ts +31 -0
- package/dist/application/kernel.d.ts.map +1 -0
- package/dist/application/latest-sink.d.ts +39 -0
- package/dist/application/latest-sink.d.ts.map +1 -0
- package/dist/application/resource.d.ts +30 -0
- package/dist/application/resource.d.ts.map +1 -0
- package/dist/application/schedule.d.ts +112 -0
- package/dist/application/schedule.d.ts.map +1 -0
- package/dist/application/schemas.d.ts +160 -0
- package/dist/application/schemas.d.ts.map +1 -0
- package/dist/application/server-resource.d.ts +12 -0
- package/dist/application/server-resource.d.ts.map +1 -0
- package/dist/application-grammy.d.ts +2 -0
- package/dist/application-grammy.d.ts.map +1 -0
- package/dist/application-grammy.js +165 -0
- package/dist/application.d.ts +10 -0
- package/dist/application.d.ts.map +1 -0
- package/dist/application.js +1370 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/{index-zk5zn2nh.js → index-3nwng7hs.js} +287 -38
- package/dist/index-dk6e56g0.js +211 -0
- package/dist/{index-9zn9fb4e.js → index-he4psyve.js} +6 -213
- package/dist/index-yr276yz0.js +6 -0
- package/dist/internal/fetch-port.d.ts +2 -0
- package/dist/internal/fetch-port.d.ts.map +1 -0
- package/dist/node.js +115 -13
- package/dist/server/index.js +8 -6
- package/dist/server/node.d.ts.map +1 -1
- package/dist/server/process-signals.d.ts +10 -8
- package/dist/server/process-signals.d.ts.map +1 -1
- package/dist/tools/cli-args.d.ts +16 -0
- package/dist/tools/cli-args.d.ts.map +1 -1
- package/dist/tools/cli-command.d.ts +16 -0
- package/dist/tools/cli-command.d.ts.map +1 -1
- package/dist/tools/cli-policy.d.ts +22 -0
- package/dist/tools/cli-policy.d.ts.map +1 -0
- package/dist/tools/cli.d.ts +2 -1
- package/dist/tools/cli.d.ts.map +1 -1
- package/dist/tools.d.ts +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +1 -1
- package/llms-full.txt +471 -14
- package/llms.txt +1 -0
- package/package.json +15 -2
package/README.md
CHANGED
|
@@ -86,13 +86,50 @@ import { createServer, createHandler, implement } from 'stitchkit/server'
|
|
|
86
86
|
import { createSocketIOServer, createAuthHook } from 'stitchkit/server'
|
|
87
87
|
import { createMcpHandler, mountAgent } from 'stitchkit/tools'
|
|
88
88
|
import { createAgentRuntime, defineAgentProtocol } from 'stitchkit/agent-runtime'
|
|
89
|
+
import { createApplication, defineManagedResource } from 'stitchkit/application'
|
|
89
90
|
import { implementRemote } from 'stitchkit/remote'
|
|
90
91
|
```
|
|
91
92
|
|
|
92
|
-
The root `stitchkit` entrypoint is browser-safe. Server, tool, optional
|
|
93
|
-
AI-SDK-backed agent-runtime and peer-free remote-proxy code live
|
|
94
|
-
`stitchkit/server`, `stitchkit/tools`, `stitchkit/
|
|
95
|
-
`stitchkit/remote` respectively.
|
|
93
|
+
The root `stitchkit` entrypoint is browser-safe. Server, tool, optional managed
|
|
94
|
+
application, AI-SDK-backed agent-runtime and peer-free remote-proxy code live
|
|
95
|
+
behind `stitchkit/server`, `stitchkit/tools`, `stitchkit/application`,
|
|
96
|
+
`stitchkit/agent-runtime` and `stitchkit/remote` respectively. Optional provider
|
|
97
|
+
adapters are isolated further; importing `stitchkit/application` never resolves
|
|
98
|
+
grammY.
|
|
99
|
+
|
|
100
|
+
## Managed application kernel
|
|
101
|
+
|
|
102
|
+
Use [`stitchkit/application`](./docs/guide/application-kernel.md) when several
|
|
103
|
+
process-local resources must start, become ready, drain and stop as one
|
|
104
|
+
application:
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
import {
|
|
108
|
+
createApplication,
|
|
109
|
+
createManagedSchedule,
|
|
110
|
+
managedServerResource,
|
|
111
|
+
} from 'stitchkit/application'
|
|
112
|
+
import { bindProcessSignals } from 'stitchkit/server'
|
|
113
|
+
|
|
114
|
+
const app = createApplication({
|
|
115
|
+
id: 'service',
|
|
116
|
+
resources: [
|
|
117
|
+
managedServerResource({ id: 'http', server }),
|
|
118
|
+
createManagedSchedule({
|
|
119
|
+
id: 'cleanup',
|
|
120
|
+
everyMs: 60_000,
|
|
121
|
+
run: ({ signal }) => removeExpiredRecords(signal),
|
|
122
|
+
}),
|
|
123
|
+
],
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
bindProcessSignals(app)
|
|
127
|
+
await app.start()
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
The kernel owns dependency ordering, attempted-start rollback, readiness,
|
|
131
|
+
process-local admission, ephemeral schedules and bounded shutdown. It does not
|
|
132
|
+
own durable jobs, provider policy, retries, process restart or deployment.
|
|
96
133
|
|
|
97
134
|
## Quick Start
|
|
98
135
|
|
|
@@ -290,6 +327,7 @@ import { parseSSE } from 'stitchkit' // client: Response → AsyncGene
|
|
|
290
327
|
| **MCP Tools** | `createMcpHandler()` / `mountMcp()` — MCP tools from contracts |
|
|
291
328
|
| **Agent Tools** | `mountAgent()` — Vercel AI SDK tools from contracts |
|
|
292
329
|
| **Agent Runtime** | `createAgentRuntime()` — optional durable history, stream loop, coordination and fencing |
|
|
330
|
+
| **Application Kernel** | `createApplication()` — optional process-local resources, readiness, schedules and bounded shutdown |
|
|
293
331
|
| **Typed Client** | `createClient()` / `createClients()` — typed fetch from contracts |
|
|
294
332
|
| **Cursor Pagination** | `createCursorQuery()` — `react-query-kit` infinite query from a contract method |
|
|
295
333
|
| **WebSocket** | `createSocketIOClient()` / `createSocketIOServer()` — typed Socket.IO wrappers |
|
|
@@ -377,6 +415,7 @@ peer — an install pulls in only what the project actually uses.
|
|
|
377
415
|
| `@modelcontextprotocol/ext-apps` | peer, optional | Only MCP Apps (`ui://` resources and UI metadata). |
|
|
378
416
|
| `ai` | peer, optional | `stitchkit/tools` agent tools and the optional server-only `stitchkit/agent-runtime`. |
|
|
379
417
|
| `@openrouter/ai-sdk-provider` | peer, optional | Only `stitchkit/agent-runtime/openrouter`; neutral runtime imports do not resolve it. |
|
|
418
|
+
| `grammy` | peer, optional | Only `stitchkit/application/grammy`; the neutral application kernel does not resolve it. |
|
|
380
419
|
| `@tanstack/react-query` + `react-query-kit` | peer, optional | Only `stitchkit/react` — `createCursorQuery`, `createCacheBridge`. |
|
|
381
420
|
| `socket.io` / `@socket.io/bun-engine` / `socket.io-client` | peer, optional | Only the Socket.IO wrappers. |
|
|
382
421
|
|
|
@@ -413,6 +452,7 @@ The full guide and API reference, in [`docs/`](./docs/README.md):
|
|
|
413
452
|
[HTTP server](./docs/guide/server.md) ·
|
|
414
453
|
[typed client](./docs/guide/client.md) ·
|
|
415
454
|
[MCP & agents](./docs/guide/mcp-and-agents.md) ·
|
|
455
|
+
[application kernel](./docs/guide/application-kernel.md) ·
|
|
416
456
|
[realtime](./docs/guide/realtime.md) ·
|
|
417
457
|
[auth & errors](./docs/guide/auth-and-errors.md) ·
|
|
418
458
|
[testing & deployment](./docs/guide/testing-and-deployment.md) ·
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAElB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAGlB,KAAK,OAAO,EACb,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EAErB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAE3B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,KAAK,6BAA6B,EAAuB,MAAM,WAAW,CAAC;AAEpF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EACL,KAAK,yBAAyB,EAE9B,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAGrB,KAAK,QAAQ,EACb,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAEzB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { type AgentMessage, type AgentRun, type AgentSnapshot, type AgentTerminalReason } from './schemas';
|
|
2
|
+
import type { AgentRuntimeStore, AgentStoreMutationResult } from './store';
|
|
3
|
+
export declare class AgentRuntimeConflictError extends Error {
|
|
4
|
+
constructor(operation: string);
|
|
5
|
+
}
|
|
6
|
+
export declare function appliedSnapshot(result: AgentStoreMutationResult, operation: string): {
|
|
7
|
+
schemaVersion: 1;
|
|
8
|
+
conversationId: string;
|
|
9
|
+
version: number;
|
|
10
|
+
messages: {
|
|
11
|
+
schemaVersion: 1;
|
|
12
|
+
id: string;
|
|
13
|
+
conversationId: string;
|
|
14
|
+
runId?: string | undefined;
|
|
15
|
+
role: "assistant" | "summary" | "system" | "user";
|
|
16
|
+
status: "committed" | "completed" | "failed" | "interrupted" | "streaming";
|
|
17
|
+
parts: ({
|
|
18
|
+
type: "text";
|
|
19
|
+
text: string;
|
|
20
|
+
} | {
|
|
21
|
+
type: "reasoning";
|
|
22
|
+
text: string;
|
|
23
|
+
provider?: {
|
|
24
|
+
schemaVersion: number;
|
|
25
|
+
provider: string;
|
|
26
|
+
data: Record<string, import("zod").JSONType>;
|
|
27
|
+
} | undefined;
|
|
28
|
+
} | {
|
|
29
|
+
type: "file";
|
|
30
|
+
mediaType: string;
|
|
31
|
+
reference: string;
|
|
32
|
+
filename?: string | undefined;
|
|
33
|
+
} | {
|
|
34
|
+
type: "source";
|
|
35
|
+
sourceId: string;
|
|
36
|
+
url?: string | undefined;
|
|
37
|
+
title?: string | undefined;
|
|
38
|
+
} | {
|
|
39
|
+
type: "tool-call";
|
|
40
|
+
callId: string;
|
|
41
|
+
toolName: string;
|
|
42
|
+
input: import("zod").JSONType;
|
|
43
|
+
provider?: {
|
|
44
|
+
schemaVersion: number;
|
|
45
|
+
provider: string;
|
|
46
|
+
data: Record<string, import("zod").JSONType>;
|
|
47
|
+
} | undefined;
|
|
48
|
+
} | {
|
|
49
|
+
type: "tool-result";
|
|
50
|
+
callId: string;
|
|
51
|
+
toolName: string;
|
|
52
|
+
outcome: "error" | "interrupted" | "success";
|
|
53
|
+
output?: import("zod").JSONType | undefined;
|
|
54
|
+
} | {
|
|
55
|
+
type: "provider";
|
|
56
|
+
envelope: {
|
|
57
|
+
schemaVersion: number;
|
|
58
|
+
provider: string;
|
|
59
|
+
data: Record<string, import("zod").JSONType>;
|
|
60
|
+
};
|
|
61
|
+
} | {
|
|
62
|
+
type: "control";
|
|
63
|
+
reason: "run-interrupted" | "stale-run";
|
|
64
|
+
})[];
|
|
65
|
+
metadata?: Record<string, import("zod").JSONType> | undefined;
|
|
66
|
+
createdAt: string;
|
|
67
|
+
updatedAt: string;
|
|
68
|
+
}[];
|
|
69
|
+
runs: {
|
|
70
|
+
schemaVersion: 1;
|
|
71
|
+
id: string;
|
|
72
|
+
conversationId: string;
|
|
73
|
+
inputMessageIds: string[];
|
|
74
|
+
assistantMessageId: string;
|
|
75
|
+
state: "abandoned" | "cancelled" | "completed" | "failed" | "interrupt_requested" | "interrupted" | "queued" | "running";
|
|
76
|
+
revision: number;
|
|
77
|
+
ownerId?: string | undefined;
|
|
78
|
+
fencingToken?: number | undefined;
|
|
79
|
+
terminalReason?: "abandoned" | "cancelled" | "interrupted" | "policy_stop" | "provider_failure" | "shutdown" | "success" | "timeout" | "tool_failure" | undefined;
|
|
80
|
+
terminalPolicyName?: string | undefined;
|
|
81
|
+
createdAt: string;
|
|
82
|
+
updatedAt: string;
|
|
83
|
+
}[];
|
|
84
|
+
};
|
|
85
|
+
interface TerminalCommitCandidate {
|
|
86
|
+
run: AgentRun;
|
|
87
|
+
assistant: AgentMessage;
|
|
88
|
+
reason: AgentTerminalReason;
|
|
89
|
+
policyName?: string;
|
|
90
|
+
}
|
|
91
|
+
export interface AgentTerminalCommitResolution extends TerminalCommitCandidate {
|
|
92
|
+
snapshot: AgentSnapshot;
|
|
93
|
+
committedByCaller: boolean;
|
|
94
|
+
}
|
|
95
|
+
export declare function commitAgentRunTerminal(input: {
|
|
96
|
+
store: AgentRuntimeStore;
|
|
97
|
+
runtimeEpoch: string;
|
|
98
|
+
candidate: TerminalCommitCandidate;
|
|
99
|
+
now: () => Date;
|
|
100
|
+
}): Promise<AgentTerminalCommitResolution>;
|
|
101
|
+
export {};
|
|
102
|
+
//# sourceMappingURL=terminal-commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-commit.d.ts","sourceRoot":"","sources":["../../src/agent-runtime/terminal-commit.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EAGjB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAE3E,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,YAAY,SAAS,EAAE,MAAM,EAG5B;CACF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAGlF;AAED,UAAU,uBAAuB;IAC/B,GAAG,EAAE,QAAQ,CAAC;IACd,SAAS,EAAE,YAAY,CAAC;IACxB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAUD,MAAM,WAAW,6BAA8B,SAAQ,uBAAuB;IAC5E,QAAQ,EAAE,aAAa,CAAC;IACxB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAuED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,KAAK,EAAE,iBAAiB,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,uBAAuB,CAAC;IACnC,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB,GAAG,OAAO,CAAC,6BAA6B,CAAC,CA4CzC"}
|
package/dist/agent-runtime.js
CHANGED
|
@@ -900,6 +900,8 @@ import {
|
|
|
900
900
|
streamText
|
|
901
901
|
} from "ai";
|
|
902
902
|
import { z as z5 } from "zod";
|
|
903
|
+
|
|
904
|
+
// src/agent-runtime/terminal-commit.ts
|
|
903
905
|
class AgentRuntimeConflictError extends Error {
|
|
904
906
|
constructor(operation) {
|
|
905
907
|
super(`Agent runtime store conflict during ${operation}`);
|
|
@@ -911,6 +913,94 @@ function appliedSnapshot(result, operation) {
|
|
|
911
913
|
return result.snapshot;
|
|
912
914
|
throw new AgentRuntimeConflictError(operation);
|
|
913
915
|
}
|
|
916
|
+
function terminalMessageStatus(reason) {
|
|
917
|
+
if (reason === "success" || reason === "policy_stop")
|
|
918
|
+
return "completed";
|
|
919
|
+
if (reason === "interrupted" || reason === "cancelled" || reason === "shutdown") {
|
|
920
|
+
return "interrupted";
|
|
921
|
+
}
|
|
922
|
+
return "failed";
|
|
923
|
+
}
|
|
924
|
+
function canonicalTerminal(snapshot, runId, retainedAssistant) {
|
|
925
|
+
const run = snapshot.runs.find((candidate) => candidate.id === runId);
|
|
926
|
+
if (!run?.terminalReason)
|
|
927
|
+
return;
|
|
928
|
+
const assistant = snapshot.messages.find((message) => message.id === run.assistantMessageId) ?? retainedAssistant;
|
|
929
|
+
if (snapshot.conversationId !== run.conversationId || !assistant || assistant.id !== run.assistantMessageId || assistant.conversationId !== run.conversationId || assistant.runId !== run.id || assistant.role !== "assistant" || assistant.status !== terminalMessageStatus(run.terminalReason)) {
|
|
930
|
+
throw new AgentRuntimeConflictError("terminal result projection");
|
|
931
|
+
}
|
|
932
|
+
return {
|
|
933
|
+
snapshot,
|
|
934
|
+
run,
|
|
935
|
+
assistant,
|
|
936
|
+
reason: run.terminalReason,
|
|
937
|
+
committedByCaller: false,
|
|
938
|
+
...run.terminalPolicyName && { policyName: run.terminalPolicyName }
|
|
939
|
+
};
|
|
940
|
+
}
|
|
941
|
+
function interruptedCandidate(candidate, run, now) {
|
|
942
|
+
const hasInterruptControl = candidate.assistant.parts.some((part) => part.type === "control" && part.reason === "run-interrupted");
|
|
943
|
+
const parts = hasInterruptControl ? candidate.assistant.parts : [
|
|
944
|
+
...candidate.assistant.parts,
|
|
945
|
+
AgentMessagePartSchema.parse({ type: "control", reason: "run-interrupted" })
|
|
946
|
+
];
|
|
947
|
+
return {
|
|
948
|
+
run,
|
|
949
|
+
assistant: AgentMessageSchema.parse({
|
|
950
|
+
...candidate.assistant,
|
|
951
|
+
status: "interrupted",
|
|
952
|
+
parts,
|
|
953
|
+
updatedAt: now().toISOString()
|
|
954
|
+
}),
|
|
955
|
+
reason: "interrupted"
|
|
956
|
+
};
|
|
957
|
+
}
|
|
958
|
+
function canRetryTerminal(current, previous, runtimeEpoch) {
|
|
959
|
+
return (current.state === "running" || current.state === "interrupt_requested") && current.ownerId === runtimeEpoch && current.fencingToken === previous.fencingToken;
|
|
960
|
+
}
|
|
961
|
+
async function commitAgentRunTerminal(input) {
|
|
962
|
+
let candidate = input.candidate;
|
|
963
|
+
while (true) {
|
|
964
|
+
const committed = await input.store.commitRunTerminal({
|
|
965
|
+
conversationId: candidate.run.conversationId,
|
|
966
|
+
runId: candidate.run.id,
|
|
967
|
+
expectedRevision: candidate.run.revision,
|
|
968
|
+
ownerId: input.runtimeEpoch,
|
|
969
|
+
...candidate.run.fencingToken !== undefined && {
|
|
970
|
+
fencingToken: candidate.run.fencingToken
|
|
971
|
+
},
|
|
972
|
+
assistant: candidate.assistant,
|
|
973
|
+
reason: candidate.reason,
|
|
974
|
+
...candidate.policyName && { policyName: candidate.policyName }
|
|
975
|
+
});
|
|
976
|
+
if (committed.outcome === "applied") {
|
|
977
|
+
const terminal2 = canonicalTerminal(committed.snapshot, candidate.run.id);
|
|
978
|
+
if (!terminal2)
|
|
979
|
+
throw new AgentRuntimeConflictError("terminal result projection");
|
|
980
|
+
return { ...terminal2, committedByCaller: true };
|
|
981
|
+
}
|
|
982
|
+
if (committed.outcome === "duplicate") {
|
|
983
|
+
const terminal2 = canonicalTerminal(committed.snapshot, candidate.run.id, committed.assistant);
|
|
984
|
+
if (!terminal2)
|
|
985
|
+
throw new AgentRuntimeConflictError("terminal result projection");
|
|
986
|
+
return terminal2;
|
|
987
|
+
}
|
|
988
|
+
if (committed.outcome !== "conflict") {
|
|
989
|
+
throw new AgentRuntimeConflictError("terminal commit");
|
|
990
|
+
}
|
|
991
|
+
const latest = await input.store.loadSnapshot(candidate.run.conversationId);
|
|
992
|
+
const terminal = canonicalTerminal(latest, candidate.run.id);
|
|
993
|
+
if (terminal)
|
|
994
|
+
return terminal;
|
|
995
|
+
const current = latest.runs.find((run) => run.id === candidate.run.id);
|
|
996
|
+
if (!current || !canRetryTerminal(current, candidate.run, input.runtimeEpoch)) {
|
|
997
|
+
throw new AgentRuntimeConflictError("terminal commit");
|
|
998
|
+
}
|
|
999
|
+
candidate = current.state === "interrupt_requested" ? interruptedCandidate(candidate, current, input.now) : { ...candidate, run: current };
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
|
|
1003
|
+
// src/agent-runtime/runtime.ts
|
|
914
1004
|
function findRun(runs, runId) {
|
|
915
1005
|
const run = runs.find((candidate) => candidate.id === runId);
|
|
916
1006
|
if (!run)
|
|
@@ -1547,59 +1637,66 @@ function createAgentRuntime(config) {
|
|
|
1547
1637
|
parts,
|
|
1548
1638
|
updatedAt: now().toISOString()
|
|
1549
1639
|
});
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1640
|
+
const terminal = await commitAgentRunTerminal({
|
|
1641
|
+
store: config.store,
|
|
1642
|
+
runtimeEpoch,
|
|
1643
|
+
candidate: {
|
|
1644
|
+
run,
|
|
1645
|
+
assistant,
|
|
1646
|
+
reason: terminalReason,
|
|
1647
|
+
...terminalPolicyName && { policyName: terminalPolicyName }
|
|
1648
|
+
},
|
|
1649
|
+
now
|
|
1650
|
+
});
|
|
1651
|
+
snapshot = terminal.snapshot;
|
|
1652
|
+
run = terminal.run;
|
|
1653
|
+
assistant = terminal.assistant;
|
|
1654
|
+
terminalReason = terminal.reason;
|
|
1655
|
+
terminalPolicyName = terminal.policyName;
|
|
1656
|
+
const terminalMetrics = terminal.committedByCaller ? {
|
|
1562
1657
|
partial: false,
|
|
1563
1658
|
durationMs: performance.now() - runStartedAt,
|
|
1564
1659
|
...usage && { usage },
|
|
1565
1660
|
...firstOutputAt !== undefined && { ttftMs: firstOutputAt - runStartedAt }
|
|
1566
|
-
};
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1661
|
+
} : undefined;
|
|
1662
|
+
if (terminalMetrics) {
|
|
1663
|
+
config.observe?.emit({
|
|
1664
|
+
schemaVersion: 1,
|
|
1665
|
+
eventId: agentDurableEventId("terminal", run.id, snapshot.version),
|
|
1666
|
+
type: "run-terminal",
|
|
1667
|
+
conversationId: run.conversationId,
|
|
1668
|
+
runId: run.id,
|
|
1669
|
+
traceId: trace?.traceId ?? generateId(),
|
|
1670
|
+
spanId: trace?.spanId ?? generateId(),
|
|
1671
|
+
...trace?.parentSpanId && { parentSpanId: trace.parentSpanId },
|
|
1672
|
+
state: run.state,
|
|
1673
|
+
terminalReason,
|
|
1674
|
+
...selectedModel && { modelId: selectedModel.descriptor.modelId },
|
|
1675
|
+
durationMs: terminalMetrics.durationMs,
|
|
1676
|
+
...usage && { usage },
|
|
1677
|
+
...internalCause !== undefined && { internalCause },
|
|
1678
|
+
...firstOutputAt !== undefined && { ttftMs: firstOutputAt - runStartedAt },
|
|
1679
|
+
emittedAt: now().toISOString()
|
|
1680
|
+
});
|
|
1681
|
+
await publish({
|
|
1682
|
+
type: "terminal",
|
|
1683
|
+
eventId: agentDurableEventId("terminal", run.id, snapshot.version),
|
|
1684
|
+
conversationId: run.conversationId,
|
|
1685
|
+
runId: run.id,
|
|
1686
|
+
snapshotVersion: snapshot.version,
|
|
1687
|
+
reason: terminalReason,
|
|
1688
|
+
...terminalPolicyName && { policyName: terminalPolicyName },
|
|
1689
|
+
message: assistant,
|
|
1690
|
+
metrics: terminalMetrics,
|
|
1691
|
+
emittedAt: now().toISOString()
|
|
1692
|
+
});
|
|
1693
|
+
}
|
|
1597
1694
|
return {
|
|
1598
1695
|
run,
|
|
1599
1696
|
message: assistant,
|
|
1600
1697
|
reason: terminalReason,
|
|
1601
1698
|
snapshotVersion: snapshot.version,
|
|
1602
|
-
metrics: terminalMetrics,
|
|
1699
|
+
...terminalMetrics && { metrics: terminalMetrics },
|
|
1603
1700
|
...terminalPolicyName && { policyName: terminalPolicyName }
|
|
1604
1701
|
};
|
|
1605
1702
|
};
|
|
@@ -2175,7 +2272,7 @@ function terminalState(reason) {
|
|
|
2175
2272
|
return "abandoned";
|
|
2176
2273
|
return "failed";
|
|
2177
2274
|
}
|
|
2178
|
-
function
|
|
2275
|
+
function terminalMessageStatus2(reason) {
|
|
2179
2276
|
if (reason === "success" || reason === "policy_stop")
|
|
2180
2277
|
return "completed";
|
|
2181
2278
|
if (reason === "interrupted" || reason === "cancelled" || reason === "shutdown") {
|
|
@@ -2343,7 +2440,7 @@ function reduceStore(current, operation) {
|
|
|
2343
2440
|
}
|
|
2344
2441
|
if (operation.type === "terminal" && run) {
|
|
2345
2442
|
const input = operation.input;
|
|
2346
|
-
if (run.revision !== input.expectedRevision || run.state !== "running" && run.state !== "interrupt_requested" || run.ownerId !== input.ownerId || input.fencingToken !== undefined && run.fencingToken !== input.fencingToken || input.assistant.runId !== run.id || input.assistant.id !== run.assistantMessageId || input.assistant.conversationId !== run.conversationId || input.assistant.role !== "assistant" || input.assistant.status !==
|
|
2443
|
+
if (run.revision !== input.expectedRevision || run.state !== "running" && run.state !== "interrupt_requested" || run.ownerId !== input.ownerId || input.fencingToken !== undefined && run.fencingToken !== input.fencingToken || input.assistant.runId !== run.id || input.assistant.id !== run.assistantMessageId || input.assistant.conversationId !== run.conversationId || input.assistant.role !== "assistant" || input.assistant.status !== terminalMessageStatus2(input.reason)) {
|
|
2347
2444
|
return conflict(run.revision);
|
|
2348
2445
|
}
|
|
2349
2446
|
const next = AgentRunSchema.parse({
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const ActivityIdSchema: z.ZodString;
|
|
3
|
+
export type ActivityId = z.infer<typeof ActivityIdSchema>;
|
|
4
|
+
export declare const ActivityStageIdSchema: z.ZodString;
|
|
5
|
+
export type ActivityStageId = z.infer<typeof ActivityStageIdSchema>;
|
|
6
|
+
export declare const ActivityStageSnapshotSchema: z.ZodReadonly<z.ZodObject<{
|
|
7
|
+
id: z.ZodString;
|
|
8
|
+
active: z.ZodNumber;
|
|
9
|
+
queued: z.ZodNumber;
|
|
10
|
+
completed: z.ZodNumber;
|
|
11
|
+
failed: z.ZodNumber;
|
|
12
|
+
}, z.core.$strict>>;
|
|
13
|
+
export type ActivityStageSnapshot = z.infer<typeof ActivityStageSnapshotSchema>;
|
|
14
|
+
export declare const ActivitySnapshotSchema: z.ZodReadonly<z.ZodObject<{
|
|
15
|
+
id: z.ZodString;
|
|
16
|
+
epoch: z.ZodString;
|
|
17
|
+
revision: z.ZodNumber;
|
|
18
|
+
capturedAt: z.ZodString;
|
|
19
|
+
changedAt: z.ZodString;
|
|
20
|
+
stages: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
|
|
21
|
+
id: z.ZodString;
|
|
22
|
+
active: z.ZodNumber;
|
|
23
|
+
queued: z.ZodNumber;
|
|
24
|
+
completed: z.ZodNumber;
|
|
25
|
+
failed: z.ZodNumber;
|
|
26
|
+
}, z.core.$strict>>>>;
|
|
27
|
+
totals: z.ZodReadonly<z.ZodObject<{
|
|
28
|
+
active: z.ZodNumber;
|
|
29
|
+
queued: z.ZodNumber;
|
|
30
|
+
completed: z.ZodNumber;
|
|
31
|
+
failed: z.ZodNumber;
|
|
32
|
+
}, z.core.$strict>>;
|
|
33
|
+
}, z.core.$strict>>;
|
|
34
|
+
export type ActivitySnapshot = z.infer<typeof ActivitySnapshotSchema>;
|
|
35
|
+
export declare const ActivityLiveStateSchema: z.ZodEnum<{
|
|
36
|
+
active: "active";
|
|
37
|
+
queued: "queued";
|
|
38
|
+
}>;
|
|
39
|
+
export type ActivityLiveState = z.infer<typeof ActivityLiveStateSchema>;
|
|
40
|
+
declare const ActivityTokenBrand: unique symbol;
|
|
41
|
+
export interface ActivityToken {
|
|
42
|
+
readonly [ActivityTokenBrand]: true;
|
|
43
|
+
}
|
|
44
|
+
export interface ActivityTransition<TStage extends string> {
|
|
45
|
+
readonly stage: TStage;
|
|
46
|
+
readonly state: ActivityLiveState;
|
|
47
|
+
}
|
|
48
|
+
export interface ActivityProjectionSubscriberError {
|
|
49
|
+
readonly error: unknown;
|
|
50
|
+
readonly snapshot: ActivitySnapshot;
|
|
51
|
+
}
|
|
52
|
+
export interface ActivityProjectionConfig<TStages extends readonly string[]> {
|
|
53
|
+
readonly id: string;
|
|
54
|
+
readonly stages: TStages;
|
|
55
|
+
readonly epoch?: string;
|
|
56
|
+
now?: () => Date;
|
|
57
|
+
onSubscriberError?(failure: ActivityProjectionSubscriberError): void | Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
export interface ActivityProjection<TStage extends string> {
|
|
60
|
+
open(stage: TStage, state?: ActivityLiveState): ActivityToken;
|
|
61
|
+
transition(token: ActivityToken, transition: ActivityTransition<TStage>): boolean;
|
|
62
|
+
complete(token: ActivityToken): boolean;
|
|
63
|
+
fail(token: ActivityToken): boolean;
|
|
64
|
+
getSnapshot(): ActivitySnapshot;
|
|
65
|
+
/** Replay the current absolute value, then deliver coalesced newer revisions. */
|
|
66
|
+
subscribe(listener: (snapshot: ActivitySnapshot) => void | Promise<void>): () => void;
|
|
67
|
+
}
|
|
68
|
+
export declare function createActivityProjection<const TStages extends readonly string[]>(config: ActivityProjectionConfig<TStages>): ActivityProjection<TStages[number]>;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/application/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAUxB,eAAO,MAAM,gBAAgB,aAA6B,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC1D,eAAO,MAAM,qBAAqB,aAA6B,CAAC;AAChE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,2BAA2B;;;;;;mBAS3B,CAAC;AACd,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAYhF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;mBAWtB,CAAC;AACd,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,uBAAuB;;;EAA+B,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,QAAA,MAAM,kBAAkB,EAAE,OAAO,MAAiD,CAAC;AACnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB,CAAC,OAAO,SAAS,SAAS,MAAM,EAAE;IACzE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,iBAAiB,CAAC,CAAC,OAAO,EAAE,iCAAiC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,kBAAkB,CAAC,MAAM,SAAS,MAAM;IACvD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,iBAAiB,GAAG,aAAa,CAAC;IAC9D,UAAU,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;IAClF,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IACpC,WAAW,IAAI,gBAAgB,CAAC;IAChC,iFAAiF;IACjF,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;CACvF;AA8BD,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,MAAM,EAAE,EAC9E,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,GACxC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAoHrC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ObservabilitySinkStatus } from '../observability/status';
|
|
3
|
+
import { type ApplicationSnapshot } from './schemas';
|
|
4
|
+
export declare const ApplicationLifecycleEventSchema: z.ZodReadonly<z.ZodObject<{
|
|
5
|
+
type: z.ZodLiteral<"application-state">;
|
|
6
|
+
applicationId: z.ZodString;
|
|
7
|
+
epoch: z.ZodString;
|
|
8
|
+
revision: z.ZodNumber;
|
|
9
|
+
lifecycle: z.ZodEnum<{
|
|
10
|
+
created: "created";
|
|
11
|
+
draining: "draining";
|
|
12
|
+
failed: "failed";
|
|
13
|
+
ready: "ready";
|
|
14
|
+
starting: "starting";
|
|
15
|
+
stopped: "stopped";
|
|
16
|
+
stopping: "stopping";
|
|
17
|
+
}>;
|
|
18
|
+
health: z.ZodEnum<{
|
|
19
|
+
degraded: "degraded";
|
|
20
|
+
healthy: "healthy";
|
|
21
|
+
unhealthy: "unhealthy";
|
|
22
|
+
unknown: "unknown";
|
|
23
|
+
}>;
|
|
24
|
+
ready: z.ZodBoolean;
|
|
25
|
+
capturedAt: z.ZodString;
|
|
26
|
+
resources: z.ZodReadonly<z.ZodArray<z.ZodReadonly<z.ZodObject<{
|
|
27
|
+
id: z.ZodString;
|
|
28
|
+
required: z.ZodBoolean;
|
|
29
|
+
dependsOn: z.ZodReadonly<z.ZodArray<z.ZodString>>;
|
|
30
|
+
state: z.ZodEnum<{
|
|
31
|
+
failed: "failed";
|
|
32
|
+
ready: "ready";
|
|
33
|
+
registered: "registered";
|
|
34
|
+
starting: "starting";
|
|
35
|
+
stopped: "stopped";
|
|
36
|
+
stopping: "stopping";
|
|
37
|
+
}>;
|
|
38
|
+
health: z.ZodEnum<{
|
|
39
|
+
degraded: "degraded";
|
|
40
|
+
healthy: "healthy";
|
|
41
|
+
unhealthy: "unhealthy";
|
|
42
|
+
unknown: "unknown";
|
|
43
|
+
}>;
|
|
44
|
+
ready: z.ZodBoolean;
|
|
45
|
+
}, z.core.$strip>>>>;
|
|
46
|
+
}, z.core.$strict>>;
|
|
47
|
+
export type ApplicationLifecycleEvent = z.infer<typeof ApplicationLifecycleEventSchema>;
|
|
48
|
+
export declare function applicationLifecycleEvent(snapshot: ApplicationSnapshot): ApplicationLifecycleEvent;
|
|
49
|
+
export interface ApplicationEventSinkConfig {
|
|
50
|
+
write(event: ApplicationLifecycleEvent): void | Promise<void>;
|
|
51
|
+
maxPending?: number;
|
|
52
|
+
onSinkError?(failure: {
|
|
53
|
+
error: unknown;
|
|
54
|
+
event?: ApplicationLifecycleEvent;
|
|
55
|
+
}): void | Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
export interface ApplicationEventSink {
|
|
58
|
+
publish(snapshot: ApplicationSnapshot): void;
|
|
59
|
+
flush(): Promise<void>;
|
|
60
|
+
getStatus(): ObservabilitySinkStatus;
|
|
61
|
+
close(): Promise<ObservabilitySinkStatus>;
|
|
62
|
+
}
|
|
63
|
+
/** Failure-isolated operator event delivery; canonical truth remains the absolute snapshot. */
|
|
64
|
+
export declare function createApplicationEventSink(config: ApplicationEventSinkConfig): ApplicationEventSink;
|
|
65
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/application/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAIL,KAAK,mBAAmB,EAEzB,MAAM,WAAW,CAAC;AAEnB,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAa/B,CAAC;AACd,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,mBAAmB,GAC5B,yBAAyB,CAY3B;AAED,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,KAAK,EAAE,yBAAyB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,CAAC,OAAO,EAAE;QACpB,KAAK,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,yBAAyB,CAAC;KACnC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,QAAQ,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,SAAS,IAAI,uBAAuB,CAAC;IACrC,KAAK,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC3C;AAED,+FAA+F;AAC/F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,0BAA0B,GACjC,oBAAoB,CActB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Bot, Context, type PollingOptions, type WebhookReplyEnvelope } from 'grammy';
|
|
2
|
+
import { type ManagedResource } from './resource';
|
|
3
|
+
export interface GrammyPollingResourceConfig<C extends Context> {
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly bot: Bot<C>;
|
|
6
|
+
readonly dependsOn?: readonly string[];
|
|
7
|
+
readonly required?: boolean;
|
|
8
|
+
readonly polling?: Omit<PollingOptions, 'onStart'>;
|
|
9
|
+
readonly onStart?: PollingOptions['onStart'];
|
|
10
|
+
readonly onError?: (error: unknown) => void | Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
/** Thin lifecycle adapter for grammY's built-in long polling. */
|
|
13
|
+
export declare function grammyPollingResource<C extends Context>(config: GrammyPollingResourceConfig<C>): ManagedResource;
|
|
14
|
+
export type GrammyUpdate<C extends Context = Context> = Parameters<Bot<C>['handleUpdate']>[0];
|
|
15
|
+
export interface GrammyWebhookResourceConfig<C extends Context> {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly bot: Bot<C>;
|
|
18
|
+
readonly dependsOn?: readonly string[];
|
|
19
|
+
readonly required?: boolean;
|
|
20
|
+
readonly onError?: (error: unknown) => void | Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
export interface GrammyWebhookResource<C extends Context> {
|
|
23
|
+
readonly resource: ManagedResource;
|
|
24
|
+
handleUpdate(update: GrammyUpdate<C>, webhookReplyEnvelope?: WebhookReplyEnvelope): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare class GrammyWebhookUnavailableError extends Error {
|
|
27
|
+
readonly code = "GRAMMY_WEBHOOK_NOT_ACCEPTING";
|
|
28
|
+
constructor();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a managed admission gate around an injected grammY webhook bot.
|
|
32
|
+
* HTTP parsing, webhook hosting and Telegram payload persistence remain outside Stitchkit.
|
|
33
|
+
*/
|
|
34
|
+
export declare function createGrammyWebhookResource<C extends Context>(config: GrammyWebhookResourceConfig<C>): GrammyWebhookResource<C>;
|
|
35
|
+
//# sourceMappingURL=grammy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grammy.d.ts","sourceRoot":"","sources":["../../src/application/grammy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC3F,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAMzE,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,OAAO;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACnD,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAcD,iEAAiE;AACjE,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,OAAO,EACrD,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACrC,eAAe,CAiEjB;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9F,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,OAAO;IAC5D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,SAAS,OAAO;IACtD,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,YAAY,CACV,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,QAAQ,CAAC,IAAI,kCAAkC;IAE/C,cAGC;CACF;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,CAAC,SAAS,OAAO,EAC3D,MAAM,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACrC,qBAAqB,CAAC,CAAC,CAAC,CAiE1B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ManagedResource } from './resource';
|
|
2
|
+
export interface ResolvedManagedResource {
|
|
3
|
+
readonly resource: ManagedResource;
|
|
4
|
+
readonly id: string;
|
|
5
|
+
readonly dependsOn: readonly string[];
|
|
6
|
+
readonly required: boolean;
|
|
7
|
+
readonly declarationIndex: number;
|
|
8
|
+
}
|
|
9
|
+
/** Validate the whole graph before any side effect and return stable topological order. */
|
|
10
|
+
export declare function resolveResourceGraph(resources: readonly ManagedResource[]): readonly ResolvedManagedResource[];
|
|
11
|
+
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/application/graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,eAAe,EAAE,GACpC,SAAS,uBAAuB,EAAE,CAkDpC"}
|