@agents-ensemble/core 0.2.1 → 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/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 +80 -18
- 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 +10 -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/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 +2 -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 +37 -5
- 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
|
@@ -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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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
persona:
|
|
2
|
+
- あなたは **conductor** です。
|
|
3
|
+
- implementer / reviewer とチームを組み、指示を出して進捗を管理します
|
|
4
|
+
instructions:
|
|
5
|
+
- 自分で判断できないことは open question でオペレータの最終判断を仰ぐ
|
|
6
|
+
- implementer / reviewer との会話は簡潔に行います。詳細な状態・報告の正本は Issue / PR とします。
|
|
7
|
+
- permission.pending が届いたら、必ず resolve_permission で可否を決定します(回答があるまで worker は作業を完遂できません)。不安要素があれば ask_human でオペレータに問い合わせます
|
|
8
|
+
- '指示の典型的な内容:'
|
|
9
|
+
- ' - **implementer** へ: 対象 Issue、今回のゴール、スコープ、使う Skill 等'
|
|
10
|
+
- ' - **reviewer** へ: 対象 PR URL、レビュー観点、再レビューなら前回ブロッカー'
|
|
11
|
+
- type: subsection
|
|
12
|
+
title: 資料の読み方
|
|
13
|
+
items:
|
|
14
|
+
- 同梱の `team.md`(標準動作モード)を読んでください。
|
|
15
|
+
- '**§3 conductor** — 指示として従う'
|
|
16
|
+
- その他の章 — 相手(implementer / reviewer)への期待として読む
|
|
17
|
+
- §1 全員の前提、§6 連携 — 全員共通のルール
|
|
18
|
+
- '`team.md` は手順書ではなく、役割の境界と連携の作法を決める。いま何をすべきかの正本は **Issue / PR** と、指示のあった **Skill**。'
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
persona:
|
|
2
|
+
- あなたは **implementer** です。
|
|
3
|
+
- 調査・実装・テスト・ドキュメント・PR 作成を担います
|
|
4
|
+
instructions:
|
|
5
|
+
- reviewer と直接会話しない。伝えることは Issue / PR に書く
|
|
6
|
+
- 作業が長く続く場合は、手を止めて conductor との情報共有することができます
|
|
7
|
+
- 気づき・違和感・未解決は解決できなくても Issue に残す
|
|
8
|
+
- type: subsection
|
|
9
|
+
title: 資料の読み方
|
|
10
|
+
items:
|
|
11
|
+
- 同梱の `team.md`(標準動作モード)を読んでください。
|
|
12
|
+
- '**§4 implementer** — 指示として従う'
|
|
13
|
+
- その他の章 — 相手(conductor / reviewer)への期待として読む
|
|
14
|
+
- §1 全員の前提、§6 連携 — 全員共通のルール
|
|
15
|
+
- 手順の細部の正本は **Skill(指示があれば)と Issue / PR**。
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
persona:
|
|
2
|
+
- あなたは **reviewer** です。
|
|
3
|
+
- 独立した検証者として振る舞います。
|
|
4
|
+
instructions:
|
|
5
|
+
- '**コードは書かない。** 成果物は判定と根拠(PR コメント)'
|
|
6
|
+
- conductor から PR URL とレビュー観点の指示を受けてから動く
|
|
7
|
+
- implementer が作成した worktree に入って独立検証する
|
|
8
|
+
- implementer と直接会話はできません
|
|
9
|
+
- type: subsection
|
|
10
|
+
title: 資料の読み方
|
|
11
|
+
items:
|
|
12
|
+
- 同梱の `team.md`(標準動作モード)を読んでください。
|
|
13
|
+
- '**§5 reviewer** — 指示として従う'
|
|
14
|
+
- その他の章 — 相手(conductor / implementer)への期待として読む
|
|
15
|
+
- §1 全員の前提、§6 連携 — 全員共通のルール
|
|
16
|
+
- '`team.md` 全文は conductor の materials にも載る。検証のたびに **Issue / PR から読み直す**(会話の記憶や前回の approve を前提にしない)。'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-worker-attach-prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/build-worker-attach-prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAOhE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,oBAAoB,CAAC;IACnC,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"build-worker-attach-prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/build-worker-attach-prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAOhE,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,oBAAoB,CAAC;IACnC,WAAW,CAAC,EAAE,YAAY,CAAC;CAC5B;AAmBD,0EAA0E;AAC1E,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,yBAAyB,GACjC,MAAM,CAcR"}
|
|
@@ -7,9 +7,11 @@ const workerAttachModule = {
|
|
|
7
7
|
instructions: [
|
|
8
8
|
(ctx) => ctx.worktreeInRepo
|
|
9
9
|
? '⚠️ 特別モード: メイン worktree(リポジトリルート)で直接作業する。通常の isolated worktree は使わない。'
|
|
10
|
-
: ctx.worktreePath
|
|
11
|
-
?
|
|
12
|
-
:
|
|
10
|
+
: ctx.workspacePath && ctx.workspacePath !== ctx.worktreePath
|
|
11
|
+
? `作業ディレクトリ: ${ctx.workspacePath}(Issue worktree とは別の ACP cwd)`
|
|
12
|
+
: ctx.worktreePath
|
|
13
|
+
? `作業 worktree: ${ctx.worktreePath}`
|
|
14
|
+
: null,
|
|
13
15
|
'- 自分の立場: conductor 配下の実作業者。Issue / PR 上の記録も成果物',
|
|
14
16
|
'- 届く prompt の種類: **init prompt**(本 prompt・attach 用・待機が目的)と **instruction**(conductor からの本番作業指示)',
|
|
15
17
|
'- セッションに attach 済み。conductor からの作業指示(次の session/prompt)を待つ',
|
|
@@ -26,6 +28,7 @@ export function buildWorkerAttachPrompt(options) {
|
|
|
26
28
|
return renderCompiledPrompt(compile(module, {
|
|
27
29
|
...ensembleContext(options.kind, options.issueUrl, options.sessionState),
|
|
28
30
|
worktreePath: options.worktreePath,
|
|
31
|
+
workspacePath: options.workspacePath,
|
|
29
32
|
worktreeInRepo: options.worktreeInRepo,
|
|
30
33
|
}));
|
|
31
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-worker-attach-prompt.js","sourceRoot":"","sources":["../../src/prompt/build-worker-attach-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAItD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"build-worker-attach-prompt.js","sourceRoot":"","sources":["../../src/prompt/build-worker-attach-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAItD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAYnE,MAAM,kBAAkB,GAAwC;IAC9D,YAAY,EAAE;QACZ,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,cAAc;YAChB,CAAC,CAAC,sEAAsE;YACxE,CAAC,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC,YAAY;gBAC3D,CAAC,CAAC,aAAa,GAAG,CAAC,aAAa,+BAA+B;gBAC/D,CAAC,CAAC,GAAG,CAAC,YAAY;oBAChB,CAAC,CAAC,gBAAgB,GAAG,CAAC,YAAY,EAAE;oBACpC,CAAC,CAAC,IAAI;QACd,gDAAgD;QAChD,iGAAiG;QACjG,4DAA4D;QAC5D,+DAA+D;KAChE;CACF,CAAC;AAEF,0EAA0E;AAC1E,MAAM,UAAU,uBAAuB,CACrC,OAAkC;IAElC,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,SAAS;KAC1C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACjF,OAAO,oBAAoB,CACzB,OAAO,CAAC,MAAM,EAAE;QACd,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC;QACxE,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -8,6 +8,7 @@ export interface EnsembleContext extends EnsembleSessionState {
|
|
|
8
8
|
/** worker dispatch 時に instructions へ載せる実行時データ。 */
|
|
9
9
|
export type WorkerDispatchContext = EnsembleContext & {
|
|
10
10
|
worktreePath?: string;
|
|
11
|
+
workspacePath?: string;
|
|
11
12
|
worktreeInRepo?: boolean;
|
|
12
13
|
};
|
|
13
14
|
export declare function ensembleContext(kind: string, issueUrl: string, session: EnsembleSessionState): EnsembleContext;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kind.d.ts","sourceRoot":"","sources":["../../../src/prompt/contexts/kind.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,gDAAgD;AAChD,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,kDAAkD;AAClD,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,eAAe,CASjB"}
|
|
1
|
+
{"version":3,"file":"kind.d.ts","sourceRoot":"","sources":["../../../src/prompt/contexts/kind.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,gDAAgD;AAChD,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,kDAAkD;AAClD,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,oBAAoB,GAC5B,eAAe,CASjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kind.js","sourceRoot":"","sources":["../../../src/prompt/contexts/kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"kind.js","sourceRoot":"","sources":["../../../src/prompt/contexts/kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAiBzD,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,QAAgB,EAChB,OAA6B;IAE7B,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO;QACL,IAAI;QACJ,QAAQ,EAAE,GAAG,CAAC,GAAG;QACjB,WAAW,EAAE,GAAG,CAAC,MAAM;QACvB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC"}
|
|
@@ -4,18 +4,18 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export const conductorBaseModule = {
|
|
6
6
|
objective: [
|
|
7
|
-
'
|
|
8
|
-
'
|
|
7
|
+
'- チーム全体を統合し、Issue 解決を目指してください',
|
|
8
|
+
'- conductor は演奏しない(ファイル編集・シェル実行・直接実装はしない)',
|
|
9
9
|
],
|
|
10
10
|
terms: [
|
|
11
11
|
'- **open question**: conductor がオペレータの最終判断を仰ぐために登録する質問',
|
|
12
12
|
'- **セッションイベント**: worker の完了・失敗・permission 待ちなど、実行時に conductor へ届く通知',
|
|
13
|
-
'- **harness**: オペレータ、conductor、workerを繋いでいる定型処理のプログラム部分',
|
|
13
|
+
'- **harness**: オペレータ、conductor、worker を繋いでいる定型処理のプログラム部分',
|
|
14
14
|
],
|
|
15
15
|
instructions: [
|
|
16
|
-
'-
|
|
17
|
-
'-
|
|
18
|
-
'-
|
|
16
|
+
'- 作業フローの連鎖(Issue の明確さ → worker の自律実行 → オペレータのゲート)が途切れないよう調整する。',
|
|
17
|
+
'- Issue / PR を正本とし、`prompt_worker` で常駐 worker に作業を指示する。',
|
|
18
|
+
'- チーム内の出来事を非同期で処理する必要があります。`Await` ツールは使わないようにしてください',
|
|
19
19
|
{
|
|
20
20
|
type: 'subsection',
|
|
21
21
|
title: 'harnessからのイベント',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conductor-base-module.js","sourceRoot":"","sources":["../../../../src/prompt/modules/ensemble/conductor-base-module.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAkC;IAChE,SAAS,EAAE;QACT
|
|
1
|
+
{"version":3,"file":"conductor-base-module.js","sourceRoot":"","sources":["../../../../src/prompt/modules/ensemble/conductor-base-module.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAkC;IAChE,SAAS,EAAE;QACT,+BAA+B;QAC/B,2CAA2C;KAC5C;IACD,KAAK,EAAE;QACL,wDAAwD;QACxD,qEAAqE;QACrE,0DAA0D;KAC3D;IACD,YAAY,EAAE;QACZ,gEAAgE;QAChE,yDAAyD;QACzD,sDAAsD;QACtD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE;gBACL,mCAAmC;gBACnC,wCAAwC;gBACxC,wCAAwC;gBACxC,kKAAkK;gBAClK,2CAA2C;aAC5C;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,qBAAqB;YAC5B,KAAK,EAAE;gBACL,sDAAsD;gBACtD,gFAAgF;gBAChF,gDAAgD;gBAChD,mFAAmF;aACpF;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE;gBACL,gDAAgD;gBAChD,2CAA2C;gBAC3C,oCAAoC;gBACpC,2EAA2E;gBAC3E,qDAAqD;gBACrD,2BAA2B;aAC5B;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE;gBACL,iGAAiG;gBACjG,yEAAyE;gBACzE,iEAAiE;gBACjE,2DAA2D;aAC5D;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,aAAa;YACpB,KAAK,EAAE;gBACL,8FAA8F;gBAC9F,uEAAuE;gBACvE,8DAA8D;gBAC9D,2DAA2D;aAC5D;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE;gBACL,+CAA+C;gBAC/C,8CAA8C;gBAC9C,yCAAyC;gBACzC,iCAAiC;gBACjC,uDAAuD;aACxD;SACF;QACD;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,eAAe;YACtB,KAAK,EAAE;gBACL,wCAAwC;gBACxC,qDAAqD;gBACrD,+BAA+B;gBAC/B,qDAAqD;gBACrD,0DAA0D;aAC3D;SACF;KACF;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-base-module.d.ts","sourceRoot":"","sources":["../../../../src/prompt/modules/ensemble/worker-base-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,eAAe,
|
|
1
|
+
{"version":3,"file":"worker-base-module.d.ts","sourceRoot":"","sources":["../../../../src/prompt/modules/ensemble/worker-base-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,YAAY,CAAC,eAAe,CAU1D,CAAC"}
|
|
@@ -4,14 +4,13 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export const workerBaseModule = {
|
|
6
6
|
objective: [
|
|
7
|
-
'
|
|
7
|
+
'- 作業者としてチームに貢献する',
|
|
8
8
|
],
|
|
9
9
|
instructions: [
|
|
10
|
-
'-
|
|
11
|
-
'-
|
|
10
|
+
'- セッション開始時に起動し、conductor からの作業指示を待つ。明示的な作業指示のメッセージが来るまで待機すること',
|
|
11
|
+
'- 手順の細部は Skill(指示があれば)と Issue / PR を正本にする',
|
|
12
12
|
'- 気づき・違和感・未解決は解決できなくても Issue に残す',
|
|
13
13
|
'- 操作の許可が必要なときは harness 経由で permission を要求する',
|
|
14
|
-
'- 手順の細部は Skill(指示があれば)と Issue / PR を正本にする',
|
|
15
14
|
],
|
|
16
15
|
};
|
|
17
16
|
//# sourceMappingURL=worker-base-module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-base-module.js","sourceRoot":"","sources":["../../../../src/prompt/modules/ensemble/worker-base-module.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC7D,SAAS,EAAE;QACT,
|
|
1
|
+
{"version":3,"file":"worker-base-module.js","sourceRoot":"","sources":["../../../../src/prompt/modules/ensemble/worker-base-module.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkC;IAC7D,SAAS,EAAE;QACT,kBAAkB;KACnB;IACD,YAAY,EAAE;QACZ,+DAA+D;QAC/D,2CAA2C;QAC3C,kCAAkC;QAClC,6CAA6C;KAC9C;CACF,CAAC"}
|
package/dist/runtime/types.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface WorkerStartParams {
|
|
|
11
11
|
issueUrl: string;
|
|
12
12
|
worktree: WorktreeRef;
|
|
13
13
|
sessionState: EnsembleSessionState;
|
|
14
|
+
resolvedWorkspacePath?: string;
|
|
15
|
+
expectedResumeAcpCwd?: string;
|
|
14
16
|
resumeAcpSessionId?: string;
|
|
15
17
|
}
|
|
16
18
|
export interface WorkerStartedInfo extends WorkerStartParams {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,oBAAoB,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,oBAAoB,CAAC;CAC9B,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC1C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,oBAAoB,EAAE,kBAAkB,CAAC;CACxD"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAE7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,oBAAoB,CAAC;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,GACD;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,oBAAoB,CAAC;CAC9B,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC1C,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,oBAAoB,EAAE,kBAAkB,CAAC;CACxD"}
|
|
@@ -7,6 +7,8 @@ import type { WorkerPromptTelemetry, WorkerAcpUpdateTelemetry, WorkerStateTeleme
|
|
|
7
7
|
import type { WorkerStatusDetail, WorkerStatusSummary } from './worker-status.js';
|
|
8
8
|
export interface WorkerRuntimeOptions {
|
|
9
9
|
inbox: ConductorInbox;
|
|
10
|
+
/** harness 表示で workspace パスを repo 相対に要約する際の基準。 */
|
|
11
|
+
repoRoot?: string;
|
|
10
12
|
connectAcp?: ConnectWorkerAcpFn;
|
|
11
13
|
spawn?: SpawnAcpProcessOptions;
|
|
12
14
|
/** integration の共有 bridge 注入時は false。 */
|
|
@@ -43,9 +45,15 @@ export declare class WorkerRuntime {
|
|
|
43
45
|
/** 常駐 worker へ user メッセージ(ACP `session/prompt`)を送る。busy 時はキュー、preempt 時は割り込み。 */
|
|
44
46
|
sendWorkerMessage(name: string, instruction: string, options?: SendWorkerMessageOptions): SendWorkerMessageResult;
|
|
45
47
|
waitForIdle(): Promise<void>;
|
|
48
|
+
/** 進行中の全 resident prompt を `session/cancel` する(明示 exit 用)。 */
|
|
49
|
+
cancelAllActivePrompts(): void;
|
|
46
50
|
/** ensemble 終了時に全 resident の ACP 接続を閉じる。 */
|
|
47
|
-
shutdown(
|
|
51
|
+
shutdown(options?: {
|
|
52
|
+
force?: boolean;
|
|
53
|
+
}): Promise<void>;
|
|
54
|
+
private resolveIdleWaiters;
|
|
48
55
|
private summarizeWorkerStatus;
|
|
56
|
+
private summarizeAcpCwd;
|
|
49
57
|
private emitPromptTelemetry;
|
|
50
58
|
private emitWorkerState;
|
|
51
59
|
private emitAcpUpdate;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/worker-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"worker-runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/worker-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { randomUUID } from 'node:crypto';
|
|
|
2
2
|
import { extractAcpToolName } from '../acp/extract-acp-tool-name.js';
|
|
3
3
|
import { attachWorker, buildWorkerAttachPrompt, runAttachedWorkerPrompt, } from '../dispatch/attach-worker.js';
|
|
4
4
|
import { cancelWorkerAcpPrompt, closeWorkerAcpSession, } from '../dispatch/worker-acp-session.js';
|
|
5
|
+
import { summarizeWorkspacePath } from '../profile/resolve-worker-workspace.js';
|
|
5
6
|
export class WorkerRuntime {
|
|
6
7
|
options;
|
|
7
8
|
processing = new Map();
|
|
@@ -145,14 +146,37 @@ export class WorkerRuntime {
|
|
|
145
146
|
this.idleResolvers.add(resolve);
|
|
146
147
|
});
|
|
147
148
|
}
|
|
149
|
+
/** 進行中の全 resident prompt を `session/cancel` する(明示 exit 用)。 */
|
|
150
|
+
cancelAllActivePrompts() {
|
|
151
|
+
for (const resident of this.residents.values()) {
|
|
152
|
+
if (resident.state === 'processing' && !resident.cancelInFlight) {
|
|
153
|
+
resident.cancelInFlight = true;
|
|
154
|
+
cancelWorkerAcpPrompt(resident.attached.session);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
148
158
|
/** ensemble 終了時に全 resident の ACP 接続を閉じる。 */
|
|
149
|
-
async shutdown() {
|
|
159
|
+
async shutdown(options) {
|
|
160
|
+
if (options?.force) {
|
|
161
|
+
this.cancelAllActivePrompts();
|
|
162
|
+
const residents = [...this.residents.values()];
|
|
163
|
+
await Promise.all(residents.map((resident) => closeWorkerAcpSession(resident.attached.session)));
|
|
164
|
+
this.residents.clear();
|
|
165
|
+
this.resolveIdleWaiters();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
150
168
|
await this.waitForIdle();
|
|
151
169
|
for (const resident of this.residents.values()) {
|
|
152
170
|
await closeWorkerAcpSession(resident.attached.session);
|
|
153
171
|
}
|
|
154
172
|
this.residents.clear();
|
|
155
173
|
}
|
|
174
|
+
resolveIdleWaiters() {
|
|
175
|
+
for (const resolve of this.idleResolvers) {
|
|
176
|
+
resolve();
|
|
177
|
+
}
|
|
178
|
+
this.idleResolvers.clear();
|
|
179
|
+
}
|
|
156
180
|
summarizeWorkerStatus(name) {
|
|
157
181
|
const failed = this.failedWorkers.get(name);
|
|
158
182
|
if (failed) {
|
|
@@ -183,9 +207,16 @@ export class WorkerRuntime {
|
|
|
183
207
|
state: resident.state === 'processing' ? 'processing' : 'idle',
|
|
184
208
|
queueDepth: resident.queue.length,
|
|
185
209
|
worktreePath: resident.started.worktree.path,
|
|
210
|
+
workspacePath: this.summarizeAcpCwd(resident.attached.session.acpCwd),
|
|
186
211
|
acpSessionId: resident.attached.session.sessionId,
|
|
187
212
|
};
|
|
188
213
|
}
|
|
214
|
+
summarizeAcpCwd(acpCwd) {
|
|
215
|
+
if (this.options.repoRoot) {
|
|
216
|
+
return summarizeWorkspacePath(acpCwd, this.options.repoRoot);
|
|
217
|
+
}
|
|
218
|
+
return acpCwd;
|
|
219
|
+
}
|
|
189
220
|
emitPromptTelemetry(event) {
|
|
190
221
|
this.options.onPromptTelemetry?.(event);
|
|
191
222
|
}
|
|
@@ -225,6 +256,8 @@ export class WorkerRuntime {
|
|
|
225
256
|
prompt: started.prompt,
|
|
226
257
|
worktree: started.worktree,
|
|
227
258
|
sessionState: started.sessionState,
|
|
259
|
+
resolvedWorkspacePath: started.resolvedWorkspacePath,
|
|
260
|
+
expectedResumeAcpCwd: started.expectedResumeAcpCwd,
|
|
228
261
|
resumeAcpSessionId: started.resumeAcpSessionId,
|
|
229
262
|
connectAcp: this.options.connectAcp,
|
|
230
263
|
spawn: this.options.spawn,
|
|
@@ -248,6 +281,8 @@ export class WorkerRuntime {
|
|
|
248
281
|
prompt: started.prompt,
|
|
249
282
|
worktree: started.worktree,
|
|
250
283
|
sessionState: started.sessionState,
|
|
284
|
+
resolvedWorkspacePath: started.resolvedWorkspacePath,
|
|
285
|
+
expectedResumeAcpCwd: started.expectedResumeAcpCwd,
|
|
251
286
|
resumeAcpSessionId: started.resumeAcpSessionId,
|
|
252
287
|
}, attached.session);
|
|
253
288
|
await this.executeRound(resident, prompt, 'harness');
|
|
@@ -359,10 +394,7 @@ export class WorkerRuntime {
|
|
|
359
394
|
}
|
|
360
395
|
resolveIdleIfReady() {
|
|
361
396
|
if (this.processing.size === 0 && this.attachInFlight === 0) {
|
|
362
|
-
|
|
363
|
-
resolve();
|
|
364
|
-
}
|
|
365
|
-
this.idleResolvers.clear();
|
|
397
|
+
this.resolveIdleWaiters();
|
|
366
398
|
}
|
|
367
399
|
}
|
|
368
400
|
}
|