@tyhld/conductor 0.8.0 → 0.10.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/cli.js +8 -1
- package/dist/proto-profile.js +336 -0
- package/dist/relay.js +154 -289
- package/package.json +1 -1
- package/sales-template/README.md +30 -1
- package/sales-template/install.sh +16 -0
- package/sales-template/setup.sh +100 -2
package/package.json
CHANGED
package/sales-template/README.md
CHANGED
|
@@ -16,6 +16,35 @@ conductor setup my-app # 2) 設置する(現場名を指定)
|
|
|
16
16
|
- 設置のあとに聞かれるのは **管制のアドレス**と**合言葉**の2つだけ(どちらも弊社からお渡しします)。
|
|
17
17
|
★合言葉は入力しても画面には表示されません。
|
|
18
18
|
|
|
19
|
+
### 設置の型(`--profile`)
|
|
20
|
+
|
|
21
|
+
| 型 | 打ち方 | どんな現場向けか |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| `default`(既定) | `conductor setup my-app` | ふつうの現場。従来と同じ設定を置きます。 |
|
|
24
|
+
| `proto`(試作) | `conductor setup my-proto --profile proto` | **試作の現場**。作って見せるための場所。 |
|
|
25
|
+
|
|
26
|
+
**試作(proto)の型で置かれるもの**
|
|
27
|
+
|
|
28
|
+
- **止める物**(本番へ手が届かないようにする)
|
|
29
|
+
- 本番の記録(データベース)につなぐ・作り替える(`psql` / `supabase db push` / `prisma migrate` ほか)
|
|
30
|
+
- 本番の鍵の出し入れ(`gh secret set` / `vercel env` / `wrangler secret` ほか)
|
|
31
|
+
- お客さまへ本当に届いてしまう送信(LINE・メール・SMS)
|
|
32
|
+
- 実際にお金が動く課金(本番の Stripe)
|
|
33
|
+
- 本番の入口(`ty-hld.com`)— ★試作の口だけは通します
|
|
34
|
+
- **通す物**:試作の口(`ai-kana.ty-hld.com` の `/api/proto/*`)・GitHub・npm・Vercel(テスト鍵)
|
|
35
|
+
- **`.env` の見本**:試作の口につなぐ2項目だけ。本番の鍵の名前は1つも書かれていません
|
|
36
|
+
(合言葉は空のまま置かれるので、人が入れてください)
|
|
37
|
+
|
|
38
|
+
> ★**止める物・通す物の正本は1ファイル**(`src/proto-profile.ts`)です。`.claude/settings.json` の
|
|
39
|
+
> 禁止(`deny`)も接続先(`deniedDomains`)も、そこから機械的に作られます。同じ一覧を2か所で
|
|
40
|
+
> 持たないので、「片方に足してもう片方を忘れる」という穴が構造的に起きません。
|
|
41
|
+
>
|
|
42
|
+
> ★**番人は増えません**。この型が使うのは既存の仕組み(権限ルールとサンドボックス)だけで、
|
|
43
|
+
> 安全装置(`cc2_guard.py` ほか)は1台に1本のまま・中身も変わりません。
|
|
44
|
+
>
|
|
45
|
+
> ★`curl … | bash -s <現場名>` の入口では `--profile` は指定できません(黙って無視せず、
|
|
46
|
+
> 正しい打ち方を出して止まります)。試作の現場は上の2行で作ってください。
|
|
47
|
+
|
|
19
48
|
<details><summary>ファイルを直接指定して実行する場合(上級者向け)</summary>
|
|
20
49
|
|
|
21
50
|
```bash
|
|
@@ -47,7 +76,7 @@ bash "$(npm root -g)/@tyhld/conductor/sales-template/setup.sh" my-app /path/to/m
|
|
|
47
76
|
### setup.sh がやること
|
|
48
77
|
|
|
49
78
|
```
|
|
50
|
-
bash setup.sh <プロジェクト名> [プロジェクトディレクトリ]
|
|
79
|
+
bash setup.sh <プロジェクト名> [プロジェクトディレクトリ] [--profile <default|proto>]
|
|
51
80
|
|
|
52
81
|
① 前提チェック (node/tmux/git/python3/systemd)
|
|
53
82
|
② conductor 本体インストール (npm i -g @tyhld/conductor)
|
|
@@ -330,6 +330,22 @@ USAGE
|
|
|
330
330
|
exit 1
|
|
331
331
|
fi
|
|
332
332
|
|
|
333
|
+
# ★設置の型(--profile)はこの入口では受け取らない。黙って無視すると「指定したつもりで
|
|
334
|
+
# ふつうの現場が出来ている」という静かな間違いになるので、その場で止めて正しい打ち方を出す。
|
|
335
|
+
if [[ "${2:-}" == --profile* ]]; then
|
|
336
|
+
cat >&2 <<USAGE
|
|
337
|
+
|
|
338
|
+
この入口(curl … | bash -s ${SITE})では、設置の型(--profile)は指定できません。
|
|
339
|
+
|
|
340
|
+
試作の現場を作るときは、先に采配くんを入れてから次のように打ってください:
|
|
341
|
+
|
|
342
|
+
npm i -g @tyhld/conductor
|
|
343
|
+
conductor setup ${SITE} --profile proto
|
|
344
|
+
|
|
345
|
+
USAGE
|
|
346
|
+
exit 1
|
|
347
|
+
fi
|
|
348
|
+
|
|
333
349
|
say " お仕事の名前: ${SITE}"
|
|
334
350
|
PROJECT_DIR="$HOME/projects/$SITE"
|
|
335
351
|
say " 作業フォルダ: ${PROJECT_DIR}"
|
package/sales-template/setup.sh
CHANGED
|
@@ -3,11 +3,19 @@
|
|
|
3
3
|
# setup.sh — 采配くん一式を顧客PCに1コマンドでインストールする統合インストーラ。
|
|
4
4
|
#
|
|
5
5
|
# 使い方:
|
|
6
|
-
# bash setup.sh <プロジェクト名> [プロジェクトディレクトリ]
|
|
6
|
+
# bash setup.sh <プロジェクト名> [プロジェクトディレクトリ] [--profile <default|proto>]
|
|
7
7
|
#
|
|
8
8
|
# 例:
|
|
9
9
|
# bash setup.sh my-app # ~/projects/my-app を想定
|
|
10
10
|
# bash setup.sh my-app /home/user/work/my-app # ディレクトリを明示指定
|
|
11
|
+
# bash setup.sh my-proto --profile proto # ★試作の現場(下の「設置の型」を参照)
|
|
12
|
+
#
|
|
13
|
+
# 設置の型(--profile・既定は default=従来と1文字も変わらない):
|
|
14
|
+
# default … ふつうの現場。同梱の settings.json をそのまま置く。
|
|
15
|
+
# proto … ★試作の現場。本番の記録(DB)・鍵・送信・課金・本番の入口を締め出した設定を
|
|
16
|
+
# その場で作って置き、.env の見本(試作の口の2項目だけ)も置く。
|
|
17
|
+
# ★締め出す物の正本は1ファイル(src/proto-profile.ts=dist/proto-profile.js)で、
|
|
18
|
+
# deny も deniedDomains もそこから生成する(写しを2か所に持たない)。
|
|
11
19
|
#
|
|
12
20
|
# やること(順番に・冪等・失敗時は止めて報告):
|
|
13
21
|
# ① 前提チェック(node>=18 / tmux / git / python3>=3.8 / systemd / sudo / ★Claude Code)
|
|
@@ -30,20 +38,52 @@ set -euo pipefail
|
|
|
30
38
|
|
|
31
39
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
32
40
|
|
|
41
|
+
# ─── 設置の型(プロファイル)を先に取り分ける ────────────────────────────────
|
|
42
|
+
# 【なぜ要るか】試作の現場(例 ai-kana-proto)は本番の記録(DB)も本番の鍵も持たない。
|
|
43
|
+
# 持たない物に触る操作は、はじめから出来なくしておく=「確認が要る操作を試作環境から排除する」。
|
|
44
|
+
# ★既定は default。--profile を書かないときの動きは【1文字も変わらない】。
|
|
45
|
+
# ★何を締め出すかの一覧はここには書かない。正本は @tyhld/conductor の src/proto-profile.ts。
|
|
46
|
+
PROFILE="default"
|
|
47
|
+
_ARGS=()
|
|
48
|
+
while [[ $# -gt 0 ]]; do
|
|
49
|
+
case "$1" in
|
|
50
|
+
--profile)
|
|
51
|
+
PROFILE="${2:-}"
|
|
52
|
+
shift 2 || shift
|
|
53
|
+
;;
|
|
54
|
+
--profile=*)
|
|
55
|
+
PROFILE="${1#*=}"
|
|
56
|
+
shift
|
|
57
|
+
;;
|
|
58
|
+
*)
|
|
59
|
+
_ARGS+=("$1")
|
|
60
|
+
shift
|
|
61
|
+
;;
|
|
62
|
+
esac
|
|
63
|
+
done
|
|
64
|
+
# ★bash 3.2(Mac 標準)+ set -u では空配列の展開が落ちるので +演算子で守る。
|
|
65
|
+
set -- ${_ARGS[@]+"${_ARGS[@]}"}
|
|
66
|
+
|
|
33
67
|
# ─── 引数チェック ─────────────────────────────────────────────────────────────
|
|
34
68
|
if [[ $# -lt 1 || -z "${1:-}" ]]; then
|
|
35
69
|
cat >&2 <<'USAGE'
|
|
36
70
|
采配くんセットアップ
|
|
37
71
|
|
|
38
|
-
使い方: bash setup.sh <プロジェクト名> [プロジェクトディレクトリ]
|
|
72
|
+
使い方: bash setup.sh <プロジェクト名> [プロジェクトディレクトリ] [--profile <default|proto>]
|
|
39
73
|
|
|
40
74
|
例:
|
|
41
75
|
bash setup.sh my-app # ~/projects/my-app を想定
|
|
42
76
|
bash setup.sh my-app /home/user/work/my-app # ディレクトリを明示指定
|
|
77
|
+
bash setup.sh my-proto --profile proto # ★試作の現場(本番DB・鍵・送信・課金を締め出す)
|
|
43
78
|
USAGE
|
|
44
79
|
exit 1
|
|
45
80
|
fi
|
|
46
81
|
|
|
82
|
+
if [[ "$PROFILE" != "default" && "$PROFILE" != "proto" ]]; then
|
|
83
|
+
echo "[setup] エラー: --profile は default か proto を指定してください(指定値: \"$PROFILE\")" >&2
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
|
|
47
87
|
SITE="$1"
|
|
48
88
|
PROJECT_DIR="${2:-$HOME/projects/$SITE}"
|
|
49
89
|
|
|
@@ -651,8 +691,26 @@ fi
|
|
|
651
691
|
# --- 現場の権限ルール settings.json(番人フックは書かない) ---
|
|
652
692
|
# ★ここに置くのは「その現場固有の権限ルール(deny・Supabase 等の sandbox)」だけ。
|
|
653
693
|
# 番人フックは上でホームに1本化済み。現場側には hooks を書かない(二重番人を作らない)。
|
|
694
|
+
#
|
|
695
|
+
# ★試作(proto)の型のときは、置く中身を【その場で作る】。
|
|
696
|
+
# 締め出す物の正本は @tyhld/conductor の src/proto-profile.ts(=dist/proto-profile.js)1本で、
|
|
697
|
+
# deny も deniedDomains もそこから生成される。ここに一覧を写さない(写しを2か所に持たない=
|
|
698
|
+
# 片方に足してもう片方を忘れる事故を構造的に起こせなくする)。
|
|
654
699
|
SETTINGS_SRC="$SCRIPT_DIR/settings.json"
|
|
655
700
|
SETTINGS_DST="$CLAUDE_DIR/settings.json"
|
|
701
|
+
PROTO_GEN="$SCRIPT_DIR/../dist/proto-profile.js"
|
|
702
|
+
if [[ "$PROFILE" == "proto" ]]; then
|
|
703
|
+
[[ -f "$PROTO_GEN" ]] || fail "試作の型の正本が見つかりません: $PROTO_GEN
|
|
704
|
+
配布物が壊れている可能性があります。次の1行で入れ直してください:
|
|
705
|
+
npm i -g @tyhld/conductor"
|
|
706
|
+
PROTO_SETTINGS="$CLAUDE_DIR/.settings.proto.$$"
|
|
707
|
+
node "$PROTO_GEN" settings > "$PROTO_SETTINGS" \
|
|
708
|
+
|| fail "試作の型の設定を作れませんでした(node \"$PROTO_GEN\" settings)"
|
|
709
|
+
[[ -s "$PROTO_SETTINGS" ]] || fail "試作の型の設定が空です(node \"$PROTO_GEN\" settings)"
|
|
710
|
+
trap 'rm -f "$PROTO_SETTINGS"' EXIT
|
|
711
|
+
SETTINGS_SRC="$PROTO_SETTINGS"
|
|
712
|
+
echo "[setup] 型: proto(試作)— 本番の記録(DB)・鍵・送信・課金・本番の入口を締め出した設定を作りました。"
|
|
713
|
+
fi
|
|
656
714
|
if [[ -f "$SETTINGS_SRC" ]]; then
|
|
657
715
|
if [[ -f "$SETTINGS_DST" ]]; then
|
|
658
716
|
echo "[setup] $SETTINGS_DST は既に存在します。上書きしますか?"
|
|
@@ -710,6 +768,30 @@ else
|
|
|
710
768
|
warn "settings.json が見つかりません: $SETTINGS_SRC(スキップ)"
|
|
711
769
|
fi
|
|
712
770
|
|
|
771
|
+
# --- 試作(proto)の型のときだけ: .env の見本を置く --------------------------
|
|
772
|
+
# ★試作の現場に置くのは「試作の口につなぐ2項目」だけ。本番の鍵の名前は1つも書かない
|
|
773
|
+
# =書く場所が無いから、間違って本番の鍵を置けない。
|
|
774
|
+
# ★合言葉は空のまま置き、人が入れる(AI は .env を書けない=deny)。
|
|
775
|
+
# ★中身(鍵の名前を含む)も正本(proto-profile.js)が持つ。ここには1行も書かない。
|
|
776
|
+
if [[ "$PROFILE" == "proto" ]]; then
|
|
777
|
+
ENV_EXAMPLE_DST="$PROJECT_DIR/.env.example"
|
|
778
|
+
write_env_example=1
|
|
779
|
+
if [[ -f "$ENV_EXAMPLE_DST" ]]; then
|
|
780
|
+
echo "[setup] $ENV_EXAMPLE_DST は既に存在します。上書きしますか?"
|
|
781
|
+
read -r -p " 上書き (y/N): " overwrite_env
|
|
782
|
+
[[ "$(lower "$overwrite_env")" == "y" ]] || write_env_example=0
|
|
783
|
+
fi
|
|
784
|
+
if [[ "$write_env_example" == "1" ]]; then
|
|
785
|
+
if node "$PROTO_GEN" env > "$ENV_EXAMPLE_DST"; then
|
|
786
|
+
echo "[setup] 配置: $ENV_EXAMPLE_DST(試作の口の2項目だけ)"
|
|
787
|
+
else
|
|
788
|
+
warn ".env の見本を作れませんでした(node \"$PROTO_GEN\" env)"
|
|
789
|
+
fi
|
|
790
|
+
else
|
|
791
|
+
echo "[setup] .env の見本はそのままにしました。"
|
|
792
|
+
fi
|
|
793
|
+
fi
|
|
794
|
+
|
|
713
795
|
# --- 職人の鉄則スキル conductor-craftsman を配置 ------------------------------
|
|
714
796
|
# ★番人(安全装置)が「やらせない」側なら、こちらは職人自身が「そう動く」側。
|
|
715
797
|
# 便(CONDUCTOR_JOB 印の付いた作業指示)を受けた職人が最初に読む作業規律を、
|
|
@@ -933,6 +1015,22 @@ if command -v claude >/dev/null 2>&1; then
|
|
|
933
1015
|
else
|
|
934
1016
|
mark ng "職人(Claude Code)が使える" "npm i -g @anthropic-ai/claude-code を実行してください"
|
|
935
1017
|
fi
|
|
1018
|
+
# ★試作の型のときだけ増える点検。「締め出しが本当に置かれたか」を字で確かめる。
|
|
1019
|
+
if [[ "$PROFILE" == "proto" ]]; then
|
|
1020
|
+
PROTO_RETRY="conductor setup ${SITE} --profile proto をもう一度実行してください"
|
|
1021
|
+
# ★何が締め出されているかの一覧はここで持たない(正本は1ファイル)。
|
|
1022
|
+
# 「正本から作った物」と「実際に置いた物」が同じかどうかだけを見る。
|
|
1023
|
+
if [[ -f "$SETTINGS_DST" ]] && cmp -s "$PROTO_SETTINGS" "$SETTINGS_DST"; then
|
|
1024
|
+
mark ok "試作の型: 本番の記録(DB)・鍵・送信・課金・本番の入口を締め出してある" ""
|
|
1025
|
+
else
|
|
1026
|
+
mark ng "試作の型: 本番の記録(DB)・鍵・送信・課金・本番の入口を締め出してある" "$PROTO_RETRY"
|
|
1027
|
+
fi
|
|
1028
|
+
if [[ -f "$PROJECT_DIR/.env.example" ]]; then
|
|
1029
|
+
mark ok "試作の型: .env の見本(試作の口の2項目だけ)がある" ""
|
|
1030
|
+
else
|
|
1031
|
+
mark ng "試作の型: .env の見本(試作の口の2項目だけ)がある" "$PROTO_RETRY"
|
|
1032
|
+
fi
|
|
1033
|
+
fi
|
|
936
1034
|
|
|
937
1035
|
echo
|
|
938
1036
|
if [[ ${#ng_lines[@]} -eq 0 ]]; then
|