apps 0.0.1-beta.5 → 0.0.1-beta.54
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 +68 -44
- package/framework-reference.json +1 -1
- package/js/chunk-5FHWNLCI.js +88 -0
- package/js/{chunk-M3B3DE4K.js → chunk-74YVXBKY.js} +463 -218
- package/js/chunk-7UUHJR2Q.js +49 -0
- package/js/{chunk-CYYBFC2K.js → chunk-AQU56EPI.js} +9 -5
- package/js/chunk-CDXQDN7W.js +92 -0
- package/js/{chunk-UDDE5KOR.js → chunk-D45JTD6N.js} +148 -34
- package/js/{chunk-UK573G7W.js → chunk-EOPQ727L.js} +87 -51
- package/js/chunk-GDYPM7RS.js +266 -0
- package/js/{chunk-27F7W2LG.js → chunk-H2CJWXA3.js} +2 -2
- package/js/{chunk-JU7VHODU.js → chunk-H72MEDMN.js} +65 -10
- package/js/{chunk-CDL5PM2Q.js → chunk-IFJU5SYQ.js} +19082 -18402
- package/js/{chunk-RJDDBDSN.js → chunk-JM7LOD2W.js} +628 -85
- package/js/{chunk-VFZKSM3T.js → chunk-JPEUKEV4.js} +3 -3
- package/js/{chunk-DQAZTA4I.js → chunk-JY56GVSV.js} +1324 -209
- package/js/{chunk-FWQC6I3C.js → chunk-KGCTYL2S.js} +523 -63
- package/js/{chunk-KUMBKVJD.js → chunk-KLYSEHUD.js} +2 -2
- package/js/chunk-LTDHQJ2Z.js +171 -0
- package/js/chunk-MWKHKOTL.js +240 -0
- package/js/chunk-OD3KFKZD.js +1617 -0
- package/js/{chunk-57RKNWL2.js → chunk-PD6I2SDG.js} +4 -4
- package/js/chunk-PO5NPRFT.js +1885 -0
- package/js/chunk-QKHTRD6G.js +42 -0
- package/js/chunk-SVHI6AKV.js +729 -0
- package/js/{chunk-IJX4CYZO.js → chunk-TUMGL2OC.js} +228 -264
- package/js/{chunk-XHO2ZX6W.js → chunk-UM62MBJQ.js} +96 -41
- package/js/chunk-X5U5KIWQ.js +221 -0
- package/js/{chunk-IPI4MFSN.js → chunk-XBG7HHXC.js} +2 -2
- package/js/chunk-YQD2MLFY.js +340 -0
- package/js/client.js +142 -94
- package/js/contracts.js +123 -33
- package/js/effect.js +19 -21
- package/js/{es-APDZKREY.js → es-DIULA3ZF.js} +62 -1659
- package/js/graphql.js +63 -60
- package/js/host.js +83 -60
- package/js/index.js +262 -222
- package/js/mcp/effect.js +23 -23
- package/js/mcp/stdio.js +48 -40
- package/js/mcp.js +109 -72
- package/js/openapi.js +4129 -1419
- package/js/react.js +2 -3
- package/js/skills/effect.js +6 -3
- package/js/skills.js +208 -82
- package/js/storage/facet.js +1 -540
- package/js/ui/auth/contracts.js +2 -2
- package/js/ui/auth.js +5 -5
- package/js/ui/contracts.js +5 -4
- package/js/ui/serving.js +8517 -214
- package/package.json +2 -3
- package/runtime.json +1 -1
- package/types/app-cache/src/index.d.ts +10 -1
- package/types/apps/src/contracts/api-response-error.d.ts +4 -0
- package/types/apps/src/contracts/app.d.ts +9 -8
- package/types/apps/src/contracts/cache.d.ts +20 -0
- package/types/apps/src/contracts/context.d.ts +19 -11
- package/types/apps/src/contracts/elicitation.d.ts +6 -6
- package/types/apps/src/contracts/events.d.ts +93 -0
- package/types/apps/src/contracts/failure.d.ts +30 -1
- package/types/apps/src/contracts/graphql.d.ts +2 -1
- package/types/apps/src/contracts/host.d.ts +55 -16
- package/types/apps/src/contracts/live.d.ts +2 -0
- package/types/apps/src/contracts/mcp.d.ts +96 -10
- package/types/apps/src/contracts/network.d.ts +84 -0
- package/types/apps/src/contracts/openapi-compile.d.ts +32 -3
- package/types/apps/src/contracts/openapi.d.ts +45 -9
- package/types/apps/src/contracts/operations.d.ts +8 -9
- package/types/apps/src/contracts/protocol-version.d.ts +2 -2
- package/types/apps/src/contracts/protocols/1.d.ts +248 -73
- package/types/apps/src/contracts/protocols/10.d.ts +1450 -0
- package/types/apps/src/contracts/protocols/11.d.ts +1098 -0
- package/types/apps/src/contracts/protocols/2.d.ts +65 -23
- package/types/apps/src/contracts/protocols/3.d.ts +65 -26
- package/types/apps/src/contracts/protocols/4.d.ts +1297 -0
- package/types/apps/src/contracts/protocols/5.d.ts +1174 -0
- package/types/apps/src/contracts/protocols/6.d.ts +1620 -0
- package/types/apps/src/contracts/protocols/7.d.ts +1784 -0
- package/types/apps/src/contracts/protocols/8.d.ts +1130 -0
- package/types/apps/src/contracts/protocols/9.d.ts +1106 -0
- package/types/apps/src/contracts/protocols/oauth.d.ts +89 -0
- package/types/apps/src/contracts/provider-error.d.ts +9 -0
- package/types/apps/src/contracts/provider.d.ts +115 -10
- package/types/apps/src/contracts/router.d.ts +59 -0
- package/types/apps/src/contracts/skills.d.ts +50 -13
- package/types/apps/src/contracts/sql.d.ts +58 -0
- package/types/apps/src/contracts/ui.d.ts +19 -1
- package/types/apps/src/contracts/workflows.d.ts +6 -0
- package/types/apps/src/facet.d.ts +4 -5
- package/types/apps/src/graphql.d.ts +1 -3
- package/types/apps/src/host.d.ts +5 -0
- package/types/apps/src/implementation/account-router.d.ts +13 -0
- package/types/apps/src/implementation/app.d.ts +5 -4
- package/types/apps/src/implementation/authoring.d.ts +25 -5
- package/types/apps/src/implementation/browser-scripts.gen.d.ts +6 -0
- package/types/apps/src/implementation/cache.d.ts +4 -0
- package/types/apps/src/implementation/catalog-cache.d.ts +43 -5
- package/types/apps/src/implementation/elicitation.d.ts +18 -15
- package/types/apps/src/implementation/events.d.ts +59 -0
- package/types/apps/src/implementation/failure-detail.d.ts +25 -3
- package/types/apps/src/implementation/graphql-catalog.d.ts +4 -7
- package/types/apps/src/implementation/graphql.d.ts +4 -3
- package/types/apps/src/implementation/input-problems.d.ts +6 -2
- package/types/apps/src/implementation/invocation-timing.d.ts +16 -0
- package/types/apps/src/implementation/live.d.ts +2 -2
- package/types/apps/src/implementation/mcp-call.d.ts +6 -5
- package/types/apps/src/implementation/mcp-catalog.d.ts +7 -8
- package/types/apps/src/implementation/mcp-client.d.ts +49 -25
- package/types/apps/src/implementation/mcp-stdio.d.ts +1 -1
- package/types/apps/src/implementation/mcp-tools.d.ts +2 -1
- package/types/apps/src/implementation/mcp.d.ts +52 -25
- package/types/apps/src/implementation/network.d.ts +16 -0
- package/types/apps/src/implementation/openapi-compile.d.ts +27 -6
- package/types/apps/src/implementation/openapi-document.d.ts +46 -19
- package/types/apps/src/implementation/openapi-names.d.ts +9 -4
- package/types/apps/src/implementation/openapi-request.d.ts +10 -2
- package/types/apps/src/implementation/openapi-source.d.ts +8 -6
- package/types/apps/src/implementation/openapi-upgrade.d.ts +4 -0
- package/types/apps/src/implementation/operations.d.ts +43 -5
- package/types/apps/src/implementation/optimistic.d.ts +1 -1
- package/types/apps/src/implementation/protocol-operations.d.ts +6 -4
- package/types/apps/src/implementation/provider-error.d.ts +28 -1
- package/types/apps/src/implementation/provider.d.ts +19 -5
- package/types/apps/src/implementation/query-commit.d.ts +1 -1
- package/types/apps/src/implementation/router-catalog.d.ts +223 -0
- package/types/apps/src/implementation/router.d.ts +70 -0
- package/types/apps/src/implementation/runtime-yield.d.ts +7 -0
- package/types/apps/src/implementation/schema.d.ts +95 -11
- package/types/apps/src/implementation/skills.d.ts +18 -24
- package/types/apps/src/implementation/sql.d.ts +71 -0
- package/types/apps/src/implementation/ui-account-notice.d.ts +9 -0
- package/types/apps/src/implementation/ui-auth.d.ts +1 -1
- package/types/apps/src/implementation/ui-client.d.ts +2 -2
- package/types/apps/src/implementation/ui-document.d.ts +5 -0
- package/types/apps/src/implementation/ui-errors.d.ts +1 -1
- package/types/apps/src/implementation/ui-serving.d.ts +11 -5
- package/types/apps/src/implementation/ui-watch.d.ts +1 -1
- package/types/apps/src/implementation/upstream-error.d.ts +7 -0
- package/types/apps/src/implementation/workflow-context.d.ts +1 -1
- package/types/apps/src/implementation/workflows.d.ts +1 -1
- package/types/apps/src/index.d.ts +32 -13
- package/types/apps/src/mcp-stdio.d.ts +2 -5
- package/types/apps/src/mcp.d.ts +25 -5
- package/types/apps/src/openapi.d.ts +6 -6
- package/types/apps/src/react.d.ts +1 -1
- package/types/apps/src/skills.d.ts +10 -8
- package/types/telemetry/src/app-records.d.ts +42 -0
- package/types/telemetry/src/browser-operations.d.ts +7 -4
- package/types/telemetry/src/browser.d.ts +8 -3
- package/types/telemetry/src/config.d.ts +2 -2
- package/types/telemetry/src/index.d.ts +1 -0
- package/types/telemetry/src/layer.d.ts +2 -2
- package/types/telemetry/src/ownership.d.ts +56 -0
- package/types/telemetry/src/recorded-failure.d.ts +29 -0
- package/types/telemetry/src/relay.d.ts +2 -2
- package/types/telemetry/src/transport.d.ts +8 -1
- package/types/utils/src/api-error.d.ts +55 -0
- package/types/utils/src/connection-failure.d.ts +33 -0
- package/types/utils/src/recorded-message.d.ts +18 -0
- package/types/utils/src/user-facing-error.d.ts +83 -0
- package/js/chunk-3XKZDQLM.js +0 -93
- package/js/chunk-4M277YTM.js +0 -136
- package/js/chunk-67EVWIGJ.js +0 -224
- package/js/chunk-C3VAOK5B.js +0 -215
- package/js/chunk-G7T27IWB.js +0 -63
- package/js/chunk-LUVSFETN.js +0 -1347
- package/js/chunk-N7YDVXYJ.js +0 -186
- package/js/chunk-PJJ24GU7.js +0 -877
- package/js/chunk-PZB6T6KU.js +0 -19
- package/js/chunk-SB3V4YVR.js +0 -18
- package/js/chunk-TDNYXSIX.js +0 -29
- package/js/chunk-W4DMKWAB.js +0 -35
- package/js/chunk-YEPYT6SD.js +0 -85
- package/js/chunk-ZQINWV4W.js +0 -630
- package/types/app-data/src/implementation/cursor.d.ts +0 -10
- package/types/app-data/src/implementation/index-key.d.ts +0 -7
- package/types/app-data/src/implementation/promise.d.ts +0 -68
- package/types/app-data/src/implementation/range.d.ts +0 -8
- package/types/app-data/src/implementation/schema.d.ts +0 -18
- package/types/app-data/src/implementation/sqlite.d.ts +0 -11
- package/types/app-data/src/index.d.ts +0 -4
- package/types/apps/src/contracts/dynamic-tools.d.ts +0 -13
- package/types/apps/src/contracts/storage.d.ts +0 -68
- package/types/apps/src/implementation/account-operations.d.ts +0 -151
- package/types/apps/src/implementation/dynamic-tools.d.ts +0 -8
- package/types/apps/src/implementation/storage.d.ts +0 -15
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import {
|
|
2
|
+
declaredOperations,
|
|
3
|
+
nativeOperation,
|
|
4
|
+
nativeRouter
|
|
5
|
+
} from "./chunk-X5U5KIWQ.js";
|
|
6
|
+
import {
|
|
7
|
+
fromPromise,
|
|
8
|
+
method
|
|
9
|
+
} from "./chunk-LTDHQJ2Z.js";
|
|
10
|
+
import {
|
|
11
|
+
EmittedEvent,
|
|
12
|
+
EventName,
|
|
13
|
+
ScheduleTiming,
|
|
14
|
+
defaultEventLimits
|
|
15
|
+
} from "./chunk-JY56GVSV.js";
|
|
16
|
+
import {
|
|
17
|
+
decoderOf,
|
|
18
|
+
isSchema,
|
|
19
|
+
jsonSchemaDocument,
|
|
20
|
+
schemaArgument
|
|
21
|
+
} from "./chunk-KGCTYL2S.js";
|
|
22
|
+
import {
|
|
23
|
+
JsonValue
|
|
24
|
+
} from "./chunk-H2CJWXA3.js";
|
|
25
|
+
import {
|
|
26
|
+
Effect_exports,
|
|
27
|
+
Schema_exports
|
|
28
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
29
|
+
|
|
30
|
+
// src/contracts/http.ts
|
|
31
|
+
var ResponseStatusError = class extends Schema_exports.TaggedError()(
|
|
32
|
+
"ResponseStatusError",
|
|
33
|
+
{ status: Schema_exports.Number }
|
|
34
|
+
) {
|
|
35
|
+
get message() {
|
|
36
|
+
return `Request failed with status ${this.status}`;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var ResponseDecodeError = class extends Schema_exports.TaggedError()(
|
|
40
|
+
"ResponseDecodeError",
|
|
41
|
+
{}
|
|
42
|
+
) {
|
|
43
|
+
get message() {
|
|
44
|
+
return "Response body did not match the expected schema";
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// src/implementation/workflows.ts
|
|
49
|
+
var NativeWorkflow = /* @__PURE__ */ Symbol("apps.Workflow");
|
|
50
|
+
var workflow = (options, run) => ({
|
|
51
|
+
[NativeWorkflow]: {
|
|
52
|
+
input: decoderOf(schemaArgument(options.input, "The workflow input")),
|
|
53
|
+
...options.output === void 0 ? {} : { output: decoderOf(schemaArgument(options.output, "The workflow output")) },
|
|
54
|
+
...options.description === void 0 ? {} : { description: options.description },
|
|
55
|
+
// SAFETY: defineApp checks required context; the host supplies the pinned run's capabilities.
|
|
56
|
+
run: (context, input) => fromPromise(run, "workflow")(context, input)
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
var nativeWorkflow = (value) => {
|
|
60
|
+
if (typeof value !== "object" || value === null || !(NativeWorkflow in value)) return void 0;
|
|
61
|
+
return value[NativeWorkflow];
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// src/implementation/events.ts
|
|
65
|
+
var Native = /* @__PURE__ */ Symbol("apps.Event");
|
|
66
|
+
var scalarTypes = /* @__PURE__ */ new Set(["string", "number", "integer", "boolean"]);
|
|
67
|
+
var isScalarSchema = (document) => {
|
|
68
|
+
const type = document.type;
|
|
69
|
+
if (typeof type === "string") return scalarTypes.has(type);
|
|
70
|
+
const choices = Array.isArray(document.enum) ? document.enum : "const" in document ? [document.const] : void 0;
|
|
71
|
+
return choices !== void 0 && choices.length > 0 && choices.every((value) => ["string", "number", "boolean"].includes(typeof value));
|
|
72
|
+
};
|
|
73
|
+
var event = (options) => {
|
|
74
|
+
const filters = options.filters ?? {};
|
|
75
|
+
const fieldDecoders = Object.fromEntries(
|
|
76
|
+
Object.entries(filters).map(([key, field]) => [
|
|
77
|
+
key,
|
|
78
|
+
decoderOf(schemaArgument(field, `The event filter ${JSON.stringify(key)}`))
|
|
79
|
+
])
|
|
80
|
+
);
|
|
81
|
+
for (const [key, decoder] of Object.entries(fieldDecoders)) {
|
|
82
|
+
const document = Effect_exports.runSync(jsonSchemaDocument(decoder));
|
|
83
|
+
if (!isScalarSchema(document))
|
|
84
|
+
throw new TypeError(
|
|
85
|
+
`The event filter ${JSON.stringify(key)} must be a string, number, boolean or literal`
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
[Native]: {
|
|
90
|
+
description: options.description,
|
|
91
|
+
filters: fieldDecoders,
|
|
92
|
+
payload: decoderOf(schemaArgument(options.payload, "The event payload"))
|
|
93
|
+
},
|
|
94
|
+
description: options.description,
|
|
95
|
+
filters,
|
|
96
|
+
payload: options.payload
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
var nativeEvent = (declaration) => typeof declaration === "object" && declaration !== null && Native in declaration ? declaration[Native] : void 0;
|
|
100
|
+
var declaredEvents = (events) => Effect_exports.forEach(
|
|
101
|
+
Object.entries(events),
|
|
102
|
+
([name, declared]) => Effect_exports.gen(function* () {
|
|
103
|
+
const filters = yield* jsonSchemaDocument(Schema_exports.Struct(declared.filters));
|
|
104
|
+
const payload = yield* jsonSchemaDocument(declared.payload);
|
|
105
|
+
return [name, { description: declared.description, filters, payload }];
|
|
106
|
+
})
|
|
107
|
+
).pipe(Effect_exports.map((entries) => Object.fromEntries(entries)));
|
|
108
|
+
var makeEmitter = (input) => ({
|
|
109
|
+
emit: (name, data, ...rest) => {
|
|
110
|
+
const options = rest[0] ?? {};
|
|
111
|
+
const declared = Object.hasOwn(input.events, name) ? input.events[name] : void 0;
|
|
112
|
+
if (declared === void 0) throw new TypeError(`This app declares no event named "${name}"`);
|
|
113
|
+
if (input.emitted.length >= defaultEventLimits.maxEventsPerInvocation)
|
|
114
|
+
throw new RangeError(
|
|
115
|
+
`An invocation can emit at most ${defaultEventLimits.maxEventsPerInvocation} events`
|
|
116
|
+
);
|
|
117
|
+
const payload = Schema_exports.decodeUnknownSync(declared.payload)(data);
|
|
118
|
+
const filters = Schema_exports.decodeUnknownSync(Schema_exports.Struct(declared.filters))(
|
|
119
|
+
options.filters ?? {}
|
|
120
|
+
);
|
|
121
|
+
const account = options.account ?? input.sourceAccount ?? (input.accounts.length === 1 ? input.accounts[0] : void 0) ?? null;
|
|
122
|
+
if (account === null && input.accounts.length > 1)
|
|
123
|
+
throw new TypeError(
|
|
124
|
+
"This invocation has several accounts; name the one the event came from with { account }"
|
|
125
|
+
);
|
|
126
|
+
if (account !== null && !input.accounts.includes(account))
|
|
127
|
+
throw new TypeError("The event's account is not one of this invocation's accounts");
|
|
128
|
+
const occurredAt = options.occurredAt === void 0 ? Date.now() : options.occurredAt instanceof Date ? options.occurredAt.getTime() : options.occurredAt;
|
|
129
|
+
const occurrence = Schema_exports.decodeUnknownSync(EmittedEvent)({
|
|
130
|
+
name: Schema_exports.decodeUnknownSync(EventName)(name),
|
|
131
|
+
id: options.id ?? crypto.randomUUID(),
|
|
132
|
+
occurredAt,
|
|
133
|
+
data: payload,
|
|
134
|
+
filters,
|
|
135
|
+
account
|
|
136
|
+
});
|
|
137
|
+
if (new TextEncoder().encode(JSON.stringify(occurrence.data)).byteLength > defaultEventLimits.maxDataBytes)
|
|
138
|
+
throw new RangeError(
|
|
139
|
+
`An event's data can be at most ${defaultEventLimits.maxDataBytes} bytes of JSON; send a summary and a tool to read the rest`
|
|
140
|
+
);
|
|
141
|
+
input.emitted.push(occurrence);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// src/implementation/app.ts
|
|
146
|
+
var InternalApp = /* @__PURE__ */ Symbol("apps.App");
|
|
147
|
+
var isApp = (value) => typeof value === "object" && value !== null && InternalApp in value;
|
|
148
|
+
var toEffectApp = (app) => app[InternalApp];
|
|
149
|
+
function rejectCatalogs(definition) {
|
|
150
|
+
if ("queries" in definition || "mutations" in definition)
|
|
151
|
+
throw new Error("Put queries and mutations in a router under tools");
|
|
152
|
+
}
|
|
153
|
+
function adaptDefinition(definition) {
|
|
154
|
+
rejectCatalogs(definition);
|
|
155
|
+
const webhooks = definition.webhooks === void 0 ? {} : {
|
|
156
|
+
// SAFETY: `Required` only where the optional method was just checked to be present.
|
|
157
|
+
webhooks: Object.fromEntries(
|
|
158
|
+
Object.entries(definition.webhooks).map(([name, webhook]) => [
|
|
159
|
+
name,
|
|
160
|
+
{
|
|
161
|
+
...webhook,
|
|
162
|
+
...webhook.register === void 0 ? {} : {
|
|
163
|
+
register: fromPromise(
|
|
164
|
+
method(webhook, "register"),
|
|
165
|
+
"webhook"
|
|
166
|
+
)
|
|
167
|
+
},
|
|
168
|
+
handle: fromPromise(method(webhook, "handle"), "webhook"),
|
|
169
|
+
...webhook.unregister === void 0 ? {} : {
|
|
170
|
+
unregister: fromPromise(
|
|
171
|
+
method(webhook, "unregister"),
|
|
172
|
+
"webhook"
|
|
173
|
+
)
|
|
174
|
+
},
|
|
175
|
+
..."config" in webhook && isSchema(webhook.config) ? { config: decoderOf(webhook.config) } : {},
|
|
176
|
+
..."state" in webhook && isSchema(webhook.state) ? { state: decoderOf(webhook.state) } : {}
|
|
177
|
+
}
|
|
178
|
+
])
|
|
179
|
+
)
|
|
180
|
+
};
|
|
181
|
+
const workflows = definition.workflows === void 0 ? {} : {
|
|
182
|
+
workflows: Object.fromEntries(
|
|
183
|
+
Object.entries(definition.workflows).map(([name, value]) => {
|
|
184
|
+
const declared2 = nativeWorkflow(value);
|
|
185
|
+
if (declared2 === void 0) throw new Error("Invalid workflow declaration");
|
|
186
|
+
return [name, declared2];
|
|
187
|
+
})
|
|
188
|
+
)
|
|
189
|
+
};
|
|
190
|
+
const root = definition.tools === void 0 ? void 0 : nativeRouter(definition.tools);
|
|
191
|
+
if (definition.tools !== void 0 && root === void 0)
|
|
192
|
+
throw new Error("tools must be a router");
|
|
193
|
+
const data = root === void 0 ? {} : { tools: root };
|
|
194
|
+
const declared = root?.kind === "router" ? declaredOperations(root) : [];
|
|
195
|
+
const mutations = /* @__PURE__ */ new Set();
|
|
196
|
+
for (const { operation } of declared) {
|
|
197
|
+
if (operation.kind !== "mutation") continue;
|
|
198
|
+
if (mutations.has(operation))
|
|
199
|
+
throw new Error("A mutation can be mounted at only one path in tools");
|
|
200
|
+
mutations.add(operation);
|
|
201
|
+
}
|
|
202
|
+
const schedules = definition.schedules === void 0 ? {} : {
|
|
203
|
+
schedules: Object.fromEntries(
|
|
204
|
+
Object.entries(definition.schedules).map(([name, schedule]) => {
|
|
205
|
+
const target = nativeOperation(schedule.operation);
|
|
206
|
+
const match = declared.find(
|
|
207
|
+
({ operation }) => operation === target && operation.kind === "mutation"
|
|
208
|
+
);
|
|
209
|
+
if (match === void 0)
|
|
210
|
+
throw new Error("A schedule must reference a mutation in this app's tools");
|
|
211
|
+
return [
|
|
212
|
+
name,
|
|
213
|
+
{
|
|
214
|
+
timing: Schema_exports.decodeUnknownSync(ScheduleTiming)(schedule.timing),
|
|
215
|
+
input: Schema_exports.decodeUnknownSync(JsonValue)(schedule.input),
|
|
216
|
+
tool: match.name
|
|
217
|
+
}
|
|
218
|
+
];
|
|
219
|
+
})
|
|
220
|
+
)
|
|
221
|
+
};
|
|
222
|
+
return {
|
|
223
|
+
...definition,
|
|
224
|
+
...webhooks,
|
|
225
|
+
...workflows,
|
|
226
|
+
...data,
|
|
227
|
+
...schedules
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
var defineApp = (requirements, definition) => {
|
|
231
|
+
if (typeof definition !== "function") rejectCatalogs(definition);
|
|
232
|
+
const evaluate = typeof definition === "function" ? definition : async () => definition;
|
|
233
|
+
const factory = fromPromise(evaluate, "factory");
|
|
234
|
+
const events = requirements.events === void 0 ? void 0 : Object.fromEntries(
|
|
235
|
+
Object.entries(requirements.events).map(([name, declared]) => {
|
|
236
|
+
const native2 = nativeEvent(declared);
|
|
237
|
+
if (native2 === void 0)
|
|
238
|
+
throw new TypeError(
|
|
239
|
+
`The event ${JSON.stringify(name)} must be declared with event()`
|
|
240
|
+
);
|
|
241
|
+
return [name, native2];
|
|
242
|
+
})
|
|
243
|
+
);
|
|
244
|
+
const native = {
|
|
245
|
+
accounts: requirements.accounts,
|
|
246
|
+
...events === void 0 ? {} : { events },
|
|
247
|
+
evaluate: (context) => factory(context).pipe(Effect_exports.map((value) => adaptDefinition(value)))
|
|
248
|
+
};
|
|
249
|
+
return {
|
|
250
|
+
[InternalApp]: native,
|
|
251
|
+
accounts: native.accounts,
|
|
252
|
+
evaluate: (context) => Effect_exports.runPromise(factory(context))
|
|
253
|
+
};
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
export {
|
|
257
|
+
ResponseStatusError,
|
|
258
|
+
ResponseDecodeError,
|
|
259
|
+
workflow,
|
|
260
|
+
event,
|
|
261
|
+
declaredEvents,
|
|
262
|
+
makeEmitter,
|
|
263
|
+
isApp,
|
|
264
|
+
toEffectApp,
|
|
265
|
+
defineApp
|
|
266
|
+
};
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Schema_exports
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
4
4
|
|
|
5
5
|
// src/contracts/schema.ts
|
|
6
6
|
var JsonValue = Schema_exports.Json;
|
|
7
7
|
var JsonObject = Schema_exports.Record(Schema_exports.String, JsonValue);
|
|
8
8
|
var AccountId = Schema_exports.String.pipe(
|
|
9
|
-
Schema_exports.check(Schema_exports.
|
|
9
|
+
Schema_exports.check(Schema_exports.isStartingWith("acc_"), Schema_exports.isMinLength(5)),
|
|
10
10
|
Schema_exports.brand("acc")
|
|
11
11
|
);
|
|
12
12
|
var HttpUrl = Schema_exports.String.check(
|
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
import {
|
|
2
|
+
RecordedMessage
|
|
3
|
+
} from "./chunk-5FHWNLCI.js";
|
|
4
|
+
import {
|
|
5
|
+
SchemaGetter_exports,
|
|
2
6
|
Schema_exports
|
|
3
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-IFJU5SYQ.js";
|
|
8
|
+
|
|
9
|
+
// ../utils/src/api-error.ts
|
|
10
|
+
var MessageField = Schema_exports.String.pipe(
|
|
11
|
+
Schema_exports.decodeTo(Schema_exports.optionalKey(Schema_exports.String), {
|
|
12
|
+
decode: SchemaGetter_exports.omit(),
|
|
13
|
+
encode: SchemaGetter_exports.passthrough()
|
|
14
|
+
})
|
|
15
|
+
);
|
|
16
|
+
function withFields(definition) {
|
|
17
|
+
const fields = definition.fields;
|
|
18
|
+
const message = definition.message;
|
|
19
|
+
const documentation = typeof message === "string" ? { description: message } : {};
|
|
20
|
+
const DefinedError = Schema_exports.Error(definition.tag)(
|
|
21
|
+
Schema_exports.TaggedStruct(definition.tag, { ...fields, message: MessageField }).annotate(
|
|
22
|
+
documentation
|
|
23
|
+
),
|
|
24
|
+
{ httpApiStatus: definition.status, ...documentation }
|
|
25
|
+
);
|
|
26
|
+
const recorded = definition.recorded ?? (typeof message === "string" ? () => message : void 0);
|
|
27
|
+
Object.defineProperties(DefinedError.prototype, {
|
|
28
|
+
message: {
|
|
29
|
+
get() {
|
|
30
|
+
return typeof message === "string" ? message : message(this);
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
...recorded === void 0 ? {} : {
|
|
34
|
+
[RecordedMessage]: {
|
|
35
|
+
get() {
|
|
36
|
+
return recorded(this);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
return DefinedError;
|
|
42
|
+
}
|
|
43
|
+
function define(definition) {
|
|
44
|
+
return "fields" in definition ? withFields(definition) : withFields({ ...definition, fields: {} });
|
|
45
|
+
}
|
|
46
|
+
var ApiError = { define };
|
|
4
47
|
|
|
5
48
|
// src/contracts/skills.ts
|
|
6
49
|
var SkillFilePath = Schema_exports.NonEmptyString.check(
|
|
@@ -45,9 +88,18 @@ var AppSkillSource = Schema_exports.Struct({
|
|
|
45
88
|
)
|
|
46
89
|
)
|
|
47
90
|
});
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
{
|
|
91
|
+
var skillDefinitionFailures = {
|
|
92
|
+
files: (file) => `The skill files of \u201C${file}\u201D are invalid: each needs a unique relative path, text content and a SKILL.md document.`,
|
|
93
|
+
directory: (file) => `\u201C${file}\u201D is not a valid skill directory. Skill directory names use lowercase letters and digits separated by single hyphens.`,
|
|
94
|
+
"missing-document": (file) => `\u201C${file}\u201D is missing.`,
|
|
95
|
+
frontmatter: (file) => `\u201C${file}\u201D must start with valid YAML frontmatter between --- lines.`,
|
|
96
|
+
metadata: (file) => `The frontmatter of \u201C${file}\u201D needs a valid name and description within the Agent Skills limits.`,
|
|
97
|
+
"name-mismatch": (file) => `The name in \u201C${file}\u201D does not match its skill directory.`
|
|
98
|
+
};
|
|
99
|
+
var SkillDefinitionInvalid = ApiError.define({
|
|
100
|
+
tag: "SkillDefinitionInvalid",
|
|
101
|
+
status: 400,
|
|
102
|
+
fields: {
|
|
51
103
|
file: SkillFilePath,
|
|
52
104
|
reason: Schema_exports.Literals([
|
|
53
105
|
"files",
|
|
@@ -58,14 +110,14 @@ var SkillDefinitionInvalid = class extends Schema_exports.TaggedError()(
|
|
|
58
110
|
"name-mismatch"
|
|
59
111
|
])
|
|
60
112
|
},
|
|
61
|
-
{
|
|
62
|
-
) {
|
|
63
|
-
};
|
|
113
|
+
message: ({ file, reason }) => skillDefinitionFailures[reason](file),
|
|
114
|
+
recorded: ({ reason }) => `The app's skill definition is invalid (${reason})`
|
|
115
|
+
});
|
|
64
116
|
var AppSkills = Schema_exports.Array(AppSkillSource).check(
|
|
65
117
|
Schema_exports.makeFilter((skills) => new Set(skills.map((skill) => skill.name)).size === skills.length)
|
|
66
118
|
);
|
|
67
119
|
var SkillServiceName = Schema_exports.String.check(
|
|
68
|
-
Schema_exports.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9 .-]{0,98}[A-Za-z0-9])?$/)
|
|
120
|
+
Schema_exports.isPattern(/^[A-Za-z0-9](?:[A-Za-z0-9 .-]{0,98}[A-Za-z0-9])?$/u)
|
|
69
121
|
);
|
|
70
122
|
var SkillLoadFailed = class extends Schema_exports.TaggedError()("SkillLoadFailed", {
|
|
71
123
|
reason: Schema_exports.Literals([
|
|
@@ -79,14 +131,17 @@ var SkillLoadFailed = class extends Schema_exports.TaggedError()("SkillLoadFaile
|
|
|
79
131
|
]),
|
|
80
132
|
// Error instances read an omitted message as "", so an empty message means none was given.
|
|
81
133
|
message: Schema_exports.optional(Schema_exports.String.check(Schema_exports.isMaxLength(500))),
|
|
82
|
-
status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 })))
|
|
134
|
+
status: Schema_exports.optional(Schema_exports.Int.check(Schema_exports.isBetween({ minimum: 100, maximum: 599 }))),
|
|
135
|
+
missing: Schema_exports.optional(Schema_exports.Literals(["repository", "ref"]))
|
|
83
136
|
}) {
|
|
84
137
|
};
|
|
85
138
|
var skillLoadLimits = {
|
|
86
139
|
files: 1e3,
|
|
87
140
|
fileBytes: 2e6,
|
|
88
141
|
totalBytes: 2e7,
|
|
89
|
-
concurrency: 8
|
|
142
|
+
concurrency: 8,
|
|
143
|
+
/** The request that checks whether a kept catalog's publication changed. */
|
|
144
|
+
checkMillis: 5e3
|
|
90
145
|
};
|
|
91
146
|
|
|
92
147
|
export {
|