@aparte/core 0.2.0-alpha.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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/dist/client/aparte-client.d.ts +326 -0
  4. package/dist/client/aparte-client.d.ts.map +1 -0
  5. package/dist/client/stream-adapter.d.ts +197 -0
  6. package/dist/client/stream-adapter.d.ts.map +1 -0
  7. package/dist/components/bubble/aparte-chat-bubble.d.ts +153 -0
  8. package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -0
  9. package/dist/components/bubble/bubble-sync.d.ts +44 -0
  10. package/dist/components/bubble/bubble-sync.d.ts.map +1 -0
  11. package/dist/components/bubble/index.d.ts +4 -0
  12. package/dist/components/bubble/index.d.ts.map +1 -0
  13. package/dist/components/chat/aparte-chat.d.ts +49 -0
  14. package/dist/components/chat/aparte-chat.d.ts.map +1 -0
  15. package/dist/components/chat/index.d.ts +2 -0
  16. package/dist/components/chat/index.d.ts.map +1 -0
  17. package/dist/components/composer/aparte-composer-action.d.ts +37 -0
  18. package/dist/components/composer/aparte-composer-action.d.ts.map +1 -0
  19. package/dist/components/composer/aparte-composer-add-attachment.d.ts +27 -0
  20. package/dist/components/composer/aparte-composer-add-attachment.d.ts.map +1 -0
  21. package/dist/components/composer/aparte-composer-attachments.d.ts +26 -0
  22. package/dist/components/composer/aparte-composer-attachments.d.ts.map +1 -0
  23. package/dist/components/composer/aparte-composer-cancel.d.ts +21 -0
  24. package/dist/components/composer/aparte-composer-cancel.d.ts.map +1 -0
  25. package/dist/components/composer/aparte-composer-input.d.ts +63 -0
  26. package/dist/components/composer/aparte-composer-input.d.ts.map +1 -0
  27. package/dist/components/composer/aparte-composer-send.d.ts +25 -0
  28. package/dist/components/composer/aparte-composer-send.d.ts.map +1 -0
  29. package/dist/components/composer/aparte-composer.d.ts +150 -0
  30. package/dist/components/composer/aparte-composer.d.ts.map +1 -0
  31. package/dist/components/composer/index.d.ts +9 -0
  32. package/dist/components/composer/index.d.ts.map +1 -0
  33. package/dist/components/conversation-list/aparte-conversation-list.d.ts +50 -0
  34. package/dist/components/conversation-list/aparte-conversation-list.d.ts.map +1 -0
  35. package/dist/components/conversation-list/index.d.ts +2 -0
  36. package/dist/components/conversation-list/index.d.ts.map +1 -0
  37. package/dist/components/elicitation/aparte-elicitation.d.ts +29 -0
  38. package/dist/components/elicitation/aparte-elicitation.d.ts.map +1 -0
  39. package/dist/components/index.d.ts +10 -0
  40. package/dist/components/index.d.ts.map +1 -0
  41. package/dist/components/status/aparte-chat-status.d.ts +34 -0
  42. package/dist/components/status/aparte-chat-status.d.ts.map +1 -0
  43. package/dist/components/status/index.d.ts +2 -0
  44. package/dist/components/status/index.d.ts.map +1 -0
  45. package/dist/components/viewport/aparte-chat-viewport.d.ts +358 -0
  46. package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -0
  47. package/dist/components/viewport/index.d.ts +2 -0
  48. package/dist/components/viewport/index.d.ts.map +1 -0
  49. package/dist/config/action-provider.d.ts +59 -0
  50. package/dist/config/action-provider.d.ts.map +1 -0
  51. package/dist/config/aparte-config.d.ts +490 -0
  52. package/dist/config/aparte-config.d.ts.map +1 -0
  53. package/dist/config/attachment-renderer.d.ts +28 -0
  54. package/dist/config/attachment-renderer.d.ts.map +1 -0
  55. package/dist/config/avatar-provider.d.ts +35 -0
  56. package/dist/config/avatar-provider.d.ts.map +1 -0
  57. package/dist/config/bubble-shell-renderer.d.ts +41 -0
  58. package/dist/config/bubble-shell-renderer.d.ts.map +1 -0
  59. package/dist/config/config-context.d.ts +47 -0
  60. package/dist/config/config-context.d.ts.map +1 -0
  61. package/dist/config/error-renderer.d.ts +26 -0
  62. package/dist/config/error-renderer.d.ts.map +1 -0
  63. package/dist/config/icon-provider.d.ts +63 -0
  64. package/dist/config/icon-provider.d.ts.map +1 -0
  65. package/dist/config/index.d.ts +19 -0
  66. package/dist/config/index.d.ts.map +1 -0
  67. package/dist/config/locale.d.ts +60 -0
  68. package/dist/config/locale.d.ts.map +1 -0
  69. package/dist/config/sanitize.d.ts +31 -0
  70. package/dist/config/sanitize.d.ts.map +1 -0
  71. package/dist/config/sibling-nav-renderer.d.ts +27 -0
  72. package/dist/config/sibling-nav-renderer.d.ts.map +1 -0
  73. package/dist/config/skeleton-provider.d.ts +26 -0
  74. package/dist/config/skeleton-provider.d.ts.map +1 -0
  75. package/dist/config/status-renderer.d.ts +23 -0
  76. package/dist/config/status-renderer.d.ts.map +1 -0
  77. package/dist/conversations/conversation-controller.d.ts +126 -0
  78. package/dist/conversations/conversation-controller.d.ts.map +1 -0
  79. package/dist/conversations/conversation-manager.d.ts +98 -0
  80. package/dist/conversations/conversation-manager.d.ts.map +1 -0
  81. package/dist/conversations/index.d.ts +5 -0
  82. package/dist/conversations/index.d.ts.map +1 -0
  83. package/dist/conversations/types.d.ts +172 -0
  84. package/dist/conversations/types.d.ts.map +1 -0
  85. package/dist/custom-elements.json +15833 -0
  86. package/dist/elicitation/index.d.ts +20 -0
  87. package/dist/elicitation/index.d.ts.map +1 -0
  88. package/dist/elicitation/panel.d.ts +18 -0
  89. package/dist/elicitation/panel.d.ts.map +1 -0
  90. package/dist/elicitation/types.d.ts +98 -0
  91. package/dist/elicitation/types.d.ts.map +1 -0
  92. package/dist/host/aparte-chat-host.d.ts +176 -0
  93. package/dist/host/aparte-chat-host.d.ts.map +1 -0
  94. package/dist/host/index.d.ts +2 -0
  95. package/dist/host/index.d.ts.map +1 -0
  96. package/dist/index-D89k-n2Q.js +6294 -0
  97. package/dist/index-D89k-n2Q.js.map +1 -0
  98. package/dist/index.css +2554 -0
  99. package/dist/index.d.ts +62 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +3763 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/index.node.d.ts +53 -0
  104. package/dist/index.node.d.ts.map +1 -0
  105. package/dist/index.node.js +49 -0
  106. package/dist/index.node.js.map +1 -0
  107. package/dist/interop/element-props.d.ts +23 -0
  108. package/dist/interop/element-props.d.ts.map +1 -0
  109. package/dist/parsers/aparte-event-stream.d.ts +13 -0
  110. package/dist/parsers/aparte-event-stream.d.ts.map +1 -0
  111. package/dist/parsers/aparte-stream-parser.d.ts +137 -0
  112. package/dist/parsers/aparte-stream-parser.d.ts.map +1 -0
  113. package/dist/parsers/index.d.ts +4 -0
  114. package/dist/parsers/index.d.ts.map +1 -0
  115. package/dist/primitives/index.d.ts +8 -0
  116. package/dist/primitives/index.d.ts.map +1 -0
  117. package/dist/primitives/progress-spinner/aparte-progress-spinner.d.ts +25 -0
  118. package/dist/primitives/progress-spinner/aparte-progress-spinner.d.ts.map +1 -0
  119. package/dist/primitives/progress-spinner/index.d.ts +2 -0
  120. package/dist/primitives/progress-spinner/index.d.ts.map +1 -0
  121. package/dist/primitives/select/aparte-optgroup.d.ts +32 -0
  122. package/dist/primitives/select/aparte-optgroup.d.ts.map +1 -0
  123. package/dist/primitives/select/aparte-option.d.ts +30 -0
  124. package/dist/primitives/select/aparte-option.d.ts.map +1 -0
  125. package/dist/primitives/select/aparte-select.d.ts +74 -0
  126. package/dist/primitives/select/aparte-select.d.ts.map +1 -0
  127. package/dist/primitives/select/index.d.ts +9 -0
  128. package/dist/primitives/select/index.d.ts.map +1 -0
  129. package/dist/renderers/index.d.ts +5 -0
  130. package/dist/renderers/index.d.ts.map +1 -0
  131. package/dist/renderers/segment-renderers.d.ts +31 -0
  132. package/dist/renderers/segment-renderers.d.ts.map +1 -0
  133. package/dist/runtime/message-repository.d.ts +111 -0
  134. package/dist/runtime/message-repository.d.ts.map +1 -0
  135. package/dist/transport/backend-handler.d.ts +50 -0
  136. package/dist/transport/backend-handler.d.ts.map +1 -0
  137. package/dist/transport/backend-transport.d.ts +39 -0
  138. package/dist/transport/backend-transport.d.ts.map +1 -0
  139. package/dist/transport/direct-transport.d.ts +36 -0
  140. package/dist/transport/direct-transport.d.ts.map +1 -0
  141. package/dist/transport/index.d.ts +6 -0
  142. package/dist/transport/index.d.ts.map +1 -0
  143. package/dist/transport/types.d.ts +73 -0
  144. package/dist/transport/types.d.ts.map +1 -0
  145. package/dist/types/chat.d.ts +223 -0
  146. package/dist/types/chat.d.ts.map +1 -0
  147. package/dist/types/errors.d.ts +25 -0
  148. package/dist/types/errors.d.ts.map +1 -0
  149. package/dist/types/event-map.d.ts +41 -0
  150. package/dist/types/event-map.d.ts.map +1 -0
  151. package/dist/types/events.d.ts +290 -0
  152. package/dist/types/events.d.ts.map +1 -0
  153. package/dist/types/imperative-api.d.ts +38 -0
  154. package/dist/types/imperative-api.d.ts.map +1 -0
  155. package/dist/types/index.d.ts +22 -0
  156. package/dist/types/index.d.ts.map +1 -0
  157. package/dist/types/model-provider.d.ts +229 -0
  158. package/dist/types/model-provider.d.ts.map +1 -0
  159. package/dist/types/models.d.ts +173 -0
  160. package/dist/types/models.d.ts.map +1 -0
  161. package/dist/types/parsers.d.ts +42 -0
  162. package/dist/types/parsers.d.ts.map +1 -0
  163. package/dist/types/providers.d.ts +93 -0
  164. package/dist/types/providers.d.ts.map +1 -0
  165. package/dist/types/segments.d.ts +221 -0
  166. package/dist/types/segments.d.ts.map +1 -0
  167. package/dist/types/theming.d.ts +44 -0
  168. package/dist/types/theming.d.ts.map +1 -0
  169. package/dist/types/tools.d.ts +98 -0
  170. package/dist/types/tools.d.ts.map +1 -0
  171. package/dist/utils/assert-never.d.ts +9 -0
  172. package/dist/utils/assert-never.d.ts.map +1 -0
  173. package/dist/utils/css-escape.d.ts +15 -0
  174. package/dist/utils/css-escape.d.ts.map +1 -0
  175. package/package.json +68 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Aparte Tool Types
3
+ * Provider-agnostic tool calling interface
4
+ */
5
+ import type { AparteToolCallSegment } from './segments.js';
6
+ /** Definition of a tool the AI can call */
7
+ export interface AparteTool {
8
+ name: string;
9
+ description: string;
10
+ /** JSON Schema object describing the tool's input parameters */
11
+ inputSchema: Record<string, unknown>;
12
+ /** System prompt injected automatically when this tool is registered — tells the AI when and why to use it */
13
+ systemPrompt?: string;
14
+ /**
15
+ * Maximum number of agentic loop turns before aborting.
16
+ * Overrides the global `maxTurns` in AparteClientOptions for this specific tool.
17
+ */
18
+ maxTurns?: number;
19
+ /**
20
+ * When true, the agent loop pauses before running this tool's handler and
21
+ * waits for a human decision (approve / reject) — "human in the loop". The
22
+ * UI surfaces Approve/Reject (default renderer, or a custom tool renderer)
23
+ * and resolves it by dispatching an `aparte-tool-decision` event. On reject,
24
+ * a synthetic "rejected by user" result is injected and the turn stops.
25
+ */
26
+ needsApproval?: boolean;
27
+ }
28
+ /**
29
+ * Detail for `aparte-tool-decision` — the human's verdict on a tool awaiting
30
+ * approval. Dispatched by the approval UI (built-in or app-provided) and
31
+ * consumed by the agent loop to resume or reject.
32
+ */
33
+ export interface AparteToolDecisionDetail {
34
+ toolCallId: string;
35
+ approved: boolean;
36
+ /**
37
+ * Optional payload from a custom approval surface. When it is a plain object
38
+ * and the decision is `approved`, the agent loop merges it onto the tool's
39
+ * input before invoking the handler — so a human can edit the arguments
40
+ * before the tool runs (correct a path, tighten a query, …). The built-in
41
+ * Approve/Reject gate sends no payload, so existing flows are unchanged.
42
+ */
43
+ payload?: unknown;
44
+ }
45
+ /**
46
+ * Detail for `aparte-tool-approval-request` — emitted by the loop when a tool
47
+ * marked `needsApproval` is about to run. Apps may listen to show a richer
48
+ * approval surface; the built-in renderer already shows Approve/Reject inline.
49
+ */
50
+ export interface AparteToolApprovalRequestDetail {
51
+ toolCallId: string;
52
+ toolName: string;
53
+ input: Record<string, unknown>;
54
+ }
55
+ /**
56
+ * Detail for `aparte-tool-action` — a generic callback channel so any rendered
57
+ * tool UI (via {@link AparteToolRenderer.setup}) can post an interactive action
58
+ * back toward the host/loop (e.g. a custom confirm/choose/retry button).
59
+ */
60
+ export interface AparteToolActionDetail {
61
+ toolCallId: string;
62
+ action: string;
63
+ payload?: unknown;
64
+ }
65
+ /** A tool call emitted by the AI during streaming */
66
+ export interface AparteToolCall {
67
+ id: string;
68
+ name: string;
69
+ input: Record<string, unknown>;
70
+ }
71
+ /** Result returned after a tool handler resolves */
72
+ export interface AparteToolResult {
73
+ toolCallId: string;
74
+ content: string;
75
+ }
76
+ /**
77
+ * Handler function for a registered tool.
78
+ * Receives the tool call and an AbortSignal (fires after timeout or on cancellation).
79
+ * Must resolve with a AparteToolResult.
80
+ */
81
+ export type AparteToolHandler = (call: AparteToolCall, signal: AbortSignal) => Promise<AparteToolResult>;
82
+ /**
83
+ * Per-tool segment renderer.
84
+ * Registered via AparteConfig.registerToolRenderer(toolName, renderer).
85
+ * When the AI calls a tool, this renderer controls what appears in the bubble
86
+ * for that specific tool instead of the generic tool_call renderer.
87
+ *
88
+ * Return an empty string from render() to render nothing (e.g. for UI-only tools like ask_question).
89
+ */
90
+ export interface AparteToolRenderer {
91
+ /** HTML to render for the tool call segment. Return empty string to hide. */
92
+ render: (segment: AparteToolCallSegment) => string;
93
+ /** Optional DOM setup (event listeners etc.) called after HTML is injected */
94
+ setup?: (element: HTMLElement, segment: AparteToolCallSegment) => void;
95
+ /** Optional CSS to inject once into document.head */
96
+ getStyles?: () => string;
97
+ }
98
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE3D,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,8GAA8G;IAC9G,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qDAAqD;AACrD,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAC5B,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,WAAW,KAClB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IAC/B,6EAA6E;IAC7E,MAAM,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,MAAM,CAAC;IACnD,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACvE,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Exhaustiveness guard for discriminated-union `switch`es. The argument narrows to
3
+ * `never` only when every variant has a matching `case`, so adding a new union
4
+ * member without handling it becomes a TYPECHECK error here instead of being
5
+ * silently ignored at runtime. The throw is the runtime backstop (should be
6
+ * unreachable in well-typed code).
7
+ */
8
+ export declare function assertNever(value: never): never;
9
+ //# sourceMappingURL=assert-never.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-never.d.ts","sourceRoot":"","sources":["../../src/utils/assert-never.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAE/C"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Escape a value for safe interpolation into a DOUBLE-QUOTED CSS attribute
3
+ * selector: `[attr="${cssEscape(value)}"]`. Inside a quoted CSS string only `"`
4
+ * (which would end the string) and `\` (the escape char) are special, so escaping
5
+ * those two is sufficient AND correct here — unlike `CSS.escape`, which targets the
6
+ * UNquoted identifier context and over-escapes inside quotes (breaking the match),
7
+ * and which also needs the `CSS` global (absent in SSR / some test runtimes).
8
+ *
9
+ * Segment/message ids are random UUIDs in the default flow, so this is
10
+ * defense-in-depth: a hostile, stream-supplied id containing `"` (e.g. a tool-call
11
+ * id) can no longer break out of the selector into a `SyntaxError` or a
12
+ * selector-list that mis-targets another element.
13
+ */
14
+ export declare function cssEscape(value: string): string;
15
+ //# sourceMappingURL=css-escape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-escape.d.ts","sourceRoot":"","sources":["../../src/utils/css-escape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C"}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@aparte/core",
3
+ "version": "0.2.0-alpha.0",
4
+ "description": "High-performance AI conversation engine - Zero-dependency Web Components",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "customElements": "dist/custom-elements.json",
10
+ "exports": {
11
+ ".": {
12
+ "@aparte-workspace/source": "./src/index.ts",
13
+ "node": {
14
+ "types": "./dist/index.node.d.ts",
15
+ "default": "./dist/index.node.js"
16
+ },
17
+ "types": "./dist/index.d.ts",
18
+ "import": "./dist/index.js",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "./styles.css": {
22
+ "@aparte-workspace/source": "./src/styles/bundle.css",
23
+ "default": "./dist/index.css"
24
+ },
25
+ "./dist/index.css": "./dist/index.css"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "README.md",
30
+ "LICENSE"
31
+ ],
32
+ "engines": {
33
+ "node": ">=18"
34
+ },
35
+ "devDependencies": {
36
+ "@custom-elements-manifest/analyzer": "^0.11.0",
37
+ "@types/node": "^22.0.0",
38
+ "esbuild": "^0.27.2",
39
+ "typescript": "^5.4.0",
40
+ "vite": "^6.0.0",
41
+ "vite-plugin-dts": "^4.5.4"
42
+ },
43
+ "keywords": [
44
+ "web-components",
45
+ "chat",
46
+ "ai",
47
+ "streaming",
48
+ "llm"
49
+ ],
50
+ "license": "MIT",
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "git+https://github.com/apartejs/aparte.git",
54
+ "directory": "packages/core"
55
+ },
56
+ "bugs": {
57
+ "url": "https://github.com/apartejs/aparte/issues"
58
+ },
59
+ "scripts": {
60
+ "dev": "vite",
61
+ "build": "vite build && tsc -b --emitDeclarationOnly --force && node scripts/clean-declarations.mjs && pnpm run analyze",
62
+ "analyze": "cem analyze",
63
+ "preview": "vite preview",
64
+ "test": "vitest",
65
+ "test:run": "vitest run",
66
+ "test:coverage": "vitest run --coverage"
67
+ }
68
+ }