aperta-cli 1.0.0-beta.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/LICENSE +21 -0
- package/README.md +386 -0
- package/bin/aperta.js +3 -0
- package/dashboard/dist/assets/index-CWL1aA6j.js +11 -0
- package/dashboard/dist/assets/index-D0Ru46BW.css +1 -0
- package/dashboard/dist/index.html +15 -0
- package/dist-cli/src/adapters/git-only.js +7 -0
- package/dist-cli/src/adapters/git-only.js.map +1 -0
- package/dist-cli/src/adapters/opencode.js +47 -0
- package/dist-cli/src/adapters/opencode.js.map +1 -0
- package/dist-cli/src/agent-harness.js +1292 -0
- package/dist-cli/src/agent-harness.js.map +1 -0
- package/dist-cli/src/capture.js +17 -0
- package/dist-cli/src/capture.js.map +1 -0
- package/dist-cli/src/cli.js +283 -0
- package/dist-cli/src/cli.js.map +1 -0
- package/dist-cli/src/coach.js +315 -0
- package/dist-cli/src/coach.js.map +1 -0
- package/dist-cli/src/dashboard-data.js +254 -0
- package/dist-cli/src/dashboard-data.js.map +1 -0
- package/dist-cli/src/dashboard-server.js +379 -0
- package/dist-cli/src/dashboard-server.js.map +1 -0
- package/dist-cli/src/engine.js +85 -0
- package/dist-cli/src/engine.js.map +1 -0
- package/dist-cli/src/execution.js +20 -0
- package/dist-cli/src/execution.js.map +1 -0
- package/dist-cli/src/git.js +131 -0
- package/dist-cli/src/git.js.map +1 -0
- package/dist-cli/src/harness-intelligence.js +110 -0
- package/dist-cli/src/harness-intelligence.js.map +1 -0
- package/dist-cli/src/hook.js +39 -0
- package/dist-cli/src/hook.js.map +1 -0
- package/dist-cli/src/impact.js +224 -0
- package/dist-cli/src/impact.js.map +1 -0
- package/dist-cli/src/jobs.js +27 -0
- package/dist-cli/src/jobs.js.map +1 -0
- package/dist-cli/src/ledger.js +211 -0
- package/dist-cli/src/ledger.js.map +1 -0
- package/dist-cli/src/map.js +73 -0
- package/dist-cli/src/map.js.map +1 -0
- package/dist-cli/src/observer.js +127 -0
- package/dist-cli/src/observer.js.map +1 -0
- package/dist-cli/src/probes.js +195 -0
- package/dist-cli/src/probes.js.map +1 -0
- package/dist-cli/src/prompt.js +44 -0
- package/dist-cli/src/prompt.js.map +1 -0
- package/dist-cli/src/proof-graph.js +123 -0
- package/dist-cli/src/proof-graph.js.map +1 -0
- package/dist-cli/src/proof.js +99 -0
- package/dist-cli/src/proof.js.map +1 -0
- package/dist-cli/src/registry.js +60 -0
- package/dist-cli/src/registry.js.map +1 -0
- package/dist-cli/src/repository.js +39 -0
- package/dist-cli/src/repository.js.map +1 -0
- package/dist-cli/src/semantic.js +183 -0
- package/dist-cli/src/semantic.js.map +1 -0
- package/dist-cli/src/service.js +60 -0
- package/dist-cli/src/service.js.map +1 -0
- package/dist-cli/src/session.js +41 -0
- package/dist-cli/src/session.js.map +1 -0
- package/dist-cli/src/settings.js +305 -0
- package/dist-cli/src/settings.js.map +1 -0
- package/dist-cli/src/skills.js +104 -0
- package/dist-cli/src/skills.js.map +1 -0
- package/dist-cli/src/storage.js +163 -0
- package/dist-cli/src/storage.js.map +1 -0
- package/dist-cli/src/types.js +2 -0
- package/dist-cli/src/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { readFile, stat } from "node:fs/promises";
|
|
2
|
+
import { extname, isAbsolute, join, normalize, sep } from "node:path";
|
|
3
|
+
import { listTrackedFiles } from "./git.js";
|
|
4
|
+
const languageByExtension = {
|
|
5
|
+
".java": "java", ".kt": "kotlin", ".kts": "kotlin", ".ts": "typescript", ".tsx": "tsx", ".js": "javascript", ".jsx": "jsx",
|
|
6
|
+
".vue": "vue", ".py": "python", ".rb": "ruby", ".go": "go", ".rs": "rust", ".cs": "csharp", ".cpp": "cpp", ".cc": "cpp", ".c": "c",
|
|
7
|
+
".h": "c", ".hpp": "cpp", ".json": "json", ".xml": "xml", ".html": "html", ".css": "css", ".scss": "scss", ".md": "markdown",
|
|
8
|
+
".yml": "yaml", ".yaml": "yaml", ".toml": "toml", ".properties": "properties", ".sh": "shell", ".zsh": "shell", ".sql": "sql",
|
|
9
|
+
};
|
|
10
|
+
function safeRelativePath(path) {
|
|
11
|
+
if (!path || path.includes("\0") || isAbsolute(path))
|
|
12
|
+
throw new Error("Invalid repository path");
|
|
13
|
+
const cleaned = normalize(path).split(sep).join("/");
|
|
14
|
+
if (cleaned === ".." || cleaned.startsWith("../") || cleaned.includes("/../"))
|
|
15
|
+
throw new Error("Invalid repository path");
|
|
16
|
+
return cleaned.replace(/^\.\//, "");
|
|
17
|
+
}
|
|
18
|
+
export async function listRepositoryFiles(root) {
|
|
19
|
+
return (await listTrackedFiles(root)).slice(0, 20_000);
|
|
20
|
+
}
|
|
21
|
+
export async function readRepositoryFile(root, requestedPath) {
|
|
22
|
+
const path = safeRelativePath(requestedPath);
|
|
23
|
+
const allowed = new Set(await listRepositoryFiles(root));
|
|
24
|
+
if (!allowed.has(path))
|
|
25
|
+
throw new Error("File is not part of the visible Git repository");
|
|
26
|
+
const fullPath = join(root, path);
|
|
27
|
+
const details = await stat(fullPath);
|
|
28
|
+
if (!details.isFile())
|
|
29
|
+
throw new Error("Repository path is not a file");
|
|
30
|
+
const limit = 1_000_000;
|
|
31
|
+
const bytes = await readFile(fullPath);
|
|
32
|
+
const binary = bytes.subarray(0, Math.min(bytes.length, 8_192)).includes(0);
|
|
33
|
+
return {
|
|
34
|
+
path, size: details.size, binary, truncated: details.size > limit,
|
|
35
|
+
language: languageByExtension[extname(path).toLowerCase()] ?? "text",
|
|
36
|
+
content: binary ? "" : bytes.subarray(0, limit).toString("utf8"),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../src/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { access, readFile } from "node:fs/promises";
|
|
3
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { promisify } from "node:util";
|
|
6
|
+
import { parse as parseVue } from "@vue/compiler-sfc";
|
|
7
|
+
import ts from "typescript";
|
|
8
|
+
import { privateCachePath } from "./storage.js";
|
|
9
|
+
const execFileAsync = promisify(execFile);
|
|
10
|
+
const cache = new Map();
|
|
11
|
+
async function exists(path) { try {
|
|
12
|
+
await access(path);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
} }
|
|
18
|
+
const slash = (path) => path.replaceAll("\\", "/");
|
|
19
|
+
async function analyzeJava(root, diff) {
|
|
20
|
+
const java = diff.files.filter((file) => file.path.endsWith(".java")).map((file) => file.path);
|
|
21
|
+
if (!java.length)
|
|
22
|
+
return { provider: "java-compiler", status: "unavailable", detail: "No changed Java source", diagnostics: 0, symbols: [], relations: [] };
|
|
23
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
24
|
+
const adjacentHelper = join(moduleDir, "../tools/ApertaJavaAnalyzer.java");
|
|
25
|
+
const helper = await exists(adjacentHelper) ? adjacentHelper : join(moduleDir, "../../tools/ApertaJavaAnalyzer.java");
|
|
26
|
+
try {
|
|
27
|
+
const parts = [join(root, "target/classes"), join(root, "target/test-classes")];
|
|
28
|
+
try {
|
|
29
|
+
parts.push(...(await readFile(privateCachePath(root, "semantic", "java-classpath.txt"), "utf8")).trim().split(":"));
|
|
30
|
+
}
|
|
31
|
+
catch { }
|
|
32
|
+
const classpath = parts.filter(Boolean).join(":");
|
|
33
|
+
const { stdout } = await execFileAsync("java", [helper, root, classpath, ...java], { cwd: root, timeout: 30_000, maxBuffer: 8 * 1024 * 1024, env: { PATH: process.env.PATH ?? "/usr/bin:/bin" } });
|
|
34
|
+
const result = JSON.parse(stdout);
|
|
35
|
+
const status = result.diagnostics ? "partial" : "resolved";
|
|
36
|
+
return { provider: "java-compiler", status, detail: result.diagnostics ? `JDK compiler resolved project-local symbols with ${result.diagnostics} missing-dependency or source diagnostic${result.diagnostics === 1 ? "" : "s"}.` : "JDK compiler resolved project-local symbols and call targets.", ...result };
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return { provider: "java-compiler", status: "unavailable", detail: `JDK semantic analysis unavailable: ${error instanceof Error ? error.message.split("\n")[0] : String(error)}`, diagnostics: 0, symbols: [], relations: [] };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function configFor(root, changedPaths) {
|
|
43
|
+
const rootPath = resolve(root);
|
|
44
|
+
const nearest = (file) => {
|
|
45
|
+
let directory = dirname(resolve(file));
|
|
46
|
+
while (directory === rootPath || directory.startsWith(`${rootPath}/`)) {
|
|
47
|
+
for (const name of ["tsconfig.json", "jsconfig.json"]) {
|
|
48
|
+
const candidate = join(directory, name);
|
|
49
|
+
if (ts.sys.fileExists(candidate))
|
|
50
|
+
return candidate;
|
|
51
|
+
}
|
|
52
|
+
const parent = dirname(directory);
|
|
53
|
+
if (parent === directory)
|
|
54
|
+
break;
|
|
55
|
+
directory = parent;
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
};
|
|
59
|
+
const configPaths = [...new Set(changedPaths.map(nearest).filter((path) => Boolean(path)))];
|
|
60
|
+
const parsed = configPaths.map((configPath) => {
|
|
61
|
+
const loaded = ts.readConfigFile(configPath, ts.sys.readFile);
|
|
62
|
+
return loaded.error ? undefined : ts.parseJsonConfigFileContent(loaded.config, ts.sys, dirname(configPath), { noEmit: true, allowJs: true }, configPath);
|
|
63
|
+
}).filter((value) => Boolean(value));
|
|
64
|
+
if (parsed.length)
|
|
65
|
+
return { fileNames: [...new Set(parsed.flatMap((value) => value.fileNames))], options: parsed[0].options, errors: parsed.flatMap((value) => value.errors) };
|
|
66
|
+
const files = ts.sys.readDirectory(root, [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"], ["node_modules", "dist", "build", ".git"], undefined, 12_000);
|
|
67
|
+
return { fileNames: files, options: { noEmit: true, allowJs: true, checkJs: false, jsx: ts.JsxEmit.Preserve, moduleResolution: ts.ModuleResolutionKind.Bundler, module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2022 }, errors: [] };
|
|
68
|
+
}
|
|
69
|
+
function declarationName(checker, node) {
|
|
70
|
+
const named = node;
|
|
71
|
+
if (!named.name)
|
|
72
|
+
return undefined;
|
|
73
|
+
const symbol = checker.getSymbolAtLocation(named.name);
|
|
74
|
+
return symbol ? checker.getFullyQualifiedName(symbol).replace(/^".*"\./, "") : named.name.getText();
|
|
75
|
+
}
|
|
76
|
+
async function analyzeTypeScript(root, diff) {
|
|
77
|
+
const changed = new Set(diff.files.filter((file) => /\.(?:[cm]?[jt]sx?|vue)$/.test(file.path)).map((file) => slash(resolve(root, file.path))));
|
|
78
|
+
if (!changed.size)
|
|
79
|
+
return { provider: "typescript-compiler", status: "unavailable", detail: "No changed JavaScript, TypeScript, or Vue source", diagnostics: 0, symbols: [], relations: [] };
|
|
80
|
+
try {
|
|
81
|
+
const config = configFor(root, [...changed]);
|
|
82
|
+
const virtualVue = new Map();
|
|
83
|
+
for (const vuePath of ts.sys.readDirectory(root, [".vue"], ["node_modules", "dist", "build", ".git"], undefined, 4_000)) {
|
|
84
|
+
try {
|
|
85
|
+
const source = await readFile(vuePath, "utf8");
|
|
86
|
+
const descriptor = parseVue(source, { filename: vuePath }).descriptor;
|
|
87
|
+
const script = [descriptor.script?.content, descriptor.scriptSetup?.content].filter(Boolean).join("\n");
|
|
88
|
+
if (script)
|
|
89
|
+
virtualVue.set(`${slash(resolve(vuePath))}.tsx`, script);
|
|
90
|
+
}
|
|
91
|
+
catch { }
|
|
92
|
+
}
|
|
93
|
+
const host = ts.createCompilerHost(config.options);
|
|
94
|
+
const normalFileExists = host.fileExists.bind(host), normalReadFile = host.readFile.bind(host), normalGetSourceFile = host.getSourceFile.bind(host);
|
|
95
|
+
host.fileExists = (path) => virtualVue.has(slash(resolve(path))) || normalFileExists(path);
|
|
96
|
+
host.readFile = (path) => virtualVue.get(slash(resolve(path))) ?? normalReadFile(path);
|
|
97
|
+
host.getSourceFile = (path, languageVersion, onError, shouldCreateNewSourceFile) => {
|
|
98
|
+
const content = virtualVue.get(slash(resolve(path)));
|
|
99
|
+
return content === undefined ? normalGetSourceFile(path, languageVersion, onError, shouldCreateNewSourceFile) : ts.createSourceFile(path, content, languageVersion, true, ts.ScriptKind.TSX);
|
|
100
|
+
};
|
|
101
|
+
host.resolveModuleNames = (moduleNames, containingFile) => moduleNames.map((moduleName) => {
|
|
102
|
+
if (moduleName.endsWith(".vue")) {
|
|
103
|
+
const candidate = `${slash(resolve(dirname(containingFile), moduleName))}.tsx`;
|
|
104
|
+
if (virtualVue.has(candidate))
|
|
105
|
+
return { resolvedFileName: candidate, extension: ts.Extension.Tsx, isExternalLibraryImport: false };
|
|
106
|
+
}
|
|
107
|
+
return ts.resolveModuleName(moduleName, containingFile, config.options, host).resolvedModule;
|
|
108
|
+
});
|
|
109
|
+
const program = ts.createProgram({ rootNames: [...config.fileNames, ...virtualVue.keys()], options: config.options, host });
|
|
110
|
+
const checker = program.getTypeChecker();
|
|
111
|
+
const symbols = [], relations = [];
|
|
112
|
+
const symbolKeys = new Set(), relationKeys = new Set();
|
|
113
|
+
const pathOf = (source) => slash(relative(root, source.fileName)).replace(/\.vue\.tsx$/, ".vue");
|
|
114
|
+
const addSymbol = (path, name, kind) => { if (!name)
|
|
115
|
+
return; const key = `${path}|${name}|${kind}`; if (!symbolKeys.has(key)) {
|
|
116
|
+
symbolKeys.add(key);
|
|
117
|
+
symbols.push({ path, name, kind });
|
|
118
|
+
} };
|
|
119
|
+
for (const source of program.getSourceFiles()) {
|
|
120
|
+
if (source.isDeclarationFile || source.fileName.includes("/node_modules/"))
|
|
121
|
+
continue;
|
|
122
|
+
const sourceAbsolute = slash(resolve(source.fileName)).replace(/\.vue\.tsx$/, ".vue");
|
|
123
|
+
const sourcePath = pathOf(source);
|
|
124
|
+
const visit = (node) => {
|
|
125
|
+
if (changed.has(sourceAbsolute)) {
|
|
126
|
+
if (ts.isClassDeclaration(node) || ts.isInterfaceDeclaration(node) || ts.isTypeAliasDeclaration(node) || ts.isEnumDeclaration(node))
|
|
127
|
+
addSymbol(sourcePath, declarationName(checker, node), "class");
|
|
128
|
+
if (ts.isFunctionDeclaration(node) || ts.isMethodDeclaration(node) || ts.isArrowFunction(node) || ts.isFunctionExpression(node))
|
|
129
|
+
addSymbol(sourcePath, declarationName(checker, node.parent && ts.isVariableDeclaration(node.parent) ? node.parent : node), "method");
|
|
130
|
+
}
|
|
131
|
+
if (ts.isCallExpression(node)) {
|
|
132
|
+
const signature = checker.getResolvedSignature(node);
|
|
133
|
+
const declaration = signature?.declaration;
|
|
134
|
+
const targetSource = declaration?.getSourceFile();
|
|
135
|
+
if (targetSource && !targetSource.isDeclarationFile) {
|
|
136
|
+
const targetPath = pathOf(targetSource);
|
|
137
|
+
const targetAbsolute = slash(resolve(targetSource.fileName)).replace(/\.vue\.tsx$/, ".vue");
|
|
138
|
+
if (targetPath !== sourcePath && (changed.has(sourceAbsolute) || changed.has(targetAbsolute))) {
|
|
139
|
+
const targetName = declaration ? declarationName(checker, declaration) : undefined;
|
|
140
|
+
const key = `${sourcePath}|${targetPath}|${targetName ?? ""}|calls`;
|
|
141
|
+
if (!relationKeys.has(key)) {
|
|
142
|
+
relationKeys.add(key);
|
|
143
|
+
relations.push({ fromPath: sourcePath, toPath: targetPath, toName: targetName, kind: "calls" });
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (ts.isImportDeclaration(node) && ts.isStringLiteral(node.moduleSpecifier)) {
|
|
149
|
+
const symbol = checker.getSymbolAtLocation(node.moduleSpecifier);
|
|
150
|
+
const target = symbol?.declarations?.[0]?.getSourceFile();
|
|
151
|
+
if (target && !target.isDeclarationFile && changed.has(sourceAbsolute)) {
|
|
152
|
+
const targetPath = pathOf(target);
|
|
153
|
+
const key = `${sourcePath}|${targetPath}|imports`;
|
|
154
|
+
if (!relationKeys.has(key)) {
|
|
155
|
+
relationKeys.add(key);
|
|
156
|
+
relations.push({ fromPath: sourcePath, toPath: targetPath, kind: "imports" });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
ts.forEachChild(node, visit);
|
|
161
|
+
};
|
|
162
|
+
visit(source);
|
|
163
|
+
}
|
|
164
|
+
const diagnostics = ts.getPreEmitDiagnostics(program).length + config.errors.length;
|
|
165
|
+
const frontend = virtualVue.size ? " JavaScript/TypeScript and Vue component scripts were included." : "";
|
|
166
|
+
return { provider: "typescript-compiler", status: diagnostics ? "partial" : "resolved", detail: diagnostics ? `TypeScript resolved project symbols with ${diagnostics} configuration or type diagnostic${diagnostics === 1 ? "" : "s"}.${frontend}` : `TypeScript resolved project symbols, imports, and call targets.${frontend}`, diagnostics, symbols, relations };
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
return { provider: "typescript-compiler", status: "unavailable", detail: `TypeScript semantic analysis unavailable: ${error instanceof Error ? error.message : String(error)}`, diagnostics: 0, symbols: [], relations: [] };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export async function analyzeProjectSemantics(root, diff) {
|
|
173
|
+
const key = `${root}:${diff.fingerprint ?? diff.id}:semantic-v1`;
|
|
174
|
+
let pending = cache.get(key);
|
|
175
|
+
if (!pending) {
|
|
176
|
+
pending = Promise.all([analyzeJava(root, diff), analyzeTypeScript(root, diff)]).then((results) => results.filter((result) => result.detail !== "No changed Java source" && result.detail !== "No changed JavaScript, TypeScript, or Vue source"));
|
|
177
|
+
cache.set(key, pending);
|
|
178
|
+
if (cache.size > 40)
|
|
179
|
+
cache.delete(cache.keys().next().value);
|
|
180
|
+
}
|
|
181
|
+
return pending;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=semantic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../src/semantic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { mkdir, readFile, unlink, writeFile } from "node:fs/promises";
|
|
4
|
+
import { homedir } from "node:os";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { projectId } from "./registry.js";
|
|
7
|
+
import { privateCachePath } from "./storage.js";
|
|
8
|
+
const execFileAsync = promisify(execFile);
|
|
9
|
+
const label = (root) => `dev.aperta.observer.${projectId(root)}`;
|
|
10
|
+
const agentsDir = () => process.env.APERTA_LAUNCH_AGENTS ?? join(homedir(), "Library", "LaunchAgents");
|
|
11
|
+
const plistPath = (root) => join(agentsDir(), `${label(root)}.plist`);
|
|
12
|
+
const xml = (value) => value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll('"', """).replaceAll("'", "'");
|
|
13
|
+
function domain() {
|
|
14
|
+
if (process.getuid === undefined)
|
|
15
|
+
throw new Error("Login services are not supported on this platform");
|
|
16
|
+
return `gui/${process.getuid()}`;
|
|
17
|
+
}
|
|
18
|
+
export async function loginServiceInstalled(root) {
|
|
19
|
+
if (process.platform !== "darwin")
|
|
20
|
+
return false;
|
|
21
|
+
try {
|
|
22
|
+
await readFile(plistPath(root), "utf8");
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code === "ENOENT")
|
|
27
|
+
return false;
|
|
28
|
+
throw error;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function installLoginService(root, entryFile) {
|
|
32
|
+
if (process.platform !== "darwin")
|
|
33
|
+
throw new Error("Automatic login startup currently supports macOS only");
|
|
34
|
+
await mkdir(agentsDir(), { recursive: true });
|
|
35
|
+
const log = privateCachePath(root, "engine.log");
|
|
36
|
+
const plist = `<?xml version="1.0" encoding="UTF-8"?>
|
|
37
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
38
|
+
<plist version="1.0"><dict>
|
|
39
|
+
<key>Label</key><string>${xml(label(root))}</string>
|
|
40
|
+
<key>ProgramArguments</key><array>
|
|
41
|
+
<string>${xml(process.execPath)}</string><string>--no-warnings</string><string>--experimental-strip-types</string>
|
|
42
|
+
<string>${xml(entryFile)}</string><string>observe</string><string>--daemon</string>
|
|
43
|
+
</array>
|
|
44
|
+
<key>WorkingDirectory</key><string>${xml(root)}</string>
|
|
45
|
+
<key>RunAtLoad</key><true/><key>KeepAlive</key><true/>
|
|
46
|
+
<key>StandardOutPath</key><string>${xml(log)}</string><key>StandardErrorPath</key><string>${xml(log)}</string>
|
|
47
|
+
<key>ProcessType</key><string>Background</string>
|
|
48
|
+
</dict></plist>\n`;
|
|
49
|
+
await writeFile(plistPath(root), plist, "utf8");
|
|
50
|
+
await execFileAsync("launchctl", ["bootout", domain(), plistPath(root)]).catch(() => { });
|
|
51
|
+
await execFileAsync("launchctl", ["bootstrap", domain(), plistPath(root)]);
|
|
52
|
+
}
|
|
53
|
+
export async function uninstallLoginService(root) {
|
|
54
|
+
if (!(await loginServiceInstalled(root)))
|
|
55
|
+
return false;
|
|
56
|
+
await execFileAsync("launchctl", ["bootout", domain(), plistPath(root)]).catch(() => { });
|
|
57
|
+
await unlink(plistPath(root)).catch(() => { });
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { appendEvent, eventBase, initializeStore, readConfig } from "./ledger.js";
|
|
3
|
+
import { createRepositorySnapshot, diffSnapshots, currentBranch } from "./git.js";
|
|
4
|
+
import { promptConfidence } from "./prompt.js";
|
|
5
|
+
import { recordSnapshotDiff } from "./capture.js";
|
|
6
|
+
function run(command, args, cwd) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const child = spawn(command, args, { cwd, stdio: "inherit", env: process.env });
|
|
9
|
+
child.once("error", reject);
|
|
10
|
+
child.once("exit", (code, signal) => resolve(code ?? (signal ? 1 : 0)));
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export async function runAgentSession(root, options) {
|
|
14
|
+
await initializeStore(root);
|
|
15
|
+
const before = await createRepositorySnapshot(root);
|
|
16
|
+
let intent;
|
|
17
|
+
if (options.intent) {
|
|
18
|
+
intent = { ...eventBase(root, await currentBranch(root)), kind: "intent", prompt: options.intent };
|
|
19
|
+
await appendEvent(root, intent);
|
|
20
|
+
}
|
|
21
|
+
console.log(`Aperta is observing ${options.command}. Work normally.`);
|
|
22
|
+
const exitCode = await run(options.command, options.args, root);
|
|
23
|
+
const after = await createRepositorySnapshot(root);
|
|
24
|
+
const snapshot = await diffSnapshots(root, before, after);
|
|
25
|
+
if (snapshot.files.length === 0) {
|
|
26
|
+
console.log("Aperta: session ended with no code changes.");
|
|
27
|
+
return exitCode;
|
|
28
|
+
}
|
|
29
|
+
const { diff, duplicate } = await recordSnapshotDiff(root, snapshot, { authorship: "ai", model: options.model, intentId: intent?.id });
|
|
30
|
+
if (duplicate) {
|
|
31
|
+
console.log("Aperta: this exact change was already captured.");
|
|
32
|
+
return exitCode;
|
|
33
|
+
}
|
|
34
|
+
console.log(`Aperta captured ${snapshot.files.length} file${snapshot.files.length === 1 ? "" : "s"} from this session.`);
|
|
35
|
+
const config = await readConfig(root);
|
|
36
|
+
const score = options.score ?? await promptConfidence(config.ratingTimeoutSeconds);
|
|
37
|
+
await appendEvent(root, { ...eventBase(root, await currentBranch(root)), kind: "confidence", diffId: diff.id, score });
|
|
38
|
+
console.log(score ? `Ownership signal recorded: ${score}/3.` : "Saved to the dashboard review queue.");
|
|
39
|
+
return exitCode;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAWlD,SAAS,GAAG,CAAC,OAAe,EAAE,IAAc,EAAE,GAAW;IACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,OAAwB;IAC1E,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,MAA+B,CAAC;IACpC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;QACnG,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,OAAO,kBAAkB,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,MAAM,wBAAwB,CAAC,IAAI,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACvI,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,KAAK,CAAC,MAAM,QAAQ,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC;IACzH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,gBAAgB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACnF,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACvH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,8BAA8B,KAAK,KAAK,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC;IACvG,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|