@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.
Files changed (102) hide show
  1. package/dist/conductor/conductor-agent.d.ts +2 -1
  2. package/dist/conductor/conductor-agent.d.ts.map +1 -1
  3. package/dist/conductor/conductor-agent.js +3 -0
  4. package/dist/conductor/conductor-agent.js.map +1 -1
  5. package/dist/conductor/conductor-session.d.ts.map +1 -1
  6. package/dist/conductor/conductor-session.js +80 -18
  7. package/dist/conductor/conductor-session.js.map +1 -1
  8. package/dist/conductor/session/events/index.d.ts +1 -1
  9. package/dist/conductor/session/events/index.d.ts.map +1 -1
  10. package/dist/conductor/session/events/index.js.map +1 -1
  11. package/dist/conductor/session/events/session-log-event-groups.d.ts +2 -2
  12. package/dist/conductor/session/events/session-log-event-groups.d.ts.map +1 -1
  13. package/dist/conductor/session/events/session-log-event-groups.js +2 -0
  14. package/dist/conductor/session/events/session-log-event-groups.js.map +1 -1
  15. package/dist/conductor/session/events/session-log-event.d.ts +10 -1
  16. package/dist/conductor/session/events/session-log-event.d.ts.map +1 -1
  17. package/dist/conductor/session/session-logger.d.ts.map +1 -1
  18. package/dist/conductor/session/session-logger.js +2 -0
  19. package/dist/conductor/session/session-logger.js.map +1 -1
  20. package/dist/dispatch/attach-worker.d.ts +2 -0
  21. package/dist/dispatch/attach-worker.d.ts.map +1 -1
  22. package/dist/dispatch/attach-worker.js +4 -0
  23. package/dist/dispatch/attach-worker.js.map +1 -1
  24. package/dist/dispatch/session-usage-tool.d.ts +2 -0
  25. package/dist/dispatch/session-usage-tool.d.ts.map +1 -1
  26. package/dist/dispatch/session-usage-tool.js +3 -1
  27. package/dist/dispatch/session-usage-tool.js.map +1 -1
  28. package/dist/dispatch/worker-acp-session.d.ts +8 -1
  29. package/dist/dispatch/worker-acp-session.d.ts.map +1 -1
  30. package/dist/dispatch/worker-acp-session.js +15 -4
  31. package/dist/dispatch/worker-acp-session.js.map +1 -1
  32. package/dist/profile/index.d.ts +3 -2
  33. package/dist/profile/index.d.ts.map +1 -1
  34. package/dist/profile/index.js +1 -1
  35. package/dist/profile/index.js.map +1 -1
  36. package/dist/profile/load-profile.d.ts +18 -19
  37. package/dist/profile/load-profile.d.ts.map +1 -1
  38. package/dist/profile/load-profile.js +42 -51
  39. package/dist/profile/load-profile.js.map +1 -1
  40. package/dist/profile/profile-paths.d.ts +19 -0
  41. package/dist/profile/profile-paths.d.ts.map +1 -0
  42. package/dist/profile/profile-paths.js +39 -0
  43. package/dist/profile/profile-paths.js.map +1 -0
  44. package/dist/profile/resolve-worker-workspace.d.ts +12 -0
  45. package/dist/profile/resolve-worker-workspace.d.ts.map +1 -0
  46. package/dist/profile/resolve-worker-workspace.js +48 -0
  47. package/dist/profile/resolve-worker-workspace.js.map +1 -0
  48. package/dist/profile/team-profile-resolution.d.ts +39 -0
  49. package/dist/profile/team-profile-resolution.d.ts.map +1 -0
  50. package/dist/profile/team-profile-resolution.js +154 -0
  51. package/dist/profile/team-profile-resolution.js.map +1 -0
  52. package/dist/profile/types.d.ts +18 -0
  53. package/dist/profile/types.d.ts.map +1 -1
  54. package/dist/profile/types.js +11 -2
  55. package/dist/profile/types.js.map +1 -1
  56. package/dist/profiles/implementer-and-reviewer/conductor.prompt.yaml +18 -0
  57. package/dist/profiles/implementer-and-reviewer/implementer.prompt.yaml +15 -0
  58. package/dist/profiles/implementer-and-reviewer/reviewer.prompt.yaml +16 -0
  59. package/dist/prompt/build-worker-attach-prompt.d.ts +1 -0
  60. package/dist/prompt/build-worker-attach-prompt.d.ts.map +1 -1
  61. package/dist/prompt/build-worker-attach-prompt.js +6 -3
  62. package/dist/prompt/build-worker-attach-prompt.js.map +1 -1
  63. package/dist/prompt/contexts/kind.d.ts +1 -0
  64. package/dist/prompt/contexts/kind.d.ts.map +1 -1
  65. package/dist/prompt/contexts/kind.js.map +1 -1
  66. package/dist/prompt/modules/ensemble/conductor-base-module.js +6 -6
  67. package/dist/prompt/modules/ensemble/conductor-base-module.js.map +1 -1
  68. package/dist/prompt/modules/ensemble/worker-base-module.d.ts.map +1 -1
  69. package/dist/prompt/modules/ensemble/worker-base-module.js +3 -4
  70. package/dist/prompt/modules/ensemble/worker-base-module.js.map +1 -1
  71. package/dist/runtime/types.d.ts +2 -0
  72. package/dist/runtime/types.d.ts.map +1 -1
  73. package/dist/runtime/worker-runtime.d.ts +9 -1
  74. package/dist/runtime/worker-runtime.d.ts.map +1 -1
  75. package/dist/runtime/worker-runtime.js +37 -5
  76. package/dist/runtime/worker-runtime.js.map +1 -1
  77. package/dist/runtime/worker-session.d.ts +9 -3
  78. package/dist/runtime/worker-session.d.ts.map +1 -1
  79. package/dist/runtime/worker-session.js +9 -3
  80. package/dist/runtime/worker-session.js.map +1 -1
  81. package/dist/runtime/worker-status.d.ts +2 -0
  82. package/dist/runtime/worker-status.d.ts.map +1 -1
  83. package/dist/session/session-sidecar.d.ts +2 -0
  84. package/dist/session/session-sidecar.d.ts.map +1 -1
  85. package/dist/session/session-sidecar.js +4 -1
  86. package/dist/session/session-sidecar.js.map +1 -1
  87. package/dist/testing/mock-conductor-get-usage.d.ts +3 -0
  88. package/dist/testing/mock-conductor-get-usage.d.ts.map +1 -0
  89. package/dist/testing/mock-conductor-get-usage.js +15 -0
  90. package/dist/testing/mock-conductor-get-usage.js.map +1 -0
  91. package/dist/usage/enrich-session-usage-cost.d.ts +6 -0
  92. package/dist/usage/enrich-session-usage-cost.d.ts.map +1 -0
  93. package/dist/usage/enrich-session-usage-cost.js +17 -0
  94. package/dist/usage/enrich-session-usage-cost.js.map +1 -0
  95. package/dist/usage/types.d.ts +3 -0
  96. package/dist/usage/types.d.ts.map +1 -1
  97. package/package.json +1 -1
  98. package/dist/profiles/default/conductor.prompt.yaml +0 -29
  99. package/dist/profiles/default/implementer.prompt.yaml +0 -17
  100. package/dist/profiles/default/reviewer.prompt.yaml +0 -18
  101. /package/dist/profiles/{default → implementer-and-reviewer}/profile.yaml +0 -0
  102. /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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"}
@@ -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":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/profile/types.ts"],"names":[],"mappings":"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"}
@@ -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 { name: worker.name ?? worker.kind, kind: worker.kind };
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":"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"}
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 を前提にしない)。'
@@ -4,6 +4,7 @@ export interface WorkerAttachPromptOptions {
4
4
  issueUrl: string;
5
5
  kind: string;
6
6
  worktreePath?: string;
7
+ workspacePath?: string;
7
8
  worktreeInRepo?: boolean;
8
9
  sessionState: EnsembleSessionState;
9
10
  agentModule?: PromptModule;
@@ -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;AAiBD,0EAA0E;AAC1E,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,yBAAyB,GACjC,MAAM,CAaR"}
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
- ? `作業 worktree: ${ctx.worktreePath}`
12
- : null,
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;AAWnE,MAAM,kBAAkB,GAAwC;IAC9D,YAAY,EAAE;QACZ,CAAC,GAAG,EAAE,EAAE,CACN,GAAG,CAAC,cAAc;YAChB,CAAC,CAAC,sEAAsE;YACxE,CAAC,CAAC,GAAG,CAAC,YAAY;gBAChB,CAAC,CAAC,gBAAgB,GAAG,CAAC,YAAY,EAAE;gBACpC,CAAC,CAAC,IAAI;QACZ,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,cAAc,EAAE,OAAO,CAAC,cAAc;KACvC,CAAC,CACH,CAAC;AACJ,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;AAgBzD,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"}
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
- '作業フローの連鎖(Issue の明確さ → worker の自律実行 → オペレータのゲート)が途切れないよう調整する。',
8
- 'Issue / PR を正本とし、`prompt_worker` で常駐 worker に作業を指示する。',
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
- '- conductorは演奏しない(ファイル編集・シェル実行・直接実装はしない)',
17
- '- チーム全体を統合し、issue解決を目指してください',
18
- '- チーム内の出来事を非同期で処理する必要があります。Awaitツールは使わないようにしてください',
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,8DAA8D;QAC9D,uDAAuD;KACxD;IACD,KAAK,EAAE;QACL,wDAAwD;QACxD,qEAAqE;QACrE,yDAAyD;KAC1D;IACD,YAAY,EAAE;QACZ,0CAA0C;QAC1C,8BAA8B;QAC9B,mDAAmD;QACnD;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
+ {"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,CAW1D,CAAC"}
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
- 'セッション開始時に起動し、conductor からの作業指示を待つ。',
7
+ '- 作業者としてチームに貢献する',
8
8
  ],
9
9
  instructions: [
10
- '- 作業指示が届いたら Issue / PR を正本として動く',
11
- '- 起動後はconductorからの明示的な作業指示のメッセージが来るまで待機すること',
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,oCAAoC;KACrC;IACD,YAAY,EAAE;QACZ,iCAAiC;QACjC,6CAA6C;QAC7C,kCAAkC;QAClC,6CAA6C;QAC7C,2CAA2C;KAC5C;CACF,CAAC"}
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"}
@@ -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(): Promise<void>;
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,EACpB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,KAAK,CAAC,EAAE,sBAAsB,CAAC;IAC/B,yCAAyC;IACzC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAC3D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,IAAI,CAAC;IACxD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACvD;AA0BD,qBAAa,aAAa;IAQZ,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwC;IACnE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;IACvD,OAAO,CAAC,cAAc,CAAK;gBAEE,OAAO,EAAE,oBAAoB;IAE1D,oDAAoD;IACpD,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,0BAA0B;IAC1B,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,oDAAoD;IACpD,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,YAAY,IAAI,cAAc,EAAE;IAIhC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIrD,WAAW,IAAI,iBAAiB,EAAE;IAIlC,qDAAqD;IACrD,kBAAkB,IAAI,mBAAmB,EAAE;IAS3C,+CAA+C;IAC/C,yCAAyC;IACzC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IA4BxD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAgC7D,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM;IAOxC,iFAAiF;IACjF,iBAAiB,CACf,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,wBAAwB,GACjC,uBAAuB;IA0CpB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAOlC,4CAA4C;IACtC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ/B,OAAO,CAAC,qBAAqB;IAqC7B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,aAAa;YAgBP,aAAa;YA6Fb,YAAY;IAiG1B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;CAQ3B"}
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
- for (const resolve of this.idleResolvers) {
363
- resolve();
364
- }
365
- this.idleResolvers.clear();
397
+ this.resolveIdleWaiters();
366
398
  }
367
399
  }
368
400
  }