eve 0.29.2 → 0.29.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 (178) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/src/channel/types.d.ts +15 -0
  3. package/dist/src/cli/commands/integration-setup.d.ts +3 -7
  4. package/dist/src/cli/commands/integration-setup.js +1 -1
  5. package/dist/src/cli/commands/registry.d.ts +1 -0
  6. package/dist/src/cli/commands/registry.js +1 -1
  7. package/dist/src/cli/commands/trace.d.ts +7 -24
  8. package/dist/src/cli/commands/trace.js +7 -5
  9. package/dist/src/cli/dev/tui/blocks.js +1 -1
  10. package/dist/src/cli/dev/tui/clipboard.d.ts +17 -0
  11. package/dist/src/cli/dev/tui/clipboard.js +1 -0
  12. package/dist/src/cli/dev/tui/command-typeahead.js +1 -1
  13. package/dist/src/cli/dev/tui/prompt-commands.d.ts +3 -0
  14. package/dist/src/cli/dev/tui/prompt-commands.js +1 -1
  15. package/dist/src/cli/dev/tui/remote-auth.js +1 -1
  16. package/dist/src/cli/dev/tui/runner.d.ts +6 -0
  17. package/dist/src/cli/dev/tui/runner.js +1 -1
  18. package/dist/src/cli/dev/tui/stream-format.d.ts +8 -0
  19. package/dist/src/cli/dev/tui/stream-format.js +1 -1
  20. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +3 -0
  21. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  22. package/dist/src/cli/dev/tui/test/mock-terminal.js +3 -3
  23. package/dist/src/cli/dev/tui/traces/trace-content.d.ts +28 -0
  24. package/dist/src/cli/dev/tui/traces/trace-content.js +2 -0
  25. package/dist/src/cli/dev/tui/traces/trace-conversation.d.ts +58 -0
  26. package/dist/src/cli/dev/tui/traces/trace-conversation.js +2 -0
  27. package/dist/src/cli/dev/tui/traces/trace-store.d.ts +27 -0
  28. package/dist/src/cli/dev/tui/traces/trace-store.js +1 -0
  29. package/dist/src/cli/dev/tui/traces/trace-view.d.ts +48 -0
  30. package/dist/src/cli/dev/tui/traces/trace-view.js +2 -0
  31. package/dist/src/cli/dev/tui/traces/trace-viewer-session.d.ts +41 -0
  32. package/dist/src/cli/dev/tui/traces/trace-viewer-session.js +1 -0
  33. package/dist/src/cli/dev/tui/traces/trace-viewer-state.d.ts +110 -0
  34. package/dist/src/cli/dev/tui/traces/trace-viewer-state.js +1 -0
  35. package/dist/src/cli/ui/alt-screen.d.ts +42 -0
  36. package/dist/src/cli/ui/alt-screen.js +1 -0
  37. package/dist/src/cli/ui/terminal-text.d.ts +4 -0
  38. package/dist/src/cli/ui/terminal-text.js +1 -1
  39. package/dist/src/compiled/.vendor-stamp.json +2 -1
  40. package/dist/src/compiled/@photon-ai/chat-adapter-imessage/LICENSE +21 -0
  41. package/dist/src/compiled/@photon-ai/chat-adapter-imessage/_spectrum-core.d.ts +3 -0
  42. package/dist/src/compiled/@photon-ai/chat-adapter-imessage/_spectrum-imessage.d.ts +2 -0
  43. package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.d.ts +496 -0
  44. package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.js +137 -0
  45. package/dist/src/compiled/@vercel/sandbox/index.js +13 -107
  46. package/dist/src/compiled/_chunks/node/auth-BS3UoyvT.js +2 -0
  47. package/dist/src/compiled/_chunks/node/compat-Dm2n85Mx.js +1 -0
  48. package/dist/src/compiled/_chunks/node/schemas-DtQwuPdM.js +65 -0
  49. package/dist/src/compiled/_chunks/node/undici-DWL_MYmT.js +95 -0
  50. package/dist/src/compiled/_chunks/node/version-Cztrk7z6.js +1 -0
  51. package/dist/src/compiled/shadcn-registry/index.js +461 -893
  52. package/dist/src/context/keys.d.ts +3 -1
  53. package/dist/src/context/keys.js +1 -1
  54. package/dist/src/execution/delegated-parent-notification.js +1 -1
  55. package/dist/src/execution/delegated-parent-result.js +1 -1
  56. package/dist/src/execution/dispatch-runtime-actions-step.js +1 -1
  57. package/dist/src/execution/runtime-context.js +1 -1
  58. package/dist/src/execution/sandbox/glob-tool.js +3 -3
  59. package/dist/src/execution/sandbox/grep-tool.js +1 -1
  60. package/dist/src/execution/sandbox/read-file-tool.js +3 -3
  61. package/dist/src/execution/sandbox/require-sandbox.d.ts +3 -3
  62. package/dist/src/execution/sandbox/require-sandbox.js +1 -1
  63. package/dist/src/execution/sandbox/write-file-tool.js +1 -1
  64. package/dist/src/execution/subagent-adapter-state.d.ts +39 -0
  65. package/dist/src/execution/subagent-adapter-state.js +1 -0
  66. package/dist/src/execution/subagent-adapter.d.ts +0 -34
  67. package/dist/src/execution/subagent-adapter.js +1 -1
  68. package/dist/src/execution/subagent-tool.d.ts +2 -1
  69. package/dist/src/execution/subagent-tool.js +1 -1
  70. package/dist/src/execution/workflow-steps.js +1 -1
  71. package/dist/src/harness/instrumentation-lifecycle.d.ts +18 -0
  72. package/dist/src/harness/instrumentation-native-events.d.ts +3 -1
  73. package/dist/src/harness/instrumentation-native-events.js +1 -1
  74. package/dist/src/harness/parent-lineage.d.ts +11 -0
  75. package/dist/src/harness/parent-lineage.js +1 -0
  76. package/dist/src/harness/tool-loop.js +2 -2
  77. package/dist/src/internal/application/package.js +1 -1
  78. package/dist/src/internal/nitro/host/local-tracing-runtime-plugin.js +1 -1
  79. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  80. package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +7 -0
  81. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +2 -2
  82. package/dist/src/public/channels/photon/inboundContent.d.ts +4 -0
  83. package/dist/src/public/channels/photon/inboundContent.js +1 -0
  84. package/dist/src/public/channels/photon/index.d.ts +1 -0
  85. package/dist/src/public/channels/photon/index.js +1 -0
  86. package/dist/src/public/channels/photon/photonIMessageChannel.d.ts +54 -0
  87. package/dist/src/public/channels/photon/photonIMessageChannel.js +1 -0
  88. package/dist/src/runtime/channels/registry.js +1 -1
  89. package/dist/src/runtime/framework-tools/glob.js +1 -1
  90. package/dist/src/runtime/framework-tools/grep.js +1 -1
  91. package/dist/src/runtime/framework-tools/read-file.js +1 -1
  92. package/dist/src/runtime/framework-tools/write-file.js +1 -1
  93. package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
  94. package/dist/src/setup/connect-provisioning.d.ts +32 -0
  95. package/dist/src/setup/connect-provisioning.js +1 -0
  96. package/dist/src/setup/flows/login.js +1 -1
  97. package/dist/src/setup/flows/registry.js +1 -1
  98. package/dist/src/setup/integrations/photon/connect.d.ts +40 -0
  99. package/dist/src/setup/integrations/photon/connect.js +1 -0
  100. package/dist/src/setup/integrations/photon/management.d.ts +34 -0
  101. package/dist/src/setup/integrations/photon/management.js +1 -0
  102. package/dist/src/setup/integrations/photon/setup-flow.d.ts +39 -0
  103. package/dist/src/setup/integrations/photon/setup-flow.js +20 -0
  104. package/dist/src/setup/integrations/photon/setup.d.ts +3 -0
  105. package/dist/src/setup/integrations/photon/setup.js +1 -0
  106. package/dist/src/setup/integrations/registry.d.ts +6 -0
  107. package/dist/src/setup/integrations/registry.js +1 -0
  108. package/dist/src/setup/integrations/runner.d.ts +25 -0
  109. package/dist/src/setup/integrations/runner.js +1 -0
  110. package/dist/src/setup/integrations/{channels → shared}/environment.d.ts +3 -3
  111. package/dist/src/setup/integrations/shared/environment.js +1 -0
  112. package/dist/src/setup/integrations/shared/scaffold.d.ts +19 -0
  113. package/dist/src/setup/integrations/shared/scaffold.js +1 -0
  114. package/dist/src/setup/integrations/{channels → shared}/ui.d.ts +3 -3
  115. package/dist/src/setup/integrations/shared/ui.js +2 -0
  116. package/dist/src/setup/integrations/slack/setup.d.ts +16 -0
  117. package/dist/src/setup/integrations/slack/setup.js +1 -0
  118. package/dist/src/setup/integrations/types.d.ts +26 -0
  119. package/dist/src/setup/integrations/web/setup.d.ts +3 -0
  120. package/dist/src/setup/integrations/web/setup.js +1 -0
  121. package/dist/src/setup/primitives/run-vercel.d.ts +2 -7
  122. package/dist/src/setup/primitives/run-vercel.js +1 -1
  123. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  124. package/dist/src/setup/scaffold/create/project.js +2 -2
  125. package/dist/src/setup/scaffold/update/channels.js +1 -1
  126. package/dist/src/setup/scaffold/update/connections.js +1 -1
  127. package/dist/src/setup/slack-connect-lifecycle.d.ts +2 -8
  128. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  129. package/dist/src/setup/state.d.ts +0 -12
  130. package/dist/src/setup/state.js +1 -1
  131. package/dist/src/shared/skill-paths.d.ts +10 -0
  132. package/dist/src/shared/skill-paths.js +2 -2
  133. package/dist/src/tracing/agent-otel-content.d.ts +32 -0
  134. package/dist/src/tracing/agent-otel-content.js +4 -0
  135. package/dist/src/{harness → tracing}/agent-otel-provider.d.ts +10 -1
  136. package/dist/src/tracing/agent-otel-provider.js +2 -0
  137. package/dist/src/{harness → tracing}/agent-trace-context-store.d.ts +8 -1
  138. package/dist/src/tracing/agent-trace-context-store.js +1 -0
  139. package/dist/src/{harness → tracing}/agent-trace-span-processor.d.ts +5 -1
  140. package/dist/src/tracing/agent-trace-span-processor.js +1 -0
  141. package/dist/src/tracing/local-instrumentation-runtime.js +1 -0
  142. package/dist/src/tracing/local-trace-reader.d.ts +57 -0
  143. package/dist/src/tracing/local-trace-reader.js +1 -0
  144. package/dist/src/{harness → tracing}/local-trace-retention.js +1 -1
  145. package/dist/src/{harness → tracing}/local-trace-span-processor.js +1 -1
  146. package/docs/channels/chat-sdk.mdx +18 -1
  147. package/docs/channels/meta.json +1 -0
  148. package/docs/channels/overview.mdx +1 -1
  149. package/docs/channels/photon.mdx +78 -0
  150. package/docs/concepts/default-harness.md +2 -0
  151. package/docs/guides/dev-tui.md +20 -1
  152. package/docs/guides/instrumentation.md +8 -7
  153. package/docs/reference/cli.md +9 -1
  154. package/docs/sandbox.mdx +1 -1
  155. package/package.json +7 -1
  156. package/dist/src/compiled/_chunks/node/auth-DMsLOrh7.js +0 -2
  157. package/dist/src/compiled/_chunks/node/version-BQBAL95V.js +0 -64
  158. package/dist/src/harness/agent-otel-provider.js +0 -1
  159. package/dist/src/harness/agent-trace-context-store.js +0 -1
  160. package/dist/src/harness/agent-trace-span-processor.js +0 -1
  161. package/dist/src/harness/local-instrumentation-runtime.js +0 -1
  162. package/dist/src/setup/integrations/channels/environment.js +0 -1
  163. package/dist/src/setup/integrations/channels/index.d.ts +0 -7
  164. package/dist/src/setup/integrations/channels/index.js +0 -1
  165. package/dist/src/setup/integrations/channels/runner.d.ts +0 -7
  166. package/dist/src/setup/integrations/channels/runner.js +0 -1
  167. package/dist/src/setup/integrations/channels/setup.d.ts +0 -130
  168. package/dist/src/setup/integrations/channels/setup.js +0 -2
  169. package/dist/src/setup/integrations/channels/slack.d.ts +0 -3
  170. package/dist/src/setup/integrations/channels/slack.js +0 -1
  171. package/dist/src/setup/integrations/channels/types.d.ts +0 -49
  172. package/dist/src/setup/integrations/channels/ui.js +0 -2
  173. package/dist/src/setup/integrations/channels/web.d.ts +0 -3
  174. package/dist/src/setup/integrations/channels/web.js +0 -1
  175. /package/dist/src/setup/integrations/{channels/types.js → types.js} +0 -0
  176. /package/dist/src/{harness → tracing}/local-instrumentation-runtime.d.ts +0 -0
  177. /package/dist/src/{harness → tracing}/local-trace-retention.d.ts +0 -0
  178. /package/dist/src/{harness → tracing}/local-trace-span-processor.d.ts +0 -0
@@ -0,0 +1 @@
1
+ import{createTraceStore}from"./trace-store.js";import{conversationItemLineCount}from"./trace-conversation.js";import{applyLoadedTrace,applyTraceList,createTraceViewerState,reduceTraceViewerKey}from"./trace-viewer-state.js";import{conversationSelectionText,panelSelectionText,renderTraceViewer}from"./trace-view.js";var TraceViewerSession=class{#e;#t;#n=createTraceViewerState();#r;#i;#a;#o;#s;#c=!1;#l=!1;#u=!1;#d={timelineViewportRows:0,panelViewportRows:0,panelTotalRows:0,contentWidth:0};constructor(t){this.#e=t,this.#t=t.store??createTraceStore({appRoot:t.appRoot}),t.sessionId!==void 0&&(this.#i=t.sessionId),t.reference!==void 0&&(this.#i=void 0,this.#n={...this.#n,notice:`No local trace matches "${t.reference}" yet.`})}start(){this.repaint(),this.#p(),this.#a=setInterval(()=>void this.#p(),1e3),this.#a.unref?.()}handleKey(e){if(this.#c)return`close`;e.type===`text`&&(e.value===`[`||e.value===`]`)&&(this.#r=void 0,this.#i=void 0);let t=this.#n.trace!==void 0,{state:n,effect:r,copySelection:i}=reduceTraceViewerKey(this.#n,e,this.#d);if(this.#n=n,r===`close`)return`close`;i!==void 0&&this.#f(i),this.repaint(),t&&n.trace===void 0&&this.#p()}repaint(){if(this.#c)return;let{width:e,height:n}=this.#e.dimensions(),r=renderTraceViewer(this.#n,{width:e,height:n,theme:this.#e.theme,tracingDisabled:this.#e.tracingDisabled,activeWindowEndNs:this.#g(),toast:this.#o});this.#d={timelineViewportRows:r.timelineViewportRows,panelViewportRows:r.panelViewportRows,panelTotalRows:r.panelTotalRows,contentWidth:r.contentWidth,conversationLineCounts:this.#n.conversationItems.map((e,n)=>conversationItemLineCount(e,r.contentWidth,this.#e.theme,this.#n.expandedItems.has(n)))},this.#e.paint(r.rows)}dispose(){this.#c=!0,this.#a!==void 0&&(clearInterval(this.#a),this.#a=void 0),this.#s!==void 0&&(clearTimeout(this.#s),this.#s=void 0)}#f(e){let t=e.region===`panel`?panelSelectionText(this.#n,this.#e.dimensions().width,this.#e.theme,e):conversationSelectionText(this.#n,this.#d.contentWidth,this.#e.theme,e);t.trim().length!==0&&(this.#e.copyText?.(t),this.#o=`Copied to clipboard`,this.#s!==void 0&&clearTimeout(this.#s),this.#s=setTimeout(()=>{this.#s=void 0,this.#o=void 0,this.repaint()},2e3),this.#s.unref?.())}async#p(){if(!this.#c){if(this.#l){this.#u=!0;return}this.#l=!0;try{do this.#u=!1,await this.#m();while(this.#u&&!this.#c)}finally{this.#l=!1}}}async#m(){try{let e=await this.#t.list(),t=this.#r,i=this.#e.reference;if(t===void 0&&i!==void 0&&(t=e.find(e=>e.traceId.startsWith(i))?.traceId),t===void 0&&this.#i!==void 0&&(t=await this.#h(e,this.#i)),this.#c)return;t!==void 0&&(this.#r=t);let a=e[applyTraceList(this.#n,e,{preferTraceId:t}).traceIndex]?.traceId,o=a===void 0?void 0:await this.#t.read(a);if(this.#c)return;let s=applyTraceList(this.#n,e,{preferTraceId:this.#r});this.#r!==void 0&&e[s.traceIndex]?.traceId===this.#r&&(this.#r=void 0,this.#i=void 0,s.notice?.startsWith(`No local trace matches`)&&(s={...s,notice:void 0})),e[s.traceIndex]?.traceId===a&&(s=applyLoadedTrace(s,o)),this.#n=s,this.repaint()}catch{}}async#h(e,t){for(let n of e){let e=await this.#t.read(n.traceId);if(this.#c)return;if(e?.sessionIds.includes(t))return n.traceId}}#g(){let e=this.#n.traces[this.#n.traceIndex];if(!(e===void 0||this.#n.trace===void 0)&&!(Date.now()-e.lastActivityMs>3e3))return BigInt(Date.now())*1000000n}};export{TraceViewerSession};
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Navigation state for the `/traces` conversation viewer — a pure reducer in
3
+ * the style of `select-state.ts`: keys go in, a new state (plus an optional
4
+ * `close` effect) comes out, and rendering lives elsewhere. Data updates
5
+ * from the store poller arrive through {@link applyTraceList}/
6
+ * {@link applyLoadedTrace} so a live trace can grow underneath an open
7
+ * viewer without losing the user's selection.
8
+ */
9
+ import type { LocalTrace, LocalTraceSpan } from "#tracing/local-trace-reader.js";
10
+ import type { ConversationItem } from "#cli/dev/tui/traces/trace-conversation.js";
11
+ import type { TraceStoreEntry } from "#cli/dev/tui/traces/trace-store.js";
12
+ import type { TerminalKey } from "#cli/dev/tui/stream-format.js";
13
+ /**
14
+ * Rows above the conversation body (padding, title, padding). Lives here
15
+ * rather than in the renderer because the mouse handlers need the same
16
+ * offset to map terminal rows to conversation lines.
17
+ */
18
+ export declare const TRACE_VIEWER_HEADER_ROWS = 3;
19
+ export interface TraceViewerState {
20
+ /** Stored traces, most recent activity first. */
21
+ readonly traces: readonly TraceStoreEntry[];
22
+ /** Index into `traces` of the trace being viewed. */
23
+ readonly traceIndex: number;
24
+ /** The loaded trace, or `undefined` while it has no readable spans. */
25
+ readonly trace?: LocalTrace;
26
+ /** The trace re-told as conversation items (system/user/assistant/tool cards). */
27
+ readonly conversationItems: readonly ConversationItem[];
28
+ /** Conversation cards toggled open (the system card starts collapsed). */
29
+ readonly expandedItems: ReadonlySet<number>;
30
+ /** Index into `conversationItems` of the highlighted card. */
31
+ readonly selectedRow: number;
32
+ /** First conversation line painted (line-level scroll offset). */
33
+ readonly scrollRow: number;
34
+ readonly panelOpen: boolean;
35
+ /** Whether ↑/↓ scroll the details drawer instead of moving the selection. */
36
+ readonly panelFocus: boolean;
37
+ readonly panelScroll: number;
38
+ /** One-line status for edge cases (trace pruned, tracing disabled, …). */
39
+ readonly notice?: string;
40
+ /** Mouse drag selection over the conversation or drawer, in line/column cells. */
41
+ readonly textSelection?: TextSelectionRange;
42
+ }
43
+ /**
44
+ * One end of a text selection: line index + 0-based column, both relative
45
+ * to the selection's region — absolute conversation lines for the cards,
46
+ * absolute detail lines (and panel-content columns) for the drawer.
47
+ */
48
+ export interface TextSelectionPoint {
49
+ readonly line: number;
50
+ readonly column: number;
51
+ }
52
+ /** A drag selection from anchor (press) to head (latest drag position). */
53
+ export interface TextSelectionRange {
54
+ readonly anchor: TextSelectionPoint;
55
+ readonly head: TextSelectionPoint;
56
+ /** The pointer moved off the anchor cell — release copies instead of clicking. */
57
+ readonly dragging: boolean;
58
+ /** Where the drag started; the selection stays in that region. */
59
+ readonly region: "conversation" | "panel";
60
+ }
61
+ /** Selection endpoints ordered top-to-bottom for rendering and extraction. */
62
+ export declare function orderedTextSelection(selection: TextSelectionRange): {
63
+ start: TextSelectionPoint;
64
+ end: TextSelectionPoint;
65
+ };
66
+ /** Viewport metrics the controller measures so scrolling math stays pure. */
67
+ export interface TraceViewerKeyEnvironment {
68
+ /** Body rows available to the conversation. */
69
+ readonly timelineViewportRows: number;
70
+ /** Body rows available to the detail panel. */
71
+ readonly panelViewportRows: number;
72
+ /** Total detail rows the panel would paint for the selected span. */
73
+ readonly panelTotalRows: number;
74
+ /** Body column width — card expandability is width-dependent. */
75
+ readonly contentWidth: number;
76
+ /**
77
+ * Rendered height of each conversation card. The conversation viewport
78
+ * scrolls by lines, not items — without these, long conversations overflow
79
+ * the screen with no way to reach lower cards.
80
+ */
81
+ readonly conversationLineCounts?: readonly number[];
82
+ }
83
+ export interface TraceViewerKeyResult {
84
+ readonly state: TraceViewerState;
85
+ readonly effect?: "close";
86
+ /** A completed drag selection to copy — the controller extracts and copies the text. */
87
+ readonly copySelection?: TextSelectionRange;
88
+ }
89
+ export declare function createTraceViewerState(): TraceViewerState;
90
+ export declare function selectedTraceViewerSpan(state: TraceViewerState): LocalTraceSpan | undefined;
91
+ /** The number of selectable cards. */
92
+ export declare function traceViewerItemCount(state: TraceViewerState): number;
93
+ /**
94
+ * Applies a fresh trace listing. The viewed trace is kept by identity across
95
+ * reorders (a live trace climbs the list as spans land); when it disappears,
96
+ * selection falls back to the newest trace. `preferTraceId` wins on first
97
+ * load — the viewer opens on the current chat session's trace.
98
+ */
99
+ export declare function applyTraceList(state: TraceViewerState, entries: readonly TraceStoreEntry[], options?: {
100
+ readonly preferTraceId?: string;
101
+ }): TraceViewerState;
102
+ /**
103
+ * Applies a freshly read trace. Selection follows the previously selected
104
+ * card (span id + kind — cards can share spans) so live growth never jumps
105
+ * the cursor; a pruned trace clears the view with a notice instead of
106
+ * pretending stale data is current.
107
+ */
108
+ export declare function applyLoadedTrace(state: TraceViewerState, trace: LocalTrace | undefined): TraceViewerState;
109
+ /** The one key handler: navigation, expansion, the details drawer, closing. */
110
+ export declare function reduceTraceViewerKey(state: TraceViewerState, key: TerminalKey, environment: TraceViewerKeyEnvironment): TraceViewerKeyResult;
@@ -0,0 +1 @@
1
+ import{buildConversationItems,conversationItemExpandable}from"#cli/dev/tui/traces/trace-conversation.js";const TRACE_VIEWER_HEADER_ROWS=3;function orderedTextSelection(e){let{anchor:t,head:n}=e;return t.line<n.line||t.line===n.line&&t.column<=n.column?{start:t,end:n}:{start:n,end:t}}function createTraceViewerState(){return{traces:[],traceIndex:0,conversationItems:[],expandedItems:new Set,selectedRow:0,scrollRow:0,panelOpen:!1,panelFocus:!1,panelScroll:0}}function selectedTraceViewerSpan(e){return e.conversationItems[e.selectedRow]?.span}function traceViewerItemCount(e){return e.conversationItems.length}function applyTraceList(e,t,n={}){let r=e.traces[e.traceIndex]?.traceId,i=n.preferTraceId===void 0?-1:t.findIndex(e=>e.traceId===n.preferTraceId);i===-1&&(i=r===void 0?-1:t.findIndex(e=>e.traceId===r)),i===-1&&(i=t.length===0?0:Math.max(0,e.traceIndex)),i>=t.length&&(i=Math.max(0,t.length-1));let a=t[i]?.traceId!==r,o=t.length===0?e.notice??`No local traces yet — chat with your agent and spans stream in live.`:e.notice?.startsWith(`No local traces`)?void 0:e.notice;return a?{...e,traces:t,traceIndex:i,notice:o,trace:void 0,conversationItems:[],expandedItems:new Set,selectedRow:0,scrollRow:0,panelOpen:!1,panelFocus:!1,panelScroll:0,textSelection:void 0}:{...e,traces:t,traceIndex:i,notice:o}}function applyLoadedTrace(t,n){if(n===void 0)return t.trace===void 0?t:{...t,trace:void 0,conversationItems:[],selectedRow:0,scrollRow:0,panelOpen:!1,panelFocus:!1,panelScroll:0,notice:`This trace was pruned — pick another with [ and ].`};let r=selectedTraceViewerSpan(t)?.spanId,i=t.conversationItems[t.selectedRow]?.kind,a=buildConversationItems(n),o;if(r===void 0)o=t.selectedRow;else{let matches=e=>e.span.spanId===r&&e.kind===i,e=t.conversationItems.slice(0,t.selectedRow).filter(matches).length,n=a.flatMap((e,t)=>matches(e)?[t]:[]);o=n[Math.min(e,n.length-1)]??-1}o===-1&&(o=Math.min(t.selectedRow,a.length-1)),o<0&&(o=0);let s=t.notice?.startsWith(`This trace was pruned`)?void 0:t.notice;return{...t,trace:n,conversationItems:a,selectedRow:o,notice:s}}function reduceTraceViewerKey(e,n,r){let i=Math.max(0,r.panelTotalRows-r.panelViewportRows),a=e.panelScroll>i?{...e,panelScroll:i}:e;switch(n.type){case`escape`:return a.textSelection===void 0?a.panelFocus?{state:{...a,panelFocus:!1}}:a.panelOpen?{state:{...a,panelOpen:!1,panelScroll:0}}:{state:a,effect:`close`}:{state:{...a,textSelection:void 0}};case`ctrl-c`:return{state:a,effect:`close`};case`mouse`:{if(n.action===`press`&&(n.button===64||n.button===65)){let e=n.button===64?-3:3;if(a.panelOpen&&n.x-1>=r.contentWidth){let t=Math.min(i,Math.max(0,a.panelScroll+e));return{state:{...a,panelScroll:t}}}return{state:scrollConversation(a,e,r)}}if(n.action===`press`&&n.button===0){let e=selectionCellAt(a,r,n.x,n.y);return e===void 0?{state:{...a,textSelection:void 0}}:{state:{...a,textSelection:{anchor:e.point,head:e.point,dragging:!1,region:e.region}}}}if(n.action===`press`&&n.button===32){if(a.textSelection===void 0)return{state:a};let e=a.textSelection.region===`panel`?panelCellAt(a,r,n.x,n.y):conversationCellAt(a,r,n.x,n.y);if(e===void 0)return{state:a};let t=a.textSelection.dragging||e.line!==a.textSelection.anchor.line||e.column!==a.textSelection.anchor.column;return{state:{...a,textSelection:{...a.textSelection,head:e,dragging:t}}}}if(n.action!==`release`||n.button!==0)return{state:a};let e=a.textSelection,o={...a,textSelection:void 0};if(e!==void 0&&e.dragging)return{state:o,copySelection:e};let s=n.y-1-3;if(s<0)return{state:o};let c=conversationItemAtBodyRow(o,r,s);if(c===void 0)return{state:o};let l=o.conversationItems[c],u=new Set(o.expandedItems);return l!==void 0&&!u.has(c)&&conversationItemExpandable(l,r.contentWidth)?u.add(c):u.delete(c),{state:{...o,selectedRow:c,expandedItems:u}}}case`enter`:return traceViewerItemCount(a)===0?{state:a}:a.panelOpen?{state:{...a,panelOpen:!1,panelFocus:!1}}:{state:{...a,panelOpen:!0,panelScroll:0}};case`tab`:return a.panelOpen?{state:{...a,panelFocus:!a.panelFocus}}:{state:a};case`up`:case`ctrl-p`:return a.panelFocus?{state:{...a,panelScroll:Math.max(0,a.panelScroll-1)}}:{state:moveSelection(a,-1,r)};case`down`:case`ctrl-n`:return a.panelFocus?{state:{...a,panelScroll:Math.min(i,a.panelScroll+1)}}:{state:moveSelection(a,1,r)};case`home`:return a.panelFocus?{state:{...a,panelScroll:0}}:{state:moveSelection(a,-a.selectedRow,r)};case`end`:return a.panelFocus?{state:{...a,panelScroll:i}}:{state:moveSelection(a,traceViewerItemCount(a)-1-a.selectedRow,r)};case`left`:case`right`:{if(a.panelFocus)return{state:a};let e=a.conversationItems[a.selectedRow];if(e===void 0||!a.expandedItems.has(a.selectedRow)&&!conversationItemExpandable(e,r.contentWidth))return{state:a};let n=new Set(a.expandedItems);n.has(a.selectedRow)?n.delete(a.selectedRow):n.add(a.selectedRow);let i={...a,expandedItems:n};return{state:{...i,scrollRow:conversationScrollRow(i,r)}}}case`text`:return n.framing===`bracketed-paste`?{state:a}:n.value===`q`?{state:a,effect:`close`}:n.value===`[`||n.value===`]`?{state:switchTrace(a,n.value===`[`?1:-1)}:{state:a};default:return{state:a}}}function switchTrace(e,t){if(e.traces.length===0)return e;let n=Math.min(Math.max(0,e.traceIndex+t),e.traces.length-1);return n===e.traceIndex?e:{...e,traceIndex:n,trace:void 0,conversationItems:[],expandedItems:new Set,selectedRow:0,scrollRow:0,panelOpen:!1,panelFocus:!1,panelScroll:0,textSelection:void 0}}function moveSelection(e,t,n){let r=traceViewerItemCount(e);if(r===0)return e;let i=Math.min(Math.max(0,e.selectedRow+t),r-1);return{...e,selectedRow:i,panelScroll:0,scrollRow:conversationScrollRow({...e,selectedRow:i},n)}}function conversationScrollRow(e,t){let n=t.conversationLineCounts;if(n===void 0)return e.scrollRow;let r=t.timelineViewportRows,i=0;for(let t=0;t<e.selectedRow;t+=1)i+=(n[t]??1)+1;let a=n[e.selectedRow]??1,o=i+a;return e.scrollRow<=i&&o<=e.scrollRow+r?e.scrollRow:a>r?i:Math.max(0,o-r)}function conversationCellAt(e,t,n,r){let i=t.conversationLineCounts;if(i===void 0||e.conversationItems.length===0)return;let a=r-1-3;if(a<0||a>=t.timelineViewportRows)return;let o=n-1;if(o<0||o>=t.contentWidth)return;let s=0;for(let e of i)s+=e+1;let c=e.scrollRow+a;if(!(c>=s))return{column:o,line:c}}function panelCellAt(e,t,n,r){if(!e.panelOpen||t.panelTotalRows===0)return;let i=r-1-3;if(i<0||i>=t.panelViewportRows)return;let a=n-1-(t.contentWidth+1);if(a<0)return;let o=e.panelScroll+i;if(!(o>=t.panelTotalRows))return{column:a,line:o}}function selectionCellAt(e,t,n,r){let i=conversationCellAt(e,t,n,r);if(i!==void 0)return{point:i,region:`conversation`};let a=panelCellAt(e,t,n,r);if(a!==void 0)return{point:a,region:`panel`}}function conversationItemAtBodyRow(e,t,n){let r=t.conversationLineCounts;if(r===void 0)return;let i=e.scrollRow+n,a=0;for(let t=0;t<e.conversationItems.length;t+=1){let e=(r[t]??1)+1;if(i<a+e)return t;a+=e}}function scrollConversation(e,t,n){let r=n.conversationLineCounts;if(r===void 0||e.conversationItems.length===0)return e;let i=n.timelineViewportRows,a=0;for(let e of r)a+=e+1;let o=Math.max(0,a-i),s=Math.min(o,Math.max(0,e.scrollRow+t));return s===e.scrollRow?e:{...e,scrollRow:s}}export{TRACE_VIEWER_HEADER_ROWS,applyLoadedTrace,applyTraceList,createTraceViewerState,orderedTextSelection,reduceTraceViewerKey,selectedTraceViewerSpan,traceViewerItemCount};
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Alternate-screen mode for full-screen modal views (the `/traces` viewer).
3
+ *
4
+ * The dev TUI's transcript deliberately streams into native scrollback (see
5
+ * `live-region.ts`), but a modal viewer wants the whole terminal without
6
+ * fighting the transcript's repaint cycle. Entering the alternate buffer
7
+ * gives the viewer a blank screen it fully owns; leaving restores the
8
+ * transcript exactly where the user left it.
9
+ *
10
+ * Like {@link LiveRegion}, writes go through the terminal's original `write`
11
+ * captured at construction so foreign-output capture never sees the paints.
12
+ */
13
+ export interface AltScreenOutput {
14
+ write(chunk: string): boolean;
15
+ }
16
+ export declare class AltScreen {
17
+ #private;
18
+ constructor(output: AltScreenOutput);
19
+ get active(): boolean;
20
+ /** Switches to the alternate buffer, hides the cursor, enables SGR mouse. */
21
+ enter(): void;
22
+ /**
23
+ * Paints a full-screen frame. Each row must already be styled and fit
24
+ * within the terminal width (one row == one screen line); rows beyond the
25
+ * terminal height are dropped. The screen is erased before the rows are
26
+ * written — terminals only erase via explicit sequences, so a shrinking
27
+ * frame would otherwise leave stale text behind.
28
+ *
29
+ * Rows are placed with absolute cursor positions rather than `\n`: a row
30
+ * filling the last column leaves terminals in an autowrap-pending state
31
+ * whose interaction with `\n` varies (immediate-wrap terminals insert a
32
+ * phantom line). Absolute positioning is immune to all of it.
33
+ */
34
+ paint(rows: readonly string[], height: number): void;
35
+ /**
36
+ * Writes an out-of-band sequence (e.g. an OSC 52 clipboard write) through
37
+ * the same captured write the paints use, bypassing foreign-output capture.
38
+ */
39
+ writeRaw(chunk: string): void;
40
+ /** Restores the main screen, cursor, and mouse reporting. */
41
+ exit(): void;
42
+ }
@@ -0,0 +1 @@
1
+ var AltScreen=class{#e;#t=!1;constructor(e){this.#e=e.write.bind(e)}get active(){return this.#t}enter(){this.#t||=(this.#e(`\x1B[?1049h\x1B[?25l\x1B[?1002h\x1B[?1006h`),!0)}paint(e,t){if(!this.#t)return;let n=e.slice(0,Math.max(0,t)).map((e,t)=>`[${t+1}H${e}`).join(``);this.#e(`[?2026h${n}[?2026l`)}writeRaw(e){this.#t&&this.#e(e)}exit(){this.#t&&=(this.#e(`\x1B[?1006l\x1B[?1002l\x1B[?25h\x1B[?1049l`),!1)}};export{AltScreen};
@@ -29,6 +29,10 @@ export declare function offsetAtVisibleColumn(input: string, column: number): nu
29
29
  * Word-wraps a single logical line to `width` visible columns, preserving
30
30
  * ANSI styling and never splitting inside an escape sequence. Breaks on the
31
31
  * last space that fits; falls back to a hard cut for unbreakable runs.
32
+ *
33
+ * Tokenizes once and walks the units with a cursor, so a long unbroken
34
+ * payload wraps in linear time instead of re-measuring the remainder on
35
+ * every emitted row.
32
36
  */
33
37
  export declare function wrapVisibleLine(line: string, width: number): string[];
34
38
  export declare function codePointWidth(codePoint: number): number;
@@ -1 +1 @@
1
- import{graphemes}from"#shared/text-boundaries.js";const ansiPattern=RegExp(`\x1B\\[[0-?]*[ -/]*[@-~]`,`g`),ansiPrefixPattern=RegExp(`^\x1B\\[[0-?]*[ -/]*[@-~]`),emojiPresentationPattern=/\p{Emoji_Presentation}/u,extendedPictographicPattern=/\p{Extended_Pictographic}/u,keycapPattern=/^[#*0-9]\u{fe0f}?\u{20e3}$/u;function stripAnsi(e){return stripTerminalControls(e.replaceAll(ansiPattern,``))}function stripTerminalControls(e){let t=``,n=0;for(;n<e.length;){let r=e.codePointAt(n);if(r==null)break;let i=String.fromCodePoint(r);n+=i.length,!isUnsafeTerminalControlCodePoint(r)&&(t+=i)}return t}function visibleLength(e){let t=0;for(let n of terminalTextUnits(e))t+=n.width;return t}function sliceVisible(e,t){if(t<=0)return``;let n=``,r=0,i=terminalTextUnits(e),a=0;for(;a<i.length&&r<t;){let e=i[a];if(e.width>0&&r+e.width>t)break;n+=e.text,r+=e.width,a+=1}for(;i[a]?.ansi===!0;)n+=i[a].text,a+=1;return n}function clipVisible(e,t){if(visibleLength(e)<=t)return e;let n=sliceVisible(e,t);return n.includes(`\x1B`)?`${n}`:n}function inputTextWidth(t){let n=0;for(let r of graphemes(t))n+=terminalGraphemeWidth(r.text);return n}function renderInputText(e){return e.replaceAll(` `,` `)}function renderInputWithBlockCursor(e){let t=e.render??renderInputText,n=e.under.length>0?e.under:` `,r=e.visible?e.inverse(renderInputText(n)):t(n);return`${t(e.before)}${r}${t(e.after)}`}function offsetAtVisibleColumn(t,n){if(n<=0)return 0;let r=0;for(let i of graphemes(t)){let e=r+terminalGraphemeWidth(i.text);if(e>n)return i.start;if(e===n)return i.end;r=e}return t.length}function terminalGraphemeWidth(e){let t=0;for(let n of e){let e=n.codePointAt(0);e!==void 0&&(t=Math.max(t,codePointWidth(e)))}return emojiPresentationPattern.test(e)||keycapPattern.test(e)||e.includes(`️`)&&extendedPictographicPattern.test(e)?Math.max(2,t):t}function terminalTextUnits(r){let i=[],a=0;for(;a<r.length;){let o=r.slice(a),s=o.match(ansiPrefixPattern);if(s!==null){i.push({text:s[0],width:0,ansi:!0}),a+=s[0].length;continue}let c=o.search(ansiPattern),l=o.slice(0,c===-1?o.length:c);for(let t of graphemes(l))i.push({text:t.text,width:terminalGraphemeWidth(t.text),ansi:!1});a+=l.length}return i}function wrapVisibleLine(e,t){if(t<=0)return[e];if(e.length===0)return[``];let n=[],r=e;for(;visibleLength(r)>t;){let e=findVisibleBreakPoint(r,t);n.push(r.slice(0,e).trimEnd()),r=r.slice(e).trimStart()}return(r.length>0||n.length===0)&&n.push(r),n}function findVisibleBreakPoint(e,t){let n=sliceVisible(e,t+1).lastIndexOf(` `);if(n>0)return n;let r=sliceVisible(e,t);if(visibleLength(r)>0)return r.length;let i=0,a=!1;for(let t of terminalTextUnits(e)){if(a&&t.width>0)return i;i+=t.text.length,t.width>0&&(a=!0)}return i}function codePointWidth(e){return e===9?4:e<32||e>=127&&e<160||isZeroWidthCodePoint(e)?0:isWideCodePoint(e)?2:1}function isUnsafeTerminalControlCodePoint(e){return e>=0&&e<=8||e>=11&&e<=31||e>=127&&e<=159}function isZeroWidthCodePoint(e){return e>=768&&e<=879||e>=1155&&e<=1161||e>=1425&&e<=1469||e===1471||e>=1473&&e<=1474||e>=1476&&e<=1477||e===1479||e>=1552&&e<=1562||e>=1611&&e<=1631||e===1648||e>=1750&&e<=1756||e>=1759&&e<=1764||e>=1767&&e<=1768||e>=1770&&e<=1773||e===1809||e>=1840&&e<=1866||e>=1958&&e<=1968||e>=2027&&e<=2035||e>=2070&&e<=2073||e>=2075&&e<=2083||e>=2085&&e<=2087||e>=2089&&e<=2093||e>=2137&&e<=2139||e>=2259&&e<=2306||e===2362||e===2364||e>=2369&&e<=2376||e===2381||e>=2385&&e<=2391||e===8205||e>=65024&&e<=65039||e>=917760&&e<=917999}function isWideCodePoint(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}export{ansiPattern,ansiPrefixPattern,clipVisible,codePointWidth,inputTextWidth,offsetAtVisibleColumn,renderInputText,renderInputWithBlockCursor,sliceVisible,stripAnsi,stripTerminalControls,visibleLength,wrapVisibleLine};
1
+ import{graphemes}from"#shared/text-boundaries.js";const ansiPattern=RegExp(`\x1B\\[[0-?]*[ -/]*[@-~]`,`g`),ansiPrefixPattern=RegExp(`^\x1B\\[[0-?]*[ -/]*[@-~]`),emojiPresentationPattern=/\p{Emoji_Presentation}/u,extendedPictographicPattern=/\p{Extended_Pictographic}/u,keycapPattern=/^[#*0-9]\u{fe0f}?\u{20e3}$/u;function stripAnsi(e){return stripTerminalControls(e.replaceAll(ansiPattern,``))}function stripTerminalControls(e){let t=``,n=0;for(;n<e.length;){let r=e.codePointAt(n);if(r==null)break;let i=String.fromCodePoint(r);n+=i.length,!isUnsafeTerminalControlCodePoint(r)&&(t+=i)}return t}function visibleLength(e){let t=0;for(let n of terminalTextUnits(e))t+=n.width;return t}function sliceVisible(e,t){return sliceUnits(terminalTextUnits(e),0,t)}function sliceUnits(e,t,n){if(n<=0)return``;let r=``,i=0,a=t;for(;a<e.length&&i<n;){let t=e[a];if(t.width>0&&i+t.width>n)break;r+=t.text,i+=t.width,a+=1}for(;e[a]?.ansi===!0;)r+=e[a].text,a+=1;return r}function clipVisible(e,t){if(visibleLength(e)<=t)return e;let n=sliceVisible(e,t);return n.includes(`\x1B`)?`${n}`:n}function inputTextWidth(t){let n=0;for(let r of graphemes(t))n+=terminalGraphemeWidth(r.text);return n}function renderInputText(e){return e.replaceAll(` `,` `)}function renderInputWithBlockCursor(e){let t=e.render??renderInputText,n=e.under.length>0?e.under:` `,r=e.visible?e.inverse(renderInputText(n)):t(n);return`${t(e.before)}${r}${t(e.after)}`}function offsetAtVisibleColumn(t,n){if(n<=0)return 0;let r=0;for(let i of graphemes(t)){let e=r+terminalGraphemeWidth(i.text);if(e>n)return i.start;if(e===n)return i.end;r=e}return t.length}function terminalGraphemeWidth(e){let t=0;for(let n of e){let e=n.codePointAt(0);e!==void 0&&(t=Math.max(t,codePointWidth(e)))}return emojiPresentationPattern.test(e)||keycapPattern.test(e)||e.includes(`️`)&&extendedPictographicPattern.test(e)?Math.max(2,t):t}function terminalTextUnits(r){let i=[],a=0;for(;a<r.length;){let o=r.slice(a),s=o.match(ansiPrefixPattern);if(s!==null){i.push({text:s[0],width:0,ansi:!0}),a+=s[0].length;continue}let c=o.search(ansiPattern),l=o.slice(0,c===-1?o.length:c);for(let t of graphemes(l))i.push({text:t.text,width:terminalGraphemeWidth(t.text),ansi:!1});a+=l.length}return i}function wrapVisibleLine(e,t){if(t<=0)return[e];if(e.length===0)return[``];let n=terminalTextUnits(e),r=0;for(let e of n)r+=e.width;let i=[],a=0,o=0,advanceTo=e=>{for(;o<e&&a<n.length;){let e=n[a];o+=e.text.length,r-=e.width,a+=1}};for(;r>t;){let s=findVisibleBreakPoint(n,a,t);for(i.push(e.slice(o,o+s).trimEnd()),advanceTo(o+s);a<n.length;){let e=n[a];if(e.ansi||e.text.trimStart().length>0)break;o+=e.text.length,r-=e.width,a+=1}}let s=e.slice(o);return(s.length>0||i.length===0)&&i.push(s),i}function findVisibleBreakPoint(e,t,n){let r=sliceUnits(e,t,n+1).lastIndexOf(` `);if(r>0)return r;let i=sliceUnits(e,t,n);if(visibleLength(i)>0)return i.length;let a=0,o=!1;for(let n=t;n<e.length;n+=1){let t=e[n];if(o&&t.width>0)return a;a+=t.text.length,t.width>0&&(o=!0)}return a}function codePointWidth(e){return e===9?4:e<32||e>=127&&e<160||isZeroWidthCodePoint(e)?0:isWideCodePoint(e)?2:1}function isUnsafeTerminalControlCodePoint(e){return e>=0&&e<=8||e>=11&&e<=31||e>=127&&e<=159}function isZeroWidthCodePoint(e){return e>=768&&e<=879||e>=1155&&e<=1161||e>=1425&&e<=1469||e===1471||e>=1473&&e<=1474||e>=1476&&e<=1477||e===1479||e>=1552&&e<=1562||e>=1611&&e<=1631||e===1648||e>=1750&&e<=1756||e>=1759&&e<=1764||e>=1767&&e<=1768||e>=1770&&e<=1773||e===1809||e>=1840&&e<=1866||e>=1958&&e<=1968||e>=2027&&e<=2035||e>=2070&&e<=2073||e>=2075&&e<=2083||e>=2085&&e<=2087||e>=2089&&e<=2093||e>=2137&&e<=2139||e>=2259&&e<=2306||e===2362||e===2364||e>=2369&&e<=2376||e===2381||e>=2385&&e<=2391||e===8205||e>=65024&&e<=65039||e>=917760&&e<=917999}function isWideCodePoint(e){return e>=4352&&(e<=4447||e===9001||e===9002||e>=11904&&e<=42191&&e!==12351||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65135||e>=65280&&e<=65376||e>=65504&&e<=65510||e>=127744&&e<=128591||e>=129280&&e<=129535||e>=131072&&e<=262141)}export{ansiPattern,ansiPrefixPattern,clipVisible,codePointWidth,inputTextWidth,offsetAtVisibleColumn,renderInputText,renderInputWithBlockCursor,sliceVisible,stripAnsi,stripTerminalControls,visibleLength,wrapVisibleLine};
@@ -21,6 +21,7 @@
21
21
  "@opentelemetry/api": "1.9.1",
22
22
  "@opentelemetry/otlp-transformer": "0.214.0",
23
23
  "@ai-sdk/otel": "1.0.34",
24
+ "@photon-ai/chat-adapter-imessage": "3.2.0",
24
25
  "picocolors": "1.1.1",
25
26
  "@ai-sdk/provider": "4.0.4",
26
27
  "@ai-sdk/provider-utils": "5.0.13",
@@ -41,5 +42,5 @@
41
42
  "zod": "4.4.3",
42
43
  "zod-validation-error": "5.0.0"
43
44
  },
44
- "scriptHash": "c8dcdc1ce85c38480a951ca2e578e345435f0e9c18f9c29588d0bd7fb7d96afc"
45
+ "scriptHash": "9c219617f5c25926d0e6321616465d1c3871cb3fa4adfb86f25fdf96c991076e"
45
46
  }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Photon
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,3 @@
1
+ export type AppUrl = unknown;
2
+ export type ContentBuilder = unknown;
3
+ export type SpectrumInstance = unknown;
@@ -0,0 +1,2 @@
1
+ export type CustomizedMiniAppInput = unknown;
2
+ export type IMessageMessageEffect = string;