@jskit-ai/assistant-core 0.1.34 → 0.1.36

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,7 @@
1
1
  export default Object.freeze({
2
2
  packageVersion: 1,
3
3
  packageId: "@jskit-ai/assistant-core",
4
- version: "0.1.34",
4
+ version: "0.1.36",
5
5
  kind: "runtime",
6
6
  description: "Reusable assistant client/server/shared primitives without surface-specific routes or settings ownership.",
7
7
  dependsOn: [
@@ -47,11 +47,11 @@ export default Object.freeze({
47
47
  mutations: {
48
48
  dependencies: {
49
49
  runtime: {
50
- "@jskit-ai/http-runtime": "0.1.57",
51
- "@jskit-ai/kernel": "0.1.58",
52
- "@jskit-ai/resource-core": "0.1.3",
53
- "@jskit-ai/resource-crud-core": "0.1.3",
54
- "@jskit-ai/users-core": "0.1.68",
50
+ "@jskit-ai/http-runtime": "0.1.59",
51
+ "@jskit-ai/kernel": "0.1.60",
52
+ "@jskit-ai/resource-core": "0.1.5",
53
+ "@jskit-ai/resource-crud-core": "0.1.5",
54
+ "@jskit-ai/users-core": "0.1.70",
55
55
  "@tanstack/vue-query": "^5.90.5",
56
56
  "dompurify": "^3.3.3",
57
57
  "json-rest-schema": "1.x.x",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant-core",
3
- "version": "0.1.34",
3
+ "version": "0.1.36",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "test": "node --test"
@@ -11,12 +11,12 @@
11
11
  "./shared": "./src/shared/index.js"
12
12
  },
13
13
  "dependencies": {
14
- "@jskit-ai/database-runtime": "0.1.58",
15
- "@jskit-ai/http-runtime": "0.1.57",
16
- "@jskit-ai/kernel": "0.1.58",
17
- "@jskit-ai/resource-crud-core": "0.1.3",
18
- "@jskit-ai/resource-core": "0.1.3",
19
- "@jskit-ai/users-core": "0.1.68",
14
+ "@jskit-ai/database-runtime": "0.1.60",
15
+ "@jskit-ai/http-runtime": "0.1.59",
16
+ "@jskit-ai/kernel": "0.1.60",
17
+ "@jskit-ai/resource-crud-core": "0.1.5",
18
+ "@jskit-ai/resource-core": "0.1.5",
19
+ "@jskit-ai/users-core": "0.1.70",
20
20
  "@tanstack/vue-query": "^5.90.5",
21
21
  "dompurify": "^3.3.3",
22
22
  "json-rest-schema": "1.x.x",
@@ -1,5 +1,9 @@
1
1
  import { appendQueryString } from "@jskit-ai/kernel/shared/support";
2
2
  import {
3
+ ASSISTANT_CONVERSATIONS_TRANSPORT,
4
+ ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT,
5
+ ASSISTANT_SETTINGS_TRANSPORT,
6
+ ASSISTANT_SETTINGS_UPDATE_TRANSPORT,
3
7
  ASSISTANT_STREAM_EVENT_TYPES,
4
8
  normalizeAssistantStreamEventType
5
9
  } from "../../shared/index.js";
@@ -114,7 +118,10 @@ function createAssistantApi({ request, requestStream, resolveBasePath, resolveSu
114
118
 
115
119
  return request(
116
120
  appendQueryString(`${basePath}/conversations`, params.toString()),
117
- requestHeaders ? { headers: requestHeaders } : {}
121
+ {
122
+ ...(requestHeaders ? { headers: requestHeaders } : {}),
123
+ transport: ASSISTANT_CONVERSATIONS_TRANSPORT
124
+ }
118
125
  );
119
126
  },
120
127
 
@@ -128,7 +135,10 @@ function createAssistantApi({ request, requestStream, resolveBasePath, resolveSu
128
135
 
129
136
  return request(
130
137
  appendQueryString(`${basePath}/conversations/${encodedConversationId}/messages`, params.toString()),
131
- requestHeaders ? { headers: requestHeaders } : {}
138
+ {
139
+ ...(requestHeaders ? { headers: requestHeaders } : {}),
140
+ transport: ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT
141
+ }
132
142
  );
133
143
  },
134
144
 
@@ -138,7 +148,10 @@ function createAssistantApi({ request, requestStream, resolveBasePath, resolveSu
138
148
 
139
149
  return request(
140
150
  `${basePath}/settings`,
141
- requestHeaders ? { headers: requestHeaders } : {}
151
+ {
152
+ ...(requestHeaders ? { headers: requestHeaders } : {}),
153
+ transport: ASSISTANT_SETTINGS_TRANSPORT
154
+ }
142
155
  );
143
156
  },
144
157
 
@@ -151,7 +164,8 @@ function createAssistantApi({ request, requestStream, resolveBasePath, resolveSu
151
164
  {
152
165
  method: "PATCH",
153
166
  ...(requestHeaders ? { headers: requestHeaders } : {}),
154
- body: payload
167
+ body: payload,
168
+ transport: ASSISTANT_SETTINGS_UPDATE_TRANSPORT
155
169
  }
156
170
  );
157
171
  }
@@ -279,6 +279,8 @@ const conversationMessagesListOutputSchema = createSchema({
279
279
  }
280
280
  });
281
281
 
282
+ const assistantConversationOutputValidator = createSchemaDefinition(conversationRecordSchema, "replace");
283
+
282
284
  const assistantResource = defineResource({
283
285
  namespace: "assistant",
284
286
  operations: {
@@ -303,5 +305,6 @@ const assistantResource = defineResource({
303
305
  export {
304
306
  MAX_INPUT_CHARS,
305
307
  MAX_HISTORY_MESSAGES,
306
- assistantResource
308
+ assistantResource,
309
+ assistantConversationOutputValidator
307
310
  };
@@ -28,7 +28,8 @@ export {
28
28
  export {
29
29
  MAX_INPUT_CHARS,
30
30
  MAX_HISTORY_MESSAGES,
31
- assistantResource
31
+ assistantResource,
32
+ assistantConversationOutputValidator
32
33
  } from "./assistantResource.js";
33
34
 
34
35
  export {
@@ -36,6 +37,13 @@ export {
36
37
  assistantConfigResource
37
38
  } from "./assistantSettingsResource.js";
38
39
 
40
+ export {
41
+ ASSISTANT_SETTINGS_TRANSPORT,
42
+ ASSISTANT_SETTINGS_UPDATE_TRANSPORT,
43
+ ASSISTANT_CONVERSATIONS_TRANSPORT,
44
+ ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT
45
+ } from "./jsonApiTransports.js";
46
+
39
47
  export { assistantSettingsEvents } from "./settingsEvents.js";
40
48
 
41
49
  export {
@@ -0,0 +1,31 @@
1
+ import { deepFreeze } from "@jskit-ai/kernel/shared/support/deepFreeze";
2
+
3
+ const ASSISTANT_SETTINGS_TRANSPORT = deepFreeze({
4
+ kind: "jsonapi-resource",
5
+ responseType: "assistant-settings",
6
+ responseKind: "record"
7
+ });
8
+
9
+ const ASSISTANT_SETTINGS_UPDATE_TRANSPORT = deepFreeze({
10
+ ...ASSISTANT_SETTINGS_TRANSPORT,
11
+ requestType: "assistant-settings"
12
+ });
13
+
14
+ const ASSISTANT_CONVERSATIONS_TRANSPORT = deepFreeze({
15
+ kind: "jsonapi-resource",
16
+ responseType: "assistant-conversations",
17
+ responseKind: "collection"
18
+ });
19
+
20
+ const ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT = deepFreeze({
21
+ kind: "jsonapi-resource",
22
+ responseType: "assistant-conversation-messages",
23
+ responseKind: "record"
24
+ });
25
+
26
+ export {
27
+ ASSISTANT_SETTINGS_TRANSPORT,
28
+ ASSISTANT_SETTINGS_UPDATE_TRANSPORT,
29
+ ASSISTANT_CONVERSATIONS_TRANSPORT,
30
+ ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT
31
+ };
@@ -1,19 +1,31 @@
1
1
  import test from "node:test";
2
2
  import assert from "node:assert/strict";
3
3
  import { createAssistantApi } from "../src/client/lib/assistantApi.js";
4
+ import {
5
+ ASSISTANT_CONVERSATIONS_TRANSPORT,
6
+ ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT,
7
+ ASSISTANT_SETTINGS_TRANSPORT,
8
+ ASSISTANT_SETTINGS_UPDATE_TRANSPORT
9
+ } from "../src/shared/index.js";
4
10
 
5
11
  test("assistant api forwards normalized surface header on requests", async () => {
6
12
  const observed = {
7
13
  stream: null,
8
14
  list: null,
9
- messages: null
15
+ messages: null,
16
+ settingsRead: null,
17
+ settingsUpdate: null
10
18
  };
11
19
 
12
20
  const api = createAssistantApi({
13
21
  resolveBasePath: () => "/api/assistant",
14
22
  resolveSurfaceId: () => "AdMiN",
15
23
  async request(url, options = {}) {
16
- if (url.includes("/messages")) {
24
+ if (url.endsWith("/settings") && options?.method === "PATCH") {
25
+ observed.settingsUpdate = { url, options };
26
+ } else if (url.endsWith("/settings")) {
27
+ observed.settingsRead = { url, options };
28
+ } else if (url.includes("/messages")) {
17
29
  observed.messages = { url, options };
18
30
  } else {
19
31
  observed.list = { url, options };
@@ -37,10 +49,20 @@ test("assistant api forwards normalized surface header on requests", async () =>
37
49
  page: 1,
38
50
  pageSize: 5
39
51
  });
52
+ await api.getSettings();
53
+ await api.updateSettings({
54
+ systemPrompt: "Be concise."
55
+ });
40
56
 
41
57
  assert.equal(observed.stream?.options?.headers?.["x-jskit-surface"], "admin");
42
58
  assert.equal(observed.list?.options?.headers?.["x-jskit-surface"], "admin");
43
59
  assert.equal(observed.messages?.options?.headers?.["x-jskit-surface"], "admin");
60
+ assert.equal(observed.settingsRead?.options?.headers?.["x-jskit-surface"], "admin");
61
+ assert.equal(observed.settingsUpdate?.options?.headers?.["x-jskit-surface"], "admin");
62
+ assert.deepEqual(observed.list?.options?.transport, ASSISTANT_CONVERSATIONS_TRANSPORT);
63
+ assert.deepEqual(observed.messages?.options?.transport, ASSISTANT_CONVERSATION_MESSAGES_TRANSPORT);
64
+ assert.deepEqual(observed.settingsRead?.options?.transport, ASSISTANT_SETTINGS_TRANSPORT);
65
+ assert.deepEqual(observed.settingsUpdate?.options?.transport, ASSISTANT_SETTINGS_UPDATE_TRANSPORT);
44
66
  });
45
67
 
46
68
  test("assistant api omits surface header when surface id is empty", async () => {