pushwork 1.0.4 → 1.0.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 (195) hide show
  1. package/README.md +87 -328
  2. package/dist/.pushwork/automerge/3P/Dm3ekE2pmjGnWvDaG3vSR7ww98/snapshot/aa2349c94955ea561f698720142f9d884a6872d9f82dc332d578c216beb0df0e +0 -0
  3. package/dist/.pushwork/automerge/st/orage-adapter-id +1 -0
  4. package/dist/.pushwork/config.json +15 -0
  5. package/dist/.pushwork/snapshot.json +7 -0
  6. package/dist/cli.js +231 -170
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands.d.ts +51 -0
  9. package/dist/commands.d.ts.map +1 -0
  10. package/dist/commands.js +799 -0
  11. package/dist/commands.js.map +1 -0
  12. package/dist/core/change-detection.d.ts +6 -19
  13. package/dist/core/change-detection.d.ts.map +1 -1
  14. package/dist/core/change-detection.js +101 -80
  15. package/dist/core/change-detection.js.map +1 -1
  16. package/dist/{config/index.d.ts → core/config.d.ts} +13 -3
  17. package/dist/core/config.d.ts.map +1 -0
  18. package/dist/{config/index.js → core/config.js} +55 -73
  19. package/dist/core/config.js.map +1 -0
  20. package/dist/core/index.d.ts +1 -0
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/core/index.js +1 -1
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/move-detection.d.ts +12 -50
  25. package/dist/core/move-detection.d.ts.map +1 -1
  26. package/dist/core/move-detection.js +58 -139
  27. package/dist/core/move-detection.js.map +1 -1
  28. package/dist/core/snapshot.d.ts +0 -4
  29. package/dist/core/snapshot.d.ts.map +1 -1
  30. package/dist/core/snapshot.js +2 -11
  31. package/dist/core/snapshot.js.map +1 -1
  32. package/dist/core/sync-engine.d.ts +5 -11
  33. package/dist/core/sync-engine.d.ts.map +1 -1
  34. package/dist/core/sync-engine.js +220 -362
  35. package/dist/core/sync-engine.js.map +1 -1
  36. package/dist/index.d.ts +0 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +0 -6
  39. package/dist/index.js.map +1 -1
  40. package/dist/types/config.d.ts +43 -67
  41. package/dist/types/config.d.ts.map +1 -1
  42. package/dist/types/config.js +6 -0
  43. package/dist/types/config.js.map +1 -1
  44. package/dist/types/documents.d.ts +15 -3
  45. package/dist/types/documents.d.ts.map +1 -1
  46. package/dist/types/documents.js.map +1 -1
  47. package/dist/types/index.d.ts.map +1 -1
  48. package/dist/types/index.js +0 -3
  49. package/dist/types/index.js.map +1 -1
  50. package/dist/types/snapshot.d.ts +3 -21
  51. package/dist/types/snapshot.d.ts.map +1 -1
  52. package/dist/types/snapshot.js +0 -14
  53. package/dist/types/snapshot.js.map +1 -1
  54. package/dist/utils/content.d.ts.map +1 -1
  55. package/dist/utils/content.js +2 -6
  56. package/dist/utils/content.js.map +1 -1
  57. package/dist/utils/directory.d.ts +10 -0
  58. package/dist/utils/directory.d.ts.map +1 -0
  59. package/dist/utils/directory.js +37 -0
  60. package/dist/utils/directory.js.map +1 -0
  61. package/dist/utils/fs.d.ts +15 -2
  62. package/dist/utils/fs.d.ts.map +1 -1
  63. package/dist/utils/fs.js +63 -53
  64. package/dist/utils/fs.js.map +1 -1
  65. package/dist/utils/index.d.ts +1 -1
  66. package/dist/utils/index.d.ts.map +1 -1
  67. package/dist/utils/index.js +1 -4
  68. package/dist/utils/index.js.map +1 -1
  69. package/dist/utils/mime-types.d.ts.map +1 -1
  70. package/dist/utils/mime-types.js +11 -4
  71. package/dist/utils/mime-types.js.map +1 -1
  72. package/dist/utils/network-sync.d.ts +0 -6
  73. package/dist/utils/network-sync.d.ts.map +1 -1
  74. package/dist/utils/network-sync.js +55 -99
  75. package/dist/utils/network-sync.js.map +1 -1
  76. package/dist/utils/output.d.ts +129 -0
  77. package/dist/utils/output.d.ts.map +1 -0
  78. package/dist/utils/output.js +375 -0
  79. package/dist/utils/output.js.map +1 -0
  80. package/dist/utils/repo-factory.d.ts +2 -6
  81. package/dist/utils/repo-factory.d.ts.map +1 -1
  82. package/dist/utils/repo-factory.js +8 -22
  83. package/dist/utils/repo-factory.js.map +1 -1
  84. package/dist/utils/string-similarity.d.ts +14 -0
  85. package/dist/utils/string-similarity.d.ts.map +1 -0
  86. package/dist/utils/string-similarity.js +43 -0
  87. package/dist/utils/string-similarity.js.map +1 -0
  88. package/dist/utils/trace.d.ts +19 -0
  89. package/dist/utils/trace.d.ts.map +1 -0
  90. package/dist/utils/trace.js +68 -0
  91. package/dist/utils/trace.js.map +1 -0
  92. package/package.json +17 -12
  93. package/src/cli.ts +326 -252
  94. package/src/commands.ts +988 -0
  95. package/src/core/change-detection.ts +199 -162
  96. package/src/{config/index.ts → core/config.ts} +65 -82
  97. package/src/core/index.ts +1 -1
  98. package/src/core/move-detection.ts +74 -180
  99. package/src/core/snapshot.ts +2 -12
  100. package/src/core/sync-engine.ts +248 -499
  101. package/src/index.ts +0 -10
  102. package/src/types/config.ts +50 -72
  103. package/src/types/documents.ts +16 -3
  104. package/src/types/index.ts +0 -5
  105. package/src/types/snapshot.ts +1 -23
  106. package/src/utils/content.ts +2 -6
  107. package/src/utils/directory.ts +50 -0
  108. package/src/utils/fs.ts +67 -56
  109. package/src/utils/index.ts +1 -6
  110. package/src/utils/mime-types.ts +12 -4
  111. package/src/utils/network-sync.ts +79 -137
  112. package/src/utils/output.ts +450 -0
  113. package/src/utils/repo-factory.ts +13 -31
  114. package/src/utils/string-similarity.ts +54 -0
  115. package/src/utils/trace.ts +70 -0
  116. package/test/integration/exclude-patterns.test.ts +6 -15
  117. package/test/integration/fuzzer.test.ts +308 -391
  118. package/test/integration/init-sync.test.ts +89 -0
  119. package/test/integration/sync-deletion.test.ts +2 -61
  120. package/test/integration/sync-flow.test.ts +4 -24
  121. package/test/jest.setup.ts +34 -0
  122. package/test/unit/deletion-behavior.test.ts +3 -14
  123. package/test/unit/enhanced-mime-detection.test.ts +0 -22
  124. package/test/unit/snapshot.test.ts +2 -29
  125. package/test/unit/sync-convergence.test.ts +3 -198
  126. package/test/unit/sync-timing.test.ts +0 -44
  127. package/test/unit/utils.test.ts +0 -2
  128. package/tsconfig.json +3 -3
  129. package/dist/browser/browser-sync-engine.d.ts +0 -64
  130. package/dist/browser/browser-sync-engine.d.ts.map +0 -1
  131. package/dist/browser/browser-sync-engine.js +0 -303
  132. package/dist/browser/browser-sync-engine.js.map +0 -1
  133. package/dist/browser/filesystem-adapter.d.ts +0 -84
  134. package/dist/browser/filesystem-adapter.d.ts.map +0 -1
  135. package/dist/browser/filesystem-adapter.js +0 -413
  136. package/dist/browser/filesystem-adapter.js.map +0 -1
  137. package/dist/browser/index.d.ts +0 -36
  138. package/dist/browser/index.d.ts.map +0 -1
  139. package/dist/browser/index.js +0 -90
  140. package/dist/browser/index.js.map +0 -1
  141. package/dist/browser/types.d.ts +0 -70
  142. package/dist/browser/types.d.ts.map +0 -1
  143. package/dist/browser/types.js +0 -6
  144. package/dist/browser/types.js.map +0 -1
  145. package/dist/cli/commands.d.ts +0 -77
  146. package/dist/cli/commands.d.ts.map +0 -1
  147. package/dist/cli/commands.js +0 -904
  148. package/dist/cli/commands.js.map +0 -1
  149. package/dist/cli/index.d.ts +0 -2
  150. package/dist/cli/index.d.ts.map +0 -1
  151. package/dist/cli/index.js +0 -19
  152. package/dist/cli/index.js.map +0 -1
  153. package/dist/config/index.d.ts.map +0 -1
  154. package/dist/config/index.js.map +0 -1
  155. package/dist/core/isomorphic-snapshot.d.ts +0 -58
  156. package/dist/core/isomorphic-snapshot.d.ts.map +0 -1
  157. package/dist/core/isomorphic-snapshot.js +0 -204
  158. package/dist/core/isomorphic-snapshot.js.map +0 -1
  159. package/dist/platform/browser-filesystem.d.ts +0 -26
  160. package/dist/platform/browser-filesystem.d.ts.map +0 -1
  161. package/dist/platform/browser-filesystem.js +0 -91
  162. package/dist/platform/browser-filesystem.js.map +0 -1
  163. package/dist/platform/filesystem.d.ts +0 -29
  164. package/dist/platform/filesystem.d.ts.map +0 -1
  165. package/dist/platform/filesystem.js +0 -65
  166. package/dist/platform/filesystem.js.map +0 -1
  167. package/dist/platform/node-filesystem.d.ts +0 -21
  168. package/dist/platform/node-filesystem.d.ts.map +0 -1
  169. package/dist/platform/node-filesystem.js +0 -93
  170. package/dist/platform/node-filesystem.js.map +0 -1
  171. package/dist/utils/content-similarity.d.ts +0 -53
  172. package/dist/utils/content-similarity.d.ts.map +0 -1
  173. package/dist/utils/content-similarity.js +0 -155
  174. package/dist/utils/content-similarity.js.map +0 -1
  175. package/dist/utils/fs-browser.d.ts +0 -57
  176. package/dist/utils/fs-browser.d.ts.map +0 -1
  177. package/dist/utils/fs-browser.js +0 -311
  178. package/dist/utils/fs-browser.js.map +0 -1
  179. package/dist/utils/fs-node.d.ts +0 -53
  180. package/dist/utils/fs-node.d.ts.map +0 -1
  181. package/dist/utils/fs-node.js +0 -220
  182. package/dist/utils/fs-node.js.map +0 -1
  183. package/dist/utils/isomorphic.d.ts +0 -29
  184. package/dist/utils/isomorphic.d.ts.map +0 -1
  185. package/dist/utils/isomorphic.js +0 -139
  186. package/dist/utils/isomorphic.js.map +0 -1
  187. package/dist/utils/pure.d.ts +0 -25
  188. package/dist/utils/pure.d.ts.map +0 -1
  189. package/dist/utils/pure.js +0 -112
  190. package/dist/utils/pure.js.map +0 -1
  191. package/src/cli/commands.ts +0 -1207
  192. package/src/cli/index.ts +0 -2
  193. package/src/utils/content-similarity.ts +0 -194
  194. package/test/README-TESTING-GAPS.md +0 -174
  195. package/test/unit/content-similarity.test.ts +0 -236
package/dist/cli.js CHANGED
@@ -4,225 +4,286 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  return (mod && mod.__esModule) ? mod : { "default": mod };
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- const commander_1 = require("commander");
7
+ const extra_typings_1 = require("@commander-js/extra-typings");
8
8
  const chalk_1 = __importDefault(require("chalk"));
9
- const commands_1 = require("./cli/commands");
10
- /**
11
- * Wrapper for command actions with consistent error handling
12
- */
13
- function withErrorHandling(fn) {
14
- return async (...args) => {
15
- try {
16
- await fn(...args);
17
- }
18
- catch (error) {
19
- console.error(chalk_1.default.red(`Error: ${error}`));
20
- process.exit(1);
21
- }
22
- };
23
- }
24
- const program = new commander_1.Command();
25
- // get the version from the package.json
9
+ const commands_1 = require("./commands");
26
10
  const version = require("../package.json").version;
27
- program
11
+ const program = new extra_typings_1.Command()
28
12
  .name("pushwork")
29
13
  .description("Bidirectional directory synchronization using Automerge CRDTs")
30
- .version(version);
14
+ .version(version, "-V, --version", "output the version number");
31
15
  // Init command
32
16
  program
33
17
  .command("init")
34
- .description("Initialize sync in directory")
35
- .argument("<path>", "Directory path to initialize")
36
- .option("--sync-server <url>", "Custom sync server URL (must be used with --sync-server-storage-id)")
37
- .option("--sync-server-storage-id <id>", "Custom sync server storage ID (must be used with --sync-server)")
38
- .addHelpText("after", `
39
- Examples:
40
- pushwork init ./my-folder
41
- pushwork init ./my-folder --sync-server ws://localhost:3030 --sync-server-storage-id 1d89eba7-f7a4-4e8e-80f2-5f4e2406f507
42
-
43
- Note: Custom sync server options must always be used together.`)
44
- .action(withErrorHandling(async (path, options) => {
45
- // Validate that both sync server options are provided together
46
- const hasSyncServer = !!options.syncServer;
47
- const hasSyncServerStorageId = !!options.syncServerStorageId;
48
- if (hasSyncServer && !hasSyncServerStorageId) {
49
- console.error(chalk_1.default.red("Error: --sync-server requires --sync-server-storage-id"));
50
- console.error(chalk_1.default.yellow("Both arguments must be provided together."));
51
- process.exit(1);
52
- }
53
- if (hasSyncServerStorageId && !hasSyncServer) {
54
- console.error(chalk_1.default.red("Error: --sync-server-storage-id requires --sync-server"));
55
- console.error(chalk_1.default.yellow("Both arguments must be provided together."));
56
- process.exit(1);
57
- }
58
- await (0, commands_1.init)(path, options.syncServer, options.syncServerStorageId);
59
- }));
18
+ .summary("Initialize sync in a directory")
19
+ .argument("[path]", "Directory path to initialize (default: current directory)", ".")
20
+ .option("--sync-server <url> <storage-id...>", "Custom sync server URL and storage ID")
21
+ .action(async (path, opts) => {
22
+ const [syncServer, syncServerStorageId] = validateSyncServer(opts.syncServer);
23
+ await (0, commands_1.init)(path, { syncServer, syncServerStorageId });
24
+ });
60
25
  // Clone command
61
26
  program
62
27
  .command("clone")
63
- .description("Clone an existing synced directory")
64
- .argument("<url>", "AutomergeUrl of root directory to clone")
28
+ .summary("Clone an existing synced directory")
29
+ .argument("<url>", "AutomergeUrl of root directory to clone (format: automerge:XXXXX)")
65
30
  .argument("<path>", "Target directory path")
66
- .option("--force", "Overwrite existing directory")
67
- .option("--sync-server <url>", "Custom sync server URL (must be used with --sync-server-storage-id)")
68
- .option("--sync-server-storage-id <id>", "Custom sync server storage ID (must be used with --sync-server)")
69
- .addHelpText("after", `
70
- Examples:
71
- pushwork clone automerge:abc123 ./my-clone
72
- pushwork clone automerge:abc123 ./my-clone --force
73
- pushwork clone automerge:abc123 ./my-clone --sync-server ws://localhost:3030 --sync-server-storage-id 1d89eba7-f7a4-4e8e-80f2-5f4e2406f507
74
-
75
- Note: Custom sync server options must always be used together.`)
76
- .action(withErrorHandling(async (url, path, options) => {
77
- // Validate that both sync server options are provided together
78
- const hasSyncServer = !!options.syncServer;
79
- const hasSyncServerStorageId = !!options.syncServerStorageId;
80
- if (hasSyncServer && !hasSyncServerStorageId) {
81
- console.error(chalk_1.default.red("Error: --sync-server requires --sync-server-storage-id"));
82
- console.error(chalk_1.default.yellow("Both arguments must be provided together."));
83
- process.exit(1);
84
- }
85
- if (hasSyncServerStorageId && !hasSyncServer) {
86
- console.error(chalk_1.default.red("Error: --sync-server-storage-id requires --sync-server"));
87
- console.error(chalk_1.default.yellow("Both arguments must be provided together."));
88
- process.exit(1);
89
- }
31
+ .option("-f, --force", "Overwrite existing directory", false)
32
+ .option("--sync-server <url> <storage-id...>", "Custom sync server URL and storage ID")
33
+ .option("-v, --verbose", "Verbose output", false)
34
+ .action(async (url, path, opts) => {
35
+ const [syncServer, syncServerStorageId] = validateSyncServer(opts.syncServer);
90
36
  await (0, commands_1.clone)(url, path, {
91
- force: options.force || false,
92
- dryRun: false,
93
- verbose: false,
94
- syncServer: options.syncServer,
95
- syncServerStorageId: options.syncServerStorageId,
37
+ force: opts.force,
38
+ verbose: opts.verbose,
39
+ syncServer,
40
+ syncServerStorageId,
96
41
  });
97
- }));
42
+ });
98
43
  // Commit command
99
44
  program
100
45
  .command("commit")
101
- .description("Commit local changes (no network sync)")
102
- .argument("[path]", "Directory path to commit", ".")
103
- .option("--dry-run", "Show what would be committed without applying changes")
104
- .action(withErrorHandling(async (path, options) => {
105
- await (0, commands_1.commit)(path, options.dryRun || false);
106
- }));
46
+ .summary("Save local changes to Automerge documents")
47
+ .argument("[path]", "Directory path to commit (default: current directory)", ".")
48
+ .action(async (path, _opts) => {
49
+ await (0, commands_1.commit)(path);
50
+ });
107
51
  // Sync command
108
52
  program
109
53
  .command("sync")
110
- .description("Run full bidirectional synchronization")
111
- .option("--dry-run", "Show what would be done without applying changes")
112
- .option("-v, --verbose", "Verbose output")
113
- .action(withErrorHandling(async (options) => {
114
- await (0, commands_1.sync)({
115
- dryRun: options.dryRun || false,
116
- verbose: options.verbose || false,
54
+ .summary("Run full bidirectional synchronization")
55
+ .argument("[path]", "Directory path to sync (default: current directory)", ".")
56
+ .option("--dry-run", "Show what would be done without applying changes", false)
57
+ .option("-v, --verbose", "Verbose output", false)
58
+ .action(async (path, opts) => {
59
+ await (0, commands_1.sync)(path, {
60
+ dryRun: opts.dryRun,
61
+ verbose: opts.verbose,
117
62
  });
118
- }));
63
+ });
119
64
  // Diff command
120
65
  program
121
66
  .command("diff")
122
- .description("Show changes in working directory since last sync")
123
- .argument("[path]", "Limit diff to specific path", ".")
124
- .option("--tool <tool>", "Use external diff tool (meld, vimdiff, etc.)")
125
- .option("--name-only", "Show only changed file names")
126
- .action(withErrorHandling(async (path, options) => {
67
+ .summary("Show changes in working directory")
68
+ .argument("[path]", "Limit diff to specific path (default: current directory)", ".")
69
+ .option("--name-only", "Show only changed file names", false)
70
+ .action(async (path, opts) => {
127
71
  await (0, commands_1.diff)(path, {
128
- tool: options.tool,
129
- nameOnly: options.nameOnly || false,
130
- dryRun: false,
131
- verbose: false,
72
+ nameOnly: opts.nameOnly,
132
73
  });
133
- }));
74
+ });
134
75
  // Status command
135
76
  program
136
77
  .command("status")
137
- .description("Show sync status summary")
138
- .action(withErrorHandling(async (options) => {
139
- await (0, commands_1.status)();
140
- }));
78
+ .summary("Show sync status summary")
79
+ .argument("[path]", "Directory path (default: current directory)", ".")
80
+ .option("-v, --verbose", "Show detailed status including document info and all tracked files", false)
81
+ .action(async (path, opts) => {
82
+ await (0, commands_1.status)(path, {
83
+ verbose: opts.verbose,
84
+ });
85
+ });
141
86
  // Log command
142
87
  program
143
88
  .command("log")
144
- .description("Show sync history")
145
- .argument("[path]", "Show history for specific file or directory", ".")
146
- .option("--oneline", "Compact one-line per sync format")
89
+ .summary("Show sync history (experimental)")
90
+ .argument("[path]", "Show history for specific file or directory (default: current directory)", ".")
91
+ .option("--oneline", "Compact one-line per sync format", false)
147
92
  .option("--since <date>", "Show syncs since date")
148
93
  .option("--limit <n>", "Limit number of syncs shown", "10")
149
- .action(withErrorHandling(async (path, options) => {
94
+ .action(async (path, opts) => {
150
95
  await (0, commands_1.log)(path, {
151
- oneline: options.oneline || false,
152
- since: options.since,
153
- limit: parseInt(options.limit),
154
- dryRun: false,
155
- verbose: false,
96
+ oneline: opts.oneline,
97
+ since: opts.since,
98
+ limit: parseInt(opts.limit),
156
99
  });
157
- }));
100
+ });
158
101
  // Checkout command
159
102
  program
160
103
  .command("checkout")
161
- .description("Restore directory to state from previous sync")
104
+ .summary("Restore to previous sync (experimental)")
162
105
  .argument("<sync-id>", "Sync ID to restore to")
163
- .argument("[path]", "Specific path to restore", ".")
164
- .option("-f, --force", "Force checkout even if there are uncommitted changes")
165
- .action(withErrorHandling(async (syncId, path, options) => {
106
+ .argument("[path]", "Specific path to restore (default: current directory)", ".")
107
+ .option("-f, --force", "Force checkout even if there are uncommitted changes", false)
108
+ .action(async (syncId, path, opts) => {
166
109
  await (0, commands_1.checkout)(syncId, path, {
167
- force: options.force || false,
168
- dryRun: false,
169
- verbose: false,
110
+ force: opts.force,
170
111
  });
171
- }));
112
+ });
172
113
  // URL command
173
114
  program
174
115
  .command("url")
175
- .description("Show the Automerge root URL for this repository")
176
- .argument("[path]", "Directory path", ".")
177
- .addHelpText("after", `
178
- Examples:
179
- pushwork url # Show URL for current directory
180
- pushwork url ./repo # Show URL for specific directory
181
-
182
- Note: This command outputs only the URL, making it useful for scripts.`)
183
- .action(withErrorHandling(async (path) => {
116
+ .summary("Show the Automerge root URL")
117
+ .argument("[path]", "Directory path (default: current directory)", ".")
118
+ .action(async (path) => {
184
119
  await (0, commands_1.url)(path);
185
- }));
186
- // Debug command
120
+ });
121
+ // Remove command
187
122
  program
188
- .command("debug")
189
- .description("Show internal debug information including lastSyncAt timestamp")
190
- .argument("[path]", "Directory path", ".")
191
- .option("-v, --verbose", "Show verbose debug information including full document contents")
192
- .addHelpText("after", `
193
- Examples:
194
- pushwork debug # Show debug info for current directory
195
- pushwork debug --verbose # Show verbose debug info including full document contents
196
- pushwork debug ./repo # Show debug info for specific directory
197
-
198
- This command displays internal document state, including the lastSyncAt timestamp
199
- that gets updated when sync operations make changes.`)
200
- .action(withErrorHandling(async (path, options) => {
201
- await (0, commands_1.debug)(path, {
202
- verbose: options.verbose || false,
123
+ .command("rm")
124
+ .summary("Remove local pushwork data")
125
+ .argument("[path]", "Directory path (default: current directory)", ".")
126
+ .action(async (path) => {
127
+ await (0, commands_1.rm)(path);
128
+ });
129
+ // List command
130
+ program
131
+ .command("ls")
132
+ .summary("List tracked files")
133
+ .argument("[path]", "Directory path (default: current directory)", ".")
134
+ .option("-v, --verbose", "Show with Automerge URLs", false)
135
+ .action(async (path, opts) => {
136
+ await (0, commands_1.ls)(path, {
137
+ verbose: opts.verbose,
138
+ });
139
+ });
140
+ // Config command
141
+ program
142
+ .command("config")
143
+ .summary("View or edit configuration")
144
+ .argument("[path]", "Directory path (default: current directory)", ".")
145
+ .option("--list", "Show full configuration", false)
146
+ .option("--get <key>", "Get specific config value (dot notation, e.g., sync.move_detection_threshold)")
147
+ .action(async (path, opts) => {
148
+ await (0, commands_1.config)(path, {
149
+ list: opts.list,
150
+ get: opts.get,
151
+ });
152
+ });
153
+ // Watch command
154
+ program
155
+ .command("watch")
156
+ .summary("Watch directory for changes, build, and sync")
157
+ .argument("[path]", "Directory path to sync (default: current directory)", ".")
158
+ .option("--script <command>", "Build script to run before syncing", "pnpm build")
159
+ .option("--dir <dir>", "Directory to watch for changes (relative to working directory)", "src")
160
+ .option("-v, --verbose", "Show build script output", false)
161
+ .action(async (path, opts) => {
162
+ await (0, commands_1.watch)(path, {
163
+ script: opts.script,
164
+ watchDir: opts.dir,
165
+ verbose: opts.verbose,
203
166
  });
204
- }));
205
- // Global error handler
206
- process.on("unhandledRejection", (reason, promise) => {
207
- console.error(chalk_1.default.red("Unhandled Rejection at:"), promise, chalk_1.default.red("reason:"), reason);
208
- process.exit(1);
209
167
  });
210
- process.on("uncaughtException", (error) => {
211
- // Ignore WebSocket errors during shutdown - they're non-critical
212
- const errorMessage = error instanceof Error ? error.message : String(error);
213
- if (errorMessage.includes("WebSocket") ||
214
- errorMessage.includes("connection was established") ||
215
- errorMessage.includes("was closed")) {
216
- // Silently ignore WebSocket shutdown errors
217
- return;
168
+ // Completion command (hidden from help)
169
+ program.command("completion", { hidden: true }).action(() => {
170
+ // Generate completion dynamically from registered commands
171
+ const commands = program.commands
172
+ .filter((cmd) => cmd.name() !== "completion") // Exclude self
173
+ .map((cmd) => {
174
+ const name = cmd.name();
175
+ const desc = (cmd.summary() || cmd.description() || "").replace(/'/g, "\\'");
176
+ return `'${name}:${desc}'`;
177
+ })
178
+ .join(" ");
179
+ // Generate option completions for each command
180
+ const commandCases = program.commands
181
+ .filter((cmd) => cmd.name() !== "completion")
182
+ .map((cmd) => {
183
+ const options = cmd.options
184
+ .filter((opt) => opt.flags !== "-h, --help") // Exclude help
185
+ .map((opt) => {
186
+ // Parse flags like "-v, --verbose" or "--dry-run"
187
+ const flags = opt.flags.split(",").map((f) => f.trim());
188
+ const desc = (opt.description || "")
189
+ .replace(/'/g, "\\'")
190
+ .replace(/\n/g, " ");
191
+ // For options with arguments like "--sync-server <url>"
192
+ // Extract just the flag part
193
+ const cleanFlags = flags.map((f) => f.split(/\s+/)[0]);
194
+ if (cleanFlags.length > 1) {
195
+ // Multiple flags (short and long): '(-v --verbose)'{-v,--verbose}'[description]'
196
+ const short = cleanFlags[0];
197
+ const long = cleanFlags[1];
198
+ return `'(${short} ${long})'{${short},${long}}'[${desc}]'`;
199
+ }
200
+ else {
201
+ // Single flag: '--flag[description]'
202
+ return `'${cleanFlags[0]}[${desc}]'`;
203
+ }
204
+ })
205
+ .join(" \\\n ");
206
+ return options
207
+ ? ` ${cmd.name()})
208
+ _arguments \\
209
+ ${options}
210
+ ;;`
211
+ : "";
212
+ })
213
+ .filter(Boolean)
214
+ .join("\n");
215
+ const completionScript = `
216
+ # pushwork completion for zsh
217
+ _pushwork() {
218
+ local -a commands
219
+ commands=(${commands})
220
+
221
+ _arguments -C \\
222
+ '1: :->command' \\
223
+ '*::arg:->args'
224
+
225
+ case $state in
226
+ command)
227
+ _describe 'command' commands
228
+ ;;
229
+ args)
230
+ case $words[1] in
231
+ ${commandCases}
232
+ esac
233
+ ;;
234
+ esac
235
+ }
236
+
237
+ compdef _pushwork pushwork
238
+ `.trim();
239
+ console.log(completionScript);
240
+ });
241
+ // Helper to validate and extract sync server options
242
+ function validateSyncServer(syncServerOpt) {
243
+ if (!syncServerOpt) {
244
+ return [undefined, undefined];
245
+ }
246
+ if (syncServerOpt.length < 2) {
247
+ console.error(chalk_1.default.red("Error: --sync-server requires both URL and storage ID"));
248
+ process.exit(1);
249
+ }
250
+ const [syncServer, syncServerStorageId] = syncServerOpt;
251
+ return [syncServer, syncServerStorageId];
252
+ }
253
+ process.on("unhandledRejection", (error) => {
254
+ console.log(chalk_1.default.bgRed.white(" ERROR "));
255
+ if (error instanceof Error && error.stack) {
256
+ console.log(chalk_1.default.red(error.stack));
257
+ }
258
+ else {
259
+ console.error(chalk_1.default.red(error));
218
260
  }
219
- console.error(chalk_1.default.red("Uncaught Exception:"), error);
220
261
  process.exit(1);
221
262
  });
222
- // Parse arguments
223
- program.parse();
224
- // Show help if no arguments provided
225
- if (!process.argv.slice(2).length) {
226
- program.outputHelp();
227
- }
263
+ // Configure help colors using Commander v13's built-in color support
264
+ program
265
+ .configureHelp({
266
+ styleTitle: (str) => chalk_1.default.bold(str),
267
+ styleCommandText: (str) => chalk_1.default.white(str),
268
+ styleCommandDescription: (str) => chalk_1.default.dim(str),
269
+ styleOptionText: (str) => chalk_1.default.green(str),
270
+ styleArgumentText: (str) => chalk_1.default.cyan(str),
271
+ subcommandTerm: (cmd) => {
272
+ const opts = cmd.options
273
+ .filter((opt) => opt.flags !== "-h, --help")
274
+ .map((opt) => opt.short || opt.long)
275
+ .join(", ");
276
+ const name = chalk_1.default.white(cmd.name());
277
+ const args = cmd.registeredArguments
278
+ .map((arg) => arg.required
279
+ ? chalk_1.default.cyan(`<${arg.name()}>`)
280
+ : chalk_1.default.dim(`[${arg.name()}]`))
281
+ .join(" ");
282
+ return [name, args, opts && chalk_1.default.dim(`[${opts}]`)]
283
+ .filter(Boolean)
284
+ .join(" ");
285
+ },
286
+ })
287
+ .addHelpText("after", chalk_1.default.dim('\nEnable tab completion by adding this to your ~/.zshrc:\neval "$(pushwork completion)"'));
288
+ program.parseAsync();
228
289
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { CloneOptions, SyncOptions, DiffOptions, LogOptions, CheckoutOptions, InitOptions, ConfigOptions, StatusOptions, WatchOptions, CommandOptions } from "./types";
2
+ /**
3
+ * Initialize sync in a directory
4
+ */
5
+ export declare function init(targetPath: string, options?: InitOptions): Promise<void>;
6
+ /**
7
+ * Run bidirectional sync
8
+ */
9
+ export declare function sync(targetPath: string | undefined, options: SyncOptions): Promise<void>;
10
+ /**
11
+ * Show differences between local and remote
12
+ */
13
+ export declare function diff(targetPath: string | undefined, options: DiffOptions): Promise<void>;
14
+ /**
15
+ * Show sync status
16
+ */
17
+ export declare function status(targetPath?: string, options?: StatusOptions): Promise<void>;
18
+ /**
19
+ * Show sync history
20
+ */
21
+ export declare function log(targetPath: string | undefined, _options: LogOptions): Promise<void>;
22
+ /**
23
+ * Checkout/restore from previous sync
24
+ */
25
+ export declare function checkout(syncId: string, targetPath: string | undefined, _options: CheckoutOptions): Promise<void>;
26
+ /**
27
+ * Clone an existing synced directory from an AutomergeUrl
28
+ */
29
+ export declare function clone(rootUrl: string, targetPath: string, options: CloneOptions): Promise<void>;
30
+ /**
31
+ * Get the root URL for the current pushwork repository
32
+ */
33
+ export declare function url(targetPath?: string): Promise<void>;
34
+ /**
35
+ * Remove local pushwork data and log URL for recovery
36
+ */
37
+ export declare function rm(targetPath?: string): Promise<void>;
38
+ export declare function commit(targetPath: string, _options?: CommandOptions): Promise<void>;
39
+ /**
40
+ * List tracked files
41
+ */
42
+ export declare function ls(targetPath?: string, options?: CommandOptions): Promise<void>;
43
+ /**
44
+ * View or edit configuration
45
+ */
46
+ export declare function config(targetPath?: string, options?: ConfigOptions): Promise<void>;
47
+ /**
48
+ * Watch a directory and sync after build script completes
49
+ */
50
+ export declare function watch(targetPath?: string, options?: WatchOptions): Promise<void>;
51
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,EACf,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EAGZ,cAAc,EACf,MAAM,SAAS,CAAC;AAwHjB;;GAEG;AACH,wBAAsB,IAAI,CACxB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;;GAEG;AACH,wBAAsB,IAAI,CACxB,UAAU,oBAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAiGf;AAED;;GAEG;AACH,wBAAsB,IAAI,CACxB,UAAU,oBAAM,EAChB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAgGf;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,UAAU,GAAE,MAAY,EACxB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAyEf;AAED;;GAEG;AACH,wBAAsB,GAAG,CACvB,UAAU,oBAAM,EAChB,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,UAAU,oBAAM,EAChB,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;GAEG;AACH,wBAAsB,KAAK,CACzB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;GAEG;AACH,wBAAsB,GAAG,CAAC,UAAU,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBjE;AAED;;GAEG;AACH,wBAAsB,EAAE,CAAC,UAAU,GAAE,MAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BhE;AAED,wBAAsB,MAAM,CAC1B,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,cAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED;;GAEG;AACH,wBAAsB,EAAE,CACtB,UAAU,GAAE,MAAY,EACxB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAmCf;AAED;;GAEG;AACH,wBAAsB,MAAM,CAC1B,UAAU,GAAE,MAAY,EACxB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED;;GAEG;AACH,wBAAsB,KAAK,CACzB,UAAU,GAAE,MAAY,EACxB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAwIf"}