@patze/code-cli 0.10.2

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 (268) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/NOTICE.md +17 -0
  3. package/README.md +177 -0
  4. package/VERSION +1 -0
  5. package/bin/patze.mjs +7 -0
  6. package/dist/backend/auth.d.ts +13 -0
  7. package/dist/backend/auth.d.ts.map +1 -0
  8. package/dist/backend/auth.js +12 -0
  9. package/dist/backend/auth.js.map +1 -0
  10. package/dist/backend/client.d.ts +14 -0
  11. package/dist/backend/client.d.ts.map +1 -0
  12. package/dist/backend/client.js +51 -0
  13. package/dist/backend/client.js.map +1 -0
  14. package/dist/backend/preview-client.d.ts +33 -0
  15. package/dist/backend/preview-client.d.ts.map +1 -0
  16. package/dist/backend/preview-client.js +104 -0
  17. package/dist/backend/preview-client.js.map +1 -0
  18. package/dist/backend/preview-payload.d.ts +50 -0
  19. package/dist/backend/preview-payload.d.ts.map +1 -0
  20. package/dist/backend/preview-payload.js +92 -0
  21. package/dist/backend/preview-payload.js.map +1 -0
  22. package/dist/cli/argv.d.ts +10 -0
  23. package/dist/cli/argv.d.ts.map +1 -0
  24. package/dist/cli/argv.js +67 -0
  25. package/dist/cli/argv.js.map +1 -0
  26. package/dist/cli/commands/apply-format.d.ts +12 -0
  27. package/dist/cli/commands/apply-format.d.ts.map +1 -0
  28. package/dist/cli/commands/apply-format.js +50 -0
  29. package/dist/cli/commands/apply-format.js.map +1 -0
  30. package/dist/cli/commands/apply.d.ts +14 -0
  31. package/dist/cli/commands/apply.d.ts.map +1 -0
  32. package/dist/cli/commands/apply.js +256 -0
  33. package/dist/cli/commands/apply.js.map +1 -0
  34. package/dist/cli/commands/approve-format.d.ts +4 -0
  35. package/dist/cli/commands/approve-format.d.ts.map +1 -0
  36. package/dist/cli/commands/approve-format.js +40 -0
  37. package/dist/cli/commands/approve-format.js.map +1 -0
  38. package/dist/cli/commands/approve.d.ts +19 -0
  39. package/dist/cli/commands/approve.d.ts.map +1 -0
  40. package/dist/cli/commands/approve.js +91 -0
  41. package/dist/cli/commands/approve.js.map +1 -0
  42. package/dist/cli/commands/code.d.ts +4 -0
  43. package/dist/cli/commands/code.d.ts.map +1 -0
  44. package/dist/cli/commands/code.js +57 -0
  45. package/dist/cli/commands/code.js.map +1 -0
  46. package/dist/cli/commands/diff-format.d.ts +12 -0
  47. package/dist/cli/commands/diff-format.d.ts.map +1 -0
  48. package/dist/cli/commands/diff-format.js +151 -0
  49. package/dist/cli/commands/diff-format.js.map +1 -0
  50. package/dist/cli/commands/diff.d.ts +22 -0
  51. package/dist/cli/commands/diff.d.ts.map +1 -0
  52. package/dist/cli/commands/diff.js +101 -0
  53. package/dist/cli/commands/diff.js.map +1 -0
  54. package/dist/cli/commands/doctor.d.ts +6 -0
  55. package/dist/cli/commands/doctor.d.ts.map +1 -0
  56. package/dist/cli/commands/doctor.js +99 -0
  57. package/dist/cli/commands/doctor.js.map +1 -0
  58. package/dist/cli/commands/goal-format.d.ts +3 -0
  59. package/dist/cli/commands/goal-format.d.ts.map +1 -0
  60. package/dist/cli/commands/goal-format.js +32 -0
  61. package/dist/cli/commands/goal-format.js.map +1 -0
  62. package/dist/cli/commands/goal.d.ts +28 -0
  63. package/dist/cli/commands/goal.d.ts.map +1 -0
  64. package/dist/cli/commands/goal.js +80 -0
  65. package/dist/cli/commands/goal.js.map +1 -0
  66. package/dist/cli/commands/inspect-format.d.ts +6 -0
  67. package/dist/cli/commands/inspect-format.d.ts.map +1 -0
  68. package/dist/cli/commands/inspect-format.js +62 -0
  69. package/dist/cli/commands/inspect-format.js.map +1 -0
  70. package/dist/cli/commands/inspect.d.ts +7 -0
  71. package/dist/cli/commands/inspect.d.ts.map +1 -0
  72. package/dist/cli/commands/inspect.js +11 -0
  73. package/dist/cli/commands/inspect.js.map +1 -0
  74. package/dist/cli/commands/login.d.ts +4 -0
  75. package/dist/cli/commands/login.d.ts.map +1 -0
  76. package/dist/cli/commands/login.js +21 -0
  77. package/dist/cli/commands/login.js.map +1 -0
  78. package/dist/cli/commands/plan-format.d.ts +7 -0
  79. package/dist/cli/commands/plan-format.d.ts.map +1 -0
  80. package/dist/cli/commands/plan-format.js +48 -0
  81. package/dist/cli/commands/plan-format.js.map +1 -0
  82. package/dist/cli/commands/plan.d.ts +13 -0
  83. package/dist/cli/commands/plan.d.ts.map +1 -0
  84. package/dist/cli/commands/plan.js +64 -0
  85. package/dist/cli/commands/plan.js.map +1 -0
  86. package/dist/cli/commands/runs.d.ts +5 -0
  87. package/dist/cli/commands/runs.d.ts.map +1 -0
  88. package/dist/cli/commands/runs.js +25 -0
  89. package/dist/cli/commands/runs.js.map +1 -0
  90. package/dist/cli/commands/session-snapshot-format.d.ts +3 -0
  91. package/dist/cli/commands/session-snapshot-format.d.ts.map +1 -0
  92. package/dist/cli/commands/session-snapshot-format.js +5 -0
  93. package/dist/cli/commands/session-snapshot-format.js.map +1 -0
  94. package/dist/cli/commands/status-format.d.ts +11 -0
  95. package/dist/cli/commands/status-format.d.ts.map +1 -0
  96. package/dist/cli/commands/status-format.js +57 -0
  97. package/dist/cli/commands/status-format.js.map +1 -0
  98. package/dist/cli/commands/status.d.ts +4 -0
  99. package/dist/cli/commands/status.d.ts.map +1 -0
  100. package/dist/cli/commands/status.js +12 -0
  101. package/dist/cli/commands/status.js.map +1 -0
  102. package/dist/cli/commands/trust-loop-snapshot.d.ts +3 -0
  103. package/dist/cli/commands/trust-loop-snapshot.d.ts.map +1 -0
  104. package/dist/cli/commands/trust-loop-snapshot.js +125 -0
  105. package/dist/cli/commands/trust-loop-snapshot.js.map +1 -0
  106. package/dist/cli/commands/verify-drift-guard.d.ts +2 -0
  107. package/dist/cli/commands/verify-drift-guard.d.ts.map +1 -0
  108. package/dist/cli/commands/verify-drift-guard.js +11 -0
  109. package/dist/cli/commands/verify-drift-guard.js.map +1 -0
  110. package/dist/cli/commands/verify.d.ts +12 -0
  111. package/dist/cli/commands/verify.d.ts.map +1 -0
  112. package/dist/cli/commands/verify.js +62 -0
  113. package/dist/cli/commands/verify.js.map +1 -0
  114. package/dist/cli/help.d.ts +3 -0
  115. package/dist/cli/help.d.ts.map +1 -0
  116. package/dist/cli/help.js +36 -0
  117. package/dist/cli/help.js.map +1 -0
  118. package/dist/cli/interactive/agent-turn-format.d.ts +15 -0
  119. package/dist/cli/interactive/agent-turn-format.d.ts.map +1 -0
  120. package/dist/cli/interactive/agent-turn-format.js +70 -0
  121. package/dist/cli/interactive/agent-turn-format.js.map +1 -0
  122. package/dist/cli/interactive/agent-turn.d.ts +9 -0
  123. package/dist/cli/interactive/agent-turn.d.ts.map +1 -0
  124. package/dist/cli/interactive/agent-turn.js +103 -0
  125. package/dist/cli/interactive/agent-turn.js.map +1 -0
  126. package/dist/cli/interactive/header.d.ts +4 -0
  127. package/dist/cli/interactive/header.d.ts.map +1 -0
  128. package/dist/cli/interactive/header.js +28 -0
  129. package/dist/cli/interactive/header.js.map +1 -0
  130. package/dist/cli/interactive/permissions-command.d.ts +15 -0
  131. package/dist/cli/interactive/permissions-command.d.ts.map +1 -0
  132. package/dist/cli/interactive/permissions-command.js +88 -0
  133. package/dist/cli/interactive/permissions-command.js.map +1 -0
  134. package/dist/cli/interactive/permissions-format.d.ts +18 -0
  135. package/dist/cli/interactive/permissions-format.d.ts.map +1 -0
  136. package/dist/cli/interactive/permissions-format.js +142 -0
  137. package/dist/cli/interactive/permissions-format.js.map +1 -0
  138. package/dist/cli/interactive/permissions-keys.d.ts +5 -0
  139. package/dist/cli/interactive/permissions-keys.d.ts.map +1 -0
  140. package/dist/cli/interactive/permissions-keys.js +58 -0
  141. package/dist/cli/interactive/permissions-keys.js.map +1 -0
  142. package/dist/cli/interactive/session-state.d.ts +68 -0
  143. package/dist/cli/interactive/session-state.d.ts.map +1 -0
  144. package/dist/cli/interactive/session-state.js +2 -0
  145. package/dist/cli/interactive/session-state.js.map +1 -0
  146. package/dist/cli/interactive/session.d.ts +71 -0
  147. package/dist/cli/interactive/session.d.ts.map +1 -0
  148. package/dist/cli/interactive/session.js +244 -0
  149. package/dist/cli/interactive/session.js.map +1 -0
  150. package/dist/cli/interactive/shell.d.ts +13 -0
  151. package/dist/cli/interactive/shell.d.ts.map +1 -0
  152. package/dist/cli/interactive/shell.js +115 -0
  153. package/dist/cli/interactive/shell.js.map +1 -0
  154. package/dist/cli/interactive/slash-dispatch.d.ts +14 -0
  155. package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -0
  156. package/dist/cli/interactive/slash-dispatch.js +276 -0
  157. package/dist/cli/interactive/slash-dispatch.js.map +1 -0
  158. package/dist/cli/interactive/slash-parse.d.ts +9 -0
  159. package/dist/cli/interactive/slash-parse.d.ts.map +1 -0
  160. package/dist/cli/interactive/slash-parse.js +78 -0
  161. package/dist/cli/interactive/slash-parse.js.map +1 -0
  162. package/dist/cli/interactive/slash-registry.d.ts +11 -0
  163. package/dist/cli/interactive/slash-registry.d.ts.map +1 -0
  164. package/dist/cli/interactive/slash-registry.js +26 -0
  165. package/dist/cli/interactive/slash-registry.js.map +1 -0
  166. package/dist/cli/interactive/slash-suggest.d.ts +4 -0
  167. package/dist/cli/interactive/slash-suggest.d.ts.map +1 -0
  168. package/dist/cli/interactive/slash-suggest.js +46 -0
  169. package/dist/cli/interactive/slash-suggest.js.map +1 -0
  170. package/dist/cli/interactive/tools-catalog.d.ts +8 -0
  171. package/dist/cli/interactive/tools-catalog.d.ts.map +1 -0
  172. package/dist/cli/interactive/tools-catalog.js +51 -0
  173. package/dist/cli/interactive/tools-catalog.js.map +1 -0
  174. package/dist/cli/main.d.ts +2 -0
  175. package/dist/cli/main.d.ts.map +1 -0
  176. package/dist/cli/main.js +69 -0
  177. package/dist/cli/main.js.map +1 -0
  178. package/dist/cli/ui/diff-view.d.ts +7 -0
  179. package/dist/cli/ui/diff-view.d.ts.map +1 -0
  180. package/dist/cli/ui/diff-view.js +18 -0
  181. package/dist/cli/ui/diff-view.js.map +1 -0
  182. package/dist/cli/ui/printer.d.ts +13 -0
  183. package/dist/cli/ui/printer.d.ts.map +1 -0
  184. package/dist/cli/ui/printer.js +24 -0
  185. package/dist/cli/ui/printer.js.map +1 -0
  186. package/dist/cli/ui/spinner.d.ts +5 -0
  187. package/dist/cli/ui/spinner.d.ts.map +1 -0
  188. package/dist/cli/ui/spinner.js +30 -0
  189. package/dist/cli/ui/spinner.js.map +1 -0
  190. package/dist/cli/ui/text-writer.d.ts +8 -0
  191. package/dist/cli/ui/text-writer.d.ts.map +1 -0
  192. package/dist/cli/ui/text-writer.js +17 -0
  193. package/dist/cli/ui/text-writer.js.map +1 -0
  194. package/dist/config/config.d.ts +30 -0
  195. package/dist/config/config.d.ts.map +1 -0
  196. package/dist/config/config.js +133 -0
  197. package/dist/config/config.js.map +1 -0
  198. package/dist/runtime/apply-verify.d.ts +28 -0
  199. package/dist/runtime/apply-verify.d.ts.map +1 -0
  200. package/dist/runtime/apply-verify.js +180 -0
  201. package/dist/runtime/apply-verify.js.map +1 -0
  202. package/dist/runtime/approvals.d.ts +10 -0
  203. package/dist/runtime/approvals.d.ts.map +1 -0
  204. package/dist/runtime/approvals.js +22 -0
  205. package/dist/runtime/approvals.js.map +1 -0
  206. package/dist/runtime/content-hash.d.ts +3 -0
  207. package/dist/runtime/content-hash.d.ts.map +1 -0
  208. package/dist/runtime/content-hash.js +8 -0
  209. package/dist/runtime/content-hash.js.map +1 -0
  210. package/dist/runtime/digest-mask.d.ts +2 -0
  211. package/dist/runtime/digest-mask.d.ts.map +1 -0
  212. package/dist/runtime/digest-mask.js +11 -0
  213. package/dist/runtime/digest-mask.js.map +1 -0
  214. package/dist/runtime/inspect.d.ts +20 -0
  215. package/dist/runtime/inspect.d.ts.map +1 -0
  216. package/dist/runtime/inspect.js +152 -0
  217. package/dist/runtime/inspect.js.map +1 -0
  218. package/dist/runtime/patch-apply.d.ts +32 -0
  219. package/dist/runtime/patch-apply.d.ts.map +1 -0
  220. package/dist/runtime/patch-apply.js +170 -0
  221. package/dist/runtime/patch-apply.js.map +1 -0
  222. package/dist/runtime/patch-path-guard.d.ts +17 -0
  223. package/dist/runtime/patch-path-guard.d.ts.map +1 -0
  224. package/dist/runtime/patch-path-guard.js +56 -0
  225. package/dist/runtime/patch-path-guard.js.map +1 -0
  226. package/dist/runtime/patch-proposal.d.ts +55 -0
  227. package/dist/runtime/patch-proposal.d.ts.map +1 -0
  228. package/dist/runtime/patch-proposal.js +118 -0
  229. package/dist/runtime/patch-proposal.js.map +1 -0
  230. package/dist/runtime/permissions.d.ts +18 -0
  231. package/dist/runtime/permissions.d.ts.map +1 -0
  232. package/dist/runtime/permissions.js +91 -0
  233. package/dist/runtime/permissions.js.map +1 -0
  234. package/dist/runtime/sandbox.d.ts +9 -0
  235. package/dist/runtime/sandbox.d.ts.map +1 -0
  236. package/dist/runtime/sandbox.js +17 -0
  237. package/dist/runtime/sandbox.js.map +1 -0
  238. package/dist/runtime/unified-diff.d.ts +19 -0
  239. package/dist/runtime/unified-diff.d.ts.map +1 -0
  240. package/dist/runtime/unified-diff.js +114 -0
  241. package/dist/runtime/unified-diff.js.map +1 -0
  242. package/dist/runtime/verifier.d.ts +6 -0
  243. package/dist/runtime/verifier.d.ts.map +1 -0
  244. package/dist/runtime/verifier.js +16 -0
  245. package/dist/runtime/verifier.js.map +1 -0
  246. package/dist/runtime/workspace.d.ts +10 -0
  247. package/dist/runtime/workspace.d.ts.map +1 -0
  248. package/dist/runtime/workspace.js +107 -0
  249. package/dist/runtime/workspace.js.map +1 -0
  250. package/dist/version.d.ts +3 -0
  251. package/dist/version.d.ts.map +1 -0
  252. package/dist/version.js +10 -0
  253. package/dist/version.js.map +1 -0
  254. package/docs/beta-feedback-template.md +75 -0
  255. package/docs/beta-feedback-triage.md +169 -0
  256. package/docs/beta-release-handoff.md +182 -0
  257. package/docs/beta-tester-checklist.md +62 -0
  258. package/docs/install-beta.md +77 -0
  259. package/docs/internal-beta.md +84 -0
  260. package/docs/known-limitations.md +62 -0
  261. package/docs/patze-cli-architecture.md +137 -0
  262. package/docs/patze-cli-codex-reference-study.md +43 -0
  263. package/docs/release-checklist.md +83 -0
  264. package/docs/safety-model.md +69 -0
  265. package/docs/smoke-command-guide.md +61 -0
  266. package/docs/trust-loop.md +90 -0
  267. package/docs/uninstall-reset.md +44 -0
  268. package/package.json +39 -0
@@ -0,0 +1,88 @@
1
+ import { getPermissionModeDef, isPermissionMode, PERMISSION_MODES, suggestPermissionModes, } from "../../runtime/permissions.js";
2
+ import { attemptPermissionModeChange, formatPermissionModeRefused, formatPermissionModeSetResult, formatPermissionsSelectorView, formatPermissionUpdateCancelled, indexForPermissionMode, permissionModeAtIndex, } from "./permissions-format.js";
3
+ import { createKeyReaderFromSequence, readPermissionSelectorKey, } from "./permissions-keys.js";
4
+ export async function runPermissionsCommand(session, rawArgs, options = {}) {
5
+ const args = rawArgs.trim();
6
+ if (args) {
7
+ return runDirectPermissionSet(session, args);
8
+ }
9
+ if (options.interactive) {
10
+ return runInteractivePermissionSelector(session, options);
11
+ }
12
+ const current = session.getPermissionMode();
13
+ const selectedIndex = indexForPermissionMode(current);
14
+ return {
15
+ exitCode: 0,
16
+ lines: formatPermissionsSelectorView(current, selectedIndex, { staticMenu: true }),
17
+ };
18
+ }
19
+ async function runDirectPermissionSet(session, rawMode) {
20
+ const normalized = rawMode.trim().toLowerCase();
21
+ if (!isPermissionMode(normalized)) {
22
+ const suggestions = suggestPermissionModes(normalized, 3);
23
+ const lines = [`Unknown permission mode: ${rawMode}`];
24
+ if (suggestions.length) {
25
+ lines.push(`Did you mean: ${suggestions.map((mode) => mode).join(", ")}?`);
26
+ }
27
+ lines.push("Active modes: read-only, suggest");
28
+ lines.push("Planned: edit-with-approval · Forbidden: full-auto");
29
+ return { lines, exitCode: 2 };
30
+ }
31
+ const current = session.getPermissionMode();
32
+ const outcome = attemptPermissionModeChange(current, normalized);
33
+ if (outcome.changed) {
34
+ session.setPermissionMode(normalized);
35
+ }
36
+ return { lines: outcome.lines, exitCode: outcome.exitCode };
37
+ }
38
+ async function runInteractivePermissionSelector(session, options) {
39
+ const current = session.getPermissionMode();
40
+ let selectedIndex = indexForPermissionMode(current);
41
+ const readChunk = options.keySequence
42
+ ? createKeyReaderFromSequence(options.keySequence)
43
+ : null;
44
+ if (!readChunk) {
45
+ return {
46
+ exitCode: 0,
47
+ lines: formatPermissionsSelectorView(current, selectedIndex, { staticMenu: true }),
48
+ };
49
+ }
50
+ const output = [];
51
+ while (true) {
52
+ output.push(...formatPermissionsSelectorView(current, selectedIndex));
53
+ output.push("");
54
+ const key = await readPermissionSelectorKey(readChunk);
55
+ if (!key || key === "escape" || key === "cancel") {
56
+ output.push(...formatPermissionUpdateCancelled());
57
+ return { exitCode: 0, lines: output };
58
+ }
59
+ if (key === "up") {
60
+ selectedIndex = Math.max(0, selectedIndex - 1);
61
+ continue;
62
+ }
63
+ if (key === "down") {
64
+ selectedIndex = Math.min(PERMISSION_MODES.length - 1, selectedIndex + 1);
65
+ continue;
66
+ }
67
+ if (key === "enter") {
68
+ const targetMode = permissionModeAtIndex(selectedIndex);
69
+ const outcome = attemptPermissionModeChange(current, targetMode);
70
+ output.push(...outcome.lines);
71
+ if (outcome.changed) {
72
+ session.setPermissionMode(targetMode);
73
+ }
74
+ return { exitCode: outcome.exitCode, lines: output };
75
+ }
76
+ }
77
+ }
78
+ export function formatSessionPermissionLine(mode) {
79
+ const def = getPermissionModeDef(mode);
80
+ return `${def.label} (${def.mode})`;
81
+ }
82
+ export function formatPermissionModeRefusedLines(mode) {
83
+ return formatPermissionModeRefused(mode);
84
+ }
85
+ export function formatPermissionModeAppliedLines(mode) {
86
+ return formatPermissionModeSetResult(mode);
87
+ }
88
+ //# sourceMappingURL=permissions-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions-command.js","sourceRoot":"","sources":["../../../src/cli/interactive/permissions-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { PermissionMode } from "../../runtime/permissions.js";
2
+ export type PermissionSelectorRenderOptions = {
3
+ staticMenu?: boolean;
4
+ };
5
+ export declare function formatPermissionsSelectorView(currentMode: PermissionMode, selectedIndex: number, options?: PermissionSelectorRenderOptions): string[];
6
+ export declare function formatPermissionModeSetResult(mode: PermissionMode): string[];
7
+ export declare function formatPermissionModeRefused(mode: PermissionMode): string[];
8
+ export declare function formatPermissionUpdateCancelled(): string[];
9
+ export declare function formatPermissionCapabilities(mode: PermissionMode): string;
10
+ export declare function indexForPermissionMode(mode: PermissionMode): number;
11
+ export declare function permissionModeAtIndex(index: number): PermissionMode;
12
+ export declare function attemptPermissionModeChange(currentMode: PermissionMode, targetMode: PermissionMode): {
13
+ ok: boolean;
14
+ changed: boolean;
15
+ exitCode: number;
16
+ lines: string[];
17
+ };
18
+ //# sourceMappingURL=permissions-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions-format.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/permissions-format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,8BAA8B,CAAA;AAOrF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,+BAAoC,GAC5C,MAAM,EAAE,CAiCV;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE,CAO5E;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE,CAkB1E;AAED,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAE1D;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAWzE;AA2CD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAGnE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAEnE;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,cAAc,EAC3B,UAAU,EAAE,cAAc,GACzB;IACD,EAAE,EAAE,OAAO,CAAA;IACX,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CA4BA"}
@@ -0,0 +1,142 @@
1
+ import { PERMISSION_MODES, canActivatePermissionMode, getPermissionModeDef, } from "../../runtime/permissions.js";
2
+ export function formatPermissionsSelectorView(currentMode, selectedIndex, options = {}) {
3
+ const safeIndex = clampIndex(selectedIndex);
4
+ const lines = [
5
+ "Update Patze Permissions",
6
+ "",
7
+ `Current mode: ${formatCurrentModeLine(currentMode)}`,
8
+ "",
9
+ ];
10
+ PERMISSION_MODES.forEach((entry, index) => {
11
+ lines.push(formatPermissionRow(entry, {
12
+ currentMode,
13
+ selected: index === safeIndex,
14
+ }));
15
+ lines.push(` ${entry.description}`);
16
+ if (entry.phase === "forbidden") {
17
+ lines.push(" Always refused. Patze forbids silent auto-apply.");
18
+ }
19
+ lines.push("");
20
+ });
21
+ lines.push("Controls");
22
+ lines.push(" ↑/↓ or j/k — move selection");
23
+ lines.push(" Enter — confirm selected mode");
24
+ lines.push(" Esc — cancel without changes");
25
+ lines.push(" Direct set: /permissions read-only | suggest | edit-with-approval | full-auto");
26
+ if (options.staticMenu) {
27
+ lines.push("");
28
+ lines.push("Scripted mode: menu rendered deterministically. Use direct set to change mode.");
29
+ }
30
+ return lines;
31
+ }
32
+ export function formatPermissionModeSetResult(mode) {
33
+ const def = getPermissionModeDef(mode);
34
+ return [
35
+ `Permission mode set to ${def.label} (${def.mode}).`,
36
+ def.description,
37
+ formatPermissionCapabilities(mode),
38
+ ];
39
+ }
40
+ export function formatPermissionModeRefused(mode) {
41
+ const def = getPermissionModeDef(mode);
42
+ if (def.phase === "forbidden") {
43
+ return [
44
+ `Permission mode "${def.mode}" is forbidden.`,
45
+ def.description,
46
+ "Patze never enables silent auto-apply.",
47
+ "Active modes: read-only, suggest, edit-with-approval",
48
+ ];
49
+ }
50
+ if (def.phase === "planned") {
51
+ return [
52
+ `Permission mode "${def.mode}" is planned.`,
53
+ def.description,
54
+ "Active modes: read-only, suggest, edit-with-approval",
55
+ ];
56
+ }
57
+ return [`Permission mode "${def.mode}" is unavailable.`];
58
+ }
59
+ export function formatPermissionUpdateCancelled() {
60
+ return ["Permission update cancelled.", "No changes made."];
61
+ }
62
+ export function formatPermissionCapabilities(mode) {
63
+ switch (mode) {
64
+ case "read-only":
65
+ return "Allowed: inspect, plan, diff. Blocked: writes, shell, apply, approval gate.";
66
+ case "suggest":
67
+ return "Allowed: inspect, plan, diff, patch proposals, approval gate. Blocked: writes, shell, apply.";
68
+ case "edit-with-approval":
69
+ return "Allowed: inspect, plan, diff, approval gate, gated /apply after explicit confirmation. Blocked: shell, auto-apply.";
70
+ case "full-auto":
71
+ return "Forbidden: silent auto-apply is never enabled.";
72
+ }
73
+ }
74
+ function formatCurrentModeLine(mode) {
75
+ const def = getPermissionModeDef(mode);
76
+ return `${def.label} (${def.mode})`;
77
+ }
78
+ function formatPermissionRow(entry, context) {
79
+ const markers = [];
80
+ if (context.selected) {
81
+ markers.push("›");
82
+ }
83
+ else {
84
+ markers.push(" ");
85
+ }
86
+ const tags = [];
87
+ if (entry.mode === context.currentMode) {
88
+ tags.push("current");
89
+ }
90
+ if (entry.phase === "planned") {
91
+ tags.push("planned");
92
+ }
93
+ if (entry.phase === "forbidden") {
94
+ tags.push("forbidden");
95
+ }
96
+ const suffix = tags.length ? ` · ${tags.join(" · ")}` : "";
97
+ return ` ${markers[0]} ${entry.label}${suffix}`;
98
+ }
99
+ function clampIndex(index) {
100
+ if (index < 0) {
101
+ return 0;
102
+ }
103
+ if (index >= PERMISSION_MODES.length) {
104
+ return PERMISSION_MODES.length - 1;
105
+ }
106
+ return index;
107
+ }
108
+ export function indexForPermissionMode(mode) {
109
+ const index = PERMISSION_MODES.findIndex((entry) => entry.mode === mode);
110
+ return index >= 0 ? index : 0;
111
+ }
112
+ export function permissionModeAtIndex(index) {
113
+ return PERMISSION_MODES[clampIndex(index)].mode;
114
+ }
115
+ export function attemptPermissionModeChange(currentMode, targetMode) {
116
+ if (targetMode === currentMode && canActivatePermissionMode(targetMode)) {
117
+ return {
118
+ ok: true,
119
+ changed: false,
120
+ exitCode: 0,
121
+ lines: [
122
+ `Permission mode unchanged: ${getPermissionModeDef(targetMode).label} (${targetMode}).`,
123
+ formatPermissionCapabilities(targetMode),
124
+ ],
125
+ };
126
+ }
127
+ if (!canActivatePermissionMode(targetMode)) {
128
+ return {
129
+ ok: false,
130
+ changed: false,
131
+ exitCode: 2,
132
+ lines: formatPermissionModeRefused(targetMode),
133
+ };
134
+ }
135
+ return {
136
+ ok: true,
137
+ changed: true,
138
+ exitCode: 0,
139
+ lines: formatPermissionModeSetResult(targetMode),
140
+ };
141
+ }
142
+ //# sourceMappingURL=permissions-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions-format.js","sourceRoot":"","sources":["../../../src/cli/interactive/permissions-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type PermissionSelectorKey = "up" | "down" | "enter" | "escape" | "cancel";
2
+ export declare function normalizePermissionSelectorKey(input: string): PermissionSelectorKey | null;
3
+ export declare function readPermissionSelectorKey(readChunk: () => Promise<string | null>): Promise<PermissionSelectorKey | null>;
4
+ export declare function createKeyReaderFromSequence(sequence: readonly string[]): () => Promise<string | null>;
5
+ //# sourceMappingURL=permissions-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions-keys.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/permissions-keys.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAC7B,IAAI,GACJ,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,CAAA;AAEZ,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,GAAG,IAAI,CA0B1F;AAED,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GACtC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAoBvC;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUrG"}
@@ -0,0 +1,58 @@
1
+ export function normalizePermissionSelectorKey(input) {
2
+ const normalized = input.trim().toLowerCase();
3
+ switch (normalized) {
4
+ case "up":
5
+ case "k":
6
+ case "\u001b[a":
7
+ case "\u001boa":
8
+ return "up";
9
+ case "down":
10
+ case "j":
11
+ case "\u001b[b":
12
+ case "\u001bob":
13
+ return "down";
14
+ case "enter":
15
+ case "\r":
16
+ case "\n":
17
+ return "enter";
18
+ case "escape":
19
+ case "esc":
20
+ case "q":
21
+ case "\u001b":
22
+ case "\u0003":
23
+ return "escape";
24
+ default:
25
+ return null;
26
+ }
27
+ }
28
+ export async function readPermissionSelectorKey(readChunk) {
29
+ const chunk = await readChunk();
30
+ if (chunk === null) {
31
+ return "cancel";
32
+ }
33
+ if (chunk.startsWith("\u001b")) {
34
+ if (chunk.length >= 3 && chunk[1] === "[") {
35
+ const code = chunk.slice(2);
36
+ if (code.startsWith("A")) {
37
+ return "up";
38
+ }
39
+ if (code.startsWith("B")) {
40
+ return "down";
41
+ }
42
+ }
43
+ return "escape";
44
+ }
45
+ return normalizePermissionSelectorKey(chunk);
46
+ }
47
+ export function createKeyReaderFromSequence(sequence) {
48
+ let index = 0;
49
+ return async () => {
50
+ if (index >= sequence.length) {
51
+ return null;
52
+ }
53
+ const value = sequence[index];
54
+ index += 1;
55
+ return value;
56
+ };
57
+ }
58
+ //# sourceMappingURL=permissions-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions-keys.js","sourceRoot":"","sources":["../../../src/cli/interactive/permissions-keys.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,8BAA8B,CAAC,KAAa;IAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC7C,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,IAAI,CAAC;QACV,KAAK,GAAG,CAAC;QACT,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,IAAI,CAAA;QACb,KAAK,MAAM,CAAC;QACZ,KAAK,GAAG,CAAC;QACT,KAAK,UAAU,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,MAAM,CAAA;QACf,KAAK,OAAO,CAAC;QACb,KAAK,IAAI,CAAC;QACV,KAAK,IAAI;YACP,OAAO,OAAO,CAAA;QAChB,KAAK,QAAQ,CAAC;QACd,KAAK,KAAK,CAAC;QACX,KAAK,GAAG,CAAC;QACT,KAAK,QAAQ,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAA;QACjB;YACE,OAAO,IAAI,CAAA;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAuC;IAEvC,MAAM,KAAK,GAAG,MAAM,SAAS,EAAE,CAAA;IAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC3B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,IAAI,CAAA;YACb,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,MAAM,CAAA;YACf,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,OAAO,8BAA8B,CAAC,KAAK,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,QAA2B;IACrE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,OAAO,KAAK,IAAI,EAAE;QAChB,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAA;QAC9B,KAAK,IAAI,CAAC,CAAA;QACV,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,68 @@
1
+ import type { PreviewRouteResponse } from "../../backend/preview-client.js";
2
+ import type { PatchProposalRaw } from "../../runtime/patch-proposal.js";
3
+ export type InspectSummary = {
4
+ root: string;
5
+ fileCount: number;
6
+ directoryCount: number;
7
+ deniedCount: number;
8
+ contextFiles: string[];
9
+ };
10
+ export type PendingActionKind = "preview" | "local_plan" | "review_diff" | "patch_available" | "approved_apply_patch";
11
+ export type PendingAction = {
12
+ kind: PendingActionKind;
13
+ objective: string;
14
+ artifactDigest?: string;
15
+ previewDigest?: string;
16
+ createdAt: string;
17
+ };
18
+ export type DiffReviewState = {
19
+ reviewedAt: string;
20
+ artifactDigest: string;
21
+ previewDigest: string;
22
+ objective: string;
23
+ filesChanged: string[];
24
+ hasPatchBody: boolean;
25
+ };
26
+ export type ApprovalGateAction = "apply_patch";
27
+ export type ApprovalGate = {
28
+ action: ApprovalGateAction;
29
+ artifactDigest: string;
30
+ previewDigest: string;
31
+ objective: string;
32
+ filesChanged: string[];
33
+ approvedAt: string;
34
+ };
35
+ export type StoredPreviewResult = {
36
+ source: "server" | "local";
37
+ objective: string;
38
+ status: string;
39
+ server?: PreviewRouteResponse;
40
+ localSteps?: string[];
41
+ };
42
+ export type ApplyConfirmationState = {
43
+ artifactDigest: string;
44
+ previewDigest: string;
45
+ expectedPhrase: string;
46
+ };
47
+ export type AppliedFileRecord = {
48
+ relativePath: string;
49
+ action: "add" | "modify" | "delete";
50
+ beforeHash: string | null;
51
+ afterHash: string | null;
52
+ };
53
+ export type ApplyResult = {
54
+ artifactDigest: string;
55
+ previewDigest: string;
56
+ filesWritten: string[];
57
+ appliedAt: string;
58
+ gateConsumed: boolean;
59
+ files: AppliedFileRecord[];
60
+ };
61
+ export type VerifyResult = {
62
+ status: "passed" | "failed" | "unavailable";
63
+ checkedAt: string;
64
+ filesChecked: string[];
65
+ issues: string[];
66
+ };
67
+ export type { PatchProposalRaw };
68
+ //# sourceMappingURL=session-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-state.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/session-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAE3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEvE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,iBAAiB,GACzB,SAAS,GACT,YAAY,GACZ,aAAa,GACb,iBAAiB,GACjB,sBAAsB,CAAA;AAE1B,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,iBAAiB,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,aAAa,CAAA;AAE9C,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,kBAAkB,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,OAAO,CAAA;IACrB,KAAK,EAAE,iBAAiB,EAAE,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB,CAAA;AAED,YAAY,EAAE,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=session-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-state.js","sourceRoot":"","sources":["../../../src/cli/interactive/session-state.ts"],"names":[],"mappings":""}
@@ -0,0 +1,71 @@
1
+ import type { PermissionMode } from "../../runtime/permissions.js";
2
+ import type { ApplyConfirmationState, ApplyResult, ApprovalGate, DiffReviewState, InspectSummary, PendingAction, StoredPreviewResult, VerifyResult } from "./session-state.js";
3
+ export type SessionTranscriptEntry = {
4
+ input: string;
5
+ lines: string[];
6
+ };
7
+ export declare class InteractiveSession {
8
+ readonly cwd: string;
9
+ private transcript;
10
+ private currentGoal;
11
+ private lastGoalObjective;
12
+ private lastInspectSummary;
13
+ private lastPreviewResult;
14
+ private pendingAction;
15
+ private diffReviewState;
16
+ private approvalGate;
17
+ private pendingApplyConfirmation;
18
+ private lastApplyResult;
19
+ private lastVerifyResult;
20
+ private applyHistory;
21
+ private verifyDriftBlocked;
22
+ private verifyDriftGateKey;
23
+ private consumedGateKeys;
24
+ private permissionMode;
25
+ constructor(cwd: string);
26
+ append(entry: SessionTranscriptEntry): void;
27
+ clear(): void;
28
+ resetAgentState(): void;
29
+ size(): number;
30
+ snapshot(): SessionTranscriptEntry[];
31
+ setCurrentGoal(objective: string): void;
32
+ getCurrentGoal(): string | null;
33
+ setLastGoalObjective(objective: string): void;
34
+ getLastGoalObjective(): string | null;
35
+ setLastInspectSummary(summary: InspectSummary): void;
36
+ getLastInspectSummary(): InspectSummary | null;
37
+ setLastPreviewResult(result: StoredPreviewResult): void;
38
+ getLastPreviewResult(): StoredPreviewResult | null;
39
+ setPendingAction(action: PendingAction): void;
40
+ clearPendingAction(): void;
41
+ getPendingAction(): PendingAction | null;
42
+ hasPendingAction(): boolean;
43
+ setDiffReviewState(state: DiffReviewState): void;
44
+ getDiffReviewState(): DiffReviewState | null;
45
+ clearDiffReviewState(): void;
46
+ setApprovalGate(gate: ApprovalGate): void;
47
+ getApprovalGate(): ApprovalGate | null;
48
+ clearApprovalGate(): void;
49
+ clearReviewAndApprovalState(): void;
50
+ setPendingApplyConfirmation(state: ApplyConfirmationState): void;
51
+ getPendingApplyConfirmation(): ApplyConfirmationState | null;
52
+ clearPendingApplyConfirmation(): void;
53
+ hasPendingApplyConfirmation(): boolean;
54
+ setLastApplyResult(result: ApplyResult): void;
55
+ appendApplyHistory(result: ApplyResult): void;
56
+ getApplyHistory(): ApplyResult[];
57
+ getLastApplyResult(): ApplyResult | null;
58
+ setLastVerifyResult(result: VerifyResult): void;
59
+ getLastVerifyResult(): VerifyResult | null;
60
+ markVerifyDriftBlocked(artifactDigest: string, previewDigest: string): void;
61
+ clearVerifyDriftBlocked(): void;
62
+ isVerifyDriftBlocked(): boolean;
63
+ getVerifyDriftGateKey(): string | null;
64
+ buildGateKey(artifactDigest: string, previewDigest: string): string;
65
+ markGateConsumed(artifactDigest: string, previewDigest: string): void;
66
+ isGateConsumed(gateKey: string): boolean;
67
+ isApprovalGateConsumed(gate: ApprovalGate): boolean;
68
+ getPermissionMode(): PermissionMode;
69
+ setPermissionMode(mode: PermissionMode): void;
70
+ }
71
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/session.ts"],"names":[],"mappings":"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"}