@carlonicora/nextjs-jsonapi 1.77.3 → 1.78.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 (102) hide show
  1. package/dist/AssistantInterface-BYgI5z1-.d.mts +12 -0
  2. package/dist/AssistantInterface-DfDcz0gJ.d.ts +12 -0
  3. package/dist/AssistantMessageInterface-D0Kwf8CR.d.mts +36 -0
  4. package/dist/AssistantMessageInterface-DS_tyJTV.d.ts +36 -0
  5. package/dist/{BlockNoteEditor-UB7T7V67.js → BlockNoteEditor-2G5UYALC.js} +14 -14
  6. package/dist/{BlockNoteEditor-UB7T7V67.js.map → BlockNoteEditor-2G5UYALC.js.map} +1 -1
  7. package/dist/{BlockNoteEditor-7HAAXN3H.mjs → BlockNoteEditor-JXK3JGKJ.mjs} +4 -4
  8. package/dist/billing/index.js +346 -346
  9. package/dist/billing/index.mjs +3 -3
  10. package/dist/{chunk-FKLP4NED.js → chunk-FDJQRIMY.js} +320 -18
  11. package/dist/chunk-FDJQRIMY.js.map +1 -0
  12. package/dist/{chunk-XI35ALWY.mjs → chunk-I65SSQ5Z.mjs} +303 -1
  13. package/dist/chunk-I65SSQ5Z.mjs.map +1 -0
  14. package/dist/{chunk-F44ET4AC.mjs → chunk-NB6TIKHK.mjs} +2087 -1463
  15. package/dist/chunk-NB6TIKHK.mjs.map +1 -0
  16. package/dist/{chunk-JOJZRGZL.mjs → chunk-NZOUEN67.mjs} +2 -2
  17. package/dist/{chunk-OTZEXASK.js → chunk-X4YDETTD.js} +11 -11
  18. package/dist/{chunk-OTZEXASK.js.map → chunk-X4YDETTD.js.map} +1 -1
  19. package/dist/{chunk-CV7UOUKQ.js → chunk-ZEDB6JVB.js} +1356 -732
  20. package/dist/chunk-ZEDB6JVB.js.map +1 -0
  21. package/dist/client/index.js +4 -4
  22. package/dist/client/index.mjs +3 -3
  23. package/dist/components/index.d.mts +21 -2
  24. package/dist/components/index.d.ts +21 -2
  25. package/dist/components/index.js +10 -4
  26. package/dist/components/index.js.map +1 -1
  27. package/dist/components/index.mjs +9 -3
  28. package/dist/contexts/index.d.mts +26 -2
  29. package/dist/contexts/index.d.ts +26 -2
  30. package/dist/contexts/index.js +8 -4
  31. package/dist/contexts/index.js.map +1 -1
  32. package/dist/contexts/index.mjs +7 -3
  33. package/dist/core/index.d.mts +110 -3
  34. package/dist/core/index.d.ts +110 -3
  35. package/dist/core/index.js +14 -2
  36. package/dist/core/index.js.map +1 -1
  37. package/dist/core/index.mjs +13 -1
  38. package/dist/index.d.mts +3 -2
  39. package/dist/index.d.ts +3 -2
  40. package/dist/index.js +15 -3
  41. package/dist/index.js.map +1 -1
  42. package/dist/index.mjs +14 -2
  43. package/dist/server/index.js +3 -3
  44. package/dist/server/index.mjs +1 -1
  45. package/package.json +1 -1
  46. package/src/components/index.ts +2 -0
  47. package/src/contexts/index.ts +1 -0
  48. package/src/core/index.ts +4 -0
  49. package/src/core/registry/ModuleRegistry.ts +9 -0
  50. package/src/features/assistant/AssistantModule.ts +19 -0
  51. package/src/features/assistant/components/containers/AssistantContainer.tsx +56 -0
  52. package/src/features/assistant/components/containers/__tests__/AssistantContainer.spec.tsx +101 -0
  53. package/src/features/assistant/components/index.ts +1 -0
  54. package/src/features/assistant/components/parts/AssistantComposer.tsx +56 -0
  55. package/src/features/assistant/components/parts/AssistantEmptyState.tsx +47 -0
  56. package/src/features/assistant/components/parts/AssistantSidebar.tsx +64 -0
  57. package/src/features/assistant/components/parts/AssistantStatusLine.tsx +19 -0
  58. package/src/features/assistant/components/parts/AssistantThread.tsx +36 -0
  59. package/src/features/assistant/components/parts/AssistantThreadHeader.tsx +91 -0
  60. package/src/features/assistant/components/parts/__tests__/AssistantComposer.spec.tsx +32 -0
  61. package/src/features/assistant/components/parts/__tests__/AssistantEmptyState.spec.tsx +27 -0
  62. package/src/features/assistant/components/parts/__tests__/AssistantSidebar.spec.tsx +58 -0
  63. package/src/features/assistant/components/parts/__tests__/AssistantStatusLine.spec.tsx +19 -0
  64. package/src/features/assistant/components/parts/__tests__/AssistantThread.spec.tsx +39 -0
  65. package/src/features/assistant/components/parts/__tests__/AssistantThreadHeader.spec.tsx +67 -0
  66. package/src/features/assistant/contexts/AssistantContext.tsx +255 -0
  67. package/src/features/assistant/contexts/__tests__/AssistantContext.spec.tsx +375 -0
  68. package/src/features/assistant/data/Assistant.ts +37 -0
  69. package/src/features/assistant/data/AssistantInterface.ts +11 -0
  70. package/src/features/assistant/data/AssistantService.ts +79 -0
  71. package/src/features/assistant/data/index.ts +3 -0
  72. package/src/features/assistant/index.ts +2 -0
  73. package/src/features/assistant/utils/__tests__/groupThreadsByBucket.spec.ts +24 -0
  74. package/src/features/assistant/utils/__tests__/resolveReferenceableModules.spec.ts +92 -0
  75. package/src/features/assistant/utils/groupThreadsByBucket.ts +26 -0
  76. package/src/features/assistant/utils/resolveReferenceableModules.ts +14 -0
  77. package/src/features/assistant-message/AssistantMessageModule.ts +28 -0
  78. package/src/features/assistant-message/components/MessageItem.tsx +60 -0
  79. package/src/features/assistant-message/components/MessageList.tsx +38 -0
  80. package/src/features/assistant-message/components/__tests__/MessageItem.spec.tsx +108 -0
  81. package/src/features/assistant-message/components/index.ts +2 -0
  82. package/src/features/assistant-message/components/parts/ReferenceBadges.tsx +46 -0
  83. package/src/features/assistant-message/components/parts/SuggestedFollowUps.tsx +52 -0
  84. package/src/features/assistant-message/components/parts/__tests__/ReferenceBadges.spec.tsx +59 -0
  85. package/src/features/assistant-message/components/parts/__tests__/SuggestedFollowUps.spec.tsx +29 -0
  86. package/src/features/assistant-message/data/AssistantMessage.ts +95 -0
  87. package/src/features/assistant-message/data/AssistantMessageInterface.ts +21 -0
  88. package/src/features/assistant-message/data/AssistantMessageService.ts +40 -0
  89. package/src/features/assistant-message/data/__tests__/AssistantMessage.spec.ts +158 -0
  90. package/src/features/assistant-message/data/index.ts +3 -0
  91. package/src/features/assistant-message/index.ts +2 -0
  92. package/src/features/user/contexts/CurrentUserContext.tsx +5 -13
  93. package/src/features/user/contexts/__tests__/CurrentUserContext.spec.tsx +141 -0
  94. package/src/index.ts +4 -0
  95. package/dist/HowToInterface-BKhnkzBp.d.ts +0 -17
  96. package/dist/HowToInterface-Cj8OuQFf.d.mts +0 -17
  97. package/dist/chunk-CV7UOUKQ.js.map +0 -1
  98. package/dist/chunk-F44ET4AC.mjs.map +0 -1
  99. package/dist/chunk-FKLP4NED.js.map +0 -1
  100. package/dist/chunk-XI35ALWY.mjs.map +0 -1
  101. /package/dist/{BlockNoteEditor-7HAAXN3H.mjs.map → BlockNoteEditor-JXK3JGKJ.mjs.map} +0 -0
  102. /package/dist/{chunk-JOJZRGZL.mjs.map → chunk-NZOUEN67.mjs.map} +0 -0
@@ -997,6 +997,12 @@ var ModuleRegistryClass = class {
997
997
  }
998
998
  return response;
999
999
  }
1000
+ getAll() {
1001
+ if (this._modules.size === 0) {
1002
+ tryBootstrap();
1003
+ }
1004
+ return Array.from(this._modules.values());
1005
+ }
1000
1006
  };
1001
1007
  var ModuleRegistry = new ModuleRegistryClass();
1002
1008
  var Modules = new Proxy({}, {
@@ -5368,6 +5374,296 @@ var HowToService = class extends AbstractService {
5368
5374
  }
5369
5375
  };
5370
5376
 
5377
+ // src/features/assistant/AssistantModule.ts
5378
+ import { BotIcon } from "lucide-react";
5379
+
5380
+ // src/features/assistant/data/Assistant.ts
5381
+ var Assistant = class extends AbstractApiData {
5382
+ static {
5383
+ __name(this, "Assistant");
5384
+ }
5385
+ _title;
5386
+ _messageCount;
5387
+ get title() {
5388
+ return this._title ?? "";
5389
+ }
5390
+ get messageCount() {
5391
+ return this._messageCount ?? 0;
5392
+ }
5393
+ rehydrate(data) {
5394
+ super.rehydrate(data);
5395
+ this._title = data.jsonApi.attributes?.title;
5396
+ const fromMeta = data.jsonApi.meta?.messageCount;
5397
+ const fromAttrs = data.jsonApi.attributes?.messageCount;
5398
+ this._messageCount = typeof fromMeta === "number" ? fromMeta : typeof fromAttrs === "number" ? fromAttrs : 0;
5399
+ return this;
5400
+ }
5401
+ createJsonApi(data) {
5402
+ return {
5403
+ data: {
5404
+ type: Modules.Assistant.name,
5405
+ attributes: {
5406
+ content: data.firstMessage,
5407
+ ...data.title !== void 0 ? { title: data.title } : {}
5408
+ }
5409
+ },
5410
+ included: []
5411
+ };
5412
+ }
5413
+ };
5414
+
5415
+ // src/features/assistant/AssistantModule.ts
5416
+ var AssistantModule = /* @__PURE__ */ __name((factory) => factory({
5417
+ pageUrl: "/assistants",
5418
+ name: "assistants",
5419
+ model: Assistant,
5420
+ moduleId: "2b39fd68-6a41-4f73-a2d0-4c8e8e3f9a42",
5421
+ icon: BotIcon,
5422
+ identifier: ["title"],
5423
+ inclusions: {
5424
+ lists: {
5425
+ fields: [createJsonApiInclusion("assistants", [`title`])]
5426
+ }
5427
+ }
5428
+ }), "AssistantModule");
5429
+
5430
+ // src/features/assistant/data/AssistantService.ts
5431
+ var AssistantService = class extends AbstractService {
5432
+ static {
5433
+ __name(this, "AssistantService");
5434
+ }
5435
+ static async findOne(params) {
5436
+ return this.callApi({
5437
+ type: Modules.Assistant,
5438
+ method: "GET" /* GET */,
5439
+ endpoint: new EndpointCreator({ endpoint: Modules.Assistant, id: params.id }).generate()
5440
+ });
5441
+ }
5442
+ static async findMany(params = {}) {
5443
+ const endpoint = new EndpointCreator({ endpoint: Modules.Assistant });
5444
+ if (params.fetchAll) endpoint.addAdditionalParam("fetchAll", "true");
5445
+ return this.callApi({
5446
+ type: Modules.Assistant,
5447
+ method: "GET" /* GET */,
5448
+ endpoint: endpoint.generate()
5449
+ });
5450
+ }
5451
+ static async create(params) {
5452
+ return this.callApi({
5453
+ type: Modules.Assistant,
5454
+ method: "POST" /* POST */,
5455
+ endpoint: new EndpointCreator({ endpoint: Modules.Assistant }).generate(),
5456
+ input: params
5457
+ });
5458
+ }
5459
+ /**
5460
+ * Sends a new user message to an existing assistant thread. The agent turn
5461
+ * runs synchronously; the response is a two-element list: [user, assistant].
5462
+ */
5463
+ static async appendMessage(params) {
5464
+ return this.callApi({
5465
+ type: Modules.AssistantMessage,
5466
+ method: "POST" /* POST */,
5467
+ endpoint: new EndpointCreator({
5468
+ endpoint: Modules.Assistant,
5469
+ id: params.assistantId,
5470
+ childEndpoint: Modules.AssistantMessage
5471
+ }).generate(),
5472
+ input: {
5473
+ data: {
5474
+ type: Modules.AssistantMessage.name,
5475
+ attributes: { content: params.content }
5476
+ }
5477
+ },
5478
+ overridesJsonApiCreation: true
5479
+ });
5480
+ }
5481
+ static async rename(params) {
5482
+ await this.callApi({
5483
+ type: Modules.Assistant,
5484
+ method: "PATCH" /* PATCH */,
5485
+ endpoint: new EndpointCreator({ endpoint: Modules.Assistant, id: params.id }).generate(),
5486
+ input: {
5487
+ data: {
5488
+ type: Modules.Assistant.name,
5489
+ id: params.id,
5490
+ attributes: { title: params.title }
5491
+ }
5492
+ },
5493
+ overridesJsonApiCreation: true
5494
+ });
5495
+ }
5496
+ static async delete(params) {
5497
+ await this.callApi({
5498
+ type: Modules.Assistant,
5499
+ method: "DELETE" /* DELETE */,
5500
+ endpoint: new EndpointCreator({ endpoint: Modules.Assistant, id: params.id }).generate()
5501
+ });
5502
+ }
5503
+ };
5504
+
5505
+ // src/features/assistant-message/AssistantMessageModule.ts
5506
+ import { MessageSquareIcon } from "lucide-react";
5507
+
5508
+ // src/features/assistant/utils/resolveReferenceableModules.ts
5509
+ function resolveReferenceableModules() {
5510
+ return ModuleRegistry.getAll().filter((m) => {
5511
+ const cls = m.model;
5512
+ return cls && Array.isArray(cls.identifierFields) && cls.identifierFields.length > 0;
5513
+ });
5514
+ }
5515
+ __name(resolveReferenceableModules, "resolveReferenceableModules");
5516
+
5517
+ // src/features/assistant-message/data/AssistantMessage.ts
5518
+ var AssistantMessage = class _AssistantMessage extends AbstractApiData {
5519
+ static {
5520
+ __name(this, "AssistantMessage");
5521
+ }
5522
+ _role;
5523
+ _content;
5524
+ _position;
5525
+ _suggestedQuestions;
5526
+ _inputTokens;
5527
+ _outputTokens;
5528
+ _references;
5529
+ get role() {
5530
+ return this._role ?? "assistant";
5531
+ }
5532
+ get content() {
5533
+ return this._content ?? "";
5534
+ }
5535
+ get position() {
5536
+ return this._position ?? 0;
5537
+ }
5538
+ get suggestedQuestions() {
5539
+ return this._suggestedQuestions ?? [];
5540
+ }
5541
+ get inputTokens() {
5542
+ return this._inputTokens;
5543
+ }
5544
+ get outputTokens() {
5545
+ return this._outputTokens;
5546
+ }
5547
+ get references() {
5548
+ return this._references ?? [];
5549
+ }
5550
+ rehydrate(data) {
5551
+ super.rehydrate(data);
5552
+ const attrs = data.jsonApi.attributes ?? {};
5553
+ this._role = attrs.role;
5554
+ this._content = attrs.content;
5555
+ this._position = typeof attrs.position === "number" ? attrs.position : Number(attrs.position ?? 0);
5556
+ this._suggestedQuestions = Array.isArray(attrs.suggestedQuestions) ? attrs.suggestedQuestions : [];
5557
+ this._inputTokens = attrs.inputTokens;
5558
+ this._outputTokens = attrs.outputTokens;
5559
+ const refs = this._readIncludedPolymorphic(data, "references", resolveReferenceableModules());
5560
+ this._references = Array.isArray(refs) ? refs : refs ? [refs] : [];
5561
+ return this;
5562
+ }
5563
+ createJsonApi(data) {
5564
+ return {
5565
+ data: {
5566
+ type: Modules.AssistantMessage.name,
5567
+ id: data.id,
5568
+ attributes: {
5569
+ role: data.role,
5570
+ content: data.content,
5571
+ position: data.position
5572
+ },
5573
+ relationships: {
5574
+ assistant: {
5575
+ data: { type: Modules.Assistant.name, id: data.assistantId }
5576
+ }
5577
+ }
5578
+ },
5579
+ included: []
5580
+ };
5581
+ }
5582
+ static buildOptimistic(params) {
5583
+ const msg = new _AssistantMessage();
5584
+ const jsonApi = {
5585
+ id: `tmp-${crypto.randomUUID()}`,
5586
+ type: Modules.AssistantMessage.name,
5587
+ attributes: {
5588
+ role: "user",
5589
+ content: params.content,
5590
+ position: params.position
5591
+ }
5592
+ };
5593
+ if (params.assistantId) {
5594
+ jsonApi.relationships = {
5595
+ assistant: { data: { type: Modules.Assistant.name, id: params.assistantId } }
5596
+ };
5597
+ }
5598
+ msg.rehydrate({ jsonApi, included: [] });
5599
+ return msg;
5600
+ }
5601
+ };
5602
+
5603
+ // src/features/assistant-message/AssistantMessageModule.ts
5604
+ var AssistantMessageModule = /* @__PURE__ */ __name((factory) => factory({
5605
+ pageUrl: "/assistant-messages",
5606
+ name: "assistant-messages",
5607
+ model: AssistantMessage,
5608
+ moduleId: "5b2e10e4-3a01-4a59-9f0f-3c4a6c6a8e11",
5609
+ icon: MessageSquareIcon,
5610
+ inclusions: {
5611
+ lists: {
5612
+ fields: [
5613
+ createJsonApiInclusion("assistant-messages", [
5614
+ `role`,
5615
+ `content`,
5616
+ `position`,
5617
+ `suggestedQuestions`,
5618
+ `inputTokens`,
5619
+ `outputTokens`,
5620
+ `references`
5621
+ ])
5622
+ ]
5623
+ }
5624
+ }
5625
+ }), "AssistantMessageModule");
5626
+
5627
+ // src/features/assistant-message/data/AssistantMessageService.ts
5628
+ var AssistantMessageService = class extends AbstractService {
5629
+ static {
5630
+ __name(this, "AssistantMessageService");
5631
+ }
5632
+ static async findByAssistant(params) {
5633
+ const endpoint = new EndpointCreator({
5634
+ endpoint: Modules.Assistant,
5635
+ id: params.assistantId,
5636
+ childEndpoint: Modules.AssistantMessage
5637
+ });
5638
+ return this.callApi({
5639
+ type: Modules.AssistantMessage,
5640
+ method: "GET" /* GET */,
5641
+ endpoint: endpoint.generate(),
5642
+ next: params.next
5643
+ });
5644
+ }
5645
+ static async findOne(params) {
5646
+ return this.callApi({
5647
+ type: Modules.AssistantMessage,
5648
+ method: "GET" /* GET */,
5649
+ endpoint: new EndpointCreator({
5650
+ endpoint: Modules.AssistantMessage,
5651
+ id: params.id
5652
+ }).generate()
5653
+ });
5654
+ }
5655
+ static async delete(params) {
5656
+ await this.callApi({
5657
+ type: Modules.AssistantMessage,
5658
+ method: "DELETE" /* DELETE */,
5659
+ endpoint: new EndpointCreator({
5660
+ endpoint: Modules.AssistantMessage,
5661
+ id: params.id
5662
+ }).generate()
5663
+ });
5664
+ }
5665
+ };
5666
+
5371
5667
  // src/features/feature/data/feature.ts
5372
5668
  var Feature = class extends AbstractApiData {
5373
5669
  static {
@@ -7113,6 +7409,12 @@ export {
7113
7409
  HowToModule,
7114
7410
  HowToFields,
7115
7411
  HowToService,
7412
+ Assistant,
7413
+ AssistantModule,
7414
+ AssistantService,
7415
+ AssistantMessage,
7416
+ AssistantMessageModule,
7417
+ AssistantMessageService,
7116
7418
  Feature,
7117
7419
  FeatureService,
7118
7420
  FeatureModule,
@@ -7160,4 +7462,4 @@ export {
7160
7462
  AuditLogService,
7161
7463
  AuditLogModule
7162
7464
  };
7163
- //# sourceMappingURL=chunk-XI35ALWY.mjs.map
7465
+ //# sourceMappingURL=chunk-I65SSQ5Z.mjs.map