@agent-native/core 0.12.0 → 0.12.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA0BD,+BAA+B;AAC/B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAoC9D"}
1
+ {"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,yCAAyC;IACzC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,kFAAkF;IAClF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6FAA6F;IAC7F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA0BD,+BAA+B;AAC/B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAyC9D"}
@@ -67,6 +67,9 @@ export function sendToAgentChat(opts) {
67
67
  // listens for this event; the parent-frame case is handled by whoever
68
68
  // owns that sidebar receiving the postMessage above.
69
69
  if (opts.openSidebar !== false && !opts.background) {
70
+ window.dispatchEvent(new CustomEvent("agent-panel:set-mode", {
71
+ detail: { mode: "chat" },
72
+ }));
70
73
  window.dispatchEvent(new CustomEvent("agent-panel:open"));
71
74
  }
72
75
  return tabId;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAqD5B,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAEzD;;;GAGG;AACH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3C,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QACD,IACE,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,yBAAyB;YAC9C,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,qBAAqB,EAC1C,CAAC;YACD,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,yBAAyB,EAAE;gBACzC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI;aAC7C,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;IACzE,IAAI,aAAa,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACxC,iBAAiB,CAAC;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE;KACzB,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,aAAa,IAAI,gBAAgB,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU;QACvB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;YACxB,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,MAAM,CAAC;IACb,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;QACxB,CAAC,CAAC,cAAc,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE1C,yEAAyE;IACzE,qEAAqE;IACrE,sEAAsE;IACtE,qDAAqD;IACrD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACnD,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/**\n * Agent Chat Bridge (browser)\n *\n * Sends structured messages to the agent chat from UI interactions.\n * Messages are sent via postMessage to the parent window (or self if top-level).\n * Builder frames are special: code requests go to Builder, but content prompts\n * stay inside the embedded app so its own AgentSidebar can receive them.\n */\n\nimport { getFrameOrigin, isTrustedFrameMessage } from \"./frame.js\";\nimport {\n isInBuilderFrame,\n isTrustedBuilderMessage,\n sendToBuilderChat,\n} from \"./builder-frame.js\";\n\nexport interface AgentChatMessage {\n /** The visible prompt message sent to the chat */\n message: string;\n /** Hidden context appended to the message (not shown in chat UI) */\n context?: string;\n /** true = auto-submit, false = prefill only, omit = use project setting */\n submit?: boolean;\n /** Optional project slug for structured context */\n projectSlug?: string;\n /** Optional preset name for downstream consumers */\n preset?: string;\n /** Optional reference image paths */\n referenceImagePaths?: string[];\n /** Optional uploaded reference images */\n uploadedReferenceImages?: string[];\n /** Stable tab identifier — auto-generated if omitted */\n tabId?: string;\n /**\n * Message routing type:\n * - \"content\" (default): stays in the embedded app agent for content/data operations\n * - \"code\": routes to the code editing frame (local dev frame or Builder.io)\n *\n * When type is \"code\" and no frame is connected, a dialog is shown.\n * `requiresCode: true` is treated as `type: \"code\"` for backward compatibility.\n */\n type?: \"content\" | \"code\";\n /** @deprecated Use `type: \"code\"` instead. If true, treated as `type: \"code\"`. */\n requiresCode?: boolean;\n /** Model preference for this sub-agent (e.g. \"claude-haiku-4-5\"). Uses default if omitted */\n model?: string;\n /** Scoped system prompt additions for this sub-agent */\n instructions?: string;\n /**\n * Whether to open the agent sidebar if it's currently hidden.\n * Defaults to true — submitting a chat should make the response visible.\n * Pass `false` for background/silent sends that shouldn't pop the UI open.\n */\n openSidebar?: boolean;\n /**\n * When true, opens a new chat tab before sending the message.\n * Use for creation requests (create tool, dashboard, etc.) that deserve\n * their own isolated thread rather than cluttering an existing conversation.\n */\n newTab?: boolean;\n /**\n * When true with newTab, creates the tab in the background without\n * focusing it or opening the sidebar. The message runs silently.\n */\n background?: boolean;\n}\n\nconst AGENT_CHAT_MESSAGE_TYPE = \"agentNative.submitChat\";\n\n/**\n * Listen for chatRunning messages from the frame (postMessage)\n * and re-dispatch as a CustomEvent so hooks like useAgentChatGenerating() work.\n */\nif (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", (event) => {\n if (!isTrustedFrameMessage(event) && !isTrustedBuilderMessage(event)) {\n return;\n }\n if (\n event.data?.type === \"agentNative.chatRunning\" ||\n event.data?.type === \"builder.chatRunning\"\n ) {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: event.data.detail ?? event.data.data,\n }),\n );\n }\n });\n}\n\n/** Generate a unique tab ID */\nexport function generateTabId(): string {\n return `chat-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/**\n * Send a message to the agent chat via postMessage.\n */\n/**\n * Send a message to the agent chat via postMessage.\n * Returns the stable tabId for tracking this chat run.\n */\nexport function sendToAgentChat(opts: AgentChatMessage): string {\n const tabId = opts.tabId ?? generateTabId();\n const isCodeRequest = opts.type === \"code\" || opts.requiresCode === true;\n if (isCodeRequest && isInBuilderFrame()) {\n sendToBuilderChat({\n message: opts.message,\n context: opts.context,\n submit: opts.submit,\n });\n return tabId;\n }\n\n const payload = {\n type: AGENT_CHAT_MESSAGE_TYPE,\n data: { ...opts, tabId },\n };\n\n const targetSelf = !isCodeRequest && isInBuilderFrame();\n const target = targetSelf\n ? window\n : window.parent !== window\n ? window.parent\n : window;\n const targetOrigin = targetSelf\n ? window.location.origin\n : getFrameOrigin() || window.location.origin;\n target.postMessage(payload, targetOrigin);\n\n // Surface the sidebar so the user sees the response. Callers can opt out\n // via `openSidebar: false` for background/silent sends. AgentSidebar\n // listens for this event; the parent-frame case is handled by whoever\n // owns that sidebar receiving the postMessage above.\n if (opts.openSidebar !== false && !opts.background) {\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n return tabId;\n}\n"]}
1
+ {"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/client/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAqD5B,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAEzD;;;GAGG;AACH,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAC3C,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QACD,IACE,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,yBAAyB;YAC9C,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,qBAAqB,EAC1C,CAAC;YACD,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,yBAAyB,EAAE;gBACzC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI;aAC7C,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+BAA+B;AAC/B,MAAM,UAAU,aAAa;IAC3B,OAAO,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC;AAED;;GAEG;AACH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;IACzE,IAAI,aAAa,IAAI,gBAAgB,EAAE,EAAE,CAAC;QACxC,iBAAiB,CAAC;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,uBAAuB;QAC7B,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE;KACzB,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,aAAa,IAAI,gBAAgB,EAAE,CAAC;IACxD,MAAM,MAAM,GAAG,UAAU;QACvB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;YACxB,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,MAAM,CAAC;IACb,MAAM,YAAY,GAAG,UAAU;QAC7B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;QACxB,CAAC,CAAC,cAAc,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE1C,yEAAyE;IACzE,qEAAqE;IACrE,sEAAsE;IACtE,qDAAqD;IACrD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QACnD,MAAM,CAAC,aAAa,CAClB,IAAI,WAAW,CAAC,sBAAsB,EAAE;YACtC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SACzB,CAAC,CACH,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/**\n * Agent Chat Bridge (browser)\n *\n * Sends structured messages to the agent chat from UI interactions.\n * Messages are sent via postMessage to the parent window (or self if top-level).\n * Builder frames are special: code requests go to Builder, but content prompts\n * stay inside the embedded app so its own AgentSidebar can receive them.\n */\n\nimport { getFrameOrigin, isTrustedFrameMessage } from \"./frame.js\";\nimport {\n isInBuilderFrame,\n isTrustedBuilderMessage,\n sendToBuilderChat,\n} from \"./builder-frame.js\";\n\nexport interface AgentChatMessage {\n /** The visible prompt message sent to the chat */\n message: string;\n /** Hidden context appended to the message (not shown in chat UI) */\n context?: string;\n /** true = auto-submit, false = prefill only, omit = use project setting */\n submit?: boolean;\n /** Optional project slug for structured context */\n projectSlug?: string;\n /** Optional preset name for downstream consumers */\n preset?: string;\n /** Optional reference image paths */\n referenceImagePaths?: string[];\n /** Optional uploaded reference images */\n uploadedReferenceImages?: string[];\n /** Stable tab identifier — auto-generated if omitted */\n tabId?: string;\n /**\n * Message routing type:\n * - \"content\" (default): stays in the embedded app agent for content/data operations\n * - \"code\": routes to the code editing frame (local dev frame or Builder.io)\n *\n * When type is \"code\" and no frame is connected, a dialog is shown.\n * `requiresCode: true` is treated as `type: \"code\"` for backward compatibility.\n */\n type?: \"content\" | \"code\";\n /** @deprecated Use `type: \"code\"` instead. If true, treated as `type: \"code\"`. */\n requiresCode?: boolean;\n /** Model preference for this sub-agent (e.g. \"claude-haiku-4-5\"). Uses default if omitted */\n model?: string;\n /** Scoped system prompt additions for this sub-agent */\n instructions?: string;\n /**\n * Whether to open the agent sidebar if it's currently hidden.\n * Defaults to true — submitting a chat should make the response visible.\n * Pass `false` for background/silent sends that shouldn't pop the UI open.\n */\n openSidebar?: boolean;\n /**\n * When true, opens a new chat tab before sending the message.\n * Use for creation requests (create tool, dashboard, etc.) that deserve\n * their own isolated thread rather than cluttering an existing conversation.\n */\n newTab?: boolean;\n /**\n * When true with newTab, creates the tab in the background without\n * focusing it or opening the sidebar. The message runs silently.\n */\n background?: boolean;\n}\n\nconst AGENT_CHAT_MESSAGE_TYPE = \"agentNative.submitChat\";\n\n/**\n * Listen for chatRunning messages from the frame (postMessage)\n * and re-dispatch as a CustomEvent so hooks like useAgentChatGenerating() work.\n */\nif (typeof window !== \"undefined\") {\n window.addEventListener(\"message\", (event) => {\n if (!isTrustedFrameMessage(event) && !isTrustedBuilderMessage(event)) {\n return;\n }\n if (\n event.data?.type === \"agentNative.chatRunning\" ||\n event.data?.type === \"builder.chatRunning\"\n ) {\n window.dispatchEvent(\n new CustomEvent(\"agentNative.chatRunning\", {\n detail: event.data.detail ?? event.data.data,\n }),\n );\n }\n });\n}\n\n/** Generate a unique tab ID */\nexport function generateTabId(): string {\n return `chat-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n/**\n * Send a message to the agent chat via postMessage.\n */\n/**\n * Send a message to the agent chat via postMessage.\n * Returns the stable tabId for tracking this chat run.\n */\nexport function sendToAgentChat(opts: AgentChatMessage): string {\n const tabId = opts.tabId ?? generateTabId();\n const isCodeRequest = opts.type === \"code\" || opts.requiresCode === true;\n if (isCodeRequest && isInBuilderFrame()) {\n sendToBuilderChat({\n message: opts.message,\n context: opts.context,\n submit: opts.submit,\n });\n return tabId;\n }\n\n const payload = {\n type: AGENT_CHAT_MESSAGE_TYPE,\n data: { ...opts, tabId },\n };\n\n const targetSelf = !isCodeRequest && isInBuilderFrame();\n const target = targetSelf\n ? window\n : window.parent !== window\n ? window.parent\n : window;\n const targetOrigin = targetSelf\n ? window.location.origin\n : getFrameOrigin() || window.location.origin;\n target.postMessage(payload, targetOrigin);\n\n // Surface the sidebar so the user sees the response. Callers can opt out\n // via `openSidebar: false` for background/silent sends. AgentSidebar\n // listens for this event; the parent-frame case is handled by whoever\n // owns that sidebar receiving the postMessage above.\n if (opts.openSidebar !== false && !opts.background) {\n window.dispatchEvent(\n new CustomEvent(\"agent-panel:set-mode\", {\n detail: { mode: \"chat\" },\n }),\n );\n window.dispatchEvent(new CustomEvent(\"agent-panel:open\"));\n }\n return tabId;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceEditor.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourceEditor.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAiBnD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,qFAAqF;IACrF,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC;IAC9C,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAC;IACnE,6DAA6D;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAiiCD,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,kBAAkB,EAClB,WAAW,GACZ,EAAE,mBAAmB,2CAuLrB"}
1
+ {"version":3,"file":"ResourceEditor.d.ts","sourceRoot":"","sources":["../../../src/client/resources/ResourceEditor.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAiBnD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,qFAAqF;IACrF,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC;IAC9C,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAC;IACnE,6DAA6D;IAC7D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAkiCD,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,kBAAkB,EAClB,WAAW,GACZ,EAAE,mBAAmB,2CAuLrB"}
@@ -546,6 +546,7 @@ function VisualMarkdownEditor({ content, onChange, resourcePath, }) {
546
546
  StarterKit.configure({
547
547
  heading: { levels: [1, 2, 3] },
548
548
  codeBlock: {},
549
+ link: false,
549
550
  dropcursor: { color: "hsl(var(--ring))", width: 2 },
550
551
  }),
551
552
  Placeholder.configure({
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceEditor.js","sourceRoot":"","sources":["../../../src/client/resources/ResourceEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport Link from \"@tiptap/extension-link\";\nimport { Markdown } from \"tiptap-markdown\";\nimport { cn } from \"../utils.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport type { Resource } from \"./use-resources.js\";\nimport {\n type ParsedFrontmatter,\n getRemoteAgentIdFromPath,\n getFrontmatterValue,\n isCustomAgentPath,\n isRemoteAgentPath,\n isSkillPath,\n parseFrontmatter,\n serializeFrontmatter,\n} from \"../../resources/metadata.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nexport interface ResourceEditorProps {\n resource: Resource;\n onSave: (content: string) => void;\n /** Controlled view mode — if provided, the editor won't manage its own view state */\n view?: \"visual\" | \"code\";\n onViewChange?: (v: \"visual\" | \"code\") => void;\n /** Called whenever save status changes */\n onSaveStatusChange?: (status: \"idle\" | \"saving\" | \"saved\") => void;\n /** When true, the editor's internal toolbar row is hidden */\n hideToolbar?: boolean;\n}\n\nconst CONTROL_STYLE = { fontSize: 12, lineHeight: 1 } as const;\n\nconst VIEW_PREF_KEY = \"resource-editor-view\";\n\nfunction getViewPref(): \"visual\" | \"code\" {\n try {\n const v = localStorage.getItem(VIEW_PREF_KEY);\n if (v === \"code\") return \"code\";\n } catch {}\n return \"visual\";\n}\n\nfunction setViewPref(v: \"visual\" | \"code\") {\n try {\n localStorage.setItem(VIEW_PREF_KEY, v);\n } catch {}\n}\n\nconst FM_INPUT_STYLE: React.CSSProperties = {\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"inherit\",\n fontSize: \"inherit\",\n fontFamily: \"inherit\",\n width: \"100%\",\n padding: 0,\n};\n\nfunction FrontmatterBar({\n resourcePath,\n frontmatter,\n onChange,\n}: {\n resourcePath: string;\n frontmatter: ParsedFrontmatter;\n onChange: (updated: ParsedFrontmatter) => void;\n}) {\n const getField = (key: string) => getFrontmatterValue(frontmatter, key) ?? \"\";\n\n const updateField = (key: string, value: string) => {\n const exists = frontmatter.fields.some((f) => f.key === key);\n const newFields = exists\n ? frontmatter.fields.map((f) => (f.key === key ? { ...f, value } : f))\n : [...frontmatter.fields, { key, value }];\n const updated: ParsedFrontmatter = {\n ...frontmatter,\n raw: serializeFrontmatter(newFields),\n fields: newFields,\n };\n onChange(updated);\n };\n\n const name = getField(\"name\");\n const description = getField(\"description\");\n const isUserInvocable = getField(\"user-invocable\") === \"true\";\n const model = getField(\"model\") || \"inherit\";\n const tools = getField(\"tools\") || \"inherit\";\n const isCustomAgent = isCustomAgentPath(resourcePath);\n const isSkill = isSkillPath(resourcePath);\n\n return (\n <div\n style={{\n padding: \"8px 12px\",\n marginBottom: 8,\n borderRadius: 6,\n background: \"hsl(var(--muted) / 0.5)\",\n border: \"1px solid hsl(var(--border) / 0.5)\",\n fontSize: 12,\n lineHeight: 1.5,\n color: \"hsl(var(--muted-foreground))\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <input\n value={name}\n onChange={(e) => updateField(\"name\", e.target.value)}\n placeholder={isCustomAgent ? \"Agent name\" : \"Skill name\"}\n style={{\n ...FM_INPUT_STYLE,\n fontWeight: 600,\n color: \"hsl(var(--foreground))\",\n fontSize: 13,\n flex: 1,\n }}\n />\n {isSkill ? (\n <label\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n fontSize: 10,\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n padding: \"1px 5px\",\n borderRadius: 3,\n background: isUserInvocable\n ? \"hsl(var(--primary) / 0.15)\"\n : \"transparent\",\n color: isUserInvocable\n ? \"hsl(var(--primary))\"\n : \"hsl(var(--muted-foreground))\",\n border: isUserInvocable\n ? \"none\"\n : \"1px dashed hsl(var(--border))\",\n fontWeight: 500,\n }}\n >\n <input\n type=\"checkbox\"\n checked={isUserInvocable}\n onChange={(e) =>\n updateField(\n \"user-invocable\",\n e.target.checked ? \"true\" : \"false\",\n )\n }\n style={{ display: \"none\" }}\n />\n /{name || \"command\"}\n </label>\n ) : null}\n {isCustomAgent ? (\n <select\n value={model}\n onChange={(e) => updateField(\"model\", e.target.value)}\n style={{\n borderRadius: 4,\n border: \"1px solid hsl(var(--border))\",\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n fontSize: 11,\n padding: \"2px 6px\",\n }}\n >\n <option value=\"inherit\">Default model</option>\n <option value=\"claude-sonnet-4-6\">Claude Sonnet 4.6</option>\n <option value=\"claude-haiku-4-5-20251001\">Claude Haiku 4.5</option>\n </select>\n ) : null}\n </div>\n <input\n value={description}\n onChange={(e) => updateField(\"description\", e.target.value)}\n placeholder={\n isCustomAgent\n ? \"Description — what this agent should handle\"\n : \"Description — what this skill does\"\n }\n style={{\n ...FM_INPUT_STYLE,\n marginTop: 2,\n opacity: 0.8,\n color: \"hsl(var(--muted-foreground))\",\n }}\n />\n {isCustomAgent ? (\n <div\n style={{\n display: \"flex\",\n gap: 8,\n marginTop: 6,\n alignItems: \"center\",\n }}\n >\n <label\n style={{\n fontSize: 10,\n color: \"hsl(var(--muted-foreground))\",\n minWidth: 28,\n }}\n >\n Tools\n </label>\n <select\n value={tools}\n onChange={(e) => updateField(\"tools\", e.target.value)}\n style={{\n borderRadius: 4,\n border: \"1px solid hsl(var(--border))\",\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n fontSize: 11,\n padding: \"2px 6px\",\n }}\n >\n <option value=\"inherit\">Inherit</option>\n <option value=\"allowlist\">Allowlist later</option>\n <option value=\"denylist\">Denylist later</option>\n </select>\n </div>\n ) : null}\n </div>\n );\n}\n\n// --- Slash Command Menu ---\n\ninterface CommandItem {\n title: string;\n description: string;\n icon: string;\n action: (editor: any) => void;\n}\n\nconst slashCommands: CommandItem[] = [\n {\n title: \"Text\",\n description: \"Plain text\",\n icon: \"T\",\n action: (editor) => editor.chain().focus().setParagraph().run(),\n },\n {\n title: \"Heading 1\",\n description: \"Large heading\",\n icon: \"H1\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 1 }).run(),\n },\n {\n title: \"Heading 2\",\n description: \"Medium heading\",\n icon: \"H2\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 2 }).run(),\n },\n {\n title: \"Heading 3\",\n description: \"Small heading\",\n icon: \"H3\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 3 }).run(),\n },\n {\n title: \"Bullet List\",\n description: \"Unordered list\",\n icon: \"•\",\n action: (editor) => editor.chain().focus().toggleBulletList().run(),\n },\n {\n title: \"Numbered List\",\n description: \"Ordered list\",\n icon: \"1.\",\n action: (editor) => editor.chain().focus().toggleOrderedList().run(),\n },\n {\n title: \"Code Block\",\n description: \"Code snippet\",\n icon: \"<>\",\n action: (editor) => editor.chain().focus().toggleCodeBlock().run(),\n },\n {\n title: \"Quote\",\n description: \"Block quote\",\n icon: '\"',\n action: (editor) => editor.chain().focus().toggleBlockquote().run(),\n },\n {\n title: \"Divider\",\n description: \"Horizontal rule\",\n icon: \"—\",\n action: (editor) => editor.chain().focus().setHorizontalRule().run(),\n },\n];\n\nfunction SlashMenu({ editor }: { editor: any }) {\n const [isOpen, setIsOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [position, setPosition] = useState<{\n top: number;\n left: number;\n flipUp: boolean;\n } | null>(null);\n const slashPosRef = useRef<number | null>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const filteredCommands = useMemo(\n () =>\n slashCommands.filter(\n (cmd) =>\n cmd.title.toLowerCase().includes(query.toLowerCase()) ||\n cmd.description.toLowerCase().includes(query.toLowerCase()),\n ),\n [query],\n );\n\n const executeCommand = useCallback(\n (cmd: CommandItem) => {\n if (slashPosRef.current !== null) {\n const { from } = editor.state.selection;\n editor\n .chain()\n .focus()\n .deleteRange({ from: slashPosRef.current, to: from })\n .run();\n }\n cmd.action(editor);\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n },\n [editor],\n );\n\n useEffect(() => {\n if (!editor) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!isOpen) return;\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setSelectedIndex((i) => (i + 1) % filteredCommands.length);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setSelectedIndex(\n (i) => (i - 1 + filteredCommands.length) % filteredCommands.length,\n );\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredCommands[selectedIndex]) {\n executeCommand(filteredCommands[selectedIndex]);\n }\n } else if (e.key === \"Escape\") {\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown, true);\n return () => document.removeEventListener(\"keydown\", handleKeyDown, true);\n }, [isOpen, selectedIndex, filteredCommands, executeCommand, editor]);\n\n useEffect(() => {\n if (!editor) return;\n\n const handleTransaction = () => {\n const { state } = editor;\n const { from } = state.selection;\n const textBefore = state.doc.textBetween(\n Math.max(0, from - 20),\n from,\n \"\\n\",\n );\n\n const slashMatch = textBefore.match(/\\/([a-zA-Z0-9]*)$/);\n\n if (slashMatch) {\n const slashStart = from - slashMatch[0].length;\n slashPosRef.current = slashStart;\n setQuery(slashMatch[1]);\n setSelectedIndex(0);\n\n const coords = editor.view.coordsAtPos(from);\n // Estimate menu height (~320px max) and check if it fits below\n const menuHeight = 320;\n const spaceBelow = window.innerHeight - coords.bottom;\n const flipUp = spaceBelow < menuHeight && coords.top > menuHeight;\n\n setPosition({\n top: flipUp ? coords.top : coords.bottom + 4,\n left: Math.min(coords.left, window.innerWidth - 240),\n flipUp,\n });\n setIsOpen(true);\n } else {\n if (isOpen) {\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n }\n }\n };\n\n editor.on(\"transaction\", handleTransaction);\n return () => {\n editor.off(\"transaction\", handleTransaction);\n };\n }, [editor, isOpen]);\n\n if (!isOpen || !position || filteredCommands.length === 0) return null;\n\n return (\n <div\n ref={menuRef}\n style={{\n position: \"fixed\",\n ...(position.flipUp\n ? { bottom: window.innerHeight - position.top + 4 }\n : { top: position.top }),\n left: position.left,\n zIndex: 9999,\n }}\n className=\"re-slash-menu\"\n >\n <div className=\"py-1\">\n <div\n style={{\n padding: \"4px 10px\",\n fontSize: 10,\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.06em\",\n opacity: 0.5,\n }}\n >\n Blocks\n </div>\n {filteredCommands.map((cmd, i) => (\n <button\n key={cmd.title}\n onClick={() => executeCommand(cmd)}\n onMouseEnter={() => setSelectedIndex(i)}\n className={cn(\n \"re-slash-item\",\n i === selectedIndex && \"re-slash-item--active\",\n )}\n >\n <span className=\"re-slash-icon\">{cmd.icon}</span>\n <span>\n <span className=\"re-slash-title\">{cmd.title}</span>\n <span className=\"re-slash-desc\">{cmd.description}</span>\n </span>\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n// --- Inline Bubble Toolbar ---\n\nfunction InlineBubbleToolbar({ editor }: { editor: any }) {\n const [visible, setVisible] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const [showLinkInput, setShowLinkInput] = useState(false);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const toolbarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!editor) return;\n const update = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !editor.isFocused) {\n setVisible(false);\n return;\n }\n const domSelection = window.getSelection();\n if (!domSelection || domSelection.rangeCount === 0) {\n setVisible(false);\n return;\n }\n const range = domSelection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n if (rect.width === 0) {\n setVisible(false);\n return;\n }\n // Use fixed positioning with viewport coordinates\n setCoords({\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n setVisible(true);\n };\n editor.on(\"selectionUpdate\", update);\n const onBlur = () => {\n // Delay so clicks on toolbar buttons register before hiding\n setTimeout(() => {\n if (!editor.isFocused) setVisible(false);\n }, 150);\n };\n editor.on(\"blur\", onBlur);\n return () => {\n editor.off(\"selectionUpdate\", update);\n editor.off(\"blur\", onBlur);\n };\n }, [editor]);\n\n const handleSetLink = () => {\n if (linkUrl.trim()) {\n editor\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: linkUrl.trim() })\n .run();\n } else {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n }\n setShowLinkInput(false);\n setLinkUrl(\"\");\n };\n\n const toggleLink = () => {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().unsetLink().run();\n return;\n }\n const previousUrl = editor.getAttributes(\"link\").href || \"\";\n setLinkUrl(previousUrl);\n setShowLinkInput(true);\n };\n\n const items = [\n {\n label: \"B\",\n title: \"Bold\",\n action: () => editor.chain().focus().toggleBold().run(),\n isActive: () => editor.isActive(\"bold\"),\n style: { fontWeight: 700 } as React.CSSProperties,\n },\n {\n label: \"I\",\n title: \"Italic\",\n action: () => editor.chain().focus().toggleItalic().run(),\n isActive: () => editor.isActive(\"italic\"),\n style: { fontStyle: \"italic\" } as React.CSSProperties,\n },\n {\n label: \"S\",\n title: \"Strikethrough\",\n action: () => editor.chain().focus().toggleStrike().run(),\n isActive: () => editor.isActive(\"strike\"),\n style: { textDecoration: \"line-through\" } as React.CSSProperties,\n },\n {\n label: \"<>\",\n title: \"Code\",\n action: () => editor.chain().focus().toggleCode().run(),\n isActive: () => editor.isActive(\"code\"),\n style: { fontFamily: \"monospace\", fontSize: 11 } as React.CSSProperties,\n },\n { type: \"divider\" as const },\n {\n label: \"H1\",\n title: \"Heading 1\",\n action: () => editor.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 1 }),\n },\n {\n label: \"H2\",\n title: \"Heading 2\",\n action: () => editor.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 2 }),\n },\n {\n label: \"H3\",\n title: \"Heading 3\",\n action: () => editor.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 3 }),\n },\n { type: \"divider\" as const },\n {\n label: \"Link\",\n title: \"Link\",\n action: toggleLink,\n isActive: () => editor.isActive(\"link\"),\n },\n ];\n\n if (!visible) return null;\n\n return (\n <div\n ref={toolbarRef}\n className=\"re-bubble-toolbar\"\n onMouseDown={(e) => e.preventDefault()}\n style={{\n position: \"fixed\",\n top: coords.top,\n left: coords.left,\n transform: \"translate(-50%, -100%)\",\n zIndex: 9999,\n }}\n >\n {showLinkInput ? (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: 4 }}\n onMouseDown={(e) => e.preventDefault()}\n >\n <input\n autoFocus\n type=\"url\"\n placeholder=\"Paste link...\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSetLink();\n if (e.key === \"Escape\") {\n setShowLinkInput(false);\n setLinkUrl(\"\");\n }\n }}\n style={{\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"white\",\n fontSize: 12,\n width: 160,\n padding: \"2px 4px\",\n }}\n />\n <button\n onClick={handleSetLink}\n style={{\n fontSize: 11,\n color: \"#60a5fa\",\n padding: \"2px 6px\",\n fontWeight: 500,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n Apply\n </button>\n </div>\n ) : (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: 2 }}\n onMouseDown={(e) => e.preventDefault()}\n >\n {items.map((item, i) => {\n if (\"type\" in item && item.type === \"divider\") {\n return (\n <div\n key={`d-${i}`}\n style={{\n width: 1,\n height: 16,\n background: \"rgba(255,255,255,0.2)\",\n margin: \"0 2px\",\n }}\n />\n );\n }\n const { label, title, action, isActive, style } = item as {\n label: string;\n title: string;\n action: () => void;\n isActive: () => boolean;\n style?: React.CSSProperties;\n };\n return (\n <Tooltip key={title}>\n <TooltipTrigger asChild>\n <button\n onClick={action}\n className={cn(\n \"re-bubble-btn\",\n isActive() && \"re-bubble-btn--active\",\n )}\n style={style}\n >\n {label}\n </button>\n </TooltipTrigger>\n <TooltipContent>{title}</TooltipContent>\n </Tooltip>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// --- Visual Markdown Editor ---\n\n// --- Syntax-highlighted code editor (textarea + overlay) ---\n\nfunction highlightJson(text: string): string {\n // Escape HTML first\n const esc = text\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n // Tokenize JSON with regex\n return esc.replace(\n /(\"(?:\\\\.|[^\"\\\\])*\")\\s*:|(\"(?:\\\\.|[^\"\\\\])*\")|((?:-?\\d+)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(\\btrue\\b|\\bfalse\\b|\\bnull\\b)/g,\n (match, key, str, num, lit) => {\n if (key) return `<span class=\"sh-key\">${key}</span>:`;\n if (str) return `<span class=\"sh-str\">${str}</span>`;\n if (num) return `<span class=\"sh-num\">${num}</span>`;\n if (lit) return `<span class=\"sh-lit\">${lit}</span>`;\n return match;\n },\n );\n}\n\nconst shStyles = `\n.sh-key { color: #7dd3fc; }\n.sh-str { color: #86efac; }\n.sh-num { color: #fca5a5; }\n.sh-lit { color: #c4b5fd; }\n`;\n\nfunction SyntaxHighlightEditor({\n value,\n onChange,\n language: _language,\n}: {\n value: string;\n onChange: (v: string) => void;\n language: \"json\";\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const preRef = useRef<HTMLPreElement>(null);\n\n const highlighted = useMemo(() => highlightJson(value), [value]);\n\n const syncScroll = useCallback(() => {\n if (textareaRef.current && preRef.current) {\n preRef.current.scrollTop = textareaRef.current.scrollTop;\n preRef.current.scrollLeft = textareaRef.current.scrollLeft;\n }\n }, []);\n\n const monoFont =\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace';\n const sharedStyle: React.CSSProperties = {\n fontFamily: monoFont,\n fontSize: 13,\n lineHeight: 1.6,\n padding: 12,\n margin: 0,\n border: \"none\",\n whiteSpace: \"pre\",\n wordWrap: \"normal\",\n overflowWrap: \"normal\",\n tabSize: 2,\n };\n\n return (\n <>\n <style>{shStyles}</style>\n <div\n className=\"flex-1 min-h-0\"\n style={{ position: \"relative\", overflow: \"hidden\" }}\n >\n <pre\n ref={preRef}\n aria-hidden\n style={{\n ...sharedStyle,\n position: \"absolute\",\n inset: 0,\n overflow: \"auto\",\n pointerEvents: \"none\",\n color: \"hsl(var(--muted-foreground))\",\n background: \"transparent\",\n }}\n dangerouslySetInnerHTML={{ __html: highlighted + \"\\n\" }}\n />\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onScroll={syncScroll}\n spellCheck={false}\n style={{\n ...sharedStyle,\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"auto\",\n resize: \"none\",\n background: \"transparent\",\n color: \"transparent\",\n caretColor: \"hsl(var(--foreground))\",\n outline: \"none\",\n WebkitTextFillColor: \"transparent\",\n }}\n />\n </div>\n </>\n );\n}\n\nfunction VisualMarkdownEditor({\n content,\n onChange,\n resourcePath,\n}: {\n content: string;\n onChange: (md: string) => void;\n resourcePath: string;\n}) {\n const isSettingContent = useRef(false);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n // Parse frontmatter — strip it from tiptap content, re-prepend on save\n const parsed = useMemo(() => parseFrontmatter(content), [content]);\n const frontmatterRef = useRef(parsed);\n frontmatterRef.current = parsed;\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: { levels: [1, 2, 3] },\n codeBlock: {},\n dropcursor: { color: \"hsl(var(--ring))\", width: 2 },\n }),\n Placeholder.configure({\n placeholder: ({ node }) => {\n if (node.type.name === \"heading\") {\n const level = node.attrs.level;\n if (level === 1) return \"Heading 1\";\n if (level === 2) return \"Heading 2\";\n return \"Heading 3\";\n }\n return \"Type '/' for commands...\";\n },\n showOnlyWhenEditable: true,\n showOnlyCurrent: true,\n }),\n Link.configure({\n openOnClick: false,\n HTMLAttributes: { class: \"re-link\" },\n }),\n Markdown.configure({\n html: true,\n transformPastedText: true,\n transformCopiedText: true,\n }),\n ],\n content: parsed?.body ?? content,\n editorProps: {\n attributes: {\n class: \"re-prose\",\n },\n },\n onUpdate: ({ editor }) => {\n if (isSettingContent.current) return;\n try {\n const md = (editor.storage as any).markdown.getMarkdown();\n // Re-prepend frontmatter if it existed\n const fm = frontmatterRef.current;\n const full = fm ? fm.raw + md : md;\n onChangeRef.current(full);\n } catch (err) {\n console.error(\"Markdown serialization error:\", err);\n }\n },\n });\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const currentMd = (editor.storage as any).markdown.getMarkdown();\n if (currentMd !== (parsed?.body ?? content)) {\n if (editor.isFocused) return;\n isSettingContent.current = true;\n editor.commands.setContent(parsed?.body ?? content);\n isSettingContent.current = false;\n }\n }, [content, editor, parsed]);\n\n useEffect(() => {\n return () => {\n editor?.destroy();\n };\n }, [editor]);\n\n if (!editor) return null;\n\n const handleWrapperClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // If the click was on the wrapper (empty area), not on editor content, focus at end\n const target = e.target as HTMLElement;\n if (\n target.classList.contains(\"re-editor-clickable\") ||\n target.classList.contains(\"re-editor-wrapper\")\n ) {\n editor.chain().focus(\"end\").run();\n }\n };\n\n return (\n <div\n className=\"re-editor-wrapper re-editor-clickable\"\n onClick={handleWrapperClick}\n style={{ position: \"relative\", minHeight: \"100%\", cursor: \"text\" }}\n >\n {parsed && (\n <FrontmatterBar\n resourcePath={resourcePath}\n frontmatter={parsed}\n onChange={(updated) => {\n frontmatterRef.current = updated;\n // Get current body and combine with updated frontmatter\n try {\n const md = (editor.storage as any).markdown.getMarkdown();\n onChangeRef.current(updated.raw + md);\n } catch {\n // fallback\n }\n }}\n />\n )}\n <InlineBubbleToolbar editor={editor} />\n <SlashMenu editor={editor} />\n <EditorContent editor={editor} />\n </div>\n );\n}\n\n// --- Main ResourceEditor ---\n\ninterface RemoteAgentFormValue {\n id?: string;\n name: string;\n description: string;\n url: string;\n color: string;\n}\n\nfunction parseRemoteAgentContent(\n content: string,\n path: string,\n): RemoteAgentFormValue {\n const fallbackId = getRemoteAgentIdFromPath(path);\n try {\n const data = JSON.parse(content || \"{}\");\n return {\n id: data.id || fallbackId,\n name: data.name ?? \"\",\n description: data.description ?? \"\",\n url: data.url ?? \"\",\n color: data.color ?? \"#6B7280\",\n };\n } catch {\n return {\n id: fallbackId,\n name: \"\",\n description: \"\",\n url: \"\",\n color: \"#6B7280\",\n };\n }\n}\n\nfunction serializeRemoteAgent(value: RemoteAgentFormValue): string {\n return (\n JSON.stringify(\n {\n id: value.id,\n name: value.name,\n description: value.description || undefined,\n url: value.url,\n color: value.color,\n },\n null,\n 2,\n ) + \"\\n\"\n );\n}\n\nfunction RemoteAgentFormEditor({\n resource,\n onChange,\n}: {\n resource: Resource;\n onChange: (content: string) => void;\n}) {\n const [value, setValue] = useState<RemoteAgentFormValue>(() =>\n parseRemoteAgentContent(resource.content, resource.path),\n );\n const prevIdRef = useRef(resource.id);\n\n useEffect(() => {\n if (prevIdRef.current !== resource.id) {\n setValue(parseRemoteAgentContent(resource.content, resource.path));\n prevIdRef.current = resource.id;\n }\n }, [resource.id, resource.content, resource.path]);\n\n const update = (patch: Partial<RemoteAgentFormValue>) => {\n const next = { ...value, ...patch };\n setValue(next);\n onChange(serializeRemoteAgent(next));\n };\n\n const inputClass =\n \"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\";\n const labelClass = \"block text-[11px] font-medium text-muted-foreground mb-1\";\n\n return (\n <div className=\"flex flex-1 min-h-0 flex-col overflow-y-auto p-4\">\n <div className=\"max-w-md space-y-3\">\n <p className=\"text-[11px] text-muted-foreground/70 leading-snug\">\n Connected remote agent over the A2A protocol. @-mention it in chat to\n delegate tasks.\n </p>\n <div>\n <label className={labelClass}>Name</label>\n <input\n className={inputClass}\n value={value.name}\n onChange={(e) => update({ name: e.target.value })}\n placeholder=\"Analytics\"\n />\n </div>\n <div>\n <label className={labelClass}>URL</label>\n <input\n className={inputClass}\n value={value.url}\n onChange={(e) => update({ url: e.target.value })}\n placeholder=\"https://analytics.example.com\"\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground/50\">\n A2A endpoint. The agent card is served at{\" \"}\n <code>/.well-known/agent-card.json</code>.\n </p>\n </div>\n <div>\n <label className={labelClass}>Description</label>\n <textarea\n className={cn(inputClass, \"resize-y\")}\n rows={3}\n value={value.description}\n onChange={(e) => update({ description: e.target.value })}\n placeholder=\"What this agent is good at — helps the main agent decide when to delegate.\"\n />\n </div>\n <div>\n <label className={labelClass}>Color</label>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={value.color}\n onChange={(e) => update({ color: e.target.value })}\n className=\"h-8 w-10 cursor-pointer rounded border border-border bg-transparent\"\n />\n <input\n className={cn(inputClass, \"flex-1\")}\n value={value.color}\n onChange={(e) => update({ color: e.target.value })}\n placeholder=\"#6B7280\"\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function ResourceEditor({\n resource,\n onSave,\n view: controlledView,\n onViewChange,\n onSaveStatusChange,\n hideToolbar,\n}: ResourceEditorProps) {\n const [content, setContent] = useState(resource.content);\n const [internalView, setInternalView] = useState<\"visual\" | \"code\">(\n getViewPref,\n );\n const view = controlledView ?? internalView;\n const [saveStatus, setSaveStatus] = useState<\"idle\" | \"saving\" | \"saved\">(\n \"idle\",\n );\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const prevIdRef = useRef(resource.id);\n\n // Reset content when resource changes\n useEffect(() => {\n if (prevIdRef.current !== resource.id) {\n setContent(resource.content);\n setSaveStatus(\"idle\");\n onSaveStatusChange?.(\"idle\");\n prevIdRef.current = resource.id;\n }\n }, [resource.id, resource.content, onSaveStatusChange]);\n\n const handleChange = useCallback(\n (newContent: string) => {\n setContent(newContent);\n setSaveStatus(\"idle\");\n onSaveStatusChange?.(\"idle\");\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n setSaveStatus(\"saving\");\n onSaveStatusChange?.(\"saving\");\n onSave(newContent);\n setTimeout(() => {\n setSaveStatus(\"saved\");\n onSaveStatusChange?.(\"saved\");\n }, 300);\n }, 1000);\n },\n [onSave, onSaveStatusChange],\n );\n\n const switchView = useCallback(\n (v: \"visual\" | \"code\") => {\n setInternalView(v);\n setViewPref(v);\n onViewChange?.(v);\n },\n [onViewChange],\n );\n\n // Cleanup debounce on unmount\n useEffect(() => {\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, []);\n\n const isMarkdown =\n resource.mimeType === \"text/markdown\" || resource.path.endsWith(\".md\");\n const isImage = resource.mimeType.startsWith(\"image/\");\n const isRemoteAgent = isRemoteAgentPath(resource.path);\n\n // Remote-agent manifest → form editor\n if (isRemoteAgent) {\n return (\n <div className=\"flex h-full flex-col\">\n <RemoteAgentFormEditor resource={resource} onChange={handleChange} />\n </div>\n );\n }\n\n // Image preview\n if (isImage) {\n return (\n <div className=\"flex h-full flex-col\">\n <div className=\"flex flex-1 items-center justify-center overflow-auto p-4\">\n <img\n src={agentNativePath(`/_agent-native/resources/${resource.id}?raw`)}\n alt={resource.path}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n </div>\n );\n }\n\n // Markdown files get visual/code toggle\n if (isMarkdown) {\n return (\n <div className=\"flex h-full flex-col\">\n <style>{editorStyles}</style>\n {!hideToolbar && (\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2\">\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => switchView(\"visual\")}\n className={cn(\n \"rounded-md px-2 py-1.5 text-[12px] leading-none\",\n view === \"visual\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={CONTROL_STYLE}\n >\n Visual\n </button>\n <button\n onClick={() => switchView(\"code\")}\n className={cn(\n \"rounded-md px-2 py-1.5 text-[12px] leading-none\",\n view === \"code\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={CONTROL_STYLE}\n >\n Code\n </button>\n </div>\n <span className=\"text-[11px] text-muted-foreground/60\">\n {saveStatus === \"saving\"\n ? \"Saving...\"\n : saveStatus === \"saved\"\n ? \"Saved\"\n : \"\"}\n </span>\n </div>\n )}\n {view === \"visual\" ? (\n <div\n className=\"flex-1 min-h-0 overflow-y-auto p-3\"\n key={resource.id + \"-visual\"}\n >\n <VisualMarkdownEditor\n content={content}\n onChange={handleChange}\n resourcePath={resource.path}\n />\n </div>\n ) : (\n <textarea\n value={content}\n onChange={(e) => handleChange(e.target.value)}\n className=\"flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.6,\n }}\n spellCheck={false}\n />\n )}\n </div>\n );\n }\n\n // Non-markdown text files\n const isJson =\n resource.mimeType === \"application/json\" || resource.path.endsWith(\".json\");\n\n return (\n <div className=\"flex h-full flex-col\">\n {isJson ? (\n <SyntaxHighlightEditor\n value={content}\n onChange={handleChange}\n language=\"json\"\n />\n ) : (\n <textarea\n value={content}\n onChange={(e) => handleChange(e.target.value)}\n className=\"flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.6,\n }}\n spellCheck={false}\n />\n )}\n </div>\n );\n}\n\n// --- Scoped editor styles (injected inline so no external CSS needed) ---\n\nconst editorStyles = `\n/* Prose styling for the visual editor */\n.re-prose {\n outline: none;\n color: hsl(var(--foreground));\n line-height: 1.65;\n font-size: 13px;\n min-height: 100%;\n}\n.re-prose > *:first-child { margin-top: 0; }\n\n.re-prose h1 {\n font-size: 1.5em;\n font-weight: 700;\n margin: 1em 0 0.25em;\n line-height: 1.25;\n}\n.re-prose h2 {\n font-size: 1.25em;\n font-weight: 600;\n margin: 0.8em 0 0.2em;\n line-height: 1.3;\n}\n.re-prose h3 {\n font-size: 1.1em;\n font-weight: 600;\n margin: 0.6em 0 0.15em;\n line-height: 1.35;\n}\n.re-prose p {\n margin: 0.35em 0;\n min-height: 1.65em;\n}\n.re-prose ul {\n list-style-type: disc;\n padding-left: 1.4em;\n margin: 0.2em 0;\n}\n.re-prose ol {\n list-style-type: decimal;\n padding-left: 1.4em;\n margin: 0.2em 0;\n}\n.re-prose li { margin: 0.05em 0; }\n.re-prose li p { margin: 0; }\n\n.re-prose blockquote {\n border-left: 2px solid hsl(var(--border));\n padding-left: 0.8em;\n margin: 0.3em 0;\n color: hsl(var(--muted-foreground));\n}\n.re-prose code {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 0.88em;\n background: hsl(var(--muted));\n padding: 0.1em 0.3em;\n border-radius: 3px;\n}\n.re-prose pre {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 12px;\n background: hsl(var(--muted));\n border-radius: 4px;\n padding: 0.7em 0.9em;\n margin: 0.3em 0;\n overflow-x: auto;\n line-height: 1.5;\n}\n.re-prose pre code {\n background: none;\n padding: 0;\n border: none;\n font-size: inherit;\n}\n.re-prose hr {\n border: none;\n border-top: 1px solid hsl(var(--border));\n margin: 1em 0;\n}\n.re-prose strong { font-weight: 600; }\n.re-prose em { font-style: italic; }\n.re-prose s { text-decoration: line-through; }\n\n.re-link {\n color: hsl(var(--foreground));\n text-decoration: underline;\n text-underline-offset: 2px;\n text-decoration-color: hsl(var(--muted-foreground));\n cursor: pointer;\n}\n.re-link:hover {\n text-decoration-color: hsl(var(--foreground));\n}\n\n/* Placeholder */\n.re-prose p.is-editor-empty:first-child::before,\n.re-prose p.is-empty::before,\n.re-prose h1.is-empty::before,\n.re-prose h2.is-empty::before,\n.re-prose h3.is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: hsl(var(--muted-foreground));\n opacity: 0.5;\n pointer-events: none;\n height: 0;\n}\n\n/* Selection */\n.re-prose ::selection {\n background: hsl(210 100% 52% / 0.2);\n}\n\n/* Bubble toolbar */\n.re-bubble-toolbar {\n display: flex;\n align-items: center;\n background: hsl(0 0% 15%);\n border-radius: 6px;\n padding: 3px;\n box-shadow: 0 4px 16px rgb(0 0 0 / 0.25), 0 0 0 1px rgb(255 255 255 / 0.06);\n}\n.re-bubble-btn {\n padding: 3px 6px;\n border-radius: 4px;\n font-size: 12px;\n color: rgba(255,255,255,0.75);\n background: none;\n border: none;\n cursor: pointer;\n line-height: 1;\n}\n.re-bubble-btn:hover {\n background: rgba(255,255,255,0.12);\n color: white;\n}\n.re-bubble-btn--active {\n background: rgba(255,255,255,0.18);\n color: white;\n}\n\n/* Slash command menu */\n.re-slash-menu {\n background: hsl(var(--popover));\n border: 1px solid hsl(var(--border));\n border-radius: 6px;\n box-shadow: 0 4px 20px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.04);\n min-width: 220px;\n max-height: 320px;\n overflow-y: auto;\n color: hsl(var(--foreground));\n}\n.re-slash-item {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n text-align: left;\n background: none;\n border: none;\n cursor: pointer;\n color: hsl(var(--foreground));\n font-size: 13px;\n}\n.re-slash-item:hover,\n.re-slash-item--active {\n background: hsl(var(--accent));\n}\n.re-slash-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n border: 1px solid hsl(var(--border));\n background: hsl(var(--background));\n font-size: 12px;\n font-weight: 600;\n color: hsl(var(--muted-foreground));\n flex-shrink: 0;\n}\n.re-slash-title {\n display: block;\n font-weight: 500;\n font-size: 13px;\n}\n.re-slash-desc {\n display: block;\n font-size: 11px;\n color: hsl(var(--muted-foreground));\n}\n`;\n"]}
1
+ {"version":3,"file":"ResourceEditor.js","sourceRoot":"","sources":["../../../src/client/resources/ResourceEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, {\n useState,\n useRef,\n useEffect,\n useCallback,\n useMemo,\n} from \"react\";\nimport { useEditor, EditorContent } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport Link from \"@tiptap/extension-link\";\nimport { Markdown } from \"tiptap-markdown\";\nimport { cn } from \"../utils.js\";\nimport { agentNativePath } from \"../api-path.js\";\nimport type { Resource } from \"./use-resources.js\";\nimport {\n type ParsedFrontmatter,\n getRemoteAgentIdFromPath,\n getFrontmatterValue,\n isCustomAgentPath,\n isRemoteAgentPath,\n isSkillPath,\n parseFrontmatter,\n serializeFrontmatter,\n} from \"../../resources/metadata.js\";\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"../components/ui/tooltip.js\";\n\nexport interface ResourceEditorProps {\n resource: Resource;\n onSave: (content: string) => void;\n /** Controlled view mode — if provided, the editor won't manage its own view state */\n view?: \"visual\" | \"code\";\n onViewChange?: (v: \"visual\" | \"code\") => void;\n /** Called whenever save status changes */\n onSaveStatusChange?: (status: \"idle\" | \"saving\" | \"saved\") => void;\n /** When true, the editor's internal toolbar row is hidden */\n hideToolbar?: boolean;\n}\n\nconst CONTROL_STYLE = { fontSize: 12, lineHeight: 1 } as const;\n\nconst VIEW_PREF_KEY = \"resource-editor-view\";\n\nfunction getViewPref(): \"visual\" | \"code\" {\n try {\n const v = localStorage.getItem(VIEW_PREF_KEY);\n if (v === \"code\") return \"code\";\n } catch {}\n return \"visual\";\n}\n\nfunction setViewPref(v: \"visual\" | \"code\") {\n try {\n localStorage.setItem(VIEW_PREF_KEY, v);\n } catch {}\n}\n\nconst FM_INPUT_STYLE: React.CSSProperties = {\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"inherit\",\n fontSize: \"inherit\",\n fontFamily: \"inherit\",\n width: \"100%\",\n padding: 0,\n};\n\nfunction FrontmatterBar({\n resourcePath,\n frontmatter,\n onChange,\n}: {\n resourcePath: string;\n frontmatter: ParsedFrontmatter;\n onChange: (updated: ParsedFrontmatter) => void;\n}) {\n const getField = (key: string) => getFrontmatterValue(frontmatter, key) ?? \"\";\n\n const updateField = (key: string, value: string) => {\n const exists = frontmatter.fields.some((f) => f.key === key);\n const newFields = exists\n ? frontmatter.fields.map((f) => (f.key === key ? { ...f, value } : f))\n : [...frontmatter.fields, { key, value }];\n const updated: ParsedFrontmatter = {\n ...frontmatter,\n raw: serializeFrontmatter(newFields),\n fields: newFields,\n };\n onChange(updated);\n };\n\n const name = getField(\"name\");\n const description = getField(\"description\");\n const isUserInvocable = getField(\"user-invocable\") === \"true\";\n const model = getField(\"model\") || \"inherit\";\n const tools = getField(\"tools\") || \"inherit\";\n const isCustomAgent = isCustomAgentPath(resourcePath);\n const isSkill = isSkillPath(resourcePath);\n\n return (\n <div\n style={{\n padding: \"8px 12px\",\n marginBottom: 8,\n borderRadius: 6,\n background: \"hsl(var(--muted) / 0.5)\",\n border: \"1px solid hsl(var(--border) / 0.5)\",\n fontSize: 12,\n lineHeight: 1.5,\n color: \"hsl(var(--muted-foreground))\",\n }}\n >\n <div style={{ display: \"flex\", alignItems: \"center\", gap: 6 }}>\n <input\n value={name}\n onChange={(e) => updateField(\"name\", e.target.value)}\n placeholder={isCustomAgent ? \"Agent name\" : \"Skill name\"}\n style={{\n ...FM_INPUT_STYLE,\n fontWeight: 600,\n color: \"hsl(var(--foreground))\",\n fontSize: 13,\n flex: 1,\n }}\n />\n {isSkill ? (\n <label\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 4,\n fontSize: 10,\n cursor: \"pointer\",\n whiteSpace: \"nowrap\",\n userSelect: \"none\",\n padding: \"1px 5px\",\n borderRadius: 3,\n background: isUserInvocable\n ? \"hsl(var(--primary) / 0.15)\"\n : \"transparent\",\n color: isUserInvocable\n ? \"hsl(var(--primary))\"\n : \"hsl(var(--muted-foreground))\",\n border: isUserInvocable\n ? \"none\"\n : \"1px dashed hsl(var(--border))\",\n fontWeight: 500,\n }}\n >\n <input\n type=\"checkbox\"\n checked={isUserInvocable}\n onChange={(e) =>\n updateField(\n \"user-invocable\",\n e.target.checked ? \"true\" : \"false\",\n )\n }\n style={{ display: \"none\" }}\n />\n /{name || \"command\"}\n </label>\n ) : null}\n {isCustomAgent ? (\n <select\n value={model}\n onChange={(e) => updateField(\"model\", e.target.value)}\n style={{\n borderRadius: 4,\n border: \"1px solid hsl(var(--border))\",\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n fontSize: 11,\n padding: \"2px 6px\",\n }}\n >\n <option value=\"inherit\">Default model</option>\n <option value=\"claude-sonnet-4-6\">Claude Sonnet 4.6</option>\n <option value=\"claude-haiku-4-5-20251001\">Claude Haiku 4.5</option>\n </select>\n ) : null}\n </div>\n <input\n value={description}\n onChange={(e) => updateField(\"description\", e.target.value)}\n placeholder={\n isCustomAgent\n ? \"Description — what this agent should handle\"\n : \"Description — what this skill does\"\n }\n style={{\n ...FM_INPUT_STYLE,\n marginTop: 2,\n opacity: 0.8,\n color: \"hsl(var(--muted-foreground))\",\n }}\n />\n {isCustomAgent ? (\n <div\n style={{\n display: \"flex\",\n gap: 8,\n marginTop: 6,\n alignItems: \"center\",\n }}\n >\n <label\n style={{\n fontSize: 10,\n color: \"hsl(var(--muted-foreground))\",\n minWidth: 28,\n }}\n >\n Tools\n </label>\n <select\n value={tools}\n onChange={(e) => updateField(\"tools\", e.target.value)}\n style={{\n borderRadius: 4,\n border: \"1px solid hsl(var(--border))\",\n background: \"hsl(var(--background))\",\n color: \"hsl(var(--foreground))\",\n fontSize: 11,\n padding: \"2px 6px\",\n }}\n >\n <option value=\"inherit\">Inherit</option>\n <option value=\"allowlist\">Allowlist later</option>\n <option value=\"denylist\">Denylist later</option>\n </select>\n </div>\n ) : null}\n </div>\n );\n}\n\n// --- Slash Command Menu ---\n\ninterface CommandItem {\n title: string;\n description: string;\n icon: string;\n action: (editor: any) => void;\n}\n\nconst slashCommands: CommandItem[] = [\n {\n title: \"Text\",\n description: \"Plain text\",\n icon: \"T\",\n action: (editor) => editor.chain().focus().setParagraph().run(),\n },\n {\n title: \"Heading 1\",\n description: \"Large heading\",\n icon: \"H1\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 1 }).run(),\n },\n {\n title: \"Heading 2\",\n description: \"Medium heading\",\n icon: \"H2\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 2 }).run(),\n },\n {\n title: \"Heading 3\",\n description: \"Small heading\",\n icon: \"H3\",\n action: (editor) =>\n editor.chain().focus().toggleHeading({ level: 3 }).run(),\n },\n {\n title: \"Bullet List\",\n description: \"Unordered list\",\n icon: \"•\",\n action: (editor) => editor.chain().focus().toggleBulletList().run(),\n },\n {\n title: \"Numbered List\",\n description: \"Ordered list\",\n icon: \"1.\",\n action: (editor) => editor.chain().focus().toggleOrderedList().run(),\n },\n {\n title: \"Code Block\",\n description: \"Code snippet\",\n icon: \"<>\",\n action: (editor) => editor.chain().focus().toggleCodeBlock().run(),\n },\n {\n title: \"Quote\",\n description: \"Block quote\",\n icon: '\"',\n action: (editor) => editor.chain().focus().toggleBlockquote().run(),\n },\n {\n title: \"Divider\",\n description: \"Horizontal rule\",\n icon: \"—\",\n action: (editor) => editor.chain().focus().setHorizontalRule().run(),\n },\n];\n\nfunction SlashMenu({ editor }: { editor: any }) {\n const [isOpen, setIsOpen] = useState(false);\n const [query, setQuery] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [position, setPosition] = useState<{\n top: number;\n left: number;\n flipUp: boolean;\n } | null>(null);\n const slashPosRef = useRef<number | null>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const filteredCommands = useMemo(\n () =>\n slashCommands.filter(\n (cmd) =>\n cmd.title.toLowerCase().includes(query.toLowerCase()) ||\n cmd.description.toLowerCase().includes(query.toLowerCase()),\n ),\n [query],\n );\n\n const executeCommand = useCallback(\n (cmd: CommandItem) => {\n if (slashPosRef.current !== null) {\n const { from } = editor.state.selection;\n editor\n .chain()\n .focus()\n .deleteRange({ from: slashPosRef.current, to: from })\n .run();\n }\n cmd.action(editor);\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n },\n [editor],\n );\n\n useEffect(() => {\n if (!editor) return;\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!isOpen) return;\n\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setSelectedIndex((i) => (i + 1) % filteredCommands.length);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setSelectedIndex(\n (i) => (i - 1 + filteredCommands.length) % filteredCommands.length,\n );\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n if (filteredCommands[selectedIndex]) {\n executeCommand(filteredCommands[selectedIndex]);\n }\n } else if (e.key === \"Escape\") {\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown, true);\n return () => document.removeEventListener(\"keydown\", handleKeyDown, true);\n }, [isOpen, selectedIndex, filteredCommands, executeCommand, editor]);\n\n useEffect(() => {\n if (!editor) return;\n\n const handleTransaction = () => {\n const { state } = editor;\n const { from } = state.selection;\n const textBefore = state.doc.textBetween(\n Math.max(0, from - 20),\n from,\n \"\\n\",\n );\n\n const slashMatch = textBefore.match(/\\/([a-zA-Z0-9]*)$/);\n\n if (slashMatch) {\n const slashStart = from - slashMatch[0].length;\n slashPosRef.current = slashStart;\n setQuery(slashMatch[1]);\n setSelectedIndex(0);\n\n const coords = editor.view.coordsAtPos(from);\n // Estimate menu height (~320px max) and check if it fits below\n const menuHeight = 320;\n const spaceBelow = window.innerHeight - coords.bottom;\n const flipUp = spaceBelow < menuHeight && coords.top > menuHeight;\n\n setPosition({\n top: flipUp ? coords.top : coords.bottom + 4,\n left: Math.min(coords.left, window.innerWidth - 240),\n flipUp,\n });\n setIsOpen(true);\n } else {\n if (isOpen) {\n setIsOpen(false);\n setQuery(\"\");\n slashPosRef.current = null;\n }\n }\n };\n\n editor.on(\"transaction\", handleTransaction);\n return () => {\n editor.off(\"transaction\", handleTransaction);\n };\n }, [editor, isOpen]);\n\n if (!isOpen || !position || filteredCommands.length === 0) return null;\n\n return (\n <div\n ref={menuRef}\n style={{\n position: \"fixed\",\n ...(position.flipUp\n ? { bottom: window.innerHeight - position.top + 4 }\n : { top: position.top }),\n left: position.left,\n zIndex: 9999,\n }}\n className=\"re-slash-menu\"\n >\n <div className=\"py-1\">\n <div\n style={{\n padding: \"4px 10px\",\n fontSize: 10,\n fontWeight: 600,\n textTransform: \"uppercase\",\n letterSpacing: \"0.06em\",\n opacity: 0.5,\n }}\n >\n Blocks\n </div>\n {filteredCommands.map((cmd, i) => (\n <button\n key={cmd.title}\n onClick={() => executeCommand(cmd)}\n onMouseEnter={() => setSelectedIndex(i)}\n className={cn(\n \"re-slash-item\",\n i === selectedIndex && \"re-slash-item--active\",\n )}\n >\n <span className=\"re-slash-icon\">{cmd.icon}</span>\n <span>\n <span className=\"re-slash-title\">{cmd.title}</span>\n <span className=\"re-slash-desc\">{cmd.description}</span>\n </span>\n </button>\n ))}\n </div>\n </div>\n );\n}\n\n// --- Inline Bubble Toolbar ---\n\nfunction InlineBubbleToolbar({ editor }: { editor: any }) {\n const [visible, setVisible] = useState(false);\n const [coords, setCoords] = useState({ top: 0, left: 0 });\n const [showLinkInput, setShowLinkInput] = useState(false);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const toolbarRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!editor) return;\n const update = () => {\n const { from, to } = editor.state.selection;\n if (from === to || !editor.isFocused) {\n setVisible(false);\n return;\n }\n const domSelection = window.getSelection();\n if (!domSelection || domSelection.rangeCount === 0) {\n setVisible(false);\n return;\n }\n const range = domSelection.getRangeAt(0);\n const rect = range.getBoundingClientRect();\n if (rect.width === 0) {\n setVisible(false);\n return;\n }\n // Use fixed positioning with viewport coordinates\n setCoords({\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n setVisible(true);\n };\n editor.on(\"selectionUpdate\", update);\n const onBlur = () => {\n // Delay so clicks on toolbar buttons register before hiding\n setTimeout(() => {\n if (!editor.isFocused) setVisible(false);\n }, 150);\n };\n editor.on(\"blur\", onBlur);\n return () => {\n editor.off(\"selectionUpdate\", update);\n editor.off(\"blur\", onBlur);\n };\n }, [editor]);\n\n const handleSetLink = () => {\n if (linkUrl.trim()) {\n editor\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: linkUrl.trim() })\n .run();\n } else {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n }\n setShowLinkInput(false);\n setLinkUrl(\"\");\n };\n\n const toggleLink = () => {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().unsetLink().run();\n return;\n }\n const previousUrl = editor.getAttributes(\"link\").href || \"\";\n setLinkUrl(previousUrl);\n setShowLinkInput(true);\n };\n\n const items = [\n {\n label: \"B\",\n title: \"Bold\",\n action: () => editor.chain().focus().toggleBold().run(),\n isActive: () => editor.isActive(\"bold\"),\n style: { fontWeight: 700 } as React.CSSProperties,\n },\n {\n label: \"I\",\n title: \"Italic\",\n action: () => editor.chain().focus().toggleItalic().run(),\n isActive: () => editor.isActive(\"italic\"),\n style: { fontStyle: \"italic\" } as React.CSSProperties,\n },\n {\n label: \"S\",\n title: \"Strikethrough\",\n action: () => editor.chain().focus().toggleStrike().run(),\n isActive: () => editor.isActive(\"strike\"),\n style: { textDecoration: \"line-through\" } as React.CSSProperties,\n },\n {\n label: \"<>\",\n title: \"Code\",\n action: () => editor.chain().focus().toggleCode().run(),\n isActive: () => editor.isActive(\"code\"),\n style: { fontFamily: \"monospace\", fontSize: 11 } as React.CSSProperties,\n },\n { type: \"divider\" as const },\n {\n label: \"H1\",\n title: \"Heading 1\",\n action: () => editor.chain().focus().toggleHeading({ level: 1 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 1 }),\n },\n {\n label: \"H2\",\n title: \"Heading 2\",\n action: () => editor.chain().focus().toggleHeading({ level: 2 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 2 }),\n },\n {\n label: \"H3\",\n title: \"Heading 3\",\n action: () => editor.chain().focus().toggleHeading({ level: 3 }).run(),\n isActive: () => editor.isActive(\"heading\", { level: 3 }),\n },\n { type: \"divider\" as const },\n {\n label: \"Link\",\n title: \"Link\",\n action: toggleLink,\n isActive: () => editor.isActive(\"link\"),\n },\n ];\n\n if (!visible) return null;\n\n return (\n <div\n ref={toolbarRef}\n className=\"re-bubble-toolbar\"\n onMouseDown={(e) => e.preventDefault()}\n style={{\n position: \"fixed\",\n top: coords.top,\n left: coords.left,\n transform: \"translate(-50%, -100%)\",\n zIndex: 9999,\n }}\n >\n {showLinkInput ? (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: 4, padding: 4 }}\n onMouseDown={(e) => e.preventDefault()}\n >\n <input\n autoFocus\n type=\"url\"\n placeholder=\"Paste link...\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") handleSetLink();\n if (e.key === \"Escape\") {\n setShowLinkInput(false);\n setLinkUrl(\"\");\n }\n }}\n style={{\n background: \"transparent\",\n border: \"none\",\n outline: \"none\",\n color: \"white\",\n fontSize: 12,\n width: 160,\n padding: \"2px 4px\",\n }}\n />\n <button\n onClick={handleSetLink}\n style={{\n fontSize: 11,\n color: \"#60a5fa\",\n padding: \"2px 6px\",\n fontWeight: 500,\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n }}\n >\n Apply\n </button>\n </div>\n ) : (\n <div\n style={{ display: \"flex\", alignItems: \"center\", gap: 2 }}\n onMouseDown={(e) => e.preventDefault()}\n >\n {items.map((item, i) => {\n if (\"type\" in item && item.type === \"divider\") {\n return (\n <div\n key={`d-${i}`}\n style={{\n width: 1,\n height: 16,\n background: \"rgba(255,255,255,0.2)\",\n margin: \"0 2px\",\n }}\n />\n );\n }\n const { label, title, action, isActive, style } = item as {\n label: string;\n title: string;\n action: () => void;\n isActive: () => boolean;\n style?: React.CSSProperties;\n };\n return (\n <Tooltip key={title}>\n <TooltipTrigger asChild>\n <button\n onClick={action}\n className={cn(\n \"re-bubble-btn\",\n isActive() && \"re-bubble-btn--active\",\n )}\n style={style}\n >\n {label}\n </button>\n </TooltipTrigger>\n <TooltipContent>{title}</TooltipContent>\n </Tooltip>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n\n// --- Visual Markdown Editor ---\n\n// --- Syntax-highlighted code editor (textarea + overlay) ---\n\nfunction highlightJson(text: string): string {\n // Escape HTML first\n const esc = text\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\");\n // Tokenize JSON with regex\n return esc.replace(\n /(\"(?:\\\\.|[^\"\\\\])*\")\\s*:|(\"(?:\\\\.|[^\"\\\\])*\")|((?:-?\\d+)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?)|(\\btrue\\b|\\bfalse\\b|\\bnull\\b)/g,\n (match, key, str, num, lit) => {\n if (key) return `<span class=\"sh-key\">${key}</span>:`;\n if (str) return `<span class=\"sh-str\">${str}</span>`;\n if (num) return `<span class=\"sh-num\">${num}</span>`;\n if (lit) return `<span class=\"sh-lit\">${lit}</span>`;\n return match;\n },\n );\n}\n\nconst shStyles = `\n.sh-key { color: #7dd3fc; }\n.sh-str { color: #86efac; }\n.sh-num { color: #fca5a5; }\n.sh-lit { color: #c4b5fd; }\n`;\n\nfunction SyntaxHighlightEditor({\n value,\n onChange,\n language: _language,\n}: {\n value: string;\n onChange: (v: string) => void;\n language: \"json\";\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const preRef = useRef<HTMLPreElement>(null);\n\n const highlighted = useMemo(() => highlightJson(value), [value]);\n\n const syncScroll = useCallback(() => {\n if (textareaRef.current && preRef.current) {\n preRef.current.scrollTop = textareaRef.current.scrollTop;\n preRef.current.scrollLeft = textareaRef.current.scrollLeft;\n }\n }, []);\n\n const monoFont =\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace';\n const sharedStyle: React.CSSProperties = {\n fontFamily: monoFont,\n fontSize: 13,\n lineHeight: 1.6,\n padding: 12,\n margin: 0,\n border: \"none\",\n whiteSpace: \"pre\",\n wordWrap: \"normal\",\n overflowWrap: \"normal\",\n tabSize: 2,\n };\n\n return (\n <>\n <style>{shStyles}</style>\n <div\n className=\"flex-1 min-h-0\"\n style={{ position: \"relative\", overflow: \"hidden\" }}\n >\n <pre\n ref={preRef}\n aria-hidden\n style={{\n ...sharedStyle,\n position: \"absolute\",\n inset: 0,\n overflow: \"auto\",\n pointerEvents: \"none\",\n color: \"hsl(var(--muted-foreground))\",\n background: \"transparent\",\n }}\n dangerouslySetInnerHTML={{ __html: highlighted + \"\\n\" }}\n />\n <textarea\n ref={textareaRef}\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onScroll={syncScroll}\n spellCheck={false}\n style={{\n ...sharedStyle,\n position: \"absolute\",\n inset: 0,\n width: \"100%\",\n height: \"100%\",\n overflow: \"auto\",\n resize: \"none\",\n background: \"transparent\",\n color: \"transparent\",\n caretColor: \"hsl(var(--foreground))\",\n outline: \"none\",\n WebkitTextFillColor: \"transparent\",\n }}\n />\n </div>\n </>\n );\n}\n\nfunction VisualMarkdownEditor({\n content,\n onChange,\n resourcePath,\n}: {\n content: string;\n onChange: (md: string) => void;\n resourcePath: string;\n}) {\n const isSettingContent = useRef(false);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n // Parse frontmatter — strip it from tiptap content, re-prepend on save\n const parsed = useMemo(() => parseFrontmatter(content), [content]);\n const frontmatterRef = useRef(parsed);\n frontmatterRef.current = parsed;\n\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: { levels: [1, 2, 3] },\n codeBlock: {},\n link: false,\n dropcursor: { color: \"hsl(var(--ring))\", width: 2 },\n }),\n Placeholder.configure({\n placeholder: ({ node }) => {\n if (node.type.name === \"heading\") {\n const level = node.attrs.level;\n if (level === 1) return \"Heading 1\";\n if (level === 2) return \"Heading 2\";\n return \"Heading 3\";\n }\n return \"Type '/' for commands...\";\n },\n showOnlyWhenEditable: true,\n showOnlyCurrent: true,\n }),\n Link.configure({\n openOnClick: false,\n HTMLAttributes: { class: \"re-link\" },\n }),\n Markdown.configure({\n html: true,\n transformPastedText: true,\n transformCopiedText: true,\n }),\n ],\n content: parsed?.body ?? content,\n editorProps: {\n attributes: {\n class: \"re-prose\",\n },\n },\n onUpdate: ({ editor }) => {\n if (isSettingContent.current) return;\n try {\n const md = (editor.storage as any).markdown.getMarkdown();\n // Re-prepend frontmatter if it existed\n const fm = frontmatterRef.current;\n const full = fm ? fm.raw + md : md;\n onChangeRef.current(full);\n } catch (err) {\n console.error(\"Markdown serialization error:\", err);\n }\n },\n });\n\n useEffect(() => {\n if (!editor || editor.isDestroyed) return;\n const currentMd = (editor.storage as any).markdown.getMarkdown();\n if (currentMd !== (parsed?.body ?? content)) {\n if (editor.isFocused) return;\n isSettingContent.current = true;\n editor.commands.setContent(parsed?.body ?? content);\n isSettingContent.current = false;\n }\n }, [content, editor, parsed]);\n\n useEffect(() => {\n return () => {\n editor?.destroy();\n };\n }, [editor]);\n\n if (!editor) return null;\n\n const handleWrapperClick = (e: React.MouseEvent<HTMLDivElement>) => {\n // If the click was on the wrapper (empty area), not on editor content, focus at end\n const target = e.target as HTMLElement;\n if (\n target.classList.contains(\"re-editor-clickable\") ||\n target.classList.contains(\"re-editor-wrapper\")\n ) {\n editor.chain().focus(\"end\").run();\n }\n };\n\n return (\n <div\n className=\"re-editor-wrapper re-editor-clickable\"\n onClick={handleWrapperClick}\n style={{ position: \"relative\", minHeight: \"100%\", cursor: \"text\" }}\n >\n {parsed && (\n <FrontmatterBar\n resourcePath={resourcePath}\n frontmatter={parsed}\n onChange={(updated) => {\n frontmatterRef.current = updated;\n // Get current body and combine with updated frontmatter\n try {\n const md = (editor.storage as any).markdown.getMarkdown();\n onChangeRef.current(updated.raw + md);\n } catch {\n // fallback\n }\n }}\n />\n )}\n <InlineBubbleToolbar editor={editor} />\n <SlashMenu editor={editor} />\n <EditorContent editor={editor} />\n </div>\n );\n}\n\n// --- Main ResourceEditor ---\n\ninterface RemoteAgentFormValue {\n id?: string;\n name: string;\n description: string;\n url: string;\n color: string;\n}\n\nfunction parseRemoteAgentContent(\n content: string,\n path: string,\n): RemoteAgentFormValue {\n const fallbackId = getRemoteAgentIdFromPath(path);\n try {\n const data = JSON.parse(content || \"{}\");\n return {\n id: data.id || fallbackId,\n name: data.name ?? \"\",\n description: data.description ?? \"\",\n url: data.url ?? \"\",\n color: data.color ?? \"#6B7280\",\n };\n } catch {\n return {\n id: fallbackId,\n name: \"\",\n description: \"\",\n url: \"\",\n color: \"#6B7280\",\n };\n }\n}\n\nfunction serializeRemoteAgent(value: RemoteAgentFormValue): string {\n return (\n JSON.stringify(\n {\n id: value.id,\n name: value.name,\n description: value.description || undefined,\n url: value.url,\n color: value.color,\n },\n null,\n 2,\n ) + \"\\n\"\n );\n}\n\nfunction RemoteAgentFormEditor({\n resource,\n onChange,\n}: {\n resource: Resource;\n onChange: (content: string) => void;\n}) {\n const [value, setValue] = useState<RemoteAgentFormValue>(() =>\n parseRemoteAgentContent(resource.content, resource.path),\n );\n const prevIdRef = useRef(resource.id);\n\n useEffect(() => {\n if (prevIdRef.current !== resource.id) {\n setValue(parseRemoteAgentContent(resource.content, resource.path));\n prevIdRef.current = resource.id;\n }\n }, [resource.id, resource.content, resource.path]);\n\n const update = (patch: Partial<RemoteAgentFormValue>) => {\n const next = { ...value, ...patch };\n setValue(next);\n onChange(serializeRemoteAgent(next));\n };\n\n const inputClass =\n \"w-full rounded-md border border-border bg-background px-2.5 py-1.5 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50 focus:ring-1 focus:ring-accent\";\n const labelClass = \"block text-[11px] font-medium text-muted-foreground mb-1\";\n\n return (\n <div className=\"flex flex-1 min-h-0 flex-col overflow-y-auto p-4\">\n <div className=\"max-w-md space-y-3\">\n <p className=\"text-[11px] text-muted-foreground/70 leading-snug\">\n Connected remote agent over the A2A protocol. @-mention it in chat to\n delegate tasks.\n </p>\n <div>\n <label className={labelClass}>Name</label>\n <input\n className={inputClass}\n value={value.name}\n onChange={(e) => update({ name: e.target.value })}\n placeholder=\"Analytics\"\n />\n </div>\n <div>\n <label className={labelClass}>URL</label>\n <input\n className={inputClass}\n value={value.url}\n onChange={(e) => update({ url: e.target.value })}\n placeholder=\"https://analytics.example.com\"\n />\n <p className=\"mt-1 text-[10px] text-muted-foreground/50\">\n A2A endpoint. The agent card is served at{\" \"}\n <code>/.well-known/agent-card.json</code>.\n </p>\n </div>\n <div>\n <label className={labelClass}>Description</label>\n <textarea\n className={cn(inputClass, \"resize-y\")}\n rows={3}\n value={value.description}\n onChange={(e) => update({ description: e.target.value })}\n placeholder=\"What this agent is good at — helps the main agent decide when to delegate.\"\n />\n </div>\n <div>\n <label className={labelClass}>Color</label>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={value.color}\n onChange={(e) => update({ color: e.target.value })}\n className=\"h-8 w-10 cursor-pointer rounded border border-border bg-transparent\"\n />\n <input\n className={cn(inputClass, \"flex-1\")}\n value={value.color}\n onChange={(e) => update({ color: e.target.value })}\n placeholder=\"#6B7280\"\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nexport function ResourceEditor({\n resource,\n onSave,\n view: controlledView,\n onViewChange,\n onSaveStatusChange,\n hideToolbar,\n}: ResourceEditorProps) {\n const [content, setContent] = useState(resource.content);\n const [internalView, setInternalView] = useState<\"visual\" | \"code\">(\n getViewPref,\n );\n const view = controlledView ?? internalView;\n const [saveStatus, setSaveStatus] = useState<\"idle\" | \"saving\" | \"saved\">(\n \"idle\",\n );\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const prevIdRef = useRef(resource.id);\n\n // Reset content when resource changes\n useEffect(() => {\n if (prevIdRef.current !== resource.id) {\n setContent(resource.content);\n setSaveStatus(\"idle\");\n onSaveStatusChange?.(\"idle\");\n prevIdRef.current = resource.id;\n }\n }, [resource.id, resource.content, onSaveStatusChange]);\n\n const handleChange = useCallback(\n (newContent: string) => {\n setContent(newContent);\n setSaveStatus(\"idle\");\n onSaveStatusChange?.(\"idle\");\n if (debounceRef.current) clearTimeout(debounceRef.current);\n debounceRef.current = setTimeout(() => {\n setSaveStatus(\"saving\");\n onSaveStatusChange?.(\"saving\");\n onSave(newContent);\n setTimeout(() => {\n setSaveStatus(\"saved\");\n onSaveStatusChange?.(\"saved\");\n }, 300);\n }, 1000);\n },\n [onSave, onSaveStatusChange],\n );\n\n const switchView = useCallback(\n (v: \"visual\" | \"code\") => {\n setInternalView(v);\n setViewPref(v);\n onViewChange?.(v);\n },\n [onViewChange],\n );\n\n // Cleanup debounce on unmount\n useEffect(() => {\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, []);\n\n const isMarkdown =\n resource.mimeType === \"text/markdown\" || resource.path.endsWith(\".md\");\n const isImage = resource.mimeType.startsWith(\"image/\");\n const isRemoteAgent = isRemoteAgentPath(resource.path);\n\n // Remote-agent manifest → form editor\n if (isRemoteAgent) {\n return (\n <div className=\"flex h-full flex-col\">\n <RemoteAgentFormEditor resource={resource} onChange={handleChange} />\n </div>\n );\n }\n\n // Image preview\n if (isImage) {\n return (\n <div className=\"flex h-full flex-col\">\n <div className=\"flex flex-1 items-center justify-center overflow-auto p-4\">\n <img\n src={agentNativePath(`/_agent-native/resources/${resource.id}?raw`)}\n alt={resource.path}\n className=\"max-h-full max-w-full object-contain\"\n />\n </div>\n </div>\n );\n }\n\n // Markdown files get visual/code toggle\n if (isMarkdown) {\n return (\n <div className=\"flex h-full flex-col\">\n <style>{editorStyles}</style>\n {!hideToolbar && (\n <div className=\"flex items-center justify-between border-b border-border px-3 py-2\">\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => switchView(\"visual\")}\n className={cn(\n \"rounded-md px-2 py-1.5 text-[12px] leading-none\",\n view === \"visual\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={CONTROL_STYLE}\n >\n Visual\n </button>\n <button\n onClick={() => switchView(\"code\")}\n className={cn(\n \"rounded-md px-2 py-1.5 text-[12px] leading-none\",\n view === \"code\"\n ? \"bg-accent text-foreground\"\n : \"text-muted-foreground hover:bg-accent/50 hover:text-foreground\",\n )}\n style={CONTROL_STYLE}\n >\n Code\n </button>\n </div>\n <span className=\"text-[11px] text-muted-foreground/60\">\n {saveStatus === \"saving\"\n ? \"Saving...\"\n : saveStatus === \"saved\"\n ? \"Saved\"\n : \"\"}\n </span>\n </div>\n )}\n {view === \"visual\" ? (\n <div\n className=\"flex-1 min-h-0 overflow-y-auto p-3\"\n key={resource.id + \"-visual\"}\n >\n <VisualMarkdownEditor\n content={content}\n onChange={handleChange}\n resourcePath={resource.path}\n />\n </div>\n ) : (\n <textarea\n value={content}\n onChange={(e) => handleChange(e.target.value)}\n className=\"flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.6,\n }}\n spellCheck={false}\n />\n )}\n </div>\n );\n }\n\n // Non-markdown text files\n const isJson =\n resource.mimeType === \"application/json\" || resource.path.endsWith(\".json\");\n\n return (\n <div className=\"flex h-full flex-col\">\n {isJson ? (\n <SyntaxHighlightEditor\n value={content}\n onChange={handleChange}\n language=\"json\"\n />\n ) : (\n <textarea\n value={content}\n onChange={(e) => handleChange(e.target.value)}\n className=\"flex-1 min-h-0 resize-none bg-transparent p-3 text-[13px] text-foreground outline-none placeholder:text-muted-foreground/50\"\n style={{\n fontFamily:\n 'ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace',\n lineHeight: 1.6,\n }}\n spellCheck={false}\n />\n )}\n </div>\n );\n}\n\n// --- Scoped editor styles (injected inline so no external CSS needed) ---\n\nconst editorStyles = `\n/* Prose styling for the visual editor */\n.re-prose {\n outline: none;\n color: hsl(var(--foreground));\n line-height: 1.65;\n font-size: 13px;\n min-height: 100%;\n}\n.re-prose > *:first-child { margin-top: 0; }\n\n.re-prose h1 {\n font-size: 1.5em;\n font-weight: 700;\n margin: 1em 0 0.25em;\n line-height: 1.25;\n}\n.re-prose h2 {\n font-size: 1.25em;\n font-weight: 600;\n margin: 0.8em 0 0.2em;\n line-height: 1.3;\n}\n.re-prose h3 {\n font-size: 1.1em;\n font-weight: 600;\n margin: 0.6em 0 0.15em;\n line-height: 1.35;\n}\n.re-prose p {\n margin: 0.35em 0;\n min-height: 1.65em;\n}\n.re-prose ul {\n list-style-type: disc;\n padding-left: 1.4em;\n margin: 0.2em 0;\n}\n.re-prose ol {\n list-style-type: decimal;\n padding-left: 1.4em;\n margin: 0.2em 0;\n}\n.re-prose li { margin: 0.05em 0; }\n.re-prose li p { margin: 0; }\n\n.re-prose blockquote {\n border-left: 2px solid hsl(var(--border));\n padding-left: 0.8em;\n margin: 0.3em 0;\n color: hsl(var(--muted-foreground));\n}\n.re-prose code {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 0.88em;\n background: hsl(var(--muted));\n padding: 0.1em 0.3em;\n border-radius: 3px;\n}\n.re-prose pre {\n font-family: ui-monospace, SFMono-Regular, \"SF Mono\", Menlo, Consolas, monospace;\n font-size: 12px;\n background: hsl(var(--muted));\n border-radius: 4px;\n padding: 0.7em 0.9em;\n margin: 0.3em 0;\n overflow-x: auto;\n line-height: 1.5;\n}\n.re-prose pre code {\n background: none;\n padding: 0;\n border: none;\n font-size: inherit;\n}\n.re-prose hr {\n border: none;\n border-top: 1px solid hsl(var(--border));\n margin: 1em 0;\n}\n.re-prose strong { font-weight: 600; }\n.re-prose em { font-style: italic; }\n.re-prose s { text-decoration: line-through; }\n\n.re-link {\n color: hsl(var(--foreground));\n text-decoration: underline;\n text-underline-offset: 2px;\n text-decoration-color: hsl(var(--muted-foreground));\n cursor: pointer;\n}\n.re-link:hover {\n text-decoration-color: hsl(var(--foreground));\n}\n\n/* Placeholder */\n.re-prose p.is-editor-empty:first-child::before,\n.re-prose p.is-empty::before,\n.re-prose h1.is-empty::before,\n.re-prose h2.is-empty::before,\n.re-prose h3.is-empty::before {\n content: attr(data-placeholder);\n float: left;\n color: hsl(var(--muted-foreground));\n opacity: 0.5;\n pointer-events: none;\n height: 0;\n}\n\n/* Selection */\n.re-prose ::selection {\n background: hsl(210 100% 52% / 0.2);\n}\n\n/* Bubble toolbar */\n.re-bubble-toolbar {\n display: flex;\n align-items: center;\n background: hsl(0 0% 15%);\n border-radius: 6px;\n padding: 3px;\n box-shadow: 0 4px 16px rgb(0 0 0 / 0.25), 0 0 0 1px rgb(255 255 255 / 0.06);\n}\n.re-bubble-btn {\n padding: 3px 6px;\n border-radius: 4px;\n font-size: 12px;\n color: rgba(255,255,255,0.75);\n background: none;\n border: none;\n cursor: pointer;\n line-height: 1;\n}\n.re-bubble-btn:hover {\n background: rgba(255,255,255,0.12);\n color: white;\n}\n.re-bubble-btn--active {\n background: rgba(255,255,255,0.18);\n color: white;\n}\n\n/* Slash command menu */\n.re-slash-menu {\n background: hsl(var(--popover));\n border: 1px solid hsl(var(--border));\n border-radius: 6px;\n box-shadow: 0 4px 20px rgb(0 0 0 / 0.12), 0 0 0 1px rgb(0 0 0 / 0.04);\n min-width: 220px;\n max-height: 320px;\n overflow-y: auto;\n color: hsl(var(--foreground));\n}\n.re-slash-item {\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 10px;\n text-align: left;\n background: none;\n border: none;\n cursor: pointer;\n color: hsl(var(--foreground));\n font-size: 13px;\n}\n.re-slash-item:hover,\n.re-slash-item--active {\n background: hsl(var(--accent));\n}\n.re-slash-icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n border: 1px solid hsl(var(--border));\n background: hsl(var(--background));\n font-size: 12px;\n font-weight: 600;\n color: hsl(var(--muted-foreground));\n flex-shrink: 0;\n}\n.re-slash-title {\n display: block;\n font-weight: 500;\n font-size: 13px;\n}\n.re-slash-desc {\n display: block;\n font-size: 11px;\n color: hsl(var(--muted-foreground));\n}\n`;\n"]}
@@ -4,7 +4,7 @@ import { type AgentChatMessage } from "./agent-chat.js";
4
4
  *
5
5
  * Returns [isGenerating, send] where:
6
6
  * - isGenerating: true after send() is called, false when the
7
- * builder.chatRunning event fires with detail.isRunning === false
7
+ * agentNative.chatRunning event reports that the run has stopped
8
8
  * - send: wrapper around sendToAgentChat that sets isGenerating to true
9
9
  */
10
10
  export declare function useAgentChatGenerating(): [
@@ -5,7 +5,7 @@ import { sendToAgentChat } from "./agent-chat.js";
5
5
  *
6
6
  * Returns [isGenerating, send] where:
7
7
  * - isGenerating: true after send() is called, false when the
8
- * builder.chatRunning event fires with detail.isRunning === false
8
+ * agentNative.chatRunning event reports that the run has stopped
9
9
  * - send: wrapper around sendToAgentChat that sets isGenerating to true
10
10
  */
11
11
  export function useAgentChatGenerating() {
@@ -13,8 +13,8 @@ export function useAgentChatGenerating() {
13
13
  useEffect(() => {
14
14
  const handler = (e) => {
15
15
  const detail = e.detail;
16
- if (detail?.isRunning === false) {
17
- setIsGenerating(false);
16
+ if (typeof detail?.isRunning === "boolean") {
17
+ setIsGenerating(detail.isRunning);
18
18
  }
19
19
  };
20
20
  window.addEventListener("agentNative.chatRunning", handler);
@@ -1 +1 @@
1
- {"version":3,"file":"use-agent-chat.js","sourceRoot":"","sources":["../../src/client/use-agent-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB;IAIpC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAI,CAAiB,CAAC,MAAM,CAAC;YACzC,IAAI,MAAM,EAAE,SAAS,KAAK,KAAK,EAAE,CAAC;gBAChC,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,IAAsB,EAAU,EAAE;QAC1D,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { sendToAgentChat, type AgentChatMessage } from \"./agent-chat.js\";\n\n/**\n * Hook that wraps sendToAgentChat with a loading state.\n *\n * Returns [isGenerating, send] where:\n * - isGenerating: true after send() is called, false when the\n * builder.chatRunning event fires with detail.isRunning === false\n * - send: wrapper around sendToAgentChat that sets isGenerating to true\n */\nexport function useAgentChatGenerating(): [\n boolean,\n (opts: AgentChatMessage) => string,\n] {\n const [isGenerating, setIsGenerating] = useState(false);\n\n useEffect(() => {\n const handler = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n if (detail?.isRunning === false) {\n setIsGenerating(false);\n }\n };\n window.addEventListener(\"agentNative.chatRunning\", handler);\n return () => window.removeEventListener(\"agentNative.chatRunning\", handler);\n }, []);\n\n const send = useCallback((opts: AgentChatMessage): string => {\n setIsGenerating(true);\n return sendToAgentChat(opts);\n }, []);\n\n return [isGenerating, send];\n}\n"]}
1
+ {"version":3,"file":"use-agent-chat.js","sourceRoot":"","sources":["../../src/client/use-agent-chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC;AAEzE;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB;IAIpC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,OAAO,GAAG,CAAC,CAAQ,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAI,CAAiB,CAAC,MAAM,CAAC;YACzC,IAAI,OAAO,MAAM,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC3C,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;QACH,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,yBAAyB,EAAE,OAAO,CAAC,CAAC;IAC9E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,IAAsB,EAAU,EAAE;QAC1D,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport { sendToAgentChat, type AgentChatMessage } from \"./agent-chat.js\";\n\n/**\n * Hook that wraps sendToAgentChat with a loading state.\n *\n * Returns [isGenerating, send] where:\n * - isGenerating: true after send() is called, false when the\n * agentNative.chatRunning event reports that the run has stopped\n * - send: wrapper around sendToAgentChat that sets isGenerating to true\n */\nexport function useAgentChatGenerating(): [\n boolean,\n (opts: AgentChatMessage) => string,\n] {\n const [isGenerating, setIsGenerating] = useState(false);\n\n useEffect(() => {\n const handler = (e: Event) => {\n const detail = (e as CustomEvent).detail;\n if (typeof detail?.isRunning === \"boolean\") {\n setIsGenerating(detail.isRunning);\n }\n };\n window.addEventListener(\"agentNative.chatRunning\", handler);\n return () => window.removeEventListener(\"agentNative.chatRunning\", handler);\n }, []);\n\n const send = useCallback((opts: AgentChatMessage): string => {\n setIsGenerating(true);\n return sendToAgentChat(opts);\n }, []);\n\n return [isGenerating, send];\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.12.0",
3
+ "version": "0.12.2",
4
4
  "type": "module",
5
5
  "description": "Framework for agent-native application development — where AI agents and UI share state via files",
6
6
  "license": "MIT",