@claudetools/cli 0.13.12 → 0.13.15
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/__tests__/factories.d.ts +173 -0
- package/dist/__tests__/factories.d.ts.map +1 -0
- package/dist/__tests__/factories.js +150 -0
- package/dist/__tests__/factories.js.map +1 -0
- package/dist/__tests__/helpers.d.ts +36 -0
- package/dist/__tests__/helpers.d.ts.map +1 -0
- package/dist/__tests__/helpers.js +52 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/analytics/index.d.ts +14 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +259 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics/session.d.ts +17 -0
- package/dist/analytics/session.d.ts.map +1 -0
- package/dist/analytics/session.js +130 -0
- package/dist/analytics/session.js.map +1 -0
- package/dist/analytics/token-tracker.d.ts +48 -0
- package/dist/analytics/token-tracker.d.ts.map +1 -0
- package/dist/analytics/token-tracker.js +269 -0
- package/dist/analytics/token-tracker.js.map +1 -0
- package/dist/analytics/tracker.d.ts +33 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +210 -0
- package/dist/analytics/tracker.js.map +1 -0
- package/dist/api-keys/index.d.ts +15 -0
- package/dist/api-keys/index.d.ts.map +1 -0
- package/dist/api-keys/index.js +228 -0
- package/dist/api-keys/index.js.map +1 -0
- package/dist/auth/config.d.ts +15 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +67 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +299 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/keychain.d.ts +21 -0
- package/dist/auth/keychain.d.ts.map +1 -0
- package/dist/auth/keychain.js +256 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/billing/index.d.ts +7 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +233 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/cli.js +291 -43
- package/dist/cli.js.map +1 -1
- package/dist/commands/hook.d.ts +12 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +190 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/keys.d.ts +4 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +43 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/mcp.d.ts +4 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +43 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/project.d.ts +4 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +68 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/skill.d.ts +4 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +37 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/stacks.d.ts +4 -0
- package/dist/commands/stacks.d.ts.map +1 -0
- package/dist/commands/stacks.js +103 -0
- package/dist/commands/stacks.js.map +1 -0
- package/dist/commands/stats.d.ts +4 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +6 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/sync.d.ts +4 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +60 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/update.d.ts +4 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +63 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/daemon/client.d.ts +107 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +250 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/health.d.ts +38 -0
- package/dist/daemon/health.d.ts.map +1 -0
- package/dist/daemon/health.js +212 -0
- package/dist/daemon/health.js.map +1 -0
- package/dist/daemon/index.d.ts +34 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +197 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/protocol.d.ts +144 -0
- package/dist/daemon/protocol.d.ts.map +1 -0
- package/dist/daemon/protocol.js +5 -0
- package/dist/daemon/protocol.js.map +1 -0
- package/dist/gamification/index.d.ts +13 -0
- package/dist/gamification/index.d.ts.map +1 -0
- package/dist/gamification/index.js +120 -0
- package/dist/gamification/index.js.map +1 -0
- package/dist/gamification/types.d.ts +34 -0
- package/dist/gamification/types.d.ts.map +1 -0
- package/dist/gamification/types.js +5 -0
- package/dist/gamification/types.js.map +1 -0
- package/dist/hooks/index.d.ts +65 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +403 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/lib/api.d.ts +29 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +213 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/browser.d.ts +6 -0
- package/dist/lib/browser.d.ts.map +1 -0
- package/dist/lib/browser.js +14 -0
- package/dist/lib/browser.js.map +1 -0
- package/dist/lib/channel-config.d.ts +10 -0
- package/dist/lib/channel-config.d.ts.map +1 -0
- package/dist/lib/channel-config.js +48 -0
- package/dist/lib/channel-config.js.map +1 -0
- package/dist/lib/command-runner.d.ts +16 -0
- package/dist/lib/command-runner.d.ts.map +1 -0
- package/dist/lib/command-runner.js +59 -0
- package/dist/lib/command-runner.js.map +1 -0
- package/dist/lib/command-utils.d.ts +22 -0
- package/dist/lib/command-utils.d.ts.map +1 -0
- package/dist/lib/command-utils.js +88 -0
- package/dist/lib/command-utils.js.map +1 -0
- package/dist/lib/error-handler.d.ts +13 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +70 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/errors.d.ts +35 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +70 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/exit.d.ts +10 -0
- package/dist/lib/exit.d.ts.map +1 -0
- package/dist/lib/exit.js +21 -0
- package/dist/lib/exit.js.map +1 -0
- package/dist/lib/formatters.d.ts +65 -0
- package/dist/lib/formatters.d.ts.map +1 -0
- package/dist/lib/formatters.js +180 -0
- package/dist/lib/formatters.js.map +1 -0
- package/dist/lib/hybrid-data.d.ts +47 -0
- package/dist/lib/hybrid-data.d.ts.map +1 -0
- package/dist/lib/hybrid-data.js +326 -0
- package/dist/lib/hybrid-data.js.map +1 -0
- package/dist/lib/local-store.d.ts +113 -0
- package/dist/lib/local-store.d.ts.map +1 -0
- package/dist/lib/local-store.js +220 -0
- package/dist/lib/local-store.js.map +1 -0
- package/dist/lib/machine-id.d.ts +8 -0
- package/dist/lib/machine-id.d.ts.map +1 -0
- package/dist/lib/machine-id.js +39 -0
- package/dist/lib/machine-id.js.map +1 -0
- package/dist/lib/network.d.ts +15 -0
- package/dist/lib/network.d.ts.map +1 -0
- package/dist/lib/network.js +46 -0
- package/dist/lib/network.js.map +1 -0
- package/dist/lib/theme.d.ts +77 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +137 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/tool-availability.d.ts +13 -0
- package/dist/lib/tool-availability.d.ts.map +1 -0
- package/dist/lib/tool-availability.js +48 -0
- package/dist/lib/tool-availability.js.map +1 -0
- package/dist/lib/update-checker.d.ts +21 -0
- package/dist/lib/update-checker.d.ts.map +1 -0
- package/dist/lib/update-checker.js +110 -0
- package/dist/lib/update-checker.js.map +1 -0
- package/dist/lib/validation.d.ts +30 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +82 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/validators.d.ts +18 -0
- package/dist/lib/validators.d.ts.map +1 -0
- package/dist/lib/validators.js +30 -0
- package/dist/lib/validators.js.map +1 -0
- package/dist/marketplace/api.d.ts +24 -0
- package/dist/marketplace/api.d.ts.map +1 -0
- package/dist/marketplace/api.js +92 -0
- package/dist/marketplace/api.js.map +1 -0
- package/dist/marketplace/index.d.ts +13 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +155 -0
- package/dist/marketplace/index.js.map +1 -0
- package/dist/marketplace/installer.d.ts +18 -0
- package/dist/marketplace/installer.d.ts.map +1 -0
- package/dist/marketplace/installer.js +184 -0
- package/dist/marketplace/installer.js.map +1 -0
- package/dist/mcp/api.d.ts +93 -0
- package/dist/mcp/api.d.ts.map +1 -0
- package/dist/mcp/api.js +106 -0
- package/dist/mcp/api.js.map +1 -0
- package/dist/mcp/config.d.ts +72 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +156 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/index.d.ts +54 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +381 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/prompt.clean.d.ts +25 -0
- package/dist/mcp/prompt.clean.d.ts.map +1 -0
- package/dist/mcp/prompt.clean.js +206 -0
- package/dist/mcp/prompt.clean.js.map +1 -0
- package/dist/mcp/prompt.d.ts +52 -0
- package/dist/mcp/prompt.d.ts.map +1 -0
- package/dist/mcp/prompt.js +210 -0
- package/dist/mcp/prompt.js.map +1 -0
- package/dist/mcp/secrets.clean.d.ts +18 -0
- package/dist/mcp/secrets.clean.d.ts.map +1 -0
- package/dist/mcp/secrets.clean.js +357 -0
- package/dist/mcp/secrets.clean.js.map +1 -0
- package/dist/mcp/secrets.d.ts +46 -0
- package/dist/mcp/secrets.d.ts.map +1 -0
- package/dist/mcp/secrets.js +339 -0
- package/dist/mcp/secrets.js.map +1 -0
- package/dist/memory/index.d.ts +14 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +98 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/onboard/agents-md-builder.d.ts.map +1 -1
- package/dist/onboard/agents-md-builder.js +45 -0
- package/dist/onboard/agents-md-builder.js.map +1 -1
- package/dist/onboard/claude-inference.d.ts.map +1 -1
- package/dist/onboard/claude-inference.js +31 -5
- package/dist/onboard/claude-inference.js.map +1 -1
- package/dist/onboard/context7-fetcher.d.ts +1 -1
- package/dist/onboard/context7-fetcher.d.ts.map +1 -1
- package/dist/onboard/context7-fetcher.js +50 -16
- package/dist/onboard/context7-fetcher.js.map +1 -1
- package/dist/onboard/docs-builder.d.ts.map +1 -1
- package/dist/onboard/docs-builder.js +523 -50
- package/dist/onboard/docs-builder.js.map +1 -1
- package/dist/onboard/index.d.ts.map +1 -1
- package/dist/onboard/index.js +74 -25
- package/dist/onboard/index.js.map +1 -1
- package/dist/onboard/stack-detector.d.ts.map +1 -1
- package/dist/onboard/stack-detector.js +5 -55
- package/dist/onboard/stack-detector.js.map +1 -1
- package/dist/project/constants.d.ts +21 -0
- package/dist/project/constants.d.ts.map +1 -0
- package/dist/project/constants.js +21 -0
- package/dist/project/constants.js.map +1 -0
- package/dist/project/format.d.ts +16 -0
- package/dist/project/format.d.ts.map +1 -0
- package/dist/project/format.js +40 -0
- package/dist/project/format.js.map +1 -0
- package/dist/project/git.d.ts +28 -0
- package/dist/project/git.d.ts.map +1 -0
- package/dist/project/git.js +93 -0
- package/dist/project/git.js.map +1 -0
- package/dist/project/index.d.ts +36 -0
- package/dist/project/index.d.ts.map +1 -0
- package/dist/project/index.js +272 -0
- package/dist/project/index.js.map +1 -0
- package/dist/project/mapper.d.ts +27 -0
- package/dist/project/mapper.d.ts.map +1 -0
- package/dist/project/mapper.js +64 -0
- package/dist/project/mapper.js.map +1 -0
- package/dist/project/storage.d.ts +71 -0
- package/dist/project/storage.d.ts.map +1 -0
- package/dist/project/storage.js +274 -0
- package/dist/project/storage.js.map +1 -0
- package/dist/project/sync-bridge.d.ts +33 -0
- package/dist/project/sync-bridge.d.ts.map +1 -0
- package/dist/project/sync-bridge.js +155 -0
- package/dist/project/sync-bridge.js.map +1 -0
- package/dist/project/types.d.ts +107 -0
- package/dist/project/types.d.ts.map +1 -0
- package/dist/project/types.js +77 -0
- package/dist/project/types.js.map +1 -0
- package/dist/publish/index.d.ts +4 -0
- package/dist/publish/index.d.ts.map +1 -0
- package/dist/publish/index.js +92 -0
- package/dist/publish/index.js.map +1 -0
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +29 -10
- package/dist/setup.js.map +1 -1
- package/dist/skills/index.d.ts +51 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +509 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/stacks/check.d.ts +2 -0
- package/dist/stacks/check.d.ts.map +1 -0
- package/dist/stacks/check.js +144 -0
- package/dist/stacks/check.js.map +1 -0
- package/dist/stacks/diff.d.ts +11 -0
- package/dist/stacks/diff.d.ts.map +1 -0
- package/dist/stacks/diff.js +123 -0
- package/dist/stacks/diff.js.map +1 -0
- package/dist/stacks/index.d.ts +17 -0
- package/dist/stacks/index.d.ts.map +1 -0
- package/dist/stacks/index.js +525 -0
- package/dist/stacks/index.js.map +1 -0
- package/dist/stacks/index.refactored.d.ts.map +1 -0
- package/dist/stacks/index.refactored.js.map +1 -0
- package/dist/stacks/io.d.ts +11 -0
- package/dist/stacks/io.d.ts.map +1 -0
- package/dist/stacks/io.js +179 -0
- package/dist/stacks/io.js.map +1 -0
- package/dist/stacks/rollback.d.ts +5 -0
- package/dist/stacks/rollback.d.ts.map +1 -0
- package/dist/stacks/rollback.js +162 -0
- package/dist/stacks/rollback.js.map +1 -0
- package/dist/stacks/types.d.ts +70 -0
- package/dist/stacks/types.d.ts.map +1 -0
- package/dist/stacks/types.js +6 -0
- package/dist/stacks/types.js.map +1 -0
- package/dist/stacks/utils.d.ts +9 -0
- package/dist/stacks/utils.d.ts.map +1 -0
- package/dist/stacks/utils.js +11 -0
- package/dist/stacks/utils.js.map +1 -0
- package/dist/start/index.d.ts +23 -0
- package/dist/start/index.d.ts.map +1 -0
- package/dist/start/index.js +386 -0
- package/dist/start/index.js.map +1 -0
- package/dist/sync/index.d.ts +49 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +207 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync-engine/__tests__/test-helpers.d.ts +14 -0
- package/dist/sync-engine/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/sync-engine/__tests__/test-helpers.js +73 -0
- package/dist/sync-engine/__tests__/test-helpers.js.map +1 -0
- package/dist/sync-engine/client.d.ts +128 -0
- package/dist/sync-engine/client.d.ts.map +1 -0
- package/dist/sync-engine/client.js +289 -0
- package/dist/sync-engine/client.js.map +1 -0
- package/dist/sync-engine/health.d.ts +38 -0
- package/dist/sync-engine/health.d.ts.map +1 -0
- package/dist/sync-engine/health.js +259 -0
- package/dist/sync-engine/health.js.map +1 -0
- package/dist/sync-engine/index.d.ts +34 -0
- package/dist/sync-engine/index.d.ts.map +1 -0
- package/dist/sync-engine/index.js +197 -0
- package/dist/sync-engine/index.js.map +1 -0
- package/dist/sync-engine/protocol.d.ts +153 -0
- package/dist/sync-engine/protocol.d.ts.map +1 -0
- package/dist/sync-engine/protocol.js +5 -0
- package/dist/sync-engine/protocol.js.map +1 -0
- package/dist/tasks/index.d.ts +14 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +109 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/team/index.d.ts +12 -0
- package/dist/team/index.d.ts.map +1 -0
- package/dist/team/index.js +151 -0
- package/dist/team/index.js.map +1 -0
- package/dist/updater.d.ts +5 -5
- package/dist/updater.d.ts.map +1 -1
- package/dist/updater.js +24 -88
- package/dist/updater.js.map +1 -1
- package/dist/usage/index.d.ts +10 -0
- package/dist/usage/index.d.ts.map +1 -0
- package/dist/usage/index.js +104 -0
- package/dist/usage/index.js.map +1 -0
- package/dist/webhooks/index.d.ts +7 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +81 -0
- package/dist/webhooks/index.js.map +1 -0
- package/package.json +26 -15
- package/scripts/postinstall.js +282 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Utilities
|
|
3
|
+
* Detect git remote URL for cross-machine project merging
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Check if a directory is a git repository
|
|
7
|
+
*/
|
|
8
|
+
export declare function isGitRepository(path: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Get the origin remote URL for a git repository
|
|
11
|
+
* Returns null if not a git repo or no origin configured
|
|
12
|
+
*/
|
|
13
|
+
export declare function getGitRemoteUrl(path: string): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Get the repository name from a git remote URL
|
|
16
|
+
* Handles HTTPS and SSH URLs
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRepoNameFromUrl(url: string): string | null;
|
|
19
|
+
/**
|
|
20
|
+
* Get the default branch for a git repository by inspecting origin/HEAD.
|
|
21
|
+
* Returns 'main' if the path is not provided or the branch cannot be determined.
|
|
22
|
+
*/
|
|
23
|
+
export declare function getDefaultBranch(projectPath?: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Suggest a project name from path or git remote
|
|
26
|
+
*/
|
|
27
|
+
export declare function suggestProjectName(path: string): string;
|
|
28
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/project/git.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiB3D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc7D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAa7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiBvD"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Utilities
|
|
3
|
+
* Detect git remote URL for cross-machine project merging
|
|
4
|
+
*/
|
|
5
|
+
import { execSync, execFileSync } from 'node:child_process';
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
/**
|
|
9
|
+
* Check if a directory is a git repository
|
|
10
|
+
*/
|
|
11
|
+
export function isGitRepository(path) {
|
|
12
|
+
return existsSync(join(path, '.git'));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Get the origin remote URL for a git repository
|
|
16
|
+
* Returns null if not a git repo or no origin configured
|
|
17
|
+
*/
|
|
18
|
+
export function getGitRemoteUrl(path) {
|
|
19
|
+
if (!isGitRepository(path)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const result = execSync('git config --get remote.origin.url', {
|
|
24
|
+
cwd: path,
|
|
25
|
+
encoding: 'utf-8',
|
|
26
|
+
timeout: 5000,
|
|
27
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
28
|
+
});
|
|
29
|
+
return result.trim() || null;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get the repository name from a git remote URL
|
|
37
|
+
* Handles HTTPS and SSH URLs
|
|
38
|
+
*/
|
|
39
|
+
export function getRepoNameFromUrl(url) {
|
|
40
|
+
// SSH format: git@github.com:owner/repo.git
|
|
41
|
+
const sshMatch = url.match(/git@[^:]+:([^/]+\/[^/]+?)(?:\.git)?$/);
|
|
42
|
+
if (sshMatch && sshMatch[1]) {
|
|
43
|
+
return sshMatch[1];
|
|
44
|
+
}
|
|
45
|
+
// HTTPS format: https://github.com/owner/repo.git
|
|
46
|
+
const httpsMatch = url.match(/https?:\/\/[^/]+\/([^/]+\/[^/]+?)(?:\.git)?$/);
|
|
47
|
+
if (httpsMatch && httpsMatch[1]) {
|
|
48
|
+
return httpsMatch[1];
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the default branch for a git repository by inspecting origin/HEAD.
|
|
54
|
+
* Returns 'main' if the path is not provided or the branch cannot be determined.
|
|
55
|
+
*/
|
|
56
|
+
export function getDefaultBranch(projectPath) {
|
|
57
|
+
if (!projectPath)
|
|
58
|
+
return 'main';
|
|
59
|
+
try {
|
|
60
|
+
const branchRef = execFileSync('git', ['symbolic-ref', 'refs/remotes/origin/HEAD'], {
|
|
61
|
+
cwd: projectPath,
|
|
62
|
+
encoding: 'utf-8',
|
|
63
|
+
timeout: 3000,
|
|
64
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
65
|
+
}).trim();
|
|
66
|
+
return branchRef.replace('refs/remotes/origin/', '');
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return 'main';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Suggest a project name from path or git remote
|
|
74
|
+
*/
|
|
75
|
+
export function suggestProjectName(path) {
|
|
76
|
+
// Try to get name from git remote
|
|
77
|
+
const remoteUrl = getGitRemoteUrl(path);
|
|
78
|
+
if (remoteUrl) {
|
|
79
|
+
const repoName = getRepoNameFromUrl(remoteUrl);
|
|
80
|
+
if (repoName) {
|
|
81
|
+
// Return just the repo part (not owner/repo)
|
|
82
|
+
const parts = repoName.split('/');
|
|
83
|
+
const lastPart = parts[parts.length - 1];
|
|
84
|
+
if (lastPart)
|
|
85
|
+
return lastPart;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Fall back to directory name
|
|
89
|
+
const segments = path.split(/[/\\]/);
|
|
90
|
+
const lastSegment = segments[segments.length - 1];
|
|
91
|
+
return lastSegment ?? 'Unknown';
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/project/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Commands
|
|
3
|
+
* CLI commands for managing project registration
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* List all registered projects
|
|
7
|
+
*/
|
|
8
|
+
export declare function runProjectList(options?: {
|
|
9
|
+
team?: string;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Show details for a specific project
|
|
13
|
+
*/
|
|
14
|
+
export declare function runProjectShow(identifier: string): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Register a new project
|
|
17
|
+
*/
|
|
18
|
+
export declare function runProjectAdd(pathArg?: string, options?: {
|
|
19
|
+
name?: string;
|
|
20
|
+
description?: string;
|
|
21
|
+
team?: string;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Update a project's metadata
|
|
25
|
+
*/
|
|
26
|
+
export declare function runProjectUpdate(identifier: string, options?: {
|
|
27
|
+
name?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
team?: string;
|
|
30
|
+
visibility?: 'personal' | 'team';
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Unregister a project
|
|
34
|
+
*/
|
|
35
|
+
export declare function runProjectRemove(identifier: string): Promise<void>;
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/project/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyF/E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDtE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACA,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAClC,GACA,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BxE"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Commands
|
|
3
|
+
* CLI commands for managing project registration
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync } from 'node:fs';
|
|
6
|
+
import { resolve } from 'node:path';
|
|
7
|
+
import { isLoggedIn, loadConfig } from '../auth/config.js';
|
|
8
|
+
import { createProject } from './types.js';
|
|
9
|
+
import { getActiveProjects, findProject, addProject, updateProject, removeProject, } from './storage.js';
|
|
10
|
+
import { getGitRemoteUrl, suggestProjectName } from './git.js';
|
|
11
|
+
import { formatRelativeTime, formatCost, formatTableCell } from './format.js';
|
|
12
|
+
import { PROJECT_QUOTA } from './constants.js';
|
|
13
|
+
import { pushProjectToEngine, deleteProjectFromEngine, pullProjectsFromEngine, mergeCloudProjects, isSyncAvailable, } from './sync-bridge.js';
|
|
14
|
+
/**
|
|
15
|
+
* Get project quota limit based on tier
|
|
16
|
+
*/
|
|
17
|
+
function getQuotaLimit(tier) {
|
|
18
|
+
return PROJECT_QUOTA[tier] ?? PROJECT_QUOTA.free;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* List all registered projects
|
|
22
|
+
*/
|
|
23
|
+
export async function runProjectList(options) {
|
|
24
|
+
// Best-effort cloud sync before listing
|
|
25
|
+
try {
|
|
26
|
+
if (await isSyncAvailable()) {
|
|
27
|
+
const cloudProjects = await pullProjectsFromEngine();
|
|
28
|
+
await mergeCloudProjects(cloudProjects);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// Sync failure should not block local listing
|
|
33
|
+
}
|
|
34
|
+
const projects = getActiveProjects();
|
|
35
|
+
if (projects.length === 0) {
|
|
36
|
+
console.log();
|
|
37
|
+
console.log(' No projects registered.');
|
|
38
|
+
console.log(' Register one with: claudetools project add [path]');
|
|
39
|
+
console.log();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
// Filter by team if specified
|
|
43
|
+
let filtered = projects;
|
|
44
|
+
if (options?.team) {
|
|
45
|
+
filtered = projects.filter((p) => p.teamId === options.team);
|
|
46
|
+
if (filtered.length === 0) {
|
|
47
|
+
console.log();
|
|
48
|
+
console.log(` No projects found for team: ${options.team}`);
|
|
49
|
+
console.log();
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Group by team
|
|
54
|
+
const personal = filtered.filter((p) => !p.teamId);
|
|
55
|
+
const byTeam = filtered.reduce((acc, p) => {
|
|
56
|
+
if (p.teamId) {
|
|
57
|
+
const teamProjects = acc[p.teamId] ?? [];
|
|
58
|
+
teamProjects.push(p);
|
|
59
|
+
acc[p.teamId] = teamProjects;
|
|
60
|
+
}
|
|
61
|
+
return acc;
|
|
62
|
+
}, {});
|
|
63
|
+
// Get quota info if logged in
|
|
64
|
+
const config = loadConfig();
|
|
65
|
+
const quotaInfo = (await isLoggedIn())
|
|
66
|
+
? ` Quota: ${projects.length}/${getQuotaLimit(config.tier ?? 'free')}`
|
|
67
|
+
: '';
|
|
68
|
+
console.log();
|
|
69
|
+
console.log(` Projects (${projects.length})${quotaInfo.padStart(50)}`);
|
|
70
|
+
console.log();
|
|
71
|
+
// Table header
|
|
72
|
+
console.log(' NAME STACK REGISTERED LAST UPDATED');
|
|
73
|
+
console.log(' ' + '-'.repeat(72));
|
|
74
|
+
// Personal projects
|
|
75
|
+
if (personal.length > 0 && !options?.team) {
|
|
76
|
+
for (const p of personal) {
|
|
77
|
+
const stack = p.stackProfile?.primaryLanguage ?? 'Unknown';
|
|
78
|
+
const registered = formatRelativeTime(p.registeredAt);
|
|
79
|
+
const updated = formatRelativeTime(p.updatedAt);
|
|
80
|
+
console.log(` ${formatTableCell(p.name, 18)} ${formatTableCell(stack, 14)} ${formatTableCell(registered, 15)} ${updated}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Team projects
|
|
84
|
+
for (const [teamId, teamProjects] of Object.entries(byTeam)) {
|
|
85
|
+
console.log();
|
|
86
|
+
console.log(` Team: ${teamId} (${teamProjects.length} projects)`);
|
|
87
|
+
console.log();
|
|
88
|
+
for (const p of teamProjects) {
|
|
89
|
+
const stack = p.stackProfile?.primaryLanguage ?? 'Unknown';
|
|
90
|
+
const registered = formatRelativeTime(p.registeredAt);
|
|
91
|
+
const updated = formatRelativeTime(p.updatedAt);
|
|
92
|
+
console.log(` ${formatTableCell(p.name, 18)} ${formatTableCell(stack, 14)} ${formatTableCell(registered, 15)} ${updated}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
console.log();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Show details for a specific project
|
|
99
|
+
*/
|
|
100
|
+
export async function runProjectShow(identifier) {
|
|
101
|
+
if (!identifier) {
|
|
102
|
+
console.error('Error: Missing project name or ID');
|
|
103
|
+
console.log('Usage: claudetools project show <name|id>');
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
const project = findProject(identifier);
|
|
107
|
+
if (!project) {
|
|
108
|
+
console.error(`Project not found: ${identifier}`);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
console.log();
|
|
112
|
+
console.log(` ${project.name}`);
|
|
113
|
+
console.log(' ' + '═'.repeat(50));
|
|
114
|
+
console.log();
|
|
115
|
+
console.log(` Path: ${project.path}`);
|
|
116
|
+
if (project.description) {
|
|
117
|
+
console.log(` Description: ${project.description}`);
|
|
118
|
+
}
|
|
119
|
+
if (project.stackProfile) {
|
|
120
|
+
const frameworks = project.stackProfile.frameworks.join(', ') || 'None';
|
|
121
|
+
console.log(` Stack: ${project.stackProfile.primaryLanguage} • ${frameworks}`);
|
|
122
|
+
}
|
|
123
|
+
if (project.gitRemoteUrl) {
|
|
124
|
+
console.log(` Git Remote: ${project.gitRemoteUrl}`);
|
|
125
|
+
}
|
|
126
|
+
console.log(` Registered: ${formatRelativeTime(project.registeredAt)}`);
|
|
127
|
+
console.log(` Updated: ${formatRelativeTime(project.updatedAt)}`);
|
|
128
|
+
console.log();
|
|
129
|
+
console.log(' Settings');
|
|
130
|
+
console.log(' ' + '-'.repeat(50));
|
|
131
|
+
console.log(` Visibility: ${project.settings.visibility}`);
|
|
132
|
+
console.log(` Auto-sync: ${project.settings.autoSync ? 'Enabled' : 'Disabled'}`);
|
|
133
|
+
if (project.settings.budgetAlertUsd) {
|
|
134
|
+
console.log(` Budget: ${formatCost(project.settings.budgetAlertUsd)}/week`);
|
|
135
|
+
}
|
|
136
|
+
if (project.teamId) {
|
|
137
|
+
console.log(` Team: ${project.teamId}`);
|
|
138
|
+
}
|
|
139
|
+
console.log();
|
|
140
|
+
if (project.isSynced) {
|
|
141
|
+
console.log(` Sync Status: Synced (${formatRelativeTime(project.lastSyncedAt ?? project.updatedAt)})`);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
console.log(' Sync Status: Pending sync');
|
|
145
|
+
}
|
|
146
|
+
console.log();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Register a new project
|
|
150
|
+
*/
|
|
151
|
+
export async function runProjectAdd(pathArg, options) {
|
|
152
|
+
// Use provided path or current directory
|
|
153
|
+
const projectPath = pathArg ? resolve(pathArg) : process.cwd();
|
|
154
|
+
// Verify path exists
|
|
155
|
+
if (!existsSync(projectPath)) {
|
|
156
|
+
console.error(`Error: Path does not exist: ${projectPath}`);
|
|
157
|
+
process.exit(1);
|
|
158
|
+
}
|
|
159
|
+
// Check if already registered
|
|
160
|
+
const existing = findProject(projectPath);
|
|
161
|
+
if (existing) {
|
|
162
|
+
console.error(`Error: Project already registered at this path as "${existing.name}"`);
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
// Get git remote if available
|
|
166
|
+
const gitRemoteUrl = getGitRemoteUrl(projectPath) ?? undefined;
|
|
167
|
+
// Suggest name from path or git
|
|
168
|
+
const suggestedName = suggestProjectName(projectPath);
|
|
169
|
+
const projectName = options?.name ?? suggestedName;
|
|
170
|
+
// Create project
|
|
171
|
+
const project = createProject(projectPath, projectName, {
|
|
172
|
+
description: options?.description,
|
|
173
|
+
teamId: options?.team,
|
|
174
|
+
gitRemoteUrl,
|
|
175
|
+
});
|
|
176
|
+
try {
|
|
177
|
+
await addProject(project);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
181
|
+
process.exit(1);
|
|
182
|
+
}
|
|
183
|
+
// Fire-and-forget sync to cloud
|
|
184
|
+
pushProjectToEngine(project, 'insert').catch(() => { });
|
|
185
|
+
console.log();
|
|
186
|
+
console.log(` ✓ Project registered: ${project.name}`);
|
|
187
|
+
if (gitRemoteUrl) {
|
|
188
|
+
console.log(` Git remote: ${gitRemoteUrl}`);
|
|
189
|
+
}
|
|
190
|
+
console.log();
|
|
191
|
+
console.log(' Next steps:');
|
|
192
|
+
console.log(' • View project: claudetools project show "' + project.name + '"');
|
|
193
|
+
if (await isLoggedIn()) {
|
|
194
|
+
console.log(' • Sync to cloud: claudetools project sync');
|
|
195
|
+
}
|
|
196
|
+
console.log();
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Update a project's metadata
|
|
200
|
+
*/
|
|
201
|
+
export async function runProjectUpdate(identifier, options) {
|
|
202
|
+
if (!identifier) {
|
|
203
|
+
console.error('Error: Missing project name or ID');
|
|
204
|
+
console.log('Usage: claudetools project update <name|id> [options]');
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
const project = findProject(identifier);
|
|
208
|
+
if (!project) {
|
|
209
|
+
console.error(`Project not found: ${identifier}`);
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
// Build updates
|
|
213
|
+
const updates = {};
|
|
214
|
+
if (options?.name)
|
|
215
|
+
updates.name = options.name;
|
|
216
|
+
if (options?.description)
|
|
217
|
+
updates.description = options.description;
|
|
218
|
+
if (options?.team)
|
|
219
|
+
updates.teamId = options.team;
|
|
220
|
+
if (options?.visibility) {
|
|
221
|
+
updates.settings = {
|
|
222
|
+
...project.settings,
|
|
223
|
+
visibility: options.visibility,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
if (Object.keys(updates).length === 0) {
|
|
227
|
+
console.error('Error: No updates provided');
|
|
228
|
+
console.log('Usage: claudetools project update <name|id> --name "New Name" --description "..."');
|
|
229
|
+
process.exit(1);
|
|
230
|
+
}
|
|
231
|
+
try {
|
|
232
|
+
const updated = await updateProject(project.id, updates);
|
|
233
|
+
// Fire-and-forget sync to cloud
|
|
234
|
+
pushProjectToEngine(updated, 'update').catch(() => { });
|
|
235
|
+
console.log();
|
|
236
|
+
console.log(` ✓ Project updated: ${updated.name}`);
|
|
237
|
+
console.log();
|
|
238
|
+
}
|
|
239
|
+
catch (error) {
|
|
240
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Unregister a project
|
|
246
|
+
*/
|
|
247
|
+
export async function runProjectRemove(identifier) {
|
|
248
|
+
if (!identifier) {
|
|
249
|
+
console.error('Error: Missing project name or ID');
|
|
250
|
+
console.log('Usage: claudetools project remove <name|id>');
|
|
251
|
+
process.exit(1);
|
|
252
|
+
}
|
|
253
|
+
const project = findProject(identifier);
|
|
254
|
+
if (!project) {
|
|
255
|
+
console.error(`Project not found: ${identifier}`);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
try {
|
|
259
|
+
await removeProject(project.id);
|
|
260
|
+
// Fire-and-forget sync deletion to cloud
|
|
261
|
+
deleteProjectFromEngine(project.id).catch(() => { });
|
|
262
|
+
console.log();
|
|
263
|
+
console.log(` ✓ Project unregistered: ${project.name}`);
|
|
264
|
+
console.log(' (Files were not deleted)');
|
|
265
|
+
console.log();
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
console.error(`Error: ${error instanceof Error ? error.message : String(error)}`);
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/project/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAW,aAAa,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EACL,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,aAAa,CAAC,IAAkC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA2B;IAC9D,wCAAwC;IACxC,IAAI,CAAC;QACH,IAAI,MAAM,eAAe,EAAE,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrD,MAAM,kBAAkB,CAAC,aAAa,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8CAA8C;IAChD,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,IAAI,OAAO,EAAE,IAAI,EAAE,CAAC;QAClB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,iCAAiC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO;QACT,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACT,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;QAC/B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAA+B,CAChC,CAAC;IAEF,8BAA8B;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,CAAC,MAAM,UAAU,EAAE,CAAC;QACpC,CAAC,CAAC,YAAY,QAAQ,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,EAAE;QACvE,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,MAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,eAAe;IACf,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnC,oBAAoB;IACpB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,EAAE,eAAe,IAAI,SAAS,CAAC;YAC3D,MAAM,UAAU,GAAG,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CACT,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAClH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,KAAK,YAAY,CAAC,MAAM,YAAY,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,YAAY,EAAE,eAAe,IAAI,SAAS,CAAC;YAC3D,MAAM,UAAU,GAAG,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,OAAO,GAAG,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CACT,KAAK,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,eAAe,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,eAAe,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAClH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACrD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,YAAY,CAAC,eAAe,MAAM,UAAU,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,kBAAkB,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,kBAAkB,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IACpF,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,0BAA0B,kBAAkB,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1G,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAgB,EAChB,OAIC;IAED,yCAAyC;IACzC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAE/D,qBAAqB;IACrB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;QAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sDAAsD,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,WAAW,CAAC,IAAI,SAAS,CAAC;IAE/D,gCAAgC;IAChC,MAAM,aAAa,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,OAAO,EAAE,IAAI,IAAI,aAAa,CAAC;IAEnD,iBAAiB;IACjB,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,EAAE,WAAW,EAAE;QACtD,WAAW,EAAE,OAAO,EAAE,WAAW;QACjC,MAAM,EAAE,OAAO,EAAE,IAAI;QACrB,YAAY;KACb,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gCAAgC;IAChC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,8CAA8C,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IACjF,IAAI,MAAM,UAAU,EAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAkB,EAClB,OAKC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gBAAgB;IAChB,MAAM,OAAO,GAAwC,EAAE,CAAC;IACxD,IAAI,OAAO,EAAE,IAAI;QAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,IAAI,OAAO,EAAE,WAAW;QAAE,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACpE,IAAI,OAAO,EAAE,IAAI;QAAE,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACjD,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;QACxB,OAAO,CAAC,QAAQ,GAAG;YACjB,GAAG,OAAO,CAAC,QAAQ;YACnB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAEzD,gCAAgC;QAChC,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEvD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAkB;IACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEhC,yCAAyC;QACzC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEpD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Mapper
|
|
3
|
+
* Converts between CLI Project type and sync engine SyncProject wire format
|
|
4
|
+
*/
|
|
5
|
+
import type { Project } from './types.js';
|
|
6
|
+
import type { SyncProject } from '../sync-engine/protocol.js';
|
|
7
|
+
/**
|
|
8
|
+
* Generate a URL-safe slug from a project name.
|
|
9
|
+
* Matches the web slugify algorithm exactly (apps/web/src/lib/utils/slugify.ts).
|
|
10
|
+
* Lowercases, trims whitespace, strips non-word/non-space/non-hyphen chars,
|
|
11
|
+
* collapses whitespace/underscores/hyphens into single hyphens, and trims
|
|
12
|
+
* leading/trailing hyphens.
|
|
13
|
+
*/
|
|
14
|
+
export declare function generateSlug(name: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Convert a CLI Project to a SyncProject for the sync engine wire format.
|
|
17
|
+
* Local-only fields (pathHash, isSynced, settings, stackProfile, lastSyncedAt)
|
|
18
|
+
* are dropped since they are not part of the sync protocol.
|
|
19
|
+
*/
|
|
20
|
+
export declare function projectToSyncProject(project: Project, userId: string): SyncProject;
|
|
21
|
+
/**
|
|
22
|
+
* Convert a SyncProject from the sync engine into a partial CLI Project.
|
|
23
|
+
* Returns Partial<Project> because local-only fields (pathHash, isSynced,
|
|
24
|
+
* settings, stackProfile, lastSyncedAt) must be supplied by the caller.
|
|
25
|
+
*/
|
|
26
|
+
export declare function syncProjectToProject(syncProject: SyncProject): Partial<Project>;
|
|
27
|
+
//# sourceMappingURL=mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../src/project/mapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAkBlF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAa/E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Mapper
|
|
3
|
+
* Converts between CLI Project type and sync engine SyncProject wire format
|
|
4
|
+
*/
|
|
5
|
+
import { getDefaultBranch } from './git.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate a URL-safe slug from a project name.
|
|
8
|
+
* Matches the web slugify algorithm exactly (apps/web/src/lib/utils/slugify.ts).
|
|
9
|
+
* Lowercases, trims whitespace, strips non-word/non-space/non-hyphen chars,
|
|
10
|
+
* collapses whitespace/underscores/hyphens into single hyphens, and trims
|
|
11
|
+
* leading/trailing hyphens.
|
|
12
|
+
*/
|
|
13
|
+
export function generateSlug(name) {
|
|
14
|
+
return name
|
|
15
|
+
.toLowerCase()
|
|
16
|
+
.trim()
|
|
17
|
+
.replace(/[^\w\s-]/g, '')
|
|
18
|
+
.replace(/[\s_-]+/g, '-')
|
|
19
|
+
.replace(/^-+|-+$/g, '');
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Convert a CLI Project to a SyncProject for the sync engine wire format.
|
|
23
|
+
* Local-only fields (pathHash, isSynced, settings, stackProfile, lastSyncedAt)
|
|
24
|
+
* are dropped since they are not part of the sync protocol.
|
|
25
|
+
*/
|
|
26
|
+
export function projectToSyncProject(project, userId) {
|
|
27
|
+
return {
|
|
28
|
+
id: project.id,
|
|
29
|
+
user_id: userId,
|
|
30
|
+
team_id: project.teamId ?? null,
|
|
31
|
+
name: project.name,
|
|
32
|
+
slug: generateSlug(project.name),
|
|
33
|
+
description: project.description ?? null,
|
|
34
|
+
path: project.path,
|
|
35
|
+
repository_url: project.gitRemoteUrl ?? null,
|
|
36
|
+
default_branch: getDefaultBranch(project.path),
|
|
37
|
+
icon: null,
|
|
38
|
+
color: null,
|
|
39
|
+
archived_at: project.isDeleted ? (project.deletedAt ?? null) : null,
|
|
40
|
+
version: 0,
|
|
41
|
+
created_at: project.registeredAt,
|
|
42
|
+
updated_at: project.updatedAt,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Convert a SyncProject from the sync engine into a partial CLI Project.
|
|
47
|
+
* Returns Partial<Project> because local-only fields (pathHash, isSynced,
|
|
48
|
+
* settings, stackProfile, lastSyncedAt) must be supplied by the caller.
|
|
49
|
+
*/
|
|
50
|
+
export function syncProjectToProject(syncProject) {
|
|
51
|
+
return {
|
|
52
|
+
id: syncProject.id,
|
|
53
|
+
name: syncProject.name,
|
|
54
|
+
description: syncProject.description ?? undefined,
|
|
55
|
+
path: syncProject.path ?? undefined,
|
|
56
|
+
teamId: syncProject.team_id ?? undefined,
|
|
57
|
+
gitRemoteUrl: syncProject.repository_url ?? undefined,
|
|
58
|
+
registeredAt: syncProject.created_at,
|
|
59
|
+
updatedAt: syncProject.updated_at,
|
|
60
|
+
isDeleted: Boolean(syncProject.archived_at),
|
|
61
|
+
deletedAt: syncProject.archived_at ?? undefined,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../src/project/mapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,MAAc;IACnE,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,OAAO,CAAC,MAAM,IAAI,IAAI;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,cAAc,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI;QAC5C,cAAc,EAAE,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC;QAC9C,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QACnE,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,OAAO,CAAC,YAAY;QAChC,UAAU,EAAE,OAAO,CAAC,SAAS;KAC9B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAwB;IAC3D,OAAO;QACL,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,SAAS;QACjD,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,SAAS;QACnC,MAAM,EAAE,WAAW,CAAC,OAAO,IAAI,SAAS;QACxC,YAAY,EAAE,WAAW,CAAC,cAAc,IAAI,SAAS;QACrD,YAAY,EAAE,WAAW,CAAC,UAAU;QACpC,SAAS,EAAE,WAAW,CAAC,UAAU;QACjC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC;QAC3C,SAAS,EAAE,WAAW,CAAC,WAAW,IAAI,SAAS;KAChD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Storage
|
|
3
|
+
* Local file operations for ~/.claudetools/projects.json
|
|
4
|
+
*/
|
|
5
|
+
import { Project, ProjectsFile } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Get the path to the projects file
|
|
8
|
+
*/
|
|
9
|
+
export declare function getProjectsPath(): string;
|
|
10
|
+
/**
|
|
11
|
+
* Load projects from disk
|
|
12
|
+
* Returns default file if not exists or parse fails
|
|
13
|
+
*/
|
|
14
|
+
export declare function loadProjects(): ProjectsFile;
|
|
15
|
+
/**
|
|
16
|
+
* Save projects to disk atomically
|
|
17
|
+
*/
|
|
18
|
+
export declare function saveProjects(file: ProjectsFile): void;
|
|
19
|
+
/**
|
|
20
|
+
* Execute a function with file lock to prevent race conditions
|
|
21
|
+
* between CLI and desktop app
|
|
22
|
+
*/
|
|
23
|
+
export declare function withProjectsLock<T>(fn: () => Promise<T>): Promise<T>;
|
|
24
|
+
/**
|
|
25
|
+
* Get all active (non-deleted) projects
|
|
26
|
+
*/
|
|
27
|
+
export declare function getActiveProjects(): Project[];
|
|
28
|
+
/**
|
|
29
|
+
* Find a project by ID
|
|
30
|
+
*/
|
|
31
|
+
export declare function findProjectById(id: string): Project | null;
|
|
32
|
+
/**
|
|
33
|
+
* Find a project by name (case-insensitive)
|
|
34
|
+
*/
|
|
35
|
+
export declare function findProjectByName(name: string): Project | null;
|
|
36
|
+
/**
|
|
37
|
+
* Find a project by path
|
|
38
|
+
*/
|
|
39
|
+
export declare function findProjectByPath(path: string): Project | null;
|
|
40
|
+
/**
|
|
41
|
+
* Find a project by name, ID, or path
|
|
42
|
+
*/
|
|
43
|
+
export declare function findProject(identifier: string): Project | null;
|
|
44
|
+
/**
|
|
45
|
+
* Add a new project
|
|
46
|
+
*/
|
|
47
|
+
export declare function addProject(project: Project): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Allowed fields for project updates
|
|
50
|
+
*/
|
|
51
|
+
export interface ProjectUpdateData {
|
|
52
|
+
name?: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
teamId?: string;
|
|
55
|
+
gitRemoteUrl?: string;
|
|
56
|
+
settings?: Project['settings'];
|
|
57
|
+
stackProfile?: Project['stackProfile'];
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Update an existing project
|
|
61
|
+
*/
|
|
62
|
+
export declare function updateProject(id: string, updates: ProjectUpdateData): Promise<Project>;
|
|
63
|
+
/**
|
|
64
|
+
* Soft delete a project (marks as deleted)
|
|
65
|
+
*/
|
|
66
|
+
export declare function removeProject(id: string): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Permanently delete projects marked as deleted for over 30 days
|
|
69
|
+
*/
|
|
70
|
+
export declare function cleanupDeletedProjects(): Promise<number>;
|
|
71
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/project/storage.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EACL,OAAO,EACP,YAAY,EAGb,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAyBD;;;GAGG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAuB3C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAWrD;AAmDD;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAuB1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,EAAE,CAG7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAG1D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAO9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAM9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAY9D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAehE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACxC;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,OAAO,CAAC,CA2BlB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB7D;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC,CAkB9D"}
|