@a5c-ai/omni 5.0.1-staging.016f0b0e8119
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/README.md +34 -0
- package/dist/cli/amuxEventsFormatter.d.ts +26 -0
- package/dist/cli/amuxEventsFormatter.d.ts.map +1 -0
- package/dist/cli/amuxEventsFormatter.js +86 -0
- package/dist/cli/args/argFlags.d.ts +6 -0
- package/dist/cli/args/argFlags.d.ts.map +1 -0
- package/dist/cli/args/argFlags.js +72 -0
- package/dist/cli/args/argPositionals.d.ts +3 -0
- package/dist/cli/args/argPositionals.d.ts.map +1 -0
- package/dist/cli/args/argPositionals.js +18 -0
- package/dist/cli/args/index.d.ts +4 -0
- package/dist/cli/args/index.d.ts.map +1 -0
- package/dist/cli/args/index.js +75 -0
- package/dist/cli/args/types.d.ts +13 -0
- package/dist/cli/args/types.d.ts.map +1 -0
- package/dist/cli/args/types.js +2 -0
- package/dist/cli/commands/daemon.d.ts +31 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +156 -0
- package/dist/cli/commands/harness/createRun.d.ts +3 -0
- package/dist/cli/commands/harness/createRun.d.ts.map +1 -0
- package/dist/cli/commands/harness/createRun.js +8 -0
- package/dist/cli/commands/harness/resumeRun.d.ts +20 -0
- package/dist/cli/commands/harness/resumeRun.d.ts.map +1 -0
- package/dist/cli/commands/harness/resumeRun.js +341 -0
- package/dist/cli/commands/jsonlInteractive.d.ts +35 -0
- package/dist/cli/commands/jsonlInteractive.d.ts.map +1 -0
- package/dist/cli/commands/jsonlInteractive.js +302 -0
- package/dist/cli/commands/mcpServe.d.ts +18 -0
- package/dist/cli/commands/mcpServe.d.ts.map +1 -0
- package/dist/cli/commands/mcpServe.js +59 -0
- package/dist/cli/commands/session/history.d.ts +14 -0
- package/dist/cli/commands/session/history.d.ts.map +1 -0
- package/dist/cli/commands/session/history.js +100 -0
- package/dist/cli/commands/tui.d.ts +23 -0
- package/dist/cli/commands/tui.d.ts.map +1 -0
- package/dist/cli/commands/tui.js +183 -0
- package/dist/cli/dispatch.d.ts +4 -0
- package/dist/cli/dispatch.d.ts.map +1 -0
- package/dist/cli/dispatch.js +330 -0
- package/dist/cli/main.d.ts +7 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +41 -0
- package/dist/cli/program.d.ts +7 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +8 -0
- package/dist/cli/ui.d.ts +9 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +125 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/prompts/commandTemplates.d.ts +3 -0
- package/dist/prompts/commandTemplates.d.ts.map +1 -0
- package/dist/prompts/commandTemplates.js +238 -0
- package/package.json +76 -0
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# @a5c-ai/omni
|
|
2
|
+
|
|
3
|
+
Omni is the unified agent product that composes every layer of the babysitter agent stack into a single distributable binary.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
| Layer | Package | Role |
|
|
8
|
+
|-------|---------|------|
|
|
9
|
+
| L4 | `@a5c-ai/agent-core` | Loop, subagent, context, synthesis interfaces |
|
|
10
|
+
| L5 | `@a5c-ai/agent-runtime` | Daemon, session, cost, observability, telemetry |
|
|
11
|
+
| L6 | `@a5c-ai/agent-platform` | Harness integration, governance, interaction, storage |
|
|
12
|
+
| Mux | `@a5c-ai/agent-mux` | Agent multiplexer |
|
|
13
|
+
| TUI | `@a5c-ai/babysitter-tui-plugins` | TUI plugins for cost, governance, status |
|
|
14
|
+
|
|
15
|
+
Omni re-exports the full public API from all layers and owns the single `omni` CLI binary implementation.
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# As a CLI
|
|
21
|
+
npx @a5c-ai/omni <command> [options]
|
|
22
|
+
|
|
23
|
+
# As a library
|
|
24
|
+
import { createBabysitterAgentCli } from "@a5c-ai/omni/cli";
|
|
25
|
+
import { createAgentCoreSession } from "@a5c-ai/omni";
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Development
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm run build # Build (builds dependencies first)
|
|
32
|
+
npm run test # Run tests
|
|
33
|
+
npm run clean # Remove build artifacts
|
|
34
|
+
```
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Formats omni invocation results as agent-mux compatible
|
|
3
|
+
* JSONL events.
|
|
4
|
+
*
|
|
5
|
+
* When `--output-format amux-events` is used, the `invoke` command
|
|
6
|
+
* outputs one JSON object per line to stdout so agent-mux's babysitter
|
|
7
|
+
* adapter can parse our output as a normalised event stream.
|
|
8
|
+
*
|
|
9
|
+
* @module cli/amuxEventsFormatter
|
|
10
|
+
*/
|
|
11
|
+
import type { HarnessInvokeResult } from "@a5c-ai/agent-platform/harness";
|
|
12
|
+
/**
|
|
13
|
+
* Convert a HarnessInvokeResult into an array of JSONL strings
|
|
14
|
+
* representing agent-mux compatible events.
|
|
15
|
+
*
|
|
16
|
+
* Events emitted:
|
|
17
|
+
* 1. `session_start` -- marks the beginning of the invocation
|
|
18
|
+
* 2. `text_delta` -- the full output text (one event)
|
|
19
|
+
* 3. `cost` -- duration metadata
|
|
20
|
+
* 4. `session_end` -- marks the end, carries exit code and success flag
|
|
21
|
+
*
|
|
22
|
+
* If the result contains an error (exitCode !== 0), an `error` event is
|
|
23
|
+
* emitted before `session_end`.
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatResultAsAmuxEvents(harness: string, result: HarnessInvokeResult): string[];
|
|
26
|
+
//# sourceMappingURL=amuxEventsFormatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amuxEventsFormatter.d.ts","sourceRoot":"","sources":["../../src/cli/amuxEventsFormatter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAe1E;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,mBAAmB,GAC1B,MAAM,EAAE,CAiEV"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Formats omni invocation results as agent-mux compatible
|
|
4
|
+
* JSONL events.
|
|
5
|
+
*
|
|
6
|
+
* When `--output-format amux-events` is used, the `invoke` command
|
|
7
|
+
* outputs one JSON object per line to stdout so agent-mux's babysitter
|
|
8
|
+
* adapter can parse our output as a normalised event stream.
|
|
9
|
+
*
|
|
10
|
+
* @module cli/amuxEventsFormatter
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.formatResultAsAmuxEvents = formatResultAsAmuxEvents;
|
|
14
|
+
const harness_1 = require("@a5c-ai/agent-platform/harness");
|
|
15
|
+
/**
|
|
16
|
+
* Convert a HarnessInvokeResult into an array of JSONL strings
|
|
17
|
+
* representing agent-mux compatible events.
|
|
18
|
+
*
|
|
19
|
+
* Events emitted:
|
|
20
|
+
* 1. `session_start` -- marks the beginning of the invocation
|
|
21
|
+
* 2. `text_delta` -- the full output text (one event)
|
|
22
|
+
* 3. `cost` -- duration metadata
|
|
23
|
+
* 4. `session_end` -- marks the end, carries exit code and success flag
|
|
24
|
+
*
|
|
25
|
+
* If the result contains an error (exitCode !== 0), an `error` event is
|
|
26
|
+
* emitted before `session_end`.
|
|
27
|
+
*/
|
|
28
|
+
function formatResultAsAmuxEvents(harness, result) {
|
|
29
|
+
const agent = (0, harness_1.hasAmuxAdapter)(harness)
|
|
30
|
+
? (0, harness_1.mapHarnessToAmuxAdapter)(harness)
|
|
31
|
+
: harness;
|
|
32
|
+
const runId = `babysitter-${Date.now()}`;
|
|
33
|
+
const now = new Date().toISOString();
|
|
34
|
+
const lines = [];
|
|
35
|
+
const emit = (event) => {
|
|
36
|
+
lines.push(JSON.stringify(event));
|
|
37
|
+
};
|
|
38
|
+
// 1. Session start
|
|
39
|
+
emit({
|
|
40
|
+
type: "session_start",
|
|
41
|
+
runId,
|
|
42
|
+
agent,
|
|
43
|
+
timestamp: now,
|
|
44
|
+
harness,
|
|
45
|
+
});
|
|
46
|
+
// 2. Full text output as a single text_delta
|
|
47
|
+
if (result.output) {
|
|
48
|
+
emit({
|
|
49
|
+
type: "text_delta",
|
|
50
|
+
runId,
|
|
51
|
+
agent,
|
|
52
|
+
timestamp: now,
|
|
53
|
+
text: result.output,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// 3. Cost / duration
|
|
57
|
+
emit({
|
|
58
|
+
type: "cost",
|
|
59
|
+
runId,
|
|
60
|
+
agent,
|
|
61
|
+
timestamp: now,
|
|
62
|
+
durationMs: result.duration,
|
|
63
|
+
});
|
|
64
|
+
// 4. Error (if any)
|
|
65
|
+
if (!result.success) {
|
|
66
|
+
emit({
|
|
67
|
+
type: "error",
|
|
68
|
+
runId,
|
|
69
|
+
agent,
|
|
70
|
+
timestamp: now,
|
|
71
|
+
exitCode: result.exitCode,
|
|
72
|
+
message: result.output,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// 5. Session end
|
|
76
|
+
emit({
|
|
77
|
+
type: "session_end",
|
|
78
|
+
runId,
|
|
79
|
+
agent,
|
|
80
|
+
timestamp: now,
|
|
81
|
+
exitCode: result.exitCode,
|
|
82
|
+
success: result.success,
|
|
83
|
+
durationMs: result.duration,
|
|
84
|
+
});
|
|
85
|
+
return lines;
|
|
86
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { HarnessParsedArgs } from "./types";
|
|
2
|
+
type FlagParser = (parsed: HarnessParsedArgs, args: string[], index: number) => number;
|
|
3
|
+
export declare const BOOLEAN_FLAGS: Record<string, (parsed: HarnessParsedArgs) => void>;
|
|
4
|
+
export declare const FLAG_PARSERS: Record<string, FlagParser>;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=argFlags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"argFlags.d.ts","sourceRoot":"","sources":["../../../src/cli/args/argFlags.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,KAAK,UAAU,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;AAcvF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAK7E,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAmDnD,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FLAG_PARSERS = exports.BOOLEAN_FLAGS = void 0;
|
|
4
|
+
const babysitter_sdk_1 = require("@a5c-ai/babysitter-sdk");
|
|
5
|
+
function expectFlagValue(args, index, flag) {
|
|
6
|
+
const value = args[index];
|
|
7
|
+
if (!value) {
|
|
8
|
+
throw new Error(`${flag} requires a value`);
|
|
9
|
+
}
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
function parseIntegerFlag(raw) {
|
|
13
|
+
return parseInt(raw, 10);
|
|
14
|
+
}
|
|
15
|
+
exports.BOOLEAN_FLAGS = {
|
|
16
|
+
...babysitter_sdk_1.BOOLEAN_FLAGS,
|
|
17
|
+
"--mcp": (parsed) => {
|
|
18
|
+
parsed.anycliMcp = true;
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
exports.FLAG_PARSERS = {
|
|
22
|
+
...babysitter_sdk_1.FLAG_PARSERS,
|
|
23
|
+
"--transport": (parsed, args, index) => {
|
|
24
|
+
parsed.transport = expectFlagValue(args, index + 1, "--transport");
|
|
25
|
+
parsed.anycliTransport = parsed.transport;
|
|
26
|
+
return index + 1;
|
|
27
|
+
},
|
|
28
|
+
"--service": (parsed, args, index) => {
|
|
29
|
+
parsed.anycliService = expectFlagValue(args, index + 1, "--service");
|
|
30
|
+
return index + 1;
|
|
31
|
+
},
|
|
32
|
+
"--scope": (parsed, args, index) => {
|
|
33
|
+
parsed.anycliScope = expectFlagValue(args, index + 1, "--scope");
|
|
34
|
+
return index + 1;
|
|
35
|
+
},
|
|
36
|
+
"--auth-file": (parsed, args, index) => {
|
|
37
|
+
parsed.anycliAuthFile = expectFlagValue(args, index + 1, "--auth-file");
|
|
38
|
+
return index + 1;
|
|
39
|
+
},
|
|
40
|
+
"--port": (parsed, args, index) => {
|
|
41
|
+
parsed.port = parseIntegerFlag(expectFlagValue(args, index + 1, "--port"));
|
|
42
|
+
return index + 1;
|
|
43
|
+
},
|
|
44
|
+
"--host": (parsed, args, index) => {
|
|
45
|
+
parsed.host = expectFlagValue(args, index + 1, "--host");
|
|
46
|
+
return index + 1;
|
|
47
|
+
},
|
|
48
|
+
"--auth-token": (parsed, args, index) => {
|
|
49
|
+
parsed.authToken = expectFlagValue(args, index + 1, "--auth-token");
|
|
50
|
+
return index + 1;
|
|
51
|
+
},
|
|
52
|
+
"--ws-ping-interval": (parsed, args, index) => {
|
|
53
|
+
parsed.wsPingInterval = parseIntegerFlag(expectFlagValue(args, index + 1, "--ws-ping-interval"));
|
|
54
|
+
return index + 1;
|
|
55
|
+
},
|
|
56
|
+
"--ws-grace-period": (parsed, args, index) => {
|
|
57
|
+
parsed.wsGracePeriod = parseIntegerFlag(expectFlagValue(args, index + 1, "--ws-grace-period"));
|
|
58
|
+
return index + 1;
|
|
59
|
+
},
|
|
60
|
+
"--ws-max-mps": (parsed, args, index) => {
|
|
61
|
+
parsed.wsMaxMps = parseIntegerFlag(expectFlagValue(args, index + 1, "--ws-max-mps"));
|
|
62
|
+
return index + 1;
|
|
63
|
+
},
|
|
64
|
+
"--output-format": (parsed, args, index) => {
|
|
65
|
+
const value = expectFlagValue(args, index + 1, "--output-format");
|
|
66
|
+
if (value !== "json" && value !== "text" && value !== "amux-events") {
|
|
67
|
+
throw new Error(`--output-format must be one of: json, text, amux-events (got "${value}")`);
|
|
68
|
+
}
|
|
69
|
+
parsed.outputFormat = value;
|
|
70
|
+
return index + 1;
|
|
71
|
+
},
|
|
72
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"argPositionals.d.ts","sourceRoot":"","sources":["../../../src/cli/args/argPositionals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,EAAE,QAgBnF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.applyPositionalArgs = applyPositionalArgs;
|
|
4
|
+
const babysitter_sdk_1 = require("@a5c-ai/babysitter-sdk");
|
|
5
|
+
function applyPositionalArgs(parsed, positionals) {
|
|
6
|
+
(0, babysitter_sdk_1.applyPositionalArgs)(parsed, positionals);
|
|
7
|
+
if (parsed.command === "anycli") {
|
|
8
|
+
if (!parsed.anycliService &&
|
|
9
|
+
positionals.length > 0 &&
|
|
10
|
+
/^[a-zA-Z0-9-]+$/.test(positionals[0])) {
|
|
11
|
+
[parsed.anycliService] = positionals;
|
|
12
|
+
positionals = positionals.slice(1);
|
|
13
|
+
}
|
|
14
|
+
if (positionals.length > 0 && !parsed.prompt) {
|
|
15
|
+
parsed.prompt = positionals.join(" ");
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/args/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAwCjD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAuClE;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseHarnessArgs = parseHarnessArgs;
|
|
4
|
+
const babysitter_sdk_1 = require("@a5c-ai/babysitter-sdk");
|
|
5
|
+
const argFlags_1 = require("./argFlags");
|
|
6
|
+
const argPositionals_1 = require("./argPositionals");
|
|
7
|
+
function createDefaultParsedArgs(initialCommand) {
|
|
8
|
+
return {
|
|
9
|
+
command: initialCommand,
|
|
10
|
+
runsDir: (0, babysitter_sdk_1.resolveRunsDir)(),
|
|
11
|
+
json: false,
|
|
12
|
+
dryRun: false,
|
|
13
|
+
verbose: false,
|
|
14
|
+
helpRequested: false,
|
|
15
|
+
helpSurface: "agent",
|
|
16
|
+
pendingOnly: false,
|
|
17
|
+
reverseOrder: false,
|
|
18
|
+
showConfig: false,
|
|
19
|
+
showStrata: false,
|
|
20
|
+
tree: false,
|
|
21
|
+
rich: false,
|
|
22
|
+
defaultsOnly: false,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function normalizeInitialCommand(parsed) {
|
|
26
|
+
if (parsed.command === "--help" || parsed.command === "-h") {
|
|
27
|
+
parsed.command = undefined;
|
|
28
|
+
parsed.helpRequested = true;
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
if (parsed.command === "--help-human") {
|
|
32
|
+
parsed.command = undefined;
|
|
33
|
+
parsed.helpRequested = true;
|
|
34
|
+
parsed.helpSurface = "human";
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (parsed.command === "--version" || parsed.command === "-v") {
|
|
38
|
+
parsed.command = "version";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function parseHarnessArgs(argv) {
|
|
42
|
+
const [initialCommand, ...rest] = argv;
|
|
43
|
+
const parsed = createDefaultParsedArgs(initialCommand);
|
|
44
|
+
normalizeInitialCommand(parsed);
|
|
45
|
+
const positionals = [];
|
|
46
|
+
for (let index = 0; index < rest.length; index += 1) {
|
|
47
|
+
const arg = rest[index];
|
|
48
|
+
if (arg === "--help" || arg === "-h") {
|
|
49
|
+
parsed.helpRequested = true;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (arg === "--help-human") {
|
|
53
|
+
parsed.helpRequested = true;
|
|
54
|
+
parsed.helpSurface = "human";
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (arg === "--version" || arg === "-v") {
|
|
58
|
+
parsed.command = "version";
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const applyBoolean = argFlags_1.BOOLEAN_FLAGS[arg];
|
|
62
|
+
if (applyBoolean) {
|
|
63
|
+
applyBoolean(parsed);
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
const parseFlag = argFlags_1.FLAG_PARSERS[arg];
|
|
67
|
+
if (parseFlag) {
|
|
68
|
+
index = parseFlag(parsed, rest, index);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
positionals.push(arg);
|
|
72
|
+
}
|
|
73
|
+
(0, argPositionals_1.applyPositionalArgs)(parsed, positionals);
|
|
74
|
+
return parsed;
|
|
75
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ParsedArgs as CoreParsedArgs } from "@a5c-ai/babysitter-sdk";
|
|
2
|
+
/** Supported output formats for harness invocation results. */
|
|
3
|
+
export type HarnessOutputFormat = "json" | "text" | "amux-events";
|
|
4
|
+
export interface HarnessParsedArgs extends CoreParsedArgs {
|
|
5
|
+
anycliService?: string;
|
|
6
|
+
anycliScope?: string;
|
|
7
|
+
anycliMcp?: boolean;
|
|
8
|
+
anycliAuthFile?: string;
|
|
9
|
+
anycliTransport?: string;
|
|
10
|
+
/** Output format for omni invoke results. */
|
|
11
|
+
outputFormat?: HarnessOutputFormat;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cli/args/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE3E,+DAA+D;AAC/D,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAElE,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GAP-REMOTE-001: CLI commands for daemon lifecycle management.
|
|
3
|
+
*
|
|
4
|
+
* daemon:start — Start the background daemon
|
|
5
|
+
* daemon:stop — Stop the running daemon
|
|
6
|
+
* daemon:status — Check daemon status
|
|
7
|
+
*/
|
|
8
|
+
export declare function handleDaemonStart(args: {
|
|
9
|
+
daemonDir?: string;
|
|
10
|
+
workspace?: string;
|
|
11
|
+
configPath?: string;
|
|
12
|
+
foreground?: boolean;
|
|
13
|
+
json?: boolean;
|
|
14
|
+
}): Promise<number>;
|
|
15
|
+
export declare function handleDaemonStop(args: {
|
|
16
|
+
daemonDir?: string;
|
|
17
|
+
gracePeriodMs?: number;
|
|
18
|
+
json?: boolean;
|
|
19
|
+
}): Promise<number>;
|
|
20
|
+
export declare function handleDaemonStatus(args: {
|
|
21
|
+
daemonDir?: string;
|
|
22
|
+
json?: boolean;
|
|
23
|
+
}): Promise<number>;
|
|
24
|
+
/**
|
|
25
|
+
* daemon:run — Internal command invoked by the background daemon process.
|
|
26
|
+
* Loads config from daemon.json and runs the daemon loop until SIGTERM.
|
|
27
|
+
*/
|
|
28
|
+
export declare function handleDaemonRun(args: {
|
|
29
|
+
daemonDir?: string;
|
|
30
|
+
}): Promise<number>;
|
|
31
|
+
//# sourceMappingURL=daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiClB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBlB;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBlB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CA+BlB"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GAP-REMOTE-001: CLI commands for daemon lifecycle management.
|
|
4
|
+
*
|
|
5
|
+
* daemon:start — Start the background daemon
|
|
6
|
+
* daemon:stop — Stop the running daemon
|
|
7
|
+
* daemon:status — Check daemon status
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.handleDaemonStart = handleDaemonStart;
|
|
44
|
+
exports.handleDaemonStop = handleDaemonStop;
|
|
45
|
+
exports.handleDaemonStatus = handleDaemonStatus;
|
|
46
|
+
exports.handleDaemonRun = handleDaemonRun;
|
|
47
|
+
const daemon_1 = require("@a5c-ai/agent-platform/daemon");
|
|
48
|
+
const path = __importStar(require("node:path"));
|
|
49
|
+
const os = __importStar(require("node:os"));
|
|
50
|
+
const daemon_2 = require("@a5c-ai/agent-platform/daemon");
|
|
51
|
+
const daemon_3 = require("@a5c-ai/agent-platform/daemon");
|
|
52
|
+
function defaultDaemonDir() {
|
|
53
|
+
return path.join(os.homedir(), ".a5c", "daemon");
|
|
54
|
+
}
|
|
55
|
+
async function handleDaemonStart(args) {
|
|
56
|
+
const daemonDir = args.daemonDir ?? defaultDaemonDir();
|
|
57
|
+
const workspace = args.workspace ?? process.cwd();
|
|
58
|
+
let config;
|
|
59
|
+
if (args.configPath) {
|
|
60
|
+
const configResult = await (0, daemon_1.loadDaemonConfig)(args.configPath);
|
|
61
|
+
if (!configResult.ok) {
|
|
62
|
+
const output = args.json
|
|
63
|
+
? JSON.stringify(configResult)
|
|
64
|
+
: `Error: ${configResult.error.message}`;
|
|
65
|
+
process.stdout.write(output + "\n");
|
|
66
|
+
return 1;
|
|
67
|
+
}
|
|
68
|
+
config = configResult.data;
|
|
69
|
+
}
|
|
70
|
+
const result = await (0, daemon_1.startDaemon)({
|
|
71
|
+
daemonDir,
|
|
72
|
+
workspace,
|
|
73
|
+
foreground: args.foreground ?? false,
|
|
74
|
+
config: config ?? { workspace, triggers: [] },
|
|
75
|
+
});
|
|
76
|
+
if (args.json) {
|
|
77
|
+
process.stdout.write(JSON.stringify(result) + "\n");
|
|
78
|
+
}
|
|
79
|
+
else if (result.ok) {
|
|
80
|
+
process.stdout.write(`Daemon started (PID ${result.data.pid})\n`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
process.stdout.write(`Error: ${result.error.message}\n`);
|
|
84
|
+
}
|
|
85
|
+
return result.ok ? 0 : 1;
|
|
86
|
+
}
|
|
87
|
+
async function handleDaemonStop(args) {
|
|
88
|
+
const daemonDir = args.daemonDir ?? defaultDaemonDir();
|
|
89
|
+
const result = await (0, daemon_1.stopDaemon)({
|
|
90
|
+
daemonDir,
|
|
91
|
+
gracePeriodMs: args.gracePeriodMs,
|
|
92
|
+
});
|
|
93
|
+
if (args.json) {
|
|
94
|
+
process.stdout.write(JSON.stringify(result) + "\n");
|
|
95
|
+
}
|
|
96
|
+
else if (result.ok) {
|
|
97
|
+
process.stdout.write(`Daemon stopped (PID ${result.data.pid})\n`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
process.stdout.write(`Error: ${result.error.message}\n`);
|
|
101
|
+
}
|
|
102
|
+
return result.ok ? 0 : 1;
|
|
103
|
+
}
|
|
104
|
+
async function handleDaemonStatus(args) {
|
|
105
|
+
const daemonDir = args.daemonDir ?? defaultDaemonDir();
|
|
106
|
+
const result = await (0, daemon_1.getDaemonStatus)({ daemonDir });
|
|
107
|
+
if (args.json) {
|
|
108
|
+
process.stdout.write(JSON.stringify(result) + "\n");
|
|
109
|
+
}
|
|
110
|
+
else if (result.ok) {
|
|
111
|
+
if (result.data.running) {
|
|
112
|
+
process.stdout.write(`Daemon running (PID ${result.data.pid}, uptime ${result.data.uptime}s, ` +
|
|
113
|
+
`triggers: ${result.data.activeTriggers}, pending: ${result.data.pendingRuns})\n`);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
process.stdout.write("Daemon not running\n");
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
process.stdout.write(`Error: ${result.error.message}\n`);
|
|
121
|
+
}
|
|
122
|
+
return result.ok ? 0 : 1;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* daemon:run — Internal command invoked by the background daemon process.
|
|
126
|
+
* Loads config from daemon.json and runs the daemon loop until SIGTERM.
|
|
127
|
+
*/
|
|
128
|
+
async function handleDaemonRun(args) {
|
|
129
|
+
const daemonDir = args.daemonDir ?? defaultDaemonDir();
|
|
130
|
+
const metadataPath = path.join(daemonDir, "daemon.json");
|
|
131
|
+
let config;
|
|
132
|
+
try {
|
|
133
|
+
const { promises: fsPromises } = await Promise.resolve().then(() => __importStar(require("node:fs")));
|
|
134
|
+
const raw = await fsPromises.readFile(metadataPath, "utf-8");
|
|
135
|
+
const parsed = JSON.parse(raw);
|
|
136
|
+
config = parsed;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
process.stderr.write(`daemon:run — failed to read ${metadataPath}\n`);
|
|
140
|
+
return 1;
|
|
141
|
+
}
|
|
142
|
+
const ac = new AbortController();
|
|
143
|
+
process.on("SIGTERM", () => ac.abort());
|
|
144
|
+
process.on("SIGINT", () => ac.abort());
|
|
145
|
+
await (0, daemon_1.runDaemonLoop)(config, {
|
|
146
|
+
signal: ac.signal,
|
|
147
|
+
logDir: daemonDir,
|
|
148
|
+
onTrigger: async (trigger) => {
|
|
149
|
+
if (!(0, daemon_3.isAutomationTriggerEvent)(trigger)) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
await (0, daemon_2.executeAutomationTrigger)(trigger);
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
return 0;
|
|
156
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRun.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/harness/createRun.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,GACd,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.selectHarness = exports.runOrchestrationPhase = exports.handleSessionCreate = exports.handleHarnessCreateRun = void 0;
|
|
4
|
+
var harness_1 = require("@a5c-ai/agent-platform/harness");
|
|
5
|
+
Object.defineProperty(exports, "handleHarnessCreateRun", { enumerable: true, get: function () { return harness_1.handleHarnessCreateRun; } });
|
|
6
|
+
Object.defineProperty(exports, "handleSessionCreate", { enumerable: true, get: function () { return harness_1.handleSessionCreate; } });
|
|
7
|
+
Object.defineProperty(exports, "runOrchestrationPhase", { enumerable: true, get: function () { return harness_1.runOrchestrationPhase; } });
|
|
8
|
+
Object.defineProperty(exports, "selectHarness", { enumerable: true, get: function () { return harness_1.selectHarness; } });
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resume-run command handler.
|
|
3
|
+
* Uses an agentic Pi session to discover existing runs, present them to the
|
|
4
|
+
* user, assess state, and resume orchestration via handleHarnessCreateRun.
|
|
5
|
+
*/
|
|
6
|
+
import { type OutputMode } from "@a5c-ai/agent-platform/harness";
|
|
7
|
+
export interface SessionResumeArgs {
|
|
8
|
+
runId?: string;
|
|
9
|
+
harness?: string;
|
|
10
|
+
workspace?: string;
|
|
11
|
+
model?: string;
|
|
12
|
+
maxIterations?: number;
|
|
13
|
+
runsDir?: string;
|
|
14
|
+
json: boolean;
|
|
15
|
+
verbose: boolean;
|
|
16
|
+
interactive?: boolean;
|
|
17
|
+
outputMode?: OutputMode;
|
|
18
|
+
}
|
|
19
|
+
export declare function handleHarnessResumeRun(args: SessionResumeArgs): Promise<number>;
|
|
20
|
+
//# sourceMappingURL=resumeRun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resumeRun.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/harness/resumeRun.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAML,KAAK,UAAU,EAKhB,MAAM,gCAAgC,CAAC;AAMxC,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAiDD,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0TrF"}
|