@action-llama/action-llama 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.
- package/README.md +448 -0
- package/dist/agents/container-entry.d.ts +2 -0
- package/dist/agents/container-entry.d.ts.map +1 -0
- package/dist/agents/container-entry.js +173 -0
- package/dist/agents/container-entry.js.map +1 -0
- package/dist/agents/container-runner.d.ts +20 -0
- package/dist/agents/container-runner.d.ts.map +1 -0
- package/dist/agents/container-runner.js +208 -0
- package/dist/agents/container-runner.js.map +1 -0
- package/dist/agents/definitions/dev/AGENTS.md +44 -0
- package/dist/agents/definitions/dev/config-definition.json +39 -0
- package/dist/agents/definitions/devops/AGENTS.md +33 -0
- package/dist/agents/definitions/devops/config-definition.json +37 -0
- package/dist/agents/definitions/loader.d.ts +18 -0
- package/dist/agents/definitions/loader.d.ts.map +1 -0
- package/dist/agents/definitions/loader.js +59 -0
- package/dist/agents/definitions/loader.js.map +1 -0
- package/dist/agents/definitions/reviewer/AGENTS.md +37 -0
- package/dist/agents/definitions/reviewer/config-definition.json +24 -0
- package/dist/agents/definitions/schema.d.ts +38 -0
- package/dist/agents/definitions/schema.d.ts.map +1 -0
- package/dist/agents/definitions/schema.js +97 -0
- package/dist/agents/definitions/schema.js.map +1 -0
- package/dist/agents/prompt.d.ts +6 -0
- package/dist/agents/prompt.d.ts.map +1 -0
- package/dist/agents/prompt.js +42 -0
- package/dist/agents/prompt.js.map +1 -0
- package/dist/agents/runner.d.ts +14 -0
- package/dist/agents/runner.d.ts.map +1 -0
- package/dist/agents/runner.js +148 -0
- package/dist/agents/runner.js.map +1 -0
- package/dist/broker/index.d.ts +16 -0
- package/dist/broker/index.d.ts.map +1 -0
- package/dist/broker/index.js +53 -0
- package/dist/broker/index.js.map +1 -0
- package/dist/broker/router.d.ts +13 -0
- package/dist/broker/router.d.ts.map +1 -0
- package/dist/broker/router.js +71 -0
- package/dist/broker/router.js.map +1 -0
- package/dist/broker/routes/shutdown.d.ts +4 -0
- package/dist/broker/routes/shutdown.d.ts.map +1 -0
- package/dist/broker/routes/shutdown.js +37 -0
- package/dist/broker/routes/shutdown.js.map +1 -0
- package/dist/broker/routes/webhooks.d.ts +5 -0
- package/dist/broker/routes/webhooks.d.ts.map +1 -0
- package/dist/broker/routes/webhooks.js +50 -0
- package/dist/broker/routes/webhooks.js.map +1 -0
- package/dist/cli/commands/agent/add.d.ts +5 -0
- package/dist/cli/commands/agent/add.d.ts.map +1 -0
- package/dist/cli/commands/agent/add.js +86 -0
- package/dist/cli/commands/agent/add.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +75 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/logs.d.ts +7 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +121 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/start.d.ts +5 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/commands/start.js +44 -0
- package/dist/cli/commands/start.js.map +1 -0
- package/dist/cli/commands/status.d.ts +4 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +52 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +75 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/docker/container.d.ts +19 -0
- package/dist/docker/container.d.ts.map +1 -0
- package/dist/docker/container.js +73 -0
- package/dist/docker/container.js.map +1 -0
- package/dist/docker/image.d.ts +4 -0
- package/dist/docker/image.d.ts.map +1 -0
- package/dist/docker/image.js +38 -0
- package/dist/docker/image.js.map +1 -0
- package/dist/docker/network.d.ts +5 -0
- package/dist/docker/network.d.ts.map +1 -0
- package/dist/docker/network.js +23 -0
- package/dist/docker/network.js.map +1 -0
- package/dist/scheduler/event-queue.d.ts +12 -0
- package/dist/scheduler/event-queue.d.ts.map +1 -0
- package/dist/scheduler/event-queue.js +12 -0
- package/dist/scheduler/event-queue.js.map +1 -0
- package/dist/scheduler/index.d.ts +19 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +192 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/types.d.ts +14 -0
- package/dist/scheduler/types.d.ts.map +1 -0
- package/dist/scheduler/types.js +2 -0
- package/dist/scheduler/types.js.map +1 -0
- package/dist/setup/prompts.d.ts +52 -0
- package/dist/setup/prompts.d.ts.map +1 -0
- package/dist/setup/prompts.js +656 -0
- package/dist/setup/prompts.js.map +1 -0
- package/dist/setup/scaffold.d.ts +11 -0
- package/dist/setup/scaffold.d.ts.map +1 -0
- package/dist/setup/scaffold.js +70 -0
- package/dist/setup/scaffold.js.map +1 -0
- package/dist/setup/validators.d.ts +23 -0
- package/dist/setup/validators.d.ts.map +1 -0
- package/dist/setup/validators.js +61 -0
- package/dist/setup/validators.js.map +1 -0
- package/dist/shared/config.d.ts +40 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +46 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/credentials.d.ts +4 -0
- package/dist/shared/credentials.d.ts.map +1 -0
- package/dist/shared/credentials.js +21 -0
- package/dist/shared/credentials.js.map +1 -0
- package/dist/shared/git.d.ts +3 -0
- package/dist/shared/git.d.ts.map +1 -0
- package/dist/shared/git.js +24 -0
- package/dist/shared/git.js.map +1 -0
- package/dist/shared/logger.d.ts +6 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +47 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/paths.d.ts +8 -0
- package/dist/shared/paths.d.ts.map +1 -0
- package/dist/shared/paths.js +20 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/tui/App.d.ts +5 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +85 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/render.d.ts +5 -0
- package/dist/tui/render.d.ts.map +1 -0
- package/dist/tui/render.js +9 -0
- package/dist/tui/render.js.map +1 -0
- package/dist/tui/status-tracker.d.ts +39 -0
- package/dist/tui/status-tracker.d.ts.map +1 -0
- package/dist/tui/status-tracker.js +73 -0
- package/dist/tui/status-tracker.js.map +1 -0
- package/dist/webhooks/providers/github.d.ts +9 -0
- package/dist/webhooks/providers/github.d.ts.map +1 -0
- package/dist/webhooks/providers/github.js +169 -0
- package/dist/webhooks/providers/github.js.map +1 -0
- package/dist/webhooks/registry.d.ts +13 -0
- package/dist/webhooks/registry.d.ts.map +1 -0
- package/dist/webhooks/registry.js +82 -0
- package/dist/webhooks/registry.js.map +1 -0
- package/dist/webhooks/types.d.ts +49 -0
- package/dist/webhooks/types.d.ts.map +1 -0
- package/dist/webhooks/types.js +2 -0
- package/dist/webhooks/types.js.map +1 -0
- package/docker/Dockerfile +29 -0
- package/package.json +67 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { readBody, sendJson, sendError } from "../router.js";
|
|
2
|
+
export function registerWebhookRoutes(router, registry, webhookSecrets, logger) {
|
|
3
|
+
router.post("/webhooks/:source", async (req, res, params) => {
|
|
4
|
+
const source = params.source;
|
|
5
|
+
logger.debug({ source }, "webhook request received");
|
|
6
|
+
const provider = registry.getProvider(source);
|
|
7
|
+
if (!provider) {
|
|
8
|
+
logger.warn({ source }, "webhook rejected: unknown source");
|
|
9
|
+
sendError(res, 404, `unknown webhook source: ${source}`);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
let rawBody;
|
|
13
|
+
try {
|
|
14
|
+
rawBody = await readBody(req);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
logger.error({ err, source }, "webhook body read failed");
|
|
18
|
+
sendError(res, 400, "failed to read request body");
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
logger.debug({ source, bodyLength: rawBody.length }, "webhook body read ok");
|
|
22
|
+
// Extract headers as a flat map
|
|
23
|
+
const headers = {};
|
|
24
|
+
for (const [key, value] of Object.entries(req.headers)) {
|
|
25
|
+
headers[key] = Array.isArray(value) ? value[0] : value;
|
|
26
|
+
}
|
|
27
|
+
logger.debug({
|
|
28
|
+
source,
|
|
29
|
+
contentType: headers["content-type"],
|
|
30
|
+
event: headers["x-github-event"],
|
|
31
|
+
delivery: headers["x-github-delivery"],
|
|
32
|
+
hasSignature: !!headers["x-hub-signature-256"],
|
|
33
|
+
}, "webhook headers");
|
|
34
|
+
const secret = webhookSecrets[source];
|
|
35
|
+
const result = registry.dispatch(source, headers, rawBody, secret);
|
|
36
|
+
if (!result.ok) {
|
|
37
|
+
const status = result.errors?.includes("signature validation failed") ? 401 : 400;
|
|
38
|
+
logger.warn({ source, status, errors: result.errors }, "webhook dispatch failed");
|
|
39
|
+
sendError(res, status, result.errors?.[0] || "dispatch failed");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
logger.info({ source, matched: result.matched, skipped: result.skipped }, "webhook dispatched");
|
|
43
|
+
sendJson(res, 200, {
|
|
44
|
+
ok: true,
|
|
45
|
+
matched: result.matched,
|
|
46
|
+
skipped: result.skipped,
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../../src/broker/routes/webhooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/agent/add.ts"],"names":[],"mappings":"AAWA,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8F3F"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { existsSync, writeFileSync } from "fs";
|
|
3
|
+
import { select } from "@inquirer/prompts";
|
|
4
|
+
import { loadCredential, writeCredential } from "../../../shared/credentials.js";
|
|
5
|
+
import { discoverAgents, loadAgentConfig, loadGlobalConfig } from "../../../shared/config.js";
|
|
6
|
+
import { validateGitHubToken } from "../../../setup/validators.js";
|
|
7
|
+
import { runAddAgent } from "../../../setup/prompts.js";
|
|
8
|
+
import { scaffoldAgent } from "../../../setup/scaffold.js";
|
|
9
|
+
import { CREDENTIALS_DIR } from "../../../shared/paths.js";
|
|
10
|
+
import { loadDefinition, listBuiltinDefinitions } from "../../../agents/definitions/loader.js";
|
|
11
|
+
export async function execute(opts) {
|
|
12
|
+
const projectPath = resolve(opts.project);
|
|
13
|
+
if (!existsSync(projectPath)) {
|
|
14
|
+
throw new Error(`Project not found: ${projectPath}`);
|
|
15
|
+
}
|
|
16
|
+
// Load GitHub token
|
|
17
|
+
const githubToken = loadCredential("github-token");
|
|
18
|
+
if (!githubToken) {
|
|
19
|
+
throw new Error(`GitHub token not found. Run "al init" first or add ${CREDENTIALS_DIR}/github-token.`);
|
|
20
|
+
}
|
|
21
|
+
console.log("Validating GitHub token...");
|
|
22
|
+
const { user: githubUser, repos: availableRepos } = await validateGitHubToken(githubToken);
|
|
23
|
+
console.log(`Authenticated as: ${githubUser} (${availableRepos.length} repos found)\n`);
|
|
24
|
+
// Discover existing agents and load model config from first one
|
|
25
|
+
const existingAgentNames = discoverAgents(projectPath);
|
|
26
|
+
if (existingAgentNames.length === 0) {
|
|
27
|
+
throw new Error(`No existing agents found in ${projectPath}. Use "al init" to set up a new project.`);
|
|
28
|
+
}
|
|
29
|
+
const firstAgent = loadAgentConfig(projectPath, existingAgentNames[0]);
|
|
30
|
+
const modelConfig = firstAgent.model;
|
|
31
|
+
// Load definition — from argument or interactive selection
|
|
32
|
+
let definition;
|
|
33
|
+
if (opts.definition) {
|
|
34
|
+
definition = loadDefinition(opts.definition);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const builtinDefs = listBuiltinDefinitions();
|
|
38
|
+
const selectedName = await select({
|
|
39
|
+
message: "Agent type:",
|
|
40
|
+
choices: builtinDefs.map((d) => ({
|
|
41
|
+
name: `${d.name} — ${d.label} (${d.description})`,
|
|
42
|
+
value: d.name,
|
|
43
|
+
})),
|
|
44
|
+
});
|
|
45
|
+
definition = loadDefinition(selectedName);
|
|
46
|
+
}
|
|
47
|
+
// Run interactive prompt
|
|
48
|
+
const { agent, secrets } = await runAddAgent({
|
|
49
|
+
definition,
|
|
50
|
+
availableRepos,
|
|
51
|
+
githubUser,
|
|
52
|
+
modelConfig,
|
|
53
|
+
existingAgentNames,
|
|
54
|
+
});
|
|
55
|
+
console.log("\n--- Writing configuration ---\n");
|
|
56
|
+
// Write new credentials
|
|
57
|
+
if (secrets.sentryToken && secrets.sentryToken !== loadCredential("sentry-token")) {
|
|
58
|
+
writeCredential("sentry-token", secrets.sentryToken);
|
|
59
|
+
console.log(` Wrote ${CREDENTIALS_DIR}/sentry-token`);
|
|
60
|
+
}
|
|
61
|
+
if (secrets.githubWebhookSecret) {
|
|
62
|
+
writeCredential("github-webhook-secret", secrets.githubWebhookSecret);
|
|
63
|
+
console.log(` Wrote ${CREDENTIALS_DIR}/github-webhook-secret`);
|
|
64
|
+
}
|
|
65
|
+
// Update global config if agent uses webhooks and config doesn't reference the secret yet
|
|
66
|
+
if (agent.config.webhooks) {
|
|
67
|
+
const globalConfig = loadGlobalConfig(projectPath);
|
|
68
|
+
if (!globalConfig.webhooks?.githubSecretCredential) {
|
|
69
|
+
globalConfig.webhooks = { ...globalConfig.webhooks, githubSecretCredential: "github-webhook-secret" };
|
|
70
|
+
writeFileSync(resolve(projectPath, "config.json"), JSON.stringify(globalConfig, null, 2) + "\n");
|
|
71
|
+
console.log(` Updated ${projectPath}/config.json`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Scaffold the agent
|
|
75
|
+
scaffoldAgent(projectPath, agent);
|
|
76
|
+
console.log(` Wrote ${projectPath}/${agent.name}/config.json`);
|
|
77
|
+
console.log(` Wrote ${projectPath}/${agent.name}/AGENTS.md`);
|
|
78
|
+
console.log(` Created state directory`);
|
|
79
|
+
console.log(`
|
|
80
|
+
Agent "${agent.name}" added successfully!
|
|
81
|
+
|
|
82
|
+
Edit ${projectPath}/${agent.name}/AGENTS.md to customize agent behavior.
|
|
83
|
+
Restart with: al start -p ${projectPath}
|
|
84
|
+
`);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../../../src/cli/commands/agent/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAMA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwEzD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { runSetup } from "../../setup/prompts.js";
|
|
3
|
+
import { writeCredential, loadCredential } from "../../shared/credentials.js";
|
|
4
|
+
import { scaffoldProject } from "../../setup/scaffold.js";
|
|
5
|
+
import { CREDENTIALS_DIR } from "../../shared/paths.js";
|
|
6
|
+
export async function execute(name) {
|
|
7
|
+
const projectPath = resolve(process.cwd(), name);
|
|
8
|
+
const { globalConfig, agents, secrets } = await runSetup();
|
|
9
|
+
console.log("\n--- Writing configuration ---\n");
|
|
10
|
+
// Only write credentials if they're new or changed
|
|
11
|
+
if (secrets.githubToken && secrets.githubToken !== loadCredential("github-token")) {
|
|
12
|
+
writeCredential("github-token", secrets.githubToken);
|
|
13
|
+
console.log(` Wrote ${CREDENTIALS_DIR}/github-token`);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
console.log(` GitHub token unchanged`);
|
|
17
|
+
}
|
|
18
|
+
if (secrets.sentryToken && secrets.sentryToken !== loadCredential("sentry-token")) {
|
|
19
|
+
writeCredential("sentry-token", secrets.sentryToken);
|
|
20
|
+
console.log(` Wrote ${CREDENTIALS_DIR}/sentry-token`);
|
|
21
|
+
}
|
|
22
|
+
else if (secrets.sentryToken) {
|
|
23
|
+
console.log(` Sentry token unchanged`);
|
|
24
|
+
}
|
|
25
|
+
if (secrets.anthropicKey && secrets.anthropicKey !== loadCredential("anthropic-key")) {
|
|
26
|
+
writeCredential("anthropic-key", secrets.anthropicKey);
|
|
27
|
+
console.log(` Wrote ${CREDENTIALS_DIR}/anthropic-key`);
|
|
28
|
+
}
|
|
29
|
+
else if (secrets.anthropicKey) {
|
|
30
|
+
console.log(` Anthropic key unchanged`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.log(" Using existing pi auth (no key file needed)");
|
|
34
|
+
}
|
|
35
|
+
if (secrets.sshKey && secrets.sshKey !== loadCredential("id_rsa")) {
|
|
36
|
+
writeCredential("id_rsa", secrets.sshKey.trimEnd());
|
|
37
|
+
console.log(` Wrote ${CREDENTIALS_DIR}/id_rsa`);
|
|
38
|
+
}
|
|
39
|
+
else if (loadCredential("id_rsa")) {
|
|
40
|
+
console.log(` SSH key unchanged`);
|
|
41
|
+
}
|
|
42
|
+
if (secrets.githubWebhookSecret && secrets.githubWebhookSecret !== loadCredential("github-webhook-secret")) {
|
|
43
|
+
writeCredential("github-webhook-secret", secrets.githubWebhookSecret);
|
|
44
|
+
console.log(` Wrote ${CREDENTIALS_DIR}/github-webhook-secret`);
|
|
45
|
+
}
|
|
46
|
+
else if (secrets.githubWebhookSecret) {
|
|
47
|
+
console.log(` GitHub webhook secret unchanged`);
|
|
48
|
+
}
|
|
49
|
+
scaffoldProject(projectPath, globalConfig, agents, name);
|
|
50
|
+
const agentNames = agents.map((a) => a.name);
|
|
51
|
+
console.log(` Wrote ${projectPath}/package.json`);
|
|
52
|
+
if (Object.keys(globalConfig).length > 0) {
|
|
53
|
+
console.log(` Wrote ${projectPath}/config.json`);
|
|
54
|
+
}
|
|
55
|
+
for (const name of agentNames) {
|
|
56
|
+
console.log(` Wrote ${projectPath}/${name}/config.json`);
|
|
57
|
+
console.log(` Wrote ${projectPath}/${name}/AGENTS.md`);
|
|
58
|
+
}
|
|
59
|
+
console.log(` Created state directories`);
|
|
60
|
+
console.log(`
|
|
61
|
+
Setup complete!
|
|
62
|
+
|
|
63
|
+
Credentials: ${CREDENTIALS_DIR}/
|
|
64
|
+
Project: ${projectPath}/
|
|
65
|
+
Agents: ${agentNames.join(", ")}
|
|
66
|
+
|
|
67
|
+
Edit <agent>/AGENTS.md to customize agent behavior.
|
|
68
|
+
|
|
69
|
+
Next steps:
|
|
70
|
+
cd ${name}
|
|
71
|
+
npm install
|
|
72
|
+
npx al start
|
|
73
|
+
`);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAY;IACxC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;IAEjD,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAE3D,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,mDAAmD;IACnD,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,KAAK,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;QAClF,eAAe,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,WAAW,eAAe,eAAe,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,KAAK,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;QAClF,eAAe,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,WAAW,eAAe,eAAe,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,KAAK,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC;QACrF,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,WAAW,eAAe,gBAAgB,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClE,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,WAAW,eAAe,SAAS,CAAC,CAAC;IACnD,CAAC;SAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,CAAC,mBAAmB,IAAI,OAAO,CAAC,mBAAmB,KAAK,cAAc,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC3G,eAAe,CAAC,uBAAuB,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,WAAW,eAAe,wBAAwB,CAAC,CAAC;IAClE,CAAC;SAAM,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,eAAe,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,cAAc,CAAC,CAAC;IACpD,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,IAAI,IAAI,cAAc,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,WAAW,WAAW,IAAI,IAAI,YAAY,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAE3C,OAAO,CAAC,GAAG,CAAC;;;iBAGG,eAAe;iBACf,WAAW;iBACX,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;OAK/B,IAAI;;;CAGV,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"AAiIA,wBAAsB,OAAO,CAC3B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACxE,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { createReadStream, readdirSync, existsSync, statSync } from "fs";
|
|
3
|
+
import { createInterface } from "readline";
|
|
4
|
+
import { logsDir } from "../../shared/paths.js";
|
|
5
|
+
const LEVEL_COLORS = {
|
|
6
|
+
10: { label: "TRACE", color: "\x1b[90m" }, // gray
|
|
7
|
+
20: { label: "DEBUG", color: "\x1b[36m" }, // cyan
|
|
8
|
+
30: { label: "INFO", color: "\x1b[32m" }, // green
|
|
9
|
+
40: { label: "WARN", color: "\x1b[33m" }, // yellow
|
|
10
|
+
50: { label: "ERROR", color: "\x1b[31m" }, // red
|
|
11
|
+
};
|
|
12
|
+
const RESET = "\x1b[0m";
|
|
13
|
+
function formatEntry(entry) {
|
|
14
|
+
const date = new Date(entry.time);
|
|
15
|
+
const time = date.toLocaleTimeString("en-US", { hour12: false });
|
|
16
|
+
const levelInfo = LEVEL_COLORS[entry.level] || { label: `L${entry.level}`, color: "" };
|
|
17
|
+
// Collect extra fields (exclude standard pino fields)
|
|
18
|
+
const { level, time: _t, msg, name: _n, pid: _p, hostname: _h, ...extra } = entry;
|
|
19
|
+
const extraStr = Object.keys(extra).length > 0 ? ` ${JSON.stringify(extra)}` : "";
|
|
20
|
+
return `${levelInfo.color}${time} ${levelInfo.label.padEnd(5)} ${msg}${extraStr}${RESET}`;
|
|
21
|
+
}
|
|
22
|
+
function parseLine(line) {
|
|
23
|
+
if (!line.trim())
|
|
24
|
+
return null;
|
|
25
|
+
try {
|
|
26
|
+
return JSON.parse(line);
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function findLogFile(dir, agent, date) {
|
|
33
|
+
if (date) {
|
|
34
|
+
const file = resolve(dir, `${agent}-${date}.log`);
|
|
35
|
+
return existsSync(file) ? file : null;
|
|
36
|
+
}
|
|
37
|
+
// Default to today
|
|
38
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
39
|
+
const todayFile = resolve(dir, `${agent}-${today}.log`);
|
|
40
|
+
if (existsSync(todayFile))
|
|
41
|
+
return todayFile;
|
|
42
|
+
// Find most recent log file for this agent
|
|
43
|
+
if (!existsSync(dir))
|
|
44
|
+
return null;
|
|
45
|
+
const files = readdirSync(dir)
|
|
46
|
+
.filter((f) => f.startsWith(`${agent}-`) && f.endsWith(".log"))
|
|
47
|
+
.sort()
|
|
48
|
+
.reverse();
|
|
49
|
+
return files.length > 0 ? resolve(dir, files[0]) : null;
|
|
50
|
+
}
|
|
51
|
+
async function readLastN(filePath, n) {
|
|
52
|
+
const entries = [];
|
|
53
|
+
const rl = createInterface({
|
|
54
|
+
input: createReadStream(filePath, { encoding: "utf-8" }),
|
|
55
|
+
crlfDelay: Infinity,
|
|
56
|
+
});
|
|
57
|
+
for await (const line of rl) {
|
|
58
|
+
const entry = parseLine(line);
|
|
59
|
+
if (entry) {
|
|
60
|
+
entries.push(formatEntry(entry));
|
|
61
|
+
if (entries.length > n)
|
|
62
|
+
entries.shift();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const formatted of entries) {
|
|
66
|
+
console.log(formatted);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function readNewData(filePath, start) {
|
|
70
|
+
const currentSize = statSync(filePath).size;
|
|
71
|
+
if (currentSize <= start)
|
|
72
|
+
return { newPosition: start };
|
|
73
|
+
const stream = createReadStream(filePath, { encoding: "utf-8", start });
|
|
74
|
+
const rl = createInterface({ input: stream, crlfDelay: Infinity });
|
|
75
|
+
for await (const line of rl) {
|
|
76
|
+
const entry = parseLine(line);
|
|
77
|
+
if (entry) {
|
|
78
|
+
console.log(formatEntry(entry));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { newPosition: currentSize };
|
|
82
|
+
}
|
|
83
|
+
async function followFile(filePath, lastN) {
|
|
84
|
+
// Print last N entries first
|
|
85
|
+
await readLastN(filePath, lastN);
|
|
86
|
+
// Start tailing from end of file
|
|
87
|
+
let position = statSync(filePath).size;
|
|
88
|
+
// Poll for new data every 500ms (more reliable than fs.watch)
|
|
89
|
+
const interval = setInterval(async () => {
|
|
90
|
+
try {
|
|
91
|
+
const { newPosition } = await readNewData(filePath, position);
|
|
92
|
+
position = newPosition;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// File may have been rotated or removed — ignore
|
|
96
|
+
}
|
|
97
|
+
}, 500);
|
|
98
|
+
process.on("SIGINT", () => {
|
|
99
|
+
clearInterval(interval);
|
|
100
|
+
process.exit(0);
|
|
101
|
+
});
|
|
102
|
+
await new Promise(() => { });
|
|
103
|
+
}
|
|
104
|
+
export async function execute(agent, opts) {
|
|
105
|
+
const projectPath = resolve(opts.project);
|
|
106
|
+
const dir = logsDir(projectPath);
|
|
107
|
+
const n = parseInt(opts.lines, 10);
|
|
108
|
+
const logFile = findLogFile(dir, agent, opts.date);
|
|
109
|
+
if (!logFile) {
|
|
110
|
+
const dateStr = opts.date || "today";
|
|
111
|
+
console.error(`No log file found for agent "${agent}" (${dateStr}) in ${dir}`);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
if (opts.follow) {
|
|
115
|
+
await followFile(logFile, n);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
await readLastN(logFile, n);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/cli/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAKA,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CnG"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { loadGlobalConfig } from "../../shared/config.js";
|
|
3
|
+
import { startScheduler } from "../../scheduler/index.js";
|
|
4
|
+
import { StatusTracker } from "../../tui/status-tracker.js";
|
|
5
|
+
export async function execute(opts) {
|
|
6
|
+
const projectPath = resolve(opts.project);
|
|
7
|
+
const globalConfig = loadGlobalConfig(projectPath);
|
|
8
|
+
// Docker is on by default; --dangerous-no-docker disables it
|
|
9
|
+
if (opts.dangerousNoDocker) {
|
|
10
|
+
if (!globalConfig.docker)
|
|
11
|
+
globalConfig.docker = { enabled: false };
|
|
12
|
+
else
|
|
13
|
+
globalConfig.docker.enabled = false;
|
|
14
|
+
}
|
|
15
|
+
else if (!globalConfig.docker) {
|
|
16
|
+
globalConfig.docker = { enabled: true };
|
|
17
|
+
}
|
|
18
|
+
const dockerEnabled = globalConfig.docker?.enabled === true;
|
|
19
|
+
const mode = dockerEnabled ? "docker" : "host";
|
|
20
|
+
const statusTracker = new StatusTracker();
|
|
21
|
+
const { cronJobs, broker, webhookRegistry, webhookUrls } = await startScheduler(projectPath, globalConfig, statusTracker);
|
|
22
|
+
const brokerPort = broker ? (globalConfig.broker?.port || 8080) : null;
|
|
23
|
+
statusTracker.setSchedulerInfo({
|
|
24
|
+
mode,
|
|
25
|
+
brokerPort,
|
|
26
|
+
cronJobCount: cronJobs.length,
|
|
27
|
+
webhooksActive: !!webhookRegistry,
|
|
28
|
+
webhookUrls: webhookUrls || [],
|
|
29
|
+
startedAt: new Date(),
|
|
30
|
+
});
|
|
31
|
+
// Lazy-import TUI to avoid loading React unless needed
|
|
32
|
+
const { renderTUI } = await import("../../tui/render.js");
|
|
33
|
+
const { unmount } = await renderTUI(statusTracker);
|
|
34
|
+
// Coordinate SIGINT: unmount Ink, then exit
|
|
35
|
+
const shutdown = () => {
|
|
36
|
+
unmount();
|
|
37
|
+
process.exit(0);
|
|
38
|
+
};
|
|
39
|
+
process.on("SIGINT", shutdown);
|
|
40
|
+
process.on("SIGTERM", shutdown);
|
|
41
|
+
// Keep process alive
|
|
42
|
+
await new Promise(() => { });
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAsD;IAClF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEnD,6DAA6D;IAC7D,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,YAAY,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;YAC9D,YAAY,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3C,CAAC;SAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAChC,YAAY,CAAC,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,aAAa,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5D,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAE/C,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAE1C,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAE1H,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEvE,aAAa,CAAC,gBAAgB,CAAC;QAC7B,IAAI;QACJ,UAAU;QACV,YAAY,EAAE,QAAQ,CAAC,MAAM;QAC7B,cAAc,EAAE,CAAC,CAAC,eAAe;QACjC,WAAW,EAAE,WAAW,IAAI,EAAE;QAC9B,SAAS,EAAE,IAAI,IAAI,EAAE;KACtB,CAAC,CAAC;IAEH,uDAAuD;IACvD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,CAAC;IAEnD,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,OAAO,EAAE,CAAC;QACV,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAEhC,qBAAqB;IACrB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAUA,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDtE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { resolve } from "path";
|
|
2
|
+
import { existsSync, readFileSync } from "fs";
|
|
3
|
+
import { discoverAgents, loadAgentConfig } from "../../shared/config.js";
|
|
4
|
+
function readStateFile(projectPath, agent, file) {
|
|
5
|
+
const path = resolve(projectPath, ".al", "state", agent, file);
|
|
6
|
+
if (!existsSync(path))
|
|
7
|
+
return {};
|
|
8
|
+
return JSON.parse(readFileSync(path, "utf-8"));
|
|
9
|
+
}
|
|
10
|
+
export async function execute(opts) {
|
|
11
|
+
const projectPath = resolve(opts.project);
|
|
12
|
+
const agentNames = discoverAgents(projectPath);
|
|
13
|
+
console.log(`AL Status — ${projectPath}\n`);
|
|
14
|
+
for (const name of agentNames) {
|
|
15
|
+
const agentConfig = loadAgentConfig(projectPath, name);
|
|
16
|
+
console.log(`${name}:`);
|
|
17
|
+
console.log(` Repos: ${agentConfig.repos.join(", ")}`);
|
|
18
|
+
console.log(` Schedule: ${agentConfig.schedule}`);
|
|
19
|
+
// Show state based on which state files exist
|
|
20
|
+
const stateDir = resolve(projectPath, ".al", "state", name);
|
|
21
|
+
if (existsSync(resolve(stateDir, "active-issues.json"))) {
|
|
22
|
+
const devState = readStateFile(projectPath, name, "active-issues.json");
|
|
23
|
+
const issues = devState.issues || {};
|
|
24
|
+
const inProgress = Object.entries(issues).filter(([_, v]) => v.status === "in_progress");
|
|
25
|
+
const completed = Object.entries(issues).filter(([_, v]) => v.status === "completed");
|
|
26
|
+
console.log(` In progress: ${inProgress.length}`);
|
|
27
|
+
console.log(` Completed: ${completed.length}`);
|
|
28
|
+
for (const [key, val] of inProgress) {
|
|
29
|
+
console.log(` - ${key} (started ${val.startedAt})`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (existsSync(resolve(stateDir, "reviewed-prs.json"))) {
|
|
33
|
+
const reviewerState = readStateFile(projectPath, name, "reviewed-prs.json");
|
|
34
|
+
const prs = reviewerState.prs || {};
|
|
35
|
+
const prCount = Object.keys(prs).length;
|
|
36
|
+
const approved = Object.values(prs).filter((v) => v.verdict === "approved").length;
|
|
37
|
+
const changesRequested = Object.values(prs).filter((v) => v.verdict === "changes_requested").length;
|
|
38
|
+
console.log(` Total reviewed: ${prCount}`);
|
|
39
|
+
console.log(` Approved: ${approved}`);
|
|
40
|
+
console.log(` Changes req: ${changesRequested}`);
|
|
41
|
+
}
|
|
42
|
+
if (existsSync(resolve(stateDir, "known-errors.json"))) {
|
|
43
|
+
const devopsState = readStateFile(projectPath, name, "known-errors.json");
|
|
44
|
+
const errors = devopsState.errors || {};
|
|
45
|
+
const errorCount = Object.keys(errors).length;
|
|
46
|
+
console.log(` Errors filed: ${errorCount}`);
|
|
47
|
+
}
|
|
48
|
+
console.log("");
|
|
49
|
+
}
|
|
50
|
+
console.log(`Agents: ${agentNames.join(", ")}`);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":""}
|
package/dist/cli/main.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { readFileSync } from "fs";
|
|
4
|
+
import { dirname, resolve } from "path";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const pkg = JSON.parse(readFileSync(resolve(__dirname, "../../package.json"), "utf-8"));
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name("al")
|
|
11
|
+
.description("Action Llama — automated development agents")
|
|
12
|
+
.version(pkg.version);
|
|
13
|
+
// --- User-facing commands ---
|
|
14
|
+
program
|
|
15
|
+
.command("init")
|
|
16
|
+
.description("Interactive setup, creates project dir + credentials")
|
|
17
|
+
.argument("<name>", "project name")
|
|
18
|
+
.action(async (name) => {
|
|
19
|
+
const { execute } = await import("./commands/init.js");
|
|
20
|
+
await execute(name);
|
|
21
|
+
});
|
|
22
|
+
program
|
|
23
|
+
.command("start")
|
|
24
|
+
.description("Start cron scheduler")
|
|
25
|
+
.option("-p, --project <dir>", "project directory", ".")
|
|
26
|
+
.option("--dangerous-no-docker", "disable Docker container isolation (run agents directly on host)")
|
|
27
|
+
.action(async (opts) => {
|
|
28
|
+
const { execute } = await import("./commands/start.js");
|
|
29
|
+
await execute(opts);
|
|
30
|
+
});
|
|
31
|
+
program
|
|
32
|
+
.command("logs")
|
|
33
|
+
.description("View agent log files")
|
|
34
|
+
.argument("<agent>", "agent name")
|
|
35
|
+
.option("-p, --project <dir>", "project directory", ".")
|
|
36
|
+
.option("-n, --lines <N>", "number of log entries to show", "50")
|
|
37
|
+
.option("-f, --follow", "tail mode — watch for new log entries")
|
|
38
|
+
.option("-d, --date <YYYY-MM-DD>", "specific date's log file")
|
|
39
|
+
.action(async (agent, opts) => {
|
|
40
|
+
const { execute } = await import("./commands/logs.js");
|
|
41
|
+
await execute(agent, opts);
|
|
42
|
+
});
|
|
43
|
+
program
|
|
44
|
+
.command("status")
|
|
45
|
+
.description("Show agent status")
|
|
46
|
+
.option("-p, --project <dir>", "project directory", ".")
|
|
47
|
+
.action(async (opts) => {
|
|
48
|
+
const { execute } = await import("./commands/status.js");
|
|
49
|
+
await execute(opts);
|
|
50
|
+
});
|
|
51
|
+
// --- Agent management commands ---
|
|
52
|
+
const agent = program.command("agent").description("Agent management commands");
|
|
53
|
+
agent
|
|
54
|
+
.command("add")
|
|
55
|
+
.description("Add a new agent to an existing project")
|
|
56
|
+
.argument("[definition]", "built-in name (dev, reviewer, devops) or path to definition directory")
|
|
57
|
+
.option("-p, --project <dir>", "project directory", ".")
|
|
58
|
+
.action(async (definition, opts) => {
|
|
59
|
+
const { execute } = await import("./commands/agent/add.js");
|
|
60
|
+
await execute({ ...opts, definition });
|
|
61
|
+
});
|
|
62
|
+
program.parseAsync().catch((err) => {
|
|
63
|
+
const detail = { error: err.message };
|
|
64
|
+
if (err.cause)
|
|
65
|
+
detail.cause = String(err.cause);
|
|
66
|
+
if (err.code)
|
|
67
|
+
detail.code = err.code;
|
|
68
|
+
if (err.status)
|
|
69
|
+
detail.status = err.status;
|
|
70
|
+
if (err.stack)
|
|
71
|
+
detail.stack = err.stack;
|
|
72
|
+
console.error(JSON.stringify(detail));
|
|
73
|
+
process.exit(1);
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|