adde-acp 0.1.3

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 (136) hide show
  1. package/LICENSE +21 -0
  2. package/README.ko.md +88 -0
  3. package/README.md +88 -0
  4. package/dist/backend/acp/client.d.ts +149 -0
  5. package/dist/backend/acp/client.js +538 -0
  6. package/dist/backend/acp/client.js.map +1 -0
  7. package/dist/backend/acp/index.d.ts +8 -0
  8. package/dist/backend/acp/index.js +7 -0
  9. package/dist/backend/acp/index.js.map +1 -0
  10. package/dist/backend/acp/lifecycle.d.ts +15 -0
  11. package/dist/backend/acp/lifecycle.js +56 -0
  12. package/dist/backend/acp/lifecycle.js.map +1 -0
  13. package/dist/backend/acp/perm-diff.d.ts +37 -0
  14. package/dist/backend/acp/perm-diff.js +58 -0
  15. package/dist/backend/acp/perm-diff.js.map +1 -0
  16. package/dist/backend/acp/spawn.d.ts +20 -0
  17. package/dist/backend/acp/spawn.js +70 -0
  18. package/dist/backend/acp/spawn.js.map +1 -0
  19. package/dist/cli/adde.d.ts +2 -0
  20. package/dist/cli/adde.js +11 -0
  21. package/dist/cli/adde.js.map +1 -0
  22. package/dist/cli/alias.d.ts +45 -0
  23. package/dist/cli/alias.js +94 -0
  24. package/dist/cli/alias.js.map +1 -0
  25. package/dist/cli/completion.d.ts +4 -0
  26. package/dist/cli/completion.js +209 -0
  27. package/dist/cli/completion.js.map +1 -0
  28. package/dist/cli/init.d.ts +3 -0
  29. package/dist/cli/init.js +114 -0
  30. package/dist/cli/init.js.map +1 -0
  31. package/dist/cli/lane.d.ts +20 -0
  32. package/dist/cli/lane.js +350 -0
  33. package/dist/cli/lane.js.map +1 -0
  34. package/dist/cli/ops.d.ts +5 -0
  35. package/dist/cli/ops.js +230 -0
  36. package/dist/cli/ops.js.map +1 -0
  37. package/dist/cli/prompt.d.ts +15 -0
  38. package/dist/cli/prompt.js +41 -0
  39. package/dist/cli/prompt.js.map +1 -0
  40. package/dist/cli/run.d.ts +5 -0
  41. package/dist/cli/run.js +216 -0
  42. package/dist/cli/run.js.map +1 -0
  43. package/dist/cli/spec.d.ts +48 -0
  44. package/dist/cli/spec.js +98 -0
  45. package/dist/cli/spec.js.map +1 -0
  46. package/dist/core/diagnostics.d.ts +73 -0
  47. package/dist/core/diagnostics.js +333 -0
  48. package/dist/core/diagnostics.js.map +1 -0
  49. package/dist/core/index.d.ts +11 -0
  50. package/dist/core/index.js +9 -0
  51. package/dist/core/index.js.map +1 -0
  52. package/dist/core/injector.d.ts +27 -0
  53. package/dist/core/injector.js +297 -0
  54. package/dist/core/injector.js.map +1 -0
  55. package/dist/core/lane-config.d.ts +80 -0
  56. package/dist/core/lane-config.js +303 -0
  57. package/dist/core/lane-config.js.map +1 -0
  58. package/dist/core/launchd.d.ts +81 -0
  59. package/dist/core/launchd.js +216 -0
  60. package/dist/core/launchd.js.map +1 -0
  61. package/dist/core/messages.d.ts +31 -0
  62. package/dist/core/messages.js +71 -0
  63. package/dist/core/messages.js.map +1 -0
  64. package/dist/core/queue.d.ts +74 -0
  65. package/dist/core/queue.js +227 -0
  66. package/dist/core/queue.js.map +1 -0
  67. package/dist/core/runtime-state.d.ts +52 -0
  68. package/dist/core/runtime-state.js +90 -0
  69. package/dist/core/runtime-state.js.map +1 -0
  70. package/dist/core/session-ledger.d.ts +25 -0
  71. package/dist/core/session-ledger.js +89 -0
  72. package/dist/core/session-ledger.js.map +1 -0
  73. package/dist/core/supervisor.d.ts +41 -0
  74. package/dist/core/supervisor.js +315 -0
  75. package/dist/core/supervisor.js.map +1 -0
  76. package/dist/core/transcript.d.ts +22 -0
  77. package/dist/core/transcript.js +93 -0
  78. package/dist/core/transcript.js.map +1 -0
  79. package/dist/core/update-check.d.ts +25 -0
  80. package/dist/core/update-check.js +142 -0
  81. package/dist/core/update-check.js.map +1 -0
  82. package/dist/core/version.d.ts +7 -0
  83. package/dist/core/version.js +32 -0
  84. package/dist/core/version.js.map +1 -0
  85. package/dist/gate/gate.d.ts +41 -0
  86. package/dist/gate/gate.js +28 -0
  87. package/dist/gate/gate.js.map +1 -0
  88. package/dist/gate/index.d.ts +6 -0
  89. package/dist/gate/index.js +6 -0
  90. package/dist/gate/index.js.map +1 -0
  91. package/dist/shared/conf.d.ts +54 -0
  92. package/dist/shared/conf.js +85 -0
  93. package/dist/shared/conf.js.map +1 -0
  94. package/dist/shared/deny-match.d.ts +19 -0
  95. package/dist/shared/deny-match.js +122 -0
  96. package/dist/shared/deny-match.js.map +1 -0
  97. package/dist/shared/envelope.d.ts +37 -0
  98. package/dist/shared/envelope.js +91 -0
  99. package/dist/shared/envelope.js.map +1 -0
  100. package/dist/shared/errors.d.ts +8 -0
  101. package/dist/shared/errors.js +23 -0
  102. package/dist/shared/errors.js.map +1 -0
  103. package/dist/shared/fs-atomic.d.ts +17 -0
  104. package/dist/shared/fs-atomic.js +31 -0
  105. package/dist/shared/fs-atomic.js.map +1 -0
  106. package/dist/shared/i18n.d.ts +23 -0
  107. package/dist/shared/i18n.js +53 -0
  108. package/dist/shared/i18n.js.map +1 -0
  109. package/dist/shared/locales/en.d.ts +393 -0
  110. package/dist/shared/locales/en.js +447 -0
  111. package/dist/shared/locales/en.js.map +1 -0
  112. package/dist/shared/locales/ko.d.ts +389 -0
  113. package/dist/shared/locales/ko.js +443 -0
  114. package/dist/shared/locales/ko.js.map +1 -0
  115. package/dist/shared/mask.d.ts +6 -0
  116. package/dist/shared/mask.js +28 -0
  117. package/dist/shared/mask.js.map +1 -0
  118. package/dist/shared/notify.d.ts +15 -0
  119. package/dist/shared/notify.js +20 -0
  120. package/dist/shared/notify.js.map +1 -0
  121. package/dist/shared/paths.d.ts +42 -0
  122. package/dist/shared/paths.js +83 -0
  123. package/dist/shared/paths.js.map +1 -0
  124. package/dist/src-adapters/index.d.ts +8 -0
  125. package/dist/src-adapters/index.js +6 -0
  126. package/dist/src-adapters/index.js.map +1 -0
  127. package/dist/src-adapters/markdown.d.ts +80 -0
  128. package/dist/src-adapters/markdown.js +794 -0
  129. package/dist/src-adapters/markdown.js.map +1 -0
  130. package/dist/src-adapters/source.d.ts +33 -0
  131. package/dist/src-adapters/source.js +3 -0
  132. package/dist/src-adapters/source.js.map +1 -0
  133. package/dist/src-adapters/telegram.d.ts +48 -0
  134. package/dist/src-adapters/telegram.js +412 -0
  135. package/dist/src-adapters/telegram.js.map +1 -0
  136. package/package.json +62 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * CLI 명령·플래그 스펙(SSOT) — 셸 자동완성·서브커맨드 도움말·미지원 명령 힌트가 공유한다.
3
+ * 명령/플래그를 한 곳에서 선언해 자동완성·힌트가 함께 갱신되도록(확장성): 새 명령·플래그는
4
+ * 여기에 추가하면 completion·help·"did you mean" 힌트에 자동 반영된다. 문구 본문(설명)은
5
+ * i18n 카탈로그가 소유하고, 본 스펙은 이름·인자 형태·플래그 목록(구조)만 담는다.
6
+ */
7
+ /** 값이 열거형인 플래그 — 자동완성이 플래그 뒤에서 이 값들을 완성한다. */
8
+ export const FLAG_VALUES = {
9
+ "--source": ["telegram", "markdown"],
10
+ "--perm-tier": ["acp", "autopass"],
11
+ "--file-mode": ["private", "shared"],
12
+ "--lang": ["en", "ko"],
13
+ };
14
+ /** 디렉터리 경로를 받는 플래그 — 자동완성이 뒤에서 디렉터리를 완성한다. */
15
+ export const DIR_FLAGS = ["--cwd", "--root"];
16
+ /** 전역 옵션(모든 명령 위치에서 완성 후보). */
17
+ export const GLOBAL_FLAGS = ["-h", "--help", "-v", "--version"];
18
+ /** `lane add` 옵션 플래그(SSOT — lane.ts ADD_VALUE_KEYS 의 표면형 `--key`). */
19
+ export const LANE_ADD_FLAGS = [
20
+ "--source",
21
+ "--engine",
22
+ "--backend",
23
+ "--channel",
24
+ "--perm-tier",
25
+ "--acp-version",
26
+ "--cwd",
27
+ "--allowlist",
28
+ "--denylist",
29
+ "--hard-deny",
30
+ "--safe-defaults",
31
+ "--lang",
32
+ "--chat-id",
33
+ "--allow-from",
34
+ "--file-mode",
35
+ "--token-stdin",
36
+ "--root",
37
+ "--inbox",
38
+ "--approvals",
39
+ "--outbox",
40
+ "--force",
41
+ "--interactive",
42
+ "--no-interactive",
43
+ ];
44
+ /** lane 하위 명령(정식 이름 — list/remove 별칭은 자동완성 미노출, 디스패치만 허용). */
45
+ export const LANE_SUBS = ["add", "ls", "show", "rm", "help"];
46
+ /** 최상위 명령 SSOT. hidden 명령은 도움말·자동완성에서 제외. */
47
+ export const COMMAND_SPECS = [
48
+ { name: "init", args: "[<proj>]", flags: [], positional: ["proj"], desc: "guided setup", usageKey: "usage.init" }, // prettier-ignore
49
+ { name: "up", args: "<proj>", flags: [], positional: ["proj"], desc: "start lanes (daemon)", usageKey: "usage.up" }, // prettier-ignore
50
+ { name: "down", args: "<proj>", flags: [], positional: ["proj"], desc: "stop the daemon", usageKey: "usage.down" }, // prettier-ignore
51
+ { name: "restart", args: "<proj>", flags: [], positional: ["proj"], desc: "restart the daemon", usageKey: "usage.restart" }, // prettier-ignore
52
+ { name: "status", args: "[<proj>]", flags: ["--all", "--json"], positional: ["proj"], desc: "lane status", usageKey: "usage.status" }, // prettier-ignore
53
+ { name: "doctor", args: "[<proj>]", flags: [], positional: ["proj"], desc: "environment checks", usageKey: "usage.doctor" }, // prettier-ignore
54
+ { name: "logs", args: "<proj> <lane> [N]", flags: ["--engine"], positional: ["proj", "lane"], desc: "lane logs", usageKey: "usage.logs" }, // prettier-ignore
55
+ { name: "sessions", args: "<proj> <lane>", flags: [], positional: ["proj", "lane"], desc: "engine sessions", usageKey: "usage.sessions" }, // prettier-ignore
56
+ { name: "lane", args: "<add|ls|show|rm>", flags: [], subs: LANE_SUBS, desc: "manage lane configs", usageKey: "usage.lane" }, // prettier-ignore
57
+ { name: "completion", args: "<bash|zsh>", flags: [], desc: "shell completion", usageKey: "usage.completion" }, // prettier-ignore
58
+ { name: "alias", args: "[names...]", flags: [], desc: "install short aliases", usageKey: "usage.alias" }, // prettier-ignore
59
+ { name: "__daemon", args: "<proj>", flags: [], usageKey: "usage.daemon", hidden: true },
60
+ ];
61
+ /** 도움말·자동완성에 노출할 명령(hidden 제외). */
62
+ export function visibleCommands() {
63
+ return COMMAND_SPECS.filter((c) => !c.hidden);
64
+ }
65
+ /** 이름으로 명령 스펙 조회(디스패치 힌트·help 라우팅). */
66
+ export function findCommand(name) {
67
+ return COMMAND_SPECS.find((c) => c.name === name);
68
+ }
69
+ /**
70
+ * 오타 추정 — 후보 중 대상과 편집거리가 가장 가까운 이름들(임계 이하)을 반환.
71
+ * 미지원 명령 힌트("did you mean")용. 완전 일치는 호출 전 이미 걸러진 상태를 가정.
72
+ */
73
+ export function suggestCommands(input, max = 2) {
74
+ const names = visibleCommands().map((c) => c.name);
75
+ const scored = names
76
+ .map((name) => ({ name, d: editDistance(input, name) }))
77
+ // 짧은 명령의 오타를 잡되 무관한 제안 남발 방지 — 거리 ≤ max(2, len/2).
78
+ .filter(({ name, d }) => d <= Math.max(2, Math.floor(name.length / 2)))
79
+ .sort((a, b) => a.d - b.d);
80
+ return scored.slice(0, max).map((s) => s.name);
81
+ }
82
+ /** Levenshtein 편집거리(오타 제안용, 소규모 문자열 전용). */
83
+ function editDistance(a, b) {
84
+ const m = a.length;
85
+ const n = b.length;
86
+ const dp = Array.from({ length: n + 1 }, (_, j) => j);
87
+ for (let i = 1; i <= m; i++) {
88
+ let prev = dp[0];
89
+ dp[0] = i;
90
+ for (let j = 1; j <= n; j++) {
91
+ const tmp = dp[j];
92
+ dp[j] = a[i - 1] === b[j - 1] ? prev : 1 + Math.min(prev, dp[j], dp[j - 1]);
93
+ prev = tmp;
94
+ }
95
+ }
96
+ return dp[n];
97
+ }
98
+ //# sourceMappingURL=spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/cli/spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { Liveness } from "./runtime-state.js";
2
+ import type { LaunchctlExec } from "./launchd.js";
3
+ export interface DiagBaseOptions {
4
+ /** 설정 base 경로(테스트 override). 미지정 시 $ADDE_HOME 또는 ~/.config/adde. */
5
+ base?: string;
6
+ /**
7
+ * launchctl 실행자 주입(테스트용 fake). 미주입 시 실 launchctl 호출.
8
+ * doctor daemon 점검이 CI에서 실 launchctl 을 때리지 않도록 주입 가능 구조로.
9
+ */
10
+ launchctlExec?: LaunchctlExec;
11
+ }
12
+ /** 레인 1개의 상태 행. */
13
+ export interface LaneStatusRow {
14
+ lane: string;
15
+ status: Liveness;
16
+ pid: number | null;
17
+ sessionId: string | null;
18
+ source: string | null;
19
+ backend: string | null;
20
+ engine: string | null;
21
+ startedAt: string | null;
22
+ /** running 일 때 startedAt 기준 경과 ms(그 외 null). */
23
+ uptimeMs: number | null;
24
+ /** 마지막 하트비트 시각(runtime.json mtime) ISO. 파일 없거나 stat 실패 시 null. */
25
+ lastSeenAt: string | null;
26
+ }
27
+ /**
28
+ * proj 의 lanes.d 를 스캔해 각 레인의 라이브니스를 수집한다.
29
+ * running(파일 있고 pid 생존)·dead(파일 있으나 pid 없음=크래시)·stopped(파일 없음).
30
+ */
31
+ export declare function collectStatus(proj: string, opts?: DiagBaseOptions): Promise<LaneStatusRow[]>;
32
+ /** 집계 status 행 — 레인 상태에 소속 프로젝트를 부기(다중 프로젝트 뷰). */
33
+ export type AggregatedLaneStatusRow = LaneStatusRow & {
34
+ proj: string;
35
+ };
36
+ /**
37
+ * base 하위에서 lanes.d 를 가진 프로젝트 디렉터리를 열거한다(정렬).
38
+ * 안전 세그먼트(경로 위생) 통과분만 — 비안전 이름은 조용히 제외(열거는 진단성 조회라 흡수).
39
+ * base 부재 시 빈 배열.
40
+ */
41
+ export declare function listRegisteredProjects(opts?: DiagBaseOptions): Promise<string[]>;
42
+ /**
43
+ * 전 프로젝트의 레인 상태를 집계한다(각 행에 proj 부기).
44
+ * 인자 없는 `adde status` 의 다중 프로젝트 뷰용. 실행 중/전체 필터는 표면 계층(cli/ops)이 결정한다.
45
+ */
46
+ export declare function collectAllStatus(opts?: DiagBaseOptions): Promise<AggregatedLaneStatusRow[]>;
47
+ export type CheckLevel = "PASS" | "WARN" | "FAIL";
48
+ export interface DoctorCheck {
49
+ name: string;
50
+ level: CheckLevel;
51
+ detail: string;
52
+ /** 실패·경고 시 조치 힌트(액션형). PASS 에는 없음. */
53
+ hint?: string;
54
+ }
55
+ /**
56
+ * 상태 비의존 정적 점검. proj 미지정 시 전역 점검만, 지정 시 레인별 점검 추가.
57
+ * 각 항목 PASS/WARN/FAIL + 실패·경고에 조치 힌트.
58
+ */
59
+ export declare function runDoctor(proj?: string, opts?: DiagBaseOptions): Promise<DoctorCheck[]>;
60
+ export interface LogsResult {
61
+ /** 읽은 로그 파일 경로. */
62
+ path: string;
63
+ /** 파일이 존재했는가. false 면 lines 는 빈 배열. */
64
+ exists: boolean;
65
+ /** 최근 N줄(파일 끝 기준). */
66
+ lines: string[];
67
+ }
68
+ export interface ReadLogsOptions extends DiagBaseOptions {
69
+ /** true 면 transcript.log 대신 engine.log(엔진 stderr 캡처)를 읽는다. */
70
+ engine?: boolean;
71
+ }
72
+ /** 레인 로그(transcript.log 기본, engine 옵션 시 engine.log)의 최근 n줄을 반환한다. 파일 없으면 exists=false. */
73
+ export declare function readLogs(proj: string, lane: string, n?: number, opts?: ReadLogsOptions): Promise<LogsResult>;
@@ -0,0 +1,333 @@
1
+ /**
2
+ * 운영 가시성 — status / doctor / logs 의 코어 로직(읽기 전용, 부수효과 없음).
3
+ * CLI 계층(cli/ops.ts)이 결과를 표/JSON/텍스트로 표면화한다.
4
+ */
5
+ import { t } from "../shared/i18n.js";
6
+ import { readFile, stat, readdir } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ import { laneList, resolveFileMode } from "./lane-config.js";
9
+ import { resolveAdapterBin } from "./supervisor.js";
10
+ import { readRuntime, livenessOf } from "./runtime-state.js";
11
+ import { lanePaths, defaultBase, expandTilde, isSafeSegment } from "../shared/paths.js";
12
+ import { parseLaneConf } from "../shared/conf.js";
13
+ import { daemonRegState, daemonEntryPath } from "./launchd.js";
14
+ /**
15
+ * proj 의 lanes.d 를 스캔해 각 레인의 라이브니스를 수집한다.
16
+ * running(파일 있고 pid 생존)·dead(파일 있으나 pid 없음=크래시)·stopped(파일 없음).
17
+ */
18
+ export async function collectStatus(proj, opts = {}) {
19
+ const base = opts.base ?? defaultBase();
20
+ const { lanes } = await laneList(proj, { base });
21
+ const rows = [];
22
+ for (const lane of lanes) {
23
+ const paths = lanePaths(base, proj, lane);
24
+ const info = await readRuntime(paths);
25
+ // 하트비트 신선도 — runtime.json mtime 을 stat. 실패(부재 등)면 미주입(pid-only 판정).
26
+ let mtimeMs;
27
+ if (info) {
28
+ try {
29
+ mtimeMs = (await stat(paths.runtimeJson)).mtimeMs;
30
+ }
31
+ catch {
32
+ mtimeMs = undefined;
33
+ }
34
+ }
35
+ const status = livenessOf(info, { mtimeMs });
36
+ rows.push({
37
+ lane,
38
+ status,
39
+ pid: info?.pid ?? null,
40
+ sessionId: info?.sessionId ?? null,
41
+ source: info?.source ?? null,
42
+ backend: info?.backend ?? null,
43
+ engine: info?.engine ?? null,
44
+ startedAt: info?.startedAt ?? null,
45
+ uptimeMs: status === "running" && info?.startedAt
46
+ ? Math.max(0, Date.now() - Date.parse(info.startedAt))
47
+ : null,
48
+ lastSeenAt: mtimeMs !== undefined ? new Date(mtimeMs).toISOString() : null,
49
+ });
50
+ }
51
+ return rows;
52
+ }
53
+ /**
54
+ * base 하위에서 lanes.d 를 가진 프로젝트 디렉터리를 열거한다(정렬).
55
+ * 안전 세그먼트(경로 위생) 통과분만 — 비안전 이름은 조용히 제외(열거는 진단성 조회라 흡수).
56
+ * base 부재 시 빈 배열.
57
+ */
58
+ export async function listRegisteredProjects(opts = {}) {
59
+ const base = opts.base ?? defaultBase();
60
+ let names;
61
+ try {
62
+ const entries = await readdir(base, { withFileTypes: true });
63
+ names = entries.filter((e) => e.isDirectory() && isSafeSegment(e.name)).map((e) => e.name);
64
+ }
65
+ catch {
66
+ return [];
67
+ }
68
+ const projs = [];
69
+ for (const name of names) {
70
+ // lanes.d 를 가진 디렉터리만 프로젝트로 간주(state·queue 등 부속 디렉터리 제외).
71
+ if (await pathExists(join(base, name, "lanes.d")))
72
+ projs.push(name);
73
+ }
74
+ return projs.sort();
75
+ }
76
+ /**
77
+ * 전 프로젝트의 레인 상태를 집계한다(각 행에 proj 부기).
78
+ * 인자 없는 `adde status` 의 다중 프로젝트 뷰용. 실행 중/전체 필터는 표면 계층(cli/ops)이 결정한다.
79
+ */
80
+ export async function collectAllStatus(opts = {}) {
81
+ const base = opts.base ?? defaultBase();
82
+ const projs = await listRegisteredProjects({ ...opts, base });
83
+ const rows = [];
84
+ for (const proj of projs) {
85
+ const projRows = await collectStatus(proj, { ...opts, base });
86
+ for (const r of projRows)
87
+ rows.push({ ...r, proj });
88
+ }
89
+ return rows;
90
+ }
91
+ async function pathExists(p) {
92
+ try {
93
+ await stat(p);
94
+ return true;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ /** 파일/디렉터리 권한 비트(mode & 0o777). 부재·stat 실패 시 null. */
101
+ async function modeOf(p) {
102
+ try {
103
+ return (await stat(p)).mode & 0o777;
104
+ }
105
+ catch {
106
+ return null;
107
+ }
108
+ }
109
+ /** 권한 비트 → 3자리 8진 문자열(예: 0o640 → "640"). */
110
+ function octal(mode) {
111
+ return (mode & 0o777).toString(8).padStart(3, "0");
112
+ }
113
+ /**
114
+ * 상태 비의존 정적 점검. proj 미지정 시 전역 점검만, 지정 시 레인별 점검 추가.
115
+ * 각 항목 PASS/WARN/FAIL + 실패·경고에 조치 힌트.
116
+ */
117
+ export async function runDoctor(proj, opts = {}) {
118
+ const checks = [];
119
+ const base = opts.base ?? defaultBase();
120
+ // Node 버전 ≥ 22
121
+ const nodeMajor = Number(process.versions.node.split(".")[0]);
122
+ checks.push(nodeMajor >= 22
123
+ ? { name: t("doctor.node.name"), level: "PASS", detail: `v${process.versions.node} (≥22)` }
124
+ : {
125
+ name: t("doctor.node.name"),
126
+ level: "FAIL",
127
+ detail: `v${process.versions.node} (<22)`,
128
+ hint: t("doctor.node.hint"),
129
+ });
130
+ // 어댑터 바이너리 해석
131
+ const adapterBin = resolveAdapterBin();
132
+ checks.push((await pathExists(adapterBin))
133
+ ? { name: t("doctor.adapter.name"), level: "PASS", detail: adapterBin }
134
+ : {
135
+ name: t("doctor.adapter.name"),
136
+ level: "FAIL",
137
+ detail: t("doctor.adapter.missing", { path: adapterBin }),
138
+ hint: t("doctor.adapter.hint"),
139
+ });
140
+ // base 디렉터리 가독
141
+ checks.push((await pathExists(base))
142
+ ? { name: t("doctor.base.name"), level: "PASS", detail: base }
143
+ : {
144
+ name: t("doctor.base.name"),
145
+ level: "WARN",
146
+ detail: t("doctor.missingPath", { path: base }),
147
+ hint: t("doctor.base.hint"),
148
+ });
149
+ // 데몬 진입 파일 — launchd 워커가 실행할 실재 .js. tsx dev(빌드 전)면 부재라 데몬 기동 불가.
150
+ // 데몬은 macOS 전용(비-darwin 은 loadDaemon 이 assertMacOS 로 거부)이므로 darwin 에서만 점검.
151
+ if (process.platform === "darwin") {
152
+ const daemonEntry = daemonEntryPath();
153
+ checks.push((await pathExists(daemonEntry))
154
+ ? { name: t("doctor.daemonEntry.name"), level: "PASS", detail: daemonEntry }
155
+ : {
156
+ name: t("doctor.daemonEntry.name"),
157
+ level: "WARN",
158
+ detail: t("doctor.daemonEntry.missing", { path: daemonEntry }),
159
+ hint: t("doctor.daemonEntry.hint"),
160
+ });
161
+ }
162
+ if (proj === undefined)
163
+ return checks;
164
+ // daemon 등록 상태 점검 (macOS 전용 — 비-darwin 은 항목 스킵).
165
+ if (process.platform === "darwin") {
166
+ try {
167
+ const launchdDeps = opts.launchctlExec ? { exec: opts.launchctlExec } : undefined;
168
+ const regState = await daemonRegState(proj, launchdDeps);
169
+ const { plistExists, launchctlRegistered } = regState;
170
+ if (plistExists && launchctlRegistered) {
171
+ // 둘 다 true — 정상 등록.
172
+ checks.push({
173
+ name: t("doctor.daemon.name", { proj }),
174
+ level: "PASS",
175
+ detail: t("doctor.daemon.registered"),
176
+ });
177
+ }
178
+ else if (!plistExists && !launchctlRegistered) {
179
+ // 둘 다 false — 데몬 미기동 상태(정상 — 기동 전 또는 down 후).
180
+ checks.push({
181
+ name: t("doctor.daemon.name", { proj }),
182
+ level: "PASS",
183
+ detail: t("doctor.daemon.notRunning", { proj }),
184
+ });
185
+ }
186
+ else {
187
+ // 불일치(plist XOR launchctl) — 복구 가능 경고.
188
+ const mismatch = plistExists
189
+ ? t("doctor.daemon.plistOnly")
190
+ : t("doctor.daemon.launchctlOnly");
191
+ checks.push({
192
+ name: t("doctor.daemon.name", { proj }),
193
+ level: "WARN",
194
+ detail: mismatch,
195
+ hint: t("doctor.daemon.mismatchHint", { proj }),
196
+ });
197
+ }
198
+ }
199
+ catch {
200
+ // daemonRegState 오류 — 정보 부재로 WARN 처리(진단이므로 throw 대신 흡수).
201
+ checks.push({
202
+ name: t("doctor.daemon.name", { proj }),
203
+ level: "WARN",
204
+ detail: t("doctor.daemon.queryFailed"),
205
+ hint: t("doctor.daemon.queryFailedHint", { proj }),
206
+ });
207
+ }
208
+ }
209
+ // 레인별 점검
210
+ const { lanes } = await laneList(proj, { base });
211
+ if (lanes.length === 0) {
212
+ checks.push({
213
+ name: t("doctor.lanes.name", { proj }),
214
+ level: "WARN",
215
+ detail: t("doctor.lanes.none"),
216
+ hint: t("doctor.lanes.addHint", { proj }),
217
+ });
218
+ return checks;
219
+ }
220
+ for (const lane of lanes) {
221
+ const paths = lanePaths(base, proj, lane);
222
+ let confText;
223
+ try {
224
+ confText = await readFile(paths.confFile, "utf8");
225
+ }
226
+ catch {
227
+ checks.push({
228
+ name: `${lane}: conf`,
229
+ level: "FAIL",
230
+ detail: t("doctor.conf.readFailed", { path: paths.confFile }),
231
+ hint: t("doctor.conf.readFailedHint"),
232
+ });
233
+ continue;
234
+ }
235
+ const conf = parseLaneConf(confText);
236
+ // source 유효성
237
+ if (conf.source === "telegram" || conf.source === "markdown") {
238
+ checks.push({ name: `${lane}: source`, level: "PASS", detail: conf.source });
239
+ }
240
+ else {
241
+ checks.push({
242
+ name: `${lane}: source`,
243
+ level: "FAIL",
244
+ detail: t("doctor.source.unsupported", { source: conf.source }),
245
+ hint: t("doctor.source.hint"),
246
+ });
247
+ }
248
+ // cwd 존재(지정된 경우)
249
+ if (conf.cwd) {
250
+ const cwd = expandTilde(conf.cwd);
251
+ checks.push((await pathExists(cwd))
252
+ ? { name: `${lane}: cwd`, level: "PASS", detail: cwd }
253
+ : {
254
+ name: `${lane}: cwd`,
255
+ level: "FAIL",
256
+ detail: t("doctor.missingPath", { path: cwd }),
257
+ hint: t("doctor.cwd.hint"),
258
+ });
259
+ }
260
+ // 토큰(telegram 한정)
261
+ if (conf.source === "telegram") {
262
+ let hasToken = false;
263
+ try {
264
+ hasToken = (await readFile(paths.envFile, "utf8")).includes("TELEGRAM_BOT_TOKEN=");
265
+ }
266
+ catch {
267
+ // env 파일 부재/읽기 실패 = 토큰 없음(초기값 유지)
268
+ }
269
+ checks.push(hasToken
270
+ ? {
271
+ name: t("doctor.token.name", { lane }),
272
+ level: "PASS",
273
+ detail: t("doctor.token.present"),
274
+ }
275
+ : {
276
+ name: t("doctor.token.name", { lane }),
277
+ level: "FAIL",
278
+ detail: t("doctor.token.missing", { path: paths.envFile }),
279
+ hint: t("doctor.token.hint", { path: paths.envFile }),
280
+ });
281
+ }
282
+ // 파일 권한 감사 — 시크릿(.env)·private 모드 상태 디렉터리가 그룹/기타에 노출됐는지.
283
+ // .env 는 토큰을 담으므로 모드와 무관하게 그룹/기타 접근을 경고한다. state 디렉터리는
284
+ // file_mode=private 일 때만 0700 을 기대(shared 는 느슨한 권한이 의도된 선택이라 통과).
285
+ const envMode = await modeOf(paths.envFile);
286
+ const stateMode = await modeOf(paths.stateDir);
287
+ const looseEnv = envMode !== null && (envMode & 0o077) !== 0;
288
+ const looseState = stateMode !== null &&
289
+ resolveFileMode(conf.file_mode) === "private" &&
290
+ (stateMode & 0o077) !== 0;
291
+ // env·state 는 독립 관심사 — 둘 다 느슨하면 둘 다 경고한다(하나가 다른 하나를 가리지 않도록).
292
+ if (looseEnv) {
293
+ checks.push({
294
+ name: t("doctor.perms.name", { lane }),
295
+ level: "WARN",
296
+ detail: t("doctor.perms.envLoose", { mode: octal(envMode) }),
297
+ hint: t("doctor.perms.envHint", { path: paths.envFile }),
298
+ });
299
+ }
300
+ if (looseState) {
301
+ checks.push({
302
+ name: t("doctor.perms.name", { lane }),
303
+ level: "WARN",
304
+ detail: t("doctor.perms.stateLoose", { mode: octal(stateMode) }),
305
+ hint: t("doctor.perms.stateHint", { path: paths.stateDir, proj }),
306
+ });
307
+ }
308
+ if (!looseEnv && !looseState && (envMode !== null || stateMode !== null)) {
309
+ checks.push({
310
+ name: t("doctor.perms.name", { lane }),
311
+ level: "PASS",
312
+ detail: t("doctor.perms.ok"),
313
+ });
314
+ }
315
+ }
316
+ return checks;
317
+ }
318
+ /** 레인 로그(transcript.log 기본, engine 옵션 시 engine.log)의 최근 n줄을 반환한다. 파일 없으면 exists=false. */
319
+ export async function readLogs(proj, lane, n = 50, opts = {}) {
320
+ const base = opts.base ?? defaultBase();
321
+ const paths = lanePaths(base, proj, lane);
322
+ const target = opts.engine ? paths.engineLog : paths.transcriptLog;
323
+ let text;
324
+ try {
325
+ text = await readFile(target, "utf8");
326
+ }
327
+ catch {
328
+ return { path: target, exists: false, lines: [] };
329
+ }
330
+ const all = text.split("\n").filter((l) => l.length > 0);
331
+ return { path: target, exists: true, lines: all.slice(-Math.max(1, n)) };
332
+ }
333
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/core/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * 코어 — 슈퍼바이저·레인 lifecycle·큐·직렬 인젝터·transcript logger·헬스.
3
+ */
4
+ export { readVersion } from "./version.js";
5
+ export { supervisorUp, supervisorDown } from "./supervisor.js";
6
+ export type { LaneStatus, SupervisorUpResult, SupervisorDownResult, AcpFactory, SupervisorUpOptions, SupervisorDownOptions, } from "./supervisor.js";
7
+ export { enqueue, claimNext, scanProcessing, isDone, writeOut } from "./queue.js";
8
+ export type { OutSidecar } from "./queue.js";
9
+ export { createInjector } from "./injector.js";
10
+ export { appendTranscript, renderEvent } from "./transcript.js";
11
+ export type { SessionEvent } from "./transcript.js";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 코어 — 슈퍼바이저·레인 lifecycle·큐·직렬 인젝터·transcript logger·헬스.
3
+ */
4
+ export { readVersion } from "./version.js";
5
+ export { supervisorUp, supervisorDown } from "./supervisor.js";
6
+ export { enqueue, claimNext, scanProcessing, isDone, writeOut } from "./queue.js";
7
+ export { createInjector } from "./injector.js";
8
+ export { appendTranscript, renderEvent } from "./transcript.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAS/D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import type { NotifyT } from "../shared/notify.js";
2
+ import { writeOut } from "./queue.js";
3
+ import type { LanePaths } from "../shared/paths.js";
4
+ import type { AcpBackend } from "../backend/acp/client.js";
5
+ import type { SessionEvent } from "./transcript.js";
6
+ export type InjectorState = "idle" | "active";
7
+ /** 처리 결과를 채널로 렌더하는 in-process 콜백(소스 renderOut 주입). 실패는 흡수(durable out/ 유지). */
8
+ export type RenderCallback = (id: string) => Promise<void>;
9
+ /**
10
+ * 주입 실패를 채널로 표면화하는 콜백(supervisor 가 Source.notify 로 배선).
11
+ * 보조 신호 — 알림 실패는 로그 후 흡수하고 .failed 사이드카·재처리 경로는 그대로 유지.
12
+ */
13
+ export type FailNotifyCallback = (id: string, detail: string) => Promise<void>;
14
+ export interface Injector {
15
+ start(): Promise<void>;
16
+ /** enqueue 등 외부 신호로 idle 레인을 깨워 다음 메시지를 처리한다(in-process, watch 불요). */
17
+ notify(): void;
18
+ /** backend 세션 이벤트 수신 — active turn 의 agent_message_chunk 텍스트를 누적. */
19
+ onSessionEvent(event: SessionEvent): void;
20
+ getState(): InjectorState;
21
+ }
22
+ /** 질문 발췌(첫 줄 80자, 마스킹) — 채널 렌더 헤더의 맥락 표시용 보조 정보. */
23
+ export declare function questionExcerpt(text: string): string;
24
+ export declare function createInjector(paths: LanePaths, lane: string, backend: AcpBackend, render?: RenderCallback, onFail?: FailNotifyCallback,
25
+ /** 제어 결과 등 채널 대면 문구의 로케일(레인 lang). 미지정 시 전역 t. */
26
+ laneT?: NotifyT): Injector;
27
+ export { writeOut };