SDK API リファレンス
agenticstar-platform SDK(v3.0.15)の全モジュール・クラス・メソッドの完全仕様です。
インストール
pip を使用して SDK をインストールしてください。
pip install agenticstar-platform==3.0.15
extras を指定しない基本インストールの依存は httpx / pydantic / pyyaml です(pyyaml>=6.0 は v1.0.1+ で追加)。ベースイメージや他のパッケージで PyYAML の版を固定している場合は、6.0 以上であることを確認してください。
特定モジュールのみインストールする場合は、extras を指定してください。
| Extra | 説明 |
|---|---|
[[db]] | PostgreSQL database support |
[[rag]] | RAG (embedding + vector search) support |
[[storage]] | Cloud storage (Azure, S3, GCS) support |
[[security]] | Security (content moderation, PII detection) support |
[[auth]] | AGENTIC STAR Auth service integration |
[[memory]] | Semantic Memory (Mem0 + Qdrant) support |
[[all]] | 全モジュール |
# RAG モジュール
pip install agenticstar-platform[rag]==3.0.15
# DB + RAG + Storage
pip install agenticstar-platform[db,rag,storage]==3.0.15
# Storage(provider 別、v0.5.28+)
pip install agenticstar-platform[storage-aws]==3.0.15
# 全モジュール
pip install agenticstar-platform[all]==3.0.15
モジュール一覧
SDK は以下の 13 のモジュールで構成されています。
| モジュール | 説明 | 主要クラス |
|---|---|---|
| events | 非同期イベント配信システム(SSE / Webhook / DB) | EventEmitter, StreamingEvent |
| db | PostgreSQL 接続 + Azure AD 認証。サイクル型の実行の完遂報告(v3.0.14+) | PostgreSQLManager, DataAccess, report_completion |
| rag | RAG(embedding + vector search via Qdrant) | EmbeddingGenerator, QdrantManager |
| storage | クラウドストレージ(Azure, S3, GCS。provider 別 extra: storage-azure / storage-aws / storage-gcp) | AzureBlobStorageClient, S3StorageClient |
| auth | AGENTIC STAR 認証 API クライアント | AgenticStarAuthClient |
| memory | セマンティックメモリ(Mem0 + Qdrant) | SemanticMemoryClient |
| security | コンテンツモデレーション + PII 検出 | AzureSecurityClient, ContentSafetyValidator |
| common | 共通ユーティリティ(シークレットマスク) | SecretMasker |
| metering | LLM 利用量・コスト計測(台帳記録 + 日次集計, v0.5.15+) | UsageMeter |
| runner | Marketplace 互換の実行ライフサイクル(identity 検証 → 入力取得 → 実行 → 結果保存/Webhook → terminal 正確に 1 回 → cleanup, v0.5.30+) | run_marketplace_agent |
| audit | 行為監査台帳(承認・ツール認可・ポリシー違反等の append-only 記録。本文は digest 化して渡す設計, v0.5.31+。alerts writer は v0.5.32+) | ActionAudit, GatewayActionAudit, GuardrailAlertWriter, GuardrailAlertAggregates |
| workflow | プロジェクトのワークフローの工程で動くエージェントの runner(mp-workflow/1。マーケットプレイス版 3.1 以降, v1.0.1+) | run, WorkflowContext, AuditApi |
| policy | tool 呼び出しの統制ポリシー(2 層を合成して allow / forbid を判定する純計算, v1.0.0+) | tighten_merge, evaluate, EffectivePolicy |
events イベントモジュール
非同期イベント配信システム。EventEmitter でイベントを発行し、SSE / Webhook / DB に配信します。
列挙型
EventType
フロントエンド UI に表示されるイベントタイプ。各メンバーをどう実装すれば表示されるかはイベント / ストリーミングガイドの実装ガイドを参照してください。
SubEventType
イベントを細分化するサブイベントタイプ。sub_event_type だけでは表示は変わりません。表示の出し分けは metadata.actionType で指定してください。
データクラス
StreamingEvent
リアルタイム SSE 配信用のイベントデータ。
SequencedEvent
順序保証付きイベント。
ExecutionMessage
マーケットプレイス UI 統合用のデータベース格納メッセージ。
クラス
EventEmitter
非同期イベントキュー。イベント発行・消費を非ブロッキングで実行。
from agenticstar_platform import EventEmitter, EventType
emitter = EventEmitter(execution_id="exec-abc-123")
# イベント発行
await emitter.emit_event(
event_type=EventType.PHASE_START,
message="ドキュメント分析を開始します",
metadata={"phase": "analysis", "total_pages": 42}
)
# イベント消費(SSE ストリーミング)
async for chunk in emitter.consume_events():
print(chunk)
DatabaseEventHandler
PostgreSQL の execution_messages テーブルにイベントを永続化。
WebhookEventHandler
HTTP webhook エンドポイントにイベントを送信。
CompositeEventHandler
複数の EventHandler を並列実行。
ファクトリ関数
SSE (Server-Sent Events) 形式のハンドラーを作成。
JSON 形式のハンドラーを作成。
マーケットプレイス UI 用の複合ハンドラー(DB + Webhook)を作成。
プロトコル
EventHandler
イベント処理の汎用インターフェース。
ストレージモジュール — イベントログのクラウドストレージへのアーカイブ
db データベースモジュール
PostgreSQL 接続プール + Azure AD 認証。
設定
AzureADConfig
Azure Active Directory 認証設定。
PostgreSQLConfig
PostgreSQL 接続設定(Azure AD サポート)。
TOML 設定例:
[database]
provider = "postgresql"
host = "db.example.com"
port = 5432
database = "agenticstar_db"
use_azure_ad = true
pool_min_size = 5
pool_max_size = 20
command_timeout = 60
[azure_ad]
tenant_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
client_id = "yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"
client_secret = "your-secret-here"
username = "dbuser@example.onmicrosoft.com"
接続管理
PostgreSQLManager
非同期 PostgreSQL 接続プール(Azure AD トークン管理対応)。
async with PostgreSQLManager(config) as mgr:from agenticstar_platform.db import PostgreSQLConfig, PostgreSQLManager
config = PostgreSQLConfig.from_toml("config.toml")
async with PostgreSQLManager(config) as mgr:
await mgr.initialize()
# SELECT クエリ
result = await mgr.fetch_all(
"SELECT * FROM conversations WHERE user_id = $1",
("user-123",)
)
# INSERT
await mgr.execute(
"INSERT INTO events (event_type, data) VALUES ($1, $2)",
("phase_start", '{}')
)
データアクセス層
DataAccess
SQL インジェクション防止を備えた汎用テーブル操作ラッパー。
主要メソッドの使用例:
ConfigAccess
エージェント・ツール・ガードレール・MCP などの設定情報へのアクセス層。
get_mcp_configurations() は有効な MCP サーバー設定を {"success": True, "data": [...]} で返します。data の各要素は id / name / server_url / cache_tools_list / headers / only_pod / use_oauth / oauth_service / transport_type を持ちます。id(MCP サーバー設定の ID)は v3.0.2+ で追加されました。name は管理画面で自由に付けられる表示名なので、接続を識別・照合するときは id を使ってください。
get_banned_urls() は管理画面で登録された「禁止 URL」一覧を取得します。基本機能(ExtAuth Service)はドメイン単位の制限ですが、本メソッドで取得したパターンをエージェントのツール内で re.search 等により URL 文字列に照合することで、URL(パス)単位の制限を拡張機能として実装できます。設定は管理画面で一元管理されるため、運用上の重複は発生しません。
ExecutionAccess
実行メッセージの取得層。
TelemetryAccess
NIST 監査テレメトリの保存・取得層。
PodRuntime
Pod ライフサイクル管理(開始通知・終了通知・任意の自己スケールダウン)。
scale_down_callback は Pod 終了時に呼び出される自己スケールダウンハンドラ(async def (execution_id: str) -> None)。未指定の場合、final() は状態更新のみを行い、自己スケールダウンは実行しない。Pod を自身で終了(この実行の SandboxClaim を削除するなど)させたい場合に注入する。
ApiPostgreSQLManager
HTTP API プロキシ経由の PostgreSQL アクセス(CLI モード用)。PostgreSQLManager と同一の非同期インターフェースを持つ。
v3.0.15+ — クエリのパラメータに型(date / datetime)の添字を付けて送るので、TEXT 列に渡す "2026-10-09" のような文字列がプロキシ側で日付型に変わらなくなった。date / datetime の値は従来どおり日付型のまま届く。対応する cli-api(Marketplace 3.1 以降)より前の環境では従来どおり文字列の形から推定する。
ファクトリ関数
config.api_url の有無に応じて PostgreSQLManager(直接接続)または ApiPostgreSQLManager(API プロキシ)を自動選択して返す。
サイクル型の実行の完遂報告
v3.0.14+ — サイクル型の実行(execution_data.runtime_protocol = mp-chat/1。プラットフォームが予定で起動する会話)で、エージェントが目的を果たしたかを報告します。報告が無い実行は、exit 0 で終わっても「実行終了(完遂は未計測)」(outcome なし・runner_exited)として記録され、成功にも失敗にも数えられません。プロセスの正常終了をプラットフォームが完遂と読み替えることはありません。書き方の例は クイックスタート を参照してください。
| 引数 | 説明 |
|---|---|
outcome | completed / incomplete / failed / timeout / stopped / denied / skipped のいずれか。それ以外は ValueError |
reason | 理由コード(outcome_reason_code)。小文字の snake_case で 32 文字まで(^[a-z][a-z0-9_]{0,31}$。- と空白は _ に、大文字は小文字に直します)。省略時と、合わない値(文章・例外の文字列など)のときは outcome と同じ値になり、警告をログに出します。自由な文は summary に入れてください |
had_mutating_success | 外部への書き込みの成功があったか(True / False。分からなければ None)。報告の行に残ります(現在のプラットフォームは実行の結果に outcome と理由コードだけを使います) |
summary | 人が読む補足(任意) |
from agenticstar_platform import report_completion(agenticstar_platform.dbからも import できます)。[db]extra(asyncpg)が必要です- 戻り値は、報告を書いたら
True、書かなかったらFalseです - 報告は任意です。報告しないエージェントは従来どおり未計測のままで、挙動は変わりません
- 報告は 1 回です。同じ実行に報告が既にあれば書かずに警告をログに出し、
Falseを返します(最初の報告が残ります)。同時に呼ばれても書かれるのは 1 行だけです - DB の失敗でエージェントの処理を失敗させません。書き込みに失敗したら(接続を 30 秒待っても取れない場合を含む)警告をログに出して
Falseを返し、その実行は未計測のままになります。例外を送出するのはoutcomeが語彙外のときだけです。なお、commit の応答だけを失った場合は、保存されていてもFalseになることがあります - プラットフォームが報告を採用するのは、コンテナが exit 0 で終わったのを確かめたときだけです。それ以外で実行を閉じた場合(非 0 の終了・Pod の消失 = 効果不明の失敗、取消 =
stopped/cancelled、agent の実行中に期限を過ぎた =timeout/execution_timeout)は、報告は使われません。run_marketplace_agentは agent の例外でもプロセスを exit 0 で終えるため、報告済みならその報告が採用されます - 報告は
execution_messagesの 1 行です(content_data.kind=sdk.runner.completion。開始済みの印と同じCONVERSATION_ID/MESSAGE_IDで対応付けます)。DDL はありません。サイクル型のエージェントには runtime API が渡らないため、DB 直結で書きます - 通常の会話(チャット)の実行で呼んでも結果は変わりません(報告は読まれません)。管理画面のダッシュボードでは、開始済みの印と同じく実行の 1 チャンクとして数えられます
エラー処理
データベース操作の例外処理。
from agenticstar_platform.db import PostgreSQLConfig, PostgreSQLManager, DataAccess
config = PostgreSQLConfig.from_toml("config.toml")
try:
db_manager = PostgreSQLManager(config)
da = DataAccess(db_manager)
await da.initialize()
result = await da.select("users", where={"id": "user-123"})
if result["success"] and result["data"]:
print(f"User: {result['data'][0]['username']}")
except Exception as e:
print(f"Database error: {e}")
finally:
await da.close()
RAG モジュール — DB から取得したデータを Embedding 化して検索可能にする
rag RAG モジュール
RAG (Retrieval-Augmented Generation): Embedding + Vector Search via Qdrant。
列挙型
VectorStoreProvider
RAG で使用するベクトルストアプロバイダー種別。
例外
データクラス
SearchResult
単一の検索結果。
UpsertResult
Upsert 操作の結果。
SearchResponse
検索操作の結果。
エンベッディング設定
EmbeddingConfig
Azure OpenAI / OpenAI 互換エンドポイントのエンベッディング設定。
provider = "openai"(v0.5.24+)で Azure AI inference の embed-v-4-0 等の OpenAI 互換エンドポイントに接続できます(base_url は /models まで含めて指定、api_version は未使用)。model に LiteLLM 形式のプレフィックス(azure/... / openai/...)を付けた場合は provider が自動導出され、プレフィックスはデプロイメント名から除去されます。
EmbeddingGenerator
キャッシング機能とリトライロジック付きエンベッディング生成。
ベクトルデータベース
QdrantConfig
Qdrant データベース設定。
PayloadIndexConfig
Payload フィールドのインデックス設定。
TOML 設定例:
[embedding]
provider = "openai"
model = "text-embedding-3-small"
api_key = "sk-..."
dimension = 1536
[qdrant]
host = "qdrant.example.com"
port = 6333
api_key = "your-qdrant-key"
use_ssl = true
VectorStoreClientBase
ベクトルストアクライアントの抽象基底クラス(abc.ABC)。
基底契約の upsert(point_id, text, payload) は具象実装 QdrantManager.upsert(id, content, metadata) と引数名が異なります。
VectorStoreClientProtocol
ベクトルストアクライアントのプロトコル(typing.Protocol、@runtime_checkable)。
QdrantManager
Qdrant ベクトル検索クライアント。
async with QdrantManager(config, generator) as qdrant:from agenticstar_platform.rag import (
EmbeddingConfig, EmbeddingGenerator,
QdrantConfig, QdrantManager
)
emb_config = EmbeddingConfig.from_toml("config.toml")
qd_config = QdrantConfig.from_toml("config.toml")
generator = EmbeddingGenerator(emb_config)
async with QdrantManager(qd_config, generator) as qdrant:
# ドキュメントの追加
await qdrant.upsert(
id="doc-001",
content="AGENTIC STAR は AI エージェント開発プラットフォームです",
metadata={"source": "docs", "category": "overview"}
)
# セマンティック検索
results = await qdrant.search(
query_text="AI プラットフォームとは?",
limit=5,
score_threshold=0.5
)
for r in results["data"]:
print(f"Score: {r['score']}, Text: {r['payload']['text']}")
ストレージモジュール — ドキュメントファイルをストレージから取得して Embedding 化
セキュリティモジュール — Embedding 前にコンテンツの安全性を検証
storage ストレージモジュール
クラウドストレージ統合(Azure Blob Storage / AWS S3 / Google Cloud Storage)。
列挙型
StorageProvider
Cloud storage provider type.
例外
結果型
UploadResult
File upload result.
DownloadResult
File download result.
ObjectInfo
Cloud object metadata.
ListResult
List operation result.
設定
StorageConfig
Common storage configuration (base class).
AzureBlobConfig
Azure Blob Storage configuration.
S3Config
AWS S3 configuration.
GCSConfig
Google Cloud Storage configuration.
ストレージクライアント
AzureBlobStorageClient
Azure Blob Storage client. Supports async context manager (async with).
S3StorageClient
AWS S3 storage client. Supports async context manager (async with).
GCSStorageClient
Google Cloud Storage client. Supports async context manager (async with).
from agenticstar_platform.storage import (
S3Config, S3StorageClient
)
config = S3Config.from_dict({
"bucket_name": "my-bucket",
"aws_access_key_id": "AKIA...",
"aws_secret_access_key": "secret...",
"region_name": "ap-northeast-1"
})
# async with によるコンテキストマネージャー
async with S3StorageClient(config) as storage:
# ファイルアップロード
upload_result = await storage.upload_file(
file_path="/tmp/report.pdf",
object_name="report.pdf",
prefix="documents/",
metadata={"source": "documents"}
)
if upload_result.success:
print(f"URL: {upload_result.object_url}")
# オブジェクト一覧
list_result = await storage.list_objects(prefix="documents/")
for obj in list_result.objects:
print(f"{obj.name} ({obj.size} bytes)")
# ダウンロード
download = await storage.download_file(
object_name="documents/report.pdf",
download_path="/tmp/downloaded.pdf"
)
from agenticstar_platform.storage import (
StorageError, StorageConfigError,
StorageConnectionError, StorageOperationError
)
try:
result = await storage.upload_file("/tmp/large-file.zip")
except StorageConnectionError as e:
print(f"Connection failed: {e}")
except StorageOperationError as e:
print(f"Operation failed: {e}, code: {e.error_code}")
except StorageError as e:
print(f"Storage error: {e}")
auth 認証モジュール
AGENTIC STAR 認証サービス統合。ユーザー・トークン・デバイス情報を管理。
例外
設定
AgenticStarAuthConfig
AGENTIC STAR 認証 API クライアントの接続設定。
データモデル
ApiUser
認証ユーザー情報(Pydantic BaseModel)。
DeviceInfo
デバイス情報。
MCPTokenInfo
MCP トークン情報。expires_at は None が「期限なし」を表します(個人トークン (PAT) の provider ではトークン供給 API が期限を返さないため。v0.5.34+)。
UserPagination
ページネーション情報(get_users() の戻り値 pagination)。
LoginHistoryEntry
ログイン履歴エントリ(get_user() の戻り値 login_history の要素)。
MCPTokenError
MCP トークン取得エラー(get_mcp_tokens() の戻り値 errors の値)。code は CONNECTION_NOT_FOUND / TOKEN_EXPIRED / REFRESH_FAILED など。
OAuthProviderName
OAuth プロバイダー名を表す型エイリアス。値は DB の oauth_providers.service に対応し、get_mcp_tokens(providers=[...]) に渡す識別子および tokens / errors 辞書のキーとして使用される(例: github、slack)。
OAuthProviderName = str
クライアント
AgenticStarAuthClient
AGENTIC STAR 認証 API の HTTP クライアント。
get_user() は user_id を URL のパス要素 1 つとしてエンコードして送ります(/ や ? を含む値でも別の API パスに届きません。v3.0.5+)。空文字と . / ..(v3.0.5+)は要求を送らずに success=False、error_code="INVALID_PARAMETER" を返します。
get_mcp_tokens() の rejected_token_sha256(v3.0.10+)は、MCP サーバーに 401 で拒否されたアクセストークンの SHA-256(トークン文字列を UTF-8 で。16 進の小文字 64 桁)を provider ごとに渡します。保存中のトークンがまだそのトークンなら、期限前でも取り直します。既に別のトークンに替わっていれば新しい方を返します。個人トークン(PAT)・refresh できない接続・発行から 1 分未満のトークンは取り直しません(保存中のトークンを返します)。トークンそのものは渡さないでください。対応していない認証サービスでは無視されます。
from agenticstar_platform.auth import (
AgenticStarAuthConfig, AgenticStarAuthClient
)
config = AgenticStarAuthConfig.from_config("config.toml")
async with AgenticStarAuthClient(config) as auth_client:
# ユーザー情報取得
result = await auth_client.get_user("user-123")
if result.success:
print(f"User: {result.user.username}")
# MCP トークン取得
tokens = await auth_client.get_mcp_tokens(
user_id="user-123",
providers=["slack", "gitlab"],
)
for provider, token in tokens.tokens.items():
print(f"{provider}: expires={token.expires_at}")
memory メモリモジュール
セマンティックメモリ(Mem0 + Qdrant)統合。ユーザーの知識・好み・事実をベクトル検索で想起。
設定
SemanticMemoryConfig
Mem0 + Qdrant によるセマンティックメモリの設定。
QdrantVectorStoreConfig
Qdrant Vector Store 設定を簡潔に組み立てるヘルパー dataclass。
SemanticMemoryClient
セマンティックメモリの追加・検索・削除クライアント(同期 API)。
例外
ユーティリティ関数
プロバイダー名を正規化(エイリアス対応。例: "Azure_OpenAI" → "azure")。
モデル文字列をプロバイダーとモデル名に分割(例: "azure_openai/gpt-4.1" → ("azure", "gpt-4.1"))。
LLMProviderConfig から API キーを取得(SecretStr 対応)。
LLMProviderConfig を Mem0 形式の LLM 設定辞書に変換。
LLMProviderConfig を Mem0 形式の Embedder 設定辞書に変換。openai プロバイダ(openai/... モデル)で base_url が設定されている場合は openai_base_url として引き渡します(v0.5.24+。embed-v-4-0 等の OpenAI 互換エンドポイント用。未設定時は公式 api.openai.com に接続されるため注意)。v0.5.35 以前は SemanticMemoryClient 内部の変換経路にこの引き渡しが適用されないバグがあり、v0.5.36 で修正されました。
from agenticstar_platform.memory import (
SemanticMemoryConfig, SemanticMemoryClient
)
config = SemanticMemoryConfig.from_toml("config.toml")
memory = SemanticMemoryClient(config)
# メモリ追加(同期メソッド)
memory.add(
messages=[
{"role": "user", "content": "私は Python が得意です"},
{"role": "assistant", "content": "承知しました"},
],
user_id="user-123",
)
# メモリ検索(同期メソッド)
result = memory.search(query="ユーザーの技術スキルは?", user_id="user-123")
for r in result.get("results", []):
print(f"{r['memory']}")
# クリーンアップ(非同期)
await memory.cleanup()
security セキュリティモジュール
Content Moderation(Azure / AWS / GCP)+ PII Detection。AWS の PII 検出は Bedrock Guardrails sensitiveInformationPolicy(多言語対応、日本語含む)または Amazon Comprehend(en/es)から選択可能(AWSSecurityConfig.pii_service)。
列挙型
SecurityProvider
セキュリティプロバイダー種別。
ContentCategory
コンテンツモデレーション分類。
PIICategory
PII(個人識別情報)分類。
例外
結果型
ContentModerationResult
コンテンツモデレーション結果。categories の値は severity(0-6)。
PromptShieldResult
プロンプトインジェクション検出結果。
user_prompt_attack / documents_attack は攻撃経路の内訳(v0.5.40+)。None は「未取得」(旧版・未評価)であり False(評価済み非検知)と区別されます。両方既知のとき attack_detected == (user_prompt_attack or documents_attack) が成り立ちます。
PIIEntity
検出された PII エンティティ。
PIIDetectionResult
PII 検出結果。
SecurityCheckResult
統合セキュリティチェック結果。
SanitizationResult
ContentSafetyValidator.validate_and_sanitize() のサニタイズ結果。marked_content は unsafe 判定時は空文字。
設定
AzureSecurityConfig
Azure Content Safety + Language Service 接続設定。
AWSSecurityConfig
AWS Bedrock Guardrails / Comprehend によるセキュリティ設定。
GCPSecurityConfig
GCP Model Armor + DLP によるセキュリティ設定。
GuardrailsConfig
ContentSafetyValidator のガードレール設定(マーケットプレイス顧客が管理 UI で設定する値を想定)。DB の guardrails_settings 辞書から from_dict() で生成できる。moderation_threshold は severity 0-6(0=無効, 2=推奨, 6=極度のみ)。
クライアント
SecurityClientBase
全セキュリティクライアント(Azure / AWS / GCP)の抽象基底クラス。enabled は設定の有効状態を反映し、provider はサブクラスで実装される抽象プロパティ(プロバイダー種別を返す)。
AzureSecurityClient
Azure Content Safety(コンテンツモデレーション)と Language Service(PII 検出)のクライアント。
AWSSecurityClient / GCPSecurityClient
Azure と同一のインターフェース(SecurityClientBase 継承)。check_content_moderation(), check_prompt_shield(), detect_pii(), check_security(), close() を実装。detect_pii_batch() は基底クラスの逐次デフォルト実装を継承(プロバイダ側バッチ最適化は Azure のみ、v0.5.23+)。
from agenticstar_platform.security import (
AzureSecurityConfig, AzureSecurityClient
)
config = AzureSecurityConfig(
content_safety_endpoint="https://your-cs.cognitiveservices.azure.com/",
content_safety_api_key="your-key",
)
async with AzureSecurityClient(config) as security:
# コンテンツモデレーション
moderation = await security.check_content_moderation(
text="This is a sample message",
threshold=2,
)
if moderation.blocked:
print(f"Content blocked: {moderation.categories}")
# 統合チェック
result = await security.check_security(
text="Contact me at user@example.com or 123-456-7890",
check_pii=True,
)
if not result.allowed:
print(f"Violations: {result.violations}")
if result.pii_detection and result.pii_detection.entities:
print(f"PII found: {result.pii_detection.masked_text}")
ContentSafetyValidator
外部から取得したコンテンツ(Web / MCP など)を SecurityClientProtocol 実装(AzureSecurityClient 等)で検証し、GuardrailsConfig に基づいてサニタイズ・マーキングするラッパー。validate_and_sanitize() は単一コンテンツ、validate_multiple() は複数コンテンツを一括処理する。mark_content() / unmark_content() はマーカー([EXT:...]...[/EXT])を付与・除去する静的メソッド。
ファクトリ関数
config JSON からプロバイダーを自動判別し、適切な SecurityClient を生成するモジュールレベル関数。
config JSON からセキュリティプロバイダー(Azure / AWS / GCP)を自動判別。判別できない場合は SecurityConfigError。
config JSON から対応する SecurityClient を生成。pii_config を渡すと content_safety と pii_language の設定を統合(Azure)。
Content Moderation / Prompt Shield 用のショートカット。create_security_client(config) に委譲。
PII 検出/マスク用のショートカット。Azure では Language Service エンドポイントとして設定。
ストレージモジュール — ファイルアップロード前の PII スクリーニング
イベントモジュール — モデレーション結果をイベントとして配信
common 共通モジュール
共通ユーティリティ。SQL インジェクション防止・シークレットマスク・非同期コンテキストマネージャーミックスイン。
SecretMasker
シークレット値(パスワード・トークン等)をキー名に基づいてマスクするユーティリティ。
単一文字列をマスクするショートカット関数。
from agenticstar_platform.common import SecretMasker, mask_secret
masker = SecretMasker()
safe = masker.mask_dict({
"username": "alice",
"password": "p@ssw0rd",
"api_key": "sk-12345",
})
# → {"username": "alice", "password": "***", "api_key": "***"}
mask_secret("my-secret-api-key-12345") # → "***"
mask_secret("my-secret-api-key-12345", visible_chars=4) # → "my-s***"
validate_identifier
テーブル名・カラム名など単一の識別子を検証するユーティリティ。SQL インジェクション対策として、英数字とアンダースコアのみを許可する。DataAccess 内部で自動的に使用されるが、カスタムクエリを構築する際にも直接使用できる。
identifier_type はエラーメッセージ用の識別子種別ラベルで、既定値は "identifier"。
validate_identifiers
識別子(カラム名・テーブル名等)のリストを一括で検証するユーティリティ。SQL インジェクション対策として、英数字とアンダースコアのみを許可する。
identifier_type は検証対象の種別を表し、既定値は "column"。単数版の validate_identifier(既定値 "identifier")とは既定値が異なる点に注意。
validate_order_by
ORDER BY 句を検証するユーティリティ。column_name ASC|DESC 形式のみ許可する。
from agenticstar_platform.common import validate_identifier, validate_order_by
table = validate_identifier("users") # OK: "users"
validate_identifier("users; DROP TABLE --") # → IdentifierValidationError
order = validate_order_by("created_at DESC") # OK: "created_at DESC"
AsyncContextManagerMixin
非同期コンテキストマネージャーのミックスインクラス。SDK 内部で async with パターンを統一的に実装するために使用。
IdentifierValidationError
validate_identifier / validate_order_by が不正な識別子に対して送出する例外。Exception を直接継承する。
エラーハンドリング
全モジュールで共通の例外処理パターンを使用します。各モジュールはモジュール固有の基底例外クラスを持ち、サブクラスで具体的なエラーを区別します。
例外階層一覧
共通パターン
全モジュールで「具体的な例外 → 基底例外 → Exception」の順にキャッチします。
from agenticstar_platform.storage import StorageError, StorageOperationError
from agenticstar_platform.auth import AuthError, AuthAPIError
from agenticstar_platform.security import SecurityError, SecurityAPIError
async def process_document(doc_id: str):
try:
# 1. DB からドキュメント取得
doc = await db.fetch_one(
"SELECT * FROM documents WHERE id = $1", (doc_id,)
)
# 2. セキュリティチェック
moderation = await security.check_content_moderation(doc["content"])
if moderation.blocked:
raise ValueError("Content policy violation")
# 3. Embedding 生成 + ベクトル DB に保存
await qdrant.upsert(
id=doc_id,
content=doc["content"],
metadata={"source": "documents"}
)
# 4. 処理結果をストレージに保存
await storage.upload_bytes(
data=doc["content"].encode(),
object_name=f"processed/{doc_id}.txt"
)
except StorageOperationError as e:
# ストレージ操作エラー → error_code で判断
logger.error(f"Storage op failed: {e.error_code}")
except AuthAPIError as e:
# 認証 API エラー → status_code で判断
logger.error(f"Auth failed: {e.status_code}")
except (StorageError, AuthError, SecurityError) as e:
# モジュール基底例外でフォールバック
logger.error(f"Module error: {type(e).__name__}: {e}")
except Exception as e:
# 予期しないエラー
logger.critical(f"Unexpected: {e}")
raise
metering 計測モジュール
v0.5.15+ — LLM の利用量・コストを計測する純インフラ。LLM 応答/トークンからコストを算出し、1 呼び出し = 1 行で llm_usage_ledger に記録、日次集計(llm_usage_daily)とコスト可視化クエリを提供します。エージェントロジック非依存で、自社ホスト・マーケットプレイス BYO で同一に使えます(プロセス内記録のためヘッダ伝播は不要)。
- コスト算出はプラガブル: 既定は litellm(
completion_cost/cost_per_token)を使用し、long-context / プロンプトキャッシュ / tier 価格を反映。litellm 非導入時はトークンのみ記録(cost_usd = NULL)。cost_fn=で任意エンジンに差し替え可。 - DB:
execute_query(query, params) -> {success, data, error}を持つハンドル(SDK のDataAccess/PostgreSQLManager)をそのまま渡せます。
UsageMeter
from agenticstar_platform.metering import UsageMeter
meter = UsageMeter(db=data_access) # cost_fn=, currency= は任意
await meter.ensure_schema() # 台帳/集計表/集計関数を冪等作成し、既存の台帳には新しい列を追加(migration で反映済みなら不要)
# 1 LLM 呼び出しを記録(コストは自動算出・記録失敗は握り潰し安全)
await meter.record(
model="gpt-5.5", response=resp, endpoint="chat/completions",
labels={"execution_id": eid, "message_id": mid, "conversation_id": cid, "user_id": uid},
)
# 呼び出しをラップして自動記録
resp = await meter.track(model="gpt-5.5", labels=ids)(litellm.acompletion)(**params)
# コストのみ(記録なし)
usd = UsageMeter.cost_usd("gpt-5.5", response=resp)
# 日次集計 + コスト可視化(ダッシュボード/請求)
await meter.rollup_recent()
rows = await meter.daily_cost(by="model", since_days=30) # by = "model" | "user" | "agent" | "day"
メソッド
| メソッド | 説明 |
|---|---|
UsageMeter(db, *, cost_fn=None, currency="USD") | DB ハンドルとコスト関数で初期化 |
UsageMeter.cost_usd(model, response=None, usage=None, cost_fn=None) | コスト(USD)のみ算出(static) |
await ensure_schema(*, with_rollup=True) | llm_usage_ledger / llm_usage_daily / rollup_llm_usage_daily() を冪等作成 |
await record(*, model, response=None, usage=None, endpoint=None, agent_type=None, level=None, labels=None, stream=False, success=True, request_id=None, cost_usd=None, missing_reason=None, fail_safe=True) | 1 行記録し算出コストを返す(missing_reason は usage 欠落時の理由。usage 取得行は NULL 保存。v0.5.21+) |
track(*, model=None, endpoint=None, labels=None, ...) | async LLM 呼び出しをラップして自動記録するデコレータ |
await rollup_recent() | 前日・当日を集計表へ反映(冪等) |
await daily_cost(*, by="model", since_days=30) | 集計表からコスト内訳を取得 |
default_cost_fn(model, response=None, usage=None) | モジュール関数。UsageMeter の既定コスト算出関数(cost_fn 未指定時に使用)。litellm 経由でコスト(USD)を算出、算出不可時は None |
extract_usage(usage) | モジュール関数。usage オブジェクト/dict から {"input_tokens", "output_tokens", "total_tokens"} を抽出(取得不可時は None)。prompt cache の内訳が取れたときは cache_read_tokens / cache_creation_tokens も返す(v3.0.0+。取れなければキー自体を返さない) |
round_cost_usd(v) | モジュール関数。コスト(USD) を Decimal(小数点以下8桁)へ整形するユーティリティ |
llm_usage_ledger の既定 DDL は可搬(任意の PostgreSQL)。各行は usage_status(present/missing)と missing_reason(欠落理由・v0.5.21+)を持ち、cost_usd IS NULL(価格未マップ)・usage_status='missing'・true-zero を区別できます。v3.0.0+ は prompt cache の読出し / 書込みを cache_read_tokens / cache_creation_tokens(どちらも NULL 可)に分けて記録します(cached_tokens は従来どおり)。読出しと書込みは単価が大きく違うため、合算では「書いているのに読めていない」劣化を検知できません。明示した内訳値は 0 を含めて優先され、未指定なら従来の cached_tokens(読出し)と cache_creation_input_tokens(書込み)を使います。cached_tokens に合算値を渡している場合は内訳を明示してください。日次集計表と集計関数は変わらず、内訳は台帳から集計します。v3.0.0 の record() はこの 2 列を前提に書き込むため、書き込みを始める前に ensure_schema() または migration(同じ ADD COLUMN IF NOT EXISTS)で列を追加し、列の実在と、更新後に台帳へ行が保存されていることを確認してください(DB 側の失敗が例外として通知されない場合があります)。大規模では月次パーティション化(pg_partman 等)を推奨します。
audit 行為監査モジュール
v0.5.31+ — エージェント実行系の行為イベント(承認/却下、ツール認可、ポリシー違反、キルスイッチ、外部エージェント呼び出し等)を append-only 台帳(agent_action_audit / llm_gateway_action_audit)へ記録する純インフラ。利用量・コスト(metering)とは書き込み保証で区別された証跡です。追加依存なし(標準ライブラリのみ・core に同梱)。
- 本文は渡さない(使用契約): プロンプト・ツール引数等の生値は台帳へ渡さず、
canonical_digest()(SHA-256)で片方向化してpayload_digestへ。SDK は機密の自動検出・redaction は行いません。フィールド上限(reason300 字截断 /payload_digestは 64 桁の小文字 hex 以外を破棄 /metadataはキー順正規化 JSON が 2KB 超で本体破棄 = digest + サイズのみ、常に deep-copy 正規化)は誤混入時の被害量を制限するガードであり、それ自体が漏洩防止ではありません。 - 書き込みモードは 3 種:
record()= プロセス生存中 at-least-once(bounded retry → 失敗時はaction_audit_spillマーカー付きログ行へサニタイズ済み row を JSON 出力)/record_sync()= audit-before-act(DB へ書けなければActionAuditWriteError— 監査に書けない承認は成立させない)/record_nowait()= ホットパス用 fire-and-forget(strong ref 保持・backlog 上限 512 超過は即 spill・開始前 cancel も spill。プロセス即死時は失われうる best-effort)。 - 決定イベントは
actor_ref必須:approval.*/gate.resolved/content.deleted/forensic.*/policy.changed/item.quarantine_released/workitem.*はactor_refが無いと同期ValueError(v1.0.0+。それ以前はapproval.*のみ)。 - DB:
execute_query(query, params) -> {success, data, error}を持つハンドル(SDK のDataAccess/PostgreSQLManager)。
ActionAudit / GatewayActionAudit
from agenticstar_platform.audit import ActionAudit, GatewayActionAudit, canonical_digest
audit = ActionAudit(db=data_access, source="my-agent", system_version=image_tag) # source = 書き込むコンポーネントの名前
await audit.ensure_schema() # 初期化時に owner ロールで 1 回: 台帳/索引を冪等作成し、旧い表には新しい列を追加
# ホットパス(ツール認可等): fire-and-forget
audit.record_nowait(
event_type="tool.access", actor_type="agent", decision="deny",
resource="bash", action="execute", reason="blocked_command",
conversation_id=cid, execution_id=eid,
payload_digest=canonical_digest({"command": cmd}),
)
# 承認(audit-before-act): 送出されたら行為を中断する
await audit.record_sync(
event_type="approval.granted", actor_type="human", actor_ref=approver_id,
decision="granted", resource=tool_name, conversation_id=cid,
)
await audit.aclose() # 終了時: pending を drain(timeout 分は cancel + spill)
gw = GatewayActionAudit(db=gateway_da) # LLM Gateway ポリシー判定用(virtual key 識別)
await gw.record(event_type="policy.mcp_stripped", decision="stripped",
virtual_key_id=vk, request_id=rid)
メソッド
| メソッド | 説明 |
|---|---|
ActionAudit(db, *, source, system_version=None, agent_ref=None) | agent_action_audit writer。source(書き込むコンポーネントの名前。任意の文字列で、行の source 列に入る)必須。agent_ref は actor_kind='agent' の行に actor_ref が無いとき自動で入れる識別子(省略時 agent:<source>。v1.0.0+) |
GatewayActionAudit(db, *, system_version=None) | llm_gateway_action_audit writer(virtual key 識別) |
await ensure_schema() | 台帳/索引を冪等作成 + REVOKE UPDATE/DELETE(best-effort。本番の append-only 強制は insert-only ロール分離を推奨)。ActionAudit は旧い SDK が作った表に v1.0.0 の 4 列を追加します(ACTION_AUDIT_UPGRADE_DDL)。CREATE / ALTER には表の owner 権限が要るため、環境の初期化時に owner ロールで 1 回呼びます(実行時の writer は INSERT 権限だけでよい)。migration で表を管理している環境では呼ばないでください。source_event_id の重複行が既にあると UNIQUE index を作れません(先に重複を解消) |
await record(**fields) | at-least-once 記録。DB へ書けたら True、spill 退避のみなら False(validation の ValueError は同期送出、cancel は伝播) |
await record_sync(**fields) | audit-before-act 記録。DB 書き込み失敗時 ActionAuditWriteError(validation は ValueError) |
record_nowait(**fields) | fire-and-forget(asyncio.Task を返す。close 中/backlog 超過/loop 無しは即 spill で None) |
await aclose(timeout=10.0) | pending を drain。timeout 分は cancel され行は spill、以後の新規は即 spill |
canonical_digest(payload) | モジュール関数。任意 payload の SHA-256 digest(キー順正規化 JSON・非 JSON 型は文字列化 fallback。None は None) |
reference_keys(**refs) | モジュール関数。metadata に入れる相関キー(project_id / run_id / step_id / item_id / tool_call_id / root_execution_id 等)の辞書を作る。None と空文字は落とし、値は文字列化(v1.0.0+) |
actor_kind_from_type(actor_type) | モジュール関数。actor_type から actor_kind を決める(agent / assistant / worker → agent、human / user / approver → human、system / scheduler / policy → system、それ以外 → unknown。v1.0.0+) |
KNOWN_EVENT_TYPES | 定数。既知の event_type とその意味の辞書(説明用。writer は強制しない。v1.0.0+) |
ACTOR_KINDS | 定数。actor_kind の閉語彙 ("agent", "human", "system", "human_external", "unknown")(v1.0.0+) |
ACTION_AUDIT_DDL / ACTION_AUDIT_INDEXES / ACTION_AUDIT_UPGRADE_DDL | 定数。ensure_schema() が使う DDL(migration を持たない環境向け。v1.0.0+) |
主なフィールド: event_type / actor_type(推奨: human | agent | system。実装は非空のみ検証)/ actor_kind(閉語彙 ACTOR_KINDS。省略時は actor_type から決まり、閉語彙外は ValueError。v1.0.0+)/ actor_ref(上記の決定イベントは必須)/ on_behalf_of_ref / decision / reason / resource / action / policy_id / policy_version / 相関キー(execution_id / conversation_id / message_id / request_id。v1.0.0+ は project_id(UUID 文字列)/ root_execution_id も)/ source_event_id(重複除去キー。^[A-Za-z0-9_.:@+-]{1,160}$。v1.0.0+)/ payload_digest / metadata。各行には内容の完全性検証用に row_hash(SHA-256)が自動付与されます。
v1.0.0 で追加された列: actor_kind / project_id / root_execution_id / source_event_id はどれも省略でき、従来の呼び出し形(actor_type だけ)はそのまま動きます。これらの列が無い旧い表に書き込むと、writer は列の不存在を 1 回検出して従来の列だけの INSERT に切り替え、監査行を失いません。切り替えている間は新しい 4 列の値は保存されず、row_hash は実際に保存した列から計算されます(ensure_schema() で列を足すか、列を追加した後にプロセスを再起動すると新しい INSERT に戻ります)。source_event_id の UNIQUE index がある表で同じ値を書くと、record() は False(spill 退避)を返し、record_sync() は例外を送出します。
metadata の数値と row_hash: metadata の数値のうち、絶対値 2^53 未満の整数以外(小数・それ以上の整数・NaN / Inf)は文字列として保存されます(v1.0.0+)。どの言語で計算しても row_hash が一致するようにするためです。SDK を使わずに同じ表へ直接書き込む場合は、パッケージ同梱の agenticstar_platform/audit/ROW_HASH_SPEC.md(正規化の規則)と row_hash_fixture.json(検証用 fixture)に合わせてください。循環参照などで JSON にできない metadata は {"unserializable": true} に置き換えられ、行そのものは保存されます。
GuardrailAlertWriter / GuardrailAlertAggregates(v0.5.32+)
Admin トリアージ用 guardrail_alerts(非権威的運用ビュー。権威は行為監査台帳)と、非連結日次集計 guardrail_alert_daily_aggregates の producer writer です。配送保証は上記 writer と同一(bounded FAF + retry → spill → aclose() drain)。
from agenticstar_platform.audit import GuardrailAlertWriter, GuardrailAlertAggregates
alerts = GuardrailAlertWriter(db=data_access, system_version=image_tag)
await alerts.ensure_schema() # 行 + 集計テーブル + index + REVOKE
alerts.record_nowait( # confirmed block のみ。冪等 (event_key v2)
source_surface="llm_gateway", policy_outcome="blocked",
policy_source="llm_gateway_guardrails_settings", decision_point="input",
request_id=rid, detection_types=["harmful_content"],
moderation_categories={"Violence": 4}, # カテゴリ別**実測** severity (2/4/6)
)
agg = GuardrailAlertAggregates(db=data_access)
agg.record_nowait(source_surface="llm_gateway", category="SelfHarm", severity=6)
設計上の強制事項: 行スキーマに利用者 ID 列なし(人物特定不可)/ SelfHarm を行に載せると同期 ValueError(表記ゆれ・ネスト・str-Enum .value も検出。SelfHarm は集計のみ、集計 writer は相関 ID 引数を持たない)/ 行の policy_outcome は blocked のみ/ replay は ON CONFLICT (event_key) DO NOTHING で Admin の lifecycle 変更を巻き戻さない。権限は行 = producer INSERT のみ、集計 = INSERT + UPDATE(count) + SELECT(count)。集計値は at-least-once 由来の二重加算があり得る近似値(課金・規制報告に使用しない)。
v0.5.40+: source_surface に agent_worker(会話 Pod worker 面)を追加。行に policy_category(攻撃方式の閉語彙: prompt_injection / system_prompt_extraction / implementation_access / credential_request / file_system_access / security_bypass / custom_policy / unclassified)を追加 — 閉語彙外は同期 ValueError(自由文・rule 名の流入防止)で、SelfHarm 検査は prompt_shield_origin / policy_category にも適用されます。
workflow ワークフローモジュール
v1.0.1+ — プロジェクトのワークフローの工程で 1 回実行されるエージェント用の runner(protocol mp-workflow/1。マーケットプレイス版 3.1 以降。実行結果の形式が v3.0.1 で変わったため、マーケットプレイス版 3.1 で使うには v3.0.1 以降が必要)。チャット用の run_marketplace_agent とは別の入口です。core に同梱され、データベースのドライバは要りません(契約で宣言した YAML ファイルは、core 依存の pyyaml で厳格に読んで検証します)。書き方は ワークフローガイド を参照してください。
- 注入される環境変数だけで動く:
ASTER_RUNTIME_PROTOCOL/ASTER_RUNTIME_BASE_URL/ASTER_RUNTIME_TOKEN/EXECUTION_ID。DB 設定などへの fallback はしません。 - 親子プロセス: runner(親)が入力の取得と展開・開始の記録・成果物の回収と保存・結果の保存を担い、エージェントの関数を子プロセスで実行します。
- 終了コード: 0 = 結果を保存した(既に終端していた場合と、エージェントの例外・エントリポイントを import できなかった場合の
failed/agent_errorを含む)、取消の後にプラットフォームが保存を断った場合(v3.0.13+)も 0、2 = 保存できなかった、3 = 環境変数または実行の文脈が不正。そのほかの障害は例外のまま 0 以外で終わることがあります(保証しません)。
入口
| 関数 / 定数 | 説明 |
|---|---|
run(entrypoint, *, env=None, workspace=None, exit_process=True, stop_on_sigterm=None) | イメージの起動コマンドから呼ぶ入口。entrypoint は "module.path:function"。exit_process=True(既定)なら終了コードでプロセスを終え、SIGTERM(Pod の停止)を受けると、子プロセスを止めて回収する協調停止に切り替えます。exit_process=False なら WorkflowResult を返し、設定の誤りは WorkflowConfigError を送出します。stop_on_sigterm(v3.0.13+)は SIGTERM の協調停止を exit_process と別に指定します(既定は exit_process と同じ)。v3.0.13 から、runner の token をエージェントのプロセスから /proc で読めなくする処理と、ログの出力先(未設定のときだけ標準エラー)も入れます |
await arun(entrypoint, ...) | 非同期版。シグナルハンドラー・token の保護・ログの出力先は入れません(stop_on_sigterm=True / protect_token=True で指定できます) |
validate_env(env) | 必須の環境変数を検証します(欠落・形の誤りは WorkflowConfigError) |
PROTOCOL / REQUIRED_ENV | "mp-workflow/1" / 必須の環境変数名 |
WorkflowResult は execution_id / outcome / outcome_reason_code / had_mutating_success / completion_saved / already_terminal / exit_code / artifacts を持ちます。
WorkflowContext
エントリポイント(async def run(context))が受け取る、読み取り専用の実行文脈です。
| メソッド | 説明 |
|---|---|
deadline_remaining() | エージェントが止められるまでの残り秒数(不明なら None) |
await is_cancel_requested(max_age=5.0) | 取消・期限・停止を知っていれば True。前回の確認から max_age 秒以内なら runner に問い合わせず、既に知っている停止だけで答えます |
await ensure_can_act() | 外部操作の前に呼びます。取消・期限の後は WorkflowError |
await skip(reason) | 処理対象が無い工程を skip します。reason は no_target / not_applicable / nothing_to_do(それ以外は ValueError)。記録するだけで処理は止まらないので、呼んだら関数から戻ります |
await policy_unavailable() | 外部操作の前に操作の可否を確かめられなかったことを伝えます(skipped/policy_unavailable)。記録するだけなので、呼んだら関数から戻ります。書き込みを始めた後に呼ぶと failed/skip_after_effect になります |
await log(message) | runner のログ(Pod の標準エラー)に書きます(2000 文字まで) |
await connection_token(slot, *, min_ttl=300.0) | 接続先の access token を {access_token, token_type, expires_at}(読み取り専用)で返します。期限まで min_ttl 秒を切ったら取り直し、期限が分からない token は 600 秒ごとに取り直します。束ねていない slot・失効した接続・取消や期限の後は WorkflowError(v3.0.5+) |
gate_decision は、確認依頼の決定を受けて起動した実行(差し戻した後の戻り先の工程の再実行・進めた後に続く工程)でだけ {gate_id, decision, decided_by, note, decided_at}(読み取り専用)になり、それ以外の実行では None です。decision は send_back / proceed、decided_by は human / system、note は担当者が書いた理由・コメント(無いとき・自動の決定では None)です。開始の記録(manifest)には gate_id / decision / decided_by だけが入ります(v3.0.9+。ワークフローガイド)。
AuditApi
context.audit で使う監査の送信窓口です。
| メソッド | 説明 |
|---|---|
await tool_invoked(tool, *, effect_kind, ...) | 外部操作の前に呼びます。記録が保存されてから event ID を返し、保存できなければ AuditNotPersisted(その操作に進まない)。effect_kind は read / list / query / fetch または write / create / update / delete / send / mutate(それ以外は ValueError) |
await tool_effect(invoked_event_id, *, status="ok", ...) | 操作の結果を tool_invoked の戻り値に対応付けます。status は ok / failed / unknown(結果が分からなければ unknown = 効果不明) |
await tool_denied(tool, *, reason, reason_code="tool_denied", ...) | 操作を実行しなかったことを記録します。結果は denied になります(判定の順で上にある取消・期限などが優先) |
**extra で渡した値のうち、metadata に残るのは文字列・整数・有限の小数・真偽値だけです(それ以外は SDK が捨て、v3.0.13 からは捨てたキーの名前を警告に出します)。本文・token・引数の値は渡さないでください。
実行結果
| 名前 | 説明 |
|---|---|
OUTCOMES | ("completed", "incomplete", "failed", "timeout", "stopped", "denied", "skipped") |
ENVELOPE_VERSION | 保存する結果(completion envelope)の形式の版。現在は 2(v3.0.1+) |
EffectTally / decide_outcome() / build_envelope() | runner が結果を組み立てる低レベル API。エージェントから呼ぶ必要はありません |
結果の counts には tool_calls / read_calls / mutating_invoked / mutating_success / mutating_failed / mutating_unresolved / orphan_effects / effect_conflicts / denied / audit_persist_failures が入ります(tool_calls / read_calls は v3.0.1 で tools_invoked / reads から改名)。outcome と理由コードの一覧は ワークフローガイド を参照してください。
例外
connection_token() / ensure_can_act() などが取消・期限の後に送出するのも WorkflowError です。v3.0.6 からは、runner が制御用の接続を閉じた後の呼び出しも WorkflowError(runner closed the control channel)になります。
policy ポリシーモジュール
v1.0.0+ — tool 呼び出しを許すかどうかを、テナントの統制ポリシーとプロジェクトのポリシーを合成した結果から allow / forbid の二値で判定する純計算です。I/O もフレームワーク依存もなく、core に同梱されています。
- 2 層: テナント層の
L1Policy(既定の profile、誰も外せないfloor、根拠本文を保持するか、版)と、プロジェクト層のProjectPolicy(profile、deny/allow、gate の設定)。tighten_merge()は次を保証します:floorはプロジェクトで外せない、profile はテナントの既定より緩くできない、strictのallowはテナントの profile が許す操作クラスの中でだけ効く。 - profile:
open(すべて allow)<guarded(destructive を forbid)<strict(read は allow、write / destructive はallowに明示したものだけ)。 - 判定の順: policy が無い → forbid /
floor・denyに一致 → forbid / MCP・A2A の呼び出し → allow(mcp_unrestricted/a2a_unrestricted。v3.0.3+ / v3.0.4+)/ 引数を解釈できない → forbid / 分類の無い tool →open・guardedは allow(unregistered=True)、strict・委譲・dry_runは forbid / 分類あり → profile の表(dry_run=Trueは read 以外を forbid)。 - 禁止規則: scope なし = tool 名の glob(MCP は
mcp:<接続名>:<tool>と<tool>の両方で照合)。引数の条件(args)と操作クラスの条件(op_class)も付けられます。op_classの条件は組み込みツールの判定にだけ効きます(MCP・A2A の呼び出しは操作クラスで分類しないため掛かりません。MCP を禁止するときは、接続 ID とメソッドの glob の external 規則か、tool 名の glob で書きます)。internal= 組み込みツールの操作種別(kind+mapping_version)。external= 接続 ID + メソッドの glob(connection_kindはmcp/a2a。A2A は接続単位で、tool は持たない)。外部の接続は名前ではなく ID で照合します(v3.0.2+)。 - 保存と照合:
EffectivePolicy.to_dict()/from_dict()で保存・復元し、digest(SHA-256)で「どの設定で判定したか」を後から突き合わせられます。保存形のschema_versionは、A2A の規則があれば 4、scope 付きの規則があれば 3、それ以外は 2 です。
from agenticstar_platform.policy import L1Policy, ProjectPolicy, tighten_merge, evaluate
l1 = L1Policy.from_row({"version": 3, "default_profile": "guarded", "floor": {"forbid": ["mcp:*:delete_*"]}})
project = ProjectPolicy.from_json({"profile": "strict", "allow": ["write_file"]})
policy = tighten_merge(l1, project, project_id="p1")
evaluate(policy, "delete_repo", None, mcp=True, mcp_server="gitlab", connection_id="12") # forbid(floor)
evaluate(policy, "create_issue", None, mcp=True, mcp_server="gitlab", connection_id="12") # allow(mcp_unrestricted)
evaluate(policy, "write_file", "write") # allow(strict_allowlist)
evaluate(policy, "delete_file", "destructive") # forbid(strict_allowlist)
policy.digest # 判定に使った設定の SHA-256
関数・クラス
| 名前 | 説明 |
|---|---|
tighten_merge(l1, project, *, project_id=None) | 2 層を合成して EffectivePolicy を返します(l1 が None ならテナント側の基準は open・floor なしで、プロジェクトの制限はそのまま効きます) |
evaluate(policy, tool, op_class, *, args=None, args_unparseable=False, dry_run=False, delegated=False, mcp_server=None, connection_id=None, mcp=None, connection_kind=None, tool_aliases=None) | Decision を返します。op_class は呼び出し側が分類した read / write / destructive(不明は None)。MCP は mcp=True と connection_id、A2A は connection_kind="a2a" と connection_id を渡します。接続を識別できないのにその種類の external 規則があれば forbid。管理画面で登録した接続ではない、プロセス内の MCP サーバーには LOCAL_CONNECTION("local")を渡します(external 規則の対象外) |
Decision | mode(allow / forbid)/ reason / policy_version / unregistered / matched(一致した禁止パターン)/ layer(v3.0.11+。forbid を決めた規則の層: project = プロジェクトの設定(禁止規則・profile・allowlist・dry run)で変えられる、tenant = テナントの既定の profile、floor = テナントの floor(誰も緩められない)、system = 規則ではなく判定できない(policy が無い・引数を解釈できない)。allow は None。定数 LAYER_PROJECT / LAYER_TENANT / LAYER_FLOOR / LAYER_SYSTEM)と、allowed プロパティ |
L1Policy.from_row(row) / ProjectPolicy.from_json(raw) | 入力を DB の行 / JSON から作ります |
EffectivePolicy.to_dict() / EffectivePolicy.from_dict(raw) / .digest | 保存・復元と SHA-256。from_dict() は未対応の schema_version を ValueError で拒否します(呼び出し側は全 forbid として扱う) |
policy_digest(policy) | EffectivePolicy の SHA-256 |
verify_connections(policy, connections) | 規則が指す接続が存在するかを確かめます(無ければ ValueError)。connections は {"mcp": {...}, "a2a": {...}}、または MCP の対応表 / 集合(v3.0.2+。v3.0.4 で種類別に) |
requires_schema(floor, forbid) | 規則に必要な schema_version |
profile_rank() / tighten_profile() / profile_permits(profile, op_class) | profile の順序・厳しい方・その profile が単独で操作クラスを許しうるか |
internal_operation_kinds(mapping_version=1) | 内部操作種別(text_write / file_read / file_transfer / command_exec / browser / desktop)の ID・表示名・説明と版(画面に出してよい形) |
理由コード: policy_unavailable / floor / project_forbid / unevaluable_args / unknown_tool / dry_run_read_only / profile / strict_allowlist / mcp_unrestricted / a2a_unrestricted。定数: PROFILE_ORDER / CONNECTION_KINDS(("mcp", "a2a"))/ LOCAL_CONNECTION("local")/ SCHEMA_VERSION_SCOPED(3)/ SCHEMA_VERSION_TYPED_CONNECTION(4)/ SUPPORTED_SCHEMA_VERSIONS / INTERNAL_OPERATIONS_MAPPING_VERSION。
まとめ
AGENTIC STAR Platform SDK v3.0.15 は、以下の 13 の専門モジュールで構成された包括的なツールキットです:
- Events — 非同期イベント配信(SSE / Webhook / DB)
- Database — PostgreSQL + Azure AD 認証 + 専門アクセス層(Config / Execution / Telemetry / PodRuntime)
- RAG — Embedding + Vector Search(Qdrant)
- Storage — Cloud Storage(Azure / S3 / GCS)
- Auth — AGENTIC STAR 認証サービス統合
- Memory — Semantic Memory(Mem0 + Qdrant)
- Security — Content Moderation + PII Detection(Azure / AWS / GCP マルチクラウド対応)
- Common — 共通ユーティリティ(SQL インジェクション防止・シークレットマスク)
- Metering — LLM 利用量・コスト計測(台帳 + 日次集計, v0.5.15+)
- Runner — Marketplace 互換の実行ライフサイクル(
run_marketplace_agent: identity 検証 → 入力取得 → 実行 → 結果保存/Webhook → terminal 正確に 1 回 → cleanup, v0.5.30+) - Audit — 行為監査台帳(
ActionAudit/GatewayActionAudit: 承認・ツール認可・ポリシー違反等の append-only 記録。本文は digest 化して渡す設計, v0.5.31+) - Workflow — プロジェクトのワークフローの工程で動くエージェントの runner(
run/WorkflowContext: 入力の展開 → 実行 → 成果物の回収 → 結果の保存、外部操作の監査、取消・期限、接続先の token, v1.0.1+) - Policy — tool 呼び出しの統制ポリシー(
tighten_merge/evaluate: テナントとプロジェクトの 2 層を合成して allow / forbid を判定, v1.0.0+)
各モジュールは独立してインストール・利用可能であり、組み合わせることで強力な AI エージェントアプリケーションを構築できます。SDK はインフラのみを提供し、エージェントロジックは開発者が自由に設計します。