ctx-sync 1.0.0
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.
- package/dist/commands/audit.d.ts +76 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +367 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/config.d.ts +58 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +114 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/dir.d.ts +56 -0
- package/dist/commands/dir.d.ts.map +1 -0
- package/dist/commands/dir.js +172 -0
- package/dist/commands/dir.js.map +1 -0
- package/dist/commands/docker.d.ts +140 -0
- package/dist/commands/docker.d.ts.map +1 -0
- package/dist/commands/docker.js +380 -0
- package/dist/commands/docker.js.map +1 -0
- package/dist/commands/env.d.ts +96 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +352 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/init.d.ts +89 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +272 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/key.d.ts +92 -0
- package/dist/commands/key.d.ts.map +1 -0
- package/dist/commands/key.js +274 -0
- package/dist/commands/key.js.map +1 -0
- package/dist/commands/list.d.ts +38 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +84 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/note.d.ts +151 -0
- package/dist/commands/note.d.ts.map +1 -0
- package/dist/commands/note.js +411 -0
- package/dist/commands/note.js.map +1 -0
- package/dist/commands/pull.d.ts +47 -0
- package/dist/commands/pull.d.ts.map +1 -0
- package/dist/commands/pull.js +94 -0
- package/dist/commands/pull.js.map +1 -0
- package/dist/commands/push.d.ts +40 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +94 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/restore.d.ts +116 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +336 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/service.d.ts +83 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +259 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/show.d.ts +63 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +243 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/status.d.ts +53 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +150 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync.d.ts +105 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +243 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/team.d.ts +79 -0
- package/dist/commands/team.d.ts.map +1 -0
- package/dist/commands/team.js +233 -0
- package/dist/commands/team.js.map +1 -0
- package/dist/commands/track.d.ts +109 -0
- package/dist/commands/track.d.ts.map +1 -0
- package/dist/commands/track.js +406 -0
- package/dist/commands/track.js.map +1 -0
- package/dist/core/command-validator.d.ts +100 -0
- package/dist/core/command-validator.d.ts.map +1 -0
- package/dist/core/command-validator.js +299 -0
- package/dist/core/command-validator.js.map +1 -0
- package/dist/core/config-store.d.ts +76 -0
- package/dist/core/config-store.d.ts.map +1 -0
- package/dist/core/config-store.js +148 -0
- package/dist/core/config-store.js.map +1 -0
- package/dist/core/directories-handler.d.ts +116 -0
- package/dist/core/directories-handler.d.ts.map +1 -0
- package/dist/core/directories-handler.js +199 -0
- package/dist/core/directories-handler.js.map +1 -0
- package/dist/core/docker-handler.d.ts +183 -0
- package/dist/core/docker-handler.d.ts.map +1 -0
- package/dist/core/docker-handler.js +515 -0
- package/dist/core/docker-handler.js.map +1 -0
- package/dist/core/encryption.d.ts +79 -0
- package/dist/core/encryption.d.ts.map +1 -0
- package/dist/core/encryption.js +111 -0
- package/dist/core/encryption.js.map +1 -0
- package/dist/core/env-handler.d.ts +128 -0
- package/dist/core/env-handler.d.ts.map +1 -0
- package/dist/core/env-handler.js +272 -0
- package/dist/core/env-handler.js.map +1 -0
- package/dist/core/git-sync.d.ts +88 -0
- package/dist/core/git-sync.d.ts.map +1 -0
- package/dist/core/git-sync.js +143 -0
- package/dist/core/git-sync.js.map +1 -0
- package/dist/core/key-store.d.ts +51 -0
- package/dist/core/key-store.d.ts.map +1 -0
- package/dist/core/key-store.js +108 -0
- package/dist/core/key-store.js.map +1 -0
- package/dist/core/log-sanitizer.d.ts +72 -0
- package/dist/core/log-sanitizer.d.ts.map +1 -0
- package/dist/core/log-sanitizer.js +202 -0
- package/dist/core/log-sanitizer.js.map +1 -0
- package/dist/core/path-validator.d.ts +37 -0
- package/dist/core/path-validator.d.ts.map +1 -0
- package/dist/core/path-validator.js +127 -0
- package/dist/core/path-validator.js.map +1 -0
- package/dist/core/recipients.d.ts +99 -0
- package/dist/core/recipients.d.ts.map +1 -0
- package/dist/core/recipients.js +206 -0
- package/dist/core/recipients.js.map +1 -0
- package/dist/core/services-handler.d.ts +113 -0
- package/dist/core/services-handler.d.ts.map +1 -0
- package/dist/core/services-handler.js +176 -0
- package/dist/core/services-handler.js.map +1 -0
- package/dist/core/state-manager.d.ts +96 -0
- package/dist/core/state-manager.d.ts.map +1 -0
- package/dist/core/state-manager.js +165 -0
- package/dist/core/state-manager.js.map +1 -0
- package/dist/core/transport.d.ts +28 -0
- package/dist/core/transport.d.ts.map +1 -0
- package/dist/core/transport.js +79 -0
- package/dist/core/transport.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/errors.d.ts +81 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +191 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/secure-memory.d.ts +65 -0
- package/dist/utils/secure-memory.d.ts.map +1 -0
- package/dist/utils/secure-memory.js +86 -0
- package/dist/utils/secure-memory.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ctx-sync dir` command group.
|
|
3
|
+
*
|
|
4
|
+
* Manages working directory state:
|
|
5
|
+
* - `dir visit <path>` — record a directory visit.
|
|
6
|
+
* - `dir pin <path>` — pin a directory.
|
|
7
|
+
* - `dir unpin <path>` — unpin a directory.
|
|
8
|
+
* - `dir list` — list recent and pinned directories.
|
|
9
|
+
* - `dir remove <path>` — remove a directory from the recent list.
|
|
10
|
+
*
|
|
11
|
+
* @module commands/dir
|
|
12
|
+
*/
|
|
13
|
+
import type { Command } from 'commander';
|
|
14
|
+
/**
|
|
15
|
+
* Execute `ctx-sync dir visit <path>`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function executeDirVisit(dirPath: string, noSync?: boolean): Promise<{
|
|
18
|
+
path: string;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Execute `ctx-sync dir pin <path>`.
|
|
22
|
+
*/
|
|
23
|
+
export declare function executeDirPin(dirPath: string, noSync?: boolean): Promise<{
|
|
24
|
+
path: string;
|
|
25
|
+
alreadyPinned: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
/**
|
|
28
|
+
* Execute `ctx-sync dir unpin <path>`.
|
|
29
|
+
*/
|
|
30
|
+
export declare function executeDirUnpin(dirPath: string, noSync?: boolean): Promise<{
|
|
31
|
+
path: string;
|
|
32
|
+
wasPinned: boolean;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Execute `ctx-sync dir remove <path>`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function executeDirRemove(dirPath: string, noSync?: boolean): Promise<{
|
|
38
|
+
path: string;
|
|
39
|
+
wasRemoved: boolean;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Execute `ctx-sync dir list`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function executeDirList(limit?: number): Promise<{
|
|
45
|
+
pinned: string[];
|
|
46
|
+
recent: Array<{
|
|
47
|
+
path: string;
|
|
48
|
+
frequency: number;
|
|
49
|
+
lastVisit: string;
|
|
50
|
+
}>;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* Register the `ctx-sync dir` command group on the given program.
|
|
54
|
+
*/
|
|
55
|
+
export declare function registerDirCommand(program: Command): void;
|
|
56
|
+
//# sourceMappingURL=dir.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir.d.ts","sourceRoot":"","sources":["../../src/commands/dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBzC;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,UAAQ,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB3B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,UAAQ,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAAC,CAkBnD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,MAAM,UAAQ,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAkB/C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,MAAM,UAAQ,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CAuBhD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,KAAK,SAAK,GACT,OAAO,CAAC;IACT,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE,CAAC,CAUD;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsFzD"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ctx-sync dir` command group.
|
|
3
|
+
*
|
|
4
|
+
* Manages working directory state:
|
|
5
|
+
* - `dir visit <path>` — record a directory visit.
|
|
6
|
+
* - `dir pin <path>` — pin a directory.
|
|
7
|
+
* - `dir unpin <path>` — unpin a directory.
|
|
8
|
+
* - `dir list` — list recent and pinned directories.
|
|
9
|
+
* - `dir remove <path>` — remove a directory from the recent list.
|
|
10
|
+
*
|
|
11
|
+
* @module commands/dir
|
|
12
|
+
*/
|
|
13
|
+
import { withErrorHandler } from '../utils/errors.js';
|
|
14
|
+
import { STATE_FILES } from '@ctx-sync/shared';
|
|
15
|
+
import { identityToRecipient } from 'age-encryption';
|
|
16
|
+
import { loadKey } from '../core/key-store.js';
|
|
17
|
+
import { commitState } from '../core/git-sync.js';
|
|
18
|
+
import { visitDirectory, pinDirectory, unpinDirectory, removeRecentDirectory, getTopDirectories, getPinnedDirectories, } from '../core/directories-handler.js';
|
|
19
|
+
import { getConfigDir, getSyncDir } from './init.js';
|
|
20
|
+
// ─── Core Logic ───────────────────────────────────────────────────────────
|
|
21
|
+
/**
|
|
22
|
+
* Execute `ctx-sync dir visit <path>`.
|
|
23
|
+
*/
|
|
24
|
+
export async function executeDirVisit(dirPath, noSync = false) {
|
|
25
|
+
const configDir = getConfigDir();
|
|
26
|
+
const syncDir = getSyncDir();
|
|
27
|
+
const privateKey = loadKey(configDir);
|
|
28
|
+
const publicKey = await identityToRecipient(privateKey);
|
|
29
|
+
await visitDirectory(syncDir, dirPath, publicKey, privateKey);
|
|
30
|
+
if (!noSync) {
|
|
31
|
+
await commitState(syncDir, [STATE_FILES.DIRECTORIES, STATE_FILES.MANIFEST], `dir: visit ${dirPath}`);
|
|
32
|
+
}
|
|
33
|
+
return { path: dirPath };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Execute `ctx-sync dir pin <path>`.
|
|
37
|
+
*/
|
|
38
|
+
export async function executeDirPin(dirPath, noSync = false) {
|
|
39
|
+
const configDir = getConfigDir();
|
|
40
|
+
const syncDir = getSyncDir();
|
|
41
|
+
const privateKey = loadKey(configDir);
|
|
42
|
+
const publicKey = await identityToRecipient(privateKey);
|
|
43
|
+
const pinned = await pinDirectory(syncDir, dirPath, publicKey, privateKey);
|
|
44
|
+
if (pinned && !noSync) {
|
|
45
|
+
await commitState(syncDir, [STATE_FILES.DIRECTORIES, STATE_FILES.MANIFEST], `dir: pin ${dirPath}`);
|
|
46
|
+
}
|
|
47
|
+
return { path: dirPath, alreadyPinned: !pinned };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Execute `ctx-sync dir unpin <path>`.
|
|
51
|
+
*/
|
|
52
|
+
export async function executeDirUnpin(dirPath, noSync = false) {
|
|
53
|
+
const configDir = getConfigDir();
|
|
54
|
+
const syncDir = getSyncDir();
|
|
55
|
+
const privateKey = loadKey(configDir);
|
|
56
|
+
const publicKey = await identityToRecipient(privateKey);
|
|
57
|
+
const unpinned = await unpinDirectory(syncDir, dirPath, publicKey, privateKey);
|
|
58
|
+
if (unpinned && !noSync) {
|
|
59
|
+
await commitState(syncDir, [STATE_FILES.DIRECTORIES, STATE_FILES.MANIFEST], `dir: unpin ${dirPath}`);
|
|
60
|
+
}
|
|
61
|
+
return { path: dirPath, wasPinned: unpinned };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Execute `ctx-sync dir remove <path>`.
|
|
65
|
+
*/
|
|
66
|
+
export async function executeDirRemove(dirPath, noSync = false) {
|
|
67
|
+
const configDir = getConfigDir();
|
|
68
|
+
const syncDir = getSyncDir();
|
|
69
|
+
const privateKey = loadKey(configDir);
|
|
70
|
+
const publicKey = await identityToRecipient(privateKey);
|
|
71
|
+
const removed = await removeRecentDirectory(syncDir, dirPath, publicKey, privateKey);
|
|
72
|
+
if (removed && !noSync) {
|
|
73
|
+
await commitState(syncDir, [STATE_FILES.DIRECTORIES, STATE_FILES.MANIFEST], `dir: remove ${dirPath}`);
|
|
74
|
+
}
|
|
75
|
+
return { path: dirPath, wasRemoved: removed };
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Execute `ctx-sync dir list`.
|
|
79
|
+
*/
|
|
80
|
+
export async function executeDirList(limit = 10) {
|
|
81
|
+
const configDir = getConfigDir();
|
|
82
|
+
const syncDir = getSyncDir();
|
|
83
|
+
const privateKey = loadKey(configDir);
|
|
84
|
+
const pinned = await getPinnedDirectories(syncDir, privateKey);
|
|
85
|
+
const recent = await getTopDirectories(syncDir, privateKey, limit);
|
|
86
|
+
return { pinned, recent };
|
|
87
|
+
}
|
|
88
|
+
// ─── Commander Registration ───────────────────────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* Register the `ctx-sync dir` command group on the given program.
|
|
91
|
+
*/
|
|
92
|
+
export function registerDirCommand(program) {
|
|
93
|
+
const dirCmd = program
|
|
94
|
+
.command('dir')
|
|
95
|
+
.description('Manage tracked working directories');
|
|
96
|
+
// ── dir visit ─────────────────────────────────────────────────────
|
|
97
|
+
dirCmd
|
|
98
|
+
.command('visit <path>')
|
|
99
|
+
.description('Record a directory visit')
|
|
100
|
+
.option('--no-sync', 'Skip committing to sync repo')
|
|
101
|
+
.action(withErrorHandler(async (dirPath, opts) => {
|
|
102
|
+
await executeDirVisit(dirPath, !opts.sync);
|
|
103
|
+
console.log(`✓ Recorded visit to ${dirPath}`);
|
|
104
|
+
}));
|
|
105
|
+
// ── dir pin ───────────────────────────────────────────────────────
|
|
106
|
+
dirCmd
|
|
107
|
+
.command('pin <path>')
|
|
108
|
+
.description('Pin a directory')
|
|
109
|
+
.option('--no-sync', 'Skip committing to sync repo')
|
|
110
|
+
.action(withErrorHandler(async (dirPath, opts) => {
|
|
111
|
+
const result = await executeDirPin(dirPath, !opts.sync);
|
|
112
|
+
if (result.alreadyPinned) {
|
|
113
|
+
console.log(`Directory already pinned: ${result.path}`);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.log(`✓ Pinned ${result.path}`);
|
|
117
|
+
}
|
|
118
|
+
}));
|
|
119
|
+
// ── dir unpin ─────────────────────────────────────────────────────
|
|
120
|
+
dirCmd
|
|
121
|
+
.command('unpin <path>')
|
|
122
|
+
.description('Unpin a directory')
|
|
123
|
+
.option('--no-sync', 'Skip committing to sync repo')
|
|
124
|
+
.action(withErrorHandler(async (dirPath, opts) => {
|
|
125
|
+
const result = await executeDirUnpin(dirPath, !opts.sync);
|
|
126
|
+
if (result.wasPinned) {
|
|
127
|
+
console.log(`✓ Unpinned ${result.path}`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
console.log(`Directory was not pinned: ${result.path}`);
|
|
131
|
+
}
|
|
132
|
+
}));
|
|
133
|
+
// ── dir remove ────────────────────────────────────────────────────
|
|
134
|
+
dirCmd
|
|
135
|
+
.command('remove <path>')
|
|
136
|
+
.description('Remove a directory from the recent list')
|
|
137
|
+
.option('--no-sync', 'Skip committing to sync repo')
|
|
138
|
+
.action(withErrorHandler(async (dirPath, opts) => {
|
|
139
|
+
const result = await executeDirRemove(dirPath, !opts.sync);
|
|
140
|
+
if (result.wasRemoved) {
|
|
141
|
+
console.log(`✓ Removed ${result.path} from recent directories`);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
console.log(`Directory not found in recent list: ${result.path}`);
|
|
145
|
+
}
|
|
146
|
+
}));
|
|
147
|
+
// ── dir list ──────────────────────────────────────────────────────
|
|
148
|
+
dirCmd
|
|
149
|
+
.command('list')
|
|
150
|
+
.description('List recent and pinned directories')
|
|
151
|
+
.option('-l, --limit <n>', 'Number of recent directories to show', '10')
|
|
152
|
+
.action(withErrorHandler(async (opts) => {
|
|
153
|
+
const result = await executeDirList(parseInt(opts.limit, 10));
|
|
154
|
+
if (result.pinned.length === 0 && result.recent.length === 0) {
|
|
155
|
+
console.log('No directories tracked.');
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (result.pinned.length > 0) {
|
|
159
|
+
console.log('\n📌 Pinned directories:');
|
|
160
|
+
for (const p of result.pinned) {
|
|
161
|
+
console.log(` ${p}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
if (result.recent.length > 0) {
|
|
165
|
+
console.log('\n📁 Recent directories:');
|
|
166
|
+
for (const d of result.recent) {
|
|
167
|
+
console.log(` ${d.path} (visited ${String(d.frequency)}x, last: ${d.lastVisit})`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}));
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir.js","sourceRoot":"","sources":["../../src/commands/dir.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAErD,6EAA6E;AAE7E;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,MAAM,GAAG,KAAK;IAEd,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAExD,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAE9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,WAAW,CACf,OAAO,EACP,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC/C,cAAc,OAAO,EAAE,CACxB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,MAAM,GAAG,KAAK;IAEd,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAE3E,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,WAAW,CACf,OAAO,EACP,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC/C,YAAY,OAAO,EAAE,CACtB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,MAAM,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,MAAM,GAAG,KAAK;IAEd,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAExD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAE/E,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,WAAW,CACf,OAAO,EACP,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC/C,cAAc,OAAO,EAAE,CACxB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,MAAM,GAAG,KAAK;IAEd,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CACzC,OAAO,EACP,OAAO,EACP,SAAS,EACT,UAAU,CACX,CAAC;IAEF,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,WAAW,CACf,OAAO,EACP,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC/C,eAAe,OAAO,EAAE,CACzB,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAK,GAAG,EAAE;IAKV,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,6EAA6E;AAE7E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,MAAM,GAAG,OAAO;SACnB,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,oCAAoC,CAAC,CAAC;IAErD,qEAAqE;IACrE,MAAM;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAe,EAAE,IAAuB,EAAE,EAAE;QAC1E,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC,CAAC;IAEN,qEAAqE;IACrE,MAAM;SACH,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAe,EAAE,IAAuB,EAAE,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;IAEN,qEAAqE;IACrE,MAAM;SACH,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAe,EAAE,IAAuB,EAAE,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;IAEN,qEAAqE;IACrE,MAAM;SACH,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,yCAAyC,CAAC;SACtD,MAAM,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACnD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAe,EAAE,IAAuB,EAAE,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,0BAA0B,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;IAEN,qEAAqE;IACrE,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,iBAAiB,EAAE,sCAAsC,EAAE,IAAI,CAAC;SACvE,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAuB,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAE9D,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YACxC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,CAAC,IAAI,aAAa,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,SAAS,GAAG,CACtE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ctx-sync docker` command group.
|
|
3
|
+
*
|
|
4
|
+
* Manages Docker container state for tracked projects:
|
|
5
|
+
* - `docker track <project>` — detect and save Docker Compose state.
|
|
6
|
+
* - `docker start <project>` — show Docker commands for approval, then execute.
|
|
7
|
+
* - `docker stop <project>` — stop tracked services.
|
|
8
|
+
* - `docker status [project]` — show running / tracked services.
|
|
9
|
+
*
|
|
10
|
+
* **Security:** `docker start` commands go through the command validator.
|
|
11
|
+
* All start commands require explicit user confirmation — there is no
|
|
12
|
+
* `--yes` or `--no-confirm` bypass.
|
|
13
|
+
*
|
|
14
|
+
* @module commands/docker
|
|
15
|
+
*/
|
|
16
|
+
import type { Command } from 'commander';
|
|
17
|
+
import type { DockerState } from '@ctx-sync/shared';
|
|
18
|
+
import type { PendingCommand, ApprovalResult } from '../core/command-validator.js';
|
|
19
|
+
/** Options for docker track */
|
|
20
|
+
export interface DockerTrackOptions {
|
|
21
|
+
/** Path to the project directory (default: CWD) */
|
|
22
|
+
path?: string;
|
|
23
|
+
/** Project name override */
|
|
24
|
+
project?: string;
|
|
25
|
+
/** Skip committing to sync repo */
|
|
26
|
+
noSync?: boolean;
|
|
27
|
+
}
|
|
28
|
+
/** Result of docker track */
|
|
29
|
+
export interface DockerTrackResult {
|
|
30
|
+
/** The project name */
|
|
31
|
+
projectName: string;
|
|
32
|
+
/** Number of services detected */
|
|
33
|
+
serviceCount: number;
|
|
34
|
+
/** Names of detected services */
|
|
35
|
+
serviceNames: string[];
|
|
36
|
+
/** Compose file path */
|
|
37
|
+
composeFile: string;
|
|
38
|
+
/** Networks defined */
|
|
39
|
+
networks: string[];
|
|
40
|
+
}
|
|
41
|
+
/** Options for docker start */
|
|
42
|
+
export interface DockerStartOptions {
|
|
43
|
+
/** Non-interactive mode: show commands but skip execution */
|
|
44
|
+
noInteractive?: boolean;
|
|
45
|
+
/** Override prompt function (for testing) */
|
|
46
|
+
promptFn?: (commands: PendingCommand[]) => Promise<'all' | 'none' | 'select'>;
|
|
47
|
+
/** Override per-command select function (for testing) */
|
|
48
|
+
selectFn?: (cmd: PendingCommand, index: number) => Promise<boolean>;
|
|
49
|
+
}
|
|
50
|
+
/** Result of docker start */
|
|
51
|
+
export interface DockerStartResult {
|
|
52
|
+
/** The project name */
|
|
53
|
+
projectName: string;
|
|
54
|
+
/** Commands that were presented for approval */
|
|
55
|
+
commandsPresented: PendingCommand[];
|
|
56
|
+
/** Approval result */
|
|
57
|
+
approval: ApprovalResult;
|
|
58
|
+
/** Commands that were executed successfully */
|
|
59
|
+
executedCommands: string[];
|
|
60
|
+
/** Commands that failed */
|
|
61
|
+
failedCommands: Array<{
|
|
62
|
+
command: string;
|
|
63
|
+
error: string;
|
|
64
|
+
}>;
|
|
65
|
+
}
|
|
66
|
+
/** Result of docker stop */
|
|
67
|
+
export interface DockerStopResult {
|
|
68
|
+
/** The project name */
|
|
69
|
+
projectName: string;
|
|
70
|
+
/** Whether Docker Compose was found */
|
|
71
|
+
composeFound: boolean;
|
|
72
|
+
/** Whether the stop command succeeded */
|
|
73
|
+
stopped: boolean;
|
|
74
|
+
/** Error message if stop failed */
|
|
75
|
+
error?: string;
|
|
76
|
+
}
|
|
77
|
+
/** Docker service status info */
|
|
78
|
+
export interface DockerServiceStatus {
|
|
79
|
+
/** Service name */
|
|
80
|
+
name: string;
|
|
81
|
+
/** Docker image */
|
|
82
|
+
image: string;
|
|
83
|
+
/** Port */
|
|
84
|
+
port: number;
|
|
85
|
+
/** Whether auto-start is enabled */
|
|
86
|
+
autoStart: boolean;
|
|
87
|
+
/** Compose file path */
|
|
88
|
+
composeFile: string;
|
|
89
|
+
}
|
|
90
|
+
/** Result of docker status */
|
|
91
|
+
export interface DockerStatusResult {
|
|
92
|
+
/** All tracked projects and their services */
|
|
93
|
+
projects: Array<{
|
|
94
|
+
projectName: string;
|
|
95
|
+
composeFile: string;
|
|
96
|
+
services: DockerServiceStatus[];
|
|
97
|
+
}>;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Execute Docker track: detect and save Docker Compose state.
|
|
101
|
+
*
|
|
102
|
+
* @param options - Track options.
|
|
103
|
+
* @returns Track result.
|
|
104
|
+
*/
|
|
105
|
+
export declare function executeDockerTrack(options?: DockerTrackOptions): Promise<DockerTrackResult>;
|
|
106
|
+
/**
|
|
107
|
+
* Build pending commands from tracked Docker services.
|
|
108
|
+
*
|
|
109
|
+
* @param projectName - The project name.
|
|
110
|
+
* @param projectDocker - The Docker state for the project.
|
|
111
|
+
* @returns List of pending commands for approval.
|
|
112
|
+
*/
|
|
113
|
+
export declare function buildDockerStartCommands(projectName: string, projectDocker: DockerState[string]): PendingCommand[];
|
|
114
|
+
/**
|
|
115
|
+
* Execute Docker start: show Docker commands for approval and execute.
|
|
116
|
+
*
|
|
117
|
+
* @param projectName - The project name.
|
|
118
|
+
* @param options - Start options.
|
|
119
|
+
* @returns Start result.
|
|
120
|
+
*/
|
|
121
|
+
export declare function executeDockerStart(projectName: string, options?: DockerStartOptions): Promise<DockerStartResult>;
|
|
122
|
+
/**
|
|
123
|
+
* Execute Docker stop: stop all tracked services for a project.
|
|
124
|
+
*
|
|
125
|
+
* @param projectName - The project name.
|
|
126
|
+
* @returns Stop result.
|
|
127
|
+
*/
|
|
128
|
+
export declare function executeDockerStop(projectName: string): Promise<DockerStopResult>;
|
|
129
|
+
/**
|
|
130
|
+
* Execute Docker status: show all tracked Docker projects and services.
|
|
131
|
+
*
|
|
132
|
+
* @param projectFilter - Optional project name to filter.
|
|
133
|
+
* @returns Status result.
|
|
134
|
+
*/
|
|
135
|
+
export declare function executeDockerStatus(projectFilter?: string): Promise<DockerStatusResult>;
|
|
136
|
+
/**
|
|
137
|
+
* Register the `docker` command group on the given Commander program.
|
|
138
|
+
*/
|
|
139
|
+
export declare function registerDockerCommand(program: Command): void;
|
|
140
|
+
//# sourceMappingURL=docker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.d.ts","sourceRoot":"","sources":["../../src/commands/docker.ts"],"names":[],"mappings":"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"}
|