@nram-ai/setup-agents 0.0.1-pre.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 (84) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +109 -0
  3. package/dist/helpers/configure/amp.d.ts +9 -0
  4. package/dist/helpers/configure/amp.js +49 -0
  5. package/dist/helpers/configure/amp.js.map +1 -0
  6. package/dist/helpers/configure/antigravity.d.ts +12 -0
  7. package/dist/helpers/configure/antigravity.js +74 -0
  8. package/dist/helpers/configure/antigravity.js.map +1 -0
  9. package/dist/helpers/configure/claude_code.d.ts +9 -0
  10. package/dist/helpers/configure/claude_code.js +119 -0
  11. package/dist/helpers/configure/claude_code.js.map +1 -0
  12. package/dist/helpers/configure/codex.d.ts +19 -0
  13. package/dist/helpers/configure/codex.js +76 -0
  14. package/dist/helpers/configure/codex.js.map +1 -0
  15. package/dist/helpers/configure/copilot.d.ts +11 -0
  16. package/dist/helpers/configure/copilot.js +64 -0
  17. package/dist/helpers/configure/copilot.js.map +1 -0
  18. package/dist/helpers/configure/cursor.d.ts +26 -0
  19. package/dist/helpers/configure/cursor.js +90 -0
  20. package/dist/helpers/configure/cursor.js.map +1 -0
  21. package/dist/helpers/configure/droid.d.ts +18 -0
  22. package/dist/helpers/configure/droid.js +70 -0
  23. package/dist/helpers/configure/droid.js.map +1 -0
  24. package/dist/helpers/configure/grok.d.ts +25 -0
  25. package/dist/helpers/configure/grok.js +93 -0
  26. package/dist/helpers/configure/grok.js.map +1 -0
  27. package/dist/helpers/configure/hermes.d.ts +22 -0
  28. package/dist/helpers/configure/hermes.js +107 -0
  29. package/dist/helpers/configure/hermes.js.map +1 -0
  30. package/dist/helpers/configure/junie.d.ts +10 -0
  31. package/dist/helpers/configure/junie.js +52 -0
  32. package/dist/helpers/configure/junie.js.map +1 -0
  33. package/dist/helpers/configure/kilo.d.ts +19 -0
  34. package/dist/helpers/configure/kilo.js +110 -0
  35. package/dist/helpers/configure/kilo.js.map +1 -0
  36. package/dist/helpers/configure/kimi.d.ts +10 -0
  37. package/dist/helpers/configure/kimi.js +75 -0
  38. package/dist/helpers/configure/kimi.js.map +1 -0
  39. package/dist/helpers/configure/kiro.d.ts +25 -0
  40. package/dist/helpers/configure/kiro.js +77 -0
  41. package/dist/helpers/configure/kiro.js.map +1 -0
  42. package/dist/helpers/configure/openclaw.d.ts +10 -0
  43. package/dist/helpers/configure/openclaw.js +72 -0
  44. package/dist/helpers/configure/openclaw.js.map +1 -0
  45. package/dist/helpers/configure/opencode.d.ts +18 -0
  46. package/dist/helpers/configure/opencode.js +72 -0
  47. package/dist/helpers/configure/opencode.js.map +1 -0
  48. package/dist/helpers/configure/pi.d.ts +10 -0
  49. package/dist/helpers/configure/pi.js +60 -0
  50. package/dist/helpers/configure/pi.js.map +1 -0
  51. package/dist/helpers/configure/trae.d.ts +11 -0
  52. package/dist/helpers/configure/trae.js +63 -0
  53. package/dist/helpers/configure/trae.js.map +1 -0
  54. package/dist/helpers/configure/vibe.d.ts +24 -0
  55. package/dist/helpers/configure/vibe.js +106 -0
  56. package/dist/helpers/configure/vibe.js.map +1 -0
  57. package/dist/helpers/configure/vscode.d.ts +18 -0
  58. package/dist/helpers/configure/vscode.js +81 -0
  59. package/dist/helpers/configure/vscode.js.map +1 -0
  60. package/dist/helpers/harnesses.d.ts +8 -0
  61. package/dist/helpers/harnesses.js +161 -0
  62. package/dist/helpers/harnesses.js.map +1 -0
  63. package/dist/helpers/instructions.d.ts +63 -0
  64. package/dist/helpers/instructions.js +175 -0
  65. package/dist/helpers/instructions.js.map +1 -0
  66. package/dist/helpers/paths.d.ts +130 -0
  67. package/dist/helpers/paths.js +211 -0
  68. package/dist/helpers/paths.js.map +1 -0
  69. package/dist/helpers/upsert.d.ts +197 -0
  70. package/dist/helpers/upsert.js +428 -0
  71. package/dist/helpers/upsert.js.map +1 -0
  72. package/dist/helpers/url.d.ts +15 -0
  73. package/dist/helpers/url.js +51 -0
  74. package/dist/helpers/url.js.map +1 -0
  75. package/dist/index.d.ts +2 -0
  76. package/dist/index.js +105 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/setup.d.ts +17 -0
  79. package/dist/setup.js +296 -0
  80. package/dist/setup.js.map +1 -0
  81. package/dist/types.d.ts +67 -0
  82. package/dist/types.js +50 -0
  83. package/dist/types.js.map +1 -0
  84. package/package.json +76 -0
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ // Copyright (c) 2026, Brandon Lehmann <brandonlehmann@gmail.com>
3
+ //
4
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ // of this software and associated documentation files (the "Software"), to deal
6
+ // in the Software without restriction, including without limitation the rights
7
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ // copies of the Software, and to permit persons to whom the Software is
9
+ // furnished to do so, subject to the following conditions:
10
+ //
11
+ // The above copyright notice and this permission notice shall be included in all
12
+ // copies or substantial portions of the Software.
13
+ //
14
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ // SOFTWARE.
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.resolve_instructions = exports.builtin_notice = exports.fetch_instructions = exports.write_cache = exports.read_cache = exports.cache_path = exports.github_url = void 0;
23
+ // The nram server is the canonical source of the agent instructions: it
24
+ // serves them at the public, unauthenticated `GET /instructions` endpoint
25
+ // (`format=agents` for the full text, `format=cursor` for the condensed
26
+ // rules). This module owns fetching that text, caching the last good copy on
27
+ // the machine, and degrading gracefully when nothing is reachable.
28
+ //
29
+ // It deliberately imports only Node built-ins and the dependency-free file
30
+ // helpers from upsert.ts, so the `--session-start` hook path (run at every
31
+ // agent session start) stays cheap to load.
32
+ const os_1 = require("os");
33
+ const path_1 = require("path");
34
+ const upsert_1 = require("./upsert");
35
+ /** Maps our format names onto the server's `?format=` query values */
36
+ const SERVER_FORMATS = {
37
+ full: 'agents',
38
+ condensed: 'cursor'
39
+ };
40
+ /** The upstream source files, used when the configured server is unreachable */
41
+ const GITHUB_FILES = {
42
+ full: 'agent-instructions.md',
43
+ condensed: 'cursor.md'
44
+ };
45
+ const DEFAULT_GITHUB_BASE = 'https://raw.githubusercontent.com/nram-ai/nram/refs/heads/master/internal/instructions/data';
46
+ /**
47
+ * The GitHub raw URL serving the fallback copy of the given format; the base
48
+ * is env-overridable so tests can stay off the network
49
+ *
50
+ * @param format the instructions format
51
+ */
52
+ const github_url = (format) => `${process.env.NRAM_INSTRUCTIONS_FALLBACK_BASE ?? DEFAULT_GITHUB_BASE}/${GITHUB_FILES[format]}`;
53
+ exports.github_url = github_url;
54
+ /**
55
+ * The machine-local cache file holding the last successfully fetched copy of
56
+ * the given format; the directory is env-overridable so tests can isolate it
57
+ *
58
+ * @param format the instructions format
59
+ */
60
+ const cache_path = (format) => (0, path_1.join)(process.env.NRAM_CACHE_DIR ?? (0, path_1.join)((0, os_1.homedir)(), '.nram', 'cache'), `instructions-${format}.md`);
61
+ exports.cache_path = cache_path;
62
+ /**
63
+ * Reads the cached copy of the given format, returning undefined when there
64
+ * is none (or it cannot be read)
65
+ *
66
+ * @param format the instructions format
67
+ */
68
+ const read_cache = (format) => {
69
+ try {
70
+ const text = (0, upsert_1.read_text)((0, exports.cache_path)(format));
71
+ return text.length !== 0 ? text : undefined;
72
+ }
73
+ catch {
74
+ return undefined;
75
+ }
76
+ };
77
+ exports.read_cache = read_cache;
78
+ /**
79
+ * Caches a successfully fetched copy of the given format, creating the cache
80
+ * directory as needed; failures are swallowed because the cache is an
81
+ * optimization, never a requirement
82
+ *
83
+ * @param format the instructions format
84
+ * @param text the instructions text
85
+ */
86
+ const write_cache = (format, text) => {
87
+ try {
88
+ (0, upsert_1.write_text)((0, exports.cache_path)(format), text);
89
+ }
90
+ catch {
91
+ // a read-only home directory must not break the fallback chain
92
+ }
93
+ };
94
+ exports.write_cache = write_cache;
95
+ /**
96
+ * Fetches a URL expected to return plain-text instructions, throwing on any
97
+ * HTTP error, timeout, or empty body
98
+ *
99
+ * @param url the URL to fetch
100
+ * @param timeout_ms the request timeout in milliseconds
101
+ */
102
+ const fetch_text = async (url, timeout_ms) => {
103
+ const response = await fetch(url, { signal: AbortSignal.timeout(timeout_ms) });
104
+ if (!response.ok) {
105
+ throw new Error(`HTTP ${response.status} from ${url}`);
106
+ }
107
+ const text = await response.text();
108
+ if (text.trim().length === 0) {
109
+ throw new Error(`empty response from ${url}`);
110
+ }
111
+ return text;
112
+ };
113
+ /**
114
+ * Fetches the canonical instructions from an nram server's public
115
+ * `/instructions` endpoint, throwing on failure
116
+ *
117
+ * @param base_url the normalized nram base URL
118
+ * @param format the instructions format
119
+ * @param timeout_ms the request timeout in milliseconds
120
+ */
121
+ const fetch_instructions = async (base_url, format, timeout_ms) => fetch_text(`${base_url}/instructions?format=${SERVER_FORMATS[format]}`, timeout_ms);
122
+ exports.fetch_instructions = fetch_instructions;
123
+ /**
124
+ * The last-resort text emitted when the canonical instructions could not be
125
+ * loaded from anywhere; it tells the agent to surface the failure to the user
126
+ * instead of silently proceeding without the memory protocol
127
+ *
128
+ * @param format the instructions format
129
+ */
130
+ const builtin_notice = (format) => format === 'full'
131
+ ? 'Memory (nram): the canonical nram agent instructions could not be loaded from the configured nram ' +
132
+ 'server, the local cache, or the GitHub fallback. Inform the user that the nram instructions failed to ' +
133
+ 'load and suggest re-running `npx -y @nram-ai/setup-agents` once their nram server is reachable. ' +
134
+ 'nram remains the only memory system: recall before assuming, store what you learn, and never write ' +
135
+ 'local memory files.'
136
+ : 'Memory (nram): the canonical nram rules could not be loaded from the nram server, the local cache, or ' +
137
+ 'the GitHub fallback. Inform the user and suggest re-running `npx -y @nram-ai/setup-agents` once their ' +
138
+ 'nram server is reachable. nram remains the only memory system; never write local memory files.';
139
+ exports.builtin_notice = builtin_notice;
140
+ /**
141
+ * Resolves the instructions text through the fallback chain: the configured
142
+ * server (skipped when no base URL is known), then the machine-local cache,
143
+ * then the GitHub raw copy, then the built-in notice. Any successful network
144
+ * fetch refreshes the cache. Never throws
145
+ *
146
+ * @param base_url the normalized nram base URL, or undefined to skip the server
147
+ * @param format the instructions format
148
+ * @param timeout_ms the per-attempt network timeout in milliseconds
149
+ */
150
+ const resolve_instructions = async (base_url, format, timeout_ms) => {
151
+ if (base_url !== undefined) {
152
+ try {
153
+ const text = await (0, exports.fetch_instructions)(base_url, format, timeout_ms);
154
+ (0, exports.write_cache)(format, text);
155
+ return { text, source: 'server' };
156
+ }
157
+ catch {
158
+ // fall through to the cache
159
+ }
160
+ }
161
+ const cached = (0, exports.read_cache)(format);
162
+ if (cached !== undefined) {
163
+ return { text: cached, source: 'cache' };
164
+ }
165
+ try {
166
+ const text = await fetch_text((0, exports.github_url)(format), timeout_ms);
167
+ (0, exports.write_cache)(format, text);
168
+ return { text, source: 'github' };
169
+ }
170
+ catch {
171
+ return { text: (0, exports.builtin_notice)(format), source: 'builtin' };
172
+ }
173
+ };
174
+ exports.resolve_instructions = resolve_instructions;
175
+ //# sourceMappingURL=instructions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.js","sourceRoot":"","sources":["../../src/helpers/instructions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ import { Scope } from '../types';
2
+ /**
3
+ * Returns the Claude Code configuration directory for the given scope
4
+ *
5
+ * @param scope the configuration scope
6
+ */
7
+ export declare const claude_dir: (scope: Scope) => string;
8
+ /**
9
+ * Returns the Codex home directory for the given scope
10
+ *
11
+ * @param scope the configuration scope
12
+ */
13
+ export declare const codex_dir: (scope: Scope) => string;
14
+ /**
15
+ * Returns the OpenCode configuration directory for the given scope
16
+ *
17
+ * Note: OpenCode documents `~/.config/opencode` as the global location on all
18
+ * platforms; `XDG_CONFIG_HOME` is honored when set. At project scope, OpenCode
19
+ * reads `opencode.json` and `AGENTS.md` from the repository root.
20
+ *
21
+ * @param scope the configuration scope
22
+ */
23
+ export declare const opencode_dir: (scope: Scope) => string;
24
+ /**
25
+ * Returns the Cursor configuration directory for the given scope
26
+ *
27
+ * @param scope the configuration scope
28
+ */
29
+ export declare const cursor_dir: (scope: Scope) => string;
30
+ /**
31
+ * Returns the Amp configuration directory for the given scope; Amp documents
32
+ * `~/.config/amp` on every platform, including `%USERPROFILE%\.config\amp`
33
+ * on Windows
34
+ *
35
+ * @param scope the configuration scope
36
+ */
37
+ export declare const amp_dir: (scope: Scope) => string;
38
+ /**
39
+ * Returns the Google Antigravity configuration directory (user level only;
40
+ * Antigravity documents project-local MCP config as read-but-ignored)
41
+ */
42
+ export declare const antigravity_dir: () => string;
43
+ /**
44
+ * Returns the shared `~/.gemini` directory, where Antigravity reads the
45
+ * cross-tool AGENTS.md (GEMINI.md is avoided deliberately: both Antigravity
46
+ * and Gemini CLI write it, a documented conflict)
47
+ */
48
+ export declare const gemini_dir: () => string;
49
+ /**
50
+ * Returns the OpenClaw state directory (user level only; the gateway has no
51
+ * project-scoped configuration)
52
+ */
53
+ export declare const openclaw_dir: () => string;
54
+ /**
55
+ * Returns the GitHub Copilot CLI configuration directory (user level only
56
+ * for MCP; honors COPILOT_HOME)
57
+ */
58
+ export declare const copilot_dir: () => string;
59
+ /**
60
+ * Returns the Factory (droid) configuration directory for the given scope
61
+ *
62
+ * @param scope the configuration scope
63
+ */
64
+ export declare const factory_dir: (scope: Scope) => string;
65
+ /**
66
+ * Returns the Hermes configuration directory (user level only; Hermes has no
67
+ * project-scoped configuration)
68
+ */
69
+ export declare const hermes_dir: () => string;
70
+ /**
71
+ * Returns the JetBrains Junie configuration directory for the given scope
72
+ *
73
+ * @param scope the configuration scope
74
+ */
75
+ export declare const junie_dir: (scope: Scope) => string;
76
+ /**
77
+ * Returns the Kilo Code configuration directory for the given scope
78
+ *
79
+ * @param scope the configuration scope
80
+ */
81
+ export declare const kilo_dir: (scope: Scope) => string;
82
+ /**
83
+ * Returns the Kimi Code CLI configuration directory (user level only; no
84
+ * project-scoped configuration is documented)
85
+ */
86
+ export declare const kimi_dir: () => string;
87
+ /**
88
+ * Returns the Kiro configuration directory for the given scope (honors
89
+ * KIRO_HOME at user scope)
90
+ *
91
+ * @param scope the configuration scope
92
+ */
93
+ export declare const kiro_dir: (scope: Scope) => string;
94
+ /**
95
+ * Returns the Pi coding agent configuration directory (user level; Pi keeps
96
+ * its agent state under `~/.pi/agent`)
97
+ */
98
+ export declare const pi_dir: () => string;
99
+ /**
100
+ * Returns the Vibe (Mistral) home directory for the given scope (honors
101
+ * VIBE_HOME at user scope)
102
+ *
103
+ * @param scope the configuration scope
104
+ */
105
+ export declare const vibe_dir: (scope: Scope) => string;
106
+ /**
107
+ * Returns the Grok Build configuration directory for the given scope
108
+ *
109
+ * @param scope the configuration scope
110
+ */
111
+ export declare const grok_dir: (scope: Scope) => string;
112
+ /**
113
+ * Returns the Trae configuration directory for the given scope
114
+ *
115
+ * @param scope the configuration scope
116
+ */
117
+ export declare const trae_dir: (scope: Scope) => string;
118
+ /**
119
+ * Resolves the AGENTS.md a harness reads: its own user-level file at user
120
+ * scope, the shared repository-root AGENTS.md at project scope (where all
121
+ * AGENTS.md-reading harnesses dedupe into one marker block)
122
+ *
123
+ * @param scope the configuration scope
124
+ * @param user_file the harness's user-level instructions file
125
+ */
126
+ export declare const agents_md_path: (scope: Scope, user_file: string) => string;
127
+ /**
128
+ * Returns the VS Code user profile directory per platform
129
+ */
130
+ export declare const vscode_user_dir: () => string;
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ // Copyright (c) 2026, Brandon Lehmann <brandonlehmann@gmail.com>
3
+ //
4
+ // Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ // of this software and associated documentation files (the "Software"), to deal
6
+ // in the Software without restriction, including without limitation the rights
7
+ // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ // copies of the Software, and to permit persons to whom the Software is
9
+ // furnished to do so, subject to the following conditions:
10
+ //
11
+ // The above copyright notice and this permission notice shall be included in all
12
+ // copies or substantial portions of the Software.
13
+ //
14
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ // SOFTWARE.
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.vscode_user_dir = exports.agents_md_path = exports.trae_dir = exports.grok_dir = exports.vibe_dir = exports.pi_dir = exports.kiro_dir = exports.kimi_dir = exports.kilo_dir = exports.junie_dir = exports.hermes_dir = exports.factory_dir = exports.copilot_dir = exports.openclaw_dir = exports.gemini_dir = exports.antigravity_dir = exports.amp_dir = exports.cursor_dir = exports.opencode_dir = exports.codex_dir = exports.claude_dir = void 0;
23
+ const os_1 = require("os");
24
+ const path_1 = require("path");
25
+ const types_1 = require("../types");
26
+ /**
27
+ * Resolved per call (homedir() consults USERPROFILE/HOME at call time) so
28
+ * tests can redirect the home directory through the environment
29
+ */
30
+ const user_home = () => (0, os_1.homedir)();
31
+ /**
32
+ * The XDG configuration root (`$XDG_CONFIG_HOME` else `~/.config`)
33
+ */
34
+ const xdg_config = () => process.env.XDG_CONFIG_HOME ?? (0, path_1.resolve)(user_home(), '.config');
35
+ /**
36
+ * Returns the Claude Code configuration directory for the given scope
37
+ *
38
+ * @param scope the configuration scope
39
+ */
40
+ const claude_dir = (scope) => scope === types_1.Scope.USER
41
+ ? (0, path_1.resolve)(process.env.CLAUDE_CONFIG_DIR ?? (0, path_1.resolve)(user_home(), '.claude'))
42
+ : (0, path_1.resolve)(process.cwd(), '.claude');
43
+ exports.claude_dir = claude_dir;
44
+ /**
45
+ * Returns the Codex home directory for the given scope
46
+ *
47
+ * @param scope the configuration scope
48
+ */
49
+ const codex_dir = (scope) => scope === types_1.Scope.USER
50
+ ? (0, path_1.resolve)(process.env.CODEX_HOME ?? (0, path_1.resolve)(user_home(), '.codex'))
51
+ : (0, path_1.resolve)(process.cwd(), '.codex');
52
+ exports.codex_dir = codex_dir;
53
+ /**
54
+ * Returns the OpenCode configuration directory for the given scope
55
+ *
56
+ * Note: OpenCode documents `~/.config/opencode` as the global location on all
57
+ * platforms; `XDG_CONFIG_HOME` is honored when set. At project scope, OpenCode
58
+ * reads `opencode.json` and `AGENTS.md` from the repository root.
59
+ *
60
+ * @param scope the configuration scope
61
+ */
62
+ const opencode_dir = (scope) => scope === types_1.Scope.USER ? (0, path_1.resolve)(xdg_config(), 'opencode') : (0, path_1.resolve)(process.cwd());
63
+ exports.opencode_dir = opencode_dir;
64
+ /**
65
+ * Returns the Cursor configuration directory for the given scope
66
+ *
67
+ * @param scope the configuration scope
68
+ */
69
+ const cursor_dir = (scope) => scope === types_1.Scope.USER
70
+ ? (0, path_1.resolve)(user_home(), '.cursor')
71
+ : (0, path_1.resolve)(process.cwd(), '.cursor');
72
+ exports.cursor_dir = cursor_dir;
73
+ /**
74
+ * Returns the Amp configuration directory for the given scope; Amp documents
75
+ * `~/.config/amp` on every platform, including `%USERPROFILE%\.config\amp`
76
+ * on Windows
77
+ *
78
+ * @param scope the configuration scope
79
+ */
80
+ const amp_dir = (scope) => scope === types_1.Scope.USER ? (0, path_1.resolve)(xdg_config(), 'amp') : (0, path_1.resolve)(process.cwd(), '.amp');
81
+ exports.amp_dir = amp_dir;
82
+ /**
83
+ * Returns the Google Antigravity configuration directory (user level only;
84
+ * Antigravity documents project-local MCP config as read-but-ignored)
85
+ */
86
+ const antigravity_dir = () => (0, path_1.resolve)(user_home(), '.gemini', 'antigravity');
87
+ exports.antigravity_dir = antigravity_dir;
88
+ /**
89
+ * Returns the shared `~/.gemini` directory, where Antigravity reads the
90
+ * cross-tool AGENTS.md (GEMINI.md is avoided deliberately: both Antigravity
91
+ * and Gemini CLI write it, a documented conflict)
92
+ */
93
+ const gemini_dir = () => (0, path_1.resolve)(user_home(), '.gemini');
94
+ exports.gemini_dir = gemini_dir;
95
+ /**
96
+ * Returns the OpenClaw state directory (user level only; the gateway has no
97
+ * project-scoped configuration)
98
+ */
99
+ const openclaw_dir = () => (0, path_1.resolve)(user_home(), '.openclaw');
100
+ exports.openclaw_dir = openclaw_dir;
101
+ /**
102
+ * Returns the GitHub Copilot CLI configuration directory (user level only
103
+ * for MCP; honors COPILOT_HOME)
104
+ */
105
+ const copilot_dir = () => (0, path_1.resolve)(process.env.COPILOT_HOME ?? (0, path_1.resolve)(user_home(), '.copilot'));
106
+ exports.copilot_dir = copilot_dir;
107
+ /**
108
+ * Returns the Factory (droid) configuration directory for the given scope
109
+ *
110
+ * @param scope the configuration scope
111
+ */
112
+ const factory_dir = (scope) => scope === types_1.Scope.USER
113
+ ? (0, path_1.resolve)(user_home(), '.factory')
114
+ : (0, path_1.resolve)(process.cwd(), '.factory');
115
+ exports.factory_dir = factory_dir;
116
+ /**
117
+ * Returns the Hermes configuration directory (user level only; Hermes has no
118
+ * project-scoped configuration)
119
+ */
120
+ const hermes_dir = () => (0, path_1.resolve)(user_home(), '.hermes');
121
+ exports.hermes_dir = hermes_dir;
122
+ /**
123
+ * Returns the JetBrains Junie configuration directory for the given scope
124
+ *
125
+ * @param scope the configuration scope
126
+ */
127
+ const junie_dir = (scope) => scope === types_1.Scope.USER
128
+ ? (0, path_1.resolve)(user_home(), '.junie')
129
+ : (0, path_1.resolve)(process.cwd(), '.junie');
130
+ exports.junie_dir = junie_dir;
131
+ /**
132
+ * Returns the Kilo Code configuration directory for the given scope
133
+ *
134
+ * @param scope the configuration scope
135
+ */
136
+ const kilo_dir = (scope) => scope === types_1.Scope.USER ? (0, path_1.resolve)(xdg_config(), 'kilo') : (0, path_1.resolve)(process.cwd(), '.kilo');
137
+ exports.kilo_dir = kilo_dir;
138
+ /**
139
+ * Returns the Kimi Code CLI configuration directory (user level only; no
140
+ * project-scoped configuration is documented)
141
+ */
142
+ const kimi_dir = () => (0, path_1.resolve)(user_home(), '.kimi');
143
+ exports.kimi_dir = kimi_dir;
144
+ /**
145
+ * Returns the Kiro configuration directory for the given scope (honors
146
+ * KIRO_HOME at user scope)
147
+ *
148
+ * @param scope the configuration scope
149
+ */
150
+ const kiro_dir = (scope) => scope === types_1.Scope.USER
151
+ ? (0, path_1.resolve)(process.env.KIRO_HOME ?? (0, path_1.resolve)(user_home(), '.kiro'))
152
+ : (0, path_1.resolve)(process.cwd(), '.kiro');
153
+ exports.kiro_dir = kiro_dir;
154
+ /**
155
+ * Returns the Pi coding agent configuration directory (user level; Pi keeps
156
+ * its agent state under `~/.pi/agent`)
157
+ */
158
+ const pi_dir = () => (0, path_1.resolve)(user_home(), '.pi', 'agent');
159
+ exports.pi_dir = pi_dir;
160
+ /**
161
+ * Returns the Vibe (Mistral) home directory for the given scope (honors
162
+ * VIBE_HOME at user scope)
163
+ *
164
+ * @param scope the configuration scope
165
+ */
166
+ const vibe_dir = (scope) => scope === types_1.Scope.USER
167
+ ? (0, path_1.resolve)(process.env.VIBE_HOME ?? (0, path_1.resolve)(user_home(), '.vibe'))
168
+ : (0, path_1.resolve)(process.cwd(), '.vibe');
169
+ exports.vibe_dir = vibe_dir;
170
+ /**
171
+ * Returns the Grok Build configuration directory for the given scope
172
+ *
173
+ * @param scope the configuration scope
174
+ */
175
+ const grok_dir = (scope) => scope === types_1.Scope.USER
176
+ ? (0, path_1.resolve)(user_home(), '.grok')
177
+ : (0, path_1.resolve)(process.cwd(), '.grok');
178
+ exports.grok_dir = grok_dir;
179
+ /**
180
+ * Returns the Trae configuration directory for the given scope
181
+ *
182
+ * @param scope the configuration scope
183
+ */
184
+ const trae_dir = (scope) => scope === types_1.Scope.USER
185
+ ? (0, path_1.resolve)(user_home(), '.trae')
186
+ : (0, path_1.resolve)(process.cwd(), '.trae');
187
+ exports.trae_dir = trae_dir;
188
+ /**
189
+ * Resolves the AGENTS.md a harness reads: its own user-level file at user
190
+ * scope, the shared repository-root AGENTS.md at project scope (where all
191
+ * AGENTS.md-reading harnesses dedupe into one marker block)
192
+ *
193
+ * @param scope the configuration scope
194
+ * @param user_file the harness's user-level instructions file
195
+ */
196
+ const agents_md_path = (scope, user_file) => scope === types_1.Scope.USER ? user_file : (0, path_1.resolve)(process.cwd(), 'AGENTS.md');
197
+ exports.agents_md_path = agents_md_path;
198
+ /**
199
+ * Returns the VS Code user profile directory per platform
200
+ */
201
+ const vscode_user_dir = () => {
202
+ if (process.platform === 'win32') {
203
+ return (0, path_1.resolve)(process.env.APPDATA ?? (0, path_1.resolve)(user_home(), 'AppData', 'Roaming'), 'Code', 'User');
204
+ }
205
+ if (process.platform === 'darwin') {
206
+ return (0, path_1.resolve)(user_home(), 'Library', 'Application Support', 'Code', 'User');
207
+ }
208
+ return (0, path_1.resolve)(xdg_config(), 'Code', 'User');
209
+ };
210
+ exports.vscode_user_dir = vscode_user_dir;
211
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/helpers/paths.ts"],"names":[],"mappings":"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"}