centy 0.0.7 → 0.0.10

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 (95) hide show
  1. package/README.md +299 -0
  2. package/dist/commands/daemon/autostart.d.ts +14 -0
  3. package/dist/commands/daemon/autostart.d.ts.map +1 -0
  4. package/dist/commands/daemon/autostart.js +74 -0
  5. package/dist/commands/daemon/autostart.js.map +1 -0
  6. package/dist/commands/install/daemon.d.ts +12 -0
  7. package/dist/commands/install/daemon.d.ts.map +1 -0
  8. package/dist/commands/install/daemon.js +41 -0
  9. package/dist/commands/install/daemon.js.map +1 -0
  10. package/dist/commands/restart.d.ts.map +1 -1
  11. package/dist/commands/restart.js +7 -16
  12. package/dist/commands/restart.js.map +1 -1
  13. package/dist/commands/shutdown.d.ts.map +1 -1
  14. package/dist/commands/shutdown.js +7 -16
  15. package/dist/commands/shutdown.js.map +1 -1
  16. package/dist/commands/start.d.ts.map +1 -1
  17. package/dist/commands/start.js +24 -14
  18. package/dist/commands/start.js.map +1 -1
  19. package/dist/daemon/daemon-control-service.d.ts +19 -0
  20. package/dist/daemon/daemon-control-service.d.ts.map +1 -0
  21. package/dist/daemon/daemon-control-service.js +56 -0
  22. package/dist/daemon/daemon-control-service.js.map +1 -0
  23. package/dist/daemon/types.d.ts +1 -0
  24. package/dist/daemon/types.d.ts.map +1 -1
  25. package/dist/hooks/prerun.d.ts.map +1 -1
  26. package/dist/hooks/prerun.js +12 -2
  27. package/dist/hooks/prerun.js.map +1 -1
  28. package/dist/lib/autostart/launchd.d.ts +13 -0
  29. package/dist/lib/autostart/launchd.d.ts.map +1 -0
  30. package/dist/lib/autostart/launchd.js +91 -0
  31. package/dist/lib/autostart/launchd.js.map +1 -0
  32. package/dist/lib/install-daemon/checksum.d.ts +2 -0
  33. package/dist/lib/install-daemon/checksum.d.ts.map +1 -0
  34. package/dist/lib/install-daemon/checksum.js +31 -0
  35. package/dist/lib/install-daemon/checksum.js.map +1 -0
  36. package/dist/lib/install-daemon/download.d.ts +8 -0
  37. package/dist/lib/install-daemon/download.d.ts.map +1 -0
  38. package/dist/lib/install-daemon/download.js +40 -0
  39. package/dist/lib/install-daemon/download.js.map +1 -0
  40. package/dist/lib/install-daemon/errors.d.ts +23 -0
  41. package/dist/lib/install-daemon/errors.d.ts.map +1 -0
  42. package/dist/lib/install-daemon/errors.js +42 -0
  43. package/dist/lib/install-daemon/errors.js.map +1 -0
  44. package/dist/lib/install-daemon/extract.d.ts +2 -0
  45. package/dist/lib/install-daemon/extract.d.ts.map +1 -0
  46. package/dist/lib/install-daemon/extract.js +38 -0
  47. package/dist/lib/install-daemon/extract.js.map +1 -0
  48. package/dist/lib/install-daemon/github-api.d.ts +9 -0
  49. package/dist/lib/install-daemon/github-api.d.ts.map +1 -0
  50. package/dist/lib/install-daemon/github-api.js +60 -0
  51. package/dist/lib/install-daemon/github-api.js.map +1 -0
  52. package/dist/lib/install-daemon/index.d.ts +3 -0
  53. package/dist/lib/install-daemon/index.d.ts.map +1 -0
  54. package/dist/lib/install-daemon/index.js +2 -0
  55. package/dist/lib/install-daemon/index.js.map +1 -0
  56. package/dist/lib/install-daemon/install-daemon.d.ts +3 -0
  57. package/dist/lib/install-daemon/install-daemon.d.ts.map +1 -0
  58. package/dist/lib/install-daemon/install-daemon.js +100 -0
  59. package/dist/lib/install-daemon/install-daemon.js.map +1 -0
  60. package/dist/lib/install-daemon/platform.d.ts +3 -0
  61. package/dist/lib/install-daemon/platform.d.ts.map +1 -0
  62. package/dist/lib/install-daemon/platform.js +24 -0
  63. package/dist/lib/install-daemon/platform.js.map +1 -0
  64. package/dist/lib/install-daemon/types.d.ts +34 -0
  65. package/dist/lib/install-daemon/types.d.ts.map +1 -0
  66. package/dist/lib/install-daemon/types.js +7 -0
  67. package/dist/lib/install-daemon/types.js.map +1 -0
  68. package/dist/lib/start/find-daemon-binary.d.ts.map +1 -1
  69. package/dist/lib/start/find-daemon-binary.js +9 -3
  70. package/dist/lib/start/find-daemon-binary.js.map +1 -1
  71. package/dist/tui/App.d.ts.map +1 -1
  72. package/dist/tui/App.js +2 -1
  73. package/dist/tui/App.js.map +1 -1
  74. package/dist/tui/components/domain/DaemonPanel.d.ts +2 -0
  75. package/dist/tui/components/domain/DaemonPanel.d.ts.map +1 -0
  76. package/dist/tui/components/domain/DaemonPanel.js +44 -0
  77. package/dist/tui/components/domain/DaemonPanel.js.map +1 -0
  78. package/dist/tui/hooks/useAutostart.d.ts +13 -0
  79. package/dist/tui/hooks/useAutostart.d.ts.map +1 -0
  80. package/dist/tui/hooks/useAutostart.js +96 -0
  81. package/dist/tui/hooks/useAutostart.js.map +1 -0
  82. package/dist/tui/hooks/useDaemonActions.d.ts +12 -0
  83. package/dist/tui/hooks/useDaemonActions.d.ts.map +1 -0
  84. package/dist/tui/hooks/useDaemonActions.js +77 -0
  85. package/dist/tui/hooks/useDaemonActions.js.map +1 -0
  86. package/dist/tui/hooks/useDaemonInfo.d.ts +10 -0
  87. package/dist/tui/hooks/useDaemonInfo.d.ts.map +1 -0
  88. package/dist/tui/hooks/useDaemonInfo.js +26 -0
  89. package/dist/tui/hooks/useDaemonInfo.js.map +1 -0
  90. package/dist/tui/services/daemon-service.d.ts +3 -1
  91. package/dist/tui/services/daemon-service.d.ts.map +1 -1
  92. package/dist/tui/services/daemon-service.js +7 -0
  93. package/dist/tui/services/daemon-service.js.map +1 -1
  94. package/oclif.manifest.json +95 -1
  95. package/package.json +3 -2
package/README.md ADDED
@@ -0,0 +1,299 @@
1
+ # Centy CLI
2
+
3
+ CLI for managing project issues and docs via code in the `.centy` folder. Local-first, git-friendly issue and documentation tracking.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ # Using npm
9
+ npm install -g centy
10
+
11
+ # Using pnpm
12
+ pnpm add -g centy
13
+
14
+ # Or run directly with npx/pnpm dlx
15
+ pnpm dlx centy
16
+ ```
17
+
18
+ ### Install the Daemon
19
+
20
+ The CLI requires the centy daemon to be running. Install it with:
21
+
22
+ ```bash
23
+ # Install latest version
24
+ centy install daemon
25
+
26
+ # Install specific version
27
+ centy install daemon --version 0.1.0
28
+
29
+ # Force reinstall
30
+ centy install daemon --force
31
+ ```
32
+
33
+ ## Quick Start
34
+
35
+ ```bash
36
+ # Install the daemon (first time only)
37
+ centy install daemon
38
+
39
+ # Start the daemon
40
+ centy start
41
+
42
+ # Initialize centy in your project
43
+ centy init
44
+
45
+ # Create an issue
46
+ centy create issue --title "Fix login bug" --priority high
47
+
48
+ # List issues
49
+ centy list issues
50
+
51
+ # Open interactive TUI mode
52
+ centy
53
+ ```
54
+
55
+ ## Interactive TUI Mode
56
+
57
+ Running `centy` without any arguments opens a full-screen interactive terminal UI:
58
+
59
+ ```
60
+ ┌─────────────────────────────────────────────────────┐
61
+ │ Centy ● Daemon: Connected │
62
+ ├──────────────┬──────────────────────────────────────┤
63
+ │ Projects │ │
64
+ │ > Issues │ Issue List │
65
+ │ Docs │ ───────────────────────── │
66
+ │ Assets │ #1 [high] Fix login bug │
67
+ │ Config │ #2 [med] Add dark mode │
68
+ │ Daemon │ #3 [low] Update docs │
69
+ ├──────────────┴──────────────────────────────────────┤
70
+ │ j/k: navigate Enter: select Tab: switch view q: quit │
71
+ └─────────────────────────────────────────────────────┘
72
+ ```
73
+
74
+ ### TUI Keyboard Shortcuts
75
+
76
+ | Key | Action |
77
+ | --------- | ---------------------- |
78
+ | `j` / `↓` | Move down |
79
+ | `k` / `↑` | Move up |
80
+ | `Enter` | Select item |
81
+ | `Tab` | Switch view |
82
+ | `1-6` | Quick navigate to view |
83
+ | `q` | Quit |
84
+
85
+ ## Commands
86
+
87
+ ### Project Management
88
+
89
+ ```bash
90
+ # Initialize a .centy folder
91
+ centy init
92
+
93
+ # Initialize with defaults (skip prompts)
94
+ centy init --force
95
+
96
+ # Register a project for tracking
97
+ centy register project
98
+
99
+ # Remove a project from tracking
100
+ centy untrack project
101
+ ```
102
+
103
+ ### Issues
104
+
105
+ ```bash
106
+ # Create an issue (interactive prompts for missing fields)
107
+ centy create issue
108
+
109
+ # Create an issue with all options
110
+ centy create issue --title "Bug fix" --description "Fix the bug" --priority high --status open
111
+
112
+ # Short flags
113
+ centy create issue -t "Bug fix" -d "Description" -p high -s open
114
+
115
+ # List all issues
116
+ centy list issues
117
+
118
+ # Get a specific issue by display number or UUID
119
+ centy get issue 1
120
+ centy get issue abc123-uuid
121
+
122
+ # Update an issue
123
+ centy update issue 1 --status closed
124
+ centy update issue 1 --title "New title" --priority high
125
+ centy update issue 1 -s in-progress
126
+
127
+ # Delete an issue
128
+ centy delete issue 1
129
+ ```
130
+
131
+ **Priority levels:** `low`, `medium`, `high`
132
+ **Default statuses:** `open`, `in-progress`, `closed`
133
+
134
+ ### Documentation
135
+
136
+ ```bash
137
+ # Create a doc (title required)
138
+ centy create doc --title "Getting Started"
139
+
140
+ # Create with content and custom slug
141
+ centy create doc --title "API Reference" --content "# API\nDocumentation here"
142
+ centy create doc --title "Guide" --slug my-custom-slug
143
+
144
+ # Use a template
145
+ centy create doc --title "New Feature" --template feature
146
+
147
+ # List all docs
148
+ centy list docs
149
+
150
+ # Get a specific doc by slug
151
+ centy get doc getting-started
152
+
153
+ # Update a doc
154
+ centy update doc getting-started
155
+
156
+ # Delete a doc
157
+ centy delete doc getting-started
158
+ ```
159
+
160
+ ### Assets
161
+
162
+ ```bash
163
+ # Add an asset to an issue
164
+ centy add asset ./screenshot.png --issue 1
165
+
166
+ # Add with custom filename
167
+ centy add asset ./image.jpg --issue 1 --name my-image.jpg
168
+
169
+ # Add a shared asset (accessible by all issues)
170
+ centy add asset ./logo.png --shared
171
+
172
+ # List assets for an issue
173
+ centy list assets --issue 1
174
+
175
+ # List shared assets
176
+ centy list assets --shared
177
+
178
+ # Get an asset and save to file
179
+ centy get asset <asset-id> --output ./downloaded.png
180
+
181
+ # Delete an asset
182
+ centy delete asset <asset-id>
183
+ ```
184
+
185
+ ### Daemon Management
186
+
187
+ ```bash
188
+ # Install the daemon
189
+ centy install daemon
190
+ centy install daemon --version 0.1.0
191
+ centy install daemon --force
192
+
193
+ # Start the daemon
194
+ centy start
195
+
196
+ # Start in foreground (blocks terminal, useful for debugging)
197
+ centy start --foreground
198
+
199
+ # Get daemon info
200
+ centy info
201
+
202
+ # Restart the daemon
203
+ centy restart
204
+
205
+ # Shutdown the daemon gracefully
206
+ centy shutdown
207
+ ```
208
+
209
+ ### Project Info
210
+
211
+ ```bash
212
+ # Get project configuration
213
+ centy config
214
+ centy config --json
215
+
216
+ # Get project manifest
217
+ centy manifest
218
+
219
+ # Get version info
220
+ centy version
221
+
222
+ # List all tracked projects
223
+ centy list projects
224
+
225
+ # Get info about a specific project
226
+ centy get project
227
+ ```
228
+
229
+ ### Migrations
230
+
231
+ ```bash
232
+ # Update project to latest version (runs migrations)
233
+ centy update
234
+
235
+ # Update to a specific version
236
+ centy update --target 0.2.0
237
+
238
+ # Force update without confirmation
239
+ centy update --force
240
+ ```
241
+
242
+ ## The .centy Folder
243
+
244
+ Centy stores all project data in a `.centy` folder that you can commit to git:
245
+
246
+ ```
247
+ .centy/
248
+ ├── .centy-manifest.json # Project manifest with file hashes
249
+ ├── config.json # Project configuration
250
+ ├── README.md # Project README
251
+ ├── issues/ # Issue files
252
+ │ └── <uuid>/
253
+ │ ├── issue.md # Issue content (markdown)
254
+ │ ├── metadata.json # Issue metadata (status, priority, timestamps)
255
+ │ └── assets/ # Issue-specific assets
256
+ ├── docs/ # Documentation files
257
+ │ └── <slug>/
258
+ │ ├── doc.md # Doc content (markdown)
259
+ │ └── metadata.json # Doc metadata
260
+ └── assets/ # Shared assets (accessible by all issues)
261
+ ```
262
+
263
+ All files are human-readable markdown and JSON, making them easy to review in PRs and track in version control.
264
+
265
+ ## Requirements
266
+
267
+ - Node.js >= 20.0.0
268
+ - Centy Daemon (install with `centy install daemon`)
269
+
270
+ ### Supported Platforms
271
+
272
+ The daemon supports:
273
+ - macOS (Intel & Apple Silicon)
274
+ - Linux (x86_64 & ARM64)
275
+ - Windows (x86_64)
276
+
277
+ ## Development
278
+
279
+ ```bash
280
+ # Clone the repository
281
+ git clone https://github.com/centy-io/centy-cli.git
282
+ cd centy-cli
283
+
284
+ # Install dependencies
285
+ pnpm install
286
+
287
+ # Build
288
+ pnpm build
289
+
290
+ # Run tests
291
+ pnpm test
292
+
293
+ # Run the CLI locally
294
+ ./bin/run.js --help
295
+ ```
296
+
297
+ ## License
298
+
299
+ MIT
@@ -0,0 +1,14 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DaemonAutostart extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ enable: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ disable: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ };
9
+ run(): Promise<void>;
10
+ private enable;
11
+ private disable;
12
+ private showStatus;
13
+ }
14
+ //# sourceMappingURL=autostart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autostart.d.ts","sourceRoot":"","sources":["../../../src/commands/daemon/autostart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAM5C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAClD,OAAgB,WAAW,SACwB;IAEnD,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;;MASpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAgBnB,MAAM;YAqBN,OAAO;YASP,UAAU;CAYzB"}
@@ -0,0 +1,74 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import { findDaemonBinary } from '../../lib/start/find-daemon-binary.js';
3
+ import { daemonBinaryExists } from '../../lib/start/daemon-binary-exists.js';
4
+ import { launchdService } from '../../lib/autostart/launchd.js';
5
+ export default class DaemonAutostart extends Command {
6
+ static description = 'Configure daemon to start automatically on boot';
7
+ static examples = [
8
+ '<%= config.bin %> daemon autostart',
9
+ '<%= config.bin %> daemon autostart --enable',
10
+ '<%= config.bin %> daemon autostart --disable',
11
+ ];
12
+ static flags = {
13
+ enable: Flags.boolean({
14
+ description: 'Enable autostart on boot',
15
+ exclusive: ['disable'],
16
+ }),
17
+ disable: Flags.boolean({
18
+ description: 'Disable autostart on boot',
19
+ exclusive: ['enable'],
20
+ }),
21
+ };
22
+ async run() {
23
+ const { flags } = await this.parse(DaemonAutostart);
24
+ if (process.platform !== 'darwin') {
25
+ this.error('Autostart is currently only supported on macOS');
26
+ }
27
+ if (flags.enable) {
28
+ await this.enable();
29
+ }
30
+ else if (flags.disable) {
31
+ await this.disable();
32
+ }
33
+ else {
34
+ await this.showStatus();
35
+ }
36
+ }
37
+ async enable() {
38
+ const daemonPath = findDaemonBinary();
39
+ if (!daemonBinaryExists(daemonPath)) {
40
+ this.error(`Daemon binary not found at: ${daemonPath}\n` +
41
+ 'Please install the daemon first with: centy install daemon');
42
+ }
43
+ try {
44
+ launchdService.enableAutostart(daemonPath);
45
+ this.log('Autostart enabled. The daemon will start automatically on boot.');
46
+ this.log(`Daemon path: ${daemonPath}`);
47
+ }
48
+ catch (error) {
49
+ this.error(`Failed to enable autostart: ${error.message}`);
50
+ }
51
+ }
52
+ async disable() {
53
+ try {
54
+ launchdService.disableAutostart();
55
+ this.log('Autostart disabled. The daemon will no longer start on boot.');
56
+ }
57
+ catch (error) {
58
+ this.error(`Failed to disable autostart: ${error.message}`);
59
+ }
60
+ }
61
+ async showStatus() {
62
+ const status = launchdService.getAutostartStatus();
63
+ if (status.enabled) {
64
+ this.log('Autostart: enabled');
65
+ if (status.daemonPath) {
66
+ this.log(`Daemon path: ${status.daemonPath}`);
67
+ }
68
+ }
69
+ else {
70
+ this.log('Autostart: disabled');
71
+ }
72
+ }
73
+ }
74
+ //# sourceMappingURL=autostart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autostart.js","sourceRoot":"","sources":["../../../src/commands/daemon/autostart.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class InstallDaemon extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ version: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ 'skip-checksum': import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/commands/install/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,OAAgB,WAAW,SAAiD;IAE5E,OAAgB,QAAQ,WAKvB;IAED,OAAgB,KAAK;;;;MAcpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAmBlC"}
@@ -0,0 +1,41 @@
1
+ import { Command, Flags } from '@oclif/core';
2
+ import { installDaemon } from '../../lib/install-daemon/index.js';
3
+ export default class InstallDaemon extends Command {
4
+ static description = 'Download and install the centy daemon binary';
5
+ static examples = [
6
+ '<%= config.bin %> install daemon',
7
+ '<%= config.bin %> install daemon --version 0.1.0',
8
+ '<%= config.bin %> install daemon --force',
9
+ '<%= config.bin %> install daemon --skip-checksum',
10
+ ];
11
+ static flags = {
12
+ version: Flags.string({
13
+ char: 'v',
14
+ description: 'Specific version to install (default: latest)',
15
+ }),
16
+ force: Flags.boolean({
17
+ char: 'f',
18
+ description: 'Force reinstall even if already installed',
19
+ default: false,
20
+ }),
21
+ 'skip-checksum': Flags.boolean({
22
+ description: 'Skip SHA256 checksum verification',
23
+ default: false,
24
+ }),
25
+ };
26
+ async run() {
27
+ const { flags } = await this.parse(InstallDaemon);
28
+ const result = await installDaemon({
29
+ version: flags.version,
30
+ force: flags.force,
31
+ skipChecksum: flags['skip-checksum'],
32
+ log: msg => this.log(msg),
33
+ warn: msg => this.warn(msg),
34
+ });
35
+ if (!result.success) {
36
+ this.error(result.error ?? 'Failed to install daemon');
37
+ }
38
+ this.log(`Daemon ${result.version} installed successfully to ${result.installPath}`);
39
+ }
40
+ }
41
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/commands/install/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AAEjE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,OAAO;IAChD,MAAM,CAAU,WAAW,GAAG,8CAA8C,CAAA;IAE5E,MAAM,CAAU,QAAQ,GAAG;QACzB,kCAAkC;QAClC,kDAAkD;QAClD,0CAA0C;QAC1C,kDAAkD;KACnD,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;YACpB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,+CAA+C;SAC7D,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,KAAK;SACf,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC;YAC7B,WAAW,EAAE,mCAAmC;YAChD,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAEjD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC;YACpC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YACzB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;SAC5B,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAC,CAAA;QACxD,CAAC;QAED,IAAI,CAAC,GAAG,CACN,UAAU,MAAM,CAAC,OAAO,8BAA8B,MAAM,CAAC,WAAW,EAAE,CAC3E,CAAA;IACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,OAAgB,WAAW,SAA6B;IAExD,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBlC"}
1
+ {"version":3,"file":"restart.d.ts","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,OAAgB,WAAW,SAA6B;IAExD,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAalC"}
@@ -1,5 +1,5 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
- import { daemonRestart } from '../daemon/daemon-restart.js';
2
+ import { daemonControlService } from '../daemon/daemon-control-service.js';
3
3
  /**
4
4
  * Restart the centy daemon
5
5
  */
@@ -18,22 +18,13 @@ export default class Restart extends Command {
18
18
  };
19
19
  async run() {
20
20
  const { flags } = await this.parse(Restart);
21
- try {
22
- const response = await daemonRestart({
23
- delaySeconds: flags.delay,
24
- });
25
- if (!response.success) {
26
- this.error(response.message);
27
- }
28
- this.log(response.message || 'Daemon restart initiated');
29
- }
30
- catch (error) {
31
- const msg = error instanceof Error ? error.message : String(error);
32
- if (msg.includes('UNAVAILABLE') || msg.includes('ECONNREFUSED')) {
33
- this.error('Centy daemon is not running. Please start the daemon first.');
34
- }
35
- this.error(msg);
21
+ const result = await daemonControlService.restart({
22
+ delaySeconds: flags.delay,
23
+ });
24
+ if (!result.success) {
25
+ this.error(result.error ?? 'Restart failed');
36
26
  }
27
+ this.log(result.data ? result.data.message : 'Daemon restart initiated');
37
28
  }
38
29
  }
39
30
  //# sourceMappingURL=restart.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAU,WAAW,GAAG,0BAA0B,CAAA;IAExD,MAAM,CAAU,QAAQ,GAAG;QACzB,2BAA2B;QAC3B,qCAAqC;KACtC,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,CAAC;SACX,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAE3C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC;gBACnC,YAAY,EAAE,KAAK,CAAC,KAAK;aAC1B,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC9B,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,0BAA0B,CAAC,CAAA;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClE,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,KAAK,CACR,6DAA6D,CAC9D,CAAA;YACH,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;IACH,CAAC"}
1
+ {"version":3,"file":"restart.js","sourceRoot":"","sources":["../../src/commands/restart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAU,WAAW,GAAG,0BAA0B,CAAA;IAExD,MAAM,CAAU,QAAQ,GAAG;QACzB,2BAA2B;QAC3B,qCAAqC;KACtC,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,iCAAiC;YAC9C,OAAO,EAAE,CAAC;SACX,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAE3C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC;YAChD,YAAY,EAAE,KAAK,CAAC,KAAK;SAC1B,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,gBAAgB,CAAC,CAAA;QAC9C,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAA;IAC1E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/commands/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,WAAW,SAAyC;IAEpE,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBlC"}
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/commands/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAI5C;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,OAAgB,WAAW,SAAyC;IAEpE,OAAgB,QAAQ,WAGvB;IAED,OAAgB,KAAK;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAalC"}
@@ -1,5 +1,5 @@
1
1
  import { Command, Flags } from '@oclif/core';
2
- import { daemonShutdown } from '../daemon/daemon-shutdown.js';
2
+ import { daemonControlService } from '../daemon/daemon-control-service.js';
3
3
  /**
4
4
  * Shutdown the centy daemon gracefully
5
5
  */
@@ -18,22 +18,13 @@ export default class Shutdown extends Command {
18
18
  };
19
19
  async run() {
20
20
  const { flags } = await this.parse(Shutdown);
21
- try {
22
- const response = await daemonShutdown({
23
- delaySeconds: flags.delay,
24
- });
25
- if (!response.success) {
26
- this.error(response.message);
27
- }
28
- this.log(response.message || 'Daemon shutdown initiated');
29
- }
30
- catch (error) {
31
- const msg = error instanceof Error ? error.message : String(error);
32
- if (msg.includes('UNAVAILABLE') || msg.includes('ECONNREFUSED')) {
33
- this.error('Centy daemon is not running. Please start the daemon first.');
34
- }
35
- this.error(msg);
21
+ const result = await daemonControlService.shutdown({
22
+ delaySeconds: flags.delay,
23
+ });
24
+ if (!result.success) {
25
+ this.error(result.error ?? 'Shutdown failed');
36
26
  }
27
+ this.log(result.data ? result.data.message : 'Daemon shutdown initiated');
37
28
  }
38
29
  }
39
30
  //# sourceMappingURL=shutdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/commands/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,WAAW,GAAG,sCAAsC,CAAA;IAEpE,MAAM,CAAU,QAAQ,GAAG;QACzB,4BAA4B;QAC5B,sCAAsC;KACvC,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kCAAkC;YAC/C,OAAO,EAAE,CAAC;SACX,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAE5C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;gBACpC,YAAY,EAAE,KAAK,CAAC,KAAK;aAC1B,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC9B,CAAC;YAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,2BAA2B,CAAC,CAAA;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAClE,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,KAAK,CACR,6DAA6D,CAC9D,CAAA;YACH,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;IACH,CAAC"}
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/commands/shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAE1E;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,OAAO;IAC3C,MAAM,CAAU,WAAW,GAAG,sCAAsC,CAAA;IAEpE,MAAM,CAAU,QAAQ,GAAG;QACzB,4BAA4B;QAC5B,sCAAsC;KACvC,CAAA;IAED,MAAM,CAAU,KAAK,GAAG;QACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,kCAAkC;YAC/C,OAAO,EAAE,CAAC;SACX,CAAC;KACH,CAAA;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAE5C,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC;YACjD,YAAY,EAAE,KAAK,CAAC,KAAK;SAC1B,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,iBAAiB,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAA;IAC3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAO5C,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,OAAgB,WAAW,SAA2B;IAEtD,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBnB,eAAe;YAoBf,eAAe;IAqB7B,OAAO,CAAC,gBAAgB;CASzB"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAA;AAa5C,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,OAAgB,WAAW,SAA2B;IAEtD,OAAgB,QAAQ,WAIvB;IAED,OAAgB,KAAK;;MAMpB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAoBnB,eAAe;YAaf,eAAe;IAwB7B,OAAO,CAAC,gBAAgB;CAUzB"}
@@ -4,6 +4,8 @@ import { checkDaemonConnection } from '../daemon/check-daemon-connection.js';
4
4
  import { daemonBinaryExists } from '../lib/start/daemon-binary-exists.js';
5
5
  import { findDaemonBinary } from '../lib/start/find-daemon-binary.js';
6
6
  import { waitForDaemon } from '../lib/start/wait-for-daemon.js';
7
+ const getMissingDaemonMsg = (p) => `Daemon not found at: ${p}\n\nFix:\n 1. centy install daemon\n 2. centy start\n 3. centy info\n\nOr set CENTY_DAEMON_PATH.`;
8
+ const getPermissionDeniedMsg = (p) => `Permission denied: ${p}\n\nRun: chmod +x "${p}"`;
7
9
  export default class Start extends Command {
8
10
  static description = 'Start the centy daemon';
9
11
  static examples = [
@@ -27,7 +29,7 @@ export default class Start extends Command {
27
29
  }
28
30
  const daemonPath = findDaemonBinary();
29
31
  if (!daemonBinaryExists(daemonPath)) {
30
- this.error(`Daemon binary not found at: ${daemonPath}`);
32
+ this.error(getMissingDaemonMsg(daemonPath));
31
33
  }
32
34
  if (flags.foreground) {
33
35
  await this.startForeground(daemonPath);
@@ -39,41 +41,49 @@ export default class Start extends Command {
39
41
  async startForeground(daemonPath) {
40
42
  this.log('Starting daemon in foreground mode...');
41
43
  const child = spawn(daemonPath, [], { stdio: 'inherit' });
42
- child.on('error', error => {
43
- this.handleSpawnError(error, daemonPath);
44
- });
44
+ child.on('error', error => this.handleSpawnError(error, daemonPath));
45
45
  await new Promise((resolve, reject) => {
46
46
  child.on('exit', code => {
47
- if (code === 0) {
47
+ if (code === 0)
48
48
  resolve();
49
- }
50
- else {
49
+ else
51
50
  reject(new Error(`Daemon exited with code ${code}`));
52
- }
53
51
  });
54
52
  });
55
53
  }
56
54
  async startBackground(daemonPath) {
57
55
  this.log('Starting daemon in background...');
58
56
  const child = spawn(daemonPath, [], { detached: true, stdio: 'ignore' });
57
+ // Track spawn errors to avoid conflicting error messages
58
+ let spawnError = null;
59
59
  child.on('error', error => {
60
- this.handleSpawnError(error, daemonPath);
60
+ spawnError = error;
61
61
  });
62
62
  child.unref();
63
63
  const started = await waitForDaemon();
64
+ // Check if spawn failed before reporting success/failure
65
+ if (spawnError) {
66
+ this.handleSpawnError(spawnError, daemonPath);
67
+ return;
68
+ }
64
69
  if (started) {
65
70
  this.log('Daemon started successfully');
66
71
  }
67
72
  else {
68
- this.error('Daemon process started but is not responding. Check daemon logs for errors.');
73
+ this.error('Daemon started but not responding. Check logs.');
69
74
  }
70
75
  }
71
76
  handleSpawnError(error, daemonPath) {
72
- if (error.code === 'ENOENT') {
73
- this.error(`Could not find centy-daemon binary at: ${daemonPath}. ` +
74
- 'Make sure the daemon is built and accessible.');
77
+ const errno = error.code;
78
+ if (errno === 'ENOENT') {
79
+ this.error(getMissingDaemonMsg(daemonPath));
80
+ }
81
+ else if (errno === 'EACCES') {
82
+ this.error(getPermissionDeniedMsg(daemonPath));
83
+ }
84
+ else {
85
+ this.error(`Failed to start daemon: ${error.message}`);
75
86
  }
76
- this.error(`Failed to start daemon: ${error.message}`);
77
87
  }
78
88
  }
79
89
  //# sourceMappingURL=start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}