@agentproto/app-kit 1.4.1 → 1.5.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.
- package/dist/define-app.d.ts +9 -1
- package/dist/define-app.d.ts.map +1 -1
- package/dist/emit.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +256 -3
- package/dist/index.mjs.map +1 -1
- package/dist/load-app.d.ts.map +1 -1
- package/dist/types.d.ts +51 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/define-app.d.ts
CHANGED
|
@@ -17,10 +17,18 @@
|
|
|
17
17
|
* an orphan (a bundled workflow no agent lists) throws — that is what "an
|
|
18
18
|
* agent attached to its workflows" means, made checkable.
|
|
19
19
|
*/
|
|
20
|
-
import type { AppDefinition, AppHandle, DoctypeHandle } from "./types.js";
|
|
20
|
+
import type { AppDefinition, AppHandle, DoctypeHandle, OpenAIAppUiExtension } from "./types.js";
|
|
21
21
|
export declare class AppDefinitionError extends Error {
|
|
22
22
|
constructor(message: string);
|
|
23
23
|
}
|
|
24
24
|
export declare function defineApp(def: AppDefinition): AppHandle;
|
|
25
|
+
/**
|
|
26
|
+
* The single `ui.extensions.openai` validator/normalizer, shared by TS
|
|
27
|
+
* authoring (`defineApp`) and manifest loading (`loadAppHandle` re-runs
|
|
28
|
+
* through `defineApp`), so there is no hand-maintained duplicate. Normalizes
|
|
29
|
+
* file entrypoint extensions to lowercase; validates every shape/range rule
|
|
30
|
+
* with the exact `ui.extensions.openai.*` field path.
|
|
31
|
+
*/
|
|
32
|
+
export declare function normalizeOpenAIUiExtension(raw: unknown, tools: readonly string[] | undefined, fail: (message: string) => Error): OpenAIAppUiExtension | undefined;
|
|
25
33
|
export type { DoctypeHandle };
|
|
26
34
|
//# sourceMappingURL=define-app.d.ts.map
|
package/dist/define-app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-app.d.ts","sourceRoot":"","sources":["../src/define-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAEV,aAAa,EACb,SAAS,EACT,aAAa,
|
|
1
|
+
{"version":3,"file":"define-app.d.ts","sourceRoot":"","sources":["../src/define-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAEV,aAAa,EACb,SAAS,EACT,aAAa,EACb,oBAAoB,EAKrB,MAAM,YAAY,CAAA;AAKnB,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,CA0LvD;AA8JD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACpC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,KAAK,GAC/B,oBAAoB,GAAG,SAAS,CAsBlC;AAmPD,YAAY,EAAE,aAAa,EAAE,CAAA"}
|
package/dist/emit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGpP,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAA;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAA;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,CAAA;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,EAAE,CAAC,EAAE,eAAe,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,uBAAuB,CAAA;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../src/emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGpP,UAAU,SAAS;IACjB,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAA;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAA;IACpC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACrC,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAA;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,YAAY,CAAA;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,EAAE,CAAC,EAAE,eAAe,CAAA;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAA;IACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,uBAAuB,CAAA;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAwH9E"}
|
package/dist/index.d.ts
CHANGED
|
@@ -44,5 +44,5 @@ export { loadAppBundledTools } from "./load-app-tools.js";
|
|
|
44
44
|
export { packApp, unpackApp, aggregateSha256, collectFiles, isManifest, safeId, AGENTAPP_FORMAT, AgentAppPackError, } from "./pack.js";
|
|
45
45
|
export type { AgentAppManifest, BundleFile, AgentAppPackErrorCode } from "./pack.js";
|
|
46
46
|
export { refKey, stripOwner } from "./refs.js";
|
|
47
|
-
export type { AppDefinition, AppHandle, AgentEntry, DoctypeHandle, WorkspaceShorthand, WorkspaceInput, AppUiDefinition, AppUiBuildConfig, AppArtifactSurface, AppSkillSurface, AppArtifactDecl, AppDevLaunchConfig, AppBoundariesDefinition, AppDataDefinition, AppDevDefinition, AppPlacement, AppRequirements, AppExposes, AppAccepts, ToMastraAgentOptions, EmittedApp, } from "./types.js";
|
|
47
|
+
export type { AppDefinition, AppHandle, AgentEntry, DoctypeHandle, WorkspaceShorthand, WorkspaceInput, AppUiDefinition, AppUiBuildConfig, OpenAIAppUiExtension, OpenAIEntrypoint, OpenAIIcon, AppArtifactSurface, AppSkillSurface, AppArtifactDecl, AppDevLaunchConfig, AppBoundariesDefinition, AppDataDefinition, AppDevDefinition, AppPlacement, AppRequirements, AppExposes, AppAccepts, ToMastraAgentOptions, EmittedApp, } from "./types.js";
|
|
48
48
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACxF,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EACL,OAAO,EACP,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,MAAM,EACN,eAAe,EACf,iBAAiB,GAClB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACpF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC9C,YAAY,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,UAAU,GACX,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACxF,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EACL,OAAO,EACP,SAAS,EACT,eAAe,EACf,YAAY,EACZ,UAAU,EACV,MAAM,EACN,eAAe,EACf,iBAAiB,GAClB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAA;AACpF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC9C,YAAY,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,UAAU,GACX,MAAM,YAAY,CAAA"}
|
package/dist/index.mjs
CHANGED
|
@@ -62,7 +62,8 @@ async function emitApp(app, dir) {
|
|
|
62
62
|
...app.ui.tools !== void 0 ? { tools: app.ui.tools } : {},
|
|
63
63
|
...app.ui.port !== void 0 ? { port: app.ui.port } : {},
|
|
64
64
|
...app.ui.csp !== void 0 ? { csp: app.ui.csp } : {},
|
|
65
|
-
...app.ui.build !== void 0 ? { build: app.ui.build } : {}
|
|
65
|
+
...app.ui.build !== void 0 ? { build: app.ui.build } : {},
|
|
66
|
+
...app.ui.extensions !== void 0 ? { extensions: app.ui.extensions } : {}
|
|
66
67
|
};
|
|
67
68
|
}
|
|
68
69
|
let artifactPath;
|
|
@@ -307,7 +308,19 @@ function defineApp(def) {
|
|
|
307
308
|
workflows: Object.freeze([...fields.exposes.workflows])
|
|
308
309
|
});
|
|
309
310
|
const accepts = Object.freeze({ ...fields.accepts });
|
|
310
|
-
const
|
|
311
|
+
const uiExtensions = def.ui === void 0 || def.ui.extensions === void 0 ? void 0 : Object.freeze({
|
|
312
|
+
openai: freezeDeep(
|
|
313
|
+
normalizeOpenAIUiExtension(
|
|
314
|
+
validateOpenAIExtensionsNamespace(def.ui.extensions),
|
|
315
|
+
def.ui.tools,
|
|
316
|
+
(msg) => new AppDefinitionError(msg)
|
|
317
|
+
)
|
|
318
|
+
)
|
|
319
|
+
});
|
|
320
|
+
const ui = def.ui ? Object.freeze({
|
|
321
|
+
...def.ui,
|
|
322
|
+
...uiExtensions !== void 0 ? { extensions: uiExtensions } : {}
|
|
323
|
+
}) : void 0;
|
|
311
324
|
const artifact = def.artifact ? Object.freeze({ ...def.artifact }) : void 0;
|
|
312
325
|
const skill = def.skill ? Object.freeze({ ...def.skill }) : void 0;
|
|
313
326
|
const artifacts = def.artifacts ? Object.freeze(def.artifacts.map((a) => Object.freeze({ ...a }))) : void 0;
|
|
@@ -478,6 +491,240 @@ function validateUniqueIds(items, kind) {
|
|
|
478
491
|
seen.add(item.id);
|
|
479
492
|
}
|
|
480
493
|
}
|
|
494
|
+
function validateOpenAIExtensionsNamespace(raw) {
|
|
495
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
496
|
+
throw new AppDefinitionError("`ui.extensions` must be an object.");
|
|
497
|
+
}
|
|
498
|
+
for (const key of Object.keys(raw)) {
|
|
499
|
+
if (key !== "openai") {
|
|
500
|
+
throw new AppDefinitionError(
|
|
501
|
+
`\`ui.extensions.${key}\` is not supported \u2014 \`extensions\` accepts only \`openai\` (v1).`
|
|
502
|
+
);
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
return raw.openai;
|
|
506
|
+
}
|
|
507
|
+
var OPENAI_EXTENSION_KEYS = /* @__PURE__ */ new Set(["entrypoints", "icons", "display", "mentions"]);
|
|
508
|
+
var OPENAI_CUT_KEY_MESSAGE = "is not a supported OpenAI extension field in v1 (cut would be silently half-advertised)";
|
|
509
|
+
var DOT_EXTENSION_RE = /^\.[a-z0-9][a-z0-9._+-]{0,31}$/;
|
|
510
|
+
var OPENAI_MODES = ["inline", "fullscreen"];
|
|
511
|
+
function normalizeOpenAIUiExtension(raw, tools, fail) {
|
|
512
|
+
if (raw === void 0) return void 0;
|
|
513
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
514
|
+
throw fail("`ui.extensions.openai` must be an object.");
|
|
515
|
+
}
|
|
516
|
+
for (const key of Object.keys(raw)) {
|
|
517
|
+
if (!OPENAI_EXTENSION_KEYS.has(key)) {
|
|
518
|
+
throw fail(`\`ui.extensions.openai.${key}\` ${OPENAI_CUT_KEY_MESSAGE}.`);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
const entrypoints = normalizeOpenAIEntrypoints(raw.entrypoints, fail);
|
|
522
|
+
const icons = normalizeOpenAIIcons(raw.icons, fail);
|
|
523
|
+
const display = normalizeOpenAIDisplay(raw.display, fail);
|
|
524
|
+
const mentions = normalizeOpenAIMentions(raw.mentions, tools, fail);
|
|
525
|
+
return {
|
|
526
|
+
...entrypoints !== void 0 ? { entrypoints } : {},
|
|
527
|
+
...icons !== void 0 ? { icons } : {},
|
|
528
|
+
...display !== void 0 ? { display } : {},
|
|
529
|
+
...mentions !== void 0 ? { mentions } : {}
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
function normalizeOpenAIEntrypoints(raw, fail) {
|
|
533
|
+
if (raw === void 0) return void 0;
|
|
534
|
+
if (!Array.isArray(raw)) {
|
|
535
|
+
throw fail("`ui.extensions.openai.entrypoints` must be an array.");
|
|
536
|
+
}
|
|
537
|
+
if (raw.length < 1 || raw.length > 3) {
|
|
538
|
+
throw fail(
|
|
539
|
+
`\`ui.extensions.openai.entrypoints\` must contain 1..3 entries, got ${raw.length}.`
|
|
540
|
+
);
|
|
541
|
+
}
|
|
542
|
+
const seenTypes = /* @__PURE__ */ new Set();
|
|
543
|
+
const out = [];
|
|
544
|
+
for (let i = 0; i < raw.length; i++) {
|
|
545
|
+
const path = `ui.extensions.openai.entrypoints[${i}]`;
|
|
546
|
+
const ep = raw[i];
|
|
547
|
+
if (typeof ep !== "object" || ep === null || Array.isArray(ep)) {
|
|
548
|
+
throw fail(`\`${path}\` must be an object.`);
|
|
549
|
+
}
|
|
550
|
+
const keys = Object.keys(ep);
|
|
551
|
+
const invalidKeys = keys.filter((k) => k !== "type" && k !== "extensions");
|
|
552
|
+
if (invalidKeys.length > 0) {
|
|
553
|
+
throw fail(
|
|
554
|
+
`\`${path}.${invalidKeys[0]}\` is not a supported \`${ep.type}\` entrypoint field.`
|
|
555
|
+
);
|
|
556
|
+
}
|
|
557
|
+
const type = ep.type;
|
|
558
|
+
if (type !== "global" && type !== "thread" && type !== "file") {
|
|
559
|
+
throw fail(`\`${path}.type\` must be "global", "thread" or "file", got ${JSON.stringify(type)}.`);
|
|
560
|
+
}
|
|
561
|
+
if (seenTypes.has(type)) {
|
|
562
|
+
throw fail(`\`ui.extensions.openai.entrypoints\` declares \`${type}\` more than once.`);
|
|
563
|
+
}
|
|
564
|
+
seenTypes.add(type);
|
|
565
|
+
if (type === "file") {
|
|
566
|
+
out.push({ type, extensions: normalizeDotExtensions(ep.extensions, path, fail) });
|
|
567
|
+
} else {
|
|
568
|
+
out.push({ type });
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
return out;
|
|
572
|
+
}
|
|
573
|
+
function normalizeDotExtensions(raw, path, fail) {
|
|
574
|
+
if (!Array.isArray(raw)) {
|
|
575
|
+
throw fail(`\`${path}.extensions\` must be an array of dot-prefixed strings.`);
|
|
576
|
+
}
|
|
577
|
+
if (raw.length < 1 || raw.length > 32) {
|
|
578
|
+
throw fail(`\`${path}.extensions\` must contain 1..32 entries, got ${raw.length}.`);
|
|
579
|
+
}
|
|
580
|
+
const seen = /* @__PURE__ */ new Set();
|
|
581
|
+
const out = [];
|
|
582
|
+
for (let i = 0; i < raw.length; i++) {
|
|
583
|
+
const ext = raw[i];
|
|
584
|
+
if (typeof ext !== "string" || ext.trim() === "") {
|
|
585
|
+
throw fail(`\`${path}.extensions[${i}]\` must be a non-empty string.`);
|
|
586
|
+
}
|
|
587
|
+
const normalized = ext.toLowerCase();
|
|
588
|
+
if (seen.has(normalized)) {
|
|
589
|
+
throw fail(`\`${path}.extensions\` declares '${normalized}' more than once.`);
|
|
590
|
+
}
|
|
591
|
+
seen.add(normalized);
|
|
592
|
+
if (!DOT_EXTENSION_RE.test(normalized)) {
|
|
593
|
+
throw fail(
|
|
594
|
+
`\`${path}.extensions[${i}]\` ('${ext}') must be a dot-prefixed lowercase suffix matching /^\\.[a-z0-9][a-z0-9._+-]{0,31}$/, e.g. '.md'.`
|
|
595
|
+
);
|
|
596
|
+
}
|
|
597
|
+
out.push(normalized);
|
|
598
|
+
}
|
|
599
|
+
return out;
|
|
600
|
+
}
|
|
601
|
+
function normalizeOpenAIIcons(raw, fail) {
|
|
602
|
+
if (raw === void 0) return void 0;
|
|
603
|
+
if (!Array.isArray(raw)) throw fail("`ui.extensions.openai.icons` must be an array.");
|
|
604
|
+
if (raw.length < 1) {
|
|
605
|
+
throw fail("`ui.extensions.openai.icons` must contain at least one icon when present.");
|
|
606
|
+
}
|
|
607
|
+
return raw.map((icon, i) => {
|
|
608
|
+
const path = `ui.extensions.openai.icons[${i}]`;
|
|
609
|
+
if (typeof icon !== "object" || icon === null || Array.isArray(icon)) {
|
|
610
|
+
throw fail(`\`${path}\` must be an object.`);
|
|
611
|
+
}
|
|
612
|
+
const keys = Object.keys(icon);
|
|
613
|
+
for (const key of keys) {
|
|
614
|
+
if (key !== "src" && key !== "mimeType" && key !== "sizes" && key !== "theme") {
|
|
615
|
+
throw fail(`\`${path}.${key}\` is not a supported icon field.`);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
const src = icon.src;
|
|
619
|
+
if (typeof src !== "string" || src.trim() === "") {
|
|
620
|
+
throw fail(`\`${path}.src\` must be a non-empty string.`);
|
|
621
|
+
}
|
|
622
|
+
if (!(ICON_SRC_HTTPS_RE.test(src) || hasValidIconSrcDataUrl(src))) {
|
|
623
|
+
throw fail(
|
|
624
|
+
`\`${path}.src\` must be an HTTPS URL or a 'data:image/\u2026;base64,\u2026' URL (inline SVG data allowed), got '${src.slice(0, 64)}'.`
|
|
625
|
+
);
|
|
626
|
+
}
|
|
627
|
+
const mimeType = icon.mimeType;
|
|
628
|
+
if (mimeType !== void 0 && (typeof mimeType !== "string" || mimeType.trim() === "")) {
|
|
629
|
+
throw fail(`\`${path}.mimeType\` must be a non-empty string when present.`);
|
|
630
|
+
}
|
|
631
|
+
const sizes = icon.sizes;
|
|
632
|
+
if (sizes !== void 0 && (!Array.isArray(sizes) || sizes.length === 0 || !sizes.every((s) => typeof s === "string" && s.trim() !== ""))) {
|
|
633
|
+
throw fail(`\`${path}.sizes\` must be an array of non-empty strings when present.`);
|
|
634
|
+
}
|
|
635
|
+
const theme = icon.theme;
|
|
636
|
+
if (theme !== void 0 && theme !== "light" && theme !== "dark") {
|
|
637
|
+
throw fail(`\`${path}.theme\` must be "light" or "dark" when present, got ${JSON.stringify(theme)}.`);
|
|
638
|
+
}
|
|
639
|
+
return {
|
|
640
|
+
src,
|
|
641
|
+
...mimeType !== void 0 ? { mimeType } : {},
|
|
642
|
+
...sizes !== void 0 ? { sizes: Object.freeze([...sizes]) } : {},
|
|
643
|
+
...theme !== void 0 ? { theme } : {}
|
|
644
|
+
};
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
var ICON_SRC_HTTPS_RE = /^https:\/\/\S+$/;
|
|
648
|
+
function hasValidIconSrcDataUrl(src) {
|
|
649
|
+
const comma = src.indexOf(",");
|
|
650
|
+
if (comma < 0) return false;
|
|
651
|
+
const header = src.slice(0, comma);
|
|
652
|
+
const payload = src.slice(comma + 1);
|
|
653
|
+
if (!/^data:image\/[a-z0-9.+-]+(?:;charset=[\w-]+)?(?:;base64|;utf8)?$/i.test(header)) return false;
|
|
654
|
+
if (/;base64$/i.test(header)) return /^[A-Za-z0-9+/=\r\n]+$/.test(payload);
|
|
655
|
+
return payload.trim() !== "";
|
|
656
|
+
}
|
|
657
|
+
function normalizeOpenAIDisplay(raw, fail) {
|
|
658
|
+
if (raw === void 0) return void 0;
|
|
659
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
660
|
+
throw fail("`ui.extensions.openai.display` must be an object.");
|
|
661
|
+
}
|
|
662
|
+
const availableModes = raw.availableModes;
|
|
663
|
+
if (availableModes !== void 0) {
|
|
664
|
+
if (!Array.isArray(availableModes) || availableModes.length === 0) {
|
|
665
|
+
throw fail("`ui.extensions.openai.display.availableModes` must be a non-empty array when present.");
|
|
666
|
+
}
|
|
667
|
+
const seen = /* @__PURE__ */ new Set();
|
|
668
|
+
for (const mode of availableModes) {
|
|
669
|
+
if (mode !== "inline" && mode !== "fullscreen") {
|
|
670
|
+
throw fail(
|
|
671
|
+
`\`ui.extensions.openai.display.availableModes\` supports only "inline" and "fullscreen", got ${JSON.stringify(mode)}.`
|
|
672
|
+
);
|
|
673
|
+
}
|
|
674
|
+
if (seen.has(mode)) {
|
|
675
|
+
throw fail(`\`ui.extensions.openai.display.availableModes\` declares '${mode}' more than once.`);
|
|
676
|
+
}
|
|
677
|
+
seen.add(mode);
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
const preferredMode = raw.preferredMode;
|
|
681
|
+
if (preferredMode !== void 0 && !OPENAI_MODES.includes(preferredMode)) {
|
|
682
|
+
throw fail(
|
|
683
|
+
`\`ui.extensions.openai.display.preferredMode\` must be "inline" or "fullscreen", got ${JSON.stringify(preferredMode)}.`
|
|
684
|
+
);
|
|
685
|
+
}
|
|
686
|
+
if (availableModes !== void 0 && preferredMode !== void 0 && !availableModes.includes(preferredMode)) {
|
|
687
|
+
throw fail(
|
|
688
|
+
`\`ui.extensions.openai.display.preferredMode\` ('${preferredMode}') must occur in \`ui.extensions.openai.display.availableModes\` when both are declared.`
|
|
689
|
+
);
|
|
690
|
+
}
|
|
691
|
+
return {
|
|
692
|
+
...availableModes !== void 0 ? { availableModes: Object.freeze([...availableModes]) } : {},
|
|
693
|
+
...preferredMode !== void 0 ? { preferredMode } : {}
|
|
694
|
+
};
|
|
695
|
+
}
|
|
696
|
+
function normalizeOpenAIMentions(raw, tools, fail) {
|
|
697
|
+
if (raw === void 0) return void 0;
|
|
698
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
|
|
699
|
+
throw fail("`ui.extensions.openai.mentions` must be an object.");
|
|
700
|
+
}
|
|
701
|
+
for (const key of Object.keys(raw)) {
|
|
702
|
+
if (key !== "searchTool") {
|
|
703
|
+
throw fail(`\`ui.extensions.openai.mentions.${key}\` is not a supported mentions field.`);
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
const searchTool = raw.searchTool;
|
|
707
|
+
if (typeof searchTool !== "string" || searchTool.trim() === "") {
|
|
708
|
+
throw fail("`ui.extensions.openai.mentions.searchTool` must be a non-empty string.");
|
|
709
|
+
}
|
|
710
|
+
if (tools === void 0 || !tools.includes(searchTool)) {
|
|
711
|
+
throw fail(
|
|
712
|
+
`\`ui.extensions.openai.mentions.searchTool\` '${searchTool}' must be declared in this same ui block's \`tools\`${tools ? ` (${tools.join(", ")})` : " \u2014 the ui declares none"}.`
|
|
713
|
+
);
|
|
714
|
+
}
|
|
715
|
+
return { searchTool };
|
|
716
|
+
}
|
|
717
|
+
function freezeDeep(value) {
|
|
718
|
+
if (Array.isArray(value)) return Object.freeze(value.map(freezeDeep));
|
|
719
|
+
if (typeof value === "object" && value !== null) {
|
|
720
|
+
const out = {};
|
|
721
|
+
for (const [key, v] of Object.entries(value)) {
|
|
722
|
+
out[key] = freezeDeep(v);
|
|
723
|
+
}
|
|
724
|
+
return Object.freeze(out);
|
|
725
|
+
}
|
|
726
|
+
return value;
|
|
727
|
+
}
|
|
481
728
|
|
|
482
729
|
// src/errors.ts
|
|
483
730
|
var AppLoadError = class extends Error {
|
|
@@ -842,7 +1089,13 @@ async function loadAppHandle(dir) {
|
|
|
842
1089
|
...fm.ui.tools !== void 0 ? { tools: fm.ui.tools } : {},
|
|
843
1090
|
...fm.ui.port !== void 0 ? { port: fm.ui.port } : {},
|
|
844
1091
|
...fm.ui.csp !== void 0 ? { csp: fm.ui.csp } : {},
|
|
845
|
-
...build !== void 0 ? { build } : {}
|
|
1092
|
+
...build !== void 0 ? { build } : {},
|
|
1093
|
+
// Pass through UNFILTERED — `defineApp`'s
|
|
1094
|
+
// `validateOpenAIExtensionsNamespace` rejects any sibling vendor key
|
|
1095
|
+
// (a typo, a future vendor block, hand-authored drift) with the same
|
|
1096
|
+
// diagnostic the TS-authoring path throws. Pre-filtering to `openai`
|
|
1097
|
+
// here would silently drop those instead of failing loudly.
|
|
1098
|
+
...fm.ui.extensions !== void 0 ? { extensions: fm.ui.extensions } : {}
|
|
846
1099
|
};
|
|
847
1100
|
}
|
|
848
1101
|
return defineApp({
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/refs.ts","../src/emit.ts","../src/manifest-fields.ts","../src/define-app.ts","../src/errors.ts","../src/load-app-tools.ts","../src/load-app.ts","../src/pack.ts"],"names":["workflowRefs","matter","isAbsolute","relative","join","readFile","readdir","resolve","mkdir","dirname","cp","writeFile"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Ref-key extraction, shared with the same convention `buildMastraAgent`\n * uses (`packages/mastra/src/build-agent.ts` `refKey`). An AIP-27 ref is\n * a string shorthand or `{ ref | file | inline }`; the key is the string,\n * else `.ref`, else `.file`, else a stable JSON of the inline payload.\n */\n\nimport type { AnyRef } from \"@agentproto/agent\"\n\nexport function refKey(ref: AnyRef): string {\n if (typeof ref === \"string\") return ref\n return ref.ref ?? ref.file ?? JSON.stringify(ref.inline ?? ref)\n}\n\n/** `@agentik/writer` → `writer`; bare ids untouched. */\nexport function stripOwner(id: string): string {\n const m = id.match(/^@[^/]+\\/(.+)$/)\n return m ? m[1]! : id\n}\n","/**\n * `emitApp(app, dir)` — write an app's agents + workflows to disk under an\n * agentproto-owned base, so the manifests don't squat the shared root\n * `.agents/` convention:\n *\n * <dir>/WORKSPACE.md (when the app has a\n * workspace — AIP-34 root\n * manifest; owner = tenant)\n * <dir>/.agentproto/agents/<id>/AGENT.md (one per agent)\n * <dir>/.agentproto/workflows/<wf.id>/WORKFLOW.md (shared — a workflow may\n * be run by several agents)\n * <dir>/.agentproto/APP.md (root index — always\n * written, so a future\n * `app_install` can\n * discover the bundle)\n *\n * The \"tenant\" isn't a `tenants/<t>/…` path segment — it's the `owner` of\n * the AIP-34 WORKSPACE.md (guild / user / org), and local storage is its\n * AIP-35 `storage` block. So there is no bespoke tenant folder to invent.\n *\n * All manifests are plain markdown: frontmatter = the validated handle (or,\n * for APP.md, the identity + a manifest of `{ id, path }` refs to every\n * agent/workflow it bundles), body = the agent's `body` (its system prompt),\n * the workflow description, or the app description. Because a\n * `defineWorkflow` handle is pure data, the WORKFLOW.md needs no `entry:`\n * module — the manifest *is* the workflow, so `loadWorkflowHandle` returns\n * it directly with nothing to reconcile against.\n *\n * `emitApp` stays dependency-light on purpose (no Mastra import) — that\n * split lets a host write/discover an app without paying for the Mastra\n * build path.\n */\n\nimport { copyFile, cp, mkdir, writeFile } from \"node:fs/promises\"\nimport { join, relative } from \"node:path\"\nimport matter from \"gray-matter\"\nimport type { WorkflowHandle } from \"@agentproto/workflow\"\nimport type { WorkspaceHandle } from \"@agentproto/workspace\"\nimport type { AgentEntry, AppAccepts, AppArtifactDecl, AppArtifactSurface, AppBoundariesDefinition, AppDataDefinition, AppDevDefinition, AppExposes, AppPlacement, AppRequirements, AppSkillSurface, AppUiDefinition, EmittedApp } from \"./types.js\"\nimport { stripOwner } from \"./refs.js\"\n\ninterface EmitInput {\n readonly agents: readonly AgentEntry[]\n readonly workflows: readonly WorkflowHandle[]\n readonly workspace?: WorkspaceHandle\n readonly id?: string\n readonly name?: string\n readonly version?: string\n readonly description?: string\n readonly requires?: readonly string[]\n readonly requirements?: AppRequirements\n readonly placement?: AppPlacement\n readonly exposes?: AppExposes\n readonly accepts?: AppAccepts\n readonly ui?: AppUiDefinition\n readonly artifact?: AppArtifactSurface\n readonly skill?: AppSkillSurface\n readonly artifacts?: readonly AppArtifactDecl[]\n readonly dev?: AppDevDefinition\n readonly data?: AppDataDefinition\n readonly externalReadRoots?: readonly string[]\n readonly boundaries?: AppBoundariesDefinition\n readonly category?: string\n}\n\nexport async function emitApp(app: EmitInput, dir: string): Promise<EmittedApp> {\n let workspacePath: string | undefined\n if (app.workspace) {\n await mkdir(dir, { recursive: true })\n workspacePath = join(dir, \"WORKSPACE.md\")\n await writeFile(\n workspacePath,\n toManifest(app.workspace, app.workspace.description ?? app.workspace.name),\n \"utf8\",\n )\n }\n\n const agentPaths: Record<string, string> = {}\n for (const { agent, body } of app.agents) {\n const agentDir = join(dir, \".agentproto\", \"agents\", stripOwner(agent.id))\n await mkdir(agentDir, { recursive: true })\n const agentPath = join(agentDir, \"AGENT.md\")\n await writeFile(agentPath, toManifest(agent, body ?? \"\"), \"utf8\")\n agentPaths[agent.id] = agentPath\n }\n\n let uiPath: string | undefined\n let uiFrontmatter: Record<string, unknown> | undefined\n if (app.ui) {\n const uiDir = join(dir, \".agentproto\", \"ui\")\n await mkdir(uiDir, { recursive: true })\n uiPath = join(uiDir, \"index.html\")\n await writeFile(uiPath, app.ui.html, \"utf8\")\n uiFrontmatter = {\n path: relative(dir, uiPath),\n ...(app.ui.title !== undefined ? { title: app.ui.title } : {}),\n ...(app.ui.description !== undefined ? { description: app.ui.description } : {}),\n ...(app.ui.tools !== undefined ? { tools: app.ui.tools } : {}),\n ...(app.ui.port !== undefined ? { port: app.ui.port } : {}),\n ...(app.ui.csp !== undefined ? { csp: app.ui.csp } : {}),\n ...(app.ui.build !== undefined ? { build: app.ui.build } : {}),\n }\n }\n\n let artifactPath: string | undefined\n let artifactFrontmatter: Record<string, unknown> | undefined\n if (app.artifact) {\n const artifactDir = join(dir, \".agentproto\", \"artifact\")\n await mkdir(artifactDir, { recursive: true })\n artifactPath = join(artifactDir, \"index.html\")\n await copyFile(app.artifact.path, artifactPath)\n artifactFrontmatter = {\n path: relative(dir, artifactPath),\n ...(app.artifact.title !== undefined ? { title: app.artifact.title } : {}),\n ...(app.artifact.description !== undefined ? { description: app.artifact.description } : {}),\n }\n }\n\n let skillPath: string | undefined\n let skillFrontmatter: Record<string, unknown> | undefined\n if (app.skill) {\n skillPath = join(dir, \".agentproto\", \"skill\")\n await mkdir(skillPath, { recursive: true })\n await cp(app.skill.path, skillPath, { recursive: true })\n skillFrontmatter = {\n path: relative(dir, skillPath),\n ...(app.skill.title !== undefined ? { title: app.skill.title } : {}),\n ...(app.skill.description !== undefined ? { description: app.skill.description } : {}),\n }\n }\n\n const workflowPaths: string[] = []\n const workflowRefs: { id: string; path: string }[] = []\n for (const wf of app.workflows) {\n const wfDir = join(dir, \".agentproto\", \"workflows\", wf.id)\n await mkdir(wfDir, { recursive: true })\n const wfPath = join(wfDir, \"WORKFLOW.md\")\n await writeFile(wfPath, toManifest(wf, wf.description ?? \"\"), \"utf8\")\n workflowPaths.push(wfPath)\n workflowRefs.push({ id: wf.id, path: relative(dir, wfPath) })\n }\n\n await mkdir(join(dir, \".agentproto\"), { recursive: true })\n const appPath = join(dir, \".agentproto\", \"APP.md\")\n const agentRefs = app.agents.map(({ agent }) => ({\n id: agent.id,\n path: relative(dir, agentPaths[agent.id]!),\n }))\n const appFrontmatter: Record<string, unknown> = {\n schema: \"app/v1\",\n ...(app.id !== undefined ? { id: app.id } : {}),\n ...(app.name !== undefined ? { name: app.name } : {}),\n version: app.version ?? \"0.1.0\",\n ...(app.description !== undefined ? { description: app.description } : {}),\n agents: agentRefs,\n workflows: workflowRefs,\n ...(app.workspace ? { workspace: app.workspace.id } : {}),\n ...requiresFrontmatter(app),\n ...(app.placement !== undefined && app.placement !== \"any\" ? { placement: app.placement } : {}),\n ...(app.exposes && (app.exposes.agents.length > 0 || app.exposes.workflows.length > 0)\n ? { exposes: { agents: app.exposes.agents, workflows: app.exposes.workflows } }\n : {}),\n ...(app.accepts?.tasks ? { accepts: { tasks: true } } : {}),\n ...(uiFrontmatter !== undefined ? { ui: uiFrontmatter } : {}),\n ...(artifactFrontmatter !== undefined ? { artifact: artifactFrontmatter } : {}),\n ...(skillFrontmatter !== undefined ? { skill: skillFrontmatter } : {}),\n ...(app.artifacts !== undefined ? { artifacts: app.artifacts } : {}),\n ...(app.dev !== undefined ? { dev: app.dev } : {}),\n ...(app.data !== undefined ? { data: app.data } : {}),\n ...(app.externalReadRoots !== undefined ? { externalReadRoots: app.externalReadRoots } : {}),\n ...(app.boundaries !== undefined ? { boundaries: app.boundaries } : {}),\n ...(app.category !== undefined ? { category: app.category } : {}),\n }\n await writeFile(appPath, toManifest(appFrontmatter, app.description ?? \"\"), \"utf8\")\n\n return {\n agentPaths,\n workflowPaths,\n appPath,\n ...(workspacePath ? { workspacePath } : {}),\n ...(uiPath ? { uiPath } : {}),\n ...(artifactPath ? { artifactPath } : {}),\n ...(skillPath ? { skillPath } : {}),\n }\n}\n\n/** Legacy flat array while only app ids are declared; object form once any\n * host requirement (browser/fs/gpu/secrets) is set. Defaults are omitted. */\nfunction requiresFrontmatter(app: EmitInput): Record<string, unknown> {\n const r = app.requirements\n if (r && (r.browser || r.fs || r.gpu || r.secrets.length > 0)) {\n return {\n requires: { browser: r.browser, fs: r.fs, gpu: r.gpu, secrets: r.secrets, apps: r.apps },\n }\n }\n return app.requires !== undefined ? { requires: app.requires } : {}\n}\n\nfunction toManifest(handle: object, body: string): string {\n const data: Record<string, unknown> = JSON.parse(JSON.stringify(handle))\n return matter.stringify(`\\n${body}\\n`, data)\n}\n","/**\n * Validation + defaulting for the APP.md placement/requires/exposes/accepts\n * keys. Shared by `defineApp` (throws `AppDefinitionError`) and\n * `loadAppHandle` (throws `AppLoadError`) through the `fail` factory, so a\n * hand-edited APP.md and a bad `defineApp({...})` call get the same diagnostic.\n */\n\nimport type { AppAccepts, AppExposes, AppPlacement, AppRequirements } from \"./types.js\"\n\nexport const APP_PLACEMENTS: readonly AppPlacement[] = [\"local\", \"box\", \"any\", \"split\"]\n\nexport interface ManifestFieldsInput {\n readonly placement?: unknown\n readonly requires?: unknown\n readonly exposes?: unknown\n readonly accepts?: unknown\n}\n\nexport interface DeclaredIds {\n readonly agents: readonly string[]\n readonly workflows: readonly string[]\n}\n\nexport interface NormalizedManifestFields {\n readonly placement: AppPlacement\n /** Flat app-id list; undefined when `requires` was absent (or an object with no `apps`). */\n readonly requires: readonly string[] | undefined\n readonly requirements: AppRequirements\n readonly exposes: AppExposes\n readonly accepts: AppAccepts\n}\n\ntype Fail = (message: string) => Error\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v)\n}\n\nfunction stringList(v: unknown, key: string, fail: Fail): readonly string[] {\n if (v === undefined) return []\n if (!Array.isArray(v) || !v.every(e => typeof e === \"string\" && e.trim() !== \"\")) {\n throw fail(`'${key}' must be an array of non-empty strings.`)\n }\n return [...v] as string[]\n}\n\nfunction bool(v: unknown, key: string, fail: Fail): boolean {\n if (v === undefined) return false\n if (typeof v !== \"boolean\") throw fail(`'${key}' must be a boolean.`)\n return v\n}\n\nexport function normalizeManifestFields(\n input: ManifestFieldsInput,\n declared: DeclaredIds,\n fail: Fail,\n): NormalizedManifestFields {\n let placement: AppPlacement = \"any\"\n if (input.placement !== undefined) {\n if (typeof input.placement !== \"string\" || !APP_PLACEMENTS.includes(input.placement as AppPlacement)) {\n throw fail(\n `'placement' must be one of ${APP_PLACEMENTS.map(p => `\"${p}\"`).join(\", \")}, got ${JSON.stringify(input.placement)}.`,\n )\n }\n placement = input.placement as AppPlacement\n }\n\n let requires: readonly string[] | undefined\n let requirements: AppRequirements = { browser: false, fs: false, gpu: false, secrets: [], apps: [] }\n const r = input.requires\n if (r !== undefined) {\n if (Array.isArray(r)) {\n if (!r.every(e => typeof e === \"string\")) {\n throw fail(\"'requires' must be an array of strings or an object { browser, fs, gpu, secrets, apps }.\")\n }\n requires = [...r] as string[]\n requirements = { ...requirements, apps: requires }\n } else if (isRecord(r)) {\n const apps = stringList(r.apps, \"requires.apps\", fail)\n requirements = {\n browser: bool(r.browser, \"requires.browser\", fail),\n fs: bool(r.fs, \"requires.fs\", fail),\n gpu: bool(r.gpu, \"requires.gpu\", fail),\n secrets: stringList(r.secrets, \"requires.secrets\", fail),\n apps,\n }\n if (apps.length > 0) requires = apps\n } else {\n throw fail(\"'requires' must be an array of strings or an object { browser, fs, gpu, secrets, apps }.\")\n }\n }\n\n let exposes: AppExposes = { agents: [], workflows: [] }\n if (input.exposes !== undefined) {\n if (!isRecord(input.exposes)) throw fail(\"'exposes' must be an object { agents, workflows }.\")\n const agents = stringList(input.exposes.agents, \"exposes.agents\", fail)\n const workflows = stringList(input.exposes.workflows, \"exposes.workflows\", fail)\n for (const id of agents) {\n if (!declared.agents.includes(id)) {\n throw fail(\n `'exposes.agents' names '${id}' but the app declares no such agent. Declared: [${declared.agents.join(\", \") || \"none\"}].`,\n )\n }\n }\n for (const id of workflows) {\n if (!declared.workflows.includes(id)) {\n throw fail(\n `'exposes.workflows' names '${id}' but the app declares no such workflow. Declared: [${declared.workflows.join(\", \") || \"none\"}].`,\n )\n }\n }\n exposes = { agents, workflows }\n }\n\n let accepts: AppAccepts = { tasks: false }\n if (input.accepts !== undefined) {\n if (!isRecord(input.accepts)) throw fail(\"'accepts' must be an object { tasks }.\")\n accepts = { tasks: bool(input.accepts.tasks, \"accepts.tasks\", fail) }\n }\n\n return { placement, requires, requirements, exposes, accepts }\n}\n","/**\n * `defineApp({ agents, workflows, attach })` — bundle one or more AIP-42\n * agents, the AIP-15 workflows they run, and any other AIP artifacts into\n * one cross-linked, frozen handle.\n *\n * The only new invariant app-kit adds is *attachment*: the agents and the\n * bundled workflows must reference each other. Everything else (field\n * validation) already ran when the caller built the handles with\n * `defineAgent` / `defineWorkflow`, so `defineApp` validates the coupling,\n * not the fields.\n *\n * - agent ids are unique within the app.\n * - every `agent.workflows[]` ref MUST resolve to a bundled workflow id.\n * - every bundled workflow MUST be referenced by at least one agent.\n *\n * A dangling ref (an agent points at a workflow the app didn't bundle) or\n * an orphan (a bundled workflow no agent lists) throws — that is what \"an\n * agent attached to its workflows\" means, made checkable.\n */\n\nimport { isAbsolute } from \"node:path\"\nimport { defineWorkspace } from \"@agentproto/workspace\"\nimport type { AgentHandle, AnyRef } from \"@agentproto/agent\"\nimport type { BuildMastraAgentResult } from \"@agentproto/mastra\"\nimport type { WorkflowHandle } from \"@agentproto/workflow\"\nimport type { WorkspaceHandle } from \"@agentproto/workspace\"\nimport type {\n AgentEntry,\n AppDefinition,\n AppHandle,\n DoctypeHandle,\n ToMastraAgentOptions,\n WorkspaceInput,\n} from \"./types.js\"\nimport { refKey } from \"./refs.js\"\nimport { emitApp } from \"./emit.js\"\nimport { normalizeManifestFields } from \"./manifest-fields.js\"\n\nexport class AppDefinitionError extends Error {\n constructor(message: string) {\n super(`defineApp (app-kit): ${message}`)\n this.name = \"AppDefinitionError\"\n }\n}\n\nexport function defineApp(def: AppDefinition): AppHandle {\n if (def.id !== undefined && def.id.trim() === \"\") {\n throw new AppDefinitionError(\"`id` must be non-empty when present.\")\n }\n if (def.ui !== undefined && (typeof def.ui.html !== \"string\" || def.ui.html.trim() === \"\")) {\n throw new AppDefinitionError(\"`ui.html` must be a non-empty string when `ui` is present.\")\n }\n if ((def.agents === undefined || def.agents.length === 0) && def.ui === undefined) {\n throw new AppDefinitionError(\n \"an app needs at least one agent, or a `ui` block for a UI-only app — got neither.\",\n )\n }\n if (def.dev !== undefined && (!Array.isArray(def.dev.launch) || def.dev.launch.length === 0)) {\n throw new AppDefinitionError(\"`dev.launch` must be a non-empty array when `dev` is present.\")\n }\n if (def.data !== undefined && def.data.dir !== undefined && (typeof def.data.dir !== \"string\" || def.data.dir.trim() === \"\")) {\n throw new AppDefinitionError(\"`data.dir` must be a non-empty string when present.\")\n }\nif (def.artifact !== undefined && (typeof def.artifact.path !== \"string\" || def.artifact.path.trim() === \"\")) {\n throw new AppDefinitionError(\"`artifact.path` must be a non-empty string when `artifact` is present.\")\n }\n // AIP-53 rule 7: `artifact.path` / `skill.path` MUST be absolute —\n // `emit` copies from them at write time and a relative path has no\n // defined base to resolve against.\n if (def.artifact !== undefined && !isAbsolute(def.artifact.path)) {\n throw new AppDefinitionError(\n `\\`artifact.path\\` must be an absolute filesystem path, got '${def.artifact.path}' — a relative path has no defined base to resolve against (AIP-53 rule 7).`,\n )\n }\n if (def.skill !== undefined && (typeof def.skill.path !== \"string\" || def.skill.path.trim() === \"\")) {\n throw new AppDefinitionError(\"`skill.path` must be a non-empty string when `skill` is present.\")\n }\n if (def.skill !== undefined && !isAbsolute(def.skill.path)) {\n throw new AppDefinitionError(\n `\\`skill.path\\` must be an absolute filesystem path, got '${def.skill.path}' — a relative path has no defined base to resolve against (AIP-53 rule 7).`,\n )\n }\n if (def.category !== undefined && def.category.trim() === \"\") {\n throw new AppDefinitionError(\"`category` must be a non-empty string when present.\")\n }\n\n const agents = (def.agents ?? []).map(normalizeEntry)\n const workflows = def.workflows ?? []\n const tools = def.tools ?? []\n const drivers = def.drivers ?? []\n const attachments = def.attach ?? []\n const workspace = def.workspace ? toWorkspaceHandle(def.workspace) : undefined\n const id = def.id\n const name = def.name\n const version = def.version ?? (id ? \"0.1.0\" : undefined)\n const description = def.description\n const fields = normalizeManifestFields(\n { placement: def.placement, requires: def.requires, exposes: def.exposes, accepts: def.accepts },\n { agents: agents.map(e => e.agent.id), workflows: workflows.map(w => w.id) },\n msg => new AppDefinitionError(msg),\n )\n const requires = fields.requires ? Object.freeze([...fields.requires]) : undefined\n const requirements = Object.freeze({\n ...fields.requirements,\n secrets: Object.freeze([...fields.requirements.secrets]),\n apps: Object.freeze([...fields.requirements.apps]),\n })\n const placement = fields.placement\n const exposes = Object.freeze({\n agents: Object.freeze([...fields.exposes.agents]),\n workflows: Object.freeze([...fields.exposes.workflows]),\n })\n const accepts = Object.freeze({ ...fields.accepts })\n const ui = def.ui ? Object.freeze({ ...def.ui }) : undefined\n const artifact = def.artifact ? Object.freeze({ ...def.artifact }) : undefined\n const skill = def.skill ? Object.freeze({ ...def.skill }) : undefined\n const artifacts = def.artifacts ? Object.freeze(def.artifacts.map(a => Object.freeze({ ...a }))) : undefined\n const dev = def.dev\n ? Object.freeze({ launch: Object.freeze(def.dev.launch.map(l => Object.freeze({ ...l }))) })\n : undefined\n const externalReadRoots = def.externalReadRoots ? Object.freeze([...def.externalReadRoots]) : undefined\n const data = def.data ? Object.freeze({ ...def.data }) : undefined\n const boundaries = def.boundaries ? Object.freeze({ ...def.boundaries }) : undefined\n const category = def.category\n\n validateAttachment(agents, workflows)\n validateUniqueIds(tools, \"tool\")\n validateUniqueIds(drivers, \"driver\")\n\n const frozenAgents = Object.freeze(agents.map((e) => Object.freeze({ ...e })))\n const frozenWorkflows = Object.freeze([...workflows])\n const frozenTools = Object.freeze([...tools])\n const frozenDrivers = Object.freeze([...drivers])\n const frozenAttachments = Object.freeze([...attachments])\n\n const handle: AppHandle = {\n agents: frozenAgents,\n workflows: frozenWorkflows,\n tools: frozenTools,\n drivers: frozenDrivers,\n attachments: frozenAttachments,\n ...(workspace ? { workspace } : {}),\n ...(id !== undefined ? { id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(version !== undefined ? { version } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(requires !== undefined ? { requires } : {}),\n requirements,\n placement,\n exposes,\n accepts,\n ...(ui !== undefined ? { ui } : {}),\n ...(artifact !== undefined ? { artifact } : {}),\n ...(skill !== undefined ? { skill } : {}),\n ...(artifacts !== undefined ? { artifacts } : {}),\n ...(dev !== undefined ? { dev } : {}),\n ...(data !== undefined ? { data } : {}),\n ...(externalReadRoots !== undefined ? { externalReadRoots } : {}),\n ...(boundaries !== undefined ? { boundaries } : {}),\n ...(category !== undefined ? { category } : {}),\n\n async toMastraAgents(opts: ToMastraAgentOptions, only?: readonly string[]) {\n const targets = only ? selectAgents(frozenAgents, only) : frozenAgents\n const out: Record<string, BuildMastraAgentResult> = {}\n for (const entry of targets) {\n out[entry.agent.id] = await buildOne(entry, opts)\n }\n return out\n },\n\n pick(ids: readonly string[]) {\n return selectAgents(frozenAgents, ids)\n },\n\n async toMastraAgent(opts: ToMastraAgentOptions) {\n if (frozenAgents.length !== 1) {\n throw new AppDefinitionError(\n `toMastraAgent requires exactly one agent (app has ${frozenAgents.length}); use toMastraAgents.`,\n )\n }\n return buildOne(frozenAgents[0]!, opts)\n },\n\n emit(dir: string) {\n return emitApp(\n {\n agents: frozenAgents,\n workflows: frozenWorkflows,\n ...(workspace ? { workspace } : {}),\n ...(id !== undefined ? { id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(version !== undefined ? { version } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(requires !== undefined ? { requires } : {}),\n requirements,\n placement,\n exposes,\n accepts,\n ...(ui !== undefined ? { ui } : {}),\n ...(artifact !== undefined ? { artifact } : {}),\n ...(skill !== undefined ? { skill } : {}),\n ...(artifacts !== undefined ? { artifacts } : {}),\n ...(dev !== undefined ? { dev } : {}),\n ...(data !== undefined ? { data } : {}),\n ...(externalReadRoots !== undefined ? { externalReadRoots } : {}),\n ...(boundaries !== undefined ? { boundaries } : {}),\n ...(category !== undefined ? { category } : {}),\n },\n dir,\n )\n },\n }\n\n return Object.freeze(handle)\n}\n\n/**\n * Normalize the `workspace` input to an AIP-34 `WorkspaceHandle`. A built\n * handle (already run through `defineWorkspace`) carries `schema:\n * \"workspace/v1\"` and passes straight through; a `WorkspaceShorthand` is\n * completed with a local-fs storage default and a `0.1.0` version, then\n * validated by `defineWorkspace` — so a malformed shorthand fails with the\n * same AIP-34 diagnostic as a malformed WORKSPACE.md.\n */\nfunction toWorkspaceHandle(input: WorkspaceInput): WorkspaceHandle {\n if (\"schema\" in input) return input\n return defineWorkspace({\n schema: \"workspace/v1\",\n version: input.version ?? \"0.1.0\",\n id: input.id,\n name: input.name,\n owner: input.owner,\n storage: input.storage ?? { inline: { provider: \"local-fs\", config: {} } },\n ...(input.description ? { description: input.description } : {}),\n })\n}\n\n/**\n * Resolve `ids` to their app entries, preserving the caller's order. Throws\n * `AppDefinitionError` on any id the app doesn't bundle — a hand-picked list\n * that names a missing agent is a bug, not a silent no-op.\n */\nfunction selectAgents(\n agents: readonly AgentEntry[],\n ids: readonly string[],\n): readonly AgentEntry[] {\n const byId = new Map(agents.map((e) => [e.agent.id, e]))\n return ids.map((id) => {\n const entry = byId.get(id)\n if (!entry) {\n throw new AppDefinitionError(\n `agent '${id}' is not in this app. Bundled: [${[...byId.keys()].join(\", \")}].`,\n )\n }\n return entry\n })\n}\n\nasync function buildOne(entry: AgentEntry, opts: ToMastraAgentOptions): Promise<BuildMastraAgentResult> {\n // Dynamic import, not a static top-level one: `@agentproto/mastra` pulls in\n // `@mastra/core` (a documented peer dependency — see index.ts), which a\n // bundler would otherwise inline into ANY host that merely calls\n // `defineApp()` without ever calling `toMastraAgent(s)` (e.g. a UI-only app\n // consumer). Loading it lazily, only from the one place it's actually used,\n // keeps `defineApp()`/the rest of this module free of that cost.\n const { buildMastraAgent } = await import(\"@agentproto/mastra\")\n // `entry.body` (the AGENT.md body) wins as instructions; an explicit\n // `opts.body` still overrides, matching buildMastraAgent's contract.\n return buildMastraAgent(entry.agent, { body: entry.body, ...opts })\n}\n\nfunction normalizeEntry(input: AgentEntry | AgentHandle): AgentEntry {\n // An AgentEntry has an `.agent`; a bare AgentHandle has `.id`/`.schema`.\n if (\"agent\" in input) return input\n return { agent: input }\n}\n\n/**\n * The attachment invariant across all agents: bundled workflow ids and\n * the union of every agent's `workflows[]` refs must be the same set.\n * External/registry workflow refs are out of scope for an app bundle —\n * if an agent lists it, the app must ship it.\n */\nfunction validateAttachment(\n agents: readonly AgentEntry[],\n workflows: readonly WorkflowHandle[],\n): void {\n const seenAgentIds = new Set<string>()\n for (const { agent } of agents) {\n if (seenAgentIds.has(agent.id)) {\n throw new AppDefinitionError(`duplicate agent id '${agent.id}' in the bundle.`)\n }\n seenAgentIds.add(agent.id)\n }\n\n const bundledIds = new Set<string>()\n for (const wf of workflows) {\n if (bundledIds.has(wf.id)) {\n throw new AppDefinitionError(`duplicate workflow id '${wf.id}' in the bundle.`)\n }\n bundledIds.add(wf.id)\n }\n\n const referenced = new Set<string>()\n for (const { agent } of agents) {\n for (const ref of workflowRefs(agent)) {\n const key = refKey(ref)\n referenced.add(key)\n if (!bundledIds.has(key)) {\n throw new AppDefinitionError(\n `agent '${agent.id}' references workflow '${key}' but the app does not bundle it. ` +\n `Bundled: [${[...bundledIds].join(\", \") || \"none\"}].`,\n )\n }\n }\n }\n\n for (const id of bundledIds) {\n if (!referenced.has(id)) {\n throw new AppDefinitionError(\n `workflow '${id}' is bundled but no agent lists it in workflows[]. ` +\n `Add { ref: \"${id}\" } to an agent, or drop the workflow.`,\n )\n }\n }\n}\n\nfunction workflowRefs(agent: AgentHandle): readonly AnyRef[] {\n return agent.workflows ?? []\n}\n\n/** Duplicate-id guard for `tools`/`drivers` — mirrors the agent/workflow id\n * uniqueness `validateAttachment` already enforces. */\nfunction validateUniqueIds(items: readonly { id: string }[], kind: string): void {\n const seen = new Set<string>()\n for (const item of items) {\n if (seen.has(item.id)) {\n throw new AppDefinitionError(`duplicate ${kind} id '${item.id}' in the bundle.`)\n }\n seen.add(item.id)\n }\n}\n\nexport type { DoctypeHandle }\n","/** Thrown by `loadAppHandle` and its helpers (`loadAppBundledTools`, …) on\n * any disk/parse/validation failure while reading an app bundle off disk. */\nexport class AppLoadError extends Error {\n constructor(message: string) {\n super(`loadAppHandle: ${message}`)\n this.name = \"AppLoadError\"\n }\n}\n","/**\n * Loader for an app's bundled AIP-14 TOOL.md contracts and AIP-30 DRIVER.md\n * implementations — the deterministic-step half of WORKFLOW.md `tool` steps\n * (yt-dlp, an STT HTTP call, a PDF render, …), as opposed to `agent` steps.\n *\n * Neither AIP-53 (app, still Draft with no scaffolded spec) nor AIP-14/30\n * declare a bundle location for these, so this is a convention this loader\n * defines: `<dir>/.agentproto/tools/<id>/TOOL.md` and\n * `<dir>/.agentproto/drivers/<id>/DRIVER.md`, one manifest per `<id>`\n * subdirectory, discovered by listing — not declared as APP.md frontmatter\n * refs like `agents`/`workflows` are. An absent `tools`/`drivers` directory\n * is not an error (most apps have neither); a subdirectory that exists but\n * fails to parse, or is missing its TOOL.md/DRIVER.md, fails the whole load\n * — `loadAppHandle` never silently drops a broken tool/driver bundle.\n *\n * Only `kind: cli` and `kind: http` drivers dispatch (the two\n * `@agentproto/driver-cli` / `@agentproto/driver-http` sugars this package\n * already depends on). Any other `kind` (`mcp`, `sdk`, `builtin`) still\n * loads — a malformed manifest still fails the app load — but its execute\n * body refuses clearly instead of silently no-oping or crashing on a\n * dispatch mechanism this host doesn't implement yet.\n *\n * A `kind: cli` driver's subprocess `cwd` defaults to the app root (`dir`,\n * the directory containing `.agentproto/`) rather than the host process's\n * own cwd — relative paths in an app-bundled cli driver (DRIVER.md argv,\n * `--out-dir`-style flags, …) resolve against the app root. A DRIVER.md can\n * override this with `metadata.cli.cwd`; a relative value there is itself\n * resolved against the app root, and a value that escapes the app root\n * (`../..`) is a load error, not a silent escape.\n */\n\nimport { readdir, readFile } from \"node:fs/promises\"\nimport type { Dirent } from \"node:fs\"\nimport { isAbsolute, join, relative, resolve } from \"node:path\"\nimport {\n parseToolManifest,\n toolFromManifestOnly,\n type ToolHandle,\n} from \"@agentproto/tool\"\nimport {\n driverFromManifest,\n driverDefinitionFromManifest,\n parseDriverManifest,\n type DriverManifest,\n} from \"@agentproto/driver/manifest\"\nimport { normalizeToolId, type DriverHandle, type ExecuteFn } from \"@agentproto/driver\"\nimport { defineCliDriver, type CliDriverDefinition } from \"@agentproto/driver-cli\"\nimport { defineHttpDriver, type HttpDriverDefinition } from \"@agentproto/driver-http\"\nimport { AppLoadError } from \"./errors.js\"\n\n/** List `<id>` subdirectory names under `base`, sorted. Missing `base` (the\n * common case — most apps ship neither tools nor drivers) is not an error. */\nasync function listBundleIds(base: string): Promise<string[]> {\n let entries: Dirent[]\n try {\n entries = await readdir(base, { withFileTypes: true })\n } catch {\n return []\n }\n return entries\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n}\n\nfunction errMsg(err: unknown): string {\n return err instanceof Error ? err.message : String(err)\n}\n\nasync function loadToolEntry(id: string, toolPath: string): Promise<ToolHandle> {\n let source: string\n try {\n source = await readFile(toolPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(`tool '${id}': cannot read '${toolPath}': ${errMsg(err)}`)\n }\n try {\n return toolFromManifestOnly(parseToolManifest(source))\n } catch (err) {\n throw new AppLoadError(`tool '${id}' at '${toolPath}': ${errMsg(err)}`)\n }\n}\n\n/** Env var names DRIVER.md declares as required secrets — `auth.state.env`,\n * the existing AIP-30 field for \"env var names this provider's auth needs\".\n * Loosely typed at the manifest layer (`auth: z.unknown()`), so this reads\n * defensively rather than trusting a shape. */\nfunction requiredSecretNames(fm: DriverManifest[\"frontmatter\"]): readonly string[] {\n const auth = fm.auth as { state?: { env?: unknown } } | undefined\n const env = auth?.state?.env\n return Array.isArray(env) ? env.filter((e): e is string => typeof e === \"string\") : []\n}\n\n/**\n * Wrap every execute body so a declared-but-unresolved secret fails the\n * STEP with a clear `driver-error` naming the secret — never at app\n * install (secrets are resolved lazily, only when the tool actually\n * dispatches). Resolved values are merged into `driverCtx.secrets` ahead of\n * whatever the caller already put there (a workflow tool step's compiled\n * `secrets` is empty today — see BRIEF-D — so this is the only source for\n * an app-bundled driver), letting `${secrets.X}` templating in\n * `defineCliDriver`/`defineHttpDriver` resolve as authors expect.\n */\nfunction wrapExecuteWithSecretCheck(\n driverId: string,\n execute: Record<string, ExecuteFn>,\n secretNames: readonly string[],\n): Record<string, ExecuteFn> {\n if (secretNames.length === 0) return execute\n const wrapped: Record<string, ExecuteFn> = {}\n for (const [toolId, fn] of Object.entries(execute)) {\n wrapped[toolId] = async (args) => {\n const resolved: Record<string, string> = {}\n for (const name of secretNames) {\n const value = process.env[name]\n if (!value) {\n throw new Error(\n `driver '${driverId}': missing required secret '${name}' (declared in DRIVER.md 'auth.state.env').`,\n )\n }\n resolved[name] = value\n }\n const priorSecrets = (args.driverCtx as { secrets?: Record<string, string> }).secrets ?? {}\n return fn({ ...args, driverCtx: { ...args.driverCtx, secrets: { ...resolved, ...priorSecrets } } })\n }\n }\n return wrapped\n}\n\n/**\n * Resolve a kind:cli DRIVER.md's working directory. Relative paths in an\n * app-bundled cli driver resolve against the app root (the dir containing\n * `.agentproto/`) — not the daemon's own cwd, which is what `runSubprocess`\n * fell back to before this existed and is almost never what a DRIVER.md\n * author means (see `@agentproto/driver-cli`'s README). Defaults to the app\n * root itself when `metadata.cli.cwd` is unset; an explicit value — relative\n * or absolute — that resolves outside the app root is a load error rather\n * than silently escaping the bundle.\n */\nfunction resolveCliCwd(appRoot: string, driverId: string, cwd: unknown): string {\n const absoluteAppRoot = resolve(appRoot)\n if (cwd === undefined) return absoluteAppRoot\n if (typeof cwd !== \"string\" || cwd.trim() === \"\") {\n throw new Error(`driver '${driverId}': 'metadata.cli.cwd' must be a non-empty string.`)\n }\n const resolved = isAbsolute(cwd) ? resolve(cwd) : resolve(absoluteAppRoot, cwd)\n const rel = relative(absoluteAppRoot, resolved)\n if (rel !== \"\" && (rel.startsWith(\"..\") || isAbsolute(rel))) {\n throw new Error(\n `driver '${driverId}': 'metadata.cli.cwd' (${cwd}) resolves to '${resolved}', outside the app root '${absoluteAppRoot}'.`,\n )\n }\n return resolved\n}\n\n/** Build a working {@link DriverHandle} from a parsed DRIVER.md, dispatching\n * on `kind`. Throws a plain `Error` (wrapped in `AppLoadError` by the\n * caller, which has the file path) on a `cli`/`http` manifest missing its\n * dispatch config. */\nfunction driverHandleFromManifest(manifest: DriverManifest, appRoot: string): DriverHandle {\n const fm = manifest.frontmatter\n const secretNames = requiredSecretNames(fm)\n\n if (fm.kind === \"cli\") {\n const cliMeta = (fm.metadata?.cli ?? {}) as Partial<CliDriverDefinition> & { cwd?: unknown }\n if (typeof cliMeta.bin !== \"string\" || cliMeta.bin.trim() === \"\") {\n throw new Error(\n \"kind:cli DRIVER.md requires a non-empty 'metadata.cli.bin' frontmatter field naming the binary.\",\n )\n }\n const handle = defineCliDriver({\n ...driverDefinitionFromManifest(manifest),\n bin: cliMeta.bin,\n binArgs: cliMeta.binArgs,\n output: cliMeta.output,\n tty: cliMeta.tty,\n sandbox: cliMeta.sandbox,\n cwd: resolveCliCwd(appRoot, fm.id, cliMeta.cwd),\n })\n return { ...handle, execute: wrapExecuteWithSecretCheck(fm.id, handle.execute, secretNames) }\n }\n\n if (fm.kind === \"http\") {\n const httpMeta = (fm.metadata?.http ?? {}) as Partial<HttpDriverDefinition>\n if (typeof httpMeta.baseUrl !== \"string\" || httpMeta.baseUrl.trim() === \"\") {\n throw new Error(\"kind:http DRIVER.md requires a non-empty 'metadata.http.baseUrl' frontmatter field.\")\n }\n const handle = defineHttpDriver({\n ...driverDefinitionFromManifest(manifest),\n baseUrl: httpMeta.baseUrl,\n defaultHeaders: httpMeta.defaultHeaders,\n defaultMethod: httpMeta.defaultMethod,\n streaming: httpMeta.streaming,\n })\n return { ...handle, execute: wrapExecuteWithSecretCheck(fm.id, handle.execute, secretNames) }\n }\n\n // mcp / sdk / builtin: load (so a malformed manifest still fails the app\n // load), but refuse at resolve/dispatch — every implements[] entry gets\n // an execute body that fails with a clear message instead of silently\n // no-oping or throwing an opaque \"no dispatch mechanism\" error.\n const execute: Record<string, ExecuteFn> = {}\n for (const entry of fm.implements) {\n const toolId = normalizeToolId(entry.tool)\n execute[toolId] = async () => {\n throw new Error(\n `driver '${fm.id}': kind '${fm.kind}' is not supported by this host — only 'cli' and 'http' drivers dispatch.`,\n )\n }\n }\n return driverFromManifest({ manifest, execute })\n}\n\nasync function loadDriverEntry(id: string, driverPath: string, appRoot: string): Promise<DriverHandle> {\n let source: string\n try {\n source = await readFile(driverPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(`driver '${id}': cannot read '${driverPath}': ${errMsg(err)}`)\n }\n try {\n return driverHandleFromManifest(parseDriverManifest(source), appRoot)\n } catch (err) {\n throw new AppLoadError(`driver '${id}' at '${driverPath}': ${errMsg(err)}`)\n }\n}\n\n/**\n * Scan `<dir>/.agentproto/tools/*` and `<dir>/.agentproto/drivers/*` for\n * TOOL.md / DRIVER.md bundles and load them into live handles. Used by\n * `loadAppHandle` (install-time validation, via `defineApp`) and reusable\n * directly by a host that needs an already-installed app's tools/drivers\n * without re-walking its agents/workflows (see `@agentproto/runtime`'s\n * workflow `compileWorkflow` seam).\n */\nexport async function loadAppBundledTools(\n dir: string,\n): Promise<{ tools: ToolHandle[]; drivers: DriverHandle[] }> {\n const toolsDir = join(dir, \".agentproto\", \"tools\")\n const driversDir = join(dir, \".agentproto\", \"drivers\")\n\n const tools: ToolHandle[] = []\n for (const id of await listBundleIds(toolsDir)) {\n tools.push(await loadToolEntry(id, join(toolsDir, id, \"TOOL.md\")))\n }\n\n const drivers: DriverHandle[] = []\n for (const id of await listBundleIds(driversDir)) {\n drivers.push(await loadDriverEntry(id, join(driversDir, id, \"DRIVER.md\"), dir))\n }\n\n return { tools, drivers }\n}\n","/**\n * `loadAppHandle(dir)` — read a root `APP.md` off disk into an `AppHandle`.\n *\n * Mirror of `@agentproto/workflow-loader`'s `loadWorkflowHandle`: this is\n * the host-side seam that touches the filesystem so the pure packages\n * (`@agentproto/agent`, `@agentproto/workflow`, `@agentproto/workspace`)\n * don't have to.\n *\n * `<dir>/.agentproto/APP.md` lists every agent + workflow the app bundles\n * as `{ id, path }` refs (relative to `dir`, the shape `emitApp` writes).\n * Each is loaded with its own package's manifest reader — `AGENT.md` via\n * `@agentproto/agent/manifest`, `WORKFLOW.md` via\n * `@agentproto/workflow-loader` (which itself resolves an `entry:` module\n * when present) — then the whole bundle is re-run through `defineApp` so\n * the attachment invariant (every agent/workflow ref resolves both ways)\n * re-validates exactly as it did at authoring time. A stale or hand-edited\n * APP.md that drifted from its AGENT.md/WORKFLOW.md refs fails the same\n * way a bad `defineApp({...})` call would.\n *\n * The app may also ship AIP-14 TOOL.md / AIP-30 DRIVER.md bundles under\n * `.agentproto/tools/<id>/TOOL.md` and `.agentproto/drivers/<id>/DRIVER.md`\n * — discovered by directory convention (see `loadAppBundledTools`), not\n * declared as APP.md frontmatter refs like agents/workflows are.\n *\n * Frontmatter validation here is deliberately minimal, and that is now an\n * AIP-53 conformance decision, not an accident of app having \"no AIP yet\":\n * AIP-53 (Draft) freezes the loader contract at the checks below — schema\n * MUST be exactly `app/v1`, `agents`/`workflows` MUST be `{ id, path }`\n * ref arrays, every ref MUST resolve, and the bundle MUST re-run through\n * `defineApp` — and it does NOT require rejecting unknown frontmatter\n * keys. Staying permissive past the frozen checks lets a future frontmatter\n * key (e.g. a later WP's addition) round-trip through this loader without\n * hosts that haven't upgraded rejecting the whole app; tightening beyond\n * the spec would break that forward compatibility for no conformance gain.\n */\n\nimport { readFile } from \"node:fs/promises\"\nimport { dirname, isAbsolute, join } from \"node:path\"\nimport matter from \"gray-matter\"\nimport { agentFromManifest, parseAgentManifest } from \"@agentproto/agent/manifest\"\nimport { loadWorkflowHandle } from \"@agentproto/workflow-loader\"\nimport { parseWorkspaceManifest, workspaceFromManifest } from \"@agentproto/workspace/manifest\"\nimport type {\n AgentEntry,\n AppArtifactDecl,\n AppBoundariesDefinition,\n AppDataDefinition,\n AppDefinition,\n AppDevDefinition,\n AppHandle,\n AppUiBuildConfig,\n} from \"./types.js\"\nimport { defineApp } from \"./define-app.js\"\nimport { AppLoadError } from \"./errors.js\"\nimport { loadAppBundledTools } from \"./load-app-tools.js\"\nimport { normalizeManifestFields } from \"./manifest-fields.js\"\n\nexport { AppLoadError }\n\ninterface AppRef {\n readonly id: string\n readonly path: string\n}\n\ninterface AppFrontmatterUi {\n readonly path: string\n readonly title?: string\n readonly description?: string\n readonly tools?: readonly string[]\n readonly port?: number\n readonly csp?: {\n readonly connectDomains?: readonly string[]\n readonly resourceDomains?: readonly string[]\n readonly frameDomains?: readonly string[]\n }\n readonly build?: AppUiBuildConfig\n}\n\ninterface AppFrontmatterArtifact {\n readonly path: string\n readonly title?: string\n readonly description?: string\n}\n\ninterface AppFrontmatterSkill {\n readonly path: string\n readonly title?: string\n readonly description?: string\n}\n\ninterface AppFrontmatter {\n readonly schema: string\n readonly id?: string\n readonly name?: string\n readonly version?: string\n readonly description?: string\n readonly agents: readonly AppRef[]\n readonly workflows: readonly AppRef[]\n readonly workspace?: string\n readonly requires?: AppDefinition[\"requires\"]\n readonly placement?: AppDefinition[\"placement\"]\n readonly exposes?: AppDefinition[\"exposes\"]\n readonly accepts?: AppDefinition[\"accepts\"]\n readonly ui?: AppFrontmatterUi\n readonly artifact?: AppFrontmatterArtifact\n readonly skill?: AppFrontmatterSkill\n readonly artifacts?: readonly AppArtifactDecl[]\n readonly dev?: AppDevDefinition\n readonly data?: AppDataDefinition\n readonly externalReadRoots?: readonly string[]\n readonly boundaries?: AppBoundariesDefinition\n readonly category?: string\n}\n\nfunction resolveRef(dir: string, path: string): string {\n return isAbsolute(path) ? path : join(dir, path)\n}\n\n/**\n * Resolve the UI ROOT directory an app's UI should be served from — the\n * same resolution `app_install`/`loadAppHandle` uses for `ui.path`, so\n * `app serve` and install agree on where the UI lives.\n *\n * Reads `<appDir>/.agentproto/APP.md` frontmatter: when a `ui.path` is\n * declared, the UI root is the directory CONTAINING that entry file (e.g.\n * `ui.path: ui/index.html` → `<appDir>/ui`); when `ui` is absent, returns\n * `undefined` and callers fall back to the legacy `<appDir>/.agentproto/ui/`.\n * Throws {@link AppLoadError} on a `ui` that isn't an object or whose `path`\n * isn't a non-empty string — the same shape `loadAppHandle` would reject.\n * Returns `undefined` (not a throw) when APP.md itself is unreadable, since\n * callers check APP.md existence separately.\n */\nexport async function resolveAppUIRoot(appDir: string): Promise<string | undefined> {\n const appMdPath = join(appDir, \".agentproto\", \"APP.md\")\n let source: string\n try {\n source = await readFile(appMdPath, \"utf8\")\n } catch {\n return undefined\n }\n const data = matter(source).data as Record<string, unknown>\n const ui = data.ui\n if (ui === undefined) return undefined\n if (typeof ui !== \"object\" || ui === null || Array.isArray(ui)) {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui' must be an object.`)\n }\n const path = (ui as Record<string, unknown>).path\n if (typeof path !== \"string\" || path.trim() === \"\") {\n throw new AppLoadError(\n `'${appMdPath}': frontmatter 'ui.path' must be a non-empty string.`,\n )\n }\n return dirname(resolveRef(appDir, path))\n}\n\n/** Validated `ui.path` + `ui.build`, as returned by {@link peekAppUi}. */\nexport interface AppUiPeek {\n readonly path: string\n readonly build?: AppUiBuildConfig\n}\n\nfunction parseUiBuildFrontmatter(raw: unknown, appMdPath: string): AppUiBuildConfig | undefined {\n if (raw === undefined) return undefined\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui.build' must be an object.`)\n }\n const command = (raw as Record<string, unknown>).command\n if (typeof command !== \"string\" || command.trim() === \"\") {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui.build.command' must be a non-empty string.`)\n }\n const cwd = (raw as Record<string, unknown>).cwd\n if (cwd !== undefined && (typeof cwd !== \"string\" || cwd.trim() === \"\")) {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui.build.cwd' must be a non-empty string.`)\n }\n const sources = (raw as Record<string, unknown>).sources\n if (\n sources !== undefined &&\n (!Array.isArray(sources) || !sources.every(s => typeof s === \"string\" && s.trim() !== \"\"))\n ) {\n throw new AppLoadError(\n `'${appMdPath}': frontmatter 'ui.build.sources' must be an array of non-empty strings.`,\n )\n }\n return {\n command,\n ...(cwd !== undefined ? { cwd: cwd as string } : {}),\n ...(sources !== undefined ? { sources: sources as string[] } : {}),\n }\n}\n\n/**\n * Peek `<appDir>/.agentproto/APP.md`'s `ui.path` + `ui.build` WITHOUT\n * reading the ui html itself.\n *\n * `loadAppHandle` reads `ui.path` eagerly and throws {@link AppLoadError}\n * when it's missing — exactly the case a declared `ui.build` exists to\n * recover from. A caller that wants to build the bundle before it's\n * expected to exist (the daemon's `app_install`, `app serve`, first UI\n * serve — see `@agentproto/runtime`'s `ensureAppUiBuilt`) resolves this\n * first, runs the build if declared, then calls `loadAppHandle` as usual.\n *\n * Returns `undefined` when APP.md is unreadable or declares no `ui` block\n * — same \"caller checks existence separately\" contract as\n * `resolveAppUIRoot`. Throws on a malformed `ui`/`ui.build` shape, same\n * validation `loadAppHandle` would eventually hit.\n */\nexport async function peekAppUi(appDir: string): Promise<AppUiPeek | undefined> {\n const appMdPath = join(appDir, \".agentproto\", \"APP.md\")\n let source: string\n try {\n source = await readFile(appMdPath, \"utf8\")\n } catch {\n return undefined\n }\n const data = matter(source).data as Record<string, unknown>\n const ui = data.ui\n if (ui === undefined) return undefined\n if (typeof ui !== \"object\" || ui === null || Array.isArray(ui)) {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui' must be an object.`)\n }\n const path = (ui as Record<string, unknown>).path\n if (typeof path !== \"string\" || path.trim() === \"\") {\n throw new AppLoadError(\n `'${appMdPath}': frontmatter 'ui.path' must be a non-empty string.`,\n )\n }\n const build = parseUiBuildFrontmatter((ui as Record<string, unknown>).build, appMdPath)\n return { path: resolveRef(appDir, path), ...(build ? { build } : {}) }\n}\n\nfunction isRefArray(v: unknown): v is AppRef[] {\n return (\n Array.isArray(v) &&\n v.every(\n (e) =>\n typeof e === \"object\" &&\n e !== null &&\n typeof (e as { id?: unknown }).id === \"string\" &&\n typeof (e as { path?: unknown }).path === \"string\",\n )\n )\n}\n\n/** Minimal shape check — see the module doc for why this stays loose. */\nfunction parseAppFrontmatter(data: Record<string, unknown>, appPath: string): AppFrontmatter {\n if (data.schema !== \"app/v1\") {\n throw new AppLoadError(\n `'${appPath}': expected frontmatter 'schema: app/v1', got ${JSON.stringify(data.schema)}.`,\n )\n }\n if (!isRefArray(data.agents)) {\n throw new AppLoadError(`'${appPath}': frontmatter 'agents' must be an array of { id, path }.`)\n }\n if (!isRefArray(data.workflows)) {\n throw new AppLoadError(\n `'${appPath}': frontmatter 'workflows' must be an array of { id, path }.`,\n )\n }\n // placement / requires / exposes / accepts: shape, enum and \"exposed id is\n // declared\" checks, same rules `defineApp` re-applies.\n normalizeManifestFields(\n data,\n { agents: data.agents.map(a => a.id), workflows: data.workflows.map(w => w.id) },\n msg => new AppLoadError(`'${appPath}': frontmatter ${msg}`),\n )\n if (data.data !== undefined) {\n const d = data.data as { dir?: unknown } | null\n if (\n typeof d !== \"object\" ||\n d === null ||\n (d.dir !== undefined && (typeof d.dir !== \"string\" || d.dir.trim() === \"\"))\n ) {\n throw new AppLoadError(\n `'${appPath}': frontmatter 'data' must be an object whose optional 'dir' is a non-empty string.`,\n )\n }\n }\n if (data.externalReadRoots !== undefined) {\n if (\n !Array.isArray(data.externalReadRoots) ||\n !data.externalReadRoots.every((e) => typeof e === \"string\" && e.trim() !== \"\")\n ) {\n throw new AppLoadError(\n `'${appPath}': frontmatter 'externalReadRoots' must be an array of non-empty strings.`,\n )\n }\n }\n if (data.boundaries !== undefined) {\n const b = data.boundaries as { enforce?: unknown } | null\n if (\n typeof b !== \"object\" ||\n b === null ||\n Array.isArray(b) ||\n (b.enforce !== undefined && b.enforce !== \"required\" && b.enforce !== \"best-effort\")\n ) {\n throw new AppLoadError(\n `'${appPath}': frontmatter 'boundaries' must be an object whose optional 'enforce' is \"required\" or \"best-effort\".`,\n )\n }\n }\n if (data.category !== undefined && (typeof data.category !== \"string\" || data.category.trim() === \"\")) {\n throw new AppLoadError(`'${appPath}': frontmatter 'category' must be a non-empty string.`)\n }\n return data as unknown as AppFrontmatter\n}\n\nasync function loadAgentEntry(dir: string, ref: AppRef): Promise<AgentEntry> {\n const agentPath = resolveRef(dir, ref.path)\n let source: string\n try {\n source = await readFile(agentPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(\n `agent '${ref.id}': cannot read '${agentPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n let body: string\n let manifest: ReturnType<typeof parseAgentManifest>\n try {\n manifest = parseAgentManifest(source)\n body = manifest.body.trim()\n } catch (err) {\n throw new AppLoadError(\n `agent '${ref.id}' at '${agentPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n return { agent: agentFromManifest(manifest), ...(body ? { body } : {}) }\n}\n\nasync function loadWorkflowRef(dir: string, ref: AppRef) {\n const wfPath = resolveRef(dir, ref.path)\n try {\n return await loadWorkflowHandle(wfPath)\n } catch (err) {\n throw new AppLoadError(\n `workflow '${ref.id}' at '${wfPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n}\n\n/**\n * Load `<dir>/.agentproto/APP.md` and every AGENT.md/WORKFLOW.md (and, if\n * declared, `<dir>/WORKSPACE.md`) it references, then re-run `defineApp` on\n * the result. Throws {@link AppLoadError} naming the offending path on a\n * missing APP.md, a missing referenced file, or a frontmatter/schema\n * mismatch; throws `AppDefinitionError` (from `defineApp`) if the loaded\n * bundle fails the attachment invariant.\n */\nexport async function loadAppHandle(dir: string): Promise<AppHandle> {\n const appPath = join(dir, \".agentproto\", \"APP.md\")\n let source: string\n try {\n source = await readFile(appPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(\n `cannot read '${appPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n\n const parsed = matter(source)\n const fm = parseAppFrontmatter(parsed.data, appPath)\n\n const agents: AgentEntry[] = []\n for (const ref of fm.agents) {\n agents.push(await loadAgentEntry(dir, ref))\n }\n\n const workflows = []\n for (const ref of fm.workflows) {\n workflows.push(await loadWorkflowRef(dir, ref))\n }\n\n // AIP-14/AIP-30 tool + driver bundles — not enumerated in APP.md\n // frontmatter like agents/workflows are; discovered by convention under\n // `.agentproto/tools/<id>/TOOL.md` and `.agentproto/drivers/<id>/DRIVER.md`.\n // No declared bundle location exists yet in AIP-53/14/30 (spec gap) — see\n // `loadAppBundledTools` for the loader and its error-handling contract\n // (a parse/read failure fails the whole app load, naming the file path;\n // an absent `tools`/`drivers` directory is not an error).\n const { tools, drivers } = await loadAppBundledTools(dir)\n\n let workspace\n if (fm.workspace) {\n const workspacePath = join(dir, \"WORKSPACE.md\")\n let workspaceSource: string\n try {\n workspaceSource = await readFile(workspacePath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(\n `workspace '${fm.workspace}': cannot read '${workspacePath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n try {\n workspace = workspaceFromManifest(parseWorkspaceManifest(workspaceSource))\n } catch (err) {\n throw new AppLoadError(\n `workspace '${fm.workspace}' at '${workspacePath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n }\n\n let ui\n if (fm.ui) {\n const uiPath = resolveRef(dir, fm.ui.path)\n let html: string\n try {\n html = await readFile(uiPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(\n `ui: cannot read '${uiPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n const build = parseUiBuildFrontmatter(fm.ui.build, appPath)\n ui = {\n html,\n ...(fm.ui.title !== undefined ? { title: fm.ui.title } : {}),\n ...(fm.ui.description !== undefined ? { description: fm.ui.description } : {}),\n ...(fm.ui.tools !== undefined ? { tools: fm.ui.tools } : {}),\n ...(fm.ui.port !== undefined ? { port: fm.ui.port } : {}),\n ...(fm.ui.csp !== undefined ? { csp: fm.ui.csp } : {}),\n ...(build !== undefined ? { build } : {}),\n }\n }\n\n return defineApp({\n agents,\n workflows,\n tools,\n drivers,\n ...(workspace ? { workspace } : {}),\n ...(fm.id !== undefined ? { id: fm.id } : {}),\n ...(fm.name !== undefined ? { name: fm.name } : {}),\n ...(fm.version !== undefined ? { version: fm.version } : {}),\n ...(fm.description !== undefined ? { description: fm.description } : {}),\n ...(fm.requires !== undefined ? { requires: fm.requires } : {}),\n ...(fm.placement !== undefined ? { placement: fm.placement } : {}),\n ...(fm.exposes !== undefined ? { exposes: fm.exposes } : {}),\n ...(fm.accepts !== undefined ? { accepts: fm.accepts } : {}),\n ...(ui !== undefined ? { ui } : {}),\n ...(fm.artifact !== undefined\n ? { artifact: { path: resolveRef(dir, fm.artifact.path), ...(fm.artifact.title !== undefined ? { title: fm.artifact.title } : {}), ...(fm.artifact.description !== undefined ? { description: fm.artifact.description } : {}) } }\n : {}),\n ...(fm.skill !== undefined\n ? { skill: { path: resolveRef(dir, fm.skill.path), ...(fm.skill.title !== undefined ? { title: fm.skill.title } : {}), ...(fm.skill.description !== undefined ? { description: fm.skill.description } : {}) } }\n : {}),\n ...(fm.artifacts !== undefined ? { artifacts: fm.artifacts } : {}),\n ...(fm.dev !== undefined ? { dev: fm.dev } : {}),\n ...(fm.data !== undefined ? { data: fm.data } : {}),\n ...(fm.externalReadRoots !== undefined ? { externalReadRoots: fm.externalReadRoots } : {}),\n ...(fm.boundaries !== undefined ? { boundaries: fm.boundaries } : {}),\n ...(fm.category !== undefined ? { category: fm.category } : {}),\n })\n}\n","/**\n * `.agentapp` pack / unpack core (AIP-53 §\"The `.agentapp` package format\").\n *\n * PACK walks the entire app dir (including `.agentproto/`, but skipping\n * any `node_modules/` or `.git/` at any depth — a `ui/` source tree\n * ships both and neither belongs in the shipped app), writes a\n * `manifest.json` at the bundle root, and tars the app folder's\n * CONTENTS (not the folder itself) with system `tar`, so extraction\n * yields `manifest.json` + `.agentproto/` + loose files at the top\n * level and relative paths survive round-tripping.\n *\n * UNPACK extracts to a fresh temp dir, reads `manifest.json`, validates\n * `format === \"agentapp/v1\"`, recomputes the aggregate SHA over the\n * listed files and compares it to `manifest.sha256`, then moves the\n * restored contents (WITHOUT `manifest.json` — it is a bundle\n * artifact, not part of the app) into the destination dir.\n *\n * The SHA is over file contents ONLY (excluding manifest.json), fed in the\n * manifest `files` order (pack already sorts them), accumulated into one\n * hasher so bundling-scale trees don't load into memory.\n *\n * Both entries throw {@link AgentAppPackError}; `code` lets a caller (the\n * CLI, the daemon's remote install) map failures without parsing messages.\n */\n\nimport { cp, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from \"node:fs/promises\"\nimport { createHash } from \"node:crypto\"\nimport { basename, dirname, isAbsolute, join, resolve } from \"node:path\"\nimport { tmpdir } from \"node:os\"\nimport { spawn } from \"node:child_process\"\n\nimport matter from \"gray-matter\"\n\nexport const AGENTAPP_FORMAT = \"agentapp/v1\" as const\nconst DEFAULT_VERSION = \"0.1.0\"\n\n/** Directory names skipped at any depth while walking/copying an app dir. */\nconst SKIP_DIR_NAMES = new Set([\"node_modules\", \".git\"])\n\n/** The manifest.json written at the bundle root (and validated on unpack). */\nexport interface AgentAppManifest {\n format: typeof AGENTAPP_FORMAT\n id: string\n name?: string\n version: string\n description?: string\n agents: string[]\n workflows: string[]\n ui?: string[]\n files: string[]\n fileCount: number\n totalSize: number\n sha256: string\n createdAt: string\n agentprotoVersion: string\n}\n\n/** A file discovered under the app dir, with its size for the manifest. */\nexport interface BundleFile {\n path: string\n size: number\n}\n\nexport type AgentAppPackErrorCode =\n | \"not-an-app\"\n | \"bundle-not-found\"\n | \"tar-failed\"\n | \"missing-manifest\"\n | \"malformed-manifest\"\n | \"unsupported-format\"\n | \"unsafe-path\"\n | \"digest-mismatch\"\n\nexport class AgentAppPackError extends Error {\n readonly code: AgentAppPackErrorCode\n constructor(code: AgentAppPackErrorCode, message: string) {\n super(message)\n this.name = \"AgentAppPackError\"\n this.code = code\n }\n}\n\n/** `.agentproto/APP.md` frontmatter, digested into bundle metadata. */\ninterface AppMeta {\n id: string\n name?: string\n version: string\n description?: string\n agents: string[]\n workflows: string[]\n ui?: string[]\n}\n\nasync function pathExists(p: string): Promise<boolean> {\n try {\n await stat(p)\n return true\n } catch {\n return false\n }\n}\n\n/** Derive a filesystem-safe id from a possibly scoped/odd app id. */\nexport function safeId(id: unknown): string {\n return String(id || \"app\").replace(/^@/, \"\").replace(/[^A-Za-z0-9._-]+/g, \"-\")\n}\n\n/** Narrow an unknown parsed JSON value to the manifest shape. */\nexport function isManifest(value: unknown): value is AgentAppManifest {\n if (typeof value !== \"object\" || value === null) return false\n const m = value as Record<string, unknown>\n return (\n typeof m.format === \"string\" &&\n typeof m.id === \"string\" &&\n typeof m.version === \"string\" &&\n Array.isArray(m.agents) &&\n Array.isArray(m.workflows) &&\n Array.isArray(m.files) &&\n typeof m.fileCount === \"number\" &&\n typeof m.totalSize === \"number\" &&\n typeof m.sha256 === \"string\"\n )\n}\n\n/**\n * Recursively collect every regular file under root as relative paths,\n * skipping any `node_modules/` or `.git/` directory at any depth — a `ui/`\n * source tree ships both, and bundling either would balloon the .agentapp\n * for no benefit (they're never part of the shipped app).\n */\nexport async function collectFiles(root: string): Promise<BundleFile[]> {\n const files: BundleFile[] = []\n async function walk(relDir: string): Promise<void> {\n const absDir = join(root, relDir)\n for (const entry of await readdir(absDir, { withFileTypes: true })) {\n if (entry.isDirectory() && SKIP_DIR_NAMES.has(entry.name)) continue\n const rel = relDir ? join(relDir, entry.name) : entry.name\n const abs = join(absDir, entry.name)\n if (entry.isDirectory()) {\n await walk(rel)\n } else if (entry.isFile()) {\n const st = await stat(abs)\n files.push({ path: rel, size: st.size })\n }\n }\n }\n await walk(\"\")\n return files\n}\n\n/** Aggregate sha256 over the concatenated bytes of the given files. */\nexport async function aggregateSha256(root: string, files: readonly string[]): Promise<string> {\n const hash = createHash(\"sha256\")\n for (const file of files) {\n hash.update(await readFile(join(root, file)))\n }\n return hash.digest(\"hex\")\n}\n\n/**\n * Run system `tar` with the given args, resolving the exit code (0 = ok).\n * Uses `spawn` + an exit handler so the awaited promise actually tracks\n * process completion cross-platform (BSD/macOS and GNU tar).\n */\nfunction runTar(args: string[], opts?: { cwd?: string }): Promise<number> {\n return new Promise((resolvePromise, reject) => {\n const child = spawn(\"tar\", args, { stdio: \"ignore\", cwd: opts?.cwd })\n child.once(\"error\", reject)\n child.once(\"exit\", (code) => resolvePromise(code ?? 0))\n })\n}\n\n/** Pull ids from an `[{id, path}]` (or bare-string) array. */\nfunction extractIds(value: unknown): string[] {\n if (!Array.isArray(value)) return []\n const out: string[] = []\n for (const entry of value) {\n if (typeof entry === \"string\") {\n if (entry) out.push(entry)\n } else if (entry && typeof entry === \"object\") {\n const id = (entry as { id?: unknown }).id\n if (typeof id === \"string\" && id) out.push(id)\n }\n }\n return out\n}\n\n/** Basenames for a path/`{path}`/array-of-either frontmatter field. */\nfunction extractPaths(front: Record<string, unknown>, key: string): string[] | undefined {\n const value = front[key]\n if (value === undefined || value === null) return undefined\n const items = Array.isArray(value) ? value : [value]\n const out: string[] = []\n for (const item of items) {\n if (typeof item === \"string\") {\n if (item) out.push(basename(item))\n } else if (item && typeof item === \"object\") {\n const p = (item as { path?: unknown }).path\n if (typeof p === \"string\" && p) out.push(basename(p))\n }\n }\n return out.length > 0 ? out : undefined\n}\n\n/** Extract bundle metadata from APP.md frontmatter. */\nfunction extractMeta(front: Record<string, unknown>): AppMeta {\n const id =\n typeof front.id === \"string\" && front.id.length > 0\n ? front.id\n : typeof front.slug === \"string\" && front.slug.length > 0\n ? front.slug\n : \"app\"\n const version =\n typeof front.version === \"string\" && front.version.length > 0\n ? front.version\n : DEFAULT_VERSION\n const name = typeof front.name === \"string\" ? front.name : undefined\n const description = typeof front.description === \"string\" ? front.description : undefined\n const ui = extractPaths(front, \"ui\")\n\n return {\n id,\n ...(name !== undefined ? { name } : {}),\n version,\n ...(description !== undefined ? { description } : {}),\n agents: extractIds(front.agents),\n workflows: extractIds(front.workflows),\n ...(ui !== undefined ? { ui } : {}),\n }\n}\n\n/**\n * Package `appDir` (must hold `.agentproto/APP.md`) into a `.agentapp`.\n * Without `out`, the file is `<safeId>-<version>.agentapp` in the cwd.\n */\nexport async function packApp(input: {\n appDir: string\n out?: string\n}): Promise<{ file: string; manifest: AgentAppManifest }> {\n const appDirAbs = resolve(input.appDir)\n\n const appMdPath = join(appDirAbs, \".agentproto\", \"APP.md\")\n if (!(await pathExists(appMdPath))) {\n throw new AgentAppPackError(\n \"not-an-app\",\n `${appDirAbs} is not an agentproto app (missing ${appMdPath}).`,\n )\n }\n\n const raw = await readFile(appMdPath, \"utf8\")\n const front = matter(raw).data as Record<string, unknown>\n const meta = extractMeta(front)\n\n const outAbs =\n input.out !== undefined\n ? resolve(input.out)\n : resolve(process.cwd(), `${safeId(meta.id)}-${meta.version}.agentapp`)\n await mkdir(dirname(outAbs), { recursive: true })\n\n const files = (await collectFiles(appDirAbs))\n .filter((f) => f.path !== \"manifest.json\")\n .filter((f) => join(appDirAbs, f.path) !== outAbs)\n .sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0))\n const fileCount = files.length\n const totalSize = files.reduce((sum, f) => sum + f.size, 0)\n\n const sha256 = await aggregateSha256(\n appDirAbs,\n files.map((f) => f.path),\n )\n\n const manifest: AgentAppManifest = {\n format: AGENTAPP_FORMAT,\n id: meta.id,\n ...(meta.name !== undefined ? { name: meta.name } : {}),\n version: meta.version,\n ...(meta.description !== undefined ? { description: meta.description } : {}),\n agents: meta.agents,\n workflows: meta.workflows,\n ...(meta.ui !== undefined ? { ui: meta.ui } : {}),\n files: files.map((f) => f.path),\n fileCount,\n totalSize,\n sha256,\n createdAt: new Date().toISOString(),\n agentprotoVersion: \">=0.1.0\",\n }\n\n // Stage: copy contents into a temp dir, write manifest.json, tar it. The\n // filter also enforces the node_modules/.git exclusion on the actual bundle\n // contents (collectFiles above only shaped the manifest's `files` list) —\n // cp() skips a filtered-out directory's contents entirely.\n const staging = await mkdtemp(join(tmpdir(), \"agentapp-\"))\n try {\n await cp(appDirAbs, staging, {\n recursive: true,\n filter: (source) => !SKIP_DIR_NAMES.has(basename(source)),\n })\n await writeFile(join(staging, \"manifest.json\"), JSON.stringify(manifest, null, 2) + \"\\n\", \"utf8\")\n // Offline-deterministic archive: pass the entry list explicitly (sorted) so\n // the archive order is reproducible without GNU-only `--sort=name`, which\n // BSD/macOS tar rejects. Dotfiles (`.agentproto`) are included by readdir.\n const entries = (await readdir(staging)).sort()\n const packCode = await runTar([\"-czf\", outAbs, ...entries], { cwd: staging })\n if (packCode !== 0) {\n throw new AgentAppPackError(\"tar-failed\", `tar failed with exit code ${packCode}`)\n }\n } finally {\n await rm(staging, { recursive: true, force: true })\n }\n\n return { file: outAbs, manifest }\n}\n\n/** A manifest `files` entry that could read or write outside the bundle root. */\nfunction isUnsafeBundlePath(p: string): boolean {\n if (p === \"\" || isAbsolute(p)) return true\n return p.split(/[\\\\/]/).includes(\"..\")\n}\n\n/**\n * Extract a `.agentapp`, verify format + aggregate SHA-256, and restore the\n * app folder (without `manifest.json`) into `dest`. Without `dest`, restores\n * into `<safeId>-<version>` in the cwd. A failed verification leaves `dest`\n * untouched (nothing is created).\n */\nexport async function unpackApp(input: {\n file: string\n dest?: string\n}): Promise<{ dir: string; manifest: AgentAppManifest }> {\n const bundleAbs = resolve(input.file)\n if (!(await pathExists(bundleAbs))) {\n throw new AgentAppPackError(\"bundle-not-found\", `bundle not found: ${bundleAbs}`)\n }\n\n const temp = await mkdtemp(join(tmpdir(), \"agentapp-\"))\n try {\n const unpackCode = await runTar([\"-xzf\", bundleAbs, \"-C\", temp])\n if (unpackCode !== 0) {\n throw new AgentAppPackError(\"tar-failed\", `tar failed with exit code ${unpackCode}`)\n }\n\n const manifestPath = join(temp, \"manifest.json\")\n if (!(await pathExists(manifestPath))) {\n throw new AgentAppPackError(\n \"missing-manifest\",\n `${bundleAbs} is not a valid .agentapp (missing manifest.json).`,\n )\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(await readFile(manifestPath, \"utf8\"))\n } catch {\n throw new AgentAppPackError(\"malformed-manifest\", `${bundleAbs} has a malformed manifest.json.`)\n }\n if (!isManifest(parsed)) {\n throw new AgentAppPackError(\"malformed-manifest\", `${bundleAbs} has a malformed manifest.json.`)\n }\n const manifest = parsed\n\n if (manifest.format !== AGENTAPP_FORMAT) {\n throw new AgentAppPackError(\n \"unsupported-format\",\n `unsupported bundle format '${manifest.format}' (expected ${AGENTAPP_FORMAT}).`,\n )\n }\n\n const unsafe = manifest.files.find((f) => typeof f !== \"string\" || isUnsafeBundlePath(f))\n if (unsafe !== undefined) {\n throw new AgentAppPackError(\n \"unsafe-path\",\n `manifest.json lists a path outside the bundle root: ${JSON.stringify(unsafe)}.`,\n )\n }\n\n const actual = await aggregateSha256(temp, manifest.files)\n if (actual !== manifest.sha256) {\n throw new AgentAppPackError(\n \"digest-mismatch\",\n `SHA-256 mismatch (expected ${manifest.sha256}, got ${actual}). Bundle is corrupted.`,\n )\n }\n\n const outDir =\n input.dest !== undefined\n ? resolve(input.dest)\n : resolve(process.cwd(), `${safeId(manifest.id)}-${manifest.version}`)\n // Drop the bundle artifact before moving the app contents over.\n await rm(manifestPath, { force: true })\n await mkdir(outDir, { recursive: true })\n await cp(temp, outDir, { recursive: true })\n\n return { dir: outDir, manifest }\n } finally {\n await rm(temp, { recursive: true, force: true })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/refs.ts","../src/emit.ts","../src/manifest-fields.ts","../src/define-app.ts","../src/errors.ts","../src/load-app-tools.ts","../src/load-app.ts","../src/pack.ts"],"names":["workflowRefs","matter","isAbsolute","relative","join","readFile","readdir","resolve","mkdir","dirname","cp","writeFile"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Ref-key extraction, shared with the same convention `buildMastraAgent`\n * uses (`packages/mastra/src/build-agent.ts` `refKey`). An AIP-27 ref is\n * a string shorthand or `{ ref | file | inline }`; the key is the string,\n * else `.ref`, else `.file`, else a stable JSON of the inline payload.\n */\n\nimport type { AnyRef } from \"@agentproto/agent\"\n\nexport function refKey(ref: AnyRef): string {\n if (typeof ref === \"string\") return ref\n return ref.ref ?? ref.file ?? JSON.stringify(ref.inline ?? ref)\n}\n\n/** `@agentik/writer` → `writer`; bare ids untouched. */\nexport function stripOwner(id: string): string {\n const m = id.match(/^@[^/]+\\/(.+)$/)\n return m ? m[1]! : id\n}\n","/**\n * `emitApp(app, dir)` — write an app's agents + workflows to disk under an\n * agentproto-owned base, so the manifests don't squat the shared root\n * `.agents/` convention:\n *\n * <dir>/WORKSPACE.md (when the app has a\n * workspace — AIP-34 root\n * manifest; owner = tenant)\n * <dir>/.agentproto/agents/<id>/AGENT.md (one per agent)\n * <dir>/.agentproto/workflows/<wf.id>/WORKFLOW.md (shared — a workflow may\n * be run by several agents)\n * <dir>/.agentproto/APP.md (root index — always\n * written, so a future\n * `app_install` can\n * discover the bundle)\n *\n * The \"tenant\" isn't a `tenants/<t>/…` path segment — it's the `owner` of\n * the AIP-34 WORKSPACE.md (guild / user / org), and local storage is its\n * AIP-35 `storage` block. So there is no bespoke tenant folder to invent.\n *\n * All manifests are plain markdown: frontmatter = the validated handle (or,\n * for APP.md, the identity + a manifest of `{ id, path }` refs to every\n * agent/workflow it bundles), body = the agent's `body` (its system prompt),\n * the workflow description, or the app description. Because a\n * `defineWorkflow` handle is pure data, the WORKFLOW.md needs no `entry:`\n * module — the manifest *is* the workflow, so `loadWorkflowHandle` returns\n * it directly with nothing to reconcile against.\n *\n * `emitApp` stays dependency-light on purpose (no Mastra import) — that\n * split lets a host write/discover an app without paying for the Mastra\n * build path.\n */\n\nimport { copyFile, cp, mkdir, writeFile } from \"node:fs/promises\"\nimport { join, relative } from \"node:path\"\nimport matter from \"gray-matter\"\nimport type { WorkflowHandle } from \"@agentproto/workflow\"\nimport type { WorkspaceHandle } from \"@agentproto/workspace\"\nimport type { AgentEntry, AppAccepts, AppArtifactDecl, AppArtifactSurface, AppBoundariesDefinition, AppDataDefinition, AppDevDefinition, AppExposes, AppPlacement, AppRequirements, AppSkillSurface, AppUiDefinition, EmittedApp } from \"./types.js\"\nimport { stripOwner } from \"./refs.js\"\n\ninterface EmitInput {\n readonly agents: readonly AgentEntry[]\n readonly workflows: readonly WorkflowHandle[]\n readonly workspace?: WorkspaceHandle\n readonly id?: string\n readonly name?: string\n readonly version?: string\n readonly description?: string\n readonly requires?: readonly string[]\n readonly requirements?: AppRequirements\n readonly placement?: AppPlacement\n readonly exposes?: AppExposes\n readonly accepts?: AppAccepts\n readonly ui?: AppUiDefinition\n readonly artifact?: AppArtifactSurface\n readonly skill?: AppSkillSurface\n readonly artifacts?: readonly AppArtifactDecl[]\n readonly dev?: AppDevDefinition\n readonly data?: AppDataDefinition\n readonly externalReadRoots?: readonly string[]\n readonly boundaries?: AppBoundariesDefinition\n readonly category?: string\n}\n\nexport async function emitApp(app: EmitInput, dir: string): Promise<EmittedApp> {\n let workspacePath: string | undefined\n if (app.workspace) {\n await mkdir(dir, { recursive: true })\n workspacePath = join(dir, \"WORKSPACE.md\")\n await writeFile(\n workspacePath,\n toManifest(app.workspace, app.workspace.description ?? app.workspace.name),\n \"utf8\",\n )\n }\n\n const agentPaths: Record<string, string> = {}\n for (const { agent, body } of app.agents) {\n const agentDir = join(dir, \".agentproto\", \"agents\", stripOwner(agent.id))\n await mkdir(agentDir, { recursive: true })\n const agentPath = join(agentDir, \"AGENT.md\")\n await writeFile(agentPath, toManifest(agent, body ?? \"\"), \"utf8\")\n agentPaths[agent.id] = agentPath\n }\n\n let uiPath: string | undefined\n let uiFrontmatter: Record<string, unknown> | undefined\n if (app.ui) {\n const uiDir = join(dir, \".agentproto\", \"ui\")\n await mkdir(uiDir, { recursive: true })\n uiPath = join(uiDir, \"index.html\")\n await writeFile(uiPath, app.ui.html, \"utf8\")\n uiFrontmatter = {\n path: relative(dir, uiPath),\n ...(app.ui.title !== undefined ? { title: app.ui.title } : {}),\n ...(app.ui.description !== undefined ? { description: app.ui.description } : {}),\n ...(app.ui.tools !== undefined ? { tools: app.ui.tools } : {}),\n ...(app.ui.port !== undefined ? { port: app.ui.port } : {}),\n ...(app.ui.csp !== undefined ? { csp: app.ui.csp } : {}),\n ...(app.ui.build !== undefined ? { build: app.ui.build } : {}),\n ...(app.ui.extensions !== undefined ? { extensions: app.ui.extensions } : {}),\n }\n }\n\n let artifactPath: string | undefined\n let artifactFrontmatter: Record<string, unknown> | undefined\n if (app.artifact) {\n const artifactDir = join(dir, \".agentproto\", \"artifact\")\n await mkdir(artifactDir, { recursive: true })\n artifactPath = join(artifactDir, \"index.html\")\n await copyFile(app.artifact.path, artifactPath)\n artifactFrontmatter = {\n path: relative(dir, artifactPath),\n ...(app.artifact.title !== undefined ? { title: app.artifact.title } : {}),\n ...(app.artifact.description !== undefined ? { description: app.artifact.description } : {}),\n }\n }\n\n let skillPath: string | undefined\n let skillFrontmatter: Record<string, unknown> | undefined\n if (app.skill) {\n skillPath = join(dir, \".agentproto\", \"skill\")\n await mkdir(skillPath, { recursive: true })\n await cp(app.skill.path, skillPath, { recursive: true })\n skillFrontmatter = {\n path: relative(dir, skillPath),\n ...(app.skill.title !== undefined ? { title: app.skill.title } : {}),\n ...(app.skill.description !== undefined ? { description: app.skill.description } : {}),\n }\n }\n\n const workflowPaths: string[] = []\n const workflowRefs: { id: string; path: string }[] = []\n for (const wf of app.workflows) {\n const wfDir = join(dir, \".agentproto\", \"workflows\", wf.id)\n await mkdir(wfDir, { recursive: true })\n const wfPath = join(wfDir, \"WORKFLOW.md\")\n await writeFile(wfPath, toManifest(wf, wf.description ?? \"\"), \"utf8\")\n workflowPaths.push(wfPath)\n workflowRefs.push({ id: wf.id, path: relative(dir, wfPath) })\n }\n\n await mkdir(join(dir, \".agentproto\"), { recursive: true })\n const appPath = join(dir, \".agentproto\", \"APP.md\")\n const agentRefs = app.agents.map(({ agent }) => ({\n id: agent.id,\n path: relative(dir, agentPaths[agent.id]!),\n }))\n const appFrontmatter: Record<string, unknown> = {\n schema: \"app/v1\",\n ...(app.id !== undefined ? { id: app.id } : {}),\n ...(app.name !== undefined ? { name: app.name } : {}),\n version: app.version ?? \"0.1.0\",\n ...(app.description !== undefined ? { description: app.description } : {}),\n agents: agentRefs,\n workflows: workflowRefs,\n ...(app.workspace ? { workspace: app.workspace.id } : {}),\n ...requiresFrontmatter(app),\n ...(app.placement !== undefined && app.placement !== \"any\" ? { placement: app.placement } : {}),\n ...(app.exposes && (app.exposes.agents.length > 0 || app.exposes.workflows.length > 0)\n ? { exposes: { agents: app.exposes.agents, workflows: app.exposes.workflows } }\n : {}),\n ...(app.accepts?.tasks ? { accepts: { tasks: true } } : {}),\n ...(uiFrontmatter !== undefined ? { ui: uiFrontmatter } : {}),\n ...(artifactFrontmatter !== undefined ? { artifact: artifactFrontmatter } : {}),\n ...(skillFrontmatter !== undefined ? { skill: skillFrontmatter } : {}),\n ...(app.artifacts !== undefined ? { artifacts: app.artifacts } : {}),\n ...(app.dev !== undefined ? { dev: app.dev } : {}),\n ...(app.data !== undefined ? { data: app.data } : {}),\n ...(app.externalReadRoots !== undefined ? { externalReadRoots: app.externalReadRoots } : {}),\n ...(app.boundaries !== undefined ? { boundaries: app.boundaries } : {}),\n ...(app.category !== undefined ? { category: app.category } : {}),\n }\n await writeFile(appPath, toManifest(appFrontmatter, app.description ?? \"\"), \"utf8\")\n\n return {\n agentPaths,\n workflowPaths,\n appPath,\n ...(workspacePath ? { workspacePath } : {}),\n ...(uiPath ? { uiPath } : {}),\n ...(artifactPath ? { artifactPath } : {}),\n ...(skillPath ? { skillPath } : {}),\n }\n}\n\n/** Legacy flat array while only app ids are declared; object form once any\n * host requirement (browser/fs/gpu/secrets) is set. Defaults are omitted. */\nfunction requiresFrontmatter(app: EmitInput): Record<string, unknown> {\n const r = app.requirements\n if (r && (r.browser || r.fs || r.gpu || r.secrets.length > 0)) {\n return {\n requires: { browser: r.browser, fs: r.fs, gpu: r.gpu, secrets: r.secrets, apps: r.apps },\n }\n }\n return app.requires !== undefined ? { requires: app.requires } : {}\n}\n\nfunction toManifest(handle: object, body: string): string {\n const data: Record<string, unknown> = JSON.parse(JSON.stringify(handle))\n return matter.stringify(`\\n${body}\\n`, data)\n}\n","/**\n * Validation + defaulting for the APP.md placement/requires/exposes/accepts\n * keys. Shared by `defineApp` (throws `AppDefinitionError`) and\n * `loadAppHandle` (throws `AppLoadError`) through the `fail` factory, so a\n * hand-edited APP.md and a bad `defineApp({...})` call get the same diagnostic.\n */\n\nimport type { AppAccepts, AppExposes, AppPlacement, AppRequirements } from \"./types.js\"\n\nexport const APP_PLACEMENTS: readonly AppPlacement[] = [\"local\", \"box\", \"any\", \"split\"]\n\nexport interface ManifestFieldsInput {\n readonly placement?: unknown\n readonly requires?: unknown\n readonly exposes?: unknown\n readonly accepts?: unknown\n}\n\nexport interface DeclaredIds {\n readonly agents: readonly string[]\n readonly workflows: readonly string[]\n}\n\nexport interface NormalizedManifestFields {\n readonly placement: AppPlacement\n /** Flat app-id list; undefined when `requires` was absent (or an object with no `apps`). */\n readonly requires: readonly string[] | undefined\n readonly requirements: AppRequirements\n readonly exposes: AppExposes\n readonly accepts: AppAccepts\n}\n\ntype Fail = (message: string) => Error\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v)\n}\n\nfunction stringList(v: unknown, key: string, fail: Fail): readonly string[] {\n if (v === undefined) return []\n if (!Array.isArray(v) || !v.every(e => typeof e === \"string\" && e.trim() !== \"\")) {\n throw fail(`'${key}' must be an array of non-empty strings.`)\n }\n return [...v] as string[]\n}\n\nfunction bool(v: unknown, key: string, fail: Fail): boolean {\n if (v === undefined) return false\n if (typeof v !== \"boolean\") throw fail(`'${key}' must be a boolean.`)\n return v\n}\n\nexport function normalizeManifestFields(\n input: ManifestFieldsInput,\n declared: DeclaredIds,\n fail: Fail,\n): NormalizedManifestFields {\n let placement: AppPlacement = \"any\"\n if (input.placement !== undefined) {\n if (typeof input.placement !== \"string\" || !APP_PLACEMENTS.includes(input.placement as AppPlacement)) {\n throw fail(\n `'placement' must be one of ${APP_PLACEMENTS.map(p => `\"${p}\"`).join(\", \")}, got ${JSON.stringify(input.placement)}.`,\n )\n }\n placement = input.placement as AppPlacement\n }\n\n let requires: readonly string[] | undefined\n let requirements: AppRequirements = { browser: false, fs: false, gpu: false, secrets: [], apps: [] }\n const r = input.requires\n if (r !== undefined) {\n if (Array.isArray(r)) {\n if (!r.every(e => typeof e === \"string\")) {\n throw fail(\"'requires' must be an array of strings or an object { browser, fs, gpu, secrets, apps }.\")\n }\n requires = [...r] as string[]\n requirements = { ...requirements, apps: requires }\n } else if (isRecord(r)) {\n const apps = stringList(r.apps, \"requires.apps\", fail)\n requirements = {\n browser: bool(r.browser, \"requires.browser\", fail),\n fs: bool(r.fs, \"requires.fs\", fail),\n gpu: bool(r.gpu, \"requires.gpu\", fail),\n secrets: stringList(r.secrets, \"requires.secrets\", fail),\n apps,\n }\n if (apps.length > 0) requires = apps\n } else {\n throw fail(\"'requires' must be an array of strings or an object { browser, fs, gpu, secrets, apps }.\")\n }\n }\n\n let exposes: AppExposes = { agents: [], workflows: [] }\n if (input.exposes !== undefined) {\n if (!isRecord(input.exposes)) throw fail(\"'exposes' must be an object { agents, workflows }.\")\n const agents = stringList(input.exposes.agents, \"exposes.agents\", fail)\n const workflows = stringList(input.exposes.workflows, \"exposes.workflows\", fail)\n for (const id of agents) {\n if (!declared.agents.includes(id)) {\n throw fail(\n `'exposes.agents' names '${id}' but the app declares no such agent. Declared: [${declared.agents.join(\", \") || \"none\"}].`,\n )\n }\n }\n for (const id of workflows) {\n if (!declared.workflows.includes(id)) {\n throw fail(\n `'exposes.workflows' names '${id}' but the app declares no such workflow. Declared: [${declared.workflows.join(\", \") || \"none\"}].`,\n )\n }\n }\n exposes = { agents, workflows }\n }\n\n let accepts: AppAccepts = { tasks: false }\n if (input.accepts !== undefined) {\n if (!isRecord(input.accepts)) throw fail(\"'accepts' must be an object { tasks }.\")\n accepts = { tasks: bool(input.accepts.tasks, \"accepts.tasks\", fail) }\n }\n\n return { placement, requires, requirements, exposes, accepts }\n}\n","/**\n * `defineApp({ agents, workflows, attach })` — bundle one or more AIP-42\n * agents, the AIP-15 workflows they run, and any other AIP artifacts into\n * one cross-linked, frozen handle.\n *\n * The only new invariant app-kit adds is *attachment*: the agents and the\n * bundled workflows must reference each other. Everything else (field\n * validation) already ran when the caller built the handles with\n * `defineAgent` / `defineWorkflow`, so `defineApp` validates the coupling,\n * not the fields.\n *\n * - agent ids are unique within the app.\n * - every `agent.workflows[]` ref MUST resolve to a bundled workflow id.\n * - every bundled workflow MUST be referenced by at least one agent.\n *\n * A dangling ref (an agent points at a workflow the app didn't bundle) or\n * an orphan (a bundled workflow no agent lists) throws — that is what \"an\n * agent attached to its workflows\" means, made checkable.\n */\n\nimport { isAbsolute } from \"node:path\"\nimport { defineWorkspace } from \"@agentproto/workspace\"\nimport type { AgentHandle, AnyRef } from \"@agentproto/agent\"\nimport type { BuildMastraAgentResult } from \"@agentproto/mastra\"\nimport type { WorkflowHandle } from \"@agentproto/workflow\"\nimport type { WorkspaceHandle } from \"@agentproto/workspace\"\nimport type {\n AgentEntry,\n AppDefinition,\n AppHandle,\n DoctypeHandle,\n OpenAIAppUiExtension,\n OpenAIEntrypoint,\n OpenAIIcon,\n ToMastraAgentOptions,\n WorkspaceInput,\n} from \"./types.js\"\nimport { refKey } from \"./refs.js\"\nimport { emitApp } from \"./emit.js\"\nimport { normalizeManifestFields } from \"./manifest-fields.js\"\n\nexport class AppDefinitionError extends Error {\n constructor(message: string) {\n super(`defineApp (app-kit): ${message}`)\n this.name = \"AppDefinitionError\"\n }\n}\n\nexport function defineApp(def: AppDefinition): AppHandle {\n if (def.id !== undefined && def.id.trim() === \"\") {\n throw new AppDefinitionError(\"`id` must be non-empty when present.\")\n }\n if (def.ui !== undefined && (typeof def.ui.html !== \"string\" || def.ui.html.trim() === \"\")) {\n throw new AppDefinitionError(\"`ui.html` must be a non-empty string when `ui` is present.\")\n }\n if ((def.agents === undefined || def.agents.length === 0) && def.ui === undefined) {\n throw new AppDefinitionError(\n \"an app needs at least one agent, or a `ui` block for a UI-only app — got neither.\",\n )\n }\n if (def.dev !== undefined && (!Array.isArray(def.dev.launch) || def.dev.launch.length === 0)) {\n throw new AppDefinitionError(\"`dev.launch` must be a non-empty array when `dev` is present.\")\n }\n if (def.data !== undefined && def.data.dir !== undefined && (typeof def.data.dir !== \"string\" || def.data.dir.trim() === \"\")) {\n throw new AppDefinitionError(\"`data.dir` must be a non-empty string when present.\")\n }\nif (def.artifact !== undefined && (typeof def.artifact.path !== \"string\" || def.artifact.path.trim() === \"\")) {\n throw new AppDefinitionError(\"`artifact.path` must be a non-empty string when `artifact` is present.\")\n }\n // AIP-53 rule 7: `artifact.path` / `skill.path` MUST be absolute —\n // `emit` copies from them at write time and a relative path has no\n // defined base to resolve against.\n if (def.artifact !== undefined && !isAbsolute(def.artifact.path)) {\n throw new AppDefinitionError(\n `\\`artifact.path\\` must be an absolute filesystem path, got '${def.artifact.path}' — a relative path has no defined base to resolve against (AIP-53 rule 7).`,\n )\n }\n if (def.skill !== undefined && (typeof def.skill.path !== \"string\" || def.skill.path.trim() === \"\")) {\n throw new AppDefinitionError(\"`skill.path` must be a non-empty string when `skill` is present.\")\n }\n if (def.skill !== undefined && !isAbsolute(def.skill.path)) {\n throw new AppDefinitionError(\n `\\`skill.path\\` must be an absolute filesystem path, got '${def.skill.path}' — a relative path has no defined base to resolve against (AIP-53 rule 7).`,\n )\n }\n if (def.category !== undefined && def.category.trim() === \"\") {\n throw new AppDefinitionError(\"`category` must be a non-empty string when present.\")\n }\n\n const agents = (def.agents ?? []).map(normalizeEntry)\n const workflows = def.workflows ?? []\n const tools = def.tools ?? []\n const drivers = def.drivers ?? []\n const attachments = def.attach ?? []\n const workspace = def.workspace ? toWorkspaceHandle(def.workspace) : undefined\n const id = def.id\n const name = def.name\n const version = def.version ?? (id ? \"0.1.0\" : undefined)\n const description = def.description\n const fields = normalizeManifestFields(\n { placement: def.placement, requires: def.requires, exposes: def.exposes, accepts: def.accepts },\n { agents: agents.map(e => e.agent.id), workflows: workflows.map(w => w.id) },\n msg => new AppDefinitionError(msg),\n )\n const requires = fields.requires ? Object.freeze([...fields.requires]) : undefined\n const requirements = Object.freeze({\n ...fields.requirements,\n secrets: Object.freeze([...fields.requirements.secrets]),\n apps: Object.freeze([...fields.requirements.apps]),\n })\n const placement = fields.placement\n const exposes = Object.freeze({\n agents: Object.freeze([...fields.exposes.agents]),\n workflows: Object.freeze([...fields.exposes.workflows]),\n })\n const accepts = Object.freeze({ ...fields.accepts })\n const uiExtensions =\n def.ui === undefined || def.ui.extensions === undefined\n ? undefined\n : (Object.freeze({\n openai: freezeDeep(\n normalizeOpenAIUiExtension(\n validateOpenAIExtensionsNamespace(def.ui.extensions),\n def.ui.tools,\n msg => new AppDefinitionError(msg),\n ),\n ),\n }) as { readonly openai?: OpenAIAppUiExtension })\n const ui = def.ui\n ? Object.freeze({\n ...def.ui,\n ...(uiExtensions !== undefined ? { extensions: uiExtensions } : {}),\n })\n : undefined\n const artifact = def.artifact ? Object.freeze({ ...def.artifact }) : undefined\n const skill = def.skill ? Object.freeze({ ...def.skill }) : undefined\n const artifacts = def.artifacts ? Object.freeze(def.artifacts.map(a => Object.freeze({ ...a }))) : undefined\n const dev = def.dev\n ? Object.freeze({ launch: Object.freeze(def.dev.launch.map(l => Object.freeze({ ...l }))) })\n : undefined\n const externalReadRoots = def.externalReadRoots ? Object.freeze([...def.externalReadRoots]) : undefined\n const data = def.data ? Object.freeze({ ...def.data }) : undefined\n const boundaries = def.boundaries ? Object.freeze({ ...def.boundaries }) : undefined\n const category = def.category\n\n validateAttachment(agents, workflows)\n validateUniqueIds(tools, \"tool\")\n validateUniqueIds(drivers, \"driver\")\n\n const frozenAgents = Object.freeze(agents.map((e) => Object.freeze({ ...e })))\n const frozenWorkflows = Object.freeze([...workflows])\n const frozenTools = Object.freeze([...tools])\n const frozenDrivers = Object.freeze([...drivers])\n const frozenAttachments = Object.freeze([...attachments])\n\n const handle: AppHandle = {\n agents: frozenAgents,\n workflows: frozenWorkflows,\n tools: frozenTools,\n drivers: frozenDrivers,\n attachments: frozenAttachments,\n ...(workspace ? { workspace } : {}),\n ...(id !== undefined ? { id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(version !== undefined ? { version } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(requires !== undefined ? { requires } : {}),\n requirements,\n placement,\n exposes,\n accepts,\n ...(ui !== undefined ? { ui } : {}),\n ...(artifact !== undefined ? { artifact } : {}),\n ...(skill !== undefined ? { skill } : {}),\n ...(artifacts !== undefined ? { artifacts } : {}),\n ...(dev !== undefined ? { dev } : {}),\n ...(data !== undefined ? { data } : {}),\n ...(externalReadRoots !== undefined ? { externalReadRoots } : {}),\n ...(boundaries !== undefined ? { boundaries } : {}),\n ...(category !== undefined ? { category } : {}),\n\n async toMastraAgents(opts: ToMastraAgentOptions, only?: readonly string[]) {\n const targets = only ? selectAgents(frozenAgents, only) : frozenAgents\n const out: Record<string, BuildMastraAgentResult> = {}\n for (const entry of targets) {\n out[entry.agent.id] = await buildOne(entry, opts)\n }\n return out\n },\n\n pick(ids: readonly string[]) {\n return selectAgents(frozenAgents, ids)\n },\n\n async toMastraAgent(opts: ToMastraAgentOptions) {\n if (frozenAgents.length !== 1) {\n throw new AppDefinitionError(\n `toMastraAgent requires exactly one agent (app has ${frozenAgents.length}); use toMastraAgents.`,\n )\n }\n return buildOne(frozenAgents[0]!, opts)\n },\n\n emit(dir: string) {\n return emitApp(\n {\n agents: frozenAgents,\n workflows: frozenWorkflows,\n ...(workspace ? { workspace } : {}),\n ...(id !== undefined ? { id } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(version !== undefined ? { version } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(requires !== undefined ? { requires } : {}),\n requirements,\n placement,\n exposes,\n accepts,\n ...(ui !== undefined ? { ui } : {}),\n ...(artifact !== undefined ? { artifact } : {}),\n ...(skill !== undefined ? { skill } : {}),\n ...(artifacts !== undefined ? { artifacts } : {}),\n ...(dev !== undefined ? { dev } : {}),\n ...(data !== undefined ? { data } : {}),\n ...(externalReadRoots !== undefined ? { externalReadRoots } : {}),\n ...(boundaries !== undefined ? { boundaries } : {}),\n ...(category !== undefined ? { category } : {}),\n },\n dir,\n )\n },\n }\n\n return Object.freeze(handle)\n}\n\n/**\n * Normalize the `workspace` input to an AIP-34 `WorkspaceHandle`. A built\n * handle (already run through `defineWorkspace`) carries `schema:\n * \"workspace/v1\"` and passes straight through; a `WorkspaceShorthand` is\n * completed with a local-fs storage default and a `0.1.0` version, then\n * validated by `defineWorkspace` — so a malformed shorthand fails with the\n * same AIP-34 diagnostic as a malformed WORKSPACE.md.\n */\nfunction toWorkspaceHandle(input: WorkspaceInput): WorkspaceHandle {\n if (\"schema\" in input) return input\n return defineWorkspace({\n schema: \"workspace/v1\",\n version: input.version ?? \"0.1.0\",\n id: input.id,\n name: input.name,\n owner: input.owner,\n storage: input.storage ?? { inline: { provider: \"local-fs\", config: {} } },\n ...(input.description ? { description: input.description } : {}),\n })\n}\n\n/**\n * Resolve `ids` to their app entries, preserving the caller's order. Throws\n * `AppDefinitionError` on any id the app doesn't bundle — a hand-picked list\n * that names a missing agent is a bug, not a silent no-op.\n */\nfunction selectAgents(\n agents: readonly AgentEntry[],\n ids: readonly string[],\n): readonly AgentEntry[] {\n const byId = new Map(agents.map((e) => [e.agent.id, e]))\n return ids.map((id) => {\n const entry = byId.get(id)\n if (!entry) {\n throw new AppDefinitionError(\n `agent '${id}' is not in this app. Bundled: [${[...byId.keys()].join(\", \")}].`,\n )\n }\n return entry\n })\n}\n\nasync function buildOne(entry: AgentEntry, opts: ToMastraAgentOptions): Promise<BuildMastraAgentResult> {\n // Dynamic import, not a static top-level one: `@agentproto/mastra` pulls in\n // `@mastra/core` (a documented peer dependency — see index.ts), which a\n // bundler would otherwise inline into ANY host that merely calls\n // `defineApp()` without ever calling `toMastraAgent(s)` (e.g. a UI-only app\n // consumer). Loading it lazily, only from the one place it's actually used,\n // keeps `defineApp()`/the rest of this module free of that cost.\n const { buildMastraAgent } = await import(\"@agentproto/mastra\")\n // `entry.body` (the AGENT.md body) wins as instructions; an explicit\n // `opts.body` still overrides, matching buildMastraAgent's contract.\n return buildMastraAgent(entry.agent, { body: entry.body, ...opts })\n}\n\nfunction normalizeEntry(input: AgentEntry | AgentHandle): AgentEntry {\n // An AgentEntry has an `.agent`; a bare AgentHandle has `.id`/`.schema`.\n if (\"agent\" in input) return input\n return { agent: input }\n}\n\n/**\n * The attachment invariant across all agents: bundled workflow ids and\n * the union of every agent's `workflows[]` refs must be the same set.\n * External/registry workflow refs are out of scope for an app bundle —\n * if an agent lists it, the app must ship it.\n */\nfunction validateAttachment(\n agents: readonly AgentEntry[],\n workflows: readonly WorkflowHandle[],\n): void {\n const seenAgentIds = new Set<string>()\n for (const { agent } of agents) {\n if (seenAgentIds.has(agent.id)) {\n throw new AppDefinitionError(`duplicate agent id '${agent.id}' in the bundle.`)\n }\n seenAgentIds.add(agent.id)\n }\n\n const bundledIds = new Set<string>()\n for (const wf of workflows) {\n if (bundledIds.has(wf.id)) {\n throw new AppDefinitionError(`duplicate workflow id '${wf.id}' in the bundle.`)\n }\n bundledIds.add(wf.id)\n }\n\n const referenced = new Set<string>()\n for (const { agent } of agents) {\n for (const ref of workflowRefs(agent)) {\n const key = refKey(ref)\n referenced.add(key)\n if (!bundledIds.has(key)) {\n throw new AppDefinitionError(\n `agent '${agent.id}' references workflow '${key}' but the app does not bundle it. ` +\n `Bundled: [${[...bundledIds].join(\", \") || \"none\"}].`,\n )\n }\n }\n }\n\n for (const id of bundledIds) {\n if (!referenced.has(id)) {\n throw new AppDefinitionError(\n `workflow '${id}' is bundled but no agent lists it in workflows[]. ` +\n `Add { ref: \"${id}\" } to an agent, or drop the workflow.`,\n )\n }\n }\n}\n\nfunction workflowRefs(agent: AgentHandle): readonly AnyRef[] {\n return agent.workflows ?? []\n}\n\n/** Duplicate-id guard for `tools`/`drivers` — mirrors the agent/workflow id\n * uniqueness `validateAttachment` already enforces. */\nfunction validateUniqueIds(items: readonly { id: string }[], kind: string): void {\n const seen = new Set()\n for (const item of items) {\n if (seen.has(item.id)) {\n throw new AppDefinitionError(`duplicate ${kind} id '${item.id}' in the bundle.`)\n }\n seen.add(item.id)\n }\n}\n\n/**\n * `ui.extensions` accepts ONLY the `openai` namespace (plan I8). Any other\n * vendor block is rejected with the exact field path rather than silently\n * carried and half-advertised downstream. Returns the `openai` value.\n */\nfunction validateOpenAIExtensionsNamespace(raw: unknown): unknown {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new AppDefinitionError(\"`ui.extensions` must be an object.\")\n }\n for (const key of Object.keys(raw as Record<string, unknown>)) {\n if (key !== \"openai\") {\n throw new AppDefinitionError(\n `\\`ui.extensions.${key}\\` is not supported — \\`extensions\\` accepts only \\`openai\\` (v1).`,\n )\n }\n }\n return (raw as Record<string, unknown>).openai\n}\n\nconst OPENAI_EXTENSION_KEYS = new Set([\"entrypoints\", \"icons\", \"display\", \"mentions\"])\n/** Cut in v1: forms/elicitation+MRTR, plugin settings, resource writes,\n * raw local-file opening, plugin onboarding manifest, deep links. Any of\n * these keys (or anything unknown) fails with the exact field path. */\nconst OPENAI_CUT_KEY_MESSAGE =\n \"is not a supported OpenAI extension field in v1 (cut would be silently half-advertised)\"\n\nconst DOT_EXTENSION_RE = /^\\.[a-z0-9][a-z0-9._+-]{0,31}$/\nconst OPENAI_MODES = [\"inline\", \"fullscreen\"] as const\n\n/**\n * The single `ui.extensions.openai` validator/normalizer, shared by TS\n * authoring (`defineApp`) and manifest loading (`loadAppHandle` re-runs\n * through `defineApp`), so there is no hand-maintained duplicate. Normalizes\n * file entrypoint extensions to lowercase; validates every shape/range rule\n * with the exact `ui.extensions.openai.*` field path.\n */\nexport function normalizeOpenAIUiExtension(\n raw: unknown,\n tools: readonly string[] | undefined,\n fail: (message: string) => Error,\n): OpenAIAppUiExtension | undefined {\n if (raw === undefined) return undefined\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw fail(\"`ui.extensions.openai` must be an object.\")\n }\n for (const key of Object.keys(raw)) {\n if (!OPENAI_EXTENSION_KEYS.has(key)) {\n throw fail(`\\`ui.extensions.openai.${key}\\` ${OPENAI_CUT_KEY_MESSAGE}.`)\n }\n }\n\n const entrypoints = normalizeOpenAIEntrypoints((raw as Record<string, unknown>).entrypoints, fail)\n const icons = normalizeOpenAIIcons((raw as Record<string, unknown>).icons, fail)\n const display = normalizeOpenAIDisplay((raw as Record<string, unknown>).display, fail)\n const mentions = normalizeOpenAIMentions((raw as Record<string, unknown>).mentions, tools, fail)\n\n return {\n ...(entrypoints !== undefined ? { entrypoints } : {}),\n ...(icons !== undefined ? { icons } : {}),\n ...(display !== undefined ? { display } : {}),\n ...(mentions !== undefined ? { mentions } : {}),\n }\n}\n\nfunction normalizeOpenAIEntrypoints(\n raw: unknown,\n fail: (message: string) => Error,\n): readonly OpenAIEntrypoint[] | undefined {\n if (raw === undefined) return undefined\n if (!Array.isArray(raw)) {\n throw fail(\"`ui.extensions.openai.entrypoints` must be an array.\")\n }\n if (raw.length < 1 || raw.length > 3) {\n throw fail(\n `\\`ui.extensions.openai.entrypoints\\` must contain 1..3 entries, got ${raw.length}.`,\n )\n }\n const seenTypes = new Set<string>()\n const out: OpenAIEntrypoint[] = []\n for (let i = 0; i < raw.length; i++) {\n const path = `ui.extensions.openai.entrypoints[${i}]`\n const ep = raw[i]\n if (typeof ep !== \"object\" || ep === null || Array.isArray(ep)) {\n throw fail(`\\`${path}\\` must be an object.`)\n }\n const keys = Object.keys(ep as Record<string, unknown>)\n const invalidKeys = keys.filter(k => k !== \"type\" && k !== \"extensions\")\n if (invalidKeys.length > 0) {\n throw fail(\n `\\`${path}.${invalidKeys[0]}\\` is not a supported \\`${(ep as { type?: unknown }).type}\\` entrypoint field.`,\n )\n }\n const type = (ep as Record<string, unknown>).type\n if (type !== \"global\" && type !== \"thread\" && type !== \"file\") {\n throw fail(`\\`${path}.type\\` must be \"global\", \"thread\" or \"file\", got ${JSON.stringify(type)}.`)\n }\n if (seenTypes.has(type)) {\n throw fail(`\\`ui.extensions.openai.entrypoints\\` declares \\`${type}\\` more than once.`)\n }\n seenTypes.add(type)\n if (type === \"file\") {\n out.push({ type, extensions: normalizeDotExtensions((ep as Record<string, unknown>).extensions, path, fail) })\n } else {\n out.push({ type })\n }\n }\n return out\n}\n\nfunction normalizeDotExtensions(\n raw: unknown,\n path: string,\n fail: (message: string) => Error,\n): readonly `.${string}`[] {\n if (!Array.isArray(raw)) {\n throw fail(`\\`${path}.extensions\\` must be an array of dot-prefixed strings.`)\n }\n if (raw.length < 1 || raw.length > 32) {\n throw fail(`\\`${path}.extensions\\` must contain 1..32 entries, got ${raw.length}.`)\n }\n const seen = new Set<string>()\n const out: `.${string}`[] = []\n for (let i = 0; i < raw.length; i++) {\n const ext = raw[i]\n if (typeof ext !== \"string\" || ext.trim() === \"\") {\n throw fail(`\\`${path}.extensions[${i}]\\` must be a non-empty string.`)\n }\n const normalized = ext.toLowerCase()\n if (seen.has(normalized)) {\n throw fail(`\\`${path}.extensions\\` declares '${normalized}' more than once.`)\n }\n seen.add(normalized)\n if (!DOT_EXTENSION_RE.test(normalized)) {\n throw fail(\n `\\`${path}.extensions[${i}]\\` ('${ext}') must be a dot-prefixed lowercase suffix matching /^\\\\.[a-z0-9][a-z0-9._+-]{0,31}$/, e.g. '.md'.`,\n )\n }\n out.push(normalized as `.${string}`)\n }\n return out\n}\n\nfunction normalizeOpenAIIcons(\n raw: unknown,\n fail: (message: string) => Error,\n): readonly OpenAIIcon[] | undefined {\n if (raw === undefined) return undefined\n if (!Array.isArray(raw)) throw fail(\"`ui.extensions.openai.icons` must be an array.\")\n if (raw.length < 1) {\n throw fail(\"`ui.extensions.openai.icons` must contain at least one icon when present.\")\n }\n return raw.map((icon, i) => {\n const path = `ui.extensions.openai.icons[${i}]`\n if (typeof icon !== \"object\" || icon === null || Array.isArray(icon)) {\n throw fail(`\\`${path}\\` must be an object.`)\n }\n const keys = Object.keys(icon as Record<string, unknown>)\n for (const key of keys) {\n if (key !== \"src\" && key !== \"mimeType\" && key !== \"sizes\" && key !== \"theme\") {\n throw fail(`\\`${path}.${key}\\` is not a supported icon field.`)\n }\n }\n const src = (icon as Record<string, unknown>).src\n if (typeof src !== \"string\" || src.trim() === \"\") {\n throw fail(`\\`${path}.src\\` must be a non-empty string.`)\n }\n if (!(ICON_SRC_HTTPS_RE.test(src) || hasValidIconSrcDataUrl(src))) {\n throw fail(\n `\\`${path}.src\\` must be an HTTPS URL or a 'data:image/…;base64,…' URL (inline SVG data allowed), got '${src.slice(0, 64)}'.`,\n )\n }\n const mimeType = (icon as Record<string, unknown>).mimeType\n if (mimeType !== undefined && (typeof mimeType !== \"string\" || mimeType.trim() === \"\")) {\n throw fail(`\\`${path}.mimeType\\` must be a non-empty string when present.`)\n }\n const sizes = (icon as Record<string, unknown>).sizes\n if (\n sizes !== undefined &&\n (!Array.isArray(sizes) || (sizes as unknown[]).length === 0 ||\n !(sizes as unknown[]).every((s) => typeof s === \"string\" && s.trim() !== \"\"))\n ) {\n throw fail(`\\`${path}.sizes\\` must be an array of non-empty strings when present.`)\n }\n const theme = (icon as Record<string, unknown>).theme\n if (theme !== undefined && theme !== \"light\" && theme !== \"dark\") {\n throw fail(`\\`${path}.theme\\` must be \"light\" or \"dark\" when present, got ${JSON.stringify(theme)}.`)\n }\n return {\n src,\n ...(mimeType !== undefined ? { mimeType: mimeType as string } : {}),\n ...(sizes !== undefined ? { sizes: Object.freeze([...(sizes as string[])]) } : {}),\n ...(theme !== undefined ? { theme: theme as \"light\" | \"dark\" } : {}),\n }\n })\n}\n\nconst ICON_SRC_HTTPS_RE = /^https:\\/\\/\\S+$/\n\nfunction hasValidIconSrcDataUrl(src: string): boolean {\n const comma = src.indexOf(\",\")\n if (comma < 0) return false\n const header = src.slice(0, comma)\n const payload = src.slice(comma + 1)\n if (!/^data:image\\/[a-z0-9.+-]+(?:;charset=[\\w-]+)?(?:;base64|;utf8)?$/i.test(header)) return false\n if (/;base64$/i.test(header)) return /^[A-Za-z0-9+/=\\r\\n]+$/.test(payload)\n return payload.trim() !== \"\"\n}\n\nfunction normalizeOpenAIDisplay(\n raw: unknown,\n fail: (message: string) => Error,\n):\n | { readonly availableModes?: readonly (\"inline\" | \"fullscreen\")[]\n readonly preferredMode?: \"inline\" | \"fullscreen\" }\n | undefined {\n if (raw === undefined) return undefined\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw fail(\"`ui.extensions.openai.display` must be an object.\")\n }\n const availableModes = (raw as Record<string, unknown>).availableModes\n if (availableModes !== undefined) {\n if (!Array.isArray(availableModes) || availableModes.length === 0) {\n throw fail(\"`ui.extensions.openai.display.availableModes` must be a non-empty array when present.\")\n }\n const seen = new Set<string>()\n for (const mode of availableModes) {\n if (mode !== \"inline\" && mode !== \"fullscreen\") {\n throw fail(\n `\\`ui.extensions.openai.display.availableModes\\` supports only \"inline\" and \"fullscreen\", got ${JSON.stringify(mode)}.`,\n )\n }\n if (seen.has(mode)) {\n throw fail(`\\`ui.extensions.openai.display.availableModes\\` declares '${mode}' more than once.`)\n }\n seen.add(mode)\n }\n }\n const preferredMode = (raw as Record<string, unknown>).preferredMode\n if (\n preferredMode !== undefined &&\n !(OPENAI_MODES as readonly unknown[]).includes(preferredMode)\n ) {\n throw fail(\n `\\`ui.extensions.openai.display.preferredMode\\` must be \"inline\" or \"fullscreen\", got ${JSON.stringify(preferredMode)}.`,\n )\n }\n if (\n availableModes !== undefined &&\n preferredMode !== undefined &&\n !availableModes.includes(preferredMode as \"inline\" | \"fullscreen\")\n ) {\n throw fail(\n `\\`ui.extensions.openai.display.preferredMode\\` ('${preferredMode}') must occur in \\`ui.extensions.openai.display.availableModes\\` when both are declared.`,\n )\n }\n return {\n ...(availableModes !== undefined\n ? { availableModes: Object.freeze([...(availableModes as (\"inline\" | \"fullscreen\")[])]) }\n : {}),\n ...(preferredMode !== undefined ? { preferredMode: preferredMode as \"inline\" | \"fullscreen\" } : {}),\n }\n}\n\nfunction normalizeOpenAIMentions(\n raw: unknown,\n tools: readonly string[] | undefined,\n fail: (message: string) => Error,\n):\n | { readonly searchTool: string }\n | undefined {\n if (raw === undefined) return undefined\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw fail(\"`ui.extensions.openai.mentions` must be an object.\")\n }\n for (const key of Object.keys(raw)) {\n if (key !== \"searchTool\") {\n throw fail(`\\`ui.extensions.openai.mentions.${key}\\` is not a supported mentions field.`)\n }\n }\n const searchTool = (raw as Record<string, unknown>).searchTool\n if (typeof searchTool !== \"string\" || searchTool.trim() === \"\") {\n throw fail(\"`ui.extensions.openai.mentions.searchTool` must be a non-empty string.\")\n }\n if (tools === undefined || !tools.includes(searchTool)) {\n throw fail(\n `\\`ui.extensions.openai.mentions.searchTool\\` '${searchTool}' must be declared in this same ui block's \\`tools\\`${tools ? ` (${tools.join(\", \")})` : \" — the ui declares none\"}.`,\n )\n }\n return { searchTool }\n}\n\n/** Deep-freeze the normalized OpenAI extension tree — same immutability\n * discipline the rest of app-kit applies to top-level handle fields. */\nfunction freezeDeep(value: unknown): unknown {\n if (Array.isArray(value)) return Object.freeze(value.map(freezeDeep))\n if (typeof value === \"object\" && value !== null) {\n const out: Record<string, unknown> = {}\n for (const [key, v] of Object.entries(value)) {\n out[key] = freezeDeep(v)\n }\n return Object.freeze(out)\n }\n return value\n}\n\nexport type { DoctypeHandle }\n","/** Thrown by `loadAppHandle` and its helpers (`loadAppBundledTools`, …) on\n * any disk/parse/validation failure while reading an app bundle off disk. */\nexport class AppLoadError extends Error {\n constructor(message: string) {\n super(`loadAppHandle: ${message}`)\n this.name = \"AppLoadError\"\n }\n}\n","/**\n * Loader for an app's bundled AIP-14 TOOL.md contracts and AIP-30 DRIVER.md\n * implementations — the deterministic-step half of WORKFLOW.md `tool` steps\n * (yt-dlp, an STT HTTP call, a PDF render, …), as opposed to `agent` steps.\n *\n * Neither AIP-53 (app, still Draft with no scaffolded spec) nor AIP-14/30\n * declare a bundle location for these, so this is a convention this loader\n * defines: `<dir>/.agentproto/tools/<id>/TOOL.md` and\n * `<dir>/.agentproto/drivers/<id>/DRIVER.md`, one manifest per `<id>`\n * subdirectory, discovered by listing — not declared as APP.md frontmatter\n * refs like `agents`/`workflows` are. An absent `tools`/`drivers` directory\n * is not an error (most apps have neither); a subdirectory that exists but\n * fails to parse, or is missing its TOOL.md/DRIVER.md, fails the whole load\n * — `loadAppHandle` never silently drops a broken tool/driver bundle.\n *\n * Only `kind: cli` and `kind: http` drivers dispatch (the two\n * `@agentproto/driver-cli` / `@agentproto/driver-http` sugars this package\n * already depends on). Any other `kind` (`mcp`, `sdk`, `builtin`) still\n * loads — a malformed manifest still fails the app load — but its execute\n * body refuses clearly instead of silently no-oping or crashing on a\n * dispatch mechanism this host doesn't implement yet.\n *\n * A `kind: cli` driver's subprocess `cwd` defaults to the app root (`dir`,\n * the directory containing `.agentproto/`) rather than the host process's\n * own cwd — relative paths in an app-bundled cli driver (DRIVER.md argv,\n * `--out-dir`-style flags, …) resolve against the app root. A DRIVER.md can\n * override this with `metadata.cli.cwd`; a relative value there is itself\n * resolved against the app root, and a value that escapes the app root\n * (`../..`) is a load error, not a silent escape.\n */\n\nimport { readdir, readFile } from \"node:fs/promises\"\nimport type { Dirent } from \"node:fs\"\nimport { isAbsolute, join, relative, resolve } from \"node:path\"\nimport {\n parseToolManifest,\n toolFromManifestOnly,\n type ToolHandle,\n} from \"@agentproto/tool\"\nimport {\n driverFromManifest,\n driverDefinitionFromManifest,\n parseDriverManifest,\n type DriverManifest,\n} from \"@agentproto/driver/manifest\"\nimport { normalizeToolId, type DriverHandle, type ExecuteFn } from \"@agentproto/driver\"\nimport { defineCliDriver, type CliDriverDefinition } from \"@agentproto/driver-cli\"\nimport { defineHttpDriver, type HttpDriverDefinition } from \"@agentproto/driver-http\"\nimport { AppLoadError } from \"./errors.js\"\n\n/** List `<id>` subdirectory names under `base`, sorted. Missing `base` (the\n * common case — most apps ship neither tools nor drivers) is not an error. */\nasync function listBundleIds(base: string): Promise<string[]> {\n let entries: Dirent[]\n try {\n entries = await readdir(base, { withFileTypes: true })\n } catch {\n return []\n }\n return entries\n .filter((e) => e.isDirectory())\n .map((e) => e.name)\n .sort()\n}\n\nfunction errMsg(err: unknown): string {\n return err instanceof Error ? err.message : String(err)\n}\n\nasync function loadToolEntry(id: string, toolPath: string): Promise<ToolHandle> {\n let source: string\n try {\n source = await readFile(toolPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(`tool '${id}': cannot read '${toolPath}': ${errMsg(err)}`)\n }\n try {\n return toolFromManifestOnly(parseToolManifest(source))\n } catch (err) {\n throw new AppLoadError(`tool '${id}' at '${toolPath}': ${errMsg(err)}`)\n }\n}\n\n/** Env var names DRIVER.md declares as required secrets — `auth.state.env`,\n * the existing AIP-30 field for \"env var names this provider's auth needs\".\n * Loosely typed at the manifest layer (`auth: z.unknown()`), so this reads\n * defensively rather than trusting a shape. */\nfunction requiredSecretNames(fm: DriverManifest[\"frontmatter\"]): readonly string[] {\n const auth = fm.auth as { state?: { env?: unknown } } | undefined\n const env = auth?.state?.env\n return Array.isArray(env) ? env.filter((e): e is string => typeof e === \"string\") : []\n}\n\n/**\n * Wrap every execute body so a declared-but-unresolved secret fails the\n * STEP with a clear `driver-error` naming the secret — never at app\n * install (secrets are resolved lazily, only when the tool actually\n * dispatches). Resolved values are merged into `driverCtx.secrets` ahead of\n * whatever the caller already put there (a workflow tool step's compiled\n * `secrets` is empty today — see BRIEF-D — so this is the only source for\n * an app-bundled driver), letting `${secrets.X}` templating in\n * `defineCliDriver`/`defineHttpDriver` resolve as authors expect.\n */\nfunction wrapExecuteWithSecretCheck(\n driverId: string,\n execute: Record<string, ExecuteFn>,\n secretNames: readonly string[],\n): Record<string, ExecuteFn> {\n if (secretNames.length === 0) return execute\n const wrapped: Record<string, ExecuteFn> = {}\n for (const [toolId, fn] of Object.entries(execute)) {\n wrapped[toolId] = async (args) => {\n const resolved: Record<string, string> = {}\n for (const name of secretNames) {\n const value = process.env[name]\n if (!value) {\n throw new Error(\n `driver '${driverId}': missing required secret '${name}' (declared in DRIVER.md 'auth.state.env').`,\n )\n }\n resolved[name] = value\n }\n const priorSecrets = (args.driverCtx as { secrets?: Record<string, string> }).secrets ?? {}\n return fn({ ...args, driverCtx: { ...args.driverCtx, secrets: { ...resolved, ...priorSecrets } } })\n }\n }\n return wrapped\n}\n\n/**\n * Resolve a kind:cli DRIVER.md's working directory. Relative paths in an\n * app-bundled cli driver resolve against the app root (the dir containing\n * `.agentproto/`) — not the daemon's own cwd, which is what `runSubprocess`\n * fell back to before this existed and is almost never what a DRIVER.md\n * author means (see `@agentproto/driver-cli`'s README). Defaults to the app\n * root itself when `metadata.cli.cwd` is unset; an explicit value — relative\n * or absolute — that resolves outside the app root is a load error rather\n * than silently escaping the bundle.\n */\nfunction resolveCliCwd(appRoot: string, driverId: string, cwd: unknown): string {\n const absoluteAppRoot = resolve(appRoot)\n if (cwd === undefined) return absoluteAppRoot\n if (typeof cwd !== \"string\" || cwd.trim() === \"\") {\n throw new Error(`driver '${driverId}': 'metadata.cli.cwd' must be a non-empty string.`)\n }\n const resolved = isAbsolute(cwd) ? resolve(cwd) : resolve(absoluteAppRoot, cwd)\n const rel = relative(absoluteAppRoot, resolved)\n if (rel !== \"\" && (rel.startsWith(\"..\") || isAbsolute(rel))) {\n throw new Error(\n `driver '${driverId}': 'metadata.cli.cwd' (${cwd}) resolves to '${resolved}', outside the app root '${absoluteAppRoot}'.`,\n )\n }\n return resolved\n}\n\n/** Build a working {@link DriverHandle} from a parsed DRIVER.md, dispatching\n * on `kind`. Throws a plain `Error` (wrapped in `AppLoadError` by the\n * caller, which has the file path) on a `cli`/`http` manifest missing its\n * dispatch config. */\nfunction driverHandleFromManifest(manifest: DriverManifest, appRoot: string): DriverHandle {\n const fm = manifest.frontmatter\n const secretNames = requiredSecretNames(fm)\n\n if (fm.kind === \"cli\") {\n const cliMeta = (fm.metadata?.cli ?? {}) as Partial<CliDriverDefinition> & { cwd?: unknown }\n if (typeof cliMeta.bin !== \"string\" || cliMeta.bin.trim() === \"\") {\n throw new Error(\n \"kind:cli DRIVER.md requires a non-empty 'metadata.cli.bin' frontmatter field naming the binary.\",\n )\n }\n const handle = defineCliDriver({\n ...driverDefinitionFromManifest(manifest),\n bin: cliMeta.bin,\n binArgs: cliMeta.binArgs,\n output: cliMeta.output,\n tty: cliMeta.tty,\n sandbox: cliMeta.sandbox,\n cwd: resolveCliCwd(appRoot, fm.id, cliMeta.cwd),\n })\n return { ...handle, execute: wrapExecuteWithSecretCheck(fm.id, handle.execute, secretNames) }\n }\n\n if (fm.kind === \"http\") {\n const httpMeta = (fm.metadata?.http ?? {}) as Partial<HttpDriverDefinition>\n if (typeof httpMeta.baseUrl !== \"string\" || httpMeta.baseUrl.trim() === \"\") {\n throw new Error(\"kind:http DRIVER.md requires a non-empty 'metadata.http.baseUrl' frontmatter field.\")\n }\n const handle = defineHttpDriver({\n ...driverDefinitionFromManifest(manifest),\n baseUrl: httpMeta.baseUrl,\n defaultHeaders: httpMeta.defaultHeaders,\n defaultMethod: httpMeta.defaultMethod,\n streaming: httpMeta.streaming,\n })\n return { ...handle, execute: wrapExecuteWithSecretCheck(fm.id, handle.execute, secretNames) }\n }\n\n // mcp / sdk / builtin: load (so a malformed manifest still fails the app\n // load), but refuse at resolve/dispatch — every implements[] entry gets\n // an execute body that fails with a clear message instead of silently\n // no-oping or throwing an opaque \"no dispatch mechanism\" error.\n const execute: Record<string, ExecuteFn> = {}\n for (const entry of fm.implements) {\n const toolId = normalizeToolId(entry.tool)\n execute[toolId] = async () => {\n throw new Error(\n `driver '${fm.id}': kind '${fm.kind}' is not supported by this host — only 'cli' and 'http' drivers dispatch.`,\n )\n }\n }\n return driverFromManifest({ manifest, execute })\n}\n\nasync function loadDriverEntry(id: string, driverPath: string, appRoot: string): Promise<DriverHandle> {\n let source: string\n try {\n source = await readFile(driverPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(`driver '${id}': cannot read '${driverPath}': ${errMsg(err)}`)\n }\n try {\n return driverHandleFromManifest(parseDriverManifest(source), appRoot)\n } catch (err) {\n throw new AppLoadError(`driver '${id}' at '${driverPath}': ${errMsg(err)}`)\n }\n}\n\n/**\n * Scan `<dir>/.agentproto/tools/*` and `<dir>/.agentproto/drivers/*` for\n * TOOL.md / DRIVER.md bundles and load them into live handles. Used by\n * `loadAppHandle` (install-time validation, via `defineApp`) and reusable\n * directly by a host that needs an already-installed app's tools/drivers\n * without re-walking its agents/workflows (see `@agentproto/runtime`'s\n * workflow `compileWorkflow` seam).\n */\nexport async function loadAppBundledTools(\n dir: string,\n): Promise<{ tools: ToolHandle[]; drivers: DriverHandle[] }> {\n const toolsDir = join(dir, \".agentproto\", \"tools\")\n const driversDir = join(dir, \".agentproto\", \"drivers\")\n\n const tools: ToolHandle[] = []\n for (const id of await listBundleIds(toolsDir)) {\n tools.push(await loadToolEntry(id, join(toolsDir, id, \"TOOL.md\")))\n }\n\n const drivers: DriverHandle[] = []\n for (const id of await listBundleIds(driversDir)) {\n drivers.push(await loadDriverEntry(id, join(driversDir, id, \"DRIVER.md\"), dir))\n }\n\n return { tools, drivers }\n}\n","/**\n * `loadAppHandle(dir)` — read a root `APP.md` off disk into an `AppHandle`.\n *\n * Mirror of `@agentproto/workflow-loader`'s `loadWorkflowHandle`: this is\n * the host-side seam that touches the filesystem so the pure packages\n * (`@agentproto/agent`, `@agentproto/workflow`, `@agentproto/workspace`)\n * don't have to.\n *\n * `<dir>/.agentproto/APP.md` lists every agent + workflow the app bundles\n * as `{ id, path }` refs (relative to `dir`, the shape `emitApp` writes).\n * Each is loaded with its own package's manifest reader — `AGENT.md` via\n * `@agentproto/agent/manifest`, `WORKFLOW.md` via\n * `@agentproto/workflow-loader` (which itself resolves an `entry:` module\n * when present) — then the whole bundle is re-run through `defineApp` so\n * the attachment invariant (every agent/workflow ref resolves both ways)\n * re-validates exactly as it did at authoring time. A stale or hand-edited\n * APP.md that drifted from its AGENT.md/WORKFLOW.md refs fails the same\n * way a bad `defineApp({...})` call would.\n *\n * The app may also ship AIP-14 TOOL.md / AIP-30 DRIVER.md bundles under\n * `.agentproto/tools/<id>/TOOL.md` and `.agentproto/drivers/<id>/DRIVER.md`\n * — discovered by directory convention (see `loadAppBundledTools`), not\n * declared as APP.md frontmatter refs like agents/workflows are.\n *\n * Frontmatter validation here is deliberately minimal, and that is now an\n * AIP-53 conformance decision, not an accident of app having \"no AIP yet\":\n * AIP-53 (Draft) freezes the loader contract at the checks below — schema\n * MUST be exactly `app/v1`, `agents`/`workflows` MUST be `{ id, path }`\n * ref arrays, every ref MUST resolve, and the bundle MUST re-run through\n * `defineApp` — and it does NOT require rejecting unknown frontmatter\n * keys. Staying permissive past the frozen checks lets a future frontmatter\n * key (e.g. a later WP's addition) round-trip through this loader without\n * hosts that haven't upgraded rejecting the whole app; tightening beyond\n * the spec would break that forward compatibility for no conformance gain.\n */\n\nimport { readFile } from \"node:fs/promises\"\nimport { dirname, isAbsolute, join } from \"node:path\"\nimport matter from \"gray-matter\"\nimport { agentFromManifest, parseAgentManifest } from \"@agentproto/agent/manifest\"\nimport { loadWorkflowHandle } from \"@agentproto/workflow-loader\"\nimport { parseWorkspaceManifest, workspaceFromManifest } from \"@agentproto/workspace/manifest\"\nimport type {\n AgentEntry,\n AppArtifactDecl,\n AppBoundariesDefinition,\n AppDataDefinition,\n AppDefinition,\n AppDevDefinition,\n AppHandle,\n AppUiBuildConfig,\n AppUiDefinition,\n} from \"./types.js\"\nimport { defineApp } from \"./define-app.js\"\nimport { AppLoadError } from \"./errors.js\"\nimport { loadAppBundledTools } from \"./load-app-tools.js\"\nimport { normalizeManifestFields } from \"./manifest-fields.js\"\n\nexport { AppLoadError }\n\ninterface AppRef {\n readonly id: string\n readonly path: string\n}\n\ninterface AppFrontmatterUi {\n readonly path: string\n readonly title?: string\n readonly description?: string\n readonly tools?: readonly string[]\n readonly port?: number\n readonly csp?: {\n readonly connectDomains?: readonly string[]\n readonly resourceDomains?: readonly string[]\n readonly frameDomains?: readonly string[]\n }\n readonly build?: AppUiBuildConfig\n /**\n * Namespaced vendor extension metadata. Passed through to `defineApp`\n * UNFILTERED (not just `openai`) so its namespace check — `ui.extensions`\n * accepts ONLY `openai` — actually runs against a hand-authored APP.md's\n * sibling keys too, not just the TS-authoring path.\n */\n readonly extensions?: { readonly [key: string]: unknown }\n}\n\ninterface AppFrontmatterArtifact {\n readonly path: string\n readonly title?: string\n readonly description?: string\n}\n\ninterface AppFrontmatterSkill {\n readonly path: string\n readonly title?: string\n readonly description?: string\n}\n\ninterface AppFrontmatter {\n readonly schema: string\n readonly id?: string\n readonly name?: string\n readonly version?: string\n readonly description?: string\n readonly agents: readonly AppRef[]\n readonly workflows: readonly AppRef[]\n readonly workspace?: string\n readonly requires?: AppDefinition[\"requires\"]\n readonly placement?: AppDefinition[\"placement\"]\n readonly exposes?: AppDefinition[\"exposes\"]\n readonly accepts?: AppDefinition[\"accepts\"]\n readonly ui?: AppFrontmatterUi\n readonly artifact?: AppFrontmatterArtifact\n readonly skill?: AppFrontmatterSkill\n readonly artifacts?: readonly AppArtifactDecl[]\n readonly dev?: AppDevDefinition\n readonly data?: AppDataDefinition\n readonly externalReadRoots?: readonly string[]\n readonly boundaries?: AppBoundariesDefinition\n readonly category?: string\n}\n\nfunction resolveRef(dir: string, path: string): string {\n return isAbsolute(path) ? path : join(dir, path)\n}\n\n/**\n * Resolve the UI ROOT directory an app's UI should be served from — the\n * same resolution `app_install`/`loadAppHandle` uses for `ui.path`, so\n * `app serve` and install agree on where the UI lives.\n *\n * Reads `<appDir>/.agentproto/APP.md` frontmatter: when a `ui.path` is\n * declared, the UI root is the directory CONTAINING that entry file (e.g.\n * `ui.path: ui/index.html` → `<appDir>/ui`); when `ui` is absent, returns\n * `undefined` and callers fall back to the legacy `<appDir>/.agentproto/ui/`.\n * Throws {@link AppLoadError} on a `ui` that isn't an object or whose `path`\n * isn't a non-empty string — the same shape `loadAppHandle` would reject.\n * Returns `undefined` (not a throw) when APP.md itself is unreadable, since\n * callers check APP.md existence separately.\n */\nexport async function resolveAppUIRoot(appDir: string): Promise<string | undefined> {\n const appMdPath = join(appDir, \".agentproto\", \"APP.md\")\n let source: string\n try {\n source = await readFile(appMdPath, \"utf8\")\n } catch {\n return undefined\n }\n const data = matter(source).data as Record<string, unknown>\n const ui = data.ui\n if (ui === undefined) return undefined\n if (typeof ui !== \"object\" || ui === null || Array.isArray(ui)) {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui' must be an object.`)\n }\n const path = (ui as Record<string, unknown>).path\n if (typeof path !== \"string\" || path.trim() === \"\") {\n throw new AppLoadError(\n `'${appMdPath}': frontmatter 'ui.path' must be a non-empty string.`,\n )\n }\n return dirname(resolveRef(appDir, path))\n}\n\n/** Validated `ui.path` + `ui.build`, as returned by {@link peekAppUi}. */\nexport interface AppUiPeek {\n readonly path: string\n readonly build?: AppUiBuildConfig\n}\n\nfunction parseUiBuildFrontmatter(raw: unknown, appMdPath: string): AppUiBuildConfig | undefined {\n if (raw === undefined) return undefined\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui.build' must be an object.`)\n }\n const command = (raw as Record<string, unknown>).command\n if (typeof command !== \"string\" || command.trim() === \"\") {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui.build.command' must be a non-empty string.`)\n }\n const cwd = (raw as Record<string, unknown>).cwd\n if (cwd !== undefined && (typeof cwd !== \"string\" || cwd.trim() === \"\")) {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui.build.cwd' must be a non-empty string.`)\n }\n const sources = (raw as Record<string, unknown>).sources\n if (\n sources !== undefined &&\n (!Array.isArray(sources) || !sources.every(s => typeof s === \"string\" && s.trim() !== \"\"))\n ) {\n throw new AppLoadError(\n `'${appMdPath}': frontmatter 'ui.build.sources' must be an array of non-empty strings.`,\n )\n }\n return {\n command,\n ...(cwd !== undefined ? { cwd: cwd as string } : {}),\n ...(sources !== undefined ? { sources: sources as string[] } : {}),\n }\n}\n\n/**\n * Peek `<appDir>/.agentproto/APP.md`'s `ui.path` + `ui.build` WITHOUT\n * reading the ui html itself.\n *\n * `loadAppHandle` reads `ui.path` eagerly and throws {@link AppLoadError}\n * when it's missing — exactly the case a declared `ui.build` exists to\n * recover from. A caller that wants to build the bundle before it's\n * expected to exist (the daemon's `app_install`, `app serve`, first UI\n * serve — see `@agentproto/runtime`'s `ensureAppUiBuilt`) resolves this\n * first, runs the build if declared, then calls `loadAppHandle` as usual.\n *\n * Returns `undefined` when APP.md is unreadable or declares no `ui` block\n * — same \"caller checks existence separately\" contract as\n * `resolveAppUIRoot`. Throws on a malformed `ui`/`ui.build` shape, same\n * validation `loadAppHandle` would eventually hit.\n */\nexport async function peekAppUi(appDir: string): Promise<AppUiPeek | undefined> {\n const appMdPath = join(appDir, \".agentproto\", \"APP.md\")\n let source: string\n try {\n source = await readFile(appMdPath, \"utf8\")\n } catch {\n return undefined\n }\n const data = matter(source).data as Record<string, unknown>\n const ui = data.ui\n if (ui === undefined) return undefined\n if (typeof ui !== \"object\" || ui === null || Array.isArray(ui)) {\n throw new AppLoadError(`'${appMdPath}': frontmatter 'ui' must be an object.`)\n }\n const path = (ui as Record<string, unknown>).path\n if (typeof path !== \"string\" || path.trim() === \"\") {\n throw new AppLoadError(\n `'${appMdPath}': frontmatter 'ui.path' must be a non-empty string.`,\n )\n }\n const build = parseUiBuildFrontmatter((ui as Record<string, unknown>).build, appMdPath)\n return { path: resolveRef(appDir, path), ...(build ? { build } : {}) }\n}\n\nfunction isRefArray(v: unknown): v is AppRef[] {\n return (\n Array.isArray(v) &&\n v.every(\n (e) =>\n typeof e === \"object\" &&\n e !== null &&\n typeof (e as { id?: unknown }).id === \"string\" &&\n typeof (e as { path?: unknown }).path === \"string\",\n )\n )\n}\n\n/** Minimal shape check — see the module doc for why this stays loose. */\nfunction parseAppFrontmatter(data: Record<string, unknown>, appPath: string): AppFrontmatter {\n if (data.schema !== \"app/v1\") {\n throw new AppLoadError(\n `'${appPath}': expected frontmatter 'schema: app/v1', got ${JSON.stringify(data.schema)}.`,\n )\n }\n if (!isRefArray(data.agents)) {\n throw new AppLoadError(`'${appPath}': frontmatter 'agents' must be an array of { id, path }.`)\n }\n if (!isRefArray(data.workflows)) {\n throw new AppLoadError(\n `'${appPath}': frontmatter 'workflows' must be an array of { id, path }.`,\n )\n }\n // placement / requires / exposes / accepts: shape, enum and \"exposed id is\n // declared\" checks, same rules `defineApp` re-applies.\n normalizeManifestFields(\n data,\n { agents: data.agents.map(a => a.id), workflows: data.workflows.map(w => w.id) },\n msg => new AppLoadError(`'${appPath}': frontmatter ${msg}`),\n )\n if (data.data !== undefined) {\n const d = data.data as { dir?: unknown } | null\n if (\n typeof d !== \"object\" ||\n d === null ||\n (d.dir !== undefined && (typeof d.dir !== \"string\" || d.dir.trim() === \"\"))\n ) {\n throw new AppLoadError(\n `'${appPath}': frontmatter 'data' must be an object whose optional 'dir' is a non-empty string.`,\n )\n }\n }\n if (data.externalReadRoots !== undefined) {\n if (\n !Array.isArray(data.externalReadRoots) ||\n !data.externalReadRoots.every((e) => typeof e === \"string\" && e.trim() !== \"\")\n ) {\n throw new AppLoadError(\n `'${appPath}': frontmatter 'externalReadRoots' must be an array of non-empty strings.`,\n )\n }\n }\n if (data.boundaries !== undefined) {\n const b = data.boundaries as { enforce?: unknown } | null\n if (\n typeof b !== \"object\" ||\n b === null ||\n Array.isArray(b) ||\n (b.enforce !== undefined && b.enforce !== \"required\" && b.enforce !== \"best-effort\")\n ) {\n throw new AppLoadError(\n `'${appPath}': frontmatter 'boundaries' must be an object whose optional 'enforce' is \"required\" or \"best-effort\".`,\n )\n }\n }\n if (data.category !== undefined && (typeof data.category !== \"string\" || data.category.trim() === \"\")) {\n throw new AppLoadError(`'${appPath}': frontmatter 'category' must be a non-empty string.`)\n }\n return data as unknown as AppFrontmatter\n}\n\nasync function loadAgentEntry(dir: string, ref: AppRef): Promise<AgentEntry> {\n const agentPath = resolveRef(dir, ref.path)\n let source: string\n try {\n source = await readFile(agentPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(\n `agent '${ref.id}': cannot read '${agentPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n let body: string\n let manifest: ReturnType<typeof parseAgentManifest>\n try {\n manifest = parseAgentManifest(source)\n body = manifest.body.trim()\n } catch (err) {\n throw new AppLoadError(\n `agent '${ref.id}' at '${agentPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n return { agent: agentFromManifest(manifest), ...(body ? { body } : {}) }\n}\n\nasync function loadWorkflowRef(dir: string, ref: AppRef) {\n const wfPath = resolveRef(dir, ref.path)\n try {\n return await loadWorkflowHandle(wfPath)\n } catch (err) {\n throw new AppLoadError(\n `workflow '${ref.id}' at '${wfPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n}\n\n/**\n * Load `<dir>/.agentproto/APP.md` and every AGENT.md/WORKFLOW.md (and, if\n * declared, `<dir>/WORKSPACE.md`) it references, then re-run `defineApp` on\n * the result. Throws {@link AppLoadError} naming the offending path on a\n * missing APP.md, a missing referenced file, or a frontmatter/schema\n * mismatch; throws `AppDefinitionError` (from `defineApp`) if the loaded\n * bundle fails the attachment invariant.\n */\nexport async function loadAppHandle(dir: string): Promise<AppHandle> {\n const appPath = join(dir, \".agentproto\", \"APP.md\")\n let source: string\n try {\n source = await readFile(appPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(\n `cannot read '${appPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n\n const parsed = matter(source)\n const fm = parseAppFrontmatter(parsed.data, appPath)\n\n const agents: AgentEntry[] = []\n for (const ref of fm.agents) {\n agents.push(await loadAgentEntry(dir, ref))\n }\n\n const workflows = []\n for (const ref of fm.workflows) {\n workflows.push(await loadWorkflowRef(dir, ref))\n }\n\n // AIP-14/AIP-30 tool + driver bundles — not enumerated in APP.md\n // frontmatter like agents/workflows are; discovered by convention under\n // `.agentproto/tools/<id>/TOOL.md` and `.agentproto/drivers/<id>/DRIVER.md`.\n // No declared bundle location exists yet in AIP-53/14/30 (spec gap) — see\n // `loadAppBundledTools` for the loader and its error-handling contract\n // (a parse/read failure fails the whole app load, naming the file path;\n // an absent `tools`/`drivers` directory is not an error).\n const { tools, drivers } = await loadAppBundledTools(dir)\n\n let workspace\n if (fm.workspace) {\n const workspacePath = join(dir, \"WORKSPACE.md\")\n let workspaceSource: string\n try {\n workspaceSource = await readFile(workspacePath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(\n `workspace '${fm.workspace}': cannot read '${workspacePath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n try {\n workspace = workspaceFromManifest(parseWorkspaceManifest(workspaceSource))\n } catch (err) {\n throw new AppLoadError(\n `workspace '${fm.workspace}' at '${workspacePath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n }\n\n let ui\n if (fm.ui) {\n const uiPath = resolveRef(dir, fm.ui.path)\n let html: string\n try {\n html = await readFile(uiPath, \"utf8\")\n } catch (err) {\n throw new AppLoadError(\n `ui: cannot read '${uiPath}': ${err instanceof Error ? err.message : String(err)}`,\n )\n }\n const build = parseUiBuildFrontmatter(fm.ui.build, appPath)\n ui = {\n html,\n ...(fm.ui.title !== undefined ? { title: fm.ui.title } : {}),\n ...(fm.ui.description !== undefined ? { description: fm.ui.description } : {}),\n ...(fm.ui.tools !== undefined ? { tools: fm.ui.tools } : {}),\n ...(fm.ui.port !== undefined ? { port: fm.ui.port } : {}),\n ...(fm.ui.csp !== undefined ? { csp: fm.ui.csp } : {}),\n ...(build !== undefined ? { build } : {}),\n // Pass through UNFILTERED — `defineApp`'s\n // `validateOpenAIExtensionsNamespace` rejects any sibling vendor key\n // (a typo, a future vendor block, hand-authored drift) with the same\n // diagnostic the TS-authoring path throws. Pre-filtering to `openai`\n // here would silently drop those instead of failing loudly.\n ...(fm.ui.extensions !== undefined\n ? { extensions: fm.ui.extensions as unknown as AppUiDefinition[\"extensions\"] }\n : {}),\n }\n }\n\n return defineApp({\n agents,\n workflows,\n tools,\n drivers,\n ...(workspace ? { workspace } : {}),\n ...(fm.id !== undefined ? { id: fm.id } : {}),\n ...(fm.name !== undefined ? { name: fm.name } : {}),\n ...(fm.version !== undefined ? { version: fm.version } : {}),\n ...(fm.description !== undefined ? { description: fm.description } : {}),\n ...(fm.requires !== undefined ? { requires: fm.requires } : {}),\n ...(fm.placement !== undefined ? { placement: fm.placement } : {}),\n ...(fm.exposes !== undefined ? { exposes: fm.exposes } : {}),\n ...(fm.accepts !== undefined ? { accepts: fm.accepts } : {}),\n ...(ui !== undefined ? { ui } : {}),\n ...(fm.artifact !== undefined\n ? { artifact: { path: resolveRef(dir, fm.artifact.path), ...(fm.artifact.title !== undefined ? { title: fm.artifact.title } : {}), ...(fm.artifact.description !== undefined ? { description: fm.artifact.description } : {}) } }\n : {}),\n ...(fm.skill !== undefined\n ? { skill: { path: resolveRef(dir, fm.skill.path), ...(fm.skill.title !== undefined ? { title: fm.skill.title } : {}), ...(fm.skill.description !== undefined ? { description: fm.skill.description } : {}) } }\n : {}),\n ...(fm.artifacts !== undefined ? { artifacts: fm.artifacts } : {}),\n ...(fm.dev !== undefined ? { dev: fm.dev } : {}),\n ...(fm.data !== undefined ? { data: fm.data } : {}),\n ...(fm.externalReadRoots !== undefined ? { externalReadRoots: fm.externalReadRoots } : {}),\n ...(fm.boundaries !== undefined ? { boundaries: fm.boundaries } : {}),\n ...(fm.category !== undefined ? { category: fm.category } : {}),\n })\n}\n","/**\n * `.agentapp` pack / unpack core (AIP-53 §\"The `.agentapp` package format\").\n *\n * PACK walks the entire app dir (including `.agentproto/`, but skipping\n * any `node_modules/` or `.git/` at any depth — a `ui/` source tree\n * ships both and neither belongs in the shipped app), writes a\n * `manifest.json` at the bundle root, and tars the app folder's\n * CONTENTS (not the folder itself) with system `tar`, so extraction\n * yields `manifest.json` + `.agentproto/` + loose files at the top\n * level and relative paths survive round-tripping.\n *\n * UNPACK extracts to a fresh temp dir, reads `manifest.json`, validates\n * `format === \"agentapp/v1\"`, recomputes the aggregate SHA over the\n * listed files and compares it to `manifest.sha256`, then moves the\n * restored contents (WITHOUT `manifest.json` — it is a bundle\n * artifact, not part of the app) into the destination dir.\n *\n * The SHA is over file contents ONLY (excluding manifest.json), fed in the\n * manifest `files` order (pack already sorts them), accumulated into one\n * hasher so bundling-scale trees don't load into memory.\n *\n * Both entries throw {@link AgentAppPackError}; `code` lets a caller (the\n * CLI, the daemon's remote install) map failures without parsing messages.\n */\n\nimport { cp, mkdir, mkdtemp, readFile, readdir, rm, stat, writeFile } from \"node:fs/promises\"\nimport { createHash } from \"node:crypto\"\nimport { basename, dirname, isAbsolute, join, resolve } from \"node:path\"\nimport { tmpdir } from \"node:os\"\nimport { spawn } from \"node:child_process\"\n\nimport matter from \"gray-matter\"\n\nexport const AGENTAPP_FORMAT = \"agentapp/v1\" as const\nconst DEFAULT_VERSION = \"0.1.0\"\n\n/** Directory names skipped at any depth while walking/copying an app dir. */\nconst SKIP_DIR_NAMES = new Set([\"node_modules\", \".git\"])\n\n/** The manifest.json written at the bundle root (and validated on unpack). */\nexport interface AgentAppManifest {\n format: typeof AGENTAPP_FORMAT\n id: string\n name?: string\n version: string\n description?: string\n agents: string[]\n workflows: string[]\n ui?: string[]\n files: string[]\n fileCount: number\n totalSize: number\n sha256: string\n createdAt: string\n agentprotoVersion: string\n}\n\n/** A file discovered under the app dir, with its size for the manifest. */\nexport interface BundleFile {\n path: string\n size: number\n}\n\nexport type AgentAppPackErrorCode =\n | \"not-an-app\"\n | \"bundle-not-found\"\n | \"tar-failed\"\n | \"missing-manifest\"\n | \"malformed-manifest\"\n | \"unsupported-format\"\n | \"unsafe-path\"\n | \"digest-mismatch\"\n\nexport class AgentAppPackError extends Error {\n readonly code: AgentAppPackErrorCode\n constructor(code: AgentAppPackErrorCode, message: string) {\n super(message)\n this.name = \"AgentAppPackError\"\n this.code = code\n }\n}\n\n/** `.agentproto/APP.md` frontmatter, digested into bundle metadata. */\ninterface AppMeta {\n id: string\n name?: string\n version: string\n description?: string\n agents: string[]\n workflows: string[]\n ui?: string[]\n}\n\nasync function pathExists(p: string): Promise<boolean> {\n try {\n await stat(p)\n return true\n } catch {\n return false\n }\n}\n\n/** Derive a filesystem-safe id from a possibly scoped/odd app id. */\nexport function safeId(id: unknown): string {\n return String(id || \"app\").replace(/^@/, \"\").replace(/[^A-Za-z0-9._-]+/g, \"-\")\n}\n\n/** Narrow an unknown parsed JSON value to the manifest shape. */\nexport function isManifest(value: unknown): value is AgentAppManifest {\n if (typeof value !== \"object\" || value === null) return false\n const m = value as Record<string, unknown>\n return (\n typeof m.format === \"string\" &&\n typeof m.id === \"string\" &&\n typeof m.version === \"string\" &&\n Array.isArray(m.agents) &&\n Array.isArray(m.workflows) &&\n Array.isArray(m.files) &&\n typeof m.fileCount === \"number\" &&\n typeof m.totalSize === \"number\" &&\n typeof m.sha256 === \"string\"\n )\n}\n\n/**\n * Recursively collect every regular file under root as relative paths,\n * skipping any `node_modules/` or `.git/` directory at any depth — a `ui/`\n * source tree ships both, and bundling either would balloon the .agentapp\n * for no benefit (they're never part of the shipped app).\n */\nexport async function collectFiles(root: string): Promise<BundleFile[]> {\n const files: BundleFile[] = []\n async function walk(relDir: string): Promise<void> {\n const absDir = join(root, relDir)\n for (const entry of await readdir(absDir, { withFileTypes: true })) {\n if (entry.isDirectory() && SKIP_DIR_NAMES.has(entry.name)) continue\n const rel = relDir ? join(relDir, entry.name) : entry.name\n const abs = join(absDir, entry.name)\n if (entry.isDirectory()) {\n await walk(rel)\n } else if (entry.isFile()) {\n const st = await stat(abs)\n files.push({ path: rel, size: st.size })\n }\n }\n }\n await walk(\"\")\n return files\n}\n\n/** Aggregate sha256 over the concatenated bytes of the given files. */\nexport async function aggregateSha256(root: string, files: readonly string[]): Promise<string> {\n const hash = createHash(\"sha256\")\n for (const file of files) {\n hash.update(await readFile(join(root, file)))\n }\n return hash.digest(\"hex\")\n}\n\n/**\n * Run system `tar` with the given args, resolving the exit code (0 = ok).\n * Uses `spawn` + an exit handler so the awaited promise actually tracks\n * process completion cross-platform (BSD/macOS and GNU tar).\n */\nfunction runTar(args: string[], opts?: { cwd?: string }): Promise<number> {\n return new Promise((resolvePromise, reject) => {\n const child = spawn(\"tar\", args, { stdio: \"ignore\", cwd: opts?.cwd })\n child.once(\"error\", reject)\n child.once(\"exit\", (code) => resolvePromise(code ?? 0))\n })\n}\n\n/** Pull ids from an `[{id, path}]` (or bare-string) array. */\nfunction extractIds(value: unknown): string[] {\n if (!Array.isArray(value)) return []\n const out: string[] = []\n for (const entry of value) {\n if (typeof entry === \"string\") {\n if (entry) out.push(entry)\n } else if (entry && typeof entry === \"object\") {\n const id = (entry as { id?: unknown }).id\n if (typeof id === \"string\" && id) out.push(id)\n }\n }\n return out\n}\n\n/** Basenames for a path/`{path}`/array-of-either frontmatter field. */\nfunction extractPaths(front: Record<string, unknown>, key: string): string[] | undefined {\n const value = front[key]\n if (value === undefined || value === null) return undefined\n const items = Array.isArray(value) ? value : [value]\n const out: string[] = []\n for (const item of items) {\n if (typeof item === \"string\") {\n if (item) out.push(basename(item))\n } else if (item && typeof item === \"object\") {\n const p = (item as { path?: unknown }).path\n if (typeof p === \"string\" && p) out.push(basename(p))\n }\n }\n return out.length > 0 ? out : undefined\n}\n\n/** Extract bundle metadata from APP.md frontmatter. */\nfunction extractMeta(front: Record<string, unknown>): AppMeta {\n const id =\n typeof front.id === \"string\" && front.id.length > 0\n ? front.id\n : typeof front.slug === \"string\" && front.slug.length > 0\n ? front.slug\n : \"app\"\n const version =\n typeof front.version === \"string\" && front.version.length > 0\n ? front.version\n : DEFAULT_VERSION\n const name = typeof front.name === \"string\" ? front.name : undefined\n const description = typeof front.description === \"string\" ? front.description : undefined\n const ui = extractPaths(front, \"ui\")\n\n return {\n id,\n ...(name !== undefined ? { name } : {}),\n version,\n ...(description !== undefined ? { description } : {}),\n agents: extractIds(front.agents),\n workflows: extractIds(front.workflows),\n ...(ui !== undefined ? { ui } : {}),\n }\n}\n\n/**\n * Package `appDir` (must hold `.agentproto/APP.md`) into a `.agentapp`.\n * Without `out`, the file is `<safeId>-<version>.agentapp` in the cwd.\n */\nexport async function packApp(input: {\n appDir: string\n out?: string\n}): Promise<{ file: string; manifest: AgentAppManifest }> {\n const appDirAbs = resolve(input.appDir)\n\n const appMdPath = join(appDirAbs, \".agentproto\", \"APP.md\")\n if (!(await pathExists(appMdPath))) {\n throw new AgentAppPackError(\n \"not-an-app\",\n `${appDirAbs} is not an agentproto app (missing ${appMdPath}).`,\n )\n }\n\n const raw = await readFile(appMdPath, \"utf8\")\n const front = matter(raw).data as Record<string, unknown>\n const meta = extractMeta(front)\n\n const outAbs =\n input.out !== undefined\n ? resolve(input.out)\n : resolve(process.cwd(), `${safeId(meta.id)}-${meta.version}.agentapp`)\n await mkdir(dirname(outAbs), { recursive: true })\n\n const files = (await collectFiles(appDirAbs))\n .filter((f) => f.path !== \"manifest.json\")\n .filter((f) => join(appDirAbs, f.path) !== outAbs)\n .sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0))\n const fileCount = files.length\n const totalSize = files.reduce((sum, f) => sum + f.size, 0)\n\n const sha256 = await aggregateSha256(\n appDirAbs,\n files.map((f) => f.path),\n )\n\n const manifest: AgentAppManifest = {\n format: AGENTAPP_FORMAT,\n id: meta.id,\n ...(meta.name !== undefined ? { name: meta.name } : {}),\n version: meta.version,\n ...(meta.description !== undefined ? { description: meta.description } : {}),\n agents: meta.agents,\n workflows: meta.workflows,\n ...(meta.ui !== undefined ? { ui: meta.ui } : {}),\n files: files.map((f) => f.path),\n fileCount,\n totalSize,\n sha256,\n createdAt: new Date().toISOString(),\n agentprotoVersion: \">=0.1.0\",\n }\n\n // Stage: copy contents into a temp dir, write manifest.json, tar it. The\n // filter also enforces the node_modules/.git exclusion on the actual bundle\n // contents (collectFiles above only shaped the manifest's `files` list) —\n // cp() skips a filtered-out directory's contents entirely.\n const staging = await mkdtemp(join(tmpdir(), \"agentapp-\"))\n try {\n await cp(appDirAbs, staging, {\n recursive: true,\n filter: (source) => !SKIP_DIR_NAMES.has(basename(source)),\n })\n await writeFile(join(staging, \"manifest.json\"), JSON.stringify(manifest, null, 2) + \"\\n\", \"utf8\")\n // Offline-deterministic archive: pass the entry list explicitly (sorted) so\n // the archive order is reproducible without GNU-only `--sort=name`, which\n // BSD/macOS tar rejects. Dotfiles (`.agentproto`) are included by readdir.\n const entries = (await readdir(staging)).sort()\n const packCode = await runTar([\"-czf\", outAbs, ...entries], { cwd: staging })\n if (packCode !== 0) {\n throw new AgentAppPackError(\"tar-failed\", `tar failed with exit code ${packCode}`)\n }\n } finally {\n await rm(staging, { recursive: true, force: true })\n }\n\n return { file: outAbs, manifest }\n}\n\n/** A manifest `files` entry that could read or write outside the bundle root. */\nfunction isUnsafeBundlePath(p: string): boolean {\n if (p === \"\" || isAbsolute(p)) return true\n return p.split(/[\\\\/]/).includes(\"..\")\n}\n\n/**\n * Extract a `.agentapp`, verify format + aggregate SHA-256, and restore the\n * app folder (without `manifest.json`) into `dest`. Without `dest`, restores\n * into `<safeId>-<version>` in the cwd. A failed verification leaves `dest`\n * untouched (nothing is created).\n */\nexport async function unpackApp(input: {\n file: string\n dest?: string\n}): Promise<{ dir: string; manifest: AgentAppManifest }> {\n const bundleAbs = resolve(input.file)\n if (!(await pathExists(bundleAbs))) {\n throw new AgentAppPackError(\"bundle-not-found\", `bundle not found: ${bundleAbs}`)\n }\n\n const temp = await mkdtemp(join(tmpdir(), \"agentapp-\"))\n try {\n const unpackCode = await runTar([\"-xzf\", bundleAbs, \"-C\", temp])\n if (unpackCode !== 0) {\n throw new AgentAppPackError(\"tar-failed\", `tar failed with exit code ${unpackCode}`)\n }\n\n const manifestPath = join(temp, \"manifest.json\")\n if (!(await pathExists(manifestPath))) {\n throw new AgentAppPackError(\n \"missing-manifest\",\n `${bundleAbs} is not a valid .agentapp (missing manifest.json).`,\n )\n }\n let parsed: unknown\n try {\n parsed = JSON.parse(await readFile(manifestPath, \"utf8\"))\n } catch {\n throw new AgentAppPackError(\"malformed-manifest\", `${bundleAbs} has a malformed manifest.json.`)\n }\n if (!isManifest(parsed)) {\n throw new AgentAppPackError(\"malformed-manifest\", `${bundleAbs} has a malformed manifest.json.`)\n }\n const manifest = parsed\n\n if (manifest.format !== AGENTAPP_FORMAT) {\n throw new AgentAppPackError(\n \"unsupported-format\",\n `unsupported bundle format '${manifest.format}' (expected ${AGENTAPP_FORMAT}).`,\n )\n }\n\n const unsafe = manifest.files.find((f) => typeof f !== \"string\" || isUnsafeBundlePath(f))\n if (unsafe !== undefined) {\n throw new AgentAppPackError(\n \"unsafe-path\",\n `manifest.json lists a path outside the bundle root: ${JSON.stringify(unsafe)}.`,\n )\n }\n\n const actual = await aggregateSha256(temp, manifest.files)\n if (actual !== manifest.sha256) {\n throw new AgentAppPackError(\n \"digest-mismatch\",\n `SHA-256 mismatch (expected ${manifest.sha256}, got ${actual}). Bundle is corrupted.`,\n )\n }\n\n const outDir =\n input.dest !== undefined\n ? resolve(input.dest)\n : resolve(process.cwd(), `${safeId(manifest.id)}-${manifest.version}`)\n // Drop the bundle artifact before moving the app contents over.\n await rm(manifestPath, { force: true })\n await mkdir(outDir, { recursive: true })\n await cp(temp, outDir, { recursive: true })\n\n return { dir: outDir, manifest }\n } finally {\n await rm(temp, { recursive: true, force: true })\n }\n}\n"]}
|
package/dist/load-app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-app.d.ts","sourceRoot":"","sources":["../src/load-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAQH,OAAO,KAAK,EAOV,SAAS,EACT,gBAAgB,
|
|
1
|
+
{"version":3,"file":"load-app.d.ts","sourceRoot":"","sources":["../src/load-app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAQH,OAAO,KAAK,EAOV,SAAS,EACT,gBAAgB,EAEjB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAI1C,OAAO,EAAE,YAAY,EAAE,CAAA;AAoEvB;;;;;;;;;;;;;GAaG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAqBlF;AAED,0EAA0E;AAC1E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;CAClC;AA+BD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAsB9E;AAgHD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAgHnE"}
|
package/dist/types.d.ts
CHANGED
|
@@ -114,6 +114,57 @@ export interface AppUiDefinition {
|
|
|
114
114
|
/** How to (re)build this UI's bundle when it's missing or stale. Absent
|
|
115
115
|
* means today's behavior: the bundle must already exist on disk. */
|
|
116
116
|
readonly build?: AppUiBuildConfig;
|
|
117
|
+
/**
|
|
118
|
+
* Namespaced vendor metadata for this UI. Only `openai` exists today; an
|
|
119
|
+
* app that omits the whole block emits, installs, serves, and renders
|
|
120
|
+
* exactly as before (portable MCP Apps host).
|
|
121
|
+
*/
|
|
122
|
+
readonly extensions?: {
|
|
123
|
+
readonly openai?: OpenAIAppUiExtension;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/** One icon for the generated app UI tool (OpenAI extension surface). */
|
|
127
|
+
export interface OpenAIIcon {
|
|
128
|
+
/** Non-empty HTTPS URL, or `data:image/…;base64,…` (inline SVG data allowed). */
|
|
129
|
+
readonly src: string;
|
|
130
|
+
readonly mimeType?: string;
|
|
131
|
+
readonly sizes?: readonly string[];
|
|
132
|
+
readonly theme?: "light" | "dark";
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* How an OpenAI-class host may surface the app's single generated UI tool:
|
|
136
|
+
* a global sidebar entry, a per-thread panel, or a file-extension viewer.
|
|
137
|
+
* Entrypoints are metadata — never separate panels — so all of them render
|
|
138
|
+
* the same `ui://` resource and share the app's tools allowlist.
|
|
139
|
+
*/
|
|
140
|
+
export type OpenAIEntrypoint = {
|
|
141
|
+
readonly type: "global";
|
|
142
|
+
} | {
|
|
143
|
+
readonly type: "thread";
|
|
144
|
+
} | {
|
|
145
|
+
readonly type: "file";
|
|
146
|
+
/** 1..32 unique, lowercase dot-prefixed suffixes; e.g. `.md`, `.stl`. */
|
|
147
|
+
readonly extensions: readonly `.${string}`[];
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* The `ui.extensions.openai` block. Every field is optional; validation
|
|
151
|
+
* (shared by `defineApp` and `loadAppHandle` via `defineApp`) rejects cut /
|
|
152
|
+
* unknown keys with the exact field path instead of silently advertising
|
|
153
|
+
* something the runtime does not implement.
|
|
154
|
+
*/
|
|
155
|
+
export interface OpenAIAppUiExtension {
|
|
156
|
+
/** 1..3 entries; no duplicate type; file extensions unique after lowercase. */
|
|
157
|
+
readonly entrypoints?: readonly OpenAIEntrypoint[];
|
|
158
|
+
/** Applied to the generated app UI tool. At least one when present. */
|
|
159
|
+
readonly icons?: readonly OpenAIIcon[];
|
|
160
|
+
readonly display?: {
|
|
161
|
+
readonly availableModes?: readonly ("inline" | "fullscreen")[];
|
|
162
|
+
readonly preferredMode?: "inline" | "fullscreen";
|
|
163
|
+
};
|
|
164
|
+
readonly mentions?: {
|
|
165
|
+
/** Existing daemon tool id; MUST occur in this same UI's `tools`. */
|
|
166
|
+
readonly searchTool: string;
|
|
167
|
+
};
|
|
117
168
|
}
|
|
118
169
|
/**
|
|
119
170
|
* A persistent HTML dashboard (Cowork artifact) the app ships alongside its
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentproto/app-kit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "@agentproto/app-kit — declare an agent (with its system prompt) and its workflows in one TypeScript module and import them anywhere. A thin umbrella over AIP-42 defineAgent + AIP-15 defineWorkflow: defineApp cross-links the two (every workflow agent-step must target the app's agent, every agent workflow ref must resolve), toMastraAgent turns the AGENT.md body into a real Mastra `instructions` field, and emit writes the .agents/<id>/AGENT.md + WORKFLOW.md(+entry) pair that runs through the agentproto-run lane unchanged.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentproto",
|