homegraph 1.5.0 → 1.5.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 (214) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +305 -305
  3. package/dist/bin/command-supervision.d.ts.map +1 -1
  4. package/dist/bin/command-supervision.js +7 -4
  5. package/dist/bin/command-supervision.js.map +1 -1
  6. package/dist/bin/homegraph.js +9 -9
  7. package/dist/db/index.js +36 -36
  8. package/dist/db/migrations.js +37 -37
  9. package/dist/db/queries.js +156 -156
  10. package/dist/db/schema.sql +203 -203
  11. package/dist/directory.js +5 -5
  12. package/dist/extraction/languages/arkts-viewtree.d.ts +2 -4
  13. package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -1
  14. package/dist/extraction/languages/arkts-viewtree.js +6 -21
  15. package/dist/extraction/languages/arkts-viewtree.js.map +1 -1
  16. package/dist/extraction/languages/arkts.d.ts +16 -6
  17. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  18. package/dist/extraction/languages/arkts.js +174 -21
  19. package/dist/extraction/languages/arkts.js.map +1 -1
  20. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  21. package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  22. package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  23. package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  24. package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  25. package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  26. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  27. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  28. package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  29. package/dist/installer/instructions-template.js +9 -9
  30. package/dist/mcp/liveness-watchdog.d.ts +18 -0
  31. package/dist/mcp/liveness-watchdog.d.ts.map +1 -1
  32. package/dist/mcp/liveness-watchdog.js +185 -73
  33. package/dist/mcp/liveness-watchdog.js.map +1 -1
  34. package/dist/mcp/server-instructions.js +47 -47
  35. package/dist/reasoning/reasoner.js +32 -32
  36. package/dist/spec/db/commit-node.js +4 -4
  37. package/dist/spec/db/fragment-node.js +10 -10
  38. package/dist/spec/db/fts.js +8 -8
  39. package/dist/spec/db/relations.js +88 -88
  40. package/dist/spec/db/schema.js +6 -6
  41. package/dist/spec/db/schema.sql +121 -121
  42. package/dist/spec/db/spec-node.js +4 -4
  43. package/dist/spec/llm/prompts.js +53 -53
  44. package/dist/spec/utils.d.ts +16 -4
  45. package/dist/spec/utils.d.ts.map +1 -1
  46. package/dist/spec/utils.js +58 -6
  47. package/dist/spec/utils.js.map +1 -1
  48. package/package.json +62 -62
  49. package/scripts/_tmp-cfwk-resolve.log +0 -0
  50. package/scripts/_tmp-cfwk-sig.log +0 -0
  51. package/scripts/_tmp-cfwk-vt.log +0 -0
  52. package/scripts/add-lang/bench.sh +60 -60
  53. package/scripts/add-lang/check-grammar.mjs +75 -75
  54. package/scripts/add-lang/dump-ast.mjs +103 -103
  55. package/scripts/add-lang/verify-extraction.mjs +70 -70
  56. package/scripts/agent-eval/ab-adoption.sh +91 -91
  57. package/scripts/agent-eval/ab-hook.sh +86 -86
  58. package/scripts/agent-eval/ab-impl.sh +78 -78
  59. package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -102
  60. package/scripts/agent-eval/ab-sufficiency.sh +78 -78
  61. package/scripts/agent-eval/arms-F.sh +21 -21
  62. package/scripts/agent-eval/arms-matrix.sh +37 -37
  63. package/scripts/agent-eval/audit.sh +68 -68
  64. package/scripts/agent-eval/bench-readme.sh +28 -28
  65. package/scripts/agent-eval/bench-why-repo.sh +22 -22
  66. package/scripts/agent-eval/block-read-hook.sh +19 -19
  67. package/scripts/agent-eval/hook-settings.json +15 -15
  68. package/scripts/agent-eval/itrun.sh +120 -120
  69. package/scripts/agent-eval/offload-eval-3arm.sh +72 -72
  70. package/scripts/agent-eval/offload-eval-cost.mjs +133 -133
  71. package/scripts/agent-eval/offload-eval-effort.mjs +108 -108
  72. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -25
  73. package/scripts/agent-eval/offload-eval-frontload.sh +47 -47
  74. package/scripts/agent-eval/offload-eval-ground-truth.json +18 -18
  75. package/scripts/agent-eval/offload-eval-hook.mjs +84 -84
  76. package/scripts/agent-eval/offload-eval-judge.mjs +103 -103
  77. package/scripts/agent-eval/offload-eval-matrix.sh +20 -20
  78. package/scripts/agent-eval/offload-eval-metrics.mjs +94 -94
  79. package/scripts/agent-eval/offload-eval-refs1.sh +50 -50
  80. package/scripts/agent-eval/offload-eval-setup.sh +24 -24
  81. package/scripts/agent-eval/offload-eval-styles.sh +71 -71
  82. package/scripts/agent-eval/offload-eval-summarize.mjs +68 -68
  83. package/scripts/agent-eval/offload-eval.md +76 -76
  84. package/scripts/agent-eval/parse-arms.mjs +116 -116
  85. package/scripts/agent-eval/parse-bench-readme.mjs +84 -84
  86. package/scripts/agent-eval/parse-run.mjs +45 -45
  87. package/scripts/agent-eval/parse-session.mjs +93 -93
  88. package/scripts/agent-eval/probe-context.mjs +21 -21
  89. package/scripts/agent-eval/probe-explore.mjs +40 -40
  90. package/scripts/agent-eval/probe-node.mjs +20 -20
  91. package/scripts/agent-eval/probe-sweep.mjs +119 -119
  92. package/scripts/agent-eval/probe-trace.mjs +20 -20
  93. package/scripts/agent-eval/redirect-read-hook.sh +38 -38
  94. package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -119
  95. package/scripts/agent-eval/repro-daemon-clients.mjs +125 -125
  96. package/scripts/agent-eval/run-agent.sh +34 -34
  97. package/scripts/agent-eval/run-all.sh +75 -75
  98. package/scripts/agent-eval/run-arms.sh +56 -56
  99. package/scripts/agent-eval/seq-matrix.mjs +137 -137
  100. package/scripts/bench-arkts-init-rss.log +0 -0
  101. package/scripts/build-bundle.sh +123 -123
  102. package/scripts/exp_boundary_eval/README.md +247 -247
  103. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-310.pyc +0 -0
  104. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-38.pyc +0 -0
  105. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-310.pyc +0 -0
  106. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-38.pyc +0 -0
  107. package/scripts/exp_boundary_eval/__pycache__/deveco_arm.cpython-38.pyc +0 -0
  108. package/scripts/exp_boundary_eval/__pycache__/run_all.cpython-310.pyc +0 -0
  109. package/scripts/exp_boundary_eval/__pycache__/run_all.cpython-38.pyc +0 -0
  110. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-310.pyc +0 -0
  111. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-38.pyc +0 -0
  112. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-310.pyc +0 -0
  113. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-38.pyc +0 -0
  114. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-310.pyc +0 -0
  115. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-38.pyc +0 -0
  116. package/scripts/exp_boundary_eval/__pycache__/win_mcp_launcher.cpython-38.pyc +0 -0
  117. package/scripts/exp_boundary_eval/_test_mcp_chain.py +78 -78
  118. package/scripts/exp_boundary_eval/_test_stdin.py +8 -8
  119. package/scripts/exp_boundary_eval/_utils.py +1116 -1116
  120. package/scripts/exp_boundary_eval/analyze.py +1313 -1313
  121. package/scripts/exp_boundary_eval/deveco_arm.py +519 -519
  122. package/scripts/exp_boundary_eval/run_all.py +378 -378
  123. package/scripts/exp_boundary_eval/run_one.py +165 -165
  124. package/scripts/exp_boundary_eval/run_session.py +158 -158
  125. package/scripts/exp_boundary_eval/setup.py +120 -120
  126. package/scripts/exp_boundary_eval/win_mcp_launcher.py +73 -73
  127. package/scripts/exp_boundary_eval/win_mcp_stdio_wrap.js +36 -36
  128. package/scripts/exp_boundary_eval/win_node_launcher.py +24 -24
  129. package/scripts/extract-release-notes.mjs +130 -130
  130. package/scripts/local-install.sh +41 -41
  131. package/scripts/npm-sdk.js +75 -75
  132. package/scripts/npm-shim.js +275 -275
  133. package/scripts/ohos-sdk-publish.mjs +133 -133
  134. package/scripts/pack-npm.sh +119 -119
  135. package/scripts/prepare-release.mjs +270 -270
  136. package/scripts/probe-arkts-mem-why-run.log +0 -0
  137. package/scripts/probe-banner-livecard-ir.log +0 -0
  138. package/scripts/probe-cfwk-ast.stderr.log +0 -0
  139. package/scripts/probe-cfwk-ast.stdout.log +0 -0
  140. package/scripts/probe-cfwk-attr-shape.log +0 -0
  141. package/scripts/probe-cfwk-cfgdump.stderr.log +0 -0
  142. package/scripts/probe-cfwk-cfgdump.stdout.log +0 -0
  143. package/scripts/probe-cfwk-cvc.stderr.log +0 -0
  144. package/scripts/probe-cfwk-cvc.stdout.log +0 -0
  145. package/scripts/probe-cfwk-diag2.log +0 -0
  146. package/scripts/probe-cfwk-diag3.log +0 -0
  147. package/scripts/probe-cfwk-fedbg.stderr.log +0 -0
  148. package/scripts/probe-cfwk-fedbg.stdout.log +0 -0
  149. package/scripts/probe-cfwk-fileresult.log +0 -0
  150. package/scripts/probe-cfwk-fix.stderr.log +0 -0
  151. package/scripts/probe-cfwk-fix.stdout.log +0 -0
  152. package/scripts/probe-cfwk-fix2.stderr.log +0 -0
  153. package/scripts/probe-cfwk-fix2.stdout.log +0 -0
  154. package/scripts/probe-cfwk-fix3.stderr.log +0 -0
  155. package/scripts/probe-cfwk-fix3.stdout.log +0 -0
  156. package/scripts/probe-cfwk-foreach.log +0 -0
  157. package/scripts/probe-cfwk-getmethod-throw.log +0 -0
  158. package/scripts/probe-cfwk-hg-extract.log +0 -0
  159. package/scripts/probe-cfwk-pr1003-noprior.stderr.log +0 -0
  160. package/scripts/probe-cfwk-pr1003-noprior.stdout.log +0 -0
  161. package/scripts/probe-cfwk-pr1003.stderr.log +0 -0
  162. package/scripts/probe-cfwk-pr1003.stdout.log +0 -0
  163. package/scripts/probe-cfwk-preroot-noprior.stderr.log +0 -0
  164. package/scripts/probe-cfwk-preroot-noprior.stdout.log +0 -0
  165. package/scripts/probe-cfwk-preroot-prior.stderr.log +0 -0
  166. package/scripts/probe-cfwk-preroot-prior.stdout.log +0 -0
  167. package/scripts/probe-cfwk-preroot-skipstate.stderr.log +0 -0
  168. package/scripts/probe-cfwk-preroot-skipstate.stdout.log +0 -0
  169. package/scripts/probe-cfwk-resolve-sim.log +0 -0
  170. package/scripts/probe-cfwk-tree-shape.log +0 -0
  171. package/scripts/probe-cfwk-walk-abort.log +0 -0
  172. package/scripts/probe-cfwk.log +0 -0
  173. package/scripts/probe-force-index.log +0 -0
  174. package/scripts/probe-no-force-index.log +0 -0
  175. package/scripts/probe-samefile-ir.stderr.log +0 -0
  176. package/scripts/probe-samefile-ir.stdout.log +224 -0
  177. package/scripts/probe-sdk-vs-project.log +0 -0
  178. package/scripts/probe-viewtree-downgrade.log +0 -0
  179. package/dist/arkts/ohos-api-index.d.ts +0 -15
  180. package/dist/arkts/ohos-api-index.d.ts.map +0 -1
  181. package/dist/arkts/ohos-api-index.js +0 -190
  182. package/dist/arkts/ohos-api-index.js.map +0 -1
  183. package/dist/arkts/ohos-sdk-input.d.ts +0 -36
  184. package/dist/arkts/ohos-sdk-input.d.ts.map +0 -1
  185. package/dist/arkts/ohos-sdk-input.js +0 -214
  186. package/dist/arkts/ohos-sdk-input.js.map +0 -1
  187. package/dist/extraction/languages/arkts-state-decorators.d.ts +0 -13
  188. package/dist/extraction/languages/arkts-state-decorators.d.ts.map +0 -1
  189. package/dist/extraction/languages/arkts-state-decorators.js +0 -26
  190. package/dist/extraction/languages/arkts-state-decorators.js.map +0 -1
  191. package/dist/extraction/languages/ohos-api-consumer.d.ts +0 -34
  192. package/dist/extraction/languages/ohos-api-consumer.d.ts.map +0 -1
  193. package/dist/extraction/languages/ohos-api-consumer.js +0 -283
  194. package/dist/extraction/languages/ohos-api-consumer.js.map +0 -1
  195. package/dist/spec/build/git-scanner.d.ts +0 -93
  196. package/dist/spec/build/git-scanner.d.ts.map +0 -1
  197. package/dist/spec/build/git-scanner.js +0 -254
  198. package/dist/spec/build/git-scanner.js.map +0 -1
  199. package/dist/spec/git-utils.d.ts +0 -8
  200. package/dist/spec/git-utils.d.ts.map +0 -1
  201. package/dist/spec/git-utils.js +0 -14
  202. package/dist/spec/git-utils.js.map +0 -1
  203. package/dist/spec/mine/clusterer.d.ts +0 -63
  204. package/dist/spec/mine/clusterer.d.ts.map +0 -1
  205. package/dist/spec/mine/clusterer.js +0 -904
  206. package/dist/spec/mine/clusterer.js.map +0 -1
  207. package/dist/spec/mine/progress-handler.d.ts +0 -22
  208. package/dist/spec/mine/progress-handler.d.ts.map +0 -1
  209. package/dist/spec/mine/progress-handler.js +0 -108
  210. package/dist/spec/mine/progress-handler.js.map +0 -1
  211. package/dist/spec/mine/progress.d.ts +0 -23
  212. package/dist/spec/mine/progress.d.ts.map +0 -1
  213. package/dist/spec/mine/progress.js +0 -12
  214. package/dist/spec/mine/progress.js.map +0 -1
@@ -1,133 +1,133 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Build and optionally publish homegraph-ohos-api-db-<version> (one npm package per API version).
4
- *
5
- * Usage:
6
- * node scripts/ohos-sdk-publish.mjs <zip-or-dir> [version] [--dry-run] [--no-publish]
7
- */
8
- import * as fs from 'fs';
9
- import * as path from 'path';
10
- import { fileURLToPath } from 'url';
11
- import {
12
- resolveOhosSdkInput,
13
- ohosApiDbFilename,
14
- ohosApiDbPackageName,
15
- indexOhosApiDb,
16
- } from '../dist/extraction/languages/arkts.js';
17
-
18
- const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
19
-
20
- function parseArgs(argv) {
21
- const positional = [];
22
- const flags = new Set();
23
- for (let i = 2; i < argv.length; i++) {
24
- const arg = argv[i];
25
- if (arg.startsWith('--')) flags.add(arg);
26
- else positional.push(arg);
27
- }
28
- return {
29
- input: positional[0] ?? '',
30
- version: positional[1] ?? '',
31
- dryRun: flags.has('--dry-run'),
32
- noPublish: flags.has('--no-publish'),
33
- };
34
- }
35
-
36
- function buildNpmPackage(version, dbPath, outDir) {
37
- const dbName = ohosApiDbFilename(version);
38
- const pkgName = ohosApiDbPackageName(version);
39
- fs.rmSync(outDir, { recursive: true, force: true });
40
- fs.mkdirSync(path.join(outDir, 'scripts'), { recursive: true });
41
- fs.copyFileSync(dbPath, path.join(outDir, dbName));
42
-
43
- const postinstall = `#!/usr/bin/env node
44
- 'use strict';
45
- const fs = require('fs');
46
- const path = require('path');
47
- const os = require('os');
48
- const dbName = ${JSON.stringify(dbName)};
49
- const src = path.join(__dirname, '..', dbName);
50
- const dest = path.join(os.homedir(), '.homegraph', 'api', dbName);
51
- if (!fs.existsSync(src)) process.exit(0);
52
- fs.mkdirSync(path.dirname(dest), { recursive: true });
53
- fs.copyFileSync(src, dest);
54
- `;
55
- fs.writeFileSync(path.join(outDir, 'scripts', 'postinstall.js'), postinstall, { mode: 0o755 });
56
- fs.writeFileSync(
57
- path.join(outDir, 'package.json'),
58
- JSON.stringify(
59
- {
60
- name: pkgName,
61
- version: '1.0.0',
62
- description: `Prebuilt HomeGraph OHOS API database for SDK ${version}`,
63
- license: 'MIT',
64
- files: [dbName, 'scripts/postinstall.js'],
65
- scripts: { postinstall: 'node scripts/postinstall.js' },
66
- homegraph: { ohosApiVersion: version, dbFile: dbName },
67
- },
68
- null,
69
- 2
70
- ) + '\n'
71
- );
72
- return pkgName;
73
- }
74
-
75
- const { input, version, dryRun, noPublish } = parseArgs(process.argv);
76
- if (!input) {
77
- console.error('Usage: node scripts/ohos-sdk-publish.mjs <zip-or-dir> [version] [--dry-run] [--no-publish]');
78
- process.exit(1);
79
- }
80
-
81
- if (!fs.existsSync(path.join(ROOT, 'dist/extraction/languages/arkts.js'))) {
82
- console.error('[ohos-sdk-publish] dist not built — run npm run build first');
83
- process.exit(1);
84
- }
85
-
86
- const resolved = resolveOhosSdkInput({
87
- inputPath: path.resolve(input),
88
- versionOverride: version || undefined,
89
- });
90
-
91
- const dbPath = path.join(
92
- fs.mkdtempSync(path.join(path.dirname(resolved.sdkHome), '.hg-ohos-pack-')),
93
- ohosApiDbFilename(resolved.version)
94
- );
95
- const pkgDir = path.join(path.dirname(dbPath), 'npm-package');
96
-
97
- try {
98
- process.stderr.write(`[ohos-sdk-publish] indexing ${resolved.version} …\n`);
99
- const result = await indexOhosApiDb({
100
- sdkHome: resolved.sdkHome,
101
- version: resolved.version,
102
- outputPath: dbPath,
103
- onProgress: (p) => {
104
- if (p.phase === 'arkts-batch') {
105
- const label = p.subphase === 'scene' ? 'Scene' : 'Persist';
106
- process.stderr.write(`\r${label}: ${p.current}/${p.total}`.padEnd(40));
107
- }
108
- },
109
- });
110
- process.stderr.write('\n');
111
- if (!result.success) {
112
- for (const err of result.errors.filter((e) => e.severity === 'error')) console.error(err.message);
113
- process.exit(1);
114
- }
115
-
116
- const pkgName = buildNpmPackage(resolved.version, dbPath, pkgDir);
117
- console.log(`[ohos-sdk-publish] package: ${pkgName} → ${pkgDir} (${result.nodesCreated} nodes)`);
118
-
119
- if (dryRun || noPublish) {
120
- console.log('[ohos-sdk-publish] skipping npm publish');
121
- process.exit(0);
122
- }
123
- if (!process.env.NPM_TOKEN) {
124
- console.error('[ohos-sdk-publish] NPM_TOKEN not set — package built, not published');
125
- process.exit(0);
126
- }
127
-
128
- const { execFileSync } = await import('child_process');
129
- execFileSync('npm', ['publish', '--access', 'public'], { cwd: pkgDir, stdio: 'inherit' });
130
- console.log(`[ohos-sdk-publish] published ${pkgName}`);
131
- } finally {
132
- resolved.cleanup?.();
133
- }
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Build and optionally publish homegraph-ohos-api-db-<version> (one npm package per API version).
4
+ *
5
+ * Usage:
6
+ * node scripts/ohos-sdk-publish.mjs <zip-or-dir> [version] [--dry-run] [--no-publish]
7
+ */
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ import {
12
+ resolveOhosSdkInput,
13
+ ohosApiDbFilename,
14
+ ohosApiDbPackageName,
15
+ indexOhosApiDb,
16
+ } from '../dist/extraction/languages/arkts.js';
17
+
18
+ const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
19
+
20
+ function parseArgs(argv) {
21
+ const positional = [];
22
+ const flags = new Set();
23
+ for (let i = 2; i < argv.length; i++) {
24
+ const arg = argv[i];
25
+ if (arg.startsWith('--')) flags.add(arg);
26
+ else positional.push(arg);
27
+ }
28
+ return {
29
+ input: positional[0] ?? '',
30
+ version: positional[1] ?? '',
31
+ dryRun: flags.has('--dry-run'),
32
+ noPublish: flags.has('--no-publish'),
33
+ };
34
+ }
35
+
36
+ function buildNpmPackage(version, dbPath, outDir) {
37
+ const dbName = ohosApiDbFilename(version);
38
+ const pkgName = ohosApiDbPackageName(version);
39
+ fs.rmSync(outDir, { recursive: true, force: true });
40
+ fs.mkdirSync(path.join(outDir, 'scripts'), { recursive: true });
41
+ fs.copyFileSync(dbPath, path.join(outDir, dbName));
42
+
43
+ const postinstall = `#!/usr/bin/env node
44
+ 'use strict';
45
+ const fs = require('fs');
46
+ const path = require('path');
47
+ const os = require('os');
48
+ const dbName = ${JSON.stringify(dbName)};
49
+ const src = path.join(__dirname, '..', dbName);
50
+ const dest = path.join(os.homedir(), '.homegraph', 'api', dbName);
51
+ if (!fs.existsSync(src)) process.exit(0);
52
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
53
+ fs.copyFileSync(src, dest);
54
+ `;
55
+ fs.writeFileSync(path.join(outDir, 'scripts', 'postinstall.js'), postinstall, { mode: 0o755 });
56
+ fs.writeFileSync(
57
+ path.join(outDir, 'package.json'),
58
+ JSON.stringify(
59
+ {
60
+ name: pkgName,
61
+ version: '1.0.0',
62
+ description: `Prebuilt HomeGraph OHOS API database for SDK ${version}`,
63
+ license: 'MIT',
64
+ files: [dbName, 'scripts/postinstall.js'],
65
+ scripts: { postinstall: 'node scripts/postinstall.js' },
66
+ homegraph: { ohosApiVersion: version, dbFile: dbName },
67
+ },
68
+ null,
69
+ 2
70
+ ) + '\n'
71
+ );
72
+ return pkgName;
73
+ }
74
+
75
+ const { input, version, dryRun, noPublish } = parseArgs(process.argv);
76
+ if (!input) {
77
+ console.error('Usage: node scripts/ohos-sdk-publish.mjs <zip-or-dir> [version] [--dry-run] [--no-publish]');
78
+ process.exit(1);
79
+ }
80
+
81
+ if (!fs.existsSync(path.join(ROOT, 'dist/extraction/languages/arkts.js'))) {
82
+ console.error('[ohos-sdk-publish] dist not built — run npm run build first');
83
+ process.exit(1);
84
+ }
85
+
86
+ const resolved = resolveOhosSdkInput({
87
+ inputPath: path.resolve(input),
88
+ versionOverride: version || undefined,
89
+ });
90
+
91
+ const dbPath = path.join(
92
+ fs.mkdtempSync(path.join(path.dirname(resolved.sdkHome), '.hg-ohos-pack-')),
93
+ ohosApiDbFilename(resolved.version)
94
+ );
95
+ const pkgDir = path.join(path.dirname(dbPath), 'npm-package');
96
+
97
+ try {
98
+ process.stderr.write(`[ohos-sdk-publish] indexing ${resolved.version} …\n`);
99
+ const result = await indexOhosApiDb({
100
+ sdkHome: resolved.sdkHome,
101
+ version: resolved.version,
102
+ outputPath: dbPath,
103
+ onProgress: (p) => {
104
+ if (p.phase === 'arkts-batch') {
105
+ const label = p.subphase === 'scene' ? 'Scene' : 'Persist';
106
+ process.stderr.write(`\r${label}: ${p.current}/${p.total}`.padEnd(40));
107
+ }
108
+ },
109
+ });
110
+ process.stderr.write('\n');
111
+ if (!result.success) {
112
+ for (const err of result.errors.filter((e) => e.severity === 'error')) console.error(err.message);
113
+ process.exit(1);
114
+ }
115
+
116
+ const pkgName = buildNpmPackage(resolved.version, dbPath, pkgDir);
117
+ console.log(`[ohos-sdk-publish] package: ${pkgName} → ${pkgDir} (${result.nodesCreated} nodes)`);
118
+
119
+ if (dryRun || noPublish) {
120
+ console.log('[ohos-sdk-publish] skipping npm publish');
121
+ process.exit(0);
122
+ }
123
+ if (!process.env.NPM_TOKEN) {
124
+ console.error('[ohos-sdk-publish] NPM_TOKEN not set — package built, not published');
125
+ process.exit(0);
126
+ }
127
+
128
+ const { execFileSync } = await import('child_process');
129
+ execFileSync('npm', ['publish', '--access', 'public'], { cwd: pkgDir, stdio: 'inherit' });
130
+ console.log(`[ohos-sdk-publish] published ${pkgName}`);
131
+ } finally {
132
+ resolved.cleanup?.();
133
+ }
@@ -1,119 +1,119 @@
1
- #!/usr/bin/env bash
2
- #
3
- # Assemble the npm thin-installer packages from built bundles (esbuild pattern).
4
- #
5
- # Produces, under release/npm/:
6
- # homegraph-<target>/ one per built bundle — the vendored Node + app, tagged
7
- # with os/cpu so npm installs only the matching one.
8
- # main/ the homegraph shim package: a tiny bin
9
- # that execs the matching platform bundle, with every
10
- # platform package in optionalDependencies.
11
- #
12
- # The release pipeline then `npm publish`es each dir. This does NOT touch the
13
- # repo's package.json — the dev/from-source path keeps working; the *published*
14
- # main package's shape is generated here.
15
- #
16
- # Prereq: run build-bundle.sh for each target first (release/homegraph-*.tar.gz).
17
- # Usage: scripts/pack-npm.sh [version] (default: version from package.json)
18
- set -euo pipefail
19
-
20
- ROOT="$(cd "$(dirname "$0")/.." && pwd)"
21
- VERSION="${1:-$(node -p "require('$ROOT/package.json').version")}"
22
- SCOPE="@colbymchenry"
23
- REL="$ROOT/release"
24
- NPM="$REL/npm"
25
-
26
- rm -rf "$NPM"
27
- mkdir -p "$NPM/main"
28
-
29
- shopt -s nullglob
30
- archives=("$REL"/homegraph-*.tar.gz "$REL"/homegraph-*.zip)
31
- [ ${#archives[@]} -gt 0 ] || { echo "[pack-npm] no bundles in $REL — run build-bundle.sh first" >&2; exit 1; }
32
-
33
- targets=()
34
- for archive in "${archives[@]}"; do
35
- fname="$(basename "$archive")"
36
- case "$fname" in
37
- *.tar.gz) base="${fname%.tar.gz}" ;; # homegraph-<target>
38
- *.zip) base="${fname%.zip}" ;;
39
- esac
40
- target="${base#homegraph-}" # <target>, e.g. darwin-arm64 / win32-x64
41
- os="${target%-*}" # darwin | linux | win32
42
- arch="${target##*-}" # arm64 | x64
43
- pkgdir="$NPM/$base"
44
- mkdir -p "$pkgdir"
45
- case "$fname" in
46
- *.zip)
47
- tmpx="$(mktemp -d)"
48
- unzip -q "$archive" -d "$tmpx"
49
- mv "$tmpx/homegraph-${target}"/* "$pkgdir"/
50
- rm -rf "$tmpx"
51
- nodefile="node.exe"
52
- ;;
53
- *)
54
- tar -xzf "$archive" -C "$pkgdir" --strip-components=1
55
- nodefile="node"
56
- ;;
57
- esac
58
- VERSION="$VERSION" SCOPE="$SCOPE" TARGET="$target" OSV="$os" ARCHV="$arch" NODEFILE="$nodefile" \
59
- node -e '
60
- const fs=require("fs");
61
- fs.writeFileSync(process.argv[1], JSON.stringify({
62
- name: `${process.env.SCOPE}/homegraph-${process.env.TARGET}`,
63
- version: process.env.VERSION,
64
- description: `HomeGraph self-contained bundle for ${process.env.TARGET}`,
65
- os: [process.env.OSV], cpu: [process.env.ARCHV],
66
- files: [process.env.NODEFILE, "lib", "bin"],
67
- license: "MIT"
68
- }, null, 2) + "\n");
69
- ' "$pkgdir/package.json"
70
- targets+=("$target")
71
- echo "[pack-npm] ${SCOPE}/homegraph-${target}@${VERSION}"
72
- done
73
-
74
- # Main shim package.
75
- # npm-shim.js CLI/MCP launcher (execs the bundled Node) — the `bin`.
76
- # npm-sdk.js programmatic/embedded entry (#354): re-exports the installed
77
- # platform bundle's compiled library — the `main`.
78
- # dist/ the .d.ts tree only (types). The runtime .js stays in the
79
- # per-platform bundle so its deps aren't duplicated here.
80
- cp "$ROOT/scripts/npm-shim.js" "$NPM/main/npm-shim.js"
81
- cp "$ROOT/scripts/npm-sdk.js" "$NPM/main/npm-sdk.js"
82
- [ -f "$ROOT/README.md" ] && cp "$ROOT/README.md" "$NPM/main/README.md"
83
-
84
- # Ship the type declarations so `types`/`exports.types` resolve. Built from this
85
- # same release, so they can't skew from the runtime npm-sdk.js re-exports.
86
- [ -f "$ROOT/dist/index.d.ts" ] || ( echo "[pack-npm] building dist for .d.ts" >&2 && cd "$ROOT" && npm run build >/dev/null )
87
- ROOT="$ROOT" DEST="$NPM/main" node -e '
88
- const fs=require("fs"), path=require("path");
89
- const src=path.join(process.env.ROOT,"dist"), dest=path.join(process.env.DEST,"dist");
90
- fs.cpSync(src, dest, { recursive:true, filter(s){
91
- try { return fs.statSync(s).isDirectory() || s.endsWith(".d.ts"); } catch (e) { return false; }
92
- }});
93
- '
94
-
95
- VERSION="$VERSION" SCOPE="$SCOPE" TARGETS="${targets[*]}" \
96
- node -e '
97
- const fs=require("fs");
98
- const opt={};
99
- for (const t of process.env.TARGETS.split(/\s+/).filter(Boolean))
100
- opt[`${process.env.SCOPE}/homegraph-${t}`]=process.env.VERSION;
101
- fs.writeFileSync(process.argv[1], JSON.stringify({
102
- name: `${process.env.SCOPE}/homegraph`,
103
- version: process.env.VERSION,
104
- description: "Local-first code intelligence for AI agents (MCP). Self-contained — bundles its own runtime.",
105
- bin: { homegraph: "npm-shim.js" },
106
- main: "npm-sdk.js",
107
- types: "dist/index.d.ts",
108
- exports: {
109
- ".": { types: "./dist/index.d.ts", default: "./npm-sdk.js" },
110
- "./package.json": "./package.json"
111
- },
112
- optionalDependencies: opt,
113
- files: ["npm-shim.js","npm-sdk.js","dist","README.md"],
114
- license: "MIT"
115
- }, null, 2) + "\n");
116
- ' "$NPM/main/package.json"
117
-
118
- echo "[pack-npm] ${SCOPE}/homegraph@${VERSION} (${#targets[@]} platform packages in optionalDependencies)"
119
- echo "[pack-npm] output: $NPM"
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Assemble the npm thin-installer packages from built bundles (esbuild pattern).
4
+ #
5
+ # Produces, under release/npm/:
6
+ # homegraph-<target>/ one per built bundle — the vendored Node + app, tagged
7
+ # with os/cpu so npm installs only the matching one.
8
+ # main/ the homegraph shim package: a tiny bin
9
+ # that execs the matching platform bundle, with every
10
+ # platform package in optionalDependencies.
11
+ #
12
+ # The release pipeline then `npm publish`es each dir. This does NOT touch the
13
+ # repo's package.json — the dev/from-source path keeps working; the *published*
14
+ # main package's shape is generated here.
15
+ #
16
+ # Prereq: run build-bundle.sh for each target first (release/homegraph-*.tar.gz).
17
+ # Usage: scripts/pack-npm.sh [version] (default: version from package.json)
18
+ set -euo pipefail
19
+
20
+ ROOT="$(cd "$(dirname "$0")/.." && pwd)"
21
+ VERSION="${1:-$(node -p "require('$ROOT/package.json').version")}"
22
+ SCOPE="@colbymchenry"
23
+ REL="$ROOT/release"
24
+ NPM="$REL/npm"
25
+
26
+ rm -rf "$NPM"
27
+ mkdir -p "$NPM/main"
28
+
29
+ shopt -s nullglob
30
+ archives=("$REL"/homegraph-*.tar.gz "$REL"/homegraph-*.zip)
31
+ [ ${#archives[@]} -gt 0 ] || { echo "[pack-npm] no bundles in $REL — run build-bundle.sh first" >&2; exit 1; }
32
+
33
+ targets=()
34
+ for archive in "${archives[@]}"; do
35
+ fname="$(basename "$archive")"
36
+ case "$fname" in
37
+ *.tar.gz) base="${fname%.tar.gz}" ;; # homegraph-<target>
38
+ *.zip) base="${fname%.zip}" ;;
39
+ esac
40
+ target="${base#homegraph-}" # <target>, e.g. darwin-arm64 / win32-x64
41
+ os="${target%-*}" # darwin | linux | win32
42
+ arch="${target##*-}" # arm64 | x64
43
+ pkgdir="$NPM/$base"
44
+ mkdir -p "$pkgdir"
45
+ case "$fname" in
46
+ *.zip)
47
+ tmpx="$(mktemp -d)"
48
+ unzip -q "$archive" -d "$tmpx"
49
+ mv "$tmpx/homegraph-${target}"/* "$pkgdir"/
50
+ rm -rf "$tmpx"
51
+ nodefile="node.exe"
52
+ ;;
53
+ *)
54
+ tar -xzf "$archive" -C "$pkgdir" --strip-components=1
55
+ nodefile="node"
56
+ ;;
57
+ esac
58
+ VERSION="$VERSION" SCOPE="$SCOPE" TARGET="$target" OSV="$os" ARCHV="$arch" NODEFILE="$nodefile" \
59
+ node -e '
60
+ const fs=require("fs");
61
+ fs.writeFileSync(process.argv[1], JSON.stringify({
62
+ name: `${process.env.SCOPE}/homegraph-${process.env.TARGET}`,
63
+ version: process.env.VERSION,
64
+ description: `HomeGraph self-contained bundle for ${process.env.TARGET}`,
65
+ os: [process.env.OSV], cpu: [process.env.ARCHV],
66
+ files: [process.env.NODEFILE, "lib", "bin"],
67
+ license: "MIT"
68
+ }, null, 2) + "\n");
69
+ ' "$pkgdir/package.json"
70
+ targets+=("$target")
71
+ echo "[pack-npm] ${SCOPE}/homegraph-${target}@${VERSION}"
72
+ done
73
+
74
+ # Main shim package.
75
+ # npm-shim.js CLI/MCP launcher (execs the bundled Node) — the `bin`.
76
+ # npm-sdk.js programmatic/embedded entry (#354): re-exports the installed
77
+ # platform bundle's compiled library — the `main`.
78
+ # dist/ the .d.ts tree only (types). The runtime .js stays in the
79
+ # per-platform bundle so its deps aren't duplicated here.
80
+ cp "$ROOT/scripts/npm-shim.js" "$NPM/main/npm-shim.js"
81
+ cp "$ROOT/scripts/npm-sdk.js" "$NPM/main/npm-sdk.js"
82
+ [ -f "$ROOT/README.md" ] && cp "$ROOT/README.md" "$NPM/main/README.md"
83
+
84
+ # Ship the type declarations so `types`/`exports.types` resolve. Built from this
85
+ # same release, so they can't skew from the runtime npm-sdk.js re-exports.
86
+ [ -f "$ROOT/dist/index.d.ts" ] || ( echo "[pack-npm] building dist for .d.ts" >&2 && cd "$ROOT" && npm run build >/dev/null )
87
+ ROOT="$ROOT" DEST="$NPM/main" node -e '
88
+ const fs=require("fs"), path=require("path");
89
+ const src=path.join(process.env.ROOT,"dist"), dest=path.join(process.env.DEST,"dist");
90
+ fs.cpSync(src, dest, { recursive:true, filter(s){
91
+ try { return fs.statSync(s).isDirectory() || s.endsWith(".d.ts"); } catch (e) { return false; }
92
+ }});
93
+ '
94
+
95
+ VERSION="$VERSION" SCOPE="$SCOPE" TARGETS="${targets[*]}" \
96
+ node -e '
97
+ const fs=require("fs");
98
+ const opt={};
99
+ for (const t of process.env.TARGETS.split(/\s+/).filter(Boolean))
100
+ opt[`${process.env.SCOPE}/homegraph-${t}`]=process.env.VERSION;
101
+ fs.writeFileSync(process.argv[1], JSON.stringify({
102
+ name: `${process.env.SCOPE}/homegraph`,
103
+ version: process.env.VERSION,
104
+ description: "Local-first code intelligence for AI agents (MCP). Self-contained — bundles its own runtime.",
105
+ bin: { homegraph: "npm-shim.js" },
106
+ main: "npm-sdk.js",
107
+ types: "dist/index.d.ts",
108
+ exports: {
109
+ ".": { types: "./dist/index.d.ts", default: "./npm-sdk.js" },
110
+ "./package.json": "./package.json"
111
+ },
112
+ optionalDependencies: opt,
113
+ files: ["npm-shim.js","npm-sdk.js","dist","README.md"],
114
+ license: "MIT"
115
+ }, null, 2) + "\n");
116
+ ' "$NPM/main/package.json"
117
+
118
+ echo "[pack-npm] ${SCOPE}/homegraph@${VERSION} (${#targets[@]} platform packages in optionalDependencies)"
119
+ echo "[pack-npm] output: $NPM"