create-threadlens-app 0.2.1 → 0.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.2 - 2026-05-21
4
+
5
+ Tag: `create-threadlens-app@0.2.2`
6
+
7
+ ### Fixes
8
+
9
+ - fix(create-threadlens-app): surface GHCR pull denial and align default version (`31a125a`)
10
+
3
11
  ## 0.2.1 - 2026-05-21
4
12
 
5
13
  Tag: `create-threadlens-app@0.2.1`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-threadlens-app",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "One-command local-first ThreadLens self-host installer",
5
5
  "license": "BUSL-1.1",
6
6
  "type": "module",
package/src/install.js CHANGED
@@ -55,7 +55,11 @@ export async function install(options, deps = {}) {
55
55
  logger.success('Generated .env, compose.yml, README.md, .gitignore, and .threadlens metadata');
56
56
 
57
57
  logger.step('Starting Docker Compose');
58
- await startCompose(manifest, { run, stream: options.verbose });
58
+ try {
59
+ await startCompose(manifest, { run, stream: options.verbose });
60
+ } catch (error) {
61
+ throw classifyComposeStartError(error, manifest);
62
+ }
59
63
  await updateState(appDir, { status: 'starting', lastStartedAt: new Date().toISOString() });
60
64
  logger.success('Docker stack started');
61
65
 
@@ -94,3 +98,16 @@ async function ensureInstallDirectory(appDir) {
94
98
  throw error;
95
99
  }
96
100
  }
101
+
102
+ function classifyComposeStartError(error, manifest) {
103
+ const detail = `${error?.message ?? ''}\n${error?.stderr ?? ''}`.toLowerCase();
104
+ if (detail.includes('ghcr.io') && detail.includes('denied')) {
105
+ return new CliError(
106
+ 'image_pull_denied',
107
+ `Docker could not pull ghcr.io/threadlenshq images for ThreadLens ${manifest.threadlensVersion} (registry denied access). This is usually a missing/publication issue for the image tag or GHCR package visibility.`,
108
+ 11
109
+ );
110
+ }
111
+ if (error instanceof CliError) return error;
112
+ return error;
113
+ }
package/src/manifest.js CHANGED
@@ -4,7 +4,7 @@ import { CliError } from './output.js';
4
4
  import { composeProjectName, safeSlug } from './slug.js';
5
5
 
6
6
  export const MANIFEST_VERSION = 1;
7
- export const DEFAULT_THREADLENS_VERSION = '0.1.0';
7
+ export const DEFAULT_THREADLENS_VERSION = '0.2.1';
8
8
 
9
9
  export function createManifest({ appDir, instanceName, profile, appPort, webPort, apiPort, version = DEFAULT_THREADLENS_VERSION }) {
10
10
  const slug = safeSlug(instanceName);