@ai-setting/roy-agent-core 1.7.56 → 1.7.57

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 (105) hide show
  1. package/dist/config/index.js +8 -8
  2. package/dist/env/agent/agent-component.d.ts +11 -0
  3. package/dist/env/agent/index.js +14 -14
  4. package/dist/env/commands/index.js +8 -8
  5. package/dist/env/context/index.js +4 -4
  6. package/dist/env/debug/index.js +8 -8
  7. package/dist/env/event-source/event-source-handlers.d.ts +28 -0
  8. package/dist/env/event-source/index.js +18 -17
  9. package/dist/env/hook/index.js +6 -6
  10. package/dist/env/index.js +44 -43
  11. package/dist/env/llm/index.js +9 -9
  12. package/dist/env/log-trace/index.js +8 -8
  13. package/dist/env/log-trace/opentelemetry/tracer-provider.d.ts +86 -1
  14. package/dist/env/mcp/index.js +9 -9
  15. package/dist/env/mcp/tool/index.js +2 -2
  16. package/dist/env/memory/index.js +9 -9
  17. package/dist/env/memory/plugin/index.js +2 -2
  18. package/dist/env/plugin/index.js +8 -8
  19. package/dist/env/prompt/index.js +8 -8
  20. package/dist/env/session/index.js +11 -11
  21. package/dist/env/session/storage/index.js +5 -5
  22. package/dist/env/skill/index.js +8 -8
  23. package/dist/env/task/delegate/index.js +9 -9
  24. package/dist/env/task/index.js +18 -17
  25. package/dist/env/task/plugins/index.js +11 -10
  26. package/dist/env/task/plugins/lark-card-patch-notifier.d.ts +109 -2
  27. package/dist/env/task/plugins/lark-card-state-store.d.ts +137 -0
  28. package/dist/env/task/plugins/lark-cli-task-notify-plugin.d.ts +154 -2
  29. package/dist/env/task/storage/index.js +4 -3
  30. package/dist/env/task/tools/index.js +4 -4
  31. package/dist/env/tool/built-in/index.js +4 -4
  32. package/dist/env/tool/index.js +11 -11
  33. package/dist/env/workflow/engine/index.js +13 -13
  34. package/dist/env/workflow/hooks/index.js +8 -8
  35. package/dist/env/workflow/index.js +23 -23
  36. package/dist/env/workflow/nodes/index.js +3 -3
  37. package/dist/env/workflow/plugins/index.js +9 -9
  38. package/dist/env/workflow/service/index.js +3 -3
  39. package/dist/env/workflow/storage/index.js +4 -4
  40. package/dist/env/workflow/tools/index.js +15 -15
  41. package/dist/env/workflow/utils/index.js +5 -5
  42. package/dist/index.js +58 -57
  43. package/dist/shared/@ai-setting/{roy-agent-core-0b3fdnn3.js → roy-agent-core-029r8kdw.js} +4 -4
  44. package/dist/shared/@ai-setting/{roy-agent-core-nra8vfrs.js → roy-agent-core-08njdcpj.js} +1 -1
  45. package/dist/shared/@ai-setting/{roy-agent-core-40xzbjtm.js → roy-agent-core-0kn3zt1t.js} +2 -2
  46. package/dist/shared/@ai-setting/{roy-agent-core-nhk0dsxr.js → roy-agent-core-0yn7a78e.js} +14 -14
  47. package/dist/shared/@ai-setting/{roy-agent-core-tbrn9wdm.js → roy-agent-core-14bq77wr.js} +1 -1
  48. package/dist/shared/@ai-setting/{roy-agent-core-vmg30n5x.js → roy-agent-core-1sfbs57v.js} +8 -8
  49. package/dist/shared/@ai-setting/{roy-agent-core-qyqnmz8c.js → roy-agent-core-20m8je6e.js} +1 -1
  50. package/dist/shared/@ai-setting/{roy-agent-core-zmeka63k.js → roy-agent-core-2ctyjy62.js} +1 -1
  51. package/dist/shared/@ai-setting/{roy-agent-core-heft3j4c.js → roy-agent-core-2fk8c9ax.js} +3 -3
  52. package/dist/shared/@ai-setting/{roy-agent-core-8cgtwytv.js → roy-agent-core-4096f575.js} +4 -4
  53. package/dist/shared/@ai-setting/{roy-agent-core-yg247mk4.js → roy-agent-core-47s81t6g.js} +2 -2
  54. package/dist/shared/@ai-setting/{roy-agent-core-q7zksbw0.js → roy-agent-core-5f7myqnb.js} +5 -5
  55. package/dist/shared/@ai-setting/{roy-agent-core-zjttt2y4.js → roy-agent-core-7nb23tdd.js} +1 -1
  56. package/dist/shared/@ai-setting/roy-agent-core-7q4wdze2.js +7 -0
  57. package/dist/shared/@ai-setting/{roy-agent-core-d4jpn06f.js → roy-agent-core-84rs0c8d.js} +7 -7
  58. package/dist/shared/@ai-setting/{roy-agent-core-c6at31ra.js → roy-agent-core-84xtww7d.js} +3 -3
  59. package/dist/shared/@ai-setting/{roy-agent-core-202v00x4.js → roy-agent-core-89sxsrc7.js} +1 -1
  60. package/dist/shared/@ai-setting/{roy-agent-core-ezsyyjxw.js → roy-agent-core-8bngppw0.js} +580 -83
  61. package/dist/shared/@ai-setting/{roy-agent-core-b599jgyd.js → roy-agent-core-8p63s836.js} +1 -1
  62. package/dist/shared/@ai-setting/{roy-agent-core-5rxs0ra3.js → roy-agent-core-9zhkdg6w.js} +2 -2
  63. package/dist/shared/@ai-setting/{roy-agent-core-gn8f4rhs.js → roy-agent-core-baaa4wtp.js} +2 -2
  64. package/dist/shared/@ai-setting/{roy-agent-core-nntphgww.js → roy-agent-core-c36335nw.js} +146 -8
  65. package/dist/shared/@ai-setting/{roy-agent-core-tc7gw38m.js → roy-agent-core-c7w2h47a.js} +3 -3
  66. package/dist/shared/@ai-setting/{roy-agent-core-j5c3chtn.js → roy-agent-core-cyefe8z5.js} +1 -1
  67. package/dist/shared/@ai-setting/{roy-agent-core-n3b7ztms.js → roy-agent-core-d75t8gea.js} +1 -1
  68. package/dist/shared/@ai-setting/{roy-agent-core-yv9x4wmg.js → roy-agent-core-e1w17tht.js} +2 -2
  69. package/dist/shared/@ai-setting/{roy-agent-core-f8sp1txg.js → roy-agent-core-e250355z.js} +3 -3
  70. package/dist/shared/@ai-setting/{roy-agent-core-9nv586rw.js → roy-agent-core-eanq305k.js} +22 -16
  71. package/dist/shared/@ai-setting/{roy-agent-core-6qgq7h1g.js → roy-agent-core-em4hks9t.js} +4 -4
  72. package/dist/shared/@ai-setting/{roy-agent-core-0bmk44ye.js → roy-agent-core-en2xqxs9.js} +5 -5
  73. package/dist/shared/@ai-setting/{roy-agent-core-e0wbq0qq.js → roy-agent-core-ewcc5qdt.js} +11 -11
  74. package/dist/shared/@ai-setting/{roy-agent-core-3kz6934b.js → roy-agent-core-fbjd7bt6.js} +3 -7
  75. package/dist/shared/@ai-setting/{roy-agent-core-98aa9r0x.js → roy-agent-core-fw6k4w1h.js} +6 -6
  76. package/dist/shared/@ai-setting/{roy-agent-core-ns3pbyz4.js → roy-agent-core-ge87xbas.js} +1 -1
  77. package/dist/shared/@ai-setting/{roy-agent-core-r9qe0ghe.js → roy-agent-core-geh6j7bw.js} +2 -2
  78. package/dist/shared/@ai-setting/{roy-agent-core-wafk25ff.js → roy-agent-core-gksw1gjb.js} +1 -1
  79. package/dist/shared/@ai-setting/{roy-agent-core-3dkzqqsd.js → roy-agent-core-hefarcp0.js} +1 -1
  80. package/dist/shared/@ai-setting/{roy-agent-core-5gw6w424.js → roy-agent-core-hs41gx9w.js} +5 -5
  81. package/dist/shared/@ai-setting/{roy-agent-core-d14h726p.js → roy-agent-core-jjhw9am6.js} +4 -4
  82. package/dist/shared/@ai-setting/{roy-agent-core-5psjwd08.js → roy-agent-core-jjxdmedn.js} +2 -2
  83. package/dist/shared/@ai-setting/{roy-agent-core-2044fbsd.js → roy-agent-core-jw5ar4p0.js} +33 -38
  84. package/dist/shared/@ai-setting/{roy-agent-core-bwzy00t2.js → roy-agent-core-kq9pz2a7.js} +4 -4
  85. package/dist/shared/@ai-setting/{roy-agent-core-8t7wny6v.js → roy-agent-core-m68z3pw1.js} +1 -1
  86. package/dist/shared/@ai-setting/{roy-agent-core-16t0zfbk.js → roy-agent-core-m97jn2ra.js} +1 -1
  87. package/dist/shared/@ai-setting/{roy-agent-core-kzg1jwt8.js → roy-agent-core-n0p0hwgd.js} +1 -1
  88. package/dist/shared/@ai-setting/{roy-agent-core-xcq04fq0.js → roy-agent-core-psg6f1v6.js} +6 -6
  89. package/dist/shared/@ai-setting/{roy-agent-core-4zy2v3br.js → roy-agent-core-q4gdfypk.js} +3 -3
  90. package/dist/shared/@ai-setting/{roy-agent-core-m8n0dffe.js → roy-agent-core-rcgvmtms.js} +1 -1
  91. package/dist/shared/@ai-setting/{roy-agent-core-8seq65bp.js → roy-agent-core-rt115qfc.js} +44 -1
  92. package/dist/shared/@ai-setting/{roy-agent-core-jszgaevt.js → roy-agent-core-syyw58p9.js} +2 -2
  93. package/dist/shared/@ai-setting/{roy-agent-core-3mc6vmvj.js → roy-agent-core-t4x089js.js} +1 -1
  94. package/dist/shared/@ai-setting/{roy-agent-core-qjjf4tjb.js → roy-agent-core-t64nmayv.js} +2 -2
  95. package/dist/shared/@ai-setting/{roy-agent-core-833t16n1.js → roy-agent-core-txwptxk1.js} +3 -3
  96. package/dist/shared/@ai-setting/{roy-agent-core-w7hnjhvx.js → roy-agent-core-tze5596n.js} +3 -3
  97. package/dist/shared/@ai-setting/{roy-agent-core-pjxa78mp.js → roy-agent-core-vath15kt.js} +6 -6
  98. package/dist/shared/@ai-setting/{roy-agent-core-e677am8e.js → roy-agent-core-vgdhxbx3.js} +2 -2
  99. package/dist/shared/@ai-setting/{roy-agent-core-pemxr5n4.js → roy-agent-core-vh0qzb24.js} +2 -2
  100. package/dist/shared/@ai-setting/{roy-agent-core-v2188rnk.js → roy-agent-core-w93z6a42.js} +8 -8
  101. package/dist/shared/@ai-setting/{roy-agent-core-97eyghsp.js → roy-agent-core-ygn5tzt1.js} +2 -2
  102. package/dist/shared/@ai-setting/{roy-agent-core-1pnfkspm.js → roy-agent-core-yphwdm9x.js} +2 -2
  103. package/dist/shared/@ai-setting/{roy-agent-core-gngjkw3b.js → roy-agent-core-ytd5eztz.js} +1 -1
  104. package/dist/utils/temp-file-manager/index.js +2 -2
  105. package/package.json +1 -1
@@ -10,21 +10,21 @@ import {
10
10
  augmentNpmEnvForPackageRunner,
11
11
  getMcpPathPriority,
12
12
  resolvePackageRunnerCommand
13
- } from "../../shared/@ai-setting/roy-agent-core-c6at31ra.js";
13
+ } from "../../shared/@ai-setting/roy-agent-core-84xtww7d.js";
14
14
  import {
15
15
  adaptMcpTool,
16
16
  convertInputSchemaToZod,
17
17
  createMcpToolsDescription
18
- } from "../../shared/@ai-setting/roy-agent-core-8t7wny6v.js";
18
+ } from "../../shared/@ai-setting/roy-agent-core-m68z3pw1.js";
19
19
  import"../../shared/@ai-setting/roy-agent-core-ctdhjv68.js";
20
20
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
21
- import"../../shared/@ai-setting/roy-agent-core-40xzbjtm.js";
22
- import"../../shared/@ai-setting/roy-agent-core-gngjkw3b.js";
23
- import"../../shared/@ai-setting/roy-agent-core-1pnfkspm.js";
24
- import"../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
25
- import"../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
26
- import"../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
27
- import"../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
21
+ import"../../shared/@ai-setting/roy-agent-core-0kn3zt1t.js";
22
+ import"../../shared/@ai-setting/roy-agent-core-ytd5eztz.js";
23
+ import"../../shared/@ai-setting/roy-agent-core-yphwdm9x.js";
24
+ import"../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
25
+ import"../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
26
+ import"../../shared/@ai-setting/roy-agent-core-8p63s836.js";
27
+ import"../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
28
28
  import"../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
29
29
  import {
30
30
  ensureFallbackNpmPrefix,
@@ -2,8 +2,8 @@ import {
2
2
  adaptMcpTool,
3
3
  convertInputSchemaToZod,
4
4
  createMcpToolsDescription
5
- } from "../../../shared/@ai-setting/roy-agent-core-8t7wny6v.js";
6
- import"../../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
5
+ } from "../../../shared/@ai-setting/roy-agent-core-m68z3pw1.js";
6
+ import"../../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
7
7
  import"../../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
8
8
  import"../../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
9
9
  export {
@@ -3,7 +3,7 @@ import {
3
3
  MemoryComponent,
4
4
  SOURCE_PRIORITY,
5
5
  getSourcePriority
6
- } from "../../shared/@ai-setting/roy-agent-core-gn8f4rhs.js";
6
+ } from "../../shared/@ai-setting/roy-agent-core-baaa4wtp.js";
7
7
  import {
8
8
  RecallMemorySchema,
9
9
  RecordMemorySchema
@@ -23,15 +23,15 @@ import {
23
23
  generateProjectSummary,
24
24
  parseMemoryAgentOutput,
25
25
  recallMemory
26
- } from "../../shared/@ai-setting/roy-agent-core-j5c3chtn.js";
26
+ } from "../../shared/@ai-setting/roy-agent-core-cyefe8z5.js";
27
27
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
28
- import"../../shared/@ai-setting/roy-agent-core-40xzbjtm.js";
29
- import"../../shared/@ai-setting/roy-agent-core-gngjkw3b.js";
30
- import"../../shared/@ai-setting/roy-agent-core-1pnfkspm.js";
31
- import"../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
32
- import"../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
33
- import"../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
34
- import"../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
28
+ import"../../shared/@ai-setting/roy-agent-core-0kn3zt1t.js";
29
+ import"../../shared/@ai-setting/roy-agent-core-ytd5eztz.js";
30
+ import"../../shared/@ai-setting/roy-agent-core-yphwdm9x.js";
31
+ import"../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
32
+ import"../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
33
+ import"../../shared/@ai-setting/roy-agent-core-8p63s836.js";
34
+ import"../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
35
35
  import"../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
36
36
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
37
37
  export {
@@ -13,8 +13,8 @@ import {
13
13
  generateProjectSummary,
14
14
  parseMemoryAgentOutput,
15
15
  recallMemory
16
- } from "../../../shared/@ai-setting/roy-agent-core-j5c3chtn.js";
17
- import"../../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
16
+ } from "../../../shared/@ai-setting/roy-agent-core-cyefe8z5.js";
17
+ import"../../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
18
18
  import"../../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
19
19
  import"../../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
20
20
  export {
@@ -1,23 +1,23 @@
1
1
  import {
2
2
  EventBusNotificationChannel,
3
3
  PluginComponent
4
- } from "../../shared/@ai-setting/roy-agent-core-5gw6w424.js";
4
+ } from "../../shared/@ai-setting/roy-agent-core-hs41gx9w.js";
5
5
  import {
6
6
  normalizeLarkAtMentions
7
7
  } from "../../shared/@ai-setting/roy-agent-core-64f22h1g.js";
8
8
  import {
9
9
  BasePlugin
10
10
  } from "../../shared/@ai-setting/roy-agent-core-az13yzmc.js";
11
- import"../../shared/@ai-setting/roy-agent-core-40xzbjtm.js";
12
- import"../../shared/@ai-setting/roy-agent-core-gngjkw3b.js";
13
- import"../../shared/@ai-setting/roy-agent-core-1pnfkspm.js";
14
- import"../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
15
- import"../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
16
- import"../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
11
+ import"../../shared/@ai-setting/roy-agent-core-0kn3zt1t.js";
12
+ import"../../shared/@ai-setting/roy-agent-core-ytd5eztz.js";
13
+ import"../../shared/@ai-setting/roy-agent-core-yphwdm9x.js";
14
+ import"../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
15
+ import"../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
16
+ import"../../shared/@ai-setting/roy-agent-core-8p63s836.js";
17
17
  import {
18
18
  createLogger,
19
19
  init_logger
20
- } from "../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
20
+ } from "../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
21
21
  import"../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
22
22
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
23
23
  // src/env/plugin/lark-cli-notification-channel.ts
@@ -3,17 +3,17 @@ import {
3
3
  PromptConfigSchema,
4
4
  PromptPathSchema,
5
5
  PromptRenderer
6
- } from "../../shared/@ai-setting/roy-agent-core-6qgq7h1g.js";
6
+ } from "../../shared/@ai-setting/roy-agent-core-em4hks9t.js";
7
7
  import"../../shared/@ai-setting/roy-agent-core-6masakz4.js";
8
8
  import"../../shared/@ai-setting/roy-agent-core-qxnbvgwe.js";
9
9
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
10
- import"../../shared/@ai-setting/roy-agent-core-40xzbjtm.js";
11
- import"../../shared/@ai-setting/roy-agent-core-gngjkw3b.js";
12
- import"../../shared/@ai-setting/roy-agent-core-1pnfkspm.js";
13
- import"../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
14
- import"../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
15
- import"../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
16
- import"../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
10
+ import"../../shared/@ai-setting/roy-agent-core-0kn3zt1t.js";
11
+ import"../../shared/@ai-setting/roy-agent-core-ytd5eztz.js";
12
+ import"../../shared/@ai-setting/roy-agent-core-yphwdm9x.js";
13
+ import"../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
14
+ import"../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
15
+ import"../../shared/@ai-setting/roy-agent-core-8p63s836.js";
16
+ import"../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
17
17
  import"../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
18
18
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
19
19
  export {
@@ -3,25 +3,25 @@ import {
3
3
  MIN_SESSION_ID_LENGTH,
4
4
  SessionComponent,
5
5
  isValidSessionId
6
- } from "../../shared/@ai-setting/roy-agent-core-bwzy00t2.js";
6
+ } from "../../shared/@ai-setting/roy-agent-core-kq9pz2a7.js";
7
7
  import {
8
8
  MemorySessionStore
9
- } from "../../shared/@ai-setting/roy-agent-core-tc7gw38m.js";
9
+ } from "../../shared/@ai-setting/roy-agent-core-c7w2h47a.js";
10
10
  import"../../shared/@ai-setting/roy-agent-core-ze068vc9.js";
11
11
  import"../../shared/@ai-setting/roy-agent-core-rvxg1wps.js";
12
12
  import {
13
13
  SessionMessageConverter
14
- } from "../../shared/@ai-setting/roy-agent-core-ns3pbyz4.js";
15
- import"../../shared/@ai-setting/roy-agent-core-yv9x4wmg.js";
14
+ } from "../../shared/@ai-setting/roy-agent-core-ge87xbas.js";
15
+ import"../../shared/@ai-setting/roy-agent-core-e1w17tht.js";
16
16
  import"../../shared/@ai-setting/roy-agent-core-zjdzk1gg.js";
17
17
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
18
- import"../../shared/@ai-setting/roy-agent-core-40xzbjtm.js";
19
- import"../../shared/@ai-setting/roy-agent-core-gngjkw3b.js";
20
- import"../../shared/@ai-setting/roy-agent-core-1pnfkspm.js";
21
- import"../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
22
- import"../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
23
- import"../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
24
- import"../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
18
+ import"../../shared/@ai-setting/roy-agent-core-0kn3zt1t.js";
19
+ import"../../shared/@ai-setting/roy-agent-core-ytd5eztz.js";
20
+ import"../../shared/@ai-setting/roy-agent-core-yphwdm9x.js";
21
+ import"../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
22
+ import"../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
23
+ import"../../shared/@ai-setting/roy-agent-core-8p63s836.js";
24
+ import"../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
25
25
  import"../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
26
26
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
27
27
  export {
@@ -3,12 +3,12 @@ import {
3
3
  SQLiteSessionStore,
4
4
  getDefaultDataDir,
5
5
  getDefaultSessionDbPath
6
- } from "../../../shared/@ai-setting/roy-agent-core-tc7gw38m.js";
7
- import"../../../shared/@ai-setting/roy-agent-core-ns3pbyz4.js";
8
- import"../../../shared/@ai-setting/roy-agent-core-yv9x4wmg.js";
6
+ } from "../../../shared/@ai-setting/roy-agent-core-c7w2h47a.js";
7
+ import"../../../shared/@ai-setting/roy-agent-core-ge87xbas.js";
8
+ import"../../../shared/@ai-setting/roy-agent-core-e1w17tht.js";
9
9
  import"../../../shared/@ai-setting/roy-agent-core-zjdzk1gg.js";
10
- import"../../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
11
- import"../../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
10
+ import"../../../shared/@ai-setting/roy-agent-core-8p63s836.js";
11
+ import"../../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
12
12
  import"../../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
13
13
  import"../../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
14
14
  export {
@@ -6,20 +6,20 @@ import {
6
6
  getSourcePriority,
7
7
  parseFrontmatter,
8
8
  parseSkillFile
9
- } from "../../shared/@ai-setting/roy-agent-core-yg247mk4.js";
9
+ } from "../../shared/@ai-setting/roy-agent-core-47s81t6g.js";
10
10
  import {
11
11
  SkillToolSchema,
12
12
  buildSkillDescription,
13
13
  createSkillTool
14
14
  } from "../../shared/@ai-setting/roy-agent-core-psvxt4c9.js";
15
15
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
16
- import"../../shared/@ai-setting/roy-agent-core-40xzbjtm.js";
17
- import"../../shared/@ai-setting/roy-agent-core-gngjkw3b.js";
18
- import"../../shared/@ai-setting/roy-agent-core-1pnfkspm.js";
19
- import"../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
20
- import"../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
21
- import"../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
22
- import"../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
16
+ import"../../shared/@ai-setting/roy-agent-core-0kn3zt1t.js";
17
+ import"../../shared/@ai-setting/roy-agent-core-ytd5eztz.js";
18
+ import"../../shared/@ai-setting/roy-agent-core-yphwdm9x.js";
19
+ import"../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
20
+ import"../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
21
+ import"../../shared/@ai-setting/roy-agent-core-8p63s836.js";
22
+ import"../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
23
23
  import"../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
24
24
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
25
25
  export {
@@ -3,19 +3,19 @@ import {
3
3
  BackgroundTaskManager,
4
4
  createDelegateTool,
5
5
  createStopTool
6
- } from "../../../shared/@ai-setting/roy-agent-core-vmg30n5x.js";
7
- import"../../../shared/@ai-setting/roy-agent-core-tbrn9wdm.js";
8
- import"../../../shared/@ai-setting/roy-agent-core-zmeka63k.js";
6
+ } from "../../../shared/@ai-setting/roy-agent-core-1sfbs57v.js";
7
+ import"../../../shared/@ai-setting/roy-agent-core-14bq77wr.js";
8
+ import"../../../shared/@ai-setting/roy-agent-core-2ctyjy62.js";
9
9
  import"../../../shared/@ai-setting/roy-agent-core-1pg0fepg.js";
10
10
  import"../../../shared/@ai-setting/roy-agent-core-6masakz4.js";
11
- import"../../../shared/@ai-setting/roy-agent-core-97eyghsp.js";
11
+ import"../../../shared/@ai-setting/roy-agent-core-ygn5tzt1.js";
12
12
  import"../../../shared/@ai-setting/roy-agent-core-qxnbvgwe.js";
13
13
  import"../../../shared/@ai-setting/roy-agent-core-c1v263jn.js";
14
- import"../../../shared/@ai-setting/roy-agent-core-1pnfkspm.js";
15
- import"../../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
16
- import"../../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
17
- import"../../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
18
- import"../../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
14
+ import"../../../shared/@ai-setting/roy-agent-core-yphwdm9x.js";
15
+ import"../../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
16
+ import"../../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
17
+ import"../../../shared/@ai-setting/roy-agent-core-8p63s836.js";
18
+ import"../../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
19
19
  import"../../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
20
20
  import"../../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
21
21
  export {
@@ -5,33 +5,34 @@ import {
5
5
  TaskPriorityEnum,
6
6
  TaskStatusEnum,
7
7
  TaskTypeEnum
8
- } from "../../shared/@ai-setting/roy-agent-core-e0wbq0qq.js";
8
+ } from "../../shared/@ai-setting/roy-agent-core-ewcc5qdt.js";
9
9
  import"../../shared/@ai-setting/roy-agent-core-amkqnyzy.js";
10
- import {
11
- SQLiteTaskStore,
12
- getDefaultTaskDbPath
13
- } from "../../shared/@ai-setting/roy-agent-core-3kz6934b.js";
14
- import"../../shared/@ai-setting/roy-agent-core-pemxr5n4.js";
10
+ import"../../shared/@ai-setting/roy-agent-core-7q4wdze2.js";
11
+ import"../../shared/@ai-setting/roy-agent-core-vh0qzb24.js";
15
12
  import"../../shared/@ai-setting/roy-agent-core-rn57psp0.js";
16
13
  import {
17
14
  TaskEntityEventTypes
18
15
  } from "../../shared/@ai-setting/roy-agent-core-8gxth0eh.js";
19
- import"../../shared/@ai-setting/roy-agent-core-vmg30n5x.js";
20
- import"../../shared/@ai-setting/roy-agent-core-tbrn9wdm.js";
21
- import"../../shared/@ai-setting/roy-agent-core-zmeka63k.js";
16
+ import"../../shared/@ai-setting/roy-agent-core-1sfbs57v.js";
17
+ import"../../shared/@ai-setting/roy-agent-core-14bq77wr.js";
18
+ import {
19
+ SQLiteTaskStore,
20
+ getDefaultTaskDbPath
21
+ } from "../../shared/@ai-setting/roy-agent-core-fbjd7bt6.js";
22
+ import"../../shared/@ai-setting/roy-agent-core-2ctyjy62.js";
22
23
  import"../../shared/@ai-setting/roy-agent-core-1pg0fepg.js";
23
24
  import"../../shared/@ai-setting/roy-agent-core-6masakz4.js";
24
- import"../../shared/@ai-setting/roy-agent-core-97eyghsp.js";
25
+ import"../../shared/@ai-setting/roy-agent-core-ygn5tzt1.js";
25
26
  import"../../shared/@ai-setting/roy-agent-core-qxnbvgwe.js";
26
27
  import"../../shared/@ai-setting/roy-agent-core-c1v263jn.js";
27
28
  import"../../shared/@ai-setting/roy-agent-core-7hh0brvs.js";
28
- import"../../shared/@ai-setting/roy-agent-core-40xzbjtm.js";
29
- import"../../shared/@ai-setting/roy-agent-core-gngjkw3b.js";
30
- import"../../shared/@ai-setting/roy-agent-core-1pnfkspm.js";
31
- import"../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
32
- import"../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
33
- import"../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
34
- import"../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
29
+ import"../../shared/@ai-setting/roy-agent-core-0kn3zt1t.js";
30
+ import"../../shared/@ai-setting/roy-agent-core-ytd5eztz.js";
31
+ import"../../shared/@ai-setting/roy-agent-core-yphwdm9x.js";
32
+ import"../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
33
+ import"../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
34
+ import"../../shared/@ai-setting/roy-agent-core-8p63s836.js";
35
+ import"../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
35
36
  import"../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
36
37
  import"../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
37
38
  export {
@@ -10,21 +10,22 @@ import {
10
10
  formatExtractorInput,
11
11
  formatExtractorInputFromDescription,
12
12
  parseExtractorOutput
13
- } from "../../../shared/@ai-setting/roy-agent-core-ezsyyjxw.js";
14
- import"../../../shared/@ai-setting/roy-agent-core-zmeka63k.js";
13
+ } from "../../../shared/@ai-setting/roy-agent-core-8bngppw0.js";
14
+ import"../../../shared/@ai-setting/roy-agent-core-fbjd7bt6.js";
15
+ import"../../../shared/@ai-setting/roy-agent-core-2ctyjy62.js";
15
16
  import"../../../shared/@ai-setting/roy-agent-core-1pg0fepg.js";
16
17
  import"../../../shared/@ai-setting/roy-agent-core-6masakz4.js";
17
- import"../../../shared/@ai-setting/roy-agent-core-nntphgww.js";
18
- import"../../../shared/@ai-setting/roy-agent-core-202v00x4.js";
19
- import"../../../shared/@ai-setting/roy-agent-core-nra8vfrs.js";
18
+ import"../../../shared/@ai-setting/roy-agent-core-c36335nw.js";
19
+ import"../../../shared/@ai-setting/roy-agent-core-89sxsrc7.js";
20
+ import"../../../shared/@ai-setting/roy-agent-core-08njdcpj.js";
20
21
  import"../../../shared/@ai-setting/roy-agent-core-jrj30vq3.js";
21
- import"../../../shared/@ai-setting/roy-agent-core-wafk25ff.js";
22
+ import"../../../shared/@ai-setting/roy-agent-core-gksw1gjb.js";
22
23
  import"../../../shared/@ai-setting/roy-agent-core-e25xkv53.js";
23
24
  import"../../../shared/@ai-setting/roy-agent-core-az13yzmc.js";
24
- import"../../../shared/@ai-setting/roy-agent-core-16t0zfbk.js";
25
- import"../../../shared/@ai-setting/roy-agent-core-jszgaevt.js";
26
- import"../../../shared/@ai-setting/roy-agent-core-b599jgyd.js";
27
- import"../../../shared/@ai-setting/roy-agent-core-8seq65bp.js";
25
+ import"../../../shared/@ai-setting/roy-agent-core-m97jn2ra.js";
26
+ import"../../../shared/@ai-setting/roy-agent-core-syyw58p9.js";
27
+ import"../../../shared/@ai-setting/roy-agent-core-8p63s836.js";
28
+ import"../../../shared/@ai-setting/roy-agent-core-rt115qfc.js";
28
29
  import"../../../shared/@ai-setting/roy-agent-core-jnszp0jq.js";
29
30
  import"../../../shared/@ai-setting/roy-agent-core-fs0mn2jk.js";
30
31
  export {
@@ -61,7 +61,25 @@
61
61
  * ★ Part 2(workflow 通知):新增 `"stopped"`(灰)—— task 只会用前三种,
62
62
  * 但同一套卡片骨架要给 workflow run 复用,而 workflow 有 stopped 终态。
63
63
  */
64
- export type CardStatus = "running" | "completed" | "failed" | "stopped";
64
+ export type CardStatus = "running" | "completed" | "failed" | "stopped"
65
+ /**
66
+ * ★ Task #4536:任务被**取消**(task.status = "cancelled")
67
+ *
68
+ * 旧实现把 cancelled 映射成 "failed" → 卡片显示「🚨 任务失败」,
69
+ * 语义错误(用户主动取消 ≠ 失败)。新增独立状态,灰色 + 「已取消」。
70
+ */
71
+ | "cancelled"
72
+ /**
73
+ * ★ Task #4540:任务被**删除**(用户口中的「取消」= `deleteTask()` 硬删除)
74
+ *
75
+ * 与 `cancelled` 的区别:
76
+ * - `cancelled` = `updateTask(status="cancelled")`,任务**实体还在**(可查、可恢复)
77
+ * - `deleted` = `deleteTask()`,任务实体**已从库消失**(不可恢复)
78
+ *
79
+ * 语义上必须分开:用户看到「🚫 已取消」会以为任务还能找回来;
80
+ * 硬删除后任务真的没了,卡片应显示「🗑️ 已删除」。
81
+ */
82
+ | "deleted";
65
83
  /** workflow 卡片状态(与 CardStatus 同集合;语义别名,便于阅读) */
66
84
  export type WorkflowCardStatus = CardStatus;
67
85
  /** 里程碑(关键节点):时间 + 标题 + 描述 */
@@ -167,11 +185,27 @@ export interface FinishTaskOptions {
167
185
  messageId: string;
168
186
  chatId?: string;
169
187
  profile?: string;
170
- status: Extract<CardStatus, "completed" | "failed">;
188
+ /**
189
+ * 终态卡片状态
190
+ *
191
+ * ★ Task #4536 扩展:
192
+ * - `completed` task.status = completed
193
+ * - `failed` task.status = failed / timeout
194
+ * - `cancelled` task.status = cancelled(**不再**误标「失败」)
195
+ * - `stopped` task.status = paused(用户 stop / 暂停;不是终结,可 resume)
196
+ */
197
+ status: Exclude<CardStatus, "running">;
171
198
  meta?: TaskMeta;
172
199
  /** 终态补充说明(会作为最后一条里程碑 append) */
173
200
  finalStep?: string;
174
201
  progress?: number;
202
+ /**
203
+ * 收尾里程碑的自定义标题(Task #4536 / xval round2 NIT 3)
204
+ *
205
+ * `pauseTask` 默认写「Task 已暂停」;archived 场景应传「Task 已归档」,
206
+ * 否则归档任务的卡片会误显示"已暂停"。
207
+ */
208
+ pausedMilestoneTitle?: string;
175
209
  }
176
210
  export interface StartTaskResult {
177
211
  messageId: string;
@@ -449,6 +483,22 @@ export declare function buildWorkflowCard(opts: {
449
483
  updateCount?: number;
450
484
  spinner?: string;
451
485
  }): CardPayload;
486
+ /**
487
+ * 卡片状态的对外快照(Task #4536)
488
+ *
489
+ * 用于持久化 / 重启恢复:`exportState` / `hydrateState` 的载荷类型。
490
+ */
491
+ export interface CardStateSnapshot {
492
+ chatId?: string;
493
+ profile?: string;
494
+ meta?: TaskMeta;
495
+ startedAt?: string;
496
+ updateCount?: number;
497
+ spinnerIndex?: number;
498
+ milestones?: Milestone[];
499
+ processSteps?: ProcessStep[];
500
+ progress?: number;
501
+ }
452
502
  /**
453
503
  * LarkCardPatchNotifier - 封装单卡片 patch 逻辑
454
504
  */
@@ -480,6 +530,63 @@ export declare class LarkCardPatchNotifier {
480
530
  * (旧实现传 `--content` 是非法 flag → 秒失败 → 卡片永远停在初始态)。
481
531
  */
482
532
  updateTask(opts: UpdateTaskOptions): Promise<void>;
533
+ /**
534
+ * 导出某张卡片的累积内容快照(Task #4536 / xval MAJOR 3)
535
+ *
536
+ * 供上层(`LarkCliTaskNotifyHook`)持久化到 store,让 roy-agent 重启后
537
+ * 第一次 patch 仍能带上原里程碑 / 过程步骤 / 更新计数,而不是退回
538
+ * "第 1 次更新 + 暂无里程碑"。
539
+ *
540
+ * 返回 `undefined` 表示本 notifier 没有该 messageId 的状态
541
+ * (例如刚重启 —— 此时调用方应先用 {@link hydrateState} 灌入)。
542
+ */
543
+ exportState(messageId: string): CardStateSnapshot | undefined;
544
+ /**
545
+ * 注入某张卡片的状态快照(Task #4536 / xval MAJOR 3)
546
+ *
547
+ * 用于**进程重启后**从持久层恢复卡片内容:之后 `updateTask` /
548
+ * `pauseTask` 会基于这份快照继续累积,而不是从空白重建。
549
+ *
550
+ * ★ 幂等:已有 state 时不覆盖(内存里的比持久化的更新)。
551
+ */
552
+ hydrateState(messageId: string, snapshot: CardStateSnapshot): void;
553
+ /**
554
+ * 暂停卡片(Task #4536:stop / archived)+ unpin,**保留**卡片状态与时间线
555
+ *
556
+ * ★ 为什么不能复用 `finishTask`(xval MAJOR 2 回归):
557
+ * `finishTask` 末尾会 `states.delete(messageId)` —— 那是终态语义(卡片到此为止)。
558
+ * `paused` **不是**终态(可 resume),如果也删状态:
559
+ * 1. resume 后 `updateTask` 从空 state 重建 → 里程碑 / 过程步骤 /
560
+ * "第 N 次更新" 全部丢失,卡片退回"第 1 次更新 + 暂无里程碑";
561
+ * 2. 卡片 action handler 的 fallback 也会把 paused 卡片重建成蓝色 running。
562
+ *
563
+ * 所以 pause 只做三件事:patch 成灰底「已暂停」、unpin、**保留 state**。
564
+ * 只有 `unpinOnFinish` 为 true 时才 unpin(与 finishTask 一致)。
565
+ */
566
+ pauseTask(opts: FinishTaskOptions): Promise<void>;
567
+ /**
568
+ * 单独 pin 一条已存在的卡片消息(Task #4536)
569
+ *
570
+ * 用途:任务 **resume**(paused → active)后把卡片重新置顶,
571
+ * 让 pin 状态与任务状态保持一致(stop 时 unpin,resume 时 re-pin)。
572
+ *
573
+ * ★ 与 `startTask` 里的 pin 走**同一套** lark-cli 契约:
574
+ * `im pins create --data '{"message_id":"om_xxx"}'`(绝不传 --chat-id/--message-id,
575
+ * 那是非法 flag → unknown flag → pin 永远失败,Task #4230 的老坑)。
576
+ *
577
+ * 失败直接抛出,由调用方决定降级(pin 失败不应阻断卡片 patch)。
578
+ */
579
+ pinMessage(messageId: string, profile?: string): Promise<void>;
580
+ /**
581
+ * 单独 unpin 一条已存在的卡片消息(Task #4540)
582
+ *
583
+ * 与 {@link pinMessage} 配对。为什么需要它:`finishTask` / `pauseTask` 的
584
+ * unpin 是"尽力而为"的副作用,且一旦 patch 抛错,unpin 那段可能整段跳过。
585
+ * 而用户最在意的是「pin 别再挂着」—— 所以删除任务时额外补一次显式 unpin。
586
+ *
587
+ * 幂等:已 unpin 的消息再 delete 只会 warn(由 `buildUnpinArgs` 保证带 `--yes`)。
588
+ */
589
+ unpinMessage(messageId: string, profile?: string): Promise<void>;
483
590
  /**
484
591
  * 完成任务:patch final status(终态里程碑 → 进度 100%)+ unpin
485
592
  *
@@ -0,0 +1,137 @@
1
+ /**
2
+ * @fileoverview LarkCardStateStore — 任务进展卡片消息的**持久化**记录(Task #4536)
3
+ *
4
+ * ## 为什么需要
5
+ *
6
+ * `LarkCliTaskNotifyHook` 原来只把「taskId → messageId」存在内存 `Map` 里:
7
+ *
8
+ * ```typescript
9
+ * private cardMessageIds: Map<number, string> = new Map();
10
+ * ```
11
+ *
12
+ * ⇒ roy-agent 进程一重启,之前发过的卡片**再也无法被 patch**,
13
+ * 变成永远停在「进行中」的孤儿卡片,pin 也一直挂着。
14
+ *
15
+ * ## 设计选型:独立 SQLite 库文件(不写 task.context)
16
+ *
17
+ * | 方案 | 结论 |
18
+ * |------|------|
19
+ * | a) 写 `task.context` | ❌ 写 context 会同步触发 `task:after.update` → 本插件重入(现有 `CARD_START_INFLIGHT_SENTINEL` 就是被这个坑逼出来的);且 context 会被 `renderTaskInfoLines` 渲染进卡片正文,messageId/chatId 会污染用户可见内容 |
20
+ * | b) 给 `tasks.db` 加表 | ❌ 需要 migration,且插件层拿不到 task store 句柄,耦合更重 |
21
+ *
22
+ * ※ 关于 `task:after.complete` 影响面的准确描述见
23
+ * `lark-cli-task-notify-plugin.ts` 里 `onAfterUpdate` 的注释(xval round2 NIT-2 更正)。
24
+ * | c) 独立 JSON 文件 | ❌ 无事务、无跨进程锁,并发 hook 会互相覆盖 |
25
+ * | **c') 独立 SQLite 库文件** | ✅ 复用既有 `createCompatibleDatabase`(bun:sqlite / better-sqlite3 双运行时),UPSERT 原子、自带跨进程锁、零 migration |
26
+ *
27
+ * 库文件:`~/.local/share/roy-agent/lark-cards.db`(与 `tasks.db` / `workflows.db` 同目录)
28
+ *
29
+ * ## 记录生命周期
30
+ *
31
+ * ```
32
+ * startTask 成功 → upsert({status: "open", pinned: true})
33
+ * patch 成功 → upsert/touch(messageId 不变)
34
+ * paused(stop) → markPaused() → status="paused"(保留 messageId,resume 可复用)
35
+ * resume → markReopened()→ status="open"
36
+ * completed/failed/cancelled → markClosed() → status="closed" + closedAt
37
+ * ```
38
+ *
39
+ * ★ 终态**不删除**记录:保留 messageId/chatId 便于事后追溯(用户手动删卡片后
40
+ * 再 patch 会失败,但记录本身仍有诊断价值)。
41
+ */
42
+ /**
43
+ * 卡片记录状态
44
+ *
45
+ * - `open` 进行中(卡片 pin 着,可 patch)
46
+ * - `paused` 已暂停(stop)。**保留 messageId**:任务 resume 后继续 patch 同一张卡
47
+ * - `closed` 已终结(completed / failed / cancelled)。记录保留,不再 patch
48
+ */
49
+ export type LarkCardRecordStatus = "open" | "paused" | "closed";
50
+ /** 一条卡片持久化记录 */
51
+ export interface LarkCardState {
52
+ /** 任务 ID(主键) */
53
+ taskId: number;
54
+ /** 飞书 message_id(om_xxx) */
55
+ messageId: string;
56
+ /** 飞书 chat_id(oc_xxx) */
57
+ chatId: string;
58
+ /** lark-cli profile(多 appId 场景) */
59
+ profile?: string;
60
+ /** 当前 pin 状态(true = 置顶中) */
61
+ pinned: boolean;
62
+ /** 记录状态 */
63
+ status: LarkCardRecordStatus;
64
+ /** 首次发卡时间(ms epoch) */
65
+ createdAt: number;
66
+ /** 最后更新时间(ms epoch) */
67
+ updatedAt: number;
68
+ /** 终结时间(ms epoch);仅 status=closed 有值 */
69
+ closedAt?: number;
70
+ /**
71
+ * 卡片自持的累积内容(Task #4536 / xval MAJOR 3)
72
+ *
73
+ * ★ 为什么要持久化:`LarkCardPatchNotifier` 的里程碑 / 过程步骤 / 更新计数
74
+ * 只存在内存里。只持久化 messageId 的话,重启后第一次 patch 会用空状态
75
+ * 重建卡片 → 用户看到"暂无里程碑 / 第 1 次更新",历史进展被静默抹掉。
76
+ *
77
+ * 存 JSON 字符串(不建子表):内容规模小(每次更新只 append 一条),
78
+ * 读取模式永远是"整张卡一起取出",不需要按里程碑查询。
79
+ */
80
+ timeline?: string;
81
+ }
82
+ /** 持久化端口(hook 只依赖这个接口,便于测试注入内存实现) */
83
+ export interface LarkCardStateStore {
84
+ /** 写入或覆盖一条记录 */
85
+ upsert(state: LarkCardState): void;
86
+ /** 按 taskId 读取 */
87
+ get(taskId: number): LarkCardState | undefined;
88
+ /** 列出全部记录(诊断用) */
89
+ list(): LarkCardState[];
90
+ /** 更新 pin 状态 */
91
+ markPinned(taskId: number, pinned: boolean): void;
92
+ /** 标记为暂停(保留 messageId) */
93
+ markPaused(taskId: number): void;
94
+ /** 从暂停/终结翻回进行中(resume) */
95
+ markReopened(taskId: number): void;
96
+ /** 标记终结(completed / failed / cancelled) */
97
+ markClosed(taskId: number): void;
98
+ /** 真删除(仅测试/手工清理用) */
99
+ delete(taskId: number): void;
100
+ /** 释放资源 */
101
+ close(): void;
102
+ }
103
+ export declare class MemoryLarkCardStateStore implements LarkCardStateStore {
104
+ private readonly records;
105
+ upsert(state: LarkCardState): void;
106
+ get(taskId: number): LarkCardState | undefined;
107
+ list(): LarkCardState[];
108
+ markPinned(taskId: number, pinned: boolean): void;
109
+ markPaused(taskId: number): void;
110
+ markReopened(taskId: number): void;
111
+ markClosed(taskId: number): void;
112
+ delete(taskId: number): void;
113
+ close(): void;
114
+ }
115
+ export declare class SqliteLarkCardStateStore implements LarkCardStateStore {
116
+ private readonly db;
117
+ constructor(dbPath: string);
118
+ upsert(state: LarkCardState): void;
119
+ get(taskId: number): LarkCardState | undefined;
120
+ list(): LarkCardState[];
121
+ markPinned(taskId: number, pinned: boolean): void;
122
+ markPaused(taskId: number): void;
123
+ markReopened(taskId: number): void;
124
+ markClosed(taskId: number): void;
125
+ delete(taskId: number): void;
126
+ close(): void;
127
+ }
128
+ /** 默认库文件路径:`$HOME/.local/share/roy-agent/lark-cards.db` */
129
+ export declare function getDefaultLarkCardDbPath(): string;
130
+ /**
131
+ * 创建持久化 store
132
+ *
133
+ * ★ 失败降级:SQLite 打不开(权限 / 磁盘满 / 运行时缺 sqlite)时
134
+ * **不抛错**,回落内存实现并 warn —— 卡片该发还得发,绝不能因为
135
+ * 持久化层故障让通知路径整体崩掉(诉求 C:健壮性)。
136
+ */
137
+ export declare function createLarkCardStateStore(dbPath?: string): LarkCardStateStore;