@agents-ensemble/cli 0.6.5 → 0.8.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 (66) hide show
  1. package/README.md +44 -3
  2. package/config.example.yaml +13 -0
  3. package/dist/conductor-auth-command.d.ts +18 -0
  4. package/dist/conductor-auth-command.d.ts.map +1 -0
  5. package/dist/conductor-auth-command.js +172 -0
  6. package/dist/conductor-auth-command.js.map +1 -0
  7. package/dist/index.js +52 -24
  8. package/dist/index.js.map +1 -1
  9. package/dist/inline-markdown.d.ts +3 -1
  10. package/dist/inline-markdown.d.ts.map +1 -1
  11. package/dist/inline-markdown.js +232 -33
  12. package/dist/inline-markdown.js.map +1 -1
  13. package/dist/session-log-lines.d.ts.map +1 -1
  14. package/dist/session-log-lines.js +24 -6
  15. package/dist/session-log-lines.js.map +1 -1
  16. package/dist/session-sinks.d.ts.map +1 -1
  17. package/dist/session-sinks.js +1 -0
  18. package/dist/session-sinks.js.map +1 -1
  19. package/dist/tui/activity-log.d.ts +8 -0
  20. package/dist/tui/activity-log.d.ts.map +1 -1
  21. package/dist/tui/activity-log.js +16 -0
  22. package/dist/tui/activity-log.js.map +1 -1
  23. package/dist/tui/create-issue-session-tui-host.d.ts.map +1 -1
  24. package/dist/tui/create-issue-session-tui-host.js +27 -2
  25. package/dist/tui/create-issue-session-tui-host.js.map +1 -1
  26. package/dist/tui/issue-session-tui-stream.d.ts +4 -1
  27. package/dist/tui/issue-session-tui-stream.d.ts.map +1 -1
  28. package/dist/tui/issue-session-tui-stream.js +46 -10
  29. package/dist/tui/issue-session-tui-stream.js.map +1 -1
  30. package/dist/tui/issue-session-tui-stream.test.js +311 -2
  31. package/dist/tui/issue-session-tui-stream.test.js.map +1 -1
  32. package/dist/tui/issue-session-tui.d.ts +5 -3
  33. package/dist/tui/issue-session-tui.d.ts.map +1 -1
  34. package/dist/tui/issue-session-tui.js +29 -15
  35. package/dist/tui/issue-session-tui.js.map +1 -1
  36. package/dist/tui/issue-session-tui.test.js +147 -11
  37. package/dist/tui/issue-session-tui.test.js.map +1 -1
  38. package/dist/tui/open-questions-pane.d.ts.map +1 -1
  39. package/dist/tui/open-questions-pane.js +30 -12
  40. package/dist/tui/open-questions-pane.js.map +1 -1
  41. package/dist/tui/stream-scrollback.d.ts +29 -0
  42. package/dist/tui/stream-scrollback.d.ts.map +1 -0
  43. package/dist/tui/stream-scrollback.js +35 -0
  44. package/dist/tui/stream-scrollback.js.map +1 -0
  45. package/dist/tui/tui-layout-constants.d.ts +9 -4
  46. package/dist/tui/tui-layout-constants.d.ts.map +1 -1
  47. package/dist/tui/tui-layout-constants.js +9 -4
  48. package/dist/tui/tui-layout-constants.js.map +1 -1
  49. package/dist/tui/tui-resize-recovery.d.ts +24 -0
  50. package/dist/tui/tui-resize-recovery.d.ts.map +1 -0
  51. package/dist/tui/tui-resize-recovery.js +34 -0
  52. package/dist/tui/tui-resize-recovery.js.map +1 -0
  53. package/dist/tui/tui-terminal-size.d.ts +16 -5
  54. package/dist/tui/tui-terminal-size.d.ts.map +1 -1
  55. package/dist/tui/tui-terminal-size.js +40 -8
  56. package/dist/tui/tui-terminal-size.js.map +1 -1
  57. package/dist/tui/tui-view-model.d.ts +2 -0
  58. package/dist/tui/tui-view-model.d.ts.map +1 -1
  59. package/dist/tui/tui-view-model.js +7 -0
  60. package/dist/tui/tui-view-model.js.map +1 -1
  61. package/dist/tui/wrap-text-to-width.d.ts.map +1 -1
  62. package/dist/tui/wrap-text-to-width.js +4 -1
  63. package/dist/tui/wrap-text-to-width.js.map +1 -1
  64. package/docs/config.md +70 -4
  65. package/docs/settings.md +17 -4
  66. package/package.json +2 -2
@@ -1,5 +1,11 @@
1
1
  import { useEffect, useMemo, useSyncExternalStore } from 'react';
2
2
  export const TUI_RESIZE_SETTLE_MS = 100;
3
+ /**
4
+ * iTerm2 + tmux can emit separate SIGWINCH events while a pane is being
5
+ * dragged. Keep width decreases pending for longer than the normal settle
6
+ * window so those intermediate widths do not trigger a live-frame redraw.
7
+ */
8
+ export const TUI_RESIZE_SHRINK_COALESCE_MS = 250;
3
9
  function resolveDimension(value, fallback) {
4
10
  return typeof value === 'number' && Number.isFinite(value) && value > 0
5
11
  ? Math.floor(value)
@@ -14,9 +20,11 @@ export function readTuiTerminalSize(stdout) {
14
20
  function sameSize(left, right) {
15
21
  return left.columns === right.columns && left.rows === right.rows;
16
22
  }
17
- export function createTuiTerminalSizeStore(stdout = process.stdout, settleMs = TUI_RESIZE_SETTLE_MS, onSettled) {
23
+ export function createTuiTerminalSizeStore(stdout = process.stdout, settleMs = TUI_RESIZE_SETTLE_MS, onSettled, shrinkCoalesceMs = TUI_RESIZE_SHRINK_COALESCE_MS) {
18
24
  let snapshot = readTuiTerminalSize(stdout);
25
+ let observedSize = snapshot;
19
26
  let settleTimer;
27
+ let settleMode = 'normal';
20
28
  let disposed = false;
21
29
  const subscribers = new Set();
22
30
  const settleResize = () => {
@@ -29,19 +37,31 @@ export function createTuiTerminalSizeStore(stdout = process.stdout, settleMs = T
29
37
  return;
30
38
  }
31
39
  snapshot = next;
40
+ onSettled?.(snapshot);
32
41
  for (const subscriber of [...subscribers]) {
33
42
  subscriber();
34
43
  }
35
- onSettled?.(snapshot);
36
44
  };
37
45
  const onResize = () => {
38
46
  if (disposed) {
39
47
  return;
40
48
  }
49
+ const next = readTuiTerminalSize(stdout);
50
+ const columnsIncreased = next.columns > observedSize.columns;
51
+ const rowsChanged = next.rows !== observedSize.rows;
52
+ const continuingShrink = settleMode === 'shrink' &&
53
+ next.columns === observedSize.columns &&
54
+ next.rows === snapshot.rows &&
55
+ next.columns < snapshot.columns;
56
+ const columnsDecreased = !rowsChanged &&
57
+ !columnsIncreased &&
58
+ (next.columns < observedSize.columns || continuingShrink);
59
+ observedSize = next;
60
+ settleMode = columnsDecreased ? 'shrink' : 'normal';
41
61
  if (settleTimer !== undefined) {
42
62
  clearTimeout(settleTimer);
43
63
  }
44
- settleTimer = setTimeout(settleResize, Math.max(0, settleMs));
64
+ settleTimer = setTimeout(settleResize, Math.max(0, columnsDecreased ? Math.max(settleMs, shrinkCoalesceMs) : settleMs));
45
65
  };
46
66
  stdout.on('resize', onResize);
47
67
  return {
@@ -77,19 +97,31 @@ export function createTuiTerminalSizeStore(stdout = process.stdout, settleMs = T
77
97
  * Ink 7 decides whether to emit clearTerminal by comparing the previous frame
78
98
  * height with the current viewport. On a terminal shrink, that comparison can
79
99
  * classify the old frame as fullscreen even when it did not fill the old
80
- * viewport. Keep Ink's private viewport row value at a high-water mark while
81
- * the TUI uses the actual settled rows from terminalSize; this prevents the
82
- * renderer's fullscreen-clear fallback from erasing scrollback on shrink.
100
+ * viewport. Keep Ink's private viewport columns and rows at high-water marks
101
+ * while the TUI uses the actual settled size from terminalSize; this prevents
102
+ * the renderer's fullscreen-clear fallback and width-decrease handling from
103
+ * erasing scrollback on shrink.
83
104
  */
84
- export function createTuiResizeController(stdout = process.stdout, settleMs = TUI_RESIZE_SETTLE_MS) {
105
+ export function createTuiResizeController(stdout = process.stdout, settleMs = TUI_RESIZE_SETTLE_MS, onSettled) {
85
106
  const resizeListeners = new Set();
86
107
  let disposed = false;
108
+ let inkViewportColumns = readTuiTerminalSize(stdout).columns;
87
109
  let inkViewportRows = readTuiTerminalSize(stdout).rows;
110
+ let settledSize = readTuiTerminalSize(stdout);
88
111
  const terminalSize = createTuiTerminalSizeStore(stdout, settleMs, (size) => {
89
112
  if (disposed) {
90
113
  return;
91
114
  }
115
+ const previous = settledSize;
116
+ settledSize = size;
117
+ // Keep Ink's width at a high-water mark while the TUI uses the settled
118
+ // physical width. Ink's width-decrease handler clears its previous frame;
119
+ // when that frame already wrapped at the new terminal width, its logical
120
+ // line count can be smaller than the physical line count and push output
121
+ // into scrollback. Grow events still raise the mark and notify Ink.
122
+ inkViewportColumns = Math.max(inkViewportColumns, size.columns);
92
123
  inkViewportRows = Math.max(inkViewportRows, size.rows);
124
+ onSettled?.({ previous, next: size });
93
125
  queueMicrotask(() => {
94
126
  if (disposed) {
95
127
  return;
@@ -104,7 +136,7 @@ export function createTuiResizeController(stdout = process.stdout, settleMs = TU
104
136
  if (property === 'columns' || property === 'rows') {
105
137
  return property === 'rows'
106
138
  ? inkViewportRows
107
- : terminalSize.getSnapshot().columns;
139
+ : inkViewportColumns;
108
140
  }
109
141
  if (property === 'on' || property === 'addListener') {
110
142
  return (event, listener) => {
@@ -1 +1 @@
1
- {"version":3,"file":"tui-terminal-size.js","sourceRoot":"","sources":["../../src/tui/tui-terminal-size.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui-terminal-size.js","sourceRoot":"","sources":["../../src/tui/tui-terminal-size.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { type ActivityLogEntry, type ActivityLogLabel } from './activity-log.js'
4
4
  export interface TuiViewSnapshot {
5
5
  displayState: SessionDisplayState;
6
6
  activityLog: ActivityLogEntry[];
7
+ activityLogGeneration: number;
7
8
  postLoopWaiting: boolean;
8
9
  shuttingDown: boolean;
9
10
  operatorContext: OperatorInputContext | undefined;
@@ -22,6 +23,7 @@ export interface TuiViewModel {
22
23
  setDisplayState: (state: SessionDisplayState) => void;
23
24
  appendActivityLog: (label: ActivityLogLabel, text: string) => void;
24
25
  appendActivityLogSeparator: () => void;
26
+ requestActivityLogReplay: () => void;
25
27
  setPostLoopWaiting: (waiting: boolean) => void;
26
28
  setShuttingDown: (shuttingDown: boolean) => void;
27
29
  setOperatorContext: (context: OperatorInputContext | undefined) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"tui-view-model.d.ts","sourceRoot":"","sources":["../../src/tui/tui-view-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,mBAAmB,CAAC;IAClC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,GACxB,eAAe,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAElD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM,eAAe,CAAC;IACnC,eAAe,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtD,iBAAiB,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,0BAA0B,EAAE,MAAM,IAAI,CAAC;IACvC,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;CACzE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE;IAC1C,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,YAAY,CAyFpB"}
1
+ {"version":3,"file":"tui-view-model.d.ts","sourceRoot":"","sources":["../../src/tui/tui-view-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAG3B,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,mBAAmB,CAAC;IAClC,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,oBAAoB,GAAG,SAAS,CAAC;CACnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,GACxB,eAAe,CAAC,cAAc,CAAC,CAAC,eAAe,CAAC,CAElD;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,WAAW,EAAE,MAAM,eAAe,CAAC;IACnC,eAAe,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACtD,iBAAiB,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,0BAA0B,EAAE,MAAM,IAAI,CAAC;IACvC,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,OAAO,EAAE,oBAAoB,GAAG,SAAS,KAAK,IAAI,CAAC;CACzE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,GAAE;IAC1C,6EAA6E;IAC7E,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,GAAG,YAAY,CAgGpB"}
@@ -17,12 +17,14 @@ export function createTuiViewModel(options = {}) {
17
17
  : options.activityLogWindowSize;
18
18
  let displayState = INITIAL_SESSION_DISPLAY_STATE;
19
19
  let activityLog = [];
20
+ let activityLogGeneration = 0;
20
21
  let postLoopWaiting = false;
21
22
  let shuttingDown = false;
22
23
  let operatorContext;
23
24
  let snapshot = {
24
25
  displayState,
25
26
  activityLog,
27
+ activityLogGeneration,
26
28
  postLoopWaiting,
27
29
  shuttingDown,
28
30
  operatorContext,
@@ -32,6 +34,7 @@ export function createTuiViewModel(options = {}) {
32
34
  snapshot = {
33
35
  displayState,
34
36
  activityLog,
37
+ activityLogGeneration,
35
38
  postLoopWaiting,
36
39
  shuttingDown,
37
40
  operatorContext,
@@ -77,6 +80,10 @@ export function createTuiViewModel(options = {}) {
77
80
  : appendActivityLogEntry(activityLog, entry, activityLogWindowSize);
78
81
  notify();
79
82
  },
83
+ requestActivityLogReplay() {
84
+ activityLogGeneration += 1;
85
+ notify();
86
+ },
80
87
  setPostLoopWaiting(waiting) {
81
88
  if (postLoopWaiting === waiting) {
82
89
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"tui-view-model.js","sourceRoot":"","sources":["../../src/tui/tui-view-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui-view-model.js","sourceRoot":"","sources":["../../src/tui/tui-view-model.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-text-to-width.d.ts","sourceRoot":"","sources":["../../src/tui/wrap-text-to-width.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,uCAAuC;AACvC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAIT;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBrE;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAwBtE;AAoID;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,qBAAqB,EAAE,EACjC,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CAQtB"}
1
+ {"version":3,"file":"wrap-text-to-width.d.ts","sourceRoot":"","sources":["../../src/tui/wrap-text-to-width.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,uCAAuC;AACvC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAIT;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAmBrE;AAED,yDAAyD;AACzD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAwBtE;AAwID;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,qBAAqB,EAAE,EACjC,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CAQtB"}
@@ -59,7 +59,8 @@ function appendStyledSegment(segments, text, character) {
59
59
  const previous = segments.at(-1);
60
60
  if (previous &&
61
61
  Boolean(previous.bold) === Boolean(character.bold) &&
62
- Boolean(previous.code) === Boolean(character.code)) {
62
+ Boolean(previous.code) === Boolean(character.code) &&
63
+ previous.href === character.href) {
63
64
  previous.text += text;
64
65
  return;
65
66
  }
@@ -67,6 +68,7 @@ function appendStyledSegment(segments, text, character) {
67
68
  text,
68
69
  ...(character.bold ? { bold: true } : {}),
69
70
  ...(character.code ? { code: true } : {}),
71
+ ...(character.href !== undefined ? { href: character.href } : {}),
70
72
  });
71
73
  }
72
74
  function styledCharactersToSegments(characters) {
@@ -89,6 +91,7 @@ function toStyledCharacterLines(segments) {
89
91
  width: stringWidth(character),
90
92
  ...(segment.bold ? { bold: true } : {}),
91
93
  ...(segment.code ? { code: true } : {}),
94
+ ...(segment.href !== undefined ? { href: segment.href } : {}),
92
95
  });
93
96
  }
94
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wrap-text-to-width.js","sourceRoot":"","sources":["../../src/tui/wrap-text-to-width.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrap-text-to-width.js","sourceRoot":"","sources":["../../src/tui/wrap-text-to-width.ts"],"names":[],"mappings":"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"}
package/docs/config.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  > **正本:** `.ensemble/config.yaml` の配置・書き方・スキーマと conductor MCP 設定。本書以外の設定層の一覧・解決パターンは [settings.md](settings.md) を参照します。
4
4
 
5
- `.ensemble/config.yaml` は harness 横断の設定の正本。team-profile(`profile.yaml`)や conductor SDK 認証とは別系統。
5
+ `.ensemble/config.yaml` は harness 横断の設定の正本。team-profile(`profile.yaml`)や conductor backend の認証とは別系統。
6
6
 
7
- conductor(Cursor SDK)に渡す MCP 設定もこの config.yaml とは別の JSON ファイルで管理する(下記の [Conductor MCP 設定](#conductor-mcp-設定mcpjson) を参照)。
7
+ conductor に渡す MCP 設定もこの config.yaml とは別の JSON ファイルで管理する(下記の [Conductor MCP 設定](#conductor-mcp-設定mcpjson) を参照)。
8
8
 
9
9
  ## 配置と解決順
10
10
 
@@ -27,6 +27,8 @@ CLI 明示指定 > 環境変数 > project .ensemble/config.yaml > user ~/.ensemb
27
27
 
28
28
  `loadEnsembleConfig(repoRoot)` は user → project の順で merge した `EnsembleConfig` を返す。各 `resolve*Setting` はその merged config を **config 層**として参照する。
29
29
 
30
+ `conductor.backend` はこの共通順序の例外です。CLI / 環境変数による上書きはなく、選択した profile の `profile.conductor.backend` > user / project の deep merge 済み `config.conductor.backend` > `cursor` の順で解決します。
31
+
30
32
  `ensemble issue` 起動時(GitHub monitor / Issue コンテキスト取得より前)に config を読み込む。
31
33
 
32
34
  ## テンプレート
@@ -48,7 +50,12 @@ profile:
48
50
  default: implementer-and-reviewer # ENSEMBLE_DEFAULT_PROFILE 相当
49
51
 
50
52
  conductor:
53
+ backend: pi # cursor(既定) | pi
51
54
  model: default # CONDUCTOR_MODEL_ID 相当
55
+ pi:
56
+ # 任意。省略時は ~/.ensemble/pi と <repoRoot>/.ensemble/pi
57
+ agentDir: ~/.ensemble/pi
58
+ projectDir: .ensemble/pi
52
59
 
53
60
  acp:
54
61
  defaultPreset: cursor # ENSEMBLE_DEFAULT_ACP_CLI 相当
@@ -82,6 +89,9 @@ tui:
82
89
  |------|------|-----------|-----------|
83
90
  | `profile.default` | 既定 team profile(名前またはパス) | `--profile` | `ENSEMBLE_DEFAULT_PROFILE` |
84
91
  | `conductor.model` | conductor モデル id | `--model` | `CONDUCTOR_MODEL_ID` |
92
+ | `conductor.backend` | conductor LLM backend(`cursor` / `pi`) | — | — |
93
+ | `conductor.pi.agentDir` | Pi user resource root のパス上書き | — | — |
94
+ | `conductor.pi.projectDir` | Pi project resource root のパス上書き | — | — |
85
95
  | `acp.defaultPreset` | worker ACP built-in preset | `--default-acp-cli` 等 | `ENSEMBLE_DEFAULT_ACP_CLI` |
86
96
  | `session.worktree` | worker workspace モード | `--worktree` | — |
87
97
  | `session.maxTurns.tty` / `nonTty` | 自律ターン上限 | `--max-turns` / `--no-max-turns` | — |
@@ -95,6 +105,58 @@ tui:
95
105
 
96
106
  profile / worker に `acp` がある worker は `--default-acp-*` / config `acp.defaultPreset` より **profile 側が優先**(従来どおり)。
97
107
 
108
+ ### Pi resource root
109
+
110
+ `conductor.backend: pi` のとき、Pi の標準ファイル名・ディレクトリを次の 2 層から解決します。プロジェクト層がユーザ層を上書きします。
111
+
112
+ | 層 | 既定パス |
113
+ |----|----------|
114
+ | ユーザ | `~/.ensemble/pi/` |
115
+ | プロジェクト | `<repoRoot>/.ensemble/pi/` |
116
+
117
+ `conductor.pi.agentDir` / `conductor.pi.projectDir` は resource root のパスだけを上書きします。相対パスは `<repoRoot>` 基準、`~` はユーザ home 基準です。各 root の Pi 標準 resource を次のように解決します。
118
+
119
+ - `settings.json` / `auth.json`: user → project の deep merge。credential は provider 単位で project entry を優先します。
120
+ - `models.json`: Pi 標準の `providers` / `models` / built-in `modelOverrides` / request headers を model 解決へ反映します。
121
+ - `extensions/`: ExtensionAPI の tool を読み込み、fixed harness tools → MCP bridge → local extension の順で追加します。同名の harness/MCP tool は上書きしません。
122
+ - `skills/`: `SKILL.md` を読み込み、model invocation が有効な skill 本文を compiled system prompt の後ろに追加します。`/skill:<name>` で明示的に展開できます。
123
+ - `prompts/`: Markdown template を読み込み、`/name args` の user prompt を Pi 標準の引数置換で展開します。
124
+ - `themes/`: Pi 標準 JSON として読み込み、project 同名を優先します。conductor は headless `pi-agent-core` のため TUI renderer がなく、theme の色・表示設定はモデル入出力には適用しません。
125
+
126
+ Pi の認証 CLI は provider 単位です。`ensemble auth login --provider <id>` は API-key provider なら secret prompt の値を user root の `auth.json`(既定 `~/.ensemble/pi/auth.json`)へ `AuthStorage.set` し、OAuth provider なら Pi の `AuthStorage.login` を TTY / stderr 経由で実行します。`--provider` を省略した場合は `settings.json` の `defaultProvider` または選択モデルから解決します。`logout` / `status` も同じ provider 解決を使います。project `auth.json` は既存の project-over-user 読取優先を維持しますが、login の書込み先にはなりません。project 層の明示的な OAuth credential は `AuthStorage` の refresh 対象外なので stale access token を使わず、実行時にエラーとして user 層ログインを案内します。OAuth は `ensemble auth login --provider <id>` で user 層へ保存してください。`ensemble models list` は `ModelRegistry` と project resource の解決結果から認証済み model だけを表示します。
127
+
128
+ #### `settings.json` の headless 対応範囲
129
+
130
+ conductor は `pi-agent-core` を直接使い、`pi-coding-agent` の設定適用器・TUI・package manager は起動しません。そのため `settings.json` は Pi 標準のファイル名と resource path の意味を保ちますが、headless conductor が実際に参照するキーだけを契約とします。
131
+
132
+ 実際に効くキーは次のとおりです。
133
+
134
+ | キー | headless conductor での意味 |
135
+ |------|----------------------------|
136
+ | `defaultProvider` / `defaultModel` | 明示的な `provider/model` がない場合のモデル選択。`model` / `modelId` は conductor の互換 alias として同じ選択に使います。 |
137
+ | `apiKey` / `apiKeys` | `auth.json` に provider credential がない場合の認証 fallback。 |
138
+ | `extensions` / `skills` / `prompts` / `themes` | 各 resource root を基準に追加で読む path。通常の `extensions/` 等の discovery と併用します。 |
139
+
140
+ Pi の `settings.md` にあるが headless conductor が適用しないキーは、拒否せず警告なしで無視します。
141
+
142
+ | 無視するキー(または prefix) | 適用されない挙動 |
143
+ |------------------------------|------------------|
144
+ | `defaultThinkingLevel` / `modelThinkingLevels` / `thinkingBudgets` / `enabledModels` | thinking level、budget、model cycling の設定 |
145
+ | `hideThinkingBlock` / `showCacheMissNotices` / `cacheWarming` / `steeringMode` / `followUpMode` | transcript 表示、cache、対話キューの設定 |
146
+ | `defaultTools` / `codemode.*` | Pi built-in coding tools の選択。conductor は harness / MCP / local extension の tool loadout を使います。 |
147
+ | `packages` | Pi package の install・解決。package が提供する resource は自動導入しません。 |
148
+ | `enableSkillCommands` | skill command の登録 toggle。読み込んだ skill の `/skill:<name>` 展開可否はこのキーで変更できません。 |
149
+ | `sessionDir` / `compaction.*` / `branchSummary.*` | Pi の session・compact・branch summary。session は harness の `.ensemble/pi/sessions/` が管理します。 |
150
+ | `theme` / `quietStartup` / `tuiMode` / `fullscreen*` / `terminal.*` / `images.*` / `markdown.*` | headless conductor の TUI・terminal 表示 |
151
+ | `transport` / `httpProxy` / `httpIdleTimeoutMs` / `websocketConnectTimeoutMs` / `retry.*` / `shellPath` / `shellCommandPrefix` / `npmCommand` | Pi coding-agent の network、shell、package runtime |
152
+ | `collapseChangelog` / `enableInstallTelemetry` / `enableAnalytics` / `warnings.*` | coding-agent の update、telemetry、UI warning |
153
+
154
+ 表にない未対応キーも同じく無視します。`models.json`、`auth.json`、`extensions/`、`skills/`、`prompts/`、`themes/` の対応範囲は上記 resource の説明どおりです。
155
+
156
+ conductor の system prompt の基底は modular-prompt のコンパイル結果です。`.ensemble/pi/SYSTEM.md` / `APPEND_SYSTEM.md`(または resource root の同名ファイル)は conductor には読み込みません。
157
+
158
+ `.ensemble/` は既存のリポジトリ共通 gitignore 方針で無視されるため、Pi のローカル設定・認証・extension はコミットしません。
159
+
98
160
  ### GitHub 認証トークンの解決順
99
161
 
100
162
  `resolveGitHubAuthToken({ config })`(`@agents-ensemble/core`):
@@ -149,13 +211,17 @@ MCP 設定は次の 2 層から読み込み、`mcpServers` のサーバー名単
149
211
  }
150
212
  ```
151
213
 
152
- この MVP では解決済み設定を conductor の Cursor SDK `Agent.create` / `Agent.resume` に inline MCP として渡す。`Agent.resume` と認証エラーからの in-process reconnect の両方で同じ設定を再注入する。設定値の `${env:...}` や `${workspaceFolder}` などの展開は SDK に任せる。`.cursor/mcp.json` へのコピー・symlink は行わず、ACP worker にはこの設定を渡さない。
214
+ 解決済み設定は conductor の両 backend に同じ map として渡す。Cursor SDK では `Agent.create` / `Agent.resume` の inline MCP として、Pi では harness 内蔵 MCP bridge が MCP client と Pi `AgentTool` に変換して使う。この bridge は Pi の ExtensionAPI extension をロードするものではなく、`@agents-ensemble/core` 内で `@modelcontextprotocol/sdk` client を接続する in-process thin bridge である。どちらも `resume` と認証・transport エラーからの in-process reconnect で同じ設定を再注入する。Pi は MCP 設定がある場合、session 開始前に全サーバーへ接続して tools を発見するため、接続または bridge の読み込みに失敗したら起動を fail する。
215
+
216
+ 設定値の `${env:...}` や `${workspaceFolder}` などの展開は Cursor SDK では SDK に任せ、Pi bridge では起動時の process environment と conductor cwd を使って同じ参照を展開する。Pi bridge は `stdio` / `http`(Streamable HTTP)/ `sse`、`env`、`cwd`、`headers` を扱う。Cursor SDK が提供する OAuth 対話(`auth` 定義)は Pi bridge の制限により未対応で、該当定義は明確なエラーにする。`.cursor/mcp.json` や `.pi/mcp.json` へのコピー・symlink、`settings.json` の書き換えは行わず、ACP worker にはこの設定を渡さない。Pi MCP tools は `mcp_<server>_<tool>` という衝突回避済みの名前で表示され、resources/prompts の専用 API は今回の bridge の対象外とする。Pi MCP tool の `callTool` 例外または MCP `isError` は成功結果に変換せず、`AgentTool.execute` の throw として model loop に伝える。Pi では extension の読み込み有無にかかわらず、harness tools と解決済み MCP bridge tools が conductor の tool loadout に含まれる。
217
+
218
+ Pi bridge は `@modelcontextprotocol/sdk@1.30.0` を core に同梱する。依存が欠落した環境で MCP 設定を持つ Pi backend を起動した場合は、インストールすべき固定バージョンを含むエラーで停止する。MCP 未設定時は bridge をロードせず、両 backend とも従来どおり MCP なしで起動する。
153
219
 
154
220
  JSON が不正、または `mcpServers` / サーバー定義の形式が不正な場合は、そのファイルを `[mcp]` 警告とともにスキップする。もう一方の層が有効ならそちらは引き続き読み込み、両方をスキップした場合は MCP なしで起動する。MCP のホットリロードは行わないため、変更後は新しいセッションを開始する。
155
221
 
156
222
  ## 秘密情報を config に書かない
157
223
 
158
- **token 本体を config に平文で保存しない。** 認証は環境変数、`gh auth login`、将来の stored credential 経路(別 Issue)を使う。
224
+ **token 本体を config に平文で保存しない。** 認証は環境変数、`gh auth login`、Cursor の `ensemble auth login`、または Pi の provider 単位 `ensemble auth login` / `AuthStorage` を使う。
159
225
 
160
226
  ## スキーマ外キー
161
227
 
package/docs/settings.md CHANGED
@@ -28,6 +28,14 @@ CLI > 環境変数 > project config > user config > コード default
28
28
 
29
29
  `profile.default` / `conductor.model` / `acp.defaultPreset` など。設計判断は [ADR 0020](https://github.com/otolab/agents-ensemble/blob/main/docs/adr/0020-ensemble-config-setting-resolution.md)。
30
30
 
31
+ `conductor.backend` は、選択した profile の `conductor.backend` を project/user の deep merge 済み config より優先し、どちらも未指定なら `cursor` を使います。`cursor` は Cursor SDK 経路、`pi` は Pi Agent Core 経路を選びます。Pi は compiled conductor instructions を native system prompt に載せ、`~/.ensemble/pi` と `<repoRoot>/.ensemble/pi` の `settings.json` / `auth.json` / `models.json` / `extensions/` / `skills/` / `prompts/` / `themes/` を解決します。skills は system prompt へ追加し、prompts は `/name args` で展開します。themes は headless conductor のため読み込み・project 同名解決のみ行い、TUI 表示には使いません。root は `conductor.pi.agentDir` / `conductor.pi.projectDir` で上書きできます。`.ensemble/pi/SYSTEM.md` / `APPEND_SYSTEM.md` は無視します。`ensemble auth login|logout|status` は backend に分岐し、Pi では provider 単位に `AuthStorage` を使います。API key は TTY の secret prompt から user 層へ保存し、OAuth は Pi の OAuth flow を stderr 対話で実行します(SSH でも URL / device code を利用できます)。resume では sidecar に保存した backend と起動時の解決結果が一致しない場合、次のエラーで conductor を起動せず失敗します。
32
+
33
+ ```text
34
+ Session sidecar conductorBackend mismatch: pi !== cursor
35
+ ```
36
+
37
+ 旧 sidecar にこのフィールドがない場合は、従来どおり `cursor` として扱います。Pi の `conductorAgentId` は Pi の session id としても使われ、transcript は `<conductor-cwd>/.ensemble/pi/sessions/` の JSONL に保存されます。`--continue` / `--resume` ではその transcript を復元し、Issue context から compiled `systemPrompt` を毎回再コンパイルして native system prompt に再注入します。
38
+
31
39
  ### パターン B — Phase 1 横断(env なし)
32
40
 
33
41
  ```
@@ -53,7 +61,8 @@ config キーなし。CI・スクリプト・端末検出、または 1 回限
53
61
  | 種別 | 解決順 |
54
62
  |------|--------|
55
63
  | GitHub API | `GITHUB_TOKEN` > `GH_TOKEN` > (`allowGhAuthTokenFallback: true` 時のみ)`gh auth token` |
56
- | conductor | `CURSOR_API_KEY` > `~/.cursor/sdk/auth.json`(`ensemble auth login`) |
64
+ | conductor (cursor) | `CURSOR_API_KEY` > `~/.cursor/sdk/auth.json`(`ensemble auth login`) |
65
+ | conductor (pi) | project `auth.json` の読取優先 > user `AuthStorage`(`~/.ensemble/pi/auth.json`、`conductor.pi.agentDir` で上書き) > `settings.json` fallback > provider 環境変数。`ensemble auth` は user 層へ provider 単位で保存。project 層の明示的な OAuth credential は refresh できないため使わず、user 層の `AuthStorage` へログインする |
57
66
  | worker ACP(preset 依存) | preset ごとに README / ADR 0019 参照 |
58
67
 
59
68
  ## 一覧 — Phase 1(config.yaml)
@@ -62,6 +71,9 @@ config キーなし。CI・スクリプト・端末検出、または 1 回限
62
71
  |------|-------------|----------|-----|----------------|------|
63
72
  | 既定 team profile | `profile.default` | `ENSEMBLE_DEFAULT_PROFILE` | `--profile` | 同梱 `implementer-and-reviewer` | A |
64
73
  | conductor モデル | `conductor.model` | `CONDUCTOR_MODEL_ID` | `--model` | `default` | A |
74
+ | conductor backend | `conductor.backend` | — | — | `cursor` | profile > config > default |
75
+ | Pi user resource root | `conductor.pi.agentDir` | — | — | `~/.ensemble/pi` | config |
76
+ | Pi project resource root | `conductor.pi.projectDir` | — | — | `<repoRoot>/.ensemble/pi` | config |
65
77
  | worker ACP preset(profile 未指定 worker) | `acp.defaultPreset` | `ENSEMBLE_DEFAULT_ACP_CLI` | `--default-acp-cli` 等 | `cursor` | C |
66
78
  | Issue worktree | `session.worktree` | — | `--worktree` | `isolated` | B |
67
79
  | 自律ターン上限(TTY) | `session.maxTurns.tty` | — | `--max-turns` / `--no-max-turns` | `0`(無制限) | B |
@@ -101,7 +113,8 @@ TUI 設定は `loadEnsembleConfig` 結果を `createIssueSessionTuiHost` へ渡
101
113
  | 設定 | 環境変数 | config で制御できること |
102
114
  |------|----------|------------------------|
103
115
  | GitHub API token | `GITHUB_TOKEN` / `GH_TOKEN` | `github.auth.allowGhAuthTokenFallback` のみ |
104
- | conductor API key | `CURSOR_API_KEY` | —(`ensemble auth login` は別経路) |
116
+ | conductor API key (cursor) | `CURSOR_API_KEY` | —(`ensemble auth login` は別経路) |
117
+ | conductor API key (pi) | provider ごとの環境変数(Pi の env mapping) | `ensemble auth login --provider <id>`、Pi `auth.json` / `settings.json` にも設定可能 |
105
118
 
106
119
  ## 一覧 — 別ファイル
107
120
 
@@ -125,7 +138,7 @@ TUI 設定は `loadEnsembleConfig` 結果を `createIssueSessionTuiHost` へ渡
125
138
  | チーム / 個人の恒久既定(モデル、worktree、monitor) | `~/.ensemble/config.yaml` または project `.ensemble/config.yaml` |
126
139
  | CI で 1 ジョブだけ上書き | 環境変数(`CONDUCTOR_MODEL_ID` 等) |
127
140
  | 1 回限りの実行 | CLI フラグ(初回メッセージは `ensemble issue <ref> [message...]`) |
128
- | token | 環境変数 or `gh auth login` / `ensemble auth login`(config に書かない) |
141
+ | token | Cursor: 環境変数 or `ensemble auth login`、Pi: `ensemble auth login --provider <id>` / Pi `auth.json` / provider 環境変数、GitHub: `gh auth login`(いずれも config に書かない) |
129
142
  | tmux 内で Issue リンクを短縮表示 | `~/.ensemble/config.yaml` に `tui.forceHyperlink: on`(または env `FORCE_HYPERLINK=1`) |
130
143
  | worker ごとの ACP / cwd | `profile.yaml` |
131
144
  | conductor の MCP | `mcp.json` |
@@ -144,7 +157,7 @@ TUI 設定は `loadEnsembleConfig` 結果を `createIssueSessionTuiHost` へ渡
144
157
  | `TERM` / `TERM_PROGRAM` / `CI` 等 | TTY / CI の実行環境を検出する値 |
145
158
  | `CURSOR_RIPGREP_PATH` | SDK 起動時に利用する内部ツールの明示指定 |
146
159
 
147
- `profile.default`、`conductor.model`、`acp.defaultPreset`、`session.*`、`github.monitor.*`、`tui.*` のように config キーがある設定は、上の env-only 表ではなく本書の設定一覧と [config.md](config.md) に記載しています。env は invocation 単位の上書きとして残る場合があります。
160
+ `profile.default`、`conductor.model`、`conductor.backend`、`acp.defaultPreset`、`session.*`、`github.monitor.*`、`tui.*` のように config キーがある設定は、上の env-only 表ではなく本書の設定一覧と [config.md](config.md) に記載しています。env は invocation 単位の上書きとして残る場合があります。
148
161
 
149
162
  ## 既知のギャップ
150
163
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agents-ensemble/cli",
3
- "version": "0.6.5",
3
+ "version": "0.8.0",
4
4
  "type": "module",
5
5
  "description": "ensemble CLI — Issue-based agent orchestration",
6
6
  "bin": {
@@ -17,7 +17,7 @@
17
17
  "react": "19.2.0",
18
18
  "react-ink-textarea": "npm:@otolab/react-ink-textarea@0.4.1-otolab.3",
19
19
  "string-width": "8.1.0",
20
- "@agents-ensemble/core": "0.6.5"
20
+ "@agents-ensemble/core": "0.8.0"
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/js-yaml": "4.0.9",