@ai37/copilotkit-chat-helpers 0.1.0 → 0.2.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/README.md CHANGED
@@ -56,7 +56,12 @@ export function Providers({ children }) {
56
56
  - `createCollapsibleA2uiRenderer(base, options?)` — оборачивает renderer из
57
57
  `createA2UIMessageRenderer`: переопределяет только `render` (обёртка в
58
58
  `CollapsibleForm` по `message.id`), `activityType`/`content` наследуются.
59
- `options.title` заголовок свёрнутой формы (по умолчанию `"Форма"`).
59
+ Заголовок аккордеона берётся из данных агента: title первого компонента в
60
+ операциях A2UI (у FormCard/ChoiceCard обязателен по схеме каталога). Пока
61
+ операций нет (стрим) или title отсутствует — фолбэк `options.title`
62
+ (по умолчанию `"Форма"`).
63
+ - `extractA2uiTitle(operations)` — сам извлекатель заголовка из операций A2UI
64
+ v0.9 (`content.a2ui_operations`); `undefined`, если titled-компонента нет.
60
65
  - `FormAccordionProvider` / `useFormAccordion` — стейт аккордеона
61
66
  (`openId`/`register`/`toggle`): новая форма открывается, прежние сворачиваются;
62
67
  ручной toggle переживает перерендер.
@@ -1,8 +1,14 @@
1
1
  import type { ComponentType } from "react";
2
2
  type Options = {
3
- /** Заголовок свёрнутой формы. По умолчанию — "Форма". */
3
+ /** Фолбэк-заголовок, когда в операциях нет компонента с title. По умолчанию — "Форма". */
4
4
  title?: string;
5
5
  };
6
+ /**
7
+ * Заголовок из операций A2UI v0.9: title первого компонента updateComponents,
8
+ * у которого он непустая строка (пропы лежат плоско рядом с `component`).
9
+ * Незнакомая форма данных → undefined (фолбэк у вызывающего), не бросаем.
10
+ */
11
+ export declare function extractA2uiTitle(operations: unknown[] | undefined): string | undefined;
6
12
  export declare function createCollapsibleA2uiRenderer<T extends {
7
13
  render: ComponentType<any>;
8
14
  }>(base: T, options?: Options): T;
@@ -1 +1 @@
1
- {"version":3,"file":"createCollapsibleA2uiRenderer.d.ts","sourceRoot":"","sources":["../src/createCollapsibleA2uiRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAkB1C,KAAK,OAAO,GAAG;IACb,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAID,wBAAgB,6BAA6B,CAC3C,CAAC,SAAS;IAAE,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;CAAE,EACxC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,CAY/B"}
1
+ {"version":3,"file":"createCollapsibleA2uiRenderer.d.ts","sourceRoot":"","sources":["../src/createCollapsibleA2uiRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AA2B1C,KAAK,OAAO,GAAG;IACb,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAYtF;AAED,wBAAgB,6BAA6B,CAC3C,CAAC,SAAS;IAAE,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,CAAA;CAAE,EACxC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,CAiB/B"}
@@ -2,13 +2,36 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { CollapsibleForm } from "./CollapsibleForm";
4
4
  const A2UI_TITLE = "Форма";
5
+ /**
6
+ * Заголовок из операций A2UI v0.9: title первого компонента updateComponents,
7
+ * у которого он непустая строка (пропы лежат плоско рядом с `component`).
8
+ * Незнакомая форма данных → undefined (фолбэк у вызывающего), не бросаем.
9
+ */
10
+ export function extractA2uiTitle(operations) {
11
+ if (!Array.isArray(operations))
12
+ return undefined;
13
+ for (const op of operations) {
14
+ const components = op
15
+ ?.updateComponents?.components;
16
+ if (!Array.isArray(components))
17
+ continue;
18
+ for (const component of components) {
19
+ const title = component?.title;
20
+ if (typeof title === "string" && title.trim() !== "")
21
+ return title;
22
+ }
23
+ }
24
+ return undefined;
25
+ }
5
26
  export function createCollapsibleA2uiRenderer(base, options) {
6
- const title = options?.title ?? A2UI_TITLE;
27
+ const fallbackTitle = options?.title ?? A2UI_TITLE;
7
28
  // Сужение до минимального контракта: точный тип пропов знает только консюмер.
8
29
  const Base = base.render;
9
30
  return {
10
31
  ...base,
11
- render: (props) => (_jsx(CollapsibleForm, { id: props.message.id, title: title, children: _jsx(Base, { ...props }) })),
32
+ // Заголовок считаем на каждый рендер: content меняется по мере стрима
33
+ // сначала операций нет (фолбэк), потом приходит title от агента.
34
+ render: (props) => (_jsx(CollapsibleForm, { id: props.message.id, title: extractA2uiTitle(props.content?.a2ui_operations) ?? fallbackTitle, children: _jsx(Base, { ...props }) })),
12
35
  };
13
36
  }
14
37
  //# sourceMappingURL=createCollapsibleA2uiRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"createCollapsibleA2uiRenderer.js","sourceRoot":"","sources":["../src/createCollapsibleA2uiRenderer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAsBnD,MAAM,UAAU,GAAG,OAAO,CAAA;AAE1B,MAAM,UAAU,6BAA6B,CAE3C,IAAO,EAAE,OAAiB;IAC1B,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,UAAU,CAAA;IAC1C,8EAA8E;IAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,MAA2C,CAAA;IAC7D,OAAO;QACL,GAAG,IAAI;QACP,MAAM,EAAE,CAAC,KAAyB,EAAE,EAAE,CAAC,CACrC,KAAC,eAAe,IAAC,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,YACjD,KAAC,IAAI,OAAK,KAAK,GAAI,GACH,CACnB;KACG,CAAA;AACR,CAAC"}
1
+ {"version":3,"file":"createCollapsibleA2uiRenderer.js","sourceRoot":"","sources":["../src/createCollapsibleA2uiRenderer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAGZ,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AA+BnD,MAAM,UAAU,GAAG,OAAO,CAAA;AAE1B;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAiC;IAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;QAAE,OAAO,SAAS,CAAA;IAChD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAI,EAA+D;YACjF,EAAE,gBAAgB,EAAE,UAAU,CAAA;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,SAAQ;QACxC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,KAAK,GAAI,SAAwC,EAAE,KAAK,CAAA;YAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAA;QACpE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAE3C,IAAO,EAAE,OAAiB;IAC1B,MAAM,aAAa,GAAG,OAAO,EAAE,KAAK,IAAI,UAAU,CAAA;IAClD,8EAA8E;IAC9E,MAAM,IAAI,GAAG,IAAI,CAAC,MAA2C,CAAA;IAC7D,OAAO;QACL,GAAG,IAAI;QACP,wEAAwE;QACxE,iEAAiE;QACjE,MAAM,EAAE,CAAC,KAAyB,EAAE,EAAE,CAAC,CACrC,KAAC,eAAe,IACd,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,EACpB,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,aAAa,YAExE,KAAC,IAAI,OAAK,KAAK,GAAI,GACH,CACnB;KACG,CAAA;AACR,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export { FormAccordionProvider, useFormAccordion } from "./FormAccordionContext";
2
2
  export { CollapsibleForm } from "./CollapsibleForm";
3
- export { createCollapsibleA2uiRenderer } from "./createCollapsibleA2uiRenderer";
3
+ export { createCollapsibleA2uiRenderer, extractA2uiTitle, } from "./createCollapsibleA2uiRenderer";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,iCAAiC,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { FormAccordionProvider, useFormAccordion } from "./FormAccordionContext";
2
2
  export { CollapsibleForm } from "./CollapsibleForm";
3
- export { createCollapsibleA2uiRenderer } from "./createCollapsibleA2uiRenderer";
3
+ export { createCollapsibleA2uiRenderer, extractA2uiTitle, } from "./createCollapsibleA2uiRenderer";
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EACL,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,iCAAiC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai37/copilotkit-chat-helpers",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "CopilotKit v2 chat helpers: accordion wrapper for A2UI activity message renderers (one form open at a time).",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",