@lobu/core 9.1.0 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,270 +0,0 @@
1
- "use strict";
2
- /**
3
- * Canonical zod schema for `lobu.toml`.
4
- *
5
- * This is the single source of truth for both the CLI (validation on disk)
6
- * and the gateway (runtime loading). Uses zod@4.
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.lobuConfigSchema = void 0;
10
- const zod_1 = require("zod");
11
- const network_domains_1 = require("./utils/network-domains");
12
- // ── Provider ────────────────────────────────────────────────────────────────
13
- const providerSchema = zod_1.z
14
- .object({
15
- id: zod_1.z.string(),
16
- model: zod_1.z.string().optional(),
17
- /** API key — literal value or `$ENV_VAR` reference. */
18
- key: zod_1.z.string().optional(),
19
- /** First-class durable secret reference. */
20
- secret_ref: zod_1.z.string().optional(),
21
- })
22
- .refine((p) => !(p.key && p.secret_ref), {
23
- message: "provider must set at most one of `key` or `secret_ref`",
24
- });
25
- // ── Platform ────────────────────────────────────────────────────────────────
26
- const platformSchema = zod_1.z.object({
27
- type: zod_1.z.string(),
28
- /**
29
- * Optional disambiguator when an agent has multiple platform instances of
30
- * the same type (e.g. two Slack workspaces). Slugged and appended to the
31
- * stable platform ID: `{agent}-{type}-{name}`. Omit when there is only one
32
- * instance per type.
33
- */
34
- name: zod_1.z
35
- .string()
36
- .regex(/^[a-z0-9][a-z0-9-]*$/, {
37
- message: "platform name must be lowercase alphanumeric with hyphens",
38
- })
39
- .optional(),
40
- /** Platform-specific config (e.g. `{ botToken: "$BOT_TOKEN" }`). */
41
- config: zod_1.z.record(zod_1.z.string(), zod_1.z.string()),
42
- /**
43
- * Declarative channel routing (Slack only, for now): chat channels this agent
44
- * should be reachable in. Each entry is `"<teamId>/<channelId>"` — e.g.
45
- * `"T0ABCDEF/C0123ABCD"` (both appear in any Slack channel URL). `lobu apply`
46
- * reconciles `agent_channel_bindings` to exactly this list for this agent on
47
- * this connection: listed channels get bound, ones no longer listed get
48
- * unbound. Channels linked ad-hoc via `/lobu link` on *other* connections are
49
- * left alone.
50
- */
51
- channels: zod_1.z.array(zod_1.z.string()).optional(),
52
- });
53
- // ── MCP Server ──────────────────────────────────────────────────────────────
54
- const mcpOAuthSchema = zod_1.z.object({
55
- auth_url: zod_1.z.string(),
56
- token_url: zod_1.z.string(),
57
- client_id: zod_1.z.string().optional(),
58
- client_secret: zod_1.z.string().optional(),
59
- scopes: zod_1.z.array(zod_1.z.string()).optional(),
60
- token_endpoint_auth_method: zod_1.z.string().optional(),
61
- });
62
- const mcpServerSchema = zod_1.z.object({
63
- /**
64
- * Transport kind. `streamable-http` (default for HTTP URLs) posts to a single
65
- * endpoint and accepts either JSON or SSE-framed responses per the MCP spec.
66
- * `sse` is the legacy transport with a separate /sse GET channel. `stdio`
67
- * runs a local command.
68
- */
69
- type: zod_1.z.enum(["streamable-http", "sse", "stdio"]).optional(),
70
- url: zod_1.z.string().optional(),
71
- command: zod_1.z.string().optional(),
72
- args: zod_1.z.array(zod_1.z.string()).optional(),
73
- env: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
74
- headers: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
75
- oauth: mcpOAuthSchema.optional(),
76
- /**
77
- * Credential scope for OAuth-authenticated MCPs.
78
- * - `"user"` (default): each chat user logs in separately. Safe default.
79
- * - `"channel"`: a single credential is shared across all users in a chat
80
- * channel/conversation. Use only for shared-data integrations (e.g. team
81
- * wikis) where per-user attribution isn't required.
82
- */
83
- auth_scope: zod_1.z.enum(["user", "channel"]).optional(),
84
- });
85
- // ── Skills ──────────────────────────────────────────────────────────────────
86
- const skillsSchema = zod_1.z.object({
87
- mcp: zod_1.z.record(zod_1.z.string(), mcpServerSchema).optional(),
88
- });
89
- // ── Network ─────────────────────────────────────────────────────────────────
90
- const judgeDomainEntry = zod_1.z.union([
91
- zod_1.z.string(),
92
- zod_1.z.object({
93
- domain: zod_1.z.string(),
94
- judge: zod_1.z.string().optional(),
95
- }),
96
- ]);
97
- const networkSchema = zod_1.z
98
- .object({
99
- allowed: zod_1.z.array(zod_1.z.string()).optional(),
100
- denied: zod_1.z.array(zod_1.z.string()).optional(),
101
- /**
102
- * Domains routed through the LLM egress judge. Each entry is either
103
- * a bare domain string (uses the "default" judge policy) or an object
104
- * `{ domain, judge }` naming a policy in {@link network.judges}.
105
- */
106
- judge: zod_1.z.array(judgeDomainEntry).optional(),
107
- /**
108
- * Named judge policies referenced by `judge[].judge`. The key "default"
109
- * is applied when an entry omits `judge`.
110
- */
111
- judges: zod_1.z.record(zod_1.z.string(), zod_1.z.string()).optional(),
112
- })
113
- .transform((network) => ({
114
- allowed: (0, network_domains_1.normalizeDomainPatterns)(network.allowed),
115
- denied: (0, network_domains_1.normalizeDomainPatterns)(network.denied),
116
- judge: network.judge?.map((entry) => typeof entry === "string"
117
- ? { domain: entry }
118
- : {
119
- domain: entry.domain,
120
- ...(entry.judge ? { judge: entry.judge } : {}),
121
- }),
122
- judges: network.judges,
123
- }));
124
- // ── Egress ──────────────────────────────────────────────────────────────────
125
- const egressSchema = zod_1.z.object({
126
- /** Operator policy appended to every judge prompt for this agent. */
127
- extra_policy: zod_1.z.string().optional(),
128
- /** Judge model identifier (defaults to a fast Haiku model). */
129
- judge_model: zod_1.z.string().optional(),
130
- });
131
- // ── Guardrails (inline) ─────────────────────────────────────────────────────
132
- /**
133
- * Inline guardrail declared in `lobu.toml` as an array of `[[agents.<id>.guardrails_inline]]`
134
- * tables. Sibling to the name-based `guardrails = ["secret-scan", ...]` list —
135
- * use this when you want to attach an ad-hoc LLM-judge guardrail without
136
- * registering a named guardrail at gateway boot.
137
- *
138
- * Example:
139
- * [[agents.<id>.guardrails_inline]]
140
- * stage = "output"
141
- * judge = "Never mention competitors."
142
- *
143
- * [[agents.<id>.guardrails_inline]]
144
- * stage = "pre-tool"
145
- * tools = ["github.delete_repo"]
146
- * judge = "Only allow when issue ref matches active sprint."
147
- *
148
- * `tools` is only meaningful for `pre-tool` and is silently ignored for
149
- * other stages.
150
- */
151
- const guardrailInlineSchema = zod_1.z.object({
152
- stage: zod_1.z.enum(["input", "output", "pre-tool"]),
153
- /**
154
- * Inline LLM-judge policy text. Required for now — built-in references go
155
- * in the sibling `guardrails = [...]` list. The judge runs through the
156
- * shared TextJudge engine (Haiku + 5-min cache + circuit breaker).
157
- */
158
- judge: zod_1.z.string().min(1),
159
- /**
160
- * Optional pre-tool narrowing. Only meaningful when `stage = "pre-tool"`.
161
- * When omitted the guardrail runs on every tool call.
162
- */
163
- tools: zod_1.z.array(zod_1.z.string()).optional(),
164
- });
165
- // ── Tools ───────────────────────────────────────────────────────────────────
166
- /**
167
- * Accepted `pre_approved` entry formats:
168
- * /mcp/<id>/tools/<name>
169
- * /mcp/<id>/tools/*
170
- * Anything else will fail validation — typos like "gmail" silently produced
171
- * a no-op grant previously.
172
- */
173
- const MCP_TOOL_PATTERN = /^\/mcp\/[a-zA-Z0-9_-]+\/tools\/([a-zA-Z0-9_-]+|\*)$/;
174
- const mcpToolPatternSchema = zod_1.z
175
- .string()
176
- .refine((value) => MCP_TOOL_PATTERN.test(value), {
177
- message: 'pre_approved entries must match "/mcp/<mcp-id>/tools/<tool-name>" or "/mcp/<mcp-id>/tools/*"',
178
- });
179
- const toolsSchema = zod_1.z.object({
180
- /**
181
- * Operator override: MCP tool grant patterns that bypass the in-thread
182
- * approval card. Synced to the grant store at deployment time. See
183
- * {@link AgentSettings.preApprovedTools} for the runtime shape.
184
- */
185
- pre_approved: zod_1.z.array(mcpToolPatternSchema).optional(),
186
- /**
187
- * Worker-side tool visibility filter. Patterns follow Claude Code's
188
- * permission format: `Read`, `Bash(git:*)`, `mcp__github__*`, `*`.
189
- */
190
- allowed: zod_1.z.array(zod_1.z.string()).optional(),
191
- denied: zod_1.z.array(zod_1.z.string()).optional(),
192
- /** If true, ONLY `allowed` tools are permitted (ignores worker defaults). */
193
- strict: zod_1.z.boolean().optional(),
194
- });
195
- // ── Worker ──────────────────────────────────────────────────────────────────
196
- const workerSchema = zod_1.z.object({
197
- nix_packages: zod_1.z.array(zod_1.z.string()).optional(),
198
- });
199
- // ── Preview ─────────────────────────────────────────────────────────────────
200
- // Per-platform "try this agent in the hosted Lobu workspace" config — the key
201
- // in `[agents.<id>.preview.<platform>]` is the chat platform (slack, telegram,
202
- // …). `lobu run` prints a `/lobu link <code>` (`/link <code>` on Telegram) for
203
- // each enabled platform; redeem it by DMing the hosted bot.
204
- const previewPlatformSchema = zod_1.z
205
- .object({
206
- /** Enable the hosted Lobu preview bot for this agent on this platform. */
207
- enabled: zod_1.z.boolean().optional(),
208
- /** Surfaces a preview code can bind: a DM with the bot, or a channel it's in. */
209
- surfaces: zod_1.z.array(zod_1.z.enum(["dm", "channel"])).optional(),
210
- /** Short-lived claim-code TTL. Capped by the hosted preview API. */
211
- code_ttl_minutes: zod_1.z.number().int().positive().max(60).optional(),
212
- })
213
- .strict();
214
- const previewSchema = zod_1.z.record(zod_1.z.string(), previewPlatformSchema);
215
- // ── Agent ───────────────────────────────────────────────────────────────────
216
- const agentEntrySchema = zod_1.z.object({
217
- name: zod_1.z.string(),
218
- description: zod_1.z.string().optional(),
219
- /** Path to agent content directory (IDENTITY.md, SOUL.md, USER.md, skills/). */
220
- dir: zod_1.z.string(),
221
- providers: zod_1.z.array(providerSchema).default([]),
222
- platforms: zod_1.z.array(platformSchema).default([]),
223
- skills: skillsSchema.default({}),
224
- network: networkSchema.optional(),
225
- egress: egressSchema.optional(),
226
- tools: toolsSchema.optional(),
227
- /**
228
- * Guardrails enabled for this agent. Each name must match a guardrail
229
- * registered in the gateway's GuardrailRegistry. See packages/core/src/guardrails.
230
- */
231
- guardrails: zod_1.z.array(zod_1.z.string()).optional(),
232
- /**
233
- * Operator's exclude list: built-in / skill-provided guardrails that
234
- * should be turned off for this agent even if a skill declared them.
235
- * Names are matched against {@link Guardrail.name}, including the
236
- * synthesized `inline:<stage>:<hash8>` names for inline judges from skills.
237
- */
238
- guardrails_disabled: zod_1.z.array(zod_1.z.string()).optional(),
239
- /**
240
- * Inline guardrails declared directly on the agent (no registry lookup).
241
- * Each entry materializes into an ad-hoc registered guardrail named
242
- * `inline:<stage>:<hash8>` (hash of policy text) and is merged into the
243
- * effective per-agent list at startup.
244
- */
245
- guardrails_inline: zod_1.z.array(guardrailInlineSchema).optional(),
246
- worker: workerSchema.optional(),
247
- preview: previewSchema.optional(),
248
- });
249
- // ── Memory ─────────────────────────────────────────────────────────────────
250
- const memorySchema = zod_1.z
251
- .object({
252
- enabled: zod_1.z.boolean().optional(),
253
- org: zod_1.z.string().optional(),
254
- /** Resolved organization id, written back by `lobu apply` once the org is
255
- * resolved or created. Committed so the whole team applies to the same org. */
256
- organization_id: zod_1.z.string().optional(),
257
- name: zod_1.z.string().optional(),
258
- description: zod_1.z.string().optional(),
259
- visibility: zod_1.z.enum(["public", "private"]).optional(),
260
- models: zod_1.z.string().optional(),
261
- data: zod_1.z.string().optional(),
262
- connectors: zod_1.z.string().optional(),
263
- })
264
- .strict();
265
- // ── Top Level ───────────────────────────────────────────────────────────────
266
- exports.lobuConfigSchema = zod_1.z.object({
267
- agents: zod_1.z.record(zod_1.z.string().regex(/^[a-z0-9][a-z0-9-]*$/), agentEntrySchema),
268
- memory: memorySchema.optional(),
269
- });
270
- //# sourceMappingURL=lobu-toml-schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lobu-toml-schema.js","sourceRoot":"","sources":["../src/lobu-toml-schema.ts"],"names":[],"mappings":"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"}