@renseiai/agentfactory 0.8.29 → 0.8.31
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/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/merge-queue/lock-file-regeneration.d.ts +2 -1
- package/dist/src/merge-queue/lock-file-regeneration.d.ts.map +1 -1
- package/dist/src/merge-queue/lock-file-regeneration.js +9 -19
- package/dist/src/orchestrator/orchestrator.d.ts +11 -3
- package/dist/src/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/src/orchestrator/orchestrator.js +145 -48
- package/dist/src/package-manager.d.ts +24 -0
- package/dist/src/package-manager.d.ts.map +1 -0
- package/dist/src/package-manager.js +86 -0
- package/dist/src/package-manager.test.d.ts +2 -0
- package/dist/src/package-manager.test.d.ts.map +1 -0
- package/dist/src/package-manager.test.js +51 -0
- package/dist/src/providers/claude-provider.d.ts.map +1 -1
- package/dist/src/providers/claude-provider.js +9 -1
- package/dist/src/providers/types.d.ts +1 -6
- package/dist/src/providers/types.d.ts.map +1 -1
- package/dist/src/templates/types.d.ts +2 -0
- package/dist/src/templates/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { type PackageManager } from '../package-manager.js';
|
|
2
|
+
export type { PackageManager } from '../package-manager.js';
|
|
2
3
|
export interface RegenerationResult {
|
|
3
4
|
success: boolean;
|
|
4
5
|
lockFile: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lock-file-regeneration.d.ts","sourceRoot":"","sources":["../../../src/merge-queue/lock-file-regeneration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"lock-file-regeneration.d.ts","sourceRoot":"","sources":["../../../src/merge-queue/lock-file-regeneration.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,uBAAuB,CAAA;AAK9B,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE3D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,cAAc,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,oBAAoB;IAC/B,gBAAgB,CAAC,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,OAAO,GAAG,OAAO;IAItF,eAAe,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI;IAKxD,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuC7F,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CAwB3F"}
|
|
@@ -2,30 +2,15 @@ import { exec as execCb } from 'child_process';
|
|
|
2
2
|
import { promisify } from 'util';
|
|
3
3
|
import { readFile, writeFile, access } from 'fs/promises';
|
|
4
4
|
import { join } from 'path';
|
|
5
|
+
import { LOCK_FILES, GITATTRIBUTES_ENTRIES, getRegenerateCommand, } from '../package-manager.js';
|
|
5
6
|
const exec = promisify(execCb);
|
|
6
|
-
const LOCK_FILES = {
|
|
7
|
-
pnpm: 'pnpm-lock.yaml',
|
|
8
|
-
npm: 'package-lock.json',
|
|
9
|
-
yarn: 'yarn.lock',
|
|
10
|
-
bun: 'bun.lockb',
|
|
11
|
-
};
|
|
12
|
-
const INSTALL_COMMANDS = {
|
|
13
|
-
pnpm: 'pnpm install --no-frozen-lockfile',
|
|
14
|
-
npm: 'npm install',
|
|
15
|
-
yarn: 'yarn install',
|
|
16
|
-
bun: 'bun install',
|
|
17
|
-
};
|
|
18
|
-
const GITATTRIBUTES_ENTRIES = {
|
|
19
|
-
pnpm: 'pnpm-lock.yaml merge=ours',
|
|
20
|
-
npm: 'package-lock.json merge=ours',
|
|
21
|
-
yarn: 'yarn.lock merge=ours',
|
|
22
|
-
bun: 'bun.lockb merge=ours',
|
|
23
|
-
};
|
|
24
7
|
export class LockFileRegeneration {
|
|
25
8
|
shouldRegenerate(packageManager, lockFileRegenerate) {
|
|
26
9
|
return lockFileRegenerate && packageManager !== 'none';
|
|
27
10
|
}
|
|
28
11
|
getLockFileName(packageManager) {
|
|
12
|
+
if (packageManager === 'none')
|
|
13
|
+
return null;
|
|
29
14
|
return LOCK_FILES[packageManager] ?? null;
|
|
30
15
|
}
|
|
31
16
|
async regenerate(worktreePath, packageManager) {
|
|
@@ -33,7 +18,10 @@ export class LockFileRegeneration {
|
|
|
33
18
|
if (!lockFile) {
|
|
34
19
|
return { success: false, lockFile: '', packageManager, error: `Unsupported package manager: ${packageManager}` };
|
|
35
20
|
}
|
|
36
|
-
const installCommand =
|
|
21
|
+
const installCommand = getRegenerateCommand(packageManager);
|
|
22
|
+
if (!installCommand) {
|
|
23
|
+
return { success: false, lockFile: '', packageManager, error: `No install command for: ${packageManager}` };
|
|
24
|
+
}
|
|
37
25
|
try {
|
|
38
26
|
// 1. Delete the conflicted lock file (if it exists)
|
|
39
27
|
const lockFilePath = join(worktreePath, lockFile);
|
|
@@ -60,6 +48,8 @@ export class LockFileRegeneration {
|
|
|
60
48
|
}
|
|
61
49
|
}
|
|
62
50
|
async ensureGitAttributes(repoPath, packageManager) {
|
|
51
|
+
if (packageManager === 'none')
|
|
52
|
+
return;
|
|
63
53
|
const entry = GITATTRIBUTES_ENTRIES[packageManager];
|
|
64
54
|
if (!entry)
|
|
65
55
|
return;
|
|
@@ -234,6 +234,14 @@ export declare class AgentOrchestrator {
|
|
|
234
234
|
* node_modules first, then running `pnpm add` with the guard bypass.
|
|
235
235
|
*/
|
|
236
236
|
private writeWorktreeHelpers;
|
|
237
|
+
/**
|
|
238
|
+
* Bootstrap worktree dependencies from origin/main.
|
|
239
|
+
* Ensures the lockfile and root package.json in the worktree match the latest
|
|
240
|
+
* remote main, not the (potentially stale) local main the worktree branched from.
|
|
241
|
+
* Framework-neutral: uses getLockFileName() to resolve the correct lockfile.
|
|
242
|
+
* No-op for packageManager 'none'.
|
|
243
|
+
*/
|
|
244
|
+
private bootstrapWorktreeDeps;
|
|
237
245
|
/**
|
|
238
246
|
* Configure mergiraf as the git merge driver in a worktree.
|
|
239
247
|
* Uses worktree-local git config so mergiraf only runs in agent worktrees.
|
|
@@ -260,9 +268,9 @@ export declare class AgentOrchestrator {
|
|
|
260
268
|
* resolving through a directory-level symlink and corrupting the main
|
|
261
269
|
* repo's node_modules when an agent accidentally runs `pnpm install`.
|
|
262
270
|
*
|
|
263
|
-
* For non-Node repos (
|
|
271
|
+
* For non-Node repos (packageManager 'none' or no node_modules), this is a no-op.
|
|
264
272
|
*
|
|
265
|
-
* Falls back to
|
|
273
|
+
* Falls back to install via the configured package manager if symlinking fails.
|
|
266
274
|
*/
|
|
267
275
|
linkDependencies(worktreePath: string, identifier: string): void;
|
|
268
276
|
/**
|
|
@@ -294,7 +302,7 @@ export declare class AgentOrchestrator {
|
|
|
294
302
|
*/
|
|
295
303
|
private linkNodeModulesContents;
|
|
296
304
|
/**
|
|
297
|
-
* Fallback: install dependencies via
|
|
305
|
+
* Fallback: install dependencies via the configured package manager.
|
|
298
306
|
* Only called when symlinking fails.
|
|
299
307
|
*/
|
|
300
308
|
private installDependencies;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmCH,OAAO,KAAK,EAAE,aAAa,EAA0B,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ import { createLogger } from '../logger.js';
|
|
|
25
25
|
import { TemplateRegistry, CodexToolPermissionAdapter, createToolPermissionAdapter } from '../templates/index.js';
|
|
26
26
|
import { loadRepositoryConfig, getProjectConfig, getProvidersConfig } from '../config/index.js';
|
|
27
27
|
import { ToolRegistry } from '../tools/index.js';
|
|
28
|
+
import { getLockFileName, getInstallCommand, getAddCommand } from '../package-manager.js';
|
|
28
29
|
import { createMergeQueueAdapter } from '../merge-queue/index.js';
|
|
29
30
|
// Default inactivity timeout: 5 minutes
|
|
30
31
|
const DEFAULT_INACTIVITY_TIMEOUT_MS = 300000;
|
|
@@ -1623,10 +1624,24 @@ export class AgentOrchestrator {
|
|
|
1623
1624
|
}
|
|
1624
1625
|
}
|
|
1625
1626
|
console.log(`Creating worktree: ${worktreePath} (branch: ${branchName})`);
|
|
1626
|
-
//
|
|
1627
|
-
//
|
|
1628
|
-
|
|
1629
|
-
|
|
1627
|
+
// Fetch latest main from remote so worktrees start with current deps/lockfiles.
|
|
1628
|
+
// Non-fatal: offline/CI environments may not have network access.
|
|
1629
|
+
let hasRemoteMain = false;
|
|
1630
|
+
try {
|
|
1631
|
+
execSync('git fetch origin main', {
|
|
1632
|
+
stdio: 'pipe',
|
|
1633
|
+
encoding: 'utf-8',
|
|
1634
|
+
cwd: this.gitRoot,
|
|
1635
|
+
timeout: 30_000,
|
|
1636
|
+
});
|
|
1637
|
+
hasRemoteMain = true;
|
|
1638
|
+
}
|
|
1639
|
+
catch {
|
|
1640
|
+
console.warn('Failed to fetch origin/main — proceeding with local main');
|
|
1641
|
+
}
|
|
1642
|
+
// Base new feature branches on origin/main (latest remote) when available,
|
|
1643
|
+
// falling back to local main for offline environments.
|
|
1644
|
+
const baseBranch = hasRemoteMain ? 'origin/main' : 'main';
|
|
1630
1645
|
// Try to create worktree with new branch
|
|
1631
1646
|
// Uses a two-attempt strategy: if a branch conflict is detected and the
|
|
1632
1647
|
// conflicting worktree's agent is no longer alive, clean it up and retry once.
|
|
@@ -1720,6 +1735,8 @@ export class AgentOrchestrator {
|
|
|
1720
1735
|
this.writeWorktreeHelpers(worktreePath);
|
|
1721
1736
|
// Configure mergiraf merge driver if enabled
|
|
1722
1737
|
this.configureMergiraf(worktreePath);
|
|
1738
|
+
// Bootstrap lockfile and package.json from origin/main
|
|
1739
|
+
this.bootstrapWorktreeDeps(worktreePath);
|
|
1723
1740
|
// Capture quality baseline for delta checking (runs test/typecheck on main)
|
|
1724
1741
|
if (this.isQualityBaselineEnabled()) {
|
|
1725
1742
|
try {
|
|
@@ -1792,15 +1809,16 @@ export class AgentOrchestrator {
|
|
|
1792
1809
|
* node_modules first, then running `pnpm add` with the guard bypass.
|
|
1793
1810
|
*/
|
|
1794
1811
|
writeWorktreeHelpers(worktreePath) {
|
|
1795
|
-
|
|
1796
|
-
|
|
1812
|
+
const pm = (this.packageManager ?? 'pnpm');
|
|
1813
|
+
// Skip helper scripts for non-Node projects
|
|
1814
|
+
if (pm === 'none')
|
|
1797
1815
|
return;
|
|
1798
|
-
}
|
|
1816
|
+
const addCmd = getAddCommand(pm) ?? `${pm} add`;
|
|
1799
1817
|
const agentDir = resolve(worktreePath, '.agent');
|
|
1800
1818
|
const scriptPath = resolve(agentDir, 'add-dep.sh');
|
|
1801
1819
|
const script = `#!/bin/bash
|
|
1802
1820
|
# Safe dependency addition for agents in worktrees.
|
|
1803
|
-
# Removes symlinked node_modules, then runs
|
|
1821
|
+
# Removes symlinked node_modules, then runs ${addCmd} with guard bypass.
|
|
1804
1822
|
# Usage: bash .agent/add-dep.sh <package> [--filter <workspace>]
|
|
1805
1823
|
set -e
|
|
1806
1824
|
if [ $# -eq 0 ]; then
|
|
@@ -1812,8 +1830,8 @@ rm -rf node_modules
|
|
|
1812
1830
|
for subdir in apps packages; do
|
|
1813
1831
|
[ -d "$subdir" ] && find "$subdir" -maxdepth 2 -name node_modules -type d -exec rm -rf {} + 2>/dev/null || true
|
|
1814
1832
|
done
|
|
1815
|
-
echo "Installing:
|
|
1816
|
-
ORCHESTRATOR_INSTALL=1 exec
|
|
1833
|
+
echo "Installing: ${addCmd} $@"
|
|
1834
|
+
ORCHESTRATOR_INSTALL=1 exec ${addCmd} "$@"
|
|
1817
1835
|
`;
|
|
1818
1836
|
try {
|
|
1819
1837
|
if (!existsSync(agentDir)) {
|
|
@@ -1826,6 +1844,47 @@ ORCHESTRATOR_INSTALL=1 exec pnpm add "$@"
|
|
|
1826
1844
|
console.warn(`Failed to write worktree helper scripts: ${error instanceof Error ? error.message : String(error)}`);
|
|
1827
1845
|
}
|
|
1828
1846
|
}
|
|
1847
|
+
/**
|
|
1848
|
+
* Bootstrap worktree dependencies from origin/main.
|
|
1849
|
+
* Ensures the lockfile and root package.json in the worktree match the latest
|
|
1850
|
+
* remote main, not the (potentially stale) local main the worktree branched from.
|
|
1851
|
+
* Framework-neutral: uses getLockFileName() to resolve the correct lockfile.
|
|
1852
|
+
* No-op for packageManager 'none'.
|
|
1853
|
+
*/
|
|
1854
|
+
bootstrapWorktreeDeps(worktreePath) {
|
|
1855
|
+
const pm = (this.packageManager ?? 'pnpm');
|
|
1856
|
+
if (pm === 'none')
|
|
1857
|
+
return;
|
|
1858
|
+
const lockFile = getLockFileName(pm);
|
|
1859
|
+
if (!lockFile)
|
|
1860
|
+
return;
|
|
1861
|
+
// Copy lockfile from origin/main into the worktree
|
|
1862
|
+
try {
|
|
1863
|
+
const originLockContent = execSync(`git show origin/main:${lockFile}`, {
|
|
1864
|
+
encoding: 'utf-8',
|
|
1865
|
+
cwd: this.gitRoot,
|
|
1866
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
1867
|
+
timeout: 10_000,
|
|
1868
|
+
});
|
|
1869
|
+
writeFileSync(resolve(worktreePath, lockFile), originLockContent);
|
|
1870
|
+
}
|
|
1871
|
+
catch {
|
|
1872
|
+
// Lockfile may not exist on origin/main (new repo) or fetch failed — skip
|
|
1873
|
+
}
|
|
1874
|
+
// Copy root package.json from origin/main
|
|
1875
|
+
try {
|
|
1876
|
+
const originPkgContent = execSync('git show origin/main:package.json', {
|
|
1877
|
+
encoding: 'utf-8',
|
|
1878
|
+
cwd: this.gitRoot,
|
|
1879
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
1880
|
+
timeout: 10_000,
|
|
1881
|
+
});
|
|
1882
|
+
writeFileSync(resolve(worktreePath, 'package.json'), originPkgContent);
|
|
1883
|
+
}
|
|
1884
|
+
catch {
|
|
1885
|
+
// Skip if not found
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1829
1888
|
/**
|
|
1830
1889
|
* Configure mergiraf as the git merge driver in a worktree.
|
|
1831
1890
|
* Uses worktree-local git config so mergiraf only runs in agent worktrees.
|
|
@@ -1943,11 +2002,14 @@ ORCHESTRATOR_INSTALL=1 exec pnpm add "$@"
|
|
|
1943
2002
|
* resolving through a directory-level symlink and corrupting the main
|
|
1944
2003
|
* repo's node_modules when an agent accidentally runs `pnpm install`.
|
|
1945
2004
|
*
|
|
1946
|
-
* For non-Node repos (
|
|
2005
|
+
* For non-Node repos (packageManager 'none' or no node_modules), this is a no-op.
|
|
1947
2006
|
*
|
|
1948
|
-
* Falls back to
|
|
2007
|
+
* Falls back to install via the configured package manager if symlinking fails.
|
|
1949
2008
|
*/
|
|
1950
2009
|
linkDependencies(worktreePath, identifier) {
|
|
2010
|
+
const pm = (this.packageManager ?? 'pnpm');
|
|
2011
|
+
if (pm === 'none')
|
|
2012
|
+
return;
|
|
1951
2013
|
// Use the main repo root (set at construction from process.cwd()) for node_modules.
|
|
1952
2014
|
// Worktrees are sibling directories that don't contain node_modules.
|
|
1953
2015
|
const repoRoot = this.gitRoot ?? resolveMainRepoRoot(worktreePath) ?? findRepoRoot(worktreePath);
|
|
@@ -2036,12 +2098,14 @@ ORCHESTRATOR_INSTALL=1 exec pnpm add "$@"
|
|
|
2036
2098
|
return false;
|
|
2037
2099
|
// Sentinel packages that should always be present in a Node.js project
|
|
2038
2100
|
const sentinels = ['typescript'];
|
|
2039
|
-
// Also check for .modules.yaml (pnpm store metadata) if
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
|
|
2043
|
-
|
|
2044
|
-
|
|
2101
|
+
// Also check for .modules.yaml (pnpm store metadata) if using pnpm
|
|
2102
|
+
if ((this.packageManager ?? 'pnpm') === 'pnpm') {
|
|
2103
|
+
const repoRoot = findRepoRoot(worktreePath);
|
|
2104
|
+
if (repoRoot) {
|
|
2105
|
+
const pnpmMeta = resolve(repoRoot, 'node_modules', '.modules.yaml');
|
|
2106
|
+
if (existsSync(pnpmMeta)) {
|
|
2107
|
+
sentinels.push('.modules.yaml');
|
|
2108
|
+
}
|
|
2045
2109
|
}
|
|
2046
2110
|
}
|
|
2047
2111
|
for (const pkg of sentinels) {
|
|
@@ -2153,18 +2217,25 @@ ORCHESTRATOR_INSTALL=1 exec pnpm add "$@"
|
|
|
2153
2217
|
}
|
|
2154
2218
|
}
|
|
2155
2219
|
/**
|
|
2156
|
-
* Fallback: install dependencies via
|
|
2220
|
+
* Fallback: install dependencies via the configured package manager.
|
|
2157
2221
|
* Only called when symlinking fails.
|
|
2158
2222
|
*/
|
|
2159
2223
|
installDependencies(worktreePath, identifier) {
|
|
2160
|
-
|
|
2224
|
+
const pm = (this.packageManager ?? 'pnpm');
|
|
2225
|
+
if (pm === 'none')
|
|
2226
|
+
return;
|
|
2227
|
+
const frozenCmd = getInstallCommand(pm, true);
|
|
2228
|
+
const baseCmd = getInstallCommand(pm, false);
|
|
2229
|
+
if (!baseCmd)
|
|
2230
|
+
return;
|
|
2231
|
+
console.log(`[${identifier}] Installing dependencies via ${pm}...`);
|
|
2161
2232
|
// Remove any node_modules from a partial linkDependencies attempt
|
|
2162
2233
|
this.removeWorktreeNodeModules(worktreePath);
|
|
2163
2234
|
// Set ORCHESTRATOR_INSTALL=1 to bypass the preinstall guard script
|
|
2164
|
-
// that blocks
|
|
2235
|
+
// that blocks installs in worktrees (to prevent symlink corruption).
|
|
2165
2236
|
const installEnv = { ...process.env, ORCHESTRATOR_INSTALL: '1' };
|
|
2166
2237
|
try {
|
|
2167
|
-
execSync(
|
|
2238
|
+
execSync(`${frozenCmd ?? baseCmd} 2>&1`, {
|
|
2168
2239
|
cwd: worktreePath,
|
|
2169
2240
|
stdio: 'pipe',
|
|
2170
2241
|
encoding: 'utf-8',
|
|
@@ -2175,7 +2246,7 @@ ORCHESTRATOR_INSTALL=1 exec pnpm add "$@"
|
|
|
2175
2246
|
}
|
|
2176
2247
|
catch {
|
|
2177
2248
|
try {
|
|
2178
|
-
execSync(
|
|
2249
|
+
execSync(`${baseCmd} 2>&1`, {
|
|
2179
2250
|
cwd: worktreePath,
|
|
2180
2251
|
stdio: 'pipe',
|
|
2181
2252
|
encoding: 'utf-8',
|
|
@@ -2197,28 +2268,59 @@ ORCHESTRATOR_INSTALL=1 exec pnpm add "$@"
|
|
|
2197
2268
|
* updates the main repo's node_modules, then re-links into the worktree.
|
|
2198
2269
|
*/
|
|
2199
2270
|
syncDependencies(worktreePath, identifier) {
|
|
2271
|
+
const pm = (this.packageManager ?? 'pnpm');
|
|
2272
|
+
if (pm === 'none')
|
|
2273
|
+
return;
|
|
2200
2274
|
const repoRoot = this.gitRoot ?? resolveMainRepoRoot(worktreePath) ?? findRepoRoot(worktreePath);
|
|
2201
2275
|
if (!repoRoot) {
|
|
2202
2276
|
this.linkDependencies(worktreePath, identifier);
|
|
2203
2277
|
return;
|
|
2204
2278
|
}
|
|
2205
|
-
const
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2279
|
+
const lockFileName = getLockFileName(pm);
|
|
2280
|
+
if (!lockFileName) {
|
|
2281
|
+
this.linkDependencies(worktreePath, identifier);
|
|
2282
|
+
return;
|
|
2283
|
+
}
|
|
2284
|
+
const worktreeLock = resolve(worktreePath, lockFileName);
|
|
2285
|
+
const mainLock = resolve(repoRoot, lockFileName);
|
|
2286
|
+
// Detect behind-drift: worktree lockfile is stale vs origin/main
|
|
2287
|
+
// (main was bumped after this worktree was created or last synced)
|
|
2288
|
+
let behindDrift = false;
|
|
2289
|
+
try {
|
|
2290
|
+
const originLock = execSync(`git show origin/main:${lockFileName}`, {
|
|
2291
|
+
encoding: 'utf-8',
|
|
2292
|
+
cwd: this.gitRoot,
|
|
2293
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
2294
|
+
timeout: 10_000,
|
|
2295
|
+
});
|
|
2296
|
+
if (existsSync(worktreeLock)) {
|
|
2297
|
+
const wtContent = readFileSync(worktreeLock, 'utf-8');
|
|
2298
|
+
if (wtContent !== originLock) {
|
|
2299
|
+
console.log(`[${identifier}] Lockfile behind origin/main — updating worktree`);
|
|
2300
|
+
writeFileSync(worktreeLock, originLock);
|
|
2301
|
+
behindDrift = true;
|
|
2302
|
+
}
|
|
2303
|
+
}
|
|
2304
|
+
}
|
|
2305
|
+
catch {
|
|
2306
|
+
// git show failed (no remote, no lockfile on main) — skip behind-drift check
|
|
2307
|
+
}
|
|
2308
|
+
// Detect ahead-drift: worktree lockfile differs from main repo
|
|
2309
|
+
// (agent added/changed dependencies on the branch)
|
|
2310
|
+
let aheadDrift = false;
|
|
2210
2311
|
if (existsSync(worktreeLock) && existsSync(mainLock)) {
|
|
2211
2312
|
try {
|
|
2212
2313
|
const wtContent = readFileSync(worktreeLock, 'utf-8');
|
|
2213
2314
|
const mainContent = readFileSync(mainLock, 'utf-8');
|
|
2214
|
-
|
|
2315
|
+
aheadDrift = wtContent !== mainContent;
|
|
2215
2316
|
}
|
|
2216
2317
|
catch {
|
|
2217
2318
|
// If we can't read either file, proceed without sync
|
|
2218
2319
|
}
|
|
2219
2320
|
}
|
|
2220
|
-
if (
|
|
2221
|
-
|
|
2321
|
+
if (aheadDrift || behindDrift) {
|
|
2322
|
+
const driftType = behindDrift && aheadDrift ? 'bidirectional' : behindDrift ? 'behind-main' : 'ahead-of-main';
|
|
2323
|
+
console.log(`[${identifier}] Lockfile drift detected (${driftType}) — syncing main repo dependencies`);
|
|
2222
2324
|
try {
|
|
2223
2325
|
// Copy the worktree's lockfile to the main repo so install picks up new deps
|
|
2224
2326
|
copyFileSync(worktreeLock, mainLock);
|
|
@@ -2247,8 +2349,9 @@ ORCHESTRATOR_INSTALL=1 exec pnpm add "$@"
|
|
|
2247
2349
|
}
|
|
2248
2350
|
}
|
|
2249
2351
|
// Install in the main repo (not the worktree) to update node_modules
|
|
2352
|
+
const installCmd = getInstallCommand(pm, true) ?? `${pm} install`;
|
|
2250
2353
|
const installEnv = { ...process.env, ORCHESTRATOR_INSTALL: '1' };
|
|
2251
|
-
execSync(
|
|
2354
|
+
execSync(`${installCmd} 2>&1`, {
|
|
2252
2355
|
cwd: repoRoot,
|
|
2253
2356
|
stdio: 'pipe',
|
|
2254
2357
|
encoding: 'utf-8',
|
|
@@ -2370,6 +2473,7 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
2370
2473
|
projectPath: perProject?.path ?? this.projectPaths?.[projectName ?? ''],
|
|
2371
2474
|
sharedPaths: this.sharedPaths,
|
|
2372
2475
|
useToolPlugins: spawnProviderName === 'claude',
|
|
2476
|
+
hasCodeIntelligence: this.toolRegistry.getPlugins().some(p => p.name === 'af-code-intelligence'),
|
|
2373
2477
|
linearCli: this.linearCli ?? 'pnpm af-linear',
|
|
2374
2478
|
packageManager: perProject?.packageManager ?? this.packageManager ?? 'pnpm',
|
|
2375
2479
|
buildCommand: perProject?.buildCommand ?? this.buildCommand,
|
|
@@ -2565,13 +2669,12 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
2565
2669
|
env.WORKER_AUTH_TOKEN = this.config.apiActivityConfig.apiKey;
|
|
2566
2670
|
}
|
|
2567
2671
|
log.info('Starting agent via provider', { provider: spawnProviderName, source: providerSource, cwd: worktreePath ?? 'repo-root', workType, promptPreview: prompt.substring(0, 50) });
|
|
2568
|
-
// Create
|
|
2672
|
+
// Create stdio MCP server configs for tool plugins.
|
|
2673
|
+
// Stdio servers are used for all providers (Claude + Codex) so that
|
|
2674
|
+
// sub-agents spawned via the Agent tool inherit the tool servers.
|
|
2675
|
+
// In-process servers (createServers) only work for the top-level agent.
|
|
2569
2676
|
const toolPluginContext = { env, cwd: worktreePath ?? process.cwd() };
|
|
2570
|
-
const
|
|
2571
|
-
? this.toolRegistry.createServers(toolPluginContext)
|
|
2572
|
-
: undefined;
|
|
2573
|
-
// Create stdio MCP server configs for Codex provider (SUP-1744)
|
|
2574
|
-
const stdioServers = spawnProviderName === 'codex'
|
|
2677
|
+
const stdioServers = this.toolRegistry.getPlugins().length > 0
|
|
2575
2678
|
? this.toolRegistry.createStdioServerConfigs(toolPluginContext)
|
|
2576
2679
|
: undefined;
|
|
2577
2680
|
// Coordinators need significantly more turns than standard agents
|
|
@@ -2594,8 +2697,7 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
2594
2697
|
abortController,
|
|
2595
2698
|
autonomous: true,
|
|
2596
2699
|
sandboxEnabled: this.config.sandboxEnabled,
|
|
2597
|
-
|
|
2598
|
-
mcpToolNames: toolServers?.toolNames,
|
|
2700
|
+
mcpToolNames: stdioServers?.toolNames,
|
|
2599
2701
|
mcpStdioServers: stdioServers?.servers,
|
|
2600
2702
|
maxTurns,
|
|
2601
2703
|
baseInstructions: codexBaseInstructions,
|
|
@@ -4494,13 +4596,9 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
4494
4596
|
resuming: !!providerSessionId,
|
|
4495
4597
|
workType: workType ?? 'development',
|
|
4496
4598
|
});
|
|
4497
|
-
// Create tool
|
|
4599
|
+
// Create stdio MCP server configs for tool plugins (same as spawn path)
|
|
4498
4600
|
const toolPluginContext = { env, cwd: worktreePath ?? process.cwd() };
|
|
4499
|
-
const
|
|
4500
|
-
? this.toolRegistry.createServers(toolPluginContext)
|
|
4501
|
-
: undefined;
|
|
4502
|
-
// Create stdio MCP server configs for Codex provider (SUP-1744)
|
|
4503
|
-
const stdioServers = spawnProviderName === 'codex'
|
|
4601
|
+
const stdioServers = this.toolRegistry.getPlugins().length > 0
|
|
4504
4602
|
? this.toolRegistry.createStdioServerConfigs(toolPluginContext)
|
|
4505
4603
|
: undefined;
|
|
4506
4604
|
// Coordinators need significantly more turns than standard agents
|
|
@@ -4522,8 +4620,7 @@ You are running in an AgentFactory-managed worktree. Follow these rules strictly
|
|
|
4522
4620
|
abortController,
|
|
4523
4621
|
autonomous: true,
|
|
4524
4622
|
sandboxEnabled: this.config.sandboxEnabled,
|
|
4525
|
-
|
|
4526
|
-
mcpToolNames: toolServers?.toolNames,
|
|
4623
|
+
mcpToolNames: stdioServers?.toolNames,
|
|
4527
4624
|
mcpStdioServers: stdioServers?.servers,
|
|
4528
4625
|
maxTurns,
|
|
4529
4626
|
baseInstructions: codexBaseInstructions,
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared package manager constants and helpers.
|
|
3
|
+
*
|
|
4
|
+
* Used by the orchestrator (worktree bootstrap, dep sync, helper scripts),
|
|
5
|
+
* the merge queue (lockfile regeneration), and the CLI (af-add-dep).
|
|
6
|
+
*
|
|
7
|
+
* Framework-neutral: supports pnpm, npm, yarn, bun, and 'none' (non-Node projects).
|
|
8
|
+
*/
|
|
9
|
+
export type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun' | 'none';
|
|
10
|
+
export declare const LOCK_FILES: Record<Exclude<PackageManager, 'none'>, string>;
|
|
11
|
+
export declare const INSTALL_COMMANDS: Record<Exclude<PackageManager, 'none'>, string>;
|
|
12
|
+
export declare const ADD_COMMANDS: Record<Exclude<PackageManager, 'none'>, string>;
|
|
13
|
+
export declare const GITATTRIBUTES_ENTRIES: Record<Exclude<PackageManager, 'none'>, string>;
|
|
14
|
+
/** Get the lockfile name for a package manager, or null for 'none'. */
|
|
15
|
+
export declare function getLockFileName(pm: PackageManager): string | null;
|
|
16
|
+
/** Get the install command for a package manager, with optional frozen-lockfile flag. */
|
|
17
|
+
export declare function getInstallCommand(pm: PackageManager, frozen?: boolean): string | null;
|
|
18
|
+
/** Get the install command that explicitly allows lockfile regeneration. */
|
|
19
|
+
export declare function getRegenerateCommand(pm: PackageManager): string | null;
|
|
20
|
+
/** Get the "add package" command for a package manager. */
|
|
21
|
+
export declare function getAddCommand(pm: PackageManager): string | null;
|
|
22
|
+
/** Get the gitattributes merge=ours entry for a package manager's lockfile. */
|
|
23
|
+
export declare function getGitattributesEntry(pm: PackageManager): string | null;
|
|
24
|
+
//# sourceMappingURL=package-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/package-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;AAErE,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,CAKtE,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,CAK5E,CAAA;AAiBD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,CAKxE,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,CAKjF,CAAA;AAED,uEAAuE;AACvE,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASrF;AAED,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAMtE;AAED,2DAA2D;AAC3D,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,GAAG,IAAI,CAGvE"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared package manager constants and helpers.
|
|
3
|
+
*
|
|
4
|
+
* Used by the orchestrator (worktree bootstrap, dep sync, helper scripts),
|
|
5
|
+
* the merge queue (lockfile regeneration), and the CLI (af-add-dep).
|
|
6
|
+
*
|
|
7
|
+
* Framework-neutral: supports pnpm, npm, yarn, bun, and 'none' (non-Node projects).
|
|
8
|
+
*/
|
|
9
|
+
export const LOCK_FILES = {
|
|
10
|
+
pnpm: 'pnpm-lock.yaml',
|
|
11
|
+
npm: 'package-lock.json',
|
|
12
|
+
yarn: 'yarn.lock',
|
|
13
|
+
bun: 'bun.lockb',
|
|
14
|
+
};
|
|
15
|
+
export const INSTALL_COMMANDS = {
|
|
16
|
+
pnpm: 'pnpm install',
|
|
17
|
+
npm: 'npm install',
|
|
18
|
+
yarn: 'yarn install',
|
|
19
|
+
bun: 'bun install',
|
|
20
|
+
};
|
|
21
|
+
const FROZEN_FLAGS = {
|
|
22
|
+
pnpm: '--frozen-lockfile',
|
|
23
|
+
npm: '--ci',
|
|
24
|
+
yarn: '--frozen-lockfile',
|
|
25
|
+
bun: '--frozen-lockfile',
|
|
26
|
+
};
|
|
27
|
+
/** Explicit "allow lockfile changes" flags (for lockfile regeneration). */
|
|
28
|
+
const NO_FROZEN_FLAGS = {
|
|
29
|
+
pnpm: '--no-frozen-lockfile',
|
|
30
|
+
npm: null,
|
|
31
|
+
yarn: null,
|
|
32
|
+
bun: null,
|
|
33
|
+
};
|
|
34
|
+
export const ADD_COMMANDS = {
|
|
35
|
+
pnpm: 'pnpm add',
|
|
36
|
+
npm: 'npm install',
|
|
37
|
+
yarn: 'yarn add',
|
|
38
|
+
bun: 'bun add',
|
|
39
|
+
};
|
|
40
|
+
export const GITATTRIBUTES_ENTRIES = {
|
|
41
|
+
pnpm: 'pnpm-lock.yaml merge=ours',
|
|
42
|
+
npm: 'package-lock.json merge=ours',
|
|
43
|
+
yarn: 'yarn.lock merge=ours',
|
|
44
|
+
bun: 'bun.lockb merge=ours',
|
|
45
|
+
};
|
|
46
|
+
/** Get the lockfile name for a package manager, or null for 'none'. */
|
|
47
|
+
export function getLockFileName(pm) {
|
|
48
|
+
if (pm === 'none')
|
|
49
|
+
return null;
|
|
50
|
+
return LOCK_FILES[pm] ?? null;
|
|
51
|
+
}
|
|
52
|
+
/** Get the install command for a package manager, with optional frozen-lockfile flag. */
|
|
53
|
+
export function getInstallCommand(pm, frozen) {
|
|
54
|
+
if (pm === 'none')
|
|
55
|
+
return null;
|
|
56
|
+
const base = INSTALL_COMMANDS[pm];
|
|
57
|
+
if (!base)
|
|
58
|
+
return null;
|
|
59
|
+
if (frozen) {
|
|
60
|
+
const flag = FROZEN_FLAGS[pm];
|
|
61
|
+
return flag ? `${base} ${flag}` : base;
|
|
62
|
+
}
|
|
63
|
+
return base;
|
|
64
|
+
}
|
|
65
|
+
/** Get the install command that explicitly allows lockfile regeneration. */
|
|
66
|
+
export function getRegenerateCommand(pm) {
|
|
67
|
+
if (pm === 'none')
|
|
68
|
+
return null;
|
|
69
|
+
const base = INSTALL_COMMANDS[pm];
|
|
70
|
+
if (!base)
|
|
71
|
+
return null;
|
|
72
|
+
const flag = NO_FROZEN_FLAGS[pm];
|
|
73
|
+
return flag ? `${base} ${flag}` : base;
|
|
74
|
+
}
|
|
75
|
+
/** Get the "add package" command for a package manager. */
|
|
76
|
+
export function getAddCommand(pm) {
|
|
77
|
+
if (pm === 'none')
|
|
78
|
+
return null;
|
|
79
|
+
return ADD_COMMANDS[pm] ?? null;
|
|
80
|
+
}
|
|
81
|
+
/** Get the gitattributes merge=ours entry for a package manager's lockfile. */
|
|
82
|
+
export function getGitattributesEntry(pm) {
|
|
83
|
+
if (pm === 'none')
|
|
84
|
+
return null;
|
|
85
|
+
return GITATTRIBUTES_ENTRIES[pm] ?? null;
|
|
86
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-manager.test.d.ts","sourceRoot":"","sources":["../../src/package-manager.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { getLockFileName, getInstallCommand, getAddCommand, getGitattributesEntry, } from './package-manager.js';
|
|
3
|
+
describe('getLockFileName', () => {
|
|
4
|
+
it('returns correct lockfile for each package manager', () => {
|
|
5
|
+
expect(getLockFileName('pnpm')).toBe('pnpm-lock.yaml');
|
|
6
|
+
expect(getLockFileName('npm')).toBe('package-lock.json');
|
|
7
|
+
expect(getLockFileName('yarn')).toBe('yarn.lock');
|
|
8
|
+
expect(getLockFileName('bun')).toBe('bun.lockb');
|
|
9
|
+
});
|
|
10
|
+
it('returns null for none', () => {
|
|
11
|
+
expect(getLockFileName('none')).toBeNull();
|
|
12
|
+
});
|
|
13
|
+
});
|
|
14
|
+
describe('getInstallCommand', () => {
|
|
15
|
+
it('returns base install command without frozen flag', () => {
|
|
16
|
+
expect(getInstallCommand('pnpm')).toBe('pnpm install');
|
|
17
|
+
expect(getInstallCommand('npm')).toBe('npm install');
|
|
18
|
+
expect(getInstallCommand('yarn')).toBe('yarn install');
|
|
19
|
+
expect(getInstallCommand('bun')).toBe('bun install');
|
|
20
|
+
});
|
|
21
|
+
it('returns frozen install command when frozen is true', () => {
|
|
22
|
+
expect(getInstallCommand('pnpm', true)).toBe('pnpm install --frozen-lockfile');
|
|
23
|
+
expect(getInstallCommand('npm', true)).toBe('npm install --ci');
|
|
24
|
+
expect(getInstallCommand('yarn', true)).toBe('yarn install --frozen-lockfile');
|
|
25
|
+
expect(getInstallCommand('bun', true)).toBe('bun install --frozen-lockfile');
|
|
26
|
+
});
|
|
27
|
+
it('returns null for none', () => {
|
|
28
|
+
expect(getInstallCommand('none')).toBeNull();
|
|
29
|
+
expect(getInstallCommand('none', true)).toBeNull();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
describe('getAddCommand', () => {
|
|
33
|
+
it('returns correct add command for each package manager', () => {
|
|
34
|
+
expect(getAddCommand('pnpm')).toBe('pnpm add');
|
|
35
|
+
expect(getAddCommand('npm')).toBe('npm install');
|
|
36
|
+
expect(getAddCommand('yarn')).toBe('yarn add');
|
|
37
|
+
expect(getAddCommand('bun')).toBe('bun add');
|
|
38
|
+
});
|
|
39
|
+
it('returns null for none', () => {
|
|
40
|
+
expect(getAddCommand('none')).toBeNull();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('getGitattributesEntry', () => {
|
|
44
|
+
it('returns correct gitattributes entry for each package manager', () => {
|
|
45
|
+
expect(getGitattributesEntry('pnpm')).toBe('pnpm-lock.yaml merge=ours');
|
|
46
|
+
expect(getGitattributesEntry('npm')).toBe('package-lock.json merge=ours');
|
|
47
|
+
});
|
|
48
|
+
it('returns null for none', () => {
|
|
49
|
+
expect(getGitattributesEntry('none')).toBeNull();
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/claude-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EAEZ,MAAM,YAAY,CAAA;AA6FnB,qBAAa,cAAe,YAAW,aAAa;IAClD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,YAAY;;;MAGX;IAEV,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW;IAI5C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,WAAW;IAIhE,OAAO,CAAC,YAAY;
|
|
1
|
+
{"version":3,"file":"claude-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/claude-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EAEZ,MAAM,YAAY,CAAA;AA6FnB,qBAAa,cAAe,YAAW,aAAa;IAClD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAS;IACjC,QAAQ,CAAC,YAAY;;;MAGX;IAEV,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW;IAI5C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,WAAW;IAIhE,OAAO,CAAC,YAAY;CA0LrB;AAsND;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAErD"}
|
|
@@ -172,13 +172,21 @@ export class ClaudeProvider {
|
|
|
172
172
|
...(config.mcpToolNames ?? []),
|
|
173
173
|
]
|
|
174
174
|
: [];
|
|
175
|
+
// Convert stdio server configs to SDK McpStdioServerConfig format.
|
|
176
|
+
// Stdio servers propagate to sub-agents (in-process servers don't).
|
|
177
|
+
const mcpServers = config.mcpStdioServers && config.mcpStdioServers.length > 0
|
|
178
|
+
? Object.fromEntries(config.mcpStdioServers.map(s => [
|
|
179
|
+
s.name,
|
|
180
|
+
{ type: 'stdio', command: s.command, args: s.args, env: s.env },
|
|
181
|
+
]))
|
|
182
|
+
: undefined;
|
|
175
183
|
const agentQuery = query({
|
|
176
184
|
prompt: config.prompt,
|
|
177
185
|
options: {
|
|
178
186
|
cwd: config.cwd,
|
|
179
187
|
env: config.env,
|
|
180
188
|
abortController,
|
|
181
|
-
mcpServers
|
|
189
|
+
mcpServers,
|
|
182
190
|
maxTurns: config.maxTurns,
|
|
183
191
|
allowedTools: config.allowedTools ?? defaultAllowedTools,
|
|
184
192
|
// Programmatic permission handler for autonomous agents.
|
|
@@ -83,14 +83,9 @@ export interface AgentSpawnConfig {
|
|
|
83
83
|
* Providers call this once the underlying process is created.
|
|
84
84
|
*/
|
|
85
85
|
onProcessSpawned?: (pid: number | undefined) => void;
|
|
86
|
-
/**
|
|
87
|
-
* In-process MCP servers providing typed tools to the agent.
|
|
88
|
-
* Created by ToolRegistry.createServers() from registered plugins.
|
|
89
|
-
*/
|
|
90
|
-
mcpServers?: Record<string, import('@anthropic-ai/claude-agent-sdk').McpServerConfig>;
|
|
91
86
|
/**
|
|
92
87
|
* Fully-qualified MCP tool names (e.g. 'mcp__af-code-intelligence__af_code_get_repo_map').
|
|
93
|
-
* Added to the allowedTools list so autonomous agents can use
|
|
88
|
+
* Added to the allowedTools list so autonomous agents can use MCP tools.
|
|
94
89
|
*/
|
|
95
90
|
mcpToolNames?: string[];
|
|
96
91
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,qCAAqC;AACrC,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,WAAW,GAAG,KAAK,CAAA;AAEhF;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,MAAM,WAAW,yBAAyB;IACxC,sEAAsE;IACtE,wBAAwB,EAAE,OAAO,CAAA;IACjC,oDAAoD;IACpD,qBAAqB,EAAE,OAAO,CAAA;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAEhC,yDAAyD;IACzD,QAAQ,CAAC,YAAY,EAAE,yBAAyB,CAAA;IAEhD,gCAAgC;IAChC,KAAK,CAAC,MAAM,EAAE,gBAAgB,GAAG,WAAW,CAAA;IAE5C,8CAA8C;IAC9C,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,WAAW,CAAA;IAEhE;;;;OAIG;IACH,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3B,+CAA+C;IAC/C,eAAe,EAAE,eAAe,CAAA;IAChC,4DAA4D;IAC5D,UAAU,EAAE,OAAO,CAAA;IACnB,wDAAwD;IACxD,cAAc,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,WAAW,GAAG,iBAAiB,GAAG,aAAa,CAAA;IAC9D;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IACpD;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/providers/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,6 +100,8 @@ export interface TemplateContext {
|
|
|
100
100
|
sharedPaths?: string[];
|
|
101
101
|
/** When true, agents use in-process af_linear_* tools instead of CLI */
|
|
102
102
|
useToolPlugins?: boolean;
|
|
103
|
+
/** When true, code-intelligence tools (af_code_*) are available via registered plugin */
|
|
104
|
+
hasCodeIntelligence?: boolean;
|
|
103
105
|
/** Command to invoke the Linear CLI (default: "pnpm af-linear") */
|
|
104
106
|
linearCli?: string;
|
|
105
107
|
/** Package manager used by the project (default: "pnpm"). Set to "none" for non-Node projects. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/templates/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAGlE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAMlE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACjB,YAAY,GACZ,MAAM,CAAA;AAMV;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,IAAI,CAAA;IAChB,IAAI,EAAE,kBAAkB,CAAA;IACxB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,QAAQ,EAAE,aAAa,CAAA;KACxB,CAAA;IACD,KAAK,CAAC,EAAE;QACN,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;QACxB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAA;KAC5B,CAAA;IACD,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAA;CACf;AAMD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,IAAI,CAAA;IAChB,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,0EAA0E;QAC1E,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,gEAAgE;IAChE,OAAO,EAAE,MAAM,CAAA;CAChB;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAA;IAGrB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kGAAkG;IAClG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAA;IACjC,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAA;IAGrB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IAGb,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAA;IAGnB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IAGtB,wEAAwE;IACxE,cAAc,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/templates/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@renseiai/agentfactory",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.31",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Multi-agent fleet management for coding agents — orchestrator, providers, crash recovery",
|
|
6
6
|
"author": "Rensei AI (https://rensei.ai)",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"@types/node": "^22.5.4",
|
|
58
58
|
"typescript": "^5.7.3",
|
|
59
59
|
"vitest": "^3.2.3",
|
|
60
|
-
"@renseiai/create-agentfactory-app": "0.8.
|
|
60
|
+
"@renseiai/create-agentfactory-app": "0.8.31"
|
|
61
61
|
},
|
|
62
62
|
"scripts": {
|
|
63
63
|
"build": "tsc",
|