From 138fda8ea6fb85a9754c6067f3f1bf6573c969c1 Mon Sep 17 00:00:00 2001 From: Hare Date: Mon, 31 Aug 2026 21:00:35 +0900 Subject: [PATCH] init --- 1-concept.md | 78 ++++++++++++++++++++++++++++++++++++++ 2-core-model.md | 61 +++++++++++++++++++++++++++++ 2.1-object-tree-schema.md | 73 +++++++++++++++++++++++++++++++++++ 2.2-operation.md | 47 +++++++++++++++++++++++ 3-core-protocol.md | 63 ++++++++++++++++++++++++++++++ 4-client.md | 61 +++++++++++++++++++++++++++++ 4.1-ai-tools-example.md | 58 ++++++++++++++++++++++++++++ draft/unresolved-issues.md | 24 ++++++++++++ draft/wip-over-https.md | 29 ++++++++++++++ 9 files changed, 494 insertions(+) create mode 100644 1-concept.md create mode 100644 2-core-model.md create mode 100644 2.1-object-tree-schema.md create mode 100644 2.2-operation.md create mode 100644 3-core-protocol.md create mode 100644 4-client.md create mode 100644 4.1-ai-tools-example.md create mode 100644 draft/unresolved-issues.md create mode 100644 draft/wip-over-https.md diff --git a/1-concept.md b/1-concept.md new file mode 100644 index 0000000..2ea010b --- /dev/null +++ b/1-concept.md @@ -0,0 +1,78 @@ +# 1. コンセプト + +## 背景 + +現在のLLMエージェントは、Filesystem、検索、Issue Tracker、データベース、外部API、他のAgentなどを、それぞれ別個のToolとして扱うことが多い。統合先が増えるほど、モデルに提示するTool SchemaとAction Spaceも増えていく。 + +Unix filesystemは、異なる資源を単一の名前空間へ配置し、少数の操作で探索できる強い抽象化を持つ。一方、file / directoryとread / write中心の操作だけでは、`Issue.close()`、`PullRequest.merge()`、`Agent.ask()`のような意味的操作を自然に表現しにくい。 + +## 中心アイデア + +WIPは、任意のデジタル環境を一つの**Worldspace**として公開する。 + +WorldspaceはObjectのTreeとして構成される。本書では、Tree上に配置され、Pathで到達できるObjectを**エントリ**と呼ぶ。Objectとエントリは別スキーマではない。 + +Objectは、短いdescription、利用可能なOperation、子Object、必要に応じて`ref`を公開できる。本文やmetadataなどのドメインデータは常時露出せず、Operationを通して取得・操作することを基本とする。 + +## Tool DiscoveryではなくWorld Discovery + +一般的なTool Callingでは、モデルは提示されたTool一覧から操作を選ぶ。 + +WIPでは、モデルは既知のWorldspaceを辿り、目的に関連する対象を見つけ、公開されたOperationを確認して実行する。Operationの結果から未知のエントリやLinkを発見し、既知の世界へ追加できる。 + +中心となる問題を**Tool SelectionからWorld Explorationへ移す**ことがWIPの狙いである。 + +## Worldspaceの構造 + +Pathはidentityではなく、現在のWorldspace上の配置位置である。同一Objectが複数のエントリとして現れてもよい。 + +親子関係は所有・内包を表す。所有関係にない意味的な関連はLinkとして扱い、Treeへ無理に押し込まない。 + +Worldspace全体を事前にmaterializeする必要はない。Hostはlazy / virtualなTreeとして、必要な範囲だけを動的に公開できる。 + +## 操作中心のモデル + +WIPではObjectを受動的なJSON recordとして扱わない。 + +本文を読む、metadataを取得する、検索する、状態を変更するといった行為はいずれもOperationとして表現する。例えばIssueであれば、`read_body()`、`get_metadata()`、`close(reason)`などを公開できる。 + +Operationには、名前や型に加えて、用途を判断するための短いdescriptionを持たせる。長文documentationや大量のドメインデータをinterface metadataへ埋め込むことは想定しない。 + +## 発見と既知世界 + +Clientは、これまでに発見したエントリを既知のWorldspaceとして保持できる。既知のエントリはClient側で自由に辿り、Operation結果やLinkから得たエントリを追加して、さらに探索できる。 + +機械的な広域探索の対象は、Hostがindexableとして公開した範囲に限定できる。これにより、大量の検索結果や動的Objectが自動的に探索indexへ流入することを防ぐ。 + +## Guard + +Operationには、実行可否とpreconditionを示すGuardを持たせられる。 + +例えばPull Requestの`merge`について、「CIが成功していること」「Reviewが承認済みであること」「書き込み権限を持つこと」を提示できる。Guardはアクセス制御だけでなく、Goal達成に必要なSubgoalを推論する材料にもなる。 + +Guardの強制はLLMではなくHost / Runtime側で行う。 + +## World State Transition + +Operationの結果は、単なるTool Responseに限らない。Worldspaceの状態変化や、新たなエントリの発見として表現できる。 + +例えばRAG検索からResult群を発見したり、Agentへの問い合わせからConversationを発見したりできる。Operationは、Worldspaceを変化させ、未観測だった領域を可視化する行為でもある。 + +## Narrow Waist + +WIPの目的は、Filesystem、GitHub、RAG、DBなどを一つの巨大APIへ統合することではない。 + +任意のデジタル環境を共通のWorldspaceとして投影し、発見・観測・Operation実行という小さなInteraction Modelへ収束させる。Host内部のAPI、DB、RPC、永続化方式は規定せず、TransportもCore Protocolから分離する。 + +## Post-trainingとの仮説 + +Tool Useが事後学習の対象になるなら、個別Tool名ではなくWorldspace上のinteraction policyを学習できる可能性がある。 + +1. 既知の世界を探索する。 +2. 対象の意味とOperationを理解する。 +3. 必要ならOperationから未知のエントリを発見する。 +4. Guardやpreconditionを満たす。 +5. Operationを実行する。 +6. 変化・発見されたWorldspaceを再び観測する。 + +最も強い仮説は、**未知のToolを使えるモデルではなく、未知のDigital Environmentを探索できるモデルを作れるのではないか**という点にある。 \ No newline at end of file diff --git a/2-core-model.md b/2-core-model.md new file mode 100644 index 0000000..8e4d71a --- /dev/null +++ b/2-core-model.md @@ -0,0 +1,61 @@ +# 2. コアモデル + +## 基本構造 + +Worldspaceは、LLMが探索できる**ObjectのTree**として公開される。 + +WIPではObjectとエントリを別の構造として定義しない。**ObjectをWorldspaceのTree上の位置として扱うとき、そのObjectをエントリと呼ぶ。** + +したがって、ObjectはTree上で親子関係を持ち得るし、途中のNodeもそのまま操作対象になってよい。例えば`articles`はCollection Objectとして`query`等を公開でき、その配下に個別Articleが配置され得る。 + +## Object / エントリ + +**Object**はWIP上で観測・操作される対象そのものである。 + +**エントリ**は、そのObjectをTree上の位置として見たときの呼び名である。 + +エントリがObjectへの参照を別途持つ、という二重構造は前提としない。 + +Tree上の位置はpathで表される。Pathは恒久的なIdentityではなく、その時点でのnavigation coordinateである。 + +同じObjectが複数の位置に現れる場合、一つのObjectが複数のエントリとして観測され得る。 + +## `ref` + +Objectは必要に応じて`ref`を公開できる。 + +`ref`は内部IDそのものではなく、WIP上で同一Objectとして再参照するための外部Handleである。 + +- Objectが`ref`を持つことは必須ではない。 +- 複数回のInteractionを通して同一Objectとして扱われることを意図する場合、同じ有効な`ref`を公開する。 +- `ref`のscopeや有効期間はWorldspaceまたは実装が定めてよい。 +- `ref`はグローバルかつ永続的なUIDである必要はない。 +- 同じObjectが複数のエントリとして観測される場合、同じ`ref`によって同一性を示せる。 + +## 観測整合性 + +エントリ自体をObjectとは別実体として扱わなくても、**あるpath上のObjectを観測した後、操作を行うまでの間に、そのpathが別のObjectを指すようになってはならない**。 + +例えば、AIが`/issues/current`を観測した時点ではIssue Aだったが、`invoke`時にはIssue Bへ差し替わっていた場合、AIはIssue Aへ作用するつもりでIssue Bを操作してしまう可能性がある。 + +この観測整合性は利用者に追跡させるのではなく、クライアントの責務とする。 + +処理の流れは次の通り。 + +1. Clientがpath上のObjectを観測する。 +2. Clientはその時点のpathとObjectの対応を内部的に記録する。 +3. モデルは観測したObjectについて推論する。 +4. モデルが同じpathを対象に操作を要求した場合、Client / Runtimeは実行前に対応関係が変化していないことを検証する。 + +実装はETagやgeneration、opaque token等の内部メタデータを用いてよいが、それらを利用者へ露出する必要はない。 + +対応関係が変化していた場合、Clientは新しいObjectに対して操作を自動的に再試行してはならない。操作を中止し、`target_changed`のような意味的エラーを返して再観測を要求する。 + +## 同一性と観測整合性の分離 + +WIPでは次の2つを分けて扱う。 + +- **Object identity (`ref`)**: 複数の観測にまたがって同一Objectであることを明示するための任意の外部Handle。 +- **Observation consistency**: `ref`の有無に関わらず、観測したpath上のObjectと操作対象のObjectが一致していることをClient / Runtimeが保証する仕組み。 + +したがって、`ref`を持たないObjectであっても安全な操作対象になり得る。`ref`は同一性を公開する仕組みであり、Observation consistencyは操作の安全性を担保する仕組みである。 \ No newline at end of file diff --git a/2.1-object-tree-schema.md b/2.1-object-tree-schema.md new file mode 100644 index 0000000..0652907 --- /dev/null +++ b/2.1-object-tree-schema.md @@ -0,0 +1,73 @@ +# 2.1. Object tree / Schema + +## 2.1.1 目的 + +このページでは、WIP Core ModelにおけるObject treeと、それらをClientへ公開する際の最小スキーマを整理する。 + +WIPでは、**Objectとエントリを別のデータ構造として定義しない**。ObjectをWorldspaceのTree上に配置されたものとして扱うとき、そのObjectをエントリと呼ぶ。 + +## 2.1.2 Objectとエントリ + +**Object**はWIP上で観測・操作される対象そのものである。 + +**エントリ**は、そのObjectをWorldspaceのTree上の位置として見たときの呼び名である。 + +したがって、エントリがObjectへの参照を別途保持する、あるいはエントリ schemaとObject schemaを二重に定義することは前提としない。 + +ObjectがTree上に配置されることでエントリとなり、pathはその配置位置を表すnavigation coordinateとなる。 + +同じObjectが複数の位置に現れる場合、一つのObjectが複数のエントリとして観測され得る。 + +## 2.1.3 公開情報 + +Object / エントリが公開する情報は、Worldspaceを探索し、対象に対して何ができるかを理解するための**interface metadata**である。 + +現時点では、少なくとも次の情報を想定する。 + +- `name` — Objectの短い名前。Tree上ではエントリ名としても用いられる。 +- `description` — Objectが何を表すかを説明する短い自然言語。長文documentationではなく、探索・判断に必要な最小限のsemantic metadataとする。 +- `operations` — Objectが公開するOperation。詳細は [2.2. Operation](2.2-operation.md) で定義する。 +- `children` — Tree上でindexableとして公開される子Object / エントリ。 +- `ref` — 必要に応じて公開される、同一Objectを再参照するための外部Handle。 + +WIPではドメインデータそのものをpropertiesとして直接公開することを前提としない。本文、metadata、状態などを読む行為もOperationとして表現する。 + +## 2.1.4 Tree + +Worldspaceは、Objectが親子関係によって配置されたTreeとして観測される。 + +Tree上のObjectをエントリとして呼び、その位置をpathで表す。 + +子エントリは所有・内包関係を表す。非内包の意味的関係はLinkとして扱う。 + +例えばRepository配下の`issues`は子エントリとして自然だが、Issueから関連Pull Requestへの参照はLinkとして表現する。 + +Treeはmaterializedな全世界ではなく、HostがそのClientに対して公開する**lazy / virtual tree**である。Hostは全Objectを事前保持する必要はなく、`fetch`や`fetch_tree`に応じて動的に解決してよい。 + +## 2.1.5 Indexable children + +子エントリには、機械的探索で辿ってよいものと、Operationによってのみ発見されるものがある。 + +`fetch_tree`が辿るのは**indexableとして公開された子エントリのみ**とする。 + +indexableな子エントリは、Worldspaceの構造理解に必要で、通常は件数が小さいものを想定する。 + +一方、大量のIssue、検索結果、一時的なObject群などはindexable childとして露出しない。必要なエントリはCollection Objectの`query` / `list`等のOperation結果として返す。 + +## 2.1.6 Link + +LinkはTree上の所有・内包ではない意味的関係を表す。 + +Linkによって未知のエントリが発見された場合、ClientはそのエントリをKnown Spaceへ追加できる。ただし、それだけではDiscoverable Spaceには追加しない。 + +そのエントリを起点に`fetch_tree`を行い、indexableなTreeを取得した場合にのみ、その範囲をdiscover対象として扱える。 + +## 2.1.7 Core Protocolとの対応 + +`fetch(entry)`は、指定されたTree上の位置にあるObjectの公開情報を取得する。 + +`fetch_tree(entry, depth, limit)`は、指定エントリからindexable child edgeだけを幅優先探索し、Treeとしてまとめて返す。 + +探索が`depth`または`limit`により打ち切られた場合は、レスポンスで`truncated`を必ず明示する。 + +Operationを実行した結果として、新しいエントリ、エントリツリー、Linkが返る場合がある。Clientはそれらを構造化された発見結果としてKnown Spaceへ統合する。 \ No newline at end of file diff --git a/2.2-operation.md b/2.2-operation.md new file mode 100644 index 0000000..6d09095 --- /dev/null +++ b/2.2-operation.md @@ -0,0 +1,47 @@ +# 2.2. Operation + +## 2.2.1 目的 + +Operationは、Objectが外部へ公開する意味的な操作を表す。WIPではドメインデータをpropertiesとして常時露出するのではなく、読み取り・検索・更新を含む行為をOperationとして公開する。 + +## 2.2.2 基本形 + +Operationは少なくとも次の情報を持つ。 + +- `name` — Operationを識別する名前。 +- `description` — 何を行う操作かを説明する短い自然言語。 +- `input` — 呼び出し時に受け取る入力の型。 +- `output` — 呼び出し結果の型。 +- `guard` — 必要に応じて公開される実行条件・precondition。 + +Operation名や型だけに意味を担わせず、`description`をinterface metadataの一部として扱う。長文documentationを埋め込むことは想定しない。 + +## 2.2.3 入出力型 + +Operationのinput / outputは、Wire Protocol上で機械的に検証・解釈できる構造化された型として定義する。 + +ただしWIPは任意のドメインデータをObjectのpropertiesとしてモデル化するものではない。ここでの型はOperation境界の値を記述するためのものである。 + +具体的な型システム、primitive type、record / list / optional / union、ObjectやLinkを結果として返す場合の表現はこのページで定める。 + +## 2.2.4 可視性 + +Hostは、主体の権限やrole / capabilityに基づいて、その主体へ公開するOperation集合を決定してよい。 + +Operationの可視性は、頻繁に変化する実行可否やdomain stateを表すものではなく、**その主体に対してどのinterfaceを公開するか**というprojectionとして扱う。 + +例えばread-only主体には読み取り系Operationのみを公開し、maintainerやadminには追加の更新・管理Operationを公開できる。 + +WIPはOperationの`available` / `disabled`のような揮発的状態をinterface metadataとして同期することを前提としない。現在の実行可否やpreconditionは、必要に応じてdomain固有のOperationで観測し、最終的なauthorizationや実行条件は`call_operation`時にHostが検証する。 + +## 2.2.5 Guard + +Guardを設ける場合は、現在時点のavailabilityを同期する仕組みではなく、Operationに一般的に課されるpreconditionやconstraintを説明するsemantic metadataとして扱う。 + +Guardの具体的schemaは未解決事項として管理する。 + +## 2.2.6 Operation Result + +Operationの結果には通常の値だけでなく、新しいObject / エントリやLinkの発見が含まれ得る。 + +ClientがそれらをKnown Spaceへ統合できるよう、発見されたWorldspace要素は構造化された結果として表現する。 \ No newline at end of file diff --git a/3-core-protocol.md b/3-core-protocol.md new file mode 100644 index 0000000..85bf660 --- /dev/null +++ b/3-core-protocol.md @@ -0,0 +1,63 @@ +# 3. Core Protocol + +WIP Core Protocolは、ClientとHostの間でWorldspaceを観測・操作するための**transport-independentな意味論**を定義する。 + +## 3.1 役割 + +WIP上の主要な登場主体は**Client**と**Host**である。 + +### Client + +ClientはHostが提供するWorldspaceをユーザーまたはAIへ提示する。 + +Hostから取得したエントリを既知の空間として保持・キャッシュし、`ref`によるObject同一性の追跡や、観測時と操作時の対応関係の検証を行う。 + +GUI、AI用Tools、PTC / REPL向けAPIなどへの投影はClient実装の責務とする。 + +### Host + +HostはClientに対して一つのWorldspaceを提供する。 + +どのObject、エントリ、Operation、Guard、可視性を公開するかを決定し、そのClientから見えるWorldspaceを構成する。 + +Host内部でGitHub API、Database、Filesystem、RAG、他Agent、別プロトコルなどをどう接続・集約するかはWIPの規定対象外とする。 + +## 3.2 規定範囲 + +Core Protocolが規定するのは、ClientがHostからWorldspaceを観測し、操作するための契約である。 + +特定のデータソース構成、内部RPC、永続化方式、Adapter構成、同期方式は規定しない。 + +ClientとHostの境界は通信境界であると同時に、ある主体へどのWorldspaceを公開するかを決める信頼境界として扱える。 + +## 3.3 基本操作 + +現時点では次の3操作をCore Protocolの基本とする。 + +- `fetch(entry)` — 1つのエントリにあるObjectの公開情報を取得する。 +- `fetch_tree(entry, depth, limit)` — 指定エントリを起点に、indexableな子エントリを幅優先探索してエントリツリーとして取得する。 +- `call_operation(target, operation, input)` — Objectが公開するOperationを実行する。 + +## 3.4 `fetch_tree` + +`fetch_tree`は、Clientが機械的探索のために多数の`fetch`を連打することを避けるための操作である。 + +探索対象はindexableな子エントリのみとし、幅優先探索(BFS)で辿る。Clientは探索深度`depth`と返却エントリ総数の上限`limit`を指定できる。 + +探索が`depth`または`limit`によって途中で終了した場合、レスポンスは`truncated`であることを必ず明示する。Clientは取得結果を完全なツリーと誤認してはならない。 + +件数が非常に多いCollectionの個々の要素は、通常indexableな子エントリとして自然露出させない。必要な要素はCollection Objectの`query`や`list`等のOperationによって発見する。 + +## 3.5 Operation実行と発見 + +`call_operation`の結果は単なる値に限らない。新しいエントリ、エントリツリー、Linkなどを返し得る。 + +ClientはOperation結果として発見したエントリを既知の空間へ統合し、そこからさらにWorldspaceを探索できる。 + +## 3.6 Transportとの分離 + +Core ProtocolはHTTP、TCP、WebSocketなど特定のtransportを要求しない。 + +通信方式への具体的な対応付けはTransport Bindingとして別に定義する。標準bindingは`WIP over HTTPS`で扱う。 + +この分離により、Worldspaceの意味論と通信方式を独立して進化させる。 \ No newline at end of file diff --git a/4-client.md b/4-client.md new file mode 100644 index 0000000..1b2f1b5 --- /dev/null +++ b/4-client.md @@ -0,0 +1,61 @@ +# 4. クライアント + +## 役割 + +Clientは、Hostが提供するWorldspaceをユーザーへ提示する実装主体である。WIPのCore Protocolを直接利用しつつ、用途に応じたViewやAPIへ投影する。 + +ClientはHostから得た情報をそのまま一時表示するだけでなく、これまでに発見したエントリを保持し、ユーザーから見た**既知の空間**を構成する。 + +## Known Space + +Clientは、これまでに発見したエントリをKnown Spaceとして保持・キャッシュしてよい。 + +Known Spaceには、次のような経路で得られたエントリが含まれる。 + +- `fetch`または`fetch_tree`で取得したエントリ +- Operationの結果として返されたエントリまたはエントリツリー +- Operation結果に含まれるLinkから発見したエントリ + +既知エントリ間の移動や参照はClient側で処理できる。既知の空間を辿るたびにHostへ問い合わせる必要はない。 + +## Discoverable Space + +Clientは、Hostから`fetch_tree`で取得したindexableなエントリツリーをDiscoverable Spaceとして保持してよい。 + +Discoverable SpaceはKnown Spaceの部分集合であり、AI向け`discover`などの機械的探索に利用する。 + +OperationやLinkを通して偶発的に発見されたエントリはKnown Spaceには追加されるが、それだけではDiscoverable Spaceには追加しない。そのエントリを起点として`fetch_tree`を取得した場合に、そのindexableな範囲をDiscoverable Spaceへ追加できる。 + +## Tree取得 + +Clientは、機械的にエントリを探索する必要がある場合、個別の`fetch`を多数発行するのではなく`fetch_tree`を利用する。 + +`fetch_tree`では起点エントリ、探索深度`depth`、返却エントリ総数の上限`limit`を指定する。Hostはindex edgeを幅優先探索してTreeを返す。 + +レスポンスが`truncated`である場合、Clientは取得したTreeが完全ではないことを保持し、完全な空間として扱ってはならない。 + +件数の非常に多いCollectionの個々の要素は、通常indexableな子エントリとして露出しない。個別要素はCollection Objectの`query`や`list`等のOperationを通して発見することを想定する。 + +## Objectの同一性 + +Objectが`ref`を公開している場合、Clientはそれを用いて複数のエントリや複数回の観測が同一Objectを指していることを追跡できる。 + +`ref`はHost内部のIDそのものとは限らず、WIP上でObjectを再参照するための外部Handleとして扱う。 + +## 観測整合性 + +Clientは、エントリを観測した後にOperationを実行するまでの間に、そのエントリが別Objectを指すようになっていないことを検証する責務を持つ。 + +この検証に必要なopaque token、generation、ETag等はClient / Host間で透過的に扱い、AIやユーザーに直接管理させる必要はない。 + +対象が変化していた場合、Clientは新しいObjectに対してOperationを自動再試行せず、対象が変化したことを上位インターフェースへ通知して再観測を要求する。 + +## 想定実装 + +Clientは用途に応じて複数の上位インターフェースを提供できる。 + +- GUI上のWorldspace View +- AI向けTools +- PTC / REPL向けスクリプティングAPI + +これらは同一のKnown Space、Discoverable Space、Object identity、観測整合性管理を共有してよい。 \ No newline at end of file diff --git a/4.1-ai-tools-example.md b/4.1-ai-tools-example.md new file mode 100644 index 0000000..cc8c9c2 --- /dev/null +++ b/4.1-ai-tools-example.md @@ -0,0 +1,58 @@ +# 4.1. 例:AI用Tools + +## 目的 + +AI用Toolsは、WIP ClientがAIへ提供する想定インターフェースである。Core Protocolをそのまま露出せず、Clientが保持するKnown Space / Discoverable Spaceと組み合わせて、AIがWorldspaceを理解・探索・操作しやすい形へ投影する。 + +現時点では、**discover / inspect / invoke** の3操作を基本とする。 + +## `discover` + +`discover(scope, query)` は、Clientが保持するDiscoverable Spaceから目的に関連するエントリを探す。 + +検索対象は、Hostから`fetch_tree`によって取得されたindexableなエントリ公開情報に限定する。OperationやLinkによって新たに発見されたエントリはKnown Spaceには追加されるが、それだけでは`discover`の検索対象にはならない。 + +`discover`はドメインデータを検索する操作ではない。Issue本文やRAG corpusなどを検索する場合は、その能力を持つObjectのOperationを`invoke`する。 + +## `inspect` + +`inspect(target)` は、対象エントリ / Objectについて**何ができるか**を把握するための操作である。 + +Objectのドメインデータをpropertiesとして直接公開することは前提としない。データを読む行為もOperationとして表現する。 + +例えばIssueでは、次のような操作が示され得る。 + +- `read_body()` — 本文を読む。 +- `get_metadata()` — 期日、担当者、ラベル、関連ObjectへのLinkなどを取得する。 +- `close(reason: string)` — 理由を添えてIssueをクローズする。 + +Operationはシグネチャだけでなく、AIが用途を判断できる短いdescriptionを持つ。長文ドキュメントを埋め込むことは想定しない。 + +## `invoke` + +`invoke(target, operation, input)` は、`inspect`によって発見したOperationを実行する。 + +PTC / REPL bindingでは、通常のメソッド呼び出しへ投影してよい。 + +```python +issue.close(reason="duplicate") +``` + +ClientはエントリをObjectへ解決し、WIPの`call_operation`を利用して実行する。Object同一性やエントリとObjectの観測整合性はClient側で処理し、AI自身に追跡させない。 + +## エントリの発見 + +AIが新しいエントリを知る経路は複数ある。 + +- `discover`によってDiscoverable Spaceから見つける。 +- Known Space上の既知エントリを辿る。 +- Operationの結果としてエントリまたはエントリツリーを受け取る。 +- Operation結果に含まれるLinkから別エントリを知る。 + +新たに発見されたエントリの保持、Treeへの統合、indexableな範囲の管理はClientの責務とし、このページではAI向けToolの意味論だけを扱う。 + +## ドメイン検索 + +全文検索、semantic retrieval、外部API検索などはWIP固有のToolにはしない。 + +検索能力を持つObjectが`query`や`search`などのOperationを公開し、AIはそれを`invoke`する。結果としてエントリやエントリツリーが返された場合、それらはClientを通して新たなKnown Spaceとして利用可能になる。 \ No newline at end of file diff --git a/draft/unresolved-issues.md b/draft/unresolved-issues.md new file mode 100644 index 0000000..d75f00d --- /dev/null +++ b/draft/unresolved-issues.md @@ -0,0 +1,24 @@ +# 未解決事項 + +各設計ページに未解決事項を分散させず、このページで対象ページとともに一元管理する。 + +## 2.1. Object tree / Schema + +対象: [2.1. Object tree / Schema](../2.1-object-tree-schema.md) + +- Object / エントリ公開情報の具体的なwire schema。 +- `name`とpath segmentの関係。 +- `description`の長さや必須性をprotocol上でどこまで規定するか。 +- Linkの標準表現。 +- Operation Result内でエントリ / エントリツリー / Linkをどう統一的に表現するか。 + +## 2.2. Operation + +対象: [2.2. Operation](../2.2-operation.md) + +- input / outputに使う型システム。 +- `description`の必須性と長さ。 +- optional / union / enum / record等の表現。 +- Object / Linkを値として返す場合の標準表現。 +- Guardの具体的schema。 +- error型をOperation outputに含めるか、Protocol errorとして分離するか。 \ No newline at end of file diff --git a/draft/wip-over-https.md b/draft/wip-over-https.md new file mode 100644 index 0000000..d7f07d2 --- /dev/null +++ b/draft/wip-over-https.md @@ -0,0 +1,29 @@ +# WIP over HTTPS + +WIP over HTTPSは、**WIP Core ProtocolをHTTPS上へ対応付ける標準Transport Binding**である。 + +## 目的 + +Core Protocolの意味論を変えずに、既存のWebインフラを利用してClientとHostを接続する。 + +## 方針 + +標準bindingとしてHTTPSを採用することを第一候補とする。 + +HTTPSを利用することで、TLS、認証、Proxy、Gateway、Observability、Caching、Streamingなど既存の仕組みを再利用できる。 + +必要に応じてHTTP/2、HTTP/3、SSE、WebSocket等を利用してよい。ただし、これらは通信上の最適化または補助機構であり、WIP Core Protocolの意味論を変更しない。 + +## Binding対象 + +少なくとも、Core Protocolの以下の操作をHTTP request / responseへ対応付ける。 + +- `fetch` +- `fetch_tree` +- `call_operation` + +具体的なHTTP method、endpoint、content type、error mapping、認証方式、streaming表現などは、このbinding仕様側で定義する。 + +## 非目標 + +WIP over HTTPSはHost内部のAPIやデータソース接続方式を規定しない。また、WIP Core ProtocolそのものをHTTP依存のモデルへ変えることも目的としない。 \ No newline at end of file