@xemahq/xema 0.1.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 (59) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +60 -0
  3. package/dist/cli.d.ts +4 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +43 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/biome.d.ts +3 -0
  8. package/dist/commands/biome.d.ts.map +1 -0
  9. package/dist/commands/biome.js +89 -0
  10. package/dist/commands/biome.js.map +1 -0
  11. package/dist/commands/dev.d.ts +3 -0
  12. package/dist/commands/dev.d.ts.map +1 -0
  13. package/dist/commands/dev.js +32 -0
  14. package/dist/commands/dev.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +16 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +128 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/objects.d.ts +3 -0
  20. package/dist/commands/objects.d.ts.map +1 -0
  21. package/dist/commands/objects.js +17 -0
  22. package/dist/commands/objects.js.map +1 -0
  23. package/dist/commands/run.d.ts +3 -0
  24. package/dist/commands/run.d.ts.map +1 -0
  25. package/dist/commands/run.js +18 -0
  26. package/dist/commands/run.js.map +1 -0
  27. package/dist/commands/serve.d.ts +3 -0
  28. package/dist/commands/serve.d.ts.map +1 -0
  29. package/dist/commands/serve.js +18 -0
  30. package/dist/commands/serve.js.map +1 -0
  31. package/dist/commands/shell.d.ts +3 -0
  32. package/dist/commands/shell.d.ts.map +1 -0
  33. package/dist/commands/shell.js +16 -0
  34. package/dist/commands/shell.js.map +1 -0
  35. package/dist/dev/dev-orchestrator.d.ts +7 -0
  36. package/dist/dev/dev-orchestrator.d.ts.map +1 -0
  37. package/dist/dev/dev-orchestrator.js +366 -0
  38. package/dist/dev/dev-orchestrator.js.map +1 -0
  39. package/dist/dev/env-defaults.d.ts +6 -0
  40. package/dist/dev/env-defaults.d.ts.map +1 -0
  41. package/dist/dev/env-defaults.js +115 -0
  42. package/dist/dev/env-defaults.js.map +1 -0
  43. package/dist/dev/forked-worker.d.ts +14 -0
  44. package/dist/dev/forked-worker.d.ts.map +1 -0
  45. package/dist/dev/forked-worker.js +126 -0
  46. package/dist/dev/forked-worker.js.map +1 -0
  47. package/dist/dev/infra-preflight.d.ts +31 -0
  48. package/dist/dev/infra-preflight.d.ts.map +1 -0
  49. package/dist/dev/infra-preflight.js +138 -0
  50. package/dist/dev/infra-preflight.js.map +1 -0
  51. package/dist/lib/command-registry.d.ts +5 -0
  52. package/dist/lib/command-registry.d.ts.map +1 -0
  53. package/dist/lib/command-registry.js +13 -0
  54. package/dist/lib/command-registry.js.map +1 -0
  55. package/dist/lib/exit-codes.d.ts +10 -0
  56. package/dist/lib/exit-codes.d.ts.map +1 -0
  57. package/dist/lib/exit-codes.js +25 -0
  58. package/dist/lib/exit-codes.js.map +1 -0
  59. package/package.json +70 -0
@@ -0,0 +1,14 @@
1
+ export interface ForkedWorkerSpawnOptions {
2
+ readonly name: string;
3
+ readonly port: number;
4
+ readonly siblingAppDir: string;
5
+ readonly readinessTimeoutMs: number;
6
+ }
7
+ export interface ForkedWorkerHandle {
8
+ readonly name: string;
9
+ readonly url: string;
10
+ readonly pid: number;
11
+ close(): Promise<void>;
12
+ }
13
+ export declare function spawnForkedWorker(opts: ForkedWorkerSpawnOptions, baseDir: string): Promise<ForkedWorkerHandle>;
14
+ //# sourceMappingURL=forked-worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forked-worker.d.ts","sourceRoot":"","sources":["../../src/dev/forked-worker.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,wBAAwB;IAEvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAMtB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAO/B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAKrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAQD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,wBAAwB,EAC9B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,CAAC,CAuC7B"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.spawnForkedWorker = spawnForkedWorker;
4
+ const node_child_process_1 = require("node:child_process");
5
+ const node_fs_1 = require("node:fs");
6
+ const node_path_1 = require("node:path");
7
+ const READINESS_PROBE_INTERVAL_MS = 250;
8
+ const SHUTDOWN_GRACE_MS = 5_000;
9
+ async function spawnForkedWorker(opts, baseDir) {
10
+ const serviceRoot = (0, node_path_1.resolve)(baseDir, opts.siblingAppDir);
11
+ const mainModulePath = (0, node_path_1.resolve)(serviceRoot, 'dist', 'main.js');
12
+ if (!(0, node_fs_1.existsSync)(mainModulePath)) {
13
+ throw new Error(`${opts.name} dist not found at ${mainModulePath}. ` +
14
+ `Run \`pnpm --filter ${opts.name} build\` first, or use \`pnpm refresh\`.`);
15
+ }
16
+ const childEnv = {
17
+ ...process.env,
18
+ PORT: String(opts.port),
19
+ };
20
+ const child = (0, node_child_process_1.fork)(mainModulePath, [], {
21
+ cwd: serviceRoot,
22
+ env: childEnv,
23
+ });
24
+ return waitForReady(child, opts);
25
+ }
26
+ function waitForReady(child, opts) {
27
+ return new Promise((resolve, reject) => {
28
+ const pid = child.pid;
29
+ if (pid === undefined) {
30
+ reject(new Error(`${opts.name}: child_process.fork() returned a process with no PID.`));
31
+ return;
32
+ }
33
+ let settled = false;
34
+ const settle = (fn) => {
35
+ if (settled) {
36
+ return;
37
+ }
38
+ settled = true;
39
+ fn();
40
+ };
41
+ const onExit = (code, signal) => {
42
+ settle(() => {
43
+ reject(new Error(`${opts.name}: child exited before /health/ready (code=${String(code)}, signal=${String(signal)}).`));
44
+ });
45
+ };
46
+ const onError = (err) => {
47
+ settle(() => {
48
+ reject(new Error(`${opts.name}: child_process.fork() error: ${err.message}`));
49
+ });
50
+ };
51
+ child.once('exit', onExit);
52
+ child.once('error', onError);
53
+ const deadline = Date.now() + opts.readinessTimeoutMs;
54
+ const probe = async () => {
55
+ while (!settled) {
56
+ if (Date.now() > deadline) {
57
+ settle(() => {
58
+ void killChild(child).then(() => {
59
+ reject(new Error(`${opts.name}: /health/ready did not return 200 within ${String(opts.readinessTimeoutMs)}ms.`));
60
+ });
61
+ });
62
+ return;
63
+ }
64
+ if (await probeReady(opts.port)) {
65
+ settle(() => {
66
+ child.off('exit', onExit);
67
+ child.off('error', onError);
68
+ resolve({
69
+ name: opts.name,
70
+ url: `http://localhost:${String(opts.port)}`,
71
+ pid,
72
+ close: () => killChild(child),
73
+ });
74
+ });
75
+ return;
76
+ }
77
+ await sleep(READINESS_PROBE_INTERVAL_MS);
78
+ }
79
+ };
80
+ void probe();
81
+ });
82
+ }
83
+ function probeReady(port) {
84
+ return new Promise((resolve) => {
85
+ const http = require('node:http');
86
+ const req = http.request({
87
+ host: '127.0.0.1',
88
+ port,
89
+ path: '/health/ready',
90
+ method: 'GET',
91
+ timeout: READINESS_PROBE_INTERVAL_MS,
92
+ }, (res) => {
93
+ res.resume();
94
+ resolve(res.statusCode === 200);
95
+ });
96
+ req.on('error', () => { resolve(false); });
97
+ req.on('timeout', () => {
98
+ req.destroy();
99
+ resolve(false);
100
+ });
101
+ req.end();
102
+ });
103
+ }
104
+ function killChild(child) {
105
+ return new Promise((resolve) => {
106
+ if (child.exitCode !== null || child.signalCode !== null) {
107
+ resolve();
108
+ return;
109
+ }
110
+ const killTimer = setTimeout(() => {
111
+ if (child.exitCode === null && child.signalCode === null) {
112
+ child.kill('SIGKILL');
113
+ }
114
+ }, SHUTDOWN_GRACE_MS);
115
+ const onExit = () => {
116
+ clearTimeout(killTimer);
117
+ resolve();
118
+ };
119
+ child.once('exit', onExit);
120
+ child.kill('SIGTERM');
121
+ });
122
+ }
123
+ function sleep(ms) {
124
+ return new Promise((resolve) => { setTimeout(resolve, ms); });
125
+ }
126
+ //# sourceMappingURL=forked-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forked-worker.js","sourceRoot":"","sources":["../../src/dev/forked-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export declare enum InfraDependencyKind {
2
+ Postgres = "postgres",
3
+ Redis = "redis",
4
+ EventHub = "event-hub-api"
5
+ }
6
+ export interface InfraDependency {
7
+ readonly kind: InfraDependencyKind;
8
+ readonly host: string;
9
+ readonly port: number;
10
+ readonly composeServiceName: string;
11
+ readonly dependents: ReadonlyArray<string>;
12
+ }
13
+ export declare const DEFAULT_INFRA_DEPENDENCIES: ReadonlyArray<InfraDependency>;
14
+ export interface InfraProbeResult {
15
+ readonly dependency: InfraDependency;
16
+ readonly reachable: boolean;
17
+ readonly errorCode?: string;
18
+ }
19
+ export interface InfraPreflightReport {
20
+ readonly results: ReadonlyArray<InfraProbeResult>;
21
+ readonly missing: ReadonlyArray<InfraProbeResult>;
22
+ readonly allReachable: boolean;
23
+ }
24
+ export type InfraProbeFn = (host: string, port: number, timeoutMs: number) => Promise<{
25
+ reachable: boolean;
26
+ errorCode?: string;
27
+ }>;
28
+ export declare function runInfraPreflight(deps?: ReadonlyArray<InfraDependency>, probe?: InfraProbeFn, timeoutMs?: number): Promise<InfraPreflightReport>;
29
+ export declare function formatPreflightFailure(report: InfraPreflightReport): string;
30
+ export declare function labelFor(kind: InfraDependencyKind): string;
31
+ //# sourceMappingURL=infra-preflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra-preflight.d.ts","sourceRoot":"","sources":["../../src/dev/infra-preflight.ts"],"names":[],"mappings":"AA2BA,oBAAY,mBAAmB;IAC7B,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,QAAQ,kBAAkB;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAOtB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IAMpC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC5C;AAOD,eAAO,MAAM,0BAA0B,EAAE,aAAa,CAAC,eAAe,CAwCrE,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAM5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IAClD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC;AAOD,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,KACd,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAIzD,wBAAsB,iBAAiB,CACrC,IAAI,GAAE,aAAa,CAAC,eAAe,CAA8B,EACjE,KAAK,GAAE,YAAuB,EAC9B,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,oBAAoB,CAAC,CAqB/B;AAyDD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,GAC3B,MAAM,CAwCR;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAS1D"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_INFRA_DEPENDENCIES = exports.InfraDependencyKind = void 0;
4
+ exports.runInfraPreflight = runInfraPreflight;
5
+ exports.formatPreflightFailure = formatPreflightFailure;
6
+ exports.labelFor = labelFor;
7
+ const node_net_1 = require("node:net");
8
+ var InfraDependencyKind;
9
+ (function (InfraDependencyKind) {
10
+ InfraDependencyKind["Postgres"] = "postgres";
11
+ InfraDependencyKind["Redis"] = "redis";
12
+ InfraDependencyKind["EventHub"] = "event-hub-api";
13
+ })(InfraDependencyKind || (exports.InfraDependencyKind = InfraDependencyKind = {}));
14
+ exports.DEFAULT_INFRA_DEPENDENCIES = [
15
+ {
16
+ kind: InfraDependencyKind.Postgres,
17
+ host: '127.0.0.1',
18
+ port: 5432,
19
+ composeServiceName: 'postgres',
20
+ dependents: [
21
+ 'authorization-api',
22
+ 'llm-registry-api',
23
+ 'project-registry-api',
24
+ 'skill-registry-api',
25
+ 'object-registry-api',
26
+ ],
27
+ },
28
+ {
29
+ kind: InfraDependencyKind.Redis,
30
+ host: '127.0.0.1',
31
+ port: 6379,
32
+ composeServiceName: 'redis',
33
+ dependents: [
34
+ 'workspace-proxy',
35
+ 'public-gateway-api',
36
+ 'mcp-gateway-api',
37
+ ],
38
+ },
39
+ {
40
+ kind: InfraDependencyKind.EventHub,
41
+ host: '127.0.0.1',
42
+ port: 3128,
43
+ composeServiceName: 'event-hub',
44
+ dependents: [
45
+ 'authorization-api',
46
+ 'llm-registry-api',
47
+ 'memory-api',
48
+ 'project-registry-api',
49
+ ],
50
+ },
51
+ ];
52
+ const DEFAULT_TIMEOUT_MS = 1000;
53
+ async function runInfraPreflight(deps = exports.DEFAULT_INFRA_DEPENDENCIES, probe = tcpProbe, timeoutMs = DEFAULT_TIMEOUT_MS) {
54
+ const results = [];
55
+ for (const dep of deps) {
56
+ const outcome = await probe(dep.host, dep.port, timeoutMs);
57
+ const result = outcome.reachable
58
+ ? { dependency: dep, reachable: true }
59
+ : {
60
+ dependency: dep,
61
+ reachable: false,
62
+ ...(outcome.errorCode !== undefined
63
+ ? { errorCode: outcome.errorCode }
64
+ : {}),
65
+ };
66
+ results.push(result);
67
+ }
68
+ const missing = results.filter((r) => !r.reachable);
69
+ return {
70
+ results,
71
+ missing,
72
+ allReachable: missing.length === 0,
73
+ };
74
+ }
75
+ function tcpProbe(host, port, timeoutMs) {
76
+ return new Promise((resolve) => {
77
+ const socket = (0, node_net_1.createConnection)({ host, port });
78
+ let settled = false;
79
+ const settle = (outcome) => {
80
+ if (settled) {
81
+ return;
82
+ }
83
+ settled = true;
84
+ socket.destroy();
85
+ resolve(outcome);
86
+ };
87
+ const watchdog = setTimeout(() => {
88
+ settle({ reachable: false, errorCode: 'timeout' });
89
+ }, timeoutMs);
90
+ watchdog.unref();
91
+ socket.once('connect', () => {
92
+ clearTimeout(watchdog);
93
+ settle({ reachable: true });
94
+ });
95
+ socket.once('error', (err) => {
96
+ clearTimeout(watchdog);
97
+ settle({ reachable: false, errorCode: err.code ?? 'unknown' });
98
+ });
99
+ });
100
+ }
101
+ function formatPreflightFailure(report) {
102
+ if (report.allReachable) {
103
+ return '';
104
+ }
105
+ const lines = [];
106
+ lines.push('`xema dev` requires the following infra services running locally:');
107
+ for (const r of report.missing) {
108
+ const dep = r.dependency;
109
+ const dependents = dep.dependents.join(', ');
110
+ const why = r.errorCode !== undefined ? ` [${r.errorCode}]` : '';
111
+ lines.push(` - ${labelFor(dep.kind)} (${dep.host}:${dep.port})${why} — needed by: ${dependents}`);
112
+ }
113
+ const composeNames = report.missing
114
+ .map((r) => r.dependency.composeServiceName)
115
+ .join(' ');
116
+ lines.push('');
117
+ lines.push('Quickest path:');
118
+ lines.push(` cd test-suite && docker compose up -d ${composeNames}`);
119
+ lines.push('');
120
+ lines.push('Or run `xema doctor --infra` to see the full status table.');
121
+ lines.push('');
122
+ lines.push('Note: `xema dev` wires 29/29 services into its candidate list (mix');
123
+ lines.push('of in-process + forked-worker) — see Phase J in the plan-of-record.');
124
+ lines.push('Individual services that fail to boot are routed through skip-mode');
125
+ lines.push('(see `dev-orchestrator.ts` header for the forked-worker root cause).');
126
+ return lines.join('\n');
127
+ }
128
+ function labelFor(kind) {
129
+ switch (kind) {
130
+ case InfraDependencyKind.Postgres:
131
+ return 'Postgres';
132
+ case InfraDependencyKind.Redis:
133
+ return 'Redis';
134
+ case InfraDependencyKind.EventHub:
135
+ return 'event-hub-api';
136
+ }
137
+ }
138
+ //# sourceMappingURL=infra-preflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infra-preflight.js","sourceRoot":"","sources":["../../src/dev/infra-preflight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Command } from 'commander';
2
+ export type RegisterCommand = (program: Command) => void;
3
+ export declare const XEMA_CLI_COMMAND_NAMES: readonly ["dev", "serve", "biome", "run", "shell", "objects", "doctor"];
4
+ export type XemaCliCommandName = (typeof XEMA_CLI_COMMAND_NAMES)[number];
5
+ //# sourceMappingURL=command-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAYzD,eAAO,MAAM,sBAAsB,yEAQzB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XEMA_CLI_COMMAND_NAMES = void 0;
4
+ exports.XEMA_CLI_COMMAND_NAMES = [
5
+ 'dev',
6
+ 'serve',
7
+ 'biome',
8
+ 'run',
9
+ 'shell',
10
+ 'objects',
11
+ 'doctor',
12
+ ];
13
+ //# sourceMappingURL=command-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":";;;AAqBa,QAAA,sBAAsB,GAAG;IACpC,KAAK;IACL,OAAO;IACP,OAAO;IACP,KAAK;IACL,OAAO;IACP,SAAS;IACT,QAAQ;CACA,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare enum XemaCliExitCode {
2
+ Ok = 0,
3
+ GenericError = 1,
4
+ NotImplemented = 2,
5
+ MissingDependency = 3,
6
+ ConfigurationError = 4,
7
+ NotFound = 5
8
+ }
9
+ export declare function exitWith(code: XemaCliExitCode, message?: string): never;
10
+ //# sourceMappingURL=exit-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.d.ts","sourceRoot":"","sources":["../../src/lib/exit-codes.ts"],"names":[],"mappings":"AAWA,oBAAY,eAAe;IACzB,EAAE,IAAI;IACN,YAAY,IAAI;IAChB,cAAc,IAAI;IAClB,iBAAiB,IAAI;IACrB,kBAAkB,IAAI;IACtB,QAAQ,IAAI;CACb;AAOD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CASvE"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XemaCliExitCode = void 0;
4
+ exports.exitWith = exitWith;
5
+ var XemaCliExitCode;
6
+ (function (XemaCliExitCode) {
7
+ XemaCliExitCode[XemaCliExitCode["Ok"] = 0] = "Ok";
8
+ XemaCliExitCode[XemaCliExitCode["GenericError"] = 1] = "GenericError";
9
+ XemaCliExitCode[XemaCliExitCode["NotImplemented"] = 2] = "NotImplemented";
10
+ XemaCliExitCode[XemaCliExitCode["MissingDependency"] = 3] = "MissingDependency";
11
+ XemaCliExitCode[XemaCliExitCode["ConfigurationError"] = 4] = "ConfigurationError";
12
+ XemaCliExitCode[XemaCliExitCode["NotFound"] = 5] = "NotFound";
13
+ })(XemaCliExitCode || (exports.XemaCliExitCode = XemaCliExitCode = {}));
14
+ function exitWith(code, message) {
15
+ if (message !== undefined && message.length > 0) {
16
+ if (code === XemaCliExitCode.Ok) {
17
+ console.log(message);
18
+ }
19
+ else {
20
+ console.error(message);
21
+ }
22
+ }
23
+ process.exit(code);
24
+ }
25
+ //# sourceMappingURL=exit-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../../src/lib/exit-codes.ts"],"names":[],"mappings":";;;AAyBA,4BASC;AAvBD,IAAY,eAOX;AAPD,WAAY,eAAe;IACzB,iDAAM,CAAA;IACN,qEAAgB,CAAA;IAChB,yEAAkB,CAAA;IAClB,+EAAqB,CAAA;IACrB,iFAAsB,CAAA;IACtB,6DAAY,CAAA;AACd,CAAC,EAPW,eAAe,+BAAf,eAAe,QAO1B;AAOD,SAAgB,QAAQ,CAAC,IAAqB,EAAE,OAAgB;IAC9D,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,KAAK,eAAe,CAAC,EAAE,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@xemahq/xema",
3
+ "version": "0.1.1",
4
+ "description": "Xema OS global CLI (plan v4.3 §6 Phase J). Single binary day-0 onboarding: `npm i -g @xemahq/xema && xema dev` boots the whole stack; `xema biome scaffold` / `install` / `publish` / `lint` author and ship biomes; `xema run <capability>` invokes through the local capability-router. Multi-platform: works without pnpm or any monorepo clone.",
5
+ "type": "commonjs",
6
+ "main": "dist/cli.js",
7
+ "bin": {
8
+ "xema": "./dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*"
12
+ ],
13
+ "publishConfig": {
14
+ "registry": "https://registry.npmjs.org/",
15
+ "access": "public"
16
+ },
17
+ "dependencies": {
18
+ "@nestjs/common": "11.1.13",
19
+ "@nestjs/core": "11.1.13",
20
+ "@nestjs/platform-express": "11.1.13",
21
+ "@xemahq/kernel-state-runtime": "^0.1.0",
22
+ "@xemahq/service-registry-nest": "^0.1.0",
23
+ "commander": "^12.1.0",
24
+ "reflect-metadata": "0.2.2",
25
+ "rxjs": "7.8.2"
26
+ },
27
+ "devDependencies": {
28
+ "@eslint/js": "^9.39.4",
29
+ "@types/jest": "^30.0.0",
30
+ "@types/node": "25.2.3",
31
+ "@yao-pkg/pkg": "^6.6.0",
32
+ "eslint": "^9.39.4",
33
+ "eslint-config-prettier": "^10.1.8",
34
+ "eslint-plugin-import": "^2.32.0",
35
+ "eslint-plugin-unused-imports": "^4.4.1",
36
+ "jest": "^30.3.0",
37
+ "prettier": "3.6.2",
38
+ "ts-jest": "^29.4.9",
39
+ "ts-node": "^10.9.2",
40
+ "typescript": "5.9.3",
41
+ "typescript-eslint": "^8.56.1"
42
+ },
43
+ "pkg": {
44
+ "scripts": [
45
+ "dist/**/*.js"
46
+ ],
47
+ "assets": [
48
+ "dist/**/*.json"
49
+ ],
50
+ "targets": [
51
+ "node20-macos-arm64",
52
+ "node20-macos-x64",
53
+ "node20-linux-arm64",
54
+ "node20-linux-x64",
55
+ "node20-win-x64"
56
+ ],
57
+ "outputPath": "dist/bin"
58
+ },
59
+ "scripts": {
60
+ "clean": "rm -rf dist",
61
+ "build": "tsc -p tsconfig.json && node ./scripts/post-build.cjs",
62
+ "build:binary": "node ./scripts/build-binaries.cjs",
63
+ "format": "prettier --write \"src/**/*.ts\"",
64
+ "start": "node ./dist/cli.js",
65
+ "lint": "eslint \"src/**/*.ts\"",
66
+ "lint:fix": "eslint \"src/**/*.ts\" --fix",
67
+ "test": "jest --config jest.config.cjs",
68
+ "typecheck": "tsc --noEmit"
69
+ }
70
+ }