@aiderdesk/aiderdesk 0.67.0 → 0.69.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 (66) hide show
  1. package/out/renderer/assets/{arc-BnPy4nhx.js → arc--tfU0Ahe.js} +1 -1
  2. package/out/renderer/assets/{architectureDiagram-3BPJPVTR-_SwpsbSs.js → architectureDiagram-3BPJPVTR-D2uDC6Pw.js} +3 -3
  3. package/out/renderer/assets/{blockDiagram-GPEHLZMM-D8Bc_xCY.js → blockDiagram-GPEHLZMM-BKopmU2x.js} +4 -4
  4. package/out/renderer/assets/{c4Diagram-AAUBKEIU-Ddic5IpI.js → c4Diagram-AAUBKEIU-CU9NH6bi.js} +2 -2
  5. package/out/renderer/assets/{channel-I2sEi2rW.js → channel-CBm2XBi8.js} +1 -1
  6. package/out/renderer/assets/{chunk-2J33WTMH-Cqrw7IHw.js → chunk-2J33WTMH-Yb07TKpF.js} +1 -1
  7. package/out/renderer/assets/{chunk-4BX2VUAB-DKY4go9E.js → chunk-4BX2VUAB-B1KgZMg1.js} +1 -1
  8. package/out/renderer/assets/{chunk-55IACEB6-COO6Gc0F.js → chunk-55IACEB6-BQ1g6F53.js} +1 -1
  9. package/out/renderer/assets/{chunk-727SXJPM-Bu8zhvGn.js → chunk-727SXJPM-nQzqwjgJ.js} +5 -5
  10. package/out/renderer/assets/{chunk-AQP2D5EJ-JHXEk1U1.js → chunk-AQP2D5EJ-8vVOUXUS.js} +3 -3
  11. package/out/renderer/assets/{chunk-FMBD7UC4-BqbYNISq.js → chunk-FMBD7UC4-dVquqYuV.js} +1 -1
  12. package/out/renderer/assets/{chunk-ND2GUHAM-D29ZgnDp.js → chunk-ND2GUHAM-Bu2VSodd.js} +1 -1
  13. package/out/renderer/assets/{chunk-QZHKN3VN-B-pbtAbR.js → chunk-QZHKN3VN-Bl58FmbX.js} +1 -1
  14. package/out/renderer/assets/{classDiagram-4FO5ZUOK-B7_tIdbP.js → classDiagram-4FO5ZUOK-Dmfohc7-.js} +6 -6
  15. package/out/renderer/assets/{classDiagram-v2-Q7XG4LA2-B7_tIdbP.js → classDiagram-v2-Q7XG4LA2-Dmfohc7-.js} +6 -6
  16. package/out/renderer/assets/{cose-bilkent-S5V4N54A-CGNgxRV6.js → cose-bilkent-S5V4N54A-8bgOaac3.js} +1 -1
  17. package/out/renderer/assets/{dagre-BM42HDAG-DB-tI7Ml.js → dagre-BM42HDAG-BZZ0JLHX.js} +3 -3
  18. package/out/renderer/assets/{diagram-2AECGRRQ-Cdwrgy7R.js → diagram-2AECGRRQ-9oArT1ZV.js} +3 -3
  19. package/out/renderer/assets/{diagram-5GNKFQAL-BnvZ78_N.js → diagram-5GNKFQAL-OMRICVmJ.js} +4 -4
  20. package/out/renderer/assets/{diagram-KO2AKTUF-VUrfwRCk.js → diagram-KO2AKTUF-pjPRIjL7.js} +3 -3
  21. package/out/renderer/assets/{diagram-LMA3HP47-_Vo8GrFC.js → diagram-LMA3HP47-cRVrdFbD.js} +3 -3
  22. package/out/renderer/assets/{diagram-OG6HWLK6-CoLz9kio.js → diagram-OG6HWLK6-gJvA5dOA.js} +4 -4
  23. package/out/renderer/assets/{erDiagram-TEJ5UH35-B3Bg3gW1.js → erDiagram-TEJ5UH35-BvHOuuhD.js} +4 -4
  24. package/out/renderer/assets/{flowDiagram-I6XJVG4X-BgyAk0Xe.js → flowDiagram-I6XJVG4X-D17Inzho.js} +6 -6
  25. package/out/renderer/assets/{ganttDiagram-6RSMTGT7-NnVRwQPs.js → ganttDiagram-6RSMTGT7-CIorTPIp.js} +1 -1
  26. package/out/renderer/assets/{gitGraphDiagram-PVQCEYII-C4vrRnDw.js → gitGraphDiagram-PVQCEYII-R3v9UanE.js} +4 -4
  27. package/out/renderer/assets/{graph-BZvTCUpv.js → graph-DNFReSa8.js} +1 -1
  28. package/out/renderer/assets/{index-P63PgYUG.js → index-COTYjomB.js} +28970 -133308
  29. package/out/renderer/assets/{index-zdiQSGqQ.css → index-D56aByCg.css} +40 -0
  30. package/out/renderer/assets/{infoDiagram-5YYISTIA-zTriWVJJ.js → infoDiagram-5YYISTIA-B4hJmlOG.js} +2 -2
  31. package/out/renderer/assets/{ishikawaDiagram-YF4QCWOH-DHO6Yeea.js → ishikawaDiagram-YF4QCWOH-DxohqJKP.js} +1 -1
  32. package/out/renderer/assets/{journeyDiagram-JHISSGLW-CZsRcg2X.js → journeyDiagram-JHISSGLW-BxFBZYTB.js} +4 -4
  33. package/out/renderer/assets/jsx-dev-runtime-BsbxiHH-.js +49 -0
  34. package/out/renderer/assets/{kanban-definition-UN3LZRKU-DSpAeh8p.js → kanban-definition-UN3LZRKU-B39Yt2kD.js} +2 -2
  35. package/out/renderer/assets/{layout-B5A8fT-Z.js → layout-yXTq0RED.js} +2 -2
  36. package/out/renderer/assets/{mindmap-definition-RKZ34NQL-Bns9Ab8p.js → mindmap-definition-RKZ34NQL-BD2OIaSH.js} +3 -3
  37. package/out/renderer/assets/{pieDiagram-4H26LBE5-BX36DY7W.js → pieDiagram-4H26LBE5-COAWItT4.js} +4 -4
  38. package/out/renderer/assets/pierre-dark-C-Drv5KU.js +4 -0
  39. package/out/renderer/assets/pierre-dark-soft-Cd74uQaL.js +4 -0
  40. package/out/renderer/assets/pierre-light-CfQnmt6J.js +4 -0
  41. package/out/renderer/assets/pierre-light-soft-DMVdU74b.js +4 -0
  42. package/out/renderer/assets/{quadrantDiagram-W4KKPZXB-DuD2qSni.js → quadrantDiagram-W4KKPZXB-BLY0H2F6.js} +1 -1
  43. package/out/renderer/assets/{requirementDiagram-4Y6WPE33-Th2uknlw.js → requirementDiagram-4Y6WPE33-DEJf5mz_.js} +3 -3
  44. package/out/renderer/assets/{sankeyDiagram-5OEKKPKP-DP3WODC7.js → sankeyDiagram-5OEKKPKP-D3BkTe8z.js} +1 -1
  45. package/out/renderer/assets/{sequenceDiagram-3UESZ5HK-BvpGEq-v.js → sequenceDiagram-3UESZ5HK-DUU_lUpD.js} +3 -3
  46. package/out/renderer/assets/{stateDiagram-AJRCARHV-Btrfma35.js → stateDiagram-AJRCARHV-DnH4p93i.js} +6 -6
  47. package/out/renderer/assets/{stateDiagram-v2-BHNVJYJU-v-8JiozM.js → stateDiagram-v2-BHNVJYJU-CRXRiP95.js} +4 -4
  48. package/out/renderer/assets/{timeline-definition-PNZ67QCA-prZy7cGx.js → timeline-definition-PNZ67QCA-Uv34KQP0.js} +2 -2
  49. package/out/renderer/assets/{vennDiagram-CIIHVFJN-XCVp5OjS.js → vennDiagram-CIIHVFJN-JyUQxmn1.js} +1 -1
  50. package/out/renderer/assets/{wardley-L42UT6IY-FZSNLjCs.js → wardley-L42UT6IY-4X2JoJpL.js} +1 -1
  51. package/out/renderer/assets/{wardleyDiagram-YWT4CUSO-Cla_7ryL.js → wardleyDiagram-YWT4CUSO-B9pIhVmY.js} +3 -3
  52. package/out/renderer/assets/{worker-CfJUABHG.js → worker-BdXuKH1Q.js} +274 -171
  53. package/out/renderer/assets/{xychartDiagram-2RQKCTM6-CKvwGbhk.js → xychartDiagram-2RQKCTM6-PJZgkel8.js} +1 -1
  54. package/out/renderer/index.html +2 -2
  55. package/out/resources/skills/extension-creator/SKILL.md +24 -0
  56. package/out/resources/skills/extension-creator/references/examples-gallery.md +11 -0
  57. package/out/resources/skills/extension-creator/references/extension-interface.md +4 -0
  58. package/out/resources/skills/extension-creator/references/external-libraries.md +159 -0
  59. package/out/resources/skills/extension-creator/references/ui-components.md +35 -0
  60. package/out/runner.js +546 -450
  61. package/package.json +20 -33
  62. package/patches/{ai+5.0.179.patch → ai+5.0.195.patch} +9 -9
  63. package/out/renderer/assets/pierre-dark-DADY5eR0.js +0 -4
  64. package/out/renderer/assets/pierre-light-DUjirxKp.js +0 -4
  65. package/patches/@ai-sdk+deepseek+1.0.37.patch +0 -150
  66. package/patches/ai-sdk-provider-claude-code+2.3.0.patch +0 -1024
@@ -0,0 +1,159 @@
1
+ # External Libraries in UI Components
2
+
3
+ Extensions can load third-party npm packages and use them in their UI component JSX. This is useful when you need a rich component library (e.g., charts, kanban boards, calendars) that isn't available through the built-in `ui` prop.
4
+
5
+ ## How It Works
6
+
7
+ 1. **Declare** — Implement `getUIComponentsLibraries()` returning a map of arbitrary keys to npm package specs.
8
+ 2. **Resolve** — AiderDesk resolves each package via [esm.sh](https://esm.sh) (React and React-DOM are externalized to avoid duplicate instances). Resolved sources are cached to `~/.aider-desk/cache/extension-libraries/` for offline reuse.
9
+ 3. **Access** — Resolved libraries are passed to your JSX as `props.libraries.<key>`.
10
+
11
+ ## Declaring Libraries
12
+
13
+ ```typescript
14
+ getUIComponentsLibraries(): Record<string, string> {
15
+ return {
16
+ chart: 'recharts@^2.12.0',
17
+ lodash: 'lodash@^4.17.0',
18
+ };
19
+ }
20
+ ```
21
+
22
+ - **Key** — camelCase identifier you'll use to access the library in JSX (e.g., `props.libraries.chart`).
23
+ - **Value** — npm package name with a semver range, exactly as you'd list it in `package.json` (e.g., `'recharts@^2.12.0'`).
24
+
25
+ ## Accessing in JSX
26
+
27
+ Libraries arrive as `props.libraries.<key>`. Each value is the module's resolved exports — you can destructure named exports or use the default:
28
+
29
+ ```jsx
30
+ (props) => {
31
+ var chartLib = props.libraries.chart;
32
+ if (!chartLib) return <span>Loading chart library…</span>;
33
+
34
+ var LineChart = chartLib.LineChart;
35
+ var Line = chartLib.Line;
36
+ // ... use them
37
+ }
38
+ ```
39
+
40
+ ## Loading State
41
+
42
+ Libraries are loaded asynchronously. On first render `props.libraries.<key>` will be `undefined`. Always check for availability before using a library:
43
+
44
+ ```jsx
45
+ (props) => {
46
+ var chartLib = props.libraries.chart;
47
+
48
+ if (!chartLib) {
49
+ return <span className="text-text-secondary text-sm">Loading…</span>;
50
+ }
51
+
52
+ var LineChart = chartLib.LineChart;
53
+ return <LineChart data={props.data} />;
54
+ }
55
+ ```
56
+
57
+ If you want to show an error after a timeout, use `useEffect` with a flag:
58
+
59
+ ```jsx
60
+ (props) => {
61
+ var useState = React.useState;
62
+ var useEffect = React.useEffect;
63
+ var chartLib = props.libraries.chart;
64
+
65
+ var _e = useState(false);
66
+ var loadError = _e[0];
67
+ var setLoadError = _e[1];
68
+
69
+ useEffect(function () {
70
+ if (!chartLib && !loadError) {
71
+ var t = setTimeout(function () { setLoadError(true); }, 15000);
72
+ return function () { clearTimeout(t); };
73
+ }
74
+ setLoadError(false);
75
+ }, [chartLib, loadError]);
76
+
77
+ if (loadError && !chartLib) {
78
+ return <span className="text-red-400 text-sm">Failed to load library.</span>;
79
+ }
80
+ if (!chartLib) {
81
+ return <span className="text-text-secondary text-sm">Loading…</span>;
82
+ }
83
+
84
+ var LineChart = chartLib.LineChart;
85
+ return <LineChart data={props.data} />;
86
+ }
87
+ ```
88
+
89
+ ## Important Notes
90
+
91
+ - **React is externalized** — AiderDesk's React instance is used automatically. Never bundle or import React inside the library spec; it is already available globally. The esm.sh resolution uses `?external=react,react-dom,react/jsx-runtime,react/jsx-dev-runtime` to prevent duplicate React instances.
92
+ - **Internet required on first load** — Libraries are fetched from esm.sh on first use, then cached to disk. Subsequent loads work offline.
93
+ - **Single-file extensions** — `getUIComponentsLibraries()` works in both single-file and folder extensions.
94
+ - **Key naming** — Use camelCase keys. A key like `chart` becomes `props.libraries.chart`. Avoid dots or special characters in keys.
95
+ - **Multiple libraries** — You can declare as many libraries as needed. Each is loaded independently.
96
+
97
+ ## Minimal Example
98
+
99
+ ```typescript
100
+ // chart-demo.ts
101
+ import type { Extension, ExtensionContext, UIComponentDefinition } from '@aiderdesk/extensions';
102
+
103
+ const chartJsx = `
104
+ (props) => {
105
+ var chartLib = props.libraries.chart;
106
+ var Button = props.ui.Button;
107
+
108
+ if (!chartLib) {
109
+ return <span className="text-text-secondary text-xs">Loading chart…</span>;
110
+ }
111
+
112
+ var PieChart = chartLib.PieChart;
113
+ var Pie = chartLib.Pie;
114
+
115
+ var data = [
116
+ { name: 'A', value: 40 },
117
+ { name: 'B', value: 60 },
118
+ ];
119
+
120
+ return (
121
+ <div className="p-2">
122
+ <PieChart width={200} height={200}>
123
+ <Pie data={data} dataKey="value" nameKey="name" cx="50%" cy="50%" outerRadius={80} />
124
+ </PieChart>
125
+ </div>
126
+ );
127
+ }
128
+ `;
129
+
130
+ export default class ChartDemoExtension implements Extension {
131
+ static metadata = {
132
+ name: 'Chart Demo',
133
+ version: '1.0.0',
134
+ description: 'Demonstrates loading a third-party npm library (recharts) in an extension',
135
+ author: 'my_git_name',
136
+ capabilities: ['ui', 'example'],
137
+ };
138
+
139
+ async onLoad(context: ExtensionContext): Promise<void> {
140
+ context.log('Chart Demo loaded', 'info');
141
+ }
142
+
143
+ getUIComponents(_context: ExtensionContext): UIComponentDefinition[] {
144
+ return [
145
+ {
146
+ id: 'chart-demo',
147
+ placement: 'task-status-bar-left',
148
+ jsx: chartJsx,
149
+ },
150
+ ];
151
+ }
152
+
153
+ getUIComponentsLibraries(): Record<string, string> {
154
+ return {
155
+ chart: 'recharts@^2.12.0',
156
+ };
157
+ }
158
+ }
159
+ ```
@@ -28,6 +28,7 @@ getUIComponents(context: ExtensionContext): UIComponentDefinition[] {
28
28
 
29
29
  - **id** (string, required): Unique identifier for the component
30
30
  - **placement** (UIComponentPlacement, required): Where to render the component
31
+ - **name** (string, optional): Display name for the component (used as floating panel title)
31
32
  - **jsx** (string, required): JSX/TSX component code as a string
32
33
  - **loadData** (boolean, optional): Whether to load data via `getUIExtensionData()` (default: false)
33
34
  - **noDataCache** (boolean, optional): Always fetch fresh data on render (default: false)
@@ -140,6 +141,16 @@ UI components can be placed in various locations throughout the AiderDesk interf
140
141
  - *Layout*: Full page layout
141
142
  - *Note*: Replaces default welcome screen entirely
142
143
 
144
+ ### Floating Panels
145
+
146
+ - **floating**: Draggable, resizable floating panel rendered as a React portal
147
+ - *Use for*: Side-by-side tools that need to coexist with the chat (inspectors, previews, dashboards, scratchpads)
148
+ - *Layout*: Free-form floating panel — extension JSX is the panel content, panel chrome (title bar, resize handles) is automatic
149
+ - *Portal*: Rendered inside the project area via a portal host — has access to current task context
150
+ - *Title*: Set via the `name` property on `UIComponentDefinition` — used as the floating panel title
151
+ - *Behavior*: Draggable by title bar, resizable from edges, minimizable. Position and size are persisted in local storage
152
+ - *Note*: Extension JSX should only contain the inner content — never wrap in a panel component
153
+
143
154
  ## Component Props
144
155
 
145
156
  All UI components receive these props via the `data` prop passed by `string-to-react-component`.
@@ -208,6 +219,9 @@ All UI components receive these props via the `data` prop passed by `string-to-r
208
219
  // Extension action executor
209
220
  executeExtensionAction: (action: string, ...args: unknown[]) => Promise<unknown>,
210
221
 
222
+ // External libraries loaded via getUIComponentsLibraries()
223
+ libraries: Record<string, Record<string, unknown>>,
224
+
211
225
  // Data returned from getUIExtensionData() (if loadData: true)
212
226
  data?: unknown,
213
227
  }
@@ -427,6 +441,27 @@ The `icons` prop provides access to all react-icons libraries:
427
441
  }
428
442
  ```
429
443
 
444
+ ## Using External Libraries
445
+
446
+ The `libraries` prop provides access to third-party npm packages declared via `getUIComponentsLibraries()`. Each key in the returned Record becomes a property on `props.libraries`.
447
+
448
+ Libraries are loaded asynchronously — on first render, `props.libraries.<key>` will be `undefined`. Always check availability before use:
449
+
450
+ ```jsx
451
+ (props) => {
452
+ var chartLib = props.libraries.chart;
453
+
454
+ if (!chartLib) {
455
+ return <span className="text-text-secondary text-sm">Loading chart…</span>;
456
+ }
457
+
458
+ var LineChart = chartLib.LineChart;
459
+ return <LineChart data={props.data} />;
460
+ }
461
+ ```
462
+
463
+ For full documentation on declaring and using external libraries, see [external-libraries.md](external-libraries.md).
464
+
430
465
  ## Providing Data to Components
431
466
 
432
467
  When `loadData: true`, implement `getUIExtensionData()`: