@things-factory/ai-assistant 10.1.28 → 10.1.31

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 (110) hide show
  1. package/client/components/assistant-chat.ts +51 -7
  2. package/client/components/assistant-mode.test.ts +20 -1
  3. package/client/components/assistant-mode.ts +20 -0
  4. package/client/components/panel-aria.test.ts +20 -0
  5. package/client/utils/assistant-session-controller.ts +14 -1
  6. package/client/utils/assistant-session-transport.ts +2 -2
  7. package/dist-client/components/assistant-chat.d.ts +12 -0
  8. package/dist-client/components/assistant-chat.js +48 -6
  9. package/dist-client/components/assistant-chat.js.map +1 -1
  10. package/dist-client/components/assistant-mode.d.ts +22 -0
  11. package/dist-client/components/assistant-mode.js +16 -0
  12. package/dist-client/components/assistant-mode.js.map +1 -1
  13. package/dist-client/components/assistant-mode.test.js +17 -1
  14. package/dist-client/components/assistant-mode.test.js.map +1 -1
  15. package/dist-client/components/panel-aria.test.js +18 -0
  16. package/dist-client/components/panel-aria.test.js.map +1 -1
  17. package/dist-client/tsconfig.tsbuildinfo +1 -1
  18. package/dist-client/utils/assistant-session-controller.d.ts +10 -0
  19. package/dist-client/utils/assistant-session-controller.js.map +1 -1
  20. package/dist-client/utils/assistant-session-transport.js +2 -2
  21. package/dist-client/utils/assistant-session-transport.js.map +1 -1
  22. package/dist-server/door-declaration-report.d.ts +14 -0
  23. package/dist-server/door-declaration-report.js +54 -0
  24. package/dist-server/door-declaration-report.js.map +1 -0
  25. package/dist-server/service/assistant-chat-resolver.js +19 -0
  26. package/dist-server/service/assistant-chat-resolver.js.map +1 -1
  27. package/dist-server/service/assistant-mode/assistant-mode-resolver.d.ts +8 -0
  28. package/dist-server/service/assistant-mode/assistant-mode-resolver.js +8 -0
  29. package/dist-server/service/assistant-mode/assistant-mode-resolver.js.map +1 -1
  30. package/dist-server/service/assistant-mode/index.d.ts +1 -1
  31. package/dist-server/service/assistant-mode/index.js +1 -1
  32. package/dist-server/service/assistant-mode/index.js.map +1 -1
  33. package/dist-server/service/assistant-mode/resolve.d.ts +10 -0
  34. package/dist-server/service/assistant-mode/resolve.js +5 -0
  35. package/dist-server/service/assistant-mode/resolve.js.map +1 -1
  36. package/dist-server/service/assistant-mode/types.d.ts +21 -0
  37. package/dist-server/service/assistant-mode/types.js.map +1 -1
  38. package/dist-server/service/chat-message/carried-turns.js +14 -2
  39. package/dist-server/service/chat-message/carried-turns.js.map +1 -1
  40. package/dist-server/service/chat-message/door-access.d.ts +19 -7
  41. package/dist-server/service/chat-message/door-access.js +19 -11
  42. package/dist-server/service/chat-message/door-access.js.map +1 -1
  43. package/dist-server/service/chat-message/reader-gate.js +6 -4
  44. package/dist-server/service/chat-message/reader-gate.js.map +1 -1
  45. package/dist-server/service/chat-session/chat-session.d.ts +12 -0
  46. package/dist-server/service/chat-session/chat-session.js +12 -11
  47. package/dist-server/service/chat-session/chat-session.js.map +1 -1
  48. package/dist-server/service/chat-session/session-anchor.d.ts +10 -1
  49. package/dist-server/service/chat-session/session-anchor.js +12 -4
  50. package/dist-server/service/chat-session/session-anchor.js.map +1 -1
  51. package/dist-server/service/chat-session/session-inbox.d.ts +2 -0
  52. package/dist-server/service/chat-session/session-inbox.js.map +1 -1
  53. package/dist-server/service/chat-session/session-kind.d.ts +14 -0
  54. package/dist-server/service/chat-session/session-kind.js +30 -0
  55. package/dist-server/service/chat-session/session-kind.js.map +1 -0
  56. package/dist-server/service/chat-session/session-visibility.js +8 -1
  57. package/dist-server/service/chat-session/session-visibility.js.map +1 -1
  58. package/dist-server/service/chat-session-resolver.d.ts +2 -0
  59. package/dist-server/service/chat-session-resolver.js +4 -0
  60. package/dist-server/service/chat-session-resolver.js.map +1 -1
  61. package/dist-server/service/index.d.ts +1 -0
  62. package/dist-server/service/index.js +2 -0
  63. package/dist-server/service/index.js.map +1 -1
  64. package/dist-server/service/testing/conversation-script.d.ts +7 -0
  65. package/dist-server/service/testing/conversation-script.js +1 -0
  66. package/dist-server/service/testing/conversation-script.js.map +1 -1
  67. package/dist-server/service/testing/mode-conformance.d.ts +10 -0
  68. package/dist-server/service/testing/mode-conformance.js +13 -0
  69. package/dist-server/service/testing/mode-conformance.js.map +1 -1
  70. package/dist-server/service/tool-access.js +20 -7
  71. package/dist-server/service/tool-access.js.map +1 -1
  72. package/dist-server/tool-registry-boot-report.js +15 -9
  73. package/dist-server/tool-registry-boot-report.js.map +1 -1
  74. package/dist-server/tsconfig.tsbuildinfo +1 -1
  75. package/package.json +5 -5
  76. package/server/door-declaration-report.test.ts +53 -0
  77. package/server/door-declaration-report.ts +61 -0
  78. package/server/service/assistant-chat-resolver.ts +21 -0
  79. package/server/service/assistant-mode/assistant-mode-resolver.ts +6 -0
  80. package/server/service/assistant-mode/index.ts +1 -1
  81. package/server/service/assistant-mode/resolve.test.ts +42 -0
  82. package/server/service/assistant-mode/resolve.ts +9 -0
  83. package/server/service/assistant-mode/types.ts +18 -0
  84. package/server/service/chat-message/carried-turns.test.ts +13 -2
  85. package/server/service/chat-message/carried-turns.ts +16 -3
  86. package/server/service/chat-message/door-access.test.ts +72 -0
  87. package/server/service/chat-message/door-access.ts +43 -23
  88. package/server/service/chat-message/fold-history-window.test.ts +184 -0
  89. package/server/service/chat-message/reader-gate.ts +6 -4
  90. package/server/service/chat-session/chat-session.ts +15 -0
  91. package/server/service/chat-session/session-anchor.ts +12 -3
  92. package/server/service/chat-session/session-inbox.ts +2 -0
  93. package/server/service/chat-session/session-kind.test.ts +24 -0
  94. package/server/service/chat-session/session-kind.ts +32 -0
  95. package/server/service/chat-session/session-visibility.test.ts +16 -0
  96. package/server/service/chat-session/session-visibility.ts +9 -1
  97. package/server/service/chat-session-resolver.ts +4 -0
  98. package/server/service/index.ts +2 -0
  99. package/server/service/testing/conversation-scenario.test.ts +2 -1
  100. package/server/service/testing/conversation-script.test.ts +4 -2
  101. package/server/service/testing/conversation-script.ts +8 -0
  102. package/server/service/testing/mode-conformance.ts +15 -0
  103. package/server/service/tool-access.test.ts +67 -19
  104. package/server/service/tool-access.ts +24 -15
  105. package/server/tool-registry-boot-report.ts +14 -9
  106. package/translations/en.json +3 -2
  107. package/translations/ja.json +3 -2
  108. package/translations/ko.json +3 -2
  109. package/translations/ms.json +3 -2
  110. package/translations/zh.json +3 -2
@@ -1,19 +1,20 @@
1
1
  /*
2
- * At boot, say what registered but is not yet what the contracts require — tools with no privilege
3
- * (A1 stage one) and modes offering `/` sentences their tools cannot answer (ADR-0058 decision 3).
2
+ * At boot, say what registered but is not yet what the contracts require — tools that named no doors
3
+ * (ADR-0071 decision 2) and modes offering `/` sentences their tools cannot answer (ADR-0058
4
+ * decision 3).
4
5
  *
5
6
  * One window, because it is one question: what state is this deployment's AI in (standard A7-a).
6
7
  *
7
- * Registration no longer refuses a tool that changes something without declaring its privilege —
8
- * refusing would stop apps whose tools predate the field. The registry records each omission as a
9
- * code instead. This prints that list once, after every module has registered, grouped by code,
10
- * so the person starting the server sees which tools still need a declaration. When the list is
11
- * empty across the apps, registration becomes a refusal and this report goes away.
8
+ * A tool that names no doors still registers; refusing at registration would stop a whole app from
9
+ * booting over one omission. It is the **gate** that refuses it, tool by tool — such a tool is
10
+ * offered to no conversation (`resolveToolScope`). So this list is not a soft warning about
11
+ * something that still works: it names the tools that are not working, and why.
12
12
  */
13
13
  import { logger } from '@things-factory/env'
14
14
  import { getToolRegistryWarnings, type ToolRegistryWarning } from '@things-factory/ai-client-base'
15
15
 
16
16
  import { getAssistantModeWarnings, type AssistantModeWarning } from './service/assistant-mode/index.js'
17
+ import { doorDeclarationWarnings, formatDoorDeclarationWarnings } from './door-declaration-report.js'
17
18
 
18
19
  /** One line per code: the code, how many, and which tools. Empty when there is nothing to report. */
19
20
  export function formatToolRegistryWarnings(warnings: ReadonlyArray<ToolRegistryWarning>): string[] {
@@ -21,8 +22,7 @@ export function formatToolRegistryWarnings(warnings: ReadonlyArray<ToolRegistryW
21
22
  for (const warning of warnings) {
22
23
  const tools = byCode.get(warning.code) ?? []
23
24
  /* 문 이름이 있으면 함께 적는다 — 「어느 문이 아직 선언이 없나」가 다음에 할 일이다. */
24
- const doors = warning.params.doors?.length ? ` → ${warning.params.doors.join(' + ')}` : ''
25
- tools.push(`${warning.params.category}/${warning.params.tool}(${warning.params.kind})${doors}`)
25
+ tools.push(`${warning.params.category}/${warning.params.tool}(${warning.params.kind})`)
26
26
  byCode.set(warning.code, tools)
27
27
  }
28
28
  return [...byCode].map(([code, tools]) => `[ai-assistant] ${code} ×${tools.length}: ${tools.join(', ')}`)
@@ -46,4 +46,9 @@ export function formatAssistantModeWarnings(warnings: ReadonlyArray<AssistantMod
46
46
  process.on('bootstrap-module-start' as any, () => {
47
47
  for (const line of formatToolRegistryWarnings(getToolRegistryWarnings())) logger.warn(line)
48
48
  for (const line of formatAssistantModeWarnings(getAssistantModeWarnings())) logger.warn(line)
49
+ /*
50
+ * 이 자리에서만 물을 수 있는 것 — 적어 둔 문이 스키마에 있나. AUTH 의 필드 표는 스키마를 지은 뒤에
51
+ * 차고, 이 훅은 그 뒤에 돈다(`builtSchema` 를 함께 받는다).
52
+ */
53
+ for (const line of formatDoorDeclarationWarnings(doorDeclarationWarnings())) logger.warn(line)
49
54
  })
@@ -62,7 +62,7 @@
62
62
  "ai-assistant.text.history-folded": "this conversation grew long — the earlier {count} messages were left out. a new conversation is better for a different topic.",
63
63
  "ai-assistant.text.history-folded-summarized": "this conversation grew long — the earlier {count} messages were folded into a summary. a new conversation is better for a different topic.",
64
64
  "ai-assistant.button.attach": "Attach",
65
- "ai-assistant.tooltip.attach-file": "Attach images or files (drag & drop or paste supported)",
65
+ "ai-assistant.tooltip.attach-file": "attach an image (drag & drop or paste supported)",
66
66
  "ai-assistant.text.drop-files-here": "Drop images or files here",
67
67
  "ai-assistant.button.remove-attachment": "Remove attachment",
68
68
  "ai-assistant.session.all": "All History",
@@ -108,5 +108,6 @@
108
108
  "ai-assistant.text.cannot-invite": "{names} will not join — only the people already in this conversation can bring someone in",
109
109
  "ai-assistant.text.answer-needs-permission": "you do not have permission to see this answer. ask an administrator for access.",
110
110
  "ai-assistant.label.conversation": "conversation",
111
- "ai-assistant.text.switch-conversation": "switch to {name}"
111
+ "ai-assistant.text.switch-conversation": "switch to {name}",
112
+ "ai-assistant.text.session-kind-mismatch": "this conversation is {sessionKind}, and you are writing as {requested}. open the conversation you mean."
112
113
  }
@@ -62,7 +62,7 @@
62
62
  "ai-assistant.text.history-folded": "会話が長くなり、前半の {count} 件は省略されました。別の話題なら新しい会話のほうが適しています。",
63
63
  "ai-assistant.text.history-folded-summarized": "会話が長くなり、前半の {count} 件は要約にまとめられました。別の話題なら新しい会話のほうが適しています。",
64
64
  "ai-assistant.button.attach": "添付",
65
- "ai-assistant.tooltip.attach-file": "画像またはファイルを添付(クリップボードの貼り付け・ドラッグ&ドロップ対応)",
65
+ "ai-assistant.tooltip.attach-file": "画像を添付 (ドラッグ&ドロップ・貼り付け対応)",
66
66
  "ai-assistant.text.drop-files-here": "ここに画像やファイルをドロップしてください",
67
67
  "ai-assistant.button.remove-attachment": "添付を削除",
68
68
  "ai-assistant.session.all": "すべての履歴",
@@ -108,5 +108,6 @@
108
108
  "ai-assistant.text.cannot-invite": "{names} は加わりません。この会話にいる人だけが他の人を呼べます",
109
109
  "ai-assistant.text.answer-needs-permission": "この回答を見る権限がありません。管理者に申請してください。",
110
110
  "ai-assistant.label.conversation": "会話",
111
- "ai-assistant.text.switch-conversation": "{name} の会話に切り替える"
111
+ "ai-assistant.text.switch-conversation": "{name} の会話に切り替える",
112
+ "ai-assistant.text.session-kind-mismatch": "この会話は {sessionKind} です。{requested} として書いています。目的の会話を開いてください。"
112
113
  }
@@ -62,7 +62,7 @@
62
62
  "ai-assistant.text.mention-not-found": "#{token} 을(를) 찾을 수 없습니다",
63
63
  "ai-assistant.text.session-tab-label": "세션 {n}",
64
64
  "ai-assistant.button.attach": "첨부",
65
- "ai-assistant.tooltip.attach-file": "이미지 또는 파일 첨부 (클립보드 붙여넣기·드래그앤드롭 지원)",
65
+ "ai-assistant.tooltip.attach-file": "이미지 첨부 (클립보드 붙여넣기·드래그앤드롭 지원)",
66
66
  "ai-assistant.text.drop-files-here": "여기에 이미지나 파일을 놓으세요",
67
67
  "ai-assistant.button.remove-attachment": "첨부 삭제",
68
68
  "ai-assistant.session.all": "전체 이력",
@@ -108,5 +108,6 @@
108
108
  "ai-assistant.text.cannot-invite": "{names} 은 들어오지 않습니다. 이 대화에 있는 사람만 다른 사람을 부를 수 있습니다",
109
109
  "ai-assistant.text.answer-needs-permission": "이 답을 볼 권한이 없습니다. 관리자에게 요청하십시오.",
110
110
  "ai-assistant.label.conversation": "대화",
111
- "ai-assistant.text.switch-conversation": "{name} 대화로 바꾸기"
111
+ "ai-assistant.text.switch-conversation": "{name} 대화로 바꾸기",
112
+ "ai-assistant.text.session-kind-mismatch": "이 대화는 {sessionKind} 입니다. {requested} 로 쓰고 계십니다. 하시려는 대화를 열어 주십시오."
112
113
  }
@@ -62,7 +62,7 @@
62
62
  "ai-assistant.text.history-folded": "perbualan ini menjadi panjang — {count} mesej terawal ditinggalkan. perbualan baharu lebih sesuai untuk topik lain.",
63
63
  "ai-assistant.text.history-folded-summarized": "perbualan ini menjadi panjang — {count} mesej terawal diringkaskan. perbualan baharu lebih sesuai untuk topik lain.",
64
64
  "ai-assistant.button.attach": "Lampir",
65
- "ai-assistant.tooltip.attach-file": "Lampirkan imej atau fail (tampal papan keratan dan seret & lepas disokong)",
65
+ "ai-assistant.tooltip.attach-file": "lampirkan imej (seret & lepas atau tampal disokong)",
66
66
  "ai-assistant.text.drop-files-here": "Lepaskan imej atau fail di sini",
67
67
  "ai-assistant.button.remove-attachment": "Buang lampiran",
68
68
  "ai-assistant.session.all": "Semua sejarah",
@@ -108,5 +108,6 @@
108
108
  "ai-assistant.text.cannot-invite": "{names} tidak akan menyertai — hanya orang yang sudah ada dalam perbualan boleh membawa orang masuk",
109
109
  "ai-assistant.text.answer-needs-permission": "anda tiada kebenaran untuk melihat jawapan ini. minta kebenaran daripada pentadbir.",
110
110
  "ai-assistant.label.conversation": "perbualan",
111
- "ai-assistant.text.switch-conversation": "tukar ke perbualan {name}"
111
+ "ai-assistant.text.switch-conversation": "tukar ke perbualan {name}",
112
+ "ai-assistant.text.session-kind-mismatch": "perbualan ini ialah {sessionKind}, dan anda menulis sebagai {requested}. buka perbualan yang anda maksudkan."
112
113
  }
@@ -62,7 +62,7 @@
62
62
  "ai-assistant.text.history-folded": "对话变长,前面 {count} 条已省略。若是另一个话题,新建对话更合适。",
63
63
  "ai-assistant.text.history-folded-summarized": "对话变长,前面 {count} 条已折叠为摘要。若是另一个话题,新建对话更合适。",
64
64
  "ai-assistant.button.attach": "附件",
65
- "ai-assistant.tooltip.attach-file": "附加图片或文件(支持剪贴板粘贴和拖放)",
65
+ "ai-assistant.tooltip.attach-file": "附加图片(支持拖放与粘贴)",
66
66
  "ai-assistant.text.drop-files-here": "将图片或文件拖放到此处",
67
67
  "ai-assistant.button.remove-attachment": "删除附件",
68
68
  "ai-assistant.session.all": "全部历史",
@@ -108,5 +108,6 @@
108
108
  "ai-assistant.text.cannot-invite": "{names} 不会加入。只有已在此对话中的人才能邀请他人",
109
109
  "ai-assistant.text.answer-needs-permission": "没有查看此回答的权限。请向管理员申请。",
110
110
  "ai-assistant.label.conversation": "对话",
111
- "ai-assistant.text.switch-conversation": "切换到 {name} 对话"
111
+ "ai-assistant.text.switch-conversation": "切换到 {name} 对话",
112
+ "ai-assistant.text.session-kind-mismatch": "此对话是 {sessionKind},而您正以 {requested} 书写。请打开您想要的对话。"
112
113
  }