@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.
- package/LICENSE.md +21 -0
- package/dist/commands/add.d.ts +8 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +363 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/apply.d.ts +9 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +289 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/doctor.d.ts +45 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +346 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/env.d.ts +23 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +230 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/hook.d.ts +16 -0
- package/dist/commands/hook.d.ts.map +1 -0
- package/dist/commands/hook.js +80 -0
- package/dist/commands/hook.js.map +1 -0
- package/dist/commands/init.d.ts +42 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +532 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inspect.d.ts +8 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +177 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/install-service.d.ts +8 -0
- package/dist/commands/install-service.d.ts.map +1 -0
- package/dist/commands/install-service.js +182 -0
- package/dist/commands/install-service.js.map +1 -0
- package/dist/commands/logs.d.ts +8 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +197 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/plan.d.ts +9 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +200 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/routes.d.ts +37 -0
- package/dist/commands/routes.d.ts.map +1 -0
- package/dist/commands/routes.js +167 -0
- package/dist/commands/routes.js.map +1 -0
- package/dist/commands/service.d.ts +9 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +178 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/status.d.ts +8 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +176 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +8 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +102 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/test.d.ts +8 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +236 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/validate.d.ts +33 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +501 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/version.d.ts +8 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +42 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/config.d.ts +27 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +169 -0
- package/dist/config.js.map +1 -0
- package/dist/env-metadata.d.ts +12 -0
- package/dist/env-metadata.d.ts.map +1 -0
- package/dist/env-metadata.js +39 -0
- package/dist/env-metadata.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/module-resolver.d.ts +42 -0
- package/dist/module-resolver.d.ts.map +1 -0
- package/dist/module-resolver.js +134 -0
- package/dist/module-resolver.js.map +1 -0
- package/dist/output.d.ts +36 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +142 -0
- package/dist/output.js.map +1 -0
- package/dist/resolve-connectors.d.ts +27 -0
- package/dist/resolve-connectors.d.ts.map +1 -0
- package/dist/resolve-connectors.js +94 -0
- package/dist/resolve-connectors.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|