@jskit-ai/assistant 0.1.4

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 (57) hide show
  1. package/package.descriptor.mjs +284 -0
  2. package/package.json +31 -0
  3. package/src/client/components/AssistantClientElement.vue +1316 -0
  4. package/src/client/components/AssistantConsoleSettingsClientElement.vue +71 -0
  5. package/src/client/components/AssistantSettingsFormCard.vue +76 -0
  6. package/src/client/components/AssistantWorkspaceClientElement.vue +15 -0
  7. package/src/client/components/AssistantWorkspaceSettingsClientElement.vue +73 -0
  8. package/src/client/composables/useAssistantWorkspaceRuntime.js +789 -0
  9. package/src/client/index.js +12 -0
  10. package/src/client/lib/assistantApi.js +137 -0
  11. package/src/client/lib/assistantHttpClient.js +10 -0
  12. package/src/client/lib/markdownRenderer.js +31 -0
  13. package/src/client/providers/AssistantWebClientProvider.js +25 -0
  14. package/src/server/AssistantServiceProvider.js +179 -0
  15. package/src/server/actionIds.js +11 -0
  16. package/src/server/actions.js +191 -0
  17. package/src/server/diTokens.js +19 -0
  18. package/src/server/lib/aiClient.js +43 -0
  19. package/src/server/lib/ndjson.js +47 -0
  20. package/src/server/lib/providers/anthropicClient.js +375 -0
  21. package/src/server/lib/providers/common.js +158 -0
  22. package/src/server/lib/providers/deepSeekClient.js +22 -0
  23. package/src/server/lib/providers/openAiClient.js +13 -0
  24. package/src/server/lib/providers/openAiCompatibleClient.js +69 -0
  25. package/src/server/lib/resolveWorkspaceSlug.js +24 -0
  26. package/src/server/lib/serviceToolCatalog.js +459 -0
  27. package/src/server/registerRoutes.js +384 -0
  28. package/src/server/repositories/assistantSettingsRepository.js +100 -0
  29. package/src/server/repositories/conversationsRepository.js +244 -0
  30. package/src/server/repositories/messagesRepository.js +154 -0
  31. package/src/server/repositories/repositoryPersistenceUtils.js +63 -0
  32. package/src/server/services/assistantSettingsService.js +153 -0
  33. package/src/server/services/chatService.js +987 -0
  34. package/src/server/services/transcriptService.js +334 -0
  35. package/src/shared/assistantPaths.js +50 -0
  36. package/src/shared/assistantResource.js +323 -0
  37. package/src/shared/assistantSettingsResource.js +214 -0
  38. package/src/shared/index.js +39 -0
  39. package/src/shared/queryKeys.js +69 -0
  40. package/src/shared/settingsEvents.js +7 -0
  41. package/src/shared/streamEvents.js +31 -0
  42. package/src/shared/support/positiveInteger.js +9 -0
  43. package/templates/migrations/assistant_settings_initial.cjs +39 -0
  44. package/templates/migrations/assistant_transcripts_initial.cjs +51 -0
  45. package/templates/src/pages/admin/workspace/assistant/index.vue +7 -0
  46. package/test/aiConfigValidation.test.js +15 -0
  47. package/test/assistantApiSurfaceHeader.test.js +64 -0
  48. package/test/assistantResource.test.js +53 -0
  49. package/test/assistantSettingsResource.test.js +48 -0
  50. package/test/assistantSettingsService.test.js +133 -0
  51. package/test/chatService.test.js +841 -0
  52. package/test/descriptorSurfaceOption.test.js +35 -0
  53. package/test/queryKeys.test.js +41 -0
  54. package/test/resolveWorkspaceSlug.test.js +83 -0
  55. package/test/routeInputContracts.test.js +287 -0
  56. package/test/serviceToolCatalog.test.js +1235 -0
  57. package/test/transcriptService.test.js +175 -0
@@ -0,0 +1,133 @@
1
+ import test from "node:test";
2
+ import assert from "node:assert/strict";
3
+ import { createService } from "../src/server/services/assistantSettingsService.js";
4
+
5
+ function createFixture() {
6
+ const calls = {
7
+ requireConsoleOwner: 0,
8
+ ensureConsoleSettings: 0,
9
+ updateConsoleSettings: [],
10
+ ensureWorkspaceSettings: [],
11
+ updateWorkspaceSettings: []
12
+ };
13
+
14
+ const service = createService({
15
+ consoleService: {
16
+ async requireConsoleOwner() {
17
+ calls.requireConsoleOwner += 1;
18
+ }
19
+ },
20
+ assistantSettingsRepository: {
21
+ async ensureConsoleSettings() {
22
+ calls.ensureConsoleSettings += 1;
23
+ return {
24
+ workspaceSurfacePrompt: "Workspace prompt"
25
+ };
26
+ },
27
+ async updateConsoleSettings(patch = {}) {
28
+ calls.updateConsoleSettings.push({
29
+ ...patch
30
+ });
31
+ return {
32
+ workspaceSurfacePrompt: String(patch.workspaceSurfacePrompt || "")
33
+ };
34
+ },
35
+ async ensureWorkspaceSettings(workspaceId) {
36
+ calls.ensureWorkspaceSettings.push(workspaceId);
37
+ return {
38
+ workspaceId: 7,
39
+ appSurfacePrompt: "App prompt"
40
+ };
41
+ },
42
+ async updateWorkspaceSettings(workspaceId, patch = {}) {
43
+ calls.updateWorkspaceSettings.push({
44
+ workspaceId,
45
+ patch: {
46
+ ...patch
47
+ }
48
+ });
49
+ return {
50
+ workspaceId: 7,
51
+ appSurfacePrompt: String(patch.appSurfacePrompt || "")
52
+ };
53
+ }
54
+ }
55
+ });
56
+
57
+ return {
58
+ service,
59
+ calls
60
+ };
61
+ }
62
+
63
+ test("assistantSettingsService enforces console owner on console settings reads", async () => {
64
+ const { service, calls } = createFixture();
65
+
66
+ const result = await service.getConsoleSettings({
67
+ context: {
68
+ actor: {
69
+ id: 9
70
+ }
71
+ }
72
+ });
73
+
74
+ assert.equal(calls.requireConsoleOwner, 1);
75
+ assert.equal(calls.ensureConsoleSettings, 1);
76
+ assert.deepEqual(result, {
77
+ settings: {
78
+ workspaceSurfacePrompt: "Workspace prompt"
79
+ }
80
+ });
81
+ });
82
+
83
+ test("assistantSettingsService resolves prompts by surface", async () => {
84
+ const { service, calls } = createFixture();
85
+ const workspace = {
86
+ id: 7
87
+ };
88
+
89
+ const appPrompt = await service.resolveSystemPrompt(workspace, {
90
+ surface: "app"
91
+ });
92
+ const adminPrompt = await service.resolveSystemPrompt(workspace, {
93
+ surface: "admin"
94
+ });
95
+
96
+ assert.equal(appPrompt, "App prompt");
97
+ assert.equal(adminPrompt, "Workspace prompt");
98
+ assert.deepEqual(calls.ensureWorkspaceSettings, [7]);
99
+ assert.equal(calls.ensureConsoleSettings, 1);
100
+ });
101
+
102
+ test("assistantSettingsService patch updates are no-ops when prompt keys are omitted", async () => {
103
+ const { service, calls } = createFixture();
104
+ const workspace = {
105
+ id: 7
106
+ };
107
+
108
+ const consoleResult = await service.updateConsoleSettings(
109
+ {},
110
+ {
111
+ context: {
112
+ actor: {
113
+ id: 9
114
+ }
115
+ }
116
+ }
117
+ );
118
+ const workspaceResult = await service.updateWorkspaceSettings(workspace, {});
119
+
120
+ assert.equal(calls.requireConsoleOwner, 1);
121
+ assert.deepEqual(calls.updateConsoleSettings, []);
122
+ assert.deepEqual(calls.updateWorkspaceSettings, []);
123
+ assert.deepEqual(consoleResult, {
124
+ settings: {
125
+ workspaceSurfacePrompt: "Workspace prompt"
126
+ }
127
+ });
128
+ assert.deepEqual(workspaceResult, {
129
+ settings: {
130
+ appSurfacePrompt: "App prompt"
131
+ }
132
+ });
133
+ });