コンテンツにスキップ

アーキテクチャ概要

Greentic は、責務が明確に分離されたレイヤードアーキテクチャを採用しています:

┌─────────────────────────────────────────────────────────┐
│ Messaging Channels │
│ (Slack, Teams, Telegram, WhatsApp, WebChat) │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Gateway (HTTP) │
│ Public Endpoint Router │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ greentic-runner │
│ (Production Runtime Host) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Flow Executor │ │
│ │ (Wasmtime Component Model) │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Session Manager │ │
│ │ (Memory / Redis) │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ WASM Components │
│ (Flows, Providers, MCP Tools, Custom Components) │
└─────────────────────────────────────────────────────────┘

greentic-runner

flow をホストして実行し、session を管理し、platform のすべてのサービスを調整する主要な production runtime です。

greentic-flow

.ygtc ファイル向けの flow schema definition、intermediate representation (IR)、loader、validator です。

greentic-pack

flow、component、asset を含む署名付き .gtpack archive を作成するための pack builder CLI です。

greentic-component

WASM component を構築するための component authoring CLI と runtime utilities です。

LayerTechnology用途
WASM RuntimeWasmtime v41Component model の実行
Async RuntimeTokio v1Async I/O、task scheduling
HTTP ServerAxum v0.8REST API、webhook
Message BusInternal event busevent distribution、pub/sub
Session StoreMemory/Redisflow state の永続化
SecretsAWS/Azure/GCP/Vaultcredential management
1. External Message (e.g., Slack)
2. Webhook Handler (Provider Ingress)
3. Message bus: greentic.messaging.ingress.{env}.{tenant}.{team}.{channel}
4. Flow Router (tenant/team resolution)
5. Flow Executor (WASM component execution)
6. Session State Update
7. Reply/Action Nodes
8. Message bus: greentic.messaging.egress.{env}.{tenant}.{team}.{channel}
9. Provider Egress → External Service
1. Bundle Configuration (greentic.demo.yaml)
2. Pack Resolver (local/OCI registry)
3. Signature Verification (ed25519-dalek)
4. CBOR Metadata Parsing
5. WASM Component Instantiation
6. WIT Interface Binding
7. Runtime Registration

Greentic は、あらゆるレイヤーで tenant isolation を実装しています:

Tenant
└── Environment (prod, staging, dev)
└── Team
└── Channel (messaging provider instance)
└── Session (user conversation state)

TenantCtx struct は、すべての操作に渡って流れます:

pub struct TenantCtx {
pub tenant_id: String,
pub env_id: String,
pub team_id: Option<String>,
}

WIT インターフェースアーキテクチャ

Section titled “WIT インターフェースアーキテクチャ”

Greentic は、component interface を定義するために WebAssembly Interface Types (WIT) specification を使用します:

// greentic-interfaces/wit/greentic/component@0.6.0/package.wit
package greentic:component@0.6.0;
interface control {
should-cancel: func() -> bool;
yield-now: func();
}
interface node {
use greentic:types-core/core@0.6.0.{capability-id, component-id, flow-id, node-error, step-id, tenant-ctx};
record invocation-envelope {
ctx: tenant-ctx,
flow-id: flow-id,
step-id: step-id,
component-id: component-id,
attempt: u32,
payload-cbor: list<u8>,
metadata-cbor: option<list<u8>>,
}
record invocation-result {
ok: bool,
output-cbor: list<u8>,
output-metadata-cbor: option<list<u8>>,
}
variant schema-source {
cbor-schema-id(string),
inline-cbor(list<u8>),
ref-pack-path(string),
ref-uri(string),
}
record io-schema {
schema: schema-source,
content-type: string,
schema-version: option<string>,
}
record example {
title: string,
input-cbor: list<u8>,
output-cbor: list<u8>,
}
record schema-ref {
id: string,
content-type: string,
blake3-hash: string,
version: string,
bytes: option<list<u8>>,
uri: option<string>,
}
record setup-example {
title: string,
answers-cbor: list<u8>,
}
record setup-template-scaffold {
template-ref: string,
output-layout: option<string>,
}
variant setup-output {
config-only,
template-scaffold(setup-template-scaffold),
}
record setup-contract {
qa-spec: schema-source,
answers-schema: schema-source,
examples: list<setup-example>,
outputs: list<setup-output>,
}
record op {
name: string,
summary: option<string>,
input: io-schema,
output: io-schema,
examples: list<example>,
}
record component-descriptor {
name: string,
version: string,
summary: option<string>,
capabilities: list<capability-id>,
ops: list<op>,
schemas: list<schema-ref>,
setup: option<setup-contract>,
}
describe: func() -> component-descriptor;
invoke: func(op: string, envelope: invocation-envelope) -> result<invocation-result, node-error>;
}
world component {
import control;
export node;
}
greentic-types ─────────────────────────── (foundation)
greentic-telemetry
greentic-interfaces ← greentic-types
greentic-config ← greentic-types
greentic-session ← greentic-types
greentic-state ← greentic-types + greentic-interfaces
greentic-flow ← greentic-interfaces + greentic-types
greentic-pack ← greentic-flow + greentic-types
greentic-component ← greentic-interfaces + greentic-types
greentic-mcp ← greentic-interfaces + greentic-types
greentic-runner ← ALL of the above

Greentic は、分散 tracing と metrics のために OpenTelemetry を使用します:

  • Tracing: 分散 trace の相関付けを行う OTLP exporter
  • Metrics: flow execution time、message throughput、error rate
  • Logging: trace context 付きの structured logging
  • Flows - flow definition について学ぶ
  • Packs - pack structure を理解する
  • Components - カスタム WASM component を構築する