@ai-matrx/alchemy 0.8.13 → 0.8.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/CHANGELOG.md +32 -1
  2. package/dist/actions.cjs +1 -373
  3. package/dist/actions.cjs.map +1 -1
  4. package/dist/actions.js +1 -350
  5. package/dist/actions.js.map +1 -1
  6. package/dist/checks.cjs +9 -314
  7. package/dist/checks.cjs.map +1 -1
  8. package/dist/checks.js +8 -290
  9. package/dist/checks.js.map +1 -1
  10. package/dist/core.cjs +9 -1728
  11. package/dist/core.cjs.map +1 -1
  12. package/dist/core.d.cts +2 -0
  13. package/dist/core.d.ts +2 -0
  14. package/dist/core.js +9 -1702
  15. package/dist/core.js.map +1 -1
  16. package/dist/declare-host.cjs +1 -18
  17. package/dist/declare-host.cjs.map +1 -1
  18. package/dist/declare.cjs +1 -638
  19. package/dist/declare.cjs.map +1 -1
  20. package/dist/declare.js +1 -615
  21. package/dist/declare.js.map +1 -1
  22. package/dist/index.cjs +9 -1728
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +2 -0
  25. package/dist/index.d.ts +2 -0
  26. package/dist/index.js +9 -1702
  27. package/dist/index.js.map +1 -1
  28. package/dist/menu.cjs +1 -529
  29. package/dist/menu.cjs.map +1 -1
  30. package/dist/menu.js +1 -506
  31. package/dist/menu.js.map +1 -1
  32. package/dist/operate-document.cjs +4 -162
  33. package/dist/operate-document.cjs.map +1 -1
  34. package/dist/operate-document.js +4 -129
  35. package/dist/operate-document.js.map +1 -1
  36. package/dist/operate-rich-html.cjs +1 -128
  37. package/dist/operate-rich-html.cjs.map +1 -1
  38. package/dist/operate-rich-html.js +1 -95
  39. package/dist/operate-rich-html.js.map +1 -1
  40. package/dist/operate-server.cjs +1 -156
  41. package/dist/operate-server.cjs.map +1 -1
  42. package/dist/operate-server.js +1 -133
  43. package/dist/operate-server.js.map +1 -1
  44. package/dist/operate-xlsx.cjs +143 -34230
  45. package/dist/operate-xlsx.cjs.map +1 -1
  46. package/dist/operate-xlsx.js +143 -34214
  47. package/dist/operate-xlsx.js.map +1 -1
  48. package/dist/operate.cjs +9 -1726
  49. package/dist/operate.cjs.map +1 -1
  50. package/dist/operate.d.cts +2 -0
  51. package/dist/operate.d.ts +2 -0
  52. package/dist/operate.js +9 -1702
  53. package/dist/operate.js.map +1 -1
  54. package/dist/ports.cjs +1 -18
  55. package/dist/ports.cjs.map +1 -1
  56. package/dist/react-bar.cjs +2 -795
  57. package/dist/react-bar.cjs.map +1 -1
  58. package/dist/react-bar.js +2 -774
  59. package/dist/react-bar.js.map +1 -1
  60. package/dist/react-host.cjs +1 -299
  61. package/dist/react-host.cjs.map +1 -1
  62. package/dist/react-host.js +1 -267
  63. package/dist/react-host.js.map +1 -1
  64. package/dist/react-menu.cjs +2 -848
  65. package/dist/react-menu.cjs.map +1 -1
  66. package/dist/react-menu.js +2 -835
  67. package/dist/react-menu.js.map +1 -1
  68. package/dist/react-overflow.cjs +2 -695
  69. package/dist/react-overflow.cjs.map +1 -1
  70. package/dist/react-overflow.js +2 -674
  71. package/dist/react-overflow.js.map +1 -1
  72. package/dist/react-palette.cjs +2 -586
  73. package/dist/react-palette.cjs.map +1 -1
  74. package/dist/react-palette.js +2 -554
  75. package/dist/react-palette.js.map +1 -1
  76. package/dist/react-selection.cjs +2 -726
  77. package/dist/react-selection.cjs.map +1 -1
  78. package/dist/react-selection.js +2 -705
  79. package/dist/react-selection.js.map +1 -1
  80. package/dist/react-sheet.cjs +2 -734
  81. package/dist/react-sheet.cjs.map +1 -1
  82. package/dist/react-sheet.js +2 -713
  83. package/dist/react-sheet.js.map +1 -1
  84. package/dist/react.cjs +1 -29
  85. package/dist/react.cjs.map +1 -1
  86. package/dist/react.js +1 -8
  87. package/dist/react.js.map +1 -1
  88. package/package.json +1 -1
package/dist/ports.cjs CHANGED
@@ -1,19 +1,2 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
-
16
- // src/ports.ts
17
- var ports_exports = {};
18
- module.exports = __toCommonJS(ports_exports);
1
+ "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var ports_exports={};module.exports=__toCommonJS(ports_exports);
19
2
  //# sourceMappingURL=ports.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ports.ts"],"sourcesContent":["/**\n * `@ai-matrx/alchemy/ports` — the host ports (Matrx Alchemy CONTRACT §2.2).\n *\n * The app binds these ONCE, at its boundary (where the Alchemy host is\n * mounted). The package never imports the host.\n *\n * ── Ports arrive with the wave that needs them (chair ruling N8) ────────────\n *\n * This entry declares only the ports the current waves use:\n *\n * ALC-13 `kinds` (content-ir's validator, injected), `diagnostics` (required)\n * ALC-14 `identity`, `persistence`\n * ALC-15 `store`, `notify`, `overlay`, `icons`, `knobs`, `i18n`, `auth`, `dialogs`\n *\n * ALC-16 `transport`, `assets`, `server`\n *\n * ALC-17 adds approvals/bodies/receipts.\n *\n * ── Absent-port semantics ───────────────────────────────────────────────────\n *\n * Every port except `diagnostics` is OPTIONAL. A port the host does not bind\n * means that capability is ABSENT: the actions, formats or writes that need\n * it are not offered at all. A missing port is never stubbed, never faked\n * with a default that pretends to work, and never shown as a dead control.\n *\n * kinds absent → kind validation is absent (no value can be checked,\n * so a kind-bearing write is not offered)\n * diagnostics REQUIRED → nothing fails silently; contract breaks land here\n * identity absent → organization-scoped declarations are absent\n * persistence absent → per-person settings are absent (organization and\n * platform defaults apply)\n * store absent → actions that read named host state or run named\n * host commands are absent\n * notify absent → outcomes are not announced (diagnostics still captures)\n * overlay absent → actions that open an overlay or navigate are absent\n * icons absent → rows render label-only (a key is never shown as text)\n * knobs absent → the platform default layout/density applies\n * i18n absent → labels as written\n * auth absent → a signed-out person does not see requiresAuth actions\n * (sign-in-then-resume is the capability that is missing)\n * dialogs absent → actions that need a host dialog are absent\n *\n * Types only: this entry has no runtime code.\n */\n\n/** JSON as it crosses a port. */\nexport type Json =\n | null\n | boolean\n | number\n | string\n | Json[]\n | { [key: string]: Json };\n\n/**\n * content-ir's kind validator, injected so Alchemy validates without\n * importing the app or the kind catalog. The host builds it from\n * `@ai-matrx/content-ir`'s `createKindValidator` over its own\n * `SchemaSourcePort` (which content-ir defines and exports; Alchemy never\n * declares it).\n *\n * `unverifiable: true` marks a verdict where the kind could not be checked\n * (not registered, no schema, uncompilable schema, catalog unreachable) — a\n * skip, which is never a pass.\n */\nexport interface KindValidatorPort {\n validate(\n kindKey: string,\n value: unknown,\n signal: AbortSignal,\n ): Promise<\n | { ok: true }\n | { ok: false; sentence: string; remedy: string; unverifiable?: true }\n >;\n}\n\nimport type { ClickTarget } from \"./actions/click-target\";\n\n/** Where contract breaks are captured. Required: nothing fails silently. */\nexport interface DiagnosticsPort {\n capture(\n error: unknown,\n context: {\n area: \"declare\" | \"operate\" | \"write\" | \"actions\" | \"menu\";\n detail: Json;\n },\n ): void;\n}\n\n/** Who is using the app right now, and in which organization. */\nexport interface IdentityPort {\n /** `null` while the host has no resolved identity yet. */\n current(): {\n userId: string;\n organizationId: string | null;\n isAuthenticated: boolean;\n isAdmin: boolean;\n } | null;\n /** Called whenever `current()` may answer differently; returns unsubscribe. */\n onChange(listener: () => void): () => void;\n}\n\n/** Per-person settings (layout, density, transfer preferences), layered by the host's settings system. */\nexport interface PersistencePort {\n readSetting<T extends Json>(key: string): Promise<T | null>;\n writeSetting(key: string, value: Json): Promise<void>;\n}\n\n/** Neutral state access: named reads and named commands. No Redux type or dispatch crosses this line. */\nexport interface StorePort {\n /** A named, typed read the host registered (\"activeConversationId\", \"organizationName\"). */\n read<T extends Json>(key: string): T | null;\n /** A named command the host registered (\"tasks.setPendingSource\"); resolves with its result. */\n command(name: string, input: Json): Promise<Json | void>;\n subscribe(key: string, listener: () => void): () => void;\n}\n\nexport interface NotifyPort {\n success(sentence: string): void;\n info(sentence: string): void;\n /** Every failure names its remedy. */\n error(sentence: string, remedy: string): void;\n}\n\n/** Overlays are dispatched through the host; the menu never renders a modal. */\nexport interface OverlayHostPort {\n open(overlayId: string, data: Json, instanceId?: string): void;\n close(overlayId: string, instanceId?: string): void;\n navigate(href: string): void;\n}\n\n/** Icon key → the host's icon component. The model only ever holds keys. */\nexport interface IconResolverPort {\n resolve(key: string): unknown /* host component */ | null;\n}\n\nexport type ContextArrangementKnob = \"classic\" | \"tiered\" | \"command\";\nexport type DensityKnob = \"comfortable\" | \"compact\";\n\n/** ORGANIZATION defaults only; every method takes the organization. */\nexport interface MenuKnobsPort {\n /** Replaces the constant PLACEMENT_LABEL_OVERRIDE. */\n placementLabel(placement: string, organizationId: string | null): string | null;\n /** Replaces the constant DEFAULT_PLACEMENT_MODE. */\n placementMode(placement: string, organizationId: string | null): \"show\" | \"hide\";\n /** The organization's default layout and density (platform default when null: command / comfortable). */\n layout(organizationId: string | null): { context: ContextArrangementKnob; density: DensityKnob } | null;\n}\n\n/** Label translation. Absent = labels as written. */\nexport interface I18nPort {\n t(key: string, fallback: string): string;\n}\n\n/** Sign in, then resume the action the person picked. */\nexport interface AuthResumePort {\n isSignedIn(): boolean;\n /** Stash {actionId, target fingerprint} and open sign-in; after sign-in the next matching menu host resumes it. */\n signInThenResume(pending: { actionId: string; contentFingerprint: string }): void;\n takePending(contentFingerprint: string): { actionId: string } | null;\n}\n\n/** Per-instance host dialogs (today's RichDocumentActionContextCallbacks). */\nexport interface HostDialogsPort {\n requestDelete?(target: ClickTarget): void;\n requestConvert?(target: ClickTarget): void;\n requestEditHistory?(target: ClickTarget): void;\n requestFullPrint?(target: ClickTarget): void;\n requestSaveTable?(table: { headers: string[]; rows: string[][] }): void;\n requestFlashcard?(answer: string): void;\n}\n\n/** The ports a host binds. Optional = absent capability when unbound (see above). */\nexport interface AlchemyHostPorts {\n // ALC-13\n kinds?: KindValidatorPort;\n /** REQUIRED from ALC-13 (the only non-optional port): contract breaks are captured here. */\n diagnostics: DiagnosticsPort;\n // ALC-14\n identity?: IdentityPort;\n persistence?: PersistencePort;\n // ALC-15\n store?: StorePort;\n notify?: NotifyPort;\n overlay?: OverlayHostPort;\n icons?: IconResolverPort;\n /** Organization defaults for menu knobs; a person's own choice is layered over them via persistence (N9). */\n knobs?: MenuKnobsPort;\n i18n?: I18nPort;\n auth?: AuthResumePort;\n dialogs?: HostDialogsPort;\n // ALC-16\n /** Clipboard and download for this runtime (the browser default ships in /operate). */\n transport?: TransportPort;\n /** Private or signed images → share-safe URLs before HTML is sealed. Absent = images keep their URL. */\n assets?: AssetResolverPort;\n /** Present when the host can reach aidream server operations; absent = server formats are not offered. */\n server?: ServerPort;\n}\n\n// ── ALC-16 ports (Operate) ──────────────────────────────────────────────────\n\n/** A transferable artifact as the transport sees it (structurally `@ai-matrx/alchemy/operate`'s Artifact). */\nexport interface TransportArtifact {\n format: string;\n plainText: string;\n html?: string;\n file?: { filename: string; mime: string; bytes: Uint8Array };\n}\nexport type TransportOutcome =\n | { status: \"success\"; delivered: \"clipboard\" | \"download-started\"; mimeTypes: string[] }\n | { status: \"degraded\"; delivered: \"plain-text\"; reason: string }\n | { status: \"cancelled\" }\n | { status: \"error\"; code: string; message: string; retryable: boolean };\n/** Clipboard and download for a non-browser runtime (MV3 service worker, Tauri — CONTRACT R8). */\nexport interface TransportPort {\n copy(artifact: TransportArtifact, signal: AbortSignal): Promise<TransportOutcome>;\n download(artifact: TransportArtifact, signal: AbortSignal): Promise<TransportOutcome>;\n}\nexport interface AssetResolverPort {\n resolve(url: string, signal: AbortSignal): Promise<{ url: string } | null>;\n}\nexport type ServerResult =\n | { status: \"bytes\"; filename: string; mime: string; bytes: Uint8Array; notices: readonly { code: string; sentence: string; remedy: string }[] }\n | { status: \"receipt\"; receipt: { status: string; sentence: string; remedy?: string } };\nexport interface ServerPort {\n call(operationId: string, input: Json, signal: AbortSignal): Promise<ServerResult>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../src/ports.ts"],"sourcesContent":["/**\n * `@ai-matrx/alchemy/ports` — the host ports (Matrx Alchemy CONTRACT §2.2).\n *\n * The app binds these ONCE, at its boundary (where the Alchemy host is\n * mounted). The package never imports the host.\n *\n * ── Ports arrive with the wave that needs them (chair ruling N8) ────────────\n *\n * This entry declares only the ports the current waves use:\n *\n * ALC-13 `kinds` (content-ir's validator, injected), `diagnostics` (required)\n * ALC-14 `identity`, `persistence`\n * ALC-15 `store`, `notify`, `overlay`, `icons`, `knobs`, `i18n`, `auth`, `dialogs`\n *\n * ALC-16 `transport`, `assets`, `server`\n *\n * ALC-17 adds approvals/bodies/receipts.\n *\n * ── Absent-port semantics ───────────────────────────────────────────────────\n *\n * Every port except `diagnostics` is OPTIONAL. A port the host does not bind\n * means that capability is ABSENT: the actions, formats or writes that need\n * it are not offered at all. A missing port is never stubbed, never faked\n * with a default that pretends to work, and never shown as a dead control.\n *\n * kinds absent → kind validation is absent (no value can be checked,\n * so a kind-bearing write is not offered)\n * diagnostics REQUIRED → nothing fails silently; contract breaks land here\n * identity absent → organization-scoped declarations are absent\n * persistence absent → per-person settings are absent (organization and\n * platform defaults apply)\n * store absent → actions that read named host state or run named\n * host commands are absent\n * notify absent → outcomes are not announced (diagnostics still captures)\n * overlay absent → actions that open an overlay or navigate are absent\n * icons absent → rows render label-only (a key is never shown as text)\n * knobs absent → the platform default layout/density applies\n * i18n absent → labels as written\n * auth absent → a signed-out person does not see requiresAuth actions\n * (sign-in-then-resume is the capability that is missing)\n * dialogs absent → actions that need a host dialog are absent\n *\n * Types only: this entry has no runtime code.\n */\n\n/** JSON as it crosses a port. */\nexport type Json =\n | null\n | boolean\n | number\n | string\n | Json[]\n | { [key: string]: Json };\n\n/**\n * content-ir's kind validator, injected so Alchemy validates without\n * importing the app or the kind catalog. The host builds it from\n * `@ai-matrx/content-ir`'s `createKindValidator` over its own\n * `SchemaSourcePort` (which content-ir defines and exports; Alchemy never\n * declares it).\n *\n * `unverifiable: true` marks a verdict where the kind could not be checked\n * (not registered, no schema, uncompilable schema, catalog unreachable) — a\n * skip, which is never a pass.\n */\nexport interface KindValidatorPort {\n validate(\n kindKey: string,\n value: unknown,\n signal: AbortSignal,\n ): Promise<\n | { ok: true }\n | { ok: false; sentence: string; remedy: string; unverifiable?: true }\n >;\n}\n\nimport type { ClickTarget } from \"./actions/click-target\";\n\n/** Where contract breaks are captured. Required: nothing fails silently. */\nexport interface DiagnosticsPort {\n capture(\n error: unknown,\n context: {\n area: \"declare\" | \"operate\" | \"write\" | \"actions\" | \"menu\";\n detail: Json;\n },\n ): void;\n}\n\n/** Who is using the app right now, and in which organization. */\nexport interface IdentityPort {\n /** `null` while the host has no resolved identity yet. */\n current(): {\n userId: string;\n organizationId: string | null;\n isAuthenticated: boolean;\n isAdmin: boolean;\n } | null;\n /** Called whenever `current()` may answer differently; returns unsubscribe. */\n onChange(listener: () => void): () => void;\n}\n\n/** Per-person settings (layout, density, transfer preferences), layered by the host's settings system. */\nexport interface PersistencePort {\n readSetting<T extends Json>(key: string): Promise<T | null>;\n writeSetting(key: string, value: Json): Promise<void>;\n}\n\n/** Neutral state access: named reads and named commands. No Redux type or dispatch crosses this line. */\nexport interface StorePort {\n /** A named, typed read the host registered (\"activeConversationId\", \"organizationName\"). */\n read<T extends Json>(key: string): T | null;\n /** A named command the host registered (\"tasks.setPendingSource\"); resolves with its result. */\n command(name: string, input: Json): Promise<Json | void>;\n subscribe(key: string, listener: () => void): () => void;\n}\n\nexport interface NotifyPort {\n success(sentence: string): void;\n info(sentence: string): void;\n /** Every failure names its remedy. */\n error(sentence: string, remedy: string): void;\n}\n\n/** Overlays are dispatched through the host; the menu never renders a modal. */\nexport interface OverlayHostPort {\n open(overlayId: string, data: Json, instanceId?: string): void;\n close(overlayId: string, instanceId?: string): void;\n navigate(href: string): void;\n}\n\n/** Icon key → the host's icon component. The model only ever holds keys. */\nexport interface IconResolverPort {\n resolve(key: string): unknown /* host component */ | null;\n}\n\nexport type ContextArrangementKnob = \"classic\" | \"tiered\" | \"command\";\nexport type DensityKnob = \"comfortable\" | \"compact\";\n\n/** ORGANIZATION defaults only; every method takes the organization. */\nexport interface MenuKnobsPort {\n /** Replaces the constant PLACEMENT_LABEL_OVERRIDE. */\n placementLabel(placement: string, organizationId: string | null): string | null;\n /** Replaces the constant DEFAULT_PLACEMENT_MODE. */\n placementMode(placement: string, organizationId: string | null): \"show\" | \"hide\";\n /** The organization's default layout and density (platform default when null: command / comfortable). */\n layout(organizationId: string | null): { context: ContextArrangementKnob; density: DensityKnob } | null;\n}\n\n/** Label translation. Absent = labels as written. */\nexport interface I18nPort {\n t(key: string, fallback: string): string;\n}\n\n/** Sign in, then resume the action the person picked. */\nexport interface AuthResumePort {\n isSignedIn(): boolean;\n /** Stash {actionId, target fingerprint} and open sign-in; after sign-in the next matching menu host resumes it. */\n signInThenResume(pending: { actionId: string; contentFingerprint: string }): void;\n takePending(contentFingerprint: string): { actionId: string } | null;\n}\n\n/** Per-instance host dialogs (today's RichDocumentActionContextCallbacks). */\nexport interface HostDialogsPort {\n requestDelete?(target: ClickTarget): void;\n requestConvert?(target: ClickTarget): void;\n requestEditHistory?(target: ClickTarget): void;\n requestFullPrint?(target: ClickTarget): void;\n requestSaveTable?(table: { headers: string[]; rows: string[][] }): void;\n requestFlashcard?(answer: string): void;\n}\n\n/** The ports a host binds. Optional = absent capability when unbound (see above). */\nexport interface AlchemyHostPorts {\n // ALC-13\n kinds?: KindValidatorPort;\n /** REQUIRED from ALC-13 (the only non-optional port): contract breaks are captured here. */\n diagnostics: DiagnosticsPort;\n // ALC-14\n identity?: IdentityPort;\n persistence?: PersistencePort;\n // ALC-15\n store?: StorePort;\n notify?: NotifyPort;\n overlay?: OverlayHostPort;\n icons?: IconResolverPort;\n /** Organization defaults for menu knobs; a person's own choice is layered over them via persistence (N9). */\n knobs?: MenuKnobsPort;\n i18n?: I18nPort;\n auth?: AuthResumePort;\n dialogs?: HostDialogsPort;\n // ALC-16\n /** Clipboard and download for this runtime (the browser default ships in /operate). */\n transport?: TransportPort;\n /** Private or signed images → share-safe URLs before HTML is sealed. Absent = images keep their URL. */\n assets?: AssetResolverPort;\n /** Present when the host can reach aidream server operations; absent = server formats are not offered. */\n server?: ServerPort;\n}\n\n// ── ALC-16 ports (Operate) ──────────────────────────────────────────────────\n\n/** A transferable artifact as the transport sees it (structurally `@ai-matrx/alchemy/operate`'s Artifact). */\nexport interface TransportArtifact {\n format: string;\n plainText: string;\n html?: string;\n file?: { filename: string; mime: string; bytes: Uint8Array };\n}\nexport type TransportOutcome =\n | { status: \"success\"; delivered: \"clipboard\" | \"download-started\"; mimeTypes: string[] }\n | { status: \"degraded\"; delivered: \"plain-text\"; reason: string }\n | { status: \"cancelled\" }\n | { status: \"error\"; code: string; message: string; retryable: boolean };\n/** Clipboard and download for a non-browser runtime (MV3 service worker, Tauri — CONTRACT R8). */\nexport interface TransportPort {\n copy(artifact: TransportArtifact, signal: AbortSignal): Promise<TransportOutcome>;\n download(artifact: TransportArtifact, signal: AbortSignal): Promise<TransportOutcome>;\n}\nexport interface AssetResolverPort {\n resolve(url: string, signal: AbortSignal): Promise<{ url: string } | null>;\n}\nexport type ServerResult =\n | { status: \"bytes\"; filename: string; mime: string; bytes: Uint8Array; notices: readonly { code: string; sentence: string; remedy: string }[] }\n | { status: \"receipt\"; receipt: { status: string; sentence: string; remedy?: string } };\nexport interface ServerPort {\n call(operationId: string, input: Json, signal: AbortSignal): Promise<ServerResult>;\n}\n"],"mappings":"sjBAAA","names":[]}