@yuandc/aica 0.1.0 → 0.1.2

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 (48) hide show
  1. package/dist/acp/agent.js +1 -54
  2. package/dist/acp/client/acp-client.js +1 -102
  3. package/dist/acp/client/acp-content.js +1 -13
  4. package/dist/acp/client/acp-events.js +1 -106
  5. package/dist/acp/client/acp-process.js +1 -34
  6. package/dist/acp/client/acp-runtime-pool.js +1 -248
  7. package/dist/acp/client/context-usage.js +1 -29
  8. package/dist/acp/client/json-rpc.js +4 -128
  9. package/dist/acp/provider-types.js +0 -1
  10. package/dist/acp/providers/codex/codex-process.js +1 -51
  11. package/dist/acp/providers/codex/events.js +28 -1473
  12. package/dist/acp/providers/codex/permissions.js +1 -49
  13. package/dist/acp/providers/codex/provider.js +1 -376
  14. package/dist/acp/providers/codex-acp/adapter.js +5 -947
  15. package/dist/acp/providers/codex-acp/context-maintenance.js +5 -148
  16. package/dist/acp/providers/codex-acp/launch.js +1 -35
  17. package/dist/acp/providers/codex-acp/provider.js +1 -486
  18. package/dist/acp/providers/mimo/provider.js +5 -448
  19. package/dist/acp/providers/opencode/provider.js +4 -489
  20. package/dist/acp/providers/registry.js +1 -23
  21. package/dist/acp/standard-events.js +1 -167
  22. package/dist/commands/start.js +1 -137
  23. package/dist/commands/worker-auth.js +4 -100
  24. package/dist/commands/worker-project.js +1 -57
  25. package/dist/core/aca-config.js +1 -74
  26. package/dist/core/aca-server-client.js +1 -57
  27. package/dist/core/acp-event-coalescer.js +1 -108
  28. package/dist/core/acp-event-upload-filter.js +1 -16
  29. package/dist/core/acp-orphan-cleanup.js +1 -91
  30. package/dist/core/affected-files.js +2 -268
  31. package/dist/core/auth.js +1 -36
  32. package/dist/core/file-transfer-worker.js +1 -169
  33. package/dist/core/fs.js +2 -28
  34. package/dist/core/heartbeat.js +3 -578
  35. package/dist/core/job-permission-policy.js +1 -42
  36. package/dist/core/job-worker.js +6 -749
  37. package/dist/core/logger.js +3 -42
  38. package/dist/core/long-poll-worker.js +1 -26
  39. package/dist/core/machine-filesystem-worker.js +3 -352
  40. package/dist/core/paths.js +1 -26
  41. package/dist/core/process-identity.js +1 -34
  42. package/dist/core/process.js +2 -33
  43. package/dist/core/provider-health.js +1 -54
  44. package/dist/core/runtime-options.js +1 -38
  45. package/dist/core/worktree.js +1 -95
  46. package/dist/worker-cli.js +1 -26
  47. package/dist/worker-single-cli.js +1 -16
  48. package/package.json +1 -1
@@ -1,95 +1 @@
1
- import { execFileSync } from "node:child_process";
2
- import crypto from "node:crypto";
3
- import fs from "node:fs";
4
- import path from "node:path";
5
- import { getAcaHome } from "./paths.js";
6
- export function prepareLocalWorktree(input) {
7
- const worktreeId = input.worktree.worktree_id;
8
- if (!worktreeId) {
9
- return { cwd: input.projectRoot, usedWorktree: false };
10
- }
11
- const existingPath = input.worktree.worktree_path ? path.resolve(input.worktree.worktree_path) : null;
12
- if (input.worktree.worktree_status === "active" && existingPath && fs.existsSync(existingPath)) {
13
- return {
14
- cwd: existingPath,
15
- usedWorktree: true,
16
- worktreeId,
17
- status: "active",
18
- baseCommit: input.worktree.worktree_base_commit ?? null,
19
- branchName: input.worktree.worktree_branch_name ?? null,
20
- baseBranch: input.worktree.worktree_base_branch ?? null
21
- };
22
- }
23
- const projectRoot = path.resolve(input.projectRoot);
24
- const safeProject = sanitizePathSegment(input.projectId ?? "project");
25
- const safeSession = sanitizePathSegment(input.sessionId);
26
- const localPath = path.join(getAcaHome(), "worktrees", safeProject, safeSession);
27
- const baseBranch = input.worktree.worktree_base_branch || "HEAD";
28
- const branchName = input.worktree.worktree_branch_name || `aca/session-${safeSession}`;
29
- const baseCommit = currentGitCommit(projectRoot);
30
- fs.mkdirSync(path.dirname(localPath), { recursive: true });
31
- if (fs.existsSync(localPath)) {
32
- return {
33
- cwd: localPath,
34
- usedWorktree: true,
35
- worktreeId,
36
- status: "active",
37
- baseCommit,
38
- branchName,
39
- baseBranch,
40
- raw: { source: "aca-client", reusedExistingPath: true, projectRoot }
41
- };
42
- }
43
- if (baseCommit) {
44
- execFileSync("git", ["worktree", "add", "-B", branchName, localPath, baseBranch], {
45
- cwd: projectRoot,
46
- stdio: "pipe"
47
- });
48
- return {
49
- cwd: localPath,
50
- usedWorktree: true,
51
- worktreeId,
52
- status: "active",
53
- baseCommit,
54
- branchName,
55
- baseBranch,
56
- raw: { source: "aca-client", mode: "git-worktree", projectRoot }
57
- };
58
- }
59
- fs.mkdirSync(localPath, { recursive: true });
60
- copyProjectSnapshot(projectRoot, localPath);
61
- return {
62
- cwd: localPath,
63
- usedWorktree: true,
64
- worktreeId,
65
- status: "fallback-directory",
66
- baseCommit: null,
67
- branchName,
68
- baseBranch,
69
- raw: { source: "aca-client", mode: "fallback-directory", projectRoot, fallbackReason: "git repository has no commits" }
70
- };
71
- }
72
- function currentGitCommit(cwd) {
73
- try {
74
- return execFileSync("git", ["rev-parse", "HEAD"], { cwd, encoding: "utf8", stdio: "pipe" }).trim() || null;
75
- }
76
- catch {
77
- return null;
78
- }
79
- }
80
- function copyProjectSnapshot(source, target) {
81
- fs.cpSync(source, target, {
82
- recursive: true,
83
- filter: (src) => {
84
- const relative = path.relative(source, src);
85
- if (!relative)
86
- return true;
87
- const first = relative.split(path.sep)[0];
88
- return ![".git", "node_modules", "dist", ".aca", ".aica"].includes(first);
89
- }
90
- });
91
- }
92
- function sanitizePathSegment(value) {
93
- const sanitized = value.replace(/[^a-zA-Z0-9._-]+/g, "-").slice(0, 80);
94
- return sanitized || crypto.randomUUID();
95
- }
1
+ import{execFileSync as d}from"node:child_process";import w from"node:crypto";import a from"node:fs";import c from"node:path";import{getAcaHome as f}from"./paths.js";function S(e){const t=e.worktree.worktree_id;if(!t)return{cwd:e.projectRoot,usedWorktree:!1};const s=e.worktree.worktree_path?c.resolve(e.worktree.worktree_path):null;if(e.worktree.worktree_status==="active"&&s&&a.existsSync(s))return{cwd:s,usedWorktree:!0,worktreeId:t,status:"active",baseCommit:e.worktree.worktree_base_commit??null,branchName:e.worktree.worktree_branch_name??null,baseBranch:e.worktree.worktree_base_branch??null};const r=c.resolve(e.projectRoot),l=k(e.projectId??"project"),m=k(e.sessionId),o=c.join(f(),"worktrees",l,m),n=e.worktree.worktree_base_branch||"HEAD",i=e.worktree.worktree_branch_name||`aca/session-${m}`,u=h(r);return a.mkdirSync(c.dirname(o),{recursive:!0}),a.existsSync(o)?{cwd:o,usedWorktree:!0,worktreeId:t,status:"active",baseCommit:u,branchName:i,baseBranch:n,raw:{source:"aca-client",reusedExistingPath:!0,projectRoot:r}}:u?(d("git",["worktree","add","-B",i,o,n],{cwd:r,stdio:"pipe"}),{cwd:o,usedWorktree:!0,worktreeId:t,status:"active",baseCommit:u,branchName:i,baseBranch:n,raw:{source:"aca-client",mode:"git-worktree",projectRoot:r}}):(a.mkdirSync(o,{recursive:!0}),b(r,o),{cwd:o,usedWorktree:!0,worktreeId:t,status:"fallback-directory",baseCommit:null,branchName:i,baseBranch:n,raw:{source:"aca-client",mode:"fallback-directory",projectRoot:r,fallbackReason:"git repository has no commits"}})}function h(e){try{return d("git",["rev-parse","HEAD"],{cwd:e,encoding:"utf8",stdio:"pipe"}).trim()||null}catch{return null}}function b(e,t){a.cpSync(e,t,{recursive:!0,filter:s=>{const r=c.relative(e,s);if(!r)return!0;const l=r.split(c.sep)[0];return![".git","node_modules","dist",".aca",".aica"].includes(l)}})}function k(e){return e.replace(/[^a-zA-Z0-9._-]+/g,"-").slice(0,80)||w.randomUUID()}export{S as prepareLocalWorktree};
@@ -1,27 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import { Command } from "commander";
3
- import { createStartCommand } from "./commands/start.js";
4
- import { createWorkerAuthCommand } from "./commands/worker-auth.js";
5
- import { createWorkerProjectCommand } from "./commands/worker-project.js";
6
- import { DEFAULT_ACA_SERVER_URL } from "./core/aca-config.js";
7
- process.env.ACA_DEFAULT_SERVER_URL ||= DEFAULT_ACA_SERVER_URL;
8
- export async function runWorkerCli(argv = process.argv) {
9
- const program = new Command();
10
- program
11
- .name("aica")
12
- .description("AICA remote Agent worker")
13
- .version("0.1.0")
14
- .enablePositionalOptions();
15
- program.addCommand(createStartCommand());
16
- program.addCommand(createWorkerAuthCommand());
17
- program.addCommand(createWorkerProjectCommand());
18
- await program.parseAsync(argv);
19
- }
20
- const entry = process.argv[1] || "";
21
- if (/(?:^|[\\/])worker-cli\.(?:js|ts)$/.test(entry)) {
22
- void runWorkerCli().catch((error) => {
23
- const message = error instanceof Error ? error.message : String(error);
24
- console.error(message);
25
- process.exitCode = 1;
26
- });
27
- }
2
+ import{Command as a}from"commander";import n from"node:path";import{createStartCommand as m}from"./commands/start.js";import{createWorkerAuthCommand as t}from"./commands/worker-auth.js";import{createWorkerProjectCommand as s}from"./commands/worker-project.js";import{DEFAULT_ACA_SERVER_URL as c}from"./core/aca-config.js";process.env.ACA_DEFAULT_SERVER_URL||=c;async function i(r=process.argv){const o=new a;o.name("aica").description("AICA remote Agent worker").version("0.1.2").enablePositionalOptions(),o.addCommand(m()),o.addCommand(t()),o.addCommand(s()),await o.parseAsync(r)}const d=process.argv[1]||"",e=n.basename(d).replace(/\.(?:js|ts|cjs|mjs)$/i,"");(e==="worker-cli"||e==="aica"||e==="aca")&&i().catch(r=>{const o=r instanceof Error?r.message:String(r);console.error(o),process.exitCode=1});export{i as runWorkerCli};
@@ -1,17 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import { runCodexAcpAdapter } from "./acp/providers/codex-acp/adapter.js";
3
- import { runWorkerCli } from "./worker-cli.js";
4
- // 打包成 SEA 后 import.meta.url 不再对应源码文件;让 Codex ACP 启动器直接复用当前可执行文件。
5
- process.env.ACA_SINGLE_FILE_WORKER = "1";
6
- async function main() {
7
- if (process.argv.includes("--internal-acp-adapter")) {
8
- runCodexAcpAdapter();
9
- return;
10
- }
11
- await runWorkerCli();
12
- }
13
- void main().catch((error) => {
14
- const message = error instanceof Error ? error.message : String(error);
15
- console.error(message);
16
- process.exitCode = 1;
17
- });
2
+ import{runCodexAcpAdapter as r}from"./acp/providers/codex-acp/adapter.js";import{runWorkerCli as o}from"./worker-cli.js";process.env.ACA_SINGLE_FILE_WORKER="1";async function s(){if(process.argv.includes("--internal-acp-adapter")){r();return}await o()}s().catch(e=>{const n=e instanceof Error?e.message:String(e);console.error(n),process.exitCode=1});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuandc/aica",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "AICA remote Agent worker",
5
5
  "author": "yuandc",
6
6
  "type": "module",