juneau 0.3.3 → 0.4.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 (35) hide show
  1. package/README.md +834 -789
  2. package/dist/adapters/dashboardAdapter.d.ts.map +1 -1
  3. package/dist/adapters/mockAdapter.d.ts.map +1 -1
  4. package/dist/components/AiChat/AiChat.d.ts +8 -1
  5. package/dist/components/AiChat/AiChat.d.ts.map +1 -1
  6. package/dist/components/AiMessageBubble/AiMessageBubble.d.ts +4 -1
  7. package/dist/components/AiMessageBubble/AiMessageBubble.d.ts.map +1 -1
  8. package/dist/components/AiMessageList/AiMessageList.d.ts +4 -1
  9. package/dist/components/AiMessageList/AiMessageList.d.ts.map +1 -1
  10. package/dist/components/AiSidebar/AiSidebar.d.ts +8 -1
  11. package/dist/components/AiSidebar/AiSidebar.d.ts.map +1 -1
  12. package/dist/components/parts/AiMessagePartRenderer.d.ts +11 -1
  13. package/dist/components/parts/AiMessagePartRenderer.d.ts.map +1 -1
  14. package/dist/core/types.d.ts +14 -4
  15. package/dist/core/types.d.ts.map +1 -1
  16. package/dist/index.cjs +28 -28
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +3 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2635 -2613
  21. package/dist/index.js.map +1 -1
  22. package/dist/server/createSkillSet.d.ts +5 -1
  23. package/dist/server/createSkillSet.d.ts.map +1 -1
  24. package/dist/server/index.cjs +6 -4
  25. package/dist/server/index.cjs.map +1 -1
  26. package/dist/server/index.d.ts +1 -1
  27. package/dist/server/index.d.ts.map +1 -1
  28. package/dist/server/index.js +107 -72
  29. package/dist/server/index.js.map +1 -1
  30. package/dist/server/types.d.ts +26 -6
  31. package/dist/server/types.d.ts.map +1 -1
  32. package/dist/server/withToolRecovery.d.ts +9 -3
  33. package/dist/server/withToolRecovery.d.ts.map +1 -1
  34. package/dist/style.css +1 -1
  35. package/package.json +1 -1
@@ -1,4 +1,19 @@
1
1
  import type { ZodType, z } from 'zod';
2
+ /**
3
+ * Helpers injected into a skill's execute fn as the second argument.
4
+ */
5
+ export interface SkillExecuteContext {
6
+ /**
7
+ * Emits a custom part wire event directly into the stream, alongside the
8
+ * automatic running/done/failed activities. Available synchronously at any
9
+ * point during execution — parts appear in the stream in emit order.
10
+ * The part is wrapped as { type: 'part', part } on the wire.
11
+ */
12
+ emit: (part: {
13
+ type: string;
14
+ [key: string]: unknown;
15
+ }) => void;
16
+ }
2
17
  /**
3
18
  * A single skill definition — description, zod input schema, i18n labels, and the execute fn.
4
19
  */
@@ -19,7 +34,7 @@ export interface SkillDefinition<TInput extends ZodType = ZodType> {
19
34
  en: string;
20
35
  };
21
36
  };
22
- execute: (input: z.infer<TInput>) => Promise<unknown>;
37
+ execute: (input: z.infer<TInput>, context: SkillExecuteContext) => Promise<unknown>;
23
38
  }
24
39
  /**
25
40
  * The object returned by createSkillSet.
@@ -57,14 +72,19 @@ export interface SkillSetOptions {
57
72
  export interface ToolRecoveryStreamResult {
58
73
  fullStream: AsyncIterable<unknown>;
59
74
  /**
60
- * ai-sdk v7: resolves after the stream is consumed to the response metadata,
61
- * including the full message history (tool calls + tool results).
75
+ * ai-sdk v7: resolves after the stream is consumed to the FULL message
76
+ * history user, assistant(tool-call), and tool(tool-result) turns.
77
+ * Preferred source for phase 3; Gemini rejects histories where a tool-call
78
+ * turn is not followed by its tool-result turn.
79
+ */
80
+ messages?: Promise<unknown[]>;
81
+ /**
82
+ * Fallback only — may resolve to an incomplete subset of the history
83
+ * (observed: missing tool-result turns). Used when `messages` is unavailable.
62
84
  */
63
85
  response?: Promise<{
64
- messages: unknown[];
86
+ messages?: unknown[];
65
87
  }>;
66
- /** Some ai-sdk versions expose the message history directly. */
67
- messages?: Promise<unknown[]>;
68
88
  }
69
89
  export interface ToolRecoveryOptions {
70
90
  phase1: () => ToolRecoveryStreamResult;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,OAAO,GAAG,OAAO;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,OAAO,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,IAAI,EAAK;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,MAAM,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;;OAGG;IACH,eAAe,IAAI,MAAM,EAAE,CAAC;IAE5B;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;IAC5C,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,wBAAwB,CAAC;IACvC,MAAM,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK;QAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3E;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK;QAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACzE,QAAQ,EAAE,QAAQ,CAAC;IACnB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,IAAI,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;CAChE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,MAAM,SAAS,OAAO,GAAG,OAAO;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE;QACN,OAAO,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,IAAI,EAAK;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QACpC,MAAM,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;KACrC,CAAC;IACF,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrF;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/B;;;OAGG;IACH,eAAe,IAAI,MAAM,EAAE,CAAC;IAE5B;;;OAGG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;;OAGG;IACH,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;QAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,wBAAwB,CAAC;IACvC,MAAM,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK;QAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3E;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK;QAAE,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IACzE,QAAQ,EAAE,QAAQ,CAAC;IACnB,4FAA4F;IAC5F,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
@@ -15,11 +15,17 @@ import type { ToolRecoveryOptions } from './types';
15
15
  * model wrote no text. Confirmed Gemini 2.5 Flash behaviour: the fullStream ends
16
16
  * with tool-call → tool-result → finish-step → finish and no text-delta ever
17
17
  * arrives — Gemini treats the tool call as its complete response. Phase 3 receives
18
- * the full phase 1 message history (including tool-call and tool-result turns,
19
- * resolved from the ai-sdk result's `response`/`messages` promise) so the model
20
- * can be called again without tools and forced to summarise the tool result.
18
+ * the full phase 1 message history including tool-call AND tool-result turns
19
+ * Gemini rejects histories where a tool-call turn is not immediately followed by
20
+ * a tool-result turn ("function call turn must come immediately after a user turn
21
+ * or after a function response turn"). The history is resolved from the consumed
22
+ * phase 1 result's `messages` promise (ai-sdk v7 — resolves to all turns after
23
+ * the stream is consumed), with `response.messages` as fallback.
21
24
  * If phase3 is not provided, falls back to emitting done (previous behaviour).
22
25
  *
26
+ * Errors thrown by phase 2 / phase 3 model calls are surfaced as wire error
27
+ * events — never swallowed into a silent done.
28
+ *
23
29
  * @returns AsyncIterable<string> of Juneau wire SSE strings (activities + text + done)
24
30
  */
25
31
  export declare function withToolRecovery(options: ToolRecoveryOptions): AsyncIterable<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"withToolRecovery.d.ts","sourceRoot":"","sources":["../../src/server/withToolRecovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAGnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAuB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa,CAAC,MAAM,CAAC,CAiF3F"}
1
+ {"version":3,"file":"withToolRecovery.d.ts","sourceRoot":"","sources":["../../src/server/withToolRecovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAWnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAuB,gBAAgB,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa,CAAC,MAAM,CAAC,CAwG3F"}
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- :root{--juneau-color-primary: #000000;--juneau-color-primary-dark: #252528;--juneau-color-primary-light: #ECECEC;--juneau-color-primary-border: #E8E8EC;--juneau-color-accent: #FF49A4;--juneau-color-accent-dark: #FF6BB3;--juneau-color-accent-light: #FFF0F7;--juneau-color-accent-border: #FFBDD9;--juneau-color-surface: #FFFFFF;--juneau-color-surface-raised: #F4F4F6;--juneau-color-surface-hover: #ECECEC;--juneau-color-border: #E8E8EC;--juneau-color-border-subtle: #ECECEC;--juneau-color-text-primary: #000000;--juneau-color-text-secondary: #474747;--juneau-color-text-muted: #474747;--juneau-color-text-faint: #9090A0;--juneau-color-text-inverse: #FFFFFF;--juneau-color-assistant-avatar: #FF49A4;--juneau-color-error-bg: #FFF0F7;--juneau-color-error-border: #E6244A;--juneau-color-error-text: #C41A3B;--juneau-color-success-bg: #F4FDE8;--juneau-color-success-text: #3F7528;--juneau-color-warning-bg: #FFF6E5;--juneau-color-warning-text: #B37400;--juneau-color-danger-bg: #FFF0F7;--juneau-color-danger-text: #C41A3B;--juneau-radius-sm: 6px;--juneau-radius-md: 8px;--juneau-radius-lg: 12px;--juneau-radius-full: 9999px;--juneau-font-size-xs: 11px;--juneau-font-size-sm: 12px;--juneau-font-size-base: 13px;--juneau-font-size-md: 14px;--juneau-font-size-lg: 15px;--juneau-font-size-xl: 16px;--juneau-font-size-2xl: 22px;--juneau-font-size-3xl: 24px;--juneau-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--juneau-transition-fast: .15s}._root_1etc2_1{display:contents;font-family:var(--juneau-font-family)}._wrapper_izvjy_1{overflow-x:auto;margin:8px 0;border-radius:var(--juneau-radius-md);border:1px solid var(--juneau-color-border)}._table_izvjy_15{width:100%;border-collapse:collapse;font-size:var(--juneau-font-size-base)}._th_izvjy_27{background-color:var(--juneau-color-surface-raised);padding:8px 12px;text-align:left;font-weight:600;color:var(--juneau-color-text-secondary);border-bottom:1px solid var(--juneau-color-border);white-space:nowrap}._tr_izvjy_47:nth-child(2n){background-color:var(--juneau-color-surface-raised)}._tr_izvjy_47:hover{background-color:var(--juneau-color-surface-hover)}._td_izvjy_63{padding:7px 12px;color:var(--juneau-color-text-primary);border-bottom:1px solid var(--juneau-color-border-subtle)}._card_qrvry_1{background:linear-gradient(135deg,var(--juneau-color-accent-light) 0%,var(--juneau-color-accent-border) 100%);border:1px solid var(--juneau-color-accent-border);border-radius:var(--juneau-radius-lg);padding:14px 16px;margin:8px 0}._header_qrvry_17{display:flex;align-items:center;gap:8px;margin-bottom:6px}._icon_qrvry_31{flex-shrink:0;width:16px;height:16px;color:var(--juneau-color-accent)}._title_qrvry_45{font-weight:600;font-size:var(--juneau-font-size-md);color:var(--juneau-color-accent-dark)}._description_qrvry_57{font-size:var(--juneau-font-size-base);color:var(--juneau-color-text-secondary);margin:0 0 12px;line-height:1.5}._actions_qrvry_71{display:flex;gap:8px}._confirm_qrvry_81{padding:7px 16px;background-color:var(--juneau-color-accent);color:var(--juneau-color-text-inverse);border:none;border-radius:var(--juneau-radius-sm);font-size:var(--juneau-font-size-base);font-weight:500;cursor:pointer;transition:background-color var(--juneau-transition-fast)}._confirm_qrvry_81:hover{background-color:var(--juneau-color-accent-dark)}._cancel_qrvry_113{padding:7px 16px;background-color:transparent;color:var(--juneau-color-text-muted);border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-sm);font-size:var(--juneau-font-size-base);font-weight:500;cursor:pointer;transition:background-color var(--juneau-transition-fast),color var(--juneau-transition-fast)}._cancel_qrvry_113:hover{background-color:var(--juneau-color-surface-hover);color:var(--juneau-color-text-secondary)}._activity_1661l_1{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;margin:4px 0;border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-md);background:var(--juneau-color-surface-raised);font-size:var(--juneau-font-size-sm)}._indicator_1661l_25{width:7px;height:7px;margin-top:5px;border-radius:var(--juneau-radius-full);background:var(--juneau-color-text-faint);flex-shrink:0;transition:background var(--juneau-transition-fast)}._activity_1661l_1[data-status=running] ._indicator_1661l_25{background:var(--juneau-color-accent);animation:_pulse_1661l_1 1.4s ease-in-out infinite}._activity_1661l_1[data-status=done] ._indicator_1661l_25{background:var(--juneau-color-success-text)}._activity_1661l_1[data-status=failed] ._indicator_1661l_25{background:var(--juneau-color-error-text)}._content_1661l_71{min-width:0}._title_1661l_79{font-weight:500;color:var(--juneau-color-text-secondary)}._description_1661l_89{margin-top:1px;color:var(--juneau-color-text-faint)}@keyframes _pulse_1661l_1{0%,to{opacity:1}50%{opacity:.35}}._markdown_97mdk_1{line-height:1.6;font-size:var(--juneau-font-size-md)}._markdown_97mdk_1 p{margin:0 0 .5em}._markdown_97mdk_1 p:last-child{margin-bottom:0}._markdown_97mdk_1 strong{font-weight:700}._markdown_97mdk_1 em{font-style:italic}._markdown_97mdk_1 code{font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,monospace;font-size:.9em;background:var(--juneau-color-surface-raised);border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-sm);padding:.1em .35em}._markdown_97mdk_1 pre{background:var(--juneau-color-surface-raised);border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-md);padding:10px 14px;overflow-x:auto;margin:.5em 0}._markdown_97mdk_1 pre code{background:none;border:none;padding:0;font-size:var(--juneau-font-size-sm)}._markdown_97mdk_1 ul,._markdown_97mdk_1 ol{margin:.25em 0 .5em;padding-left:1.4em}._markdown_97mdk_1 li{margin-bottom:.2em}._markdown_97mdk_1 blockquote{margin:.5em 0;padding-left:.75em;border-left:3px solid var(--juneau-color-border);color:var(--juneau-color-text-secondary)}._markdown_97mdk_1 a{color:var(--juneau-color-accent);text-decoration:underline}._markdown_97mdk_1 h1,._markdown_97mdk_1 h2,._markdown_97mdk_1 h3,._markdown_97mdk_1 h4{margin:.6em 0 .3em;font-weight:700;line-height:1.3}._markdown_97mdk_1 h1{font-size:var(--juneau-font-size-xl)}._markdown_97mdk_1 h2{font-size:var(--juneau-font-size-lg)}._markdown_97mdk_1 h3,._markdown_97mdk_1 h4{font-size:var(--juneau-font-size-md)}._errorText_97mdk_165{display:inline-flex;align-items:center;gap:5px;color:var(--juneau-color-error-text);font-size:var(--juneau-font-size-base)}._errorIcon_97mdk_181{width:14px;height:14px;flex-shrink:0}._wrapper_1jkxo_1{display:flex;align-items:flex-start;gap:8px;padding:4px 0}._user_1jkxo_15{flex-direction:row-reverse}._assistant_1jkxo_23{flex-direction:row}._avatar_1jkxo_31{flex-shrink:0;width:30px;height:30px;border-radius:var(--juneau-radius-full);font-size:var(--juneau-font-size-xs);font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:2px}._user_1jkxo_15 ._avatar_1jkxo_31{background-color:var(--juneau-color-primary);color:var(--juneau-color-text-inverse)}._assistant_1jkxo_23 ._avatar_1jkxo_31{background-color:var(--juneau-color-assistant-avatar);color:var(--juneau-color-text-inverse)}._bubble_1jkxo_77{max-width:85%;padding:10px 14px;border-radius:var(--juneau-radius-lg);font-size:var(--juneau-font-size-md);line-height:1.6;word-break:break-word}._user_1jkxo_15 ._bubble_1jkxo_77{background-color:var(--juneau-color-primary);color:var(--juneau-color-text-inverse);border-bottom-right-radius:3px}._assistant_1jkxo_23 ._bubble_1jkxo_77{background-color:var(--juneau-color-surface-raised);color:var(--juneau-color-text-primary);border:1px solid var(--juneau-color-border);border-bottom-left-radius:3px}._empty_1jkxo_121{display:inline-block;width:4px;height:16px}._wrapper_1oco7_1{display:flex;align-items:center;gap:4px;padding:10px 14px}._dot_1oco7_15{width:7px;height:7px;border-radius:var(--juneau-radius-full);background-color:var(--juneau-color-text-faint);animation:_bounce_1oco7_1 1.2s infinite ease-in-out}._dot_1oco7_15:nth-child(2){animation-delay:.2s}._dot_1oco7_15:nth-child(3){animation-delay:.4s}._connectingLabel_1oco7_37{margin-left:4px;font-size:var(--juneau-font-size-sm);color:var(--juneau-color-text-faint)}@keyframes _bounce_1oco7_1{0%,80%,to{transform:translateY(0);opacity:.5}40%{transform:translateY(-5px);opacity:1}}._list_ixto8_1{flex:1;overflow-y:auto;padding:16px 12px;display:flex;flex-direction:column;gap:12px;scroll-behavior:smooth}._empty_ixto8_21{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--juneau-color-text-faint);font-size:var(--juneau-font-size-md);gap:6px;padding:40px 20px}._hint_ixto8_47{font-size:var(--juneau-font-size-sm);color:var(--juneau-color-text-faint)}._typing_ixto8_61{display:flex;align-items:flex-start;gap:8px;padding:2px 0}._wrapper_ehrkb_1{display:flex;flex-direction:column;border-top:1px solid var(--juneau-color-border);background-color:var(--juneau-color-surface);flex-shrink:0}._textarea_ehrkb_21{resize:none;border:none;outline:none;padding:12px 14px 6px;font-size:var(--juneau-font-size-md);font-family:inherit;line-height:1.6;color:var(--juneau-color-text-primary);background-color:var(--juneau-color-surface);width:100%}._textarea_ehrkb_21::placeholder{color:var(--juneau-color-text-faint)}._textarea_ehrkb_21:disabled{opacity:.6;cursor:not-allowed}._toolbar_ehrkb_69{display:flex;align-items:center;justify-content:space-between;padding:6px 10px 10px;gap:8px}._actions_ehrkb_89{display:flex;align-items:center;gap:2px;flex-wrap:wrap}._actionBtn_ehrkb_103{display:flex;align-items:center;gap:5px;padding:5px 8px;border:none;border-radius:var(--juneau-radius-sm);background:transparent;color:var(--juneau-color-text-muted);font-size:var(--juneau-font-size-sm);font-family:inherit;cursor:pointer;white-space:nowrap;transition:background-color var(--juneau-transition-fast),color var(--juneau-transition-fast)}._actionBtn_ehrkb_103 svg{font-size:11px;opacity:.8}._actionBtn_ehrkb_103:hover:not(:disabled){background:var(--juneau-color-surface-raised);color:var(--juneau-color-text-primary)}._actionBtn_ehrkb_103:disabled{opacity:.4;cursor:not-allowed}._sendBtn_ehrkb_169{display:flex;align-items:center;gap:7px;padding:7px 14px;border:none;border-radius:var(--juneau-radius-md);background-color:var(--juneau-color-primary);color:var(--juneau-color-text-inverse);font-size:var(--juneau-font-size-base);font-family:inherit;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color var(--juneau-transition-fast),opacity var(--juneau-transition-fast)}._sendBtn_ehrkb_169 svg{font-size:12px}._sendBtn_ehrkb_169:hover:not(:disabled){background-color:var(--juneau-color-primary-dark)}._sendBtn_ehrkb_169:disabled{opacity:.4;cursor:not-allowed}._spinnerIcon_ehrkb_231{width:14px;height:14px;animation:_spin_ehrkb_231 .8s linear infinite}@keyframes _spin_ehrkb_231{to{transform:rotate(360deg)}}._stopBtn_ehrkb_251{display:flex;align-items:center;gap:7px;padding:7px 14px;border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-md);background-color:var(--juneau-color-surface);color:var(--juneau-color-text-secondary);font-size:var(--juneau-font-size-base);font-family:inherit;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color var(--juneau-transition-fast),color var(--juneau-transition-fast)}._stopBtn_ehrkb_251:hover{background-color:var(--juneau-color-surface-raised);color:var(--juneau-color-text-primary)}._stopIcon_ehrkb_297{width:14px;height:14px}._wrapper_1e3w5_1{display:flex;align-items:center;gap:8px;padding:10px 14px;background-color:var(--juneau-color-error-bg);border:1px solid var(--juneau-color-error-border);border-radius:var(--juneau-radius-md);margin:4px 12px;font-size:var(--juneau-font-size-base);color:var(--juneau-color-error-text)}._icon_1e3w5_27{flex-shrink:0;width:16px;height:16px}._message_1e3w5_39{flex:1}._dismiss_1e3w5_47{display:flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;color:var(--juneau-color-error-text);padding:0 2px;opacity:.7;transition:opacity var(--juneau-transition-fast)}._dismiss_1e3w5_47 svg{width:14px;height:14px}._dismiss_1e3w5_47:hover{opacity:1}._chat_13051_1{display:flex;flex-direction:column;height:100%;overflow:hidden}._header_1saak_1{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;border-bottom:1px solid var(--juneau-color-border);background:var(--juneau-color-primary);color:var(--juneau-color-text-inverse);flex-shrink:0}._left_1saak_23{display:flex;align-items:center;gap:8px}._icon_1saak_35{font-size:14px;opacity:.9}._title_1saak_45{font-size:var(--juneau-font-size-base);font-weight:600;letter-spacing:.02em}._resetBtn_1saak_57{background:transparent;border:none;border-radius:var(--juneau-radius-sm);color:var(--juneau-color-text-inverse);width:26px;height:26px;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.7;transition:background-color var(--juneau-transition-fast),opacity var(--juneau-transition-fast)}._resetBtn_1saak_57:hover{background:#ffffff26;opacity:1}._actions_1saak_99{display:flex;align-items:center;gap:2px}._sidebar_u9ybt_1{position:fixed;bottom:0;right:0;display:flex;flex-direction:column;width:420px;background-color:var(--juneau-color-surface);border-left:1px solid var(--juneau-color-border);border-top:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-lg) var(--juneau-radius-lg) 0 0;box-shadow:-4px 0 24px #00000014;overflow:hidden;z-index:200;transition:height .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1),box-shadow .25s ease}._minimized_u9ybt_39{height:auto!important;width:280px;box-shadow:0 -2px 16px #0000001a}
1
+ :root{--juneau-color-primary: #000000;--juneau-color-primary-dark: #252528;--juneau-color-primary-light: #ECECEC;--juneau-color-primary-border: #E8E8EC;--juneau-color-accent: #FF49A4;--juneau-color-accent-dark: #FF6BB3;--juneau-color-accent-light: #FFF0F7;--juneau-color-accent-border: #FFBDD9;--juneau-color-surface: #FFFFFF;--juneau-color-surface-raised: #F4F4F6;--juneau-color-surface-hover: #ECECEC;--juneau-color-border: #E8E8EC;--juneau-color-border-subtle: #ECECEC;--juneau-color-text-primary: #000000;--juneau-color-text-secondary: #474747;--juneau-color-text-muted: #474747;--juneau-color-text-faint: #9090A0;--juneau-color-text-inverse: #FFFFFF;--juneau-color-assistant-avatar: #FF49A4;--juneau-color-error-bg: #FFF0F7;--juneau-color-error-border: #E6244A;--juneau-color-error-text: #C41A3B;--juneau-color-success-bg: #F4FDE8;--juneau-color-success-text: #3F7528;--juneau-color-warning-bg: #FFF6E5;--juneau-color-warning-text: #B37400;--juneau-color-danger-bg: #FFF0F7;--juneau-color-danger-text: #C41A3B;--juneau-radius-sm: 6px;--juneau-radius-md: 8px;--juneau-radius-lg: 12px;--juneau-radius-full: 9999px;--juneau-font-size-xs: 11px;--juneau-font-size-sm: 12px;--juneau-font-size-base: 13px;--juneau-font-size-md: 14px;--juneau-font-size-lg: 15px;--juneau-font-size-xl: 16px;--juneau-font-size-2xl: 22px;--juneau-font-size-3xl: 24px;--juneau-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--juneau-transition-fast: .15s}._root_1etc2_1{display:contents;font-family:var(--juneau-font-family)}._wrapper_izvjy_1{overflow-x:auto;margin:8px 0;border-radius:var(--juneau-radius-md);border:1px solid var(--juneau-color-border)}._table_izvjy_15{width:100%;border-collapse:collapse;font-size:var(--juneau-font-size-base)}._th_izvjy_27{background-color:var(--juneau-color-surface-raised);padding:8px 12px;text-align:left;font-weight:600;color:var(--juneau-color-text-secondary);border-bottom:1px solid var(--juneau-color-border);white-space:nowrap}._tr_izvjy_47:nth-child(2n){background-color:var(--juneau-color-surface-raised)}._tr_izvjy_47:hover{background-color:var(--juneau-color-surface-hover)}._td_izvjy_63{padding:7px 12px;color:var(--juneau-color-text-primary);border-bottom:1px solid var(--juneau-color-border-subtle)}._card_qrvry_1{background:linear-gradient(135deg,var(--juneau-color-accent-light) 0%,var(--juneau-color-accent-border) 100%);border:1px solid var(--juneau-color-accent-border);border-radius:var(--juneau-radius-lg);padding:14px 16px;margin:8px 0}._header_qrvry_17{display:flex;align-items:center;gap:8px;margin-bottom:6px}._icon_qrvry_31{flex-shrink:0;width:16px;height:16px;color:var(--juneau-color-accent)}._title_qrvry_45{font-weight:600;font-size:var(--juneau-font-size-md);color:var(--juneau-color-accent-dark)}._description_qrvry_57{font-size:var(--juneau-font-size-base);color:var(--juneau-color-text-secondary);margin:0 0 12px;line-height:1.5}._actions_qrvry_71{display:flex;gap:8px}._confirm_qrvry_81{padding:7px 16px;background-color:var(--juneau-color-accent);color:var(--juneau-color-text-inverse);border:none;border-radius:var(--juneau-radius-sm);font-size:var(--juneau-font-size-base);font-weight:500;cursor:pointer;transition:background-color var(--juneau-transition-fast)}._confirm_qrvry_81:hover{background-color:var(--juneau-color-accent-dark)}._cancel_qrvry_113{padding:7px 16px;background-color:transparent;color:var(--juneau-color-text-muted);border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-sm);font-size:var(--juneau-font-size-base);font-weight:500;cursor:pointer;transition:background-color var(--juneau-transition-fast),color var(--juneau-transition-fast)}._cancel_qrvry_113:hover{background-color:var(--juneau-color-surface-hover);color:var(--juneau-color-text-secondary)}._activity_1661l_1{display:flex;align-items:flex-start;gap:8px;padding:7px 10px;margin:4px 0;border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-md);background:var(--juneau-color-surface-raised);font-size:var(--juneau-font-size-sm)}._indicator_1661l_25{width:7px;height:7px;margin-top:5px;border-radius:var(--juneau-radius-full);background:var(--juneau-color-text-faint);flex-shrink:0;transition:background var(--juneau-transition-fast)}._activity_1661l_1[data-status=running] ._indicator_1661l_25{background:var(--juneau-color-accent);animation:_pulse_1661l_1 1.4s ease-in-out infinite}._activity_1661l_1[data-status=done] ._indicator_1661l_25{background:var(--juneau-color-success-text)}._activity_1661l_1[data-status=failed] ._indicator_1661l_25{background:var(--juneau-color-error-text)}._content_1661l_71{min-width:0}._title_1661l_79{font-weight:500;color:var(--juneau-color-text-secondary)}._description_1661l_89{margin-top:1px;color:var(--juneau-color-text-faint)}@keyframes _pulse_1661l_1{0%,to{opacity:1}50%{opacity:.35}}._markdown_sznoh_1{line-height:1.6;font-size:var(--juneau-font-size-md)}._markdown_sznoh_1 p{margin:0 0 .5em}._markdown_sznoh_1 p:last-child{margin-bottom:0}._markdown_sznoh_1 strong{font-weight:700}._markdown_sznoh_1 em{font-style:italic}._markdown_sznoh_1 code{font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,monospace;font-size:.9em;background:var(--juneau-color-surface-raised);border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-sm);padding:.1em .35em}._markdown_sznoh_1 pre{background:var(--juneau-color-surface-raised);border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-md);padding:10px 14px;overflow-x:auto;margin:.5em 0}._markdown_sznoh_1 pre code{background:none;border:none;padding:0;font-size:var(--juneau-font-size-sm)}._markdown_sznoh_1 ul,._markdown_sznoh_1 ol{margin:.25em 0 .5em;padding-left:1.4em}._markdown_sznoh_1 li{margin-bottom:.2em}._markdown_sznoh_1 blockquote{margin:.5em 0;padding-left:.75em;border-left:3px solid var(--juneau-color-border);color:var(--juneau-color-text-secondary)}._markdown_sznoh_1 a{color:var(--juneau-color-accent);text-decoration:underline}._markdown_sznoh_1 h1,._markdown_sznoh_1 h2,._markdown_sznoh_1 h3,._markdown_sznoh_1 h4{margin:.6em 0 .3em;font-weight:700;line-height:1.3}._markdown_sznoh_1 h1{font-size:var(--juneau-font-size-xl)}._markdown_sznoh_1 h2{font-size:var(--juneau-font-size-lg)}._markdown_sznoh_1 h3,._markdown_sznoh_1 h4{font-size:var(--juneau-font-size-md)}._unknownPart_sznoh_167{border:1px dashed var(--juneau-color-warning-text);background:var(--juneau-color-warning-bg);color:var(--juneau-color-warning-text);border-radius:var(--juneau-radius-sm);padding:6px 10px;font-size:var(--juneau-font-size-sm)}._unknownPart_sznoh_167 code{font-family:ui-monospace,Cascadia Code,Source Code Pro,Menlo,monospace;font-size:.9em}._errorText_sznoh_195{display:inline-flex;align-items:center;gap:5px;color:var(--juneau-color-error-text);font-size:var(--juneau-font-size-base)}._errorIcon_sznoh_211{width:14px;height:14px;flex-shrink:0}._wrapper_1jkxo_1{display:flex;align-items:flex-start;gap:8px;padding:4px 0}._user_1jkxo_15{flex-direction:row-reverse}._assistant_1jkxo_23{flex-direction:row}._avatar_1jkxo_31{flex-shrink:0;width:30px;height:30px;border-radius:var(--juneau-radius-full);font-size:var(--juneau-font-size-xs);font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:2px}._user_1jkxo_15 ._avatar_1jkxo_31{background-color:var(--juneau-color-primary);color:var(--juneau-color-text-inverse)}._assistant_1jkxo_23 ._avatar_1jkxo_31{background-color:var(--juneau-color-assistant-avatar);color:var(--juneau-color-text-inverse)}._bubble_1jkxo_77{max-width:85%;padding:10px 14px;border-radius:var(--juneau-radius-lg);font-size:var(--juneau-font-size-md);line-height:1.6;word-break:break-word}._user_1jkxo_15 ._bubble_1jkxo_77{background-color:var(--juneau-color-primary);color:var(--juneau-color-text-inverse);border-bottom-right-radius:3px}._assistant_1jkxo_23 ._bubble_1jkxo_77{background-color:var(--juneau-color-surface-raised);color:var(--juneau-color-text-primary);border:1px solid var(--juneau-color-border);border-bottom-left-radius:3px}._empty_1jkxo_121{display:inline-block;width:4px;height:16px}._wrapper_1oco7_1{display:flex;align-items:center;gap:4px;padding:10px 14px}._dot_1oco7_15{width:7px;height:7px;border-radius:var(--juneau-radius-full);background-color:var(--juneau-color-text-faint);animation:_bounce_1oco7_1 1.2s infinite ease-in-out}._dot_1oco7_15:nth-child(2){animation-delay:.2s}._dot_1oco7_15:nth-child(3){animation-delay:.4s}._connectingLabel_1oco7_37{margin-left:4px;font-size:var(--juneau-font-size-sm);color:var(--juneau-color-text-faint)}@keyframes _bounce_1oco7_1{0%,80%,to{transform:translateY(0);opacity:.5}40%{transform:translateY(-5px);opacity:1}}._list_ixto8_1{flex:1;overflow-y:auto;padding:16px 12px;display:flex;flex-direction:column;gap:12px;scroll-behavior:smooth}._empty_ixto8_21{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;color:var(--juneau-color-text-faint);font-size:var(--juneau-font-size-md);gap:6px;padding:40px 20px}._hint_ixto8_47{font-size:var(--juneau-font-size-sm);color:var(--juneau-color-text-faint)}._typing_ixto8_61{display:flex;align-items:flex-start;gap:8px;padding:2px 0}._wrapper_ehrkb_1{display:flex;flex-direction:column;border-top:1px solid var(--juneau-color-border);background-color:var(--juneau-color-surface);flex-shrink:0}._textarea_ehrkb_21{resize:none;border:none;outline:none;padding:12px 14px 6px;font-size:var(--juneau-font-size-md);font-family:inherit;line-height:1.6;color:var(--juneau-color-text-primary);background-color:var(--juneau-color-surface);width:100%}._textarea_ehrkb_21::placeholder{color:var(--juneau-color-text-faint)}._textarea_ehrkb_21:disabled{opacity:.6;cursor:not-allowed}._toolbar_ehrkb_69{display:flex;align-items:center;justify-content:space-between;padding:6px 10px 10px;gap:8px}._actions_ehrkb_89{display:flex;align-items:center;gap:2px;flex-wrap:wrap}._actionBtn_ehrkb_103{display:flex;align-items:center;gap:5px;padding:5px 8px;border:none;border-radius:var(--juneau-radius-sm);background:transparent;color:var(--juneau-color-text-muted);font-size:var(--juneau-font-size-sm);font-family:inherit;cursor:pointer;white-space:nowrap;transition:background-color var(--juneau-transition-fast),color var(--juneau-transition-fast)}._actionBtn_ehrkb_103 svg{font-size:11px;opacity:.8}._actionBtn_ehrkb_103:hover:not(:disabled){background:var(--juneau-color-surface-raised);color:var(--juneau-color-text-primary)}._actionBtn_ehrkb_103:disabled{opacity:.4;cursor:not-allowed}._sendBtn_ehrkb_169{display:flex;align-items:center;gap:7px;padding:7px 14px;border:none;border-radius:var(--juneau-radius-md);background-color:var(--juneau-color-primary);color:var(--juneau-color-text-inverse);font-size:var(--juneau-font-size-base);font-family:inherit;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color var(--juneau-transition-fast),opacity var(--juneau-transition-fast)}._sendBtn_ehrkb_169 svg{font-size:12px}._sendBtn_ehrkb_169:hover:not(:disabled){background-color:var(--juneau-color-primary-dark)}._sendBtn_ehrkb_169:disabled{opacity:.4;cursor:not-allowed}._spinnerIcon_ehrkb_231{width:14px;height:14px;animation:_spin_ehrkb_231 .8s linear infinite}@keyframes _spin_ehrkb_231{to{transform:rotate(360deg)}}._stopBtn_ehrkb_251{display:flex;align-items:center;gap:7px;padding:7px 14px;border:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-md);background-color:var(--juneau-color-surface);color:var(--juneau-color-text-secondary);font-size:var(--juneau-font-size-base);font-family:inherit;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background-color var(--juneau-transition-fast),color var(--juneau-transition-fast)}._stopBtn_ehrkb_251:hover{background-color:var(--juneau-color-surface-raised);color:var(--juneau-color-text-primary)}._stopIcon_ehrkb_297{width:14px;height:14px}._wrapper_1e3w5_1{display:flex;align-items:center;gap:8px;padding:10px 14px;background-color:var(--juneau-color-error-bg);border:1px solid var(--juneau-color-error-border);border-radius:var(--juneau-radius-md);margin:4px 12px;font-size:var(--juneau-font-size-base);color:var(--juneau-color-error-text)}._icon_1e3w5_27{flex-shrink:0;width:16px;height:16px}._message_1e3w5_39{flex:1}._dismiss_1e3w5_47{display:flex;align-items:center;justify-content:center;background:none;border:none;cursor:pointer;color:var(--juneau-color-error-text);padding:0 2px;opacity:.7;transition:opacity var(--juneau-transition-fast)}._dismiss_1e3w5_47 svg{width:14px;height:14px}._dismiss_1e3w5_47:hover{opacity:1}._chat_13051_1{display:flex;flex-direction:column;height:100%;overflow:hidden}._header_1saak_1{display:flex;align-items:center;justify-content:space-between;padding:8px 14px;border-bottom:1px solid var(--juneau-color-border);background:var(--juneau-color-primary);color:var(--juneau-color-text-inverse);flex-shrink:0}._left_1saak_23{display:flex;align-items:center;gap:8px}._icon_1saak_35{font-size:14px;opacity:.9}._title_1saak_45{font-size:var(--juneau-font-size-base);font-weight:600;letter-spacing:.02em}._resetBtn_1saak_57{background:transparent;border:none;border-radius:var(--juneau-radius-sm);color:var(--juneau-color-text-inverse);width:26px;height:26px;font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;opacity:.7;transition:background-color var(--juneau-transition-fast),opacity var(--juneau-transition-fast)}._resetBtn_1saak_57:hover{background:#ffffff26;opacity:1}._actions_1saak_99{display:flex;align-items:center;gap:2px}._sidebar_u9ybt_1{position:fixed;bottom:0;right:0;display:flex;flex-direction:column;width:420px;background-color:var(--juneau-color-surface);border-left:1px solid var(--juneau-color-border);border-top:1px solid var(--juneau-color-border);border-radius:var(--juneau-radius-lg) var(--juneau-radius-lg) 0 0;box-shadow:-4px 0 24px #00000014;overflow:hidden;z-index:200;transition:height .25s cubic-bezier(.4,0,.2,1),width .25s cubic-bezier(.4,0,.2,1),box-shadow .25s ease}._minimized_u9ybt_39{height:auto!important;width:280px;box-shadow:0 -2px 16px #0000001a}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "juneau",
3
- "version": "0.3.3",
3
+ "version": "0.4.0",
4
4
  "description": "Open-source React/TypeScript library for AI chat UI components",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",