@agents-ensemble/core 0.2.0 → 0.3.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/dist/acp/extract-acp-tool-name.d.ts +4 -0
- package/dist/acp/extract-acp-tool-name.d.ts.map +1 -0
- package/dist/acp/extract-acp-tool-name.js +29 -0
- package/dist/acp/extract-acp-tool-name.js.map +1 -0
- package/dist/acp/index.d.ts +1 -0
- package/dist/acp/index.d.ts.map +1 -1
- package/dist/acp/index.js +1 -0
- package/dist/acp/index.js.map +1 -1
- package/dist/conductor/conductor-agent.d.ts +2 -1
- package/dist/conductor/conductor-agent.d.ts.map +1 -1
- package/dist/conductor/conductor-agent.js +3 -0
- package/dist/conductor/conductor-agent.js.map +1 -1
- package/dist/conductor/conductor-session.d.ts.map +1 -1
- package/dist/conductor/conductor-session.js +90 -21
- package/dist/conductor/conductor-session.js.map +1 -1
- package/dist/conductor/session/events/index.d.ts +1 -1
- package/dist/conductor/session/events/index.d.ts.map +1 -1
- package/dist/conductor/session/events/index.js.map +1 -1
- package/dist/conductor/session/events/session-log-event-groups.d.ts +2 -2
- package/dist/conductor/session/events/session-log-event-groups.d.ts.map +1 -1
- package/dist/conductor/session/events/session-log-event-groups.js +2 -0
- package/dist/conductor/session/events/session-log-event-groups.js.map +1 -1
- package/dist/conductor/session/events/session-log-event.d.ts +12 -1
- package/dist/conductor/session/events/session-log-event.d.ts.map +1 -1
- package/dist/conductor/session/session-logger.d.ts.map +1 -1
- package/dist/conductor/session/session-logger.js +2 -0
- package/dist/conductor/session/session-logger.js.map +1 -1
- package/dist/dispatch/attach-worker.d.ts +2 -0
- package/dist/dispatch/attach-worker.d.ts.map +1 -1
- package/dist/dispatch/attach-worker.js +4 -0
- package/dist/dispatch/attach-worker.js.map +1 -1
- package/dist/dispatch/session-usage-tool.d.ts +2 -0
- package/dist/dispatch/session-usage-tool.d.ts.map +1 -1
- package/dist/dispatch/session-usage-tool.js +3 -1
- package/dist/dispatch/session-usage-tool.js.map +1 -1
- package/dist/dispatch/worker-acp-session.d.ts +8 -1
- package/dist/dispatch/worker-acp-session.d.ts.map +1 -1
- package/dist/dispatch/worker-acp-session.js +15 -4
- package/dist/dispatch/worker-acp-session.js.map +1 -1
- package/dist/github/fetch-github-updates.d.ts.map +1 -1
- package/dist/github/fetch-github-updates.js +56 -5
- package/dist/github/fetch-github-updates.js.map +1 -1
- package/dist/github/github-post-loop-resume.d.ts +9 -0
- package/dist/github/github-post-loop-resume.d.ts.map +1 -0
- package/dist/github/github-post-loop-resume.js +16 -0
- package/dist/github/github-post-loop-resume.js.map +1 -0
- package/dist/github/github-test-fixtures.d.ts +13 -0
- package/dist/github/github-test-fixtures.d.ts.map +1 -1
- package/dist/github/github-test-fixtures.js +17 -0
- package/dist/github/github-test-fixtures.js.map +1 -1
- package/dist/profile/index.d.ts +3 -2
- package/dist/profile/index.d.ts.map +1 -1
- package/dist/profile/index.js +1 -1
- package/dist/profile/index.js.map +1 -1
- package/dist/profile/load-profile.d.ts +18 -19
- package/dist/profile/load-profile.d.ts.map +1 -1
- package/dist/profile/load-profile.js +42 -51
- package/dist/profile/load-profile.js.map +1 -1
- package/dist/profile/profile-paths.d.ts +19 -0
- package/dist/profile/profile-paths.d.ts.map +1 -0
- package/dist/profile/profile-paths.js +39 -0
- package/dist/profile/profile-paths.js.map +1 -0
- package/dist/profile/resolve-worker-workspace.d.ts +12 -0
- package/dist/profile/resolve-worker-workspace.d.ts.map +1 -0
- package/dist/profile/resolve-worker-workspace.js +48 -0
- package/dist/profile/resolve-worker-workspace.js.map +1 -0
- package/dist/profile/team-profile-resolution.d.ts +39 -0
- package/dist/profile/team-profile-resolution.d.ts.map +1 -0
- package/dist/profile/team-profile-resolution.js +154 -0
- package/dist/profile/team-profile-resolution.js.map +1 -0
- package/dist/profile/types.d.ts +18 -0
- package/dist/profile/types.d.ts.map +1 -1
- package/dist/profile/types.js +11 -2
- package/dist/profile/types.js.map +1 -1
- package/dist/profiles/implementer-and-reviewer/conductor.prompt.yaml +18 -0
- package/dist/profiles/implementer-and-reviewer/implementer.prompt.yaml +15 -0
- package/dist/profiles/implementer-and-reviewer/reviewer.prompt.yaml +16 -0
- package/dist/prompt/build-worker-attach-prompt.d.ts +1 -0
- package/dist/prompt/build-worker-attach-prompt.d.ts.map +1 -1
- package/dist/prompt/build-worker-attach-prompt.js +6 -3
- package/dist/prompt/build-worker-attach-prompt.js.map +1 -1
- package/dist/prompt/contexts/kind.d.ts +1 -0
- package/dist/prompt/contexts/kind.d.ts.map +1 -1
- package/dist/prompt/contexts/kind.js.map +1 -1
- package/dist/prompt/modules/ensemble/conductor-base-module.js +6 -6
- package/dist/prompt/modules/ensemble/conductor-base-module.js.map +1 -1
- package/dist/prompt/modules/ensemble/worker-base-module.d.ts.map +1 -1
- package/dist/prompt/modules/ensemble/worker-base-module.js +3 -4
- package/dist/prompt/modules/ensemble/worker-base-module.js.map +1 -1
- package/dist/runtime/types.d.ts +4 -0
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/worker-runtime.d.ts +9 -1
- package/dist/runtime/worker-runtime.d.ts.map +1 -1
- package/dist/runtime/worker-runtime.js +42 -7
- package/dist/runtime/worker-runtime.js.map +1 -1
- package/dist/runtime/worker-session.d.ts +9 -3
- package/dist/runtime/worker-session.d.ts.map +1 -1
- package/dist/runtime/worker-session.js +9 -3
- package/dist/runtime/worker-session.js.map +1 -1
- package/dist/runtime/worker-status.d.ts +2 -0
- package/dist/runtime/worker-status.d.ts.map +1 -1
- package/dist/session/session-sidecar.d.ts +2 -0
- package/dist/session/session-sidecar.d.ts.map +1 -1
- package/dist/session/session-sidecar.js +4 -1
- package/dist/session/session-sidecar.js.map +1 -1
- package/dist/testing/mock-conductor-get-usage.d.ts +3 -0
- package/dist/testing/mock-conductor-get-usage.d.ts.map +1 -0
- package/dist/testing/mock-conductor-get-usage.js +15 -0
- package/dist/testing/mock-conductor-get-usage.js.map +1 -0
- package/dist/usage/enrich-session-usage-cost.d.ts +6 -0
- package/dist/usage/enrich-session-usage-cost.d.ts.map +1 -0
- package/dist/usage/enrich-session-usage-cost.js +17 -0
- package/dist/usage/enrich-session-usage-cost.js.map +1 -0
- package/dist/usage/types.d.ts +3 -0
- package/dist/usage/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/profiles/default/conductor.prompt.yaml +0 -29
- package/dist/profiles/default/implementer.prompt.yaml +0 -17
- package/dist/profiles/default/reviewer.prompt.yaml +0 -18
- /package/dist/profiles/{default → implementer-and-reviewer}/profile.yaml +0 -0
- /package/dist/profiles/{default → implementer-and-reviewer}/team.md +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
1
|
import { readFile } from 'node:fs/promises';
|
|
3
2
|
import { dirname, isAbsolute, join } from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
3
|
import yaml from 'js-yaml';
|
|
6
4
|
import { parsePromptModuleFromYaml } from './parse-prompt-module.js';
|
|
5
|
+
import { resolveWorkerWorkspacePath } from './resolve-worker-workspace.js';
|
|
7
6
|
import { normalizeProfileWorkers } from './types.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export
|
|
7
|
+
import { resolveTeamProfilePath } from './team-profile-resolution.js';
|
|
8
|
+
import { bundledDefaultProfilePath, PROFILE_FILE, } from './profile-paths.js';
|
|
9
|
+
export { bundledDefaultProfilePath, bundledProfilePath, bundledProfilesRoot, corePackageRoot, DEFAULT_PROFILE_ALIAS, DEFAULT_PROFILE_NAME, ENSEMBLE_DIR, PROFILE_FILE, profileDirectoryPath, PROFILES_DIR, TEAMS_DIR, } from './profile-paths.js';
|
|
10
|
+
export { teamProfileRoots, resolveTeamProfilePath, listTeamProfiles, normalizeTeamProfileName, teamProfileId, } from './team-profile-resolution.js';
|
|
11
11
|
export function parseProfile(source, label) {
|
|
12
12
|
if (!source || typeof source !== 'object' || !Array.isArray(source.workers)) {
|
|
13
13
|
throw new Error(`Invalid profile: ${label} (expected YAML with "workers" array)`);
|
|
@@ -74,78 +74,69 @@ async function resolveMaterial(material, profileDir, label) {
|
|
|
74
74
|
content,
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
|
+
function resolveProfileWorkers(workers, profileDir, repoRoot) {
|
|
78
|
+
return workers.map((worker) => ({
|
|
79
|
+
...worker,
|
|
80
|
+
...(worker.workspace
|
|
81
|
+
? {
|
|
82
|
+
resolvedWorkspacePath: resolveWorkerWorkspacePath(worker.workspace, profileDir, repoRoot),
|
|
83
|
+
}
|
|
84
|
+
: {}),
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
77
87
|
/** `file` / `promptFile` を読み込み、インラインに解決する。 */
|
|
78
|
-
export async function resolveProfile(profile, profileDir) {
|
|
88
|
+
export async function resolveProfile(profile, profileDir, repoRoot) {
|
|
79
89
|
const label = join(profileDir, PROFILE_FILE);
|
|
80
90
|
const agents = {};
|
|
81
91
|
for (const [name, agent] of Object.entries(profile.agents ?? {})) {
|
|
82
92
|
agents[name] = await resolveAgent(name, agent, profileDir, label);
|
|
83
93
|
}
|
|
84
94
|
return {
|
|
85
|
-
workers: profile.workers,
|
|
95
|
+
workers: resolveProfileWorkers(profile.workers, profileDir, repoRoot),
|
|
86
96
|
agents: Object.keys(agents).length > 0 ? agents : undefined,
|
|
87
97
|
materials: await Promise.all((profile.materials ?? []).map((material) => resolveMaterial(material, profileDir, label))),
|
|
88
98
|
};
|
|
89
99
|
}
|
|
90
|
-
export async function loadProfileFromFile(filePath) {
|
|
100
|
+
export async function loadProfileFromFile(filePath, options) {
|
|
101
|
+
const profileDir = dirname(filePath);
|
|
102
|
+
const repoRoot = options?.repoRoot ?? profileDir;
|
|
91
103
|
const raw = await readFile(filePath, 'utf8');
|
|
92
104
|
const parsed = yaml.load(raw);
|
|
93
105
|
const profile = parseProfile(parsed, filePath);
|
|
94
|
-
return resolveProfile(profile,
|
|
95
|
-
}
|
|
96
|
-
/** `@agents-ensemble/core` パッケージルート(`src/profile` または `dist/profile` から算出)。 */
|
|
97
|
-
export function corePackageRoot() {
|
|
98
|
-
return join(dirname(fileURLToPath(import.meta.url)), '../..');
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* 同梱プロファイルのルート。
|
|
102
|
-
* 正本はリポジトリ直下の `profiles/`。`build` で `dist/profiles/` にコピー済みなら dist を使う。
|
|
103
|
-
*/
|
|
104
|
-
export function bundledProfilesRoot() {
|
|
105
|
-
const packageRoot = corePackageRoot();
|
|
106
|
-
const distProfiles = join(packageRoot, 'dist/profiles');
|
|
107
|
-
if (existsSync(join(distProfiles, DEFAULT_PROFILE_NAME, PROFILE_FILE))) {
|
|
108
|
-
return distProfiles;
|
|
109
|
-
}
|
|
110
|
-
return join(packageRoot, '../../profiles');
|
|
111
|
-
}
|
|
112
|
-
export function bundledProfilePath(name) {
|
|
113
|
-
return join(bundledProfilesRoot(), name, PROFILE_FILE);
|
|
114
|
-
}
|
|
115
|
-
export function bundledDefaultProfilePath() {
|
|
116
|
-
return bundledProfilePath(DEFAULT_PROFILE_NAME);
|
|
117
|
-
}
|
|
118
|
-
export function profileDirectoryPath(cwd, name) {
|
|
119
|
-
return join(cwd, PROFILES_DIR, name, PROFILE_FILE);
|
|
106
|
+
return resolveProfile(profile, profileDir, repoRoot);
|
|
120
107
|
}
|
|
121
108
|
/**
|
|
122
109
|
* プロファイル参照をファイルパスに解決する。
|
|
123
|
-
* -
|
|
124
|
-
* - `profiles/foo/profile.yaml` や絶対パスは
|
|
110
|
+
* - 名前のみ → project `.ensemble/teams/` > user `~/.ensemble/teams/` > bundled > legacy
|
|
111
|
+
* - `profiles/foo/profile.yaml` や絶対パスは repoRoot 基準でそのまま
|
|
125
112
|
*/
|
|
126
|
-
export function resolveProfilePath(ref,
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return bundled;
|
|
113
|
+
export function resolveProfilePath(ref, repoRoot) {
|
|
114
|
+
return resolveTeamProfilePath(ref, { repoRoot });
|
|
115
|
+
}
|
|
116
|
+
/** `--profile` 未指定時のデフォルト team profile(`--profile` と同じ解釈)。 */
|
|
117
|
+
export const ENSEMBLE_DEFAULT_PROFILE_ENV = 'ENSEMBLE_DEFAULT_PROFILE';
|
|
118
|
+
/** CLI `--profile` > `ENSEMBLE_DEFAULT_PROFILE` > bundled default のうち、先に有効な参照を返す。 */
|
|
119
|
+
export function resolveProfileRef(options) {
|
|
120
|
+
if (options.profile?.trim()) {
|
|
121
|
+
return options.profile.trim();
|
|
136
122
|
}
|
|
137
|
-
|
|
123
|
+
const fromEnv = options.env?.[ENSEMBLE_DEFAULT_PROFILE_ENV]?.trim();
|
|
124
|
+
return fromEnv || undefined;
|
|
138
125
|
}
|
|
139
|
-
/**
|
|
126
|
+
/** `--profile` / env も未指定時は同梱 default。 */
|
|
140
127
|
export function resolveDefaultProfilePath() {
|
|
141
128
|
return bundledDefaultProfilePath();
|
|
142
129
|
}
|
|
143
130
|
export async function loadProfile(options) {
|
|
144
131
|
const cwd = options.cwd ?? process.cwd();
|
|
145
|
-
const
|
|
146
|
-
|
|
132
|
+
const ref = resolveProfileRef({
|
|
133
|
+
profile: options.profile,
|
|
134
|
+
env: options.env ?? process.env,
|
|
135
|
+
});
|
|
136
|
+
const profilePath = ref
|
|
137
|
+
? resolveProfilePath(ref, cwd)
|
|
147
138
|
: resolveDefaultProfilePath();
|
|
148
|
-
const profile = await loadProfileFromFile(profilePath);
|
|
139
|
+
const profile = await loadProfileFromFile(profilePath, { repoRoot: cwd });
|
|
149
140
|
return { profile, profilePath };
|
|
150
141
|
}
|
|
151
142
|
//# sourceMappingURL=load-profile.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-profile.js","sourceRoot":"","sources":["../../src/profile/load-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"load-profile.js","sourceRoot":"","sources":["../../src/profile/load-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare const PROFILES_DIR = "profiles";
|
|
2
|
+
export declare const PROFILE_FILE = "profile.yaml";
|
|
3
|
+
export declare const TEAMS_DIR = "teams";
|
|
4
|
+
export declare const ENSEMBLE_DIR = ".ensemble";
|
|
5
|
+
/** Canonical bundled default team profile name. */
|
|
6
|
+
export declare const DEFAULT_PROFILE_NAME = "implementer-and-reviewer";
|
|
7
|
+
/** CLI / API alias for {@link DEFAULT_PROFILE_NAME}. */
|
|
8
|
+
export declare const DEFAULT_PROFILE_ALIAS = "default";
|
|
9
|
+
/** `@agents-ensemble/core` パッケージルート(`src/profile` または `dist/profile` から算出)。 */
|
|
10
|
+
export declare function corePackageRoot(): string;
|
|
11
|
+
/**
|
|
12
|
+
* 同梱プロファイルのルート。
|
|
13
|
+
* 正本はリポジトリ直下の `profiles/`。`build` で `dist/profiles/` にコピー済みなら dist を使う。
|
|
14
|
+
*/
|
|
15
|
+
export declare function bundledProfilesRoot(): string;
|
|
16
|
+
export declare function bundledProfilePath(name: string): string;
|
|
17
|
+
export declare function bundledDefaultProfilePath(): string;
|
|
18
|
+
export declare function profileDirectoryPath(repoRoot: string, name: string): string;
|
|
19
|
+
//# sourceMappingURL=profile-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-paths.d.ts","sourceRoot":"","sources":["../../src/profile/profile-paths.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,aAAa,CAAC;AACvC,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAC3C,eAAO,MAAM,SAAS,UAAU,CAAC;AACjC,eAAO,MAAM,YAAY,cAAc,CAAC;AACxC,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,6BAA6B,CAAC;AAC/D,wDAAwD;AACxD,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,+EAA+E;AAC/E,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAO5C;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3E"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { dirname } from 'node:path';
|
|
5
|
+
export const PROFILES_DIR = 'profiles';
|
|
6
|
+
export const PROFILE_FILE = 'profile.yaml';
|
|
7
|
+
export const TEAMS_DIR = 'teams';
|
|
8
|
+
export const ENSEMBLE_DIR = '.ensemble';
|
|
9
|
+
/** Canonical bundled default team profile name. */
|
|
10
|
+
export const DEFAULT_PROFILE_NAME = 'implementer-and-reviewer';
|
|
11
|
+
/** CLI / API alias for {@link DEFAULT_PROFILE_NAME}. */
|
|
12
|
+
export const DEFAULT_PROFILE_ALIAS = 'default';
|
|
13
|
+
/** `@agents-ensemble/core` パッケージルート(`src/profile` または `dist/profile` から算出)。 */
|
|
14
|
+
export function corePackageRoot() {
|
|
15
|
+
return join(dirname(fileURLToPath(import.meta.url)), '../..');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 同梱プロファイルのルート。
|
|
19
|
+
* 正本はリポジトリ直下の `profiles/`。`build` で `dist/profiles/` にコピー済みなら dist を使う。
|
|
20
|
+
*/
|
|
21
|
+
export function bundledProfilesRoot() {
|
|
22
|
+
const packageRoot = corePackageRoot();
|
|
23
|
+
const distProfiles = join(packageRoot, 'dist/profiles');
|
|
24
|
+
if (existsSync(join(distProfiles, DEFAULT_PROFILE_NAME, PROFILE_FILE))) {
|
|
25
|
+
return distProfiles;
|
|
26
|
+
}
|
|
27
|
+
return join(packageRoot, '../../profiles');
|
|
28
|
+
}
|
|
29
|
+
export function bundledProfilePath(name) {
|
|
30
|
+
const dirName = name === DEFAULT_PROFILE_ALIAS ? DEFAULT_PROFILE_NAME : name;
|
|
31
|
+
return join(bundledProfilesRoot(), dirName, PROFILE_FILE);
|
|
32
|
+
}
|
|
33
|
+
export function bundledDefaultProfilePath() {
|
|
34
|
+
return bundledProfilePath(DEFAULT_PROFILE_NAME);
|
|
35
|
+
}
|
|
36
|
+
export function profileDirectoryPath(repoRoot, name) {
|
|
37
|
+
return join(repoRoot, PROFILES_DIR, name, PROFILE_FILE);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=profile-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-paths.js","sourceRoot":"","sources":["../../src/profile/profile-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,UAAU,CAAC;AACvC,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC;AAC3C,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC;AACjC,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;AACxC,mDAAmD;AACnD,MAAM,CAAC,MAAM,oBAAoB,GAAG,0BAA0B,CAAC;AAC/D,wDAAwD;AACxD,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE/C,+EAA+E;AAC/E,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACvE,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,MAAM,OAAO,GAAG,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,OAAO,IAAI,CAAC,mBAAmB,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,IAAY;IACjE,OAAO,IAAI,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* profile の `workspace` を絶対パスへ解決する。
|
|
3
|
+
* - 絶対パスはそのまま
|
|
4
|
+
* - `./` / `../` で始まる相対パスは profile ディレクトリ基準
|
|
5
|
+
* - それ以外の相対パスは repo-root(`loadProfile` の cwd)基準
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveWorkerWorkspacePath(workspace: string, profileDir: string, repoRoot: string): string;
|
|
8
|
+
/** worker ACP cwd が存在するディレクトリであることを検証する。 */
|
|
9
|
+
export declare function assertWorkerWorkspaceDirectory(path: string, workerName?: string): void;
|
|
10
|
+
/** harness 表示用に workspace パスを要約する(repo-root 相対を優先)。 */
|
|
11
|
+
export declare function summarizeWorkspacePath(path: string, repoRoot: string): string;
|
|
12
|
+
//# sourceMappingURL=resolve-worker-workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-worker-workspace.d.ts","sourceRoot":"","sources":["../../src/profile/resolve-worker-workspace.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CAQR;AAED,4CAA4C;AAC5C,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAkBN;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW7E"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { statSync } from 'node:fs';
|
|
2
|
+
import { isAbsolute, resolve } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* profile の `workspace` を絶対パスへ解決する。
|
|
5
|
+
* - 絶対パスはそのまま
|
|
6
|
+
* - `./` / `../` で始まる相対パスは profile ディレクトリ基準
|
|
7
|
+
* - それ以外の相対パスは repo-root(`loadProfile` の cwd)基準
|
|
8
|
+
*/
|
|
9
|
+
export function resolveWorkerWorkspacePath(workspace, profileDir, repoRoot) {
|
|
10
|
+
if (isAbsolute(workspace)) {
|
|
11
|
+
return workspace;
|
|
12
|
+
}
|
|
13
|
+
if (workspace.startsWith('.')) {
|
|
14
|
+
return resolve(profileDir, workspace);
|
|
15
|
+
}
|
|
16
|
+
return resolve(repoRoot, workspace);
|
|
17
|
+
}
|
|
18
|
+
/** worker ACP cwd が存在するディレクトリであることを検証する。 */
|
|
19
|
+
export function assertWorkerWorkspaceDirectory(path, workerName) {
|
|
20
|
+
const label = workerName ? `Worker "${workerName}"` : 'Worker';
|
|
21
|
+
try {
|
|
22
|
+
const stat = statSync(path);
|
|
23
|
+
if (!stat.isDirectory()) {
|
|
24
|
+
throw new Error(`${label} workspace is not a directory: ${path}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (typeof error === 'object' &&
|
|
29
|
+
error !== null &&
|
|
30
|
+
'code' in error &&
|
|
31
|
+
error.code === 'ENOENT') {
|
|
32
|
+
throw new Error(`${label} workspace does not exist: ${path}`);
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/** harness 表示用に workspace パスを要約する(repo-root 相対を優先)。 */
|
|
38
|
+
export function summarizeWorkspacePath(path, repoRoot) {
|
|
39
|
+
const normalizedRoot = resolve(repoRoot);
|
|
40
|
+
const normalizedPath = resolve(path);
|
|
41
|
+
if (normalizedPath === normalizedRoot ||
|
|
42
|
+
normalizedPath.startsWith(`${normalizedRoot}/`)) {
|
|
43
|
+
const relative = normalizedPath.slice(normalizedRoot.length).replace(/^\//, '');
|
|
44
|
+
return relative || '.';
|
|
45
|
+
}
|
|
46
|
+
return normalizedPath;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=resolve-worker-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-worker-workspace.js","sourceRoot":"","sources":["../../src/profile/resolve-worker-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,UAAkB,EAClB,QAAgB;IAEhB,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACtC,CAAC;AAED,4CAA4C;AAC5C,MAAM,UAAU,8BAA8B,CAC5C,IAAY,EACZ,UAAmB;IAEnB,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,UAAU,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,kCAAkC,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACd,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAClD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8BAA8B,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,QAAgB;IACnE,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,IACE,cAAc,KAAK,cAAc;QACjC,cAAc,CAAC,UAAU,CAAC,GAAG,cAAc,GAAG,CAAC,EAC/C,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChF,OAAO,QAAQ,IAAI,GAAG,CAAC;IACzB,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type TeamProfileSource = 'project' | 'user' | 'bundled' | 'legacy';
|
|
2
|
+
export interface TeamProfileMeta {
|
|
3
|
+
id?: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
summary?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface TeamProfileListEntry {
|
|
8
|
+
/** Canonical identifier, e.g. `my-team@project`. */
|
|
9
|
+
id: string;
|
|
10
|
+
/** Short display name (directory name or canonical bundled name). */
|
|
11
|
+
name: string;
|
|
12
|
+
source: TeamProfileSource;
|
|
13
|
+
/** Absolute path to `profile.yaml`. */
|
|
14
|
+
path: string;
|
|
15
|
+
meta?: TeamProfileMeta;
|
|
16
|
+
/** Worker kind or name preview for catalog display. */
|
|
17
|
+
workersPreview: string[];
|
|
18
|
+
}
|
|
19
|
+
export interface TeamProfileRoot {
|
|
20
|
+
source: TeamProfileSource;
|
|
21
|
+
root: string;
|
|
22
|
+
}
|
|
23
|
+
export interface TeamProfileResolutionOptions {
|
|
24
|
+
repoRoot: string;
|
|
25
|
+
/** Override for tests. Defaults to `~/.ensemble`. */
|
|
26
|
+
userEnsembleRoot?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function normalizeTeamProfileName(name: string): string;
|
|
29
|
+
export declare function teamProfileId(name: string, source: TeamProfileSource): string;
|
|
30
|
+
/** Exploration roots in resolution priority order. */
|
|
31
|
+
export declare function teamProfileRoots(repoRoot: string, options?: Pick<TeamProfileResolutionOptions, 'userEnsembleRoot'>): TeamProfileRoot[];
|
|
32
|
+
/**
|
|
33
|
+
* Resolve a team profile reference to an absolute `profile.yaml` path.
|
|
34
|
+
* Name-only refs use priority: project > user > bundled > legacy.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveTeamProfilePath(ref: string, options: TeamProfileResolutionOptions): string;
|
|
37
|
+
/** List team profiles from all layers with source distinction. */
|
|
38
|
+
export declare function listTeamProfiles(options: TeamProfileResolutionOptions): Promise<TeamProfileListEntry[]>;
|
|
39
|
+
//# sourceMappingURL=team-profile-resolution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-profile-resolution.d.ts","sourceRoot":"","sources":["../../src/profile/team-profile-resolution.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,qEAAqE;IACrE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,uDAAuD;IACvD,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAkBD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAE7E;AAmED,sDAAsD;AACtD,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,IAAI,CAAC,4BAA4B,EAAE,kBAAkB,CAAC,GAC/D,eAAe,EAAE,CAYnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,4BAA4B,GACpC,MAAM,CAMR;AAkED,kEAAkE;AAClE,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAYjC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { isAbsolute, join } from 'node:path';
|
|
5
|
+
import yaml from 'js-yaml';
|
|
6
|
+
import { bundledProfilePath, bundledProfilesRoot, DEFAULT_PROFILE_ALIAS, DEFAULT_PROFILE_NAME, ENSEMBLE_DIR, PROFILE_FILE, profileDirectoryPath, PROFILES_DIR, TEAMS_DIR, } from './profile-paths.js';
|
|
7
|
+
function userEnsembleRoot(options) {
|
|
8
|
+
return options.userEnsembleRoot ?? join(homedir(), ENSEMBLE_DIR);
|
|
9
|
+
}
|
|
10
|
+
function projectTeamsRoot(repoRoot) {
|
|
11
|
+
return join(repoRoot, ENSEMBLE_DIR, TEAMS_DIR);
|
|
12
|
+
}
|
|
13
|
+
function userTeamsRoot(options) {
|
|
14
|
+
return join(userEnsembleRoot(options), TEAMS_DIR);
|
|
15
|
+
}
|
|
16
|
+
function legacyProfilesRoot(repoRoot) {
|
|
17
|
+
return join(repoRoot, PROFILES_DIR);
|
|
18
|
+
}
|
|
19
|
+
export function normalizeTeamProfileName(name) {
|
|
20
|
+
if (name === DEFAULT_PROFILE_ALIAS) {
|
|
21
|
+
return DEFAULT_PROFILE_NAME;
|
|
22
|
+
}
|
|
23
|
+
return name;
|
|
24
|
+
}
|
|
25
|
+
export function teamProfileId(name, source) {
|
|
26
|
+
return `${normalizeTeamProfileName(name)}@${source}`;
|
|
27
|
+
}
|
|
28
|
+
function isPathLikeRef(ref) {
|
|
29
|
+
return (isAbsolute(ref) ||
|
|
30
|
+
ref.endsWith('.yaml') ||
|
|
31
|
+
ref.endsWith('.yml') ||
|
|
32
|
+
ref.includes('/'));
|
|
33
|
+
}
|
|
34
|
+
function teamProfileFilePath(teamDir) {
|
|
35
|
+
return join(teamDir, PROFILE_FILE);
|
|
36
|
+
}
|
|
37
|
+
function listTeamDirs(root) {
|
|
38
|
+
if (!existsSync(root)) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
return readdirSync(root, { withFileTypes: true })
|
|
42
|
+
.filter((entry) => entry.isDirectory())
|
|
43
|
+
.map((entry) => entry.name)
|
|
44
|
+
.sort();
|
|
45
|
+
}
|
|
46
|
+
function resolveBundledProfilePath(name) {
|
|
47
|
+
return bundledProfilePath(name);
|
|
48
|
+
}
|
|
49
|
+
function resolveNamedTeamProfilePath(ref, options) {
|
|
50
|
+
const normalized = normalizeTeamProfileName(ref);
|
|
51
|
+
const { repoRoot } = options;
|
|
52
|
+
const candidates = [];
|
|
53
|
+
const projectPath = teamProfileFilePath(join(projectTeamsRoot(repoRoot), ref));
|
|
54
|
+
if (existsSync(projectPath)) {
|
|
55
|
+
candidates.push({ source: 'project', path: projectPath });
|
|
56
|
+
}
|
|
57
|
+
const userPath = teamProfileFilePath(join(userTeamsRoot(options), ref));
|
|
58
|
+
if (existsSync(userPath)) {
|
|
59
|
+
candidates.push({ source: 'user', path: userPath });
|
|
60
|
+
}
|
|
61
|
+
const bundledPath = resolveBundledProfilePath(normalized);
|
|
62
|
+
if (existsSync(bundledPath)) {
|
|
63
|
+
candidates.push({ source: 'bundled', path: bundledPath });
|
|
64
|
+
}
|
|
65
|
+
const legacyPath = profileDirectoryPath(repoRoot, ref);
|
|
66
|
+
if (existsSync(legacyPath)) {
|
|
67
|
+
candidates.push({ source: 'legacy', path: legacyPath });
|
|
68
|
+
}
|
|
69
|
+
if (candidates.length === 0) {
|
|
70
|
+
return legacyPath;
|
|
71
|
+
}
|
|
72
|
+
return candidates[0].path;
|
|
73
|
+
}
|
|
74
|
+
/** Exploration roots in resolution priority order. */
|
|
75
|
+
export function teamProfileRoots(repoRoot, options) {
|
|
76
|
+
const resolutionOptions = {
|
|
77
|
+
repoRoot,
|
|
78
|
+
userEnsembleRoot: options?.userEnsembleRoot,
|
|
79
|
+
};
|
|
80
|
+
return [
|
|
81
|
+
{ source: 'project', root: projectTeamsRoot(repoRoot) },
|
|
82
|
+
{ source: 'user', root: userTeamsRoot(resolutionOptions) },
|
|
83
|
+
{ source: 'bundled', root: bundledProfilesRoot() },
|
|
84
|
+
{ source: 'legacy', root: legacyProfilesRoot(repoRoot) },
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Resolve a team profile reference to an absolute `profile.yaml` path.
|
|
89
|
+
* Name-only refs use priority: project > user > bundled > legacy.
|
|
90
|
+
*/
|
|
91
|
+
export function resolveTeamProfilePath(ref, options) {
|
|
92
|
+
if (isPathLikeRef(ref)) {
|
|
93
|
+
return isAbsolute(ref) ? ref : join(options.repoRoot, ref);
|
|
94
|
+
}
|
|
95
|
+
return resolveNamedTeamProfilePath(ref, options);
|
|
96
|
+
}
|
|
97
|
+
function workerPreview(entry) {
|
|
98
|
+
if (typeof entry === 'string') {
|
|
99
|
+
return entry;
|
|
100
|
+
}
|
|
101
|
+
if (entry && typeof entry === 'object' && 'kind' in entry) {
|
|
102
|
+
const worker = entry;
|
|
103
|
+
return worker.name ?? worker.kind ?? 'worker';
|
|
104
|
+
}
|
|
105
|
+
return 'worker';
|
|
106
|
+
}
|
|
107
|
+
async function readTeamProfileMeta(filePath, fallbackName) {
|
|
108
|
+
try {
|
|
109
|
+
const raw = yaml.load(await readFile(filePath, 'utf8'));
|
|
110
|
+
const workersPreview = (raw?.workers ?? []).map(workerPreview);
|
|
111
|
+
const meta = raw?.meta
|
|
112
|
+
? {
|
|
113
|
+
id: raw.meta.id ?? fallbackName,
|
|
114
|
+
title: raw.meta.title,
|
|
115
|
+
summary: raw.meta.summary,
|
|
116
|
+
}
|
|
117
|
+
: {
|
|
118
|
+
id: fallbackName,
|
|
119
|
+
title: fallbackName,
|
|
120
|
+
};
|
|
121
|
+
return { meta, workersPreview };
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
return { workersPreview: [] };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
async function listProfilesInRoot(source, root, nameMapper) {
|
|
128
|
+
const entries = [];
|
|
129
|
+
for (const dirName of listTeamDirs(root)) {
|
|
130
|
+
const filePath = teamProfileFilePath(join(root, dirName));
|
|
131
|
+
if (!existsSync(filePath)) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const name = nameMapper ? nameMapper(dirName) : dirName;
|
|
135
|
+
const { meta, workersPreview } = await readTeamProfileMeta(filePath, name);
|
|
136
|
+
entries.push({
|
|
137
|
+
id: teamProfileId(name, source),
|
|
138
|
+
name,
|
|
139
|
+
source,
|
|
140
|
+
path: filePath,
|
|
141
|
+
meta,
|
|
142
|
+
workersPreview,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
return entries;
|
|
146
|
+
}
|
|
147
|
+
/** List team profiles from all layers with source distinction. */
|
|
148
|
+
export async function listTeamProfiles(options) {
|
|
149
|
+
const { repoRoot } = options;
|
|
150
|
+
const entries = [];
|
|
151
|
+
entries.push(...(await listProfilesInRoot('project', projectTeamsRoot(repoRoot))), ...(await listProfilesInRoot('user', userTeamsRoot(options))), ...(await listProfilesInRoot('bundled', bundledProfilesRoot())), ...(await listProfilesInRoot('legacy', legacyProfilesRoot(repoRoot))));
|
|
152
|
+
return entries;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=team-profile-resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team-profile-resolution.js","sourceRoot":"","sources":["../../src/profile/team-profile-resolution.ts"],"names":[],"mappings":"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"}
|
package/dist/profile/types.d.ts
CHANGED
|
@@ -12,17 +12,34 @@ export interface ProfileWorkerRefObject {
|
|
|
12
12
|
/** セッション内の識別名(一意)。省略時は kind と同じ。 */
|
|
13
13
|
name?: string;
|
|
14
14
|
kind: string;
|
|
15
|
+
/**
|
|
16
|
+
* その worker の ACP 起動 cwd(Issue worktree とは別概念)。
|
|
17
|
+
* profile ディレクトリまたは repo-root 基準の相対パス、または絶対パス。
|
|
18
|
+
*/
|
|
19
|
+
workspace?: string;
|
|
15
20
|
}
|
|
16
21
|
/** parse 後の worker 定義。 */
|
|
17
22
|
export interface ProfileWorkerEntry {
|
|
18
23
|
name: string;
|
|
19
24
|
kind: string;
|
|
25
|
+
/** profile YAML の raw 値。 */
|
|
26
|
+
workspace?: string;
|
|
27
|
+
/** `loadProfile` 後に解決された絶対パス。 */
|
|
28
|
+
resolvedWorkspacePath?: string;
|
|
29
|
+
}
|
|
30
|
+
/** team-profile 選択・一覧用メタデータ([#176](https://github.com/otolab/agents-ensemble/issues/176))。 */
|
|
31
|
+
export interface ProfileMeta {
|
|
32
|
+
id?: string;
|
|
33
|
+
title?: string;
|
|
34
|
+
summary?: string;
|
|
20
35
|
}
|
|
21
36
|
/**
|
|
22
37
|
* 作業手順・役割分担の定義。
|
|
23
38
|
* agent 定義と、セッション開始時に起動する worker の一覧を返す。
|
|
24
39
|
*/
|
|
25
40
|
export interface Profile {
|
|
41
|
+
/** 一覧・選択 UI 向けメタデータ。未指定時はディレクトリ名等でフォールバック。 */
|
|
42
|
+
meta?: ProfileMeta;
|
|
26
43
|
/** kind 名 → agent 定義。`default` はフォールバック用。 */
|
|
27
44
|
agents?: Record<string, AgentDefinition>;
|
|
28
45
|
/** セッション開始時に起動する worker(name + kind)。 */
|
|
@@ -55,6 +72,7 @@ export interface SessionWorkerSpec {
|
|
|
55
72
|
name: string;
|
|
56
73
|
kind: string;
|
|
57
74
|
prompt?: PromptModule;
|
|
75
|
+
resolvedWorkspacePath?: string;
|
|
58
76
|
}
|
|
59
77
|
/** compile 時に state へ載せる worker 構成と kind 一覧。 */
|
|
60
78
|
export interface EnsembleSessionState {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/profile/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,iGAAiG;AACjG,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,sBAAsB,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/profile/types.ts"],"names":[],"mappings":"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"}
|
package/dist/profile/types.js
CHANGED
|
@@ -31,9 +31,15 @@ export function normalizeProfileWorker(entry, label, index) {
|
|
|
31
31
|
if (!worker.kind) {
|
|
32
32
|
throw new Error(`Invalid profile worker[${index}] in ${label}: needs "kind"`);
|
|
33
33
|
}
|
|
34
|
-
return {
|
|
34
|
+
return {
|
|
35
|
+
name: worker.name ?? worker.kind,
|
|
36
|
+
kind: worker.kind,
|
|
37
|
+
...(typeof worker.workspace === 'string' && worker.workspace.length > 0
|
|
38
|
+
? { workspace: worker.workspace }
|
|
39
|
+
: {}),
|
|
40
|
+
};
|
|
35
41
|
}
|
|
36
|
-
throw new Error(`Invalid profile worker[${index}] in ${label}: expected kind string or { name?, kind }`);
|
|
42
|
+
throw new Error(`Invalid profile worker[${index}] in ${label}: expected kind string or { name?, kind, workspace? }`);
|
|
37
43
|
}
|
|
38
44
|
export function normalizeProfileWorkers(workers, label) {
|
|
39
45
|
const normalized = workers.map((entry, index) => normalizeProfileWorker(entry, label, index));
|
|
@@ -51,6 +57,9 @@ export function profileWorkersToSessionSpecs(profile) {
|
|
|
51
57
|
name: worker.name,
|
|
52
58
|
kind: worker.kind,
|
|
53
59
|
prompt: resolveAgentPromptModule(worker.kind, profile.agents),
|
|
60
|
+
...(worker.resolvedWorkspacePath
|
|
61
|
+
? { resolvedWorkspacePath: worker.resolvedWorkspacePath }
|
|
62
|
+
: {}),
|
|
54
63
|
}));
|
|
55
64
|
}
|
|
56
65
|
/** kind に対応する profile agent module。agents[kind] → agents.default → undefined。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/profile/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/profile/types.ts"],"names":[],"mappings":"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"}
|