@promptframe/cli 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,5 @@
1
1
  # @promptframe/cli
2
2
 
3
- Command line tools for PromptFrame component authoring.
4
-
5
- This `0.0.0` release is a placeholder that reserves the package name and trusted publishing route. The first functional release will start at `0.1.0`.
3
+ PromptFrame component authoring CLI.
6
4
 
5
+ Use it to inspect the current public standard, check component folders, validate manifests, package source archives and call platform upload/status/reindex/probe endpoints.
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  #!/usr/bin/env node
2
+ export {};
2
3
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,4 +1,165 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- console.log('@promptframe/cli 0.0.0 placeholder. Functional commands will ship in 0.1.0.');
2
+ import { createHash } from 'node:crypto';
3
+ import { existsSync, readFileSync, statSync } from 'node:fs';
4
+ import { join, resolve } from 'node:path';
5
+ import { spawnSync } from 'node:child_process';
6
+ import { COMPONENT_MANIFEST_SCHEMA_VERSION, COMPONENT_REF_VERSION, COMPONENT_STANDARD_VERSION, PROMPTFRAME_CONTRACTS_VERSION, parseComponentManifest, } from '@promptframe/contracts';
7
+ const command = process.argv[2] ?? 'help';
8
+ const args = process.argv.slice(3);
9
+ class PromptFrameCliError extends Error {
10
+ code;
11
+ exitCode;
12
+ constructor(message, code, exitCode = 1) {
13
+ super(message);
14
+ this.code = code;
15
+ this.exitCode = exitCode;
16
+ }
17
+ }
18
+ try {
19
+ switch (command) {
20
+ case 'standard':
21
+ printJson({
22
+ contractsVersion: PROMPTFRAME_CONTRACTS_VERSION,
23
+ manifestSchemaVersion: COMPONENT_MANIFEST_SCHEMA_VERSION,
24
+ componentStandardVersion: COMPONENT_STANDARD_VERSION,
25
+ componentRefVersion: COMPONENT_REF_VERSION,
26
+ supportedComponentTypes: ['scene_template', 'contained_widget', 'overlay', 'transition_effect'],
27
+ });
28
+ break;
29
+ case 'doctor':
30
+ doctor(args[0] ?? '.');
31
+ break;
32
+ case 'validate':
33
+ validate(args[0] ?? '.');
34
+ break;
35
+ case 'package':
36
+ packageComponent(args);
37
+ break;
38
+ case 'upload':
39
+ case 'status':
40
+ case 'reindex':
41
+ case 'probe':
42
+ remoteCommand(command, args);
43
+ break;
44
+ case 'configure':
45
+ configure(args);
46
+ break;
47
+ case 'help':
48
+ case '--help':
49
+ case '-h':
50
+ help();
51
+ break;
52
+ default:
53
+ fail(`Unknown command: ${command}`, 'cli.command.unknown');
54
+ }
55
+ }
56
+ catch (error) {
57
+ if (error instanceof PromptFrameCliError) {
58
+ console.error(`${error.code}: ${error.message}`);
59
+ process.exit(error.exitCode);
60
+ }
61
+ console.error(error instanceof Error ? error.message : String(error));
62
+ process.exit(1);
63
+ }
64
+ function doctor(componentDir) {
65
+ const dir = resolve(componentDir);
66
+ const required = [
67
+ 'package.json',
68
+ 'manifest.json',
69
+ 'src/Component.tsx',
70
+ 'src/schema.ts',
71
+ 'src/preview-props.json',
72
+ ];
73
+ const missing = required.filter((file) => !existsSync(join(dir, file)));
74
+ if (missing.length > 0) {
75
+ fail(`Missing required files: ${missing.join(', ')}`, 'doctor.required_files.missing');
76
+ }
77
+ console.log(`doctor passed: ${dir}`);
78
+ }
79
+ function validate(componentDir) {
80
+ doctor(componentDir);
81
+ const dir = resolve(componentDir);
82
+ const manifestPath = join(dir, 'manifest.json');
83
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
84
+ parseComponentManifest(normalizeLegacyManifest(manifest));
85
+ checkImportBoundary(dir);
86
+ console.log(`validate passed: ${dir}`);
87
+ }
88
+ function packageComponent(argv) {
89
+ const componentDir = argv[0] ?? '.';
90
+ validate(componentDir);
91
+ const dir = resolve(componentDir);
92
+ const out = valueAfter(argv, '--out') ?? `${dir.replace(/[\\/]$/, '')}.tgz`;
93
+ const result = spawnSync('tar', ['-czf', out, '-C', dir, '.'], { encoding: 'utf8' });
94
+ if (result.status !== 0) {
95
+ fail(result.stderr || 'tar failed while packaging component', 'package.tar.failed');
96
+ }
97
+ const sizeBytes = statSync(out).size;
98
+ const sha256 = createHash('sha256').update(readFileSync(out)).digest('hex');
99
+ printJson({ out, sizeBytes, sha256: `sha256:${sha256}` });
100
+ }
101
+ function remoteCommand(name, argv) {
102
+ const endpoint = valueAfter(argv, '--endpoint') ?? process.env.PROMPTFRAME_API_BASE ?? process.env.REMOTION_MEDIA_API_BASE;
103
+ if (!endpoint) {
104
+ fail(`${name} requires --endpoint, PROMPTFRAME_API_BASE, or REMOTION_MEDIA_API_BASE. No default production endpoint is embedded in the public CLI.`, `${name}.endpoint.missing`, 2);
105
+ }
106
+ printJson({
107
+ command: name,
108
+ endpoint,
109
+ status: 'not_implemented_first_slice',
110
+ diagnostic: `${name}.transport.pending`,
111
+ });
112
+ }
113
+ function configure(argv) {
114
+ const endpoint = valueAfter(argv, '--endpoint');
115
+ if (!endpoint)
116
+ fail('configure requires --endpoint <url>', 'configure.endpoint.missing', 2);
117
+ printJson({
118
+ status: 'not_persisted_first_slice',
119
+ endpoint,
120
+ diagnostic: 'configure.storage.pending',
121
+ });
122
+ }
123
+ function checkImportBoundary(dir) {
124
+ const component = readIfExists(join(dir, 'src/Component.tsx'));
125
+ const schema = readIfExists(join(dir, 'src/schema.ts'));
126
+ const joined = `${component}\n${schema}`;
127
+ if (/\bfrom\s+['"]\.\.\//.test(joined) || /\bimport\s*\(\s*['"]\.\.\//.test(joined)) {
128
+ fail('Component source imports from outside the component directory.', 'package.no_parent_imports');
129
+ }
130
+ }
131
+ function normalizeLegacyManifest(input) {
132
+ if (typeof input.componentType === 'string')
133
+ return input;
134
+ if (input.layer === 'scene_template' || input.category === 'scene_template') {
135
+ return { ...input, componentType: 'scene_template' };
136
+ }
137
+ return input;
138
+ }
139
+ function valueAfter(argv, flag) {
140
+ const index = argv.indexOf(flag);
141
+ if (index < 0)
142
+ return undefined;
143
+ return argv[index + 1];
144
+ }
145
+ function readIfExists(path) {
146
+ return existsSync(path) ? readFileSync(path, 'utf8') : '';
147
+ }
148
+ function printJson(value) {
149
+ console.log(JSON.stringify(value, null, 2));
150
+ }
151
+ function fail(message, code, exitCode = 1) {
152
+ throw new PromptFrameCliError(message, code, exitCode);
153
+ }
154
+ function help() {
155
+ console.log(`PromptFrame CLI
156
+
157
+ Commands:
158
+ standard Print current public component standard versions
159
+ doctor <dir> Check required component files
160
+ validate <dir> Validate manifest and basic source boundaries
161
+ package <dir> --out <tgz> Validate and package a component directory
162
+ upload/status/reindex/probe Endpoint-backed commands; require --endpoint or env
163
+ `);
164
+ }
4
165
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptframe/cli",
3
- "version": "0.0.0",
3
+ "version": "0.1.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "files": [
@@ -37,12 +37,15 @@
37
37
  "homepage": "https://github.com/ty-teams/promptframe-component-authoring#readme",
38
38
  "scripts": {
39
39
  "build": "tsc",
40
- "lint": "tsc --noEmit",
40
+ "lint": "pnpm --filter @promptframe/contracts build && tsc --noEmit",
41
41
  "test": "node -e \"console.log('placeholder test: @promptframe/cli')\"",
42
42
  "clean": "rm -rf dist"
43
43
  },
44
- "dependencies": {},
44
+ "dependencies": {
45
+ "@promptframe/contracts": "^0.1.0"
46
+ },
45
47
  "devDependencies": {
48
+ "@types/node": "^24.12.4",
46
49
  "typescript": "~5.7.0"
47
50
  }
48
51
  }