@ykurilov/agent-chat-core 0.64.0 → 0.65.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.
package/dist/index.js CHANGED
@@ -174,7 +174,7 @@ import {
174
174
  withoutFileParts,
175
175
  withoutGlueFragments,
176
176
  withoutResetSteps
177
- } from "./chunk-EWEEYX6U.js";
177
+ } from "./chunk-SA3DXJYB.js";
178
178
  import {
179
179
  APP_EVENT_DATA_MAX_BYTES,
180
180
  APP_EVENT_TYPE_MAX_LENGTH,
@@ -13,7 +13,7 @@ import {
13
13
  extendCatalog,
14
14
  newStoredMessage,
15
15
  standardCatalog
16
- } from "./chunk-EWEEYX6U.js";
16
+ } from "./chunk-SA3DXJYB.js";
17
17
  import "./chunk-CVRDB3NM.js";
18
18
 
19
19
  // src/storage/storage-contract.ts
@@ -10,19 +10,23 @@ import type { Chat } from "../conversation/types.js";
10
10
  * запрет выключает и `modelChoice`: выбирать невидимую модель нельзя. `errorDetails` — подробности сбоя провайдера
11
11
  * (провайдер, модель, код, причина, когда снимут предел) в истории и потоке; единственное право, выключенное по
12
12
  * умолчанию: подробности видны любому через инструменты разработчика, открывать их — только админу. При
13
- * `modelDetails: false` выключено и оно.
13
+ * `modelDetails: false` выключено и оно. `appNotices` — служебные пометки приложения (`kind: "app"`: касание после
14
+ * молчания, срок шага сценария) на экране — без текста для модели, только те, у кого есть проекция для экрана
15
+ * (`appNoticeViews` службы), и только её данные; тоже выключено по умолчанию: клиент в боевом чате их не видит,
16
+ * включают в проверке и тестовом чате. При `modelDetails: false` выключено и оно.
14
17
  */
15
- export type ChatCapability = "edit" | "regenerate" | "retry" | "branches" | "modelChoice" | "answerEditing" | "chatList" | "compact" | "attachments" | "voice" | "reasoning" | "toolDetails" | "steer" | "modelDetails" | "errorDetails";
18
+ export type ChatCapability = "edit" | "regenerate" | "retry" | "branches" | "modelChoice" | "answerEditing" | "chatList" | "compact" | "attachments" | "voice" | "reasoning" | "toolDetails" | "steer" | "modelDetails" | "errorDetails" | "appNotices";
16
19
  /**
17
- * Права, как их отдаёт `resolveChatCapabilities`. `modelDetails` (нет — `true`) и `errorDetails` (нет — `false`) в типе
20
+ * Права, как их отдаёт `resolveChatCapabilities`. `modelDetails` (нет — `true`), `errorDetails` и `appNotices` (нет — `false`) в типе
18
21
  * необязательны: свой литерал прав, собранный до этих прав, остаётся верным. Ядро и история заполняют их всегда.
19
22
  */
20
- export type ChatCapabilities = Record<Exclude<ChatCapability, "modelDetails" | "errorDetails">, boolean> & {
23
+ export type ChatCapabilities = Record<Exclude<ChatCapability, "modelDetails" | "errorDetails" | "appNotices">, boolean> & {
21
24
  modelDetails?: boolean;
22
25
  errorDetails?: boolean;
26
+ appNotices?: boolean;
23
27
  };
24
28
  /**
25
- * Права в чате от приложения: частичный список, пропущенное — `true` (`errorDetails` — `false`). Тот же вход, что у `beforeTurn` (чат с данными
29
+ * Права в чате от приложения: частичный список, пропущенное — `true` (`errorDetails` и `appNotices` — `false`). Тот же вход, что у `beforeTurn` (чат с данными
26
30
  * объекта). Не булево значение, неизвестное право или исключение — ошибка приложения.
27
31
  */
28
32
  export type ChatCapabilitiesHandler = (input: {
@@ -31,8 +35,8 @@ export type ChatCapabilitiesHandler = (input: {
31
35
  }) => Partial<ChatCapabilities> | void | Promise<Partial<ChatCapabilities> | void>;
32
36
  export declare const CHAT_CAPABILITIES: readonly ChatCapability[];
33
37
  /**
34
- * Все права, кроме `errorDetails`, разрешены и дополнены ответом приложения; `modelDetails: false` выключает и
35
- * `modelChoice`, и `errorDetails`. Не булево значение или неизвестное право — `TypeError`.
38
+ * Все права, кроме `errorDetails` и `appNotices`, разрешены и дополнены ответом приложения; `modelDetails: false` выключает и
39
+ * `modelChoice`, `errorDetails` и `appNotices`. Не булево значение или неизвестное право — `TypeError`.
36
40
  */
37
41
  export declare function resolveChatCapabilities(given: Partial<ChatCapabilities> | void | null): Required<ChatCapabilities>;
38
42
  /** Действие запрещено правами чата: сервер отвечает 403 `action_forbidden`. */
@@ -38,7 +38,8 @@ export declare function publicAppStateParts<P extends {
38
38
  }>(parts: readonly P[], hidden?: HiddenStateKey): P[];
39
39
  /**
40
40
  * Сообщения для браузера: части без служебных ключей, без застывших блоков контекста, отметки `endTurn` и служебных
41
- * сообщений вида `app` (они только для модели);
41
+ * сообщений вида `app` (они только для модели; с `appNoticeViews` — остаются те, у кого есть проекция для экрана: без
42
+ * текста для модели, `data` — проекция);
42
43
  * сообщение человека, у которого не осталось частей, не уходит. Служебное сообщение состояния (`isStateMessage`) перед
43
44
  * обычным не показывается: его открытые записи едут в начале этого сообщения, и экран сворачивает то же состояние.
44
45
  */
@@ -47,9 +48,16 @@ export declare function publicMessages<M extends {
47
48
  parts: ReadonlyArray<{
48
49
  type: string;
49
50
  }>;
50
- }>(messages: readonly M[], hidden?: HiddenStateKey): M[];
51
+ }>(messages: readonly M[], hidden?: HiddenStateKey, options?: {
52
+ appNoticeViews?: AppNoticeViews;
53
+ }): M[];
51
54
  /** Кусок потока для браузера: запись состояния без скрытых ключей; ничего не осталось — `undefined`. */
52
55
  export declare function publicStateChunk(chunk: UIMessageChunk, hidden?: HiddenStateKey): UIMessageChunk | undefined;
56
+ /**
57
+ * Проекции пометок приложения для экрана (`appNoticeViews` службы): имя пометки → безопасные для браузера данные из
58
+ * `data`. Нет проекции, она вернула `undefined` или упала — пометка в браузер не уходит.
59
+ */
60
+ export type AppNoticeViews = Readonly<Record<string, (data: unknown) => unknown>>;
53
61
  /** Части только для модели: застывшие блоки контекста и отметка конца хода инструментом без слов. */
54
62
  export declare function isModelOnlyPart(part: {
55
63
  type: string;
@@ -27,6 +27,7 @@ import type { CompactionSettings } from "./compaction/compaction-settings.js";
27
27
  import type { ChatGreeting, ImportChatInput, OpenSubjectChatInput, OpenSubjectChatResult } from "./subject-chats/subject-chats.js";
28
28
  import type { AppStateValues } from "./app-state/app-state.js";
29
29
  import type { StateChangedHandler } from "./app-state/state-changed.js";
30
+ import type { AppNoticeViews } from "./app-state/state-messages.js";
30
31
  import type { BranchFork } from "./conversation/branches.js";
31
32
  import type { AnswerEdit } from "./conversation/answer-edit.js";
32
33
  import type { ReplyChecksSetting } from "./agent-run/reply-check-types.js";
@@ -454,6 +455,12 @@ export interface ChatServiceOptions {
454
455
  * @throws TypeError (при создании службы) неверное имя.
455
456
  */
456
457
  privateStateKeys?: readonly string[];
458
+ /**
459
+ * Проекции пометок приложения (`kind: "app"`) для экрана при праве `appNotices`: имя пометки → безопасные данные
460
+ * (`(data) => ({ silentMs })`). Пометка без проекции в браузер не уходит, даже с правом. Сценарии (`flow.withChat`)
461
+ * добавляют свои сами.
462
+ */
463
+ appNoticeViews?: AppNoticeViews;
457
464
  }
458
465
  /** Ход, для которого берётся инструкция чата; у сжатия его нет. */
459
466
  export interface ChatInstructionsTurn {
@@ -60,6 +60,7 @@ export { accessRefusedResponse, allowedUser } from "./access/resolved-user.js";
60
60
  export type { AccessRefusal, ResolvedUser } from "./access/resolved-user.js";
61
61
  export { ActionForbiddenError, CHAT_CAPABILITIES, resolveChatCapabilities } from "./access/chat-capabilities.js";
62
62
  export type { ChatCapabilities, ChatCapabilitiesHandler, ChatCapability } from "./access/chat-capabilities.js";
63
+ export type { AppNoticeViews } from "./app-state/state-messages.js";
63
64
  export { CHAT_CLOSED_PART_TYPE, ChatClosedError, normalizeChatClosure } from "./access/chat-closure.js";
64
65
  export type { ChatClosure } from "./access/chat-closure.js";
65
66
  export { ChatCreationRefusedError } from "./access/chat-creation.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ykurilov/agent-chat-core",
3
- "version": "0.64.0",
3
+ "version": "0.65.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "sideEffects": false,