@ai-dossier/cli 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +147 -25
  2. package/bin/dossier-verify +6 -440
  3. package/dist/cli.js +82 -21
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/cache.d.ts.map +1 -1
  6. package/dist/commands/cache.js.map +1 -1
  7. package/dist/commands/checksum.js.map +1 -1
  8. package/dist/commands/commands.d.ts.map +1 -1
  9. package/dist/commands/commands.js +4 -2
  10. package/dist/commands/commands.js.map +1 -1
  11. package/dist/commands/config-cmd.d.ts.map +1 -1
  12. package/dist/commands/config-cmd.js +229 -69
  13. package/dist/commands/config-cmd.js.map +1 -1
  14. package/dist/commands/create.d.ts.map +1 -1
  15. package/dist/commands/create.js +17 -8
  16. package/dist/commands/create.js.map +1 -1
  17. package/dist/commands/export.d.ts.map +1 -1
  18. package/dist/commands/export.js +24 -8
  19. package/dist/commands/export.js.map +1 -1
  20. package/dist/commands/format.d.ts.map +1 -1
  21. package/dist/commands/format.js.map +1 -1
  22. package/dist/commands/get.d.ts.map +1 -1
  23. package/dist/commands/get.js +18 -6
  24. package/dist/commands/get.js.map +1 -1
  25. package/dist/commands/history.d.ts +6 -0
  26. package/dist/commands/history.d.ts.map +1 -0
  27. package/dist/commands/history.js +80 -0
  28. package/dist/commands/history.js.map +1 -0
  29. package/dist/commands/info.d.ts.map +1 -1
  30. package/dist/commands/info.js +19 -6
  31. package/dist/commands/info.js.map +1 -1
  32. package/dist/commands/install-skill.d.ts.map +1 -1
  33. package/dist/commands/install-skill.js +16 -9
  34. package/dist/commands/install-skill.js.map +1 -1
  35. package/dist/commands/lint.d.ts.map +1 -1
  36. package/dist/commands/lint.js.map +1 -1
  37. package/dist/commands/list.d.ts.map +1 -1
  38. package/dist/commands/list.js +55 -41
  39. package/dist/commands/list.js.map +1 -1
  40. package/dist/commands/login.d.ts.map +1 -1
  41. package/dist/commands/login.js +25 -5
  42. package/dist/commands/login.js.map +1 -1
  43. package/dist/commands/logout.d.ts.map +1 -1
  44. package/dist/commands/logout.js +22 -5
  45. package/dist/commands/logout.js.map +1 -1
  46. package/dist/commands/prompt-hook.d.ts.map +1 -1
  47. package/dist/commands/prompt-hook.js +4 -13
  48. package/dist/commands/prompt-hook.js.map +1 -1
  49. package/dist/commands/publish.d.ts.map +1 -1
  50. package/dist/commands/publish.js +22 -55
  51. package/dist/commands/publish.js.map +1 -1
  52. package/dist/commands/pull.d.ts.map +1 -1
  53. package/dist/commands/pull.js +31 -14
  54. package/dist/commands/pull.js.map +1 -1
  55. package/dist/commands/remove.d.ts.map +1 -1
  56. package/dist/commands/remove.js +17 -43
  57. package/dist/commands/remove.js.map +1 -1
  58. package/dist/commands/reset-hooks.js +1 -1
  59. package/dist/commands/reset-hooks.js.map +1 -1
  60. package/dist/commands/run.d.ts.map +1 -1
  61. package/dist/commands/run.js +192 -48
  62. package/dist/commands/run.js.map +1 -1
  63. package/dist/commands/search.d.ts.map +1 -1
  64. package/dist/commands/search.js +33 -29
  65. package/dist/commands/search.js.map +1 -1
  66. package/dist/commands/sign.js.map +1 -1
  67. package/dist/commands/skill-export.d.ts +3 -0
  68. package/dist/commands/skill-export.d.ts.map +1 -0
  69. package/dist/commands/skill-export.js +179 -0
  70. package/dist/commands/skill-export.js.map +1 -0
  71. package/dist/commands/validate.d.ts.map +1 -1
  72. package/dist/commands/validate.js.map +1 -1
  73. package/dist/commands/verify.d.ts.map +1 -1
  74. package/dist/commands/verify.js +1 -8
  75. package/dist/commands/verify.js.map +1 -1
  76. package/dist/commands/whoami.d.ts.map +1 -1
  77. package/dist/commands/whoami.js +108 -25
  78. package/dist/commands/whoami.js.map +1 -1
  79. package/dist/config.d.ts +29 -1
  80. package/dist/config.d.ts.map +1 -1
  81. package/dist/config.js +133 -3
  82. package/dist/config.js.map +1 -1
  83. package/dist/credentials.d.ts +14 -9
  84. package/dist/credentials.d.ts.map +1 -1
  85. package/dist/credentials.js +122 -54
  86. package/dist/credentials.js.map +1 -1
  87. package/dist/help.d.ts +7 -0
  88. package/dist/help.d.ts.map +1 -0
  89. package/dist/help.js +86 -0
  90. package/dist/help.js.map +1 -0
  91. package/dist/helpers.d.ts +10 -10
  92. package/dist/helpers.d.ts.map +1 -1
  93. package/dist/helpers.js +25 -28
  94. package/dist/helpers.js.map +1 -1
  95. package/dist/multi-registry.d.ts +71 -0
  96. package/dist/multi-registry.d.ts.map +1 -0
  97. package/dist/multi-registry.js +136 -0
  98. package/dist/multi-registry.js.map +1 -0
  99. package/dist/registry-client.d.ts +62 -15
  100. package/dist/registry-client.d.ts.map +1 -1
  101. package/dist/registry-client.js +11 -14
  102. package/dist/registry-client.js.map +1 -1
  103. package/dist/run-log.d.ts +37 -0
  104. package/dist/run-log.d.ts.map +1 -0
  105. package/dist/run-log.js +78 -0
  106. package/dist/run-log.js.map +1 -0
  107. package/dist/verify-dossier.d.ts +28 -0
  108. package/dist/verify-dossier.d.ts.map +1 -0
  109. package/dist/verify-dossier.js +329 -0
  110. package/dist/verify-dossier.js.map +1 -0
  111. package/dist/write-auth.d.ts +24 -0
  112. package/dist/write-auth.d.ts.map +1 -0
  113. package/dist/write-auth.js +85 -0
  114. package/dist/write-auth.js.map +1 -0
  115. package/package.json +1 -1
package/dist/config.js CHANGED
@@ -2,20 +2,27 @@
2
2
  /**
3
3
  * Configuration management for Dossier CLI
4
4
  * Handles reading and writing user preferences to ~/.dossier/config.json
5
+ * and multi-registry configuration.
5
6
  */
6
7
  var __importDefault = (this && this.__importDefault) || function (mod) {
7
8
  return (mod && mod.__esModule) ? mod : { "default": mod };
8
9
  };
9
10
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.DEFAULT_CONFIG = exports.CONFIG_FILE = exports.CONFIG_DIR = void 0;
11
+ exports.DEFAULT_REGISTRY_URL = exports.DEFAULT_CONFIG = exports.CONFIG_FILE = exports.CONFIG_DIR = void 0;
11
12
  exports.ensureConfigDir = ensureConfigDir;
12
13
  exports.loadConfig = loadConfig;
13
14
  exports.saveConfig = saveConfig;
14
15
  exports.getConfig = getConfig;
15
16
  exports.setConfig = setConfig;
17
+ exports.loadProjectConfig = loadProjectConfig;
18
+ exports.resolveRegistries = resolveRegistries;
19
+ exports.resolveWriteRegistry = resolveWriteRegistry;
20
+ exports.resolveRegistryByName = resolveRegistryByName;
16
21
  const node_fs_1 = __importDefault(require("node:fs"));
17
22
  const node_os_1 = __importDefault(require("node:os"));
18
23
  const node_path_1 = __importDefault(require("node:path"));
24
+ const DEFAULT_REGISTRY_URL = 'https://dossier-registry.vercel.app';
25
+ exports.DEFAULT_REGISTRY_URL = DEFAULT_REGISTRY_URL;
19
26
  const CONFIG_DIR = node_path_1.default.join(node_os_1.default.homedir(), '.dossier');
20
27
  exports.CONFIG_DIR = CONFIG_DIR;
21
28
  const CONFIG_FILE = node_path_1.default.join(CONFIG_DIR, 'config.json');
@@ -47,8 +54,8 @@ function loadConfig() {
47
54
  // Merge with defaults to ensure all keys exist
48
55
  return { ...DEFAULT_CONFIG, ...config };
49
56
  }
50
- catch (_error) {
51
- console.error('⚠️ Warning: Could not read config file, using defaults');
57
+ catch (error) {
58
+ console.error(`⚠️ Warning: Could not read config file (${error.message}), using defaults`);
52
59
  return { ...DEFAULT_CONFIG };
53
60
  }
54
61
  }
@@ -84,4 +91,127 @@ function setConfig(key, value) {
84
91
  config[key] = value;
85
92
  return saveConfig(config);
86
93
  }
94
+ /**
95
+ * Load project-level .dossierrc.json by walking up from cwd.
96
+ */
97
+ function loadProjectConfig() {
98
+ let dir = process.cwd();
99
+ const root = node_path_1.default.parse(dir).root;
100
+ while (dir !== root) {
101
+ const rcFile = node_path_1.default.join(dir, '.dossierrc.json');
102
+ if (node_fs_1.default.existsSync(rcFile)) {
103
+ try {
104
+ return JSON.parse(node_fs_1.default.readFileSync(rcFile, 'utf8'));
105
+ }
106
+ catch {
107
+ console.error(`⚠️ Warning: Invalid .dossierrc.json at ${rcFile}`);
108
+ return null;
109
+ }
110
+ }
111
+ dir = node_path_1.default.dirname(dir);
112
+ }
113
+ return null;
114
+ }
115
+ /**
116
+ * Resolve all configured registries, merging user + project config.
117
+ * Resolution priority:
118
+ * 1. CLI --registry flag (handled by caller)
119
+ * 2. DOSSIER_REGISTRY_URL env var → virtual "env" registry
120
+ * 3. Project-level .dossierrc.json
121
+ * 4. User-level ~/.dossier/config.json
122
+ * 5. Hardcoded default (public registry)
123
+ */
124
+ /**
125
+ * Internal: resolve registries from pre-loaded configs (avoids redundant file reads).
126
+ */
127
+ function resolveRegistriesFromConfig(userConfig, projectConfig) {
128
+ // Merge registries: project overlays user (project wins on name conflicts)
129
+ const merged = {};
130
+ if (userConfig.registries) {
131
+ for (const [name, entry] of Object.entries(userConfig.registries)) {
132
+ merged[name] = entry;
133
+ }
134
+ }
135
+ if (projectConfig?.registries) {
136
+ for (const [name, entry] of Object.entries(projectConfig.registries)) {
137
+ if (name in merged) {
138
+ // Project config cannot override user-configured registries (credential exfiltration vector)
139
+ continue;
140
+ }
141
+ merged[name] = entry;
142
+ }
143
+ }
144
+ // DOSSIER_REGISTRY_URL env var creates a virtual "env" registry
145
+ const envUrl = process.env.DOSSIER_REGISTRY_URL;
146
+ if (envUrl) {
147
+ merged.env = { url: envUrl };
148
+ }
149
+ // If no registries configured at all, use hardcoded default
150
+ if (Object.keys(merged).length === 0) {
151
+ return [{ name: 'public', url: DEFAULT_REGISTRY_URL }];
152
+ }
153
+ return Object.entries(merged).map(([name, entry]) => ({
154
+ name,
155
+ url: entry.url,
156
+ readonly: entry.readonly,
157
+ }));
158
+ }
159
+ function resolveRegistries() {
160
+ return resolveRegistriesFromConfig(loadConfig(), loadProjectConfig());
161
+ }
162
+ /**
163
+ * Resolve which single registry to use for write operations.
164
+ * Priority: --registry flag > defaultRegistry (project > user) > first registry
165
+ */
166
+ function resolveWriteRegistry(registryFlag) {
167
+ const userConfig = loadConfig();
168
+ const projectConfig = loadProjectConfig();
169
+ const registries = resolveRegistriesFromConfig(userConfig, projectConfig);
170
+ if (registryFlag) {
171
+ const found = registries.find((r) => r.name === registryFlag);
172
+ if (!found) {
173
+ const names = registries.map((r) => r.name).join(', ');
174
+ throw new Error(`Registry '${registryFlag}' not found. Available: ${names}. Run 'dossier config --list-registries' to see configured registries.`);
175
+ }
176
+ if (found.readonly) {
177
+ throw new Error(`Registry '${registryFlag}' is read-only`);
178
+ }
179
+ return found;
180
+ }
181
+ const defaultName = projectConfig?.defaultRegistry || userConfig.defaultRegistry;
182
+ if (defaultName) {
183
+ const found = registries.find((r) => r.name === defaultName);
184
+ if (found) {
185
+ if (found.readonly) {
186
+ throw new Error(`Default registry '${defaultName}' is read-only`);
187
+ }
188
+ return found;
189
+ }
190
+ }
191
+ // Find first registry marked as default
192
+ for (const reg of registries) {
193
+ const allConfigs = { ...userConfig.registries, ...projectConfig?.registries };
194
+ const entry = allConfigs[reg.name];
195
+ if (entry?.default && !reg.readonly) {
196
+ return reg;
197
+ }
198
+ }
199
+ // Fall back to first non-readonly registry
200
+ const writable = registries.find((r) => !r.readonly);
201
+ if (writable)
202
+ return writable;
203
+ throw new Error('No writable registry configured. All registries are read-only.');
204
+ }
205
+ /**
206
+ * Resolve a single registry by name (for auth commands).
207
+ */
208
+ function resolveRegistryByName(name) {
209
+ const registries = resolveRegistries();
210
+ const found = registries.find((r) => r.name === name);
211
+ if (!found) {
212
+ const names = registries.map((r) => r.name).join(', ');
213
+ throw new Error(`Registry '${name}' not found. Available: ${names}`);
214
+ }
215
+ return found;
216
+ }
87
217
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAsFD,0CAAe;AACf,gCAAU;AACV,gCAAU;AACV,8BAAS;AACT,8BAAS;AAxFX,sDAAyB;AACzB,sDAAyB;AACzB,0DAA6B;AAS7B,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,iBAAE,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAC;AA8ErD,gCAAU;AA7EZ,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AA8EvD,kCAAW;AA5Eb,MAAM,cAAc,GAAkB;IACpC,UAAU,EAAE,MAAM;IAClB,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,IAAI;CACf,CAAC;AAyEA,wCAAc;AAvEhB;;GAEG;AACH,SAAS,eAAe;IACtB,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,iBAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;QAC/B,CAAC;QAED,MAAM,UAAU,GAAG,iBAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAEtC,+CAA+C;QAC/C,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IAC1C,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;QACzE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,MAAqB;IACvC,IAAI,CAAC;QACH,eAAe,EAAE,CAAC;QAClB,iBAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC7D,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAChF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,GAAW;IAC5B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,GAAW,EAAE,KAAc;IAC5C,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACpB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Credential storage for Dossier registry authentication.
3
- * Stores credentials at ~/.dossier/credentials.json with secure file permissions.
3
+ * Stores per-registry credentials at ~/.dossier/credentials.json with secure file permissions.
4
+ * Auto-migrates old flat format to keyed-by-registry format.
4
5
  */
5
6
  export interface Credentials {
6
7
  token: string;
@@ -10,21 +11,25 @@ export interface Credentials {
10
11
  }
11
12
  declare const CREDENTIALS_FILE: string;
12
13
  /**
13
- * Save credentials to file with secure permissions (0600).
14
+ * Save credentials for a specific registry.
14
15
  */
15
- declare function saveCredentials(credentials: Credentials): void;
16
+ declare function saveCredentials(credentials: Credentials, registryName?: string): void;
16
17
  /**
17
- * Load credentials from file or DOSSIER_REGISTRY_TOKEN env var.
18
- * The env var takes precedence when set.
18
+ * Load credentials for a specific registry.
19
+ * Falls back to "public" for backward compatibility.
19
20
  */
20
- declare function loadCredentials(): Credentials | null;
21
+ declare function loadCredentials(registryName?: string): Credentials | null;
21
22
  /**
22
- * Delete the credentials file.
23
+ * Delete credentials for a specific registry, or all if no name given.
23
24
  */
24
- declare function deleteCredentials(): boolean;
25
+ declare function deleteCredentials(registryName?: string): boolean;
25
26
  /**
26
27
  * Check if credentials are expired.
27
28
  */
28
29
  declare function isExpired(credentials: Pick<Credentials, 'expiresAt'>): boolean;
29
- export { CREDENTIALS_FILE, saveCredentials, loadCredentials, deleteCredentials, isExpired };
30
+ /**
31
+ * List all registries that have stored credentials.
32
+ */
33
+ declare function listCredentialRegistries(): string[];
34
+ export { CREDENTIALS_FILE, saveCredentials, loadCredentials, deleteCredentials, isExpired, listCredentialRegistries, };
30
35
  //# sourceMappingURL=credentials.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,QAAA,MAAM,gBAAgB,QAA4C,CAAC;AAWnE;;GAEG;AACH,iBAAS,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CASvD;AAED;;;GAGG;AACH,iBAAS,eAAe,IAAI,WAAW,GAAG,IAAI,CAwC7C;AAED;;GAEG;AACH,iBAAS,iBAAiB,IAAI,OAAO,CAMpC;AAED;;GAEG;AACH,iBAAS,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,OAAO,CAUvE;AAED,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,CAAC"}
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAID,QAAA,MAAM,gBAAgB,QAA4C,CAAC;AA8GnE;;GAEG;AACH,iBAAS,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,SAAW,GAAG,IAAI,CAIhF;AAED;;;GAGG;AACH,iBAAS,eAAe,CAAC,YAAY,SAAW,GAAG,WAAW,GAAG,IAAI,CAGpE;AAED;;GAEG;AACH,iBAAS,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAiBzD;AAED;;GAEG;AACH,iBAAS,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,GAAG,OAAO,CASvE;AAED;;GAEG;AACH,iBAAS,wBAAwB,IAAI,MAAM,EAAE,CAG5C;AAED,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,wBAAwB,GACzB,CAAC"}
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  /**
3
3
  * Credential storage for Dossier registry authentication.
4
- * Stores credentials at ~/.dossier/credentials.json with secure file permissions.
4
+ * Stores per-registry credentials at ~/.dossier/credentials.json with secure file permissions.
5
+ * Auto-migrates old flat format to keyed-by-registry format.
5
6
  */
6
7
  var __importDefault = (this && this.__importDefault) || function (mod) {
7
8
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -12,83 +13,145 @@ exports.saveCredentials = saveCredentials;
12
13
  exports.loadCredentials = loadCredentials;
13
14
  exports.deleteCredentials = deleteCredentials;
14
15
  exports.isExpired = isExpired;
16
+ exports.listCredentialRegistries = listCredentialRegistries;
15
17
  const node_fs_1 = __importDefault(require("node:fs"));
16
18
  const node_path_1 = __importDefault(require("node:path"));
17
19
  const config_1 = require("./config");
18
20
  const CREDENTIALS_FILE = node_path_1.default.join(config_1.CONFIG_DIR, 'credentials.json');
19
21
  exports.CREDENTIALS_FILE = CREDENTIALS_FILE;
20
22
  /**
21
- * Ensure the config directory exists.
23
+ * Read and parse the credentials file, returning the raw JSON.
22
24
  */
23
- function ensureConfigDir() {
24
- if (!node_fs_1.default.existsSync(config_1.CONFIG_DIR)) {
25
- node_fs_1.default.mkdirSync(config_1.CONFIG_DIR, { recursive: true, mode: 0o700 });
25
+ function readCredentialsFile() {
26
+ if (!node_fs_1.default.existsSync(CREDENTIALS_FILE)) {
27
+ return null;
28
+ }
29
+ try {
30
+ // Verify file permissions haven't been loosened
31
+ const stats = node_fs_1.default.statSync(CREDENTIALS_FILE);
32
+ const otherPerms = stats.mode & 0o077;
33
+ if (otherPerms !== 0) {
34
+ console.error(`⚠️ Warning: ${CREDENTIALS_FILE} has insecure permissions (${(stats.mode & 0o777).toString(8)}). ` +
35
+ `Expected 0600. Credentials may have been compromised. Fixing permissions.`);
36
+ node_fs_1.default.chmodSync(CREDENTIALS_FILE, 0o600);
37
+ }
38
+ return JSON.parse(node_fs_1.default.readFileSync(CREDENTIALS_FILE, 'utf8'));
39
+ }
40
+ catch (error) {
41
+ console.error(`⚠️ Warning: Could not parse credentials file ${CREDENTIALS_FILE} (${error.message})`);
42
+ return null;
26
43
  }
27
44
  }
28
45
  /**
29
- * Save credentials to file with secure permissions (0600).
46
+ * Detect whether the credentials file uses old flat format.
47
+ * Old format has `token` and `username` at the top level.
30
48
  */
31
- function saveCredentials(credentials) {
32
- ensureConfigDir();
33
- const data = {
34
- token: credentials.token,
35
- username: credentials.username,
36
- orgs: credentials.orgs || [],
37
- expires_at: credentials.expiresAt || null,
38
- };
39
- node_fs_1.default.writeFileSync(CREDENTIALS_FILE, JSON.stringify(data, null, 2), { mode: 0o600 });
49
+ function isOldFormat(data) {
50
+ return typeof data.token === 'string' && typeof data.username === 'string';
40
51
  }
41
52
  /**
42
- * Load credentials from file or DOSSIER_REGISTRY_TOKEN env var.
43
- * The env var takes precedence when set.
53
+ * Load the full credentials store, auto-migrating old format if needed.
44
54
  */
45
- function loadCredentials() {
55
+ function loadCredentialsStore() {
56
+ // Check env var first — creates virtual credentials for "env" registry
46
57
  const envToken = process.env.DOSSIER_REGISTRY_TOKEN;
58
+ const raw = readCredentialsFile();
59
+ const store = {};
60
+ if (raw) {
61
+ if (isOldFormat(raw)) {
62
+ // Auto-migrate: flat → keyed by "public"
63
+ store.public = {
64
+ token: raw.token,
65
+ username: raw.username,
66
+ orgs: raw.orgs || [],
67
+ expiresAt: raw.expires_at || null,
68
+ };
69
+ // Write back migrated format
70
+ saveCredentialsStore(store);
71
+ }
72
+ else {
73
+ // New format: each key is a registry name
74
+ for (const [name, value] of Object.entries(raw)) {
75
+ const entry = value;
76
+ if (entry && typeof entry.token === 'string' && typeof entry.username === 'string') {
77
+ store[name] = {
78
+ token: entry.token,
79
+ username: entry.username,
80
+ orgs: entry.orgs || [],
81
+ expiresAt: entry.expires_at || entry.expiresAt || null,
82
+ };
83
+ }
84
+ }
85
+ }
86
+ }
47
87
  if (envToken) {
48
- return {
88
+ store.env = {
49
89
  token: envToken,
50
90
  username: process.env.DOSSIER_REGISTRY_USER || 'token-auth',
51
91
  orgs: process.env.DOSSIER_REGISTRY_ORGS ? process.env.DOSSIER_REGISTRY_ORGS.split(',') : [],
52
92
  expiresAt: null,
53
93
  };
54
94
  }
55
- if (!node_fs_1.default.existsSync(CREDENTIALS_FILE)) {
56
- return null;
95
+ return store;
96
+ }
97
+ /**
98
+ * Save the full credentials store to file.
99
+ */
100
+ function saveCredentialsStore(store) {
101
+ (0, config_1.ensureConfigDir)();
102
+ const data = {};
103
+ for (const [name, creds] of Object.entries(store)) {
104
+ if (name === 'env')
105
+ continue; // Don't persist env-var credentials
106
+ data[name] = {
107
+ token: creds.token,
108
+ username: creds.username,
109
+ orgs: creds.orgs || [],
110
+ expires_at: creds.expiresAt || null,
111
+ };
57
112
  }
58
113
  try {
59
- // Verify file permissions haven't been loosened
60
- const stats = node_fs_1.default.statSync(CREDENTIALS_FILE);
61
- const otherPerms = stats.mode & 0o077;
62
- if (otherPerms !== 0) {
63
- console.error(`⚠️ Warning: ${CREDENTIALS_FILE} has insecure permissions (${(stats.mode & 0o777).toString(8)}). ` +
64
- `Expected 0600. Credentials may have been compromised. Fixing permissions.`);
65
- node_fs_1.default.chmodSync(CREDENTIALS_FILE, 0o600);
66
- }
67
- const raw = node_fs_1.default.readFileSync(CREDENTIALS_FILE, 'utf8');
68
- const data = JSON.parse(raw);
69
- if (!data.token || !data.username) {
70
- return null;
71
- }
72
- return {
73
- token: data.token,
74
- username: data.username,
75
- orgs: data.orgs || [],
76
- expiresAt: data.expires_at || null,
77
- };
114
+ node_fs_1.default.writeFileSync(CREDENTIALS_FILE, JSON.stringify(data, null, 2), { mode: 0o600 });
78
115
  }
79
- catch {
80
- return null;
116
+ catch (error) {
117
+ throw new Error(`Failed to save credentials to ${CREDENTIALS_FILE}: ${error.message}`);
81
118
  }
82
119
  }
83
120
  /**
84
- * Delete the credentials file.
121
+ * Save credentials for a specific registry.
85
122
  */
86
- function deleteCredentials() {
87
- if (node_fs_1.default.existsSync(CREDENTIALS_FILE)) {
88
- node_fs_1.default.unlinkSync(CREDENTIALS_FILE);
89
- return true;
123
+ function saveCredentials(credentials, registryName = 'public') {
124
+ const store = loadCredentialsStore();
125
+ store[registryName] = credentials;
126
+ saveCredentialsStore(store);
127
+ }
128
+ /**
129
+ * Load credentials for a specific registry.
130
+ * Falls back to "public" for backward compatibility.
131
+ */
132
+ function loadCredentials(registryName = 'public') {
133
+ const store = loadCredentialsStore();
134
+ return store[registryName] || null;
135
+ }
136
+ /**
137
+ * Delete credentials for a specific registry, or all if no name given.
138
+ */
139
+ function deleteCredentials(registryName) {
140
+ if (!registryName) {
141
+ // Delete entire file (backward compat)
142
+ if (node_fs_1.default.existsSync(CREDENTIALS_FILE)) {
143
+ node_fs_1.default.unlinkSync(CREDENTIALS_FILE);
144
+ return true;
145
+ }
146
+ return false;
90
147
  }
91
- return false;
148
+ const store = loadCredentialsStore();
149
+ if (!(registryName in store)) {
150
+ return false;
151
+ }
152
+ delete store[registryName];
153
+ saveCredentialsStore(store);
154
+ return true;
92
155
  }
93
156
  /**
94
157
  * Check if credentials are expired.
@@ -97,12 +160,17 @@ function isExpired(credentials) {
97
160
  if (!credentials.expiresAt) {
98
161
  return false;
99
162
  }
100
- try {
101
- const expires = new Date(credentials.expiresAt);
102
- return Date.now() > expires.getTime();
103
- }
104
- catch {
105
- return false;
163
+ const expires = new Date(credentials.expiresAt);
164
+ if (Number.isNaN(expires.getTime())) {
165
+ return true;
106
166
  }
167
+ return Date.now() > expires.getTime();
168
+ }
169
+ /**
170
+ * List all registries that have stored credentials.
171
+ */
172
+ function listCredentialRegistries() {
173
+ const store = loadCredentialsStore();
174
+ return Object.keys(store);
107
175
  }
108
176
  //# sourceMappingURL=credentials.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
package/dist/help.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Custom grouped help formatter for Commander.
3
+ * Groups commands by category instead of a flat list.
4
+ */
5
+ import type { Command, Help } from 'commander';
6
+ export declare function formatHelpGrouped(cmd: Command, helper: Help): string;
7
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAc/C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM,CA4EpE"}
package/dist/help.js ADDED
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ /**
3
+ * Custom grouped help formatter for Commander.
4
+ * Groups commands by category instead of a flat list.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.formatHelpGrouped = formatHelpGrouped;
8
+ const CATEGORIES = [
9
+ { name: 'Getting Started', commands: ['init', 'create', 'from-file'] },
10
+ { name: 'Verify & Run', commands: ['verify', 'run', 'validate', 'lint', 'format'] },
11
+ {
12
+ name: 'Registry',
13
+ commands: ['search', 'list', 'info', 'get', 'pull', 'export', 'publish', 'remove'],
14
+ },
15
+ { name: 'Skills', commands: ['install-skill', 'skill-export'] },
16
+ { name: 'Security', commands: ['sign', 'checksum', 'keys'] },
17
+ { name: 'Auth & Config', commands: ['login', 'logout', 'whoami', 'config', 'cache'] },
18
+ ];
19
+ function formatHelpGrouped(cmd, helper) {
20
+ const termWidth = helper.padWidth(cmd, helper);
21
+ const helpWidth = helper.helpWidth || 80;
22
+ const itemIndentWidth = 2;
23
+ const itemSeparatorWidth = 2;
24
+ function formatItem(term, description) {
25
+ if (description) {
26
+ const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;
27
+ return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth);
28
+ }
29
+ return term;
30
+ }
31
+ function formatList(items) {
32
+ return items.join('\n').replace(/^/gm, ' '.repeat(itemIndentWidth));
33
+ }
34
+ let output = '';
35
+ // Usage
36
+ output += `Usage: ${helper.commandUsage(cmd)}\n\n`;
37
+ // Description
38
+ const desc = helper.commandDescription(cmd);
39
+ if (desc) {
40
+ output += `${desc}\n\n`;
41
+ }
42
+ // Build command map from visible commands
43
+ const visibleCommands = helper.visibleCommands(cmd);
44
+ const commandMap = new Map();
45
+ for (const sub of visibleCommands) {
46
+ commandMap.set(sub.name(), sub);
47
+ }
48
+ // Grouped commands by category
49
+ const categorized = new Set();
50
+ for (const category of CATEGORIES) {
51
+ const items = [];
52
+ for (const name of category.commands) {
53
+ const sub = commandMap.get(name);
54
+ if (sub) {
55
+ items.push(formatItem(helper.subcommandTerm(sub), helper.subcommandDescription(sub)));
56
+ categorized.add(name);
57
+ }
58
+ }
59
+ if (items.length > 0) {
60
+ output += `${category.name}:\n`;
61
+ output += `${formatList(items)}\n\n`;
62
+ }
63
+ }
64
+ // "Other" catch-all for uncategorized visible commands (e.g. help)
65
+ const otherItems = [];
66
+ for (const sub of visibleCommands) {
67
+ if (!categorized.has(sub.name())) {
68
+ otherItems.push(formatItem(helper.subcommandTerm(sub), helper.subcommandDescription(sub)));
69
+ }
70
+ }
71
+ if (otherItems.length > 0) {
72
+ output += 'Other:\n';
73
+ output += `${formatList(otherItems)}\n\n`;
74
+ }
75
+ // Options
76
+ const optionItems = [];
77
+ for (const opt of helper.visibleOptions(cmd)) {
78
+ optionItems.push(formatItem(helper.optionTerm(opt), helper.optionDescription(opt)));
79
+ }
80
+ if (optionItems.length > 0) {
81
+ output += 'Options:\n';
82
+ output += `${formatList(optionItems)}\n\n`;
83
+ }
84
+ return output;
85
+ }
86
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"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"}
package/dist/helpers.d.ts CHANGED
@@ -7,28 +7,20 @@ import { RECOMMENDED_FIELDS, REQUIRED_FIELDS, VALID_RISK_LEVELS, VALID_STATUSES
7
7
  export declare const CLI_ROOT: string;
8
8
  /** The bin/ directory */
9
9
  export declare const BIN_DIR: string;
10
- /** Repository root (parent of cli/) */
11
- export declare const REPO_ROOT: string;
12
10
  /** Official KMS keys that require CI/CD signing (not direct CLI use) */
13
11
  export declare const OFFICIAL_KMS_KEYS: string[];
14
12
  export { RECOMMENDED_FIELDS, REQUIRED_FIELDS, VALID_RISK_LEVELS, VALID_STATUSES };
15
13
  export interface VerificationOptions {
16
14
  skipChecksum?: boolean;
17
15
  skipAllChecks?: boolean;
18
- skipAuthorCheck?: boolean;
19
- skipDossierCheck?: boolean;
20
- skipRiskAssessment?: boolean;
21
- skipReview?: boolean;
22
16
  force?: boolean;
23
17
  noPrompt?: boolean;
24
- reviewDossier?: string;
25
18
  }
26
19
  export interface VerificationStage {
27
20
  stage: number;
28
21
  name: string;
29
22
  passed?: boolean;
30
23
  skipped?: boolean;
31
- demo?: boolean;
32
24
  }
33
25
  export interface VerificationResult {
34
26
  passed: boolean;
@@ -129,11 +121,19 @@ export declare function parseDossierMetadataFromContent(content: string, filePat
129
121
  */
130
122
  export declare function parseDossierMetadataLocal(filePath: string): DossierMetadata;
131
123
  /**
132
- * Verify a dossier file using the verify script (quick check).
124
+ * Verify a dossier file (quick check using the TS module directly).
133
125
  */
134
- export declare function verifyDossierQuick(filePath: string): boolean;
126
+ export declare function verifyDossierQuick(filePath: string): Promise<boolean>;
135
127
  /**
136
128
  * Format output as table.
137
129
  */
138
130
  export declare function formatTable(dossiers: DossierMetadata[], showPath?: boolean): string;
131
+ /**
132
+ * Print registry errors to stderr in a consistent format.
133
+ * Used across commands when multi-registry lookups partially or fully fail.
134
+ */
135
+ export declare function printRegistryErrors(errors: ReadonlyArray<{
136
+ registry: string;
137
+ error: string;
138
+ }>, style?: 'indent' | 'warning'): void;
139
139
  //# sourceMappingURL=helpers.d.ts.map