dsh-plugin-subagent-director 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.
Files changed (80) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +21 -0
  3. package/README.md +135 -0
  4. package/lib/bridge-contract.d.ts +41 -0
  5. package/lib/bridge-contract.d.ts.map +1 -0
  6. package/lib/bridge-contract.js +7 -0
  7. package/lib/bridge-contract.js.map +1 -0
  8. package/lib/bridge-entry.d.ts +29 -0
  9. package/lib/bridge-entry.d.ts.map +1 -0
  10. package/lib/bridge-entry.js +10 -0
  11. package/lib/bridge-entry.js.map +1 -0
  12. package/lib/client/RoleCard.d.ts +23 -0
  13. package/lib/client/RoleCard.d.ts.map +1 -0
  14. package/lib/client/RoleCard.js +72 -0
  15. package/lib/client/RoleCard.js.map +1 -0
  16. package/lib/client/SubagentModelDock.d.ts +29 -0
  17. package/lib/client/SubagentModelDock.d.ts.map +1 -0
  18. package/lib/client/SubagentModelDock.js +32 -0
  19. package/lib/client/SubagentModelDock.js.map +1 -0
  20. package/lib/client/SubagentOptionsSection.d.ts +23 -0
  21. package/lib/client/SubagentOptionsSection.d.ts.map +1 -0
  22. package/lib/client/SubagentOptionsSection.js +164 -0
  23. package/lib/client/SubagentOptionsSection.js.map +1 -0
  24. package/lib/client/index.d.ts +44 -0
  25. package/lib/client/index.d.ts.map +1 -0
  26. package/lib/client/index.js +1541 -0
  27. package/lib/client/index.js.map +1 -0
  28. package/lib/client/locales.d.ts +13 -0
  29. package/lib/client/locales.d.ts.map +1 -0
  30. package/lib/client/locales.js +107 -0
  31. package/lib/client/locales.js.map +1 -0
  32. package/lib/client/store-logic.d.ts +105 -0
  33. package/lib/client/store-logic.d.ts.map +1 -0
  34. package/lib/client/store-logic.js +143 -0
  35. package/lib/client/store-logic.js.map +1 -0
  36. package/lib/client/store.d.ts +104 -0
  37. package/lib/client/store.d.ts.map +1 -0
  38. package/lib/client/store.js +223 -0
  39. package/lib/client/store.js.map +1 -0
  40. package/lib/client/subagent-model.d.ts +47 -0
  41. package/lib/client/subagent-model.d.ts.map +1 -0
  42. package/lib/client/subagent-model.js +81 -0
  43. package/lib/client/subagent-model.js.map +1 -0
  44. package/lib/client/ui.d.ts +26 -0
  45. package/lib/client/ui.d.ts.map +1 -0
  46. package/lib/client/ui.js +102 -0
  47. package/lib/client/ui.js.map +1 -0
  48. package/lib/config.d.ts +63 -0
  49. package/lib/config.d.ts.map +1 -0
  50. package/lib/config.js +26 -0
  51. package/lib/config.js.map +1 -0
  52. package/lib/delegation-tool.d.ts +169 -0
  53. package/lib/delegation-tool.d.ts.map +1 -0
  54. package/lib/delegation-tool.js +404 -0
  55. package/lib/delegation-tool.js.map +1 -0
  56. package/lib/envelope.d.ts +97 -0
  57. package/lib/envelope.d.ts.map +1 -0
  58. package/lib/envelope.js +136 -0
  59. package/lib/envelope.js.map +1 -0
  60. package/lib/guidance.d.ts +37 -0
  61. package/lib/guidance.d.ts.map +1 -0
  62. package/lib/guidance.js +46 -0
  63. package/lib/guidance.js.map +1 -0
  64. package/lib/index.d.ts +29 -0
  65. package/lib/index.d.ts.map +1 -0
  66. package/lib/index.js +63 -0
  67. package/lib/index.js.map +1 -0
  68. package/lib/remote.d.ts +102 -0
  69. package/lib/remote.d.ts.map +1 -0
  70. package/lib/remote.js +254 -0
  71. package/lib/remote.js.map +1 -0
  72. package/lib/route-resolver.d.ts +118 -0
  73. package/lib/route-resolver.d.ts.map +1 -0
  74. package/lib/route-resolver.js +71 -0
  75. package/lib/route-resolver.js.map +1 -0
  76. package/lib/settings.d.ts +157 -0
  77. package/lib/settings.d.ts.map +1 -0
  78. package/lib/settings.js +118 -0
  79. package/lib/settings.js.map +1 -0
  80. package/package.json +110 -0
@@ -0,0 +1,164 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Subagent Director settings section (design section 9): the default-model row
4
+ * plus the role-template cards. The slot outlet erases the share boundary and
5
+ * delivers the inject face flat (PropsRuntime<'settings.section'> renderer is
6
+ * the DSH shell); this component guards for a not-yet-injected render and then
7
+ * renders its content column from the live snapshot.
8
+ *
9
+ * State lives in the page store (SubagentOptionsStore); every write travels as
10
+ * path ops through settings.mutate with an optimistic-revision lock, so the
11
+ * section only ever echoes the acknowledge-and-reload outcome. Failures return
12
+ * a localized message that the save/delete/restore controls surface inline.
13
+ */
14
+ import { useEffect, useState } from 'react';
15
+ import { roleIdFromName } from './store-logic.js';
16
+ import { RoleCard } from './RoleCard.js';
17
+ import { cardStyle, fieldLabelStyle, ghostButtonStyle, primaryButtonStyle, rowStyle, sectionWidth, selectStyle, textAreaStyle, textInputStyle, token, } from './ui.js';
18
+ /** Derive reasoning-effort options from the catalog for an exact provider+model. */
19
+ function effortsFor(groups, provider, model) {
20
+ if (!provider || !model)
21
+ return [];
22
+ const group = groups.find((g) => g.id === provider);
23
+ const entry = group?.models.find((m) => m.id === model);
24
+ return entry?.reasoning?.efforts ?? [];
25
+ }
26
+ /**
27
+ * Render the Subagent Director settings section content column.
28
+ * @param props - slot-delivered injected dependencies.
29
+ * @returns the section, or null while the shell has not injected yet.
30
+ */
31
+ export function SubagentOptionsSection(props) {
32
+ const { controller, useSnapshot, t } = props;
33
+ if (controller === undefined || useSnapshot === undefined || t === undefined)
34
+ return null;
35
+ return _jsx(Loaded, { injected: { controller, useSnapshot, t } });
36
+ }
37
+ function Loaded({ injected }) {
38
+ const { controller, t } = injected;
39
+ const state = injected.useSnapshot((s) => s);
40
+ // Kick the first load once when the page mounts (post-load refreshes ride
41
+ // the pushed invalidations wired in apply()).
42
+ useEffect(() => {
43
+ if (state.status === 'idle' && !state.loading)
44
+ void controller.load();
45
+ // eslint-disable-next-line react-hooks/exhaustive-deps
46
+ }, [state.status, state.loading]);
47
+ if (state.status === 'error') {
48
+ return (_jsxs("div", { style: sectionWidth, children: [_jsxs("p", { style: { color: token.danger, fontSize: 13 }, children: [t('loadError'), ": ", state.error ?? ''] }), _jsx("button", { style: ghostButtonStyle, onClick: () => void controller.load(), children: t('save') })] }));
49
+ }
50
+ if (state.status !== 'ready') {
51
+ return _jsx("div", { style: sectionWidth, children: _jsx("p", { style: { color: token.labelSecondary, fontSize: 13 }, children: t('sectionIntro') }) });
52
+ }
53
+ const section = state.section;
54
+ const writable = state.writable;
55
+ const roles = section?.roles ?? {};
56
+ const entries = Object.entries(roles);
57
+ const groups = state.models;
58
+ return (_jsxs("div", { style: sectionWidth, children: [_jsx("p", { style: { margin: 0, color: token.labelSecondary, fontSize: 13, lineHeight: '18px' }, children: t('sectionIntro') }), _jsx(DefaultModelRow, { controller: controller, groups: groups, writable: writable, current: {
59
+ provider: section?.defaultProvider,
60
+ model: section?.defaultModel,
61
+ reasoningEffort: section?.defaultReasoningEffort,
62
+ }, t: t }), _jsx(RolesBlock, { controller: controller, groups: groups, writable: writable, roles: entries, defaultRole: section?.defaultRole, t: t })] }));
63
+ }
64
+ /** The default-model row: provider → model → reasoning-effort cascade + restore. */
65
+ function DefaultModelRow({ controller, groups, writable, current, t }) {
66
+ const [draft, setDraft] = useState({
67
+ provider: current.provider ?? '',
68
+ model: current.model ?? '',
69
+ reasoningEffort: current.reasoningEffort ?? '',
70
+ });
71
+ const [busy, setBusy] = useState(false);
72
+ const [failure, setFailure] = useState(undefined);
73
+ const [done, setDone] = useState(false);
74
+ // Reflect a fresh server snapshot into the draft (a pushed invalidation or a
75
+ // restore reload; a user mid-edit is not clobbered because the section owns
76
+ // the only editor for these three fields).
77
+ useEffect(() => {
78
+ if (busy)
79
+ return;
80
+ setDraft({
81
+ provider: current.provider ?? '',
82
+ model: current.model ?? '',
83
+ reasoningEffort: current.reasoningEffort ?? '',
84
+ });
85
+ // eslint-disable-next-line react-hooks/exhaustive-deps
86
+ }, [current.provider, current.model, current.reasoningEffort]);
87
+ const provider = draft.provider;
88
+ const model = draft.model;
89
+ const modelOptions = provider ? (groups.find((g) => g.id === provider)?.models ?? []) : [];
90
+ const effortOptions = effortsFor(groups, provider, model);
91
+ const save = async () => {
92
+ setBusy(true);
93
+ setFailure(undefined);
94
+ try {
95
+ const message = await controller.setDefaultModel({
96
+ provider: draft.provider || undefined,
97
+ model: draft.model || undefined,
98
+ reasoningEffort: draft.reasoningEffort || undefined,
99
+ });
100
+ if (message !== undefined) {
101
+ setFailure(message);
102
+ return;
103
+ }
104
+ setDone(true);
105
+ }
106
+ finally {
107
+ setBusy(false);
108
+ }
109
+ };
110
+ const restore = async () => {
111
+ setBusy(true);
112
+ setFailure(undefined);
113
+ try {
114
+ const message = await controller.restoreDefaults();
115
+ if (message !== undefined) {
116
+ setFailure(message);
117
+ return;
118
+ }
119
+ setDone(true);
120
+ }
121
+ finally {
122
+ setBusy(false);
123
+ }
124
+ };
125
+ return (_jsxs("div", { style: cardStyle, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'baseline', justifyContent: 'space-between', gap: 8 }, children: [_jsx("strong", { style: { color: token.labelPrimary, fontSize: 14 }, children: t('defaultsHeading') }), _jsx("button", { style: ghostButtonStyle, disabled: !writable || busy, onClick: () => void restore(), children: t('restoreDefaults') })] }), _jsx("p", { style: { margin: 0, color: token.labelSecondary, fontSize: 13, lineHeight: '18px' }, children: t('defaultsHint') }), _jsxs("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(3, minmax(0, 1fr))', gap: 8 }, children: [_jsxs("div", { style: rowStyle, children: [_jsx("label", { style: fieldLabelStyle, children: t('defaultProvider') }), _jsxs("select", { style: selectStyle, value: draft.provider, disabled: !writable || groups.length === 0, onChange: (e) => setDraft((d) => ({ provider: e.target.value, model: '', reasoningEffort: '' })), children: [_jsx("option", { value: "", children: "\u2014" }), groups.map((g) => (_jsx("option", { value: g.id, children: g.name }, g.id)))] })] }), _jsxs("div", { style: rowStyle, children: [_jsx("label", { style: fieldLabelStyle, children: t('defaultModel') }), _jsxs("select", { style: selectStyle, value: draft.model, disabled: !writable || modelOptions.length === 0, onChange: (e) => setDraft((d) => ({ ...d, model: e.target.value, reasoningEffort: '' })), children: [_jsx("option", { value: "", children: "\u2014" }), modelOptions.map((m) => (_jsx("option", { value: m.id, children: m.name }, m.id)))] })] }), _jsxs("div", { style: rowStyle, children: [_jsx("label", { style: fieldLabelStyle, children: t('defaultReasoningEffort') }), _jsxs("select", { style: selectStyle, value: draft.reasoningEffort, disabled: !writable || effortOptions.length === 0, onChange: (e) => setDraft((d) => ({ ...d, reasoningEffort: e.target.value })), children: [_jsx("option", { value: "", children: "\u2014" }), effortOptions.map((e) => (_jsx("option", { value: e.id, children: e.name }, e.id)))] })] })] }), failure !== undefined ? _jsx("div", { style: { color: token.danger, fontSize: 12 }, children: failure }) : null, done ? _jsx("div", { style: { color: token.accent, fontSize: 12 }, children: t('restoreDone') }) : null, _jsx("div", { style: { display: 'flex', gap: 8 }, children: _jsx("button", { style: primaryButtonStyle, disabled: !writable || busy, onClick: () => void save(), children: t('save') }) })] }));
126
+ }
127
+ /** The role-template roster: cards plus an inline add form. */
128
+ function RolesBlock({ controller, groups, writable, roles, defaultRole, t }) {
129
+ const [adding, setAdding] = useState(false);
130
+ const [draft, setDraft] = useState({
131
+ displayName: '',
132
+ description: '',
133
+ persona: '',
134
+ provider: '',
135
+ model: '',
136
+ reasoningEffort: '',
137
+ });
138
+ const [busy, setBusy] = useState(false);
139
+ const [failure, setFailure] = useState(undefined);
140
+ const beginAdd = () => {
141
+ setDraft({ displayName: '', description: '', persona: '', provider: '', model: '', reasoningEffort: '' });
142
+ setFailure(undefined);
143
+ setAdding(true);
144
+ };
145
+ const saveAdd = async () => {
146
+ setBusy(true);
147
+ setFailure(undefined);
148
+ try {
149
+ const existing = new Set(roles.map(([id]) => id));
150
+ const id = roleIdFromName(draft.displayName, existing);
151
+ const message = await controller.addRole(id, draft);
152
+ if (message !== undefined) {
153
+ setFailure(message);
154
+ return;
155
+ }
156
+ setAdding(false);
157
+ }
158
+ finally {
159
+ setBusy(false);
160
+ }
161
+ };
162
+ return (_jsxs("div", { style: cardStyle, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'baseline', justifyContent: 'space-between', gap: 8 }, children: [_jsx("strong", { style: { color: token.labelPrimary, fontSize: 14 }, children: t('rolesHeading') }), _jsx("button", { style: ghostButtonStyle, disabled: !writable || adding, onClick: beginAdd, children: t('addRole') })] }), _jsx("p", { style: { margin: 0, color: token.labelSecondary, fontSize: 13, lineHeight: '18px' }, children: t('rolesHint') }), adding ? (_jsxs("div", { style: { border: '1px dashed ' + token.border, borderRadius: 10, padding: 12, display: 'flex', flexDirection: 'column', gap: 10 }, children: [_jsxs("div", { style: rowStyle, children: [_jsx("label", { style: fieldLabelStyle, children: t('roleDisplayName') }), _jsx("input", { style: textInputStyle, value: draft.displayName, placeholder: t('displayNamePlaceholder'), onChange: (e) => setDraft((d) => ({ ...d, displayName: e.target.value })) })] }), _jsxs("div", { style: rowStyle, children: [_jsx("label", { style: fieldLabelStyle, children: t('roleDescription') }), _jsx("textarea", { style: textAreaStyle, value: draft.description, placeholder: t('descriptionPlaceholder'), onChange: (e) => setDraft((d) => ({ ...d, description: e.target.value })) })] }), failure !== undefined ? _jsx("div", { style: { color: token.danger, fontSize: 12 }, children: failure }) : null, _jsxs("div", { style: { display: 'flex', gap: 8 }, children: [_jsx("button", { style: primaryButtonStyle, disabled: !writable || busy, onClick: () => void saveAdd(), children: t('addRole') }), _jsx("button", { style: ghostButtonStyle, disabled: busy, onClick: () => setAdding(false), children: t('cancel') })] })] })) : null, roles.length === 0 && !adding ? (_jsx("p", { style: { margin: 0, color: token.labelSecondary, fontSize: 13 }, children: t('emptyRoles') })) : (roles.map(([id, role]) => (_jsx(RoleCard, { id: id, role: role, isDefault: defaultRole === id, groups: groups, t: t, onSave: (d) => controller.updateRole(id, role, d), onDelete: () => controller.removeRole(id), onSetDefault: () => controller.setDefaultRole(id) }, id))))] }));
163
+ }
164
+ //# sourceMappingURL=SubagentOptionsSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubagentOptionsSection.js","sourceRoot":"","sources":["../../src/client/SubagentOptionsSection.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { ClientContext, ConversationSnapshot } from '@deepseek-ai/dsh-client-runtime/client';
2
+ import { en, zh, type SubagentDirectorKey } from './locales.js';
3
+ import { SubagentOptionsStore } from './store.js';
4
+ /** Dictionary namespace owned by Subagent Director (bilingual, typed). */
5
+ export declare const NS = "settings.subagentDirector";
6
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
7
+ interface LocaleNamespaceMap {
8
+ /** Subagent Director settings-page copy. */
9
+ 'settings.subagentDirector': SubagentDirectorKey;
10
+ }
11
+ }
12
+ /**
13
+ * Compile-time view of `conversation.composer.dock`: declared here only to
14
+ * strongly type our occupant. The runtime seat is owned by
15
+ * dsh-client-ui-conversation's bundle; this augmentation contributes no
16
+ * runtime declaration (it stays in this package's own module scope).
17
+ */
18
+ declare module '@deepseek-ai/dsh-client-ui-slots' {
19
+ interface SlotMap {
20
+ 'conversation.composer.dock': {
21
+ kind: 'list';
22
+ scope: 'session';
23
+ owner: {
24
+ readonly session: ConversationSnapshot | undefined;
25
+ readonly input: unknown;
26
+ };
27
+ };
28
+ }
29
+ }
30
+ export { en, zh };
31
+ export type { SubagentDirectorKey } from './locales.js';
32
+ export type { SubagentOptionsSectionInjected, SubagentOptionsSectionProps } from './SubagentOptionsSection.js';
33
+ export type { SubagentOptionsState, SubagentOptionsStore } from './store.js';
34
+ /** Refetch the page snapshot only after its first load. */
35
+ export declare function refreshIfLoaded(controller: SubagentOptionsStore): void;
36
+ /** Services required by the settings registration (cordis fiber inject). */
37
+ export declare const inject: string[];
38
+ /**
39
+ * Register the Subagent Director section once the `settings.section`
40
+ * declaration is on the ledger, wire its store to the connection, and keep it
41
+ * fresh on every pushed invalidation (settings or provider topology).
42
+ */
43
+ export declare function apply(ctx: ClientContext): void;
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAIlG,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAA6B,MAAM,YAAY,CAAC;AAK7E,0EAA0E;AAC1E,eAAO,MAAM,EAAE,8BAA8B,CAAC;AAE9C,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,4CAA4C;QAC5C,2BAA2B,EAAE,mBAAmB,CAAC;KAClD;CACF;AACD;;;;;GAKG;AACH,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,OAAO;QACf,4BAA4B,EAAE;YAC5B,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,SAAS,CAAC;YACjB,KAAK,EAAE;gBAAE,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,CAAC;gBAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;aAAE,CAAC;SACxF,CAAC;KACH;CACF;AAED,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAClB,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,YAAY,EAAE,8BAA8B,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC/G,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE7E,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAGtE;AAED,4EAA4E;AAC5E,eAAO,MAAM,MAAM,UAA8C,CAAC;AAElE;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CA6D9C"}