autohand-cli 0.7.6 → 0.7.7

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 (135) hide show
  1. package/dist/{AutomodeManager-TJSW2SQY.cjs → AutomodeManager-HV6M7EAX.cjs} +61 -22
  2. package/dist/{AutomodeManager-WIMHLG4W.js → AutomodeManager-YVCJXOMQ.js} +61 -22
  3. package/dist/CommunitySkillsCache-2BITCEAA.cjs +7 -0
  4. package/dist/{CommunitySkillsCache-XPDVYU3K.js → CommunitySkillsCache-Q22FUAR5.js} +2 -2
  5. package/dist/HookManager-X47HCM5G.cjs +6 -0
  6. package/dist/{HookManager-VIX56KFU.js → HookManager-ZXKHCD7U.js} +1 -1
  7. package/dist/MemoryManager-2ATHG7BH.js +7 -0
  8. package/dist/MemoryManager-AENCGCEW.cjs +7 -0
  9. package/dist/PermissionManager-6HZGTK2N.cjs +10 -0
  10. package/dist/{PermissionManager-YFZI4ZZ6.js → PermissionManager-HATZKTRC.js} +3 -3
  11. package/dist/SessionManager-AG4WT3DP.cjs +9 -0
  12. package/dist/{SessionManager-XDBEQUPG.js → SessionManager-S5R6O3NU.js} +2 -2
  13. package/dist/{SkillsRegistry-7NICF6FY.js → SkillsRegistry-R5WDM6T3.js} +2 -2
  14. package/dist/SkillsRegistry-ZXU6YDRP.cjs +8 -0
  15. package/dist/SyncApiClient-FAOMIZAP.js +10 -0
  16. package/dist/SyncApiClient-UOA4VLLD.cjs +10 -0
  17. package/dist/add-dir-OMK3Y4DM.cjs +8 -0
  18. package/dist/add-dir-PNU7AGKO.js +8 -0
  19. package/dist/{agents-B33IAATH.js → agents-ICAC3KD3.js} +2 -2
  20. package/dist/agents-YONWPKFS.cjs +9 -0
  21. package/dist/agents-new-NV557UVG.cjs +10 -0
  22. package/dist/{agents-new-KTXJFC5E.js → agents-new-QHM3CO4B.js} +2 -2
  23. package/dist/{chunk-MFLRXVKU.js → chunk-23JQSCTO.js} +1 -1
  24. package/dist/chunk-2JPUEN44.cjs +299 -0
  25. package/dist/{chunk-5PD2L6WI.js → chunk-3YEDXG6S.js} +1 -1
  26. package/dist/{chunk-3ZUWWML7.cjs → chunk-4M2GX7RH.cjs} +2 -2
  27. package/dist/{chunk-R5KNHJ27.js → chunk-4RWTUT2Z.js} +1 -1
  28. package/dist/{chunk-CHQMK2ZG.js → chunk-52MLYK5P.js} +1 -1
  29. package/dist/{chunk-CVYEUA3D.cjs → chunk-53BR4MUW.cjs} +3 -3
  30. package/dist/{chunk-5WKR4HIB.js → chunk-5DN5KNXU.js} +1 -1
  31. package/dist/{chunk-3CO5R6M2.cjs → chunk-7TOHYAUF.cjs} +2 -2
  32. package/dist/{chunk-67NJKV5A.cjs → chunk-7VW3A7DO.cjs} +2 -2
  33. package/dist/{chunk-2W3QTBNG.cjs → chunk-A552JHUJ.cjs} +2 -2
  34. package/dist/{chunk-NGSLABLS.js → chunk-A6QBABQ7.js} +1 -1
  35. package/dist/chunk-ARVFUZOB.js +736 -0
  36. package/dist/{chunk-VO3JKFUH.js → chunk-AVL4DKQO.js} +1 -1
  37. package/dist/{chunk-CT2VTDPQ.cjs → chunk-B4ZPNXZE.cjs} +1 -1
  38. package/dist/{chunk-OKMYLMCR.cjs → chunk-B7EUETGY.cjs} +4 -4
  39. package/dist/chunk-C26EN22G.cjs +328 -0
  40. package/dist/chunk-DOTAX65F.js +328 -0
  41. package/dist/{chunk-SKT2CRNY.cjs → chunk-DSKVMFRM.cjs} +56 -8
  42. package/dist/{chunk-FUEL6BK7.js → chunk-EKY5PKQI.js} +15 -0
  43. package/dist/{chunk-YMP7AGNT.js → chunk-G77ZY4QG.js} +1 -1
  44. package/dist/{chunk-KN5C4TR4.cjs → chunk-GDTZQSJ6.cjs} +2 -2
  45. package/dist/{chunk-536VWSZK.cjs → chunk-GFJ6AETU.cjs} +4 -4
  46. package/dist/{chunk-723DZKBU.js → chunk-GR7VWN63.js} +2 -2
  47. package/dist/{chunk-PVM5I5WI.js → chunk-GWIAMKKF.js} +1 -1
  48. package/dist/{chunk-XAM7SFVB.cjs → chunk-GWXXFQ3F.cjs} +2 -2
  49. package/dist/{chunk-REPKBECD.cjs → chunk-JHFH3N4U.cjs} +2 -2
  50. package/dist/{chunk-4L5WYXHN.js → chunk-KH7BCZJN.js} +1 -1
  51. package/dist/{chunk-JXOXZTMA.js → chunk-L5ZFPWHY.js} +54 -6
  52. package/dist/chunk-MDWULS57.js +288 -0
  53. package/dist/{chunk-6LP2GO5C.js → chunk-MJFBVQHB.js} +2 -2
  54. package/dist/{chunk-MWLAHCU7.js → chunk-NI3BQXKU.js} +1 -1
  55. package/dist/{chunk-KJ67C72C.cjs → chunk-NYQVQYIF.cjs} +2 -2
  56. package/dist/{chunk-SKU4M27Z.js → chunk-OBV3UUIL.js} +1 -1
  57. package/dist/{chunk-27ISZOFA.js → chunk-P2Z6GDEN.js} +1 -1
  58. package/dist/{chunk-XTHHDIBG.cjs → chunk-PMMSDR44.cjs} +16 -1
  59. package/dist/{chunk-K6NBYSME.cjs → chunk-PR53E47T.cjs} +6 -6
  60. package/dist/{chunk-URY4AS4L.cjs → chunk-PU534KPO.cjs} +4 -4
  61. package/dist/{chunk-5MCDN53U.js → chunk-Q3WCMY3Z.js} +4 -2
  62. package/dist/{chunk-4KZCGK7D.js → chunk-QXAPHGEW.js} +1 -1
  63. package/dist/chunk-SFGJQPGC.cjs +288 -0
  64. package/dist/{chunk-53YDUYNS.cjs → chunk-SLISYSP4.cjs} +2 -2
  65. package/dist/{chunk-2E2COWKB.cjs → chunk-SYJLMBLP.cjs} +66 -10
  66. package/dist/chunk-U5WIP4HS.js +674 -0
  67. package/dist/{chunk-7HB7GSQF.js → chunk-UL7YPRCU.js} +1 -1
  68. package/dist/{chunk-JYTXG6OV.cjs → chunk-VDZJ3W4M.cjs} +4 -2
  69. package/dist/{chunk-LUKMRIKJ.cjs → chunk-VEDIYPWY.cjs} +2 -2
  70. package/dist/{chunk-C2NFLFHH.js → chunk-VPAN5H7Q.js} +1 -1
  71. package/dist/chunk-WH3D42BQ.js +299 -0
  72. package/dist/{chunk-2FSQPRPJ.js → chunk-WIUGUR5T.js} +59 -3
  73. package/dist/{chunk-QMVTT55Y.cjs → chunk-WQSWU2QA.cjs} +4 -4
  74. package/dist/chunk-XFPITUFJ.cjs +674 -0
  75. package/dist/chunk-XFQS2VGT.cjs +736 -0
  76. package/dist/{chunk-HYTYXN2G.cjs → chunk-YAGD43KA.cjs} +10 -10
  77. package/dist/constants-G2PLP5HH.cjs +20 -0
  78. package/dist/{constants-QYBEF3DB.js → constants-ZLG6M5SI.js} +3 -1
  79. package/dist/{defaultHooks-3G3DVF6I.js → defaultHooks-R56VYG7I.js} +315 -1
  80. package/dist/{defaultHooks-Z4KA6U5C.cjs → defaultHooks-WLMRQUXG.cjs} +315 -1
  81. package/dist/{feedback-PZ2PINDU.js → feedback-HZBCTSFG.js} +2 -2
  82. package/dist/feedback-JBQ3UPGZ.cjs +10 -0
  83. package/dist/index.cjs +897 -600
  84. package/dist/index.js +1438 -1141
  85. package/dist/language-KODBDE5R.js +12 -0
  86. package/dist/language-SJT475NW.cjs +12 -0
  87. package/dist/localProjectPermissions-AYQYGTOE.cjs +17 -0
  88. package/dist/{localProjectPermissions-DURCNDZG.js → localProjectPermissions-YFFAKLUZ.js} +2 -2
  89. package/dist/login-TC2KROQI.js +14 -0
  90. package/dist/login-TYMR2ZD3.cjs +14 -0
  91. package/dist/logout-2ECV365P.js +12 -0
  92. package/dist/logout-CO3CPYZJ.cjs +12 -0
  93. package/dist/resume-EPOEF3WV.cjs +9 -0
  94. package/dist/{resume-CWYAK6XR.js → resume-LOYD5MMP.js} +2 -2
  95. package/dist/share-544SIZOY.js +10 -0
  96. package/dist/share-OETK2GUF.cjs +10 -0
  97. package/dist/{skills-CRFOVWEQ.js → skills-3YEEODHK.js} +1 -1
  98. package/dist/skills-CRM55MKM.cjs +12 -0
  99. package/dist/{skills-install-Z27KPEGF.cjs → skills-install-FTGOHOZ4.cjs} +5 -5
  100. package/dist/{skills-install-RMPXN6RK.js → skills-install-KAXAQSN6.js} +2 -2
  101. package/dist/skills-new-JF4FKNUT.cjs +11 -0
  102. package/dist/{skills-new-S2YPO635.js → skills-new-JYX2GBKM.js} +2 -2
  103. package/dist/{status-GPAZ67ZZ.js → status-7LCXYYY4.js} +2 -2
  104. package/dist/status-E7MZEQ26.cjs +9 -0
  105. package/dist/sync-3B7SNBYC.js +14 -0
  106. package/dist/sync-4RARBQIH.cjs +39 -0
  107. package/dist/sync-H4UHHLKU.js +39 -0
  108. package/dist/sync-YZ6YZ42H.cjs +14 -0
  109. package/dist/theme-3XV5BWUB.js +12 -0
  110. package/dist/theme-Z2WS5XWZ.cjs +12 -0
  111. package/package.json +4 -2
  112. package/dist/CommunitySkillsCache-X3X237QQ.cjs +0 -7
  113. package/dist/HookManager-EOMUXKJ4.cjs +0 -6
  114. package/dist/MemoryManager-UVHILGV5.js +0 -7
  115. package/dist/MemoryManager-WO3KUZVA.cjs +0 -7
  116. package/dist/PermissionManager-PMTQN263.cjs +0 -10
  117. package/dist/SessionManager-M5ZLCLCW.cjs +0 -9
  118. package/dist/SkillsRegistry-OINIPILA.cjs +0 -8
  119. package/dist/agents-GRAFXZY3.cjs +0 -9
  120. package/dist/agents-new-67NJJSDA.cjs +0 -10
  121. package/dist/constants-PE5DLI7Q.cjs +0 -18
  122. package/dist/feedback-R66B3B3C.cjs +0 -10
  123. package/dist/localProjectPermissions-75X3ZGKH.cjs +0 -17
  124. package/dist/login-NYWZRZO5.js +0 -12
  125. package/dist/login-QNJ5C42G.cjs +0 -12
  126. package/dist/logout-MBS7L3ZW.js +0 -12
  127. package/dist/logout-MVUP7GPU.cjs +0 -12
  128. package/dist/resume-ANISKRWL.cjs +0 -9
  129. package/dist/share-3PSV53CQ.js +0 -10
  130. package/dist/share-4ACH6626.cjs +0 -10
  131. package/dist/skills-6PIGHOWS.cjs +0 -12
  132. package/dist/skills-new-3QJUST7P.cjs +0 -11
  133. package/dist/status-4U5CPUVT.cjs +0 -9
  134. package/dist/theme-CVY6MVEK.cjs +0 -12
  135. package/dist/theme-CY7WF4M6.js +0 -12
@@ -0,0 +1,299 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+ var _chunkWQSWU2QAcjs = require('./chunk-WQSWU2QA.cjs');
5
+
6
+ // src/commands/sync.ts
7
+ var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
8
+ var _readline = require('readline'); var _readline2 = _interopRequireDefault(_readline);
9
+ var metadata = {
10
+ command: "/sync",
11
+ description: "Manage settings sync (view status, enable/disable, trigger sync)",
12
+ implemented: true
13
+ };
14
+ var globalSyncService = null;
15
+ function setSyncService(service) {
16
+ globalSyncService = service;
17
+ }
18
+ function getSyncService() {
19
+ return globalSyncService;
20
+ }
21
+ async function sync(ctx) {
22
+ const config = await _chunkWQSWU2QAcjs.loadConfig.call(void 0, );
23
+ const isLoggedIn = Boolean(_optionalChain([config, 'access', _ => _.auth, 'optionalAccess', _2 => _2.token]) && _optionalChain([config, 'access', _3 => _3.auth, 'optionalAccess', _4 => _4.user]));
24
+ if (!isLoggedIn) {
25
+ console.log(_chalk2.default.yellow("\nSettings sync requires authentication."));
26
+ console.log(_chalk2.default.gray("Run /login to sign in and enable cloud sync.\n"));
27
+ return null;
28
+ }
29
+ const data = await gatherSyncData(ctx, config);
30
+ await renderSyncUI(data, ctx);
31
+ return null;
32
+ }
33
+ async function gatherSyncData(ctx, config) {
34
+ const syncService = globalSyncService;
35
+ let status = {
36
+ enabled: false,
37
+ syncing: false,
38
+ lastSync: null,
39
+ fileCount: 0,
40
+ totalSize: 0
41
+ };
42
+ if (syncService) {
43
+ try {
44
+ status = await syncService.getStatus();
45
+ } catch (e) {
46
+ }
47
+ }
48
+ return {
49
+ enabled: _optionalChain([config, 'access', _5 => _5.sync, 'optionalAccess', _6 => _6.enabled]) !== false,
50
+ isRunning: _nullishCoalesce(_optionalChain([syncService, 'optionalAccess', _7 => _7.isRunning]), () => ( false)),
51
+ lastSync: status.lastSync,
52
+ fileCount: status.fileCount,
53
+ totalSize: status.totalSize,
54
+ interval: _nullishCoalesce(_optionalChain([config, 'access', _8 => _8.sync, 'optionalAccess', _9 => _9.interval]), () => ( 3e5)),
55
+ syncService,
56
+ isLoggedIn: Boolean(_optionalChain([config, 'access', _10 => _10.auth, 'optionalAccess', _11 => _11.token])),
57
+ includeTelemetry: _nullishCoalesce(_optionalChain([config, 'access', _12 => _12.sync, 'optionalAccess', _13 => _13.includeTelemetry]), () => ( false)),
58
+ includeFeedback: _nullishCoalesce(_optionalChain([config, 'access', _14 => _14.sync, 'optionalAccess', _15 => _15.includeFeedback]), () => ( false))
59
+ };
60
+ }
61
+ function renderSyncUI(data, ctx) {
62
+ return new Promise((resolve) => {
63
+ const tabs = ["Status", "Settings", "Activity"];
64
+ let currentTab = 0;
65
+ let needsRefresh = false;
66
+ const input = process.stdin;
67
+ const isTTY = input.isTTY;
68
+ const wasRaw = input.isRaw;
69
+ const wasPaused = typeof input.isPaused === "function" ? input.isPaused() : false;
70
+ if (wasPaused && typeof input.resume === "function") {
71
+ input.resume();
72
+ }
73
+ if (isTTY) {
74
+ _readline2.default.emitKeypressEvents(input);
75
+ if (!wasRaw && typeof input.setRawMode === "function") {
76
+ input.setRawMode(true);
77
+ }
78
+ if (typeof input.setEncoding === "function") {
79
+ input.setEncoding("utf8");
80
+ }
81
+ }
82
+ const render = () => {
83
+ process.stdout.write("\x1B[2J\x1B[H");
84
+ renderTabHeader(tabs, currentTab);
85
+ renderTabContent(tabs[currentTab], data);
86
+ console.log(_chalk2.default.gray("\nEsc to exit | Tab to cycle | s: sync now | e: toggle enabled"));
87
+ };
88
+ let buffer = "";
89
+ const handler = async (chunk) => {
90
+ buffer += typeof chunk === "string" ? chunk : chunk.toString("utf8");
91
+ const processNext = async () => {
92
+ if (!buffer.length) return false;
93
+ const first = buffer[0];
94
+ if (first === "\x1B") {
95
+ if (buffer.length === 1) return false;
96
+ if (buffer[1] === "[") {
97
+ if (buffer.length < 3) return false;
98
+ const seq = buffer.slice(0, 3);
99
+ buffer = buffer.slice(3);
100
+ await handleSequence(seq);
101
+ return true;
102
+ }
103
+ buffer = buffer.slice(1);
104
+ await handleSequence("\x1B");
105
+ return true;
106
+ }
107
+ buffer = buffer.slice(1);
108
+ await handleSequence(first);
109
+ return true;
110
+ };
111
+ while (await processNext()) {
112
+ }
113
+ };
114
+ const handleSequence = async (sequence) => {
115
+ switch (sequence) {
116
+ case "\x1B":
117
+ // ESC
118
+ case "":
119
+ cleanup();
120
+ resolve();
121
+ return;
122
+ case " ":
123
+ // Tab
124
+ case "\x1B[C":
125
+ currentTab = (currentTab + 1) % tabs.length;
126
+ render();
127
+ return;
128
+ case "\x1B[Z":
129
+ // Shift+Tab
130
+ case "\x1B[D":
131
+ currentTab = (currentTab - 1 + tabs.length) % tabs.length;
132
+ render();
133
+ return;
134
+ case "s":
135
+ case "S":
136
+ if (data.syncService) {
137
+ console.log(_chalk2.default.cyan("\nSyncing..."));
138
+ try {
139
+ const result = await data.syncService.sync();
140
+ if (result.success) {
141
+ console.log(_chalk2.default.green(`Sync complete! Uploaded: ${result.uploaded}, Downloaded: ${result.downloaded}`));
142
+ } else {
143
+ console.log(_chalk2.default.red(`Sync failed: ${result.error}`));
144
+ }
145
+ const config = await _chunkWQSWU2QAcjs.loadConfig.call(void 0, );
146
+ Object.assign(data, await gatherSyncData(ctx, config));
147
+ } catch (err) {
148
+ console.log(_chalk2.default.red(`Sync error: ${err}`));
149
+ }
150
+ await sleep(1500);
151
+ render();
152
+ }
153
+ return;
154
+ case "e":
155
+ case "E":
156
+ try {
157
+ const config = await _chunkWQSWU2QAcjs.loadConfig.call(void 0, );
158
+ const newEnabled = _optionalChain([config, 'access', _16 => _16.sync, 'optionalAccess', _17 => _17.enabled]) === false;
159
+ config.sync = { ...config.sync, enabled: newEnabled };
160
+ await _chunkWQSWU2QAcjs.saveConfig.call(void 0, config);
161
+ data.enabled = newEnabled;
162
+ console.log(_chalk2.default.cyan(`
163
+ Sync ${newEnabled ? "enabled" : "disabled"}`));
164
+ await sleep(1e3);
165
+ render();
166
+ } catch (err) {
167
+ console.log(_chalk2.default.red(`Error toggling sync: ${err}`));
168
+ }
169
+ return;
170
+ default:
171
+ return;
172
+ }
173
+ };
174
+ const cleanup = () => {
175
+ input.off("data", handler);
176
+ if (isTTY && !wasRaw && typeof input.setRawMode === "function") {
177
+ input.setRawMode(false);
178
+ }
179
+ if (wasPaused && typeof input.pause === "function") {
180
+ input.pause();
181
+ }
182
+ process.stdout.write("\x1B[2J\x1B[H");
183
+ };
184
+ input.on("data", handler);
185
+ render();
186
+ });
187
+ }
188
+ function renderTabHeader(tabs, currentIndex) {
189
+ const header = tabs.map((tab, i) => {
190
+ return i === currentIndex ? _chalk2.default.bgWhite.black(` ${tab} `) : _chalk2.default.gray(` ${tab} `);
191
+ }).join(" ");
192
+ console.log(`Settings Sync: ${header} ${_chalk2.default.gray("(tab to cycle)")}
193
+ `);
194
+ }
195
+ function renderTabContent(tab, data) {
196
+ switch (tab) {
197
+ case "Status":
198
+ renderStatusTab(data);
199
+ break;
200
+ case "Settings":
201
+ renderSettingsTab(data);
202
+ break;
203
+ case "Activity":
204
+ renderActivityTab(data);
205
+ break;
206
+ }
207
+ }
208
+ function renderStatusTab(data) {
209
+ console.log(_chalk2.default.bold("Sync Status\n"));
210
+ const statusIcon = data.enabled ? _chalk2.default.green("\u2713") : _chalk2.default.red("\u2717");
211
+ const runningIcon = data.isRunning ? _chalk2.default.green("\u2713") : _chalk2.default.yellow("\u25CB");
212
+ console.log(` ${_chalk2.default.cyan("Enabled".padEnd(20))} ${statusIcon} ${data.enabled ? "Yes" : "No"}`);
213
+ console.log(` ${_chalk2.default.cyan("Service Running".padEnd(20))} ${runningIcon} ${data.isRunning ? "Yes" : "No"}`);
214
+ console.log(` ${_chalk2.default.cyan("Last Sync".padEnd(20))} ${data.lastSync ? formatDate(data.lastSync) : _chalk2.default.gray("Never")}`);
215
+ console.log(` ${_chalk2.default.cyan("Files Tracked".padEnd(20))} ${data.fileCount}`);
216
+ console.log(` ${_chalk2.default.cyan("Total Size".padEnd(20))} ${formatSize(data.totalSize)}`);
217
+ console.log(` ${_chalk2.default.cyan("Sync Interval".padEnd(20))} ${formatInterval(data.interval)}`);
218
+ }
219
+ function renderSettingsTab(data) {
220
+ console.log(_chalk2.default.bold("Sync Settings\n"));
221
+ console.log(` ${_chalk2.default.cyan("Enabled".padEnd(25))} ${data.enabled ? _chalk2.default.green("true") : _chalk2.default.gray("false")}`);
222
+ console.log(` ${_chalk2.default.cyan("Interval".padEnd(25))} ${formatInterval(data.interval)}`);
223
+ console.log(` ${_chalk2.default.cyan("Include Telemetry".padEnd(25))} ${data.includeTelemetry ? _chalk2.default.green("true") : _chalk2.default.gray("false")}`);
224
+ console.log(` ${_chalk2.default.cyan("Include Feedback".padEnd(25))} ${data.includeFeedback ? _chalk2.default.green("true") : _chalk2.default.gray("false")}`);
225
+ console.log(_chalk2.default.bold("\nWhat Gets Synced\n"));
226
+ console.log(_chalk2.default.gray(" \u2713 config.json (API keys encrypted)"));
227
+ console.log(_chalk2.default.gray(" \u2713 agents/ (custom agents)"));
228
+ console.log(_chalk2.default.gray(" \u2713 skills/ (custom skills)"));
229
+ console.log(_chalk2.default.gray(" \u2713 hooks/ (user hooks)"));
230
+ console.log(_chalk2.default.gray(" \u2713 memory/ (user memory)"));
231
+ console.log(_chalk2.default.gray(" \u2713 sessions/ (session history)"));
232
+ console.log(_chalk2.default.gray(" \u2713 projects/ (project knowledge)"));
233
+ console.log(_chalk2.default.bold("\nNot Synced\n"));
234
+ console.log(_chalk2.default.gray(" \u2717 device-id (unique per device)"));
235
+ console.log(_chalk2.default.gray(" \u2717 error.log (local only)"));
236
+ console.log(_chalk2.default.gray(" \u2717 version-*.json (cache files)"));
237
+ }
238
+ function renderActivityTab(data) {
239
+ console.log(_chalk2.default.bold("Recent Sync Activity\n"));
240
+ if (!data.lastSync) {
241
+ console.log(_chalk2.default.gray(" No sync activity yet."));
242
+ console.log(_chalk2.default.gray(' Press "s" to trigger a manual sync.'));
243
+ return;
244
+ }
245
+ console.log(` ${_chalk2.default.cyan("Last successful sync:")} ${formatDate(data.lastSync)}`);
246
+ console.log(` ${_chalk2.default.cyan("Files synced:")} ${data.fileCount}`);
247
+ console.log(` ${_chalk2.default.cyan("Data transferred:")} ${formatSize(data.totalSize)}`);
248
+ console.log(_chalk2.default.bold("\nTips\n"));
249
+ console.log(_chalk2.default.gray(" - Sync runs automatically every 5 minutes"));
250
+ console.log(_chalk2.default.gray(' - Press "s" anytime to trigger a manual sync'));
251
+ console.log(_chalk2.default.gray(" - Cloud data takes priority on conflicts"));
252
+ }
253
+ function formatDate(isoString) {
254
+ try {
255
+ const date = new Date(isoString);
256
+ const now = /* @__PURE__ */ new Date();
257
+ const diff = now.getTime() - date.getTime();
258
+ if (diff < 6e4) {
259
+ return "Just now";
260
+ } else if (diff < 36e5) {
261
+ const mins = Math.floor(diff / 6e4);
262
+ return `${mins} minute${mins > 1 ? "s" : ""} ago`;
263
+ } else if (diff < 864e5) {
264
+ const hours = Math.floor(diff / 36e5);
265
+ return `${hours} hour${hours > 1 ? "s" : ""} ago`;
266
+ } else {
267
+ return date.toLocaleDateString() + " " + date.toLocaleTimeString();
268
+ }
269
+ } catch (e2) {
270
+ return isoString;
271
+ }
272
+ }
273
+ function formatSize(bytes) {
274
+ if (bytes === 0) return "0 B";
275
+ if (bytes < 1024) return `${bytes} B`;
276
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
277
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
278
+ }
279
+ function formatInterval(ms) {
280
+ const minutes = Math.floor(ms / 6e4);
281
+ if (minutes < 60) return `${minutes} minute${minutes > 1 ? "s" : ""}`;
282
+ const hours = Math.floor(minutes / 60);
283
+ return `${hours} hour${hours > 1 ? "s" : ""}`;
284
+ }
285
+ function sleep(ms) {
286
+ return new Promise((resolve) => setTimeout(resolve, ms));
287
+ }
288
+
289
+
290
+
291
+
292
+
293
+
294
+ exports.metadata = metadata; exports.setSyncService = setSyncService; exports.getSyncService = getSyncService; exports.sync = sync;
295
+ /**
296
+ * @license
297
+ * Copyright 2025 Autohand AI LLC
298
+ * SPDX-License-Identifier: Apache-2.0
299
+ */
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AUTOHAND_HOME
3
- } from "./chunk-FUEL6BK7.js";
3
+ } from "./chunk-EKY5PKQI.js";
4
4
 
5
5
  // src/skills/CommunitySkillsCache.ts
6
6
  import fs from "fs-extra";
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkXTHHDIBGcjs = require('./chunk-XTHHDIBG.cjs');
3
+ var _chunkPMMSDR44cjs = require('./chunk-PMMSDR44.cjs');
4
4
 
5
5
  // src/commands/agents.ts
6
6
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
@@ -20,7 +20,7 @@ var AgentRegistry = class _AgentRegistry {
20
20
  constructor() {
21
21
  this.agents = /* @__PURE__ */ new Map();
22
22
  this.externalPaths = [];
23
- this.agentsDir = _chunkXTHHDIBGcjs.AUTOHAND_PATHS.agents;
23
+ this.agentsDir = _chunkPMMSDR44cjs.AUTOHAND_PATHS.agents;
24
24
  }
25
25
  static getInstance() {
26
26
  if (!_AgentRegistry.instance) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AUTOHAND_PATHS
3
- } from "./chunk-FUEL6BK7.js";
3
+ } from "./chunk-EKY5PKQI.js";
4
4
 
5
5
  // src/commands/resume.ts
6
6
  import chalk from "chalk";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  AUTH_CONFIG
3
- } from "./chunk-FUEL6BK7.js";
3
+ } from "./chunk-EKY5PKQI.js";
4
4
 
5
5
  // src/auth/AuthClient.ts
6
6
  var DEFAULT_TIMEOUT = 1e4;
@@ -3,7 +3,7 @@
3
3
  var _chunkJHGIWNHLcjs = require('./chunk-JHGIWNHL.cjs');
4
4
 
5
5
 
6
- var _chunkXTHHDIBGcjs = require('./chunk-XTHHDIBG.cjs');
6
+ var _chunkPMMSDR44cjs = require('./chunk-PMMSDR44.cjs');
7
7
 
8
8
  // src/skills/SkillsRegistry.ts
9
9
  var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
@@ -232,7 +232,7 @@ var SkillsRegistry = class {
232
232
  this.workspaceRoot = workspaceRoot;
233
233
  const claudeProjectSkillsDir = _path2.default.join(workspaceRoot, ".claude", "skills");
234
234
  await this.loadFromDirectory(claudeProjectSkillsDir, "claude-project", false);
235
- const autohandProjectSkillsDir = _path2.default.join(workspaceRoot, _chunkXTHHDIBGcjs.PROJECT_DIR_NAME, "skills");
235
+ const autohandProjectSkillsDir = _path2.default.join(workspaceRoot, _chunkPMMSDR44cjs.PROJECT_DIR_NAME, "skills");
236
236
  await this.loadFromDirectory(autohandProjectSkillsDir, "autohand-project", true);
237
237
  }
238
238
  /**
@@ -291,7 +291,7 @@ var SkillsRegistry = class {
291
291
  async setWorkspaceWithAutoCopy(workspaceRoot) {
292
292
  this.workspaceRoot = workspaceRoot;
293
293
  const claudeProjectSkillsDir = _path2.default.join(workspaceRoot, ".claude", "skills");
294
- const autohandProjectSkillsDir = _path2.default.join(workspaceRoot, _chunkXTHHDIBGcjs.PROJECT_DIR_NAME, "skills");
294
+ const autohandProjectSkillsDir = _path2.default.join(workspaceRoot, _chunkPMMSDR44cjs.PROJECT_DIR_NAME, "skills");
295
295
  await this.addLocationWithAutoCopy(
296
296
  claudeProjectSkillsDir,
297
297
  "claude-project",
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-7BYSXAKS.js";
4
4
  import {
5
5
  AUTOHAND_FILES
6
- } from "./chunk-FUEL6BK7.js";
6
+ } from "./chunk-EKY5PKQI.js";
7
7
 
8
8
  // src/commands/feedback.ts
9
9
  import fs from "fs-extra";
@@ -1,13 +1,13 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
2
 
3
- var _chunkXTHHDIBGcjs = require('./chunk-XTHHDIBG.cjs');
3
+ var _chunkPMMSDR44cjs = require('./chunk-PMMSDR44.cjs');
4
4
 
5
5
  // src/permissions/localProjectPermissions.ts
6
6
  var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
7
7
  var _path = require('path'); var _path2 = _interopRequireDefault(_path);
8
8
  var LOCAL_SETTINGS_FILE = "settings.local.json";
9
9
  function getLocalSettingsPath(workspaceRoot) {
10
- return _path2.default.join(workspaceRoot, _chunkXTHHDIBGcjs.PROJECT_DIR_NAME, LOCAL_SETTINGS_FILE);
10
+ return _path2.default.join(workspaceRoot, _chunkPMMSDR44cjs.PROJECT_DIR_NAME, LOCAL_SETTINGS_FILE);
11
11
  }
12
12
  async function loadLocalProjectSettings(workspaceRoot) {
13
13
  const settingsPath = getLocalSettingsPath(workspaceRoot);
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkXTHHDIBGcjs = require('./chunk-XTHHDIBG.cjs');
3
+ var _chunkPMMSDR44cjs = require('./chunk-PMMSDR44.cjs');
4
4
 
5
5
  // src/session/SessionManager.ts
6
6
  var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
@@ -10,7 +10,7 @@ var SessionManager = class {
10
10
  constructor(baseDir) {
11
11
  this.currentSession = null;
12
12
  this.index = null;
13
- this.sessionsDir = _nullishCoalesce(baseDir, () => ( _chunkXTHHDIBGcjs.AUTOHAND_PATHS.sessions));
13
+ this.sessionsDir = _nullishCoalesce(baseDir, () => ( _chunkPMMSDR44cjs.AUTOHAND_PATHS.sessions));
14
14
  }
15
15
  async initialize() {
16
16
  await _fsextra2.default.ensureDir(this.sessionsDir);
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkXTHHDIBGcjs = require('./chunk-XTHHDIBG.cjs');
3
+ var _chunkPMMSDR44cjs = require('./chunk-PMMSDR44.cjs');
4
4
 
5
5
  // src/commands/resume.ts
6
6
  var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
@@ -17,7 +17,7 @@ async function getSessionTitle(sessionMeta) {
17
17
  return sessionMeta.summary.slice(0, 60);
18
18
  }
19
19
  try {
20
- const conversationPath = _path2.default.join(_chunkXTHHDIBGcjs.AUTOHAND_PATHS.sessions, sessionMeta.sessionId, "conversation.jsonl");
20
+ const conversationPath = _path2.default.join(_chunkPMMSDR44cjs.AUTOHAND_PATHS.sessions, sessionMeta.sessionId, "conversation.jsonl");
21
21
  if (await _fsextra2.default.pathExists(conversationPath)) {
22
22
  const content = await _fsextra2.default.readFile(conversationPath, "utf-8");
23
23
  const lines = content.trim().split("\n").filter((line) => line);
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-7BYSXAKS.js";
7
7
  import {
8
8
  AUTOHAND_PATHS
9
- } from "./chunk-FUEL6BK7.js";
9
+ } from "./chunk-EKY5PKQI.js";
10
10
 
11
11
  // src/commands/skills-new.ts
12
12
  import path from "path";