@inceptionstack/roundhouse 0.5.2 → 0.5.4
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/architecture.md +94 -32
- package/package.json +1 -1
- package/src/agents/kiro/kiro-adapter.ts +8 -1
- package/src/agents/pi/message-format.ts +87 -0
- package/src/agents/pi/pi-adapter.ts +33 -72
- package/src/cli/agent-command.ts +210 -0
- package/src/cli/cli.ts +63 -305
- package/src/cli/cron-commands.ts +258 -0
- package/src/cli/cron.ts +26 -267
- package/src/cli/launchd.ts +1 -1
- package/src/cli/service-manager.ts +192 -0
- package/src/cli/setup/args.ts +109 -0
- package/src/cli/setup/flows.ts +273 -0
- package/src/cli/setup/helpers.ts +66 -0
- package/src/cli/setup/index.ts +7 -0
- package/src/cli/setup/runtime.ts +109 -0
- package/src/cli/setup/steps.ts +617 -0
- package/src/cli/setup/types.ts +52 -0
- package/src/cli/setup.ts +79 -1275
- package/src/cli/shell.ts +49 -0
- package/src/cli/systemd.ts +6 -33
- package/src/config.ts +67 -53
- package/src/gateway/attachments.ts +147 -0
- package/src/gateway/commands.ts +371 -0
- package/src/gateway/helpers.ts +104 -0
- package/src/gateway/index.ts +11 -0
- package/src/gateway/streaming.ts +235 -0
- package/src/gateway.ts +212 -763
- package/src/types.ts +16 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { dirname } from "node:path";
|
|
2
|
+
import { readFile, mkdir } from "node:fs/promises";
|
|
3
|
+
import { atomicWriteJson, execOrFail } from "./helpers";
|
|
4
|
+
import { type SetupOptions, type StepLog, PI_SETTINGS_PATH } from "./types";
|
|
5
|
+
import {
|
|
6
|
+
getAgentDefinition,
|
|
7
|
+
type AgentDefinition,
|
|
8
|
+
type AgentSetupContext,
|
|
9
|
+
} from "../../agents/registry";
|
|
10
|
+
import { type SetupLogger } from "../setup-logger";
|
|
11
|
+
|
|
12
|
+
export function resolveAgentForSetup(opts: SetupOptions, logger: StepLog): AgentDefinition {
|
|
13
|
+
const agent = { ...getAgentDefinition(opts.agent) };
|
|
14
|
+
|
|
15
|
+
if (agent.type === "pi") {
|
|
16
|
+
agent.configure = async (ctx: AgentSetupContext) => {
|
|
17
|
+
let existing: Record<string, unknown> = {};
|
|
18
|
+
try {
|
|
19
|
+
existing = JSON.parse(await readFile(PI_SETTINGS_PATH, "utf8"));
|
|
20
|
+
} catch {}
|
|
21
|
+
|
|
22
|
+
const settings: Record<string, unknown> = { ...existing };
|
|
23
|
+
|
|
24
|
+
if (ctx.force) {
|
|
25
|
+
settings.defaultProvider = ctx.provider;
|
|
26
|
+
settings.defaultModel = ctx.model;
|
|
27
|
+
} else {
|
|
28
|
+
if (existing.defaultProvider && existing.defaultProvider !== ctx.provider) {
|
|
29
|
+
logger.warn(`Pi provider already set to '${existing.defaultProvider}' (keeping, use --force to override)`);
|
|
30
|
+
} else {
|
|
31
|
+
settings.defaultProvider = ctx.provider;
|
|
32
|
+
}
|
|
33
|
+
if (existing.defaultModel && existing.defaultModel !== ctx.model) {
|
|
34
|
+
logger.warn(`Pi model already set to '${existing.defaultModel}' (keeping, use --force to override)`);
|
|
35
|
+
} else {
|
|
36
|
+
settings.defaultModel = ctx.model;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (!Array.isArray(settings.packages)) settings.packages = [];
|
|
41
|
+
|
|
42
|
+
const pkgs = settings.packages as string[];
|
|
43
|
+
const selfPkg = "npm:@inceptionstack/roundhouse";
|
|
44
|
+
const selfIdx = pkgs.indexOf(selfPkg);
|
|
45
|
+
if (selfIdx !== -1) pkgs.splice(selfIdx, 1);
|
|
46
|
+
|
|
47
|
+
const coreExtensions = [
|
|
48
|
+
"npm:@inceptionstack/pi-hard-no",
|
|
49
|
+
"npm:@inceptionstack/pi-branch-enforcer",
|
|
50
|
+
];
|
|
51
|
+
for (const ext of coreExtensions) {
|
|
52
|
+
if (!pkgs.includes(ext)) pkgs.push(ext);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (ctx.psst) {
|
|
56
|
+
const psstPkg = "npm:@miclivs/pi-psst";
|
|
57
|
+
if (!pkgs.includes(psstPkg)) pkgs.push(psstPkg);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
await mkdir(dirname(PI_SETTINGS_PATH), { recursive: true });
|
|
61
|
+
await atomicWriteJson(PI_SETTINGS_PATH, settings);
|
|
62
|
+
logger.ok(`~/.pi/agent/settings.json (${settings.defaultProvider}, ${settings.defaultModel})`);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
agent.installExtension = async (ext: string) => {
|
|
66
|
+
execOrFail("pi", ["install", `npm:${ext}`], `extension ${ext}`);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return agent;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export const textLog = (msg: string): void => { console.log(msg); };
|
|
74
|
+
|
|
75
|
+
export const textStepLog: StepLog = {
|
|
76
|
+
log: textLog,
|
|
77
|
+
step(n, label) {
|
|
78
|
+
textLog(`\n${n} ${label}`);
|
|
79
|
+
},
|
|
80
|
+
ok(msg) {
|
|
81
|
+
textLog(` ✓ ${msg}`);
|
|
82
|
+
},
|
|
83
|
+
warn(msg) {
|
|
84
|
+
textLog(` ⚠ ${msg}`);
|
|
85
|
+
},
|
|
86
|
+
fail(msg) {
|
|
87
|
+
textLog(` ✗ ${msg}`);
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export function createStepLog(logger: SetupLogger): StepLog {
|
|
92
|
+
return {
|
|
93
|
+
log(msg) {
|
|
94
|
+
logger.info("log", msg);
|
|
95
|
+
},
|
|
96
|
+
step(n, label) {
|
|
97
|
+
logger.info("step", label, { stepLabel: n });
|
|
98
|
+
},
|
|
99
|
+
ok(msg) {
|
|
100
|
+
logger.ok(msg);
|
|
101
|
+
},
|
|
102
|
+
warn(msg) {
|
|
103
|
+
logger.warn("warn", msg);
|
|
104
|
+
},
|
|
105
|
+
fail(msg) {
|
|
106
|
+
logger.fail(msg);
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|