@arbidocs/blocks 0.4.134 → 0.4.136

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/dist/agents/index.cjs +354 -306
  2. package/dist/agents/index.js +5 -5
  3. package/dist/agents/skills/index.d.ts +2 -0
  4. package/dist/agents/skills/skillFiles.d.ts +65 -0
  5. package/dist/agents/skills/skillImport.d.ts +36 -0
  6. package/dist/agents/workflows/index.d.ts +1 -1
  7. package/dist/agents/workflows/workflow.d.ts +19 -0
  8. package/dist/calls/index.cjs +3 -3
  9. package/dist/calls/index.js +2 -2
  10. package/dist/chat/index.cjs +138 -138
  11. package/dist/chat/index.js +3 -3
  12. package/dist/{chunk-26E6PHD2.js → chunk-5BXEYYH6.js} +3 -3
  13. package/dist/{chunk-26E6PHD2.js.map → chunk-5BXEYYH6.js.map} +1 -1
  14. package/dist/{chunk-FUTMU4FR.js → chunk-5HFPRI3W.js} +3 -3
  15. package/dist/{chunk-FUTMU4FR.js.map → chunk-5HFPRI3W.js.map} +1 -1
  16. package/dist/{chunk-WV4IDVDQ.cjs → chunk-7YLJHTDC.cjs} +11 -11
  17. package/dist/{chunk-WV4IDVDQ.cjs.map → chunk-7YLJHTDC.cjs.map} +1 -1
  18. package/dist/{chunk-GZPTWHP5.cjs → chunk-C44D4WFG.cjs} +6 -6
  19. package/dist/{chunk-GZPTWHP5.cjs.map → chunk-C44D4WFG.cjs.map} +1 -1
  20. package/dist/{chunk-OPTBQSCV.cjs → chunk-DJM7DLCT.cjs} +3 -3
  21. package/dist/{chunk-OPTBQSCV.cjs.map → chunk-DJM7DLCT.cjs.map} +1 -1
  22. package/dist/{chunk-VHJHY7TT.js → chunk-ECERC6TI.js} +3 -3
  23. package/dist/{chunk-VHJHY7TT.js.map → chunk-ECERC6TI.js.map} +1 -1
  24. package/dist/{chunk-OQ7RUNOC.js → chunk-GFYGYME3.js} +3 -3
  25. package/dist/{chunk-OQ7RUNOC.js.map → chunk-GFYGYME3.js.map} +1 -1
  26. package/dist/{chunk-HW2J4JMV.cjs → chunk-IE5CUCZK.cjs} +8 -8
  27. package/dist/{chunk-HW2J4JMV.cjs.map → chunk-IE5CUCZK.cjs.map} +1 -1
  28. package/dist/{chunk-54ANPPMV.js → chunk-IQU2GI6V.js} +248 -4
  29. package/dist/chunk-IQU2GI6V.js.map +1 -0
  30. package/dist/{chunk-CXLVI3SB.js → chunk-JO3EMZ4X.js} +3 -3
  31. package/dist/{chunk-CXLVI3SB.js.map → chunk-JO3EMZ4X.js.map} +1 -1
  32. package/dist/{chunk-ARDHLU73.cjs → chunk-KDUGTKVI.cjs} +21 -2
  33. package/dist/chunk-KDUGTKVI.cjs.map +1 -0
  34. package/dist/{chunk-4RLCRFZS.js → chunk-L2PAPOZ5.js} +21 -3
  35. package/dist/chunk-L2PAPOZ5.js.map +1 -0
  36. package/dist/{chunk-LC2KJSUS.cjs → chunk-LIHRGG4M.cjs} +302 -45
  37. package/dist/chunk-LIHRGG4M.cjs.map +1 -0
  38. package/dist/{chunk-BMNNT27D.js → chunk-LT2X5N37.js} +7 -48
  39. package/dist/chunk-LT2X5N37.js.map +1 -0
  40. package/dist/{chunk-D4YR56FV.cjs → chunk-N55UIXVT.cjs} +5 -5
  41. package/dist/{chunk-D4YR56FV.cjs.map → chunk-N55UIXVT.cjs.map} +1 -1
  42. package/dist/{chunk-BZF55UCE.cjs → chunk-OAL3B2ZU.cjs} +5 -5
  43. package/dist/{chunk-BZF55UCE.cjs.map → chunk-OAL3B2ZU.cjs.map} +1 -1
  44. package/dist/{chunk-AAFX64WD.cjs → chunk-OR4CO743.cjs} +3 -3
  45. package/dist/{chunk-AAFX64WD.cjs.map → chunk-OR4CO743.cjs.map} +1 -1
  46. package/dist/{chunk-HM23LXUP.cjs → chunk-OWCEQKAR.cjs} +23 -2
  47. package/dist/chunk-OWCEQKAR.cjs.map +1 -0
  48. package/dist/{chunk-QUDCNT63.cjs → chunk-OZLWSNUC.cjs} +66 -110
  49. package/dist/chunk-OZLWSNUC.cjs.map +1 -0
  50. package/dist/{chunk-VW2C2AZL.js → chunk-RUB62J2X.js} +3 -3
  51. package/dist/{chunk-VW2C2AZL.js.map → chunk-RUB62J2X.js.map} +1 -1
  52. package/dist/{chunk-4UMXQPNA.js → chunk-VIU7AMHF.js} +4 -4
  53. package/dist/{chunk-4UMXQPNA.js.map → chunk-VIU7AMHF.js.map} +1 -1
  54. package/dist/{chunk-7HAM7Y5U.js → chunk-Y5KTM3V5.js} +22 -3
  55. package/dist/chunk-Y5KTM3V5.js.map +1 -0
  56. package/dist/{chunk-DWZXSPMB.cjs → chunk-ZAVEMQ37.cjs} +3 -3
  57. package/dist/{chunk-DWZXSPMB.cjs.map → chunk-ZAVEMQ37.cjs.map} +1 -1
  58. package/dist/{chunk-YIF6SVSO.js → chunk-ZNI4SW2G.js} +4 -4
  59. package/dist/{chunk-YIF6SVSO.js.map → chunk-ZNI4SW2G.js.map} +1 -1
  60. package/dist/collaboration/index.cjs +42 -42
  61. package/dist/collaboration/index.js +2 -2
  62. package/dist/connect/docx.cjs +6 -6
  63. package/dist/connect/docx.js +5 -5
  64. package/dist/connect/index.cjs +220 -131
  65. package/dist/connect/index.cjs.map +1 -1
  66. package/dist/connect/index.d.ts +2 -2
  67. package/dist/connect/index.js +142 -58
  68. package/dist/connect/index.js.map +1 -1
  69. package/dist/connection/ConnectedSkillUpload.d.ts +26 -2
  70. package/dist/connection/ConnectedWorkflowBuilder.d.ts +23 -11
  71. package/dist/connection/ConnectionProvider.d.ts +17 -0
  72. package/dist/facts/index.cjs +3 -3
  73. package/dist/facts/index.js +3 -3
  74. package/dist/files/index.cjs +2 -2
  75. package/dist/files/index.js +2 -2
  76. package/dist/home/index.cjs +2 -2
  77. package/dist/home/index.js +2 -2
  78. package/dist/index.cjs +616 -568
  79. package/dist/index.js +12 -12
  80. package/dist/retrieval/index.cjs +1 -1
  81. package/dist/retrieval/index.js +1 -1
  82. package/dist/settings/index.cjs +38 -38
  83. package/dist/settings/index.js +4 -4
  84. package/dist/shell/index.cjs +2 -2
  85. package/dist/shell/index.js +2 -2
  86. package/dist/studio/index.cjs +8 -8
  87. package/dist/studio/index.js +6 -6
  88. package/dist/workflow-canvas/index.cjs +109 -85
  89. package/dist/workflow-canvas/index.cjs.map +1 -1
  90. package/dist/workflow-canvas/index.d.ts +1 -1
  91. package/dist/workflow-canvas/index.js +60 -37
  92. package/dist/workflow-canvas/index.js.map +1 -1
  93. package/node_modules/@arbidocs/coedit/package.json +1 -1
  94. package/package.json +4 -4
  95. package/dist/chunk-4RLCRFZS.js.map +0 -1
  96. package/dist/chunk-54ANPPMV.js.map +0 -1
  97. package/dist/chunk-7HAM7Y5U.js.map +0 -1
  98. package/dist/chunk-ARDHLU73.cjs.map +0 -1
  99. package/dist/chunk-BMNNT27D.js.map +0 -1
  100. package/dist/chunk-HM23LXUP.cjs.map +0 -1
  101. package/dist/chunk-LC2KJSUS.cjs.map +0 -1
  102. package/dist/chunk-QUDCNT63.cjs.map +0 -1
@@ -1,15 +1,15 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkARDHLU73_cjs = require('./chunk-ARDHLU73.cjs');
5
- var chunkWV4IDVDQ_cjs = require('./chunk-WV4IDVDQ.cjs');
4
+ var chunkKDUGTKVI_cjs = require('./chunk-KDUGTKVI.cjs');
5
+ var chunk7YLJHTDC_cjs = require('./chunk-7YLJHTDC.cjs');
6
6
  var chunkJKB7WT7L_cjs = require('./chunk-JKB7WT7L.cjs');
7
7
  var react$1 = require('react');
8
8
  var react = require('@arbidocs/react');
9
9
  var jsxRuntime = require('react/jsx-runtime');
10
10
 
11
11
  function useConnectedAiTask() {
12
- const { assistantConfig } = chunkARDHLU73_cjs.useConnection();
12
+ const { assistantConfig } = chunkKDUGTKVI_cjs.useConnection();
13
13
  const task = react.useAiTask();
14
14
  const kitRun = task.run;
15
15
  const run = react$1.useCallback(
@@ -19,7 +19,7 @@ function useConnectedAiTask() {
19
19
  return { ...task, run };
20
20
  }
21
21
  function useWorkspaceDocs() {
22
- const { workspaceId, fallbackWorkspaceId } = chunkARDHLU73_cjs.useConnection();
22
+ const { workspaceId, fallbackWorkspaceId } = chunkKDUGTKVI_cjs.useConnection();
23
23
  return react.useWorkspaceDocs(workspaceId ?? fallbackWorkspaceId);
24
24
  }
25
25
  function useSemanticSearch() {
@@ -27,7 +27,7 @@ function useSemanticSearch() {
27
27
  return react.useSemanticSearch(docIds);
28
28
  }
29
29
  function useConnectedChat(options) {
30
- const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } = chunkARDHLU73_cjs.useConnection();
30
+ const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } = chunkKDUGTKVI_cjs.useConnection();
31
31
  const wsId = workspaceId ?? fallbackWorkspaceId;
32
32
  const { data: members = [] } = react.useWorkspaceUsers(wsId, {
33
33
  enabled: status === "authenticated" && !!wsId,
@@ -64,7 +64,7 @@ function useConnectedChat(options) {
64
64
  }
65
65
  function ConnectedAssistantDock(props) {
66
66
  const chat = useConnectedChat();
67
- return /* @__PURE__ */ jsxRuntime.jsx(chunkWV4IDVDQ_cjs.AssistantDock, { ...props, chat });
67
+ return /* @__PURE__ */ jsxRuntime.jsx(chunk7YLJHTDC_cjs.AssistantDock, { ...props, chat });
68
68
  }
69
69
 
70
70
  Object.defineProperty(exports, "redlineStats", {
@@ -84,5 +84,5 @@ exports.useConnectedAiTask = useConnectedAiTask;
84
84
  exports.useConnectedChat = useConnectedChat;
85
85
  exports.useSemanticSearch = useSemanticSearch;
86
86
  exports.useWorkspaceDocs = useWorkspaceDocs;
87
- //# sourceMappingURL=chunk-HW2J4JMV.cjs.map
88
- //# sourceMappingURL=chunk-HW2J4JMV.cjs.map
87
+ //# sourceMappingURL=chunk-IE5CUCZK.cjs.map
88
+ //# sourceMappingURL=chunk-IE5CUCZK.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connection/ai.tsx"],"names":["useConnection","useKitAiTask","useCallback","useKitWorkspaceDocs","useKitSemanticSearch","useWorkspaceUsers","useArbiChat","takeOpenDocumentForTurn","jsx","AssistantDock"],"mappings":"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","file":"chunk-HW2J4JMV.cjs","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\nimport { takeOpenDocumentForTurn } from '../chat/open-document'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n // Drafting mode: each question names the document open beside the chat.\n activeArtifact: () => takeOpenDocumentForTurn({ workspaceId: wsId }),\n ...options,\n workspaceId: wsId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
1
+ {"version":3,"sources":["../src/connection/ai.tsx"],"names":["useConnection","useKitAiTask","useCallback","useKitWorkspaceDocs","useKitSemanticSearch","useWorkspaceUsers","useArbiChat","takeOpenDocumentForTurn","jsx","AssistantDock"],"mappings":"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","file":"chunk-IE5CUCZK.cjs","sourcesContent":["/**\n * The connected agent hooks — thin adapters over the reusable AI kit in\n * `@arbidocs/react`. The streaming/accumulation/search plumbing lives once in\n * the SDK; these hooks only bind the *workspace source* (from the connection\n * context, falling back to the configured workspace) and inject the host's\n * default assistant *configuration* so call sites needn't know the config\n * ext_id. An explicit `opts.model` still wins.\n */\nimport { useCallback } from 'react'\nimport {\n useAiTask as useKitAiTask,\n useWorkspaceDocs as useKitWorkspaceDocs,\n useSemanticSearch as useKitSemanticSearch,\n useArbiChat,\n useWorkspaceUsers,\n type ArbiChat,\n type UseArbiChatOptions,\n type AiRunOptions,\n} from '@arbidocs/react'\nimport { useConnection } from './ConnectionProvider'\nimport { AssistantDock, type AssistantDockProps } from '../chat/AssistantDock'\nimport type { MentionCandidate } from '../chat/mentions'\nimport { takeOpenDocumentForTurn } from '../chat/open-document'\n\nexport type { AiTaskStatus, AiRunOptions, SearchChunk, ArtifactEvent } from '@arbidocs/react'\n\n/** Client-side redlining, re-exported so a host app has one import surface. */\nexport { toRedlineMarkdown, redlineStats, textToArtifact } from '@arbidocs/react'\n\n/**\n * The kit's `useAiTask` with the host's default assistant configuration\n * injected, so call sites needn't know the config ext_id.\n */\nexport function useConnectedAiTask() {\n const { assistantConfig } = useConnection()\n const task = useKitAiTask()\n const kitRun = task.run\n const run = useCallback(\n (question: string, docIds: string[], opts?: AiRunOptions) =>\n kitRun(question, docIds, { ...opts, model: opts?.model ?? assistantConfig }),\n [kitRun, assistantConfig]\n )\n return { ...task, run }\n}\n\n/** Resolve the active workspace + its document ids (what we ground the agent on). */\nexport function useWorkspaceDocs() {\n const { workspaceId, fallbackWorkspaceId } = useConnection()\n return useKitWorkspaceDocs(workspaceId ?? fallbackWorkspaceId)\n}\n\n/** Search the active workspace's documents and return the top matching passages. */\nexport function useSemanticSearch() {\n const { docIds } = useWorkspaceDocs()\n return useKitSemanticSearch(docIds)\n}\n\n/**\n * The chat controller for `ChatPage` bound to the connection: the active workspace and the host's\n * default assistant configuration are injected, so a host writes\n * `<ChatPage chat={useConnectedChat()} />`.\n */\nexport function useConnectedChat(\n options?: Omit<UseArbiChatOptions, 'workspaceId'>\n): ArbiChat & { mentionCandidates: MentionCandidate[] } {\n const { workspaceId, fallbackWorkspaceId, assistantConfig, user, status, ensureWorkspaceOpen } =\n useConnection()\n const wsId = workspaceId ?? fallbackWorkspaceId\n const { data: members = [] } = useWorkspaceUsers(wsId, {\n enabled: status === 'authenticated' && !!wsId,\n beforeFetch: ensureWorkspaceOpen,\n })\n const mentionCandidates: MentionCandidate[] = [\n { id: 'assistant', kind: 'assistant', label: 'Assistant' },\n ...(status === 'authenticated' ? members : [])\n .filter(\n (member) =>\n !member.agent_ext_id &&\n member.user.external_id !== user?.externalId &&\n !member.user.external_id.startsWith('agt-')\n )\n .map((member) => ({\n id: member.user.external_id,\n kind: 'user' as const,\n label:\n [member.user.given_name, member.user.family_name].filter(Boolean).join(' ') ||\n member.user.email,\n description: member.user.email,\n }))\n .sort((a, b) => a.label.localeCompare(b.label)),\n ]\n const chat = useArbiChat({\n // Drafting mode: each question names the document open beside the chat.\n activeArtifact: () => takeOpenDocumentForTurn({ workspaceId: wsId }),\n ...options,\n workspaceId: wsId,\n model: options?.model ?? assistantConfig,\n })\n return {\n ...chat,\n mentionCandidates,\n messages: chat.messages.map((message) => ({\n ...message,\n ...(message.authorId\n ? {\n senderName:\n message.authorId === user?.externalId\n ? user?.name || user?.email\n : mentionCandidates.find((candidate) => candidate.id === message.authorId)?.label,\n }\n : {}),\n })),\n }\n}\n\n/**\n * The assistant dock bound to the connection: mount it once in the layout (`Shell.Root`'s `aside`)\n * and put `AssistantDockToggle` in the topbar. Chat state lives here, so it survives closing the dock.\n */\nexport function ConnectedAssistantDock(props: Omit<AssistantDockProps, 'chat'>) {\n const chat = useConnectedChat()\n return <AssistantDock {...props} chat={chat} />\n}\n"]}
@@ -1,13 +1,14 @@
1
1
  "use client";
2
2
  import { FoldSection } from './chunk-XD2M6LIG.js';
3
3
  import { UploadDropzone } from './chunk-EVUEIBNU.js';
4
- import { workflowSteps, canAssign, nextAction, validateStep, assigneeName, runFieldsOf, failedUpstream, stepPhase, useElementSize, sendBackTargets, formatDate, shownValue, stepKindOf, stepLevels, waitingDocuments, stepDependencies, reviewInstructions, splitDocRef, isPersonStep, eventWaitingDocuments, waitingForDocumentsText, StepBadgeMark, StepChip, STEP_KIND_ICONS, DEFAULT_STEP_KIND_LABELS, composeStepPrompt, isRunFinished, runFields, isWorkflowScope } from './chunk-7HAM7Y5U.js';
4
+ import { workflowSteps, canAssign, fieldToFrontmatter, workflowFromFrontmatter, nextAction, validateStep, assigneeName, runFieldsOf, failedUpstream, stepPhase, useElementSize, sendBackTargets, formatDate, shownValue, stepKindOf, stepLevels, waitingDocuments, stepDependencies, reviewInstructions, splitDocRef, isPersonStep, eventWaitingDocuments, waitingForDocumentsText, StepBadgeMark, StepChip, STEP_KIND_ICONS, DEFAULT_STEP_KIND_LABELS, composeStepPrompt, isRunFinished, runFields, isWorkflowScope } from './chunk-Y5KTM3V5.js';
5
5
  import { TONE_DOT, TONE_SURFACE, TONE_SOLID_BORDER, TONE_BORDER } from './chunk-AUS3KBHJ.js';
6
6
  import { testIdOr, prefixedTestId } from './chunk-7F6CBP3Z.js';
7
7
  import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
8
8
  import { Loader2, UserRound, CornerUpLeft, ShieldCheck, MessageSquare, Check, Hourglass, Clock, PenLine, X, ExternalLink, Mail, Table2, CheckCircle2, ArrowLeft, ArrowRight, RotateCw, GitBranch, AlertTriangle, ChevronLeft, ChevronRight, FileText, ArrowUpRight, BellRing, Flag, RotateCcw, Play, Disc, Phone, UserRoundCog, Sparkles, MessageSquareReply, Square, KeyRound, Lock } from 'lucide-react';
9
9
  import { cn, Popover, PopoverTrigger, PopoverContent, Button, Textarea, Card, Label, Input, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Switch } from '@arbidocs/react/ui';
10
10
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
11
+ import { unzip, strFromU8 } from 'fflate';
11
12
 
12
13
  var DEFAULT_SCHEMA_FORM_LABELS = {
13
14
  optional: "(optional)",
@@ -569,6 +570,47 @@ function fromStepField(f) {
569
570
  ...f.max != null ? { max: f.max } : {}
570
571
  };
571
572
  }
573
+
574
+ // src/agents/workflows/skillMarkdown.ts
575
+ var JSON_KEYS = /* @__PURE__ */ new Set(["inputs"]);
576
+ var oneLine = (text) => text.replace(/\s*\n\s*/g, " ").trim();
577
+ var skillSlug = (raw) => raw.toLowerCase().replace(/[^a-z0-9-]/g, "");
578
+ function workflowToSkillMarkdown(workflow) {
579
+ const { run } = workflow;
580
+ if (run.kind !== "prompt") throw new Error("Only skills that start a chat can be copied");
581
+ const lines = [
582
+ "---",
583
+ `name: ${skillSlug(workflow.id)}`,
584
+ `description: ${oneLine(workflow.description)}`
585
+ ];
586
+ if (workflow.icon) lines.push(`icon: ${workflow.icon}`);
587
+ if (workflow.landing !== "chat") lines.push(`landing: ${workflow.landing}`);
588
+ if (workflow.requiresFiles) lines.push("requires_files: true");
589
+ if (workflow.inputs.length > 0) {
590
+ lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(fieldToFrontmatter))}`);
591
+ }
592
+ lines.push("---", "", run.promptTemplate.trim(), "");
593
+ return lines.join("\n");
594
+ }
595
+ function workflowFromSkillMarkdown(id, text) {
596
+ const match = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/.exec(text);
597
+ const frontmatter = {};
598
+ const body = match ? match[2] : text;
599
+ for (const line of (match ? match[1] : "").split("\n")) {
600
+ const i = line.indexOf(":");
601
+ if (i < 1) continue;
602
+ const key = line.slice(0, i).trim();
603
+ const value = line.slice(i + 1).trim();
604
+ if (JSON_KEYS.has(key)) {
605
+ try {
606
+ frontmatter[key] = JSON.parse(value);
607
+ } catch {
608
+ }
609
+ } else if (value === "true" || value === "false") frontmatter[key] = value === "true";
610
+ else frontmatter[key] = value;
611
+ }
612
+ return workflowFromFrontmatter(id, frontmatter, body);
613
+ }
572
614
  var errorMessage = (e) => e instanceof Error ? e.message : typeof e === "string" ? e : "Something went wrong.";
573
615
  function firstOpen(steps, states) {
574
616
  const open = steps.find((s) => !["done", "skipped"].includes(states[s.id]?.status ?? "pending"));
@@ -2319,6 +2361,208 @@ function StepNotices({
2319
2361
  ))
2320
2362
  ] });
2321
2363
  }
2364
+
2365
+ // src/agents/skills/skillFiles.ts
2366
+ var SKILL_TYPES = ["markdown", "python", "shell", "javascript", "typescript"];
2367
+ var SKILL_MAIN_FILENAME = "SKILL.md";
2368
+ var MAIN_NAMES = /* @__PURE__ */ new Set(["skill.md", "skill.py", "skill.sh", "skill.js", "skill.ts"]);
2369
+ function isMainSkillFile(filename, skillName) {
2370
+ const lower = filename.toLowerCase();
2371
+ if (MAIN_NAMES.has(lower)) return true;
2372
+ const stem = lower.includes(".") ? lower.slice(0, lower.lastIndexOf(".")) : lower;
2373
+ return stem === skillName;
2374
+ }
2375
+ function detectTypeFromContent(content, filename) {
2376
+ if (filename) {
2377
+ const lower = filename.toLowerCase();
2378
+ if (lower.endsWith(".py")) return "python";
2379
+ if (lower.endsWith(".sh")) return "shell";
2380
+ if (lower.endsWith(".js")) return "javascript";
2381
+ if (lower.endsWith(".ts")) return "typescript";
2382
+ }
2383
+ if (content) {
2384
+ const firstLine = content.split("\n", 1)[0].trim();
2385
+ if (firstLine.startsWith("#!")) {
2386
+ if (firstLine.includes("python")) return "python";
2387
+ if (firstLine.includes("bash") || firstLine.includes("/sh")) return "shell";
2388
+ if (firstLine.includes("ts-node")) return "typescript";
2389
+ if (firstLine.includes("node")) return "javascript";
2390
+ }
2391
+ }
2392
+ return "markdown";
2393
+ }
2394
+ function parseSkillFrontmatter(raw, filename = "") {
2395
+ const config = {};
2396
+ let name = "";
2397
+ let description = "";
2398
+ let skillType = "markdown";
2399
+ if (!raw.startsWith("---")) {
2400
+ return {
2401
+ content: raw,
2402
+ name,
2403
+ description,
2404
+ config,
2405
+ skillType: detectTypeFromContent(raw, filename)
2406
+ };
2407
+ }
2408
+ const end = raw.indexOf("---", 3);
2409
+ if (end === -1) {
2410
+ return {
2411
+ content: raw,
2412
+ name,
2413
+ description,
2414
+ config,
2415
+ skillType: detectTypeFromContent(raw, filename)
2416
+ };
2417
+ }
2418
+ const frontmatter = raw.slice(3, end).trim();
2419
+ const body = raw.slice(end + 3).trim();
2420
+ for (const rawLine of frontmatter.split("\n")) {
2421
+ const line = rawLine.trim();
2422
+ if (!line || !line.includes(":")) continue;
2423
+ const idx = line.indexOf(":");
2424
+ const key = line.slice(0, idx).trim().toLowerCase();
2425
+ const value = line.slice(idx + 1).trim();
2426
+ if (key === "name" && value) {
2427
+ name = value;
2428
+ } else if (key === "description" && value) {
2429
+ description = value;
2430
+ } else if (key === "model" && value) {
2431
+ config.model = value;
2432
+ } else if (key === "temperature") {
2433
+ const t = Number.parseFloat(value);
2434
+ if (!Number.isNaN(t) && t >= 0 && t <= 2) config.temperature = t;
2435
+ } else if (key === "agent") {
2436
+ config.agent = ["true", "yes", "1"].includes(value.toLowerCase());
2437
+ } else if (key === "tools" && value) {
2438
+ config.tools = value.split(",").map((t) => t.trim()).filter(Boolean);
2439
+ } else if (key === "type" && value) {
2440
+ const v = value.toLowerCase();
2441
+ if (v === "python" || v === "py") skillType = "python";
2442
+ else if (v === "shell" || v === "sh" || v === "bash") skillType = "shell";
2443
+ else if (v === "javascript" || v === "js" || v === "node") skillType = "javascript";
2444
+ else if (v === "typescript" || v === "ts") skillType = "typescript";
2445
+ }
2446
+ }
2447
+ if (skillType === "markdown") {
2448
+ skillType = detectTypeFromContent(body, filename);
2449
+ }
2450
+ return { content: body, name, description, config, skillType };
2451
+ }
2452
+ function serializeSkill(input) {
2453
+ const lines = ["---", `name: ${input.name}`, `description: ${input.description}`];
2454
+ if (input.type && input.type !== "markdown") {
2455
+ lines.push(`type: ${input.type}`);
2456
+ }
2457
+ lines.push("---", "", input.body.trim(), "");
2458
+ return lines.join("\n");
2459
+ }
2460
+ var SKILL_FOLDER_PREFIX = "skills/";
2461
+ function stripExt(name) {
2462
+ const i = name.lastIndexOf(".");
2463
+ return i > 0 ? name.slice(0, i) : name;
2464
+ }
2465
+ function isJunkPath(path) {
2466
+ if (path.endsWith("/")) return true;
2467
+ const parts = path.split("/");
2468
+ if (parts.some((p) => p === "__MACOSX")) return true;
2469
+ return parts[parts.length - 1].startsWith(".");
2470
+ }
2471
+ function folderFor(slug, relDir) {
2472
+ const root = `${SKILL_FOLDER_PREFIX}${slug}`;
2473
+ return relDir ? `${root}/${relDir}` : root;
2474
+ }
2475
+ function importMarkdownSkill(fileName, text) {
2476
+ const parsed = parseSkillFrontmatter(text, fileName);
2477
+ const slug = skillSlug(parsed.name) || skillSlug(stripExt(fileName));
2478
+ if (!slug) {
2479
+ throw new Error(
2480
+ "Could not derive a skill name. Add a `name:` to the frontmatter or rename the file."
2481
+ );
2482
+ }
2483
+ return {
2484
+ slug,
2485
+ entries: [{ folder: folderFor(slug, ""), fileName: SKILL_MAIN_FILENAME, content: text }]
2486
+ };
2487
+ }
2488
+ function commonTopDir(paths) {
2489
+ const tops = /* @__PURE__ */ new Set();
2490
+ for (const p of paths) {
2491
+ const idx = p.indexOf("/");
2492
+ if (idx === -1) return null;
2493
+ tops.add(p.slice(0, idx));
2494
+ }
2495
+ return tops.size === 1 ? [...tops][0] : null;
2496
+ }
2497
+ function buildZipSkillImport(archiveName, rawEntries) {
2498
+ const entries = rawEntries.filter((e) => e.path && !isJunkPath(e.path));
2499
+ if (entries.length === 0) throw new Error("The archive contains no importable skill files.");
2500
+ const top = commonTopDir(entries.map((e) => e.path));
2501
+ const rel = (p) => top ? p.slice(top.length + 1) : p;
2502
+ let slug = top ? skillSlug(top) : "";
2503
+ if (!slug) {
2504
+ const mainGuess = entries.find((e) => {
2505
+ const r = rel(e.path);
2506
+ return !r.includes("/") && isMainSkillFile(r, "__never__");
2507
+ }) ?? entries.find((e) => !rel(e.path).includes("/"));
2508
+ if (mainGuess) slug = skillSlug(parseSkillFrontmatter(mainGuess.text, rel(mainGuess.path)).name);
2509
+ }
2510
+ if (!slug) slug = skillSlug(stripExt(archiveName));
2511
+ if (!slug) throw new Error("Could not derive a skill name from the archive.");
2512
+ const rootFiles = entries.filter((e) => !rel(e.path).includes("/"));
2513
+ const mainEntry = rootFiles.find((e) => isMainSkillFile(rel(e.path), slug)) ?? (rootFiles.length === 1 ? rootFiles[0] : void 0);
2514
+ return {
2515
+ slug,
2516
+ entries: entries.map((e) => {
2517
+ const r = rel(e.path);
2518
+ const lastSlash = r.lastIndexOf("/");
2519
+ return {
2520
+ folder: folderFor(slug, lastSlash === -1 ? "" : r.slice(0, lastSlash)),
2521
+ fileName: mainEntry && e.path === mainEntry.path ? SKILL_MAIN_FILENAME : lastSlash === -1 ? r : r.slice(lastSlash + 1),
2522
+ content: e.text
2523
+ };
2524
+ })
2525
+ };
2526
+ }
2527
+ async function readSkillArchive(file) {
2528
+ const data = new Uint8Array(await file.arrayBuffer());
2529
+ let files;
2530
+ try {
2531
+ files = await new Promise(
2532
+ (resolve, reject) => unzip(
2533
+ data,
2534
+ { filter: (f) => !isJunkPath(f.name) },
2535
+ (err, out) => err ? reject(err) : resolve(out)
2536
+ )
2537
+ );
2538
+ } catch {
2539
+ throw new Error("The archive is empty or could not be read.");
2540
+ }
2541
+ const entries = Object.entries(files).map(([path, bytes]) => ({ path, text: strFromU8(bytes) }));
2542
+ if (entries.length === 0) throw new Error("The archive is empty or could not be read.");
2543
+ return entries;
2544
+ }
2545
+ async function importSkillFile(file) {
2546
+ const lower = file.name.toLowerCase();
2547
+ if (lower.endsWith(".zip")) return buildZipSkillImport(file.name, await readSkillArchive(file));
2548
+ if (lower.endsWith(".md") || lower.endsWith(".markdown")) {
2549
+ return importMarkdownSkill(file.name, await file.text());
2550
+ }
2551
+ throw new Error("Unsupported file type. Choose a .md skill or a .zip archive.");
2552
+ }
2553
+ async function importSkillFromUrl(url) {
2554
+ let parsed;
2555
+ try {
2556
+ parsed = new URL(url.trim());
2557
+ } catch {
2558
+ throw new Error("That does not look like a link.");
2559
+ }
2560
+ const response = await fetch(parsed.toString());
2561
+ if (!response.ok) throw new Error(`Could not open the link (${response.status}).`);
2562
+ const text = await response.text();
2563
+ const last = parsed.pathname.split("/").filter(Boolean).pop() ?? "skill";
2564
+ return importMarkdownSkill(last.includes(".") ? last : `${last}.md`, text);
2565
+ }
2322
2566
  var DEFAULT_TASK_ACTIVITY_LABELS = {
2323
2567
  title: "Activity",
2324
2568
  empty: "Nothing has happened yet.",
@@ -2511,6 +2755,6 @@ function TaskActivityTimeline({
2511
2755
  }) });
2512
2756
  }
2513
2757
 
2514
- export { ActionStepBody, ApprovalEvidence, AssigneeLine, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_STEP_BAR_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, STEP_LABEL, STEP_LABEL_CURRENT, STEP_LABEL_MAX, SchemaForm, SendBackControl, StepBarFrame, TaskActivityTimeline, WorkflowRunner, WorkflowStepBar, activeStepId, fromPlanAssignee, fromPlanDocumentRef, fromPlanSteps, isIncompleteSignal, layoutFromPlanSteps, stepWindow, taskActivityHeadline, toPlanAssignee, toPlanDocumentRef, toPlanSteps, useWorkflowView };
2515
- //# sourceMappingURL=chunk-54ANPPMV.js.map
2516
- //# sourceMappingURL=chunk-54ANPPMV.js.map
2758
+ export { ActionStepBody, ApprovalEvidence, AssigneeLine, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_STEP_BAR_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, SKILL_MAIN_FILENAME, SKILL_TYPES, STEP_LABEL, STEP_LABEL_CURRENT, STEP_LABEL_MAX, SchemaForm, SendBackControl, StepBarFrame, TaskActivityTimeline, WorkflowRunner, WorkflowStepBar, activeStepId, buildZipSkillImport, fromPlanAssignee, fromPlanDocumentRef, fromPlanSteps, importMarkdownSkill, importSkillFile, importSkillFromUrl, isIncompleteSignal, isMainSkillFile, layoutFromPlanSteps, parseSkillFrontmatter, readSkillArchive, serializeSkill, skillSlug, stepWindow, taskActivityHeadline, toPlanAssignee, toPlanDocumentRef, toPlanSteps, useWorkflowView, workflowFromSkillMarkdown, workflowToSkillMarkdown };
2759
+ //# sourceMappingURL=chunk-IQU2GI6V.js.map
2760
+ //# sourceMappingURL=chunk-IQU2GI6V.js.map