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.
Files changed (69) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +386 -0
  3. package/bin/aperta.js +3 -0
  4. package/dashboard/dist/assets/index-CWL1aA6j.js +11 -0
  5. package/dashboard/dist/assets/index-D0Ru46BW.css +1 -0
  6. package/dashboard/dist/index.html +15 -0
  7. package/dist-cli/src/adapters/git-only.js +7 -0
  8. package/dist-cli/src/adapters/git-only.js.map +1 -0
  9. package/dist-cli/src/adapters/opencode.js +47 -0
  10. package/dist-cli/src/adapters/opencode.js.map +1 -0
  11. package/dist-cli/src/agent-harness.js +1292 -0
  12. package/dist-cli/src/agent-harness.js.map +1 -0
  13. package/dist-cli/src/capture.js +17 -0
  14. package/dist-cli/src/capture.js.map +1 -0
  15. package/dist-cli/src/cli.js +283 -0
  16. package/dist-cli/src/cli.js.map +1 -0
  17. package/dist-cli/src/coach.js +315 -0
  18. package/dist-cli/src/coach.js.map +1 -0
  19. package/dist-cli/src/dashboard-data.js +254 -0
  20. package/dist-cli/src/dashboard-data.js.map +1 -0
  21. package/dist-cli/src/dashboard-server.js +379 -0
  22. package/dist-cli/src/dashboard-server.js.map +1 -0
  23. package/dist-cli/src/engine.js +85 -0
  24. package/dist-cli/src/engine.js.map +1 -0
  25. package/dist-cli/src/execution.js +20 -0
  26. package/dist-cli/src/execution.js.map +1 -0
  27. package/dist-cli/src/git.js +131 -0
  28. package/dist-cli/src/git.js.map +1 -0
  29. package/dist-cli/src/harness-intelligence.js +110 -0
  30. package/dist-cli/src/harness-intelligence.js.map +1 -0
  31. package/dist-cli/src/hook.js +39 -0
  32. package/dist-cli/src/hook.js.map +1 -0
  33. package/dist-cli/src/impact.js +224 -0
  34. package/dist-cli/src/impact.js.map +1 -0
  35. package/dist-cli/src/jobs.js +27 -0
  36. package/dist-cli/src/jobs.js.map +1 -0
  37. package/dist-cli/src/ledger.js +211 -0
  38. package/dist-cli/src/ledger.js.map +1 -0
  39. package/dist-cli/src/map.js +73 -0
  40. package/dist-cli/src/map.js.map +1 -0
  41. package/dist-cli/src/observer.js +127 -0
  42. package/dist-cli/src/observer.js.map +1 -0
  43. package/dist-cli/src/probes.js +195 -0
  44. package/dist-cli/src/probes.js.map +1 -0
  45. package/dist-cli/src/prompt.js +44 -0
  46. package/dist-cli/src/prompt.js.map +1 -0
  47. package/dist-cli/src/proof-graph.js +123 -0
  48. package/dist-cli/src/proof-graph.js.map +1 -0
  49. package/dist-cli/src/proof.js +99 -0
  50. package/dist-cli/src/proof.js.map +1 -0
  51. package/dist-cli/src/registry.js +60 -0
  52. package/dist-cli/src/registry.js.map +1 -0
  53. package/dist-cli/src/repository.js +39 -0
  54. package/dist-cli/src/repository.js.map +1 -0
  55. package/dist-cli/src/semantic.js +183 -0
  56. package/dist-cli/src/semantic.js.map +1 -0
  57. package/dist-cli/src/service.js +60 -0
  58. package/dist-cli/src/service.js.map +1 -0
  59. package/dist-cli/src/session.js +41 -0
  60. package/dist-cli/src/session.js.map +1 -0
  61. package/dist-cli/src/settings.js +305 -0
  62. package/dist-cli/src/settings.js.map +1 -0
  63. package/dist-cli/src/skills.js +104 -0
  64. package/dist-cli/src/skills.js.map +1 -0
  65. package/dist-cli/src/storage.js +163 -0
  66. package/dist-cli/src/storage.js.map +1 -0
  67. package/dist-cli/src/types.js +2 -0
  68. package/dist-cli/src/types.js.map +1 -0
  69. 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("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;").replaceAll("'", "&apos;");
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC1C,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,uBAAuB,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;AACzE,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AACvG,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9E,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAElK,SAAS,MAAM;IACb,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvG,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY;IACtD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAC7D,OAAO,KAAK,EAAE,CAAC;QAAC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;AACtG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,SAAiB;IACvE,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC5G,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG;;;4BAGY,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;cAE9B,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC;cACrB,GAAG,CAAC,SAAS,CAAC;;uCAEW,GAAG,CAAC,IAAI,CAAC;;sCAEV,GAAG,CAAC,GAAG,CAAC,gDAAgD,GAAG,CAAC,GAAG,CAAC;;kBAEpF,CAAC;IACjB,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzF,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAY;IACtD,IAAI,CAAC,CAAC,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzF,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -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":"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"}