@4djs/assistant 0.1.1 → 0.1.2

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 (45) hide show
  1. package/README.md +34 -1
  2. package/dist/core/create-assistant-store.d.ts +1 -0
  3. package/dist/core/create-assistant-store.d.ts.map +1 -1
  4. package/dist/core/index.d.ts +8 -2
  5. package/dist/core/index.d.ts.map +1 -1
  6. package/dist/core/index.js +1968 -807
  7. package/dist/core/interactive-tools/gate.d.ts +14 -0
  8. package/dist/core/interactive-tools/gate.d.ts.map +1 -0
  9. package/dist/core/interactive-tools/index.d.ts +1 -0
  10. package/dist/core/interactive-tools/index.d.ts.map +1 -1
  11. package/dist/core/llm-chat.d.ts.map +1 -1
  12. package/dist/core/llm-provider.d.ts.map +1 -1
  13. package/dist/core/markdown-utils.d.ts +1 -2
  14. package/dist/core/markdown-utils.d.ts.map +1 -1
  15. package/dist/core/system-prompt.d.ts +3 -0
  16. package/dist/core/system-prompt.d.ts.map +1 -0
  17. package/dist/core/tool-names.d.ts +5 -0
  18. package/dist/core/tool-names.d.ts.map +1 -0
  19. package/dist/core/tool-registry.d.ts +28 -0
  20. package/dist/core/tool-registry.d.ts.map +1 -0
  21. package/dist/core/types.d.ts +5 -2
  22. package/dist/core/types.d.ts.map +1 -1
  23. package/dist/index.js +521 -4007
  24. package/dist/react/Assistant.d.ts.map +1 -1
  25. package/dist/react/components/HighlightedJsonCode.d.ts.map +1 -1
  26. package/dist/react/components/MarkdownContent.d.ts.map +1 -1
  27. package/dist/react/components/chat/ChatActivity.d.ts.map +1 -1
  28. package/dist/react/components/highlighted-code.d.ts.map +1 -1
  29. package/dist/react/context.d.ts +2 -2
  30. package/dist/react/context.d.ts.map +1 -1
  31. package/dist/react/hooks/use-composer-commands.d.ts +1 -1
  32. package/dist/react/hooks/use-composer-commands.d.ts.map +1 -1
  33. package/dist/react/hooks/use-suggested-prompts.d.ts +1 -1
  34. package/dist/react/hooks/use-suggested-prompts.d.ts.map +1 -1
  35. package/dist/react/index.d.ts +1 -1
  36. package/dist/react/index.d.ts.map +1 -1
  37. package/dist/react/types.d.ts +3 -2
  38. package/dist/react/types.d.ts.map +1 -1
  39. package/dist/styles.css +80 -0
  40. package/dist/tools/datastore.d.ts +28 -0
  41. package/dist/tools/datastore.d.ts.map +1 -0
  42. package/dist/tools/index.d.ts +4 -0
  43. package/dist/tools/index.d.ts.map +1 -0
  44. package/dist/tools/index.js +249 -0
  45. package/package.json +11 -6
@@ -1 +1 @@
1
- {"version":3,"file":"Assistant.d.ts","sourceRoot":"","sources":["../../src/react/Assistant.tsx"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAmBf,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAoTlE,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAM9C;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,GAAG;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAQA"}
1
+ {"version":3,"file":"Assistant.d.ts","sourceRoot":"","sources":["../../src/react/Assistant.tsx"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAiBf,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAoUlE,iEAAiE;AACjE,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,+BAM9C;AAED,0DAA0D;AAC1D,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,GAAG;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAQA"}
@@ -1 +1 @@
1
- {"version":3,"file":"HighlightedJsonCode.d.ts","sourceRoot":"","sources":["../../../src/react/components/HighlightedJsonCode.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAKtD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,wBAAwB,CAAC,MAAM,CAAC,+BAWnC"}
1
+ {"version":3,"file":"HighlightedJsonCode.d.ts","sourceRoot":"","sources":["../../../src/react/components/HighlightedJsonCode.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,OAAO,CAAC;AAItD,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,wBAAwB,CAAC,MAAM,CAAC,+BAWnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownContent.d.ts","sourceRoot":"","sources":["../../../src/react/components/MarkdownContent.tsx"],"names":[],"mappings":"AAYA,OAAO,0BAA0B,CAAC;AAElC,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA4CD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,SAAc,EACd,MAAc,EACd,SAAiB,GAClB,EAAE,oBAAoB,+BA6BtB"}
1
+ {"version":3,"file":"MarkdownContent.d.ts","sourceRoot":"","sources":["../../../src/react/components/MarkdownContent.tsx"],"names":[],"mappings":"AAWA,OAAO,0BAA0B,CAAC;AAElC,UAAU,oBAAoB;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAiDD,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,SAAc,EACd,MAAc,EACd,SAAiB,GAClB,EAAE,oBAAoB,+BA6BtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChatActivity.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/ChatActivity.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EAKtB,MAAM,gCAAgC,CAAC;AAOxC,UAAU,iBAAiB;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAmOD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,iBAAiB,sCA+DnE"}
1
+ {"version":3,"file":"ChatActivity.d.ts","sourceRoot":"","sources":["../../../../src/react/components/chat/ChatActivity.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,gBAAgB,EAKtB,MAAM,gCAAgC,CAAC;AAOxC,UAAU,iBAAiB;IACzB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAyOD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,iBAAiB,sCAgEnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"highlighted-code.d.ts","sourceRoot":"","sources":["../../../src/react/components/highlighted-code.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAyCf,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,SAAS,EAAE,CAgCb;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,IAAI,EACJ,QAAiB,EACjB,GAAG,KAAK,EACT,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GAAG,wBAAwB,CAAC,MAAM,CAAC,+BAcnC"}
1
+ {"version":3,"file":"highlighted-code.d.ts","sourceRoot":"","sources":["../../../src/react/components/highlighted-code.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAwCf,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,SAAS,EAAE,CAgCb;AAED,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,IAAI,EACJ,QAAiB,EACjB,GAAG,KAAK,EACT,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GAAG,wBAAwB,CAAC,MAAM,CAAC,+BAcnC"}
@@ -1,11 +1,11 @@
1
+ import { createAssistantStore } from "@4djs/assistant/core";
1
2
  import { type ReactNode } from "react";
2
- import { createAssistantStore } from "../core/create-assistant-store.js";
3
3
  import { type AssistantLabels } from "../labels.js";
4
4
  import type { AssistantContextValue, AssistantProviderProps } from "./types.js";
5
5
  export declare function AssistantProvider({ config, children, }: AssistantProviderProps): import("react").JSX.Element;
6
6
  export declare function useAssistantContext(): AssistantContextValue;
7
7
  export declare function useAssistant<T>(selector: (state: ReturnType<ReturnType<typeof createAssistantStore>["getState"]>) => T): T;
8
- export declare function useAssistantActions(): import("../core/create-assistant-store.js").AssistantState;
8
+ export declare function useAssistantActions(): import("@4djs/assistant/core").AssistantState;
9
9
  export declare function useAssistantLabels(): AssistantLabels;
10
10
  export declare function AssistantBootstrap({ children }: {
11
11
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/react/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAiBhF,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,GACT,EAAE,sBAAsB,+BAoBxB;AAED,wBAAgB,mBAAmB,IAAI,qBAAqB,CAQ3D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,CACR,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,UAAU,CAAC,CAAC,KACnE,CAAC,GACL,CAAC,CAGH;AAED,wBAAgB,mBAAmB,+DAGlC;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD;AAED,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,aAUvE"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/react/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAA6B,MAAM,sBAAsB,CAAC;AACvF,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AACf,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AA6BhF,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,QAAQ,GACT,EAAE,sBAAsB,+BAqBxB;AAED,wBAAgB,mBAAmB,IAAI,qBAAqB,CAQ3D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,CACR,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,UAAU,CAAC,CAAC,KACnE,CAAC,GACL,CAAC,CAGH;AAED,wBAAgB,mBAAmB,kDAGlC;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAGpD;AAED,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,aAUvE"}
@@ -1,5 +1,5 @@
1
+ import { type ChatCommandSuggestion, type ChatCommandSurface } from "@4djs/assistant/core";
1
2
  import { type KeyboardEvent } from "react";
2
- import { type ChatCommandSuggestion, type ChatCommandSurface } from "../../core/chat-commands.js";
3
3
  import type { AssistantLabels } from "../../labels.js";
4
4
  type UseComposerCommandsOptions = {
5
5
  value: string;
@@ -1 +1 @@
1
- {"version":3,"file":"use-composer-commands.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/use-composer-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAgC,MAAM,OAAO,CAAC;AACzE,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EAKxB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,QAAgB,EAChB,MAAM,GACP,EAAE,0BAA0B;;;;;8BASM,MAAM;+BAWL,qBAAqB;6BAInB,OAAO,CAAC,OAAO,CAAC;2BAgBtB,aAAa,CAAC,mBAAmB,CAAC,KAAG,OAAO;EAiE3E"}
1
+ {"version":3,"file":"use-composer-commands.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/use-composer-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EAKxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,aAAa,EAAgC,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,KAAK,0BAA0B,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,kBAAkB,CAAC;IAC5B,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAClC,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,QAAgB,EAChB,MAAM,GACP,EAAE,0BAA0B;;;;;8BASM,MAAM;+BAWL,qBAAqB;6BAInB,OAAO,CAAC,OAAO,CAAC;2BAgBtB,aAAa,CAAC,mBAAmB,CAAC,KAAG,OAAO;EAiE3E"}
@@ -1,4 +1,4 @@
1
- import type { AssistantToolDefinition } from "../../core/types.js";
1
+ import type { AssistantToolDefinition } from "@4djs/assistant/core";
2
2
  import type { AssistantSuggestedPromptWithIcon } from "../types.js";
3
3
  export declare function useSuggestedPrompts(input: {
4
4
  staticPrompts?: AssistantSuggestedPromptWithIcon[];
@@ -1 +1 @@
1
- {"version":3,"file":"use-suggested-prompts.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/use-suggested-prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAoBpE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,CAAC,EAAE,gCAAgC,EAAE,CAAC;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACpD,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE;QAC5B,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,uBAAuB,EAAE,CAAC;KAClC,KAAK,OAAO,CACX,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CACH,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;;;;;;;EAsFA"}
1
+ {"version":3,"file":"use-suggested-prompts.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/use-suggested-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAGpE,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,aAAa,CAAC;AAoBpE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,aAAa,CAAC,EAAE,gCAAgC,EAAE,CAAC;IACnD,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,EAAE,MAAM,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACpD,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE;QAC5B,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,uBAAuB,EAAE,CAAC;KAClC,KAAK,OAAO,CACX,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CACH,CAAC;IACF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;;;;;;;EAsFA"}
@@ -1,4 +1,4 @@
1
- export type { AssistantMessage, AssistantStoreDependencies, AssistantToolDefinition, AssistantToolResult, } from "../core/types.js";
1
+ export type { AssistantMessage, AssistantStoreDependencies, AssistantToolDefinition, AssistantToolResult, } from "@4djs/assistant/core";
2
2
  export type { AssistantLabelKey, AssistantLabelOverrides, AssistantLabels, } from "../labels.js";
3
3
  export { ASSISTANT_LABEL_KEYS, DEFAULT_ASSISTANT_LABELS, formatLabel, resolveAssistantLabels, } from "../labels.js";
4
4
  export { Assistant, AssistantRoot, } from "./Assistant.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,WAAW,EACX,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,gCAAgC,EAChC,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,iBAAiB,EACjB,uBAAuB,EACvB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,WAAW,EACX,sBAAsB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,cAAc,EACd,sBAAsB,EACtB,gCAAgC,EAChC,iBAAiB,GAClB,MAAM,YAAY,CAAC"}
@@ -1,7 +1,6 @@
1
+ import type { AssistantStore, AssistantStoreDependencies, AssistantSuggestedPrompt, AssistantToolDefinition } from "@4djs/assistant/core";
1
2
  import type { LucideIcon } from "lucide-react";
2
3
  import type { ReactNode } from "react";
3
- import type { AssistantStore } from "../core/create-assistant-store.js";
4
- import type { AssistantStoreDependencies, AssistantSuggestedPrompt, AssistantToolDefinition } from "../core/types.js";
5
4
  import type { AssistantLabelOverrides, AssistantLabels } from "../labels.js";
6
5
  export interface AssistantSuggestedPromptWithIcon extends Omit<AssistantSuggestedPrompt, "icon"> {
7
6
  icon?: LucideIcon;
@@ -69,5 +68,7 @@ export interface AssistantProps {
69
68
  emptyState?: AssistantEmptyStateConfig;
70
69
  /** Override UI options from provider config */
71
70
  ui?: AssistantUiConfig;
71
+ /** Focus the composer when the panel mounts (default: true) */
72
+ focusComposerOnMount?: boolean;
72
73
  }
73
74
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/react/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,gCACf,SAAQ,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,gCAAgC,EAAE,CAAC;IACtD,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sGAAsG;IACtG,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,0BAA0B;IACjE,yEAAyE;IACzE,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE;QAC5B,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,uBAAuB,EAAE,CAAC;KAClC,KAAK,OAAO,CACX,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CACH,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,gDAAgD;IAChD,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,+CAA+C;IAC/C,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACxB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/react/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC1B,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7E,MAAM,WAAW,gCACf,SAAQ,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9C,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,gCAAgC,EAAE,CAAC;IACtD,gFAAgF;IAChF,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sGAAsG;IACtG,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sEAAsE;IACtE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,0BAA0B;IACjE,yEAAyE;IACzE,MAAM,CAAC,EAAE,uBAAuB,CAAC;IACjC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mFAAmF;IACnF,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE;QAC5B,UAAU,EAAE,OAAO,CAAC;QACpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,uBAAuB,EAAE,CAAC;KAClC,KAAK,OAAO,CACX,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CACH,CAAC;CACH;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,qBAAqB,CAAC;IAC/B,gDAAgD;IAChD,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,+CAA+C;IAC/C,EAAE,CAAC,EAAE,iBAAiB,CAAC;IACvB,+DAA+D;IAC/D,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC"}
package/dist/styles.css CHANGED
@@ -199,6 +199,73 @@
199
199
  text-underline-offset: 2px;
200
200
  }
201
201
 
202
+ .markdown-table-wrap {
203
+ margin: 0.625rem 0;
204
+ max-width: 100%;
205
+ overflow-x: auto;
206
+ -webkit-overflow-scrolling: touch;
207
+ border-radius: calc(var(--radius-base) - 2px);
208
+ border: 1px solid var(--border-default);
209
+ background: var(--surface-inset);
210
+ box-shadow: var(--shadow-xs);
211
+ }
212
+
213
+ .markdown-body .markdown-table-wrap table {
214
+ width: max-content;
215
+ min-width: 100%;
216
+ border-collapse: collapse;
217
+ font-size: 0.8125rem;
218
+ line-height: 1.45;
219
+ word-break: normal;
220
+ overflow-wrap: normal;
221
+ }
222
+
223
+ .markdown-body .markdown-table-wrap th,
224
+ .markdown-body .markdown-table-wrap td {
225
+ padding: 0.5rem 0.875rem;
226
+ text-align: left;
227
+ vertical-align: top;
228
+ border-right: 1px solid var(--border-default);
229
+ border-bottom: 1px solid var(--border-default);
230
+ white-space: nowrap;
231
+ }
232
+
233
+ .markdown-body .markdown-table-wrap th:last-child,
234
+ .markdown-body .markdown-table-wrap td:last-child {
235
+ border-right: none;
236
+ }
237
+
238
+ .markdown-body .markdown-table-wrap td:last-child {
239
+ white-space: normal;
240
+ min-width: 10rem;
241
+ max-width: 22rem;
242
+ }
243
+
244
+ .markdown-body .markdown-table-wrap tr:last-child td {
245
+ border-bottom: none;
246
+ }
247
+
248
+ .markdown-body .markdown-table-wrap th {
249
+ position: sticky;
250
+ top: 0;
251
+ z-index: 1;
252
+ font-weight: 600;
253
+ font-size: 0.6875rem;
254
+ letter-spacing: 0.04em;
255
+ text-transform: uppercase;
256
+ color: var(--text-heading);
257
+ background: color-mix(in oklab, var(--surface-panel) 90%, var(--brand) 6%);
258
+ border-bottom: 1px solid var(--border-default-medium);
259
+ }
260
+
261
+ .markdown-body .markdown-table-wrap tbody tr:nth-child(even) td {
262
+ background: color-mix(in oklab, var(--surface-panel) 96%, var(--brand) 2%);
263
+ }
264
+
265
+ .markdown-body .markdown-table-wrap tbody tr:hover td {
266
+ background: var(--overlay-subtle);
267
+ }
268
+
202
269
  .markdown-body pre:has(.markdown-mermaid) {
203
270
  margin: 0.5rem 0;
204
271
  padding: 0;
@@ -506,6 +573,19 @@
506
573
  color: var(--text-body);
507
574
  }
508
575
 
576
+ .assistant-markdown .markdown-table-wrap {
577
+ margin: 0.5rem 0;
578
+ }
579
+
580
+ .assistant-markdown .markdown-body .markdown-table-wrap table {
581
+ font-size: 0.75rem;
582
+ }
583
+
584
+ .assistant-markdown .markdown-body .markdown-table-wrap th,
585
+ .assistant-markdown .markdown-body .markdown-table-wrap td {
586
+ padding: 0.4375rem 0.75rem;
587
+ }
588
+
509
589
  .assistant-markdown .markdown-body strong {
510
590
  color: var(--text-heading);
511
591
  }
@@ -0,0 +1,28 @@
1
+ import { type AssistantToolRegistry } from "../core/tool-registry.js";
2
+ export interface DatastoreQueryInput {
3
+ dataClass: string;
4
+ filter?: string;
5
+ filterParams?: Array<{
6
+ type: string;
7
+ value: string;
8
+ }>;
9
+ sort?: string;
10
+ order?: "asc" | "desc";
11
+ limit?: number;
12
+ page?: number;
13
+ select?: string[];
14
+ }
15
+ export interface DatastoreToolsAdapter {
16
+ getCatalog(): Promise<unknown>;
17
+ getServerInfo(): Promise<unknown>;
18
+ queryEntities(input: DatastoreQueryInput): Promise<unknown>;
19
+ getEntity(dataClass: string, key: string): Promise<unknown>;
20
+ createEntity(dataClass: string, data: Record<string, unknown>): Promise<unknown>;
21
+ updateEntity(dataClass: string, key: string, data: Record<string, unknown>): Promise<unknown>;
22
+ deleteEntity(dataClass: string, key: string): Promise<unknown>;
23
+ /** Return an error message when writes are blocked; null when allowed */
24
+ assertWritable?(): string | null;
25
+ }
26
+ /** Register the standard 4D datastore REST tools on a registry. */
27
+ export declare function registerDatastoreTools(registry: AssistantToolRegistry, adapter: DatastoreToolsAdapter): AssistantToolRegistry;
28
+ //# sourceMappingURL=datastore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datastore.d.ts","sourceRoot":"","sources":["../../src/tools/datastore.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,aAAa,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjF,YAAY,CACV,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,yEAAyE;IACzE,cAAc,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC;CAClC;AA6LD,mEAAmE;AACnE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,qBAAqB,GAC7B,qBAAqB,CAKvB"}
@@ -0,0 +1,4 @@
1
+ export type { DatastoreQueryInput, DatastoreToolsAdapter, } from "./datastore.js";
2
+ export { registerDatastoreTools } from "./datastore.js";
3
+ export { connectExternalTools, createAssistantToolRegistry, resolveAssistantToolHooks, type AssistantToolHandler, type AssistantToolRegistry, } from "../core/tool-registry.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC3B,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,249 @@
1
+ // src/core/tool-registry.ts
2
+ function toolResultOk(data) {
3
+ return {
4
+ content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
5
+ structuredContent: data
6
+ };
7
+ }
8
+ function toolResultErr(message) {
9
+ return {
10
+ content: [{ type: "text", text: message }],
11
+ isError: true
12
+ };
13
+ }
14
+
15
+ class AssistantToolRegistryImpl {
16
+ entries = new Map;
17
+ register(handler) {
18
+ const name = handler.definition.name;
19
+ if (!name.trim()) {
20
+ throw new Error("Tool definition.name is required");
21
+ }
22
+ this.entries.set(name, { handler, active: true });
23
+ return this;
24
+ }
25
+ deactivate(name) {
26
+ const entry = this.entries.get(name);
27
+ if (!entry)
28
+ return false;
29
+ entry.active = false;
30
+ return true;
31
+ }
32
+ activate(name) {
33
+ const entry = this.entries.get(name);
34
+ if (!entry)
35
+ return false;
36
+ entry.active = true;
37
+ return true;
38
+ }
39
+ isActive(name) {
40
+ const entry = this.entries.get(name);
41
+ return entry?.active ?? false;
42
+ }
43
+ has(name) {
44
+ return this.entries.has(name);
45
+ }
46
+ async listTools() {
47
+ return [...this.entries.values()].filter((entry) => entry.active).map((entry) => entry.handler.definition);
48
+ }
49
+ async invokeTool(name, args) {
50
+ const entry = this.entries.get(name);
51
+ if (!entry?.active) {
52
+ return toolResultErr(`Unknown tool: ${name}`);
53
+ }
54
+ try {
55
+ return await entry.handler.invoke(args);
56
+ } catch (error) {
57
+ return toolResultErr(error instanceof Error ? error.message : String(error));
58
+ }
59
+ }
60
+ }
61
+ function createAssistantToolRegistry() {
62
+ return new AssistantToolRegistryImpl;
63
+ }
64
+ function resolveAssistantToolHooks(registry) {
65
+ return {
66
+ listTools: () => registry.listTools(),
67
+ invokeTool: (name, args) => registry.invokeTool(name, args)
68
+ };
69
+ }
70
+ function connectExternalTools(registry, external) {
71
+ const names = external.listTools().map((definition) => {
72
+ registry.register({
73
+ definition,
74
+ invoke: (args) => external.invokeTool(definition.name, args)
75
+ });
76
+ return definition.name;
77
+ });
78
+ return () => {
79
+ for (const name of names) {
80
+ registry.deactivate(name);
81
+ }
82
+ };
83
+ }
84
+
85
+ // src/tools/datastore.ts
86
+ function parseQueryArgs(args) {
87
+ const filterParams = Array.isArray(args.filterParams) ? args.filterParams.map((value) => ({
88
+ type: typeof value === "number" ? "number" : typeof value === "boolean" ? "boolean" : "string",
89
+ value: String(value)
90
+ })) : undefined;
91
+ return {
92
+ dataClass: String(args.dataClass ?? ""),
93
+ filter: typeof args.filter === "string" ? args.filter : undefined,
94
+ filterParams,
95
+ sort: typeof args.sort === "string" ? args.sort : undefined,
96
+ order: args.order === "asc" ? "asc" : "desc",
97
+ limit: typeof args.limit === "number" ? args.limit : undefined,
98
+ page: typeof args.page === "number" ? args.page : undefined,
99
+ select: Array.isArray(args.select) ? args.select.map(String) : undefined
100
+ };
101
+ }
102
+ function buildDatastoreToolHandlers(adapter) {
103
+ return [
104
+ {
105
+ definition: {
106
+ name: "get_catalog",
107
+ description: "Return the 4D REST catalog: dataclasses, attributes, methods, and entity counts.",
108
+ inputSchema: {
109
+ type: "object",
110
+ properties: {},
111
+ additionalProperties: false
112
+ }
113
+ },
114
+ invoke: async () => toolResultOk(await adapter.getCatalog())
115
+ },
116
+ {
117
+ definition: {
118
+ name: "get_server_info",
119
+ description: "Return server info: cache, entity sets, sessions, and privileges.",
120
+ inputSchema: {
121
+ type: "object",
122
+ properties: {},
123
+ additionalProperties: false
124
+ }
125
+ },
126
+ invoke: async () => toolResultOk(await adapter.getServerInfo())
127
+ },
128
+ {
129
+ definition: {
130
+ name: "query_entities",
131
+ description: "Query entities from a dataclass with optional filter, sort, and pagination.",
132
+ inputSchema: {
133
+ type: "object",
134
+ properties: {
135
+ dataClass: { type: "string", description: "Dataclass name" },
136
+ filter: { type: "string", description: "4D filter expression" },
137
+ filterParams: {
138
+ type: "array",
139
+ items: {},
140
+ description: "Values for :1, :2, … placeholders in the filter"
141
+ },
142
+ sort: { type: "string", description: "Attribute to sort by" },
143
+ order: { type: "string", enum: ["asc", "desc"] },
144
+ limit: { type: "number", description: "Page size (default 20)" },
145
+ page: { type: "number", description: "Page number (default 1)" },
146
+ select: {
147
+ type: "array",
148
+ items: { type: "string" },
149
+ description: "Attributes to return"
150
+ }
151
+ },
152
+ required: ["dataClass"]
153
+ }
154
+ },
155
+ invoke: async (args) => toolResultOk(await adapter.queryEntities(parseQueryArgs(args)))
156
+ },
157
+ {
158
+ definition: {
159
+ name: "get_entity",
160
+ description: "Get a single entity by primary key.",
161
+ inputSchema: {
162
+ type: "object",
163
+ properties: {
164
+ dataClass: { type: "string" },
165
+ key: { type: "string", description: "Entity primary key" }
166
+ },
167
+ required: ["dataClass", "key"]
168
+ }
169
+ },
170
+ invoke: async (args) => toolResultOk(await adapter.getEntity(String(args.dataClass ?? ""), String(args.key ?? "")))
171
+ },
172
+ {
173
+ definition: {
174
+ name: "create_entity",
175
+ description: "Create a new entity in a dataclass.",
176
+ inputSchema: {
177
+ type: "object",
178
+ properties: {
179
+ dataClass: { type: "string" },
180
+ data: {
181
+ type: "object",
182
+ description: "Attribute values for the new entity"
183
+ }
184
+ },
185
+ required: ["dataClass", "data"]
186
+ }
187
+ },
188
+ invoke: async (args) => {
189
+ const writeError = adapter.assertWritable?.() ?? null;
190
+ if (writeError)
191
+ return toolResultErr(writeError);
192
+ return toolResultOk(await adapter.createEntity(String(args.dataClass ?? ""), args.data ?? {}));
193
+ }
194
+ },
195
+ {
196
+ definition: {
197
+ name: "update_entity",
198
+ description: "Update an existing entity.",
199
+ inputSchema: {
200
+ type: "object",
201
+ properties: {
202
+ dataClass: { type: "string" },
203
+ key: { type: "string" },
204
+ data: { type: "object", description: "Fields to update" }
205
+ },
206
+ required: ["dataClass", "key", "data"]
207
+ }
208
+ },
209
+ invoke: async (args) => {
210
+ const writeError = adapter.assertWritable?.() ?? null;
211
+ if (writeError)
212
+ return toolResultErr(writeError);
213
+ return toolResultOk(await adapter.updateEntity(String(args.dataClass ?? ""), String(args.key ?? ""), args.data ?? {}));
214
+ }
215
+ },
216
+ {
217
+ definition: {
218
+ name: "delete_entity",
219
+ description: "Delete an entity by primary key.",
220
+ inputSchema: {
221
+ type: "object",
222
+ properties: {
223
+ dataClass: { type: "string" },
224
+ key: { type: "string" }
225
+ },
226
+ required: ["dataClass", "key"]
227
+ }
228
+ },
229
+ invoke: async (args) => {
230
+ const writeError = adapter.assertWritable?.() ?? null;
231
+ if (writeError)
232
+ return toolResultErr(writeError);
233
+ return toolResultOk(await adapter.deleteEntity(String(args.dataClass ?? ""), String(args.key ?? "")));
234
+ }
235
+ }
236
+ ];
237
+ }
238
+ function registerDatastoreTools(registry, adapter) {
239
+ for (const handler of buildDatastoreToolHandlers(adapter)) {
240
+ registry.register(handler);
241
+ }
242
+ return registry;
243
+ }
244
+ export {
245
+ resolveAssistantToolHooks,
246
+ registerDatastoreTools,
247
+ createAssistantToolRegistry,
248
+ connectExternalTools
249
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@4djs/assistant",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "type": "module",
5
5
  "types": "./dist/react/index.d.ts",
6
6
  "files": [
@@ -15,13 +15,18 @@
15
15
  "types": "./dist/core/index.d.ts",
16
16
  "import": "./dist/core/index.js"
17
17
  },
18
+ "./tools": {
19
+ "types": "./dist/tools/index.d.ts",
20
+ "import": "./dist/tools/index.js"
21
+ },
18
22
  "./styles.css": "./dist/styles.css"
19
23
  },
20
24
  "scripts": {
21
25
  "typecheck": "tsc --noEmit",
22
- "build": "bun run build:core && bun run build:react && bun run build:styles && bun run build:types",
23
- "build:core": "bun build ./src/core/index.ts --outdir ./dist/core --target node --format esm",
24
- "build:react": "bun build ./src/react/index.ts --outdir ./dist --target browser --external react --external react-dom --format esm",
26
+ "build": "bun run build:core && bun run build:tools && bun run build:react && bun run build:styles && bun run build:types",
27
+ "build:core": "bun build ./src/core/index.ts --outdir ./dist/core --target browser --format esm --external react --external react-dom",
28
+ "build:tools": "bun build ./src/tools/index.ts --outdir ./dist/tools --target browser --format esm --external @4djs/assistant/core",
29
+ "build:react": "bun build ./src/react/index.ts --outdir ./dist --target browser --format esm --external react --external react-dom --external react/jsx-runtime --external react/jsx-dev-runtime --external @4djs/assistant/core",
25
30
  "build:styles": "mkdir -p dist && cp src/styles/assistant.css dist/styles.css",
26
31
  "build:types": "tsc -p tsconfig.build.json && bun ./scripts/normalize-dts.ts",
27
32
  "prepack": "bun run build"
@@ -38,8 +43,8 @@
38
43
  "zustand": "^5.0.5"
39
44
  },
40
45
  "peerDependencies": {
41
- "react": "^19.0.0",
42
- "react-dom": "^19.0.0"
46
+ "react": "^18.0.0 || ^19.0.0",
47
+ "react-dom": "^18.0.0 || ^19.0.0"
43
48
  },
44
49
  "devDependencies": {
45
50
  "@4d/typescript-config": "workspace:*",