@things-factory/ai-assistant 10.1.90 → 10.1.97

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 (82) hide show
  1. package/client/components/assistant-chat.ts +31 -3
  2. package/client/components/assistant-dock.ts +9 -1
  3. package/client/components/entry-review.ts +56 -0
  4. package/client/components/workspace-view.ts +428 -0
  5. package/client/pages/assistant-workspace-page.ts +237 -0
  6. package/client/route.ts +9 -0
  7. package/client/utils/entry-proposal.ts +20 -5
  8. package/client/utils/workspace.ts +89 -0
  9. package/dist-client/components/assistant-chat.d.ts +2 -0
  10. package/dist-client/components/assistant-chat.js +32 -3
  11. package/dist-client/components/assistant-chat.js.map +1 -1
  12. package/dist-client/components/assistant-dock.d.ts +1 -0
  13. package/dist-client/components/assistant-dock.js +9 -1
  14. package/dist-client/components/assistant-dock.js.map +1 -1
  15. package/dist-client/components/entry-review.d.ts +5 -0
  16. package/dist-client/components/entry-review.js +55 -0
  17. package/dist-client/components/entry-review.js.map +1 -1
  18. package/dist-client/components/workspace-view.d.ts +19 -0
  19. package/dist-client/components/workspace-view.js +416 -0
  20. package/dist-client/components/workspace-view.js.map +1 -0
  21. package/dist-client/pages/assistant-workspace-page.d.ts +27 -0
  22. package/dist-client/pages/assistant-workspace-page.js +263 -0
  23. package/dist-client/pages/assistant-workspace-page.js.map +1 -0
  24. package/dist-client/route.d.ts +1 -0
  25. package/dist-client/route.js +10 -0
  26. package/dist-client/route.js.map +1 -0
  27. package/dist-client/tsconfig.tsbuildinfo +1 -1
  28. package/dist-client/utils/entry-proposal.d.ts +5 -0
  29. package/dist-client/utils/entry-proposal.js +16 -5
  30. package/dist-client/utils/entry-proposal.js.map +1 -1
  31. package/dist-client/utils/workspace.d.ts +40 -0
  32. package/dist-client/utils/workspace.js +68 -0
  33. package/dist-client/utils/workspace.js.map +1 -0
  34. package/dist-server/service/assistant-mode/resolve.d.ts +2 -2
  35. package/dist-server/service/assistant-mode/resolve.js +5 -3
  36. package/dist-server/service/assistant-mode/resolve.js.map +1 -1
  37. package/dist-server/service/data-entry/entry-apply.d.ts +3 -3
  38. package/dist-server/service/data-entry/entry-apply.js +55 -2
  39. package/dist-server/service/data-entry/entry-apply.js.map +1 -1
  40. package/dist-server/service/data-entry/entry-resolver.js +3 -7
  41. package/dist-server/service/data-entry/entry-resolver.js.map +1 -1
  42. package/dist-server/service/data-entry/entry-target.d.ts +51 -0
  43. package/dist-server/service/data-entry/entry-target.js +77 -34
  44. package/dist-server/service/data-entry/entry-target.js.map +1 -1
  45. package/dist-server/service/data-entry/entry-tools.d.ts +7 -1
  46. package/dist-server/service/data-entry/entry-tools.js +73 -3
  47. package/dist-server/service/data-entry/entry-tools.js.map +1 -1
  48. package/dist-server/service/data-entry/entry-update.d.ts +99 -0
  49. package/dist-server/service/data-entry/entry-update.js +196 -0
  50. package/dist-server/service/data-entry/entry-update.js.map +1 -0
  51. package/dist-server/service/index.d.ts +2 -0
  52. package/dist-server/service/index.js +3 -0
  53. package/dist-server/service/index.js.map +1 -1
  54. package/dist-server/service/workspace/workspace-blocks.d.ts +24 -0
  55. package/dist-server/service/workspace/workspace-blocks.js +118 -0
  56. package/dist-server/service/workspace/workspace-blocks.js.map +1 -0
  57. package/dist-server/service/workspace/workspace-tools.d.ts +24 -0
  58. package/dist-server/service/workspace/workspace-tools.js +65 -0
  59. package/dist-server/service/workspace/workspace-tools.js.map +1 -0
  60. package/dist-server/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +2 -2
  62. package/server/service/assistant-mode/resolve.test.ts +2 -1
  63. package/server/service/assistant-mode/resolve.ts +5 -3
  64. package/server/service/data-entry/data-entry-update.test.ts +192 -0
  65. package/server/service/data-entry/data-entry.test.ts +2 -2
  66. package/server/service/data-entry/entry-apply.ts +63 -6
  67. package/server/service/data-entry/entry-resolver.ts +4 -9
  68. package/server/service/data-entry/entry-target.ts +97 -31
  69. package/server/service/data-entry/entry-tools.ts +77 -3
  70. package/server/service/data-entry/entry-update.ts +209 -0
  71. package/server/service/index.ts +3 -0
  72. package/server/service/workspace/workspace-blocks.ts +127 -0
  73. package/server/service/workspace/workspace-tools.ts +66 -0
  74. package/server/service/workspace/workspace.test.ts +58 -0
  75. package/test/entry-proposal.test.ts +15 -2
  76. package/test/workspace.test.ts +54 -0
  77. package/things-factory.config.js +6 -1
  78. package/translations/en.json +36 -1
  79. package/translations/ja.json +36 -1
  80. package/translations/ko.json +36 -1
  81. package/translations/ms.json +36 -1
  82. package/translations/zh.json +36 -1
@@ -0,0 +1,54 @@
1
+ /*
2
+ * The AI 작업판 on the screen (design/ai/workspace.md) - which versions a reader sees, the card's version, and the
3
+ * table's sort and CSV. The page and the chat are read as text: importing them pulls the shell.
4
+ */
5
+ import { readFileSync } from 'fs'
6
+ import { join } from 'path'
7
+
8
+ import { sortRows, tableCsv, versionOfCard, workspaceAddress, workspaceVersions } from '../client/utils/workspace'
9
+
10
+ const ws = (name: string, title = name) => ({ key: `k-${title}`, kind: 'workspace', workspace: { name, title, blocks: [] } })
11
+
12
+ describe('the workspace on the screen', () => {
13
+ it('★ the same name in one conversation is one workspace; its versions are counted in order', () => {
14
+ const messages = [
15
+ { id: 'm1', proposalsJson: [ws('contracts', 'v1')] },
16
+ { id: 'm2', proposalsJson: [{ key: 'x', tool: 'proposeAction' }, ws('loans', 'l1')] },
17
+ { id: 'm3', proposalsJson: null },
18
+ { id: 'm4', proposalsJson: [ws('contracts', 'v2')] }
19
+ ]
20
+ expect(workspaceVersions(messages, 'contracts').map(one => `${one.version}:${one.messageId}:${one.workspace.title}`)).toEqual(['1:m1:v1', '2:m4:v2'])
21
+ })
22
+
23
+ it('★ a version behind a door the reader cannot pass is not among them - its row comes back without proposals', () => {
24
+ const messages = [{ id: 'm1', proposalsJson: [ws('contracts', 'v1')] }, { id: 'm2', proposalsJson: null }]
25
+ expect(workspaceVersions(messages, 'contracts')).toHaveLength(1)
26
+ })
27
+
28
+ it('a card knows which version it is', () => {
29
+ expect(versionOfCard([[ws('c', 'a')], [ws('d', 'x')], [ws('c', 'b')]], 'c', 'k-b')).toEqual({ version: 2, of: 2 })
30
+ })
31
+
32
+ it('the address carries the conversation, the name and the version', () => {
33
+ expect(workspaceAddress('s-1', 'contracts', 2)).toBe('assistant-workspace?session=s-1&name=contracts&version=2')
34
+ })
35
+
36
+ it('sorts numbers as numbers and puts empty cells last, both ways', () => {
37
+ const rows = [{ v: 10 }, { v: null }, { v: 9 }, { v: 100 }]
38
+ expect(sortRows(rows, 'v', 'asc').map(row => row.v)).toEqual([9, 10, 100, null])
39
+ expect(sortRows(rows, 'v', 'desc').map(row => row.v)).toEqual([100, 10, 9, null])
40
+ })
41
+
42
+ it('CSV quotes what needs quoting and starts with a BOM so a spreadsheet reads Korean', () => {
43
+ expect(tableCsv([{ name: 'a', label: '고객사' }, { name: 'b' }], [{ a: 'A, Inc', b: 'say "hi"' }])).toBe('고객사,b\r\n"A, Inc","say ""hi"""')
44
+ })
45
+
46
+ it('★ the card opens the page and runs nothing; the page reads the conversation through its own door', () => {
47
+ const chat = readFileSync(join(__dirname, '..', 'client', 'components', 'assistant-chat.ts'), 'utf8')
48
+ expect(chat).toContain('if (isWorkspaceProposal(p)) return this.renderWorkspaceCard(p, key)')
49
+ const page = readFileSync(join(__dirname, '..', 'client', 'pages', 'assistant-workspace-page.ts'), 'utf8')
50
+ expect(page).toContain('chatMessages(sessionId: $sessionId')
51
+ const config = readFileSync(join(__dirname, '..', 'things-factory.config.js'), 'utf8')
52
+ expect(config).toContain("page: 'assistant-workspace'")
53
+ })
54
+ })
@@ -1 +1,6 @@
1
- export default {}
1
+ import route from './dist-client/route.js'
2
+
3
+ export default {
4
+ route,
5
+ routes: [{ tagname: 'assistant-workspace-page', page: 'assistant-workspace' }]
6
+ }
@@ -232,5 +232,40 @@
232
232
  "ai-assistant.entry.total-matches": "matches",
233
233
  "ai-assistant.entry.issue.not-in-source": "the file does not have this value",
234
234
  "ai-assistant.entry.issue.source-scattered": "the values are not on one line of the file",
235
- "ai-assistant.entry.issue.source-not-checked": "a photo cannot be checked here"
235
+ "ai-assistant.entry.issue.source-not-checked": "a photo cannot be checked here",
236
+ "ai-assistant.workspace.title": "AI workspace",
237
+ "ai-assistant.workspace.unreadable": "a block that cannot be drawn ({reason})",
238
+ "ai-assistant.workspace.rows": "{count} rows",
239
+ "ai-assistant.workspace.csv": "CSV",
240
+ "ai-assistant.workspace.cut": "{count} more rows were left out over the limit.",
241
+ "ai-assistant.workspace.other": "other",
242
+ "ai-assistant.workspace.as-chart": "chart",
243
+ "ai-assistant.workspace.as-table": "table",
244
+ "ai-assistant.workspace.loading": "loading the workspace…",
245
+ "ai-assistant.workspace.unreadable-page": "could not read this workspace: {reason}",
246
+ "ai-assistant.workspace.not-found": "there is no workspace here that you can see.",
247
+ "ai-assistant.workspace.newer": "a newer version ({version}) is ready.",
248
+ "ai-assistant.workspace.show-newer": "show it",
249
+ "ai-assistant.workspace.versions": "versions",
250
+ "ai-assistant.workspace.version": "version {version} of {of}",
251
+ "ai-assistant.workspace.open": "open in workspace",
252
+ "ai-assistant.workspace.contains-table": "{count} tables",
253
+ "ai-assistant.workspace.contains-chart": "{count} charts",
254
+ "ai-assistant.workspace.contains-metrics": "{count} figures",
255
+ "ai-assistant.workspace.contains-steps": "{count} progress",
256
+ "ai-assistant.entry.change": "change {count} records",
257
+ "ai-assistant.entry.changed": "changed {count} records.",
258
+ "ai-assistant.entry.changed-none": "no record was changed.",
259
+ "ai-assistant.entry.changes": "{count} records",
260
+ "ai-assistant.entry.not-changed": "{count} will not be changed",
261
+ "ai-assistant.entry.record": "record",
262
+ "ai-assistant.entry.picked": "picked",
263
+ "ai-assistant.entry.via-current": "the record on screen",
264
+ "ai-assistant.entry.via-selected": "selected on screen",
265
+ "ai-assistant.entry.via-id": "found in the conversation",
266
+ "ai-assistant.entry.issue.record-not-found": "not a record you can see",
267
+ "ai-assistant.entry.issue.changed-since": "changed since the card was made",
268
+ "ai-assistant.entry.issue.no-change": "already that value",
269
+ "ai-assistant.entry.issue.nothing-to-change": "nothing to change",
270
+ "ai-assistant.entry.issue.not-changeable": "this field cannot be changed - left out"
236
271
  }
@@ -232,5 +232,40 @@
232
232
  "ai-assistant.entry.total-matches": "一致",
233
233
  "ai-assistant.entry.issue.not-in-source": "資料にない値です",
234
234
  "ai-assistant.entry.issue.source-scattered": "値が資料の同じ行にありません",
235
- "ai-assistant.entry.issue.source-not-checked": "写真の資料は照合できませんでした"
235
+ "ai-assistant.entry.issue.source-not-checked": "写真の資料は照合できませんでした",
236
+ "ai-assistant.workspace.title": "AI作業ボード",
237
+ "ai-assistant.workspace.unreadable": "描画できないブロックです ({reason})",
238
+ "ai-assistant.workspace.rows": "{count}行",
239
+ "ai-assistant.workspace.csv": "CSV",
240
+ "ai-assistant.workspace.cut": "上限を超えた{count}行は除外されました。",
241
+ "ai-assistant.workspace.other": "その他",
242
+ "ai-assistant.workspace.as-chart": "チャート",
243
+ "ai-assistant.workspace.as-table": "表で見る",
244
+ "ai-assistant.workspace.loading": "作業ボードを読み込み中…",
245
+ "ai-assistant.workspace.unreadable-page": "作業ボードを読み込めませんでした: {reason}",
246
+ "ai-assistant.workspace.not-found": "表示できる作業ボードがありません。",
247
+ "ai-assistant.workspace.newer": "新しい版({version})があります。",
248
+ "ai-assistant.workspace.show-newer": "表示",
249
+ "ai-assistant.workspace.versions": "版",
250
+ "ai-assistant.workspace.version": "版 {version} / {of}",
251
+ "ai-assistant.workspace.open": "作業ボードで見る",
252
+ "ai-assistant.workspace.contains-table": "表 {count}",
253
+ "ai-assistant.workspace.contains-chart": "チャート {count}",
254
+ "ai-assistant.workspace.contains-metrics": "指標 {count}",
255
+ "ai-assistant.workspace.contains-steps": "経過 {count}",
256
+ "ai-assistant.entry.change": "{count}件を修正",
257
+ "ai-assistant.entry.changed": "{count}件を修正しました。",
258
+ "ai-assistant.entry.changed-none": "修正された記録はありません。",
259
+ "ai-assistant.entry.changes": "{count}件",
260
+ "ai-assistant.entry.not-changed": "{count}件は修正しません",
261
+ "ai-assistant.entry.record": "記録",
262
+ "ai-assistant.entry.picked": "選び方",
263
+ "ai-assistant.entry.via-current": "表示中の記録",
264
+ "ai-assistant.entry.via-selected": "選択した行",
265
+ "ai-assistant.entry.via-id": "会話で見つけた記録",
266
+ "ai-assistant.entry.issue.record-not-found": "閲覧できる記録ではありません",
267
+ "ai-assistant.entry.issue.changed-since": "その間に変更されました",
268
+ "ai-assistant.entry.issue.no-change": "すでにその値です",
269
+ "ai-assistant.entry.issue.nothing-to-change": "修正する項目がありません",
270
+ "ai-assistant.entry.issue.not-changeable": "修正できない項目のため除外しました"
236
271
  }
@@ -232,5 +232,40 @@
232
232
  "ai-assistant.entry.total-matches": "일치",
233
233
  "ai-assistant.entry.issue.not-in-source": "자료에 없는 값입니다",
234
234
  "ai-assistant.entry.issue.source-scattered": "값이 자료의 한 줄에 함께 있지 않습니다",
235
- "ai-assistant.entry.issue.source-not-checked": "사진 자료는 대조하지 못했습니다"
235
+ "ai-assistant.entry.issue.source-not-checked": "사진 자료는 대조하지 못했습니다",
236
+ "ai-assistant.workspace.title": "AI 작업판",
237
+ "ai-assistant.workspace.unreadable": "그릴 수 없는 블록입니다 ({reason})",
238
+ "ai-assistant.workspace.rows": "{count}행",
239
+ "ai-assistant.workspace.csv": "CSV",
240
+ "ai-assistant.workspace.cut": "한도를 넘은 {count}행은 빠졌습니다.",
241
+ "ai-assistant.workspace.other": "기타",
242
+ "ai-assistant.workspace.as-chart": "차트",
243
+ "ai-assistant.workspace.as-table": "표로 보기",
244
+ "ai-assistant.workspace.loading": "작업판을 불러오는 중…",
245
+ "ai-assistant.workspace.unreadable-page": "작업판을 읽지 못했습니다: {reason}",
246
+ "ai-assistant.workspace.not-found": "볼 수 있는 작업판이 없습니다.",
247
+ "ai-assistant.workspace.newer": "새 판({version})이 있습니다.",
248
+ "ai-assistant.workspace.show-newer": "보기",
249
+ "ai-assistant.workspace.versions": "판",
250
+ "ai-assistant.workspace.version": "판 {version} / {of}",
251
+ "ai-assistant.workspace.open": "작업판에서 보기",
252
+ "ai-assistant.workspace.contains-table": "표 {count}",
253
+ "ai-assistant.workspace.contains-chart": "차트 {count}",
254
+ "ai-assistant.workspace.contains-metrics": "수치 {count}",
255
+ "ai-assistant.workspace.contains-steps": "경과 {count}",
256
+ "ai-assistant.entry.change": "{count}건 고치기",
257
+ "ai-assistant.entry.changed": "{count}건을 고쳤습니다.",
258
+ "ai-assistant.entry.changed-none": "고친 기록이 없습니다.",
259
+ "ai-assistant.entry.changes": "{count}건",
260
+ "ai-assistant.entry.not-changed": "{count}건은 고치지 않습니다",
261
+ "ai-assistant.entry.record": "기록",
262
+ "ai-assistant.entry.picked": "고른 길",
263
+ "ai-assistant.entry.via-current": "보고 있는 기록",
264
+ "ai-assistant.entry.via-selected": "선택한 행",
265
+ "ai-assistant.entry.via-id": "대화에서 찾은 기록",
266
+ "ai-assistant.entry.issue.record-not-found": "볼 수 있는 기록이 아닙니다",
267
+ "ai-assistant.entry.issue.changed-since": "그사이 바뀌었습니다",
268
+ "ai-assistant.entry.issue.no-change": "이미 그 값입니다",
269
+ "ai-assistant.entry.issue.nothing-to-change": "고칠 칸이 없습니다",
270
+ "ai-assistant.entry.issue.not-changeable": "고칠 수 없는 칸이라 뺐습니다"
236
271
  }
@@ -232,5 +232,40 @@
232
232
  "ai-assistant.entry.total-matches": "sepadan",
233
233
  "ai-assistant.entry.issue.not-in-source": "fail tiada nilai ini",
234
234
  "ai-assistant.entry.issue.source-scattered": "nilai tidak berada pada satu baris fail",
235
- "ai-assistant.entry.issue.source-not-checked": "foto tidak dapat disemak di sini"
235
+ "ai-assistant.entry.issue.source-not-checked": "foto tidak dapat disemak di sini",
236
+ "ai-assistant.workspace.title": "ruang kerja AI",
237
+ "ai-assistant.workspace.unreadable": "blok yang tidak dapat dilukis ({reason})",
238
+ "ai-assistant.workspace.rows": "{count} baris",
239
+ "ai-assistant.workspace.csv": "CSV",
240
+ "ai-assistant.workspace.cut": "{count} baris lagi ditinggalkan kerana melebihi had.",
241
+ "ai-assistant.workspace.other": "lain-lain",
242
+ "ai-assistant.workspace.as-chart": "carta",
243
+ "ai-assistant.workspace.as-table": "jadual",
244
+ "ai-assistant.workspace.loading": "memuatkan ruang kerja…",
245
+ "ai-assistant.workspace.unreadable-page": "tidak dapat membaca ruang kerja ini: {reason}",
246
+ "ai-assistant.workspace.not-found": "tiada ruang kerja yang boleh anda lihat di sini.",
247
+ "ai-assistant.workspace.newer": "versi lebih baharu ({version}) tersedia.",
248
+ "ai-assistant.workspace.show-newer": "tunjukkan",
249
+ "ai-assistant.workspace.versions": "versi",
250
+ "ai-assistant.workspace.version": "versi {version} daripada {of}",
251
+ "ai-assistant.workspace.open": "buka dalam ruang kerja",
252
+ "ai-assistant.workspace.contains-table": "{count} jadual",
253
+ "ai-assistant.workspace.contains-chart": "{count} carta",
254
+ "ai-assistant.workspace.contains-metrics": "{count} angka",
255
+ "ai-assistant.workspace.contains-steps": "{count} kemajuan",
256
+ "ai-assistant.entry.change": "ubah {count} rekod",
257
+ "ai-assistant.entry.changed": "{count} rekod diubah.",
258
+ "ai-assistant.entry.changed-none": "tiada rekod diubah.",
259
+ "ai-assistant.entry.changes": "{count} rekod",
260
+ "ai-assistant.entry.not-changed": "{count} tidak akan diubah",
261
+ "ai-assistant.entry.record": "rekod",
262
+ "ai-assistant.entry.picked": "dipilih",
263
+ "ai-assistant.entry.via-current": "rekod pada skrin",
264
+ "ai-assistant.entry.via-selected": "dipilih pada skrin",
265
+ "ai-assistant.entry.via-id": "ditemui dalam perbualan",
266
+ "ai-assistant.entry.issue.record-not-found": "bukan rekod yang boleh anda lihat",
267
+ "ai-assistant.entry.issue.changed-since": "telah berubah sejak kad dibuat",
268
+ "ai-assistant.entry.issue.no-change": "sudah nilai itu",
269
+ "ai-assistant.entry.issue.nothing-to-change": "tiada yang perlu diubah",
270
+ "ai-assistant.entry.issue.not-changeable": "medan ini tidak boleh diubah - ditinggalkan"
236
271
  }
@@ -232,5 +232,40 @@
232
232
  "ai-assistant.entry.total-matches": "一致",
233
233
  "ai-assistant.entry.issue.not-in-source": "资料中没有此值",
234
234
  "ai-assistant.entry.issue.source-scattered": "这些值不在资料的同一行",
235
- "ai-assistant.entry.issue.source-not-checked": "照片资料无法核对"
235
+ "ai-assistant.entry.issue.source-not-checked": "照片资料无法核对",
236
+ "ai-assistant.workspace.title": "AI 工作板",
237
+ "ai-assistant.workspace.unreadable": "无法绘制的块({reason})",
238
+ "ai-assistant.workspace.rows": "{count}行",
239
+ "ai-assistant.workspace.csv": "CSV",
240
+ "ai-assistant.workspace.cut": "超出上限的{count}行已省略。",
241
+ "ai-assistant.workspace.other": "其他",
242
+ "ai-assistant.workspace.as-chart": "图表",
243
+ "ai-assistant.workspace.as-table": "以表格查看",
244
+ "ai-assistant.workspace.loading": "正在加载工作板…",
245
+ "ai-assistant.workspace.unreadable-page": "无法读取此工作板:{reason}",
246
+ "ai-assistant.workspace.not-found": "没有您可以查看的工作板。",
247
+ "ai-assistant.workspace.newer": "有新版本({version})。",
248
+ "ai-assistant.workspace.show-newer": "查看",
249
+ "ai-assistant.workspace.versions": "版本",
250
+ "ai-assistant.workspace.version": "第{version}版 / 共{of}版",
251
+ "ai-assistant.workspace.open": "在工作板中查看",
252
+ "ai-assistant.workspace.contains-table": "表格 {count}",
253
+ "ai-assistant.workspace.contains-chart": "图表 {count}",
254
+ "ai-assistant.workspace.contains-metrics": "指标 {count}",
255
+ "ai-assistant.workspace.contains-steps": "进度 {count}",
256
+ "ai-assistant.entry.change": "修改{count}条",
257
+ "ai-assistant.entry.changed": "已修改{count}条。",
258
+ "ai-assistant.entry.changed-none": "未修改任何记录。",
259
+ "ai-assistant.entry.changes": "{count}条",
260
+ "ai-assistant.entry.not-changed": "{count}条不会修改",
261
+ "ai-assistant.entry.record": "记录",
262
+ "ai-assistant.entry.picked": "选取方式",
263
+ "ai-assistant.entry.via-current": "当前查看的记录",
264
+ "ai-assistant.entry.via-selected": "已选中的行",
265
+ "ai-assistant.entry.via-id": "在对话中找到",
266
+ "ai-assistant.entry.issue.record-not-found": "不是您可以查看的记录",
267
+ "ai-assistant.entry.issue.changed-since": "在此期间已被修改",
268
+ "ai-assistant.entry.issue.no-change": "已是该值",
269
+ "ai-assistant.entry.issue.nothing-to-change": "没有要修改的字段",
270
+ "ai-assistant.entry.issue.not-changeable": "此字段不可修改,已忽略"
236
271
  }