agentsx 0.1.0

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 (86) hide show
  1. package/AGENTS.md +49 -0
  2. package/AGENT_PATHS.md +55 -0
  3. package/README.md +32 -0
  4. package/REQUIREMENTS.md +133 -0
  5. package/dist/agents/claude.d.ts +2 -0
  6. package/dist/agents/claude.js +120 -0
  7. package/dist/agents/claude.js.map +1 -0
  8. package/dist/agents/codex.d.ts +2 -0
  9. package/dist/agents/codex.js +68 -0
  10. package/dist/agents/codex.js.map +1 -0
  11. package/dist/agents/copilot.d.ts +2 -0
  12. package/dist/agents/copilot.js +85 -0
  13. package/dist/agents/copilot.js.map +1 -0
  14. package/dist/agents/cursor.d.ts +2 -0
  15. package/dist/agents/cursor.js +84 -0
  16. package/dist/agents/cursor.js.map +1 -0
  17. package/dist/agents/opencode.d.ts +2 -0
  18. package/dist/agents/opencode.js +90 -0
  19. package/dist/agents/opencode.js.map +1 -0
  20. package/dist/agents/registry.d.ts +4 -0
  21. package/dist/agents/registry.js +35 -0
  22. package/dist/agents/registry.js.map +1 -0
  23. package/dist/commands/init.d.ts +1 -0
  24. package/dist/commands/init.js +15 -0
  25. package/dist/commands/init.js.map +1 -0
  26. package/dist/commands/pull.d.ts +2 -0
  27. package/dist/commands/pull.js +5 -0
  28. package/dist/commands/pull.js.map +1 -0
  29. package/dist/commands/push.d.ts +2 -0
  30. package/dist/commands/push.js +5 -0
  31. package/dist/commands/push.js.map +1 -0
  32. package/dist/commands/sync.d.ts +2 -0
  33. package/dist/commands/sync.js +5 -0
  34. package/dist/commands/sync.js.map +1 -0
  35. package/dist/commands/targets.d.ts +1 -0
  36. package/dist/commands/targets.js +17 -0
  37. package/dist/commands/targets.js.map +1 -0
  38. package/dist/core/git.d.ts +6 -0
  39. package/dist/core/git.js +45 -0
  40. package/dist/core/git.js.map +1 -0
  41. package/dist/core/layout.d.ts +3 -0
  42. package/dist/core/layout.js +9 -0
  43. package/dist/core/layout.js.map +1 -0
  44. package/dist/core/planner.d.ts +3 -0
  45. package/dist/core/planner.js +173 -0
  46. package/dist/core/planner.js.map +1 -0
  47. package/dist/core/remote.d.ts +9 -0
  48. package/dist/core/remote.js +28 -0
  49. package/dist/core/remote.js.map +1 -0
  50. package/dist/core/run-sync-command.d.ts +2 -0
  51. package/dist/core/run-sync-command.js +53 -0
  52. package/dist/core/run-sync-command.js.map +1 -0
  53. package/dist/core/scanner.d.ts +4 -0
  54. package/dist/core/scanner.js +58 -0
  55. package/dist/core/scanner.js.map +1 -0
  56. package/dist/core/state.d.ts +10 -0
  57. package/dist/core/state.js +64 -0
  58. package/dist/core/state.js.map +1 -0
  59. package/dist/core/sync-engine.d.ts +21 -0
  60. package/dist/core/sync-engine.js +133 -0
  61. package/dist/core/sync-engine.js.map +1 -0
  62. package/dist/core/targets.d.ts +6 -0
  63. package/dist/core/targets.js +28 -0
  64. package/dist/core/targets.js.map +1 -0
  65. package/dist/index.d.ts +2 -0
  66. package/dist/index.js +86 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/types.d.ts +79 -0
  69. package/dist/types.js +2 -0
  70. package/dist/types.js.map +1 -0
  71. package/dist/ui/prompts.d.ts +4 -0
  72. package/dist/ui/prompts.js +56 -0
  73. package/dist/ui/prompts.js.map +1 -0
  74. package/dist/utils/fs.d.ts +14 -0
  75. package/dist/utils/fs.js +63 -0
  76. package/dist/utils/fs.js.map +1 -0
  77. package/dist/utils/hash.d.ts +1 -0
  78. package/dist/utils/hash.js +7 -0
  79. package/dist/utils/hash.js.map +1 -0
  80. package/dist/utils/path.d.ts +5 -0
  81. package/dist/utils/path.js +46 -0
  82. package/dist/utils/path.js.map +1 -0
  83. package/dist/utils/shell.d.ts +7 -0
  84. package/dist/utils/shell.js +32 -0
  85. package/dist/utils/shell.js.map +1 -0
  86. package/package.json +45 -0
package/AGENTS.md ADDED
@@ -0,0 +1,49 @@
1
+ # AGENTS.md
2
+
3
+ ## 목표
4
+ 이 저장소는 서로 다른 컴퓨터 간 코딩 에이전트 설정 동기화를 위한 Node.js CLI(`agentsx`)를 구현한다.
5
+
6
+ ## 시작 전 필수
7
+ 1. `REQUIREMENTS.md`를 먼저 읽고 요구사항을 기준으로 판단한다.
8
+ 2. 요구사항과 구현이 불일치하면 코드가 아니라 요구사항을 우선 기준으로 삼는다.
9
+ 3. 모호한 지점은 임의 해석하지 말고 명시적인 주석/문서 또는 테스트로 근거를 남긴다.
10
+
11
+ ## 구현 원칙
12
+ - 확장 가능성을 최우선으로 설계한다.
13
+ - 새 에이전트 추가 시 기존 명령 로직 변경이 거의 없도록 어댑터/레지스트리 구조를 유지한다.
14
+ - 명령(`init/push/pull/sync`)은 공통 동기화 엔진을 재사용한다.
15
+ - 충돌 정책, 파일 비교, 복사 계획 생성은 순수 함수로 분리해 테스트 가능하게 만든다.
16
+
17
+ ## 코드 품질 게이트
18
+ 변경 후 아래를 모두 통과해야 한다.
19
+
20
+ 1. 타입 체크
21
+ ```bash
22
+ pnpm typecheck
23
+ ```
24
+
25
+ 2. 린트
26
+ ```bash
27
+ pnpm lint
28
+ ```
29
+
30
+ 3. 테스트
31
+ ```bash
32
+ pnpm test
33
+ ```
34
+
35
+ 필요 시 아래 통합 검증도 수행한다.
36
+ ```bash
37
+ pnpm check
38
+ ```
39
+
40
+ ## 구현/리뷰 체크리스트
41
+ - 요구사항 반영 여부 (`REQUIREMENTS.md` 기준)
42
+ - 에이전트 레지스트리 확장성(하드코딩 분기 회피)
43
+ - 충돌 처리 정책 일관성(push/pull/sync)
44
+ - 상태 파일(`~/.agentsx`) 영속성 및 재사용 동작
45
+ - 예외 상황(초기화 안 됨, 인증 실패, 권한 실패) 에러 메시지 품질
46
+
47
+ ## 문서 동기화 규칙
48
+ - 새로운 동작/옵션 추가 시 `REQUIREMENTS.md`를 먼저 갱신한다.
49
+ - 사용자-facing 동작 변경 시 README(추후 작성)와 도움말도 함께 갱신한다.
package/AGENT_PATHS.md ADDED
@@ -0,0 +1,55 @@
1
+ # Agent Paths (Online Sources)
2
+
3
+ 본 문서는 로컬 설치 여부와 무관하게, 온라인 공식 문서 기준의 기본 경로를 정리한다.
4
+
5
+ ## Codex
6
+ - `~/.codex/config.toml`
7
+ - `~/.codex/AGENTS.md`, `~/.codex/AGENTS.override.md`
8
+ - `~/.codex/rules/default.rules`
9
+ - `~/.codex/skills/*`
10
+ - 출처:
11
+ - https://developers.openai.com/codex/config-basic
12
+ - https://developers.openai.com/codex/guides/agents-md
13
+ - https://developers.openai.com/codex/rules
14
+ - https://developers.openai.com/codex/skills
15
+
16
+ ## Claude Code
17
+ - `~/.claude/settings.json`
18
+ - `~/.claude/CLAUDE.md`
19
+ - `~/.claude/skills/*`
20
+ - `~/.claude/agents/*`
21
+ - `<repo>/.claude/settings.json`, `<repo>/.mcp.json`, `<repo>/CLAUDE.md`
22
+ - 출처:
23
+ - https://docs.anthropic.com/en/docs/claude-code/settings
24
+ - https://docs.anthropic.com/en/docs/claude-code/memory
25
+ - https://docs.anthropic.com/en/docs/claude-code/slash-commands
26
+ - https://docs.anthropic.com/en/docs/claude-code/sub-agents
27
+
28
+ ## Cursor
29
+ - `~/.cursor/cli-config.json`
30
+ - `<repo>/.cursor/rules/*`, `<repo>/AGENTS.md`
31
+ - (IDE user path 참고) macOS `~/Library/Application Support/Cursor/User/*`, Linux `~/.config/Cursor/User/*`
32
+ - 출처:
33
+ - https://docs.cursor.com/en/cli/reference/configuration
34
+ - https://docs.cursor.com/en/context
35
+ - https://forum.cursor.com/t/sync-of-keybindings-and-settings/31/115
36
+
37
+ ## OpenCode
38
+ - `~/.config/opencode/opencode.json`
39
+ - `~/.config/opencode/{agents,commands,plugins,skills,tools,themes}`
40
+ - `<repo>/opencode.json`, `<repo>/.opencode/*`, `<repo>/AGENTS.md`
41
+ - 출처:
42
+ - https://opencode.ai/docs/config/
43
+ - https://opencode.ai/docs/agents/
44
+ - https://opencode.ai/docs/skills
45
+ - https://opencode.ai/docs/rules/
46
+
47
+ ## GitHub Copilot
48
+ - VS Code user settings: macOS `~/Library/Application Support/Code/User/settings.json`, Linux `~/.config/Code/User/settings.json`
49
+ - VS Code profile settings: `.../User/profiles/<id>/settings.json`
50
+ - Repo instructions: `<repo>/.github/copilot-instructions.md`, `<repo>/.github/instructions/*.instructions.md`, `<repo>/AGENTS.md`
51
+ - 출처:
52
+ - https://code.visualstudio.com/docs/configure/settings
53
+ - https://code.visualstudio.com/docs/copilot/customization/custom-instructions
54
+ - https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions
55
+ - https://code.visualstudio.com/docs/configure/settings-sync
package/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # agentsx
2
+
3
+ 여러 컴퓨터에서 코딩 에이전트 설정을 Git 저장소로 동기화하는 CLI입니다.
4
+
5
+ ## 시작
6
+ ```bash
7
+ pnpm i
8
+ pnpm build
9
+ ```
10
+
11
+ ## 명령
12
+ ```bash
13
+ npx agentsx init <repo-url>
14
+ npx agentsx agents
15
+ npx agentsx targets <agent>
16
+ npx agentsx push <agent> [targets...] [--conflict fail-all|overwrite|partial]
17
+ npx agentsx pull <agent> [targets...] [--conflict fail-all|overwrite|partial]
18
+ npx agentsx sync <agent> [targets...] [--conflict fail-all|overwrite|partial]
19
+ ```
20
+
21
+ - `targets`를 생략하면 TUI 선택 UI가 열립니다.
22
+ - 선택/충돌 결정은 `~/.agentsx/state.json`에 저장되어 재사용됩니다.
23
+
24
+ ## 품질 검증
25
+ ```bash
26
+ pnpm check
27
+ ```
28
+
29
+ ## 문서
30
+ - 요구사항: `REQUIREMENTS.md`
31
+ - 에이전트 작업 가이드: `AGENTS.md`
32
+ - 온라인 기반 경로 조사: `AGENT_PATHS.md`
@@ -0,0 +1,133 @@
1
+ # AgentsX 요구사항 명세
2
+
3
+ ## 1. 목적
4
+ 서로 다른 컴퓨터에서 코딩 에이전트 설정을 동기화하기 위한 로컬 CLI 도구를 제공한다.
5
+
6
+ - 실행 방식: `npx agentsx ...`
7
+ - 로컬 상태 저장소: `~/.agentsx`
8
+ - 원격 상태 저장소: 사용자가 `init`으로 지정한 Git 리포지토리
9
+
10
+ ## 2. 핵심 사용자 시나리오
11
+ 1. 사용자는 `npx agentsx init <repo-url>`로 원격 저장소를 등록한다.
12
+ 2. 사용자는 `npx agentsx push <agent>`로 로컬 설정을 원격 저장소(`agents/<agent>/...`)로 업로드한다.
13
+ 3. 사용자는 `npx agentsx pull <agent>`로 원격 설정을 로컬로 내려받는다.
14
+ 4. 사용자는 `npx agentsx sync <agent>`로 양방향 동기화를 수행한다.
15
+
16
+ ## 3. 지원 범위
17
+
18
+ ### 3.1 지원 에이전트 (v1)
19
+ - codex
20
+ - claude code
21
+ - cursor
22
+ - open code
23
+ - copilot
24
+
25
+ ### 3.2 동기화 대상 설정 카테고리
26
+ - skills
27
+ - plugins / extensions
28
+ - mcp
29
+ - 지시사항 문서 (`AGENTS.md`, `CLAUDE.md` 등)
30
+ - 기타 에이전트 전용 설정 파일
31
+
32
+ 카테고리는 에이전트별 어댑터 정의를 통해 확장 가능해야 하며, 하드코딩 분기(`if agent===...`) 대신 레지스트리 기반으로 처리한다.
33
+
34
+ ## 4. CLI 명령 요구사항
35
+
36
+ ### 4.1 `init`
37
+ - 형식: `npx agentsx init <repo-url>`
38
+ - 동작:
39
+ 1. `~/.agentsx` 생성
40
+ 2. 상태 파일 생성/갱신
41
+ 3. 원격 리포지토리를 로컬 미러 경로(예: `~/.agentsx/repos/<slug>`)에 clone 또는 연결
42
+ 4. 이후 `push/pull/sync`가 즉시 가능해야 함
43
+
44
+ ### 4.2 `push`
45
+ - 형식: `npx agentsx push <agent> [targets...]`
46
+ - 동작:
47
+ 1. 에이전트별 로컬 설정 경로에서 대상 파일 탐색
48
+ 2. 원격 저장소의 `agents/<agent>/`로 복사
49
+ 3. Git add/commit/push 수행
50
+
51
+ - 대상 선택 방식:
52
+ 1. `[targets...]`가 있으면 CLI 비대화형 모드
53
+ 2. `[targets...]`가 없으면 TUI로 선택
54
+ - 화살표 이동
55
+ - 스페이스 토글
56
+ - 엔터 확정
57
+
58
+ ### 4.3 `pull`
59
+ - 형식: `npx agentsx pull <agent> [targets...]`
60
+ - 동작:
61
+ 1. 원격 저장소의 `agents/<agent>/` 읽기
62
+ 2. 에이전트별 로컬 설정 경로로 복원
63
+
64
+ - 대상 선택 방식 및 충돌 처리 UX는 `push`와 동일한 원칙 사용
65
+
66
+ ### 4.4 `sync`
67
+ - 형식: `npx agentsx sync <agent> [targets...]`
68
+ - 동작:
69
+ 1. 로컬/원격 양쪽 상태 비교
70
+ 2. 단방향 신규 파일은 반대편으로 전파
71
+ 3. 동일 경로 변경 충돌은 충돌 정책에 따라 처리
72
+ 4. 원격 변경이 있으면 Git commit/push
73
+
74
+ ## 5. 충돌 처리 요구사항
75
+
76
+ ### 5.1 공통 충돌 정책
77
+ 충돌 시 사용자가 아래 정책 중 선택 가능해야 한다.
78
+ - `fail-all` (전체실패): 충돌 발생 시 명령 전체 실패
79
+ - `overwrite` (덮어쓰기): 현재 연산 기준 우선 소스를 반대편에 적용
80
+ - push: 로컬이 원격 덮어씀
81
+ - pull: 원격이 로컬 덮어씀
82
+ - sync: 수정 시간이 더 최신인 쪽을 승자로 적용
83
+ - `partial` (부분실패): 충돌 항목은 건너뛰고 나머지만 처리
84
+
85
+ ### 5.2 모드별 UX
86
+ - CLI 모드(`[targets...]` 지정): 정책을 옵션으로 선택 가능
87
+ - TUI 모드(`[targets...]` 미지정): 충돌 항목별 선택 UI 제공
88
+
89
+ ### 5.3 충돌 선택값 저장
90
+ - 사용자의 충돌 선택은 `~/.agentsx` 상태 파일에 저장한다.
91
+ - 동일한 조건(명령/에이전트/대상)에 대해 다음 실행 시 기본적으로 재질문하지 않는다.
92
+ - 사용자가 명시 옵션을 주면 저장된 기본값보다 우선한다.
93
+
94
+ ## 6. 로컬 상태 저장소 (`~/.agentsx`)
95
+
96
+ ### 6.1 필수 저장 정보
97
+ - 스키마 버전
98
+ - 원격 리포지토리 URL
99
+ - 로컬 미러 경로
100
+ - 기본 브랜치
101
+ - 마지막 동기화 시각
102
+ - 충돌 정책 기본값 및 항목별 선택 캐시
103
+
104
+ ### 6.2 데이터 무결성
105
+ - 상태 파일이 없거나 손상되면 복구 가능한 에러 메시지 제공
106
+ - 쓰기 시 원자적 저장(임시 파일 후 rename)
107
+
108
+ ## 7. Git 동작 요구사항
109
+ - 원격 저장소 반영 전 최신 상태 fetch/pull
110
+ - 변경 없으면 commit/push 생략
111
+ - commit 메시지에 명령/에이전트/타임스탬프 포함
112
+ - 인증 실패/권한 실패 시 원인 중심 에러 안내
113
+
114
+ ## 8. 확장성/아키텍처 요구사항
115
+ - 에이전트별 경로/규칙은 어댑터 플러그인으로 분리
116
+ - 명령 로직은 공통 동기화 엔진을 재사용
117
+ - 파일 충돌 판별, 정책 적용, 복사 계획 생성은 순수 함수 중심으로 구현
118
+ - 향후 새 에이전트 추가 시 기존 명령 코드 변경을 최소화(등록만으로 동작)
119
+
120
+ ## 9. 품질 요구사항
121
+ - TypeScript strict 모드
122
+ - 타입 체크, 린트, 테스트 스크립트 제공
123
+ - 핵심 로직(충돌 판별/정책 적용/계획 수립) 단위 테스트 포함
124
+
125
+ ## 10. 비기능 요구사항
126
+ - 기본 OS: macOS/Linux (Windows 경로 확장은 차후)
127
+ - 대량 파일에서도 진행률/요약 출력
128
+ - 실패 시 원인과 복구 방법을 한국어로 안내
129
+
130
+ ## 11. 제외 범위 (v1)
131
+ - 암호화/비밀정보 마스킹 자동화
132
+ - 실시간 파일 감시 기반 자동 동기화 데몬
133
+ - GUI 앱
@@ -0,0 +1,2 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const claudeAdapter: AgentAdapter;
@@ -0,0 +1,120 @@
1
+ export const claudeAdapter = {
2
+ key: "claude",
3
+ displayName: "Claude Code",
4
+ aliases: ["claude", "claude-code", "claudecode"],
5
+ references: [
6
+ "https://docs.anthropic.com/en/docs/claude-code/settings",
7
+ "https://docs.anthropic.com/en/docs/claude-code/memory",
8
+ "https://docs.anthropic.com/en/docs/claude-code/slash-commands",
9
+ "https://docs.anthropic.com/en/docs/claude-code/sub-agents"
10
+ ],
11
+ targets: [
12
+ {
13
+ id: "settings",
14
+ label: "User settings",
15
+ description: "~/.claude/settings.json",
16
+ category: "config",
17
+ kind: "file",
18
+ scope: "home",
19
+ path: ".claude/settings.json",
20
+ includeByDefault: true,
21
+ },
22
+ {
23
+ id: "memory-global",
24
+ label: "Global CLAUDE.md",
25
+ description: "~/.claude/CLAUDE.md",
26
+ category: "instructions",
27
+ kind: "file",
28
+ scope: "home",
29
+ path: ".claude/CLAUDE.md",
30
+ optional: true,
31
+ includeByDefault: true,
32
+ },
33
+ {
34
+ id: "skills-global",
35
+ label: "Global skills",
36
+ description: "~/.claude/skills",
37
+ category: "skills",
38
+ kind: "dir",
39
+ scope: "home",
40
+ path: ".claude/skills",
41
+ optional: true,
42
+ includeByDefault: true,
43
+ },
44
+ {
45
+ id: "agents-global",
46
+ label: "Global sub-agents",
47
+ description: "~/.claude/agents",
48
+ category: "other",
49
+ kind: "dir",
50
+ scope: "home",
51
+ path: ".claude/agents",
52
+ optional: true,
53
+ includeByDefault: true,
54
+ },
55
+ {
56
+ id: "plugins-config",
57
+ label: "Plugin config",
58
+ description: "~/.claude/plugins/config.json",
59
+ category: "plugins",
60
+ kind: "file",
61
+ scope: "home",
62
+ path: ".claude/plugins/config.json",
63
+ optional: true,
64
+ },
65
+ {
66
+ id: "plugins-installed",
67
+ label: "Installed plugins metadata",
68
+ description: "~/.claude/plugins/installed_plugins.json",
69
+ category: "plugins",
70
+ kind: "file",
71
+ scope: "home",
72
+ path: ".claude/plugins/installed_plugins.json",
73
+ optional: true,
74
+ },
75
+ {
76
+ id: "plugins-marketplaces",
77
+ label: "Known marketplaces",
78
+ description: "~/.claude/plugins/known_marketplaces.json",
79
+ category: "plugins",
80
+ kind: "file",
81
+ scope: "home",
82
+ path: ".claude/plugins/known_marketplaces.json",
83
+ optional: true,
84
+ },
85
+ {
86
+ id: "project-memory",
87
+ label: "Project CLAUDE.md",
88
+ description: "./CLAUDE.md",
89
+ category: "instructions",
90
+ kind: "file",
91
+ scope: "cwd",
92
+ path: "CLAUDE.md",
93
+ optional: true,
94
+ includeByDefault: true,
95
+ },
96
+ {
97
+ id: "project-claude-settings",
98
+ label: "Project .claude/settings.json",
99
+ description: "./.claude/settings.json",
100
+ category: "config",
101
+ kind: "file",
102
+ scope: "cwd",
103
+ path: ".claude/settings.json",
104
+ optional: true,
105
+ includeByDefault: true,
106
+ },
107
+ {
108
+ id: "project-mcp",
109
+ label: "Project .mcp.json",
110
+ description: "./.mcp.json",
111
+ category: "mcp",
112
+ kind: "file",
113
+ scope: "cwd",
114
+ path: ".mcp.json",
115
+ optional: true,
116
+ includeByDefault: true,
117
+ }
118
+ ]
119
+ };
120
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,GAAG,EAAE,QAAQ;IACb,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC;IAChD,UAAU,EAAE;QACV,yDAAyD;QACzD,uDAAuD;QACvD,+DAA+D;QAC/D,2DAA2D;KAC5D;IACD,OAAO,EAAE;QACP;YACE,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,uBAAuB;YAC7B,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,qBAAqB;YAClC,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,mBAAmB;YACzB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,OAAO;YACjB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,+BAA+B;YAC5C,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,6BAA6B;YACnC,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,4BAA4B;YACnC,WAAW,EAAE,0CAA0C;YACvD,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,wCAAwC;YAC9C,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,sBAAsB;YAC1B,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE,2CAA2C;YACxD,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,yCAAyC;YAC/C,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,yBAAyB;YAC7B,KAAK,EAAE,+BAA+B;YACtC,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;KACF;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const codexAdapter: AgentAdapter;
@@ -0,0 +1,68 @@
1
+ export const codexAdapter = {
2
+ key: "codex",
3
+ displayName: "Codex",
4
+ aliases: ["codex"],
5
+ references: [
6
+ "https://developers.openai.com/codex/config-basic",
7
+ "https://developers.openai.com/codex/guides/agents-md",
8
+ "https://developers.openai.com/codex/rules",
9
+ "https://developers.openai.com/codex/skills"
10
+ ],
11
+ targets: [
12
+ {
13
+ id: "config",
14
+ label: "Codex config",
15
+ description: "~/.codex/config.toml",
16
+ category: "config",
17
+ kind: "file",
18
+ scope: "home",
19
+ path: ".codex/config.toml",
20
+ includeByDefault: true,
21
+ },
22
+ {
23
+ id: "instructions-main",
24
+ label: "Personal AGENTS.md",
25
+ description: "~/.codex/AGENTS.md",
26
+ category: "instructions",
27
+ kind: "file",
28
+ scope: "home",
29
+ path: ".codex/AGENTS.md",
30
+ optional: true,
31
+ includeByDefault: true,
32
+ },
33
+ {
34
+ id: "instructions-override",
35
+ label: "Personal AGENTS override",
36
+ description: "~/.codex/AGENTS.override.md",
37
+ category: "instructions",
38
+ kind: "file",
39
+ scope: "home",
40
+ path: ".codex/AGENTS.override.md",
41
+ optional: true,
42
+ includeByDefault: true,
43
+ },
44
+ {
45
+ id: "rules",
46
+ label: "Approval rules",
47
+ description: "~/.codex/rules",
48
+ category: "config",
49
+ kind: "dir",
50
+ scope: "home",
51
+ path: ".codex/rules",
52
+ optional: true,
53
+ includeByDefault: true,
54
+ },
55
+ {
56
+ id: "skills",
57
+ label: "Skills",
58
+ description: "~/.codex/skills",
59
+ category: "skills",
60
+ kind: "dir",
61
+ scope: "home",
62
+ path: ".codex/skills",
63
+ optional: true,
64
+ includeByDefault: true,
65
+ }
66
+ ]
67
+ };
68
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,GAAG,EAAE,OAAO;IACZ,WAAW,EAAE,OAAO;IACpB,OAAO,EAAE,CAAC,OAAO,CAAC;IAClB,UAAU,EAAE;QACV,kDAAkD;QAClD,sDAAsD;QACtD,2CAA2C;QAC3C,4CAA4C;KAC7C;IACD,OAAO,EAAE;QACP;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,oBAAoB;YAC1B,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE,oBAAoB;YACjC,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,kBAAkB;YACxB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,uBAAuB;YAC3B,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,6BAA6B;YAC1C,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,2BAA2B;YACjC,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,gBAAgB;YACvB,WAAW,EAAE,gBAAgB;YAC7B,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,QAAQ;YACZ,KAAK,EAAE,QAAQ;YACf,WAAW,EAAE,iBAAiB;YAC9B,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;KACF;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const copilotAdapter: AgentAdapter;
@@ -0,0 +1,85 @@
1
+ export const copilotAdapter = {
2
+ key: "copilot",
3
+ displayName: "GitHub Copilot",
4
+ aliases: ["copilot", "github-copilot", "github_copilot"],
5
+ references: [
6
+ "https://code.visualstudio.com/docs/configure/settings",
7
+ "https://code.visualstudio.com/docs/copilot/customization/custom-instructions",
8
+ "https://docs.github.com/en/copilot/how-tos/configure-custom-instructions/add-repository-instructions",
9
+ "https://code.visualstudio.com/docs/configure/settings-sync"
10
+ ],
11
+ targets: [
12
+ {
13
+ id: "vscode-user-settings",
14
+ label: "VS Code user settings",
15
+ description: "Copilot settings in User/settings.json",
16
+ category: "config",
17
+ kind: "file",
18
+ scope: "home",
19
+ path: {
20
+ darwin: "Library/Application Support/Code/User/settings.json",
21
+ linux: ".config/Code/User/settings.json",
22
+ },
23
+ optional: true,
24
+ includeByDefault: true,
25
+ },
26
+ {
27
+ id: "vscode-profile-settings",
28
+ label: "VS Code profile settings",
29
+ description: "User/profiles",
30
+ category: "config",
31
+ kind: "dir",
32
+ scope: "home",
33
+ path: {
34
+ darwin: "Library/Application Support/Code/User/profiles",
35
+ linux: ".config/Code/User/profiles",
36
+ },
37
+ optional: true,
38
+ },
39
+ {
40
+ id: "repo-copilot-instructions",
41
+ label: "Repository instructions",
42
+ description: "./.github/copilot-instructions.md",
43
+ category: "instructions",
44
+ kind: "file",
45
+ scope: "cwd",
46
+ path: ".github/copilot-instructions.md",
47
+ optional: true,
48
+ includeByDefault: true,
49
+ },
50
+ {
51
+ id: "repo-copilot-scoped-instructions",
52
+ label: "Path scoped instructions",
53
+ description: "./.github/instructions",
54
+ category: "instructions",
55
+ kind: "dir",
56
+ scope: "cwd",
57
+ path: ".github/instructions",
58
+ optional: true,
59
+ includeByDefault: true,
60
+ },
61
+ {
62
+ id: "repo-agents-md",
63
+ label: "Repository AGENTS.md",
64
+ description: "./AGENTS.md",
65
+ category: "instructions",
66
+ kind: "file",
67
+ scope: "cwd",
68
+ path: "AGENTS.md",
69
+ optional: true,
70
+ includeByDefault: true,
71
+ },
72
+ {
73
+ id: "repo-vscode-settings",
74
+ label: "Workspace VS Code settings",
75
+ description: "./.vscode/settings.json",
76
+ category: "config",
77
+ kind: "file",
78
+ scope: "cwd",
79
+ path: ".vscode/settings.json",
80
+ optional: true,
81
+ includeByDefault: true,
82
+ }
83
+ ]
84
+ };
85
+ //# sourceMappingURL=copilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot.js","sourceRoot":"","sources":["../../src/agents/copilot.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,GAAG,EAAE,SAAS;IACd,WAAW,EAAE,gBAAgB;IAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;IACxD,UAAU,EAAE;QACV,uDAAuD;QACvD,8EAA8E;QAC9E,sGAAsG;QACtG,4DAA4D;KAC7D;IACD,OAAO,EAAE;QACP;YACE,EAAE,EAAE,sBAAsB;YAC1B,KAAK,EAAE,uBAAuB;YAC9B,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE;gBACJ,MAAM,EAAE,qDAAqD;gBAC7D,KAAK,EAAE,iCAAiC;aACzC;YACD,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,yBAAyB;YAC7B,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,eAAe;YAC5B,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE;gBACJ,MAAM,EAAE,gDAAgD;gBACxD,KAAK,EAAE,4BAA4B;aACpC;YACD,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,2BAA2B;YAC/B,KAAK,EAAE,yBAAyB;YAChC,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,iCAAiC;YACvC,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,kCAAkC;YACtC,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,wBAAwB;YACrC,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,gBAAgB;YACpB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,sBAAsB;YAC1B,KAAK,EAAE,4BAA4B;YACnC,WAAW,EAAE,yBAAyB;YACtC,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,uBAAuB;YAC7B,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;KACF;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const cursorAdapter: AgentAdapter;
@@ -0,0 +1,84 @@
1
+ export const cursorAdapter = {
2
+ key: "cursor",
3
+ displayName: "Cursor",
4
+ aliases: ["cursor"],
5
+ references: [
6
+ "https://docs.cursor.com/en/context",
7
+ "https://docs.cursor.com/en/cli/reference/configuration",
8
+ "https://forum.cursor.com/t/sync-of-keybindings-and-settings/31/115"
9
+ ],
10
+ targets: [
11
+ {
12
+ id: "ide-settings",
13
+ label: "IDE settings.json",
14
+ description: "Cursor User/settings.json",
15
+ category: "config",
16
+ kind: "file",
17
+ scope: "home",
18
+ path: {
19
+ darwin: "Library/Application Support/Cursor/User/settings.json",
20
+ linux: ".config/Cursor/User/settings.json",
21
+ },
22
+ optional: true,
23
+ includeByDefault: true,
24
+ },
25
+ {
26
+ id: "ide-keybindings",
27
+ label: "IDE keybindings.json",
28
+ description: "Cursor User/keybindings.json",
29
+ category: "config",
30
+ kind: "file",
31
+ scope: "home",
32
+ path: {
33
+ darwin: "Library/Application Support/Cursor/User/keybindings.json",
34
+ linux: ".config/Cursor/User/keybindings.json",
35
+ },
36
+ optional: true,
37
+ includeByDefault: true,
38
+ },
39
+ {
40
+ id: "cli-config",
41
+ label: "Cursor CLI config",
42
+ description: "~/.cursor/cli-config.json",
43
+ category: "config",
44
+ kind: "file",
45
+ scope: "home",
46
+ path: ".cursor/cli-config.json",
47
+ optional: true,
48
+ includeByDefault: true,
49
+ },
50
+ {
51
+ id: "extensions",
52
+ label: "Cursor extensions",
53
+ description: "~/.cursor/extensions",
54
+ category: "plugins",
55
+ kind: "dir",
56
+ scope: "home",
57
+ path: ".cursor/extensions",
58
+ optional: true,
59
+ },
60
+ {
61
+ id: "project-rules",
62
+ label: "Project rules",
63
+ description: "./.cursor/rules",
64
+ category: "instructions",
65
+ kind: "dir",
66
+ scope: "cwd",
67
+ path: ".cursor/rules",
68
+ optional: true,
69
+ includeByDefault: true,
70
+ },
71
+ {
72
+ id: "project-agents-md",
73
+ label: "Project AGENTS.md",
74
+ description: "./AGENTS.md",
75
+ category: "instructions",
76
+ kind: "file",
77
+ scope: "cwd",
78
+ path: "AGENTS.md",
79
+ optional: true,
80
+ includeByDefault: true,
81
+ }
82
+ ]
83
+ };
84
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/agents/cursor.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,GAAG,EAAE,QAAQ;IACb,WAAW,EAAE,QAAQ;IACrB,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,UAAU,EAAE;QACV,oCAAoC;QACpC,wDAAwD;QACxD,oEAAoE;KACrE;IACD,OAAO,EAAE;QACP;YACE,EAAE,EAAE,cAAc;YAClB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE;gBACJ,MAAM,EAAE,uDAAuD;gBAC/D,KAAK,EAAE,mCAAmC;aAC3C;YACD,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,iBAAiB;YACrB,KAAK,EAAE,sBAAsB;YAC7B,WAAW,EAAE,8BAA8B;YAC3C,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE;gBACJ,MAAM,EAAE,0DAA0D;gBAClE,KAAK,EAAE,sCAAsC;aAC9C;YACD,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,YAAY;YAChB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,SAAS;YACnB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,oBAAoB;YAC1B,QAAQ,EAAE,IAAI;SACf;QACD;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,eAAe;YACtB,WAAW,EAAE,iBAAiB;YAC9B,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,eAAe;YACrB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;QACD;YACE,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,aAAa;YAC1B,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,IAAI;SACvB;KACF;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AgentAdapter } from "../types.js";
2
+ export declare const opencodeAdapter: AgentAdapter;