@tyhld/conductor 0.10.0 → 0.11.1
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/README.md +60 -0
- package/dist/build-central.js +185 -0
- package/dist/build-plan.js +299 -0
- package/dist/build-prompt.js +144 -0
- package/dist/build-roundtable.js +190 -0
- package/dist/build-runner.js +463 -0
- package/dist/cli.js +65 -0
- package/dist/proto-profile.js +10 -3
- package/package.json +1 -1
- package/sales-template/install.sh +9 -1
- package/sales-template/setup.sh +11 -2
- package/systemd/build-runner-install.sh +133 -0
- package/systemd/conductor-build-runner.service +54 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# build-runner-install.sh — 采配くん「司令塔」(conductor-build-runner) を1台に1本だけ設置・有効化する
|
|
4
|
+
# (試作完走 便⑥・えふさん確定 2026-09-05)。
|
|
5
|
+
#
|
|
6
|
+
# ★これが司令塔の導入処理の【正本】です。写しを持たず、必要な人はこのスクリプトを呼びます。
|
|
7
|
+
#
|
|
8
|
+
# やること(すべて冪等・何度実行しても安全):
|
|
9
|
+
# 1. 司令塔を動かすコマンドを決める(引数 → 同じ配布物の dist/cli.js → npm の conductor)。
|
|
10
|
+
# 2. 正本ユニット systemd/conductor-build-runner.service の __CONDUCTOR_BIN__ を置換して配置。
|
|
11
|
+
# 3. ★接続設定(~/.conductor.env)に司令塔の4項目が入っているかを確かめる。
|
|
12
|
+
# 入っていなければ【入れない】。入れてしまうと、起動しては落ちるユニットが残り続ける。
|
|
13
|
+
# 4. systemctl --user daemon-reload → enable --now。
|
|
14
|
+
# 5. 成功したときだけ撤去用の台帳へ登録し、linger を有効化する。
|
|
15
|
+
#
|
|
16
|
+
# 使い方:
|
|
17
|
+
# bash systemd/build-runner-install.sh
|
|
18
|
+
# bash systemd/build-runner-install.sh "/usr/bin/env node /home/me/projects/conductor/dist/cli.js"
|
|
19
|
+
#
|
|
20
|
+
# ★耳(ear-install.sh)と違い、これは【人が明示的に入れる物】です。
|
|
21
|
+
# お客さま機の設置(setup.sh)からは呼びません。試作を回す機だけに入れます。
|
|
22
|
+
#
|
|
23
|
+
set -euo pipefail
|
|
24
|
+
|
|
25
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
26
|
+
UNIT_NAME="conductor-build-runner.service"
|
|
27
|
+
UNIT_SRC="$SCRIPT_DIR/$UNIT_NAME"
|
|
28
|
+
UNIT_DIR="$HOME/.config/systemd/user"
|
|
29
|
+
UNIT_DST="$UNIT_DIR/$UNIT_NAME"
|
|
30
|
+
ENV_FILE="$HOME/.conductor.env"
|
|
31
|
+
|
|
32
|
+
# 撤去用の台帳(耳・conductor@ の導入処理と同じ場所・同じ方式)。
|
|
33
|
+
LEDGER_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/conductor"
|
|
34
|
+
LEDGER_FILE="$LEDGER_DIR/installed-units.txt"
|
|
35
|
+
|
|
36
|
+
# ★司令塔が要る設定(名前だけ。値はここにも、リポジトリのどこにも無い)。
|
|
37
|
+
# ★この一覧は src/build-runner.ts の REQUIRED_ENV と同じでなければならない
|
|
38
|
+
# (食い違うと「入ったのに起動しない」が起きる)。test/build-runner-unit.test.ts が固定する。
|
|
39
|
+
REQUIRED_KEYS=(
|
|
40
|
+
PROTO_API_BASE
|
|
41
|
+
CONDUCTOR_PROTO_APP_KEY
|
|
42
|
+
ROUNDTABLE_BASE_URL
|
|
43
|
+
ROUNDTABLE_APP_KEY
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
info() { echo "[build-runner-install] $*"; }
|
|
47
|
+
warn() { echo "[build-runner-install] 注意: $*" >&2; }
|
|
48
|
+
die() { echo "[build-runner-install] エラー: $*" >&2; exit 1; }
|
|
49
|
+
|
|
50
|
+
ledger_add() {
|
|
51
|
+
local unit="$1"
|
|
52
|
+
mkdir -p "$LEDGER_DIR"
|
|
53
|
+
touch "$LEDGER_FILE"
|
|
54
|
+
grep -qxF "$unit" "$LEDGER_FILE" || echo "$unit" >> "$LEDGER_FILE"
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
# --- 1) 正本ユニットの存在確認 ------------------------------------------------
|
|
58
|
+
[[ -f "$UNIT_SRC" ]] || die "ユニットの正本が見つかりません: $UNIT_SRC"
|
|
59
|
+
|
|
60
|
+
# --- 2) systemd --user が使えるか --------------------------------------------
|
|
61
|
+
if ! command -v systemctl >/dev/null 2>&1 || ! systemctl --user show-environment >/dev/null 2>&1; then
|
|
62
|
+
die "systemd --user が使えないため、司令塔は設置できません。"
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
# --- 3) 接続設定の確認(★足りないまま入れない)--------------------------------
|
|
66
|
+
[[ -f "$ENV_FILE" ]] || die "接続設定がありません: $ENV_FILE(先に conductor setup を済ませてください)"
|
|
67
|
+
|
|
68
|
+
missing=()
|
|
69
|
+
for key in "${REQUIRED_KEYS[@]}"; do
|
|
70
|
+
# ★値は読まない・出さない。「その名前の行があるか」だけを見る。
|
|
71
|
+
grep -Eq "^[[:space:]]*(export[[:space:]]+)?${key}=[^[:space:]]" "$ENV_FILE" || missing+=("$key")
|
|
72
|
+
done
|
|
73
|
+
if [[ ${#missing[@]} -gt 0 ]]; then
|
|
74
|
+
echo >&2
|
|
75
|
+
echo "[build-runner-install] 司令塔を動かすには、次の設定を $ENV_FILE に入れてください:" >&2
|
|
76
|
+
for key in "${missing[@]}"; do echo " ・${key}=…" >&2; done
|
|
77
|
+
echo >&2
|
|
78
|
+
echo " 入れたら、もう一度このコマンドを実行してください。" >&2
|
|
79
|
+
exit 1
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# --- 4) 司令塔を動かすコマンドを決める ----------------------------------------
|
|
83
|
+
# ★systemd ユーザーサービスはシェルの PATH を継承しないので、ここでフルパスに解決する。
|
|
84
|
+
# ★リポジトリが在る機体ではリポジトリを正とする(耳の導入処理と同じ順番)。
|
|
85
|
+
BIN="${1:-}"
|
|
86
|
+
BIN_SRC="引数で指定"
|
|
87
|
+
if [[ -z "$BIN" ]]; then
|
|
88
|
+
CLI_JS="$(cd "$SCRIPT_DIR/.." && pwd)/dist/cli.js"
|
|
89
|
+
if [[ -f "$CLI_JS" ]]; then
|
|
90
|
+
NODE_BIN="$(command -v node || true)"
|
|
91
|
+
[[ -n "$NODE_BIN" && -L "$NODE_BIN" ]] && NODE_BIN="$(readlink -f "$NODE_BIN")"
|
|
92
|
+
[[ -n "$NODE_BIN" ]] || NODE_BIN="/usr/bin/env node"
|
|
93
|
+
BIN="$NODE_BIN $CLI_JS"
|
|
94
|
+
BIN_SRC="この機体のリポジトリ(開発機)"
|
|
95
|
+
fi
|
|
96
|
+
fi
|
|
97
|
+
if [[ -z "$BIN" ]] && command -v conductor >/dev/null 2>&1; then
|
|
98
|
+
resolved="$(command -v conductor)"
|
|
99
|
+
[[ -L "$resolved" ]] && resolved="$(readlink -f "$resolved")"
|
|
100
|
+
BIN="$resolved"
|
|
101
|
+
BIN_SRC="npm で入れた全体版"
|
|
102
|
+
fi
|
|
103
|
+
[[ -n "$BIN" ]] || die "司令塔を動かすコマンドが見つかりません(conductor も dist/cli.js も不在)。"
|
|
104
|
+
|
|
105
|
+
info "司令塔が使う采配くん: ${BIN_SRC}"
|
|
106
|
+
info "司令塔の起動コマンド: $BIN build-runner"
|
|
107
|
+
|
|
108
|
+
# --- 5) ユニットを配置 --------------------------------------------------------
|
|
109
|
+
mkdir -p "$UNIT_DIR"
|
|
110
|
+
if ! sed "s|__CONDUCTOR_BIN__|${BIN}|g" "$UNIT_SRC" > "$UNIT_DST.tmp"; then
|
|
111
|
+
rm -f "$UNIT_DST.tmp"
|
|
112
|
+
die "ユニットの生成に失敗しました。"
|
|
113
|
+
fi
|
|
114
|
+
mv -f "$UNIT_DST.tmp" "$UNIT_DST" # 置換は原子的=壊れかけのユニットを残さない
|
|
115
|
+
info "配置: $UNIT_DST"
|
|
116
|
+
|
|
117
|
+
# --- 6) 反映して起動 ----------------------------------------------------------
|
|
118
|
+
systemctl --user daemon-reload || die "daemon-reload に失敗しました。"
|
|
119
|
+
|
|
120
|
+
if systemctl --user enable --now "$UNIT_NAME"; then
|
|
121
|
+
info "有効化: $UNIT_NAME(このPCに1本・試作の段取りを進めます)"
|
|
122
|
+
ledger_add "$UNIT_NAME"
|
|
123
|
+
else
|
|
124
|
+
die "enable --now に失敗しました: $UNIT_NAME"
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
loginctl enable-linger "$USER" >/dev/null 2>&1 || true
|
|
128
|
+
|
|
129
|
+
echo
|
|
130
|
+
echo "ログ確認: journalctl --user -u conductor-build-runner -f"
|
|
131
|
+
echo "停止: systemctl --user disable --now conductor-build-runner"
|
|
132
|
+
systemctl --user --no-pager status "$UNIT_NAME" 2>/dev/null || true
|
|
133
|
+
exit 0
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# conductor-build-runner.service — 采配くん「司令塔」(試作の段取り役)の systemd ユーザーサービス。
|
|
2
|
+
#
|
|
3
|
+
# ★このファイルが司令塔のユニットの【正本】です(写しをよそに置かないこと)。
|
|
4
|
+
# 配置は systemd/build-runner-install.sh が行います。2箇所に写しを持つと中身がズレます。
|
|
5
|
+
#
|
|
6
|
+
# 位置づけ(試作完走 便⑥・えふさん確定 2026-09-05):
|
|
7
|
+
# このPCに【1本だけ】動かす常駐です。「この内容で試作する →」を押された設計書を60秒ごとに探し、
|
|
8
|
+
# 便(作業指示)に分けて管制へ1本ずつ積み、終わるまで見届けます。
|
|
9
|
+
#
|
|
10
|
+
# ★司令塔は職人にも tmux にも触りません。
|
|
11
|
+
# 積むのは管制まで。職人へ配るのは、これまでどおり各現場の relay(conductor@<現場>)の仕事です。
|
|
12
|
+
# ★同時1本。1つの試作が終わるまで次の試作を取りません。
|
|
13
|
+
# ★落ちても続きから。何本目まで進んだかは中央に書いてあるものが正で、この常駐は
|
|
14
|
+
# 「いまどの試作の何本目を待っているか」だけを手元に控えます。
|
|
15
|
+
#
|
|
16
|
+
# 3つの常駐の違い:
|
|
17
|
+
# - conductor@<現場> … 現場ごとに1本。生存報告と、指示の配達・完了検出。
|
|
18
|
+
# - conductor-ear … PCごとに1本。合図を受けて上記へ呼び鈴を送るだけ。
|
|
19
|
+
# - conductor-build-runner … PCごとに1本。試作の段取り(この設定)。指示を【作って積む】側。
|
|
20
|
+
#
|
|
21
|
+
# 導入:
|
|
22
|
+
# bash systemd/build-runner-install.sh
|
|
23
|
+
# ★お客さま機の設置(setup.sh)では自動で入れません。試作を回す機だけに人が入れます。
|
|
24
|
+
#
|
|
25
|
+
# 撤去:
|
|
26
|
+
# systemctl --user disable --now conductor-build-runner
|
|
27
|
+
#
|
|
28
|
+
# 鍵: %h/.conductor.env(chmod 600 / git管理外)を EnvironmentFile で読み込みます。
|
|
29
|
+
# ★司令塔は次の4つを追加で読みます(人が入れます。値はリポジトリのどこにもありません):
|
|
30
|
+
# PROTO_API_BASE=https://ai-kana.ty-hld.com
|
|
31
|
+
# CONDUCTOR_PROTO_APP_KEY=<試作の口の合言葉・★司令塔専用>
|
|
32
|
+
# ROUNDTABLE_BASE_URL=<会議のアドレス>
|
|
33
|
+
# ROUNDTABLE_APP_KEY=<会議の合言葉>
|
|
34
|
+
# 足りないときは、何が足りないかを日本語で言って起動時に止まります(黙って動きません)。
|
|
35
|
+
#
|
|
36
|
+
# WorkingDirectory: 司令塔はどのフォルダの中身も見ないので %h(ホーム)で十分です。
|
|
37
|
+
# ★現場やリポジトリのパスを書かないこと(存在しない機で systemd が起動に失敗します)。
|
|
38
|
+
|
|
39
|
+
[Unit]
|
|
40
|
+
Description=Conductor build runner (試作の段取り役・このPCに1本)
|
|
41
|
+
After=network-online.target
|
|
42
|
+
Wants=network-online.target
|
|
43
|
+
|
|
44
|
+
[Service]
|
|
45
|
+
Type=simple
|
|
46
|
+
EnvironmentFile=%h/.conductor.env
|
|
47
|
+
WorkingDirectory=%h
|
|
48
|
+
# ↓のコマンド名は build-runner-install.sh が配置時に実際のフルパスへ置換する。
|
|
49
|
+
ExecStart=__CONDUCTOR_BIN__ build-runner
|
|
50
|
+
Restart=always
|
|
51
|
+
RestartSec=30
|
|
52
|
+
|
|
53
|
+
[Install]
|
|
54
|
+
WantedBy=default.target
|