@orgloop/cli 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.
Files changed (94) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/commands/add.d.ts +8 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +363 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/apply.d.ts +9 -0
  7. package/dist/commands/apply.d.ts.map +1 -0
  8. package/dist/commands/apply.js +289 -0
  9. package/dist/commands/apply.js.map +1 -0
  10. package/dist/commands/doctor.d.ts +45 -0
  11. package/dist/commands/doctor.d.ts.map +1 -0
  12. package/dist/commands/doctor.js +346 -0
  13. package/dist/commands/doctor.js.map +1 -0
  14. package/dist/commands/env.d.ts +23 -0
  15. package/dist/commands/env.d.ts.map +1 -0
  16. package/dist/commands/env.js +230 -0
  17. package/dist/commands/env.js.map +1 -0
  18. package/dist/commands/hook.d.ts +16 -0
  19. package/dist/commands/hook.d.ts.map +1 -0
  20. package/dist/commands/hook.js +80 -0
  21. package/dist/commands/hook.js.map +1 -0
  22. package/dist/commands/init.d.ts +42 -0
  23. package/dist/commands/init.d.ts.map +1 -0
  24. package/dist/commands/init.js +532 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/inspect.d.ts +8 -0
  27. package/dist/commands/inspect.d.ts.map +1 -0
  28. package/dist/commands/inspect.js +177 -0
  29. package/dist/commands/inspect.js.map +1 -0
  30. package/dist/commands/install-service.d.ts +8 -0
  31. package/dist/commands/install-service.d.ts.map +1 -0
  32. package/dist/commands/install-service.js +182 -0
  33. package/dist/commands/install-service.js.map +1 -0
  34. package/dist/commands/logs.d.ts +8 -0
  35. package/dist/commands/logs.d.ts.map +1 -0
  36. package/dist/commands/logs.js +197 -0
  37. package/dist/commands/logs.js.map +1 -0
  38. package/dist/commands/plan.d.ts +9 -0
  39. package/dist/commands/plan.d.ts.map +1 -0
  40. package/dist/commands/plan.js +200 -0
  41. package/dist/commands/plan.js.map +1 -0
  42. package/dist/commands/routes.d.ts +37 -0
  43. package/dist/commands/routes.d.ts.map +1 -0
  44. package/dist/commands/routes.js +167 -0
  45. package/dist/commands/routes.js.map +1 -0
  46. package/dist/commands/service.d.ts +9 -0
  47. package/dist/commands/service.d.ts.map +1 -0
  48. package/dist/commands/service.js +178 -0
  49. package/dist/commands/service.js.map +1 -0
  50. package/dist/commands/status.d.ts +8 -0
  51. package/dist/commands/status.d.ts.map +1 -0
  52. package/dist/commands/status.js +176 -0
  53. package/dist/commands/status.js.map +1 -0
  54. package/dist/commands/stop.d.ts +8 -0
  55. package/dist/commands/stop.d.ts.map +1 -0
  56. package/dist/commands/stop.js +102 -0
  57. package/dist/commands/stop.js.map +1 -0
  58. package/dist/commands/test.d.ts +8 -0
  59. package/dist/commands/test.d.ts.map +1 -0
  60. package/dist/commands/test.js +236 -0
  61. package/dist/commands/test.js.map +1 -0
  62. package/dist/commands/validate.d.ts +33 -0
  63. package/dist/commands/validate.d.ts.map +1 -0
  64. package/dist/commands/validate.js +501 -0
  65. package/dist/commands/validate.js.map +1 -0
  66. package/dist/commands/version.d.ts +8 -0
  67. package/dist/commands/version.d.ts.map +1 -0
  68. package/dist/commands/version.js +42 -0
  69. package/dist/commands/version.js.map +1 -0
  70. package/dist/config.d.ts +27 -0
  71. package/dist/config.d.ts.map +1 -0
  72. package/dist/config.js +169 -0
  73. package/dist/config.js.map +1 -0
  74. package/dist/env-metadata.d.ts +12 -0
  75. package/dist/env-metadata.d.ts.map +1 -0
  76. package/dist/env-metadata.js +39 -0
  77. package/dist/env-metadata.js.map +1 -0
  78. package/dist/index.d.ts +8 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +86 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/module-resolver.d.ts +42 -0
  83. package/dist/module-resolver.d.ts.map +1 -0
  84. package/dist/module-resolver.js +134 -0
  85. package/dist/module-resolver.js.map +1 -0
  86. package/dist/output.d.ts +36 -0
  87. package/dist/output.d.ts.map +1 -0
  88. package/dist/output.js +142 -0
  89. package/dist/output.js.map +1 -0
  90. package/dist/resolve-connectors.d.ts +27 -0
  91. package/dist/resolve-connectors.d.ts.map +1 -0
  92. package/dist/resolve-connectors.js +94 -0
  93. package/dist/resolve-connectors.js.map +1 -0
  94. package/package.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/commands/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * orgloop status — Show runtime status.
3
+ *
4
+ * Displays uptime, sources, actors, routes, and recent events.
5
+ */
6
+ import type { Command } from 'commander';
7
+ export declare function registerStatusCommand(program: Command): void;
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiEzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuI5D"}
@@ -0,0 +1,176 @@
1
+ /**
2
+ * orgloop status — Show runtime status.
3
+ *
4
+ * Displays uptime, sources, actors, routes, and recent events.
5
+ */
6
+ import { readFile } from 'node:fs/promises';
7
+ import { homedir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ import { loadCliConfig } from '../config.js';
10
+ import * as output from '../output.js';
11
+ const PID_FILE = join(homedir(), '.orgloop', 'orgloop.pid');
12
+ const LOG_FILE = join(homedir(), '.orgloop', 'logs', 'orgloop.log');
13
+ function isProcessRunning(pid) {
14
+ try {
15
+ process.kill(pid, 0);
16
+ return true;
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ function formatUptime(ms) {
23
+ const seconds = Math.floor(ms / 1000);
24
+ const minutes = Math.floor(seconds / 60);
25
+ const hours = Math.floor(minutes / 60);
26
+ const days = Math.floor(hours / 24);
27
+ if (days > 0)
28
+ return `${days}d ${hours % 24}h`;
29
+ if (hours > 0)
30
+ return `${hours}h ${minutes % 60}m`;
31
+ if (minutes > 0)
32
+ return `${minutes}m ${seconds % 60}s`;
33
+ return `${seconds}s`;
34
+ }
35
+ async function getRecentEvents(count) {
36
+ try {
37
+ const content = await readFile(LOG_FILE, 'utf-8');
38
+ const lines = content.trim().split('\n').filter(Boolean);
39
+ const entries = [];
40
+ for (const line of lines.slice(-count * 3)) {
41
+ try {
42
+ const entry = JSON.parse(line);
43
+ if (entry.phase === 'deliver.success' ||
44
+ entry.phase === 'deliver.failure' ||
45
+ entry.phase === 'transform.drop') {
46
+ entries.push(entry);
47
+ }
48
+ }
49
+ catch {
50
+ /* skip malformed */
51
+ }
52
+ }
53
+ return entries.slice(-count);
54
+ }
55
+ catch {
56
+ return [];
57
+ }
58
+ }
59
+ export function registerStatusCommand(program) {
60
+ program
61
+ .command('status')
62
+ .description('Show runtime status')
63
+ .action(async (_opts, cmd) => {
64
+ try {
65
+ const globalOpts = cmd.parent?.opts() ?? {};
66
+ // Check if running
67
+ let pid = null;
68
+ let running = false;
69
+ try {
70
+ const pidStr = await readFile(PID_FILE, 'utf-8');
71
+ pid = Number.parseInt(pidStr.trim(), 10);
72
+ running = !Number.isNaN(pid) && isProcessRunning(pid);
73
+ }
74
+ catch {
75
+ /* no pid file */
76
+ }
77
+ if (!running) {
78
+ if (output.isJsonMode()) {
79
+ output.json({ running: false });
80
+ }
81
+ else {
82
+ output.info('OrgLoop is not running.');
83
+ output.info('Run `orgloop apply` to start.');
84
+ }
85
+ return;
86
+ }
87
+ // Load config for display
88
+ let config = null;
89
+ try {
90
+ config = await loadCliConfig({ configPath: globalOpts.config });
91
+ }
92
+ catch {
93
+ /* ignore — config not loadable */
94
+ }
95
+ if (output.isJsonMode()) {
96
+ output.json({
97
+ running: true,
98
+ pid,
99
+ project: config?.project.name ?? 'unknown',
100
+ sources: config?.sources.length ?? 0,
101
+ actors: config?.actors.length ?? 0,
102
+ routes: config?.routes.length ?? 0,
103
+ });
104
+ return;
105
+ }
106
+ output.blank();
107
+ output.heading(`OrgLoop — ${config?.project.name ?? 'unknown'}`);
108
+ output.info(` Status: running (PID ${pid})`);
109
+ output.info(' Workspace: default');
110
+ // Sources table
111
+ if (config && config.sources.length > 0) {
112
+ output.table([
113
+ { header: 'NAME', key: 'name', width: 16 },
114
+ { header: 'TYPE', key: 'type', width: 10 },
115
+ { header: 'INTERVAL', key: 'interval', width: 12 },
116
+ ], config.sources.map((s) => ({
117
+ name: s.id,
118
+ type: s.poll ? 'poll' : 'hook',
119
+ interval: s.poll?.interval ?? '—',
120
+ })));
121
+ }
122
+ // Actors table
123
+ if (config && config.actors.length > 0) {
124
+ output.blank();
125
+ output.table([
126
+ { header: 'NAME', key: 'name', width: 24 },
127
+ { header: 'STATUS', key: 'status', width: 12 },
128
+ ], config.actors.map((a) => ({
129
+ name: a.id,
130
+ status: 'healthy',
131
+ })));
132
+ }
133
+ // Routes table
134
+ if (config && config.routes.length > 0) {
135
+ output.blank();
136
+ output.table([
137
+ { header: 'NAME', key: 'name', width: 32 },
138
+ { header: 'SOURCE', key: 'source', width: 16 },
139
+ { header: 'ACTOR', key: 'actor', width: 20 },
140
+ ], config.routes.map((r) => ({
141
+ name: r.name,
142
+ source: r.when.source,
143
+ actor: r.then.actor,
144
+ })));
145
+ }
146
+ // Recent events
147
+ const recentEvents = await getRecentEvents(5);
148
+ if (recentEvents.length > 0) {
149
+ output.blank();
150
+ output.heading('Recent Events (last 5):');
151
+ output.table([
152
+ { header: 'TIME', key: 'time', width: 14 },
153
+ { header: 'SOURCE', key: 'source', width: 12 },
154
+ { header: 'TYPE', key: 'type', width: 20 },
155
+ { header: 'ROUTE', key: 'route', width: 30 },
156
+ { header: 'STATUS', key: 'status', width: 16 },
157
+ ], recentEvents.map((e) => {
158
+ const time = new Date(e.timestamp).toLocaleTimeString('en-US', { hour12: false });
159
+ return {
160
+ time,
161
+ source: e.source ?? '—',
162
+ type: e.event_type ?? '—',
163
+ route: e.route ?? '—',
164
+ status: e.result ?? e.phase.split('.')[1] ?? '—',
165
+ };
166
+ }));
167
+ }
168
+ output.blank();
169
+ }
170
+ catch (err) {
171
+ output.error(`Status failed: ${err instanceof Error ? err.message : String(err)}`);
172
+ process.exitCode = 1;
173
+ }
174
+ });
175
+ }
176
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * orgloop stop — Stop the running runtime.
3
+ *
4
+ * Reads PID from ~/.orgloop/orgloop.pid, sends SIGTERM, waits for exit.
5
+ */
6
+ import type { Command } from 'commander';
7
+ export declare function registerStopCommand(program: Command): void;
8
+ //# sourceMappingURL=stop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyE1D"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * orgloop stop — Stop the running runtime.
3
+ *
4
+ * Reads PID from ~/.orgloop/orgloop.pid, sends SIGTERM, waits for exit.
5
+ */
6
+ import { readFile, unlink } from 'node:fs/promises';
7
+ import { homedir } from 'node:os';
8
+ import { join } from 'node:path';
9
+ import * as output from '../output.js';
10
+ const PID_FILE = join(homedir(), '.orgloop', 'orgloop.pid');
11
+ const SHUTDOWN_TIMEOUT_MS = 10_000;
12
+ function isProcessRunning(pid) {
13
+ try {
14
+ process.kill(pid, 0);
15
+ return true;
16
+ }
17
+ catch {
18
+ return false;
19
+ }
20
+ }
21
+ async function waitForExit(pid, timeoutMs) {
22
+ const start = Date.now();
23
+ while (Date.now() - start < timeoutMs) {
24
+ if (!isProcessRunning(pid))
25
+ return true;
26
+ await new Promise((resolve) => setTimeout(resolve, 200));
27
+ }
28
+ return false;
29
+ }
30
+ export function registerStopCommand(program) {
31
+ program
32
+ .command('stop')
33
+ .description('Stop the running runtime')
34
+ .option('--force', 'Force kill with SIGKILL')
35
+ .action(async (opts) => {
36
+ try {
37
+ let pidStr;
38
+ try {
39
+ pidStr = await readFile(PID_FILE, 'utf-8');
40
+ }
41
+ catch {
42
+ output.info('OrgLoop is not running (no PID file found).');
43
+ return;
44
+ }
45
+ const pid = Number.parseInt(pidStr.trim(), 10);
46
+ if (Number.isNaN(pid)) {
47
+ output.error(`Invalid PID in ${PID_FILE}`);
48
+ process.exitCode = 1;
49
+ return;
50
+ }
51
+ if (!isProcessRunning(pid)) {
52
+ output.info('OrgLoop is not running (stale PID file).');
53
+ try {
54
+ await unlink(PID_FILE);
55
+ }
56
+ catch {
57
+ /* ignore */
58
+ }
59
+ return;
60
+ }
61
+ output.info(`Stopping OrgLoop (PID ${pid})...`);
62
+ if (opts.force) {
63
+ process.kill(pid, 'SIGKILL');
64
+ output.success('Force killed.');
65
+ }
66
+ else {
67
+ process.kill(pid, 'SIGTERM');
68
+ output.success('Flushing loggers...');
69
+ output.success('Saving checkpoints...');
70
+ output.success('Shutting down sources...');
71
+ const exited = await waitForExit(pid, SHUTDOWN_TIMEOUT_MS);
72
+ if (exited) {
73
+ output.success('Stopped.');
74
+ }
75
+ else {
76
+ output.warn(`Process did not exit within ${SHUTDOWN_TIMEOUT_MS / 1000}s. Sending SIGKILL...`);
77
+ try {
78
+ process.kill(pid, 'SIGKILL');
79
+ }
80
+ catch {
81
+ /* already dead */
82
+ }
83
+ output.success('Force killed.');
84
+ }
85
+ }
86
+ try {
87
+ await unlink(PID_FILE);
88
+ }
89
+ catch {
90
+ /* ignore */
91
+ }
92
+ if (output.isJsonMode()) {
93
+ output.json({ stopped: true, pid });
94
+ }
95
+ }
96
+ catch (err) {
97
+ output.error(`Stop failed: ${err instanceof Error ? err.message : String(err)}`);
98
+ process.exitCode = 1;
99
+ }
100
+ });
101
+ }
102
+ //# sourceMappingURL=stop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAC5D,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,SAAS,gBAAgB,CAAC,GAAW;IACpC,IAAI,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,SAAiB;IACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IACnD,OAAO;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,IAAI,CAAC;YACJ,IAAI,MAAc,CAAC;YACnB,IAAI,CAAC;gBACJ,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACR,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC3D,OAAO;YACR,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/C,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,EAAE,CAAC,CAAC;gBAC3C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACR,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;gBACxD,IAAI,CAAC;oBACJ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACxB,CAAC;gBAAC,MAAM,CAAC;oBACR,YAAY;gBACb,CAAC;gBACD,OAAO;YACR,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,yBAAyB,GAAG,MAAM,CAAC,CAAC;YAEhD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7B,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC7B,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBACtC,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBACxC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;gBAE3C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;gBAC3D,IAAI,MAAM,EAAE,CAAC;oBACZ,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,IAAI,CACV,+BAA+B,mBAAmB,GAAG,IAAI,uBAAuB,CAChF,CAAC;oBACF,IAAI,CAAC;wBACJ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBAC9B,CAAC;oBAAC,MAAM,CAAC;wBACR,kBAAkB;oBACnB,CAAC;oBACD,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;gBACjC,CAAC;YACF,CAAC;YAED,IAAI,CAAC;gBACJ,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACR,YAAY;YACb,CAAC;YAED,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;YACrC,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,CAAC,KAAK,CAAC,gBAAgB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * orgloop test — Inject a test event and trace its path.
3
+ *
4
+ * Accepts event JSON file, stdin, or generates sample events.
5
+ */
6
+ import type { Command } from 'commander';
7
+ export declare function registerTestCommand(program: Command): void;
8
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiFzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+J1D"}
@@ -0,0 +1,236 @@
1
+ /**
2
+ * orgloop test — Inject a test event and trace its path.
3
+ *
4
+ * Accepts event JSON file, stdin, or generates sample events.
5
+ */
6
+ import { readFile } from 'node:fs/promises';
7
+ import { generateEventId, generateTraceId } from '@orgloop/sdk';
8
+ import { loadCliConfig } from '../config.js';
9
+ import * as output from '../output.js';
10
+ // ─── Sample events ───────────────────────────────────────────────────────────
11
+ const SAMPLE_EVENTS = {
12
+ github: {
13
+ id: generateEventId(),
14
+ timestamp: new Date().toISOString(),
15
+ source: 'github',
16
+ type: 'resource.changed',
17
+ provenance: {
18
+ platform: 'github',
19
+ platform_event: 'pull_request.opened',
20
+ author: 'developer',
21
+ author_type: 'team_member',
22
+ },
23
+ payload: {
24
+ action: 'opened',
25
+ resource_type: 'pull_request',
26
+ number: 42,
27
+ title: 'Add new feature',
28
+ url: 'https://github.com/org/repo/pull/42',
29
+ body: 'This PR adds a new feature...',
30
+ labels: ['enhancement'],
31
+ draft: false,
32
+ },
33
+ },
34
+ linear: {
35
+ id: generateEventId(),
36
+ timestamp: new Date().toISOString(),
37
+ source: 'linear',
38
+ type: 'resource.changed',
39
+ provenance: {
40
+ platform: 'linear',
41
+ platform_event: 'issue.updated',
42
+ author: 'developer',
43
+ author_type: 'team_member',
44
+ },
45
+ payload: {
46
+ action: 'updated',
47
+ resource_type: 'issue',
48
+ identifier: 'ENG-123',
49
+ title: 'Fix authentication bug',
50
+ state: 'In Progress',
51
+ priority: 2,
52
+ url: 'https://linear.app/team/issue/ENG-123',
53
+ },
54
+ },
55
+ 'claude-code': {
56
+ id: generateEventId(),
57
+ timestamp: new Date().toISOString(),
58
+ source: 'claude-code',
59
+ type: 'actor.stopped',
60
+ provenance: {
61
+ platform: 'claude-code',
62
+ platform_event: 'session.exit',
63
+ author: 'claude-code',
64
+ author_type: 'bot',
65
+ },
66
+ payload: {
67
+ session_id: 'sess_abc123',
68
+ exit_code: 0,
69
+ duration_seconds: 1200,
70
+ summary: 'Completed refactoring of auth module',
71
+ files_changed: 5,
72
+ },
73
+ },
74
+ };
75
+ async function readEventFromStdin() {
76
+ const chunks = [];
77
+ for await (const chunk of process.stdin) {
78
+ chunks.push(chunk);
79
+ }
80
+ return Buffer.concat(chunks).toString('utf-8');
81
+ }
82
+ // ─── Command registration ────────────────────────────────────────────────────
83
+ export function registerTestCommand(program) {
84
+ program
85
+ .command('test [file]')
86
+ .description('Inject a test event and trace its path')
87
+ .option('--generate <connector>', 'Generate a sample event for a connector type')
88
+ .option('--dry-run', 'Trace through pipeline without actual delivery')
89
+ .action(async (file, opts, cmd) => {
90
+ try {
91
+ const globalOpts = cmd.parent?.opts() ?? {};
92
+ // Generate mode
93
+ if (opts.generate) {
94
+ const sample = SAMPLE_EVENTS[opts.generate];
95
+ if (!sample) {
96
+ output.error(`Unknown connector: ${opts.generate}`);
97
+ output.info(`Available: ${Object.keys(SAMPLE_EVENTS).join(', ')}`);
98
+ process.exitCode = 1;
99
+ return;
100
+ }
101
+ // Regenerate IDs for freshness
102
+ const event = {
103
+ ...sample,
104
+ id: generateEventId(),
105
+ timestamp: new Date().toISOString(),
106
+ trace_id: generateTraceId(),
107
+ };
108
+ console.log(JSON.stringify(event, null, 2));
109
+ return;
110
+ }
111
+ // Read event
112
+ let eventJson;
113
+ if (file === '-') {
114
+ eventJson = await readEventFromStdin();
115
+ }
116
+ else if (file) {
117
+ eventJson = await readFile(file, 'utf-8');
118
+ }
119
+ else {
120
+ output.error('Provide an event file, use "-" for stdin, or --generate <connector>');
121
+ process.exitCode = 1;
122
+ return;
123
+ }
124
+ let event;
125
+ try {
126
+ event = JSON.parse(eventJson);
127
+ }
128
+ catch {
129
+ output.error('Invalid JSON in event file');
130
+ process.exitCode = 1;
131
+ return;
132
+ }
133
+ // Ensure event has required fields
134
+ if (!event.id)
135
+ event.id = generateEventId();
136
+ if (!event.timestamp)
137
+ event.timestamp = new Date().toISOString();
138
+ if (!event.trace_id)
139
+ event.trace_id = generateTraceId();
140
+ output.blank();
141
+ output.info(`Injecting test event: ${event.type} (source: ${event.source})`);
142
+ output.blank();
143
+ // Load config to find matching routes
144
+ const config = await loadCliConfig({ configPath: globalOpts.config });
145
+ // Find matching routes
146
+ const matchedRoutes = config.routes.filter((r) => {
147
+ if (r.when.source !== event.source)
148
+ return false;
149
+ if (!r.when.events.includes(event.type))
150
+ return false;
151
+ return true;
152
+ });
153
+ if (matchedRoutes.length === 0) {
154
+ output.warn('No routes matched this event.');
155
+ if (output.isJsonMode()) {
156
+ output.json({ event, matched_routes: 0, results: [] });
157
+ }
158
+ return;
159
+ }
160
+ const results = [];
161
+ for (const route of matchedRoutes) {
162
+ // Process transforms
163
+ if (route.transforms) {
164
+ for (const tRef of route.transforms) {
165
+ const transform = config.transforms.find((t) => t.name === tRef.ref);
166
+ const start = Date.now();
167
+ if (!transform) {
168
+ output.error(`Transform: ${tRef.ref} — NOT FOUND`);
169
+ results.push({
170
+ step: `transform:${tRef.ref}`,
171
+ status: 'not_found',
172
+ duration_ms: 0,
173
+ });
174
+ continue;
175
+ }
176
+ // Simulate transform execution
177
+ const duration = Date.now() - start + 1;
178
+ output.success(`Transform: ${tRef.ref} — PASS (${duration}ms)`);
179
+ results.push({
180
+ step: `transform:${tRef.ref}`,
181
+ status: 'pass',
182
+ duration_ms: duration,
183
+ });
184
+ }
185
+ }
186
+ // Route match
187
+ output.success(`Route match: ${route.name}`);
188
+ results.push({ step: `route:${route.name}`, status: 'matched', duration_ms: 0 });
189
+ // Delivery
190
+ if (opts.dryRun) {
191
+ output.info(` Delivery: ${route.then.actor} — DRY RUN (skipped)`);
192
+ results.push({
193
+ step: `deliver:${route.then.actor}`,
194
+ status: 'dry_run',
195
+ duration_ms: 0,
196
+ });
197
+ }
198
+ else {
199
+ // Try to inject via core engine
200
+ try {
201
+ const core = await import('@orgloop/core');
202
+ const engine = new core.OrgLoop(config);
203
+ const start = Date.now();
204
+ await engine.inject(event);
205
+ const duration = Date.now() - start;
206
+ output.success(`Delivery: ${route.then.actor} — OK (${duration}ms)`);
207
+ results.push({
208
+ step: `deliver:${route.then.actor}`,
209
+ status: 'ok',
210
+ duration_ms: duration,
211
+ });
212
+ }
213
+ catch {
214
+ // Core not available — simulate
215
+ output.success(`Delivery: ${route.then.actor} — OK (simulated)`);
216
+ results.push({
217
+ step: `deliver:${route.then.actor}`,
218
+ status: 'simulated',
219
+ duration_ms: 0,
220
+ });
221
+ }
222
+ }
223
+ }
224
+ output.blank();
225
+ output.info(`Event ${event.id.slice(0, 16)} traced successfully through ${matchedRoutes.length} route${matchedRoutes.length > 1 ? 's' : ''}.`);
226
+ if (output.isJsonMode()) {
227
+ output.json({ event, matched_routes: matchedRoutes.length, results });
228
+ }
229
+ }
230
+ catch (err) {
231
+ output.error(`Test failed: ${err instanceof Error ? err.message : String(err)}`);
232
+ process.exitCode = 1;
233
+ }
234
+ });
235
+ }
236
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * orgloop validate — Validate configuration files.
3
+ *
4
+ * Checks YAML syntax, schema conformance, reference integrity,
5
+ * transform script existence/permissions, and prompt file existence.
6
+ */
7
+ import type { ActorInstanceConfig, RouteDefinition, SourceInstanceConfig, TransformDefinition } from '@orgloop/sdk';
8
+ import type { Command } from 'commander';
9
+ export interface ValidationResult {
10
+ file: string;
11
+ valid: boolean;
12
+ description: string;
13
+ errors: string[];
14
+ }
15
+ export interface GraphWarning {
16
+ kind: 'dead-source' | 'unreachable-actor' | 'orphan-transform' | 'event-type-mismatch';
17
+ id: string;
18
+ message: string;
19
+ }
20
+ export declare function validateRouteGraph(sources: Map<string, SourceInstanceConfig>, actors: Map<string, ActorInstanceConfig>, transforms: Map<string, TransformDefinition>, routes: RouteDefinition[]): GraphWarning[];
21
+ export interface EnvWarning {
22
+ name: string;
23
+ source: string;
24
+ }
25
+ export declare function runValidation(configPath: string): Promise<{
26
+ results: ValidationResult[];
27
+ errorCount: number;
28
+ warnCount: number;
29
+ graphWarnings: GraphWarning[];
30
+ envWarnings: EnvWarning[];
31
+ }>;
32
+ export declare function registerValidateCommand(program: Command): void;
33
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACX,mBAAmB,EAGnB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,MAAM,WAAW,gBAAgB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAsMD,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,qBAAqB,CAAC;IACvF,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CACjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC1C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EACxC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAC5C,MAAM,EAAE,eAAe,EAAE,GACvB,YAAY,EAAE,CAoEhB;AAqBD,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAChE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,UAAU,EAAE,CAAC;CAC1B,CAAC,CAiND;AAID,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0E9D"}