opkg 0.6.0 → 0.6.2
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/README.md +145 -105
- package/assets/openpackage_ascii_dark.png +0 -0
- package/assets/openpackage_ascii_light.png +0 -0
- package/dist/commands/duplicate.js +5 -2
- package/dist/commands/duplicate.js.map +1 -1
- package/dist/commands/init.js +4 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.js +22 -8
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.js +9 -3
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/login.js +58 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.js +28 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/pull.js +5 -299
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.js +5 -245
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/save.js +20 -4
- package/dist/commands/save.js.map +1 -1
- package/dist/commands/show.js +18 -5
- package/dist/commands/show.js.map +1 -1
- package/dist/commands/status.js +19 -6
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tui.js +61 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/constants/index.js +3 -7
- package/dist/constants/index.js.map +1 -1
- package/dist/core/add/package-index-updater.js +7 -6
- package/dist/core/add/package-index-updater.js.map +1 -1
- package/dist/core/add/platform-path-transformer.js +2 -2
- package/dist/core/add/platform-path-transformer.js.map +1 -1
- package/dist/core/add/source-collector.js +1 -1
- package/dist/core/add/source-collector.js.map +1 -1
- package/dist/core/api-keys.js +6 -2
- package/dist/core/api-keys.js.map +1 -1
- package/dist/core/auth.js +25 -40
- package/dist/core/auth.js.map +1 -1
- package/dist/core/config.js +11 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/dependency-resolver.js +100 -19
- package/dist/core/dependency-resolver.js.map +1 -1
- package/dist/core/device-auth.js +81 -0
- package/dist/core/device-auth.js.map +1 -0
- package/dist/core/directory.js +14 -8
- package/dist/core/directory.js.map +1 -1
- package/dist/core/install/bulk-install-pipeline.js +33 -2
- package/dist/core/install/bulk-install-pipeline.js.map +1 -1
- package/dist/core/install/canonical-plan.js +11 -5
- package/dist/core/install/canonical-plan.js.map +1 -1
- package/dist/core/install/download-keys.js +2 -2
- package/dist/core/install/download-keys.js.map +1 -1
- package/dist/core/install/install-flow.js +6 -4
- package/dist/core/install/install-flow.js.map +1 -1
- package/dist/core/install/install-pipeline.js +74 -6
- package/dist/core/install/install-pipeline.js.map +1 -1
- package/dist/core/install/install-reporting.js +2 -1
- package/dist/core/install/install-reporting.js.map +1 -1
- package/dist/core/install/local-source-handler.js +76 -0
- package/dist/core/install/local-source-handler.js.map +1 -0
- package/dist/core/install/path-install-pipeline.js +227 -0
- package/dist/core/install/path-install-pipeline.js.map +1 -0
- package/dist/core/install/path-package-loader.js +101 -0
- package/dist/core/install/path-package-loader.js.map +1 -0
- package/dist/core/install/remote-flow.js +17 -6
- package/dist/core/install/remote-flow.js.map +1 -1
- package/dist/core/install/version-selection.js +25 -8
- package/dist/core/install/version-selection.js.map +1 -1
- package/dist/core/openpackage.js +6 -6
- package/dist/core/openpackage.js.map +1 -1
- package/dist/core/package.js +71 -8
- package/dist/core/package.js.map +1 -1
- package/dist/core/platforms.js +398 -185
- package/dist/core/platforms.js.map +1 -1
- package/dist/core/profiles.js +60 -3
- package/dist/core/profiles.js.map +1 -1
- package/dist/core/pull/pull-errors.js +62 -0
- package/dist/core/pull/pull-errors.js.map +1 -0
- package/dist/core/pull/pull-options.js +2 -0
- package/dist/core/pull/pull-options.js.map +1 -0
- package/dist/core/pull/pull-output.js +50 -0
- package/dist/core/pull/pull-output.js.map +1 -0
- package/dist/core/pull/pull-pipeline.js +141 -0
- package/dist/core/pull/pull-pipeline.js.map +1 -0
- package/dist/core/pull/pull-strategies.js +103 -0
- package/dist/core/pull/pull-strategies.js.map +1 -0
- package/dist/core/pull/pull-types.js +2 -0
- package/dist/core/pull/pull-types.js.map +1 -0
- package/dist/core/push/push-context.js +95 -0
- package/dist/core/push/push-context.js.map +1 -0
- package/dist/core/push/push-errors.js +133 -0
- package/dist/core/push/push-errors.js.map +1 -0
- package/dist/core/push/push-output.js +44 -0
- package/dist/core/push/push-output.js.map +1 -0
- package/dist/core/push/push-pipeline.js +74 -0
- package/dist/core/push/push-pipeline.js.map +1 -0
- package/dist/core/push/push-single-file.js +56 -0
- package/dist/core/push/push-single-file.js.map +1 -0
- package/dist/core/push/push-types.js +2 -0
- package/dist/core/push/push-types.js.map +1 -0
- package/dist/core/push/push-upload.js +68 -0
- package/dist/core/push/push-upload.js.map +1 -0
- package/dist/core/registry.js +4 -2
- package/dist/core/registry.js.map +1 -1
- package/dist/core/remote-pull.js +163 -35
- package/dist/core/remote-pull.js.map +1 -1
- package/dist/core/save/package-saver.js +37 -1
- package/dist/core/save/package-saver.js.map +1 -1
- package/dist/core/save/package-yml-generator.js +5 -4
- package/dist/core/save/package-yml-generator.js.map +1 -1
- package/dist/core/save/save-candidate-loader.js +10 -9
- package/dist/core/save/save-candidate-loader.js.map +1 -1
- package/dist/core/save/save-pipeline.js +31 -7
- package/dist/core/save/save-pipeline.js.map +1 -1
- package/dist/core/save/save-single-file.js +124 -0
- package/dist/core/save/save-single-file.js.map +1 -0
- package/dist/core/scoping/package-scoping.js +1 -1
- package/dist/core/scoping/package-scoping.js.map +1 -1
- package/dist/core/status/status-file-discovery.js.map +1 -1
- package/dist/core/token-store.js +73 -0
- package/dist/core/token-store.js.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/access/context.js +20 -0
- package/dist/mcp/access/context.js.map +1 -0
- package/dist/mcp/access/index.js +57 -0
- package/dist/mcp/access/index.js.map +1 -0
- package/dist/mcp/server.js +20 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/tui/app.js +105 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/components/package-list.js +73 -0
- package/dist/tui/components/package-list.js.map +1 -0
- package/dist/tui/controller.js +708 -0
- package/dist/tui/controller.js.map +1 -0
- package/dist/tui/index.js +12 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/services/file-index.js +64 -0
- package/dist/tui/services/file-index.js.map +1 -0
- package/dist/tui/services/local-mgmt.js +68 -0
- package/dist/tui/services/local-mgmt.js.map +1 -0
- package/dist/tui/services/packages.js +18 -0
- package/dist/tui/services/packages.js.map +1 -0
- package/dist/tui/services/save.js +21 -0
- package/dist/tui/services/save.js.map +1 -0
- package/dist/tui/services/status.js +18 -0
- package/dist/tui/services/status.js.map +1 -0
- package/dist/tui/state/app-state.js +21 -0
- package/dist/tui/state/app-state.js.map +1 -0
- package/dist/tui/state.js +17 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui/views/add-file-modal.js +129 -0
- package/dist/tui/views/add-file-modal.js.map +1 -0
- package/dist/tui/views/dashboard.js +106 -0
- package/dist/tui/views/dashboard.js.map +1 -0
- package/dist/tui/views/file-preview.js +44 -0
- package/dist/tui/views/file-preview.js.map +1 -0
- package/dist/tui/views/list-packages.js +73 -0
- package/dist/tui/views/list-packages.js.map +1 -0
- package/dist/tui/views/main-menu.js +33 -0
- package/dist/tui/views/main-menu.js.map +1 -0
- package/dist/tui/views/manage-view.js +81 -0
- package/dist/tui/views/manage-view.js.map +1 -0
- package/dist/tui/views/package-detail.js +254 -0
- package/dist/tui/views/package-detail.js.map +1 -0
- package/dist/tui/views/package-hub.js +120 -0
- package/dist/tui/views/package-hub.js.map +1 -0
- package/dist/tui/views/placeholder.js +24 -0
- package/dist/tui/views/placeholder.js.map +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/bun-bootstrap.js +72 -0
- package/dist/utils/bun-bootstrap.js.map +1 -0
- package/dist/utils/command-helpers.js +24 -0
- package/dist/utils/command-helpers.js.map +1 -0
- package/dist/utils/cwd-resolver.js +45 -0
- package/dist/utils/cwd-resolver.js.map +1 -0
- package/dist/utils/formatters.js +3 -1
- package/dist/utils/formatters.js.map +1 -1
- package/dist/utils/http-client.js +27 -5
- package/dist/utils/http-client.js.map +1 -1
- package/dist/utils/index-based-installer.js +39 -15
- package/dist/utils/index-based-installer.js.map +1 -1
- package/dist/utils/install-file-discovery.js +17 -23
- package/dist/utils/install-file-discovery.js.map +1 -1
- package/dist/utils/install-helpers.js +2 -0
- package/dist/utils/install-helpers.js.map +1 -1
- package/dist/utils/jsonc.js +23 -1
- package/dist/utils/jsonc.js.map +1 -1
- package/dist/utils/manifest-paths.js +27 -0
- package/dist/utils/manifest-paths.js.map +1 -0
- package/dist/utils/package-copy.js +1 -1
- package/dist/utils/package-copy.js.map +1 -1
- package/dist/utils/package-input.js +55 -0
- package/dist/utils/package-input.js.map +1 -0
- package/dist/utils/package-management.js +160 -45
- package/dist/utils/package-management.js.map +1 -1
- package/dist/utils/package-merge.js +48 -0
- package/dist/utils/package-merge.js.map +1 -0
- package/dist/utils/package-name.js +29 -0
- package/dist/utils/package-name.js.map +1 -1
- package/dist/utils/package-versioning.js +16 -4
- package/dist/utils/package-versioning.js.map +1 -1
- package/dist/utils/package-yml.js +17 -12
- package/dist/utils/package-yml.js.map +1 -1
- package/dist/utils/platform-file.js +8 -8
- package/dist/utils/platform-file.js.map +1 -1
- package/dist/utils/platform-mapper.js +12 -28
- package/dist/utils/platform-mapper.js.map +1 -1
- package/dist/utils/platform-utils.js +23 -49
- package/dist/utils/platform-utils.js.map +1 -1
- package/dist/utils/platform-yaml-merge.js +6 -5
- package/dist/utils/platform-yaml-merge.js.map +1 -1
- package/dist/utils/prompts.js +2 -33
- package/dist/utils/prompts.js.map +1 -1
- package/dist/utils/registry-entry-filter.js +8 -8
- package/dist/utils/registry-entry-filter.js.map +1 -1
- package/dist/utils/registry-paths.js +43 -4
- package/dist/utils/registry-paths.js.map +1 -1
- package/dist/utils/tarball.js +6 -2
- package/dist/utils/tarball.js.map +1 -1
- package/dist/utils/version-ranges.js +11 -8
- package/dist/utils/version-ranges.js.map +1 -1
- package/examples/custom-subdirs-platform.jsonc +90 -0
- package/package.json +2 -2
- package/platforms.jsonc +99 -60
- package/specs/auth/auth-device-flow.md +70 -0
- package/specs/cli-options.md +42 -0
- package/specs/install/README.md +1 -0
- package/specs/install/install-behavior.md +38 -0
- package/specs/install/package-yml-canonical.md +21 -1
- package/specs/install/version-resolution.md +9 -7
- package/specs/login/login-device-flow.md +70 -0
- package/specs/package/README.md +3 -6
- package/specs/package/package-root-layout.md +3 -3
- package/specs/package/registry-payload-and-copy.md +2 -2
- package/specs/package/universal-content.md +3 -10
- package/specs/platforms.md +40 -19
- package/specs/push/README.md +1 -0
- package/specs/push/push-behavior.md +46 -10
- package/specs/push/push-errors-and-hints.md +19 -6
- package/specs/push/push-remote-upload.md +3 -0
- package/specs/push/push-scoping.md +14 -22
- package/specs/push/push-version-selection.md +18 -16
- package/specs/save/README.md +2 -0
- package/specs/save/save-modes-inputs.md +4 -2
- package/specs/save/save-package-detection.md +1 -1
- package/specs/save-pack.md +1 -0
package/README.md
CHANGED
|
@@ -1,165 +1,199 @@
|
|
|
1
|
-
# OpenPackage
|
|
2
1
|
|
|
2
|
+
<p align="center">
|
|
3
|
+
<a href="https://github.com/enulus/OpenPackage">
|
|
4
|
+
<picture>
|
|
5
|
+
<source srcset="assets/openpackage_ascii_dark.png" media="(prefers-color-scheme: dark)">
|
|
6
|
+
<source srcset="assets/openpackage_ascii_light.png" media="(prefers-color-scheme: light)">
|
|
7
|
+
<img src="assets/openpackage_ascii_light.png" alt="OpenPackage logo" height="64">
|
|
8
|
+
</picture>
|
|
9
|
+
</a>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
12
|
+
<p align="center">Organized agentic coding for teams.</p>
|
|
13
|
+
<p align="center">
|
|
3
14
|
<a href="https://www.npmjs.com/package/opkg " target="blank">
|
|
4
|
-
<img src="https://img.shields.io/npm/v/opkg
|
|
15
|
+
<img src="https://img.shields.io/npm/v/opkg?style=flat-square" alt="Npm package for OpenPackage">
|
|
16
|
+
</a>
|
|
17
|
+
<a href="./LICENSE">
|
|
18
|
+
<img alt="License: Apache-2.0" src="https://img.shields.io/github/license/enulus/openpackage?style=flat-square" />
|
|
5
19
|
</a>
|
|
6
|
-
<a href="https://discord.gg/W5H54HZ8Fm"
|
|
7
|
-
<img src="https://img.shields.io/badge/Discord
|
|
20
|
+
<a href="https://discord.gg/W5H54HZ8Fm" target="blank">
|
|
21
|
+
<img src="https://img.shields.io/badge/Discord-Join%20the%20community-5865F2?logo=discord&logoColor=white&style=flat-square" alt="OpenPackage Discord">
|
|
8
22
|
</a>
|
|
9
23
|
<br /><br />
|
|
24
|
+
</p>
|
|
10
25
|
|
|
11
|
-
|
|
26
|
+
<p align="center">
|
|
27
|
+
Follow <a href="https://x.com/hyericlee">@hyericlee on X</a> for updates · Join the <a href="https://discord.gg/W5H54HZ8Fm">OpenPackage Discord</a> for help and questions.
|
|
28
|
+
</p>
|
|
12
29
|
|
|
13
|
-
|
|
14
|
-
Build reusable packages for use across multiple projects and AI coding platforms.
|
|
30
|
+
# OpenPackage
|
|
15
31
|
|
|
16
|
-
|
|
32
|
+
**OpenPackage is the centralized hub for organizing your specs and configs for agentic coding, giving you consistent context and workflows between sessions, projects, and teams.**
|
|
17
33
|
|
|
18
|
-
|
|
19
|
-
Check out the official OpenPackage registry: [openpackage.dev/packages](https://openpackage.dev/packages).
|
|
34
|
+
## Why OpenPackage?
|
|
20
35
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
36
|
+
Modern AI coding tools are powerful, but lack organization, reusability, and efficiency.
|
|
37
|
+
- Specs across individuals and codebases, diverging, unversioned, and incohesive.
|
|
38
|
+
- Rules, commands, and subagents scattered across multiple projects.
|
|
39
|
+
- Familiar workflows rebuilt for each project, incompatible between AI coding platforms.
|
|
40
|
+
|
|
41
|
+
OpenPackage organizes your specs and AI coding configs into reusable packages that can be accessed by any session, any project, and any coding platform.
|
|
42
|
+
|
|
43
|
+
## How it works
|
|
44
|
+
|
|
45
|
+
At it's core, OpenPackage is a lightweight CLI tool for creating versioned, AI coding platform agnostic packages, each contaning sets of specs and coding config files for simplified installs, uninstalls, and distribution.
|
|
46
|
+
|
|
47
|
+
**No API keys required. No MCP installation.**
|
|
24
48
|
|
|
25
|
-
|
|
49
|
+
1. Declare a package
|
|
50
|
+
2. Add specs and AI coding config files
|
|
51
|
+
3. Sync to multiple codebases
|
|
52
|
+
|
|
53
|
+
## Quick start
|
|
54
|
+
|
|
55
|
+
### Install
|
|
26
56
|
|
|
27
57
|
npm
|
|
28
58
|
```bash
|
|
29
59
|
npm install -g opkg
|
|
30
60
|
```
|
|
31
|
-
## Use Cases
|
|
32
61
|
|
|
33
|
-
###
|
|
34
|
-
|
|
62
|
+
### Create a package
|
|
63
|
+
|
|
35
64
|
```bash title="Terminal"
|
|
36
|
-
#
|
|
37
|
-
opkg
|
|
38
|
-
# In another codebase
|
|
39
|
-
opkg install essentials
|
|
65
|
+
opkg init # Initialize the workspace as a package, or
|
|
66
|
+
opkg init <package> # Initialize a package under cwd `.openpackage/packages`
|
|
40
67
|
```
|
|
41
68
|
|
|
42
69
|
> [!NOTE]
|
|
43
70
|
> You can also use command `openpackage` instead of `opkg`
|
|
44
71
|
|
|
45
|
-
###
|
|
46
|
-
Automatically sync your rules, slash commands, and more across multiple platform.
|
|
47
|
-
```bash title="Terminal"
|
|
48
|
-
# Current codebase has .cursor, .claude, .opencode directories
|
|
49
|
-
opkg save essentials .cursor/commands/essentials
|
|
50
|
-
# OpenPackage CLI automatically generates/syncs the same command files across all platforms.
|
|
51
|
-
|
|
52
|
-
# Before save:
|
|
53
|
-
# .cursor/commands/essentials/clean-code.md
|
|
72
|
+
### Add/update/remove package files
|
|
54
73
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
# .claude/commands/essentials/clean-code.md
|
|
58
|
-
# .opencode/command/essentials/clean-code.md
|
|
59
|
-
```
|
|
74
|
+
Directly update the files (at cwd or in `.openpackage/packages/`) and perform `opkg save`.
|
|
75
|
+
You can also use the add command to add workspace files to a package.
|
|
60
76
|
|
|
61
|
-
### Modular management of files
|
|
62
|
-
Create domain specific packages for modular reuse.
|
|
63
77
|
```bash title="Terminal"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
opkg save typescript
|
|
67
|
-
|
|
68
|
-
# Create scalable-nextjs package
|
|
69
|
-
opkg add scalable-nextjs .cursor/rules/nextjs
|
|
70
|
-
opkg save scalable-nextjs
|
|
71
|
-
|
|
72
|
-
# Create scalable-nestjs package
|
|
73
|
-
opkg add scalable-nestjs .cursor/rules/nestjs
|
|
74
|
-
opkg save scalable-nestjs
|
|
78
|
+
opkg add <package> <path-to-dir-or-file>
|
|
79
|
+
```
|
|
75
80
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
opkg save mongodb
|
|
81
|
+
> [!TIP]
|
|
82
|
+
> Learn how to compose packages by reading the [packages doc](https://openpackage.dev/docs/packages) from our official docs.
|
|
79
83
|
|
|
80
|
-
|
|
81
|
-
opkg install typescript
|
|
82
|
-
opkg install scalable-nextjs
|
|
84
|
+
Use `save` or `pack` to save the set of dirs and files as a package to your local registry for reuse and distribution.
|
|
83
85
|
|
|
84
|
-
|
|
85
|
-
opkg
|
|
86
|
-
opkg
|
|
87
|
-
opkg install mongodb
|
|
86
|
+
```bash title="Terminal"
|
|
87
|
+
opkg save [package] # Prerelease/unversioned
|
|
88
|
+
opkg pack [package] # Stable releases
|
|
88
89
|
```
|
|
89
90
|
|
|
90
|
-
## Usage
|
|
91
|
-
|
|
92
91
|
> [!TIP]
|
|
93
|
-
>
|
|
94
|
-
|
|
95
|
-
### Create a package
|
|
92
|
+
> Packages are saved to your local machine at `~/.openpackage/registry/`.
|
|
96
93
|
|
|
97
|
-
|
|
94
|
+
### List local packages
|
|
98
95
|
```bash title="Terminal"
|
|
99
|
-
opkg
|
|
96
|
+
opkg list
|
|
100
97
|
```
|
|
101
|
-
|
|
98
|
+
Shows all packages currently saved to the local registry.
|
|
99
|
+
|
|
100
|
+
### Show local package details
|
|
102
101
|
```bash title="Terminal"
|
|
103
|
-
opkg
|
|
102
|
+
opkg show <package>
|
|
104
103
|
```
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
Outputs the details of the package and lists all included files.
|
|
107
105
|
|
|
108
|
-
|
|
106
|
+
### Install packages
|
|
109
107
|
```bash title="Terminal"
|
|
110
|
-
opkg
|
|
108
|
+
opkg install <package>
|
|
111
109
|
```
|
|
112
|
-
|
|
110
|
+
Adds all files under the specified package to the codebase at cwd.
|
|
113
111
|
|
|
114
|
-
|
|
115
|
-
### Save a package
|
|
112
|
+
### Uninstall packages
|
|
116
113
|
```bash title="Terminal"
|
|
117
|
-
opkg
|
|
114
|
+
opkg uninstall <package>
|
|
118
115
|
```
|
|
119
|
-
|
|
120
|
-
Also performs sync of universal subdir content across detected AI coding platform dirs.
|
|
116
|
+
Removes all files for the specified package from the codebase at cwd.
|
|
121
117
|
|
|
122
|
-
###
|
|
118
|
+
### Upload packages (push)
|
|
123
119
|
```bash title="Terminal"
|
|
124
|
-
opkg
|
|
120
|
+
opkg push <package>
|
|
125
121
|
```
|
|
126
|
-
Save the package as a stable non-prerelease version ready for push (upload).
|
|
127
122
|
|
|
128
|
-
###
|
|
123
|
+
### Download packages (pull)
|
|
129
124
|
```bash title="Terminal"
|
|
130
|
-
opkg
|
|
125
|
+
opkg pull <package>
|
|
131
126
|
```
|
|
132
|
-
Use the list command to show all packages currently saved to the local registry.
|
|
133
127
|
|
|
134
|
-
###
|
|
128
|
+
### Authenticate CLI
|
|
135
129
|
```bash title="Terminal"
|
|
136
|
-
opkg
|
|
130
|
+
opkg login
|
|
137
131
|
```
|
|
138
|
-
The show command outputs the details of the package and lists all included files.
|
|
139
132
|
|
|
140
|
-
|
|
133
|
+
> [!TIP]
|
|
134
|
+
> Create an account at [openpackage.dev](https://openpackage.dev) to manage packages remotely.
|
|
135
|
+
|
|
136
|
+
## Use Cases
|
|
137
|
+
|
|
138
|
+
### Reuse files across multiple codebases
|
|
139
|
+
Reuse rules, slash commands, and more across multiple codebases.
|
|
140
|
+
|
|
141
|
+
#### Single file
|
|
141
142
|
```bash title="Terminal"
|
|
142
|
-
|
|
143
|
+
# In current codebase
|
|
144
|
+
opkg save f specs/nextjs.md
|
|
145
|
+
# In another codebase
|
|
146
|
+
opkg install f/specs/nextjs.md
|
|
143
147
|
```
|
|
144
|
-
Use the install command to add all files under the specified package to the codebase at cwd.
|
|
145
148
|
|
|
146
|
-
|
|
149
|
+
#### Multiple files via package
|
|
147
150
|
```bash title="Terminal"
|
|
148
|
-
|
|
151
|
+
# In current codebase
|
|
152
|
+
opkg save essentials
|
|
153
|
+
# In another codebase
|
|
154
|
+
opkg install essentials
|
|
149
155
|
```
|
|
150
|
-
Use the uninstall command to remove all files for the specified package from the codebase at cwd.
|
|
151
156
|
|
|
152
|
-
###
|
|
157
|
+
### Sync files across multiple platforms
|
|
158
|
+
Automatically sync your rules, slash commands, and more across multiple platform.
|
|
153
159
|
```bash title="Terminal"
|
|
154
|
-
|
|
160
|
+
# Current codebase has .cursor, .claude, .opencode directories
|
|
161
|
+
opkg save essentials .cursor/commands/essentials
|
|
162
|
+
# OpenPackage CLI automatically generates/syncs the same command files across all platforms.
|
|
163
|
+
|
|
164
|
+
# Before save:
|
|
165
|
+
# .cursor/commands/essentials/cleanup.md
|
|
166
|
+
|
|
167
|
+
# After save:
|
|
168
|
+
# .cursor/commands/essentials/cleanup.md
|
|
169
|
+
# .claude/commands/essentials/cleanup.md
|
|
170
|
+
# .opencode/command/essentials/cleanup.md
|
|
155
171
|
```
|
|
156
|
-
Use the `push` command to upload a package to the [official OpenPackage registry](https://openpackage.dev).
|
|
157
172
|
|
|
158
|
-
###
|
|
173
|
+
### Modular management of files
|
|
174
|
+
Create domain specific packages for modular reuse.
|
|
159
175
|
```bash title="Terminal"
|
|
160
|
-
|
|
176
|
+
# Create typescript package
|
|
177
|
+
opkg save typescript .cursor/rules/typescript
|
|
178
|
+
|
|
179
|
+
# Create scalable-nextjs package
|
|
180
|
+
opkg save scalable-nextjs .cursor/rules/nextjs
|
|
181
|
+
|
|
182
|
+
# Create scalable-nestjs package
|
|
183
|
+
opkg save scalable-nestjs .cursor/rules/nestjs
|
|
184
|
+
|
|
185
|
+
# Create mongodb package
|
|
186
|
+
opkg save mongodb .cursor/rules/mongodb
|
|
187
|
+
|
|
188
|
+
# In your NextJS codebase
|
|
189
|
+
opkg install typescript
|
|
190
|
+
opkg install scalable-nextjs
|
|
191
|
+
|
|
192
|
+
# In your NestJS codebase
|
|
193
|
+
opkg install typescript
|
|
194
|
+
opkg install scalable-nestjs
|
|
195
|
+
opkg install mongodb
|
|
161
196
|
```
|
|
162
|
-
Use the `pull` command to download a package from the [official OpenPackage registry](https://openpackage.dev) to the local registry.
|
|
163
197
|
|
|
164
198
|
> [!TIP]
|
|
165
199
|
> Learn more by heading over to the [official docs](https://openpackage.dev/docs).
|
|
@@ -170,7 +204,7 @@ Packages are composed using the following directory structure:
|
|
|
170
204
|
|
|
171
205
|
```txt title="Structure"
|
|
172
206
|
<package>
|
|
173
|
-
├── .openpackage
|
|
207
|
+
├── .openpackage/
|
|
174
208
|
│ ├── package.yml # The OpenPackage manifest, required
|
|
175
209
|
│ ├── rules/
|
|
176
210
|
│ │ └── # Rule files
|
|
@@ -190,18 +224,18 @@ There are two ways to compose packages:
|
|
|
190
224
|
- In a project workspace: `opkg init <package>` will create a package in `.openpackage/packages/<packages>/`
|
|
191
225
|
- In a dedicated package codebase: `opkg init` will create a package at cwd (similar to npm, pypi, etc.)
|
|
192
226
|
|
|
227
|
+
> [!TIP]
|
|
228
|
+
> Learn more about packages from the [packages doc](https://openpackage.dev/docs/packages) from our official docs.
|
|
229
|
+
|
|
193
230
|
## Supported Platforms
|
|
194
231
|
|
|
195
232
|
OpenPackage performs installation and platform sync of files for supported AI coding platforms outlined by the table below.
|
|
196
|
-
Files and paths will be automatically converted to platform specific designations during `save` and `install`. The `platforms.jsonc` file includes the specifications for all supported platforms.
|
|
197
|
-
|
|
198
|
-
> [!NOTE]
|
|
199
|
-
> OpenPackage searches and includes markdown files under supported platform directories as well as any other workspace directories.
|
|
200
233
|
|
|
201
234
|
| Platform | Directory | Root file | Rules | Commands | Agents | Skills |
|
|
202
235
|
| --- | --- | --- | --- | --- | --- | --- |
|
|
236
|
+
| Antigravity | .agent/ | | rules/ | workflows/ | | |
|
|
203
237
|
| Augment Code | .augment/ | | rules/ | commands/ | | |
|
|
204
|
-
| Claude Code | .claude/ | CLAUDE.md | | commands/ | agents/ | skills/ |
|
|
238
|
+
| Claude Code | .claude/ | CLAUDE.md | rules/ | commands/ | agents/ | skills/ |
|
|
205
239
|
| Codex | .codex/ | AGENTS.md | | prompts/ | | |
|
|
206
240
|
| Cursor | .cursor/ | AGENTS.md | rules/ | commands/ | | |
|
|
207
241
|
| Factory | .factory/ | AGENTS.md | | commands/ | droids/ | |
|
|
@@ -213,9 +247,15 @@ Files and paths will be automatically converted to platform specific designation
|
|
|
213
247
|
| Warp | .warp/ | WARP.md | | | |
|
|
214
248
|
| Windsurf | .windsurf/ | | rules/ | | | |
|
|
215
249
|
|
|
250
|
+
The built-in `platforms.jsonc` defines supported platforms, but can be overridden by user configs:
|
|
251
|
+
- Global: `~/.openpackage/platforms.jsonc` (`.json`)
|
|
252
|
+
- Workspace: `<cwd>/.openpackage/platforms.jsonc` (`.json`)
|
|
253
|
+
|
|
254
|
+
Deep-merged (local > global > built-in) for per-project customization.
|
|
255
|
+
|
|
216
256
|
## Contributing
|
|
217
257
|
|
|
218
|
-
We would love your help building the future of package management for
|
|
258
|
+
We would love your help building the future of package management for agentic coding.
|
|
219
259
|
|
|
220
260
|
Feel free to create [PRs](https://github.com/enulus/OpenPackage/pulls) and [Github issues](https://github.com/enulus/OpenPackage/issues) for:
|
|
221
261
|
- Bugs
|
|
Binary file
|
|
Binary file
|
|
@@ -5,6 +5,7 @@ import { logger } from '../utils/logger.js';
|
|
|
5
5
|
import { withErrorHandling, PackageNotFoundError } from '../utils/errors.js';
|
|
6
6
|
import { parsePackageInput } from '../utils/package-name.js';
|
|
7
7
|
import { transformPackageFilesMetadata } from '../utils/package-versioning.js';
|
|
8
|
+
import { UNVERSIONED } from '../constants/index.js';
|
|
8
9
|
async function duplicatePackageCommand(sourceInput, newInput) {
|
|
9
10
|
logger.info(`Duplicating package: ${sourceInput} -> ${newInput}`);
|
|
10
11
|
// Ensure registry directories
|
|
@@ -45,8 +46,10 @@ async function duplicatePackageCommand(sourceInput, newInput) {
|
|
|
45
46
|
};
|
|
46
47
|
// Save duplicated package
|
|
47
48
|
await packageManager.savePackage(newPackage);
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
const fromLabel = sourcePackage.metadata.version ? `${sourceName}@${sourcePackage.metadata.version}` : `${sourceName} (${UNVERSIONED})`;
|
|
50
|
+
const toLabel = newVersion ? `${newName}@${newVersion}` : `${newName} (${UNVERSIONED})`;
|
|
51
|
+
console.log(`✓ Duplicated '${fromLabel}' -> '${toLabel}'`);
|
|
52
|
+
return { success: true, data: { from: fromLabel, to: toLabel } };
|
|
50
53
|
}
|
|
51
54
|
export function setupDuplicateCommand(program) {
|
|
52
55
|
program
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicate.js","sourceRoot":"","sources":["../../src/commands/duplicate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"duplicate.js","sourceRoot":"","sources":["../../src/commands/duplicate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,KAAK,UAAU,uBAAuB,CACpC,WAAmB,EACnB,QAAgB;IAEhB,MAAM,CAAC,IAAI,CAAC,wBAAwB,WAAW,OAAO,QAAQ,EAAE,CAAC,CAAC;IAElE,8BAA8B;IAC9B,MAAM,yBAAyB,EAAE,CAAC;IAElC,eAAe;IACf,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACzF,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAEhF,mCAAmC;IACnC,IAAI,eAAe,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,oBAAoB,eAAe,mCAAmC,CAAC,CAAC;IAC1F,CAAC;IAED,2DAA2D;IAC3D,IAAI,aAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IACnF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;YAC1C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,UAAU,aAAa,EAAE,CAAC;QAC9E,CAAC;QACD,MAAM,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,uDAAuD;IACvD,IAAI,MAAM,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,OAAO,iBAAiB,EAAE,CAAC;IACxE,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,eAAe,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC;IAErE,sCAAsC;IACtC,MAAM,gBAAgB,GAAG,6BAA6B,CACpD,aAAa,CAAC,KAAK,EACnB,UAAU,EACV,OAAO,EACP,UAAU,CACX,CAAC;IAEF,MAAM,UAAU,GAAY;QAC1B,QAAQ,EAAE;YACR,GAAG,aAAa,CAAC,QAAQ;YACzB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,UAAU;SACpB;QACD,KAAK,EAAE,gBAAgB;KACxB,CAAC;IAEF,0BAA0B;IAC1B,MAAM,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE7C,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,WAAW,GAAG,CAAC;IACxI,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,WAAW,GAAG,CAAC;IAExF,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,SAAS,OAAO,GAAG,CAAC,CAAC;IAE3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,8EAA8E,CAAC;SAC3F,QAAQ,CAAC,WAAW,EAAE,wCAAwC,CAAC;SAC/D,QAAQ,CAAC,WAAW,EAAE,qCAAqC,CAAC;SAC5D,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAW,EAAE,OAAe,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,sEAAsE;YACtE,IAAI,MAAM,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -71,7 +71,10 @@ async function initNestedPackage(packageName, force) {
|
|
|
71
71
|
logger.info(`Initializing nested package '${normalizedName}' in: ${packageFilesDir}`);
|
|
72
72
|
try {
|
|
73
73
|
await ensureDir(packageFilesDir);
|
|
74
|
-
const packageConfig =
|
|
74
|
+
const packageConfig = {
|
|
75
|
+
...(await promptPackageDetailsForNamed(normalizedName)),
|
|
76
|
+
partial: true
|
|
77
|
+
};
|
|
75
78
|
// Ensure include pattern is set
|
|
76
79
|
if (!packageConfig.include || packageConfig.include.length === 0) {
|
|
77
80
|
packageConfig.include = ['**'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/install.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { DIR_PATTERNS, PACKAGE_PATHS } from '../constants/index.js';
|
|
2
2
|
import { runBulkInstallPipeline } from '../core/install/bulk-install-pipeline.js';
|
|
3
3
|
import { runInstallPipeline, determineResolutionMode } from '../core/install/install-pipeline.js';
|
|
4
|
+
import { runPathInstallPipeline } from '../core/install/path-install-pipeline.js';
|
|
4
5
|
import { withErrorHandling } from '../utils/errors.js';
|
|
5
6
|
import { normalizePlatforms } from '../utils/platform-mapper.js';
|
|
6
|
-
import {
|
|
7
|
+
import { classifyPackageInput } from '../utils/package-input.js';
|
|
7
8
|
import { logger } from '../utils/logger.js';
|
|
8
9
|
import { normalizePathForProcessing } from '../utils/path-normalization.js';
|
|
9
10
|
function assertTargetDirOutsideMetadata(targetDir) {
|
|
@@ -21,18 +22,32 @@ export function validateResolutionFlags(options) {
|
|
|
21
22
|
throw new Error('--remote and --local cannot be used together. Choose one resolution mode.');
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
|
-
async function installCommand(
|
|
25
|
+
async function installCommand(packageInput, options) {
|
|
26
|
+
const targetDir = '.';
|
|
27
|
+
const cwd = process.cwd();
|
|
25
28
|
assertTargetDirOutsideMetadata(targetDir);
|
|
26
29
|
options.resolutionMode = determineResolutionMode(options);
|
|
27
30
|
logger.debug('Install resolution mode selected', { mode: options.resolutionMode });
|
|
28
|
-
if (!
|
|
29
|
-
return await runBulkInstallPipeline(
|
|
31
|
+
if (!packageInput) {
|
|
32
|
+
return await runBulkInstallPipeline(options);
|
|
30
33
|
}
|
|
31
|
-
|
|
34
|
+
// Classify the input to determine if it's a registry name, directory, or tarball
|
|
35
|
+
const classification = await classifyPackageInput(packageInput, cwd);
|
|
36
|
+
if (classification.type === 'directory' || classification.type === 'tarball') {
|
|
37
|
+
return await runPathInstallPipeline({
|
|
38
|
+
...options,
|
|
39
|
+
sourcePath: classification.resolvedPath,
|
|
40
|
+
sourceType: classification.type,
|
|
41
|
+
targetDir
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// Registry-based install (existing flow)
|
|
45
|
+
const { name, version, registryPath } = classification;
|
|
32
46
|
return await runInstallPipeline({
|
|
33
47
|
...options,
|
|
34
48
|
packageName: name,
|
|
35
49
|
version,
|
|
50
|
+
registryPath,
|
|
36
51
|
targetDir
|
|
37
52
|
});
|
|
38
53
|
}
|
|
@@ -42,7 +57,6 @@ export function setupInstallCommand(program) {
|
|
|
42
57
|
.alias('i')
|
|
43
58
|
.description('Install packages from the local (and optional remote) registry into this workspace. Works with WIP copies from `opkg save` and stable releases from `opkg pack`.')
|
|
44
59
|
.argument('[package-name]', 'name of the package to install (optional - installs all from package.yml if not specified). Supports package@version syntax.')
|
|
45
|
-
.argument('[target-dir]', 'target directory relative to the workspace install root (defaults to ./ai)', '.')
|
|
46
60
|
.option('--dry-run', 'preview changes without applying them')
|
|
47
61
|
.option('--force', 'overwrite existing files')
|
|
48
62
|
.option('--conflicts <strategy>', 'conflict handling strategy: keep-both, overwrite, skip, or ask')
|
|
@@ -53,7 +67,7 @@ export function setupInstallCommand(program) {
|
|
|
53
67
|
.option('--stable', 'prefer the latest stable version when resolving; ignore newer prerelease/WIP versions if a satisfying stable exists')
|
|
54
68
|
.option('--profile <profile>', 'profile to use for authentication')
|
|
55
69
|
.option('--api-key <key>', 'API key for authentication (overrides profile)')
|
|
56
|
-
.action(withErrorHandling(async (packageName,
|
|
70
|
+
.action(withErrorHandling(async (packageName, options) => {
|
|
57
71
|
options.platforms = normalizePlatforms(options.platforms);
|
|
58
72
|
const commandOptions = options;
|
|
59
73
|
const rawConflictStrategy = commandOptions.conflicts ?? options.conflictStrategy;
|
|
@@ -67,7 +81,7 @@ export function setupInstallCommand(program) {
|
|
|
67
81
|
}
|
|
68
82
|
validateResolutionFlags(options);
|
|
69
83
|
options.resolutionMode = determineResolutionMode(options);
|
|
70
|
-
const result = await installCommand(packageName,
|
|
84
|
+
const result = await installCommand(packageName, options);
|
|
71
85
|
if (!result.success) {
|
|
72
86
|
if (result.error === 'Package not found') {
|
|
73
87
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/list.js
CHANGED
|
@@ -4,6 +4,7 @@ import { logger } from '../utils/logger.js';
|
|
|
4
4
|
import { withErrorHandling } from '../utils/errors.js';
|
|
5
5
|
import { displayPackageTable } from '../utils/formatters.js';
|
|
6
6
|
import { arePackageNamesEquivalent } from '../utils/package-name.js';
|
|
7
|
+
import { isUnversionedVersion } from '../utils/package-versioning.js';
|
|
7
8
|
/**
|
|
8
9
|
* List packages command implementation
|
|
9
10
|
*/
|
|
@@ -17,12 +18,17 @@ async function listPackagesCommand(options) {
|
|
|
17
18
|
// When package name is specified, show all versions automatically
|
|
18
19
|
const showAllVersions = options.packageName ? true : options.all;
|
|
19
20
|
const entries = await registryManager.listPackages(filter, showAllVersions);
|
|
21
|
+
const formatVersionDisplay = (version) => (isUnversionedVersion(version) ? 'Unversioned' : (version ?? 'Unversioned'));
|
|
20
22
|
// If a specific package name was provided, filter for exact matches only
|
|
21
23
|
let filteredEntries = entries;
|
|
22
24
|
if (options.packageName) {
|
|
23
25
|
const target = options.packageName;
|
|
24
26
|
filteredEntries = entries.filter(entry => arePackageNamesEquivalent(entry.name, target));
|
|
25
27
|
}
|
|
28
|
+
const displayEntries = filteredEntries.map(entry => ({
|
|
29
|
+
...entry,
|
|
30
|
+
version: formatVersionDisplay(entry.version)
|
|
31
|
+
}));
|
|
26
32
|
if (filteredEntries.length === 0) {
|
|
27
33
|
if (options.packageName) {
|
|
28
34
|
console.log(`Package not found: ${options.packageName}`);
|
|
@@ -37,11 +43,11 @@ async function listPackagesCommand(options) {
|
|
|
37
43
|
}
|
|
38
44
|
// Display results
|
|
39
45
|
if (options.format === 'json') {
|
|
40
|
-
console.log(JSON.stringify(
|
|
46
|
+
console.log(JSON.stringify(displayEntries, null, 2));
|
|
41
47
|
}
|
|
42
48
|
else {
|
|
43
49
|
// Table format using shared formatter
|
|
44
|
-
const tableEntries =
|
|
50
|
+
const tableEntries = displayEntries.map(entry => ({
|
|
45
51
|
name: entry.name,
|
|
46
52
|
version: entry.version,
|
|
47
53
|
description: entry.description
|
|
@@ -57,7 +63,7 @@ async function listPackagesCommand(options) {
|
|
|
57
63
|
}
|
|
58
64
|
return {
|
|
59
65
|
success: true,
|
|
60
|
-
data:
|
|
66
|
+
data: displayEntries
|
|
61
67
|
};
|
|
62
68
|
}
|
|
63
69
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAqB,MAAM,wBAAwB,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { withErrorHandling } from '../utils/errors.js';
|
|
2
|
+
import { authManager } from '../core/auth.js';
|
|
3
|
+
import { startDeviceAuthorization, pollForDeviceToken, persistTokens, openBrowser, } from '../core/device-auth.js';
|
|
4
|
+
import { profileManager } from '../core/profiles.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
import { getCurrentUsername } from '../core/api-keys.js';
|
|
7
|
+
export function setupLoginCommand(program) {
|
|
8
|
+
program
|
|
9
|
+
.command('login')
|
|
10
|
+
.description('Authenticate with OpenPackage using the device authorization flow')
|
|
11
|
+
.option('--profile <profile>', 'profile to use for authentication')
|
|
12
|
+
.action(withErrorHandling(async (options) => {
|
|
13
|
+
const profileName = authManager.getCurrentProfile({
|
|
14
|
+
profile: options.profile,
|
|
15
|
+
});
|
|
16
|
+
console.log(`Using profile: ${profileName}`);
|
|
17
|
+
const authorization = await startDeviceAuthorization();
|
|
18
|
+
console.log('A browser will open for you to confirm sign-in.');
|
|
19
|
+
console.log(`User code: ${authorization.userCode}`);
|
|
20
|
+
console.log(`Verification URL: ${authorization.verificationUri}`);
|
|
21
|
+
console.log('');
|
|
22
|
+
console.log('If the browser does not open, visit the URL and enter the code above.');
|
|
23
|
+
openBrowser(authorization.verificationUriComplete);
|
|
24
|
+
try {
|
|
25
|
+
const tokens = await pollForDeviceToken({
|
|
26
|
+
deviceCode: authorization.deviceCode,
|
|
27
|
+
intervalSeconds: authorization.interval,
|
|
28
|
+
expiresInSeconds: authorization.expiresIn,
|
|
29
|
+
});
|
|
30
|
+
await persistTokens(profileName, tokens);
|
|
31
|
+
const username = tokens.username ?? (await resolveUsername(profileName));
|
|
32
|
+
if (username) {
|
|
33
|
+
await profileManager.setProfileDefaultScope(profileName, `@${username}`);
|
|
34
|
+
console.log(`✓ Default scope set to @${username} for profile "${profileName}".`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
logger.debug('Could not derive username from API key; default scope not set');
|
|
38
|
+
}
|
|
39
|
+
console.log('');
|
|
40
|
+
console.log('✓ Login successful.');
|
|
41
|
+
console.log(`✓ API key stored for profile "${profileName}".`);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
logger.debug('Device login failed', { error });
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
async function resolveUsername(profileName) {
|
|
50
|
+
try {
|
|
51
|
+
return await getCurrentUsername({ profile: profileName });
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
logger.debug('Unable to resolve username from API key', { error });
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=login.js.map
|