@agents-ensemble/cli 0.0.0 → 0.1.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/async-operator-input.d.ts +6 -0
- package/dist/async-operator-input.d.ts.map +1 -0
- package/dist/async-operator-input.js +58 -0
- package/dist/async-operator-input.js.map +1 -0
- package/dist/display/create-session-display-sink.d.ts +9 -0
- package/dist/display/create-session-display-sink.d.ts.map +1 -0
- package/dist/display/create-session-display-sink.js +31 -0
- package/dist/display/create-session-display-sink.js.map +1 -0
- package/dist/display/select-session-display-backend.d.ts +11 -0
- package/dist/display/select-session-display-backend.d.ts.map +1 -0
- package/dist/display/select-session-display-backend.js +16 -0
- package/dist/display/select-session-display-backend.js.map +1 -0
- package/dist/display/session-display-backend.d.ts +7 -0
- package/dist/display/session-display-backend.d.ts.map +1 -0
- package/dist/display/session-display-backend.js +2 -0
- package/dist/display/session-display-backend.js.map +1 -0
- package/dist/display/session-display-reducer.d.ts +6 -0
- package/dist/display/session-display-reducer.d.ts.map +1 -0
- package/dist/display/session-display-reducer.js +74 -0
- package/dist/display/session-display-reducer.js.map +1 -0
- package/dist/display/session-display-state.d.ts +14 -0
- package/dist/display/session-display-state.d.ts.map +1 -0
- package/dist/display/session-display-state.js +6 -0
- package/dist/display/session-display-state.js.map +1 -0
- package/dist/display/string-session-display-backend.d.ts +8 -0
- package/dist/display/string-session-display-backend.d.ts.map +1 -0
- package/dist/display/string-session-display-backend.js +18 -0
- package/dist/display/string-session-display-backend.js.map +1 -0
- package/dist/display/stub-session-display-backend.d.ts +15 -0
- package/dist/display/stub-session-display-backend.d.ts.map +1 -0
- package/dist/display/stub-session-display-backend.js +17 -0
- package/dist/display/stub-session-display-backend.js.map +1 -0
- package/dist/format-models-list.d.ts +9 -0
- package/dist/format-models-list.d.ts.map +1 -0
- package/dist/format-models-list.js +17 -0
- package/dist/format-models-list.js.map +1 -0
- package/dist/format-session-summary.d.ts +4 -0
- package/dist/format-session-summary.d.ts.map +1 -0
- package/dist/format-session-summary.js +25 -0
- package/dist/format-session-summary.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +124 -0
- package/dist/index.js.map +1 -0
- package/dist/issue-command.d.ts +38 -0
- package/dist/issue-command.d.ts.map +1 -0
- package/dist/issue-command.js +117 -0
- package/dist/issue-command.js.map +1 -0
- package/dist/parse-worktree-mode.d.ts +4 -0
- package/dist/parse-worktree-mode.d.ts.map +1 -0
- package/dist/parse-worktree-mode.js +10 -0
- package/dist/parse-worktree-mode.js.map +1 -0
- package/dist/prompt-human-inquiry.d.ts +3 -0
- package/dist/prompt-human-inquiry.d.ts.map +1 -0
- package/dist/prompt-human-inquiry.js +29 -0
- package/dist/prompt-human-inquiry.js.map +1 -0
- package/dist/prompt-operator-input.d.ts +7 -0
- package/dist/prompt-operator-input.d.ts.map +1 -0
- package/dist/prompt-operator-input.js +51 -0
- package/dist/prompt-operator-input.js.map +1 -0
- package/dist/prompt-permission.d.ts +4 -0
- package/dist/prompt-permission.d.ts.map +1 -0
- package/dist/prompt-permission.js +8 -0
- package/dist/prompt-permission.js.map +1 -0
- package/dist/resolve-cli-max-turns.d.ts +8 -0
- package/dist/resolve-cli-max-turns.d.ts.map +1 -0
- package/dist/resolve-cli-max-turns.js +13 -0
- package/dist/resolve-cli-max-turns.js.map +1 -0
- package/dist/session-log-lines.d.ts +10 -0
- package/dist/session-log-lines.d.ts.map +1 -0
- package/dist/session-log-lines.js +121 -0
- package/dist/session-log-lines.js.map +1 -0
- package/dist/session-sinks.d.ts +20 -0
- package/dist/session-sinks.d.ts.map +1 -0
- package/dist/session-sinks.js +67 -0
- package/dist/session-sinks.js.map +1 -0
- package/dist/tui/activity-log.d.ts +32 -0
- package/dist/tui/activity-log.d.ts.map +1 -0
- package/dist/tui/activity-log.js +79 -0
- package/dist/tui/activity-log.js.map +1 -0
- package/dist/tui/compute-operator-input-cursor-y.d.ts +48 -0
- package/dist/tui/compute-operator-input-cursor-y.d.ts.map +1 -0
- package/dist/tui/compute-operator-input-cursor-y.js +52 -0
- package/dist/tui/compute-operator-input-cursor-y.js.map +1 -0
- package/dist/tui/create-issue-session-tui-host.d.ts +12 -0
- package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -0
- package/dist/tui/create-issue-session-tui-host.js +88 -0
- package/dist/tui/create-issue-session-tui-host.js.map +1 -0
- package/dist/tui/create-issue-session-tui-host.test.d.ts +2 -0
- package/dist/tui/create-issue-session-tui-host.test.d.ts.map +1 -0
- package/dist/tui/create-issue-session-tui-host.test.js +133 -0
- package/dist/tui/create-issue-session-tui-host.test.js.map +1 -0
- package/dist/tui/create-tui-telemetry-sink.d.ts +5 -0
- package/dist/tui/create-tui-telemetry-sink.d.ts.map +1 -0
- package/dist/tui/create-tui-telemetry-sink.js +18 -0
- package/dist/tui/create-tui-telemetry-sink.js.map +1 -0
- package/dist/tui/format-operator-context.d.ts +9 -0
- package/dist/tui/format-operator-context.d.ts.map +1 -0
- package/dist/tui/format-operator-context.js +17 -0
- package/dist/tui/format-operator-context.js.map +1 -0
- package/dist/tui/ime-text-input.d.ts +31 -0
- package/dist/tui/ime-text-input.d.ts.map +1 -0
- package/dist/tui/ime-text-input.js +111 -0
- package/dist/tui/ime-text-input.js.map +1 -0
- package/dist/tui/ime-text-input.test.d.ts +2 -0
- package/dist/tui/ime-text-input.test.d.ts.map +1 -0
- package/dist/tui/ime-text-input.test.js +62 -0
- package/dist/tui/ime-text-input.test.js.map +1 -0
- package/dist/tui/ink-test-keys.d.ts +22 -0
- package/dist/tui/ink-test-keys.d.ts.map +1 -0
- package/dist/tui/ink-test-keys.js +26 -0
- package/dist/tui/ink-test-keys.js.map +1 -0
- package/dist/tui/issue-session-tui.d.ts +8 -0
- package/dist/tui/issue-session-tui.d.ts.map +1 -0
- package/dist/tui/issue-session-tui.js +201 -0
- package/dist/tui/issue-session-tui.js.map +1 -0
- package/dist/tui/issue-session-tui.test.d.ts +2 -0
- package/dist/tui/issue-session-tui.test.d.ts.map +1 -0
- package/dist/tui/issue-session-tui.test.js +529 -0
- package/dist/tui/issue-session-tui.test.js.map +1 -0
- package/dist/tui/open-questions-pane.d.ts +32 -0
- package/dist/tui/open-questions-pane.d.ts.map +1 -0
- package/dist/tui/open-questions-pane.js +101 -0
- package/dist/tui/open-questions-pane.js.map +1 -0
- package/dist/tui/operator-input-key-reducer.d.ts +36 -0
- package/dist/tui/operator-input-key-reducer.d.ts.map +1 -0
- package/dist/tui/operator-input-key-reducer.js +141 -0
- package/dist/tui/operator-input-key-reducer.js.map +1 -0
- package/dist/tui/operator-input-layout.d.ts +29 -0
- package/dist/tui/operator-input-layout.d.ts.map +1 -0
- package/dist/tui/operator-input-layout.js +120 -0
- package/dist/tui/operator-input-layout.js.map +1 -0
- package/dist/tui/orchestration-pane-frame.d.ts +9 -0
- package/dist/tui/orchestration-pane-frame.d.ts.map +1 -0
- package/dist/tui/orchestration-pane-frame.js +27 -0
- package/dist/tui/orchestration-pane-frame.js.map +1 -0
- package/dist/tui/tui-layout-constants.d.ts +48 -0
- package/dist/tui/tui-layout-constants.d.ts.map +1 -0
- package/dist/tui/tui-layout-constants.js +48 -0
- package/dist/tui/tui-layout-constants.js.map +1 -0
- package/dist/tui/tui-view-model.d.ts +20 -0
- package/dist/tui/tui-view-model.d.ts.map +1 -0
- package/dist/tui/tui-view-model.js +69 -0
- package/dist/tui/tui-view-model.js.map +1 -0
- package/dist/tui/wrap-text-to-width.d.ts +14 -0
- package/dist/tui/wrap-text-to-width.d.ts.map +1 -0
- package/dist/tui/wrap-text-to-width.js +55 -0
- package/dist/tui/wrap-text-to-width.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { findLatestSessionSidecarForIssue, loadProfile, runIssueSession, SessionLogger, type ConductorSessionResult } from '@agents-ensemble/core';
|
|
2
|
+
import { isOperatorInputInteractive, isOperatorInputTty } from './prompt-operator-input.js';
|
|
3
|
+
export interface IssueCommandOptions {
|
|
4
|
+
repoRoot: string;
|
|
5
|
+
conductorCwd: string;
|
|
6
|
+
resume?: string;
|
|
7
|
+
continue?: boolean;
|
|
8
|
+
profile?: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
maxTurns?: number;
|
|
11
|
+
noMaxTurns?: boolean;
|
|
12
|
+
noWait?: boolean;
|
|
13
|
+
worktree: string;
|
|
14
|
+
/** commander の `--no-github-monitor` 用。false で監視無効。 */
|
|
15
|
+
githubMonitor?: boolean;
|
|
16
|
+
githubMonitorDebounceMs?: number;
|
|
17
|
+
}
|
|
18
|
+
export interface IssueCommandDeps {
|
|
19
|
+
isOperatorInputInteractive?: typeof isOperatorInputInteractive;
|
|
20
|
+
isOperatorInputTty?: typeof isOperatorInputTty;
|
|
21
|
+
runIssueSession?: typeof runIssueSession;
|
|
22
|
+
loadProfile?: typeof loadProfile;
|
|
23
|
+
SessionLogger?: typeof SessionLogger;
|
|
24
|
+
findLatestSessionSidecarForIssue?: typeof findLatestSessionSidecarForIssue;
|
|
25
|
+
}
|
|
26
|
+
export interface ResolveResumeAgentIdResult {
|
|
27
|
+
resumeAgentId?: string;
|
|
28
|
+
continuedFromSidecar?: string;
|
|
29
|
+
}
|
|
30
|
+
/** `--resume` / `--continue` から `runIssueSession` に渡す `resumeAgentId` を解決する。 */
|
|
31
|
+
export declare function resolveResumeAgentIdFromOptions(options: Pick<IssueCommandOptions, 'resume' | 'continue'>, context: {
|
|
32
|
+
issueUrl: string;
|
|
33
|
+
repoRoot: string;
|
|
34
|
+
}, deps?: Pick<IssueCommandDeps, 'findLatestSessionSidecarForIssue'>): Promise<ResolveResumeAgentIdResult>;
|
|
35
|
+
/** `ensemble issue` の CLI オプションから `runIssueSession` に渡す `maxTurns` を決定する。 */
|
|
36
|
+
export declare function resolveIssueSessionMaxTurns(options: Pick<IssueCommandOptions, 'maxTurns' | 'noMaxTurns'>, interactive: boolean): number;
|
|
37
|
+
export declare function executeIssueCommand(issueUrl: string, options: IssueCommandOptions, deps?: IssueCommandDeps): Promise<ConductorSessionResult>;
|
|
38
|
+
//# sourceMappingURL=issue-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-command.d.ts","sourceRoot":"","sources":["../src/issue-command.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gCAAgC,EAChC,WAAW,EAEX,eAAe,EACf,aAAa,EACb,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAQ5F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B,CAAC,EAAE,OAAO,0BAA0B,CAAC;IAC/D,kBAAkB,CAAC,EAAE,OAAO,kBAAkB,CAAC;IAC/C,eAAe,CAAC,EAAE,OAAO,eAAe,CAAC;IACzC,WAAW,CAAC,EAAE,OAAO,WAAW,CAAC;IACjC,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,gCAAgC,CAAC,EAAE,OAAO,gCAAgC,CAAC;CAC5E;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,gFAAgF;AAChF,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,UAAU,CAAC,EACzD,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,GAAE,IAAI,CAAC,gBAAgB,EAAE,kCAAkC,CAAM,GACpE,OAAO,CAAC,0BAA0B,CAAC,CA2BrC;AAED,6EAA6E;AAC7E,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,UAAU,GAAG,YAAY,CAAC,EAC7D,WAAW,EAAE,OAAO,GACnB,MAAM,CAMR;AAED,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,EAC5B,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CAmFjC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { findLatestSessionSidecarForIssue, loadProfile, resolveConductorModelId, runIssueSession, SessionLogger, } from '@agents-ensemble/core';
|
|
3
|
+
import { bindAsyncOperatorInput, notifyOperatorInputReprompt } from './async-operator-input.js';
|
|
4
|
+
import { isOperatorInputInteractive, isOperatorInputTty } from './prompt-operator-input.js';
|
|
5
|
+
import { parseWorktreeMode } from './parse-worktree-mode.js';
|
|
6
|
+
import { resolveCliMaxTurns } from './resolve-cli-max-turns.js';
|
|
7
|
+
import { createSessionDisplaySink } from './display/create-session-display-sink.js';
|
|
8
|
+
import { selectSessionDisplayBackend } from './display/select-session-display-backend.js';
|
|
9
|
+
import { createHarnessSink, createObservationSink } from './session-sinks.js';
|
|
10
|
+
import { createIssueSessionTuiHost } from './tui/create-issue-session-tui-host.js';
|
|
11
|
+
/** `--resume` / `--continue` から `runIssueSession` に渡す `resumeAgentId` を解決する。 */
|
|
12
|
+
export async function resolveResumeAgentIdFromOptions(options, context, deps = {}) {
|
|
13
|
+
if (options.resume && options.continue) {
|
|
14
|
+
throw new Error('Cannot use --continue and --resume together');
|
|
15
|
+
}
|
|
16
|
+
if (options.resume) {
|
|
17
|
+
return { resumeAgentId: options.resume };
|
|
18
|
+
}
|
|
19
|
+
if (!options.continue) {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
const findLatest = deps.findLatestSessionSidecarForIssue ?? findLatestSessionSidecarForIssue;
|
|
23
|
+
const sidecar = await findLatest({
|
|
24
|
+
repoRoot: context.repoRoot,
|
|
25
|
+
issueUrl: context.issueUrl,
|
|
26
|
+
});
|
|
27
|
+
if (!sidecar) {
|
|
28
|
+
throw new Error(`No session sidecar found for issue ${context.issueUrl}. Start a new session without --continue.`);
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
resumeAgentId: sidecar.conductorAgentId,
|
|
32
|
+
continuedFromSidecar: sidecar.conductorAgentId,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** `ensemble issue` の CLI オプションから `runIssueSession` に渡す `maxTurns` を決定する。 */
|
|
36
|
+
export function resolveIssueSessionMaxTurns(options, interactive) {
|
|
37
|
+
return resolveCliMaxTurns({
|
|
38
|
+
interactive,
|
|
39
|
+
noMaxTurns: options.noMaxTurns,
|
|
40
|
+
maxTurns: options.maxTurns,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export async function executeIssueCommand(issueUrl, options, deps = {}) {
|
|
44
|
+
const isInteractive = deps.isOperatorInputInteractive ?? isOperatorInputInteractive;
|
|
45
|
+
const isTty = deps.isOperatorInputTty ?? isOperatorInputTty;
|
|
46
|
+
const runSession = deps.runIssueSession ?? runIssueSession;
|
|
47
|
+
const loadProfileFn = deps.loadProfile ?? loadProfile;
|
|
48
|
+
const SessionLoggerCtor = deps.SessionLogger ?? SessionLogger;
|
|
49
|
+
const workerWorktreeMode = parseWorktreeMode(options.worktree);
|
|
50
|
+
const { profile, profilePath } = await loadProfileFn({
|
|
51
|
+
profile: options.profile,
|
|
52
|
+
cwd: resolve(options.repoRoot),
|
|
53
|
+
});
|
|
54
|
+
const repoRoot = resolve(options.repoRoot);
|
|
55
|
+
const { resumeAgentId, continuedFromSidecar } = await resolveResumeAgentIdFromOptions(options, { issueUrl, repoRoot }, deps);
|
|
56
|
+
const interactive = isInteractive();
|
|
57
|
+
const useTui = interactive && isTty();
|
|
58
|
+
const tuiHost = useTui ? createIssueSessionTuiHost() : undefined;
|
|
59
|
+
const sessionLogger = new SessionLoggerCtor({ issueUrl, repoRoot });
|
|
60
|
+
if (useTui) {
|
|
61
|
+
sessionLogger.subscribe(tuiHost.telemetrySink);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
sessionLogger.subscribe(createHarnessSink());
|
|
65
|
+
sessionLogger.subscribe(createObservationSink());
|
|
66
|
+
}
|
|
67
|
+
sessionLogger.subscribe(createSessionDisplaySink({
|
|
68
|
+
backend: tuiHost?.displayBackend ??
|
|
69
|
+
selectSessionDisplayBackend({ interactive: interactive && !useTui }),
|
|
70
|
+
onOpenQuestionEnqueued: tuiHost?.notifyReprompt ?? notifyOperatorInputReprompt,
|
|
71
|
+
}));
|
|
72
|
+
if (workerWorktreeMode === 'in_repo') {
|
|
73
|
+
sessionLogger.emit({ type: 'session.worktree.notice', mode: workerWorktreeMode });
|
|
74
|
+
}
|
|
75
|
+
if (continuedFromSidecar) {
|
|
76
|
+
sessionLogger.emit({
|
|
77
|
+
type: 'session.continue',
|
|
78
|
+
conductorAgentId: continuedFromSidecar,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
const maxTurns = resolveIssueSessionMaxTurns(options, interactive);
|
|
82
|
+
try {
|
|
83
|
+
return await runSession({
|
|
84
|
+
issueUrl,
|
|
85
|
+
repoRoot,
|
|
86
|
+
conductorCwd: resolve(options.conductorCwd),
|
|
87
|
+
resumeAgentId,
|
|
88
|
+
profile,
|
|
89
|
+
profilePath,
|
|
90
|
+
modelId: resolveConductorModelId(options.model),
|
|
91
|
+
maxTurns,
|
|
92
|
+
workerWorktreeMode,
|
|
93
|
+
sessionLogger,
|
|
94
|
+
...(options.githubMonitor === false
|
|
95
|
+
? { disableGitHubMonitor: true }
|
|
96
|
+
: {}),
|
|
97
|
+
...(options.githubMonitorDebounceMs !== undefined
|
|
98
|
+
? { githubMonitorDebounceMs: options.githubMonitorDebounceMs }
|
|
99
|
+
: {}),
|
|
100
|
+
...(interactive
|
|
101
|
+
? {
|
|
102
|
+
bindOperatorInput: tuiHost?.bindOperatorInput ?? bindAsyncOperatorInput,
|
|
103
|
+
continueOnConductorError: true,
|
|
104
|
+
...(isTty() && !options.noWait
|
|
105
|
+
? {
|
|
106
|
+
waitForOperatorExit: true,
|
|
107
|
+
}
|
|
108
|
+
: {}),
|
|
109
|
+
}
|
|
110
|
+
: {}),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
tuiHost?.dispose();
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=issue-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-command.js","sourceRoot":"","sources":["../src/issue-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-worktree-mode.d.ts","sourceRoot":"","sources":["../src/parse-worktree-mode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAOnE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** CLI `--worktree` 引数を `WorkerWorktreeMode` に変換する。 */
|
|
2
|
+
export function parseWorktreeMode(value) {
|
|
3
|
+
const normalized = value.trim().toLowerCase().replace(/_/g, '-');
|
|
4
|
+
if (normalized === 'isolated')
|
|
5
|
+
return 'isolated';
|
|
6
|
+
if (normalized === 'in-repo')
|
|
7
|
+
return 'in_repo';
|
|
8
|
+
throw new Error(`Invalid --worktree: ${value}. Use isolated (default) or in-repo.`);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=parse-worktree-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-worktree-mode.js","sourceRoot":"","sources":["../src/parse-worktree-mode.ts"],"names":[],"mappings":"AAEA,uDAAuD;AACvD,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjE,IAAI,UAAU,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IACjD,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC/C,MAAM,IAAI,KAAK,CACb,uBAAuB,KAAK,sCAAsC,CACnE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-human-inquiry.d.ts","sourceRoot":"","sources":["../src/prompt-human-inquiry.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAE/B,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CA2B/B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as readline from 'node:readline/promises';
|
|
2
|
+
import { stdin as input, stdout as output } from 'node:process';
|
|
3
|
+
import { EscalationUnavailableError, resolveHumanInquiryFromEnv, escalationUnavailableMessage, } from '@agents-ensemble/core';
|
|
4
|
+
export async function promptHumanInquiry(request) {
|
|
5
|
+
const fromEnv = resolveHumanInquiryFromEnv(request);
|
|
6
|
+
if (fromEnv) {
|
|
7
|
+
return fromEnv;
|
|
8
|
+
}
|
|
9
|
+
if (!input.isTTY) {
|
|
10
|
+
throw new EscalationUnavailableError(escalationUnavailableMessage());
|
|
11
|
+
}
|
|
12
|
+
const rl = readline.createInterface({ input, output });
|
|
13
|
+
try {
|
|
14
|
+
if (request.context) {
|
|
15
|
+
output.write(`\n${request.context}\n\n`);
|
|
16
|
+
}
|
|
17
|
+
if (request.responseType === 'yes_no') {
|
|
18
|
+
const answer = await rl.question(`${request.question} [y/N]: `);
|
|
19
|
+
const approved = answer.trim().toLowerCase().startsWith('y');
|
|
20
|
+
return { answer: answer.trim(), approved };
|
|
21
|
+
}
|
|
22
|
+
const answer = await rl.question(`${request.question}\n> `);
|
|
23
|
+
return { answer: answer.trim() };
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
rl.close();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=prompt-human-inquiry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-human-inquiry.js","sourceRoot":"","sources":["../src/prompt-human-inquiry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAEL,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,GAG7B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAA4B;IAE5B,MAAM,OAAO,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,0BAA0B,CAAC,4BAA4B,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,UAAU,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC;QAC7C,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,QAAQ,MAAM,CAAC,CAAC;QAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { OperatorInputContext } from '@agents-ensemble/core';
|
|
2
|
+
/** TTY または `ENSEMBLE_OPERATOR_MESSAGE` でオペレータ入力が実際に届く環境か。 */
|
|
3
|
+
export declare function isOperatorInputInteractive(): boolean;
|
|
4
|
+
/** post-loop 待機を有効にできる TTY 入力か(`ENSEMBLE_OPERATOR_MESSAGE` 単発注入は除外)。 */
|
|
5
|
+
export declare function isOperatorInputTty(): boolean;
|
|
6
|
+
export declare function promptOperatorInput(context: OperatorInputContext): Promise<string | undefined>;
|
|
7
|
+
//# sourceMappingURL=prompt-operator-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-operator-input.d.ts","sourceRoot":"","sources":["../src/prompt-operator-input.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAIlE,6DAA6D;AAC7D,wBAAgB,0BAA0B,IAAI,OAAO,CAKpD;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAMD,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsC7B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as readline from 'node:readline/promises';
|
|
2
|
+
import { stdin as input, stdout as output } from 'node:process';
|
|
3
|
+
const OPERATOR_MESSAGE_ENV = 'ENSEMBLE_OPERATOR_MESSAGE';
|
|
4
|
+
/** TTY または `ENSEMBLE_OPERATOR_MESSAGE` でオペレータ入力が実際に届く環境か。 */
|
|
5
|
+
export function isOperatorInputInteractive() {
|
|
6
|
+
if (process.env[OPERATOR_MESSAGE_ENV]?.trim()) {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
return process.stdin.isTTY ?? false;
|
|
10
|
+
}
|
|
11
|
+
/** post-loop 待機を有効にできる TTY 入力か(`ENSEMBLE_OPERATOR_MESSAGE` 単発注入は除外)。 */
|
|
12
|
+
export function isOperatorInputTty() {
|
|
13
|
+
return process.stdin.isTTY ?? false;
|
|
14
|
+
}
|
|
15
|
+
function formatMaxTurnsLabel(maxTurns) {
|
|
16
|
+
return maxTurns === null ? '∞' : String(maxTurns);
|
|
17
|
+
}
|
|
18
|
+
export async function promptOperatorInput(context) {
|
|
19
|
+
const fromEnv = process.env[OPERATOR_MESSAGE_ENV]?.trim();
|
|
20
|
+
if (fromEnv) {
|
|
21
|
+
return fromEnv;
|
|
22
|
+
}
|
|
23
|
+
if (!input.isTTY) {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
if (context.openQuestions.length > 0) {
|
|
27
|
+
output.write('\n未回答のオペレータ質問:\n');
|
|
28
|
+
for (const question of context.openQuestions) {
|
|
29
|
+
output.write(`- ${question.id} [${question.responseType}] ${question.question}\n`);
|
|
30
|
+
if (question.context) {
|
|
31
|
+
output.write(` ${question.context}\n`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
output.write(`\n自律ターン: ${context.autonomousTurns}/${formatMaxTurnsLabel(context.maxTurns)}(オペレータ入力でリセット)\n`);
|
|
37
|
+
}
|
|
38
|
+
const rl = readline.createInterface({ input, output });
|
|
39
|
+
try {
|
|
40
|
+
const prompt = context.openQuestions.length > 0
|
|
41
|
+
? '\nオペレータ入力(空でスキップ。未回答 1 件ならそのまま回答):\n> '
|
|
42
|
+
: '\nオペレータ入力(空でスキップ。自由な指示も可):\n> ';
|
|
43
|
+
const answer = await rl.question(prompt);
|
|
44
|
+
const trimmed = answer.trim();
|
|
45
|
+
return trimmed || undefined;
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
rl.close();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=prompt-operator-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-operator-input.js","sourceRoot":"","sources":["../src/prompt-operator-input.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAGhE,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD,6DAA6D;AAC7D,MAAM,UAAU,0BAA0B;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;AACtC,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC;AACtC,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAuB;IAClD,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B;IAE7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjC,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7C,MAAM,CAAC,KAAK,CACV,KAAK,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,YAAY,KAAK,QAAQ,CAAC,QAAQ,IAAI,CACrE,CAAC;YACF,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CACV,YAAY,OAAO,CAAC,eAAe,IAAI,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAC/F,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,IAAI,CAAC;QACH,MAAM,MAAM,GACV,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YAC9B,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,gCAAgC,CAAC;QACvC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,OAAO,IAAI,SAAS,CAAC;IAC9B,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { allowOnce, deny, type PermissionRequest } from '@agents-ensemble/core';
|
|
2
|
+
export declare function promptPermissionDecision(request: PermissionRequest): Promise<import("@agents-ensemble/core").PermissionDecision>;
|
|
3
|
+
export { allowOnce, deny };
|
|
4
|
+
//# sourceMappingURL=prompt-permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-permission.d.ts","sourceRoot":"","sources":["../src/prompt-permission.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAET,IAAI,EACJ,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAK/B,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,+DAExE;AAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { allowOnce, createPermissionAskHandler, deny, } from '@agents-ensemble/core';
|
|
2
|
+
import { promptHumanInquiry } from './prompt-human-inquiry.js';
|
|
3
|
+
const permissionAsk = createPermissionAskHandler(promptHumanInquiry);
|
|
4
|
+
export async function promptPermissionDecision(request) {
|
|
5
|
+
return permissionAsk(request);
|
|
6
|
+
}
|
|
7
|
+
export { allowOnce, deny };
|
|
8
|
+
//# sourceMappingURL=prompt-permission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-permission.js","sourceRoot":"","sources":["../src/prompt-permission.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,IAAI,GAEL,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,aAAa,GAAG,0BAA0B,CAAC,kBAAkB,CAAC,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAA0B;IACvE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ResolveCliMaxTurnsInput {
|
|
2
|
+
interactive: boolean;
|
|
3
|
+
noMaxTurns?: boolean;
|
|
4
|
+
maxTurns?: number;
|
|
5
|
+
}
|
|
6
|
+
/** CLI の `--max-turns` / `--no-max-turns` と TTY 有無から `maxTurns` を決定する。 */
|
|
7
|
+
export declare function resolveCliMaxTurns(input: ResolveCliMaxTurnsInput): number;
|
|
8
|
+
//# sourceMappingURL=resolve-cli-max-turns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-cli-max-turns.d.ts","sourceRoot":"","sources":["../src/resolve-cli-max-turns.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAQzE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** `packages/core` の `DEFAULT_MAX_ISSUE_TURNS` と同期。 */
|
|
2
|
+
const NON_INTERACTIVE_DEFAULT_MAX_TURNS = 5;
|
|
3
|
+
/** CLI の `--max-turns` / `--no-max-turns` と TTY 有無から `maxTurns` を決定する。 */
|
|
4
|
+
export function resolveCliMaxTurns(input) {
|
|
5
|
+
if (input.noMaxTurns) {
|
|
6
|
+
return 0;
|
|
7
|
+
}
|
|
8
|
+
if (input.maxTurns !== undefined) {
|
|
9
|
+
return input.maxTurns;
|
|
10
|
+
}
|
|
11
|
+
return input.interactive ? 0 : NON_INTERACTIVE_DEFAULT_MAX_TURNS;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=resolve-cli-max-turns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-cli-max-turns.js","sourceRoot":"","sources":["../src/resolve-cli-max-turns.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,iCAAiC,GAAG,CAAC,CAAC;AAQ5C,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC,QAAQ,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type SessionLogEvent } from '@agents-ensemble/core';
|
|
2
|
+
/** harness sink と TUI 活動ログで共有する行本文(prefix なし)。 */
|
|
3
|
+
export declare function formatHarnessLogBody(event: SessionLogEvent): string | undefined;
|
|
4
|
+
/** observation sink と TUI 活動ログで共有する行本文(prefix なし)。 */
|
|
5
|
+
export declare function formatObservationLogBody(event: SessionLogEvent): string | undefined;
|
|
6
|
+
/** 非 TTY observation sink 向けの stderr 1 行(prefix 付き。auth recovery は hint をそのまま)。 */
|
|
7
|
+
export declare function formatObservationStderrLine(event: SessionLogEvent): string | undefined;
|
|
8
|
+
/** TUI 活動ログ向け conductor 応答本文。 */
|
|
9
|
+
export declare function formatConductorActivityBody(event: SessionLogEvent): string | undefined;
|
|
10
|
+
//# sourceMappingURL=session-log-lines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-log-lines.d.ts","sourceRoot":"","sources":["../src/session-log-lines.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAE/B,kDAAkD;AAClD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAyD/E;AAED,sDAAsD;AACtD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAmBnF;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAyBtF;AAED,iCAAiC;AACjC,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAYtF"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { formatPermissionSummaryForOperator, } from '@agents-ensemble/core';
|
|
2
|
+
/** harness sink と TUI 活動ログで共有する行本文(prefix なし)。 */
|
|
3
|
+
export function formatHarnessLogBody(event) {
|
|
4
|
+
switch (event.type) {
|
|
5
|
+
case 'harness.worktree':
|
|
6
|
+
return `worktree path=${event.path} branch=${event.branch} mode=${event.mode}`;
|
|
7
|
+
case 'harness.worktree.removed':
|
|
8
|
+
return `worktree.removed path=${event.path} branch=${event.branch}`;
|
|
9
|
+
case 'harness.worktree.remove_skipped':
|
|
10
|
+
return `worktree.remove_skipped path=${event.path} branch=${event.branch} reason=${event.reason}`;
|
|
11
|
+
case 'harness.worktree.remove_failed':
|
|
12
|
+
return `worktree.remove_failed path=${event.path} branch=${event.branch} error=${event.error}`;
|
|
13
|
+
case 'harness.worker.prompt.started':
|
|
14
|
+
return `worker.prompt.started name=${event.name} kind=${event.kind} source=${event.source}`;
|
|
15
|
+
case 'harness.worker.prompt.completed':
|
|
16
|
+
return `worker.prompt.completed name=${event.name} kind=${event.kind} source=${event.source} stopReason=${event.stopReason}`;
|
|
17
|
+
case 'harness.worker.prompt.failed':
|
|
18
|
+
return `worker.prompt.failed name=${event.name} kind=${event.kind} source=${event.source} error=${event.error}`;
|
|
19
|
+
case 'operator.input':
|
|
20
|
+
return `operator.input turn=${event.conductorTurn} bytes=${event.text.length}`;
|
|
21
|
+
case 'conductor.send.started': {
|
|
22
|
+
let line = `conductor.send.started n=${event.sendCount}`;
|
|
23
|
+
if (event.dispatchSource) {
|
|
24
|
+
line += ` source=${event.dispatchSource}`;
|
|
25
|
+
}
|
|
26
|
+
return line;
|
|
27
|
+
}
|
|
28
|
+
case 'conductor.send.progress':
|
|
29
|
+
return `conductor.send.progress n=${event.sendCount} runId=${event.runId} tool=${event.tool}`;
|
|
30
|
+
case 'permission.pending':
|
|
31
|
+
return formatPermissionSummaryForOperator(event.permission, {
|
|
32
|
+
workerLabel: event.workerLabel,
|
|
33
|
+
});
|
|
34
|
+
case 'conductor.send': {
|
|
35
|
+
let line = `conductor.send n=${event.sendCount} status=${event.status} workerDone=${event.workerDispatches} workerFailed=${event.workerFailures}`;
|
|
36
|
+
if (event.status === 'error' && event.error) {
|
|
37
|
+
line += ` error=${event.error.message}`;
|
|
38
|
+
}
|
|
39
|
+
return line;
|
|
40
|
+
}
|
|
41
|
+
case 'worker.round':
|
|
42
|
+
return `worker.round name=${event.dispatch.name} kind=${event.dispatch.kind} source=${event.dispatch.source ?? 'conductor'} stopReason=${event.dispatch.promptResult.stopReason} path=${event.dispatch.worktree.path}`;
|
|
43
|
+
case 'worker.failed':
|
|
44
|
+
return `worker.failed name=${event.failure.name} kind=${event.failure.kind} error=${event.failure.error}`;
|
|
45
|
+
case 'worker.process.stderr': {
|
|
46
|
+
const name = event.workerName ? ` name=${event.workerName}` : '';
|
|
47
|
+
return `worker.stderr${name} ${event.line}`;
|
|
48
|
+
}
|
|
49
|
+
case 'session.stop':
|
|
50
|
+
return `session.stop reason=${event.stopReason}`;
|
|
51
|
+
case 'harness.github.update':
|
|
52
|
+
return `github.update items=${event.itemCount}`;
|
|
53
|
+
case 'harness.github.monitor_error':
|
|
54
|
+
return `github.monitor_error ${event.message}`;
|
|
55
|
+
case 'harness.warning':
|
|
56
|
+
return `warning: ${event.message}`;
|
|
57
|
+
default:
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/** observation sink と TUI 活動ログで共有する行本文(prefix なし)。 */
|
|
62
|
+
export function formatObservationLogBody(event) {
|
|
63
|
+
switch (event.type) {
|
|
64
|
+
case 'open.question.enqueued':
|
|
65
|
+
return `${event.question.id} [${event.question.responseType}] ${event.question.question}`;
|
|
66
|
+
case 'escalation.recorded':
|
|
67
|
+
return `${event.record.question} → ${event.record.answer}`;
|
|
68
|
+
case 'session.worktree.notice':
|
|
69
|
+
return '特別モード: メイン worktree で直接作業します(isolated worktree は作りません)';
|
|
70
|
+
case 'session.continue':
|
|
71
|
+
return `resuming session: conductorAgentId=${event.conductorAgentId}`;
|
|
72
|
+
case 'session.post_loop_wait':
|
|
73
|
+
return '自律作業が一段落しました。追加の指示を入力するか、/exit で終了してください。';
|
|
74
|
+
case 'conductor.auth.recovery':
|
|
75
|
+
return event.hint;
|
|
76
|
+
case 'conductor.auth.reconnect':
|
|
77
|
+
return `[auth] conductor 再接続を試行 agentId=${event.agentId}`;
|
|
78
|
+
default:
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** 非 TTY observation sink 向けの stderr 1 行(prefix 付き。auth recovery は hint をそのまま)。 */
|
|
83
|
+
export function formatObservationStderrLine(event) {
|
|
84
|
+
if (event.type === 'conductor.auth.recovery' || event.type === 'conductor.auth.reconnect') {
|
|
85
|
+
const body = formatObservationLogBody(event);
|
|
86
|
+
return body;
|
|
87
|
+
}
|
|
88
|
+
const body = formatObservationLogBody(event);
|
|
89
|
+
if (!body) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
switch (event.type) {
|
|
93
|
+
case 'open.question.enqueued':
|
|
94
|
+
return `[open question] ${body}`;
|
|
95
|
+
case 'escalation.recorded':
|
|
96
|
+
return `[operator answer] ${body}`;
|
|
97
|
+
case 'session.worktree.notice':
|
|
98
|
+
return `[worktree] ${body}`;
|
|
99
|
+
case 'session.continue':
|
|
100
|
+
return `[continue] ${body}`;
|
|
101
|
+
case 'session.post_loop_wait':
|
|
102
|
+
return `\n${body}\n`;
|
|
103
|
+
default:
|
|
104
|
+
return undefined;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/** TUI 活動ログ向け conductor 応答本文。 */
|
|
108
|
+
export function formatConductorActivityBody(event) {
|
|
109
|
+
if (event.type !== 'conductor.send') {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
if (event.status === 'finished' && event.result?.trim()) {
|
|
113
|
+
return event.result.trim();
|
|
114
|
+
}
|
|
115
|
+
if (event.status === 'error') {
|
|
116
|
+
const detail = event.error?.message ?? 'unknown error';
|
|
117
|
+
return `応答を生成できませんでした(${detail})。別の聞き方で再入力してください。`;
|
|
118
|
+
}
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=session-log-lines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-log-lines.js","sourceRoot":"","sources":["../src/session-log-lines.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SessionLogSink } from '@agents-ensemble/core';
|
|
2
|
+
export interface HarnessSinkOptions {
|
|
3
|
+
/** デフォルト: `console.error` */
|
|
4
|
+
writeStderr?: (message: string) => void;
|
|
5
|
+
}
|
|
6
|
+
/** harness テレメトリ(開発者向け)。stderr に統一 prefix で出す。 */
|
|
7
|
+
export declare function createHarnessSink(options?: HarnessSinkOptions): SessionLogSink;
|
|
8
|
+
export interface DialogueSinkOptions {
|
|
9
|
+
/** デフォルト: `process.stdout.write` */
|
|
10
|
+
writeStdout?: (text: string) => void;
|
|
11
|
+
}
|
|
12
|
+
/** オペレータ↔conductor の見える会話。TTY 時のみ有効にすること。 */
|
|
13
|
+
export declare function createDialogueSink(options?: DialogueSinkOptions): SessionLogSink;
|
|
14
|
+
export interface ObservationSinkOptions {
|
|
15
|
+
/** デフォルト: `console.error` */
|
|
16
|
+
writeStderr?: (message: string) => void;
|
|
17
|
+
}
|
|
18
|
+
/** セッション観測(open question / エスカレーション / CLI 通知)。stderr に prefix 付きで出す。 */
|
|
19
|
+
export declare function createObservationSink(options?: ObservationSinkOptions): SessionLogSink;
|
|
20
|
+
//# sourceMappingURL=session-sinks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-sinks.d.ts","sourceRoot":"","sources":["../src/session-sinks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQ5D,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,kDAAkD;AAClD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,cAAc,CASlF;AAED,MAAM,WAAW,mBAAmB;IAClC,oCAAoC;IACpC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,6CAA6C;AAC7C,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,cAAc,CA4CpF;AAED,MAAM,WAAW,sBAAsB;IACrC,6BAA6B;IAC7B,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wEAAwE;AACxE,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,sBAA2B,GACnC,cAAc,CAShB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { isConductorAuthError } from '@agents-ensemble/core';
|
|
2
|
+
import { stdout } from 'node:process';
|
|
3
|
+
import { formatHarnessLogBody, formatObservationStderrLine, } from './session-log-lines.js';
|
|
4
|
+
/** harness テレメトリ(開発者向け)。stderr に統一 prefix で出す。 */
|
|
5
|
+
export function createHarnessSink(options = {}) {
|
|
6
|
+
const writeStderr = options.writeStderr ?? ((message) => console.error(message));
|
|
7
|
+
return (event) => {
|
|
8
|
+
const body = formatHarnessLogBody(event);
|
|
9
|
+
if (body) {
|
|
10
|
+
writeStderr(`[harness] ${body}`);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** オペレータ↔conductor の見える会話。TTY 時のみ有効にすること。 */
|
|
15
|
+
export function createDialogueSink(options = {}) {
|
|
16
|
+
const writeStdout = options.writeStdout ?? ((text) => stdout.write(text));
|
|
17
|
+
return (event) => {
|
|
18
|
+
switch (event.type) {
|
|
19
|
+
case 'operator.input':
|
|
20
|
+
writeStdout(`\noperator> ${event.text}\n`);
|
|
21
|
+
break;
|
|
22
|
+
case 'conductor.send':
|
|
23
|
+
if (event.status === 'finished' && event.result?.trim()) {
|
|
24
|
+
writeStdout(`\nconductor> ${event.result.trim()}\n`);
|
|
25
|
+
}
|
|
26
|
+
else if (event.status === 'error') {
|
|
27
|
+
const detail = event.error?.message ?? 'unknown error';
|
|
28
|
+
if (isConductorAuthError(detail)) {
|
|
29
|
+
writeStdout('\nconductor> 認証エラーが発生しました。stderr の [auth] 手順に従って再認証してください。\n');
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
writeStdout(`\nconductor> 応答を生成できませんでした(${detail})。\n別の聞き方で再入力してください。\n`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
break;
|
|
36
|
+
case 'harness.worktree':
|
|
37
|
+
case 'harness.worktree.removed':
|
|
38
|
+
case 'harness.worktree.remove_skipped':
|
|
39
|
+
case 'harness.worktree.remove_failed':
|
|
40
|
+
case 'harness.worker.prompt.started':
|
|
41
|
+
case 'harness.worker.prompt.completed':
|
|
42
|
+
case 'harness.worker.prompt.failed':
|
|
43
|
+
case 'worker.round':
|
|
44
|
+
case 'worker.failed':
|
|
45
|
+
case 'worker.process.stderr':
|
|
46
|
+
case 'session.stop':
|
|
47
|
+
case 'open.question.enqueued':
|
|
48
|
+
case 'escalation.recorded':
|
|
49
|
+
case 'session.worktree.notice':
|
|
50
|
+
case 'session.continue':
|
|
51
|
+
case 'session.post_loop_wait':
|
|
52
|
+
case 'conductor.auth.recovery':
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** セッション観測(open question / エスカレーション / CLI 通知)。stderr に prefix 付きで出す。 */
|
|
58
|
+
export function createObservationSink(options = {}) {
|
|
59
|
+
const writeStderr = options.writeStderr ?? ((message) => console.error(message));
|
|
60
|
+
return (event) => {
|
|
61
|
+
const line = formatObservationStderrLine(event);
|
|
62
|
+
if (line) {
|
|
63
|
+
writeStderr(line);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=session-sinks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-sinks.js","sourceRoot":"","sources":["../src/session-sinks.ts"],"names":[],"mappings":"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"}
|