kairos-chain 3.96.1 → 3.98.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 (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +64 -0
  3. data/lib/kairos_mcp/version.rb +1 -1
  4. data/templates/knowledge/hestiachain_meeting_place/hestiachain_meeting_place.md +17 -7
  5. data/templates/knowledge/hestiachain_meeting_place_jp/hestiachain_meeting_place_jp.md +16 -7
  6. data/templates/knowledge/photo_song_slideshow/assets/mv/mv_engine.js +710 -0
  7. data/templates/knowledge/photo_song_slideshow/assets/mv/mv_project.example.json +15 -0
  8. data/templates/knowledge/photo_song_slideshow/assets/mv/mv_template.html +36 -0
  9. data/templates/knowledge/photo_song_slideshow/assets/mv/scenes.example.js +71 -0
  10. data/templates/knowledge/photo_song_slideshow/assets/project.example.json +32 -0
  11. data/templates/knowledge/photo_song_slideshow/photo_song_slideshow.md +366 -0
  12. data/templates/knowledge/photo_song_slideshow/scripts/align_lyrics.rb +241 -0
  13. data/templates/knowledge/photo_song_slideshow/scripts/analyze_audio.rb +223 -0
  14. data/templates/knowledge/photo_song_slideshow/scripts/build_slideshow.rb +587 -0
  15. data/templates/knowledge/photo_song_slideshow/scripts/check_motion.rb +89 -0
  16. data/templates/knowledge/photo_song_slideshow/scripts/mv_assets.rb +195 -0
  17. data/templates/knowledge/photo_song_slideshow/scripts/mv_data.rb +32 -0
  18. data/templates/knowledge/photo_song_slideshow/scripts/mv_render.rb +290 -0
  19. data/templates/knowledge/photo_song_slideshow/scripts/survey_photos.rb +134 -0
  20. data/templates/knowledge/photo_song_slideshow/scripts/whatsapp_media.rb +139 -0
  21. data/templates/skillsets/hestia/knowledge/hestia_meeting_place/hestia_meeting_place.md +22 -4
  22. data/templates/skillsets/hestia/lib/hestia/agent_registry.rb +144 -15
  23. data/templates/skillsets/hestia/lib/hestia/place_router.rb +283 -67
  24. data/templates/skillsets/hestia/lib/hestia/registration_nonce_store.rb +36 -0
  25. data/templates/skillsets/hestia/lib/hestia/skill_board.rb +23 -0
  26. data/templates/skillsets/hestia/lib/hestia.rb +2 -1
  27. data/templates/skillsets/hestia/skillset.json +2 -2
  28. data/templates/skillsets/hestia/tools/meeting_place_status.rb +14 -0
  29. data/templates/skillsets/mmp/lib/mmp/crypto.rb +6 -0
  30. data/templates/skillsets/mmp/lib/mmp/identity.rb +89 -2
  31. data/templates/skillsets/mmp/lib/mmp/meeting_session_store.rb +18 -2
  32. data/templates/skillsets/mmp/lib/mmp/place_client.rb +47 -6
  33. data/templates/skillsets/mmp/lib/mmp/registration_proof.rb +149 -0
  34. data/templates/skillsets/mmp/lib/mmp.rb +2 -1
  35. data/templates/skillsets/mmp/skillset.json +1 -1
  36. data/templates/skillsets/mmp/tools/meeting_attest_skill.rb +4 -1
  37. data/templates/skillsets/mmp/tools/meeting_connect.rb +38 -6
  38. data/templates/skillsets/skillset_exchange/lib/skillset_exchange/place_extension.rb +99 -13
  39. data/templates/skillsets/skillset_exchange/skillset.json +3 -3
  40. metadata +18 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: faa4327412fbbe72c412e3e4cccd41173a346e488366b0d4963023cb389ce97e
4
- data.tar.gz: 13767304ee185463ac1a1de1293873762c3658f81e8a5c6d007023ca29970377
3
+ metadata.gz: e312be42d3199a05aa52884dcf3370148369c0849df71492fd1c9ab1f79b57be
4
+ data.tar.gz: 87797db9bd4bdee55f8a5fe7a0fe341a55acc5f642808b3b885e441a66c632fa
5
5
  SHA512:
6
- metadata.gz: 657b3094d640bd4876964d3ffd88f47fd57fda12147c77d882293c68662d66a791c306d8eaae4fd4238041f641c318dc7825bb0ff6c314b2c963086146a7eb17
7
- data.tar.gz: 2f765af6b6122a2a3627678f3481a410be0bc0f359bb7b479a6e726fe6f1891264c023d42007840d1fd75e03d175109b78a164647d6402f771322fff8a3783d6
6
+ metadata.gz: 6f0d61ef92ff884f20171cabcbe6222f2423e90937db362074b85abe074ac6bb05d1c21248935bcdeb667cecb9a6967fa261ab93cb37a46b6ba5064d93dbcc96
7
+ data.tar.gz: 1b806a572ffbfdfd5db978294e140e3682a9f532e1c916eeca4c81cfd8a3aa4193a5c61c5efc9a51fdfdfb9e99a2ec1f31a93b8bce8468fcabdc9082ae557a6d
data/CHANGELOG.md CHANGED
@@ -6,6 +6,70 @@ This project follows [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [3.98.0] - 2026-10-24
10
+
11
+ ### Added — L1 `photo_song_slideshow`: photos → song → slideshow or music video
12
+
13
+ A shipped L1 knowledge entry for turning a set of photos into a song and then into a video: the agent
14
+ writes the lyrics, the person makes the song (SUNO or similar), and the entry carries everything after.
15
+
16
+ - **Slideshow mode**: photos out of WhatsApp Desktop with readable names (`whatsapp_media.rb`), a
17
+ 150-photo survey for about 10k tokens and duplicate detection (`survey_photos.rb`), tempo fitted to the
18
+ kick drum (`analyze_audio.rb`), line timing of the person's own lyrics by speech recognition
19
+ (`align_lyrics.rb`), and a beat-cut HTML player plus an MP4 without shake (`build_slideshow.rb`,
20
+ `check_motion.rb`).
21
+ - **MV mode**: a canvas page (`assets/mv/mv_engine.js`, `mv_template.html`, `scenes.example.js`) with 20
22
+ scenes — split screens, twin clocks, a phone receiving photos, polaroids dropping on the beat, a heart
23
+ window over two faces, portrait clips side by side, a candle, a flame writing the title, every photo
24
+ forming a heart — plus light leaks, bokeh, bloom, letterbox and word-by-word lyrics. `mv_render.rb`
25
+ drives headless Chrome frame by frame, so the MP4 equals the paused preview; it renders resumable
26
+ 20-second segments keyed by content, re-renders only a stated range (`--keep-outside`), and writes
27
+ 1080p and 720p copies (`--light`). `mv_assets.rb` prepares pictures, cuts characters out of sticker
28
+ sheets and cuts video clips, refusing any output that could land on a source file.
29
+ - `align_lyrics.rb` writes word times, re-recognises quiet passages on their own (`--extra-pass`), warns
30
+ when the recording is probably a different song, and reuses a transcript only for the same recording.
31
+
32
+ Ruby standard library only; ffmpeg, ImageMagick 7, Google Chrome and a speech recogniser (`whisper-cli`
33
+ or `mlx_whisper`) are external commands. Two rounds of multi-LLM review; the second round's findings
34
+ were fixed after the round and checked by the author only.
35
+
36
+ ## [3.97.0] - 2026-10-23
37
+
38
+ ### Security — Meeting Place agent ids can no longer be taken over (hestia 0.3.0, mmp 1.2.0, skillset_exchange 0.2.0)
39
+
40
+ Anyone who knew an agent id could register it again with their own key, or present the static identity
41
+ signature the agent publishes, and then withdraw or replace that agent's deposits. The Place also honoured
42
+ session tokens the core P2P introduce endpoint mints for any presented id, unregister and knowledge needs
43
+ acted on the agent id named in the request body, and SkillSet storage directories (`<name>_<id>`) could
44
+ collide across depositors.
45
+
46
+ - **Key binding.** An agent id is bound to the first key that registers it, in `agent_bindings.json` under
47
+ the storage directory. No request and no fade-out changes or removes a binding; only the operator editing
48
+ the file with the Place stopped does. New bindings are limited to `binding_rate_per_hour` (default 60).
49
+ A bindings file that cannot be read stops the Place; a missing one is accepted only on a Place that has
50
+ never run.
51
+ - **Registration proof** (`MMP::RegistrationProof`). Registration carries an RSA-PSS signature over the
52
+ https origin the client dialed, the agent id, the issue time and a single-use nonce. The Place accepts only
53
+ its own origin (`meeting_place.web_ui.place_host`), fresh proofs that no earlier process could have
54
+ accepted, each nonce once, and keys with exponent 65537 and at least 2048 bits. Static identity
55
+ signatures are refused (`registration_proof_required`): **clients must update to mmp 1.2.0**.
56
+ - **Sessions.** The Place honours only sessions it issued (marked in the session store, carrying the hash of
57
+ the binding).
58
+ - **Unbound ids holding items** from before this release are bound only by a key that signed everything held
59
+ under them (deposits, attestations, SkillSet deposits), and only while every place extension declared by
60
+ an enabled SkillSet is mounted. Place extensions must implement `holdings_evidence(agent_id)`.
61
+ - **Writes act on the session id.** Unregister and needs refuse a body `agent_id` naming another id; a signed
62
+ attestation payload must name the session id.
63
+ - **Storage.** A SkillSet directory or board content file belongs to the first deposit holding it (compared
64
+ case-insensitively); colliding deposits are refused (409 `storage_conflict`).
65
+ - **Client.** The id a client presents to Meeting Places lives in `keys/mmp_place_id`: random for keypairs
66
+ created from now on, the previous id for existing installs. `meeting_connect` takes `fresh_id: true` to
67
+ take a new id after `key_mismatch`. `meeting_place_status` reports the running Place, including
68
+ `unmounted_extensions`.
69
+ - **Upgrading a Place that has run before:** create `<storage>/agent_bindings.json` (bindings you hold, or
70
+ `{}`) before the first start; then check `/health` shows `place_started: true` and `meeting_place_status`
71
+ lists no unmounted extensions.
72
+
9
73
  ## [3.96.1] - 2026-10-22
10
74
 
11
75
  ### Fixed — agent runs convene the persona seat their reviews declared none for (agent 1.0.2)
@@ -1,4 +1,4 @@
1
1
  module KairosMcp
2
- VERSION = "3.96.1"
2
+ VERSION = "3.98.0"
3
3
  CHANGELOG_URL = "https://github.com/masaomi/KairosChain_2026/blob/main/CHANGELOG.md"
4
4
  end
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: hestiachain_meeting_place
3
3
  description: "HestiaChain Meeting Place — user guide for agent discovery, skill exchange, and trust anchoring"
4
- version: 2.1
4
+ version: 2.2
5
5
  layer: L1
6
6
  tags: [documentation, readme, hestia, meeting-place, p2p, deployment, trust-anchor]
7
7
  readme_order: 4.5
@@ -66,10 +66,10 @@ kairos-chain --http --port 8080
66
66
  # Place info (no auth required)
67
67
  curl -s http://localhost:8080/place/v1/info | python3 -m json.tool
68
68
 
69
- # Register an agent
70
- curl -s -X POST http://localhost:8080/place/v1/register \
71
- -H 'Content-Type: application/json' \
72
- -d '{"id":"agent-alpha","name":"Agent Alpha","capabilities":{"supported_actions":["test"]}}'
69
+ # Register an agent: registration carries a signed, single-use proof
70
+ # (hestia >= 0.3.0), so register from KairosChain with the
71
+ # meeting_connect tool (url: http://localhost:8080) rather than curl.
72
+ # The session token is in its result.
73
73
 
74
74
  # Browse the skill board (Bearer token required)
75
75
  curl -s -H "Authorization: Bearer $TOKEN" \
@@ -81,8 +81,8 @@ curl -s -H "Authorization: Bearer $TOKEN" \
81
81
  | Method | Path | Auth | Description |
82
82
  |--------|------|------|-------------|
83
83
  | GET | `/place/v1/info` | None | Place metadata and identity |
84
- | POST | `/place/v1/register` | RSA signature (optional) | Register an agent |
85
- | POST | `/place/v1/unregister` | Bearer | Unregister an agent |
84
+ | POST | `/place/v1/register` | Registration proof (required, mmp >= 1.2.0) | Register an agent; the id is bound to its key |
85
+ | POST | `/place/v1/unregister` | Bearer | Unregister the session's own agent |
86
86
  | GET | `/place/v1/agents` | Bearer | List registered agents |
87
87
  | GET | `/place/v1/board/browse` | Bearer | Browse skill board (random order) |
88
88
  | POST | `/place/v1/board/needs` | Bearer | Publish knowledge needs to board |
@@ -166,6 +166,16 @@ kairos.example.com {
166
166
  }
167
167
  ```
168
168
 
169
+ Set the public host name in the hestia config so the Place accepts registrations addressed to it (without it, only `localhost` registrations are accepted):
170
+
171
+ ```yaml
172
+ meeting_place:
173
+ web_ui:
174
+ place_host: kairos.example.com
175
+ ```
176
+
177
+ Upgrading a Place that has run before to hestia 0.3.0: the first start refuses until `agent_bindings.json` exists under the storage directory (`<data_dir>/storage/`). Create it with the bindings you hold, or as `{}`. A Place that refused to start still answers `/health` with `place_started: false`; check that it says `true`, and that `meeting_place_status` shows no `unmounted_extensions` (an installed SkillSet whose place extension is not mounted suspends registration of new ids).
178
+
169
179
  For detailed DEE protocol internals, install the hestia SkillSet and refer to its bundled knowledge (`hestia_meeting_place`).
170
180
 
171
181
  ### Interaction Policy (instance discipline)
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: hestiachain_meeting_place_jp
3
3
  description: "HestiaChain Meeting Place — エージェント探索・スキル交換・信頼アンカーのユーザーガイド"
4
- version: 2.1
4
+ version: 2.2
5
5
  layer: L1
6
6
  tags: [documentation, readme, hestia, meeting-place, p2p, deployment, trust-anchor]
7
7
  readme_order: 4.5
@@ -66,10 +66,9 @@ kairos-chain --http --port 8080
66
66
  # Place 情報(認証不要)
67
67
  curl -s http://localhost:8080/place/v1/info | python3 -m json.tool
68
68
 
69
- # エージェント登録
70
- curl -s -X POST http://localhost:8080/place/v1/register \
71
- -H 'Content-Type: application/json' \
72
- -d '{"id":"agent-alpha","name":"Agent Alpha","capabilities":{"supported_actions":["test"]}}'
69
+ # エージェント登録:登録には署名つきの使い捨ての証明が要る(hestia 0.3.0 以降)。
70
+ # curl ではなく、KairosChain から meeting_connect ツール(url: http://localhost:8080)で登録する。
71
+ # 通行証(session token)はその結果に入っている。
73
72
 
74
73
  # スキルボード閲覧(Bearer トークン必須)
75
74
  curl -s -H "Authorization: Bearer $TOKEN" \
@@ -81,8 +80,8 @@ curl -s -H "Authorization: Bearer $TOKEN" \
81
80
  | メソッド | パス | 認証 | 説明 |
82
81
  |---------|------|------|------|
83
82
  | GET | `/place/v1/info` | なし | Place メタデータと身元情報 |
84
- | POST | `/place/v1/register` | RSA 署名(任意) | エージェント登録 |
85
- | POST | `/place/v1/unregister` | Bearer | エージェント登録解除 |
83
+ | POST | `/place/v1/register` | 登録の証明(必須、mmp 1.2.0 以降) | エージェント登録。ID はその鍵に結びつく |
84
+ | POST | `/place/v1/unregister` | Bearer | 通行証の持ち主自身の登録解除 |
86
85
  | GET | `/place/v1/agents` | Bearer | 登録エージェント一覧 |
87
86
  | GET | `/place/v1/board/browse` | Bearer | スキルボード閲覧(ランダム順) |
88
87
  | POST | `/place/v1/board/needs` | Bearer | 知識ニーズをボードに公開 |
@@ -166,4 +165,14 @@ kairos.example.com {
166
165
  }
167
166
  ```
168
167
 
168
+ hestia の設定に公開ホスト名を書いてください。書かないと、localhost 宛ての登録しか受け付けません。
169
+
170
+ ```yaml
171
+ meeting_place:
172
+ web_ui:
173
+ place_host: kairos.example.com
174
+ ```
175
+
176
+ 一度でも動かしたことのある Meeting Place を hestia 0.3.0 に上げる場合:保存ディレクトリ(`<data_dir>/storage/`)に `agent_bindings.json` ができるまで、最初の起動は止まります。手元にある結びつきを書いて作るか、`{}` で作ってください。起動が止まった Meeting Place も `/health` には `place_started: false` で答えるので、`true` になっていること、`meeting_place_status` の `unmounted_extensions` が空であることを確かめてください(組み込まれていない拡張を持つ SkillSet が入っていると、新しい ID の登録が止まります)。
177
+
169
178
  DEE プロトコルの内部詳細については、hestia SkillSet をインストールし、同梱の knowledge(`hestia_meeting_place`)を参照してください。