@vibesdotdev/vessel 0.0.0-stage → 1.0.0-rc.3

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 (223) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +90 -2
  3. package/dist/apps/filesystem.vessel.plugin.d.ts +307 -0
  4. package/dist/apps/filesystem.vessel.plugin.d.ts.map +1 -0
  5. package/dist/apps/filesystem.vessel.plugin.js +134 -0
  6. package/dist/apps/filesystem.vessel.plugin.js.map +1 -0
  7. package/dist/apps/storage.vessel.plugin.d.ts +318 -0
  8. package/dist/apps/storage.vessel.plugin.d.ts.map +1 -0
  9. package/dist/apps/storage.vessel.plugin.js +132 -0
  10. package/dist/apps/storage.vessel.plugin.js.map +1 -0
  11. package/dist/apps/terminal.vessel.plugin.d.ts +306 -0
  12. package/dist/apps/terminal.vessel.plugin.d.ts.map +1 -0
  13. package/dist/apps/terminal.vessel.plugin.js +112 -0
  14. package/dist/apps/terminal.vessel.plugin.js.map +1 -0
  15. package/dist/boundary.d.ts +10 -0
  16. package/dist/boundary.d.ts.map +1 -0
  17. package/dist/boundary.js +43 -0
  18. package/dist/boundary.js.map +1 -0
  19. package/dist/client/helper.d.ts +4 -0
  20. package/dist/client/helper.d.ts.map +1 -0
  21. package/dist/client/helper.js +5 -0
  22. package/dist/client/helper.js.map +1 -0
  23. package/dist/client/index.d.ts +3 -0
  24. package/dist/client/index.d.ts.map +1 -0
  25. package/dist/client/index.js +3 -0
  26. package/dist/client/index.js.map +1 -0
  27. package/dist/client/vessel-client.d.ts +39 -0
  28. package/dist/client/vessel-client.d.ts.map +1 -0
  29. package/dist/client/vessel-client.js +101 -0
  30. package/dist/client/vessel-client.js.map +1 -0
  31. package/dist/docs/vessel.docs.descriptor.d.ts +4 -0
  32. package/dist/docs/vessel.docs.descriptor.d.ts.map +1 -0
  33. package/dist/docs/vessel.docs.descriptor.js +96 -0
  34. package/dist/docs/vessel.docs.descriptor.js.map +1 -0
  35. package/dist/index.d.ts +13 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +13 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/kinds.d.ts +24 -0
  40. package/dist/kinds.d.ts.map +1 -0
  41. package/dist/kinds.js +78 -0
  42. package/dist/kinds.js.map +1 -0
  43. package/dist/launch/cli/descriptor.d.ts +3 -0
  44. package/dist/launch/cli/descriptor.d.ts.map +1 -0
  45. package/dist/launch/cli/descriptor.js +24 -0
  46. package/dist/launch/cli/descriptor.js.map +1 -0
  47. package/dist/launch/cli/implementation.d.ts +7 -0
  48. package/dist/launch/cli/implementation.d.ts.map +1 -0
  49. package/dist/launch/cli/implementation.js +14 -0
  50. package/dist/launch/cli/implementation.js.map +1 -0
  51. package/dist/launch/cli/options.d.ts +10 -0
  52. package/dist/launch/cli/options.d.ts.map +1 -0
  53. package/dist/launch/cli/options.js +12 -0
  54. package/dist/launch/cli/options.js.map +1 -0
  55. package/dist/launch/cli/plugin.d.ts +4 -0
  56. package/dist/launch/cli/plugin.d.ts.map +1 -0
  57. package/dist/launch/cli/plugin.js +12 -0
  58. package/dist/launch/cli/plugin.js.map +1 -0
  59. package/dist/launch/cli/request.d.ts +23 -0
  60. package/dist/launch/cli/request.d.ts.map +1 -0
  61. package/dist/launch/cli/request.js +27 -0
  62. package/dist/launch/cli/request.js.map +1 -0
  63. package/dist/launch/ensure-host.d.ts +48 -0
  64. package/dist/launch/ensure-host.d.ts.map +1 -0
  65. package/dist/launch/ensure-host.js +54 -0
  66. package/dist/launch/ensure-host.js.map +1 -0
  67. package/dist/launch/index.d.ts +9 -0
  68. package/dist/launch/index.d.ts.map +1 -0
  69. package/dist/launch/index.js +52 -0
  70. package/dist/launch/index.js.map +1 -0
  71. package/dist/launch/plugin.d.ts +6 -0
  72. package/dist/launch/plugin.d.ts.map +1 -0
  73. package/dist/launch/plugin.js +20 -0
  74. package/dist/launch/plugin.js.map +1 -0
  75. package/dist/launch/schema.d.ts +66 -0
  76. package/dist/launch/schema.d.ts.map +1 -0
  77. package/dist/launch/schema.js +71 -0
  78. package/dist/launch/schema.js.map +1 -0
  79. package/dist/launch/workspaces.d.ts +134 -0
  80. package/dist/launch/workspaces.d.ts.map +1 -0
  81. package/dist/launch/workspaces.js +60 -0
  82. package/dist/launch/workspaces.js.map +1 -0
  83. package/dist/module-not-found.d.ts +3 -0
  84. package/dist/module-not-found.d.ts.map +1 -0
  85. package/dist/module-not-found.js +18 -0
  86. package/dist/module-not-found.js.map +1 -0
  87. package/dist/schemas/platform.config.descriptor.d.ts +34 -0
  88. package/dist/schemas/platform.config.descriptor.d.ts.map +1 -0
  89. package/dist/schemas/platform.config.descriptor.js +13 -0
  90. package/dist/schemas/platform.config.descriptor.js.map +1 -0
  91. package/dist/schemas.d.ts +2213 -0
  92. package/dist/schemas.d.ts.map +1 -0
  93. package/dist/schemas.js +661 -0
  94. package/dist/schemas.js.map +1 -0
  95. package/dist/shell/app-surface.d.ts +55 -0
  96. package/dist/shell/app-surface.d.ts.map +1 -0
  97. package/dist/shell/app-surface.js +159 -0
  98. package/dist/shell/app-surface.js.map +1 -0
  99. package/dist/shell/dock.d.ts +30 -0
  100. package/dist/shell/dock.d.ts.map +1 -0
  101. package/dist/shell/dock.js +75 -0
  102. package/dist/shell/dock.js.map +1 -0
  103. package/dist/shell/index.d.ts +11 -0
  104. package/dist/shell/index.d.ts.map +1 -0
  105. package/dist/shell/index.js +10 -0
  106. package/dist/shell/index.js.map +1 -0
  107. package/dist/shell/launch-resolution.d.ts +49 -0
  108. package/dist/shell/launch-resolution.d.ts.map +1 -0
  109. package/dist/shell/launch-resolution.js +163 -0
  110. package/dist/shell/launch-resolution.js.map +1 -0
  111. package/dist/shell/layout-grid.d.ts +30 -0
  112. package/dist/shell/layout-grid.d.ts.map +1 -0
  113. package/dist/shell/layout-grid.js +56 -0
  114. package/dist/shell/layout-grid.js.map +1 -0
  115. package/dist/shell/owner-surface-lifecycle.d.ts +30 -0
  116. package/dist/shell/owner-surface-lifecycle.d.ts.map +1 -0
  117. package/dist/shell/owner-surface-lifecycle.js +54 -0
  118. package/dist/shell/owner-surface-lifecycle.js.map +1 -0
  119. package/dist/shell/ports.d.ts +107 -0
  120. package/dist/shell/ports.d.ts.map +1 -0
  121. package/dist/shell/ports.js +154 -0
  122. package/dist/shell/ports.js.map +1 -0
  123. package/dist/shell/types.d.ts +7 -0
  124. package/dist/shell/types.d.ts.map +1 -0
  125. package/dist/shell/types.js +2 -0
  126. package/dist/shell/types.js.map +1 -0
  127. package/dist/shell/window-manager.d.ts +82 -0
  128. package/dist/shell/window-manager.d.ts.map +1 -0
  129. package/dist/shell/window-manager.js +285 -0
  130. package/dist/shell/window-manager.js.map +1 -0
  131. package/dist/shell/workspace-memory.d.ts +42 -0
  132. package/dist/shell/workspace-memory.d.ts.map +1 -0
  133. package/dist/shell/workspace-memory.js +65 -0
  134. package/dist/shell/workspace-memory.js.map +1 -0
  135. package/dist/shell/workspace-state.d.ts +47 -0
  136. package/dist/shell/workspace-state.d.ts.map +1 -0
  137. package/dist/shell/workspace-state.js +137 -0
  138. package/dist/shell/workspace-state.js.map +1 -0
  139. package/dist/vessel.docs.plugin.d.ts +4 -0
  140. package/dist/vessel.docs.plugin.d.ts.map +1 -0
  141. package/dist/vessel.docs.plugin.js +11 -0
  142. package/dist/vessel.docs.plugin.js.map +1 -0
  143. package/dist/vessel.plugin.d.ts +3 -0
  144. package/dist/vessel.plugin.d.ts.map +1 -0
  145. package/dist/vessel.plugin.js +23 -0
  146. package/dist/vessel.plugin.js.map +1 -0
  147. package/dist/vessel.runtime-client.descriptor.d.ts +4 -0
  148. package/dist/vessel.runtime-client.descriptor.d.ts.map +1 -0
  149. package/dist/vessel.runtime-client.descriptor.js +13 -0
  150. package/dist/vessel.runtime-client.descriptor.js.map +1 -0
  151. package/dist/vessel.workspace-state.plugin.d.ts +4 -0
  152. package/dist/vessel.workspace-state.plugin.d.ts.map +1 -0
  153. package/dist/vessel.workspace-state.plugin.js +12 -0
  154. package/dist/vessel.workspace-state.plugin.js.map +1 -0
  155. package/dist/vessel.workspace.plugin.d.ts +3 -0
  156. package/dist/vessel.workspace.plugin.d.ts.map +1 -0
  157. package/dist/vessel.workspace.plugin.js +17 -0
  158. package/dist/vessel.workspace.plugin.js.map +1 -0
  159. package/dist/whiteboard/client.d.ts +35 -0
  160. package/dist/whiteboard/client.d.ts.map +1 -0
  161. package/dist/whiteboard/client.js +185 -0
  162. package/dist/whiteboard/client.js.map +1 -0
  163. package/dist/whiteboard/descriptor.d.ts +5 -0
  164. package/dist/whiteboard/descriptor.d.ts.map +1 -0
  165. package/dist/whiteboard/descriptor.js +14 -0
  166. package/dist/whiteboard/descriptor.js.map +1 -0
  167. package/dist/whiteboard/index.d.ts +7 -0
  168. package/dist/whiteboard/index.d.ts.map +1 -0
  169. package/dist/whiteboard/index.js +7 -0
  170. package/dist/whiteboard/index.js.map +1 -0
  171. package/dist/whiteboard/plugin.d.ts +3 -0
  172. package/dist/whiteboard/plugin.d.ts.map +1 -0
  173. package/dist/whiteboard/plugin.js +42 -0
  174. package/dist/whiteboard/plugin.js.map +1 -0
  175. package/dist/whiteboard/schemas.d.ts +479 -0
  176. package/dist/whiteboard/schemas.d.ts.map +1 -0
  177. package/dist/whiteboard/schemas.js +55 -0
  178. package/dist/whiteboard/schemas.js.map +1 -0
  179. package/dist/whiteboard/tools/apply.impl.d.ts +7 -0
  180. package/dist/whiteboard/tools/apply.impl.d.ts.map +1 -0
  181. package/dist/whiteboard/tools/apply.impl.js +12 -0
  182. package/dist/whiteboard/tools/apply.impl.js.map +1 -0
  183. package/dist/whiteboard/tools/descriptors.d.ts +489 -0
  184. package/dist/whiteboard/tools/descriptors.d.ts.map +1 -0
  185. package/dist/whiteboard/tools/descriptors.js +72 -0
  186. package/dist/whiteboard/tools/descriptors.js.map +1 -0
  187. package/dist/whiteboard/tools/get.impl.d.ts +7 -0
  188. package/dist/whiteboard/tools/get.impl.d.ts.map +1 -0
  189. package/dist/whiteboard/tools/get.impl.js +12 -0
  190. package/dist/whiteboard/tools/get.impl.js.map +1 -0
  191. package/dist/whiteboard/tools/open.impl.d.ts +7 -0
  192. package/dist/whiteboard/tools/open.impl.d.ts.map +1 -0
  193. package/dist/whiteboard/tools/open.impl.js +12 -0
  194. package/dist/whiteboard/tools/open.impl.js.map +1 -0
  195. package/dist/whiteboard/tools/signal.impl.d.ts +7 -0
  196. package/dist/whiteboard/tools/signal.impl.d.ts.map +1 -0
  197. package/dist/whiteboard/tools/signal.impl.js +11 -0
  198. package/dist/whiteboard/tools/signal.impl.js.map +1 -0
  199. package/dist/whiteboard/vessel-whiteboard.descriptors.d.ts +4 -0
  200. package/dist/whiteboard/vessel-whiteboard.descriptors.d.ts.map +1 -0
  201. package/dist/whiteboard/vessel-whiteboard.descriptors.js +61 -0
  202. package/dist/whiteboard/vessel-whiteboard.descriptors.js.map +1 -0
  203. package/dist/workspace/vessel-hub.descriptors.d.ts +543 -0
  204. package/dist/workspace/vessel-hub.descriptors.d.ts.map +1 -0
  205. package/dist/workspace/vessel-hub.descriptors.js +544 -0
  206. package/dist/workspace/vessel-hub.descriptors.js.map +1 -0
  207. package/dist/workspace/vessel-platform.descriptors.d.ts +809 -0
  208. package/dist/workspace/vessel-platform.descriptors.d.ts.map +1 -0
  209. package/dist/workspace/vessel-platform.descriptors.js +207 -0
  210. package/dist/workspace/vessel-platform.descriptors.js.map +1 -0
  211. package/dist/workspace/vessel-workspace.descriptors.d.ts +537 -0
  212. package/dist/workspace/vessel-workspace.descriptors.d.ts.map +1 -0
  213. package/dist/workspace/vessel-workspace.descriptors.js +115 -0
  214. package/dist/workspace/vessel-workspace.descriptors.js.map +1 -0
  215. package/dist/workspace-state/index.d.ts +3 -0
  216. package/dist/workspace-state/index.d.ts.map +1 -0
  217. package/dist/workspace-state/index.js +3 -0
  218. package/dist/workspace-state/index.js.map +1 -0
  219. package/dist/workspace-state/vessel.workspace-state.storage.descriptor.d.ts +51 -0
  220. package/dist/workspace-state/vessel.workspace-state.storage.descriptor.d.ts.map +1 -0
  221. package/dist/workspace-state/vessel.workspace-state.storage.descriptor.js +24 -0
  222. package/dist/workspace-state/vessel.workspace-state.storage.descriptor.js.map +1 -0
  223. package/package.json +207 -4
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Launch-target resolution and readiness projection for Vessel apps.
3
+ *
4
+ * Pure functions over vessel descriptors — no runtime I/O, no Svelte.
5
+ */
6
+ function readinessRank(status) {
7
+ switch (status) {
8
+ case 'ready':
9
+ return 0;
10
+ case 'needs-setup':
11
+ return 2;
12
+ case 'planned':
13
+ return 3;
14
+ case 'blocked':
15
+ return 4;
16
+ default:
17
+ return 1;
18
+ }
19
+ }
20
+ function availabilityFromReadiness(areas) {
21
+ if (areas.length === 0) {
22
+ return { status: 'available', summary: 'No readiness gates linked.', blockingAreaIds: [] };
23
+ }
24
+ const worst = [...areas].sort((a, b) => readinessRank(b.status) - readinessRank(a.status))[0];
25
+ const blocking = areas.filter((area) => area.status !== 'ready' && area.status !== 'unknown');
26
+ if (worst.status === 'ready') {
27
+ return {
28
+ status: 'available',
29
+ summary: areas.map((a) => a.summary).join(' ') || 'Ready.',
30
+ blockingAreaIds: []
31
+ };
32
+ }
33
+ if (worst.status === 'blocked') {
34
+ return {
35
+ status: 'unavailable',
36
+ summary: worst.summary,
37
+ blockingAreaIds: blocking.map((a) => a.id)
38
+ };
39
+ }
40
+ if (worst.status === 'planned') {
41
+ return {
42
+ status: 'unavailable',
43
+ summary: worst.summary,
44
+ blockingAreaIds: blocking.map((a) => a.id)
45
+ };
46
+ }
47
+ if (worst.status === 'needs-setup') {
48
+ return {
49
+ status: 'degraded',
50
+ summary: worst.summary,
51
+ blockingAreaIds: blocking.map((a) => a.id)
52
+ };
53
+ }
54
+ return {
55
+ status: 'unknown',
56
+ summary: worst.summary,
57
+ blockingAreaIds: []
58
+ };
59
+ }
60
+ function mergeStatus(appStatus, readinessStatus) {
61
+ const rank = {
62
+ available: 0,
63
+ unknown: 1,
64
+ degraded: 2,
65
+ unavailable: 3
66
+ };
67
+ return rank[appStatus] >= rank[readinessStatus] ? appStatus : readinessStatus;
68
+ }
69
+ /**
70
+ * Resolve whether a vessel/app can open content vs readiness panel.
71
+ */
72
+ export function resolveAppLaunch(app, readinessAreas = [], setupSteps = [], options = {}) {
73
+ const respectReadiness = options.respectReadiness !== false;
74
+ const linkedAreas = readinessAreas.filter((area) => app.readinessAreaIds.includes(area.id));
75
+ const linkedSteps = setupSteps.filter((step) => app.setupStepIds.includes(step.id));
76
+ const pendingSetupStepIds = linkedSteps
77
+ .filter((step) => step.status !== 'ready')
78
+ .map((step) => step.id);
79
+ const fromApp = {
80
+ status: app.availability.status,
81
+ summary: app.availability.summary
82
+ };
83
+ const fromReadiness = respectReadiness
84
+ ? availabilityFromReadiness(linkedAreas)
85
+ : { status: 'available', summary: '', blockingAreaIds: [] };
86
+ const status = mergeStatus(fromApp.status, fromReadiness.status);
87
+ const summaryParts = [fromApp.summary, fromReadiness.summary].filter(Boolean);
88
+ const summary = summaryParts.join(' — ') || 'Not checked';
89
+ const canOpen = status === 'available' || status === 'degraded' || status === 'unknown';
90
+ // Unavailable always shows the readiness panel; degraded with pending setup
91
+ // also surfaces the panel so users get an honest path (not a blank window).
92
+ const showUnavailablePanel = status === 'unavailable' || (status === 'degraded' && pendingSetupStepIds.length > 0);
93
+ return {
94
+ appId: app.id,
95
+ appName: app.name,
96
+ launch: app.launch,
97
+ canOpen,
98
+ status,
99
+ summary,
100
+ blockingAreaIds: fromReadiness.blockingAreaIds,
101
+ pendingSetupStepIds,
102
+ showUnavailablePanel
103
+ };
104
+ }
105
+ /**
106
+ * Human-readable label for a launch target (launcher / inspector).
107
+ */
108
+ export function describeLaunchTarget(launch) {
109
+ switch (launch.type) {
110
+ case 'svelte-component':
111
+ return `component:${launch.import}${launch.exportName ? `#${launch.exportName}` : ''}`;
112
+ case 'vessel-surface':
113
+ return `surface:${launch.surfaceId}`;
114
+ case 'sveltekit-route':
115
+ return `route:${launch.href}`;
116
+ case 'runtime-client':
117
+ return `client:${launch.clientId}/${launch.view}`;
118
+ case 'tui-app':
119
+ return `tui:${launch.route}`;
120
+ case 'tool':
121
+ return `tool:${launch.toolId}`;
122
+ case 'config-manifest':
123
+ return `config:${launch.manifestId}`;
124
+ case 'docs-topic':
125
+ return `docs:${launch.topicId}`;
126
+ case 'runtime-descriptor':
127
+ return `descriptor:${launch.kind}/${launch.id}`;
128
+ case 'platform-component':
129
+ return `platform:${launch.componentId}@${launch.version}`;
130
+ case 'applet-artifact':
131
+ return `applet:${launch.artifactId}`;
132
+ case 'external-url':
133
+ return `url:${launch.href}`;
134
+ default: {
135
+ const _exhaustive = launch;
136
+ return String(_exhaustive);
137
+ }
138
+ }
139
+ }
140
+ /**
141
+ * Find an app by id from a mount payload app list.
142
+ */
143
+ export function findAppById(apps, appId) {
144
+ return apps.find((app) => app.id === appId);
145
+ }
146
+ /**
147
+ * Launcher listing: apps sorted for dock/palette (available first, then name).
148
+ */
149
+ export function sortAppsForLauncher(apps) {
150
+ const rank = {
151
+ available: 0,
152
+ degraded: 1,
153
+ unknown: 2,
154
+ unavailable: 3
155
+ };
156
+ return [...apps].sort((a, b) => {
157
+ const dr = rank[a.availability.status] - rank[b.availability.status];
158
+ if (dr !== 0)
159
+ return dr;
160
+ return a.name.localeCompare(b.name);
161
+ });
162
+ }
163
+ //# sourceMappingURL=launch-resolution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch-resolution.js","sourceRoot":"","sources":["../../src/shell/launch-resolution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Grid snap helpers for the Vessel infinite canvas shell.
3
+ */
4
+ export interface GridPoint {
5
+ x: number;
6
+ y: number;
7
+ }
8
+ export interface GridSize {
9
+ width: number;
10
+ height: number;
11
+ }
12
+ export declare const VESSEL_DEFAULT_GRID: {
13
+ /** Base cell size in CSS pixels. */
14
+ readonly cell: 24;
15
+ /** Soft margin from canvas origin when cascading new windows. */
16
+ readonly cascadeStep: 28;
17
+ };
18
+ export declare function snapToGrid(value: number, cell?: number): number;
19
+ export declare function snapPointToGrid(point: GridPoint, cell?: number): GridPoint;
20
+ export declare function snapRectToGrid(rect: GridPoint & GridSize, cell?: number): GridPoint & GridSize;
21
+ /**
22
+ * Cascade origin for the n-th new window so stacks stay readable on the canvas.
23
+ */
24
+ export declare function cascadeOrigin(index: number, base?: GridPoint, step?: number): GridPoint;
25
+ /**
26
+ * World → screen for a pannable canvas (origin is pan offset).
27
+ */
28
+ export declare function worldToScreen(world: GridPoint, pan: GridPoint, zoom?: number): GridPoint;
29
+ export declare function screenToWorld(screen: GridPoint, pan: GridPoint, zoom?: number): GridPoint;
30
+ //# sourceMappingURL=layout-grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-grid.d.ts","sourceRoot":"","sources":["../../src/shell/layout-grid.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,SAAS;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACV;AAED,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,mBAAmB;IAC/B,oCAAoC;;IAEpC,iEAAiE;;CAExD,CAAC;AAEX,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAiC,GAAG,MAAM,CAGzF;AAED,wBAAgB,eAAe,CAC9B,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE,MAAiC,GACrC,SAAS,CAKX;AAED,wBAAgB,cAAc,CAC7B,IAAI,EAAE,SAAS,GAAG,QAAQ,EAC1B,IAAI,GAAE,MAAiC,GACrC,SAAS,GAAG,QAAQ,CAOtB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAA4B,EAClC,IAAI,GAAE,MAAwC,GAC5C,SAAS,CAMX;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,SAAS,EACd,IAAI,GAAE,MAAU,GACd,SAAS,CAMX;AAED,wBAAgB,aAAa,CAC5B,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,SAAS,EACd,IAAI,GAAE,MAAU,GACd,SAAS,CAMX"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Grid snap helpers for the Vessel infinite canvas shell.
3
+ */
4
+ export const VESSEL_DEFAULT_GRID = {
5
+ /** Base cell size in CSS pixels. */
6
+ cell: 24,
7
+ /** Soft margin from canvas origin when cascading new windows. */
8
+ cascadeStep: 28
9
+ };
10
+ export function snapToGrid(value, cell = VESSEL_DEFAULT_GRID.cell) {
11
+ if (cell <= 0)
12
+ return Math.round(value);
13
+ return Math.round(value / cell) * cell;
14
+ }
15
+ export function snapPointToGrid(point, cell = VESSEL_DEFAULT_GRID.cell) {
16
+ return {
17
+ x: snapToGrid(point.x, cell),
18
+ y: snapToGrid(point.y, cell)
19
+ };
20
+ }
21
+ export function snapRectToGrid(rect, cell = VESSEL_DEFAULT_GRID.cell) {
22
+ return {
23
+ x: snapToGrid(rect.x, cell),
24
+ y: snapToGrid(rect.y, cell),
25
+ width: Math.max(cell, snapToGrid(rect.width, cell)),
26
+ height: Math.max(cell, snapToGrid(rect.height, cell))
27
+ };
28
+ }
29
+ /**
30
+ * Cascade origin for the n-th new window so stacks stay readable on the canvas.
31
+ */
32
+ export function cascadeOrigin(index, base = { x: 72, y: 72 }, step = VESSEL_DEFAULT_GRID.cascadeStep) {
33
+ const n = Math.max(0, Math.floor(index));
34
+ return {
35
+ x: base.x + n * step,
36
+ y: base.y + n * step
37
+ };
38
+ }
39
+ /**
40
+ * World → screen for a pannable canvas (origin is pan offset).
41
+ */
42
+ export function worldToScreen(world, pan, zoom = 1) {
43
+ const z = zoom <= 0 ? 1 : zoom;
44
+ return {
45
+ x: (world.x - pan.x) * z,
46
+ y: (world.y - pan.y) * z
47
+ };
48
+ }
49
+ export function screenToWorld(screen, pan, zoom = 1) {
50
+ const z = zoom <= 0 ? 1 : zoom;
51
+ return {
52
+ x: screen.x / z + pan.x,
53
+ y: screen.y / z + pan.y
54
+ };
55
+ }
56
+ //# sourceMappingURL=layout-grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-grid.js","sourceRoot":"","sources":["../../src/shell/layout-grid.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAClC,oCAAoC;IACpC,IAAI,EAAE,EAAE;IACR,iEAAiE;IACjE,WAAW,EAAE,EAAE;CACN,CAAC;AAEX,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,OAAe,mBAAmB,CAAC,IAAI;IAChF,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,eAAe,CAC9B,KAAgB,EAChB,OAAe,mBAAmB,CAAC,IAAI;IAEvC,OAAO;QACN,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;QAC5B,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;KAC5B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,IAA0B,EAC1B,OAAe,mBAAmB,CAAC,IAAI;IAEvC,OAAO;QACN,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;QAC3B,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;QAC3B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KACrD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC5B,KAAa,EACb,OAAkB,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAClC,OAAe,mBAAmB,CAAC,WAAW;IAE9C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,OAAO;QACN,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;QACpB,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;KACpB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC5B,KAAgB,EAChB,GAAc,EACd,OAAe,CAAC;IAEhB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/B,OAAO;QACN,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACxB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;KACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,MAAiB,EACjB,GAAc,EACd,OAAe,CAAC;IAEhB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/B,OAAO;QACN,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QACvB,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;KACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /** Why a Vessel owner surface is being asked to close. */
2
+ export type VesselOwnerSurfaceCloseReason = 'window-close';
3
+ /**
4
+ * A close request stays pending until the owner calls `continueClose`.
5
+ * Owners use this continuation after their own save/discard/cancel decision.
6
+ */
7
+ export interface VesselOwnerSurfaceCloseRequest {
8
+ readonly reason: VesselOwnerSurfaceCloseReason;
9
+ continueClose(): void;
10
+ }
11
+ export type VesselOwnerSurfaceBeforeClose = (request: VesselOwnerSurfaceCloseRequest) => void;
12
+ /** Owner half of the generic Vessel window lifecycle seam. */
13
+ export interface VesselOwnerSurfaceLifecycle {
14
+ beforeClose(handler: VesselOwnerSurfaceBeforeClose): () => void;
15
+ }
16
+ /** Shell half of the generic Vessel window lifecycle seam. */
17
+ export interface VesselOwnerSurfaceLifecycleController {
18
+ readonly lifecycle: VesselOwnerSurfaceLifecycle;
19
+ requestClose(continueClose: () => void): void;
20
+ dispose(): void;
21
+ }
22
+ /**
23
+ * Create one lifecycle controller per mounted Vessel window.
24
+ *
25
+ * A surface may install one current guard. With no guard, the shell closes
26
+ * immediately. With a guard, the owner decides when (or whether) to continue.
27
+ * Continuations are single-use and become inert after the window is disposed.
28
+ */
29
+ export declare function createVesselOwnerSurfaceLifecycle(): VesselOwnerSurfaceLifecycleController;
30
+ //# sourceMappingURL=owner-surface-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-surface-lifecycle.d.ts","sourceRoot":"","sources":["../../src/shell/owner-surface-lifecycle.ts"],"names":[],"mappings":"AACA,0DAA0D;AAC1D,MAAM,MAAM,6BAA6B,GAAG,cAAc,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC9C,QAAQ,CAAC,MAAM,EAAE,6BAA6B,CAAC;IAC/C,aAAa,IAAI,IAAI,CAAC;CACtB;AAED,MAAM,MAAM,6BAA6B,GAAG,CAAC,OAAO,EAAE,8BAA8B,KAAK,IAAI,CAAC;AAE9F,8DAA8D;AAC9D,MAAM,WAAW,2BAA2B;IAC3C,WAAW,CAAC,OAAO,EAAE,6BAA6B,GAAG,MAAM,IAAI,CAAC;CAChE;AAED,8DAA8D;AAC9D,MAAM,WAAW,qCAAqC;IACrD,QAAQ,CAAC,SAAS,EAAE,2BAA2B,CAAC;IAChD,YAAY,CAAC,aAAa,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9C,OAAO,IAAI,IAAI,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,IAAI,qCAAqC,CA4CzF"}
@@ -0,0 +1,54 @@
1
+ import { vesselSyncOperation } from "../boundary.js";
2
+ /**
3
+ * Create one lifecycle controller per mounted Vessel window.
4
+ *
5
+ * A surface may install one current guard. With no guard, the shell closes
6
+ * immediately. With a guard, the owner decides when (or whether) to continue.
7
+ * Continuations are single-use and become inert after the window is disposed.
8
+ */
9
+ export function createVesselOwnerSurfaceLifecycle() {
10
+ let beforeClose = null;
11
+ let disposed = false;
12
+ const lifecycle = Object.freeze({
13
+ beforeClose(handler) {
14
+ if (disposed)
15
+ return () => { };
16
+ beforeClose = handler;
17
+ let registered = true;
18
+ return () => {
19
+ if (!registered)
20
+ return;
21
+ registered = false;
22
+ if (beforeClose === handler)
23
+ beforeClose = null;
24
+ };
25
+ }
26
+ });
27
+ return {
28
+ lifecycle,
29
+ requestClose(continueClose) {
30
+ if (disposed)
31
+ return;
32
+ const handler = beforeClose;
33
+ if (!handler) {
34
+ vesselSyncOperation(continueClose, 'vessel-close-continuation-failed');
35
+ return;
36
+ }
37
+ let continued = false;
38
+ vesselSyncOperation(() => handler(Object.freeze({
39
+ reason: 'window-close',
40
+ continueClose() {
41
+ if (disposed || continued)
42
+ return;
43
+ continued = true;
44
+ vesselSyncOperation(continueClose, 'vessel-close-continuation-failed');
45
+ }
46
+ })), 'vessel-close-guard-failed');
47
+ },
48
+ dispose() {
49
+ disposed = true;
50
+ beforeClose = null;
51
+ }
52
+ };
53
+ }
54
+ //# sourceMappingURL=owner-surface-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-surface-lifecycle.js","sourceRoot":"","sources":["../../src/shell/owner-surface-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AA2BrD;;;;;;GAMG;AACH,MAAM,UAAU,iCAAiC;IAChD,IAAI,WAAW,GAAyC,IAAI,CAAC;IAC7D,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,SAAS,GAAgC,MAAM,CAAC,MAAM,CAAC;QAC5D,WAAW,CAAC,OAAsC;YACjD,IAAI,QAAQ;gBAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;YAC9B,WAAW,GAAG,OAAO,CAAC;YACtB,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,OAAO,GAAG,EAAE;gBACX,IAAI,CAAC,UAAU;oBAAE,OAAO;gBACxB,UAAU,GAAG,KAAK,CAAC;gBACnB,IAAI,WAAW,KAAK,OAAO;oBAAE,WAAW,GAAG,IAAI,CAAC;YACjD,CAAC,CAAC;QACH,CAAC;KACD,CAAC,CAAC;IAEH,OAAO;QACN,SAAS;QACT,YAAY,CAAC,aAAyB;YACrC,IAAI,QAAQ;gBAAE,OAAO;YACrB,MAAM,OAAO,GAAG,WAAW,CAAC;YAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,mBAAmB,CAAC,aAAa,EAAE,kCAAkC,CAAC,CAAC;gBACvE,OAAO;YACR,CAAC;YAED,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,mBAAmB,CAAC,GAAG,EAAE,CAAC,OAAO,CAChC,MAAM,CAAC,MAAM,CAAC;gBACb,MAAM,EAAE,cAAuB;gBAC/B,aAAa;oBACZ,IAAI,QAAQ,IAAI,SAAS;wBAAE,OAAO;oBAClC,SAAS,GAAG,IAAI,CAAC;oBACjB,mBAAmB,CAAC,aAAa,EAAE,kCAAkC,CAAC,CAAC;gBACxE,CAAC;aACD,CAAC,CACF,EAAE,2BAA2B,CAAC,CAAC;QACjC,CAAC;QACD,OAAO;YACN,QAAQ,GAAG,IAAI,CAAC;YAChB,WAAW,GAAG,IAAI,CAAC;QACpB,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * App I/O ports and wires for the Vessel canvas.
3
+ *
4
+ * Framework-neutral contracts so vessel/app surfaces (and future wrappers) can
5
+ * declare inputs/outputs with schemas. The xyflow canvas uses these as Handles;
6
+ * magnetic links and permanent/temporary wires validate against canConnectPorts.
7
+ */
8
+ import * as z from 'zod/v4';
9
+ import { type VesselAppDescriptor } from '../schemas.ts';
10
+ export declare const vesselPortDirectionSchema: z.ZodEnum<{
11
+ output: "output";
12
+ input: "input";
13
+ }>;
14
+ export type VesselPortDirection = z.infer<typeof vesselPortDirectionSchema>;
15
+ /** Lightweight schema fingerprint for compatibility (full JSON Schema later). */
16
+ export declare const vesselPortSchemaRefSchema: z.ZodObject<{
17
+ mediaType: z.ZodDefault<z.ZodString>;
18
+ schemaId: z.ZodOptional<z.ZodString>;
19
+ shape: z.ZodDefault<z.ZodEnum<{
20
+ any: "any";
21
+ event: "event";
22
+ stream: "stream";
23
+ json: "json";
24
+ text: "text";
25
+ binary: "binary";
26
+ }>>;
27
+ }, z.core.$strip>;
28
+ export type VesselPortSchemaRef = z.infer<typeof vesselPortSchemaRefSchema>;
29
+ export declare const vesselAppPortSchema: z.ZodObject<{
30
+ id: z.ZodString;
31
+ label: z.ZodString;
32
+ direction: z.ZodEnum<{
33
+ output: "output";
34
+ input: "input";
35
+ }>;
36
+ schema: z.ZodDefault<z.ZodObject<{
37
+ mediaType: z.ZodDefault<z.ZodString>;
38
+ schemaId: z.ZodOptional<z.ZodString>;
39
+ shape: z.ZodDefault<z.ZodEnum<{
40
+ any: "any";
41
+ event: "event";
42
+ stream: "stream";
43
+ json: "json";
44
+ text: "text";
45
+ binary: "binary";
46
+ }>>;
47
+ }, z.core.$strip>>;
48
+ multiple: z.ZodDefault<z.ZodBoolean>;
49
+ required: z.ZodDefault<z.ZodBoolean>;
50
+ }, z.core.$strip>;
51
+ export type VesselAppPort = z.infer<typeof vesselAppPortSchema>;
52
+ export declare const vesselWireKindSchema: z.ZodEnum<{
53
+ temporary: "temporary";
54
+ permanent: "permanent";
55
+ }>;
56
+ export type VesselWireKind = z.infer<typeof vesselWireKindSchema>;
57
+ export declare const vesselWireEdgeSchema: z.ZodObject<{
58
+ id: z.ZodString;
59
+ sourceInstanceId: z.ZodString;
60
+ sourcePortId: z.ZodString;
61
+ targetInstanceId: z.ZodString;
62
+ targetPortId: z.ZodString;
63
+ kind: z.ZodDefault<z.ZodEnum<{
64
+ temporary: "temporary";
65
+ permanent: "permanent";
66
+ }>>;
67
+ label: z.ZodOptional<z.ZodString>;
68
+ createdAt: z.ZodOptional<z.ZodString>;
69
+ }, z.core.$strip>;
70
+ export type VesselWireEdge = z.infer<typeof vesselWireEdgeSchema>;
71
+ /** Default ports every launchable app gets until descriptors declare their own. */
72
+ export declare function defaultPortsForApp(_app: VesselAppDescriptor): VesselAppPort[];
73
+ /**
74
+ * Resolve ports for an app.
75
+ *
76
+ * Prefer **descriptor-declared** `app.ports` when present (apps/wrappers name their
77
+ * I/O + schemas). Otherwise fall back to defaults + **temporary** tag heuristics
78
+ * (`files` / `chat` tags). Tag heuristics are not the long-term contract — migrate
79
+ * descriptors to declare `ports` explicitly.
80
+ */
81
+ export declare function portsForApp(app: VesselAppDescriptor): VesselAppPort[];
82
+ export interface PortConnectResult {
83
+ ok: boolean;
84
+ reason?: string;
85
+ }
86
+ /** Shape compatibility matrix for early magnetic linking. */
87
+ export declare function portContractsCompatible(a: VesselPortSchemaRef['shape'], b: VesselPortSchemaRef['shape']): boolean;
88
+ export declare function canConnectPorts(source: VesselAppPort, target: VesselAppPort, options?: {
89
+ allowSelf?: boolean;
90
+ sourceInstanceId?: string;
91
+ targetInstanceId?: string;
92
+ }): PortConnectResult;
93
+ declare const wireInputSchema: z.ZodObject<{
94
+ kind: z.ZodDefault<z.ZodEnum<{
95
+ temporary: "temporary";
96
+ permanent: "permanent";
97
+ }>>;
98
+ label: z.ZodOptional<z.ZodString>;
99
+ sourceInstanceId: z.ZodString;
100
+ sourcePortId: z.ZodString;
101
+ targetInstanceId: z.ZodString;
102
+ targetPortId: z.ZodString;
103
+ }, z.core.$strip>;
104
+ export declare function createWireEdge(input: z.input<typeof wireInputSchema>): VesselWireEdge;
105
+ /** Compatibility export retained for existing callers. */
106
+ export { portContractsCompatible as shapesCompatible };
107
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/shell/ports.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAkC,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzF,eAAO,MAAM,yBAAyB;;;EAA8B,CAAC;AACrE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,iFAAiF;AACjF,eAAO,MAAM,yBAAyB;;;;;;;;;;;iBAOpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;iBAAiC,CAAC;AAElE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;EAAqC,CAAC;AACvE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAS/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,GAAG,aAAa,EAAE,CAwB7E;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,mBAAmB,GAAG,aAAa,EAAE,CA6BrE;AAED,MAAM,WAAW,iBAAiB;IACjC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,6DAA6D;AAC7D,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,OAAO,CAOjH;AAED,wBAAgB,eAAe,CAC9B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,aAAa,EACrB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAO,GACzF,iBAAiB,CAoCnB;AAED,QAAA,MAAM,eAAe;;;;;;;;;;iBAA2D,CAAC;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,GAAG,cAAc,CAYrF;AAED,0DAA0D;AAC1D,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,154 @@
1
+ import { parseVesselValue } from "../boundary.js";
2
+ /**
3
+ * App I/O ports and wires for the Vessel canvas.
4
+ *
5
+ * Framework-neutral contracts so vessel/app surfaces (and future wrappers) can
6
+ * declare inputs/outputs with schemas. The xyflow canvas uses these as Handles;
7
+ * magnetic links and permanent/temporary wires validate against canConnectPorts.
8
+ */
9
+ import * as z from 'zod/v4';
10
+ import { vesselAppPortDeclarationSchema } from "../schemas.js";
11
+ export const vesselPortDirectionSchema = z.enum(['input', 'output']);
12
+ /** Lightweight schema fingerprint for compatibility (full JSON Schema later). */
13
+ export const vesselPortSchemaRefSchema = z.object({
14
+ /** Logical type id, e.g. `text/plain`, `application/json`, `vessel/event`. */
15
+ mediaType: z.string().min(1).default('application/json'),
16
+ /** Optional named schema id in a registry. */
17
+ schemaId: z.string().min(1).optional(),
18
+ /** Free-form shape hint for early UX (not a full schema validator yet). */
19
+ shape: z.enum(['any', 'text', 'json', 'event', 'stream', 'binary']).default('any')
20
+ });
21
+ export const vesselAppPortSchema = vesselAppPortDeclarationSchema;
22
+ export const vesselWireKindSchema = z.enum(['temporary', 'permanent']);
23
+ export const vesselWireEdgeSchema = z.object({
24
+ id: z.string().min(1),
25
+ sourceInstanceId: z.string().min(1),
26
+ sourcePortId: z.string().min(1),
27
+ targetInstanceId: z.string().min(1),
28
+ targetPortId: z.string().min(1),
29
+ kind: vesselWireKindSchema.default('temporary'),
30
+ label: z.string().optional(),
31
+ createdAt: z.string().datetime().optional()
32
+ });
33
+ /** Default ports every launchable app gets until descriptors declare their own. */
34
+ export function defaultPortsForApp(_app) {
35
+ return [
36
+ vesselAppPortSchema.parse({
37
+ id: 'in.default',
38
+ label: 'In',
39
+ direction: 'input',
40
+ schema: { mediaType: 'application/json', shape: 'any' },
41
+ multiple: true
42
+ }),
43
+ vesselAppPortSchema.parse({
44
+ id: 'out.default',
45
+ label: 'Out',
46
+ direction: 'output',
47
+ schema: { mediaType: 'application/json', shape: 'event' },
48
+ multiple: true
49
+ }),
50
+ vesselAppPortSchema.parse({
51
+ id: 'out.events',
52
+ label: 'Events',
53
+ direction: 'output',
54
+ schema: { mediaType: 'vessel/event', shape: 'event' },
55
+ multiple: true
56
+ })
57
+ ];
58
+ }
59
+ /**
60
+ * Resolve ports for an app.
61
+ *
62
+ * Prefer **descriptor-declared** `app.ports` when present (apps/wrappers name their
63
+ * I/O + schemas). Otherwise fall back to defaults + **temporary** tag heuristics
64
+ * (`files` / `chat` tags). Tag heuristics are not the long-term contract — migrate
65
+ * descriptors to declare `ports` explicitly.
66
+ */
67
+ export function portsForApp(app) {
68
+ const declared = app.ports;
69
+ if (Array.isArray(declared) && declared.length > 0) {
70
+ return declared.map((p) => parseVesselValue(vesselAppPortSchema, p));
71
+ }
72
+ const ports = defaultPortsForApp(app);
73
+ // TEMPORARY tag heuristics — remove once descriptors declare ports.
74
+ if (app.tags.includes('files')) {
75
+ ports.push(vesselAppPortSchema.parse({
76
+ id: 'out.document',
77
+ label: 'Document',
78
+ direction: 'output',
79
+ schema: { mediaType: 'text/plain', shape: 'text' }
80
+ }));
81
+ }
82
+ if (app.tags.includes('chat') || app.id === 'workspace.chat') {
83
+ ports.push(vesselAppPortSchema.parse({
84
+ id: 'in.message',
85
+ label: 'Message',
86
+ direction: 'input',
87
+ schema: { mediaType: 'text/plain', shape: 'text' }
88
+ }));
89
+ }
90
+ return ports;
91
+ }
92
+ /** Shape compatibility matrix for early magnetic linking. */
93
+ export function portContractsCompatible(a, b) {
94
+ if (a === 'any' || b === 'any')
95
+ return true;
96
+ if (a === b)
97
+ return true;
98
+ // events accept json payloads
99
+ if ((a === 'event' && b === 'json') || (a === 'json' && b === 'event'))
100
+ return true;
101
+ if ((a === 'text' && b === 'json') || (a === 'json' && b === 'text'))
102
+ return true;
103
+ return false;
104
+ }
105
+ export function canConnectPorts(source, target, options = {}) {
106
+ source = parseVesselValue(vesselAppPortSchema, source);
107
+ target = parseVesselValue(vesselAppPortSchema, target);
108
+ options = parseVesselValue(z.object({ allowSelf: z.boolean().optional(), sourceInstanceId: z.string().optional(), targetInstanceId: z.string().optional() }), options);
109
+ if (source.direction !== 'output') {
110
+ return { ok: false, reason: 'Source port must be an output.' };
111
+ }
112
+ if (target.direction !== 'input') {
113
+ return { ok: false, reason: 'Target port must be an input.' };
114
+ }
115
+ if (!options.allowSelf &&
116
+ options.sourceInstanceId &&
117
+ options.targetInstanceId &&
118
+ options.sourceInstanceId === options.targetInstanceId) {
119
+ return { ok: false, reason: 'Cannot wire an app to itself.' };
120
+ }
121
+ if (!portContractsCompatible(source.schema.shape, target.schema.shape)) {
122
+ return {
123
+ ok: false,
124
+ reason: `Incompatible shapes: ${source.schema.shape} → ${target.schema.shape}`
125
+ };
126
+ }
127
+ if (source.schema.schemaId &&
128
+ target.schema.schemaId &&
129
+ source.schema.schemaId !== target.schema.schemaId &&
130
+ target.schema.shape !== 'any') {
131
+ return {
132
+ ok: false,
133
+ reason: `Schema mismatch: named schema ids differ.`
134
+ };
135
+ }
136
+ return { ok: true };
137
+ }
138
+ const wireInputSchema = vesselWireEdgeSchema.omit({ id: true, createdAt: true });
139
+ export function createWireEdge(input) {
140
+ const parsed = parseVesselValue(wireInputSchema, input);
141
+ return parseVesselValue(vesselWireEdgeSchema, {
142
+ id: `wire:${parsed.sourceInstanceId}:${parsed.sourcePortId}->${parsed.targetInstanceId}:${parsed.targetPortId}:${Date.now()}`,
143
+ sourceInstanceId: parsed.sourceInstanceId,
144
+ sourcePortId: parsed.sourcePortId,
145
+ targetInstanceId: parsed.targetInstanceId,
146
+ targetPortId: parsed.targetPortId,
147
+ kind: parsed.kind,
148
+ label: parsed.label,
149
+ createdAt: new Date().toISOString()
150
+ });
151
+ }
152
+ /** Compatibility export retained for existing callers. */
153
+ export { portContractsCompatible as shapesCompatible };
154
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/shell/ports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export type VesselAvailabilityStatus = 'available' | 'degraded' | 'unavailable' | 'unknown';
2
+ export interface VesselAvailability {
3
+ status: VesselAvailabilityStatus;
4
+ summary: string;
5
+ lastCheckedAt?: string;
6
+ }
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shell/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG,WAAW,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;AAE5F,MAAM,WAAW,kBAAkB;IAClC,MAAM,EAAE,wBAAwB,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB"}