@nookplot/runtime 0.5.143 → 0.5.145

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 (75) hide show
  1. package/dist/__tests__/autonomous.workspaceOpportunity.test.js +12 -0
  2. package/dist/__tests__/autonomous.workspaceOpportunity.test.js.map +1 -1
  3. package/dist/__tests__/bdAgentPack.test.d.ts +2 -0
  4. package/dist/__tests__/bdAgentPack.test.d.ts.map +1 -0
  5. package/dist/__tests__/bdAgentPack.test.js +44 -0
  6. package/dist/__tests__/bdAgentPack.test.js.map +1 -0
  7. package/dist/__tests__/bounties.test.d.ts +11 -0
  8. package/dist/__tests__/bounties.test.d.ts.map +1 -0
  9. package/dist/__tests__/bounties.test.js +78 -0
  10. package/dist/__tests__/bounties.test.js.map +1 -0
  11. package/dist/__tests__/externalMcpTools.test.d.ts +2 -0
  12. package/dist/__tests__/externalMcpTools.test.d.ts.map +1 -0
  13. package/dist/__tests__/externalMcpTools.test.js +94 -0
  14. package/dist/__tests__/externalMcpTools.test.js.map +1 -0
  15. package/dist/__tests__/pack.gating.test.d.ts +2 -0
  16. package/dist/__tests__/pack.gating.test.d.ts.map +1 -0
  17. package/dist/__tests__/pack.gating.test.js +134 -0
  18. package/dist/__tests__/pack.gating.test.js.map +1 -0
  19. package/dist/__tests__/pack.test.d.ts +2 -0
  20. package/dist/__tests__/pack.test.d.ts.map +1 -0
  21. package/dist/__tests__/pack.test.js +299 -0
  22. package/dist/__tests__/pack.test.js.map +1 -0
  23. package/dist/__tests__/packLoader.test.d.ts +2 -0
  24. package/dist/__tests__/packLoader.test.d.ts.map +1 -0
  25. package/dist/__tests__/packLoader.test.js +304 -0
  26. package/dist/__tests__/packLoader.test.js.map +1 -0
  27. package/dist/__tests__/presetLoader.test.js +59 -42
  28. package/dist/__tests__/presetLoader.test.js.map +1 -1
  29. package/dist/__tests__/runtimeConstructor.test.d.ts +18 -0
  30. package/dist/__tests__/runtimeConstructor.test.d.ts.map +1 -0
  31. package/dist/__tests__/runtimeConstructor.test.js +57 -0
  32. package/dist/__tests__/runtimeConstructor.test.js.map +1 -0
  33. package/dist/__tests__/sandbox.test.js +24 -24
  34. package/dist/actionCatalog.d.ts.map +1 -1
  35. package/dist/actionCatalog.generated.d.ts +1 -1
  36. package/dist/actionCatalog.generated.d.ts.map +1 -1
  37. package/dist/actionCatalog.generated.js +18 -8
  38. package/dist/actionCatalog.generated.js.map +1 -1
  39. package/dist/actionCatalog.js +4 -12
  40. package/dist/actionCatalog.js.map +1 -1
  41. package/dist/autonomous.d.ts +24 -1
  42. package/dist/autonomous.d.ts.map +1 -1
  43. package/dist/autonomous.js +76 -8
  44. package/dist/autonomous.js.map +1 -1
  45. package/dist/bounties.d.ts +21 -1
  46. package/dist/bounties.d.ts.map +1 -1
  47. package/dist/bounties.js +5 -1
  48. package/dist/bounties.js.map +1 -1
  49. package/dist/conversation/modelLimits.js +17 -17
  50. package/dist/goal/goalPrompts.js +27 -27
  51. package/dist/index.d.ts +5 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +16 -1
  54. package/dist/index.js.map +1 -1
  55. package/dist/pack.d.ts +181 -0
  56. package/dist/pack.d.ts.map +1 -0
  57. package/dist/pack.js +379 -0
  58. package/dist/pack.js.map +1 -0
  59. package/dist/packLoader.d.ts +109 -0
  60. package/dist/packLoader.d.ts.map +1 -0
  61. package/dist/packLoader.js +236 -0
  62. package/dist/packLoader.js.map +1 -0
  63. package/dist/presetLoader.d.ts +3 -1
  64. package/dist/presetLoader.d.ts.map +1 -1
  65. package/dist/presetLoader.js +7 -1
  66. package/dist/presetLoader.js.map +1 -1
  67. package/dist/signalActionMap.d.ts +17 -1
  68. package/dist/signalActionMap.d.ts.map +1 -1
  69. package/dist/signalActionMap.js +38 -2
  70. package/dist/signalActionMap.js.map +1 -1
  71. package/dist/tools.d.ts +23 -7
  72. package/dist/tools.d.ts.map +1 -1
  73. package/dist/tools.js +20 -6
  74. package/dist/tools.js.map +1 -1
  75. package/package.json +1 -1
package/dist/pack.js ADDED
@@ -0,0 +1,379 @@
1
+ /**
2
+ * Pack — minimal declarative capability bundle for forged agents.
3
+ *
4
+ * ROADMAP_external-mcp-connectors Phase 3: the minimal pack-load slice
5
+ * (ROADMAP_pack-primitive inherits this schema when it lands). A pack declares:
6
+ * - `preset` — the existing Forge knowledge preset (a PresetConfig,
7
+ * embedded verbatim; loaded by PresetLoader unchanged)
8
+ * - `tools` — allowlist of catalog action types the agent may use
9
+ * (CORE_ACTIONS remain the safety floor — see signalActionMap)
10
+ * - `mcpServers` — external MCP servers to mount at load (Phase 1/2 bridge)
11
+ * - `connections` — external services the pack needs, with owner scope
12
+ * - `connectors` — chat/outbound surfaces the agent uses (discord/email)
13
+ *
14
+ * Validation is hand-rolled — no schema-validation dependency exists in the
15
+ * runtime (mirrors the gateway's bounded-JSON-schema precedent) — and collects
16
+ * ALL errors in one pass. `validatePack` is pure: no DB, no network, no fs.
17
+ *
18
+ * @module pack
19
+ */
20
+ import yaml from "js-yaml";
21
+ import { ACTION_CATALOG } from "./actionCatalog.js";
22
+ /**
23
+ * Connector-platform descriptor table — the ONE pack-side registration
24
+ * point per platform (modes encode the risk posture: chat connectors stay
25
+ * reactive, platform-DM outreach violates ToS; outbound BD rides the agent
26
+ * email bridge). Adding a platform = one entry here; the gateway connector
27
+ * implementation is its own work (see connectorSurfaces.ts gateway-side).
28
+ */
29
+ export const CONNECTOR_PLATFORMS = {
30
+ discord: { modes: ["reactive"], toolCategory: null, label: "Discord", hasBindings: true },
31
+ telegram: { modes: ["reactive"], toolCategory: null, label: "Telegram", hasBindings: true },
32
+ email: {
33
+ modes: ["outbound"], toolCategory: "email", label: "Email", hasBindings: false,
34
+ readyDetail: "outbound email rides the agent inbox (send_email)",
35
+ },
36
+ };
37
+ // ── Constants ─────────────────────────────────────────────────
38
+ /**
39
+ * Pack FORMAT version this loader understands. Omitted `schemaVersion`
40
+ * means 1. A pack declaring a NEWER schema fails closed with one
41
+ * actionable "upgrade the runtime" error — never key-by-key noise —
42
+ * because a future format may carry semantics (e.g. gating fields) an old
43
+ * loader cannot safely ignore. Packs are durable marketplace artifacts
44
+ * consumed by version-skewed self-hosted loaders; bump this (and keep
45
+ * gateway/src/services/packRegistryService.ts in sync) whenever the pack
46
+ * schema gains a field.
47
+ */
48
+ export const PACK_SCHEMA_VERSION = 1;
49
+ /**
50
+ * Allowed modes per connector platform — derived view of
51
+ * CONNECTOR_PLATFORMS, kept as a named export for existing consumers.
52
+ * The Record type keeps this exhaustive: a platform added to
53
+ * CONNECTOR_PLATFORMS without a line here is a compile error.
54
+ */
55
+ export const CONNECTOR_PLATFORM_MODES = {
56
+ discord: CONNECTOR_PLATFORMS.discord.modes,
57
+ telegram: CONNECTOR_PLATFORMS.telegram.modes,
58
+ email: CONNECTOR_PLATFORMS.email.modes,
59
+ };
60
+ const NAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;
61
+ const VERSION_RE = /^\d+\.\d+\.\d+$/;
62
+ /** Mirrors the gateway serverName regex in routes/mcp.ts. */
63
+ const SERVER_NAME_RE = /^[a-zA-Z0-9_-]{1,64}$/;
64
+ /** Mirrors the gateway credentialService regex in routes/mcp.ts + actions.ts. */
65
+ const SERVICE_RE = /^[a-zA-Z0-9_.-]{1,64}$/;
66
+ const MAX_DESCRIPTION_LEN = 500;
67
+ const TOP_LEVEL_KEYS = new Set([
68
+ "schemaVersion", "name", "version", "description", "preset", "tools", "mcpServers", "connections", "connectors",
69
+ ]);
70
+ /** Common snake_case misspellings → the camelCase key this schema uses. */
71
+ const KEY_ALIASES = {
72
+ mcp_servers: "mcpServers",
73
+ schema_version: "schemaVersion",
74
+ };
75
+ // ── Helpers ───────────────────────────────────────────────────
76
+ function isPlainObject(v) {
77
+ return typeof v === "object" && v !== null && !Array.isArray(v);
78
+ }
79
+ function isHttpUrl(v) {
80
+ try {
81
+ const u = new URL(v);
82
+ return u.protocol === "http:" || u.protocol === "https:";
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ }
88
+ /** Deep copy for plain YAML/JSON data (packs never carry functions/dates). */
89
+ function deepCopy(v) {
90
+ return JSON.parse(JSON.stringify(v));
91
+ }
92
+ // ── Validation ────────────────────────────────────────────────
93
+ function validatePreset(preset, errors) {
94
+ if (!isPlainObject(preset)) {
95
+ errors.push("preset: must be an object");
96
+ return;
97
+ }
98
+ if (typeof preset.id !== "string" || preset.id.length === 0) {
99
+ errors.push("preset.id: required non-empty string");
100
+ }
101
+ if (preset.version !== undefined && (typeof preset.version !== "number" || !Number.isInteger(preset.version) || preset.version < 1)) {
102
+ errors.push("preset.version: must be a positive integer");
103
+ }
104
+ if (preset.trustLevel !== undefined && !["verified", "scanned", "raw"].includes(preset.trustLevel)) {
105
+ errors.push('preset.trustLevel: must be "verified" | "scanned" | "raw"');
106
+ }
107
+ if (preset.failurePolicy !== undefined && !["abort", "continue"].includes(preset.failurePolicy)) {
108
+ errors.push('preset.failurePolicy: must be "abort" | "continue"');
109
+ }
110
+ if (preset.maxCostNook !== undefined && (typeof preset.maxCostNook !== "number" || preset.maxCostNook < 0)) {
111
+ errors.push("preset.maxCostNook: must be a non-negative number");
112
+ }
113
+ if (preset.sources !== undefined) {
114
+ if (!Array.isArray(preset.sources)) {
115
+ errors.push("preset.sources: must be an array");
116
+ }
117
+ else {
118
+ preset.sources.forEach((src, i) => {
119
+ if (!isPlainObject(src)) {
120
+ errors.push(`preset.sources[${i}]: must be an object`);
121
+ return;
122
+ }
123
+ if (typeof src.type !== "string" || src.type.length === 0) {
124
+ errors.push(`preset.sources[${i}].type: required non-empty string`);
125
+ }
126
+ if (src.label !== undefined && typeof src.label !== "string") {
127
+ errors.push(`preset.sources[${i}].label: must be a string`);
128
+ }
129
+ if (src.config !== undefined && !isPlainObject(src.config)) {
130
+ errors.push(`preset.sources[${i}].config: must be an object`);
131
+ }
132
+ });
133
+ }
134
+ }
135
+ }
136
+ /**
137
+ * Validate an unknown value as a Pack. Pure — collects every error rather
138
+ * than failing on the first. On success returns a deep copy (the caller's
139
+ * input is never aliased).
140
+ */
141
+ export function validatePack(input) {
142
+ const errors = [];
143
+ if (!isPlainObject(input)) {
144
+ return { ok: false, pack: null, errors: ["pack: must be an object (YAML mapping)"] };
145
+ }
146
+ // Schema-format gate FIRST: a pack from a newer format fails closed with
147
+ // one actionable error, not a pile of unknown-key noise for fields this
148
+ // loader has never heard of.
149
+ if (input.schemaVersion !== undefined) {
150
+ if (typeof input.schemaVersion !== "number" || !Number.isInteger(input.schemaVersion) || input.schemaVersion < 1) {
151
+ return { ok: false, pack: null, errors: ["schemaVersion: must be a positive integer (omit for 1)"] };
152
+ }
153
+ if (input.schemaVersion > PACK_SCHEMA_VERSION) {
154
+ return {
155
+ ok: false, pack: null,
156
+ errors: [
157
+ `schemaVersion: pack declares schema ${input.schemaVersion}, but this loader supports up to ${PACK_SCHEMA_VERSION} — upgrade @nookplot/runtime / @nookplot/cli to load it`,
158
+ ],
159
+ };
160
+ }
161
+ }
162
+ // Strict top-level keys — catches typos and the roadmap's snake_case notation.
163
+ for (const key of Object.keys(input)) {
164
+ if (!TOP_LEVEL_KEYS.has(key)) {
165
+ const alias = KEY_ALIASES[key];
166
+ errors.push(alias ? `${key}: unknown key — did you mean "${alias}"?` : `${key}: unknown key`);
167
+ }
168
+ }
169
+ if (typeof input.name !== "string" || !NAME_RE.test(input.name)) {
170
+ errors.push("name: required, 1-100 chars, letters/digits then letters/digits/._-");
171
+ }
172
+ if (typeof input.version !== "string" || !VERSION_RE.test(input.version)) {
173
+ errors.push('version: required semver string, e.g. "1.0.0"');
174
+ }
175
+ if (input.description !== undefined && (typeof input.description !== "string" || input.description.length > MAX_DESCRIPTION_LEN)) {
176
+ errors.push(`description: must be a string of at most ${MAX_DESCRIPTION_LEN} chars`);
177
+ }
178
+ if (input.preset !== undefined)
179
+ validatePreset(input.preset, errors);
180
+ // tools — catalog action allowlist
181
+ if (input.tools !== undefined) {
182
+ if (!Array.isArray(input.tools)) {
183
+ errors.push("tools: must be an array of action types");
184
+ }
185
+ else {
186
+ const seen = new Set();
187
+ input.tools.forEach((t, i) => {
188
+ if (typeof t !== "string") {
189
+ errors.push(`tools[${i}]: must be a string`);
190
+ return;
191
+ }
192
+ if (t.startsWith("mcp__") || t.startsWith("mcp:")) {
193
+ errors.push(`tools[${i}]: "${t}" — external MCP tools are not allowlisted here; declare the server under mcpServers (its discovered tools surface automatically)`);
194
+ return;
195
+ }
196
+ if (!(t in ACTION_CATALOG)) {
197
+ errors.push(`tools[${i}]: unknown action type "${t}" (not in ACTION_CATALOG)`);
198
+ return;
199
+ }
200
+ if (seen.has(t))
201
+ errors.push(`tools[${i}]: duplicate action type "${t}"`);
202
+ seen.add(t);
203
+ });
204
+ }
205
+ }
206
+ // connections — validated before mcpServers so refs can resolve
207
+ const connectionServices = new Set();
208
+ if (input.connections !== undefined) {
209
+ if (!Array.isArray(input.connections)) {
210
+ errors.push("connections: must be an array");
211
+ }
212
+ else {
213
+ input.connections.forEach((c, i) => {
214
+ if (!isPlainObject(c)) {
215
+ errors.push(`connections[${i}]: must be an object`);
216
+ return;
217
+ }
218
+ if (typeof c.service !== "string" || !SERVICE_RE.test(c.service)) {
219
+ errors.push(`connections[${i}].service: required, 1-64 chars of letters/digits/._-`);
220
+ }
221
+ else if (connectionServices.has(c.service)) {
222
+ errors.push(`connections[${i}].service: duplicate service "${c.service}"`);
223
+ }
224
+ else {
225
+ connectionServices.add(c.service);
226
+ }
227
+ if (c.owner !== "agent" && c.owner !== "workspace") {
228
+ errors.push(`connections[${i}].owner: must be "agent" | "workspace"`);
229
+ }
230
+ for (const key of Object.keys(c)) {
231
+ if (key !== "service" && key !== "owner")
232
+ errors.push(`connections[${i}].${key}: unknown key`);
233
+ }
234
+ });
235
+ }
236
+ }
237
+ // mcpServers
238
+ const referencedConnections = new Set();
239
+ if (input.mcpServers !== undefined) {
240
+ if (!Array.isArray(input.mcpServers)) {
241
+ errors.push("mcpServers: must be an array");
242
+ }
243
+ else {
244
+ const names = new Set();
245
+ input.mcpServers.forEach((s, i) => {
246
+ if (!isPlainObject(s)) {
247
+ errors.push(`mcpServers[${i}]: must be an object`);
248
+ return;
249
+ }
250
+ if (typeof s.name !== "string" || !SERVER_NAME_RE.test(s.name)) {
251
+ errors.push(`mcpServers[${i}].name: required, 1-64 chars of letters/digits/_-`);
252
+ }
253
+ else if (names.has(s.name)) {
254
+ errors.push(`mcpServers[${i}].name: duplicate server name "${s.name}"`);
255
+ }
256
+ else {
257
+ names.add(s.name);
258
+ }
259
+ if (typeof s.url !== "string" || !isHttpUrl(s.url)) {
260
+ errors.push(`mcpServers[${i}].url: required http(s) URL`);
261
+ }
262
+ if (s.connection !== undefined) {
263
+ if (typeof s.connection !== "string") {
264
+ errors.push(`mcpServers[${i}].connection: must be a string`);
265
+ }
266
+ else if (!connectionServices.has(s.connection)) {
267
+ errors.push(`mcpServers[${i}].connection: "${s.connection}" does not match any connections[].service`);
268
+ }
269
+ else {
270
+ referencedConnections.add(s.connection);
271
+ }
272
+ }
273
+ for (const key of Object.keys(s)) {
274
+ if (key !== "name" && key !== "url" && key !== "connection")
275
+ errors.push(`mcpServers[${i}].${key}: unknown key`);
276
+ }
277
+ });
278
+ }
279
+ }
280
+ // Dead-declaration check: every connection must authenticate something.
281
+ for (const service of connectionServices) {
282
+ if (!referencedConnections.has(service)) {
283
+ errors.push(`connections: service "${service}" is not referenced by any mcpServers[].connection — remove it or wire it`);
284
+ }
285
+ }
286
+ // connectors
287
+ if (input.connectors !== undefined) {
288
+ if (!Array.isArray(input.connectors)) {
289
+ errors.push("connectors: must be an array");
290
+ }
291
+ else {
292
+ const platforms = new Set();
293
+ input.connectors.forEach((c, i) => {
294
+ if (!isPlainObject(c)) {
295
+ errors.push(`connectors[${i}]: must be an object`);
296
+ return;
297
+ }
298
+ const platform = c.platform;
299
+ if (typeof platform !== "string" || !(platform in CONNECTOR_PLATFORMS)) {
300
+ errors.push(`connectors[${i}].platform: must be one of ${Object.keys(CONNECTOR_PLATFORMS).join(" | ")}`);
301
+ return;
302
+ }
303
+ if (platforms.has(platform)) {
304
+ errors.push(`connectors[${i}].platform: duplicate platform "${platform}"`);
305
+ }
306
+ platforms.add(platform);
307
+ const allowed = CONNECTOR_PLATFORMS[platform].modes;
308
+ if (typeof c.mode !== "string" || !allowed.includes(c.mode)) {
309
+ errors.push(`connectors[${i}].mode: "${String(c.mode)}" not allowed for ${platform} (allowed: ${allowed.join(", ")})`);
310
+ }
311
+ for (const key of Object.keys(c)) {
312
+ if (key !== "platform" && key !== "mode")
313
+ errors.push(`connectors[${i}].${key}: unknown key`);
314
+ }
315
+ });
316
+ }
317
+ }
318
+ if (errors.length > 0)
319
+ return { ok: false, pack: null, errors };
320
+ return { ok: true, pack: deepCopy(input), errors: [] };
321
+ }
322
+ /** Parse a YAML (or JSON) pack document and validate it. */
323
+ export function parsePack(text) {
324
+ let doc;
325
+ try {
326
+ doc = yaml.load(text);
327
+ }
328
+ catch (err) {
329
+ return { ok: false, pack: null, errors: [`pack: YAML parse error — ${err instanceof Error ? err.message : String(err)}`] };
330
+ }
331
+ return validatePack(doc);
332
+ }
333
+ // ── Preset conversion (lossless round-trip) ───────────────────
334
+ /**
335
+ * Convert an existing Forge preset (the `preset:` block of nookplot.yaml)
336
+ * into a Pack. The preset is embedded verbatim, so
337
+ * `packToPresetConfig(presetToPack(p))` deep-equals `p` — lossless.
338
+ * Throws if the result does not validate (e.g. a preset id that can't be a
339
+ * pack name and no explicit name was given).
340
+ */
341
+ export function presetToPack(preset, meta) {
342
+ const candidate = {
343
+ name: meta?.name ?? preset.id,
344
+ version: meta?.version ?? `${preset.version ?? 1}.0.0`,
345
+ ...(meta?.description !== undefined ? { description: meta.description } : {}),
346
+ preset: deepCopy(preset),
347
+ };
348
+ const result = validatePack(candidate);
349
+ if (!result.ok || !result.pack) {
350
+ throw new Error(`presetToPack: converted pack is invalid — ${result.errors.join("; ")}`);
351
+ }
352
+ return result.pack;
353
+ }
354
+ /** Extract the embedded Forge preset from a pack (null when none declared). */
355
+ export function packToPresetConfig(pack) {
356
+ return pack.preset ? deepCopy(pack.preset) : null;
357
+ }
358
+ // ── Action resolution (gating input) ──────────────────────────
359
+ /**
360
+ * Resolve a pack's declared action set: `tools` ∪ each connector's catalog
361
+ * category (email → the "email" actions; discord contributes none). This is
362
+ * the `packActions` input to getAvailableActionsFromMap — mounted external
363
+ * MCP tools (`mcp__*`) are NOT included here; they merge via externalActions.
364
+ * Sorted for deterministic prompts/tests.
365
+ */
366
+ export function resolvePackActions(pack) {
367
+ const actions = new Set(pack.tools ?? []);
368
+ for (const connector of pack.connectors ?? []) {
369
+ const category = CONNECTOR_PLATFORMS[connector.platform].toolCategory;
370
+ if (!category)
371
+ continue;
372
+ for (const [name, info] of Object.entries(ACTION_CATALOG)) {
373
+ if (info.category === category)
374
+ actions.add(name);
375
+ }
376
+ }
377
+ return Array.from(actions).sort();
378
+ }
379
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../src/pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ /**
2
+ * PackLoader — loads a Pack at agent boot (ROADMAP_external-mcp-connectors
3
+ * Phase 3; the minimal pack-load slice that ROADMAP_pack-primitive inherits).
4
+ *
5
+ * On load it:
6
+ * 1. Parses + validates the pack (from options.pack or a pack YAML file).
7
+ * 2. Pre-flights every declared connection — which external services are
8
+ * already connected (agent credential / OAuth / workspace connection) —
9
+ * and produces actionable hints for the missing ones.
10
+ * 3. Mounts the declared MCP servers via the Phase-1/2 bridge
11
+ * (POST /v1/agents/me/mcp/servers is an upsert, so re-loading is
12
+ * idempotent). Servers whose connection is unsatisfied are skipped.
13
+ * 4. Reports connector binding status (Discord bindings are created in the
14
+ * platform install flow — a pack declares the capability; the loader
15
+ * reports bound/unbound).
16
+ * 5. Delegates the embedded `preset` block verbatim to PresetLoader.
17
+ *
18
+ * The loader mounts and reports; it does NOT gate. Pass the same pack to
19
+ * `new AutonomousAgent(runtime, { pack })` for prompt + dispatch gating.
20
+ *
21
+ * @module packLoader
22
+ */
23
+ import type { NookplotRuntime } from "./index.js";
24
+ import { type PresetLoadResult } from "./presetLoader.js";
25
+ import { type Pack, type PackConnection, type PackConnectorMode, type PackConnectorPlatform } from "./pack.js";
26
+ export interface PackLoaderOptions {
27
+ /** Pre-parsed pack — skips the file read. Caller is responsible for validation (parsePack). */
28
+ pack?: Pack;
29
+ /**
30
+ * Registry reference, `"name"` or `"name@1.2.3"` — fetched from the
31
+ * gateway pack registry via POST /v1/agents/me/pack/load (which also
32
+ * records it as the agent's active pack). Registry content is untrusted:
33
+ * it is re-validated with parsePack before use. Takes precedence over
34
+ * `packPath`; `pack` takes precedence over both.
35
+ */
36
+ packRef?: string;
37
+ /** Path to a pack YAML file (default "./pack.yaml"). */
38
+ packPath?: string;
39
+ /** Workspace that satisfies `owner: "workspace"` connections. */
40
+ workspaceId?: string;
41
+ /** Config path forwarded to PresetLoader (manifest conventions; default "./nookplot.yaml"). */
42
+ presetConfigPath?: string;
43
+ }
44
+ export interface PackConnectionStatus {
45
+ service: string;
46
+ owner: PackConnection["owner"];
47
+ status: "satisfied" | "missing";
48
+ /** How the satisfied connection authenticates at mount time. */
49
+ authType?: "bearer_credential" | "oauth" | "workspace";
50
+ /** Actionable next step when missing. */
51
+ hint?: string;
52
+ }
53
+ export interface PackMcpServerStatus {
54
+ name: string;
55
+ url: string;
56
+ status: "mounted" | "failed" | "skipped";
57
+ toolCount?: number;
58
+ /** Mount error (status "failed"). */
59
+ error?: string;
60
+ /** Why the mount was skipped (status "skipped"). */
61
+ reason?: string;
62
+ }
63
+ export interface PackConnectorStatus {
64
+ platform: PackConnectorPlatform;
65
+ mode: PackConnectorMode;
66
+ /** discord: bound/unbound (active bindings exist); email: always ready. */
67
+ status: "bound" | "unbound" | "ready";
68
+ detail?: string;
69
+ }
70
+ export interface PackLoadReport {
71
+ name: string;
72
+ version: string;
73
+ /** Where the pack came from: a pre-parsed object, a local file, or the gateway registry. */
74
+ source: "inline" | "file" | "registry";
75
+ /** Registry artifact fingerprint (sha256 of the stored YAML) — registry source only. */
76
+ contentHash?: string;
77
+ connections: PackConnectionStatus[];
78
+ mcpServers: PackMcpServerStatus[];
79
+ connectors: PackConnectorStatus[];
80
+ /** Present when the pack embeds a `preset` block. */
81
+ preset?: PresetLoadResult;
82
+ /** The pack's resolved action set — feed to AutonomousAgent / getAvailableActionsFromMap. */
83
+ actions: string[];
84
+ /** True when every connection is satisfied and every mount succeeded. */
85
+ ok: boolean;
86
+ }
87
+ /**
88
+ * Fetch a pack from the gateway registry by `"name"` or `"name@1.2.3"` via
89
+ * POST /v1/agents/me/pack/load — which also records it as the calling
90
+ * agent's active pack. Registry content is untrusted: it is re-validated
91
+ * with parsePack before returning; invalid content throws.
92
+ */
93
+ export declare function fetchRegistryPack(runtime: NookplotRuntime, ref: string): Promise<{
94
+ pack: Pack;
95
+ contentHash?: string;
96
+ }>;
97
+ export declare class PackLoader {
98
+ private runtime;
99
+ private options;
100
+ constructor(runtime: NookplotRuntime, options?: PackLoaderOptions);
101
+ /** Load the pack: validate → pre-flight → mount → connector status → preset. */
102
+ load(): Promise<PackLoadReport>;
103
+ private resolvePack;
104
+ private checkConnections;
105
+ private oauthConnected;
106
+ private mountServers;
107
+ private checkConnectors;
108
+ }
109
+ //# sourceMappingURL=packLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packLoader.d.ts","sourceRoot":"","sources":["../src/packLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAgB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAwF,KAAK,IAAI,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,KAAK,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAIrM,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,mBAAmB,GAAG,OAAO,GAAG,WAAW,CAAC;IACvD,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,IAAI,EAAE,iBAAiB,CAAC;IACxB,2EAA2E;IAC3E,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,4FAA4F;IAC5F,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACvC,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,qDAAqD;IACrD,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,6FAA6F;IAC7F,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,yEAAyE;IACzE,EAAE,EAAE,OAAO,CAAC;CACb;AAID;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,eAAe,EACxB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/C;AAID,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,OAAO,CAAoB;gBAEvB,OAAO,EAAE,eAAe,EAAE,OAAO,GAAE,iBAAsB;IAKrE,gFAAgF;IAC1E,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;YAgCvB,WAAW;YAmBX,gBAAgB;YAiEhB,cAAc;YAad,YAAY;YAuCZ,eAAe;CA4B9B"}