@jskit-ai/assistant 0.1.25 → 0.1.27

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.
@@ -1,7 +1,8 @@
1
1
  export default Object.freeze({
2
2
  packageVersion: 1,
3
3
  packageId: "@jskit-ai/assistant",
4
- version: "0.1.25",
4
+ version: "0.1.27",
5
+ kind: "runtime",
5
6
  description: "Unified assistant module with streaming chat, transcript persistence, service-aware tool execution, and workspace UI.",
6
7
  options: {
7
8
  "ai-provider": {
@@ -93,11 +94,10 @@ export default Object.freeze({
93
94
  ],
94
95
  containerTokens: {
95
96
  server: [
96
- "assistant.chat.service",
97
- "assistant.settings.service",
98
- "assistant.transcript.service",
97
+ "assistant.ai.client",
99
98
  "assistant.conversation.repository",
100
99
  "assistant.message.repository",
100
+ "assistant.service.tool-catalog",
101
101
  "assistant.settings.repository"
102
102
  ],
103
103
  client: [
@@ -110,14 +110,14 @@ export default Object.freeze({
110
110
  mutations: {
111
111
  dependencies: {
112
112
  runtime: {
113
- "@jskit-ai/assistant": "0.1.25",
114
- "@jskit-ai/auth-core": "0.1.16",
115
- "@jskit-ai/database-runtime": "0.1.17",
116
- "@jskit-ai/http-runtime": "0.1.16",
117
- "@jskit-ai/kernel": "0.1.17",
118
- "@jskit-ai/realtime": "0.1.16",
119
- "@jskit-ai/users-core": "0.1.23",
120
- "@jskit-ai/users-web": "0.1.27",
113
+ "@jskit-ai/assistant": "0.1.27",
114
+ "@jskit-ai/auth-core": "0.1.18",
115
+ "@jskit-ai/database-runtime": "0.1.19",
116
+ "@jskit-ai/http-runtime": "0.1.18",
117
+ "@jskit-ai/kernel": "0.1.19",
118
+ "@jskit-ai/realtime": "0.1.18",
119
+ "@jskit-ai/users-core": "0.1.28",
120
+ "@jskit-ai/users-web": "0.1.33",
121
121
  "@tanstack/vue-query": "^5.90.5",
122
122
  "dompurify": "^3.3.3",
123
123
  "marked": "^17.0.4",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant",
3
- "version": "0.1.25",
3
+ "version": "0.1.27",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "test": "node --test"
@@ -8,19 +8,18 @@
8
8
  "exports": {
9
9
  "./client": "./src/client/index.js",
10
10
  "./server/AssistantServiceProvider": "./src/server/AssistantServiceProvider.js",
11
- "./server/diTokens": "./src/server/diTokens.js",
12
11
  "./server/actionIds": "./src/server/actionIds.js",
13
12
  "./shared": "./src/shared/index.js"
14
13
  },
15
14
  "dependencies": {
16
- "@jskit-ai/auth-core": "0.1.16",
17
- "@jskit-ai/database-runtime": "0.1.17",
18
- "@jskit-ai/http-runtime": "0.1.16",
19
- "@jskit-ai/kernel": "0.1.17",
20
- "@jskit-ai/realtime": "0.1.16",
21
- "@jskit-ai/shell-web": "0.1.16",
22
- "@jskit-ai/users-core": "0.1.23",
23
- "@jskit-ai/users-web": "0.1.27",
15
+ "@jskit-ai/auth-core": "0.1.18",
16
+ "@jskit-ai/database-runtime": "0.1.19",
17
+ "@jskit-ai/http-runtime": "0.1.18",
18
+ "@jskit-ai/kernel": "0.1.19",
19
+ "@jskit-ai/realtime": "0.1.18",
20
+ "@jskit-ai/shell-web": "0.1.18",
21
+ "@jskit-ai/users-core": "0.1.28",
22
+ "@jskit-ai/users-web": "0.1.33",
24
23
  "@tanstack/vue-query": "^5.90.5",
25
24
  "dompurify": "^3.3.3",
26
25
  "marked": "^17.0.4",
@@ -27,7 +27,6 @@ import { validateOperationSection } from "@jskit-ai/http-runtime/shared/validato
27
27
  import { useAddEdit } from "@jskit-ai/users-web/client/composables/useAddEdit";
28
28
  import AssistantSettingsFormCard from "./AssistantSettingsFormCard.vue";
29
29
  import { assistantConsoleSettingsResource } from "../../shared/assistantSettingsResource.js";
30
- import { ASSISTANT_CONSOLE_SETTINGS_CHANGED_EVENT } from "../../shared/settingsEvents.js";
31
30
 
32
31
  const form = reactive({
33
32
  workspaceSurfacePrompt: ""
@@ -47,7 +46,7 @@ const addEdit = useAddEdit({
47
46
  fallbackSaveError: "Unable to update assistant console settings.",
48
47
  fieldErrorKeys: ["workspaceSurfacePrompt"],
49
48
  realtime: {
50
- event: ASSISTANT_CONSOLE_SETTINGS_CHANGED_EVENT
49
+ event: "assistant.console.settings.changed"
51
50
  },
52
51
  model: form,
53
52
  parseInput: (rawPayload) =>
@@ -28,7 +28,6 @@ import { useAddEdit } from "@jskit-ai/users-web/client/composables/useAddEdit";
28
28
  import { matchesCurrentWorkspaceEvent } from "@jskit-ai/users-web/client/support/realtimeWorkspace";
29
29
  import AssistantSettingsFormCard from "./AssistantSettingsFormCard.vue";
30
30
  import { assistantWorkspaceSettingsResource } from "../../shared/assistantSettingsResource.js";
31
- import { ASSISTANT_WORKSPACE_SETTINGS_CHANGED_EVENT } from "../../shared/settingsEvents.js";
32
31
 
33
32
  const form = reactive({
34
33
  appSurfacePrompt: ""
@@ -47,7 +46,7 @@ const addEdit = useAddEdit({
47
46
  fallbackSaveError: "Unable to update assistant workspace settings.",
48
47
  fieldErrorKeys: ["appSurfacePrompt"],
49
48
  realtime: {
50
- event: ASSISTANT_WORKSPACE_SETTINGS_CHANGED_EVENT,
49
+ event: "assistant.workspace.settings.changed",
51
50
  matches: ({ payload = {}, routeContext = {} } = {}) =>
52
51
  matchesCurrentWorkspaceEvent(payload, routeContext?.workspaceSlugFromRoute?.value)
53
52
  },
@@ -9,7 +9,6 @@ import { usePagedCollection } from "@jskit-ai/users-web/client/composables/usePa
9
9
  import {
10
10
  MAX_INPUT_CHARS,
11
11
  ASSISTANT_STREAM_EVENT_TYPES,
12
- ASSISTANT_TRANSCRIPT_CHANGED_EVENT,
13
12
  MAX_HISTORY_MESSAGES,
14
13
  assistantConversationMessagesQueryKey,
15
14
  assistantConversationsListQueryKey,
@@ -27,7 +26,6 @@ const DEFAULT_HISTORY_PAGE_SIZE = 20;
27
26
  const DEFAULT_MESSAGES_PAGE_SIZE = 200;
28
27
  const DEFAULT_HISTORY_STALE_TIME_MS = 60_000;
29
28
  const RESTORE_MESSAGES_PAGE = 1;
30
- const ACTIVE_CONVERSATION_STORAGE_PREFIX = "assistant.activeConversationId";
31
29
 
32
30
  function toNonNegativeInteger(value, fallback = 0) {
33
31
  const parsed = Number(value);
@@ -44,7 +42,7 @@ function buildActiveConversationStorageKey(workspaceSlug) {
44
42
  return "";
45
43
  }
46
44
 
47
- return `${ACTIVE_CONVERSATION_STORAGE_PREFIX}:${normalizedWorkspaceSlug}`;
45
+ return `assistant.activeConversationId:${normalizedWorkspaceSlug}`;
48
46
  }
49
47
 
50
48
  function readStoredActiveConversationId(workspaceSlug) {
@@ -701,7 +699,7 @@ function useAssistantWorkspaceRuntime({ api = null } = {}) {
701
699
  }
702
700
 
703
701
  useRealtimeEvent({
704
- event: ASSISTANT_TRANSCRIPT_CHANGED_EVENT,
702
+ event: "assistant.transcript.changed",
705
703
  enabled: computed(() => hasWorkspaceScope.value),
706
704
  matches({ payload }) {
707
705
  if (!payload || typeof payload !== "object") {
@@ -6,7 +6,5 @@ export { useAssistantWorkspaceRuntime } from "./composables/useAssistantWorkspac
6
6
  export { assistantHttpClient } from "./lib/assistantHttpClient.js";
7
7
  export { createAssistantWorkspaceApi, buildStreamEventError } from "./lib/assistantApi.js";
8
8
  export {
9
- AssistantWebClientProvider,
10
- ASSISTANT_CONSOLE_SETTINGS_ELEMENT_TOKEN,
11
- ASSISTANT_WORKSPACE_SETTINGS_ELEMENT_TOKEN
9
+ AssistantWebClientProvider
12
10
  } from "./providers/AssistantWebClientProvider.js";
@@ -1,9 +1,6 @@
1
1
  import AssistantConsoleSettingsClientElement from "../components/AssistantConsoleSettingsClientElement.vue";
2
2
  import AssistantWorkspaceSettingsClientElement from "../components/AssistantWorkspaceSettingsClientElement.vue";
3
3
 
4
- const ASSISTANT_CONSOLE_SETTINGS_ELEMENT_TOKEN = "assistant.web.console-settings.element";
5
- const ASSISTANT_WORKSPACE_SETTINGS_ELEMENT_TOKEN = "assistant.web.workspace-settings.element";
6
-
7
4
  class AssistantWebClientProvider {
8
5
  static id = "assistant.web.client";
9
6
  static dependsOn = ["users.web.client"];
@@ -13,13 +10,11 @@ class AssistantWebClientProvider {
13
10
  throw new Error("AssistantWebClientProvider requires application singleton().");
14
11
  }
15
12
 
16
- app.singleton(ASSISTANT_CONSOLE_SETTINGS_ELEMENT_TOKEN, () => AssistantConsoleSettingsClientElement);
17
- app.singleton(ASSISTANT_WORKSPACE_SETTINGS_ELEMENT_TOKEN, () => AssistantWorkspaceSettingsClientElement);
13
+ app.singleton("assistant.web.console-settings.element", () => AssistantConsoleSettingsClientElement);
14
+ app.singleton("assistant.web.workspace-settings.element", () => AssistantWorkspaceSettingsClientElement);
18
15
  }
19
16
  }
20
17
 
21
18
  export {
22
- AssistantWebClientProvider,
23
- ASSISTANT_CONSOLE_SETTINGS_ELEMENT_TOKEN,
24
- ASSISTANT_WORKSPACE_SETTINGS_ELEMENT_TOKEN
19
+ AssistantWebClientProvider
25
20
  };
@@ -1,4 +1,3 @@
1
- import { KERNEL_TOKENS } from "@jskit-ai/kernel/shared/support/tokens";
2
1
  import { withActionDefaults } from "@jskit-ai/kernel/shared/actions";
3
2
  import { normalizeObject, normalizeText } from "@jskit-ai/kernel/shared/support/normalize";
4
3
  import { createRepository as createConversationsRepository } from "./repositories/conversationsRepository.js";
@@ -18,18 +17,7 @@ import { createServiceToolCatalog } from "./lib/serviceToolCatalog.js";
18
17
  import { normalizeOptionalHttpUrl } from "./lib/providers/common.js";
19
18
  import { assistantActions } from "./actions.js";
20
19
  import { registerRoutes } from "./registerRoutes.js";
21
- import {
22
- ASSISTANT_CONVERSATIONS_REPOSITORY_TOKEN,
23
- ASSISTANT_MESSAGES_REPOSITORY_TOKEN,
24
- ASSISTANT_SETTINGS_REPOSITORY_TOKEN,
25
- ASSISTANT_TRANSCRIPT_SERVICE_TOKEN,
26
- ASSISTANT_CHAT_SERVICE_TOKEN,
27
- ASSISTANT_SETTINGS_SERVICE_TOKEN,
28
- ASSISTANT_AI_CLIENT_TOKEN,
29
- ASSISTANT_SERVICE_TOOL_CATALOG_TOKEN
30
- } from "./diTokens.js";
31
-
32
- const ASSISTANT_PROVIDER_ID = ASSISTANT_CHAT_SERVICE_TOKEN;
20
+
33
21
  const DEFAULT_AI_TIMEOUT_MS = 120_000;
34
22
 
35
23
  function normalizeInteger(value, fallback) {
@@ -48,7 +36,7 @@ function normalizeStringArray(value) {
48
36
 
49
37
  function resolveAssistantConfig(scope) {
50
38
  const appConfig = scope.has("appConfig") ? normalizeObject(scope.make("appConfig")) : {};
51
- const env = scope.has(KERNEL_TOKENS.Env) ? normalizeObject(scope.make(KERNEL_TOKENS.Env)) : {};
39
+ const env = scope.has("jskit.env") ? normalizeObject(scope.make("jskit.env")) : {};
52
40
  const assistantConfig = normalizeObject(appConfig.assistant);
53
41
 
54
42
  const provider = normalizeText(env.AI_PROVIDER || assistantConfig.provider).toLowerCase() || "openai";
@@ -78,7 +66,7 @@ function resolveAssistantConfig(scope) {
78
66
  }
79
67
 
80
68
  class AssistantServiceProvider {
81
- static id = ASSISTANT_PROVIDER_ID;
69
+ static id = "assistant.chat.service";
82
70
 
83
71
  static dependsOn = ["runtime.actions", "runtime.database", "auth.policy.fastify", "users.core", "runtime.realtime"];
84
72
 
@@ -94,26 +82,26 @@ class AssistantServiceProvider {
94
82
 
95
83
  const config = resolveAssistantConfig(app);
96
84
 
97
- app.singleton(ASSISTANT_CONVERSATIONS_REPOSITORY_TOKEN, (scope) => {
98
- const knex = scope.make(KERNEL_TOKENS.Knex);
85
+ app.singleton("assistant.conversation.repository", (scope) => {
86
+ const knex = scope.make("jskit.database.knex");
99
87
  return createConversationsRepository(knex);
100
88
  });
101
89
 
102
- app.singleton(ASSISTANT_MESSAGES_REPOSITORY_TOKEN, (scope) => {
103
- const knex = scope.make(KERNEL_TOKENS.Knex);
90
+ app.singleton("assistant.message.repository", (scope) => {
91
+ const knex = scope.make("jskit.database.knex");
104
92
  return createMessagesRepository(knex);
105
93
  });
106
94
 
107
- app.singleton(ASSISTANT_SETTINGS_REPOSITORY_TOKEN, (scope) => {
108
- const knex = scope.make(KERNEL_TOKENS.Knex);
95
+ app.singleton("assistant.settings.repository", (scope) => {
96
+ const knex = scope.make("jskit.database.knex");
109
97
  return createAssistantSettingsRepository(knex);
110
98
  });
111
99
 
112
- app.singleton(ASSISTANT_AI_CLIENT_TOKEN, () => {
100
+ app.singleton("assistant.ai.client", () => {
113
101
  return createAiClient(config.ai);
114
102
  });
115
103
 
116
- app.singleton(ASSISTANT_SERVICE_TOOL_CATALOG_TOKEN, (scope) => {
104
+ app.singleton("assistant.service.tool-catalog", (scope) => {
117
105
  const skipPrefixes = ["assistant.", ...config.toolSkipActionPrefixes];
118
106
 
119
107
  return createServiceToolCatalog(scope, {
@@ -123,11 +111,11 @@ class AssistantServiceProvider {
123
111
  });
124
112
 
125
113
  app.service(
126
- ASSISTANT_TRANSCRIPT_SERVICE_TOKEN,
114
+ "assistant.transcript.service",
127
115
  (scope) =>
128
116
  createTranscriptService({
129
- conversationsRepository: scope.make(ASSISTANT_CONVERSATIONS_REPOSITORY_TOKEN),
130
- messagesRepository: scope.make(ASSISTANT_MESSAGES_REPOSITORY_TOKEN)
117
+ conversationsRepository: scope.make("assistant.conversation.repository"),
118
+ messagesRepository: scope.make("assistant.message.repository")
131
119
  }),
132
120
  {
133
121
  events: transcriptServiceEvents
@@ -135,10 +123,10 @@ class AssistantServiceProvider {
135
123
  );
136
124
 
137
125
  app.service(
138
- ASSISTANT_SETTINGS_SERVICE_TOKEN,
126
+ "assistant.settings.service",
139
127
  (scope) =>
140
128
  createAssistantSettingsService({
141
- assistantSettingsRepository: scope.make(ASSISTANT_SETTINGS_REPOSITORY_TOKEN),
129
+ assistantSettingsRepository: scope.make("assistant.settings.repository"),
142
130
  consoleService: scope.make("consoleService")
143
131
  }),
144
132
  {
@@ -147,13 +135,13 @@ class AssistantServiceProvider {
147
135
  );
148
136
 
149
137
  app.service(
150
- ASSISTANT_CHAT_SERVICE_TOKEN,
138
+ "assistant.chat.service",
151
139
  (scope) =>
152
140
  createChatService({
153
- aiClient: scope.make(ASSISTANT_AI_CLIENT_TOKEN),
154
- transcriptService: scope.make(ASSISTANT_TRANSCRIPT_SERVICE_TOKEN),
155
- serviceToolCatalog: scope.make(ASSISTANT_SERVICE_TOOL_CATALOG_TOKEN),
156
- assistantSettingsService: scope.make(ASSISTANT_SETTINGS_SERVICE_TOKEN)
141
+ aiClient: scope.make("assistant.ai.client"),
142
+ transcriptService: scope.make("assistant.transcript.service"),
143
+ serviceToolCatalog: scope.make("assistant.service.tool-catalog"),
144
+ assistantSettingsService: scope.make("assistant.settings.service")
157
145
  }),
158
146
  {
159
147
  events: {}
@@ -164,8 +152,8 @@ class AssistantServiceProvider {
164
152
  withActionDefaults(assistantActions, {
165
153
  domain: "assistant",
166
154
  dependencies: {
167
- chatService: ASSISTANT_CHAT_SERVICE_TOKEN,
168
- assistantSettingsService: ASSISTANT_SETTINGS_SERVICE_TOKEN
155
+ chatService: "assistant.chat.service",
156
+ assistantSettingsService: "assistant.settings.service"
169
157
  }
170
158
  })
171
159
  );
@@ -13,7 +13,7 @@ import {
13
13
 
14
14
  const DEFAULT_ANTHROPIC_MODEL = "claude-3-5-sonnet-latest";
15
15
  const DEFAULT_ANTHROPIC_BASE_URL = "https://api.anthropic.com";
16
- const DEFAULT_ANTHROPIC_MAX_TOKENS = 4096;
16
+ const DEFAULT_ANTHROPIC_MAX_OUTPUT_LIMIT = 4096;
17
17
  const DEFAULT_ANTHROPIC_VERSION = "2023-06-01";
18
18
 
19
19
  function normalizeTemperature(value, fallback = 0.2) {
@@ -250,7 +250,7 @@ async function fetchAnthropicMessage({
250
250
 
251
251
  const requestPayload = {
252
252
  model,
253
- max_tokens: DEFAULT_ANTHROPIC_MAX_TOKENS,
253
+ max_tokens: DEFAULT_ANTHROPIC_MAX_OUTPUT_LIMIT,
254
254
  messages,
255
255
  temperature: normalizeTemperature(temperature)
256
256
  };
@@ -1,5 +1,4 @@
1
1
  import { withStandardErrorResponses } from "@jskit-ai/http-runtime/shared/validators/errorResponses";
2
- import { KERNEL_TOKENS } from "@jskit-ai/kernel/shared/support/tokens";
3
2
  import { normalizeText } from "@jskit-ai/kernel/shared/support/normalize";
4
3
  import {
5
4
  workspaceSlugParamsValidator
@@ -50,7 +49,7 @@ function registerRoutes(app) {
50
49
  throw new Error("registerRoutes requires application make().");
51
50
  }
52
51
 
53
- const router = app.make(KERNEL_TOKENS.HttpRouter);
52
+ const router = app.make("jskit.http.router");
54
53
  const visibility = "workspace";
55
54
  const workspaceRouteSurfaceConfig = resolveAssistantWorkspaceRouteSurfaceConfig(app);
56
55
  const workspaceRouteSurfaceId = workspaceRouteSurfaceConfig.fallbackSurfaceId;
@@ -115,7 +114,7 @@ function registerRoutes(app) {
115
114
 
116
115
  router.register(
117
116
  "GET",
118
- "/api/w/:workspaceSlug/workspace/settings/assistant",
117
+ "/api/w/:workspaceSlug/settings/assistant",
119
118
  {
120
119
  auth: "required",
121
120
  surface: workspaceRouteSurfaceId,
@@ -146,7 +145,7 @@ function registerRoutes(app) {
146
145
 
147
146
  router.register(
148
147
  "PATCH",
149
- "/api/w/:workspaceSlug/workspace/settings/assistant",
148
+ "/api/w/:workspaceSlug/settings/assistant",
150
149
  {
151
150
  auth: "required",
152
151
  surface: workspaceRouteSurfaceId,
@@ -2,10 +2,6 @@ import { parsePositiveInteger } from "@jskit-ai/kernel/server/runtime";
2
2
  import { normalizeObjectInput } from "@jskit-ai/kernel/shared/validators";
3
3
  import { normalizeText } from "@jskit-ai/kernel/shared/support/normalize";
4
4
  import { pickOwnProperties } from "@jskit-ai/kernel/shared/support";
5
- import {
6
- ASSISTANT_CONSOLE_SETTINGS_CHANGED_EVENT,
7
- ASSISTANT_WORKSPACE_SETTINGS_CHANGED_EVENT
8
- } from "../../shared/settingsEvents.js";
9
5
 
10
6
  const serviceEvents = Object.freeze({
11
7
  updateConsoleSettings: Object.freeze([
@@ -16,7 +12,7 @@ const serviceEvents = Object.freeze({
16
12
  operation: "updated",
17
13
  entityId: 1,
18
14
  realtime: Object.freeze({
19
- event: ASSISTANT_CONSOLE_SETTINGS_CHANGED_EVENT,
15
+ event: "assistant.console.settings.changed",
20
16
  audience: "all_users"
21
17
  })
22
18
  })
@@ -29,7 +25,7 @@ const serviceEvents = Object.freeze({
29
25
  operation: "updated",
30
26
  entityId: ({ args }) => args?.[0]?.id || null,
31
27
  realtime: Object.freeze({
32
- event: ASSISTANT_WORKSPACE_SETTINGS_CHANGED_EVENT,
28
+ event: "assistant.workspace.settings.changed",
33
29
  audience: "event_scope",
34
30
  payload: ({ args }) => ({
35
31
  workspaceSlug: String(args?.[0]?.slug || "").trim()
@@ -1,6 +1,5 @@
1
1
  import { AppError, parsePositiveInteger } from "@jskit-ai/kernel/server/runtime";
2
2
  import { normalizeObject, normalizeText } from "@jskit-ai/kernel/shared/support/normalize";
3
- import { ASSISTANT_TRANSCRIPT_CHANGED_EVENT } from "../../shared/streamEvents.js";
4
3
  import { normalizeConversationStatus } from "../../shared/support/conversationStatus.js";
5
4
 
6
5
  const DEFAULT_PAGE_SIZE = 20;
@@ -19,7 +18,7 @@ const serviceEvents = Object.freeze({
19
18
  operation: ({ result }) => (result?.created === true ? "created" : "updated"),
20
19
  entityId: ({ result }) => result?.conversation?.id,
21
20
  realtime: Object.freeze({
22
- event: ASSISTANT_TRANSCRIPT_CHANGED_EVENT,
21
+ event: "assistant.transcript.changed",
23
22
  audience: "event_scope",
24
23
  payload: ({ result }) => ({
25
24
  conversationId: result?.conversation?.id || null
@@ -35,7 +34,7 @@ const serviceEvents = Object.freeze({
35
34
  operation: "updated",
36
35
  entityId: ({ result }) => result?.conversationId,
37
36
  realtime: Object.freeze({
38
- event: ASSISTANT_TRANSCRIPT_CHANGED_EVENT,
37
+ event: "assistant.transcript.changed",
39
38
  audience: "event_scope",
40
39
  payload: ({ result }) => ({
41
40
  conversationId: result?.conversationId || null
@@ -51,7 +50,7 @@ const serviceEvents = Object.freeze({
51
50
  operation: "updated",
52
51
  entityId: ({ result }) => result?.id,
53
52
  realtime: Object.freeze({
54
- event: ASSISTANT_TRANSCRIPT_CHANGED_EVENT,
53
+ event: "assistant.transcript.changed",
55
54
  audience: "event_scope",
56
55
  payload: ({ result }) => ({
57
56
  conversationId: result?.id || null
@@ -15,7 +15,6 @@ export {
15
15
 
16
16
  export {
17
17
  ASSISTANT_STREAM_EVENT_TYPES,
18
- ASSISTANT_TRANSCRIPT_CHANGED_EVENT,
19
18
  normalizeAssistantStreamEventType
20
19
  } from "./streamEvents.js";
21
20
 
@@ -32,8 +31,7 @@ export {
32
31
  } from "./assistantSettingsResource.js";
33
32
 
34
33
  export {
35
- ASSISTANT_CONSOLE_SETTINGS_CHANGED_EVENT,
36
- ASSISTANT_WORKSPACE_SETTINGS_CHANGED_EVENT
34
+ assistantSettingsEvents
37
35
  } from "./settingsEvents.js";
38
36
 
39
37
  export {
@@ -1,7 +1,6 @@
1
- const ASSISTANT_CONSOLE_SETTINGS_CHANGED_EVENT = "assistant.console.settings.changed";
2
- const ASSISTANT_WORKSPACE_SETTINGS_CHANGED_EVENT = "assistant.workspace.settings.changed";
1
+ const assistantSettingsEvents = Object.freeze({
2
+ consoleSettingsChanged: "assistant.console.settings.changed",
3
+ workspaceSettingsChanged: "assistant.workspace.settings.changed"
4
+ });
3
5
 
4
- export {
5
- ASSISTANT_CONSOLE_SETTINGS_CHANGED_EVENT,
6
- ASSISTANT_WORKSPACE_SETTINGS_CHANGED_EVENT
7
- };
6
+ export { assistantSettingsEvents };
@@ -8,7 +8,6 @@ const ASSISTANT_STREAM_EVENT_TYPES = Object.freeze({
8
8
  DONE: "done"
9
9
  });
10
10
 
11
- const ASSISTANT_TRANSCRIPT_CHANGED_EVENT = "assistant.transcript.changed";
12
11
  const STREAM_EVENT_TYPE_SET = new Set(Object.values(ASSISTANT_STREAM_EVENT_TYPES));
13
12
 
14
13
  function normalizeAssistantStreamEventType(value, fallback = "") {
@@ -26,6 +25,5 @@ function normalizeAssistantStreamEventType(value, fallback = "") {
26
25
 
27
26
  export {
28
27
  ASSISTANT_STREAM_EVENT_TYPES,
29
- ASSISTANT_TRANSCRIPT_CHANGED_EVENT,
30
28
  normalizeAssistantStreamEventType
31
29
  };
@@ -1,6 +1,5 @@
1
1
  import assert from "node:assert/strict";
2
2
  import test from "node:test";
3
- import { KERNEL_TOKENS } from "@jskit-ai/kernel/shared/support/tokens";
4
3
  import { registerRoutes } from "../src/server/registerRoutes.js";
5
4
 
6
5
  function createReplyDouble() {
@@ -36,7 +35,7 @@ test("assistant routes build list inputs with explicit query object", async () =
36
35
  };
37
36
  const app = {
38
37
  make(token) {
39
- if (token !== KERNEL_TOKENS.HttpRouter) {
38
+ if (token !== "jskit.http.router") {
40
39
  throw new Error(`Unexpected token: ${String(token)}`);
41
40
  }
42
41
  return router;
@@ -56,12 +55,12 @@ test("assistant routes build list inputs with explicit query object", async () =
56
55
  const workspaceSettingsReadRoute = findRoute(
57
56
  registeredRoutes,
58
57
  "GET",
59
- "/api/w/:workspaceSlug/workspace/settings/assistant"
58
+ "/api/w/:workspaceSlug/settings/assistant"
60
59
  );
61
60
  const workspaceSettingsPatchRoute = findRoute(
62
61
  registeredRoutes,
63
62
  "PATCH",
64
- "/api/w/:workspaceSlug/workspace/settings/assistant"
63
+ "/api/w/:workspaceSlug/settings/assistant"
65
64
  );
66
65
  assert.ok(conversationsRoute);
67
66
  assert.ok(messagesRoute);
@@ -198,7 +197,7 @@ test("assistant workspace routes use workspace default surface and honor x-jskit
198
197
  return token === "appConfig";
199
198
  },
200
199
  make(token) {
201
- if (token === KERNEL_TOKENS.HttpRouter) {
200
+ if (token === "jskit.http.router") {
202
201
  return router;
203
202
  }
204
203
  if (token === "appConfig") {
@@ -230,8 +229,8 @@ test("assistant workspace routes use workspace default surface and honor x-jskit
230
229
  registerRoutes(app);
231
230
 
232
231
  const expectedWorkspaceRoutes = [
233
- ["GET", "/api/w/:workspaceSlug/workspace/settings/assistant"],
234
- ["PATCH", "/api/w/:workspaceSlug/workspace/settings/assistant"],
232
+ ["GET", "/api/w/:workspaceSlug/settings/assistant"],
233
+ ["PATCH", "/api/w/:workspaceSlug/settings/assistant"],
235
234
  ["POST", "/api/w/:workspaceSlug/assistant/chat/stream"],
236
235
  ["GET", "/api/w/:workspaceSlug/assistant/conversations"],
237
236
  ["GET", "/api/w/:workspaceSlug/assistant/conversations/:conversationId/messages"]
@@ -1,19 +0,0 @@
1
- const ASSISTANT_CONVERSATIONS_REPOSITORY_TOKEN = "assistant.conversation.repository";
2
- const ASSISTANT_MESSAGES_REPOSITORY_TOKEN = "assistant.message.repository";
3
- const ASSISTANT_SETTINGS_REPOSITORY_TOKEN = "assistant.settings.repository";
4
- const ASSISTANT_TRANSCRIPT_SERVICE_TOKEN = "assistant.transcript.service";
5
- const ASSISTANT_CHAT_SERVICE_TOKEN = "assistant.chat.service";
6
- const ASSISTANT_SETTINGS_SERVICE_TOKEN = "assistant.settings.service";
7
- const ASSISTANT_AI_CLIENT_TOKEN = "assistant.ai.client";
8
- const ASSISTANT_SERVICE_TOOL_CATALOG_TOKEN = "assistant.service.tool-catalog";
9
-
10
- export {
11
- ASSISTANT_CONVERSATIONS_REPOSITORY_TOKEN,
12
- ASSISTANT_MESSAGES_REPOSITORY_TOKEN,
13
- ASSISTANT_SETTINGS_REPOSITORY_TOKEN,
14
- ASSISTANT_TRANSCRIPT_SERVICE_TOKEN,
15
- ASSISTANT_CHAT_SERVICE_TOKEN,
16
- ASSISTANT_SETTINGS_SERVICE_TOKEN,
17
- ASSISTANT_AI_CLIENT_TOKEN,
18
- ASSISTANT_SERVICE_TOOL_CATALOG_TOKEN
19
- };