@ai-matrx/agents 0.7.1 → 0.8.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/CHANGELOG.md +90 -0
- package/dist/catalog/index.cjs +69 -3
- package/dist/catalog/index.cjs.map +1 -1
- package/dist/catalog/index.d.cts +102 -2
- package/dist/catalog/index.d.ts +102 -2
- package/dist/catalog/index.js +69 -3
- package/dist/catalog/index.js.map +1 -1
- package/dist/catalog/react/index.cjs +74 -7
- package/dist/catalog/react/index.cjs.map +1 -1
- package/dist/catalog/react/index.d.cts +108 -7
- package/dist/catalog/react/index.d.ts +108 -7
- package/dist/catalog/react/index.js +74 -7
- package/dist/catalog/react/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ComponentType, ReactNode, Ref } from 'react';
|
|
2
|
+
import { ComponentType, ReactNode, Ref, SVGProps } from 'react';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@ai-matrx/agents/catalog` — the row shape and the per-consumer view state.
|
|
@@ -42,6 +42,39 @@ type AgentCatalogAgentType = "user" | "builtin";
|
|
|
42
42
|
* itself rather than being coerced into a wrong one.
|
|
43
43
|
*/
|
|
44
44
|
type AgentAccessLevel = "owner" | "admin" | "editor" | "viewer" | "system" | (string & {});
|
|
45
|
+
/**
|
|
46
|
+
* Present on a catalog row ONLY when that agent is an **Orchestra** — a
|
|
47
|
+
* conductor that delegates to member agents at run time. Choosing one for a
|
|
48
|
+
* step, a chat or a workflow node runs the whole ensemble, so a person has to
|
|
49
|
+
* be able to SEE that before choosing, not discover it from the run.
|
|
50
|
+
*
|
|
51
|
+
* The DB decides. `agx_get_list_full` / `agx_get_list` / `agx_search` build
|
|
52
|
+
* this from `platform.associations` (the conductor self-edge plus its member
|
|
53
|
+
* edges) in one `agx_orchestra_badges()` join — never a second fetch, and
|
|
54
|
+
* never a per-row read. `null` for every ordinary agent.
|
|
55
|
+
*
|
|
56
|
+
* History: the badge lived only in the Python `GET /agents` route, so every
|
|
57
|
+
* client lost it when the pickers moved to the RPC. It is a ROW FIELD now, in
|
|
58
|
+
* the one read every client shares.
|
|
59
|
+
*/
|
|
60
|
+
interface OrchestraBadge {
|
|
61
|
+
/** How the ensemble runs: `supervisor` | `sequential` | `parallel` | `dag`, or a future mode verbatim. */
|
|
62
|
+
mode: string;
|
|
63
|
+
/** The composition's one-line description, when its author wrote one. */
|
|
64
|
+
tagline: string | null;
|
|
65
|
+
/**
|
|
66
|
+
* The per-composition delegation-depth budget AS DECLARED, or `null` when
|
|
67
|
+
* the composition declares none. Deliberately NOT defaulted here: the
|
|
68
|
+
* platform's fallback ceiling is enforced by the server that runs the
|
|
69
|
+
* ensemble, and a badge that invented a number would be reporting a promise
|
|
70
|
+
* nobody made.
|
|
71
|
+
*/
|
|
72
|
+
depthBudget: number | null;
|
|
73
|
+
/** Member edges. From the ROW count, so an unlabelled ensemble still counts. */
|
|
74
|
+
memberCount: number;
|
|
75
|
+
/** Only REAL role titles — an ensemble with unlabelled edges yields `[]`. */
|
|
76
|
+
memberTitles: string[];
|
|
77
|
+
}
|
|
45
78
|
/**
|
|
46
79
|
* One `agx_get_list_full()` row, camelCased. Nineteen columns, no more:
|
|
47
80
|
* anything richer needs a different read and is a different type.
|
|
@@ -66,6 +99,12 @@ interface AgentSummary {
|
|
|
66
99
|
isOwner: boolean | null;
|
|
67
100
|
accessLevel: AgentAccessLevel | null;
|
|
68
101
|
sharedByEmail: string | null;
|
|
102
|
+
/**
|
|
103
|
+
* The Orchestra badge, or `null` for an ordinary agent. Strict: every row
|
|
104
|
+
* carries the key, so a surface reads `agent.orchestra` and never has to ask
|
|
105
|
+
* whether the column existed.
|
|
106
|
+
*/
|
|
107
|
+
orchestra: OrchestraBadge | null;
|
|
69
108
|
/**
|
|
70
109
|
* Set only on a mandate default row — the key it resolved through, so a
|
|
71
110
|
* host can tell "the default" from a stored agent without parsing the id.
|
|
@@ -73,6 +112,21 @@ interface AgentSummary {
|
|
|
73
112
|
mandateKey?: string;
|
|
74
113
|
}
|
|
75
114
|
type AgentSortOption = "updated-desc" | "created-desc" | "name-asc" | "name-desc" | "category-asc";
|
|
115
|
+
/**
|
|
116
|
+
* The sort choices a picker offers, in order. PURE DATA, so it lives in the
|
|
117
|
+
* pure entry: a server-reachable manifest reads it at module scope, and
|
|
118
|
+
* importing it from the client-stamped `./catalog/react` bundle dragged React
|
|
119
|
+
* into a server graph for the sake of five string pairs. `./catalog/react`
|
|
120
|
+
* re-exports it unchanged, so no consumer has to move.
|
|
121
|
+
*
|
|
122
|
+
* (Written "client-stamped", never with the literal directive: this comment is
|
|
123
|
+
* emitted into `dist/catalog/index.d.ts`, and the tarball canary rightly
|
|
124
|
+
* refuses that directive anywhere in a PURE entry.)
|
|
125
|
+
*/
|
|
126
|
+
declare const SORT_OPTIONS: {
|
|
127
|
+
value: AgentSortOption;
|
|
128
|
+
label: string;
|
|
129
|
+
}[];
|
|
76
130
|
/** Which ownership tab is active in the agent list. */
|
|
77
131
|
type AgentTab = "mine" | "shared" | "all" | "system";
|
|
78
132
|
/** Favorite filter. */
|
|
@@ -259,6 +313,18 @@ interface AgentCatalogSchemaReport {
|
|
|
259
313
|
answered: string[];
|
|
260
314
|
/** True when `agent.definition.is_favorite` is writable by this caller. */
|
|
261
315
|
favoriteWritable: boolean | null;
|
|
316
|
+
/**
|
|
317
|
+
* Whether `agx_get_list_full` carries the `orchestra` badge column (added to
|
|
318
|
+
* the platform 2026-09-08).
|
|
319
|
+
*
|
|
320
|
+
* NOT a violation when absent — the picker degrades to no conductor marker,
|
|
321
|
+
* which is honest — but it is never SILENT either: a `false` here is the one
|
|
322
|
+
* signal that tells a host "this database predates the badge" instead of
|
|
323
|
+
* leaving someone to wonder why their Orchestra looks like a plain agent.
|
|
324
|
+
* `null` means the probe could not tell (the caller can see no agents at
|
|
325
|
+
* all), never "fine".
|
|
326
|
+
*/
|
|
327
|
+
orchestraColumn: boolean | null;
|
|
262
328
|
}
|
|
263
329
|
interface AssertAgentCatalogSchemaOptions {
|
|
264
330
|
/**
|
|
@@ -645,12 +711,8 @@ declare function AgentListInlinePicker({ consumerId, onSelect, activeAgentId, cl
|
|
|
645
711
|
* catalog/react/types.ts — VERBATIM port of matrx-frontend
|
|
646
712
|
* `features/agents/components/agent-listings/core/types.ts`.
|
|
647
713
|
*/
|
|
648
|
-
|
|
649
714
|
type RightPanel = "detail" | "sort" | "categories" | "tags" | null;
|
|
650
|
-
|
|
651
|
-
value: AgentSortOption;
|
|
652
|
-
label: string;
|
|
653
|
-
}[];
|
|
715
|
+
|
|
654
716
|
declare const PANEL_HEIGHT = "528px";
|
|
655
717
|
/**
|
|
656
718
|
* 🚨 THE PANEL NEVER OUTGROWS THE SPACE IT HAS.
|
|
@@ -816,4 +878,43 @@ declare function SidePanelHeader({ title, onClose, }: {
|
|
|
816
878
|
onClose: () => void;
|
|
817
879
|
}): react.JSX.Element;
|
|
818
880
|
|
|
819
|
-
|
|
881
|
+
type IconProps = SVGProps<SVGSVGElement> & {
|
|
882
|
+
className?: string;
|
|
883
|
+
};
|
|
884
|
+
/**
|
|
885
|
+
* The Orchestra marker (Lucide `music-4`): the glyph the Workflow Studio's
|
|
886
|
+
* picker used for a conductor, kept identical so the same agent wears the same
|
|
887
|
+
* mark in every client.
|
|
888
|
+
*/
|
|
889
|
+
declare function Music4Icon(props: IconProps): react.JSX.Element;
|
|
890
|
+
|
|
891
|
+
/**
|
|
892
|
+
* catalog/orchestra.ts — @ai-matrx/agents/catalog
|
|
893
|
+
*
|
|
894
|
+
* Creator words for an Orchestra badge. A VERBATIM port of the helpers the
|
|
895
|
+
* Workflow Studio's hand-rolled picker carried (`apps/workflow-studio/src/
|
|
896
|
+
* hooks/use-agents.ts` before `c0f958b43`), lifted here so every client says
|
|
897
|
+
* the same sentence about the same ensemble.
|
|
898
|
+
*
|
|
899
|
+
* Pure — no React, no DOM. The row shape is `OrchestraBadge` in `./types`.
|
|
900
|
+
*/
|
|
901
|
+
|
|
902
|
+
declare function orchestraModeLabel(mode: string): string;
|
|
903
|
+
/** Human label for a badge: "Orchestra · supervisor · 3 members" (singular-safe). */
|
|
904
|
+
declare function orchestraLabel(badge: OrchestraBadge): string;
|
|
905
|
+
/**
|
|
906
|
+
* The member-call ceiling in Creator language ("Team members can call helpers
|
|
907
|
+
* up to 2 levels deep"), or `null` when the composition declared none. A badge
|
|
908
|
+
* never invents the platform default: the server that runs the ensemble owns
|
|
909
|
+
* that number, and printing a promise nobody made is worse than printing
|
|
910
|
+
* nothing.
|
|
911
|
+
*/
|
|
912
|
+
declare function orchestraDepthLine(badge: OrchestraBadge): string | null;
|
|
913
|
+
/**
|
|
914
|
+
* One visible line naming who the Orchestra delegates to, collapsing past
|
|
915
|
+
* `limit` into "+N more". `null` when no member carries a real role title —
|
|
916
|
+
* "Member, Member, Member" is noise that reads like data.
|
|
917
|
+
*/
|
|
918
|
+
declare function orchestraDelegatesLine(badge: OrchestraBadge, limit?: number): string | null;
|
|
919
|
+
|
|
920
|
+
export { type AgentCatalogLinkComponent, AgentCatalogProvider, type AgentCatalogProviderProps, type AgentCatalogRenderModelRef, type AgentCatalogUiPorts, AgentCategoriesPanel, type AgentCategoriesPanelProps, AgentDetailCard, type AgentDetailCardProps, AgentFilterBar, type AgentFilterBarProps, AgentListContent, type AgentListContentProps, type AgentListCoreOptions, AgentListDropdown, type AgentListDropdownProps, AgentListInlinePicker, type AgentListInlinePickerProps, type AgentListTabCounts, AgentListTabs, AgentMobileSubView, type AgentMobileSubViewProps, AgentRow, type AgentRowProps, AgentSortPanel, type AgentSortPanelProps, AgentTagsPanel, type AgentTagsPanelProps, CheckRow, FavoriteAgentButton, FilterChip, HOVER_GRACE_MS, type IconProps, LIST_MAX_HEIGHT, Music4Icon, OptionRow, type OrchestraBadge, PANEL_HEIGHT, type RightPanel, SORT_OPTIONS, SearchInput, SidePanelHeader, type UseAgentConsumerReturn, coerceVisibleTab, orchestraDelegatesLine, orchestraDepthLine, orchestraLabel, orchestraModeLabel, useAgentCatalog, useAgentCatalogRows, useAgentCatalogState, useAgentCatalogUiPorts, useAgentConsumer, useAgentListCore };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
|
-
import { ComponentType, ReactNode, Ref } from 'react';
|
|
2
|
+
import { ComponentType, ReactNode, Ref, SVGProps } from 'react';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* `@ai-matrx/agents/catalog` — the row shape and the per-consumer view state.
|
|
@@ -42,6 +42,39 @@ type AgentCatalogAgentType = "user" | "builtin";
|
|
|
42
42
|
* itself rather than being coerced into a wrong one.
|
|
43
43
|
*/
|
|
44
44
|
type AgentAccessLevel = "owner" | "admin" | "editor" | "viewer" | "system" | (string & {});
|
|
45
|
+
/**
|
|
46
|
+
* Present on a catalog row ONLY when that agent is an **Orchestra** — a
|
|
47
|
+
* conductor that delegates to member agents at run time. Choosing one for a
|
|
48
|
+
* step, a chat or a workflow node runs the whole ensemble, so a person has to
|
|
49
|
+
* be able to SEE that before choosing, not discover it from the run.
|
|
50
|
+
*
|
|
51
|
+
* The DB decides. `agx_get_list_full` / `agx_get_list` / `agx_search` build
|
|
52
|
+
* this from `platform.associations` (the conductor self-edge plus its member
|
|
53
|
+
* edges) in one `agx_orchestra_badges()` join — never a second fetch, and
|
|
54
|
+
* never a per-row read. `null` for every ordinary agent.
|
|
55
|
+
*
|
|
56
|
+
* History: the badge lived only in the Python `GET /agents` route, so every
|
|
57
|
+
* client lost it when the pickers moved to the RPC. It is a ROW FIELD now, in
|
|
58
|
+
* the one read every client shares.
|
|
59
|
+
*/
|
|
60
|
+
interface OrchestraBadge {
|
|
61
|
+
/** How the ensemble runs: `supervisor` | `sequential` | `parallel` | `dag`, or a future mode verbatim. */
|
|
62
|
+
mode: string;
|
|
63
|
+
/** The composition's one-line description, when its author wrote one. */
|
|
64
|
+
tagline: string | null;
|
|
65
|
+
/**
|
|
66
|
+
* The per-composition delegation-depth budget AS DECLARED, or `null` when
|
|
67
|
+
* the composition declares none. Deliberately NOT defaulted here: the
|
|
68
|
+
* platform's fallback ceiling is enforced by the server that runs the
|
|
69
|
+
* ensemble, and a badge that invented a number would be reporting a promise
|
|
70
|
+
* nobody made.
|
|
71
|
+
*/
|
|
72
|
+
depthBudget: number | null;
|
|
73
|
+
/** Member edges. From the ROW count, so an unlabelled ensemble still counts. */
|
|
74
|
+
memberCount: number;
|
|
75
|
+
/** Only REAL role titles — an ensemble with unlabelled edges yields `[]`. */
|
|
76
|
+
memberTitles: string[];
|
|
77
|
+
}
|
|
45
78
|
/**
|
|
46
79
|
* One `agx_get_list_full()` row, camelCased. Nineteen columns, no more:
|
|
47
80
|
* anything richer needs a different read and is a different type.
|
|
@@ -66,6 +99,12 @@ interface AgentSummary {
|
|
|
66
99
|
isOwner: boolean | null;
|
|
67
100
|
accessLevel: AgentAccessLevel | null;
|
|
68
101
|
sharedByEmail: string | null;
|
|
102
|
+
/**
|
|
103
|
+
* The Orchestra badge, or `null` for an ordinary agent. Strict: every row
|
|
104
|
+
* carries the key, so a surface reads `agent.orchestra` and never has to ask
|
|
105
|
+
* whether the column existed.
|
|
106
|
+
*/
|
|
107
|
+
orchestra: OrchestraBadge | null;
|
|
69
108
|
/**
|
|
70
109
|
* Set only on a mandate default row — the key it resolved through, so a
|
|
71
110
|
* host can tell "the default" from a stored agent without parsing the id.
|
|
@@ -73,6 +112,21 @@ interface AgentSummary {
|
|
|
73
112
|
mandateKey?: string;
|
|
74
113
|
}
|
|
75
114
|
type AgentSortOption = "updated-desc" | "created-desc" | "name-asc" | "name-desc" | "category-asc";
|
|
115
|
+
/**
|
|
116
|
+
* The sort choices a picker offers, in order. PURE DATA, so it lives in the
|
|
117
|
+
* pure entry: a server-reachable manifest reads it at module scope, and
|
|
118
|
+
* importing it from the client-stamped `./catalog/react` bundle dragged React
|
|
119
|
+
* into a server graph for the sake of five string pairs. `./catalog/react`
|
|
120
|
+
* re-exports it unchanged, so no consumer has to move.
|
|
121
|
+
*
|
|
122
|
+
* (Written "client-stamped", never with the literal directive: this comment is
|
|
123
|
+
* emitted into `dist/catalog/index.d.ts`, and the tarball canary rightly
|
|
124
|
+
* refuses that directive anywhere in a PURE entry.)
|
|
125
|
+
*/
|
|
126
|
+
declare const SORT_OPTIONS: {
|
|
127
|
+
value: AgentSortOption;
|
|
128
|
+
label: string;
|
|
129
|
+
}[];
|
|
76
130
|
/** Which ownership tab is active in the agent list. */
|
|
77
131
|
type AgentTab = "mine" | "shared" | "all" | "system";
|
|
78
132
|
/** Favorite filter. */
|
|
@@ -259,6 +313,18 @@ interface AgentCatalogSchemaReport {
|
|
|
259
313
|
answered: string[];
|
|
260
314
|
/** True when `agent.definition.is_favorite` is writable by this caller. */
|
|
261
315
|
favoriteWritable: boolean | null;
|
|
316
|
+
/**
|
|
317
|
+
* Whether `agx_get_list_full` carries the `orchestra` badge column (added to
|
|
318
|
+
* the platform 2026-09-08).
|
|
319
|
+
*
|
|
320
|
+
* NOT a violation when absent — the picker degrades to no conductor marker,
|
|
321
|
+
* which is honest — but it is never SILENT either: a `false` here is the one
|
|
322
|
+
* signal that tells a host "this database predates the badge" instead of
|
|
323
|
+
* leaving someone to wonder why their Orchestra looks like a plain agent.
|
|
324
|
+
* `null` means the probe could not tell (the caller can see no agents at
|
|
325
|
+
* all), never "fine".
|
|
326
|
+
*/
|
|
327
|
+
orchestraColumn: boolean | null;
|
|
262
328
|
}
|
|
263
329
|
interface AssertAgentCatalogSchemaOptions {
|
|
264
330
|
/**
|
|
@@ -645,12 +711,8 @@ declare function AgentListInlinePicker({ consumerId, onSelect, activeAgentId, cl
|
|
|
645
711
|
* catalog/react/types.ts — VERBATIM port of matrx-frontend
|
|
646
712
|
* `features/agents/components/agent-listings/core/types.ts`.
|
|
647
713
|
*/
|
|
648
|
-
|
|
649
714
|
type RightPanel = "detail" | "sort" | "categories" | "tags" | null;
|
|
650
|
-
|
|
651
|
-
value: AgentSortOption;
|
|
652
|
-
label: string;
|
|
653
|
-
}[];
|
|
715
|
+
|
|
654
716
|
declare const PANEL_HEIGHT = "528px";
|
|
655
717
|
/**
|
|
656
718
|
* 🚨 THE PANEL NEVER OUTGROWS THE SPACE IT HAS.
|
|
@@ -816,4 +878,43 @@ declare function SidePanelHeader({ title, onClose, }: {
|
|
|
816
878
|
onClose: () => void;
|
|
817
879
|
}): react.JSX.Element;
|
|
818
880
|
|
|
819
|
-
|
|
881
|
+
type IconProps = SVGProps<SVGSVGElement> & {
|
|
882
|
+
className?: string;
|
|
883
|
+
};
|
|
884
|
+
/**
|
|
885
|
+
* The Orchestra marker (Lucide `music-4`): the glyph the Workflow Studio's
|
|
886
|
+
* picker used for a conductor, kept identical so the same agent wears the same
|
|
887
|
+
* mark in every client.
|
|
888
|
+
*/
|
|
889
|
+
declare function Music4Icon(props: IconProps): react.JSX.Element;
|
|
890
|
+
|
|
891
|
+
/**
|
|
892
|
+
* catalog/orchestra.ts — @ai-matrx/agents/catalog
|
|
893
|
+
*
|
|
894
|
+
* Creator words for an Orchestra badge. A VERBATIM port of the helpers the
|
|
895
|
+
* Workflow Studio's hand-rolled picker carried (`apps/workflow-studio/src/
|
|
896
|
+
* hooks/use-agents.ts` before `c0f958b43`), lifted here so every client says
|
|
897
|
+
* the same sentence about the same ensemble.
|
|
898
|
+
*
|
|
899
|
+
* Pure — no React, no DOM. The row shape is `OrchestraBadge` in `./types`.
|
|
900
|
+
*/
|
|
901
|
+
|
|
902
|
+
declare function orchestraModeLabel(mode: string): string;
|
|
903
|
+
/** Human label for a badge: "Orchestra · supervisor · 3 members" (singular-safe). */
|
|
904
|
+
declare function orchestraLabel(badge: OrchestraBadge): string;
|
|
905
|
+
/**
|
|
906
|
+
* The member-call ceiling in Creator language ("Team members can call helpers
|
|
907
|
+
* up to 2 levels deep"), or `null` when the composition declared none. A badge
|
|
908
|
+
* never invents the platform default: the server that runs the ensemble owns
|
|
909
|
+
* that number, and printing a promise nobody made is worse than printing
|
|
910
|
+
* nothing.
|
|
911
|
+
*/
|
|
912
|
+
declare function orchestraDepthLine(badge: OrchestraBadge): string | null;
|
|
913
|
+
/**
|
|
914
|
+
* One visible line naming who the Orchestra delegates to, collapsing past
|
|
915
|
+
* `limit` into "+N more". `null` when no member carries a real role title —
|
|
916
|
+
* "Member, Member, Member" is noise that reads like data.
|
|
917
|
+
*/
|
|
918
|
+
declare function orchestraDelegatesLine(badge: OrchestraBadge, limit?: number): string | null;
|
|
919
|
+
|
|
920
|
+
export { type AgentCatalogLinkComponent, AgentCatalogProvider, type AgentCatalogProviderProps, type AgentCatalogRenderModelRef, type AgentCatalogUiPorts, AgentCategoriesPanel, type AgentCategoriesPanelProps, AgentDetailCard, type AgentDetailCardProps, AgentFilterBar, type AgentFilterBarProps, AgentListContent, type AgentListContentProps, type AgentListCoreOptions, AgentListDropdown, type AgentListDropdownProps, AgentListInlinePicker, type AgentListInlinePickerProps, type AgentListTabCounts, AgentListTabs, AgentMobileSubView, type AgentMobileSubViewProps, AgentRow, type AgentRowProps, AgentSortPanel, type AgentSortPanelProps, AgentTagsPanel, type AgentTagsPanelProps, CheckRow, FavoriteAgentButton, FilterChip, HOVER_GRACE_MS, type IconProps, LIST_MAX_HEIGHT, Music4Icon, OptionRow, type OrchestraBadge, PANEL_HEIGHT, type RightPanel, SORT_OPTIONS, SearchInput, SidePanelHeader, type UseAgentConsumerReturn, coerceVisibleTab, orchestraDelegatesLine, orchestraDepthLine, orchestraLabel, orchestraModeLabel, useAgentCatalog, useAgentCatalogRows, useAgentCatalogState, useAgentCatalogUiPorts, useAgentConsumer, useAgentListCore };
|
|
@@ -88,6 +88,13 @@ import { useCallback as useCallback2, useEffect, useRef, useState } from "react"
|
|
|
88
88
|
function isMandateAgentId(id) {
|
|
89
89
|
return id.startsWith("mandate:");
|
|
90
90
|
}
|
|
91
|
+
var SORT_OPTIONS = [
|
|
92
|
+
{ value: "updated-desc", label: "Recent" },
|
|
93
|
+
{ value: "created-desc", label: "Created" },
|
|
94
|
+
{ value: "name-asc", label: "A \u2192 Z" },
|
|
95
|
+
{ value: "name-desc", label: "Z \u2192 A" },
|
|
96
|
+
{ value: "category-asc", label: "Category" }
|
|
97
|
+
];
|
|
91
98
|
var AGENT_NONE_SENTINEL = "__none__";
|
|
92
99
|
var DEFAULT_AGENT_CONSUMER_STATE = {
|
|
93
100
|
tab: "mine",
|
|
@@ -916,6 +923,14 @@ function AlertTriangleIcon(props) {
|
|
|
916
923
|
/* @__PURE__ */ jsx2("path", { d: "M12 17h.01" })
|
|
917
924
|
] });
|
|
918
925
|
}
|
|
926
|
+
function Music4Icon(props) {
|
|
927
|
+
return /* @__PURE__ */ jsxs(Svg, { ...props, children: [
|
|
928
|
+
/* @__PURE__ */ jsx2("path", { d: "M9 18V5l12-2v13" }),
|
|
929
|
+
/* @__PURE__ */ jsx2("path", { d: "m9 9 12-2" }),
|
|
930
|
+
/* @__PURE__ */ jsx2("circle", { cx: "6", cy: "18", r: "3" }),
|
|
931
|
+
/* @__PURE__ */ jsx2("circle", { cx: "18", cy: "16", r: "3" })
|
|
932
|
+
] });
|
|
933
|
+
}
|
|
919
934
|
|
|
920
935
|
// catalog/react/primitives.tsx
|
|
921
936
|
import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
@@ -1160,6 +1175,33 @@ function FavoriteAgentButton({
|
|
|
1160
1175
|
);
|
|
1161
1176
|
}
|
|
1162
1177
|
|
|
1178
|
+
// catalog/orchestra.ts
|
|
1179
|
+
var ORCHESTRA_MODE_LABEL = {
|
|
1180
|
+
supervisor: "supervisor",
|
|
1181
|
+
sequential: "in order",
|
|
1182
|
+
parallel: "together",
|
|
1183
|
+
dag: "custom flow"
|
|
1184
|
+
};
|
|
1185
|
+
function orchestraModeLabel(mode) {
|
|
1186
|
+
return ORCHESTRA_MODE_LABEL[mode] ?? mode;
|
|
1187
|
+
}
|
|
1188
|
+
function orchestraLabel(badge) {
|
|
1189
|
+
const n = badge.memberCount;
|
|
1190
|
+
return `Orchestra \xB7 ${orchestraModeLabel(badge.mode)} \xB7 ${n} ${n === 1 ? "member" : "members"}`;
|
|
1191
|
+
}
|
|
1192
|
+
function orchestraDepthLine(badge) {
|
|
1193
|
+
const n = badge.depthBudget;
|
|
1194
|
+
if (typeof n !== "number" || n <= 0) return null;
|
|
1195
|
+
return `Team members can call helpers up to ${n} ${n === 1 ? "level" : "levels"} deep`;
|
|
1196
|
+
}
|
|
1197
|
+
function orchestraDelegatesLine(badge, limit = 3) {
|
|
1198
|
+
const titles = badge.memberTitles;
|
|
1199
|
+
if (titles.length === 0) return null;
|
|
1200
|
+
const shown = titles.slice(0, limit);
|
|
1201
|
+
const extra = titles.length - shown.length;
|
|
1202
|
+
return `Delegates to: ${shown.join(", ")}${extra > 0 ? ` +${extra} more` : ""}`;
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1163
1205
|
// catalog/react/AgentDetailCard.tsx
|
|
1164
1206
|
import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
1165
1207
|
function AgentDetailCard({ agent, onSelect }) {
|
|
@@ -1186,6 +1228,22 @@ function AgentDetailCard({ agent, onSelect }) {
|
|
|
1186
1228
|
] }) }),
|
|
1187
1229
|
/* @__PURE__ */ jsx6("div", { className: "h-px bg-border mx-3" }),
|
|
1188
1230
|
/* @__PURE__ */ jsxs4("div", { className: "flex-1 overflow-y-auto px-4 py-3 space-y-3", children: [
|
|
1231
|
+
agent.orchestra && /* @__PURE__ */ jsxs4("div", { className: "rounded-md border border-primary/20 bg-primary/5 px-2.5 py-2", children: [
|
|
1232
|
+
/* @__PURE__ */ jsxs4("div", { className: "flex items-center gap-1.5", children: [
|
|
1233
|
+
/* @__PURE__ */ jsx6(Music4Icon, { className: "w-3.5 h-3.5 text-primary shrink-0" }),
|
|
1234
|
+
/* @__PURE__ */ jsx6("span", { className: "text-[11px] font-medium text-primary", children: orchestraLabel(agent.orchestra) })
|
|
1235
|
+
] }),
|
|
1236
|
+
agent.orchestra.tagline && /* @__PURE__ */ jsx6("p", { className: "mt-1 text-xs text-foreground/80 leading-relaxed", children: agent.orchestra.tagline }),
|
|
1237
|
+
orchestraDelegatesLine(agent.orchestra) && /* @__PURE__ */ jsx6(
|
|
1238
|
+
"p",
|
|
1239
|
+
{
|
|
1240
|
+
className: "mt-1 text-[11px] text-muted-foreground",
|
|
1241
|
+
title: `Delegates to: ${agent.orchestra.memberTitles.join(", ")}`,
|
|
1242
|
+
children: orchestraDelegatesLine(agent.orchestra)
|
|
1243
|
+
}
|
|
1244
|
+
),
|
|
1245
|
+
orchestraDepthLine(agent.orchestra) && /* @__PURE__ */ jsx6("p", { className: "mt-0.5 text-[11px] text-muted-foreground", children: orchestraDepthLine(agent.orchestra) })
|
|
1246
|
+
] }),
|
|
1189
1247
|
agent.description && /* @__PURE__ */ jsxs4("div", { children: [
|
|
1190
1248
|
/* @__PURE__ */ jsx6("p", { className: "text-[11px] font-medium text-muted-foreground uppercase tracking-wider mb-1", children: "Description" }),
|
|
1191
1249
|
/* @__PURE__ */ jsx6("p", { className: "text-xs text-foreground/80 leading-relaxed", children: agent.description })
|
|
@@ -1302,13 +1360,6 @@ var iconButtonClass = "flex items-center justify-center h-7 w-7 rounded-md borde
|
|
|
1302
1360
|
import { useEffect as useEffect3, useRef as useRef3 } from "react";
|
|
1303
1361
|
|
|
1304
1362
|
// catalog/react/types.ts
|
|
1305
|
-
var SORT_OPTIONS = [
|
|
1306
|
-
{ value: "updated-desc", label: "Recent" },
|
|
1307
|
-
{ value: "created-desc", label: "Created" },
|
|
1308
|
-
{ value: "name-asc", label: "A \u2192 Z" },
|
|
1309
|
-
{ value: "name-desc", label: "Z \u2192 A" },
|
|
1310
|
-
{ value: "category-asc", label: "Category" }
|
|
1311
|
-
];
|
|
1312
1363
|
var PANEL_HEIGHT = "528px";
|
|
1313
1364
|
var LIST_MAX_HEIGHT = "min(528px, var(--radix-popper-available-height, 528px))";
|
|
1314
1365
|
|
|
@@ -1486,6 +1537,17 @@ function AgentRow({
|
|
|
1486
1537
|
children: agent.name || "Untitled"
|
|
1487
1538
|
}
|
|
1488
1539
|
),
|
|
1540
|
+
agent.orchestra && /* @__PURE__ */ jsxs7(
|
|
1541
|
+
"span",
|
|
1542
|
+
{
|
|
1543
|
+
className: "flex shrink-0 items-center gap-0.5 rounded-sm bg-primary/10 px-1 py-px text-[9px] font-medium text-primary",
|
|
1544
|
+
title: orchestraDelegatesLine(agent.orchestra) ?? orchestraLabel(agent.orchestra),
|
|
1545
|
+
children: [
|
|
1546
|
+
/* @__PURE__ */ jsx9(Music4Icon, { className: "w-2.5 h-2.5" }),
|
|
1547
|
+
agent.orchestra.memberCount
|
|
1548
|
+
]
|
|
1549
|
+
}
|
|
1550
|
+
),
|
|
1489
1551
|
agent.agentType === "builtin" ? /* @__PURE__ */ jsx9("span", { className: "text-[9px] font-medium text-primary bg-primary/10 px-1 py-px rounded shrink-0 ml-auto", children: labels.systemBadge }) : agent.isOwner === false ? /* @__PURE__ */ jsx9("span", { className: "text-[9px] text-muted-foreground bg-muted px-1 py-px rounded shrink-0 ml-auto", children: "shared" }) : null
|
|
1490
1552
|
]
|
|
1491
1553
|
}
|
|
@@ -2324,12 +2386,17 @@ export {
|
|
|
2324
2386
|
FilterChip,
|
|
2325
2387
|
HOVER_GRACE_MS,
|
|
2326
2388
|
LIST_MAX_HEIGHT,
|
|
2389
|
+
Music4Icon,
|
|
2327
2390
|
OptionRow,
|
|
2328
2391
|
PANEL_HEIGHT,
|
|
2329
2392
|
SORT_OPTIONS,
|
|
2330
2393
|
SearchInput,
|
|
2331
2394
|
SidePanelHeader,
|
|
2332
2395
|
coerceVisibleTab,
|
|
2396
|
+
orchestraDelegatesLine,
|
|
2397
|
+
orchestraDepthLine,
|
|
2398
|
+
orchestraLabel,
|
|
2399
|
+
orchestraModeLabel,
|
|
2333
2400
|
useAgentCatalog,
|
|
2334
2401
|
useAgentCatalogRows,
|
|
2335
2402
|
useAgentCatalogState,
|