diff --git a/content/blog/ai-ontology-open-protocol/index.de.mdx b/content/blog/ai-ontology-open-protocol/index.de.mdx index b947df4..a463049 100644 --- a/content/blog/ai-ontology-open-protocol/index.de.mdx +++ b/content/blog/ai-ontology-open-protocol/index.de.mdx @@ -142,7 +142,7 @@ export const SalesUser: Security.PermissionSet = { }; ``` -Es geht nicht um die Syntax. Es geht darum, dass **diese wenigen Dutzend Zeilen das System sind**. Die Open-Source-Runtime von ObjectStack liest die Definition und leitet daraus Datenbanktabellen, REST-API, Verwaltungsoberfläche und MCP-Werkzeuge ab; Berechtigungen und Audit werden dabei durchgesetzt. Rabatte über 30 % brauchen eine Finanzfreigabe? Das ist eine Prozessdefinition an diesem Objekt: ebenso deklarativ, ebenso versioniert. ObjectOS ergänzt um dieselbe App die kommerzielle Produktionserfahrung – Build und Ask im Browser, Team-Review und Freigaben, verwaltete Cloud- oder private Bereitstellung, SSO, Betrieb und Support – ohne Definition oder Engine wieder proprietär zu machen. +Es geht nicht um die Syntax. Es geht darum, dass **diese wenigen Dutzend Zeilen das System sind**. Die Open-Source-Runtime von ObjectStack liest die Definition und leitet daraus Datenbanktabellen, REST-API, Verwaltungsoberfläche und MCP-Werkzeuge ab; Berechtigungen und Audit werden dabei durchgesetzt. Rabatte über 30 % brauchen eine Finanzfreigabe? Das ist eine Prozessdefinition an diesem Objekt: ebenso deklarativ, ebenso versioniert. ObjectOS, die kommerzielle Laufzeitumgebung auf Basis von ObjectStack, ergänzt um dieselbe App Build und Ask im Browser, Team-Review und Freigaben, verwaltete Cloud- oder private Bereitstellung, SSO, Betrieb und Support – ohne Definition oder Engine wieder proprietär zu machen. ![Eine Metadaten-Definition wird zu API, Oberfläche, KI-Werkzeugen sowie durchgesetzten Berechtigungen und Audit](./one-definition-four-surfaces-en.svg) diff --git a/content/blog/ai-ontology-open-protocol/index.es.mdx b/content/blog/ai-ontology-open-protocol/index.es.mdx index 6eac6c6..f3fb8c2 100644 --- a/content/blog/ai-ontology-open-protocol/index.es.mdx +++ b/content/blog/ai-ontology-open-protocol/index.es.mdx @@ -142,7 +142,7 @@ export const SalesUser: Security.PermissionSet = { }; ``` -La clave no es la sintaxis. La clave es que **estas pocas docenas de líneas son el sistema**. El runtime open source de ObjectStack lee la definición y deriva las tablas, la API REST, la interfaz de administración y las herramientas MCP, además de aplicar permisos y auditoría. ¿Los descuentos superiores al 30 % necesitan aprobación de finanzas? Eso es una definición de flujo asociada al objeto: igual de declarativa, igual de versionada. ObjectOS añade alrededor de la misma app la experiencia comercial de producción — Build y Ask en el navegador, revisión y aprobación en equipo, operación en nube gestionada o despliegue privado, SSO y soporte — sin volver propietarios la definición ni el motor. +La clave no es la sintaxis. La clave es que **estas pocas docenas de líneas son el sistema**. El runtime open source de ObjectStack lee la definición y deriva las tablas, la API REST, la interfaz de administración y las herramientas MCP, además de aplicar permisos y auditoría. ¿Los descuentos superiores al 30 % necesitan aprobación de finanzas? Eso es una definición de flujo asociada al objeto: igual de declarativa, igual de versionada. ObjectOS, el entorno de ejecución comercial construido sobre ObjectStack, añade alrededor de la misma app Build y Ask en el navegador, revisión y aprobación en equipo, operación en nube gestionada o despliegue privado, SSO y soporte — sin volver propietarios la definición ni el motor. ![Una definición de metadatos se convierte en la API, la interfaz, las herramientas de IA y los permisos y auditoría aplicados](./one-definition-four-surfaces-en.svg) diff --git a/content/blog/ai-ontology-open-protocol/index.fr.mdx b/content/blog/ai-ontology-open-protocol/index.fr.mdx index f17bf53..a5ffff7 100644 --- a/content/blog/ai-ontology-open-protocol/index.fr.mdx +++ b/content/blog/ai-ontology-open-protocol/index.fr.mdx @@ -142,7 +142,7 @@ export const SalesUser: Security.PermissionSet = { }; ``` -L'important n'est pas la syntaxe. L'important, c'est que **ces quelques dizaines de lignes sont le système**. Le runtime open source ObjectStack lit la définition et en dérive les tables, l'API REST, l'interface d'administration et les outils MCP, tout en appliquant permissions et audit. Une remise supérieure à 30 % exige une validation finance ? C'est un flux attaché à l'objet : tout aussi déclaratif et versionné. ObjectOS ajoute autour de la même application l'expérience commerciale de production — Build et Ask dans le navigateur, revue et validation en équipe, exploitation cloud managée ou déploiement privé, SSO et support — sans rendre la définition ni le moteur propriétaires. +L'important n'est pas la syntaxe. L'important, c'est que **ces quelques dizaines de lignes sont le système**. Le runtime open source ObjectStack lit la définition et en dérive les tables, l'API REST, l'interface d'administration et les outils MCP, tout en appliquant permissions et audit. Une remise supérieure à 30 % exige une validation finance ? C'est un flux attaché à l'objet : tout aussi déclaratif et versionné. ObjectOS, l’environnement d’exécution commercial construit sur ObjectStack, ajoute autour de la même application Build et Ask dans le navigateur, revue et validation en équipe, exploitation cloud managée ou déploiement privé, SSO et support — sans rendre la définition ni le moteur propriétaires. ![Une définition de métadonnées devient l'API, l'interface, les outils IA, et les permissions et l'audit appliqués](./one-definition-four-surfaces-en.svg) diff --git a/content/blog/ai-ontology-open-protocol/index.ja.mdx b/content/blog/ai-ontology-open-protocol/index.ja.mdx index 73332fb..9d76446 100644 --- a/content/blog/ai-ontology-open-protocol/index.ja.mdx +++ b/content/blog/ai-ontology-open-protocol/index.ja.mdx @@ -142,7 +142,7 @@ export const SalesUser: Security.PermissionSet = { }; ``` -重要なのは構文ではありません。**この数十行がシステムそのものである**ことです。オープンソースの ObjectStack ランタイムがこの定義を読み、データベーステーブル、REST API、管理画面、MCP ツールを導出し、権限と監査を強制します。30% を超える値引きには財務承認が必要?それはこのオブジェクトに紐づくフロー定義であり、同じく宣言的で、同じくバージョン管理されています。ObjectOS は同じアプリの周囲に、ブラウザ内 Build/Ask、チームレビューと承認、マネージドクラウドまたはプライベート展開、SSO、運用、サポートという商用の本番体験を加えますが、定義や実行エンジンを専有依存には戻しません。 +重要なのは構文ではありません。**この数十行がシステムそのものである**ことです。オープンソースの ObjectStack ランタイムがこの定義を読み、データベーステーブル、REST API、管理画面、MCP ツールを導出し、権限と監査を強制します。30% を超える値引きには財務承認が必要?それはこのオブジェクトに紐づくフロー定義であり、同じく宣言的で、同じくバージョン管理されています。ObjectOS は ObjectStack の上に構築された商用ランタイム環境として、同じアプリの周囲にブラウザ内 Build/Ask、チームレビューと承認、マネージドクラウドまたはプライベート展開、SSO、運用、サポートを加えますが、定義や実行エンジンを専有依存には戻しません。 ![1 つのメタデータ定義が、API・画面・AI ツール・権限と監査として同時に効力を持つ](./one-definition-four-surfaces-en.svg) diff --git a/content/blog/ai-ontology-open-protocol/index.ko.mdx b/content/blog/ai-ontology-open-protocol/index.ko.mdx index 7313f3e..2482dbe 100644 --- a/content/blog/ai-ontology-open-protocol/index.ko.mdx +++ b/content/blog/ai-ontology-open-protocol/index.ko.mdx @@ -142,7 +142,7 @@ export const SalesUser: Security.PermissionSet = { }; ``` -핵심은 문법이 아닙니다. **이 몇십 줄이 곧 시스템이라는 것**입니다. 오픈소스 ObjectStack 런타임이 정의를 읽어 데이터베이스 테이블, REST API, 관리 화면, MCP 도구를 파생하고 권한과 감사를 강제합니다. 30%를 넘는 할인은 재무 승인이 필요하다? 그것은 이 객체에 붙는 플로우 정의이고, 똑같이 선언적이며 버전 관리됩니다. ObjectOS는 같은 앱 주위에 브라우저 Build와 Ask, 팀 검토와 승인, 관리형 클라우드 또는 프라이빗 배포 운영, SSO, 지원이라는 상용 프로덕션 경험을 더하지만 정의나 엔진을 다시 독점 의존성으로 만들지 않습니다. +핵심은 문법이 아닙니다. **이 몇십 줄이 곧 시스템이라는 것**입니다. 오픈소스 ObjectStack 런타임이 정의를 읽어 데이터베이스 테이블, REST API, 관리 화면, MCP 도구를 파생하고 권한과 감사를 강제합니다. 30%를 넘는 할인은 재무 승인이 필요하다? 그것은 이 객체에 붙는 플로우 정의이고, 똑같이 선언적이며 버전 관리됩니다. ObjectOS는 ObjectStack 위에 구축된 상용 런타임 환경으로, 같은 앱 주위에 브라우저 Build와 Ask, 팀 검토와 승인, 관리형 클라우드 또는 프라이빗 배포 운영, SSO, 지원을 더하지만 정의나 엔진을 다시 독점 의존성으로 만들지 않습니다. ![하나의 메타데이터 정의가 API, 화면, AI 도구, 권한과 감사로 동시에 효력을 가진다](./one-definition-four-surfaces-en.svg) diff --git a/content/blog/ai-ontology-open-protocol/index.mdx b/content/blog/ai-ontology-open-protocol/index.mdx index a6383ac..fd63547 100644 --- a/content/blog/ai-ontology-open-protocol/index.mdx +++ b/content/blog/ai-ontology-open-protocol/index.mdx @@ -142,7 +142,7 @@ export const SalesUser: Security.PermissionSet = { }; ``` -The point is not the syntax. The point is that **these few dozen lines are the system**. The open-source ObjectStack runtime reads this definition, derives the database tables, REST API, admin UI, and MCP tools, then enforces permissions and audit on every call. Discounts above 30% need finance approval? That's a flow definition attached to this object: equally declarative, equally in version control. ObjectOS adds the commercial production experience around the same application — browser-based Build and Ask, team review and approval, managed cloud or private deployment, SSO, operations, and support — without turning the definition or execution engine into a proprietary dependency. +The point is not the syntax. The point is that **these few dozen lines are the system**. The open-source ObjectStack runtime reads this definition, derives the database tables, REST API, admin UI, and MCP tools, then enforces permissions and audit on every call. Discounts above 30% need finance approval? That's a flow definition attached to this object: equally declarative, equally in version control. ObjectOS, the commercial runtime environment built on ObjectStack, adds browser-based Build and Ask, team review and approval, managed cloud or private deployment, SSO, operations, and support around the same application — without turning the definition or execution engine into a proprietary dependency. ![One metadata definition becomes the API, the UI, the AI tools, and the enforced permissions and audit](./one-definition-four-surfaces-en.svg) diff --git a/content/blog/ai-ontology-open-protocol/index.zh-Hans.mdx b/content/blog/ai-ontology-open-protocol/index.zh-Hans.mdx index a6a2180..19ab4d8 100644 --- a/content/blog/ai-ontology-open-protocol/index.zh-Hans.mdx +++ b/content/blog/ai-ontology-open-protocol/index.zh-Hans.mdx @@ -142,7 +142,7 @@ export const SalesUser: Security.PermissionSet = { }; ``` -关键不在语法,在于**这几十行就是系统本身**。开源 ObjectStack 运行时读取这份定义,派生数据表、REST API、管理界面、MCP 工具,并强制执行权限与审计。折扣超过 30% 要走财务审批?那是一条挂在这个对象上的流程定义,同样是声明式的,同样在版本库里。ObjectOS 在同一应用外增加商业生产体验——浏览器内 Build 与 Ask、团队审阅和审批、托管云或私有部署运营、SSO 与支持——但不会把定义或执行引擎重新变成专有依赖。 +关键不在语法,在于**这几十行就是系统本身**。开源 ObjectStack 运行时读取这份定义,派生数据表、REST API、管理界面、MCP 工具,并强制执行权限与审计。折扣超过 30% 要走财务审批?那是一条挂在这个对象上的流程定义,同样是声明式的,同样在版本库里。ObjectOS 是建立在 ObjectStack 之上的商业运行环境,在同一应用之外增加浏览器内 Build 与 Ask、团队审阅和审批、托管云或私有部署运营、SSO 与支持——但不会把定义或执行引擎重新变成专有依赖。 ![一份元数据定义,同时生效为 API、界面、AI 工具和审计权限](./one-definition-four-surfaces.svg) diff --git a/content/blog/ai-ontology-open-protocol/index.zh-Hant.mdx b/content/blog/ai-ontology-open-protocol/index.zh-Hant.mdx index 917a33e..a76a6b1 100644 --- a/content/blog/ai-ontology-open-protocol/index.zh-Hant.mdx +++ b/content/blog/ai-ontology-open-protocol/index.zh-Hant.mdx @@ -143,7 +143,7 @@ export const SalesUser: Security.PermissionSet = { }; ``` -關鍵不在語法,在於**這幾十行就是系統本身**。開源 ObjectStack 執行時讀取這份定義,派生資料表、REST API、管理介面、MCP 工具,並強制執行權限與審計。折扣超過 30% 要走財務審批?那是一條掛在這個物件上的流程定義,同樣是宣告式的,同樣在版本庫裡。ObjectOS 在同一應用外增加商業生產體驗——瀏覽器內 Build 與 Ask、團隊審閱和審批、託管雲或私有部署運營、SSO 與支援——但不會把定義或執行引擎重新變成專有依賴。 +關鍵不在語法,在於**這幾十行就是系統本身**。開源 ObjectStack 執行時讀取這份定義,派生資料表、REST API、管理介面、MCP 工具,並強制執行權限與審計。折扣超過 30% 要走財務審批?那是一條掛在這個物件上的流程定義,同樣是宣告式的,同樣在版本庫裡。ObjectOS 是建立在 ObjectStack 之上的商業執行環境,在同一應用之外增加瀏覽器內 Build 與 Ask、團隊審閱和審批、託管雲或私有部署運營、SSO 與支援——但不會把定義或執行引擎重新變成專有依賴。 ![一份後設資料定義,同時生效為 API、介面、AI 工具和審計權限](./one-definition-four-surfaces.svg) diff --git a/content/blog/extend-existing-systems-with-ai/index.de.mdx b/content/blog/extend-existing-systems-with-ai/index.de.mdx index 317c1df..3bc10d3 100644 --- a/content/blog/extend-existing-systems-with-ai/index.de.mdx +++ b/content/blog/extend-existing-systems-with-ai/index.de.mdx @@ -1,6 +1,6 @@ --- title: Bestehende Geschäftssysteme AI-native machen, ohne Migration -description: Verbinden Sie ObjectOS mit der Datenbank, die bereits läuft, lassen Sie einen Coding-Agenten Tabellen als Objekte modellieren und setzen Sie AI auf echte Daten, unter Ihren Berechtigungen und ohne das Ursprungssystem anzufassen. +description: Auf selbst verwaltetem ObjectOS (Enterprise) die laufende Datenbank nur lesend verbinden, Tabellen per Coding-Agent als Objekte modellieren und AI auf echte Daten setzen – unter Ihren Berechtigungen, Ursprungssystem unangetastet. author: ObjectStack Team date: 2026-05-30 updated: 2026-10-06T10:00:00+08:00 @@ -19,7 +19,7 @@ ObjectOS nimmt die Gegenposition ein. **Sie migrieren nicht. Sie verbinden.** ## Die Idee in einem Satz -Richten Sie ObjectOS auf Ihre bestehende Datenbank, beschreiben Sie die relevanten Tabellen als Objekte, und jeder AI-Agent, Flow, jede API und jedes Dashboard arbeitet sofort auf diesen Daten, automatisch zum richtigen System geroutet und durch dieselben Berechtigungen gesteuert, die Ihre Benutzer schon haben. +Richten Sie auf selbst verwaltetem ObjectOS (Enterprise, in Ihrer eigenen Infrastruktur, wo die Datenbank erreichbar ist) ObjectOS standardmäßig nur lesend auf Ihre bestehende Datenbank, beschreiben Sie die relevanten Tabellen als Objekte, und jeder AI-Agent, Flow, jede API und jedes Dashboard arbeitet sofort auf diesen Daten, automatisch zum richtigen System geroutet und durch dieselben Berechtigungen gesteuert, die Ihre Benutzer schon haben. Die ursprüngliche Anwendung bleibt unverändert. Zeilen wandern nicht. ObjectOS wird zur AI-nativen, berechtigungsbewussten Oberfläche über dem, was Sie bereits betreiben. diff --git a/content/blog/extend-existing-systems-with-ai/index.es.mdx b/content/blog/extend-existing-systems-with-ai/index.es.mdx index 29c822e..bd91130 100644 --- a/content/blog/extend-existing-systems-with-ai/index.es.mdx +++ b/content/blog/extend-existing-systems-with-ai/index.es.mdx @@ -1,6 +1,6 @@ --- title: Haz que tu sistema de negocio existente sea AI-native sin migrarlo -description: Conecta ObjectOS a la base de datos que ya usas, deja que un agente de código modele las tablas como objetos y pon AI sobre datos reales, bajo tus permisos y sin tocar el sistema original. +description: En ObjectOS autogestionado (Enterprise), conecta la base que ya usas en solo lectura, deja que un agente de código modele las tablas como objetos y pon AI sobre datos reales, bajo tus permisos y sin tocar el sistema original. author: ObjectStack Team date: 2026-05-30 updated: 2026-10-06T10:00:00+08:00 @@ -19,7 +19,7 @@ ObjectOS toma la postura contraria. **No migras. Conectas.** ## La idea en una frase -Apunta ObjectOS a tu base de datos existente, describe las tablas importantes como objetos y cada agente de AI, flow, API y dashboard trabaja de inmediato sobre esos datos, enrutado al sistema correcto y gobernado por los mismos permisos que ya tienen tus usuarios. +En ObjectOS autogestionado (Enterprise, en tu propia infraestructura, donde la base de datos es alcanzable), apunta ObjectOS a tu base de datos existente — solo lectura por defecto —, describe las tablas importantes como objetos y cada agente de AI, flow, API y dashboard trabaja de inmediato sobre esos datos, enrutado al sistema correcto y gobernado por los mismos permisos que ya tienen tus usuarios. La aplicación original no cambia. Las filas no se mueven. ObjectOS se convierte en una capa AI-native y consciente de permisos sobre lo que ya operas. diff --git a/content/blog/extend-existing-systems-with-ai/index.fr.mdx b/content/blog/extend-existing-systems-with-ai/index.fr.mdx index 23016a0..5711574 100644 --- a/content/blog/extend-existing-systems-with-ai/index.fr.mdx +++ b/content/blog/extend-existing-systems-with-ai/index.fr.mdx @@ -1,6 +1,6 @@ --- title: Rendre votre système métier existant AI-native sans migration -description: Connectez ObjectOS à la base de données que vous exploitez déjà, laissez un agent de code modéliser les tables comme des objets et mettez l'AI sur des données réelles, sous vos permissions et sans toucher au système d'origine. +description: Sur ObjectOS autogéré (Enterprise), connectez votre base existante en lecture seule, laissez un agent de code modéliser les tables en objets et mettez l'AI sur des données réelles, sous vos permissions, système d'origine intact. author: ObjectStack Team date: 2026-05-30 updated: 2026-10-06T10:00:00+08:00 @@ -19,7 +19,7 @@ ObjectOS prend la position inverse. **Vous ne migrez pas. Vous connectez.** ## L'idée en une phrase -Pointez ObjectOS vers votre base existante, décrivez les tables importantes comme des objets, et chaque agent AI, flow, API et dashboard travaille immédiatement sur ces données, routées vers le bon système et gouvernées par les mêmes permissions que vos utilisateurs possèdent déjà. +Sur ObjectOS autogéré (Enterprise, dans votre propre infrastructure, là où la base est joignable), pointez ObjectOS vers votre base existante — en lecture seule par défaut —, décrivez les tables importantes comme des objets, et chaque agent AI, flow, API et dashboard travaille immédiatement sur ces données, routées vers le bon système et gouvernées par les mêmes permissions que vos utilisateurs possèdent déjà. L'application d'origine ne change pas. Les lignes ne bougent pas. ObjectOS devient une surface AI-native et consciente des permissions au-dessus de ce que vous exploitez déjà. diff --git a/content/blog/extend-existing-systems-with-ai/index.ja.mdx b/content/blog/extend-existing-systems-with-ai/index.ja.mdx index c75afb9..fc833bc 100644 --- a/content/blog/extend-existing-systems-with-ai/index.ja.mdx +++ b/content/blog/extend-existing-systems-with-ai/index.ja.mdx @@ -1,6 +1,6 @@ --- title: 既存の業務システムを移行せずに AI-native にする -description: すでに動いているデータベースに ObjectOS を接続し、コーディングエージェントでテーブルをオブジェクトとしてモデル化すれば、元のシステムを壊さず、権限の下で実データに AI を載せられます。 +description: セルフマネージドの ObjectOS(Enterprise)で、すでに動いているデータベースを既定の読み取り専用で接続し、コーディングエージェントでテーブルをオブジェクトとしてモデル化すれば、元のシステムを壊さず、権限の下で実データに AI を載せられます。 author: ObjectStack Team date: 2026-05-30 updated: 2026-10-06T10:00:00+08:00 @@ -19,7 +19,7 @@ ObjectOS の考え方は逆です。**移行しない。接続する。** ## 一文でいうと -ObjectOS を既存データベースに向け、必要なテーブルをオブジェクトとして記述すると、AI エージェント、フロー、API、ダッシュボードがそのデータ上で動き始めます。データは適切なシステムへ自動的にルーティングされ、ユーザーがすでに持っている権限で統制されます。 +セルフマネージドの ObjectOS(Enterprise。自社インフラで動き、データベースに到達できる構成)で、ObjectOS を既存データベースに既定の読み取り専用で向け、必要なテーブルをオブジェクトとして記述すると、AI エージェント、フロー、API、ダッシュボードがそのデータ上で動き始めます。データは適切なシステムへ自動的にルーティングされ、ユーザーがすでに持っている権限で統制されます。 元のアプリケーションは変わりません。行データも移動しません。ObjectOS は、既存システムの上に AI-native で権限を理解する表面を作ります。 diff --git a/content/blog/extend-existing-systems-with-ai/index.ko.mdx b/content/blog/extend-existing-systems-with-ai/index.ko.mdx index 286a2b2..49e73a8 100644 --- a/content/blog/extend-existing-systems-with-ai/index.ko.mdx +++ b/content/blog/extend-existing-systems-with-ai/index.ko.mdx @@ -1,6 +1,6 @@ --- title: 마이그레이션 없이 기존 비즈니스 시스템을 AI-native로 만들기 -description: 이미 운영 중인 데이터베이스에 ObjectOS를 연결하고, 코딩 에이전트가 테이블을 객체로 모델링하게 하면 원래 시스템을 건드리지 않고도 권한 아래에서 실제 데이터에 AI를 적용할 수 있습니다. +description: 자체 운영형 ObjectOS(Enterprise)에서 이미 운영 중인 데이터베이스를 기본 읽기 전용으로 연결하고, 코딩 에이전트가 테이블을 객체로 모델링하게 하면 원래 시스템을 건드리지 않고도 권한 아래에서 실제 데이터에 AI를 적용할 수 있습니다. author: ObjectStack Team date: 2026-05-30 updated: 2026-10-06T10:00:00+08:00 @@ -19,7 +19,7 @@ ObjectOS의 입장은 반대입니다. **마이그레이션하지 말고 연결 ## 한 문장으로 말하면 -ObjectOS를 기존 데이터베이스에 연결하고 중요한 테이블을 객체로 설명하면, 모든 AI 에이전트, flow, API, dashboard가 그 데이터 위에서 바로 작동합니다. 데이터는 올바른 시스템으로 라우팅되고, 사용자가 이미 가진 권한으로 통제됩니다. +자체 운영형 ObjectOS(Enterprise, 자체 인프라에서 실행되어 데이터베이스에 접근할 수 있는 구성)에서 ObjectOS를 기존 데이터베이스에 기본 읽기 전용으로 연결하고 중요한 테이블을 객체로 설명하면, 모든 AI 에이전트, flow, API, dashboard가 그 데이터 위에서 바로 작동합니다. 데이터는 올바른 시스템으로 라우팅되고, 사용자가 이미 가진 권한으로 통제됩니다. 원래 애플리케이션은 바뀌지 않습니다. 행 데이터도 이동하지 않습니다. ObjectOS는 이미 운영 중인 시스템 위에 AI-native이며 권한을 이해하는 표면을 만듭니다. diff --git a/content/blog/extend-existing-systems-with-ai/index.mdx b/content/blog/extend-existing-systems-with-ai/index.mdx index 98d59bf..90378b1 100644 --- a/content/blog/extend-existing-systems-with-ai/index.mdx +++ b/content/blog/extend-existing-systems-with-ai/index.mdx @@ -1,6 +1,6 @@ --- title: "Add AI to Existing Systems Without Migration: Connect Your Database" -description: Connect ObjectOS to the database you already run, let a coding agent model the tables as objects, and put AI on real data under your permissions, on your servers, with the original system untouched. +description: On self-managed ObjectOS (Enterprise), connect the database you already run — read-only by default — let a coding agent model its tables as objects, and put AI on real data under your permissions, system of record untouched. author: ObjectStack Team date: 2026-05-30 updated: 2026-10-06T10:00:00+08:00 @@ -21,7 +21,7 @@ tags: [] # published_at: 2026-05-31 --- -**The short version:** Making existing systems work with AI does not require migrating or rebuilding first. Connect ObjectOS to the database you already run, and let agents understand real data under your permissions. Connect, do not rebuild. +**The short version:** Making existing systems work with AI does not require migrating or rebuilding first. On a self-managed ObjectOS deployment — ObjectOS Enterprise, on your own infrastructure, where the database is reachable — connect the database you already run, read-only by default, and let agents understand real data under your permissions. Connect, do not rebuild. Most "add AI to your business" pitches quietly assume a rebuild: lift the data into a new platform, re-implement the workflows, re-train the team, diff --git a/content/blog/extend-existing-systems-with-ai/index.zh-Hans.mdx b/content/blog/extend-existing-systems-with-ai/index.zh-Hans.mdx index eb0b1aa..97034d2 100644 --- a/content/blog/extend-existing-systems-with-ai/index.zh-Hans.mdx +++ b/content/blog/extend-existing-systems-with-ai/index.zh-Hans.mdx @@ -1,6 +1,6 @@ --- title: 给现有系统加 AI:连接数据库,而不是先迁移 -description: 把 ObjectOS 连到已经运行的数据库,让 agent 把关键数据表建模为对象,再在你的权限和服务器边界内叠加 AI 能力;原系统继续运行,AI 走受控对象层。 +description: 在自管部署的 ObjectOS(企业版)里,把已经运行的数据库接入(默认只读),让 agent 把关键数据表建模为对象,再在你的权限边界内叠加 AI 能力;原系统继续运行,AI 走受控对象层。 author: ObjectStack Team date: 2026-05-30 updated: 2026-10-06T10:00:00+08:00 @@ -29,8 +29,9 @@ ObjectOS 采取相反的立场。**你不迁移。你连接。** ## 一句话讲清这个想法 -把 ObjectOS 指向你现有的数据库,将你关心的数据表描述为对象,于是每一个 AI -Agent、流程、API 和仪表盘都立刻在这些数据上工作 —— 自动路由到正确的系统, +在自管部署的 ObjectOS(企业版,跑在你自己的基础设施上、数据库可达)里,把 +ObjectOS 指向你现有的数据库——默认只读——将你关心的数据表描述为对象,于是每一个 +AI Agent、流程、API 和仪表盘都立刻在这些数据上工作 —— 自动路由到正确的系统, 并受你的用户已经拥有的同一套权限治理。 原有的应用不会改变。数据行不会移动。ObjectOS 成为你已运行系统之上那层原生 diff --git a/content/blog/extend-existing-systems-with-ai/index.zh-Hant.mdx b/content/blog/extend-existing-systems-with-ai/index.zh-Hant.mdx index dbdf409..716e97d 100644 --- a/content/blog/extend-existing-systems-with-ai/index.zh-Hant.mdx +++ b/content/blog/extend-existing-systems-with-ai/index.zh-Hant.mdx @@ -1,7 +1,7 @@ --- # @generated zh-Hant from zh-Hans (s2twp) — edit the zh-Hans file; delete this line to hand-maintain. title: 給現有系統加 AI:連線資料庫,而不是先遷移 -description: 把 ObjectOS 連到已經執行的資料庫,讓 agent 把關鍵資料表建模為物件,再在你的權限和伺服器邊界內疊加 AI 能力;原系統繼續執行,AI 走受控物件層。 +description: 在自管部署的 ObjectOS(企業版)裡,把已經執行的資料庫接入(預設只讀),讓 agent 把關鍵資料表建模為物件,再在你的權限邊界內疊加 AI 能力;原系統繼續執行,AI 走受控物件層。 author: ObjectStack Team date: 2026-05-30 updated: 2026-10-06T10:00:00+08:00 @@ -30,8 +30,9 @@ ObjectOS 採取相反的立場。**你不遷移。你連線。** ## 一句話講清這個想法 -把 ObjectOS 指向你現有的資料庫,將你關心的資料表描述為物件,於是每一個 AI -Agent、流程、API 和儀表盤都立刻在這些資料上工作 —— 自動路由到正確的系統, +在自管部署的 ObjectOS(企業版,跑在你自己的基礎設施上、資料庫可達)裡,把 +ObjectOS 指向你現有的資料庫——預設只讀——將你關心的資料表描述為物件,於是每一個 +AI Agent、流程、API 和儀表盤都立刻在這些資料上工作 —— 自動路由到正確的系統, 並受你的使用者已經擁有的同一套權限治理。 原有的應用不會改變。資料行不會移動。ObjectOS 成為你已執行系統之上那層原生 diff --git a/content/blog/self-hosted-ai-app-platform/index.de.mdx b/content/blog/self-hosted-ai-app-platform/index.de.mdx index b57b570..6d48617 100644 --- a/content/blog/self-hosted-ai-app-platform/index.de.mdx +++ b/content/blog/self-hosted-ai-app-platform/index.de.mdx @@ -114,7 +114,7 @@ Je näher AI an den Betrieb kommt, desto klarer muss die Deployment-Grenze sein. Unklare Antworten deuten auf eine Demo-Schicht statt eine Produktionsschicht. -## ObjectStack Runtime und die optionale ObjectOS-Betriebsschicht +## ObjectStack Runtime und das darauf aufbauende ObjectOS Die quelloffene ObjectStack Runtime beginnt nicht damit, Unternehmensdaten in eine neue Cloud zu verschieben. diff --git a/content/blog/self-hosted-ai-app-platform/index.es.mdx b/content/blog/self-hosted-ai-app-platform/index.es.mdx index 9d8bc21..9fdae9b 100644 --- a/content/blog/self-hosted-ai-app-platform/index.es.mdx +++ b/content/blog/self-hosted-ai-app-platform/index.es.mdx @@ -114,7 +114,7 @@ Cuanto más cerca esté la AI de la operación, más claro debe ser el límite d Si las respuestas son vagas, quizá sea una capa de demo AI, no una capa empresarial de producción. -## ObjectStack Runtime y la capa operativa ObjectOS opcional +## ObjectStack Runtime y ObjectOS, construido sobre él El ObjectStack Runtime open source no empieza moviendo datos empresariales a una nueva nube. diff --git a/content/blog/self-hosted-ai-app-platform/index.fr.mdx b/content/blog/self-hosted-ai-app-platform/index.fr.mdx index a3e67db..01bda50 100644 --- a/content/blog/self-hosted-ai-app-platform/index.fr.mdx +++ b/content/blog/self-hosted-ai-app-platform/index.fr.mdx @@ -114,7 +114,7 @@ Plus l’AI se rapproche des opérations, plus la limite de déploiement doit ê Si les réponses sont floues, la plateforme est peut-être encore une couche de démonstration AI. -## ObjectStack Runtime et la couche d'exploitation ObjectOS optionnelle +## ObjectStack Runtime et ObjectOS, construit par-dessus L'ObjectStack Runtime open source ne commence pas par déplacer les données vers un nouveau cloud. diff --git a/content/blog/self-hosted-ai-app-platform/index.ja.mdx b/content/blog/self-hosted-ai-app-platform/index.ja.mdx index c6a1608..4e7feff 100644 --- a/content/blog/self-hosted-ai-app-platform/index.ja.mdx +++ b/content/blog/self-hosted-ai-app-platform/index.ja.mdx @@ -127,7 +127,7 @@ AI が実業務へ近づくほど、デプロイ境界は明確でなければ 答えが曖昧なら、その基盤は本番の企業層ではなく AI デモ層かもしれません。 -## ObjectStack Runtime と任意の ObjectOS 運用層 +## ObjectStack Runtime と、その上に構築された ObjectOS オープンソースの ObjectStack Runtime は、企業データを新しいクラウドへ移して AI を動かすことから始めません。 diff --git a/content/blog/self-hosted-ai-app-platform/index.ko.mdx b/content/blog/self-hosted-ai-app-platform/index.ko.mdx index d71abf4..cb28edb 100644 --- a/content/blog/self-hosted-ai-app-platform/index.ko.mdx +++ b/content/blog/self-hosted-ai-app-platform/index.ko.mdx @@ -114,7 +114,7 @@ AI가 실제 운영에 가까워질수록 배포 경계는 더 명확해야 합 답이 모호하다면 생산용 기업 계층이 아니라 AI 데모 계층일 수 있습니다. -## ObjectStack Runtime과 선택형 ObjectOS 운영 계층 +## ObjectStack Runtime과 그 위에 구축된 ObjectOS 오픈소스 ObjectStack Runtime은 기업 데이터를 새 클라우드로 옮겨 AI를 그 위에서 실행하는 방식으로 시작하지 않습니다. diff --git a/content/blog/self-hosted-ai-app-platform/index.mdx b/content/blog/self-hosted-ai-app-platform/index.mdx index 5b2ba28..4d3f097 100644 --- a/content/blog/self-hosted-ai-app-platform/index.mdx +++ b/content/blog/self-hosted-ai-app-platform/index.mdx @@ -167,7 +167,7 @@ When evaluating AI application platforms, ask: If these answers are unclear, the platform may still be an AI demo layer rather than a production enterprise layer. -## ObjectStack Runtime and the Optional ObjectOS Layer +## The ObjectStack Runtime, and ObjectOS Built on It The open-source ObjectStack Runtime does not start by moving enterprise data into a new cloud system so AI can work on top of it. diff --git a/content/blog/self-hosted-ai-app-platform/index.zh-Hans.mdx b/content/blog/self-hosted-ai-app-platform/index.zh-Hans.mdx index 9cc11eb..646fd59 100644 --- a/content/blog/self-hosted-ai-app-platform/index.zh-Hans.mdx +++ b/content/blog/self-hosted-ai-app-platform/index.zh-Hans.mdx @@ -165,7 +165,7 @@ tags: [] 如果这些问题回答不清,说明平台可能还停留在 AI 演示层,而不是企业生产层。 -## ObjectStack Runtime 与可选的 ObjectOS 运营层 +## ObjectStack Runtime,与建立在其上的 ObjectOS 开源的 ObjectStack Runtime 不是把企业数据搬到一个新的云端系统里,再让 AI 在上面工作。 diff --git a/content/blog/self-hosted-ai-app-platform/index.zh-Hant.mdx b/content/blog/self-hosted-ai-app-platform/index.zh-Hant.mdx index cf59803..94dcbed 100644 --- a/content/blog/self-hosted-ai-app-platform/index.zh-Hant.mdx +++ b/content/blog/self-hosted-ai-app-platform/index.zh-Hant.mdx @@ -166,7 +166,7 @@ tags: [] 如果這些問題回答不清,說明平臺可能還停留在 AI 演示層,而不是企業生產層。 -## ObjectStack Runtime 與可選的 ObjectOS 運營層 +## ObjectStack Runtime,與建立在其上的 ObjectOS 開源的 ObjectStack Runtime 不是把企業資料搬到一個新的雲端系統裡,再讓 AI 在上面工作。 diff --git a/content/glossary/en/application-metadata.ts b/content/glossary/en/application-metadata.ts index 52735b1..d2d0d94 100644 --- a/content/glossary/en/application-metadata.ts +++ b/content/glossary/en/application-metadata.ts @@ -10,7 +10,7 @@ const term = { 'Application metadata is the structured, typed definition of a business application — its objects, fields, relationships, views, permissions, workflows, actions, and APIs — stored as source files that a runtime reads and executes directly, rather than as generated application code.', explanation: [ 'The distinction that matters is not "config versus code" but what happens at run time. Generated code is a one-way export: once the generator has produced a controller, a form, and a migration, those artifacts drift apart and the original intent is gone. Metadata stays the live source. Change the permission rule in the definition file and the API, the UI, the audit log, and the agent tool all change with it, because all four are derived from that one declaration on every request.', - 'That property is what makes metadata the right target format for AI. A complete CRM expressed as metadata fits in roughly 150k tokens, so a coding agent can hold the whole system in one context window instead of guessing at a codebase it can only sample. And because the definitions are typed and schema-validated, a wrong field name or an unknown permission value fails at the validation gate rather than shipping as a runtime surprise.', + 'That property is what makes metadata the right target format for AI. An application expressed as metadata stays small enough for AI to hold whole — the objectstack README’s bundled CRM, objects through translations, loads end-to-end — so a coding agent reasons about the whole system instead of guessing at a codebase it can only sample. And because the definitions are typed and schema-validated, a wrong field name or an unknown permission value fails at the validation gate rather than shipping as a runtime surprise.', 'It is also what makes AI-written software reviewable. When an agent adds an approval step, the diff is a handful of readable lines in a definition file — not four hundred lines across a controller, a template, a migration, and a test. A reviewer with business authority but no interest in framework internals can read that diff, understand what changed about who may do what, and sign off.', ], alsoKnownAs: ['app metadata', 'metadata-driven application definition'], diff --git a/content/glossary/en/approval-workflow.ts b/content/glossary/en/approval-workflow.ts index e57ebbd..82743d9 100644 --- a/content/glossary/en/approval-workflow.ts +++ b/content/glossary/en/approval-workflow.ts @@ -10,7 +10,7 @@ const term = { 'An approval workflow is a business process in which a proposed change is held in a pending state until a person with the authority to decide records an explicit approval or rejection, so the change takes effect only after someone accountable has signed for it.', explanation: [ 'Approval workflows long predate workflow software — purchase requisitions, change advisory boards, credit committees and drug-trial sign-off all encode the same pattern. Three properties separate a real one from a notification that merely looks like one. The change must actually be blocked while the request is pending, rather than proceeding while an email sits unread. The decision must be attributable to a person who held the authority at the moment they decided, not to a shared mailbox. And routing must resolve against the organization rather than against names, because a chain wired to specific people is a chain that quietly breaks at the next reorganization and re-routes to someone who left. A process that satisfies none of these is a notification with a delay.', - 'In ObjectStack an approval is not a separate system but a durable node inside a flow: the run reaches the approval node, opens a request, suspends, and resumes down its approve or reject out-edge once a decision is recorded. Approvers are declared as a user, a role, a team, or the requester’s manager hierarchy, and resolve against live identity at request time — a position expands to whoever currently holds it. The step sets its own behavior, so one node can be "first response wins" and the next "unanimous"; lockRecord holds the record still so nobody edits past the reviewer; maxRevisions bounds the send-back loop so a request cannot orbit "please revise" forever; and onEmptyApprovers decides what happens when the slate resolves to nobody, defaulting to admin rescue rather than silently waving the record through. The decision is written to the audit ledger before the run advances, so no path exists that moves past an approval without a recorded decision. This is also the queue that AI-proposed structural changes land in — the diff itself becomes the request — which is what makes agent-written software something a person can sign for rather than discover afterwards.', + 'In ObjectStack an approval is not a separate system but a durable node inside a flow: the run reaches the approval node, opens a request, suspends, and resumes down its approve or reject out-edge once a decision is recorded. Approvers are declared as a user, a role, a team, or the requester’s manager hierarchy, and resolve against live identity at request time — a position expands to whoever currently holds it. The step sets its own behavior, so one node can be "first response wins" and the next "unanimous"; lockRecord holds the record still so nobody edits past the reviewer; maxRevisions bounds the send-back loop so a request cannot orbit "please revise" forever; and onEmptyApprovers decides what happens when the slate resolves to nobody, defaulting to admin rescue rather than silently waving the record through. The decision is written to the audit ledger before the run advances, so no path exists that moves past an approval without a recorded decision. AI-proposed structural changes get a reviewed path of their own: on ObjectOS the AI Builder’s metadata changes wait in a pending-action queue where the diff itself is the request and approving is its own permission, ai:approve — which is what makes agent-written software something a person can sign for rather than discover afterwards.', 'The question worth asking of any approval engine is where its deadline lives, and here the honest answer is narrow. A wait node in a flow has no timeout at all: two keys once claimed otherwise, and both were retired rather than left standing as a promise the runtime does not keep. Escalation exists only on the approval node, as a per-node SLA rather than a global timer service. Set timeoutHours and a sweep finds requests still pending past that many hours from creation and escalates each at most once ever, taking the configured action — notify, reassign, auto_approve or auto_reject — with escalateTo naming a user or a position expanded to its current holders, and the escalation audit row written first so a crashed or repeated sweep cannot double-fire. The design consequence is worth stating plainly: if a step must be time-bounded, model it as an approval with an SLA or drive the deadline from outside the flow. A plain wait will wait patiently, correctly, and forever.', ], alsoKnownAs: [ diff --git a/content/glossary/zh-Hans/application-metadata.ts b/content/glossary/zh-Hans/application-metadata.ts index 24268e9..e3067e7 100644 --- a/content/glossary/zh-Hans/application-metadata.ts +++ b/content/glossary/zh-Hans/application-metadata.ts @@ -10,7 +10,7 @@ const term = { '应用元数据是一个业务应用的结构化、类型化定义——它的对象、字段、关系、视图、权限、流程、动作和 API——以源文件形式保存,由运行时直接读取并执行,而不是先生成一份应用代码。', explanation: [ '真正的区别不在「配置还是代码」,而在运行时发生了什么。生成代码是一次性导出:生成器吐出控制器、表单和迁移脚本之后,这些产物就开始各自漂移,最初的意图也随之丢失。元数据则始终是活的源头。你在定义文件里改一条权限规则,API、界面、审计日志和 Agent 工具会同时跟着变——因为这四者都是在每一次请求时从那一条声明推导出来的。', - '这个性质正是元数据适合作为 AI 目标格式的原因。一个完整的 CRM 用元数据表达大约 15 万 token,编码 Agent 可以在一个上下文窗口里装下整个系统,而不是对着一个只能抽样阅读的代码库猜。又因为定义是类型化并经过 schema 校验的,写错字段名或写了一个不存在的权限值,会在校验关卡直接失败,而不是变成上线后的运行时惊喜。', + '这个性质正是元数据适合作为 AI 目标格式的原因。用元数据表达的应用小到 AI 能整体装下——objectstack README 自带的示例 CRM,从对象到翻译,能被 Agent 端到端读完——因此编码 Agent 推理的是整个系统,而不是对着一个只能抽样阅读的代码库猜。又因为定义是类型化并经过 schema 校验的,写错字段名或写了一个不存在的权限值,会在校验关卡直接失败,而不是变成上线后的运行时惊喜。', '它同样决定了 AI 写的软件能不能被审阅。Agent 加一个审批环节时,diff 就是定义文件里可读的几行——而不是分散在控制器、模板、迁移脚本和测试里的四百行。一个有业务决策权、但对框架内部毫无兴趣的审阅者,能读懂这份 diff,明白「谁可以做什么」变成了什么样,然后签字。', ], alsoKnownAs: ['应用程序元数据', '元数据驱动的应用定义'], diff --git a/content/glossary/zh-Hans/approval-workflow.ts b/content/glossary/zh-Hans/approval-workflow.ts index b561dc9..e09b26c 100644 --- a/content/glossary/zh-Hans/approval-workflow.ts +++ b/content/glossary/zh-Hans/approval-workflow.ts @@ -10,7 +10,7 @@ const term = { '审批流程是这样一种业务过程:一项提议中的变更被挂在待决状态,直到一个有权决断的人记录下明确的批准或拒绝,使这项变更只有在某个负得起责的人签过字之后才生效。', explanation: [ '审批流程远早于工作流软件——采购申请、变更评审委员会、授信委员会、药物试验放行,编码的都是同一个模式。有三个性质把真正的审批流程与「看起来像审批的通知」区分开来。变更必须在请求待决期间真的被挡住,而不是一封邮件躺在收件箱里没人读、事情照样往前走。决定必须可归属到一个在做决定的那一刻确实持有该权限的人,而不是归属到一个共享邮箱。以及路由必须对着组织解析,而不是对着人名——绑死在具体人身上的审批链,会在下一次组织调整时悄悄断掉,然后路由给一个已经离职的人。三条一条都不满足的,是一个带延迟的通知。', - '在 ObjectStack 里,审批不是一个独立系统,而是流程里的一个持久节点:运行到达审批节点,开出一个请求,挂起,等一条决定被记录下来之后,再沿它的 approve 或 reject 出边恢复。审批人可以声明为某个用户、某个角色、某个团队,或申请人的上级链,并在请求发起时对着实时身份解析——一个岗位会展开成当前持有它的人。每一步设定自己的行为,于是一个节点可以是「首个响应即生效」,下一个是「必须全票」;lockRecord 让记录在待决期间保持不动,没人能越过审阅者去改;maxRevisions 给退回修改的循环设上界,一个请求不会在「请修改」里永远打转;onEmptyApprovers 决定审批人名单解析为空时怎么办,默认交给管理员接管,而不是悄悄把记录放行。决定会在运行继续之前先写进审计账本,于是不存在任何一条「没有记录决定就越过审批」的路径。这也是 AI 提出的结构性变更所进入的同一个队列——那份 diff 本身就是请求——正是这一点,让 Agent 写出来的软件变成一个人可以签字的东西,而不是事后才发现的东西。', + '在 ObjectStack 里,审批不是一个独立系统,而是流程里的一个持久节点:运行到达审批节点,开出一个请求,挂起,等一条决定被记录下来之后,再沿它的 approve 或 reject 出边恢复。审批人可以声明为某个用户、某个角色、某个团队,或申请人的上级链,并在请求发起时对着实时身份解析——一个岗位会展开成当前持有它的人。每一步设定自己的行为,于是一个节点可以是「首个响应即生效」,下一个是「必须全票」;lockRecord 让记录在待决期间保持不动,没人能越过审阅者去改;maxRevisions 给退回修改的循环设上界,一个请求不会在「请修改」里永远打转;onEmptyApprovers 决定审批人名单解析为空时怎么办,默认交给管理员接管,而不是悄悄把记录放行。决定会在运行继续之前先写进审计账本,于是不存在任何一条「没有记录决定就越过审批」的路径。AI 提出的结构性变更另有一条受审路径:在 ObjectOS 上,AI Builder 的元数据变更在待审动作队列里等人,那份 diff 本身就是请求,批准是一项独立权限 ai:approve——正是这一点,让 Agent 写出来的软件变成一个人可以签字的东西,而不是事后才发现的东西。', '对任何审批引擎都值得追问的是:它的截止时间住在哪里?在这里,诚实的答案是范围很窄。流程里的 wait 节点完全没有超时:曾经有两个键声称有,两个都被退役了,而不是留着当一句运行时并不兑现的承诺。升级只存在于审批节点上,而且是逐节点的 SLA,不是一个全局定时服务。设置 timeoutHours,一次扫描会找出自创建起超过该小时数仍处于待决的请求并逐个升级,每个请求一生只升级一次,执行配置的 action——notify、reassign、auto_approve 或 auto_reject——escalateTo 指向一个用户或一个会展开成当前持有者的岗位,而升级的审计行先写,于是崩溃或重跑的扫描不会重复触发。由此得到的设计结论值得直说:如果某一步必须有时限,就把它建模成一个带 SLA 的审批,或者从流程外部驱动那个截止时间。一个光秃秃的 wait 会耐心地、正确地、永远等下去。', ], alsoKnownAs: ['审批流', '签核流程', '审批链', '多级审批'], diff --git a/content/pages/en/agent-developer.ts b/content/pages/en/agent-developer.ts index 106643a..dfcd202 100644 --- a/content/pages/en/agent-developer.ts +++ b/content/pages/en/agent-developer.ts @@ -1,34 +1,41 @@ import type { MarketingPage } from '../../../src/content-pages/types'; +import { positioning } from '../../../src/lib/positioning'; + +const p = positioning.en; const page = { slug: 'agent-developer', navLabel: 'Agent developer', title: 'Agent Developer Guide: How AI Writes ObjectStack Metadata', description: - 'Teach a coding agent the open ObjectStack target format, Strict TypeScript definitions, Zod schemas, validation gate, and whole-context proof needed to generate reviewable applications.', + 'The README path for a coding agent: npm create objectstack@latest writes an AGENTS.md, the agent writes typed metadata, os validate rejects what would fail at runtime, and npx os dev --ui renders the app for review.', eyebrow: 'Agent developer', heroTitle: 'Do not teach every developer to hand-write apps. Teach your agent the target format.', lead: - 'ObjectStack is the open target format and runtime for AI-written enterprise software, designed for the agent as writer and the human as reviewer. A complete CRM including UI fits under 150k tokens, so an agent can hold the whole app in one context; Strict TypeScript, Zod schemas, and a validation gate catch invalid output before it reaches the runtime.', - primary: { label: 'Read the docs', href: 'https://docs.objectos.ai' }, + `${p.t2} The agent is the writer and you are the reviewer: the scaffolder writes an AGENTS.md so the agent starts with the protocol’s rules loaded, Strict TypeScript, Zod schemas, and os validate reject invalid output before it reaches the runtime, and the whole app stays small enough for AI to hold whole.`, + primary: { label: 'Follow the README path', href: 'https://github.com/objectstack-ai/objectstack#try-it-in-five-minutes' }, secondary: { label: 'See template patterns', href: '/en/templates/' }, metrics: [ - { value: '<150k tokens', label: 'A complete CRM including UI — one context window' }, - { value: '<100k tokens', label: 'Objects, workflows, permissions, and business logic' }, - { value: '~50k tokens', label: 'UI metadata for the complete CRM' }, + { value: 'AGENTS.md', label: 'Written by the scaffolder, so the agent starts with the protocol’s rules loaded' }, + { value: '4 gates', label: 'Typed, validated, reviewed, governed — between the agent and your users' }, + { value: 'Held whole', label: 'Apps small enough for AI to hold whole — the bundled CRM loads end-to-end' }, ], artifact: { - eyebrow: 'Agent instruction', - title: 'A good rule file makes the target format explicit', + eyebrow: 'The README path', + title: 'Three commands, and your agent has the rules', body: - 'The most important developer artifact is not a tutorial for hand-coding screens. It is a compact, retrievable instruction set that tells the agent what to edit, what not to invent, which schemas must pass, and how to return both a reviewable diff and proof that it considered the whole application.', - code: `When building an ObjectStack app: -1. Model business objects before UI. -2. Write Strict TypeScript metadata that conforms to the published Zod schemas. -3. Prefer metadata definitions over generated application code. -4. Add conservative permissions and expose AI actions only through approved tools. -5. Run the validation gate before proposing deployment. -6. Return a small diff, reviewer checklist, and whole-context proof.`, + 'The scaffolder installs the AI skills bundle and writes an AGENTS.md, so the agent starts with the protocol’s rules already loaded — not with generic “write me some TypeScript” priors. Describe the requirement in Claude Code, Cursor, or Copilot; the agent writes typed metadata, not a codebase, and the gate rejects what would fail silently at runtime. Then preview the real app in the browser and ask for the next change on a diff you can read.', + code: `# 1 · Create a project: installs the AI skills bundle, writes AGENTS.md +npm create objectstack@latest my-app && cd my-app + +# 2 · Open it in Claude Code (or Cursor, Copilot, ...) and describe the need: +# "Build a support desk. Add a ticket object with subject, description, +# a priority select and a status select. Add a Resolve action that only +# shows on tickets that aren't already resolved. Add an Open tickets +# list view and a Support nav group. Run npm run validate when done." + +# 3 · Preview in the browser +npx os dev --ui # -> http://localhost:3000/_console/`, }, sections: [ { @@ -40,7 +47,7 @@ const page = { items: [ { title: '1. Provide operating context', - body: 'Give the agent the business process, object names, permission boundaries, workflow states, integration constraints, and the complete current definition. Under 150k tokens for a full CRM including UI, the app can be inspected as a whole instead of reconstructed from fragments.', + body: 'Give the agent the business process, object names, permission boundaries, workflow states, integration constraints, and the complete current definition. The app stays small enough for AI to hold whole — the README’s bundled CRM loads end-to-end — so it can be inspected as a whole instead of reconstructed from fragments.', meta: 'Context', }, { diff --git a/content/pages/en/ai.ts b/content/pages/en/ai.ts index 64c2260..1a77203 100644 --- a/content/pages/en/ai.ts +++ b/content/pages/en/ai.ts @@ -14,7 +14,7 @@ const page = { secondary: { label: 'See how agents write metadata', href: '/en/agent-developer/' }, metrics: [ { value: '2 paths', label: 'Build with a coding agent in source, or by conversation in the cloud' }, - { value: '<150k tokens', label: 'A complete CRM, including UI, held in one context window' }, + { value: 'Held whole', label: 'Apps small enough for AI to hold whole — the bundled CRM loads end-to-end' }, { value: 'Business+', label: 'AI action audit, guardrails, and permission scoping start on ObjectOS Business' }, ], artifact: { @@ -36,7 +36,7 @@ const page = { eyebrow: 'AI Build', title: 'Two ways to build — one reviewable definition', copy: - 'Whether the AI works in your repository or in an ObjectOS chat panel, the output is the same typed ObjectStack metadata a human reviews and owns. A complete CRM is under 150k tokens: business logic — objects, workflows, and permissions — stays under 100k, and UI metadata adds about 50k.', + 'Whether the AI works in your repository or in an ObjectOS chat panel, the output is the same typed ObjectStack metadata a human reviews and owns. The definition stays small enough for an agent to hold whole: the objectstack README’s bundled CRM — objects, views, a dashboard, a lead-conversion flow, permission sets, actions, translations — loads end-to-end and refactors in one change.', items: [ { title: 'In source, with your coding agent', @@ -86,7 +86,7 @@ const page = { items: [ { title: 'Agent writes source files', - body: 'Claude Code, Cursor, or any coding agent edits ObjectStack definitions in your repo; review happens as ordinary git diffs.', + body: 'npm create objectstack@latest scaffolds a project and writes an AGENTS.md, so Claude Code, Cursor, or any coding agent starts with the protocol’s rules loaded; it edits ObjectStack definitions in your repo, npx os dev --ui renders them, and review happens as ordinary git diffs.', }, { title: 'Any MCP client can ask', diff --git a/content/pages/en/analytics.ts b/content/pages/en/analytics.ts index a84da49..adfcbca 100644 --- a/content/pages/en/analytics.ts +++ b/content/pages/en/analytics.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'analytics', navLabel: 'Analytics & reporting', - title: 'ObjectOS Analytics: Dashboards and Reports over Governed Objects', + title: 'Analytics and Reporting: Dashboards and Reports over Governed Objects', description: 'Aggregations, time series, funnels, and dashboards over the same governed objects the app runs on — with a widget-based dashboard designer and a band-based report designer, permission-aware by construction.', eyebrow: 'Analytics & reporting', heroTitle: 'Answers from the system of record — not a second data stack.', lead: - 'Finance wants MRR by plan, month over month. Ops wants an SLA dashboard. The usual answer is exporting into a BI tool where permissions, definitions, and freshness quietly drift. ObjectOS runs the same questions over the governed objects themselves — defined once as a dataset, rendered in dashboards, and assembled in a designer.', - primary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, + 'Finance wants MRR by plan, month over month. Ops wants an SLA dashboard. The usual answer is exporting into a BI tool where permissions, definitions, and freshness quietly drift. The ObjectStack runtime runs the same questions over the governed objects themselves — defined once as a dataset, rendered in dashboards, and assembled in a designer — and on ObjectOS the “ask your data” assistant answers them in chat, inside the same permissions.', + primary: { label: 'Read the dashboards docs', href: 'https://docs.objectos.ai/docs/build/interface/dashboards' }, secondary: { label: 'See data modeling', href: '/en/data-modeling/' }, metrics: [ { value: '3', label: 'Query strategies: native SQL, ObjectQL, in-memory' }, @@ -149,9 +149,9 @@ export const MrrByPlan = defineReport({ 'For operational reporting on business objects, you will not need a separate stack: dashboards, funnels, and time series run in the platform. For cross-system warehousing, ObjectOS coexists — federation and APIs make governed objects easy to consume.', }, { - question: 'Are the dashboard and report designers in the open-source ObjectStack?', + question: 'What is open source here, and what does ObjectOS add?', answer: - 'Yes. The widget-based dashboard designer, the band-based report designer, drilldown, aggregations, time series, funnels, and semantic datasets are all part of the open-source ObjectStack runtime, with the same permission enforcement as the rest of the platform.', + 'Aggregations, time series, funnels, semantic datasets, drilldown, and the dashboard and report designers are part of the open-source ObjectStack runtime, Apache-2.0, with the same permission enforcement as the rest of the platform. ObjectOS adds the “ask your data” assistant: a question asked in chat is answered from the same datasets, inside the asking user’s permissions, with the query audited and guardrailed from Business. On the open runtime you ask the same questions through any MCP client with your own model.', }, ], } satisfies MarketingPage; diff --git a/content/pages/en/app-ui.ts b/content/pages/en/app-ui.ts index d61d732..15670e4 100644 --- a/content/pages/en/app-ui.ts +++ b/content/pages/en/app-ui.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'app-ui', navLabel: 'App interfaces', - title: 'ObjectOS App Interfaces: Permission-Aware Screens Rendered from Metadata', + title: 'App Interfaces: Permission-Aware Screens Rendered from Metadata', description: 'Forms, views, and dashboards render straight from metadata — shaped by each user’s permissions, updated in real time, and fine-tuned in a live-preview view designer with column inspectors and filter builders.', eyebrow: 'App interfaces', heroTitle: 'Screens nobody hand-builds. Views everyone trusts.', lead: - 'Take a support workbench: reps work a grid of open cases, the team lead drags a kanban grouped by status, and everyone checks the due-date calendar. In ObjectOS that is one view definition — rendered per user, live as records change, and adjustable in the view designer without touching a file.', - primary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, + 'Take a support workbench: reps work a grid of open cases, the team lead drags a kanban grouped by status, and everyone checks the due-date calendar. On the open-source ObjectStack runtime that is one view definition — rendered per user, live as records change, and adjustable in the view designer without touching a file. On ObjectOS, the in-app AI Builder registers the same views from a plain-language request.', + primary: { label: 'Read the interface docs', href: 'https://docs.objectos.ai/docs/build/interface' }, secondary: { label: 'See analytics & reporting', href: '/en/analytics/' }, metrics: [ { value: 'Zero', label: 'Hand-built frontend for list, form, and detail surfaces' }, @@ -160,9 +160,9 @@ export const CaseViews = defineView({ 'Yes. The generated surfaces cover the repetitive CRUD majority, and the same APIs and permission model back any custom frontend you add — custom screens never bypass governance.', }, { - question: 'Is the view designer in the open-source ObjectStack?', + question: 'What is open source here, and what does ObjectOS add?', answer: - 'Yes. The live-preview view designer, column and filter inspectors, the block-based page canvas, and the responsive page designer ship in the open-source ObjectStack console — alongside metadata-rendered views, forms, dashboards, navigation, localization, and real-time updates.', + 'The rendered views, forms, dashboards, navigation, localization, and real-time updates, plus the live-preview view designer, inspectors, page canvas, and responsive page designer, all ship in the open-source ObjectStack Console, Apache-2.0. ObjectOS adds the in-app AI Builder, which registers views — a kanban grouped by status, for instance — from a chat request and queues the change for approval; the open runtime leaves that work to your own coding agent and MCP client.', }, ], } satisfies MarketingPage; diff --git a/content/pages/en/approvals.ts b/content/pages/en/approvals.ts index ebc0c99..3e0c0eb 100644 --- a/content/pages/en/approvals.ts +++ b/content/pages/en/approvals.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'approvals', navLabel: 'Approvals', - title: 'ObjectOS Approvals: Multi-Step Sign-Off for Business Changes and AI Actions', + title: 'Approvals: Multi-Step Sign-Off for Business Changes and AI Actions', description: - 'Multi-step approvals with user, role, team, and hierarchy resolution, a three-tab approvals inbox, escalation, and record locking — the same queue that gates AI-written structural changes before they ship.', + 'Multi-step approvals with user, role, team, and hierarchy resolution, a three-tab approvals inbox, escalation, and record locking in the open-source console — and, on ObjectOS, a separate reviewed path for the AI Builder’s metadata changes: a pending-action queue with the diff, its own approve permission, and an audit entry.', eyebrow: 'Approvals', heroTitle: 'Every consequential change waits for a yes.', lead: - 'What does a 15%+ discount actually look like getting approved? The flow parks, the order locks, and finance sees the request in the approvals inbox — record snapshot, who did what when, all in one panel. Approve to release it, reject with a comment to send it back, and a stalled request escalates on its own. The schema change an AI just proposed rides the exact same queue.', - primary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, + 'What does a 15%+ discount actually look like getting approved? The flow parks, the order locks, and finance sees the request in the approvals inbox — record snapshot, who did what when, all in one panel. Approve to release it, reject with a comment to send it back, and a stalled request escalates on its own. A schema change the ObjectOS AI Builder just proposed waits the same way — in its own pending-action queue, where an approver reads the diff before it goes live.', + primary: { label: 'Read the approvals docs', href: 'https://docs.objectos.ai/docs/build/automation/approvals' }, secondary: { label: 'See permissions & security', href: '/en/permissions/' }, metrics: [ { value: '4 ways', label: 'Route to a user, role, team, or manager hierarchy' }, @@ -130,17 +130,17 @@ export const DiscountApproval = defineFlow({ { id: 'ai-gate', eyebrow: 'The AI governance gate', - title: 'The same queue that reviews people reviews AI', + title: 'People and AI are both reviewed before anything ships', copy: - 'This is the mechanism that makes AI-written software governable: structural changes from an agent do not ship — they queue.', + 'This is the mechanism that makes AI-written software governable: a structural change from an agent does not ship — it waits for a person. On the open runtime that is your git diff; on ObjectOS it is the AI Builder’s pending-action queue.', items: [ { title: 'Structural changes queue', - body: 'When an agent proposes new objects, fields, flows, or permission changes, the change lands in the same approvals inbox as a compact diff.', + body: 'When the ObjectOS AI Builder proposes new packages, objects, fields, actions, or flows, the change lands in a pending-action queue — separate from record approvals — where approvers see the proposed diff before clicking Approve; every approve or reject lands in the audit log with the originating conversation.', }, { title: 'The diff is the request', - body: 'Reviewers see exactly what would change — schema, authority, automation — not a description of it.', + body: 'Reviewers see exactly what would change — schema, authority, automation — not a description of it. Approving is its own permission, ai:approve: Setup Administrators hold it by default, and a permission set can scope it per package.', }, { title: 'Sensitive actions gated', @@ -155,7 +155,7 @@ export const DiscountApproval = defineFlow({ ['Discounts above 15% need finance', 'An approval step on the change', 'Routing, the inbox, locking, decision records'], ['Big refunds need two approvals', 'A multi-step chain', 'Sequenced sign-off with escalation and send-back'], ['Nothing stalls in one inbox', 'A timeout and an escalation path', 'Automatic escalation and reminders'], - ['AI schema changes get reviewed', 'The proposed diff itself', 'The approval queue in front of deployment'], + ['AI schema changes get reviewed', 'The proposed diff itself', 'The AI Builder’s pending-action queue, in front of deployment'], ], }, checklistTitle: 'An approval review should confirm', @@ -164,7 +164,7 @@ export const DiscountApproval = defineFlow({ 'Routing uses roles and hierarchy, not hardcoded people.', 'Timeouts and escalation are defined for every step.', 'Records lock while decisions are pending.', - 'AI-proposed structural changes cannot bypass the queue.', + 'AI-proposed structural changes cannot bypass review — the pending-action queue on ObjectOS, the git diff on the open runtime.', ], faqs: [ { @@ -173,9 +173,9 @@ export const DiscountApproval = defineFlow({ 'No — an approval is a durable step inside a flow. That keeps one execution model for the whole process: the flow pauses, people decide, the flow resumes.', }, { - question: 'Is the approvals inbox in the open-source ObjectStack?', + question: 'What is open source here, and what does ObjectOS add?', answer: - 'Yes. The three-tab inbox, side-panel timeline, comments, recall and return-for-revision, and keyboard shortcuts ship in the open-source ObjectStack console — alongside multi-step approvals, approver resolution, escalation, record locking, and the audit trail.', + 'Multi-step approvals, approver resolution, escalation, record locking, the audit trail, and the three-tab inbox with its side panel, comments, recall, return-for-revision, and keyboard shortcuts ship in the open-source ObjectStack Console, Apache-2.0. ObjectOS adds a second thing to approve: the in-app AI Builder’s metadata changes land in a pending-action queue where approvers see the proposed diff before clicking Approve — only Setup Administrators hold that permission by default — and every approve or reject lands in the audit log with the originating conversation.', }, ], } satisfies MarketingPage; diff --git a/content/pages/en/automation.ts b/content/pages/en/automation.ts index f291340..7ca8cfa 100644 --- a/content/pages/en/automation.ts +++ b/content/pages/en/automation.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'automation', navLabel: 'Process automation', - title: 'ObjectOS Automation: Flows, Triggers, Jobs, and Webhooks for Business Processes', + title: 'Process Automation: Flows, Triggers, Jobs, and Webhooks for Business Processes', description: 'Multi-step flows with durable pause and resume, a visual flow canvas with 16+ node types, run history with test triggers, three trigger types, background jobs, and outbox-backed webhook delivery.', eyebrow: 'Process automation', heroTitle: 'Processes that run themselves — and wait for people when they must.', lead: - 'Take one real process: an order books above ¥100k, finance must sign off, the ERP needs the result, and the owner wants to know. That is a branch, a human wait, an outbound call, and a notification — exactly the shape ObjectOS flows are built for: durable, multi-step, written as metadata by your agent or drawn on a canvas by your team.', - primary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, + 'Take one real process: an order books above $100k, finance must sign off, the ERP needs the result, and the owner wants to know. That is a branch, a human wait, an outbound call, and a notification — exactly the shape ObjectStack flows are built for: durable, multi-step, written as metadata by your agent or drawn on a canvas by your team, and on ObjectOS drafted by the in-app AI Builder from a plain-language request.', + primary: { label: 'Read the flows docs', href: 'https://docs.objectos.ai/docs/build/automation/flows' }, secondary: { label: 'See approvals', href: '/en/approvals/' }, metrics: [ { value: '16+', label: 'Typed nodes on the visual canvas — decision, wait, approval, script, subflow' }, @@ -75,13 +75,13 @@ export const EscalateBreachedCases = defineFlow({ { id: 'flows', eyebrow: 'Build the process', - title: 'Follow the ¥100k order through the flow', + title: 'Follow the $100k order through the flow', copy: 'Each step below is a typed node in the same definition — the parts that usually turn into unmaintainable worker code stay declarative and reviewable.', items: [ { title: 'Branch on business conditions', - body: 'A decision node routes the order: under ¥100k goes straight to fulfillment; above it takes the approval path. Conditions are expressions on real fields, not code in a worker.', + body: 'A decision node routes the order: under $100k goes straight to fulfillment; above it takes the approval path. Conditions are expressions on real fields, not code in a worker.', }, { title: 'Wait for finance — durably', @@ -163,7 +163,7 @@ export const EscalateBreachedCases = defineFlow({ table: { columns: ['Business need', 'AI writes', 'Runtime supplies'], rows: [ - ['Orders over ¥100k wait for finance', 'A decision node and an approval node', 'Durable waiting, queues, locking, resumption'], + ['Orders over $100k wait for finance', 'A decision node and an approval node', 'Durable waiting, queues, locking, resumption'], ['Escalate overdue cases nightly', 'A scheduled flow with conditions', 'Execution, retries, and run history'], ['Sync approved orders to the ERP', 'An http_request node behind the approval', 'Durable outbox, retries, delivery records'], ['Ops tunes the flow without a deploy', 'Nothing — the canvas edits the same metadata', 'The visual designer, validation, simulation'], @@ -185,9 +185,9 @@ export const EscalateBreachedCases = defineFlow({ 'Flow state is durable. A process waiting on a person or a timer resumes exactly where it paused — restarts and deploys do not lose or duplicate work.', }, { - question: 'Is the visual designer in the open-source ObjectStack?', + question: 'What is open source here, and what does ObjectOS add?', answer: - 'Yes. The flow canvas, node palette, validation, simulation, run history, and schedule previews ship in the open-source ObjectStack console — alongside flows, all three trigger types, background queues, and webhook delivery.', + 'Flows, all three trigger types, background queues, webhook delivery, and the flow canvas with its node palette, validation, simulation, run history, and schedule previews ship in the open-source ObjectStack Console, Apache-2.0. ObjectOS adds the in-app AI Builder, which drafts flows and actions from a plain-language request and queues every metadata change for human approval, plus AI governance — action audit, guardrails, permission scoping — from Business.', }, ], } satisfies MarketingPage; diff --git a/content/pages/en/customer-stories.ts b/content/pages/en/customer-stories.ts index 13b109f..8ba58eb 100644 --- a/content/pages/en/customer-stories.ts +++ b/content/pages/en/customer-stories.ts @@ -93,6 +93,7 @@ const page = { ['Procurement', 'Request, Supplier, PO, Invoice', 'Budget overrides, supplier risk, payment-impacting writes'], ['CRM workspace', 'Account, Opportunity, Case, Activity', 'Customer contact policy, field visibility, sales-stage changes'], ['Manufacturing', 'Asset, Work Order, Part, Inspection', 'Safety notes, maintenance state, inventory-impacting actions'], + ['Employee service', 'Policy, Request, Approval, Employee', 'Employee-data visibility, request routing, policy answers'], ], }, checklistTitle: 'Pilot selection checklist', diff --git a/content/pages/en/data-modeling.ts b/content/pages/en/data-modeling.ts index 227317a..fa9cef3 100644 --- a/content/pages/en/data-modeling.ts +++ b/content/pages/en/data-modeling.ts @@ -3,19 +3,19 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'data-modeling', navLabel: 'Data modeling', - title: 'ObjectOS Data Modeling: From Business Objects to Database and APIs', + title: 'Data Modeling: From Business Objects to Database and APIs', description: - 'Objects, relationships, validations, and formulas become tables, migrations, a query language, and REST APIs — with an object designer, an ER diagram, and datasource sync that federates existing databases in place.', + 'Objects, relationships, validations, and formulas become tables, migrations, a query language, and REST APIs — with an object designer, an ER diagram, and datasource sync that federates a database you already run, read-only by default.', eyebrow: 'Data modeling', heroTitle: 'Describe the business objects. The database and APIs follow.', lead: - 'Take a subscription-billing system: customers, plans, seats, MRR, renewal dates, status. In ObjectOS that is one compact object definition — tables, migrations, the query engine, and REST endpoints are supplied by the runtime. Your agent can write it, and your team can fine-tune it field by field in the object designer.', - primary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, + 'Take a subscription-billing system: customers, plans, seats, MRR, renewal dates, status. On the open-source ObjectStack runtime that is one compact object definition — tables, migrations, the query engine, and REST endpoints are supplied by the runtime. Your agent can write it, your team can fine-tune it field by field in the object designer, and on ObjectOS the in-app AI Builder drafts the same objects and fields from a plain-language request.', + primary: { label: 'Read the data modeling docs', href: 'https://docs.objectos.ai/docs/build/data' }, secondary: { label: 'See process automation', href: '/en/automation/' }, metrics: [ { value: '20+', label: 'Field types — text, currency, percent, lookup, formula, file' }, { value: 'Zero', label: 'Hand-written endpoints — REST APIs come from metadata' }, - { value: 'In place', label: 'Existing databases federate without migration' }, + { value: 'Read-only first', label: 'A database you already run federates in place — read-only by default, writes opt-in, and early' }, ], artifact: { eyebrow: 'The model is the source', @@ -100,7 +100,7 @@ export const Subscription = ObjectSchema.create({ }, { title: 'Datasource sync', - body: 'Connection forms generate from the driver’s schema, “Test connection” verifies it, then pick from the remote table list — introspect an existing ERP or CRM database and mount its tables as governed objects.', + body: 'Connection forms generate from the driver’s schema, “Test connection” verifies it, then pick from the remote table list — introspect an existing ERP or CRM database and mount its tables as governed objects, read-only by default; writes are enabled deliberately, per object.', }, ], }, @@ -136,7 +136,7 @@ export const Subscription = ObjectSchema.create({ ['Track subscriptions and customers', 'Objects, fields, relationships', 'Tables, migrations, referential integrity'], ['Seats can never be oversold', 'One validation expression', 'Enforcement on UI, API, imports, and AI writes'], ['An API for the mobile team', 'Nothing extra — the object is enough', 'REST endpoints with permissions and discovery'], - ['Use the ERP database we already have', 'A federation definition', 'Introspected external tables as governed objects'], + ['Use the ERP database we already have', 'A datasource binding, read-only to start', 'Introspected external tables as governed objects — reads first, writes opt-in per object'], ], }, checklistTitle: 'A data review should confirm', @@ -151,12 +151,12 @@ export const Subscription = ObjectSchema.create({ { question: 'Which databases can it run on?', answer: - 'Postgres, MySQL, SQLite, Turso, and MongoDB are supported today, and the data layer is driver-based. Federation can additionally mount tables from external databases without moving the data.', + 'Postgres, MySQL, SQLite, Turso, and MongoDB are supported today, and the data layer is driver-based. Federation can additionally mount tables from an external database without moving the data — read-only by default, and early: expect the read path to be the mature one.', }, { - question: 'Are the object designer and ER diagram in the open-source ObjectStack?', + question: 'What is open source here, and what does ObjectOS add?', answer: - 'Yes. The object designer, the ER data-model designer, and datasource sync ship in the open-source ObjectStack console — alongside objects, relationships, validations, formulas, migrations, the query engine, REST APIs, and file storage.', + 'All of the data layer: objects, relationships, validations, formulas, migrations, the query engine, REST APIs, file storage, and the object designer, ER diagram, and datasource sync in the Console — Apache-2.0, with no feature gate between development and production. ObjectOS adds the in-app AI Builder, whose built-in tools create packages and objects and add, modify, and delete fields from a chat, queued for human approval before they go live — on Cloud, Business Self-Managed, and Enterprise.', }, ], } satisfies MarketingPage; diff --git a/content/pages/en/forward-deployed-engineers.ts b/content/pages/en/forward-deployed-engineers.ts index 40422c6..7b38ebf 100644 --- a/content/pages/en/forward-deployed-engineers.ts +++ b/content/pages/en/forward-deployed-engineers.ts @@ -1,21 +1,24 @@ import type { MarketingPage } from '../../../src/content-pages/types'; +import { positioning } from '../../../src/lib/positioning'; + +const p = positioning.en; const page = { slug: 'forward-deployed-engineers', navLabel: 'For FDEs', title: 'Forward-Deployed Engineer Tools: An Ontology-First, Open-Source Stack', description: - 'ObjectStack gives FDEs an open target format and governed runtime for a client-owned open business ontology; ObjectOS is the optional commercial platform for production operations.', + `ObjectStack gives FDEs an Apache-2.0 runtime for a client-owned business ontology; ObjectOS is ${p.descriptor}, for clients who want in-app AI, hosted or self-managed delivery, and support.`, eyebrow: 'For forward-deployed engineers', heroTitle: 'Ship like the best FDE teams. Hand over what they never do: the ontology.', lead: - 'The forward-deployed model won: embed with the client, model their business, deliver working software fast. Its weak point is the handover — the ontology stays locked in a platform the client rents forever. ObjectStack makes the ontology a set of typed, open files in the client’s repo and runs it with governed runtime enforcement. ObjectOS is the optional commercial production platform for clients who want in-app AI, managed or private deployment, and support.', + `The forward-deployed model won: embed with the client, model their business, deliver working software fast. Its weak point is the handover — the ontology stays locked in a platform the client rents forever. ObjectStack makes the ontology a set of typed, open files in the client’s repo and runs it with governed runtime enforcement. ObjectOS is ${p.descriptor}: for clients who want the in-app AI Builder and Ask, hosted (Cloud) or self-managed (Business Self-Managed, Enterprise) delivery, and support.`, primary: { label: 'Start with ObjectStack', href: 'https://github.com/objectstack-ai/objectstack' }, secondary: { label: 'Read the FDE article', href: '/en/blog/forward-deployed-engineer-tools/' }, metrics: [ - { value: '<150k tokens', label: 'A complete CRM including UI — small enough to review whole' }, - { value: '<100k tokens', label: 'Client-owned objects, workflows, permissions, and business logic' }, - { value: '~50k tokens', label: 'UI metadata added to the complete CRM definition' }, + { value: 'Apache-2.0', label: 'No seat to resell — the client self-hosts the runtime at no license cost' }, + { value: '1 artifact', label: 'os compile builds one deployable JSON artifact; any ObjectStack runtime serves it' }, + { value: 'Held whole', label: 'Apps small enough for AI to hold whole — reviewable end to end' }, ], artifact: { eyebrow: 'The deliverable', @@ -72,7 +75,7 @@ const page = { }, { title: 'Security review reads the diff', - body: 'Permissions and audit are metadata. The client’s security team can review the complete definition — under 150k tokens for a full CRM, with business logic under 100k — instead of trusting a black-box platform boundary.', + body: 'Permissions and audit are metadata. The client’s security team can review the complete definition — small enough to hold whole, permissions and audit included — instead of trusting a black-box platform boundary.', }, { title: 'Any AI, under governance', @@ -91,14 +94,14 @@ const page = { ['Where the ontology lives', 'Inside the vendor’s platform', 'Typed files in the client’s repo (Apache-2.0)'], ['What the client pays for', 'Platform seats, indefinitely', 'ObjectOS production operations — or self-host ObjectStack at no license cost'], ['Who maintains it later', 'Vendor-trained specialists', 'Any coding agent plus a human reviewer'], - ['AI access', 'Platform-native assistants only', 'Open MCP — Claude, Cursor, local models'], + ['AI access', 'Set by the vendor’s roadmap', 'Open MCP, on by default — Claude, Cursor, local models'], ['Security review', 'Trust the platform boundary', 'Read the diff — permissions and audit are metadata'], ], }, checklistTitle: 'FDE engagement checklist', checklist: [ 'Model the client’s nouns and verbs as objects and flows before any UI conversation.', - 'Keep the whole definition under the 150k-token complete-app budget, so your agent can reason about and refactor it whole.', + 'Keep the whole definition small enough for your agent to hold whole, so it can reason about and refactor it in one change.', 'Default permissions conservative; make every authority change explicit in the diff.', 'Hand over the repo, the compiled artifact, and a review checklist — not a login to your tenant.', 'Leave MCP enabled so the client’s own AI can operate the app under their permissions.', @@ -112,7 +115,7 @@ const page = { { question: 'Do I need ObjectOS to serve clients?', answer: - 'No. ObjectStack is an open-source target format and runtime; its runtime can be self-hosted at no license cost, with Console and governance included. ObjectOS is the commercial production platform for clients who want the browser-based AI Builder, managed cloud or private Enterprise deployment, team operations, and support.', + `No. ObjectStack is Apache-2.0 — the protocol, kernel, CLI, production runtime, Console UI, and MCP server — with no feature gate between development and production, so a client can self-host it at no license cost. ObjectOS is ${p.descriptor}: clients buy it for the in-app AI Builder and Ask, AI governance from Business, hosted Cloud or self-managed delivery (Business Self-Managed on a single node; Enterprise for clustering, air-gapped operation, and SCIM), and official support.`, }, ], } satisfies MarketingPage; diff --git a/content/pages/en/mcp.ts b/content/pages/en/mcp.ts index bbb92f4..c20a1bb 100644 --- a/content/pages/en/mcp.ts +++ b/content/pages/en/mcp.ts @@ -1,4 +1,7 @@ import type { MarketingPage } from '../../../src/content-pages/types'; +import { positioning } from '../../../src/lib/positioning'; + +const p = positioning.en; const page = { slug: 'mcp', @@ -9,9 +12,9 @@ const page = { eyebrow: 'Tools & MCP', heroTitle: 'Your business objects, as governed tools for any AI.', lead: - 'Most companies wire AI to their data with handwritten glue that bypasses every control they have. The ObjectStack runtime generates governed tools from metadata instead: whatever your model — Claude, Cursor, or something fully local — it works through the same permissions, approvals, and audit as your people. ObjectOS adds the production operations around that same app.', - primary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, - secondary: { label: 'Read the docs', href: 'https://docs.objectos.ai' }, + `Most companies wire AI to their data with handwritten glue that bypasses every control they have. The ObjectStack runtime generates governed tools from metadata instead: whatever your model — Claude, Cursor, or something fully local — it works through the same permissions, approvals, and audit as your people. The MCP server ships in the open framework and is on by default in every edition; ObjectOS is ${p.descriptor}, and runs the same server.`, + primary: { label: 'Read the MCP docs', href: 'https://docs.objectos.ai/docs/configure/mcp' }, + secondary: { label: 'Point your agent at ObjectStack', href: '/en/agent-developer/' }, metrics: [ { value: 'Auto-wired', label: 'Query, schema, and action tools register themselves from your objects' }, { value: 'Any client', label: 'Claude, Cursor, local models, or your own agent runtime' }, diff --git a/content/pages/en/permissions.ts b/content/pages/en/permissions.ts index 3f3df29..19bf0a4 100644 --- a/content/pages/en/permissions.ts +++ b/content/pages/en/permissions.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'permissions', navLabel: 'Permissions & security', - title: 'ObjectOS Permissions: Role, Row, and Field-Level Control for AI-Written Apps', + title: 'Permissions: Role, Row, and Field-Level Control for AI-Written Apps', description: 'Role-based, row-level, and field-level access control with a permission matrix editor and an audit log viewer, record sharing, and tenant isolation — enforced on people and AI agents alike.', eyebrow: 'Permissions & security', heroTitle: 'Who sees what, who changes what — enforced at runtime.', lead: - 'Take a sales organization: reps see only their team’s accounts, the cost field is masked for them, managers see the whole region, and audit wants to know who changed that discount. In ObjectOS that boundary is one reviewable definition — enforced on every query, API call, and AI tool call.', - primary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, + 'Take a sales organization: reps see only their team’s accounts, the cost field is masked for them, managers see the whole region, and audit wants to know who changed that discount. On the ObjectStack runtime that boundary is one reviewable definition — enforced on every query, API call, and AI tool call, whether the agent is your own over MCP or ObjectOS’s in-app AI.', + primary: { label: 'Read the permissions docs', href: 'https://docs.objectos.ai/docs/configure/permissions' }, secondary: { label: 'Review the trust model', href: '/en/trust-center/' }, metrics: [ { value: '3 layers', label: 'Object, record, and field-level control in one model' }, @@ -108,7 +108,7 @@ const page = { eyebrow: 'AI under the same rules', title: 'Agents get your permission model, not a service account', copy: - 'The fastest way to lose control of AI is to give it superuser access. ObjectOS never does: every agent action runs as the signed-in user who asked for it.', + 'The fastest way to lose control of AI is to give it superuser access. The ObjectStack runtime never does: every agent action runs as the signed-in user who asked for it.', items: [ { title: 'User-scoped execution', @@ -149,9 +149,9 @@ const page = { 'No. Agents act as the signed-in user and inherit that user’s object, row, and field permissions. There is no privileged AI identity to leak or misuse.', }, { - question: 'Are the permission matrix and audit viewer in the open-source ObjectStack?', + question: 'What is open source here, and what does ObjectOS add?', answer: - 'Yes. The permission matrix editor and the audit log viewer ship in the open-source ObjectStack console — alongside roles, row rules, field security, sharing, tenant isolation, and the audit log itself, all of which apply equally to MCP tool access.', + 'Roles and permission sets, row-level rules, field security, sharing, tenant isolation, the audit log, and the permission matrix editor and audit log viewer in the Console are all open-source ObjectStack, Apache-2.0, and apply equally to MCP tool access. ObjectOS adds AI governance for its in-app AI from Business — action audit, guardrails, and permission scoping — and makes approving the AI Builder’s changes its own permission, one you can scope per package in a permission set.', }, ], } satisfies MarketingPage; diff --git a/content/pages/en/platform.ts b/content/pages/en/platform.ts index 7e88c98..ad53559 100644 --- a/content/pages/en/platform.ts +++ b/content/pages/en/platform.ts @@ -11,12 +11,12 @@ const page = { eyebrow: 'Platform', heroTitle: 'Everything a business system needs. Ready for production.', lead: `Your agent describes the business as one typed ObjectStack ontology. The open ObjectStack runtime derives the database, APIs, permission-aware screens, automated processes, approval queues, and dashboards, enforcing governance on every call. ${p.t4}`, - primary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, - secondary: { label: 'Take the product tour', href: '/en/product-tour/' }, + primary: { label: 'Point your agent at ObjectStack', href: '/en/agent-developer/' }, + secondary: { label: 'Compare editions and pricing', href: '/en/pricing/' }, metrics: [ - { value: '25+', label: 'Runtime services behind every deployed application' }, + { value: '12', label: 'Typed primitives in the runtime vocabulary, from objects and permissions to AI tools and datasources' }, { value: '6', label: 'Capability areas, from data modeling to analytics' }, - { value: '<150k tokens', label: 'A complete CRM including UI, held in one context window' }, + { value: '4 gates', label: 'Typed, validated, reviewed, governed — between the agent and your users' }, ], artifact: { eyebrow: 'Typed metadata your agent writes', @@ -96,7 +96,7 @@ export const Order = ObjectSchema.create({ eyebrow: 'Built for AI', title: 'Designed to be written by agents, reviewed by people', copy: - 'Every ObjectStack capability above is defined as metadata, which is what makes metadata driven development work when the author is an AI: a whole-context definition, readable diffs, and runtime enforcement. ObjectOS adds the in-app AI and production experience for teams.', + `Every ObjectStack capability above is defined as metadata, which is what makes metadata driven development work when the author is an AI: a whole-context definition, readable diffs, and runtime enforcement. ObjectOS, ${p.descriptor}, adds the in-app AI Builder and Ask on top of that open mechanism, with AI governance from Business and hosted or self-managed delivery.`, items: [ { title: 'AI Build & Ask', @@ -112,7 +112,7 @@ export const Order = ObjectSchema.create({ }, { title: 'Designers & console', - body: '16+ open-source ObjectStack admin surfaces — the object designer, flow canvas, approvals inbox, permission matrix, and audit viewer — so people fine-tune everything the AI drafts.', + body: 'The open-source Console renders the real app and Studio authors the same metadata visually — the object designer, flow canvas, approvals inbox, permission matrix, and audit viewer — so people fine-tune everything the AI drafts.', }, { title: 'The review loop', @@ -136,12 +136,12 @@ export const Order = ObjectSchema.create({ { question: 'Which capabilities are in the open-source ObjectStack?', answer: - 'The runtime capabilities on this page — data, UI, automation, approvals, permissions, analytics — are part of the open-source ObjectStack target format and runtime. You bring your own AI: a coding agent writes metadata as source files and any MCP client can query your objects. The in-app AI Build and Ask assistants are ObjectOS Cloud and Enterprise capabilities.', + 'The runtime capabilities on this page — data, UI, automation, approvals, permissions, analytics — are part of open-source ObjectStack, Apache-2.0: the protocol, kernel, CLI, production runtime, Console UI, and MCP server, with no feature gate between development and production. You bring your own AI: a coding agent writes metadata as source files and any MCP client can query your objects. The in-app AI Builder and Ask are what ObjectOS adds — on Cloud, Business Self-Managed, and Enterprise.', }, { question: 'Can it run in our own infrastructure?', answer: - 'Yes. The open-source ObjectStack runtime can be self-hosted. ObjectOS Enterprise also supports private deployment in a VPC, on local servers, or in air-gapped networks, with local models, internal identity, your own secret management, and enterprise support.', + 'Yes, three ways. The open-source ObjectStack runtime self-hosts free, with bring-your-own AI over MCP. ObjectOS Business Self-Managed is a licensed single-node deployment that puts the in-app AI on your own infrastructure, bring your own model or key. ObjectOS Enterprise is the full private deployment — a VPC, local servers, or an air-gapped network — with clustering, local models, internal identity, your own secret management, and enterprise support.', }, ], } satisfies MarketingPage; diff --git a/content/pages/en/product-tour.ts b/content/pages/en/product-tour.ts index 6162b22..54413a5 100644 --- a/content/pages/en/product-tour.ts +++ b/content/pages/en/product-tour.ts @@ -15,9 +15,9 @@ const page = { primary: { label: 'Point your agent at ObjectStack', href: '/en/agent-developer/' }, secondary: { label: 'Review the trust model', href: '/en/trust-center/' }, metrics: [ - { value: '<150k tokens', label: 'A complete CRM including UI — one context window' }, - { value: '<100k tokens', label: 'Objects, workflows, permissions, and business logic' }, - { value: '~50k tokens', label: 'The UI metadata for the complete CRM' }, + { value: '4 gates', label: 'Typed, validated, reviewed, governed — between the agent and your users' }, + { value: '1 definition', label: 'Database, REST API, client SDK, UI, and MCP tools all follow from it' }, + { value: 'Held whole', label: 'Apps small enough for AI to hold whole — the bundled CRM loads end-to-end' }, ], artifact: { eyebrow: 'Review surface', @@ -91,13 +91,13 @@ export const Case = ObjectSchema.create({ { id: 'connect', eyebrow: 'Existing systems', - title: 'Add an object layer without replacing systems of record', + title: 'Add an object layer beside systems of record — read-only by default', copy: - 'Most enterprise software value is already trapped in databases, ERP, CRM, ticketing, files, and custom systems. ObjectStack gives agents an explicit object model over that estate; ObjectOS gives teams a production platform for operating apps built on it.', + `Most enterprise software value is already trapped in databases, ERP, CRM, ticketing, files, and custom systems. ObjectStack can federate a database you already run as an external datasource and give agents an explicit object model over it — read-only by default, and early; the system of record keeps writing the rows. ObjectOS is ${p.descriptor}, where teams run and operate the apps built on that model.`, items: [ { - title: 'Connect databases and APIs', - body: 'Map existing records into business objects, relationships, calculated fields, and actions without forcing a rip-and-replace migration.', + title: 'Connect the database you already run', + body: 'Connect it as a datasource — a readOnly datasource or a read-only database user to start — and model the tables you care about as objects, relationships, calculated fields, and actions; writes are enabled deliberately, per object, once you trust the model.', }, { title: 'Keep authority explicit', diff --git a/content/pages/en/trust-center.ts b/content/pages/en/trust-center.ts index 49a96de..9883e1e 100644 --- a/content/pages/en/trust-center.ts +++ b/content/pages/en/trust-center.ts @@ -80,7 +80,7 @@ const page = { columns: ['Review area', 'Available now', 'Enterprise packet'], rows: [ ['Deployment', 'Self-hosted open-source ObjectStack runtime', 'VPC, private network, air-gapped deployment notes'], - ['Identity', 'Project identity and permission metadata', 'SSO, SCIM, admin roles, session policy mapping'], + ['Identity', 'Project identity and permission metadata; SSO / SAML from ObjectOS Business', 'SCIM and identity lifecycle, admin roles, session policy mapping'], ['AI governance', 'MCP tools, object permissions, approvals', 'Model routing policy and prompt/data boundary report'], ['Audit', 'Runtime audit design and metadata review', 'Exportable audit retention and investigation workflow'], ], diff --git a/content/pages/zh-Hans/agent-developer.ts b/content/pages/zh-Hans/agent-developer.ts index 71f9c5f..47e579d 100644 --- a/content/pages/zh-Hans/agent-developer.ts +++ b/content/pages/zh-Hans/agent-developer.ts @@ -1,34 +1,41 @@ import type { MarketingPage } from '../../../src/content-pages/types'; +import { positioning } from '../../../src/lib/positioning'; + +const p = positioning['zh-Hans']; const page = { slug: 'agent-developer', navLabel: 'Agent 开发指南', title: 'Agent 开发指南:AI 如何编写 ObjectStack 元数据', description: - '教会编码 Agent 使用开放 ObjectStack 目标格式、Strict TypeScript 定义、Zod schema、validation gate 与整体上下文证明,生成可审阅应用。', + '编码 Agent 的 README 路径:npm create objectstack@latest 写入 AGENTS.md,Agent 编写类型化元数据,os validate 拒掉运行时会失败的东西,npx os dev --ui 把应用渲染出来供人审阅。', eyebrow: 'Agent 开发指南', heroTitle: '别教每个开发者手写应用。教你的 Agent 目标格式。', lead: - 'ObjectStack 是 AI 编写企业软件的开放目标格式与运行时,面向“Agent 编写、人审阅”设计。完整 CRM 全应用(含 UI)小于 150k tokens,Agent 能在一个上下文里掌握全局;Strict TypeScript、Zod schema 与 validation gate 会在无效输出进入运行时前将其拦下。', - primary: { label: '阅读文档', href: 'https://docs.objectos.ai' }, + `${p.t2}Agent 是作者,你是审阅者:脚手架写入 AGENTS.md,让 Agent 一开始就带着协议规则;Strict TypeScript、Zod schema 与 os validate 会在无效输出进入运行时前将其拒掉;整个应用小到 AI 能整体装下。`, + primary: { label: '照 README 路径走', href: 'https://github.com/objectstack-ai/objectstack#try-it-in-five-minutes' }, secondary: { label: '查看模板模式', href: '/en/templates/' }, metrics: [ - { value: '<150k tokens', label: '完整 CRM 全应用(含 UI),一个上下文窗口' }, - { value: '<100k tokens', label: '对象、流程、权限与其他业务逻辑' }, - { value: '约 50k tokens', label: '完整 CRM 的 UI 元数据' }, + { value: 'AGENTS.md', label: '由脚手架写入,Agent 一开始就带着协议规则' }, + { value: '4 道闸门', label: '类型化、校验、审阅、治理——横在 Agent 与你的用户之间' }, + { value: '整体装下', label: '应用小到 AI 能整体装下——README 自带的示例 CRM 可端到端读完' }, ], artifact: { - eyebrow: 'Agent 指令', - title: '一份好的规则文件把目标格式写得明明白白', + eyebrow: 'README 路径', + title: '三条命令,你的 Agent 就有了规则', body: - '最重要的开发者产物不是一篇手写界面的教程,而是一份紧凑、可检索的指令集:告诉 Agent 该改什么、不该发明什么、必须通过哪些 schema,以及如何同时返回可审阅 diff 与“已考虑整个应用”的证明。', - code: `When building an ObjectStack app: -1. Model business objects before UI. -2. Write Strict TypeScript metadata that conforms to the published Zod schemas. -3. Prefer metadata definitions over generated application code. -4. Add conservative permissions and expose AI actions only through approved tools. -5. Run the validation gate before proposing deployment. -6. Return a small diff, reviewer checklist, and whole-context proof.`, + '脚手架安装 AI skills 包并写入 AGENTS.md,Agent 一开始就带着协议规则,而不是泛泛的“给我写点 TypeScript”先验。在 Claude Code、Cursor 或 Copilot 里描述需求;Agent 写的是类型化元数据而不是代码库,闸门会拒掉运行时会静默失败的东西。然后在浏览器里预览真实应用,并在一份读得懂的 diff 上提出下一次变更。', + code: `# 1 · 创建项目:安装 AI skills 包,写入 AGENTS.md +npm create objectstack@latest my-app && cd my-app + +# 2 · 用 Claude Code(或 Cursor、Copilot……)打开它,描述业务需求: +# “搭一个支持台。加一个 ticket 对象,有 subject、description、 +# priority 选择和 status 选择。加一个只在未解决工单上显示的 +# Resolve 动作。加一个 Open tickets 列表视图和 Support 导航组。 +# 做完跑 npm run validate。” + +# 3 · 在浏览器里预览 +npx os dev --ui # -> http://localhost:3000/_console/`, }, sections: [ { @@ -40,7 +47,7 @@ const page = { items: [ { title: '1. 提供运营上下文', - body: '把业务流程、对象命名、权限边界、流程状态、集成约束与完整的当前定义交给 Agent。完整 CRM 全应用(含 UI)小于 150k tokens,因此可以被整体检视,无需从碎片里拼凑。', + body: '把业务流程、对象命名、权限边界、流程状态、集成约束与完整的当前定义交给 Agent。应用小到 AI 能整体装下——README 自带的示例 CRM 可端到端读完——因此可以被整体检视,无需从碎片里拼凑。', meta: '上下文', }, { diff --git a/content/pages/zh-Hans/ai.ts b/content/pages/zh-Hans/ai.ts index 8962b0f..dc90d0e 100644 --- a/content/pages/zh-Hans/ai.ts +++ b/content/pages/zh-Hans/ai.ts @@ -14,7 +14,7 @@ const page = { secondary: { label: '看 Agent 如何编写元数据', href: '/en/agent-developer/' }, metrics: [ { value: '2 条路径', label: '在源码里用编码 Agent,或在云端用对话' }, - { value: '<150k tokens', label: '完整 CRM 全应用(含 UI),一个上下文窗口可容纳' }, + { value: '整体装下', label: '应用小到 AI 能整体装下——README 自带的示例 CRM 可端到端读完' }, { value: 'Business 起', label: 'AI 动作审计、护栏与权限限定从 ObjectOS Business 开始提供' }, ], artifact: { @@ -36,7 +36,7 @@ const page = { eyebrow: 'AI Build', title: '两种构建方式,同一份可审阅的定义', copy: - '无论 AI 是在你的代码仓库里工作,还是在 ObjectOS 聊天面板里工作,产出都是由人审阅并拥有的同一种 ObjectStack 类型化元数据。完整 CRM 全应用小于 150k tokens:对象、流程、权限等业务逻辑小于 100k,UI 元数据约 50k。', + '无论 AI 是在你的代码仓库里工作,还是在 ObjectOS 聊天面板里工作,产出都是由人审阅并拥有的同一种 ObjectStack 类型化元数据。整份定义小到 Agent 能整体装下:objectstack README 自带的示例 CRM——对象、视图、仪表盘、线索转化流程、权限集、动作、翻译——可以端到端读完,并在一次变更里整体重构。', items: [ { title: '在源码里,用你的编码 Agent', @@ -86,7 +86,7 @@ const page = { items: [ { title: 'Agent 写源码文件', - body: 'Claude Code、Cursor 或任意编码 Agent 直接编辑仓库中的 ObjectStack 定义,审阅就是普通的 git diff。', + body: 'npm create objectstack@latest 生成项目并写入 AGENTS.md,Claude Code、Cursor 或任意编码 Agent 一开始就带着协议规则;它直接编辑仓库中的 ObjectStack 定义,npx os dev --ui 把它渲染出来,审阅就是普通的 git diff。', }, { title: '任意 MCP 客户端可问询', diff --git a/content/pages/zh-Hans/analytics.ts b/content/pages/zh-Hans/analytics.ts index 0c57be8..a9644a5 100644 --- a/content/pages/zh-Hans/analytics.ts +++ b/content/pages/zh-Hans/analytics.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'analytics', navLabel: '报表与分析', - title: 'ObjectOS 分析:在受治理对象上做仪表盘与报表', + title: '报表与分析:在受治理对象上做仪表盘与报表', description: '在应用运行的同一批受治理对象上做聚合、时间序列、漏斗和仪表盘——配备小部件式仪表盘设计器与分节式报表设计器,权限感知是构造出来的。', eyebrow: '报表与分析', heroTitle: '答案来自记录系统本身——而不是第二套数据栈。', lead: - '财务要看按套餐分的 MRR 逐月走势,运营要一块 SLA 仪表盘。常见做法是导出到 BI 工具——权限、口径和新鲜度在那里悄悄漂移。ObjectOS 直接在受治理对象上回答这些问题:数据集定义一次,仪表盘渲染,设计器组装。', - primary: { label: '对比版本与定价', href: '/en/pricing/' }, + '财务要看按套餐分的 MRR 逐月走势,运营要一块 SLA 仪表盘。常见做法是导出到 BI 工具——权限、口径和新鲜度在那里悄悄漂移。ObjectStack 运行时直接在受治理对象上回答这些问题:数据集定义一次,仪表盘渲染,设计器组装;在 ObjectOS 上,“数据问询”助手还能在聊天里、在同一套权限内回答它们。', + primary: { label: '阅读仪表盘文档', href: 'https://docs.objectos.ai/docs/build/interface/dashboards' }, secondary: { label: '查看数据建模', href: '/en/data-modeling/' }, metrics: [ { value: '3 种', label: '查询策略:原生 SQL、ObjectQL、内存计算' }, @@ -149,9 +149,9 @@ export const MrrByPlan = defineReport({ '对业务对象上的运营报表,你不再需要一套独立栈:仪表盘、漏斗和时间序列都跑在平台内。跨系统的数据仓库场景 ObjectOS 与之共存——联邦与 API 让受治理对象很容易被消费。', }, { - question: '仪表盘和报表设计器在开源 ObjectStack 里吗?', + question: '这里哪些是开源的,ObjectOS 又加了什么?', answer: - '在。小部件式仪表盘设计器、分节式报表设计器、下钻、聚合、时间序列、漏斗与语义数据集都是开源 ObjectStack 运行时的一部分,权限执行与平台其他部分完全一致。', + '聚合、时间序列、漏斗、语义数据集、下钻,以及仪表盘与报表设计器,都是开源 ObjectStack 运行时的一部分,Apache-2.0,权限执行与平台其他部分完全一致。ObjectOS 加的是“数据问询”助手:在聊天里提的问题从同一批数据集得到回答,范围以提问者的权限为界,查询从商业版起受审计与护栏约束。在开源运行时上,同样的问题经任意 MCP 客户端用你自己的模型来问。', }, ], } satisfies MarketingPage; diff --git a/content/pages/zh-Hans/app-ui.ts b/content/pages/zh-Hans/app-ui.ts index 7aaf0e4..7ee01ef 100644 --- a/content/pages/zh-Hans/app-ui.ts +++ b/content/pages/zh-Hans/app-ui.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'app-ui', navLabel: '应用界面', - title: 'ObjectOS 应用界面:从元数据渲染的权限感知界面', + title: '应用界面:从元数据渲染的权限感知界面', description: '表单、视图和仪表盘直接从元数据渲染——按每个用户的权限成形、实时更新,并可在带实时预览的视图设计器里用列检查器与筛选构建器微调。', eyebrow: '应用界面', heroTitle: '没人手写的界面,人人信得过的视图。', lead: - '拿一个客服工作台来说:客服在网格里处理待办工单,主管拖着按状态分组的看板,所有人都会看截止日历。在 ObjectOS 里这是一份视图定义——按用户渲染、随记录实时变化,还能在视图设计器里调整,不碰一个文件。', - primary: { label: '对比版本与定价', href: '/en/pricing/' }, + '拿一个客服工作台来说:客服在网格里处理待办工单,主管拖着按状态分组的看板,所有人都会看截止日历。在开源 ObjectStack 运行时上这是一份视图定义——按用户渲染、随记录实时变化,还能在视图设计器里调整,不碰一个文件。在 ObjectOS 上,产品内 AI Builder 能从一句描述注册出同样的视图。', + primary: { label: '阅读界面文档', href: 'https://docs.objectos.ai/docs/build/interface' }, secondary: { label: '查看报表与分析', href: '/en/analytics/' }, metrics: [ { value: '0', label: '列表、表单、详情页——没有手写前端' }, @@ -160,9 +160,9 @@ export const CaseViews = defineView({ '能。生成的界面覆盖重复度最高的 CRUD 主体,同一套 API 与权限模型支撑你添加的任何定制前端——定制界面绕不过治理。', }, { - question: '视图设计器在开源 ObjectStack 里吗?', + question: '这里哪些是开源的,ObjectOS 又加了什么?', answer: - '在。带实时预览的视图设计器、列与筛选检查器、积木式页面画布和响应式页面设计器都随开源 ObjectStack 控制台发布——连同元数据渲染的视图、表单、仪表盘、导航、多语言与实时更新。', + '元数据渲染的视图、表单、仪表盘、导航、多语言与实时更新,以及带实时预览的视图设计器、检查器、页面画布和响应式页面设计器,都随开源 ObjectStack Console 发布,Apache-2.0。ObjectOS 加的是产品内 AI Builder:它能从一句对话请求注册视图——比如一个按状态分组的看板——并把变更排队等审批;在开源运行时上,这件事交给你自己的编码 Agent 与 MCP 客户端。', }, ], } satisfies MarketingPage; diff --git a/content/pages/zh-Hans/approvals.ts b/content/pages/zh-Hans/approvals.ts index de3f0ee..31dd302 100644 --- a/content/pages/zh-Hans/approvals.ts +++ b/content/pages/zh-Hans/approvals.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'approvals', navLabel: '审批', - title: 'ObjectOS 审批:业务变更与 AI 动作的多级签核', + title: '审批:业务变更与 AI 动作的多级签核', description: - '多级审批,按用户、角色、团队与管理层级解析审批人,配备三页签审批收件箱、升级与记录锁定——AI 编写的结构性变更在上线前也要过同一个队列。', + '多级审批,按用户、角色、团队与管理层级解析审批人,配备三页签审批收件箱、升级与记录锁定,都在开源控制台里;在 ObjectOS 上,AI Builder 的元数据变更另走一条受审路径:带 diff 的待审动作队列、独立的批准权限与审计记录。', eyebrow: '审批', heroTitle: '每个有分量的变更,都要等一个"同意"。', lead: - '一笔超过 15% 的折扣批下来是什么样?流程停驻、订单锁定,财务在审批收件箱里看到请求——记录快照、谁在什么时候做了什么,一目了然;批准放行,驳回带评论退回,超时自动升级。AI 刚提议的 schema 变更,走的也是这同一个队列。', - primary: { label: '对比版本与定价', href: '/en/pricing/' }, + '一笔超过 15% 的折扣批下来是什么样?流程停驻、订单锁定,财务在审批收件箱里看到请求——记录快照、谁在什么时候做了什么,一目了然;批准放行,驳回带评论退回,超时自动升级。ObjectOS AI Builder 刚提议的 schema 变更也同样要等——在它自己的待审动作队列里,审批人读完 diff 才会生效。', + primary: { label: '阅读审批文档', href: 'https://docs.objectos.ai/docs/build/automation/approvals' }, secondary: { label: '查看权限与安全', href: '/en/permissions/' }, metrics: [ { value: '4 种路由', label: '指定用户、角色、团队或管理层级' }, @@ -130,17 +130,17 @@ export const DiscountApproval = defineFlow({ { id: 'ai-gate', eyebrow: 'AI 治理闸门', - title: '审人的队列,同样审 AI', + title: '人和 AI 都要过审,才有东西上线', copy: - '这就是让 AI 编写的软件可治理的机制:Agent 提出的结构性变更不会直接上线——它们排队。', + '这就是让 AI 编写的软件可治理的机制:Agent 提出的结构性变更不会直接上线——它要等人。在开源运行时上,等的是你的 git diff;在 ObjectOS 上,等的是 AI Builder 的待审动作队列。', items: [ { title: '结构性变更排队', - body: 'Agent 提议新对象、字段、流程或权限变更时,变更以紧凑 diff 的形式落入同一个审批收件箱。', + body: 'ObjectOS AI Builder 提议新的包、对象、字段、动作或流程时,变更落入一个独立于记录审批的待审动作队列,审批人在点击批准前看到提议的 diff;每一次批准或驳回都连同发起它的对话写入审计日志。', }, { title: 'diff 就是请求本身', - body: '审阅者看到的正是将要发生的变化——schema、权限、自动化——而不是一段转述。', + body: '审阅者看到的正是将要发生的变化——schema、权限、自动化——而不是一段转述。批准是一项独立权限 ai:approve:默认只有 Setup Administrator 持有,也可以在权限集里按包限定范围。', }, { title: '敏感动作也设闸', @@ -155,7 +155,7 @@ export const DiscountApproval = defineFlow({ ['15% 以上的折扣要过财务', '变更上的一个审批步骤', '路由、收件箱、锁定、决策记录'], ['大额退款需要两级批准', '一条多级审批链', '按序签核,带升级与退回修改'], ['不让流程卡死在一个收件箱', '一个超时与升级路径', '自动升级与提醒'], - ['AI 的 schema 变更必须有人审', '提议的 diff 本身', '部署之前的那道审批队列'], + ['AI 的 schema 变更必须有人审', '提议的 diff 本身', 'AI Builder 的待审动作队列,横在部署之前'], ], }, checklistTitle: '审批评审应确认', @@ -164,7 +164,7 @@ export const DiscountApproval = defineFlow({ '路由基于角色与层级,而不是写死的人名。', '每一步都定义了超时与升级。', '决策未定时记录被锁定。', - 'AI 提议的结构性变更无法绕过队列。', + 'AI 提议的结构性变更无法绕过审阅——ObjectOS 上是待审动作队列,开源运行时上是 git diff。', ], faqs: [ { @@ -173,9 +173,9 @@ export const DiscountApproval = defineFlow({ '不是——审批是流程里的一个持久步骤。整个过程只有一个执行模型:流程暂停,人来决定,流程继续。', }, { - question: '审批收件箱在开源 ObjectStack 里吗?', + question: '这里哪些是开源的,ObjectOS 又加了什么?', answer: - '在。三页签收件箱、侧栏时间线、评论、撤回与退回修改、键盘快捷键,连同多级审批、审批人解析、升级、记录锁定与审计轨迹,都是开源 ObjectStack 的一部分。', + '多级审批、审批人解析、升级、记录锁定、审计轨迹,以及三页签收件箱连同侧栏、评论、撤回、退回修改和键盘快捷键,都随开源 ObjectStack Console 发布,Apache-2.0。ObjectOS 加的是第二类要审的东西:产品内 AI Builder 的元数据变更会进入待审动作队列,审批人在点击批准前看到提议的 diff——默认只有 Setup Administrator 持有这项权限——每一次批准或驳回都连同发起它的对话写入审计日志。', }, ], } satisfies MarketingPage; diff --git a/content/pages/zh-Hans/automation.ts b/content/pages/zh-Hans/automation.ts index 2ac2ad8..a53bb4e 100644 --- a/content/pages/zh-Hans/automation.ts +++ b/content/pages/zh-Hans/automation.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'automation', navLabel: '流程自动化', - title: 'ObjectOS 自动化:面向业务流程的流程、触发器、作业与 Webhook', + title: '流程自动化:面向业务流程的流程、触发器、作业与 Webhook', description: '支持持久暂停与恢复的多步流程,带 16+ 类型节点的可视化流程画布,带测试触发的运行历史,三类触发器,后台作业与 outbox 背书的 Webhook 投递。', eyebrow: '流程自动化', heroTitle: '流程自己跑——该等人的时候,等人。', lead: - '拿一个真实流程来说:订单金额超过 10 万,财务必须签核,结果要同步 ERP,负责人要收到通知。这就是一次分支、一次人工等待、一次对外调用和一条通知——恰好是 ObjectOS 流程为之而生的形状:持久、多步,你的 Agent 用元数据写出来,你的团队在画布上画出来。', - primary: { label: '对比版本与定价', href: '/en/pricing/' }, + '拿一个真实流程来说:订单金额超过 10 万,财务必须签核,结果要同步 ERP,负责人要收到通知。这就是一次分支、一次人工等待、一次对外调用和一条通知——恰好是 ObjectStack 流程为之而生的形状:持久、多步,你的 Agent 用元数据写出来,你的团队在画布上画出来,在 ObjectOS 上还能由产品内 AI Builder 从一句描述起草出来。', + primary: { label: '阅读流程文档', href: 'https://docs.objectos.ai/docs/build/automation/flows' }, secondary: { label: '查看审批', href: '/en/approvals/' }, metrics: [ { value: '16+', label: '画布上的类型化节点——判断、等待、审批、脚本、子流程' }, @@ -185,9 +185,9 @@ export const EscalateBreachedCases = defineFlow({ '流程状态是持久的。等待某个人或某个定时器的流程会从暂停处精确恢复——重启和部署不会丢失或重复任何工作。', }, { - question: '可视化设计器在开源 ObjectStack 里吗?', + question: '这里哪些是开源的,ObjectOS 又加了什么?', answer: - '在。流程画布、节点面板、校验、模拟、运行历史和调度预览都随开源 ObjectStack 控制台发布——连同流程、全部三类触发器、后台队列和 Webhook 投递。', + '流程、全部三类触发器、后台队列、Webhook 投递,以及流程画布连同节点面板、校验、模拟、运行历史和调度预览,都随开源 ObjectStack Console 发布,Apache-2.0。ObjectOS 加的是产品内 AI Builder——从一句描述起草流程与动作,并把每一次元数据变更排队等人审批——以及从商业版起的 AI 治理:动作审计、护栏、权限限定。', }, ], } satisfies MarketingPage; diff --git a/content/pages/zh-Hans/customer-stories.ts b/content/pages/zh-Hans/customer-stories.ts index fa9d02d..11f8f03 100644 --- a/content/pages/zh-Hans/customer-stories.ts +++ b/content/pages/zh-Hans/customer-stories.ts @@ -93,6 +93,7 @@ const page = { ['采购', '申请、供应商、PO、发票', '预算突破、供应商风险、影响付款的写入'], ['CRM 工作台', '客户、商机、案件、活动', '客户触达政策、字段可见性、销售阶段变更'], ['制造', '资产、工单、备件、点检', '安全记录、维护状态、影响库存的动作'], + ['员工服务', '制度、申请、审批、员工', '员工数据可见性、申请路由、制度问答'], ], }, checklistTitle: '试点选择清单', diff --git a/content/pages/zh-Hans/data-modeling.ts b/content/pages/zh-Hans/data-modeling.ts index 7f90fff..b029a11 100644 --- a/content/pages/zh-Hans/data-modeling.ts +++ b/content/pages/zh-Hans/data-modeling.ts @@ -3,19 +3,19 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'data-modeling', navLabel: '数据建模', - title: 'ObjectOS 数据建模:从业务对象到数据库与 API', + title: '数据建模:从业务对象到数据库与 API', description: - '对象、关系、校验和公式自动变成表、迁移、查询语言和 REST API——配备对象设计器、ER 图和数据源同步,现有数据库可原地联邦接入。', + '对象、关系、校验和公式自动变成表、迁移、查询语言和 REST API——配备对象设计器、ER 图和数据源同步,已在运行的数据库可联邦接入,默认只读。', eyebrow: '数据建模', heroTitle: '描述业务对象,数据库和 API 随之而来。', lead: - '以一个订阅计费系统为例:客户、套餐、席位、MRR、续约日、状态。在 ObjectOS 里,这就是一份紧凑的对象定义——表、迁移、查询引擎和 REST 端点由运行时供给;你的 Agent 能写它,你的团队能在对象设计器里逐字段微调它。', - primary: { label: '对比版本与定价', href: '/en/pricing/' }, + '以一个订阅计费系统为例:客户、套餐、席位、MRR、续约日、状态。在开源 ObjectStack 运行时上,这就是一份紧凑的对象定义——表、迁移、查询引擎和 REST 端点由运行时供给;你的 Agent 能写它,你的团队能在对象设计器里逐字段微调它,而在 ObjectOS 上,产品内 AI Builder 能从一句描述起草出同样的对象与字段。', + primary: { label: '阅读数据建模文档', href: 'https://docs.objectos.ai/docs/build/data' }, secondary: { label: '查看流程自动化', href: '/en/automation/' }, metrics: [ { value: '20+', label: '字段类型——文本、货币、百分比、lookup、公式、文件' }, { value: '0', label: '手写端点——REST API 直接来自元数据' }, - { value: '原地', label: '现有数据库无需迁移即可联邦接入' }, + { value: '先只读', label: '已在运行的数据库原地联邦接入——默认只读、写权限按需开启、尚在早期' }, ], artifact: { eyebrow: '模型即源码', @@ -100,7 +100,7 @@ export const Subscription = ObjectSchema.create({ }, { title: '数据源同步', - body: '连接表单按驱动自动生成,点"测试连接"验证,再从远程表清单里勾选——introspect 现有 ERP/CRM 数据库,外部表直接生成受治理对象。', + body: '连接表单按驱动自动生成,点"测试连接"验证,再从远程表清单里勾选——introspect 现有 ERP/CRM 数据库,外部表直接生成受治理对象,默认只读;写权限按对象有意开启。', }, ], }, @@ -136,7 +136,7 @@ export const Subscription = ObjectSchema.create({ ['管理订阅与客户', '对象、字段、关系', '表、迁移、引用完整性'], ['席位数不能超卖', '一条表达式校验规则', '在 UI、API、导入和 AI 写入上强制执行'], ['给移动团队一个 API', '不用多写——对象本身就够了', '带权限与发现的 REST 端点'], - ['继续用手里的 ERP 数据库', '一份联邦定义', 'introspect 外部表,挂载为受治理对象'], + ['继续用手里的 ERP 数据库', '一个数据源绑定,起步只读', 'introspect 外部表,挂载为受治理对象——先读,写权限按对象开启'], ], }, checklistTitle: '数据评审应确认', @@ -151,12 +151,12 @@ export const Subscription = ObjectSchema.create({ { question: '支持哪些数据库?', answer: - '目前支持 Postgres、MySQL、SQLite、Turso 和 MongoDB,数据层基于驱动架构。联邦还能在不搬移数据的情况下挂载外部数据库的表。', + '目前支持 Postgres、MySQL、SQLite、Turso 和 MongoDB,数据层基于驱动架构。联邦还能在不搬移数据的情况下挂载外部数据库的表——默认只读、尚在早期:读路径是成熟的那一条。', }, { - question: '对象设计器和 ER 图在开源 ObjectStack 里吗?', + question: '这里哪些是开源的,ObjectOS 又加了什么?', answer: - '在。对象设计器、ER 数据模型设计器、数据源同步,连同对象、关系、校验、公式、迁移、查询引擎、REST API 与文件存储,都是开源 ObjectStack 的一部分。', + '整个数据层都是开源的:对象、关系、校验、公式、迁移、查询引擎、REST API、文件存储,以及 Console 里的对象设计器、ER 图和数据源同步——Apache-2.0,开发与生产之间没有功能门槛。ObjectOS 加的是产品内 AI Builder:它的内置工具能从一段对话创建包与对象、增删改字段,并在生效前排队等人审批——在 Cloud、Business Self-Managed 与 Enterprise 上提供。', }, ], } satisfies MarketingPage; diff --git a/content/pages/zh-Hans/forward-deployed-engineers.ts b/content/pages/zh-Hans/forward-deployed-engineers.ts index f24e057..f6316dc 100644 --- a/content/pages/zh-Hans/forward-deployed-engineers.ts +++ b/content/pages/zh-Hans/forward-deployed-engineers.ts @@ -1,21 +1,24 @@ import type { MarketingPage } from '../../../src/content-pages/types'; +import { positioning } from '../../../src/lib/positioning'; + +const p = positioning['zh-Hans']; const page = { slug: 'forward-deployed-engineers', navLabel: '面向 FDE', title: 'FDE(前沿部署工程师)工具箱:本体优先的开源技术栈', description: - 'ObjectStack 为 FDE 提供开放目标格式与受治理运行时,让开放业务本体归客户所有;ObjectOS 是可选的商业生产运营平台。', + `ObjectStack 为 FDE 提供 Apache-2.0 运行时,让业务本体归客户所有;ObjectOS 是${p.descriptor},面向需要产品内 AI、托管或自管交付与支持的客户。`, eyebrow: '面向前沿部署工程师', heroTitle: '像最强的 FDE 团队那样交付,并交出他们从不交出的东西:本体。', lead: - '前沿部署模式已经胜出:嵌入客户现场、建模业务、快速交付能用的软件。它的弱点在交接——本体被锁在客户要永远租用的平台里。ObjectStack 把本体变成客户仓库里的类型化开放文件,并由其运行时受治理地执行。ObjectOS 是可选的商业生产平台,面向需要产品内 AI、托管或私有部署与支持的客户。', + `前沿部署模式已经胜出:嵌入客户现场、建模业务、快速交付能用的软件。它的弱点在交接——本体被锁在客户要永远租用的平台里。ObjectStack 把本体变成客户仓库里的类型化开放文件,并由其运行时受治理地执行。ObjectOS 是${p.descriptor}:面向需要产品内 AI Builder 与 Ask、托管(Cloud)或自管(Business Self-Managed、Enterprise)交付与支持的客户。`, primary: { label: '从 ObjectStack 开始', href: 'https://github.com/objectstack-ai/objectstack' }, secondary: { label: '阅读 FDE 专文', href: '/en/blog/forward-deployed-engineer-tools/' }, metrics: [ - { value: '<150k tokens', label: '完整 CRM 全应用(含 UI),小到客户能整体审阅' }, - { value: '<100k tokens', label: '客户所有的对象、流程、权限与其他业务逻辑' }, - { value: '约 50k tokens', label: '完整 CRM 定义中的 UI 元数据' }, + { value: 'Apache-2.0', label: '没有席位可转售——客户零 license 成本自托管运行时' }, + { value: '1 个制品', label: 'os compile 编译出一个可部署的 JSON 制品,任何 ObjectStack 运行时都能运行' }, + { value: '整体装下', label: '应用小到 AI 能整体装下——可端到端审阅' }, ], artifact: { eyebrow: '交付物', @@ -72,7 +75,7 @@ const page = { }, { title: '安全评审直接读 diff', - body: '权限与审计就是元数据。客户安全团队可以审阅完整定义——完整 CRM 全应用小于 150k tokens,业务逻辑小于 100k——而不是信任一个黑盒平台边界。', + body: '权限与审计就是元数据。客户安全团队可以审阅完整定义——小到能整体装下,权限与审计都在其中——而不是信任一个黑盒平台边界。', }, { title: '任何 AI,都在治理内', @@ -91,14 +94,14 @@ const page = { ['本体在哪里', '锁在供应商平台内', '客户仓库里的类型化文件(Apache-2.0)'], ['客户为什么付费', '平台席位,无限期', 'ObjectOS 生产运营——或零 license 自托管 ObjectStack'], ['之后谁来维护', '供应商培训的专家', '任意编码智能体 + 人工评审'], - ['AI 接入', '仅平台自带助手', '开放 MCP——Claude、Cursor、本地模型'], + ['AI 接入', '由供应商的路线图决定', '开放 MCP,默认开启——Claude、Cursor、本地模型'], ['安全评审', '信任平台边界', '直接读 diff——权限与审计就是元数据'], ], }, checklistTitle: 'FDE 项目检查清单', checklist: [ '先把客户的名词和动词建模成对象与流程,再谈任何界面。', - '让整个定义保持在 150k-token 的全应用预算内,Agent 才能整体推理、整体重构。', + '让整个定义小到你的 Agent 能整体装下,它才能在一次变更里整体推理、整体重构。', '权限默认从严;每一次权限变更都要在 diff 里显式可见。', '交接的是仓库、编译制品和评审清单——不是你租户里的一个账号。', '保持 MCP 开启,让客户自己的 AI 在其权限内操作应用。', @@ -112,7 +115,7 @@ const page = { { question: '服务客户必须用 ObjectOS 吗?', answer: - '不必须。ObjectStack 是开源目标格式与运行时;其运行时可零 license 成本自托管,Console 与治理齐全。ObjectOS 是面向需要浏览器内 AI Builder、托管云或私有企业版部署、团队运营与支持的客户的商业生产平台。', + `不必须。ObjectStack 采用 Apache-2.0——协议、内核、CLI、生产运行时、Console UI 与 MCP 服务器——开发与生产之间没有功能门槛,客户可以零 license 成本自托管。ObjectOS 是${p.descriptor}:客户买它是为了产品内 AI Builder 与 Ask、从商业版起的 AI 治理、托管 Cloud 或自管交付(Business Self-Managed 单节点;Enterprise 提供集群、离线隔离与 SCIM),以及官方支持。`, }, ], } satisfies MarketingPage; diff --git a/content/pages/zh-Hans/mcp.ts b/content/pages/zh-Hans/mcp.ts index b84139a..b361b73 100644 --- a/content/pages/zh-Hans/mcp.ts +++ b/content/pages/zh-Hans/mcp.ts @@ -1,4 +1,7 @@ import type { MarketingPage } from '../../../src/content-pages/types'; +import { positioning } from '../../../src/lib/positioning'; + +const p = positioning['zh-Hans']; const page = { slug: 'mcp', @@ -9,9 +12,9 @@ const page = { eyebrow: '工具与 MCP', heroTitle: '你的业务对象,成为任意 AI 的受治理工具。', lead: - '多数公司用手写的胶水代码把 AI 接到数据上,绕过了自己建立的所有控制。ObjectStack 运行时则直接从元数据生成受治理工具:无论你的模型是 Claude、Cursor 还是完全本地的模型,它都走和员工一样的权限、审批与审计。ObjectOS 为同一应用增加生产运营体验。', - primary: { label: '对比版本与定价', href: '/en/pricing/' }, - secondary: { label: '阅读文档', href: 'https://docs.objectos.ai' }, + `多数公司用手写的胶水代码把 AI 接到数据上,绕过了自己建立的所有控制。ObjectStack 运行时则直接从元数据生成受治理工具:无论你的模型是 Claude、Cursor 还是完全本地的模型,它都走和员工一样的权限、审批与审计。MCP 服务器随开源框架发布,在每个版本中默认开启;ObjectOS 是${p.descriptor},跑的是同一个服务器。`, + primary: { label: '阅读 MCP 文档', href: 'https://docs.objectos.ai/docs/configure/mcp' }, + secondary: { label: '把你的 Agent 指向 ObjectStack', href: '/en/agent-developer/' }, metrics: [ { value: '自动接线', label: '查询、schema 和动作工具从你的对象自动注册' }, { value: '任意客户端', label: 'Claude、Cursor、本地模型或你自己的 Agent 运行时' }, diff --git a/content/pages/zh-Hans/permissions.ts b/content/pages/zh-Hans/permissions.ts index 9973398..c14c549 100644 --- a/content/pages/zh-Hans/permissions.ts +++ b/content/pages/zh-Hans/permissions.ts @@ -3,14 +3,14 @@ import type { MarketingPage } from '../../../src/content-pages/types'; const page = { slug: 'permissions', navLabel: '权限与安全', - title: 'ObjectOS 权限:为 AI 编写的应用提供角色、行级与字段级控制', + title: '权限:为 AI 编写的应用提供角色、行级与字段级控制', description: '基于角色、行级与字段级的访问控制,配备权限矩阵编辑器与审计日志查看器,支持记录共享、租户隔离——对人和 AI Agent 同等强制执行。', eyebrow: '权限与安全', heroTitle: '谁能看什么、谁能改什么——在运行时强制执行。', lead: - '拿一个销售组织来说:代表只能看自己团队的客户,成本价字段对他们脱敏,经理能看整个大区,审计随时要查"这条折扣谁改的"。在 ObjectOS 里,这套边界是一份可审阅的定义——在每一次查询、API 调用和 AI 工具调用上强制执行。', - primary: { label: '对比版本与定价', href: '/en/pricing/' }, + '拿一个销售组织来说:代表只能看自己团队的客户,成本价字段对他们脱敏,经理能看整个大区,审计随时要查"这条折扣谁改的"。在 ObjectStack 运行时上,这套边界是一份可审阅的定义——在每一次查询、API 调用和 AI 工具调用上强制执行,无论 Agent 是你自己经 MCP 接入的,还是 ObjectOS 的产品内 AI。', + primary: { label: '阅读权限文档', href: 'https://docs.objectos.ai/docs/configure/permissions' }, secondary: { label: '查看信任模型', href: '/en/trust-center/' }, metrics: [ { value: '3 层', label: '对象、记录、字段三级控制,一个模型' }, @@ -108,7 +108,7 @@ const page = { eyebrow: 'AI 同规', title: 'Agent 拿到的是你的权限模型,不是服务账号', copy: - '失去 AI 控制最快的方式就是给它超级用户权限。ObjectOS 从不这么做:每个 Agent 动作都以发起它的登录用户身份执行。', + '失去 AI 控制最快的方式就是给它超级用户权限。ObjectStack 运行时从不这么做:每个 Agent 动作都以发起它的登录用户身份执行。', items: [ { title: '用户级执行', @@ -149,9 +149,9 @@ const page = { '没有。Agent 以登录用户身份行动,继承该用户的对象、行级与字段级权限。不存在可被泄露或滥用的特权 AI 身份。', }, { - question: '权限矩阵和审计查看器在开源 ObjectStack 里吗?', + question: '这里哪些是开源的,ObjectOS 又加了什么?', answer: - '在。权限矩阵编辑器、审计日志查看器,连同角色、行级规则、字段级安全、共享、租户隔离与审计日志本身,都是开源 ObjectStack 的一部分,并同等适用于 MCP 工具访问。', + '角色与权限集、行级规则、字段级安全、共享、租户隔离、审计日志,以及 Console 里的权限矩阵编辑器与审计日志查看器,都是开源 ObjectStack,Apache-2.0,并同等适用于 MCP 工具访问。ObjectOS 加的是从商业版起为其产品内 AI 提供的 AI 治理——动作审计、护栏、权限限定——并把“批准 AI Builder 的变更”做成一项独立权限,可以在权限集里按包限定范围。', }, ], } satisfies MarketingPage; diff --git a/content/pages/zh-Hans/platform.ts b/content/pages/zh-Hans/platform.ts index a3f2e97..d3ac86a 100644 --- a/content/pages/zh-Hans/platform.ts +++ b/content/pages/zh-Hans/platform.ts @@ -11,12 +11,12 @@ const page = { eyebrow: '平台总览', heroTitle: '一个业务系统需要的一切,随时可投入生产。', lead: `你的 Agent 用一份类型化的 ObjectStack 本体描述业务。开放的 ObjectStack 运行时派生数据库、API、权限感知的界面、自动化流程、审批队列和仪表盘,并在每次调用中强制治理。${p.t4}`, - primary: { label: '对比版本与定价', href: '/en/pricing/' }, - secondary: { label: '查看产品导览', href: '/en/product-tour/' }, + primary: { label: '把你的 Agent 指向 ObjectStack', href: '/en/agent-developer/' }, + secondary: { label: '对比版本与定价', href: '/en/pricing/' }, metrics: [ - { value: '25+', label: '每个已部署应用背后的运行时服务' }, + { value: '12', label: '运行时词汇里的类型化原语,从对象与权限到 AI 工具与数据源' }, { value: '6', label: '能力域,从数据建模到报表分析' }, - { value: '<150k tokens', label: '完整 CRM 全应用(含 UI),一个上下文窗口可容纳' }, + { value: '4 道闸门', label: '类型化、校验、审阅、治理——横在 Agent 与你的用户之间' }, ], artifact: { eyebrow: 'Agent 编写的类型化元数据', @@ -96,7 +96,7 @@ export const Order = ObjectSchema.create({ eyebrow: '为 AI 而设计', title: '让 Agent 来写,让人来审', copy: - '上面每一项 ObjectStack 能力都以元数据定义——这正是「元数据驱动开发」在作者是 AI 时依然成立的原因:整体可装入上下文的定义、可读 diff 与运行时强制执行。ObjectOS 则为团队增加产品内 AI 与生产运营体验。', + `上面每一项 ObjectStack 能力都以元数据定义——这正是「元数据驱动开发」在作者是 AI 时依然成立的原因:整体可装入上下文的定义、可读 diff 与运行时强制执行。ObjectOS 是${p.descriptor},在这套开放机制之上增加产品内 AI Builder 与 Ask,从商业版起提供 AI 治理,并提供托管或自管交付。`, items: [ { title: 'AI Build & Ask', @@ -112,7 +112,7 @@ export const Order = ObjectSchema.create({ }, { title: '设计器与控制台', - body: '16+ 个开源 ObjectStack 管理界面——对象设计器、流程画布、审批收件箱、权限矩阵、审计查看器——AI 起草的一切,人都能微调。', + body: '开源的 Console 渲染真实应用,Studio 以可视化方式编写同一份元数据——对象设计器、流程画布、审批收件箱、权限矩阵、审计查看器——AI 起草的一切,人都能微调。', }, { title: '审阅闭环', @@ -136,12 +136,12 @@ export const Order = ObjectSchema.create({ { question: '开源 ObjectStack 包含哪些能力?', answer: - '本页的运行时能力——数据、界面、自动化、审批、权限、报表分析——都属于开源 ObjectStack 目标格式与运行时。AI 自带(BYO-AI):编码 Agent 以源码文件编写元数据,任意 MCP 客户端可以查询你的对象。产品内 AI Build 与 Ask 是 ObjectOS 云端与企业版能力。', + '本页的运行时能力——数据、界面、自动化、审批、权限、报表分析——都属于开源 ObjectStack(Apache-2.0):协议、内核、CLI、生产运行时、Console UI 与 MCP 服务器,开发与生产之间没有功能门槛。AI 自带(BYO-AI):编码 Agent 以源码文件编写元数据,任意 MCP 客户端可以查询你的对象。产品内 AI Builder 与 Ask 是 ObjectOS 在此之上增加的——在 Cloud、Business Self-Managed 与 Enterprise 上提供。', }, { question: '能跑在我们自己的基础设施里吗?', answer: - '可以。开源 ObjectStack 运行时可自托管。ObjectOS 企业版也支持私有部署到 VPC、本地服务器或隔离网络,并提供本地模型、内部身份系统、自有密钥管理与企业支持。', + '可以,有三条路。开源 ObjectStack 运行时免费自托管,经 MCP 自带 AI。ObjectOS Business Self-Managed 是带许可的单节点部署,把产品内 AI 放到你自己的基础设施上,自带模型或密钥。ObjectOS 企业版是完整私有部署——VPC、本地服务器或隔离网络——提供集群、本地模型、内部身份系统、自有密钥管理与企业支持。', }, ], } satisfies MarketingPage; diff --git a/content/pages/zh-Hans/product-tour.ts b/content/pages/zh-Hans/product-tour.ts index b2b62f3..51e496d 100644 --- a/content/pages/zh-Hans/product-tour.ts +++ b/content/pages/zh-Hans/product-tour.ts @@ -15,9 +15,9 @@ const page = { primary: { label: '把你的 Agent 指向 ObjectStack', href: '/en/agent-developer/' }, secondary: { label: '查看信任模型', href: '/en/trust-center/' }, metrics: [ - { value: '<150k tokens', label: '完整 CRM 全应用(含 UI),一个上下文窗口即可容纳' }, - { value: '<100k tokens', label: '对象、流程、权限与其他业务逻辑' }, - { value: '约 50k tokens', label: '完整 CRM 的 UI 元数据' }, + { value: '4 道闸门', label: '类型化、校验、审阅、治理——横在 Agent 与你的用户之间' }, + { value: '1 份定义', label: '数据库、REST API、客户端 SDK、UI 与 MCP 工具全部由它派生' }, + { value: '整体装下', label: '应用小到 AI 能整体装下——README 自带的示例 CRM 可端到端读完' }, ], artifact: { eyebrow: '审阅面', @@ -91,13 +91,13 @@ export const Case = ObjectSchema.create({ { id: 'connect', eyebrow: '现有系统', - title: '加一层对象模型,而不是替换记录系统', + title: '在记录系统旁边加一层对象模型——默认只读', copy: - '企业软件的大部分价值已经锁在数据库、ERP、CRM、工单、文件和自研系统里。ObjectStack 给 Agent 一个覆盖这些资产的显式对象模型;ObjectOS 则给团队一个运营这些应用的生产平台。', + `企业软件的大部分价值已经锁在数据库、ERP、CRM、工单、文件和自研系统里。ObjectStack 可以把你已经在跑的数据库作为外部数据源联邦接入,给 Agent 一个覆盖它的显式对象模型——默认只读、尚在早期;记录系统继续写入数据。ObjectOS 是${p.descriptor},团队在其中运行并运营建立在这个模型上的应用。`, items: [ { - title: '连接数据库与 API', - body: '把现有记录映射成业务对象、关系、计算字段和动作,不必推倒重来做迁移。', + title: '连接你已经在跑的数据库', + body: '把它作为数据源接入——起步用 readOnly 数据源或只读数据库用户——把你关心的表建模成对象、关系、计算字段和动作;写权限在你信任模型之后按对象有意开启。', }, { title: '权限保持显式', diff --git a/content/pages/zh-Hans/trust-center.ts b/content/pages/zh-Hans/trust-center.ts index 9527912..56c99b7 100644 --- a/content/pages/zh-Hans/trust-center.ts +++ b/content/pages/zh-Hans/trust-center.ts @@ -80,7 +80,7 @@ const page = { columns: ['评审领域', '现已可用', '企业版材料包'], rows: [ ['部署', '自托管开源 ObjectStack 运行时', 'VPC、私有网络、隔离部署说明'], - ['身份', '项目身份与权限元数据', 'SSO、SCIM、管理员角色、会话策略映射'], + ['身份', '项目身份与权限元数据;SSO / SAML 从 ObjectOS 商业版起', 'SCIM 与身份生命周期、管理员角色、会话策略映射'], ['AI 治理', 'MCP 工具、对象权限、审批', '模型路由策略与提示词/数据边界报告'], ['审计', '运行时审计设计与元数据评审', '可导出的审计留存与调查工作流'], ], diff --git a/src/components/SecurityPage.astro b/src/components/SecurityPage.astro index 2acb276..f69ca34 100644 --- a/src/components/SecurityPage.astro +++ b/src/components/SecurityPage.astro @@ -10,10 +10,11 @@ interface Props { const { copy, locale } = Astro.props; const docsHref = 'https://docs.objectos.ai/docs/reference/security'; const lineJoin = locale === 'zh-Hans' || locale === 'zh-Hant' || locale === 'ja' ? '' : ' '; -const blogSlug = - locale === 'zh-Hans' || locale === 'zh-Hant' - ? 'ai-agent-business-data-security-boundaries' - : 'extend-existing-systems-with-ai'; +// One target in every locale: the agent security-boundaries article, which is +// published in all eight. The English page used to send readers to the +// existing-systems post while Chinese sent them here, so the same button meant +// two different things. +const blogSlug = 'ai-agent-business-data-security-boundaries'; // `postPath` carries the trailing slash: `/en/blog/x` answers with a 308 to // `/en/blog/x/`, a redirect on every security page's CTA. const blogHref = postPath(locale, blogSlug); @@ -50,7 +51,7 @@ const en = (field: keyof SecurityCopy): 'en' | undefined =>
-

{copy.aiTitle}

+

{copy.aiKicker}

{copy.aiTitle}

{copy.aiLead}

@@ -67,7 +68,7 @@ const en = (field: keyof SecurityCopy): 'en' | undefined =>
-

{copy.residencyTitle}

+

{copy.residencyKicker}

{copy.residencyTitle}

{copy.residencyLead}

@@ -93,7 +94,7 @@ const en = (field: keyof SecurityCopy): 'en' | undefined =>
-

{copy.permissionTitle}

+

{copy.permissionKicker}

{copy.permissionTitle}

{copy.permissionLead}

@@ -109,7 +110,7 @@ const en = (field: keyof SecurityCopy): 'en' | undefined =>
-

{copy.deploymentTitle}

+

{copy.deploymentKicker}

{copy.deploymentTitle}

{copy.deploymentLead}

@@ -125,7 +126,7 @@ const en = (field: keyof SecurityCopy): 'en' | undefined =>
-

{copy.faqTitle}

+

{copy.faqKicker}

{copy.faqTitle}

diff --git a/src/content-pages/ui.ts b/src/content-pages/ui.ts index 5035831..69011d3 100644 --- a/src/content-pages/ui.ts +++ b/src/content-pages/ui.ts @@ -40,7 +40,7 @@ const EN_UI: MarketingPageUi = { decisionTitle: 'What changes, who reviews it, what runs', checklistEyebrow: 'Review checklist', faqEyebrow: 'FAQ', - faqTitle: 'Questions this page should answer', + faqTitle: 'Frequently asked questions', nextEyebrow: 'Next pages', nextTitle: 'Keep building the evaluation packet.', }; @@ -68,7 +68,7 @@ const ZH_HANS_UI: MarketingPageUi = { decisionTitle: '改什么、谁来审、跑什么', checklistEyebrow: '评审清单', faqEyebrow: 'FAQ', - faqTitle: '这一页应该回答的问题', + faqTitle: '常见问题', nextEyebrow: '下一步', nextTitle: '继续完善你的评估材料。', }; diff --git a/src/glossary/ui.ts b/src/glossary/ui.ts index 552b921..b4be678 100644 --- a/src/glossary/ui.ts +++ b/src/glossary/ui.ts @@ -30,7 +30,7 @@ interface GlossaryUi { const EN_UI: GlossaryUi = { eyebrow: 'Glossary', indexTitle: 'ObjectStack Glossary', - indexHeading: 'The vocabulary of AI-written enterprise software.', + indexHeading: 'The vocabulary of an executable business ontology.', indexLead: 'Definitions for the terms this site uses, written to be quoted. Each entry opens with one self-contained sentence, then explains what the term means in practice and links to the articles and pages that use it.', termCount: (n) => `${n} ${n === 1 ? 'term' : 'terms'}`, @@ -50,7 +50,7 @@ const EN_UI: GlossaryUi = { const ZH_HANS_UI: GlossaryUi = { eyebrow: '术语表', indexTitle: 'ObjectStack 术语表', - indexHeading: 'AI 编写的企业软件,用的是这套词汇。', + indexHeading: '一份可执行的业务本体,用的是这套词汇。', indexLead: '本站使用的术语定义,写出来就是为了被引用。每条先给一句可独立成立的定义,再解释它在实践中意味着什么,并链接到用到它的文章与页面。', termCount: (n) => `${n} 条术语`, diff --git a/src/lib/cluster-i18n.ts b/src/lib/cluster-i18n.ts index b201bca..789c120 100644 --- a/src/lib/cluster-i18n.ts +++ b/src/lib/cluster-i18n.ts @@ -115,7 +115,7 @@ const TEMPLATES: Record = { '把客户、订单、案件、设备、合同和审批建模成业务对象。', '从同一份业务规格生成页面、流程、API 和 Agent 工具。', '让用户和 AI Agent 在同一套权限、审批和审计边界内执行动作。', - '连接现有 CRM、ERP、数据库和自研系统,而不是强制迁移。', + '把已在运行的 CRM、ERP 数据库联邦接入——默认只读、尚在早期——而不是强制迁移。', ], useCases: () => [ '围绕维修、服务、审批或内部运营需求生成可运行应用。', @@ -136,7 +136,7 @@ const TEMPLATES: Record = { { question: '是否需要先替换现有系统?', answer: - '通常不需要。更稳妥的路径是先连接现有系统,把关键记录建模为业务对象,再逐步叠加 AI、流程和新应用。', + '通常不需要。更稳妥的路径是先把现有数据库作为只读数据源接入——联邦默认只读、尚在早期,写权限按对象有意开启——把关键记录建模为业务对象,再逐步叠加 AI、流程和新应用。', }, ], }, @@ -169,7 +169,7 @@ const TEMPLATES: Record = { '顧客、注文、ケース、設備、契約、承認をビジネスオブジェクトとしてモデル化します。', '同じ業務仕様から画面、ワークフロー、API、エージェントツールを生成します。', 'ユーザーと AI エージェントを同じ権限、承認、監査境界の中で動かします。', - 'CRM、ERP、データベース、独自システムを移行なしで接続します。', + '稼働中の CRM や ERP のデータベースを移行なしでフェデレートします。既定で読み取り専用で、まだ初期段階です。', ], useCases: () => [ '修理、サービス、承認、社内業務の要件から実行可能なアプリを作ります。', @@ -190,7 +190,7 @@ const TEMPLATES: Record = { { question: '既存システムの置き換えが必要ですか?', answer: - '通常は不要です。まず既存システムに接続し、重要な記録をビジネスオブジェクトとしてモデル化してから AI と新しいワークフローを追加します。', + '通常は不要です。まず既存データベースを読み取り専用のデータソースとして接続し(フェデレーションは既定で読み取り専用で、まだ初期段階。書き込みはオブジェクト単位で意図的に有効化します)、重要な記録をビジネスオブジェクトとしてモデル化してから AI と新しいワークフローを追加します。', }, ], }, @@ -223,7 +223,7 @@ const TEMPLATES: Record = { 'Kunden, Aufträge, Fälle, Geräte, Verträge und Freigaben als Business Objects modellieren.', 'Screens, Workflows, APIs und Agent Tools aus derselben Geschäftsspezifikation erzeugen.', 'Nutzer und AI Agents in denselben Berechtigungs-, Freigabe- und Audit-Grenzen ausführen.', - 'CRM, ERP, Datenbanken und eigene Systeme verbinden, ohne eine Migration zu erzwingen.', + 'Bereits laufende CRM- und ERP-Datenbanken föderieren, ohne eine Migration zu erzwingen – standardmäßig nur lesend und noch früh.', ], useCases: () => [ 'Aus Service-, Reparatur-, Freigabe- oder Operations-Anforderungen laufende Anwendungen bauen.', @@ -244,7 +244,7 @@ const TEMPLATES: Record = { { question: 'Müssen bestehende Systeme ersetzt werden?', answer: - 'Meist nicht. Der sichere Weg ist, bestehende Systeme zu verbinden, wichtige Datensätze als Business Objects zu modellieren und dann AI sowie neue Workflows zu ergänzen.', + 'Meist nicht. Der sichere Weg ist, die bestehende Datenbank zuerst als nur lesende Datasource zu verbinden – Föderation ist standardmäßig nur lesend und noch früh, Schreibzugriff wird bewusst pro Objekt freigegeben –, wichtige Datensätze als Business Objects zu modellieren und dann AI sowie neue Workflows zu ergänzen.', }, ], }, @@ -277,7 +277,7 @@ const TEMPLATES: Record = { 'Modelar clientes, órdenes, casos, equipos, contratos y aprobaciones como objetos de negocio.', 'Generar pantallas, workflows, APIs y herramientas de agente desde la misma especificación.', 'Ejecutar usuarios y agentes AI dentro de los mismos límites de permisos, aprobación y auditoría.', - 'Conectar CRM, ERP, bases de datos y sistemas propios sin forzar una migración.', + 'Federar las bases de datos de CRM y ERP que ya usas sin forzar una migración — solo lectura por defecto y aún temprano.', ], useCases: () => [ 'Crear aplicaciones operativas a partir de requisitos de servicio, reparación, aprobación u operaciones internas.', @@ -298,7 +298,7 @@ const TEMPLATES: Record = { { question: '¿Hay que reemplazar los sistemas existentes?', answer: - 'Normalmente no. El camino más seguro es conectar sistemas existentes, modelar los registros clave como objetos de negocio y añadir AI y nuevos workflows por etapas.', + 'Normalmente no. El camino más seguro es conectar primero la base de datos existente como datasource de solo lectura — la federación es de solo lectura por defecto y aún temprana; las escrituras se habilitan deliberadamente, objeto por objeto —, modelar los registros clave como objetos de negocio y añadir AI y nuevos workflows por etapas.', }, ], }, @@ -331,7 +331,7 @@ const TEMPLATES: Record = { 'Modéliser clients, commandes, dossiers, équipements, contrats et approbations comme objets métier.', 'Générer écrans, workflows, APIs et outils d’agents depuis la même spécification métier.', 'Faire fonctionner utilisateurs et agents AI dans les mêmes limites de permissions, approbation et audit.', - 'Connecter CRM, ERP, bases de données et systèmes internes sans migration forcée.', + 'Fédérer les bases CRM et ERP déjà en production sans migration forcée — en lecture seule par défaut, et encore récent.', ], useCases: () => [ 'Créer des applications opérationnelles à partir de besoins de service, réparation, approbation ou opérations internes.', @@ -352,7 +352,7 @@ const TEMPLATES: Record = { { question: 'Faut-il remplacer les systèmes existants ?', answer: - 'Généralement non. Le chemin le plus sûr consiste à connecter les systèmes existants, modéliser les enregistrements clés comme objets métier, puis ajouter AI et workflows par étapes.', + 'Généralement non. Le chemin le plus sûr consiste à connecter d’abord la base existante comme datasource en lecture seule — la fédération est en lecture seule par défaut, et encore récente ; l’écriture s’active délibérément, objet par objet —, modéliser les enregistrements clés comme objets métier, puis ajouter AI et workflows par étapes.', }, ], }, @@ -385,7 +385,7 @@ const TEMPLATES: Record = { '고객, 주문, 케이스, 장비, 계약, 승인을 비즈니스 객체로 모델링합니다.', '같은 비즈니스 명세에서 화면, 워크플로, API, 에이전트 도구를 생성합니다.', '사용자와 AI 에이전트를 동일한 권한, 승인, 감사 경계 안에서 실행합니다.', - 'CRM, ERP, 데이터베이스, 자체 시스템을 강제 마이그레이션 없이 연결합니다.', + '이미 운영 중인 CRM, ERP 데이터베이스를 강제 마이그레이션 없이 연합합니다 — 기본 읽기 전용이며 아직 초기 단계입니다.', ], useCases: () => [ '수리, 서비스, 승인, 내부 운영 요구사항에서 실행 가능한 애플리케이션을 만듭니다.', @@ -406,7 +406,23 @@ const TEMPLATES: Record = { { question: '기존 시스템을 교체해야 하나요?', answer: - '대부분 필요하지 않습니다. 기존 시스템을 연결하고 핵심 기록을 비즈니스 객체로 모델링한 뒤 AI와 새 워크플로를 단계적으로 추가하는 것이 더 안전합니다.', + '대부분 필요하지 않습니다. 기존 데이터베이스를 먼저 읽기 전용 데이터소스로 연결하고(연합은 기본 읽기 전용이며 아직 초기 단계로, 쓰기는 객체 단위로 의도적으로 활성화합니다), 핵심 기록을 비즈니스 객체로 모델링한 뒤 AI와 새 워크플로를 단계적으로 추가하는 것이 더 안전합니다.', + }, + ], + }, +}; + +// Questions one cluster answers that the shared per-locale template cannot, +// appended after the template's FAQ. The English cluster carries the same +// answer in `clusters.ts`; a locale listed here is authored, every other +// template locale keeps the generic FAQ. +const EXTRA_FAQ: Partial>>> = { + 'self-hosted-ai': { + 'zh-Hans': [ + { + question: '自托管是免费的吗?ObjectOS 又加了什么?', + answer: + '免费自托管指的是开源的 ObjectStack 框架(Apache-2.0):协议、内核、CLI、生产运行时、Console UI 与 MCP 服务器,开发与生产之间没有功能门槛——经 MCP 自带你的 AI。自管部署的 ObjectOS 是付费许可的:Business Self-Managed 是单节点交付,带产品内 AI Builder 与 Ask、AI 治理与自带模型;ObjectOS 企业版是完整私有部署,提供集群、离线隔离、SCIM、合规鉴证与 SLA 支持。无论哪个版本,你都可以导出本体,拿到开源运行时上运行。起步:npm create objectstack@latest,把编码 Agent 指向生成的项目及其 AGENTS.md,然后 npx os dev --ui。', }, ], }, @@ -460,7 +476,7 @@ export function clusterCopy(cluster: Cluster, locale: Locale): ClusterCopy { whyNow: template.whyNow(name.title), capabilities: template.capabilities(name.title), useCases: template.useCases(name.title), - faq: template.faq(name.title), + faq: [...template.faq(name.title), ...(EXTRA_FAQ[cluster.slug]?.[locale] ?? [])], }; } diff --git a/src/lib/clusters.ts b/src/lib/clusters.ts index 9eb9b48..38f4182 100644 --- a/src/lib/clusters.ts +++ b/src/lib/clusters.ts @@ -42,7 +42,7 @@ export const CLUSTERS: Cluster[] = [ 'Object modeling for customers, orders, cases, devices, contracts, approvals, and other business records.', 'Metadata-driven screens, workflows, APIs, and agent tools generated from the same business specification.', 'Permission-aware execution so users and AI agents operate inside the same governance boundary.', - 'Integration with existing systems so the platform can extend what already runs instead of forcing a migration.', + 'Federation of a database you already run — read-only by default, and early — so the platform can read what already runs instead of forcing a migration.', ], useCases: [ 'Turn a repair, service, approval, or internal operations requirement into a running application.', @@ -83,16 +83,16 @@ export const CLUSTERS: Cluster[] = [ 'A practical guide to modernizing legacy business systems with AI by connecting existing databases, modeling business objects, and avoiding risky migrations.', eyebrow: 'Modernization cluster', lead: - 'Legacy modernization does not always start with a rebuild. For many teams, the lower-risk path is to connect existing systems, model the records that matter, and add AI-native workflows on top.', + 'Legacy modernization does not always start with a rebuild. For many teams, the lower-risk path is to connect existing systems read-only first, model the records that matter, and add AI-native workflows on top.', definition: - 'AI-assisted modernization keeps the system of record in place while creating a governed object layer for AI, APIs, workflows, dashboards, and new applications. The old system remains operational; the new layer makes its data and processes understandable.', + 'AI-assisted modernization keeps the system of record in place while creating a governed object layer for AI, APIs, workflows, dashboards, and new applications. The old system remains operational and keeps writing its rows; the new layer federates them — read-only by default, and early — and makes its data and processes understandable.', whyNow: [ 'Many core systems still run the business but are too brittle for frequent change.', 'AI creates pressure to expose old data safely without opening direct database access.', 'Modernization budgets work better when teams can prove value before migration decisions.', ], capabilities: [ - 'Connect to existing databases and applications without moving every record first.', + 'Connect an existing database as a read-only datasource first — federation is read-only by default, and early — and model the tables that matter as objects without moving a record.', 'Describe legacy tables as business objects that agents, workflows, and users can understand.', 'Add new screens, reports, and automations around the old system while preserving the source of truth.', 'Route AI actions through permissions, approvals, and audit logs rather than ad hoc scripts.', @@ -106,7 +106,7 @@ export const CLUSTERS: Cluster[] = [ { question: 'Can AI modernization avoid a full migration?', answer: - 'Often, yes. A governed object layer can connect to the existing system of record, expose business concepts, and let teams add AI workflows without moving every process to a new platform immediately.', + 'Often, yes. A governed object layer can connect to the existing system of record — read-only by default, with writes enabled deliberately per object — expose business concepts, and let teams add AI workflows without moving every process to a new platform immediately. Federation is early: expect the read path to be the mature one.', }, { question: 'What should be modernized first?', @@ -137,14 +137,14 @@ export const CLUSTERS: Cluster[] = [ lead: 'Self-hosted AI is not only about where the model runs. Once AI reads business data and calls tools, the application runtime that controls objects, permissions, approvals, and audit evidence becomes the critical control point.', definition: - 'A self-hosted AI application platform lets enterprises run the governed business runtime in their own infrastructure. The model can be local or external, but data access, tools, workflow execution, and audit policy stay under enterprise control.', + 'A self-hosted AI application platform lets enterprises run the governed business runtime in their own infrastructure. The model can be local or external, but data access, tools, workflow execution, and audit policy stay under enterprise control. Two things answer to that description here: the free, Apache-2.0 ObjectStack framework, and licensed self-managed ObjectOS — Business Self-Managed or ObjectOS Enterprise — which adds the in-product AI on top of it.', whyNow: [ 'AI agents increasingly need access to sensitive customer, operational, and financial records.', 'Regulated teams need evidence of who accessed what, which action ran, and which approval was required.', 'Security teams need a clear place to enforce identity, network, key, and logging policies.', ], capabilities: [ - 'Run the business object layer, tool registry, approvals, and audit logs in controlled infrastructure.', + 'Run the business object layer, tool registry, approvals, and audit logs in controlled infrastructure — free on the open-source ObjectStack framework, or licensed as self-managed ObjectOS when you want the in-product AI Builder and Ask on your own infrastructure.', 'Connect external or local models through explicit policy rather than hardwired assumptions.', 'Keep files, records, logs, and credentials aligned with existing enterprise controls.', 'Give agents scoped tools instead of unrestricted administrator credentials.', @@ -170,6 +170,11 @@ export const CLUSTERS: Cluster[] = [ answer: 'Agents should act on behalf of a user or governed service identity, inherit permission scope, call explicit tools, and write audit logs for every material action.', }, + { + question: 'Is self-hosting free, and what does ObjectOS add?', + answer: + 'Free self-hosting is the open-source ObjectStack framework (Apache-2.0): the protocol, kernel, CLI, production runtime, Console UI, and MCP server, with no feature gate between development and production — bring your own AI over MCP. Self-managed ObjectOS is licensed: Business Self-Managed is a single-node delivery with the in-product AI Builder and Ask, AI governance, and bring-your-own-model; ObjectOS Enterprise is the full private deployment with clustering, air-gapped operation, SCIM, compliance attestations, and SLA support. On either edition you can export your ontology and run it on the open-source runtime. To start: npm create objectstack@latest, point your coding agent at the generated project and its AGENTS.md, then npx os dev --ui.', + }, ], articleSlugs: [ 'self-hosted-ai-app-platform', @@ -247,7 +252,7 @@ export const CLUSTERS: Cluster[] = [ 'Work orders, reports, and exceptions offer clear value before larger transformation programs.', ], capabilities: [ - 'Connect production, inventory, equipment, quality, and work order data as business objects.', + 'Connect production, inventory, equipment, quality, and work order data as business objects — federated read-only by default from the databases that already run production.', 'Use AI to explain report changes, spot exceptions, and summarize operational context.', 'Build case-style workflows for maintenance, quality issues, and supply chain follow-up.', 'Keep source systems stable while adding modern dashboards, workflows, and agent assistance.', @@ -266,7 +271,7 @@ export const CLUSTERS: Cluster[] = [ { question: 'Does manufacturing AI require replacing ERP or MES?', answer: - 'No. A practical first architecture connects existing systems and models the relevant records as business objects so AI can assist without taking over the source systems.', + 'No. A practical first architecture connects the existing databases as read-only datasources — federation is read-only by default, and early — and models the relevant records as business objects so AI can read and analyze without taking over the source systems.', }, { question: 'What makes manufacturing AI difficult?', diff --git a/src/lib/home.ts b/src/lib/home.ts index 86c46c9..34e5d57 100644 --- a/src/lib/home.ts +++ b/src/lib/home.ts @@ -96,7 +96,7 @@ const zhHans: HomeCopy = { imageAlt: 'ObjectOS 连接业务数据、应用和 AI Agent 的产品示意图', imageNoteTitle: '统一业务对象层', imageNote: '正在连接应用、数据与 Agent', - positioningKicker: '面向 AI 所写企业软件', + positioningKicker: positioning['zh-Hans'].t1, positioningTitle: ['保留已经有效的系统,', '补上 Agent 可治理运行时。'], positioningCopy: '企业 AI 不需要又一次重建,也不需要更多不可审的生成代码。它需要一份 Agent 能写、人能审、运行时能治理的定义,把旧系统、新应用和 AI Agent 接在一起。你的对象与字段、关系、动作、权限、流程,以及 Agent 与工具定义,就是这份定义——你的业务本体:开放、带版本、归你所有,而不是锁在别人平台里的资产。', capabilitiesKicker: '平台能力', @@ -104,7 +104,7 @@ const zhHans: HomeCopy = { capabilitiesLink: '阅读 AI 与 Agent 文章', capabilities: [ { title: '给 Agent 一个业务模型', copy: '把客户、订单、设备、工单和审批建模成对象,让 Agent 能准确读取、关联和操作。' }, - { title: '连接现有系统,不必替换', copy: '在已有数据库、ERP、CRM 和自研系统之上增加 API、权限、流程和智能能力。' }, + { title: '接入已在运行的系统——先只读', copy: '把已经在跑的数据库作为外部数据源联邦接入,再把它的表建模成对象。联邦默认只读、尚在早期:记录系统继续写入数据,写权限按对象有意开启。' }, { title: '生成元数据,而不是整套代码', copy: '对典型 CRUD 和流程型软件,Agent 编写紧凑的 ObjectStack 定义,开源 ObjectStack 运行时派生表、API、界面和工具,并强制执行权限与审计;ObjectOS 负责团队的生产部署与运营。要生成的代码更少,要审的代码也更少。' }, { title: '在运行时执行治理', copy: '复用企业身份、权限、审批队列和审计日志,让每一次 Agent 操作都有明确边界。' }, ], @@ -116,7 +116,7 @@ const zhHans: HomeCopy = { { title: 'AI Ask', copy: '云端与企业版:在产品内问询数据、分析业务上下文,并在登录用户权限内触发已批准动作。开源 ObjectStack 则通过 MCP 用你自己的 AI 问询同样的对象。' }, { title: 'Tools / MCP', copy: '各版本通用:@objectstack/mcp 把对象、查询和动作暴露为受策略约束的工具,供 Claude、Cursor、任意 MCP 客户端或本地模型调用。' }, ], - aiLink: '查看 AI 安全模型', + aiLink: '把你的 Agent 指向 ObjectStack', workflowKicker: '工作方式', workflowTitle: ['把业务运营变成', 'Agent 能使用的结构'], workflowCopy: 'ObjectStack 用统一的类型化定义描述对象、关系、权限、流程和动作。Agent 修改能整体装进上下文的定义层,而不是反复生成应用代码;ObjectOS 则为团队提供审阅、部署和运营控制,让每次迭代都可理解、可批准、受治理。', @@ -150,7 +150,7 @@ const zhHans: HomeCopy = { insightsLink: '浏览全部文章', closingKicker: '下一步', closingTitle: '从你最熟悉的一套业务数据开始。', - closingCopy: '连接一个现有系统,定义关键业务对象,让 Agent 用一个小元数据 diff 发布第一个受治理的 AI 所写应用。', + closingCopy: '把一个已在运行的数据库联邦接入(默认只读),定义关键业务对象,让 Agent 用一个小元数据 diff 发布第一个受治理的 AI 所写应用。', closingCta: '了解如何连接现有系统', compareKicker: '对比', compareTitle: ['和你熟悉的工具', '不是一回事'], @@ -182,7 +182,7 @@ const en: HomeCopy = { imageAlt: 'ObjectOS connecting business data, applications, and AI agents', imageNoteTitle: 'Unified business object layer', imageNote: 'Connecting applications, data, and agents', - positioningKicker: 'For AI-written enterprise software', + positioningKicker: positioning.en.t1, positioningTitle: ['Keep the systems that work.', 'Add a governed runtime for agents.'], positioningCopy: 'Enterprise AI does not need another rebuild project or another pile of generated code. It needs one definition agents can write, humans can review, and a runtime can govern across legacy systems, new applications, and AI agents. Your objects and fields, relations, actions, permissions, flows, and agent and tool definitions are that definition — your business ontology: open, versioned, and yours, not an asset locked inside someone else’s platform.', capabilitiesKicker: 'Platform capabilities', @@ -190,7 +190,7 @@ const en: HomeCopy = { capabilitiesLink: 'Read about AI and agents', capabilities: [ { title: 'Give agents a business model', copy: 'Model customers, orders, equipment, cases, and approvals as objects agents can read, relate, and act on.' }, - { title: 'Extend systems without replacing them', copy: 'Add APIs, permissions, workflows, and intelligence on top of databases, ERP, CRM, and custom systems.' }, + { title: 'Extend what already runs — read-only first', copy: 'Federate a database you already run as an external datasource and model its tables as objects. Federation is read-only by default and early: the system of record keeps writing the rows, and writes are enabled deliberately, per object.' }, { title: 'Generate metadata, not app code', copy: 'For typical CRUD and workflow software, agents write the compact ObjectStack definition; the open ObjectStack runtime derives tables, APIs, UI, and tools, then enforces permissions and audit, while ObjectOS handles production deployment and team operations. Less code to generate, less code to review.' }, { title: 'Enforce governance at runtime', copy: 'Reuse enterprise identity, permissions, approval queues, and audit logs so every agent action has a defined boundary.' }, ], @@ -202,7 +202,7 @@ const en: HomeCopy = { { title: 'AI Ask', copy: 'Cloud & Enterprise: ask questions inside the product, analyze business context, and trigger approved actions within the signed-in user’s permissions. On the open-source ObjectStack, query the same objects through MCP with your own AI.' }, { title: 'Tools / MCP', copy: 'All editions: @objectstack/mcp exposes objects, queries, and actions as policy-aware tools for Claude, Cursor, any MCP client, or a local model.' }, ], - aiLink: 'View the AI security model', + aiLink: 'Point your agent at ObjectStack', workflowKicker: 'How it works', workflowTitle: ['Turn business operations into', 'a structure agents can use'], workflowCopy: 'ObjectStack describes objects, relationships, permissions, workflows, and actions as unified typed definitions. Agents change a context-sized definition layer instead of regenerating application code; ObjectOS gives teams the review, deployment, and operational controls that keep every iteration understandable, approved, and governed.', @@ -236,7 +236,7 @@ const en: HomeCopy = { insightsLink: 'Browse all articles', closingKicker: 'Next step', closingTitle: 'Start with the business data you know best.', - closingCopy: 'Connect one existing system, define its key business objects, and let your agent ship the first governed AI-written application as a small metadata diff.', + closingCopy: 'Federate one database you already run — read-only by default — define its key business objects, and let your agent ship the first governed AI-written application as a small metadata diff.', closingCta: 'Learn how to connect existing systems', compareKicker: 'How it compares', compareTitle: ['Different from', 'the tools you know'], @@ -269,7 +269,7 @@ const ja: HomeCopy = { imageAlt: '業務データ、アプリ、AI エージェントを接続する ObjectOS', imageNoteTitle: '統一業務オブジェクト層', imageNote: 'アプリ、データ、エージェントを接続中', - positioningKicker: 'AI が書くエンタープライズソフトウェアへ', + positioningKicker: positioning.ja.t1, positioningTitle: ['今あるシステムを活かし、', 'エージェント用の統制ランタイムを加える。'], positioningCopy: 'エンタープライズ AI に必要なのは、また一つの再構築プロジェクトでも、レビュー不能な生成コードの山でもありません。エージェントが書き、人がレビューでき、ランタイムが統制する、ひとつの定義です。オブジェクトとフィールド、リレーション、アクション、権限、フロー、そしてエージェントとツールの定義がその定義 — あなたのビジネスオントロジーです。オープンで、バージョン管理され、あなたのもの。誰かのプラットフォームに閉じ込められた資産ではありません。', capabilitiesKicker: 'プラットフォーム機能', @@ -277,7 +277,7 @@ const ja: HomeCopy = { capabilitiesLink: 'AI とエージェントの記事', capabilities: [ { title: 'エージェントに業務モデルを渡す', copy: '顧客、注文、設備、ケース、承認を、エージェントが読み、関連付け、操作できるオブジェクトとしてモデル化します。' }, - { title: '既存システムを置き換えずに拡張', copy: 'データベース、ERP、CRM、自社システムの上に API、権限、ワークフロー、インテリジェンスを追加します。' }, + { title: '今あるシステムを活かす — まずは読み取り専用で', copy: 'すでに稼働中のデータベースを外部データソースとしてフェデレートし、そのテーブルをオブジェクトとしてモデル化します。フェデレーションは既定で読み取り専用で、まだ初期段階です。記録システムが行を書き続け、書き込みはオブジェクト単位で意図的に有効化します。' }, { title: 'コードではなくメタデータを生成', copy: '典型的な CRUD/ワークフロー型ソフトウェアでは、エージェントはコンパクトな ObjectStack 定義を書きます。オープンな ObjectStack ランタイムがテーブル、API、UI、ツールを派生し、権限と監査を強制します。ObjectOS が本番デプロイとチーム運用を担います。生成するコードもレビューするコードも少なくなります。' }, { title: 'ランタイムでガバナンスを実行', copy: '企業 ID、権限、承認キュー、監査ログを再利用し、すべてのエージェント操作に明確な境界を設けます。' }, ], @@ -289,7 +289,7 @@ const ja: HomeCopy = { { title: 'AI Ask', copy: 'Cloud/Enterprise:製品内で質問し、業務コンテキストを分析し、ログインユーザーの権限内で承認済みアクションを実行します。オープンソースの ObjectStack では、同じオブジェクトを MCP 経由で自分の AI から問い合わせます。' }, { title: 'Tools / MCP', copy: '全エディション共通:@objectstack/mcp がオブジェクト、クエリ、アクションをポリシー対応ツールとして Claude、Cursor、任意の MCP クライアント、ローカルモデルに公開します。' }, ], - aiLink: 'AI セキュリティモデルを見る', + aiLink: 'エージェントを ObjectStack に向ける', workflowKicker: '仕組み', workflowTitle: ['業務オペレーションを、', 'エージェントが使える構造へ'], workflowCopy: 'ObjectStack はオブジェクト、関係、権限、ワークフロー、アクションを統一された型付き定義で記述します。エージェントはアプリケーションコードを作り直すのではなく、全体がコンテキストに収まる定義層を変更します。ObjectOS はレビュー、デプロイ、運用のコントロールを提供し、各変更を理解可能、承認済み、統制された状態に保ちます。', @@ -323,7 +323,7 @@ const ja: HomeCopy = { insightsLink: 'すべての記事', closingKicker: '次のステップ', closingTitle: '最もよく知る業務データから始めましょう。', - closingCopy: '既存システムを一つ接続し、主要な業務オブジェクトを定義して、最初のガバナンス付き AI-written アプリを小さなメタデータ diff として出荷します。', + closingCopy: 'すでに稼働中のデータベースを一つフェデレートし(既定で読み取り専用)、主要な業務オブジェクトを定義して、最初のガバナンス付き AI-written アプリを小さなメタデータ diff として出荷します。', closingCta: '既存システムとの接続方法', compareKicker: '比較', compareTitle: ['よくあるツールとは', '別物です'], @@ -356,7 +356,7 @@ const de: HomeCopy = { imageAlt: 'ObjectOS verbindet Geschäftsdaten, Anwendungen und AI Agents', imageNoteTitle: 'Einheitliche Geschäftsobjektschicht', imageNote: 'Verbindet Anwendungen, Daten und Agents', - positioningKicker: 'Für AI-geschriebene Unternehmenssoftware', + positioningKicker: positioning.de.t1, positioningTitle: ['Bewährte Systeme behalten.', 'Eine kontrollierte Runtime für Agents ergänzen.'], positioningCopy: 'Enterprise AI braucht kein weiteres Neuaufbauprojekt und keinen weiteren Stapel generierten Codes. Sie braucht eine Definition, die Agents schreiben, Menschen prüfen und eine Runtime über Legacy-Systeme, neue Anwendungen und AI Agents hinweg kontrolliert. Ihre Objekte und Felder, Beziehungen, Aktionen, Berechtigungen, Flows sowie Agent- und Tool-Definitionen sind diese Definition — Ihre Geschäftsontologie: offen, versioniert und in Ihrem Besitz, kein Asset in der Plattform eines anderen.', capabilitiesKicker: 'Plattformfunktionen', @@ -364,7 +364,7 @@ const de: HomeCopy = { capabilitiesLink: 'Artikel zu AI und Agents', capabilities: [ { title: 'Agents ein Geschäftsmodell geben', copy: 'Modellieren Sie Kunden, Aufträge, Anlagen, Fälle und Freigaben als Objekte, die Agents lesen, verknüpfen und bearbeiten können.' }, - { title: 'Systeme erweitern, ohne sie zu ersetzen', copy: 'Ergänzen Sie Datenbanken, ERP, CRM und eigene Systeme um APIs, Rechte, Workflows und Intelligenz.' }, + { title: 'Bestehendes erweitern — zuerst nur lesend', copy: 'Föderieren Sie eine Datenbank, die Sie bereits betreiben, als externe Datasource und modellieren Sie ihre Tabellen als Objekte. Föderation ist standardmäßig nur lesend und noch früh: Das Ursprungssystem schreibt die Zeilen weiter, Schreibzugriff wird bewusst pro Objekt freigegeben.' }, { title: 'Metadaten statt App-Code generieren', copy: 'Für typische CRUD- und Workflow-Software schreiben Agents die kompakte ObjectStack-Definition. Die offene ObjectStack Runtime leitet Tabellen, APIs, UI und Tools ab und setzt Rechte sowie Audit durch; ObjectOS übernimmt Produktionsbereitstellung und Team-Betrieb. Weniger Code zu generieren, weniger Code zu prüfen.' }, { title: 'Governance zur Laufzeit erzwingen', copy: 'Nutzen Sie Unternehmensidentität, Berechtigungen, Freigabeschlangen und Audit-Logs, damit jede Agent-Aktion klare Grenzen hat.' }, ], @@ -376,7 +376,7 @@ const de: HomeCopy = { { title: 'AI Ask', copy: 'Cloud & Enterprise: Stellen Sie Fragen im Produkt, analysieren Sie Geschäftskontext und lösen Sie freigegebene Aktionen innerhalb der Rechte des angemeldeten Nutzers aus. Auf dem quelloffenen ObjectStack fragen Sie dieselben Objekte über MCP mit Ihrer eigenen AI ab.' }, { title: 'Tools / MCP', copy: 'Alle Editionen: @objectstack/mcp stellt Objekte, Abfragen und Aktionen als policy-bewusste Tools für Claude, Cursor, jeden MCP-Client oder ein lokales Modell bereit.' }, ], - aiLink: 'AI-Sicherheitsmodell ansehen', + aiLink: 'Richten Sie Ihren Agent auf ObjectStack', workflowKicker: 'Funktionsweise', workflowTitle: ['Geschäftsabläufe in eine Struktur verwandeln,', 'die Agents nutzen können'], workflowCopy: 'ObjectStack beschreibt Objekte, Beziehungen, Rechte, Workflows und Aktionen als einheitliche typisierte Definitionen. Agents ändern eine kontextgroße Definitionsschicht, statt Anwendungscode neu zu generieren; ObjectOS gibt Teams die Prüf-, Bereitstellungs- und Betriebskontrollen, die jede Iteration verständlich, genehmigt und kontrolliert halten.', @@ -410,7 +410,7 @@ const de: HomeCopy = { insightsLink: 'Alle Artikel', closingKicker: 'Nächster Schritt', closingTitle: 'Beginnen Sie mit den Geschäftsdaten, die Sie am besten kennen.', - closingCopy: 'Verbinden Sie ein bestehendes System, definieren Sie zentrale Geschäftsobjekte und lassen Sie Ihren Agent die erste kontrollierte AI-geschriebene Anwendung als kleinen Metadaten-Diff ausliefern.', + closingCopy: 'Föderieren Sie eine Datenbank, die Sie bereits betreiben (standardmäßig nur lesend), definieren Sie zentrale Geschäftsobjekte und lassen Sie Ihren Agent die erste kontrollierte AI-geschriebene Anwendung als kleinen Metadaten-Diff ausliefern.', closingCta: 'Bestehende Systeme verbinden', compareKicker: 'Im Vergleich', compareTitle: ['Anders als die Tools,', 'die Sie kennen'], @@ -443,7 +443,7 @@ const es: HomeCopy = { imageAlt: 'ObjectOS conectando datos, aplicaciones y agentes de AI', imageNoteTitle: 'Capa unificada de objetos de negocio', imageNote: 'Conectando aplicaciones, datos y agentes', - positioningKicker: 'Para software empresarial escrito por AI', + positioningKicker: positioning.es.t1, positioningTitle: ['Conserva los sistemas que funcionan.', 'Añade un runtime gobernado para agentes.'], positioningCopy: 'La AI empresarial no necesita otro proyecto de reconstrucción ni otra pila de código generado. Necesita una definición que los agentes puedan escribir, las personas revisar y un runtime gobernar entre sistemas heredados, nuevas aplicaciones y agentes de AI. Tus objetos y campos, relaciones, acciones, permisos, flujos y definiciones de agentes y herramientas son esa definición — tu ontología de negocio: abierta, versionada y tuya, no un activo encerrado en la plataforma de otro.', capabilitiesKicker: 'Capacidades de la plataforma', @@ -451,7 +451,7 @@ const es: HomeCopy = { capabilitiesLink: 'Artículos sobre AI y agentes', capabilities: [ { title: 'Da a los agentes un modelo de negocio', copy: 'Modela clientes, pedidos, equipos, casos y aprobaciones como objetos que los agentes pueden leer, relacionar y modificar.' }, - { title: 'Extiende sistemas sin reemplazarlos', copy: 'Añade API, permisos, workflows e inteligencia sobre bases de datos, ERP, CRM y sistemas propios.' }, + { title: 'Extiende lo que ya funciona — primero en solo lectura', copy: 'Federa una base de datos que ya usas como datasource externa y modela sus tablas como objetos. La federación es de solo lectura por defecto y aún temprana: el sistema de registro sigue escribiendo las filas y las escrituras se habilitan deliberadamente, objeto por objeto.' }, { title: 'Genera metadatos, no código de app', copy: 'Para software CRUD y de workflow típico, los agentes escriben la definición compacta de ObjectStack. El runtime abierto de ObjectStack deriva tablas, API, UI y herramientas, y aplica permisos y auditoría; ObjectOS se encarga del despliegue en producción y la operación del equipo. Menos código que generar, menos código que revisar.' }, { title: 'Aplica gobierno en runtime', copy: 'Reutiliza identidad empresarial, permisos, colas de aprobación y auditoría para que cada acción de agente tenga límites definidos.' }, ], @@ -463,7 +463,7 @@ const es: HomeCopy = { { title: 'AI Ask', copy: 'Cloud y Enterprise: haz preguntas dentro del producto, analiza contexto de negocio y ejecuta acciones aprobadas dentro de los permisos del usuario conectado. En el ObjectStack open source, consulta los mismos objetos mediante MCP con tu propia AI.' }, { title: 'Tools / MCP', copy: 'Todas las ediciones: @objectstack/mcp expone objetos, consultas y acciones como herramientas conscientes de políticas para Claude, Cursor, cualquier cliente MCP o un modelo local.' }, ], - aiLink: 'Ver el modelo de seguridad AI', + aiLink: 'Apunta tu agente a ObjectStack', workflowKicker: 'Cómo funciona', workflowTitle: ['Convierte operaciones de negocio en', 'una estructura que los agentes puedan usar'], workflowCopy: 'ObjectStack describe objetos, relaciones, permisos, workflows y acciones como definiciones tipadas unificadas. Los agentes cambian una capa de definición que cabe en contexto en lugar de regenerar código de aplicación; ObjectOS aporta a los equipos los controles de revisión, despliegue y operación que mantienen cada iteración comprensible, aprobada y gobernada.', @@ -497,7 +497,7 @@ const es: HomeCopy = { insightsLink: 'Ver todos los artículos', closingKicker: 'Siguiente paso', closingTitle: 'Empieza con los datos de negocio que mejor conoces.', - closingCopy: 'Conecta un sistema existente, define sus objetos clave y deja que tu agente entregue la primera aplicación escrita por AI y gobernada como un diff pequeño de metadatos.', + closingCopy: 'Federa una base de datos que ya usas (solo lectura por defecto), define sus objetos clave y deja que tu agente entregue la primera aplicación escrita por AI y gobernada como un diff pequeño de metadatos.', closingCta: 'Cómo conectar sistemas existentes', compareKicker: 'Comparativa', compareTitle: ['Distinto de las', 'herramientas que conoces'], @@ -530,7 +530,7 @@ const fr: HomeCopy = { imageAlt: 'ObjectOS connectant données métier, applications et agents AI', imageNoteTitle: 'Couche unifiée d’objets métier', imageNote: 'Connexion des applications, données et agents', - positioningKicker: 'Pour le logiciel d’entreprise écrit par l’AI', + positioningKicker: positioning.fr.t1, positioningTitle: ['Conservez les systèmes efficaces.', 'Ajoutez un runtime gouverné pour agents.'], positioningCopy: 'L’AI en entreprise n’a pas besoin d’un nouveau chantier de reconstruction ni d’une nouvelle pile de code généré. Elle a besoin d’une définition que les agents peuvent écrire, que les humains peuvent relire, et qu’un runtime gouverne à travers systèmes existants, nouvelles applications et agents AI. Vos objets et champs, relations, actions, permissions, flux, et définitions d’agents et d’outils sont cette définition — votre ontologie métier : ouverte, versionnée et à vous, pas un actif enfermé dans la plateforme d’un autre.', capabilitiesKicker: 'Capacités de la plateforme', @@ -538,7 +538,7 @@ const fr: HomeCopy = { capabilitiesLink: 'Articles sur l’AI et les agents', capabilities: [ { title: 'Donnez aux agents un modèle métier', copy: 'Modélisez clients, commandes, équipements, dossiers et validations comme des objets que les agents peuvent lire, relier et modifier.' }, - { title: 'Étendez sans remplacer', copy: 'Ajoutez API, permissions, workflows et intelligence aux bases de données, ERP, CRM et systèmes internes.' }, + { title: 'Étendez l’existant — en lecture seule d’abord', copy: 'Fédérez une base que vous exploitez déjà comme datasource externe et modélisez ses tables en objets. La fédération est en lecture seule par défaut, et encore récente : le système de référence continue d’écrire les lignes, et l’écriture s’active délibérément, objet par objet.' }, { title: 'Générez des métadonnées, pas du code applicatif', copy: 'Pour les logiciels CRUD et workflow typiques, les agents écrivent la définition ObjectStack compacte. Le runtime ouvert ObjectStack en dérive tables, API, UI et outils, puis applique permissions et audit ; ObjectOS prend en charge le déploiement en production et les opérations d’équipe. Moins de code à générer, moins de code à relire.' }, { title: 'Appliquez la gouvernance au runtime', copy: 'Réutilisez identité d’entreprise, permissions, files de validation et journaux d’audit afin que chaque action d’agent ait des limites définies.' }, ], @@ -550,7 +550,7 @@ const fr: HomeCopy = { { title: 'AI Ask', copy: 'Cloud et Enterprise : posez des questions dans le produit, analysez le contexte métier et déclenchez des actions approuvées dans les permissions de l’utilisateur connecté. Sur ObjectStack open source, interrogez les mêmes objets via MCP avec votre propre AI.' }, { title: 'Tools / MCP', copy: 'Toutes éditions : @objectstack/mcp expose objets, requêtes et actions comme outils sensibles aux politiques pour Claude, Cursor, tout client MCP ou un modèle local.' }, ], - aiLink: 'Voir le modèle de sécurité AI', + aiLink: 'Pointez votre agent vers ObjectStack', workflowKicker: 'Fonctionnement', workflowTitle: ['Transformez les opérations métier en', 'une structure utilisable par les agents'], workflowCopy: 'ObjectStack décrit objets, relations, permissions, workflows et actions sous forme de définitions typées unifiées. Les agents modifient une couche de définition qui tient en contexte au lieu de régénérer du code applicatif ; ObjectOS apporte aux équipes les contrôles de relecture, de déploiement et d’exploitation qui rendent chaque itération compréhensible, approuvée et gouvernée.', @@ -584,7 +584,7 @@ const fr: HomeCopy = { insightsLink: 'Voir tous les articles', closingKicker: 'Étape suivante', closingTitle: 'Commencez par les données métier que vous connaissez le mieux.', - closingCopy: 'Connectez un système existant, définissez ses objets clés et laissez votre agent livrer la première application gouvernée écrite par l’AI sous forme de petit diff de métadonnées.', + closingCopy: 'Fédérez une base que vous exploitez déjà (en lecture seule par défaut), définissez ses objets clés et laissez votre agent livrer la première application gouvernée écrite par l’AI sous forme de petit diff de métadonnées.', closingCta: 'Connecter les systèmes existants', compareKicker: 'Comparatif', compareTitle: ['Différent des outils', 'que vous connaissez'], @@ -617,7 +617,7 @@ const ko: HomeCopy = { imageAlt: '비즈니스 데이터, 애플리케이션과 AI 에이전트를 연결하는 ObjectOS', imageNoteTitle: '통합 비즈니스 객체 계층', imageNote: '애플리케이션, 데이터와 에이전트 연결 중', - positioningKicker: 'AI가 작성한 엔터프라이즈 소프트웨어를 위해', + positioningKicker: positioning.ko.t1, positioningTitle: ['이미 잘 작동하는 시스템은 유지하고,', '에이전트를 위한 거버넌스 런타임을 더하세요.'], positioningCopy: '엔터프라이즈 AI에 필요한 것은 또 하나의 재구축 프로젝트도, 검토하기 어려운 생성 코드 더미도 아닙니다. 에이전트가 작성하고 사람이 검토하며 런타임이 기존 시스템, 새 애플리케이션, AI 에이전트 전반에서 거버넌스를 유지하는 하나의 정의입니다. 객체와 필드, 관계, 작업, 권한, 플로, 그리고 에이전트와 도구 정의가 그 정의 — 당신의 비즈니스 온톨로지입니다. 열려 있고, 버전 관리되며, 당신의 것이지, 남의 플랫폼에 갇힌 자산이 아닙니다.', capabilitiesKicker: '플랫폼 기능', @@ -625,7 +625,7 @@ const ko: HomeCopy = { capabilitiesLink: 'AI와 에이전트 글 읽기', capabilities: [ { title: '에이전트에 비즈니스 모델 제공', copy: '고객, 주문, 장비, 케이스, 승인을 에이전트가 읽고 연결하고 작업할 수 있는 객체로 모델링합니다.' }, - { title: '교체 없이 기존 시스템 확장', copy: '데이터베이스, ERP, CRM과 자체 시스템 위에 API, 권한, 워크플로와 지능을 추가합니다.' }, + { title: '이미 운영 중인 시스템 확장 — 우선 읽기 전용으로', copy: '이미 운영 중인 데이터베이스를 외부 데이터소스로 연합하고 그 테이블을 객체로 모델링합니다. 연합은 기본적으로 읽기 전용이며 아직 초기 단계입니다. 기록 시스템이 계속 행을 쓰고, 쓰기는 객체 단위로 의도적으로 활성화합니다.' }, { title: '앱 코드가 아니라 메타데이터 생성', copy: '일반적인 CRUD 및 워크플로 소프트웨어에서 에이전트는 압축된 ObjectStack 정의를 작성합니다. 오픈 ObjectStack 런타임이 테이블, API, UI, 도구를 파생하고 권한과 감사를 강제하며, ObjectOS가 프로덕션 배포와 팀 운영을 담당합니다. 생성할 코드도, 검토할 코드도 줄어듭니다.' }, { title: '런타임에서 거버넌스 강제', copy: '기업 ID, 권한, 승인 대기열, 감사 로그를 재사용해 모든 에이전트 작업에 정의된 경계를 둡니다.' }, ], @@ -637,7 +637,7 @@ const ko: HomeCopy = { { title: 'AI Ask', copy: 'Cloud · Enterprise: 제품 안에서 질문하고 비즈니스 맥락을 분석하며 로그인 사용자 권한 안에서 승인된 작업을 실행합니다. 오픈소스 ObjectStack에서는 같은 객체를 MCP로 당신의 AI에서 조회합니다.' }, { title: 'Tools / MCP', copy: '모든 에디션: @objectstack/mcp가 객체, 쿼리, 작업을 정책 인식 도구로 Claude, Cursor, 모든 MCP 클라이언트 또는 로컬 모델에 노출합니다.' }, ], - aiLink: 'AI 보안 모델 보기', + aiLink: '에이전트를 ObjectStack에 연결하기', workflowKicker: '작동 방식', workflowTitle: ['비즈니스 운영을', '에이전트가 사용할 수 있는 구조로'], workflowCopy: 'ObjectStack은 객체, 관계, 권한, 워크플로와 작업을 통합된 타입 정의로 설명합니다. 에이전트는 애플리케이션 코드를 다시 생성하는 대신 컨텍스트에 들어가는 정의 계층을 변경합니다. ObjectOS는 팀에 검토, 배포, 운영 제어를 제공해 모든 변경을 이해 가능하고 승인되며 거버넌스된 상태로 유지합니다.', @@ -671,7 +671,7 @@ const ko: HomeCopy = { insightsLink: '모든 글 보기', closingKicker: '다음 단계', closingTitle: '가장 잘 아는 비즈니스 데이터에서 시작하세요.', - closingCopy: '기존 시스템 하나를 연결하고 핵심 비즈니스 객체를 정의해 에이전트가 첫 거버넌스 AI 작성 애플리케이션을 작은 메타데이터 diff로 배포하게 하세요.', + closingCopy: '이미 운영 중인 데이터베이스 하나를 연합하고(기본 읽기 전용), 핵심 비즈니스 객체를 정의해 에이전트가 첫 거버넌스 AI 작성 애플리케이션을 작은 메타데이터 diff로 배포하게 하세요.', closingCta: '기존 시스템 연결 방법', compareKicker: '비교', compareTitle: ['익숙한 도구들과는', '다릅니다'], diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index 523afad..14948c5 100644 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -208,7 +208,7 @@ const en: Strings = { all: 'Home', audience: 'Audience', articlesTitle: 'Articles', - articlesLead: (n) => `${n} ${n === 1 ? 'article' : 'articles'} on AI-written enterprise software, runtime governance, and agent-ready applications.`, + articlesLead: (n) => `${n} ${n === 1 ? 'article' : 'articles'} on executable business ontologies, runtime governance, and agent-operated applications.`, backToList: 'All articles', alsoOn: 'Also published on', references: 'References', diff --git a/src/lib/pricing.ts b/src/lib/pricing.ts index 811b095..f05c9e2 100644 --- a/src/lib/pricing.ts +++ b/src/lib/pricing.ts @@ -29,8 +29,12 @@ export interface PricingCopy { // CTA targets. Plan CTAs point at the docs "get started" surface; enterprise // opens an email. Repoint these at the app signup URL once it is live. +// The Enterprise contact is sales@, the address the public licence page +// (docs.objectos.ai/docs/resources/license) names for "contact sales" on +// Enterprise, the Runtime Subscription and OEM terms; support@ is the +// billing and refunds address the refund policy names. const GET_STARTED = 'https://docs.objectos.ai'; -const CONTACT = 'mailto:support@objectstack.ai'; +const CONTACT = 'mailto:sales@objectstack.ai'; // Prices/quotas mirror the product's source of truth: // cloud `packages/service-cloud/src/plan-entitlements.ts` (PLAN_PRICING + diff --git a/src/lib/security.ts b/src/lib/security.ts index f5807ed..3529e21 100644 --- a/src/lib/security.ts +++ b/src/lib/security.ts @@ -9,19 +9,30 @@ export interface SecurityCopy { hero: [string, string]; lead: string; metrics: { value: string; label: string }[]; + /** + * Section kickers (the small uppercase line above each h2). They are short + * phrases that say what the section answers, never a copy of the heading + * under them: the eyebrow and the h2 used to print the same string five + * times on this page. + */ + residencyKicker: string; residencyTitle: string; residencyLead: string; residencyColumns: [string, string, string]; residencyRows: { data: string; location: string; leaves: string }[]; + aiKicker: string; aiTitle: string; aiLead: string; aiSteps: { title: string; copy: string }[]; + permissionKicker: string; permissionTitle: string; permissionLead: string; permissionLayers: { title: string; copy: string }[]; + deploymentKicker: string; deploymentTitle: string; deploymentLead: string; deployments: { title: string; copy: string }[]; + faqKicker: string; faqTitle: string; faqs: { question: string; answer: string }[]; ctaKicker: string; @@ -42,6 +53,7 @@ const zhHans: SecurityCopy = { { value: 'Tool', label: '受控工具访问' }, { value: 'Audit', label: '全程审批审计' }, ], + residencyKicker: '数据放在哪里', residencyTitle: '数据驻留', residencyLead: 'ObjectOS 企业版不要求你把业务数据搬到我们的云上。ObjectStack 运行时连接你的数据库、存储和身份系统,数据驻留边界由你的部署方式决定。', residencyColumns: ['数据类别', '存放位置', '是否离开网络'], @@ -53,6 +65,7 @@ const zhHans: SecurityCopy = { { data: '密钥与设置', location: '你的密钥管理器或加密设置存储', leaves: '否' }, { data: 'AI 请求内容', location: '由你选择的模型提供方或本地模型处理', leaves: '仅在你配置外部模型时' }, ], + aiKicker: 'Agent 如何行动', aiTitle: 'AI Agent 安全模型', aiLead: 'ObjectOS 不把模型当作超级管理员。AI 先理解业务对象,再通过声明式工具查询、分析或触发动作;工具输入经过校验,写操作进入审批队列,并受同一套权限系统约束。', aiSteps: [ @@ -61,6 +74,7 @@ const zhHans: SecurityCopy = { { title: '变更先入队', copy: '会修改元数据或关键状态的工具调用先进入待审批队列,审批人看到 diff 后再决定是否应用。' }, { title: '全程可审计', copy: '对话、工具调用、读取、写入、批准、拒绝和权限变更都可以写入审计日志,方便安全复盘和合规取证。' }, ], + permissionKicker: '谁能做什么', permissionTitle: '权限与审计', permissionLead: '权限模型沿用企业软件成熟词汇:身份、角色、权限集、记录访问和字段安全。简单应用可以只用权限集,复杂 CRM 或多租户应用可以逐层加上更细边界。', permissionLayers: [ @@ -70,6 +84,7 @@ const zhHans: SecurityCopy = { { title: '字段安全', copy: '即使用户能看到记录,敏感字段也可以隐藏或设为只读,并在 API、ObjectQL 和 Console 中统一生效。' }, { title: '审计日志', copy: '记录 CRUD、权限授予、会话撤销、AI 工具调用和审批结果;审计行不可变,只能归档。' }, ], + deploymentKicker: '跑在哪里', deploymentTitle: '部署边界', deploymentLead: 'ObjectOS 企业版可在企业内网中运营 ObjectStack:一个 Node.js 运行时、你的数据库、你的密钥和你的入口层。需要更严格边界时,也可以使用文件制品和离线镜像。', deployments: [ @@ -78,6 +93,7 @@ const zhHans: SecurityCopy = { { title: '隔离网络', copy: '使用离线容器镜像和本地 objectstack.json 制品,不配置云控制面,也不需要公共互联网。' }, { title: '本地模型', copy: '可将 AI 服务指向 Ollama、vLLM 或内部模型端点,避免业务上下文发往外部模型提供方。' }, ], + faqKicker: '常见问题', faqTitle: '安全评审常见问题', faqs: [ { question: 'ObjectOS 会回传数据吗?', answer: '自管部署的 ObjectOS 在线校验许可证,企业版离线许可证可离线校验。除此之外,除非你显式配置 OIDC、邮件、AI 提供方、Webhook 或外部存储等集成,否则业务数据不会离开你的部署。开源 ObjectStack 运行时没有遥测、不查许可证、也不检查更新。' }, @@ -104,6 +120,7 @@ const en: SecurityCopy = { { value: 'Tool', label: 'governed access path' }, { value: 'Audit', label: 'approval and evidence' }, ], + residencyKicker: 'Where data lives', residencyTitle: 'Data residency', residencyLead: 'ObjectOS Enterprise does not require moving business data into our cloud: the ObjectStack runtime connects to your databases, storage, and identity systems, so residency follows your deployment boundary.', residencyColumns: ['Data', 'Location', 'Leaves boundary?'], @@ -115,6 +132,7 @@ const en: SecurityCopy = { { data: 'Secrets and settings', location: 'Your secret manager or encrypted settings store', leaves: 'No' }, { data: 'AI request context', location: 'Your chosen model provider or local model', leaves: 'Only if you configure an external model' }, ], + aiKicker: 'How agents act', aiTitle: 'AI agent safety model', aiLead: 'ObjectOS does not treat the model as an administrator. Agents work through business objects and use declarative tools to query, analyze, or trigger actions. Tool input is validated, mutating work goes through approval, and every call is checked against the same permission system.', aiSteps: [ @@ -123,6 +141,7 @@ const en: SecurityCopy = { { title: 'Queues changes', copy: 'Tools that modify metadata or sensitive state enter a pending-action queue so reviewers can inspect the diff before applying it.' }, { title: 'Leaves evidence', copy: 'Conversations, tool calls, reads, writes, approvals, rejections, and permission changes can be written to audit logs.' }, ], + permissionKicker: 'Who may do what', permissionTitle: 'Permissions and audit', permissionLead: 'The access model uses enterprise software vocabulary: identity, roles, permission sets, record access, and field security. Simple apps can start with permission sets; regulated, CRM, or multi-tenant apps can add finer boundaries later.', permissionLayers: [ @@ -132,6 +151,7 @@ const en: SecurityCopy = { { title: 'Field security', copy: 'Sensitive fields can be hidden or read-only even when the record is visible, consistently across API, ObjectQL, and Console.' }, { title: 'Audit logs', copy: 'Record CRUD, permission grants, session revocation, AI tool calls, and approval decisions; audit rows are immutable and can only be archived.' }, ], + deploymentKicker: 'Where it runs', deploymentTitle: 'Deployment boundary', deploymentLead: 'ObjectOS Enterprise can operate ObjectStack inside your network: one Node.js runtime, your database, your secrets, and your ingress. Stricter environments can use file-backed artifacts and offline images.', deployments: [ @@ -140,6 +160,7 @@ const en: SecurityCopy = { { title: 'Air-gapped', copy: 'Use offline container images and a local objectstack.json artifact with no cloud control plane or public internet requirement.' }, { title: 'Local models', copy: 'Point AI services at Ollama, vLLM, or internal model endpoints to keep business context inside your boundary.' }, ], + faqKicker: 'FAQ', faqTitle: 'Security review FAQ', faqs: [ { question: 'Does ObjectOS phone home?', answer: 'Self-managed ObjectOS validates its license online; Enterprise air-gapped licenses validate offline. Beyond that, unless you explicitly configure integrations such as OIDC, email, AI providers, webhooks, or external storage, no business data leaves your deployment. The open-source ObjectStack runtime has no telemetry, no license check, and no update ping.' }, @@ -152,7 +173,7 @@ const en: SecurityCopy = { ctaTitle: 'Let agents work with business data without crossing the boundary.', ctaCopy: 'Confirm how agents identify users, access objects, trigger actions, enter approval, and leave audit evidence before connecting them to production data.', ctaPrimary: 'Read the security docs', - ctaSecondary: 'Read how to connect existing systems', + ctaSecondary: 'Read the agent security boundaries article', }; const ja: SecurityCopy = { @@ -167,21 +188,26 @@ const ja: SecurityCopy = { { value: '5 層', label: 'ID からフィールドまでの権限モデル' }, { value: 'HITL', label: 'AI 変更の人による承認' }, ], + residencyKicker: 'データの所在', residencyTitle: 'データ所在地', residencyLead: 'ObjectOS Enterprise は業務データを当社クラウドへ移すことを求めません。ObjectStack ランタイムは自社のデータベース、ストレージ、ID 基盤へ接続します。', residencyColumns: ['データ', '保存場所', '外部へ出るか'], + aiKicker: 'エージェントの動き方', aiTitle: 'AI エージェントの安全モデル', aiLead: 'ObjectOS はモデルを管理者として扱いません。AI は宣言的なツールを使い、入力は検証され、変更は承認を通り、同じ権限システムで制約されます。', + permissionKicker: '誰が何をできるか', permissionTitle: '権限と監査', permissionLead: 'ID、ロール、権限セット、レコードアクセス、フィールドセキュリティという企業ソフトウェアの語彙でアクセスを管理します。', + deploymentKicker: '動作場所', deploymentTitle: 'デプロイ境界', deploymentLead: '基本形は 1 つの Node.js ランタイム、自社データベース、自社シークレット、自社 ingress。より厳しい環境ではファイル制品とオフラインイメージを使えます。', + faqKicker: 'よくある質問', faqTitle: 'セキュリティレビュー FAQ', ctaKicker: '次のステップ', ctaTitle: '試験導入の後ではなく、最初にセキュリティレビューを置く。', ctaCopy: 'AI エージェントを実データへ接続する前に、データ所在地、権限、監査証跡、デプロイ境界を確認します。', ctaPrimary: 'セキュリティ文書を読む', - ctaSecondary: '既存システム接続の記事を読む', + ctaSecondary: 'エージェントのセキュリティ境界の記事を読む', }; const de: SecurityCopy = { @@ -191,21 +217,26 @@ const de: SecurityCopy = { eyebrow: 'Sicherheit und Governance', hero: ['Daten bleiben in Ihrem Netzwerk.', 'AI arbeitet innerhalb von Berechtigungen.'], lead: `ObjectOS ist ${positioning.de.descriptor}. ObjectOS Enterprise betreibt die ObjectStack Runtime in Ihrer Infrastruktur; Geschäftsdaten, Identitäten, Audit-Logs, Dateien und Secrets bleiben unter Ihrer Kontrolle.`, + residencyKicker: 'Wo Daten liegen', residencyTitle: 'Datenresidenz', residencyLead: 'ObjectOS Enterprise verlangt nicht, Geschäftsdaten in unsere Cloud zu verschieben. Die ObjectStack Runtime verbindet sich mit Ihren Datenbanken, Speichern und Identitätssystemen.', residencyColumns: ['Daten', 'Speicherort', 'Verlässt es das Netzwerk?'], + aiKicker: 'Wie Agents handeln', aiTitle: 'Sicherheitsmodell für AI Agents', aiLead: 'ObjectOS behandelt das Modell nicht als Administrator. AI arbeitet über deklarative Tools, Eingaben werden validiert, Änderungen werden freigegeben und alle Aufrufe folgen demselben Berechtigungssystem.', + permissionKicker: 'Wer was darf', permissionTitle: 'Berechtigungen und Audit', permissionLead: 'Das Modell nutzt die vertraute Sprache von Unternehmenssoftware: Identität, Rollen, Berechtigungssätze, Datensatz-Zugriff und Feldsicherheit.', + deploymentKicker: 'Wo es läuft', deploymentTitle: 'Deployment-Grenze', deploymentLead: 'Die Standardform ist netzwerkfreundlich: eine Node.js Runtime, Ihre Datenbank, Ihre Secrets und Ihr Ingress. Strengere Umgebungen können file-backed Artefakte und Offline-Images nutzen.', + faqKicker: 'Häufige Fragen', faqTitle: 'FAQ für Sicherheitsreviews', ctaKicker: 'Nächster Schritt', ctaTitle: 'Sicherheitsreview zuerst, nicht nach dem Pilot.', ctaCopy: 'Bestätigen Sie Datenresidenz, Berechtigungen, Audit-Nachweise und Deployment-Form, bevor AI Agents echte Geschäftsdaten berühren.', ctaPrimary: 'Sicherheitsdokumentation lesen', - ctaSecondary: 'Artikel zum Verbinden bestehender Systeme lesen', + ctaSecondary: 'Artikel zu den Sicherheitsgrenzen für Agents lesen', }; const es: SecurityCopy = { @@ -215,21 +246,26 @@ const es: SecurityCopy = { eyebrow: 'Seguridad y gobierno', hero: ['Los datos permanecen en tu red.', 'La AI trabaja dentro de permisos.'], lead: `ObjectOS es ${positioning.es.descriptor}. ObjectOS Enterprise opera el runtime de ObjectStack en tu infraestructura; registros de negocio, identidades, auditoría, archivos y secretos siguen bajo tu control.`, + residencyKicker: 'Dónde viven los datos', residencyTitle: 'Residencia de datos', residencyLead: 'ObjectOS Enterprise no exige mover datos de negocio a nuestra nube. El runtime de ObjectStack se conecta a tus bases de datos, almacenamiento e identidad.', residencyColumns: ['Datos', 'Ubicación', '¿Sale de la red?'], + aiKicker: 'Cómo actúan los agentes', aiTitle: 'Modelo de seguridad para agentes de AI', aiLead: 'ObjectOS no trata al modelo como administrador. La AI usa herramientas declarativas, las entradas se validan, los cambios pasan por aprobación y cada llamada respeta el mismo sistema de permisos.', + permissionKicker: 'Quién puede hacer qué', permissionTitle: 'Permisos y auditoría', permissionLead: 'El modelo usa vocabulario de software empresarial: identidad, roles, conjuntos de permisos, acceso a registros y seguridad de campos.', + deploymentKicker: 'Dónde se ejecuta', deploymentTitle: 'Límite de despliegue', deploymentLead: 'La forma predeterminada es amigable para redes empresariales: un runtime Node.js, tu base de datos, tus secretos y tu entrada. Entornos más estrictos pueden usar artefactos locales e imágenes offline.', + faqKicker: 'Preguntas frecuentes', faqTitle: 'FAQ de revisión de seguridad', ctaKicker: 'Siguiente paso', ctaTitle: 'Pon la revisión de seguridad primero, no después del piloto.', ctaCopy: 'Confirma residencia de datos, permisos, auditoría y despliegue antes de conectar agentes de AI a datos reales.', ctaPrimary: 'Leer documentación de seguridad', - ctaSecondary: 'Leer cómo conectar sistemas existentes', + ctaSecondary: 'Leer el artículo sobre los límites de seguridad de los agentes', }; const fr: SecurityCopy = { @@ -239,21 +275,26 @@ const fr: SecurityCopy = { eyebrow: 'Sécurité et gouvernance', hero: ['Les données restent dans votre réseau.', 'L’AI agit dans les permissions.'], lead: `ObjectOS est ${positioning.fr.descriptor}. ObjectOS Enterprise exploite le runtime ObjectStack dans votre infrastructure ; données métier, identités, journaux d’audit, fichiers et secrets restent sous votre contrôle.`, + residencyKicker: 'Où vivent les données', residencyTitle: 'Résidence des données', residencyLead: 'ObjectOS Enterprise n’exige pas de déplacer vos données métier dans notre cloud. Le runtime ObjectStack se connecte à vos bases de données, stockages et systèmes d’identité.', residencyColumns: ['Données', 'Emplacement', 'Sort du réseau ?'], + aiKicker: 'Comment agissent les agents', aiTitle: 'Modèle de sécurité des agents AI', aiLead: 'ObjectOS ne traite pas le modèle comme un administrateur. L’AI passe par des outils déclaratifs, les entrées sont validées, les changements sont approuvés et chaque appel respecte le même système de permissions.', + permissionKicker: 'Qui peut faire quoi', permissionTitle: 'Permissions et audit', permissionLead: 'Le modèle utilise le vocabulaire du logiciel d’entreprise : identité, rôles, ensembles de permissions, accès aux enregistrements et sécurité des champs.', + deploymentKicker: 'Où ça tourne', deploymentTitle: 'Frontière de déploiement', deploymentLead: 'La forme par défaut convient au réseau d’entreprise : un runtime Node.js, votre base, vos secrets et votre ingress. Les environnements stricts peuvent utiliser des artefacts locaux et des images offline.', + faqKicker: 'Questions fréquentes', faqTitle: 'FAQ de revue sécurité', ctaKicker: 'Étape suivante', ctaTitle: 'Placez la revue sécurité avant le pilote.', ctaCopy: 'Validez résidence des données, permissions, preuves d’audit et déploiement avant de connecter des agents AI aux données réelles.', ctaPrimary: 'Lire la documentation sécurité', - ctaSecondary: 'Lire comment connecter les systèmes existants', + ctaSecondary: 'Lire l’article sur les frontières de sécurité des agents', }; const ko: SecurityCopy = { @@ -263,21 +304,26 @@ const ko: SecurityCopy = { eyebrow: '보안 및 거버넌스', hero: ['데이터는 네트워크 안에 유지하고,', 'AI는 권한 경계 안에서 작동합니다'], lead: `ObjectOS는 ${positioning.ko.descriptor}입니다. ObjectOS Enterprise는 ObjectStack 런타임을 사용자의 인프라에서 운영하며, 비즈니스 기록, ID, 감사 로그, 파일과 시크릿은 사용자가 통제합니다.`, + residencyKicker: '데이터가 있는 곳', residencyTitle: '데이터 레지던시', residencyLead: 'ObjectOS Enterprise는 비즈니스 데이터를 당사 클라우드로 옮기라고 요구하지 않습니다. ObjectStack 런타임은 사용자의 데이터베이스, 스토리지, ID 시스템에 연결됩니다.', residencyColumns: ['데이터', '위치', '네트워크 이탈 여부'], + aiKicker: '에이전트의 동작 방식', aiTitle: 'AI 에이전트 안전 모델', aiLead: 'ObjectOS는 모델을 관리자로 취급하지 않습니다. AI는 선언형 도구를 사용하고 입력은 검증되며 변경은 승인 절차를 거치고 모든 호출은 동일한 권한 시스템의 제약을 받습니다.', + permissionKicker: '누가 무엇을 할 수 있는가', permissionTitle: '권한 및 감사', permissionLead: '접근 모델은 엔터프라이즈 소프트웨어의 언어인 ID, 역할, 권한 세트, 레코드 접근, 필드 보안을 사용합니다.', + deploymentKicker: '실행 위치', deploymentTitle: '배포 경계', deploymentLead: '기본 형태는 하나의 Node.js 런타임, 사용자의 데이터베이스, 시크릿, ingress입니다. 더 엄격한 환경은 파일 기반 아티팩트와 오프라인 이미지를 사용할 수 있습니다.', + faqKicker: '자주 묻는 질문', faqTitle: '보안 검토 FAQ', ctaKicker: '다음 단계', ctaTitle: '파일럿 이후가 아니라 처음부터 보안 검토를 시작하세요.', ctaCopy: 'AI 에이전트를 실제 비즈니스 데이터에 연결하기 전에 데이터 레지던시, 권한, 감사 증거, 배포 형태를 확인하세요.', ctaPrimary: '보안 문서 읽기', - ctaSecondary: '기존 시스템 연결 글 읽기', + ctaSecondary: '에이전트 보안 경계 글 읽기', }; const toHant = (value: unknown): unknown => { diff --git a/src/lib/terms.ts b/src/lib/terms.ts index f57a2b2..29a0030 100644 --- a/src/lib/terms.ts +++ b/src/lib/terms.ts @@ -64,7 +64,7 @@ export function termDescription(term: Term, locale: Locale): string { const label = term.label[locale]; const descriptions: Record> = { en: { - topic: `Articles about ${label}, with practical notes on AI-written enterprise software, governed data, application development, and agent workflows.`, + topic: `Articles about ${label}, with practical notes on executable business ontologies, governed data, application development, and agent workflows.`, solution: `Practical guidance for ${label} scenarios, including data models, workflows, permissions, integrations, and AI agent patterns for enterprise teams.`, role: `Articles for ${label} on building, operating, and governing AI-written business applications with ObjectOS.`, industry: `Articles for ${label} teams on connecting existing systems, business data, workflows, and AI agents without replacing core platforms.`, diff --git a/src/pages/llms.txt.ts b/src/pages/llms.txt.ts index 38c6518..6dabf20 100644 --- a/src/pages/llms.txt.ts +++ b/src/pages/llms.txt.ts @@ -80,7 +80,7 @@ export const GET: APIRoute = async ({ site }) => { '- **Ontology / enterprise ontology**: an ObjectStack application definition plays the role the ontology plays in a Foundry-style system — one typed model of the business that applications, analytics, and agents all read from, so they cannot drift into private definitions of "customer" or "order". The difference is where it lives: an enterprise ontology in a hosted platform is an asset inside that vendor’s product, while an ObjectStack ontology is a directory of files in your repository under Apache 2.0, executed by an open-source runtime. It is also executable rather than a knowledge-representation ontology: no inheritance, no axioms, no reasoner — the definition is validated, then run.', '- **Semantic layer**: a semantic layer is a read contract: it settles what "active customer" or "MRR" means across every dashboard and query, not who may change the underlying record, which operations exist, whether a change needs approval, or what evidence remains afterwards. ObjectStack sits on the other side of that line — the typed definition of an object also declares its permissions, actions, and approval steps, and the runtime enforces all of them on every call, so the definition governs writes rather than only describing reads. It is not a semantic layer over your existing systems: federating an external datasource is read-only by default and early. It does not replace a warehouse semantic layer either, and a company doing serious BI will still want one.', '- **MCP / governed tools**: MCP (Model Context Protocol) is the standard way an AI client calls into an external system. The @objectstack/mcp server generates those tools from the ontology instead of from handwritten glue, which is what makes them governed tools: every call resolves the acting user, is checked against the same object, record, and field permissions as a request from a browser, and lands in the same audit log. The common alternative — a service account holding broad database credentials — has no such boundary.', - '- **AI agents / agent permissions**: agent permissions here are not a second policy system beside the human one. An AI agent acts as the signed-in user and inherits that user’s object, record, and field permissions, so it cannot read or write anything the person it acts for could not, and a structural change routes to the same approval queue a human change would.', + '- **AI agents / agent permissions**: agent permissions here are not a second policy system beside the human one. An AI agent acts as the signed-in user and inherits that user’s object, record, and field permissions, so it cannot read or write anything the person it acts for could not, and a structural change it proposes waits for a person too: on open-source ObjectStack as a git diff, on ObjectOS in the AI Builder’s pending-action queue, where an approver reads the diff and approving is its own permission.', '- **Forward deployed engineer**: the forward deployed engineer model — embed with the client, model their business, ship working software fast — usually ends with that model locked inside a platform the client rents indefinitely. ObjectStack is the ontology-first toolkit the client keeps: the engineer hands over typed files in the client’s own repository plus the open-source runtime that executes them, so the handover includes the definition and not only the running app.', '', '## Primary Pages', @@ -90,7 +90,7 @@ export const GET: APIRoute = async ({ site }) => { (page) => `- [${page.navLabel}](${absoluteUrl(site, marketingPagePath('en', page.slug))}): ${page.description}` ), `- [Security](${absoluteUrl(site, securityPath('en'))}): Data residency, permissions, approvals, audit logs, and the ObjectOS Enterprise self-managed deployment boundary.`, - `- [Pricing](${absoluteUrl(site, pricingPath('en'))}): Open-source ObjectStack and ObjectOS Cloud and Enterprise plans.`, + `- [Pricing](${absoluteUrl(site, pricingPath('en'))}): Open-source ObjectStack, the ObjectOS Cloud plans (Free, Team, Business), Business Self-Managed, and ObjectOS Enterprise.`, `- [Glossary](${absoluteUrl(site, glossaryIndexPath('en'))}): One-sentence definitions of the vocabulary this site uses, each linked to the pages and articles that apply it.`, `- [Articles](${absoluteUrl(site, blogPath('en'))}): Practical writing on AI-native software, enterprise AI agents, integration, modernization, and governance.`, `- [Documentation](https://docs.objectos.ai/): Product and developer documentation.`,