@pgege/kaboo-react 0.1.0

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.
package/dist/index.js ADDED
@@ -0,0 +1,200 @@
1
+ import {
2
+ AgentCard,
3
+ DrillProvider,
4
+ InterruptBridgeProvider,
5
+ InterruptBridgePublisher,
6
+ InterruptRenderer,
7
+ KabooActivityProvider,
8
+ KabooInlineCards,
9
+ KabooInterruptHandler,
10
+ MarkdownContent,
11
+ MiniTable,
12
+ StructuredRenderersContext,
13
+ Timeline,
14
+ ToolRow,
15
+ directChildren,
16
+ formatToolInput,
17
+ formatToolResult,
18
+ normalizeResult,
19
+ partitionChildrenByToolCall,
20
+ pendingToolAnchorExists,
21
+ topLevelGroups,
22
+ useActivity,
23
+ useDrill,
24
+ useInterruptBridge,
25
+ useInterruptFor
26
+ } from "./chunk-RXZWOBSI.js";
27
+
28
+ // src/context/KabooProvider.tsx
29
+ import { CopilotKit } from "@copilotkit/react-core/v2";
30
+ import { jsx, jsxs } from "react/jsx-runtime";
31
+ function KabooProvider({
32
+ runtimeUrl,
33
+ agent,
34
+ threadId,
35
+ structuredRenderers,
36
+ interruptRenderers,
37
+ disableInterruptHandler = false,
38
+ disableInlineCards = false,
39
+ copilotKitProps,
40
+ children
41
+ }) {
42
+ return /* @__PURE__ */ jsx(
43
+ CopilotKit,
44
+ {
45
+ runtimeUrl,
46
+ agent,
47
+ threadId,
48
+ useSingleEndpoint: false,
49
+ ...copilotKitProps,
50
+ children: /* @__PURE__ */ jsx(KabooActivityProvider, { agentId: agent, structuredRenderers, children: /* @__PURE__ */ jsx(DrillProvider, { children: /* @__PURE__ */ jsxs(InterruptBridgeProvider, { children: [
51
+ !disableInterruptHandler && /* @__PURE__ */ jsx(KabooInterruptHandler, { agentId: agent, renderers: interruptRenderers }),
52
+ !disableInlineCards && /* @__PURE__ */ jsx(KabooInlineCards, {}),
53
+ children
54
+ ] }) }) })
55
+ }
56
+ );
57
+ }
58
+
59
+ // src/components/ActivityPanel.tsx
60
+ import { jsx as jsx2 } from "react/jsx-runtime";
61
+ function ActivityPanel() {
62
+ const { groups } = useActivity();
63
+ const { activeDrill } = useDrill();
64
+ if (Object.keys(groups).length === 0) return null;
65
+ const filtered = activeDrill ? directChildren(groups, activeDrill) : topLevelGroups(groups).filter(([, g]) => !g.inlineChatOwner);
66
+ if (filtered.length === 0 && activeDrill) {
67
+ const exact = groups[activeDrill];
68
+ if (exact) {
69
+ return /* @__PURE__ */ jsx2("div", { className: "kaboo-activity-panel", children: /* @__PURE__ */ jsx2(AgentCard, { groupId: activeDrill, group: exact }) });
70
+ }
71
+ }
72
+ return /* @__PURE__ */ jsx2("div", { className: "kaboo-activity-panel", children: filtered.map(([id, group]) => /* @__PURE__ */ jsx2(AgentCard, { groupId: id, group }, id)) });
73
+ }
74
+
75
+ // src/components/GlassTabs.tsx
76
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
77
+ function GlassTabs() {
78
+ const { drillPath, drillToRoot, drillToLevel } = useDrill();
79
+ const { groups } = useActivity();
80
+ if (drillPath.length === 0) return null;
81
+ const tabs = [
82
+ { id: "root", label: "Chat", level: -1 },
83
+ ...drillPath.map((id, i) => ({
84
+ id,
85
+ label: groups[id]?.title || id,
86
+ level: i
87
+ }))
88
+ ];
89
+ return /* @__PURE__ */ jsx3("nav", { className: "kaboo-breadcrumb-bar", children: tabs.map((tab, i) => {
90
+ const isLast = i === tabs.length - 1;
91
+ return /* @__PURE__ */ jsxs2("span", { className: "kaboo-breadcrumb-item", children: [
92
+ i > 0 && /* @__PURE__ */ jsx3("svg", { width: 12, height: 12, viewBox: "0 0 16 16", className: "kaboo-breadcrumb-sep", children: /* @__PURE__ */ jsx3("path", { d: "M6 4l4 4-4 4", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }),
93
+ /* @__PURE__ */ jsxs2(
94
+ "button",
95
+ {
96
+ className: `kaboo-breadcrumb-link ${isLast ? "kaboo-breadcrumb-current" : ""}`,
97
+ onClick: () => {
98
+ if (isLast) return;
99
+ if (tab.level === -1) drillToRoot();
100
+ else drillToLevel(tab.level);
101
+ },
102
+ disabled: isLast,
103
+ children: [
104
+ i === 0 && /* @__PURE__ */ jsx3("svg", { width: 14, height: 14, viewBox: "0 0 16 16", className: "kaboo-breadcrumb-icon", children: /* @__PURE__ */ jsx3("path", { d: "M3 8.5L8 4l5 4.5M4.5 7.5V12h2.5V9.5h2V12h2.5V7.5", fill: "none", stroke: "currentColor", strokeWidth: "1.2", strokeLinecap: "round", strokeLinejoin: "round" }) }),
105
+ tab.label
106
+ ]
107
+ }
108
+ )
109
+ ] }, tab.id);
110
+ }) });
111
+ }
112
+
113
+ // src/components/DrillDetailView.tsx
114
+ import { useEffect, useRef } from "react";
115
+ import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
116
+ function DrillDetailView() {
117
+ const { activeDrill } = useDrill();
118
+ const { groups } = useActivity();
119
+ const { active: activeInterrupts } = useInterruptBridge();
120
+ const bodyRef = useRef(null);
121
+ useEffect(() => {
122
+ if (activeDrill && bodyRef.current) {
123
+ bodyRef.current.scrollTop = 0;
124
+ }
125
+ }, [activeDrill]);
126
+ if (!activeDrill) {
127
+ return /* @__PURE__ */ jsx4("div", { className: "kaboo-drill-detail kaboo-hidden" });
128
+ }
129
+ const group = groups[activeDrill];
130
+ const timeline = group?.timeline ?? [];
131
+ const unanchoredInterrupts = group?.status === "interrupted" ? activeInterrupts.filter(
132
+ (i) => !pendingToolAnchorExists(groups, i.toolCallId)
133
+ ) : [];
134
+ const childEntries = directChildren(groups, activeDrill);
135
+ const { byToolCall: childByToolCall, leftover: leftoverChildren } = partitionChildrenByToolCall(childEntries, timeline);
136
+ const renderToolCard = (toolUseId) => {
137
+ const entry = childByToolCall.get(toolUseId);
138
+ if (!entry) return null;
139
+ return /* @__PURE__ */ jsx4(AgentCard, { groupId: entry[0], group: entry[1] });
140
+ };
141
+ return /* @__PURE__ */ jsx4("div", { ref: bodyRef, className: "kaboo-drill-detail", children: /* @__PURE__ */ jsxs3("div", { className: "kaboo-drill-detail-inner", children: [
142
+ group?.task && /* @__PURE__ */ jsxs3("div", { className: "kaboo-agent-card-task kaboo-drill-task", children: [
143
+ /* @__PURE__ */ jsx4("strong", { children: "Task:" }),
144
+ " ",
145
+ group.task
146
+ ] }),
147
+ group && timeline.length > 0 && /* @__PURE__ */ jsx4("div", { className: "kaboo-drill-timeline", children: /* @__PURE__ */ jsx4(
148
+ Timeline,
149
+ {
150
+ timeline,
151
+ active: group.status === "active",
152
+ variant: "drill",
153
+ renderToolCard
154
+ }
155
+ ) }),
156
+ unanchoredInterrupts.length > 0 && /* @__PURE__ */ jsx4("div", { className: "kaboo-drill-interrupt", children: unanchoredInterrupts.map((it) => /* @__PURE__ */ jsx4(
157
+ InterruptRenderer,
158
+ {
159
+ reason: it.reason,
160
+ toolCallId: it.toolCallId,
161
+ onResolve: it.onResolve,
162
+ onCancel: it.onCancel
163
+ },
164
+ it.id
165
+ )) }),
166
+ leftoverChildren.length > 0 && /* @__PURE__ */ jsxs3("div", { className: "kaboo-drill-children", children: [
167
+ /* @__PURE__ */ jsx4("div", { className: "kaboo-drill-section-label", children: "Sub-agents" }),
168
+ leftoverChildren.map(([id, childGroup]) => /* @__PURE__ */ jsx4(AgentCard, { groupId: id, group: childGroup }, id))
169
+ ] }),
170
+ group && timeline.length === 0 && childEntries.length === 0 && /* @__PURE__ */ jsx4("div", { className: "kaboo-agent-card-empty", children: "Working..." }),
171
+ !group && /* @__PURE__ */ jsx4("div", { className: "kaboo-agent-card-empty", children: "No activity data for this group." })
172
+ ] }) });
173
+ }
174
+ export {
175
+ ActivityPanel,
176
+ AgentCard,
177
+ DrillDetailView,
178
+ DrillProvider,
179
+ GlassTabs,
180
+ InterruptBridgeProvider,
181
+ InterruptBridgePublisher,
182
+ InterruptRenderer,
183
+ KabooActivityProvider,
184
+ KabooProvider,
185
+ MarkdownContent,
186
+ MiniTable,
187
+ StructuredRenderersContext,
188
+ Timeline,
189
+ ToolRow,
190
+ directChildren,
191
+ formatToolInput,
192
+ formatToolResult,
193
+ normalizeResult,
194
+ topLevelGroups,
195
+ useActivity,
196
+ useDrill,
197
+ useInterruptBridge,
198
+ useInterruptFor
199
+ };
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context/KabooProvider.tsx","../src/components/ActivityPanel.tsx","../src/components/GlassTabs.tsx","../src/components/DrillDetailView.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { CopilotKit, type CopilotKitProps } from \"@copilotkit/react-core/v2\";\nimport { KabooActivityProvider, type StructuredRenderers } from \"./ActivityProvider\";\nimport { DrillProvider } from \"./DrillContext\";\nimport { InterruptBridgeProvider } from \"./InterruptBridge\";\nimport { KabooInterruptHandler, type KabooInterruptHandlerProps } from \"../integrations/KabooInterruptHandler\";\nimport { KabooInlineCards } from \"../integrations/KabooInlineCards\";\n\n/** Props for {@link KabooProvider}. */\nexport interface KabooProviderProps {\n /** URL of the CopilotKit runtime endpoint (e.g. `/api/copilotkit`). */\n runtimeUrl: string;\n /** CopilotKit agent id to run (the workflow entry agent). */\n agent: string;\n /** Conversation id. Scopes both the run and its activity. */\n threadId?: string;\n /** Renderers for structured agent outputs, keyed by output schema name. */\n structuredRenderers?: StructuredRenderers;\n /** Per-interrupt-type renderer overrides for the built-in HITL handler. */\n interruptRenderers?: KabooInterruptHandlerProps[\"renderers\"];\n /** Skip auto-mounting the built-in {@link KabooInterruptHandler}. */\n disableInterruptHandler?: boolean;\n /** Skip auto-mounting the built-in {@link KabooInlineCards}. */\n disableInlineCards?: boolean;\n /** Extra props forwarded to the underlying `<CopilotKit>`. */\n copilotKitProps?: Partial<Omit<CopilotKitProps, \"children\" | \"runtimeUrl\" | \"agent\" | \"threadId\">>;\n /** Your app subtree, rendered inside all kaboo contexts. */\n children: ReactNode;\n}\n\n/**\n * Batteries-included CopilotKit plugin. Renders `<CopilotKit>` and nests every\n * kaboo context (activity -> drill -> interrupt bridge) plus the built-in HITL\n * and inline-card handlers, so integrators drop this once near the root and use\n * only kaboo-react. Activity rides the AG-UI run stream, so there is no separate\n * activity endpoint to configure.\n *\n * @example\n * ```tsx\n * import { CopilotChat } from \"@copilotkit/react-core/v2\";\n * import { KabooProvider, GlassTabs, DrillDetailView } from \"@pgege/kaboo-react\";\n * import { KabooMessageView } from \"@pgege/kaboo-react/copilotkit\";\n * import \"@pgege/kaboo-react/styles.css\";\n *\n * function App({ agent, threadId }: { agent: string; threadId: string }) {\n * return (\n * <KabooProvider runtimeUrl=\"/api/copilotkit\" agent={agent} threadId={threadId}>\n * <GlassTabs />\n * <CopilotChat messageView={KabooMessageView} />\n * <DrillDetailView />\n * </KabooProvider>\n * );\n * }\n * ```\n */\nexport function KabooProvider({\n runtimeUrl,\n agent,\n threadId,\n structuredRenderers,\n interruptRenderers,\n disableInterruptHandler = false,\n disableInlineCards = false,\n copilotKitProps,\n children,\n}: KabooProviderProps) {\n return (\n <CopilotKit\n runtimeUrl={runtimeUrl}\n agent={agent}\n threadId={threadId}\n useSingleEndpoint={false}\n {...copilotKitProps}\n >\n <KabooActivityProvider agentId={agent} structuredRenderers={structuredRenderers}>\n <DrillProvider>\n <InterruptBridgeProvider>\n {!disableInterruptHandler && (\n <KabooInterruptHandler agentId={agent} renderers={interruptRenderers} />\n )}\n {!disableInlineCards && <KabooInlineCards />}\n {children}\n </InterruptBridgeProvider>\n </DrillProvider>\n </KabooActivityProvider>\n </CopilotKit>\n );\n}\n","import { useActivity } from \"../hooks/useActivity\";\nimport { useDrill } from \"../hooks/useDrill\";\nimport { topLevelGroups, directChildren } from \"../utils/groups\";\nimport { AgentCard } from \"./AgentCard\";\n\n/**\n * Standalone panel that renders the current activity tree as a list of\n * {@link AgentCard}s — top-level groups at the root, or the drilled-in group's\n * children. Use it when you want the hierarchical activity view outside the chat\n * transcript (the in-chat view is handled by `KabooMessageView`). Renders\n * nothing when there is no activity.\n *\n * @example\n * ```tsx\n * import { ActivityPanel } from \"@pgege/kaboo-react\";\n *\n * function Sidebar() {\n * return (\n * <aside>\n * <ActivityPanel />\n * </aside>\n * );\n * }\n * ```\n */\nexport function ActivityPanel() {\n const { groups } = useActivity();\n const { activeDrill } = useDrill();\n\n if (Object.keys(groups).length === 0) return null;\n\n // A plain-agent entry group (`inlineChatOwner`) is rendered inline by the host\n // chat, so it must not also appear as a root card here — it only enriches\n // those inline tool rows. Nested/sub-agent drilling is unaffected.\n const filtered = activeDrill\n ? directChildren(groups, activeDrill)\n : topLevelGroups(groups).filter(([, g]) => !g.inlineChatOwner);\n\n if (filtered.length === 0 && activeDrill) {\n const exact = groups[activeDrill];\n if (exact) {\n return (\n <div className=\"kaboo-activity-panel\">\n <AgentCard groupId={activeDrill} group={exact} />\n </div>\n );\n }\n }\n\n return (\n <div className=\"kaboo-activity-panel\">\n {filtered.map(([id, group]) => (\n <AgentCard key={id} groupId={id} group={group} />\n ))}\n </div>\n );\n}\n","import { useActivity } from \"../hooks/useActivity\";\nimport { useDrill } from \"../hooks/useDrill\";\n\n/**\n * Breadcrumb navigation for the drill-down path: a \"Chat\" root followed by one\n * crumb per drilled-in group. Clicking a crumb jumps to that level; the current\n * (last) crumb is disabled. Renders nothing at the root. Pair with\n * {@link DrillDetailView}.\n *\n * @example\n * ```tsx\n * import { GlassTabs, DrillDetailView } from \"@pgege/kaboo-react\";\n *\n * function DrillArea() {\n * return (\n * <>\n * <GlassTabs />\n * <DrillDetailView />\n * </>\n * );\n * }\n * ```\n */\nexport function GlassTabs() {\n const { drillPath, drillToRoot, drillToLevel } = useDrill();\n const { groups } = useActivity();\n\n if (drillPath.length === 0) return null;\n\n const tabs: { id: string; label: string; level: number }[] = [\n { id: \"root\", label: \"Chat\", level: -1 },\n ...drillPath.map((id, i) => ({\n id,\n label: groups[id]?.title || id,\n level: i,\n })),\n ];\n\n return (\n <nav className=\"kaboo-breadcrumb-bar\">\n {tabs.map((tab, i) => {\n const isLast = i === tabs.length - 1;\n return (\n <span key={tab.id} className=\"kaboo-breadcrumb-item\">\n {i > 0 && (\n <svg width={12} height={12} viewBox=\"0 0 16 16\" className=\"kaboo-breadcrumb-sep\">\n <path d=\"M6 4l4 4-4 4\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n )}\n <button\n className={`kaboo-breadcrumb-link ${isLast ? \"kaboo-breadcrumb-current\" : \"\"}`}\n onClick={() => {\n if (isLast) return;\n if (tab.level === -1) drillToRoot();\n else drillToLevel(tab.level);\n }}\n disabled={isLast}\n >\n {i === 0 && (\n <svg width={14} height={14} viewBox=\"0 0 16 16\" className=\"kaboo-breadcrumb-icon\">\n <path d=\"M3 8.5L8 4l5 4.5M4.5 7.5V12h2.5V9.5h2V12h2.5V7.5\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n {tab.label}\n </button>\n </span>\n );\n })}\n </nav>\n );\n}\n","import { useEffect, useRef } from \"react\";\nimport { useActivity } from \"../hooks/useActivity\";\nimport { useDrill } from \"../hooks/useDrill\";\nimport { useInterruptBridge } from \"../context/InterruptBridge\";\nimport {\n directChildren,\n partitionChildrenByToolCall,\n pendingToolAnchorExists,\n} from \"../utils/groups\";\nimport { AgentCard } from \"./AgentCard\";\nimport { Timeline } from \"./Timeline\";\nimport { InterruptRenderer } from \"./InterruptRenderer\";\n\n/**\n * Detail pane for the currently drilled-in group: its task, full timeline\n * (with delegated sub-agents interleaved at their tool-call position), any\n * unanchored interrupt prompts, and a \"Sub-agents\" section for swarm/graph\n * members. Renders a hidden placeholder at the root. Pair with {@link GlassTabs}.\n *\n * @example\n * ```tsx\n * import { GlassTabs, DrillDetailView } from \"@pgege/kaboo-react\";\n *\n * function DrillArea() {\n * return (\n * <>\n * <GlassTabs />\n * <DrillDetailView />\n * </>\n * );\n * }\n * ```\n */\nexport function DrillDetailView() {\n const { activeDrill } = useDrill();\n const { groups } = useActivity();\n const { active: activeInterrupts } = useInterruptBridge();\n const bodyRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (activeDrill && bodyRef.current) {\n bodyRef.current.scrollTop = 0;\n }\n }, [activeDrill]);\n\n if (!activeDrill) {\n return <div className=\"kaboo-drill-detail kaboo-hidden\" />;\n }\n\n const group = groups[activeDrill];\n const timeline = group?.timeline ?? [];\n // Prompts anchored to a pending tool call are rendered inline by the Timeline\n // at that tool's position (chronological); this block only handles interrupts\n // with no on-screen tool anchor — never a duplicate.\n const unanchoredInterrupts =\n group?.status === \"interrupted\"\n ? activeInterrupts.filter(\n (i) => !pendingToolAnchorExists(groups, i.toolCallId),\n )\n : [];\n\n const childEntries = directChildren(groups, activeDrill);\n // Interleave delegated children at their delegating tool-call position so a\n // sub-agent's card sits where it was delegated (before the parent's summary\n // text) rather than in a trailing block. Children with no tool-call anchor\n // (swarm/graph members) still render in the Sub-agents section below.\n const { byToolCall: childByToolCall, leftover: leftoverChildren } =\n partitionChildrenByToolCall(childEntries, timeline);\n const renderToolCard = (toolUseId: string) => {\n const entry = childByToolCall.get(toolUseId);\n if (!entry) return null;\n return <AgentCard groupId={entry[0]} group={entry[1]} />;\n };\n\n return (\n <div ref={bodyRef} className=\"kaboo-drill-detail\">\n <div className=\"kaboo-drill-detail-inner\">\n {group?.task && (\n <div className=\"kaboo-agent-card-task kaboo-drill-task\">\n <strong>Task:</strong> {group.task}\n </div>\n )}\n\n {group && timeline.length > 0 && (\n <div className=\"kaboo-drill-timeline\">\n <Timeline\n timeline={timeline}\n active={group.status === \"active\"}\n variant=\"drill\"\n renderToolCard={renderToolCard}\n />\n </div>\n )}\n\n {unanchoredInterrupts.length > 0 && (\n <div className=\"kaboo-drill-interrupt\">\n {unanchoredInterrupts.map((it) => (\n <InterruptRenderer\n key={it.id}\n reason={it.reason}\n toolCallId={it.toolCallId}\n onResolve={it.onResolve}\n onCancel={it.onCancel}\n />\n ))}\n </div>\n )}\n\n {leftoverChildren.length > 0 && (\n <div className=\"kaboo-drill-children\">\n <div className=\"kaboo-drill-section-label\">Sub-agents</div>\n {leftoverChildren.map(([id, childGroup]) => (\n <AgentCard key={id} groupId={id} group={childGroup} />\n ))}\n </div>\n )}\n\n {group && timeline.length === 0 && childEntries.length === 0 && (\n <div className=\"kaboo-agent-card-empty\">\n Working...\n </div>\n )}\n\n {!group && (\n <div className=\"kaboo-agent-card-empty\">\n No activity data for this group.\n </div>\n )}\n </div>\n </div>\n );\n}\n"],"mappings":"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","names":["jsx","jsx","jsxs","jsx","jsxs"]}