@pentoshi/clai 4.11.21 → 4.11.23

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 (218) hide show
  1. package/dist/agent/evidence/task-selection.d.ts +0 -15
  2. package/dist/agent/evidence/task-selection.js +1 -33
  3. package/dist/agent/evidence/task-selection.js.map +1 -1
  4. package/dist/agent/plan/actions/plan-clear.js.map +1 -1
  5. package/dist/agent/plan/actions/plan-create.js.map +1 -1
  6. package/dist/agent/plan/actions/task-add.js.map +1 -1
  7. package/dist/agent/plan/actions/task-move.js.map +1 -1
  8. package/dist/agent/plan/handle-plan-tool.js +5 -154
  9. package/dist/agent/plan/handle-plan-tool.js.map +1 -1
  10. package/dist/agent/runner.js +1 -13
  11. package/dist/agent/runner.js.map +1 -1
  12. package/dist/agent/session-policy.d.ts +0 -6
  13. package/dist/agent/session-policy.js +0 -2
  14. package/dist/agent/session-policy.js.map +1 -1
  15. package/dist/agent/task-evidence.d.ts +2 -2
  16. package/dist/agent/task-evidence.js +1 -1
  17. package/dist/agent/task-evidence.js.map +1 -1
  18. package/dist/agent/turn/compaction-admission.d.ts +5 -0
  19. package/dist/agent/turn/compaction-admission.js +24 -0
  20. package/dist/agent/turn/compaction-admission.js.map +1 -1
  21. package/dist/agent/turn/compaction-coordinator.d.ts +1 -0
  22. package/dist/agent/turn/compaction-coordinator.js +2 -0
  23. package/dist/agent/turn/compaction-coordinator.js.map +1 -1
  24. package/dist/agent/turn/loop/run-rounds.js +17 -24
  25. package/dist/agent/turn/loop/run-rounds.js.map +1 -1
  26. package/dist/agent/turn/loop/state.d.ts +1 -2
  27. package/dist/agent/turn/loop/state.js +1 -2
  28. package/dist/agent/turn/loop/state.js.map +1 -1
  29. package/dist/agent/turn/setup/compaction-services.d.ts +1 -0
  30. package/dist/agent/turn/setup/compaction-services.js +1 -0
  31. package/dist/agent/turn/setup/compaction-services.js.map +1 -1
  32. package/dist/agent/turn/setup/task-gate-setup.d.ts +1 -11
  33. package/dist/agent/turn/setup/task-gate-setup.js +4 -19
  34. package/dist/agent/turn/setup/task-gate-setup.js.map +1 -1
  35. package/dist/agent/turn/tool-execution/deps.d.ts +1 -5
  36. package/dist/agent/turn/tool-execution/guards.d.ts +0 -4
  37. package/dist/agent/turn/tool-execution/guards.js +3 -12
  38. package/dist/agent/turn/tool-execution/guards.js.map +1 -1
  39. package/dist/agent/turn/tool-execution/meta-tools.d.ts +0 -2
  40. package/dist/agent/turn/tool-execution/meta-tools.js +0 -17
  41. package/dist/agent/turn/tool-execution/meta-tools.js.map +1 -1
  42. package/dist/agent/turn/tool-execution/single-tool.js +0 -14
  43. package/dist/agent/turn/tool-execution/single-tool.js.map +1 -1
  44. package/dist/app/commands/catalog.js +32 -1
  45. package/dist/app/commands/catalog.js.map +1 -1
  46. package/dist/classic/panels/keys-panel.js +8 -1
  47. package/dist/classic/panels/keys-panel.js.map +1 -1
  48. package/dist/classic/panels/pager-panel.d.ts +2 -2
  49. package/dist/classic/panels/pager-panel.js +10 -7
  50. package/dist/classic/panels/pager-panel.js.map +1 -1
  51. package/dist/classic/panels/panel-host.js +1 -1
  52. package/dist/classic/panels/panel-host.js.map +1 -1
  53. package/dist/commands/providers.d.ts +17 -0
  54. package/dist/commands/providers.js +317 -28
  55. package/dist/commands/providers.js.map +1 -1
  56. package/dist/index.js +31 -1
  57. package/dist/index.js.map +1 -1
  58. package/dist/llm/agentrouter.js +1 -1
  59. package/dist/llm/anthropic.d.ts +4 -2
  60. package/dist/llm/anthropic.js +186 -178
  61. package/dist/llm/anthropic.js.map +1 -1
  62. package/dist/llm/bynara.js +1 -1
  63. package/dist/llm/capability/state.d.ts +1 -1
  64. package/dist/llm/capability/tool-dialect.js +3 -0
  65. package/dist/llm/capability/tool-dialect.js.map +1 -1
  66. package/dist/llm/capability/vision-patterns.js +3 -0
  67. package/dist/llm/capability/vision-patterns.js.map +1 -1
  68. package/dist/llm/catalog-facts.js +50 -2
  69. package/dist/llm/catalog-facts.js.map +1 -1
  70. package/dist/llm/catalog-prefetch.js +1 -1
  71. package/dist/llm/cline-auth.d.ts +34 -0
  72. package/dist/llm/cline-auth.js +248 -0
  73. package/dist/llm/cline-auth.js.map +1 -0
  74. package/dist/llm/cline.d.ts +2 -0
  75. package/dist/llm/cline.js +147 -0
  76. package/dist/llm/cline.js.map +1 -0
  77. package/dist/llm/codex-auth.d.ts +53 -0
  78. package/dist/llm/codex-auth.js +512 -0
  79. package/dist/llm/codex-auth.js.map +1 -0
  80. package/dist/llm/codex.d.ts +4 -0
  81. package/dist/llm/codex.js +239 -0
  82. package/dist/llm/codex.js.map +1 -0
  83. package/dist/llm/copilot-auth.d.ts +38 -0
  84. package/dist/llm/copilot-auth.js +258 -0
  85. package/dist/llm/copilot-auth.js.map +1 -0
  86. package/dist/llm/copilot.d.ts +4 -0
  87. package/dist/llm/copilot.js +226 -0
  88. package/dist/llm/copilot.js.map +1 -0
  89. package/dist/llm/custom-providers.js +1 -1
  90. package/dist/llm/deepseek.js +1 -1
  91. package/dist/llm/explabs.js +1 -1
  92. package/dist/llm/fireworks.js +1 -1
  93. package/dist/llm/free-default-model.js +9 -4
  94. package/dist/llm/free-default-model.js.map +1 -1
  95. package/dist/llm/free.d.ts +1 -0
  96. package/dist/llm/free.js +44 -36
  97. package/dist/llm/free.js.map +1 -1
  98. package/dist/llm/glm.js +1 -1
  99. package/dist/llm/hetzner.js +1 -1
  100. package/dist/llm/key-rotation.js +1 -1
  101. package/dist/llm/key-rotation.js.map +1 -1
  102. package/dist/llm/kimi.js +1 -1
  103. package/dist/llm/lightning.js +1 -1
  104. package/dist/llm/merge-gateway.js +1 -1
  105. package/dist/llm/meta.js +1 -1
  106. package/dist/llm/minimax.js +1 -1
  107. package/dist/llm/model-families.js +1 -1
  108. package/dist/llm/model-families.js.map +1 -1
  109. package/dist/llm/model-layers/model-rules.js +6 -0
  110. package/dist/llm/model-layers/model-rules.js.map +1 -1
  111. package/dist/llm/nvidia.js +1 -1
  112. package/dist/llm/openrouter.js +1 -1
  113. package/dist/llm/orcarouter.js +1 -1
  114. package/dist/llm/provider-identity.d.ts +2 -0
  115. package/dist/llm/provider-identity.js +35 -0
  116. package/dist/llm/provider-identity.js.map +1 -1
  117. package/dist/llm/provider-info-text.js +115 -13
  118. package/dist/llm/provider-info-text.js.map +1 -1
  119. package/dist/llm/provider-profile-layers.js +101 -0
  120. package/dist/llm/provider-profile-layers.js.map +1 -1
  121. package/dist/llm/provider-profiles.js +2 -1
  122. package/dist/llm/provider-profiles.js.map +1 -1
  123. package/dist/llm/provider.d.ts +6 -4
  124. package/dist/llm/provider.js +2 -2
  125. package/dist/llm/provider.js.map +1 -1
  126. package/dist/llm/qwen-cloud.js +1 -1
  127. package/dist/llm/reasoning-capability.js +14 -0
  128. package/dist/llm/reasoning-capability.js.map +1 -1
  129. package/dist/llm/responses/item-events.js +10 -0
  130. package/dist/llm/responses/item-events.js.map +1 -1
  131. package/dist/llm/responses-config.d.ts +4 -0
  132. package/dist/llm/responses-config.js.map +1 -1
  133. package/dist/llm/responses-parse.js +23 -11
  134. package/dist/llm/responses-parse.js.map +1 -1
  135. package/dist/llm/responses-request.js +31 -8
  136. package/dist/llm/responses-request.js.map +1 -1
  137. package/dist/llm/responses-stream-events.js +21 -5
  138. package/dist/llm/responses-stream-events.js.map +1 -1
  139. package/dist/llm/routing/attempt-complete.js +1 -1
  140. package/dist/llm/routing/attempt-complete.js.map +1 -1
  141. package/dist/llm/routing/attempt-request.js +1 -1
  142. package/dist/llm/routing/attempt-request.js.map +1 -1
  143. package/dist/llm/routing/attempt-stream.js +2 -2
  144. package/dist/llm/routing/attempt-stream.js.map +1 -1
  145. package/dist/llm/routing/failure-report.js +1 -1
  146. package/dist/llm/routing/failure-report.js.map +1 -1
  147. package/dist/llm/routing/key-rotation.js +9 -4
  148. package/dist/llm/routing/key-rotation.js.map +1 -1
  149. package/dist/llm/routing/provider-selection.d.ts +2 -1
  150. package/dist/llm/routing/provider-selection.js +18 -4
  151. package/dist/llm/routing/provider-selection.js.map +1 -1
  152. package/dist/llm/tokenrouter.js +1 -1
  153. package/dist/llm/vercel.js +1 -1
  154. package/dist/llm/wire/chat-body.js +5 -3
  155. package/dist/llm/wire/chat-body.js.map +1 -1
  156. package/dist/llm/wire/openai-complete.d.ts +1 -0
  157. package/dist/llm/wire/openai-complete.js +9 -0
  158. package/dist/llm/wire/openai-complete.js.map +1 -1
  159. package/dist/store/config.js +3 -0
  160. package/dist/store/config.js.map +1 -1
  161. package/dist/store/keys/search-providers.d.ts +2 -0
  162. package/dist/store/keys/search-providers.js +6 -0
  163. package/dist/store/keys/search-providers.js.map +1 -1
  164. package/dist/store/keys.d.ts +6 -1
  165. package/dist/store/keys.js +46 -17
  166. package/dist/store/keys.js.map +1 -1
  167. package/dist/store/plan/mutation.d.ts +0 -1
  168. package/dist/store/plan/mutation.js +1 -22
  169. package/dist/store/plan/mutation.js.map +1 -1
  170. package/dist/store/plan.d.ts +1 -1
  171. package/dist/store/plan.js +1 -4
  172. package/dist/store/plan.js.map +1 -1
  173. package/dist/tui-v2/components/modal/keys-modal-pick.d.ts +5 -0
  174. package/dist/tui-v2/components/modal/keys-modal-pick.js +13 -0
  175. package/dist/tui-v2/components/modal/keys-modal-pick.js.map +1 -1
  176. package/dist/tui-v2/components/modal/keys-modal.js +15 -13
  177. package/dist/tui-v2/components/modal/keys-modal.js.map +1 -1
  178. package/dist/types.d.ts +1 -1
  179. package/dist/types.js +3 -0
  180. package/dist/types.js.map +1 -1
  181. package/dist/ui-core/bootstrap/capabilities.d.ts +1 -0
  182. package/dist/ui-core/bootstrap/capabilities.js +14 -0
  183. package/dist/ui-core/bootstrap/capabilities.js.map +1 -1
  184. package/dist/ui-core/commands/key-commands.d.ts +6 -3
  185. package/dist/ui-core/commands/key-commands.js +506 -15
  186. package/dist/ui-core/commands/key-commands.js.map +1 -1
  187. package/dist/ui-core/commands/keys/editors.js +10 -4
  188. package/dist/ui-core/commands/keys/editors.js.map +1 -1
  189. package/dist/ui-core/commands/picker-commands.js +86 -32
  190. package/dist/ui-core/commands/picker-commands.js.map +1 -1
  191. package/dist/ui-core/commands/subagent-models-editor.js +12 -4
  192. package/dist/ui-core/commands/subagent-models-editor.js.map +1 -1
  193. package/dist/ui-core/controllers/overlay-controller.d.ts +4 -0
  194. package/dist/ui-core/controllers/overlay-controller.js.map +1 -1
  195. package/dist/ui-core/rendering/format-keys.js +4 -2
  196. package/dist/ui-core/rendering/format-keys.js.map +1 -1
  197. package/dist/ui-core/rendering/format-usage.js +3 -1
  198. package/dist/ui-core/rendering/format-usage.js.map +1 -1
  199. package/dist/ui-core/rendering/intro-header.js +4 -1
  200. package/dist/ui-core/rendering/intro-header.js.map +1 -1
  201. package/dist/version.generated.d.ts +2 -2
  202. package/dist/version.generated.js +2 -2
  203. package/package.json +1 -1
  204. package/dist/agent/task-sync.d.ts +0 -40
  205. package/dist/agent/task-sync.js +0 -105
  206. package/dist/agent/task-sync.js.map +0 -1
  207. package/dist/agent/turn/task-batch-guard.d.ts +0 -18
  208. package/dist/agent/turn/task-batch-guard.js +0 -83
  209. package/dist/agent/turn/task-batch-guard.js.map +0 -1
  210. package/dist/agent/turn/task-gate.d.ts +0 -13
  211. package/dist/agent/turn/task-gate.js +0 -34
  212. package/dist/agent/turn/task-gate.js.map +0 -1
  213. package/dist/agent/turn/task-update-gate.d.ts +0 -13
  214. package/dist/agent/turn/task-update-gate.js +0 -40
  215. package/dist/agent/turn/task-update-gate.js.map +0 -1
  216. package/dist/store/task-transitions.d.ts +0 -12
  217. package/dist/store/task-transitions.js +0 -40
  218. package/dist/store/task-transitions.js.map +0 -1
@@ -1,40 +0,0 @@
1
- export const parseTaskUpdateRequest = (args) => ({
2
- state: typeof args.state === "string" ? args.state : "",
3
- taskId: typeof args.taskId === "string"
4
- ? args.taskId
5
- : typeof args.id === "string"
6
- ? args.id
7
- : "",
8
- });
9
- const dependenciesIncomplete = (plan, taskId) => {
10
- const task = plan.tasks.find((candidate) => candidate.id === taskId);
11
- return (task?.dependencies?.some((dependency) => {
12
- const dependencyTask = plan.tasks.find((candidate) => candidate.id === dependency);
13
- return (!dependencyTask ||
14
- (dependencyTask.state !== "done" && dependencyTask.state !== "skipped"));
15
- }) ?? false);
16
- };
17
- export const decideTaskUpdateDoneGate = (plan, taskId, completionGate) => {
18
- if (!plan) {
19
- return {
20
- ok: false,
21
- reason: `Task ${taskId} cannot be marked done because its active plan is unavailable.`,
22
- };
23
- }
24
- const target = plan.tasks.find((candidate) => candidate.id === taskId);
25
- const canSoftComplete = target?.state === "pending" && !dependenciesIncomplete(plan, taskId);
26
- if (target?.state === "in_progress" || canSoftComplete) {
27
- return completionGate(plan, taskId);
28
- }
29
- if (target?.state === "failed") {
30
- return {
31
- ok: false,
32
- reason: `Task ${taskId} is failed — retry with in_progress first, then mark done after recovery work.`,
33
- };
34
- }
35
- return {
36
- ok: false,
37
- reason: `Task ${taskId} must be in_progress before it can be marked done. Start or retry the task, perform fresh work, then complete it.`,
38
- };
39
- };
40
- //# sourceMappingURL=task-update-gate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-update-gate.js","sourceRoot":"","sources":["../../../src/agent/turn/task-update-gate.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAA6B,EACV,EAAE,CAAC,CAAC;IACvB,KAAK,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;IACvD,MAAM,EACJ,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;QAC7B,CAAC,CAAC,IAAI,CAAC,MAAM;QACb,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;YAC3B,CAAC,CAAC,IAAI,CAAC,EAAE;YACT,CAAC,CAAC,EAAE;CACX,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAC7B,IAAiB,EACjB,MAAc,EACL,EAAE;IACX,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACrE,OAAO,CACL,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;QACtC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CACpC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,UAAU,CAC3C,CAAC;QACF,OAAO,CACL,CAAC,cAAc;YACf,CAAC,cAAc,CAAC,KAAK,KAAK,MAAM,IAAI,cAAc,CAAC,KAAK,KAAK,SAAS,CAAC,CACxE,CAAC;IACJ,CAAC,CAAC,IAAI,KAAK,CACZ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,IAA6B,EAC7B,MAAc,EACd,cAA2E,EACrD,EAAE;IACxB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,QAAQ,MAAM,gEAAgE;SACvF,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACvE,MAAM,eAAe,GACnB,MAAM,EAAE,KAAK,KAAK,SAAS,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvE,IAAI,MAAM,EAAE,KAAK,KAAK,aAAa,IAAI,eAAe,EAAE,CAAC;QACvD,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,MAAM,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,QAAQ,MAAM,gFAAgF;SACvG,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE,EAAE,KAAK;QACT,MAAM,EAAE,QAAQ,MAAM,mHAAmH;KAC1I,CAAC;AACJ,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- export type TaskState = "pending" | "in_progress" | "done" | "failed" | "skipped";
2
- export type TaskTransitionDenialCode = "terminal" | "retry-required" | "unsupported";
3
- export interface TaskTransitionDenied {
4
- readonly allowed: false;
5
- readonly code: TaskTransitionDenialCode;
6
- readonly reason: string;
7
- }
8
- export type TaskTransitionResult = {
9
- readonly allowed: true;
10
- } | TaskTransitionDenied;
11
- export declare function isTerminalTaskState(state: TaskState): boolean;
12
- export declare function evaluateTaskTransition(from: TaskState, to: TaskState): TaskTransitionResult;
@@ -1,40 +0,0 @@
1
- const ALLOWED = {
2
- pending: ["in_progress", "done", "failed", "skipped"],
3
- in_progress: ["pending", "done", "failed", "skipped"],
4
- failed: ["in_progress", "skipped"],
5
- done: [],
6
- skipped: [],
7
- };
8
- const TERMINAL_STATES = new Set([
9
- "done",
10
- "skipped",
11
- ]);
12
- export function isTerminalTaskState(state) {
13
- return TERMINAL_STATES.has(state);
14
- }
15
- export function evaluateTaskTransition(from, to) {
16
- if (from === to)
17
- return { allowed: true };
18
- if ((ALLOWED[from] ?? []).includes(to))
19
- return { allowed: true };
20
- if (TERMINAL_STATES.has(from)) {
21
- return {
22
- allowed: false,
23
- code: "terminal",
24
- reason: `already ${from} — completed work is not reopened by task.update; add a follow-up task instead`,
25
- };
26
- }
27
- if (from === "failed" && to === "done") {
28
- return {
29
- allowed: false,
30
- code: "retry-required",
31
- reason: "is failed — reopen it with state:\"in_progress\" and redo the work before marking it done",
32
- };
33
- }
34
- return {
35
- allowed: false,
36
- code: "unsupported",
37
- reason: `cannot move from ${from} to ${to}`,
38
- };
39
- }
40
- //# sourceMappingURL=task-transitions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-transitions.js","sourceRoot":"","sources":["../../src/store/task-transitions.ts"],"names":[],"mappings":"AAqBA,MAAM,OAAO,GAAsD;IACjE,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;IACrD,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;IACrD,MAAM,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;IAClC,IAAI,EAAE,EAAE;IACR,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,eAAe,GAA2B,IAAI,GAAG,CAAY;IACjE,MAAM;IACN,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB,CAAC,KAAgB;IAClD,OAAO,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,IAAe,EACf,EAAa;IAEb,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjE,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,WAAW,IAAI,gFAAgF;SACxG,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ,IAAI,EAAE,KAAK,MAAM,EAAE,CAAC;QACvC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,gBAAgB;YACtB,MAAM,EACJ,2FAA2F;SAC9F,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,oBAAoB,IAAI,OAAO,EAAE,EAAE;KAC5C,CAAC;AACJ,CAAC"}