reeboot 1.0.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.
- package/README.md +361 -0
- package/container/Dockerfile +48 -0
- package/container/entrypoint.sh +8 -0
- package/dist/agent-runner/index.d.ts +9 -0
- package/dist/agent-runner/index.d.ts.map +1 -0
- package/dist/agent-runner/index.js +21 -0
- package/dist/agent-runner/index.js.map +1 -0
- package/dist/agent-runner/interface.d.ts +56 -0
- package/dist/agent-runner/interface.d.ts.map +1 -0
- package/dist/agent-runner/interface.js +5 -0
- package/dist/agent-runner/interface.js.map +1 -0
- package/dist/agent-runner/pi-runner.d.ts +41 -0
- package/dist/agent-runner/pi-runner.d.ts.map +1 -0
- package/dist/agent-runner/pi-runner.js +162 -0
- package/dist/agent-runner/pi-runner.js.map +1 -0
- package/dist/channels/interface.d.ts +63 -0
- package/dist/channels/interface.d.ts.map +1 -0
- package/dist/channels/interface.js +33 -0
- package/dist/channels/interface.js.map +1 -0
- package/dist/channels/registry.d.ts +30 -0
- package/dist/channels/registry.d.ts.map +1 -0
- package/dist/channels/registry.js +71 -0
- package/dist/channels/registry.js.map +1 -0
- package/dist/channels/signal.d.ts +51 -0
- package/dist/channels/signal.d.ts.map +1 -0
- package/dist/channels/signal.js +263 -0
- package/dist/channels/signal.js.map +1 -0
- package/dist/channels/web.d.ts +35 -0
- package/dist/channels/web.d.ts.map +1 -0
- package/dist/channels/web.js +65 -0
- package/dist/channels/web.js.map +1 -0
- package/dist/channels/whatsapp.d.ts +25 -0
- package/dist/channels/whatsapp.d.ts.map +1 -0
- package/dist/channels/whatsapp.js +150 -0
- package/dist/channels/whatsapp.js.map +1 -0
- package/dist/config.d.ts +366 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +140 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +69 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +166 -0
- package/dist/context.js.map +1 -0
- package/dist/credential-proxy.d.ts +25 -0
- package/dist/credential-proxy.d.ts.map +1 -0
- package/dist/credential-proxy.js +96 -0
- package/dist/credential-proxy.js.map +1 -0
- package/dist/daemon.d.ts +25 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/daemon.js +138 -0
- package/dist/daemon.js.map +1 -0
- package/dist/db/index.d.ts +23 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +113 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +408 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +55 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/doctor.d.ts +23 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +217 -0
- package/dist/doctor.js.map +1 -0
- package/dist/extensions/loader.d.ts +19 -0
- package/dist/extensions/loader.d.ts.map +1 -0
- package/dist/extensions/loader.js +124 -0
- package/dist/extensions/loader.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +561 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator.d.ts +60 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +313 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/packages.d.ts +21 -0
- package/dist/packages.d.ts.map +1 -0
- package/dist/packages.js +116 -0
- package/dist/packages.js.map +1 -0
- package/dist/scheduler-registry.d.ts +8 -0
- package/dist/scheduler-registry.d.ts.map +1 -0
- package/dist/scheduler-registry.js +14 -0
- package/dist/scheduler-registry.js.map +1 -0
- package/dist/scheduler.d.ts +60 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +143 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/server.d.ts +18 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +489 -0
- package/dist/server.js.map +1 -0
- package/dist/setup-wizard.d.ts +12 -0
- package/dist/setup-wizard.d.ts.map +1 -0
- package/dist/setup-wizard.js +163 -0
- package/dist/setup-wizard.js.map +1 -0
- package/extensions/confirm-destructive.ts +59 -0
- package/extensions/custom-compaction.ts +114 -0
- package/extensions/protected-paths.ts +30 -0
- package/extensions/sandbox/index.ts +317 -0
- package/extensions/sandbox/package-lock.json +92 -0
- package/extensions/sandbox/package.json +19 -0
- package/extensions/scheduler-tool.ts +65 -0
- package/extensions/session-name.ts +27 -0
- package/extensions/token-meter.ts +55 -0
- package/package.json +68 -0
- package/skills/send-message/SKILL.md +27 -0
- package/skills/web-search/SKILL.md +32 -0
- package/templates/global-agents.md +23 -0
- package/templates/main-agents.md +28 -0
- package/webchat/index.html +421 -0
package/dist/doctor.js
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor — comprehensive pre-flight diagnostics
|
|
3
|
+
*
|
|
4
|
+
* Each check returns a CheckResult with status ✓/✗/⚠.
|
|
5
|
+
* Exit code 0 if all pass/warn, 1 if any fail.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'child_process';
|
|
8
|
+
import { statfsSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
import { homedir } from 'os';
|
|
11
|
+
// ─── Formatting ───────────────────────────────────────────────────────────────
|
|
12
|
+
export function formatResult(result) {
|
|
13
|
+
const icon = result.status === 'pass' ? '✓' :
|
|
14
|
+
result.status === 'fail' ? '✗' :
|
|
15
|
+
result.status === 'warn' ? '⚠' : '–';
|
|
16
|
+
const line = `${icon} ${result.name}: ${result.message}`;
|
|
17
|
+
return result.fix ? `${line} → Fix: ${result.fix}` : line;
|
|
18
|
+
}
|
|
19
|
+
export function doctorExitCode(results) {
|
|
20
|
+
return results.some(r => r.status === 'fail') ? 1 : 0;
|
|
21
|
+
}
|
|
22
|
+
// ─── Individual checks ────────────────────────────────────────────────────────
|
|
23
|
+
async function checkConfig(configPath) {
|
|
24
|
+
try {
|
|
25
|
+
const { loadConfig } = await import('./config.js');
|
|
26
|
+
loadConfig(configPath);
|
|
27
|
+
return { name: 'Config', status: 'pass', message: 'valid' };
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
return {
|
|
31
|
+
name: 'Config',
|
|
32
|
+
status: 'fail',
|
|
33
|
+
message: String(err.message ?? err),
|
|
34
|
+
fix: `edit ${configPath}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function checkExtensions(reebotDir) {
|
|
39
|
+
// Attempt to load the loader without crashing
|
|
40
|
+
try {
|
|
41
|
+
// Just verify the extensions directory is accessible
|
|
42
|
+
const extDir = join(reebotDir, 'extensions');
|
|
43
|
+
// No crash = pass
|
|
44
|
+
return {
|
|
45
|
+
name: 'Extensions',
|
|
46
|
+
status: 'pass',
|
|
47
|
+
message: 'loader accessible',
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
return {
|
|
52
|
+
name: 'Extensions',
|
|
53
|
+
status: 'fail',
|
|
54
|
+
message: String(err.message),
|
|
55
|
+
fix: 'Check extension files for syntax errors',
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function checkApiKey(configPath, skipNetwork) {
|
|
60
|
+
if (skipNetwork) {
|
|
61
|
+
return {
|
|
62
|
+
name: 'API key',
|
|
63
|
+
status: 'warn',
|
|
64
|
+
message: 'skipped (network checks disabled)',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
let config;
|
|
68
|
+
try {
|
|
69
|
+
const { loadConfig } = await import('./config.js');
|
|
70
|
+
config = loadConfig(configPath);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return {
|
|
74
|
+
name: 'API key',
|
|
75
|
+
status: 'warn',
|
|
76
|
+
message: 'skipped (config failed to load)',
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
const provider = config.agent?.model?.provider ?? '';
|
|
80
|
+
const apiKey = config.agent?.model?.apiKey ?? '';
|
|
81
|
+
if (!apiKey) {
|
|
82
|
+
return {
|
|
83
|
+
name: 'API key',
|
|
84
|
+
status: 'fail',
|
|
85
|
+
message: 'not configured',
|
|
86
|
+
fix: "run 'reeboot setup' to set your API key",
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (provider === 'anthropic') {
|
|
90
|
+
try {
|
|
91
|
+
const res = await fetch('https://api.anthropic.com/v1/models', {
|
|
92
|
+
headers: {
|
|
93
|
+
'x-api-key': apiKey,
|
|
94
|
+
'anthropic-version': '2023-06-01',
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
if (res.status === 401) {
|
|
98
|
+
return {
|
|
99
|
+
name: 'API key',
|
|
100
|
+
status: 'fail',
|
|
101
|
+
message: 'invalid (401 Unauthorized)',
|
|
102
|
+
fix: "run 'reeboot setup' to update your API key",
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
if (res.ok) {
|
|
106
|
+
return { name: 'API key', status: 'pass', message: `valid (${provider})` };
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
name: 'API key',
|
|
110
|
+
status: 'warn',
|
|
111
|
+
message: `HTTP ${res.status} — could not verify`,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
return {
|
|
116
|
+
name: 'API key',
|
|
117
|
+
status: 'warn',
|
|
118
|
+
message: `network error: ${err.message}`,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
name: 'API key',
|
|
124
|
+
status: 'warn',
|
|
125
|
+
message: `configured (${provider}) — live validation not yet supported for this provider`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
async function checkSignalDocker(configPath, skipNetwork) {
|
|
129
|
+
// Only check if Signal is configured
|
|
130
|
+
let config;
|
|
131
|
+
try {
|
|
132
|
+
const { loadConfig } = await import('./config.js');
|
|
133
|
+
config = loadConfig(configPath);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return { name: 'Signal Docker', status: 'warn', message: 'skipped (config unavailable)' };
|
|
137
|
+
}
|
|
138
|
+
if (!config.channels?.signal?.enabled) {
|
|
139
|
+
return { name: 'Signal Docker', status: 'warn', message: 'not configured (signal channel disabled)' };
|
|
140
|
+
}
|
|
141
|
+
// Check Docker is available
|
|
142
|
+
try {
|
|
143
|
+
execSync('docker info', { stdio: ['pipe', 'pipe', 'pipe'] });
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return {
|
|
147
|
+
name: 'Signal Docker',
|
|
148
|
+
status: 'fail',
|
|
149
|
+
message: 'Docker not running',
|
|
150
|
+
fix: 'Install or start Docker',
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
if (skipNetwork) {
|
|
154
|
+
return { name: 'Signal Docker', status: 'warn', message: 'Docker running (version check skipped)' };
|
|
155
|
+
}
|
|
156
|
+
// Check running container version vs latest
|
|
157
|
+
try {
|
|
158
|
+
const runningOut = execSync('docker inspect signal-cli-rest-api --format "{{.Config.Image}}"', { stdio: ['pipe', 'pipe', 'pipe'] }).toString().trim();
|
|
159
|
+
const latestRes = await fetch('https://hub.docker.com/v2/repositories/bbernhard/signal-cli-rest-api/tags/latest');
|
|
160
|
+
if (!latestRes.ok) {
|
|
161
|
+
return { name: 'Signal Docker', status: 'warn', message: 'could not check latest version' };
|
|
162
|
+
}
|
|
163
|
+
return { name: 'Signal Docker', status: 'pass', message: `running (image: ${runningOut})` };
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return { name: 'Signal Docker', status: 'warn', message: 'container not running' };
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function checkDiskSpace(reebotDir) {
|
|
170
|
+
try {
|
|
171
|
+
const stats = statfsSync(reebotDir);
|
|
172
|
+
const freeBytes = stats.bfree * stats.bsize;
|
|
173
|
+
const freeMB = Math.floor(freeBytes / (1024 * 1024));
|
|
174
|
+
const freeGB = freeBytes / (1024 * 1024 * 1024);
|
|
175
|
+
if (freeBytes < 100 * 1024 * 1024) { // < 100MB
|
|
176
|
+
return {
|
|
177
|
+
name: 'Disk',
|
|
178
|
+
status: 'fail',
|
|
179
|
+
message: `critically low space (${freeMB}MB free)`,
|
|
180
|
+
fix: 'Free up disk space on the ~/.reeboot/ volume',
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (freeGB < 1) {
|
|
184
|
+
return {
|
|
185
|
+
name: 'Disk',
|
|
186
|
+
status: 'warn',
|
|
187
|
+
message: `low space (${freeMB}MB free)`,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
name: 'Disk',
|
|
192
|
+
status: 'pass',
|
|
193
|
+
message: `${freeGB.toFixed(1)}GB free`,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
return {
|
|
198
|
+
name: 'Disk',
|
|
199
|
+
status: 'warn',
|
|
200
|
+
message: `could not check disk space: ${err.message}`,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// ─── runDoctor ────────────────────────────────────────────────────────────────
|
|
205
|
+
export async function runDoctor(opts = {}) {
|
|
206
|
+
const reebotDir = opts.reebotDir ?? join(homedir(), '.reeboot');
|
|
207
|
+
const configPath = opts.configPath ?? join(reebotDir, 'config.json');
|
|
208
|
+
const skipNetwork = opts.skipNetwork ?? false;
|
|
209
|
+
const results = [];
|
|
210
|
+
results.push(await checkConfig(configPath));
|
|
211
|
+
results.push(await checkExtensions(reebotDir));
|
|
212
|
+
results.push(checkDiskSpace(reebotDir));
|
|
213
|
+
results.push(await checkApiKey(configPath, skipNetwork));
|
|
214
|
+
results.push(await checkSignalDocker(configPath, skipNetwork));
|
|
215
|
+
return results;
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension Loader
|
|
3
|
+
*
|
|
4
|
+
* Creates a DefaultResourceLoader for a given context, configured with:
|
|
5
|
+
* - agentDir: ~/.reeboot/ (global extensions, skills, prompts)
|
|
6
|
+
* - cwd: context.workspacePath (project-local .pi/ discovery)
|
|
7
|
+
* - extensionFactories: bundled extensions (always active unless toggled off)
|
|
8
|
+
* - additionalSkillPaths: bundled skills directory
|
|
9
|
+
*
|
|
10
|
+
* Bundled extension files live in <repoRoot>/extensions/ at the reeboot package root.
|
|
11
|
+
* The loader resolves them relative to this source file's compiled location.
|
|
12
|
+
*/
|
|
13
|
+
import { type ResourceLoader } from '@mariozechner/pi-coding-agent';
|
|
14
|
+
import type { ExtensionFactory } from '@mariozechner/pi-coding-agent';
|
|
15
|
+
import type { Config } from '../config.js';
|
|
16
|
+
import type { ContextConfig } from '../agent-runner/interface.js';
|
|
17
|
+
export declare function getBundledFactories(config: Config): ExtensionFactory[];
|
|
18
|
+
export declare function createLoader(context: ContextConfig, config: Config): ResourceLoader;
|
|
19
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAyB,KAAK,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAItE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAclE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAmFtE;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAkBnF"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension Loader
|
|
3
|
+
*
|
|
4
|
+
* Creates a DefaultResourceLoader for a given context, configured with:
|
|
5
|
+
* - agentDir: ~/.reeboot/ (global extensions, skills, prompts)
|
|
6
|
+
* - cwd: context.workspacePath (project-local .pi/ discovery)
|
|
7
|
+
* - extensionFactories: bundled extensions (always active unless toggled off)
|
|
8
|
+
* - additionalSkillPaths: bundled skills directory
|
|
9
|
+
*
|
|
10
|
+
* Bundled extension files live in <repoRoot>/extensions/ at the reeboot package root.
|
|
11
|
+
* The loader resolves them relative to this source file's compiled location.
|
|
12
|
+
*/
|
|
13
|
+
import { DefaultResourceLoader } from '@mariozechner/pi-coding-agent';
|
|
14
|
+
import { homedir } from 'os';
|
|
15
|
+
import { join, dirname, resolve } from 'path';
|
|
16
|
+
import { fileURLToPath } from 'url';
|
|
17
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
18
|
+
// Resolve the extensions/ and skills/ directories at the reeboot package root
|
|
19
|
+
// Compiled output is at dist/ so we go up two levels: dist/extensions/ → dist/ → reeboot/ then across to extensions/
|
|
20
|
+
const PACKAGE_ROOT = resolve(__dirname, '../../');
|
|
21
|
+
const BUNDLED_EXTENSIONS_DIR = join(PACKAGE_ROOT, 'extensions');
|
|
22
|
+
const BUNDLED_SKILLS_DIR = join(PACKAGE_ROOT, 'skills');
|
|
23
|
+
// ─── getBundledFactories ─────────────────────────────────────────────────────
|
|
24
|
+
// Returns the list of bundled ExtensionFactory functions based on config toggles.
|
|
25
|
+
// Exported for testing.
|
|
26
|
+
export function getBundledFactories(config) {
|
|
27
|
+
const core = config?.extensions?.core ?? {};
|
|
28
|
+
// Defaults (matching ConfigSchema defaults)
|
|
29
|
+
const sandboxEnabled = core.sandbox ?? true;
|
|
30
|
+
const confirmEnabled = core.confirm_destructive ?? true;
|
|
31
|
+
const protectedEnabled = core.protected_paths ?? true;
|
|
32
|
+
const gitCheckpointEnabled = core.git_checkpoint ?? false;
|
|
33
|
+
const sessionNameEnabled = core.session_name ?? true;
|
|
34
|
+
const compactionEnabled = core.custom_compaction ?? true;
|
|
35
|
+
const schedulerEnabled = core.scheduler_tool ?? true;
|
|
36
|
+
const tokenMeterEnabled = core.token_meter ?? true;
|
|
37
|
+
const factories = [];
|
|
38
|
+
// Note: sandbox requires its own npm install (has a package.json).
|
|
39
|
+
// We load it as a factory only when enabled AND its index.ts is resolvable.
|
|
40
|
+
// In test environments we skip sandbox gracefully.
|
|
41
|
+
if (sandboxEnabled) {
|
|
42
|
+
factories.push((pi) => {
|
|
43
|
+
// Lazy-load so missing deps don't break startup in CI / test
|
|
44
|
+
const sandboxPath = join(BUNDLED_EXTENSIONS_DIR, 'sandbox', 'index.ts');
|
|
45
|
+
try {
|
|
46
|
+
// Extensions are loaded by DefaultResourceLoader as file paths; we register
|
|
47
|
+
// a no-op factory here and let the loader discover the file-based extension.
|
|
48
|
+
// For inline factory we just return undefined (sandbox handles itself via additionalExtensionPaths).
|
|
49
|
+
}
|
|
50
|
+
catch { /* skip */ }
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
// Simple file-based extensions registered as inline factories for reliability.
|
|
54
|
+
// We use dynamic import factories so TypeScript strict mode is satisfied.
|
|
55
|
+
if (confirmEnabled) {
|
|
56
|
+
factories.push(async (pi) => {
|
|
57
|
+
const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'confirm-destructive.ts')).catch(() => null);
|
|
58
|
+
if (mod?.default)
|
|
59
|
+
mod.default(pi);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (protectedEnabled) {
|
|
63
|
+
factories.push(async (pi) => {
|
|
64
|
+
const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'protected-paths.ts')).catch(() => null);
|
|
65
|
+
if (mod?.default)
|
|
66
|
+
mod.default(pi);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
if (sessionNameEnabled) {
|
|
70
|
+
factories.push(async (pi) => {
|
|
71
|
+
const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'session-name.ts')).catch(() => null);
|
|
72
|
+
if (mod?.default)
|
|
73
|
+
mod.default(pi);
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
if (compactionEnabled) {
|
|
77
|
+
factories.push(async (pi) => {
|
|
78
|
+
const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'custom-compaction.ts')).catch(() => null);
|
|
79
|
+
if (mod?.default)
|
|
80
|
+
mod.default(pi);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (gitCheckpointEnabled) {
|
|
84
|
+
factories.push(async (pi) => {
|
|
85
|
+
const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'git-checkpoint.ts')).catch(() => null);
|
|
86
|
+
if (mod?.default)
|
|
87
|
+
mod.default(pi);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (schedulerEnabled) {
|
|
91
|
+
factories.push(async (pi) => {
|
|
92
|
+
const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'scheduler-tool.ts')).catch(() => null);
|
|
93
|
+
if (mod?.default)
|
|
94
|
+
mod.default(pi);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
if (tokenMeterEnabled) {
|
|
98
|
+
factories.push(async (pi) => {
|
|
99
|
+
const mod = await import(join(BUNDLED_EXTENSIONS_DIR, 'token-meter.ts')).catch(() => null);
|
|
100
|
+
if (mod?.default)
|
|
101
|
+
mod.default(pi);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return factories;
|
|
105
|
+
}
|
|
106
|
+
// ─── createLoader ─────────────────────────────────────────────────────────────
|
|
107
|
+
export function createLoader(context, config) {
|
|
108
|
+
const agentDir = join(homedir(), '.reeboot');
|
|
109
|
+
const extensionFactories = getBundledFactories(config);
|
|
110
|
+
// For sandbox, use additionalExtensionPaths so DefaultResourceLoader handles it
|
|
111
|
+
const additionalExtensionPaths = [];
|
|
112
|
+
const core = config?.extensions?.core ?? {};
|
|
113
|
+
if (core.sandbox ?? true) {
|
|
114
|
+
additionalExtensionPaths.push(join(BUNDLED_EXTENSIONS_DIR, 'sandbox', 'index.ts'));
|
|
115
|
+
}
|
|
116
|
+
return new DefaultResourceLoader({
|
|
117
|
+
cwd: context.workspacePath,
|
|
118
|
+
agentDir,
|
|
119
|
+
extensionFactories,
|
|
120
|
+
additionalExtensionPaths,
|
|
121
|
+
additionalSkillPaths: [BUNDLED_SKILLS_DIR],
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/extensions/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|