@agents-ensemble/core 0.10.0 → 0.11.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-session.d.ts.map +1 -1
- package/dist/conductor/conductor-session.js +35 -4
- package/dist/conductor/conductor-session.js.map +1 -1
- package/dist/conductor/session/events/session-log-event.d.ts +2 -0
- package/dist/conductor/session/events/session-log-event.d.ts.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +2 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/parse-config.d.ts.map +1 -1
- package/dist/config/parse-config.js +6 -1
- package/dist/config/parse-config.js.map +1 -1
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/dispatch/prompt-worker-tool.js +2 -2
- package/dist/dispatch/prompt-worker-tool.js.map +1 -1
- package/dist/dispatch/worker-status-tool.js +2 -2
- package/dist/dispatch/worker-status-tool.js.map +1 -1
- package/dist/escalation/answer-open-question-tool.d.ts.map +1 -1
- package/dist/escalation/answer-open-question-tool.js +24 -5
- package/dist/escalation/answer-open-question-tool.js.map +1 -1
- package/dist/escalation/ask-human-tool.d.ts.map +1 -1
- package/dist/escalation/ask-human-tool.js +41 -4
- package/dist/escalation/ask-human-tool.js.map +1 -1
- package/dist/escalation/format-registry-update.d.ts.map +1 -1
- package/dist/escalation/format-registry-update.js +9 -2
- package/dist/escalation/format-registry-update.js.map +1 -1
- package/dist/escalation/human-inquiry.d.ts +9 -1
- package/dist/escalation/human-inquiry.d.ts.map +1 -1
- package/dist/escalation/index.d.ts +3 -2
- package/dist/escalation/index.d.ts.map +1 -1
- package/dist/escalation/index.js +2 -1
- package/dist/escalation/index.js.map +1 -1
- package/dist/escalation/open-question-list-tools.js +4 -0
- package/dist/escalation/open-question-list-tools.js.map +1 -1
- package/dist/escalation/open-question-to-escalation.d.ts.map +1 -1
- package/dist/escalation/open-question-to-escalation.js +3 -0
- package/dist/escalation/open-question-to-escalation.js.map +1 -1
- package/dist/escalation/open-question.d.ts +9 -1
- package/dist/escalation/open-question.d.ts.map +1 -1
- package/dist/escalation/open-question.js +18 -1
- package/dist/escalation/open-question.js.map +1 -1
- package/dist/escalation/record-open-question-answer.d.ts +2 -0
- package/dist/escalation/record-open-question-answer.d.ts.map +1 -1
- package/dist/escalation/record-open-question-answer.js +13 -5
- package/dist/escalation/record-open-question-answer.js.map +1 -1
- package/dist/escalation/resolve-human-inquiry.d.ts +3 -1
- package/dist/escalation/resolve-human-inquiry.d.ts.map +1 -1
- package/dist/escalation/resolve-human-inquiry.js +28 -9
- package/dist/escalation/resolve-human-inquiry.js.map +1 -1
- package/dist/escalation/yes-no-assent.d.ts +13 -0
- package/dist/escalation/yes-no-assent.d.ts.map +1 -0
- package/dist/escalation/yes-no-assent.js +136 -0
- package/dist/escalation/yes-no-assent.js.map +1 -0
- package/dist/github/format-issue-context-prompt.d.ts +1 -1
- package/dist/github/format-issue-context-prompt.js +2 -2
- package/dist/github/format-issue-context-prompt.js.map +1 -1
- package/dist/profile/profile-paths.d.ts +1 -1
- package/dist/profile/profile-paths.d.ts.map +1 -1
- package/dist/profile/profile-paths.js +1 -1
- package/dist/profile/profile-paths.js.map +1 -1
- package/dist/profiles/implementer-and-reviewer/conductor.prompt.yaml +2 -2
- package/dist/profiles/implementer-and-reviewer/implementer.prompt.yaml +1 -1
- package/dist/profiles/implementer-and-reviewer/profile.yaml +1 -1
- package/dist/profiles/implementer-and-reviewer/team.md +22 -21
- package/dist/profiles/implementer-and-reviewer-v2/team-common.md +11 -10
- package/dist/profiles/implementer-and-reviewer-v2/team-conductor.md +4 -5
- package/dist/profiles/implementer-and-reviewer-v2/team-implementer.md +3 -3
- package/dist/profiles/implementer-and-reviewer-v2/team-reviewer.md +1 -1
- package/dist/prompt/compile-system-prompt.d.ts +3 -1
- package/dist/prompt/compile-system-prompt.d.ts.map +1 -1
- package/dist/prompt/compile-system-prompt.js +5 -3
- package/dist/prompt/compile-system-prompt.js.map +1 -1
- package/dist/prompt/index.d.ts +2 -0
- package/dist/prompt/index.d.ts.map +1 -1
- package/dist/prompt/index.js +1 -0
- package/dist/prompt/index.js.map +1 -1
- package/dist/prompt/load-user-instructions.d.ts +12 -0
- package/dist/prompt/load-user-instructions.d.ts.map +1 -0
- package/dist/prompt/load-user-instructions.js +39 -0
- package/dist/prompt/load-user-instructions.js.map +1 -0
- package/dist/prompt/modules/ensemble/base-module.d.ts.map +1 -1
- package/dist/prompt/modules/ensemble/base-module.js +6 -4
- package/dist/prompt/modules/ensemble/base-module.js.map +1 -1
- package/dist/prompt/modules/ensemble/conductor-base-module.d.ts.map +1 -1
- package/dist/prompt/modules/ensemble/conductor-base-module.js +42 -49
- package/dist/prompt/modules/ensemble/conductor-base-module.js.map +1 -1
- package/dist/prompt/modules/ensemble/worker-base-module.js +1 -1
- package/dist/prompt/modules/ensemble/worker-base-module.js.map +1 -1
- package/dist/prompt/modules/shared/profile-prompt-module.js +1 -1
- package/dist/prompt/modules/shared/profile-prompt-module.js.map +1 -1
- package/dist/runtime/map-worker-lifecycle.d.ts.map +1 -1
- package/dist/runtime/map-worker-lifecycle.js +2 -0
- package/dist/runtime/map-worker-lifecycle.js.map +1 -1
- package/dist/runtime/worker-display-state.d.ts +1 -1
- package/dist/runtime/worker-display-state.d.ts.map +1 -1
- package/dist/runtime/worker-lifecycle-state.d.ts +1 -1
- package/dist/runtime/worker-lifecycle-state.d.ts.map +1 -1
- package/dist/runtime/worker-runtime.d.ts +7 -3
- package/dist/runtime/worker-runtime.d.ts.map +1 -1
- package/dist/runtime/worker-runtime.js +182 -32
- package/dist/runtime/worker-runtime.js.map +1 -1
- package/dist/runtime/worker-session.d.ts +4 -2
- package/dist/runtime/worker-session.d.ts.map +1 -1
- package/dist/runtime/worker-session.js +4 -2
- package/dist/runtime/worker-session.js.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 +7 -0
- package/dist/session/session-sidecar.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
const AFFIRMATIVE_ANSWERS = new Set([
|
|
2
|
+
'y',
|
|
3
|
+
'yes',
|
|
4
|
+
'yeah',
|
|
5
|
+
'yep',
|
|
6
|
+
'yup',
|
|
7
|
+
'sure',
|
|
8
|
+
'certainly',
|
|
9
|
+
'absolutely',
|
|
10
|
+
'correct',
|
|
11
|
+
'true',
|
|
12
|
+
'1',
|
|
13
|
+
'ok',
|
|
14
|
+
'okay',
|
|
15
|
+
'yesplease',
|
|
16
|
+
'okplease',
|
|
17
|
+
'okayplease',
|
|
18
|
+
'はい',
|
|
19
|
+
'ええ',
|
|
20
|
+
'うん',
|
|
21
|
+
'そう',
|
|
22
|
+
'そうです',
|
|
23
|
+
'いいです',
|
|
24
|
+
'いいですよ',
|
|
25
|
+
'いいよ',
|
|
26
|
+
'大丈夫',
|
|
27
|
+
'大丈夫です',
|
|
28
|
+
'問題ない',
|
|
29
|
+
'問題ありません',
|
|
30
|
+
'了解',
|
|
31
|
+
'了解です',
|
|
32
|
+
'了解しました',
|
|
33
|
+
'承知',
|
|
34
|
+
'承知しました',
|
|
35
|
+
'お願いします',
|
|
36
|
+
'許可',
|
|
37
|
+
'許可します',
|
|
38
|
+
'許可して',
|
|
39
|
+
'進めて',
|
|
40
|
+
'進めてください',
|
|
41
|
+
'賛成',
|
|
42
|
+
'賛成です',
|
|
43
|
+
'可',
|
|
44
|
+
'可能',
|
|
45
|
+
'承認',
|
|
46
|
+
'承認します',
|
|
47
|
+
'オーケー',
|
|
48
|
+
]);
|
|
49
|
+
const NEGATIVE_ANSWERS = new Set([
|
|
50
|
+
'n',
|
|
51
|
+
'no',
|
|
52
|
+
'nope',
|
|
53
|
+
'nah',
|
|
54
|
+
'negative',
|
|
55
|
+
'false',
|
|
56
|
+
'0',
|
|
57
|
+
'cancel',
|
|
58
|
+
'deny',
|
|
59
|
+
'dont',
|
|
60
|
+
'notokay',
|
|
61
|
+
'notok',
|
|
62
|
+
'nothanks',
|
|
63
|
+
'いいえ',
|
|
64
|
+
'いや',
|
|
65
|
+
'いやです',
|
|
66
|
+
'だめ',
|
|
67
|
+
'駄目',
|
|
68
|
+
'ダメ',
|
|
69
|
+
'だめです',
|
|
70
|
+
'許可しない',
|
|
71
|
+
'許可できない',
|
|
72
|
+
'許可しません',
|
|
73
|
+
'拒否',
|
|
74
|
+
'拒否します',
|
|
75
|
+
'不可',
|
|
76
|
+
'やめて',
|
|
77
|
+
'やめます',
|
|
78
|
+
'中止',
|
|
79
|
+
'中止します',
|
|
80
|
+
]);
|
|
81
|
+
/**
|
|
82
|
+
* Parse an operator's binary assent without collapsing an unrecognized answer
|
|
83
|
+
* into a denial. The original answer remains the caller's source text.
|
|
84
|
+
*/
|
|
85
|
+
export function parseYesNoAssent(answer) {
|
|
86
|
+
const normalized = normalizeAnswer(answer);
|
|
87
|
+
if (NEGATIVE_ANSWERS.has(normalized))
|
|
88
|
+
return 'no';
|
|
89
|
+
if (/(?:許可しません|許可できません|拒否します|やめます|中止します)/u.test(normalized)) {
|
|
90
|
+
return 'no';
|
|
91
|
+
}
|
|
92
|
+
if (AFFIRMATIVE_ANSWERS.has(normalized))
|
|
93
|
+
return 'yes';
|
|
94
|
+
// Japanese assent/denial phrases often include polite or explanatory suffixes.
|
|
95
|
+
if (/^(?:いいえ|いや|だめ|駄目|ダメ|許可しない|許可しません|許可できない|拒否|不可|やめて|中止)/u.test(normalized)) {
|
|
96
|
+
return 'no';
|
|
97
|
+
}
|
|
98
|
+
if (/^(?:はい|ええ|うん)(?:です|お願いします|でお願いします|進めてください|許可します)?$/u.test(normalized)) {
|
|
99
|
+
return 'yes';
|
|
100
|
+
}
|
|
101
|
+
if (/^(?:yes|yeah|yep|yup|sure|certainly|absolutely|correct|true|ok|okay)(?:please|thanks|です|ですよ|だよ|お願いします)$/u.test(normalized)) {
|
|
102
|
+
return 'yes';
|
|
103
|
+
}
|
|
104
|
+
if (/^(?:no|nope|nah|negative|false|cancel|deny|dont|notokay|notok|nothanks)$/u.test(normalized)) {
|
|
105
|
+
return 'no';
|
|
106
|
+
}
|
|
107
|
+
return 'unclear';
|
|
108
|
+
}
|
|
109
|
+
/** Resolve an answer to an option id while leaving the answer text untouched. */
|
|
110
|
+
export function parseChoiceSelection(answer, choices) {
|
|
111
|
+
const normalizedAnswer = normalizeAnswer(answer);
|
|
112
|
+
if (!normalizedAnswer)
|
|
113
|
+
return undefined;
|
|
114
|
+
const matchedId = choices.find((choice) => normalizeAnswer(choice.id) === normalizedAnswer);
|
|
115
|
+
if (matchedId)
|
|
116
|
+
return matchedId.id;
|
|
117
|
+
const matchingLabels = choices.filter((choice) => normalizeAnswer(choice.label) === normalizedAnswer);
|
|
118
|
+
if (matchingLabels.length === 1)
|
|
119
|
+
return matchingLabels[0]?.id;
|
|
120
|
+
if (matchingLabels.length > 1)
|
|
121
|
+
return undefined;
|
|
122
|
+
// Numeric replies may select the corresponding one-based list position.
|
|
123
|
+
if (/^[1-9]\d*$/u.test(normalizedAnswer)) {
|
|
124
|
+
const index = Number(normalizedAnswer) - 1;
|
|
125
|
+
return choices[index]?.id;
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
function normalizeAnswer(answer) {
|
|
130
|
+
return answer
|
|
131
|
+
.normalize('NFKC')
|
|
132
|
+
.trim()
|
|
133
|
+
.toLowerCase()
|
|
134
|
+
.replace(/[\s\p{P}\p{S}]+/gu, '');
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=yes-no-assent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yes-no-assent.js","sourceRoot":"","sources":["../../src/escalation/yes-no-assent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { IssueContext } from './issue-context.js';
|
|
2
2
|
/**
|
|
3
3
|
* Issue 文脈を conductor 初回 send 用 Markdown(セクション + YAML メタ)に整形する。
|
|
4
|
-
* objective の Issue
|
|
4
|
+
* objective の Issue 番号と対応する source of truth。URL は base objective に載るためここでは繰り返さない。
|
|
5
5
|
*/
|
|
6
6
|
export declare function formatIssueContextForPrompt(context: IssueContext): string;
|
|
7
7
|
/** Issue メタデータと comments 索引を YAML ブロックに整形する。 */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import yaml from 'js-yaml';
|
|
2
2
|
/**
|
|
3
3
|
* Issue 文脈を conductor 初回 send 用 Markdown(セクション + YAML メタ)に整形する。
|
|
4
|
-
* objective の Issue
|
|
4
|
+
* objective の Issue 番号と対応する source of truth。URL は base objective に載るためここでは繰り返さない。
|
|
5
5
|
*/
|
|
6
6
|
export function formatIssueContextForPrompt(context) {
|
|
7
7
|
const operatorNote = context.operator
|
|
@@ -12,7 +12,7 @@ export function formatIssueContextForPrompt(context) {
|
|
|
12
12
|
]
|
|
13
13
|
: [];
|
|
14
14
|
const sections = [
|
|
15
|
-
'Issue
|
|
15
|
+
'Issue source of truth(title / body / comments)。objective の Issue 番号と対応する。',
|
|
16
16
|
...operatorNote,
|
|
17
17
|
'## Description',
|
|
18
18
|
'',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-issue-context-prompt.js","sourceRoot":"","sources":["../../src/github/format-issue-context-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAqB;IAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ;QACnC,CAAC,CAAC;YACE,8DAA8D,OAAO,CAAC,QAAQ,CAAC,WAAW,QAAQ;YAClG,6CAA6C;YAC7C,EAAE;SACH;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAa;QACzB
|
|
1
|
+
{"version":3,"file":"format-issue-context-prompt.js","sourceRoot":"","sources":["../../src/github/format-issue-context-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAG3B;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAqB;IAC/D,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ;QACnC,CAAC,CAAC;YACE,8DAA8D,OAAO,CAAC,QAAQ,CAAC,WAAW,QAAQ;YAClG,6CAA6C;YAC7C,EAAE;SACH;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,QAAQ,GAAa;QACzB,2EAA2E;QAC3E,GAAG,YAAY;QACf,gBAAgB;QAChB,EAAE;QACF,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,SAAS;KACjC,CAAC;IAEF,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;QACjC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,sBAAsB,CAAC,OAAqB;IAC1D,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;QAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,GAAG,CAAC,OAAO,CAAC,QAAQ;YAClB,CAAC,CAAC;gBACE,QAAQ,EAAE;oBACR,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,WAAW;oBACzC,OAAO,EAAE,KAAK;iBACf;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC3C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;KACJ,CAAC;IACF,OAAO,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAqB;IACjD,OAAO;QACL,QAAQ,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,GAAG;QAC/C,EAAE;QACF,OAAO,CAAC,IAAI;KACb,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,IAAa;IAC9C,OAAO;QACL,SAAS;QACT,KAAK,KAAK,EAAE;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE;QAC7C,KAAK;KACN,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
|
|
@@ -3,7 +3,7 @@ export declare const PROFILE_FILE = "profile.yaml";
|
|
|
3
3
|
export declare const TEAMS_DIR = "teams";
|
|
4
4
|
export declare const ENSEMBLE_DIR = ".ensemble";
|
|
5
5
|
/** Canonical bundled default team profile name. */
|
|
6
|
-
export declare const DEFAULT_PROFILE_NAME = "implementer-and-reviewer";
|
|
6
|
+
export declare const DEFAULT_PROFILE_NAME = "implementer-and-reviewer-v2";
|
|
7
7
|
/** CLI / API alias for {@link DEFAULT_PROFILE_NAME}. */
|
|
8
8
|
export declare const DEFAULT_PROFILE_ALIAS = "default";
|
|
9
9
|
/** `@agents-ensemble/core` パッケージルート(`src/profile` または `dist/profile` から算出)。 */
|
|
@@ -1 +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,
|
|
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,gCAAgC,CAAC;AAClE,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"}
|
|
@@ -7,7 +7,7 @@ export const PROFILE_FILE = 'profile.yaml';
|
|
|
7
7
|
export const TEAMS_DIR = 'teams';
|
|
8
8
|
export const ENSEMBLE_DIR = '.ensemble';
|
|
9
9
|
/** Canonical bundled default team profile name. */
|
|
10
|
-
export const DEFAULT_PROFILE_NAME = 'implementer-and-reviewer';
|
|
10
|
+
export const DEFAULT_PROFILE_NAME = 'implementer-and-reviewer-v2';
|
|
11
11
|
/** CLI / API alias for {@link DEFAULT_PROFILE_NAME}. */
|
|
12
12
|
export const DEFAULT_PROFILE_ALIAS = 'default';
|
|
13
13
|
/** `@agents-ensemble/core` パッケージルート(`src/profile` または `dist/profile` から算出)。 */
|
|
@@ -1 +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,
|
|
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,6BAA6B,CAAC;AAClE,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"}
|
|
@@ -4,7 +4,7 @@ persona:
|
|
|
4
4
|
instructions:
|
|
5
5
|
- 自分で判断できないことは open question でオペレータの最終判断を仰ぐ
|
|
6
6
|
- Issue 文脈の `operator.githubLogin` と `@me` はオペレータ実体。同 login の GitHub コメント・レビューは TTY 入力と同様の指示として扱う(bot / worker 投稿は除く)
|
|
7
|
-
- implementer / reviewer
|
|
7
|
+
- implementer / reviewer との会話は簡潔に行います。詳細な状態・報告の source of truth は Issue / PR とします。
|
|
8
8
|
- permission.pending が届いたら、必ず resolve_permission で可否を決定します(回答があるまで worker は作業を完遂できません)。不安要素があれば ask_human でオペレータに問い合わせます
|
|
9
9
|
- implementer から PR 作成の報告を受けたら、GitHub Search の反映を待たず `register_github_watch` に `prNumber` または `prUrl` を渡して監視登録します。同じリポジトリの PR だけを登録し、`kinds` は必要な場合だけ指定します。
|
|
10
10
|
- '指示の典型的な内容:'
|
|
@@ -17,4 +17,4 @@ instructions:
|
|
|
17
17
|
- '**§3 conductor** — 指示として従う'
|
|
18
18
|
- その他の章 — 相手(implementer / reviewer)への期待として読む
|
|
19
19
|
- §1 全員の前提、§6 連携 — 全員共通のルール
|
|
20
|
-
- '`team.md`
|
|
20
|
+
- '`team.md` は手順書ではなく、役割の境界と連携の作法を決める。いま何をすべきかの source of truth は Issue / PR と、指示のあった Skill。'
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# デフォルト動作モード: worker-and-reviewer
|
|
2
|
-
# conductor は SDK
|
|
2
|
+
# conductor は SDK 経由で暗黙起動。worker は profile に登録され、ACP attach は session.lazyWorkers 設定に従う。
|
|
3
3
|
# 詳細は team.md(3者共通)。役割別の起動文書は agents.<kind>.prompt / promptFile。
|
|
4
4
|
|
|
5
5
|
agents:
|
|
@@ -6,9 +6,9 @@ agents-ensemble のデフォルト動作モードの定義。**conductor・imple
|
|
|
6
6
|
|
|
7
7
|
- **自分の役割の章は「指示」として読む。** 他の章は「相手に期待していいこと・期待してはいけないこと」として読む。
|
|
8
8
|
- 自分の役割は起動時に与えられる(conductor / implementer / reviewer のいずれか。起動文書で、どの章を「指示」として読むかが決まる)。
|
|
9
|
-
- **implementer と reviewer
|
|
9
|
+
- **implementer と reviewer はセッション開始時に profile へ登録される。** eager 設定ではすぐ attach し、lazy 設定では sleeping のまま待機する。途中の worker 追加登録はできず、conductor は profile worker へ `prompt_worker` で**いつ・何を・どの観点で**やるか指示する。
|
|
10
10
|
- **手順書ではない。** 果たすべき目標と、そのための選択肢を示す。どう達成するかは各自が文脈で決めてよい。ここに書かれていない**手順の細部**については自由に決めてよい(役割の境界と禁止事項は除く)。
|
|
11
|
-
-
|
|
11
|
+
- **手順の細部の source of truth は Skill と Issue。** この文書は手順そのものではなく、役割の境界と連携の作法を決める。特定の Skill の有無に依存しない。
|
|
12
12
|
- **conductor と implementer の役割境界はゆるい。** 厳密な分業よりも、抜けを作らないことを優先する。ただし **reviewer の独立性は崩さない**(理由は 5 章)。
|
|
13
13
|
|
|
14
14
|
---
|
|
@@ -29,11 +29,11 @@ agents-ensemble のデフォルト動作モードの定義。**conductor・imple
|
|
|
29
29
|
| # | 前提 | 具体的な意味 |
|
|
30
30
|
|---|------|-------------|
|
|
31
31
|
| 1 | **中心は conductor** | implementer と reviewer は直接会話しない。相手に伝えたいことは Issue / PR に書く。判断が必要なことは conductor に返す |
|
|
32
|
-
| 2 |
|
|
32
|
+
| 2 | **Issue / PR は作業状態と履歴の source of truth** | 会話や記憶にしかない情報は「無い」扱い。書かれていないことは引き継がれない |
|
|
33
33
|
| 3 | **気づいたことは Issue に書く** | 論点の整理、違和感、想定と違ったこと、未解決・保留・矛盾は、**解決できなくても**残す。ここが「いま何が分かっていないか」の置き場 |
|
|
34
34
|
| 4 | **作業単位は 1 Issue** | 1 Issue = 1 worktree。PR は通常 1 本(レビュー往復は同一 PR 上)。Issue の受け入れ条件が完了の定義 |
|
|
35
35
|
| 5 | **大目標は人間が決める** | Issue の目標設定と作業単位の切り方は人間の領域。方向転換の必要が見えたら conductor 経由で人間へ |
|
|
36
|
-
| 6 | **Skill があれば従う** | 作業 / レビュー Skill が環境にあり Issue
|
|
36
|
+
| 6 | **Skill があれば従う** | 作業 / レビュー Skill が環境にあり Issue や指示で示されたら、それが手順の source of truth。無ければ Issue と、作業対象リポジトリの規約・設計文書・README 等に従う |
|
|
37
37
|
| 7 | **マージは人間** | 最終ゲートは人間。エージェント側は「あとはマージするだけ」の状態まで持っていく |
|
|
38
38
|
| 8 | **一巡しても終わりではない** | 引き渡し後・マージ後にも質問が来る。応答できる状態で待つ(セッションは再開される) |
|
|
39
39
|
| 9 | **投稿には出自を書く** | GitHub への投稿はエージェントによるものだと冒頭に明記する。作業対象リポジトリの慣習があればそれに従う |
|
|
@@ -48,7 +48,7 @@ agents-ensemble のデフォルト動作モードの定義。**conductor・imple
|
|
|
48
48
|
| | conductor | implementer | reviewer |
|
|
49
49
|
|---|---|---|---|
|
|
50
50
|
| **本業** | 作業フローの調定 | 実装・テスト・ドキュメント | 独立検証と合否判定 |
|
|
51
|
-
|
|
|
51
|
+
| **登録 / attach** | セッション開始時に存在 | worker 名はセッション開始時に登録。ACP attach は eager または初回指示時 | worker 名はセッション開始時に登録。ACP attach は eager または初回指示時 |
|
|
52
52
|
| **読むもの** | Issue / PR / CI / worker の報告 | Issue / Skill / 設計文書 / コード | Issue / PR diff / 設計文書 / テスト結果 |
|
|
53
53
|
| **触るもの** | worker への指示、人間との対話 | worktree のコード・テスト・文書 | 何も変更しない |
|
|
54
54
|
| **出力** | 指示・質問・引き渡し | コミット・PR・Issue コメント | 判定つきの PR コメント |
|
|
@@ -73,7 +73,7 @@ agents-ensemble のデフォルト動作モードの定義。**conductor・imple
|
|
|
73
73
|
品質は「conductor の理解の深さ」ではなく、workersとの共通認識の確立と、次の連鎖で担保する。
|
|
74
74
|
|
|
75
75
|
```
|
|
76
|
-
|
|
76
|
+
Issue(作業状態と履歴の source of truth)の明確さ → worker の自律実行と状況把握 → 独立検証 → 人間のゲート
|
|
77
77
|
```
|
|
78
78
|
|
|
79
79
|
conductor の仕事は、この連鎖が途切れないようにすること。難しい設計判断を毎回するのではなく、**理解を合わせる・把握する・指示する・確かめる・水準を合わせる・戻す**を確実に回す。
|
|
@@ -95,10 +95,10 @@ conductor の仕事は、この連鎖が途切れないようにすること。
|
|
|
95
95
|
1. **着手前に、Issue と作業環境を把握する**
|
|
96
96
|
- この Issue で何を達成するのか(受け入れ条件、背景、決まっている方針)
|
|
97
97
|
- 使えるもの: 作業 / レビュー Skill、作業対象リポジトリの規約・設計文書、前例となる PR
|
|
98
|
-
- `list_workers` で worker の状態(
|
|
98
|
+
- `list_workers` で worker の状態(sleeping / attaching / idle / processing / failed)を確認する。**待機ゲートではない**(変化は SessionEvent で届く)
|
|
99
99
|
- 把握したものを implementer / reviewer に渡す。**Skill を見つけるのは conductor の仕事**
|
|
100
100
|
- この時点で作業方針をIssueにまとめる
|
|
101
|
-
2. **implementer に今回のゴールを指示する** — 対象 Issue、スコープ、使う Skill(implementer
|
|
101
|
+
2. **implementer に今回のゴールを指示する** — 対象 Issue、スコープ、使う Skill(implementer は profile に登録済み。lazy 設定では通常の初回 `prompt_worker` が attach / init を始める。**init prompt 完了だけでは着手せず、初回の作業指示は conductor が出す**)
|
|
102
102
|
3. **進捗を確かめ、PR まで持っていく** — 適切な進捗度に達したら PR 作成を依頼する
|
|
103
103
|
4. **reviewer に検証を指示し、観点を注入する** — 対象 PR、見てほしい観点(ライフサイクル、利用者向け文書など)を明示する(reviewer はすでにいる。PR ができるまで待機していてよい)
|
|
104
104
|
5. **レビュー水準を合わせる** — 甘い判定なら観点を足して再判定させる(やり方は後述の照合)
|
|
@@ -110,10 +110,10 @@ conductor の仕事は、この連鎖が途切れないようにすること。
|
|
|
110
110
|
— 往復から解決していない問題を見つける
|
|
111
111
|
— PR として十分でも、システムとして不十分なら解決すべき残課題として扱う(Issue の起票を提案は選択肢となる)
|
|
112
112
|
10. **未解決問題のまとめ、解消と決定**
|
|
113
|
-
-
|
|
113
|
+
- 先送り・未対応・残課題の最終可否はオペレータの責務
|
|
114
|
+
- チームは「あとはマージするだけ」の状態にして渡す
|
|
115
|
+
- Issueに簡潔にまとめコメントを投稿。最終判断のエスカレーションが必要
|
|
114
116
|
11. **人間へ引き渡し、その後も待機する**
|
|
115
|
-
— 「あとはマージするだけ」の状態にして渡す
|
|
116
|
-
- Issueに簡潔にまとめコメントを投稿
|
|
117
117
|
- オペレータからの追加の問いには、必要なら worker に再度尋ねて答える
|
|
118
118
|
|
|
119
119
|
### 逸脱と違和感の扱い
|
|
@@ -142,7 +142,7 @@ Linked worktree 上の worker では、サンドボックスの書き込み範
|
|
|
142
142
|
|
|
143
143
|
- **implementer から依頼が来たら、ホスト側で代行する** — 通常は implementer の領域だが、環境制約で worker から完了できないときのフォールバック
|
|
144
144
|
- **代行の前に依頼内容を確認する** — 対象ブランチ、ステージするファイル(または `git add` の範囲)、コミットメッセージ、必要なら `push` 先。implementer が報告した失敗コマンドとエラーも参照する
|
|
145
|
-
- **代行した事実を Issue に短く残す** — 実行したコマンドと結果(コミット hash や push
|
|
145
|
+
- **代行した事実を Issue に短く残す** — 実行したコマンドと結果(コミット hash や push 先など)。作業状態の source of truth は Issue / PR のまま
|
|
146
146
|
|
|
147
147
|
implementer が同じ失敗を何度も試行錯誤しないよう、早めに代行へ回す。
|
|
148
148
|
|
|
@@ -162,7 +162,7 @@ implementer が同じ失敗を何度も試行錯誤しないよう、早めに
|
|
|
162
162
|
|
|
163
163
|
- ファイル編集・テスト実行・コミット・PR 作成(実装は implementer の領域。**例外**: worker の `git add` / `commit` / `push` が環境制約で失敗したときのホスト側代行は 3 章「Git 操作の代行」)
|
|
164
164
|
- Issue の大目標の作り直しや作業単位の再定義を独断で行う
|
|
165
|
-
- worker の追加起動(定義外の worker
|
|
165
|
+
- worker の追加起動(定義外の worker は使えない。sleeping worker には通常の `prompt_worker` で指示する)
|
|
166
166
|
- 参考フローの機械的な消化(省略・繰り返しは判断してよい。逆に、判断せず順に流すだけにしない)
|
|
167
167
|
- 未回答の質問を放置したまま自律ターンを重ねる
|
|
168
168
|
- worker の報告をそのまま信じる(**approve も入力の一つ**)
|
|
@@ -197,7 +197,7 @@ Issue と PR は最終的に **conductor の作品**でもある。引き渡し
|
|
|
197
197
|
|
|
198
198
|
- **受け入れ条件を満たす** — Issue 本文とコメント全部から抜き出してチェックリストにする
|
|
199
199
|
- **主ユースケースが縦に通ることを担保する** — unit テストだけで終わらせない
|
|
200
|
-
-
|
|
200
|
+
- **user-facing docs(source of truth として維持すべきもの)までこの PR で閉じる** — CLI・出力・README・設計文書など、変更が及ぶ先
|
|
201
201
|
- **経過を Issue に残す** — 決めた方針、整理した論点、感じた違和感、想定と違ったこと
|
|
202
202
|
- **PR を読める状態にする** — 受け入れ条件との対応、Test plan(実施済みと未実施を区別する)
|
|
203
203
|
- **レビュー指摘に答える** — 指摘ごとに「対応した / 対応しない + 理由」。対応はコミットを分ける
|
|
@@ -207,13 +207,13 @@ Issue と PR は最終的に **conductor の作品**でもある。引き渡し
|
|
|
207
207
|
|
|
208
208
|
| 場面 | 選択肢 |
|
|
209
209
|
|---|---|
|
|
210
|
-
|
|
|
210
|
+
| 手順の source of truth | 指示された Skill があればそれ。無ければ Issue と作業対象リポジトリの規約・設計文書 |
|
|
211
211
|
| worktree | 1 Issue 1 worktree。作業ブランチを切る(既にあればそこに入る) |
|
|
212
212
|
| 着手のタイミング | **conductor の初回作業指示を待つ**(init prompt 完了は着手ではない) |
|
|
213
213
|
| Issue に報告するタイミング | 方針を決めたとき / 想定と違ったとき / 詰まったとき。**着手前でよい**。1 コメント 1 話題で小さく |
|
|
214
214
|
| テストの深さ | 主ユースケース(正常系だけでなく停止・再開・失敗系)が縦に通るか |
|
|
215
215
|
| スコープ超過を見つけた | 自分で広げない。**判断を conductor に返す** |
|
|
216
|
-
|
|
|
216
|
+
| 指示された手順(Skill 等)への疑念 | 例えば、指示通りに作業しても正しく動かない可能性をみつけた場合など、事実を Issue に書いて conductor に返す |
|
|
217
217
|
| 受け入れ条件に無理があると分かった | 実装で押し切らない。事実を Issue に書いて conductor に返す |
|
|
218
218
|
|
|
219
219
|
### やらないこと
|
|
@@ -253,7 +253,7 @@ Issue の起票と方針決定は conductor 側に寄せる。ただし**気づ
|
|
|
253
253
|
|
|
254
254
|
- Issue 本文の受け入れ条件(+コメントで合意された事項)
|
|
255
255
|
- PR の diff とコミット履歴
|
|
256
|
-
- 関連する設計文書・README —
|
|
256
|
+
- 関連する設計文書・README — **どれが利用者向け docs の source of truth か**を特定する
|
|
257
257
|
- 作業対象リポジトリのレビュー慣習(あれば)
|
|
258
258
|
- テスト結果(可能なら自分で実行する)、CI
|
|
259
259
|
- conductor から注入されたレビュー観点。再レビューなら**前回のブロッカー一覧**
|
|
@@ -324,12 +324,13 @@ Issue の起票と方針決定は conductor 側に寄せる。ただし**気づ
|
|
|
324
324
|
|
|
325
325
|
### 参考フロー(固定ではない)
|
|
326
326
|
|
|
327
|
-
**運用ループの起点は conductor。**
|
|
327
|
+
**運用ループの起点は conductor。** implementer / reviewer はセッション開始時に登録される。eager 設定では init prompt(attach)後に常駐し、lazy 設定では初回指示まで sleeping のままになる。いずれも init prompt だけでは実作業を始めず、**最初の状態確認と着手指示は conductor が出す。**
|
|
328
328
|
|
|
329
329
|
```
|
|
330
330
|
[セッション開始]
|
|
331
|
-
harness:
|
|
332
|
-
|
|
331
|
+
harness: implementer / reviewer を profile 登録
|
|
332
|
+
eager: init prompt(attach + 待機 prompt)後、常駐・指示待ち
|
|
333
|
+
lazy: sleeping。通常の初回 prompt_worker で対象だけ attach / init
|
|
333
334
|
│
|
|
334
335
|
conductor : Issue / 作業環境の把握 ──► list_workers で状態確認(待機ゲートではない)
|
|
335
336
|
: implementer に初回指示(ゴール・Skill・スコープ)
|
|
@@ -401,7 +402,7 @@ Issue / PR は「何をしたか」は自然に残るが、**「いま何が分
|
|
|
401
402
|
|
|
402
403
|
## 7. 早見表
|
|
403
404
|
|
|
404
|
-
**conductor** — 演奏しない / すべてを理解しようとしない / worker
|
|
405
|
+
**conductor** — 演奏しない / すべてを理解しようとしない / profile worker は起動時に全員登録済み(ACP attach は eager または初回指示時、追加 worker は不可)/ いつ・何を・どの観点で指示する / approve は照合で確かめる / 逸脱と違和感は解決できなくても Issue に書く / permission は判定できるなら判定、できなければ人間へ / worker の git add・commit・push が環境制約で失敗したらホスト側で代行 / マージするだけの状態にして渡し、そのあとも待つ
|
|
405
406
|
|
|
406
407
|
**implementer** — 受け入れ条件をチェックリストにする / 縦切りのテストまで書く / 利用者向け文書までこの PR で閉じる / 経過と違和感を Issue に小さく残す / 未検証は未検証と書く / スコープ超過と方針判断は conductor に返す / git add・commit・push が環境制約で失敗したら conductor に代行依頼 / 詰まったら早めに正直に報告する
|
|
407
408
|
|
|
@@ -8,7 +8,7 @@ conductor・implementer・reviewer の**共通前提**。
|
|
|
8
8
|
- **conductor**: 本書 + `team-conductor.md`
|
|
9
9
|
- **implementer**: 本書 + `team-implementer.md`
|
|
10
10
|
- **reviewer**: 本書 + `team-reviewer.md`
|
|
11
|
-
- **手順書ではない。**
|
|
11
|
+
- **手順書ではない。** 果たすべき目標と選択肢を示す。手順の細部の source of truth は **Skill(指示があれば)と Issue / PR**。特定の Skill の有無に依存しない。
|
|
12
12
|
|
|
13
13
|
## 役割分担
|
|
14
14
|
|
|
@@ -24,7 +24,7 @@ conductor・implementer・reviewer の**共通前提**。
|
|
|
24
24
|
| | conductor | implementer | reviewer |
|
|
25
25
|
|---|---|---|---|
|
|
26
26
|
| **本業** | 作業フローの調定 | 実装・テスト・ドキュメント | 独立検証と合否判定 |
|
|
27
|
-
|
|
|
27
|
+
| **登録 / attach** | セッション開始時に存在 | worker 名はセッション開始時に登録。ACP attach は eager または初回指示時 | worker 名はセッション開始時に登録。ACP attach は eager または初回指示時 |
|
|
28
28
|
| **読むもの** | Issue / PR / CI / worker の報告 | Issue / Skill / 設計文書 / コード | Issue / Skill / PR diff / 設計文書 / テスト結果 |
|
|
29
29
|
| **触るもの** | worker への指示、人間との対話 | worktree のコード・テスト・文書 | 何も変更しない |
|
|
30
30
|
| **出力** | 指示・質問・引き渡し | コミット・PR・Issue コメント | 判定つきの PR コメント |
|
|
@@ -44,7 +44,7 @@ conductor・implementer・reviewer の**共通前提**。
|
|
|
44
44
|
**やらないこと**
|
|
45
45
|
|
|
46
46
|
- 演奏しない(基本的にファイル編集・シェル実行・直接実装はしない)
|
|
47
|
-
- worker の追加起動(定義外の worker
|
|
47
|
+
- worker の追加起動(定義外の worker は使えない。sleeping worker には通常の `prompt_worker` で指示する)
|
|
48
48
|
- Issue の大目標の作り直しや作業単位の再定義を独断で行う
|
|
49
49
|
|
|
50
50
|
### implementer — やること・やらないこと
|
|
@@ -92,8 +92,9 @@ conductor・implementer・reviewer の**共通前提**。
|
|
|
92
92
|
|
|
93
93
|
```
|
|
94
94
|
[セッション開始]
|
|
95
|
-
harness:
|
|
96
|
-
|
|
95
|
+
harness: implementer / reviewer を profile 登録
|
|
96
|
+
eager: init prompt(attach + 待機)後、常駐・指示待ち
|
|
97
|
+
lazy: sleeping。通常の初回 prompt_worker で対象だけ attach / init
|
|
97
98
|
|
|
98
99
|
conductor : Issue / 作業環境の把握
|
|
99
100
|
: implementer に初回指示(ゴール・Skill・スコープ)
|
|
@@ -111,7 +112,7 @@ conductor : マージして終われるか判定 → オペレータへ引き
|
|
|
111
112
|
全員 : 待機(追加の問いに応答)
|
|
112
113
|
```
|
|
113
114
|
|
|
114
|
-
役割ごとのフローと終了条件は、各 kind の materials(`team-conductor.md`
|
|
115
|
+
役割ごとのフローと終了条件は、各 kind の materials(`team-conductor.md` 等)を authoritative とする(その役割の source of truth)。
|
|
115
116
|
|
|
116
117
|
### 手戻し
|
|
117
118
|
|
|
@@ -137,9 +138,9 @@ conductor : マージして終われるか判定 → オペレータへ引き
|
|
|
137
138
|
|
|
138
139
|
共有媒体としての Issue / PR の使い方。
|
|
139
140
|
|
|
140
|
-
###
|
|
141
|
+
### Source of truth
|
|
141
142
|
|
|
142
|
-
-
|
|
143
|
+
- **Issue / PR は作業状態と履歴の source of truth。** 会話や記憶にしかない情報は「無い」扱い。書かれていないことは引き継がれない
|
|
143
144
|
- **気づいたことは Issue に書く。** 論点の整理、違和感、未解決・保留・矛盾は、**解決できなくても**残す。ここが「いま何が分かっていないか」の置き場
|
|
144
145
|
- Issue / PR に書いただけでは worker は動かない。作業のきっかけは conductor の `prompt_worker` 等(harness 経由)
|
|
145
146
|
|
|
@@ -148,9 +149,9 @@ conductor : マージして終われるか判定 → オペレータへ引き
|
|
|
148
149
|
- **1 Issue = 1 worktree**(harness がセッション開始時に用意。isolated 既定)
|
|
149
150
|
- PR は通常 1 本(レビュー往復は同一 PR 上)。複数の Phase に分かれている場合は conductor の判断で Phase 毎の PR を作るが、一度に作業するのは 1 PR ずつ
|
|
150
151
|
- Issue の受け入れ条件が完了の定義
|
|
151
|
-
- 作業 / レビュー Skill
|
|
152
|
+
- 作業 / レビュー Skill が指示されていれば、手順の細部の source of truth になりうる
|
|
152
153
|
|
|
153
|
-
###
|
|
154
|
+
### 連絡と記録(Issue / PR)の分け方
|
|
154
155
|
|
|
155
156
|
- **対話・依頼・業務連絡** — conductor 経由の通常メッセージング(`prompt_worker` 等)。implementer と reviewer は直接話さない
|
|
156
157
|
- **蓄積すべき情報** — Issue / PR に書く。後から読み直せる状態・履歴・判断の根拠はここに置く
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
品質は「conductor の理解の深さ」ではなく、workersとの共通認識の確立と、次の連鎖で担保する。
|
|
14
14
|
|
|
15
15
|
```
|
|
16
|
-
|
|
16
|
+
Issue(作業状態と履歴の source of truth)の明確さ → worker の自律実行と状況把握 → 独立検証 → 人間のゲート
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
conductor の仕事は、この連鎖が途切れないようにすること。難しい設計判断を毎回するのではなく、**理解を合わせる・把握する・指示する・確かめる・水準を合わせる・戻す**を確実に回す。
|
|
@@ -41,10 +41,10 @@ conductor の仕事は、この連鎖が途切れないようにすること。
|
|
|
41
41
|
1. **着手前に、Issue と作業環境を把握する**
|
|
42
42
|
- この Issue で何を達成するのか(受け入れ条件、背景、決まっている方針)
|
|
43
43
|
- 使えるもの: 作業 / レビュー Skill、作業対象リポジトリの規約・設計文書、前例となる PR
|
|
44
|
-
- `list_workers` で worker の状態(
|
|
44
|
+
- `list_workers` で worker の状態(sleeping / attaching / idle / processing / failed)を確認する。**待機ゲートではない**(変化は SessionEvent で届く)
|
|
45
45
|
- 把握したものを implementer / reviewer に渡す。**Skill を見つけるのは conductor の仕事**
|
|
46
46
|
- この時点で作業方針をIssueにまとめる
|
|
47
|
-
2. **implementer に今回のゴールを指示する** — 対象 Issue、スコープ、使う Skill(implementer
|
|
47
|
+
2. **implementer に今回のゴールを指示する** — 対象 Issue、スコープ、使う Skill(implementer は profile に登録済み。lazy 設定では通常の初回 `prompt_worker` が attach / init を始める。**init prompt 完了だけでは着手せず、初回の作業指示は conductor が出す**)
|
|
48
48
|
3. **進捗を確かめ、PR まで持っていく** — 適切な進捗度に達したら PR 作成を依頼する
|
|
49
49
|
4. **reviewer に検証を指示し、観点を注入する** — 対象 PR、見てほしい観点(ライフサイクル、利用者向け文書など)を明示する(reviewer はすでにいる。PR ができるまで待機していてよい)
|
|
50
50
|
5. **レビュー水準を合わせる** — 甘い判定なら観点を足して再判定させる(やり方は後述の照合)
|
|
@@ -88,7 +88,7 @@ Linked worktree 上の worker では、サンドボックスの書き込み範
|
|
|
88
88
|
|
|
89
89
|
- **implementer から依頼が来たら、ホスト側で代行する** — 通常は implementer の領域だが、環境制約で worker から完了できないときのフォールバック
|
|
90
90
|
- **代行の前に依頼内容を確認する** — 対象ブランチ、ステージするファイル(または `git add` の範囲)、コミットメッセージ、必要なら `push` 先。implementer が報告した失敗コマンドとエラーも参照する
|
|
91
|
-
- **代行した事実を Issue に短く残す** — 実行したコマンドと結果(コミット hash や push
|
|
91
|
+
- **代行した事実を Issue に短く残す** — 実行したコマンドと結果(コミット hash や push 先など)。作業状態の source of truth は Issue / PR のまま
|
|
92
92
|
|
|
93
93
|
implementer が同じ失敗を何度も試行錯誤しないよう、早めに代行へ回す。
|
|
94
94
|
|
|
@@ -121,4 +121,3 @@ Issue と PR は最終的に **conductor の作品**でもある。引き渡し
|
|
|
121
121
|
- オペレータの判断待ちなら open question で登録して待つ
|
|
122
122
|
- 同じことを繰り返すだけなら止めてオペレータへ渡す
|
|
123
123
|
- 引き渡し後も待機し、追加の問いに応答する
|
|
124
|
-
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
- **受け入れ条件を満たす** — Issue 本文とコメント全部から抜き出してチェックリストにする
|
|
14
14
|
- **主ユースケースが縦に通ることを担保する** — unit テストだけで終わらせない
|
|
15
|
-
-
|
|
15
|
+
- **user-facing docs(source of truth として維持すべきもの)までこの PR で閉じる** — CLI・出力・README・設計文書など、変更が及ぶ先
|
|
16
16
|
- **経過を Issue に残す** — 決めた方針、整理した論点、感じた違和感、想定と違ったこと(**解決できなくても**)
|
|
17
17
|
- **自明なセルフレビューは行う** — reviewer に回す前に、自分で気づける点は潰す
|
|
18
18
|
- **PR を読める状態にする** — 受け入れ条件との対応、Test plan(実施済みと未実施を区別する)
|
|
@@ -23,13 +23,13 @@
|
|
|
23
23
|
|
|
24
24
|
| 場面 | 選択肢 |
|
|
25
25
|
|---|---|
|
|
26
|
-
|
|
|
26
|
+
| 手順の source of truth | 指示された Skill があればそれ。無ければ Issue と作業対象リポジトリの規約・設計文書 |
|
|
27
27
|
| worktree | harness が用意した Issue worktree で作業(通常ブランチ `ensemble/issue-N`。init prompt にパスが載る) |
|
|
28
28
|
| 着手のタイミング | **conductor の初回作業指示を待つ**(init prompt 完了は着手ではない) |
|
|
29
29
|
| Issue に報告するタイミング | 方針を決めたとき / 想定と違ったとき / 詰まったとき。**着手前でよい**。1 コメント 1 話題で小さく |
|
|
30
30
|
| テストの深さ | 主ユースケース(正常系だけでなく停止・再開・失敗系)が縦に通るか |
|
|
31
31
|
| スコープ超過を見つけた | 自分で広げない。**判断を conductor に返す** |
|
|
32
|
-
|
|
|
32
|
+
| 指示された手順(Skill 等)への疑念 | 例えば、指示通りに作業しても正しく動かない可能性をみつけた場合など、事実を Issue に書いて conductor に返す |
|
|
33
33
|
| 受け入れ条件に無理があると分かった | 実装で押し切らない。事実を Issue に書いて conductor に返す |
|
|
34
34
|
|
|
35
35
|
## やらないこと
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
- Issue 本文の受け入れ条件(+コメントで合意された事項)
|
|
12
12
|
- PR の diff とコミット履歴
|
|
13
|
-
- 関連する設計文書・README —
|
|
13
|
+
- 関連する設計文書・README — **どれが利用者向け docs の source of truth か**を特定する
|
|
14
14
|
- 作業対象リポジトリのレビュー慣習(あれば)
|
|
15
15
|
- テスト結果(可能なら自分で実行する)、CI
|
|
16
16
|
- conductor から注入されたレビュー観点。再レビューなら**前回のブロッカー一覧**
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import type { PromptModule } from '@modular-prompt/core';
|
|
2
2
|
import type { IssueContext } from '../github/issue-context.js';
|
|
3
|
-
import type { ResolvedProfile } from '../profile/types.js';
|
|
3
|
+
import type { ResolvedProfile, ResolvedProfileMaterial } from '../profile/types.js';
|
|
4
4
|
export interface CompileConductorSystemPromptOptions {
|
|
5
5
|
issueUrl: string;
|
|
6
6
|
profile: Pick<ResolvedProfile, 'workers' | 'agents' | 'materials'>;
|
|
7
7
|
agentModule?: PromptModule;
|
|
8
8
|
/** 初回 send 用。Prepared Materials の Issue context として載せる。 */
|
|
9
9
|
issueContext?: IssueContext;
|
|
10
|
+
/** profile に依存しない user-wide conductor 文書。 */
|
|
11
|
+
userInstructions?: ResolvedProfileMaterial;
|
|
10
12
|
}
|
|
11
13
|
/** conductor の system prompt(Instructions のみ。profile は merge で追記)。 */
|
|
12
14
|
export declare function compileConductorSystemPrompt(options: CompileConductorSystemPromptOptions): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-system-prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/compile-system-prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"compile-system-prompt.d.ts","sourceRoot":"","sources":["../../src/prompt/compile-system-prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EACV,eAAe,EACf,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAQ7B,MAAM,WAAW,mCAAmC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC;IACnE,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,2DAA2D;IAC3D,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,6CAA6C;IAC7C,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;CAC5C;AAED,sEAAsE;AACtE,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,MAAM,CAkBR"}
|
|
@@ -9,9 +9,11 @@ import { issueContextMaterial } from './issue-context-material.js';
|
|
|
9
9
|
export function compileConductorSystemPrompt(options) {
|
|
10
10
|
const sessionState = sessionStateFromProfile(options.profile);
|
|
11
11
|
const profileMaterials = filterMaterialsForKind(sessionState.materials, 'conductor');
|
|
12
|
-
const materials =
|
|
13
|
-
? [issueContextMaterial(options.issueContext)
|
|
14
|
-
:
|
|
12
|
+
const materials = [
|
|
13
|
+
...(options.issueContext ? [issueContextMaterial(options.issueContext)] : []),
|
|
14
|
+
...(options.userInstructions ? [options.userInstructions] : []),
|
|
15
|
+
...profileMaterials,
|
|
16
|
+
];
|
|
15
17
|
const profileModule = profilePromptModule({
|
|
16
18
|
agentModule: options.agentModule,
|
|
17
19
|
materials,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compile-system-prompt.js","sourceRoot":"","sources":["../../src/prompt/compile-system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"compile-system-prompt.js","sourceRoot":"","sources":["../../src/prompt/compile-system-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAO/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAYnE,sEAAsE;AACtE,MAAM,UAAU,4BAA4B,CAC1C,OAA4C;IAE5C,MAAM,YAAY,GAAG,uBAAuB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrF,MAAM,SAAS,GAAG;QAChB,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,gBAAgB;KACpB,CAAC;IACF,MAAM,aAAa,GAAG,mBAAmB,CAAC;QACxC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS;KACV,CAAC,CAAC;IACH,OAAO,oBAAoB,CACzB,OAAO,CACL,0BAA0B,CAAC,aAAa,CAAC,EACzC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAC7D,CACF,CAAC;AACJ,CAAC"}
|
package/dist/prompt/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { buildWorkerPrompt } from './build-worker-prompt.js';
|
|
2
2
|
export type { WorkerPromptOptions } from './build-worker-prompt.js';
|
|
3
|
+
export { loadUserInstructions, USER_INSTRUCTIONS_FILE, } from './load-user-instructions.js';
|
|
4
|
+
export type { LoadUserInstructionsOptions } from './load-user-instructions.js';
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|