@tiangong-lca/cli 0.0.1

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 (96) hide show
  1. package/README.md +368 -0
  2. package/bin/tiangong.d.ts +1 -0
  3. package/bin/tiangong.js +32 -0
  4. package/dist/scripts/assert-full-coverage.js +77 -0
  5. package/dist/scripts/assert-full-coverage.js.map +1 -0
  6. package/dist/src/cli.js +2740 -0
  7. package/dist/src/cli.js.map +1 -0
  8. package/dist/src/lib/artifacts.js +86 -0
  9. package/dist/src/lib/artifacts.js.map +1 -0
  10. package/dist/src/lib/dotenv.js +36 -0
  11. package/dist/src/lib/dotenv.js.map +1 -0
  12. package/dist/src/lib/env.js +139 -0
  13. package/dist/src/lib/env.js.map +1 -0
  14. package/dist/src/lib/errors.js +38 -0
  15. package/dist/src/lib/errors.js.map +1 -0
  16. package/dist/src/lib/flow-build-alias-map.js +299 -0
  17. package/dist/src/lib/flow-build-alias-map.js.map +1 -0
  18. package/dist/src/lib/flow-get.js +81 -0
  19. package/dist/src/lib/flow-get.js.map +1 -0
  20. package/dist/src/lib/flow-governance.js +164 -0
  21. package/dist/src/lib/flow-governance.js.map +1 -0
  22. package/dist/src/lib/flow-list.js +187 -0
  23. package/dist/src/lib/flow-list.js.map +1 -0
  24. package/dist/src/lib/flow-publish-reviewed-data.js +808 -0
  25. package/dist/src/lib/flow-publish-reviewed-data.js.map +1 -0
  26. package/dist/src/lib/flow-publish-version.js +541 -0
  27. package/dist/src/lib/flow-publish-version.js.map +1 -0
  28. package/dist/src/lib/flow-read.js +310 -0
  29. package/dist/src/lib/flow-read.js.map +1 -0
  30. package/dist/src/lib/flow-regen-product.js +1396 -0
  31. package/dist/src/lib/flow-regen-product.js.map +1 -0
  32. package/dist/src/lib/flow-remediate.js +821 -0
  33. package/dist/src/lib/flow-remediate.js.map +1 -0
  34. package/dist/src/lib/http.js +45 -0
  35. package/dist/src/lib/http.js.map +1 -0
  36. package/dist/src/lib/io.js +30 -0
  37. package/dist/src/lib/io.js.map +1 -0
  38. package/dist/src/lib/kb-search.js +83 -0
  39. package/dist/src/lib/kb-search.js.map +1 -0
  40. package/dist/src/lib/lifecyclemodel-auto-build.js +1328 -0
  41. package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -0
  42. package/dist/src/lib/lifecyclemodel-orchestrate.js +1556 -0
  43. package/dist/src/lib/lifecyclemodel-orchestrate.js.map +1 -0
  44. package/dist/src/lib/lifecyclemodel-publish-build.js +296 -0
  45. package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -0
  46. package/dist/src/lib/lifecyclemodel-publish-resulting-process.js +101 -0
  47. package/dist/src/lib/lifecyclemodel-publish-resulting-process.js.map +1 -0
  48. package/dist/src/lib/lifecyclemodel-resulting-process.js +1152 -0
  49. package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -0
  50. package/dist/src/lib/lifecyclemodel-validate-build.js +238 -0
  51. package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -0
  52. package/dist/src/lib/llm.js +383 -0
  53. package/dist/src/lib/llm.js.map +1 -0
  54. package/dist/src/lib/process-auto-build.js +717 -0
  55. package/dist/src/lib/process-auto-build.js.map +1 -0
  56. package/dist/src/lib/process-batch-build.js +409 -0
  57. package/dist/src/lib/process-batch-build.js.map +1 -0
  58. package/dist/src/lib/process-get.js +66 -0
  59. package/dist/src/lib/process-get.js.map +1 -0
  60. package/dist/src/lib/process-publish-build.js +451 -0
  61. package/dist/src/lib/process-publish-build.js.map +1 -0
  62. package/dist/src/lib/process-resume-build.js +364 -0
  63. package/dist/src/lib/process-resume-build.js.map +1 -0
  64. package/dist/src/lib/publish.js +562 -0
  65. package/dist/src/lib/publish.js.map +1 -0
  66. package/dist/src/lib/remote.js +88 -0
  67. package/dist/src/lib/remote.js.map +1 -0
  68. package/dist/src/lib/review-flow.js +1110 -0
  69. package/dist/src/lib/review-flow.js.map +1 -0
  70. package/dist/src/lib/review-lifecyclemodel.js +727 -0
  71. package/dist/src/lib/review-lifecyclemodel.js.map +1 -0
  72. package/dist/src/lib/review-process.js +702 -0
  73. package/dist/src/lib/review-process.js.map +1 -0
  74. package/dist/src/lib/run.js +106 -0
  75. package/dist/src/lib/run.js.map +1 -0
  76. package/dist/src/lib/state-lock.js +150 -0
  77. package/dist/src/lib/state-lock.js.map +1 -0
  78. package/dist/src/lib/supabase-client.js +269 -0
  79. package/dist/src/lib/supabase-client.js.map +1 -0
  80. package/dist/src/lib/supabase-json-ordered-write.js +186 -0
  81. package/dist/src/lib/supabase-json-ordered-write.js.map +1 -0
  82. package/dist/src/lib/supabase-rest.js +138 -0
  83. package/dist/src/lib/supabase-rest.js.map +1 -0
  84. package/dist/src/lib/supabase-session.js +424 -0
  85. package/dist/src/lib/supabase-session.js.map +1 -0
  86. package/dist/src/lib/tidas-sdk-package-validator.js +493 -0
  87. package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -0
  88. package/dist/src/lib/unstructured.js +203 -0
  89. package/dist/src/lib/unstructured.js.map +1 -0
  90. package/dist/src/lib/user-api-key.js +75 -0
  91. package/dist/src/lib/user-api-key.js.map +1 -0
  92. package/dist/src/lib/validation.js +191 -0
  93. package/dist/src/lib/validation.js.map +1 -0
  94. package/dist/src/main.js +38 -0
  95. package/dist/src/main.js.map +1 -0
  96. package/package.json +81 -0
@@ -0,0 +1,88 @@
1
+ import { CliError } from './errors.js';
2
+ import { readRuntimeEnv } from './env.js';
3
+ import { postJson } from './http.js';
4
+ import { readJsonInput, stringifyJson } from './io.js';
5
+ import { requireSupabaseRestRuntime } from './supabase-client.js';
6
+ import { resolveSupabaseUserSession } from './supabase-session.js';
7
+ const REMOTE_COMMANDS = {
8
+ 'search:flow': {
9
+ endpoint: 'flow_hybrid_search',
10
+ includeRegion: true,
11
+ help: 'tiangong search flow --input ./request.json [--dry-run] [--json]',
12
+ },
13
+ 'search:process': {
14
+ endpoint: 'process_hybrid_search',
15
+ includeRegion: true,
16
+ help: 'tiangong search process --input ./request.json [--dry-run] [--json]',
17
+ },
18
+ 'search:lifecyclemodel': {
19
+ endpoint: 'lifecyclemodel_hybrid_search',
20
+ includeRegion: true,
21
+ help: 'tiangong search lifecyclemodel --input ./request.json [--dry-run] [--json]',
22
+ },
23
+ 'admin:embedding-run': {
24
+ endpoint: 'embedding_ft',
25
+ includeRegion: false,
26
+ help: 'tiangong admin embedding-run --input ./jobs.json [--dry-run] [--json]',
27
+ },
28
+ };
29
+ function buildUrl(baseUrl, endpoint) {
30
+ return `${baseUrl.replace(/\/+$/u, '')}/${endpoint}`;
31
+ }
32
+ function buildHeaders(accessToken, includeRegion, region) {
33
+ const headers = {
34
+ Authorization: `Bearer ${accessToken}`,
35
+ 'Content-Type': 'application/json',
36
+ };
37
+ if (includeRegion && region) {
38
+ headers['x-region'] = region;
39
+ }
40
+ return headers;
41
+ }
42
+ export async function executeRemoteCommand(options) {
43
+ const spec = REMOTE_COMMANDS[options.commandKey];
44
+ if (!spec) {
45
+ throw new CliError(`Unsupported remote command: ${options.commandKey}`, {
46
+ code: 'UNSUPPORTED_REMOTE_COMMAND',
47
+ exitCode: 2,
48
+ });
49
+ }
50
+ const runtimeEnv = readRuntimeEnv(options.env);
51
+ const runtime = requireSupabaseRestRuntime(options.env);
52
+ const body = readJsonInput(options.inputPath);
53
+ const url = buildUrl(runtime.apiBaseUrl, spec.endpoint);
54
+ if (options.dryRun) {
55
+ const dryRunHeaders = buildHeaders('****', spec.includeRegion, runtimeEnv.region);
56
+ return stringifyJson({
57
+ dryRun: true,
58
+ request: {
59
+ method: 'POST',
60
+ url,
61
+ headers: {
62
+ ...dryRunHeaders,
63
+ },
64
+ inputPath: options.inputPath,
65
+ body,
66
+ timeoutMs: options.timeoutMs,
67
+ },
68
+ }, options.compactJson);
69
+ }
70
+ const session = await resolveSupabaseUserSession({
71
+ runtime,
72
+ fetchImpl: options.fetchImpl,
73
+ timeoutMs: options.timeoutMs,
74
+ });
75
+ const headers = buildHeaders(session.accessToken, spec.includeRegion, runtimeEnv.region);
76
+ const response = await postJson({
77
+ url,
78
+ headers,
79
+ body,
80
+ timeoutMs: options.timeoutMs,
81
+ fetchImpl: options.fetchImpl,
82
+ });
83
+ return stringifyJson(response, options.compactJson);
84
+ }
85
+ export function getRemoteCommandHelp(commandKey) {
86
+ return REMOTE_COMMANDS[commandKey].help;
87
+ }
88
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../src/lib/remote.ts"],"names":[],"mappings":"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","sourcesContent":["import { CliError } from './errors.js';\nimport { readRuntimeEnv } from './env.js';\nimport type { FetchLike } from './http.js';\nimport { postJson } from './http.js';\nimport { readJsonInput, stringifyJson } from './io.js';\nimport { requireSupabaseRestRuntime } from './supabase-client.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\n\ntype RemoteCommandSpec = {\n endpoint: string;\n includeRegion: boolean;\n help: string;\n};\n\nconst REMOTE_COMMANDS: Record<string, RemoteCommandSpec> = {\n 'search:flow': {\n endpoint: 'flow_hybrid_search',\n includeRegion: true,\n help: 'tiangong search flow --input ./request.json [--dry-run] [--json]',\n },\n 'search:process': {\n endpoint: 'process_hybrid_search',\n includeRegion: true,\n help: 'tiangong search process --input ./request.json [--dry-run] [--json]',\n },\n 'search:lifecyclemodel': {\n endpoint: 'lifecyclemodel_hybrid_search',\n includeRegion: true,\n help: 'tiangong search lifecyclemodel --input ./request.json [--dry-run] [--json]',\n },\n 'admin:embedding-run': {\n endpoint: 'embedding_ft',\n includeRegion: false,\n help: 'tiangong admin embedding-run --input ./jobs.json [--dry-run] [--json]',\n },\n};\n\nexport type RemoteCommandOptions = {\n commandKey: keyof typeof REMOTE_COMMANDS;\n inputPath: string;\n env: NodeJS.ProcessEnv;\n timeoutMs: number;\n dryRun: boolean;\n compactJson: boolean;\n fetchImpl: FetchLike;\n};\n\nfunction buildUrl(baseUrl: string, endpoint: string): string {\n return `${baseUrl.replace(/\\/+$/u, '')}/${endpoint}`;\n}\n\nfunction buildHeaders(\n accessToken: string,\n includeRegion: boolean,\n region: string | null,\n): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n };\n if (includeRegion && region) {\n headers['x-region'] = region;\n }\n return headers;\n}\n\nexport async function executeRemoteCommand(options: RemoteCommandOptions): Promise<string> {\n const spec = REMOTE_COMMANDS[options.commandKey];\n if (!spec) {\n throw new CliError(`Unsupported remote command: ${options.commandKey}`, {\n code: 'UNSUPPORTED_REMOTE_COMMAND',\n exitCode: 2,\n });\n }\n\n const runtimeEnv = readRuntimeEnv(options.env);\n const runtime = requireSupabaseRestRuntime(options.env);\n const body = readJsonInput(options.inputPath);\n const url = buildUrl(runtime.apiBaseUrl, spec.endpoint);\n\n if (options.dryRun) {\n const dryRunHeaders = buildHeaders('****', spec.includeRegion, runtimeEnv.region);\n return stringifyJson(\n {\n dryRun: true,\n request: {\n method: 'POST',\n url,\n headers: {\n ...dryRunHeaders,\n },\n inputPath: options.inputPath,\n body,\n timeoutMs: options.timeoutMs,\n },\n },\n options.compactJson,\n );\n }\n\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const headers = buildHeaders(session.accessToken, spec.includeRegion, runtimeEnv.region);\n const response = await postJson({\n url,\n headers,\n body,\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n return stringifyJson(response, options.compactJson);\n}\n\nexport function getRemoteCommandHelp(commandKey: keyof typeof REMOTE_COMMANDS): string {\n return REMOTE_COMMANDS[commandKey].help;\n}\n"]}