@agent-native/core 0.98.6 → 0.98.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +12 -0
- package/corpus/core/docs/content/external-agents.mdx +22 -12
- package/corpus/core/docs/content/locales/ar-SA/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/de-DE/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/es-ES/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/fr-FR/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/hi-IN/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/ja-JP/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/ko-KR/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/pt-BR/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/zh-CN/external-agents.mdx +8 -2
- package/corpus/core/docs/content/locales/zh-TW/external-agents.mdx +8 -2
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/handlers.ts +6 -5
- package/corpus/core/src/a2a/task-store.ts +63 -0
- package/corpus/core/src/client/session-replay.ts +90 -6
- package/corpus/core/src/integrations/adapters/slack.ts +110 -19
- package/corpus/core/src/integrations/identity.ts +103 -39
- package/corpus/core/src/integrations/pending-tasks-retry-job.ts +2 -1
- package/corpus/core/src/integrations/pending-tasks-store.ts +1 -1
- package/corpus/core/src/integrations/plugin.ts +215 -8
- package/corpus/core/src/integrations/types.ts +37 -0
- package/corpus/core/src/integrations/webhook-handler.ts +1 -0
- package/corpus/core/src/mcp/builtin-tools.ts +5 -2
- package/corpus/templates/analytics/.agents/skills/session-replay/SKILL.md +4 -1
- package/corpus/templates/analytics/AGENTS.md +9 -9
- package/corpus/templates/analytics/changelog/2026-07-12-analytics-uses-the-full-in-app-agent-for-multi-step-incident.md +6 -0
- package/corpus/templates/analytics/server/handlers/session-replay.ts +15 -9
- package/corpus/templates/analytics/server/lib/session-replay-agent-context.ts +23 -5
- package/corpus/templates/analytics/server/lib/session-replay.ts +26 -5
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +4 -1
- package/corpus/templates/analytics/server/routes/api/session-replay/agent-diagnostics.json.get.ts +8 -5
- package/corpus/templates/analytics/server/routes/api/session-replay/agent-events.json.get.ts +8 -3
- package/corpus/templates/calendar/app/components/calendar/DeleteEventDialog.tsx +12 -2
- package/dist/a2a/handlers.d.ts.map +1 -1
- package/dist/a2a/handlers.js +6 -6
- package/dist/a2a/handlers.js.map +1 -1
- package/dist/a2a/task-store.d.ts +12 -0
- package/dist/a2a/task-store.d.ts.map +1 -1
- package/dist/a2a/task-store.js +54 -0
- package/dist/a2a/task-store.js.map +1 -1
- package/dist/client/session-replay.d.ts.map +1 -1
- package/dist/client/session-replay.js +71 -9
- package/dist/client/session-replay.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/integrations/adapters/slack.d.ts.map +1 -1
- package/dist/integrations/adapters/slack.js +94 -11
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/integrations/identity.d.ts +19 -2
- package/dist/integrations/identity.d.ts.map +1 -1
- package/dist/integrations/identity.js +76 -34
- package/dist/integrations/identity.js.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.d.ts.map +1 -1
- package/dist/integrations/pending-tasks-retry-job.js +2 -1
- package/dist/integrations/pending-tasks-retry-job.js.map +1 -1
- package/dist/integrations/pending-tasks-store.js +1 -1
- package/dist/integrations/pending-tasks-store.js.map +1 -1
- package/dist/integrations/plugin.d.ts.map +1 -1
- package/dist/integrations/plugin.js +165 -9
- package/dist/integrations/plugin.js.map +1 -1
- package/dist/integrations/types.d.ts +32 -0
- package/dist/integrations/types.d.ts.map +1 -1
- package/dist/integrations/types.js.map +1 -1
- package/dist/integrations/webhook-handler.js +1 -0
- package/dist/integrations/webhook-handler.js.map +1 -1
- package/dist/mcp/builtin-tools.d.ts.map +1 -1
- package/dist/mcp/builtin-tools.js +5 -2
- package/dist/mcp/builtin-tools.js.map +1 -1
- package/dist/notifications/routes.d.ts +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +3 -3
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/transcribe-voice.d.ts +1 -1
- package/docs/content/external-agents.mdx +22 -12
- package/docs/content/locales/ar-SA/external-agents.mdx +8 -2
- package/docs/content/locales/de-DE/external-agents.mdx +8 -2
- package/docs/content/locales/es-ES/external-agents.mdx +8 -2
- package/docs/content/locales/fr-FR/external-agents.mdx +8 -2
- package/docs/content/locales/hi-IN/external-agents.mdx +8 -2
- package/docs/content/locales/ja-JP/external-agents.mdx +8 -2
- package/docs/content/locales/ko-KR/external-agents.mdx +8 -2
- package/docs/content/locales/pt-BR/external-agents.mdx +8 -2
- package/docs/content/locales/zh-CN/external-agents.mdx +8 -2
- package/docs/content/locales/zh-TW/external-agents.mdx +8 -2
- package/package.json +1 -1
|
@@ -382,7 +382,7 @@ Les applications qui souhaitent que les outils de lecture directe fonctionnent s
|
|
|
382
382
|
|
|
383
383
|
```ts
|
|
384
384
|
export default createAgentChatPlugin({
|
|
385
|
-
appId: "
|
|
385
|
+
appId: "example-app",
|
|
386
386
|
externalAgents: {
|
|
387
387
|
authenticatedReads: "auto",
|
|
388
388
|
writes: "ask_app_only",
|
|
@@ -392,6 +392,8 @@ export default createAgentChatPlugin({
|
|
|
392
392
|
});
|
|
393
393
|
```
|
|
394
394
|
|
|
395
|
+
Il s'agit d'un exemple de politique générique. Analytics définit intentionnellement `authenticatedReads: "off"` et n'expose que les actions `connectorCatalog` qui ont été examinées.
|
|
396
|
+
|
|
395
397
|
`authenticatedReads: "auto"` ajoute uniquement les actions qui déclarent explicitement tous les éléments suivants :
|
|
396
398
|
|
|
397
399
|
- `http: { method: "GET" }`
|
|
@@ -404,7 +406,11 @@ La politique est authentifiée, et non anonyme. L'identité MCP OAuth/connect es
|
|
|
404
406
|
|
|
405
407
|
Les outils Core `db-schema` et `db-query` ne sont pas automatiquement exposés comme lectures externes. Ils restent disponibles pour l'agent interne de l'application via le chemin SQL habituellement délimité, mais un accès large au schéma/SQL est trop puissant pour être déduit de simples métadonnées de lecture. Si une application a besoin de requêtes externes directes, elle doit exposer une action GET propre avec des contrôles d'accès et des limites, ou une liste explicite de tables/colonnes avec des limites de lignes, d'octets, de durée et d'audit. `db-exec` et `db-patch` restent hors de la surface automatique.
|
|
406
408
|
|
|
407
|
-
|
|
409
|
+
Il s'agit d'une exclusion stricte basée sur le nom, et non d'une simple omission de métadonnées : les outils génériques de base de données, de seed, de session de navigateur, d'extensions et de radiographie contextuelle ne sont jamais exposés automatiquement, même si une modification future annote accidentellement l'un d'eux avec l'ensemble complet des indicateurs de lecture authentifiée — ils nécessitent toujours une entrée explicite dans `connectorCatalog`.
|
|
410
|
+
|
|
411
|
+
Une application qui fournit `resolveExecutionContext` remplace explicitement cette chaîne d'identité par défaut. Son résolveur doit refuser indépendamment les appelants non vérifiés, les invités, les membres externes et les espaces de travail non liés avant de renvoyer un principal.
|
|
412
|
+
|
|
413
|
+
Avant l'exécution de l'agent, un message direct Slack vérifié est associé à un membre existant de l'organisation Agent Native et le lien d'identité entre l'espace de travail et l'utilisateur est enregistré. Le contexte utilisateur/organisation qui en résulte charge les ressources, les instructions et les compétences de cet utilisateur. Par défaut, les membres de l'espace de travail dont le profil a bien été chargé, mais dont l'adresse e-mail est absente ou qui ne sont pas encore membres de l'organisation, sont refusés. Les applications peuvent définir explicitement `allowAnonymousOrgScopedSlackDm: true` pour exécuter ces membres comme principal de service anonyme limité à l'organisation : le même niveau de visibilité à l'échelle de l'organisation que celui des canaux partagés, sans jamais accéder aux données privées de l'utilisateur. L'agent reçoit une note visible et Slack explique une fois comment obtenir un accès personnel. Cette option n'admet jamais les échecs de chargement du profil, les appelants non vérifiés, les invités, les membres externes (Slack Connect) ni les espaces de travail non liés à une organisation ; ces cas reçoivent une réponse de refus polie. Les canaux Slack partagés utilisent un principal de service et n'empruntent pas les autorisations privées d'un participant. OAuth géré et le manifeste d'application Slack généré demandent la portée de bot `users:read.email`. Les installations existantes doivent être reconnectées ou réinstallées pour accorder une portée nouvellement ajoutée ; les anciennes installations par jeton de bot doivent l'ajouter manuellement dans Slack. Sans cette portée, les messages directs sont refusés sauf si l'application active explicitement `allowAnonymousOrgScopedSlackDm`.
|
|
408
414
|
|
|
409
415
|
### Niveau complet (adhésion explicite uniquement) {#full-tier}
|
|
410
416
|
|
|
@@ -380,7 +380,7 @@ MCP सर्वर प्रत्येक कॉलर को डिफ़ॉ
|
|
|
380
380
|
|
|
381
381
|
```ts
|
|
382
382
|
export default createAgentChatPlugin({
|
|
383
|
-
appId: "
|
|
383
|
+
appId: "example-app",
|
|
384
384
|
externalAgents: {
|
|
385
385
|
authenticatedReads: "auto",
|
|
386
386
|
writes: "ask_app_only",
|
|
@@ -390,6 +390,8 @@ export default createAgentChatPlugin({
|
|
|
390
390
|
});
|
|
391
391
|
```
|
|
392
392
|
|
|
393
|
+
यह नीति का सामान्य उदाहरण है। Analytics जानबूझकर `authenticatedReads: "off"` सेट करता है और केवल समीक्षा किए गए `connectorCatalog` actions को उपलब्ध कराता है।
|
|
394
|
+
|
|
393
395
|
`authenticatedReads: "auto"` केवल उन actions को जोड़ता है जो स्पष्ट रूप से ये सभी घोषित करते हैं:
|
|
394
396
|
|
|
395
397
|
- `http: { method: "GET" }`
|
|
@@ -402,7 +404,11 @@ export default createAgentChatPlugin({
|
|
|
402
404
|
|
|
403
405
|
Core के `db-schema` और `db-query` को स्वचालित बाहरी रीड के रूप में प्रकाशित नहीं किया जाता। वे सामान्य स्कोप किए गए SQL पथ के माध्यम से ऐप एजेंट के लिए उपलब्ध रहते हैं, लेकिन व्यापक स्कीमा/SQL पहुँच केवल read-only मेटाडेटा से अनुमान लगाने के लिए बहुत शक्तिशाली है। सीधे बाहरी क्वेरी की आवश्यकता होने पर ऐप को अपने access checks और सीमाओं वाला GET action, या rows, bytes, timeout और audit limits वाली स्पष्ट table/column allow-list देनी चाहिए। `db-exec` और `db-patch` स्वचालित सतह से बाहर रहते हैं।
|
|
404
406
|
|
|
405
|
-
|
|
407
|
+
यह नाम-आधारित सख्त बहिष्करण है, केवल मेटाडेटा की चूक नहीं: सामान्य डेटाबेस/seed/ब्राउज़र-सत्र/एक्सटेंशन/संदर्भ-एक्सरे टूल कभी भी स्वचालित रूप से उजागर नहीं होते, भले ही भविष्य का कोई बदलाव गलती से इनमें से किसी एक को पूर्ण authenticated-read फ़्लैग सेट के साथ चिह्नित कर दे — उन्हें हमेशा एक स्पष्ट `connectorCatalog` प्रविष्टि की आवश्यकता होती है।
|
|
408
|
+
|
|
409
|
+
`resolveExecutionContext` देने वाला ऐप इस डिफ़ॉल्ट पहचान क्रम को स्पष्ट रूप से बदल देता है। उसके resolver को principal लौटाने से पहले असत्यापित callers, guests, external members और unlinked workspaces को स्वतंत्र रूप से अस्वीकार करना होगा।
|
|
410
|
+
|
|
411
|
+
एजेंट चलने से पहले सत्यापित Slack DM को Agent Native संगठन के किसी मौजूदा सदस्य से मिलाया जाता है और workspace/user पहचान लिंक सहेजा जाता है। इससे बने user/org संदर्भ में उस उपयोगकर्ता के संसाधन, निर्देश और skills लोड होते हैं। डिफ़ॉल्ट रूप से सफलतापूर्वक प्रोफ़ाइल मिले ऐसे workspace सदस्य अस्वीकार किए जाते हैं जिनका ईमेल उपलब्ध नहीं है या जो अभी संगठन के सदस्य नहीं हैं। ऐप इन सदस्यों को संगठन-स्कोप वाले अनाम service principal के रूप में चलाने के लिए स्पष्ट रूप से `allowAnonymousOrgScopedSlackDm: true` सेट कर सकते हैं — साझा चैनलों वाली संगठन-व्यापी दृश्यता के उसी स्तर पर, लेकिन कभी भी उपयोगकर्ता-निजी पहुँच के साथ नहीं — साथ में एजेंट को दिखाई देने वाला नोट और व्यक्तिगत पहुँच पाने का तरीका बताने वाली एक बार की Slack सूचना। यह opt-in प्रोफ़ाइल लोड न होने, असत्यापित callers, guests, external (Slack Connect) members या किसी संगठन से न जुड़े workspace को कभी अनुमति नहीं देता; उन्हें विनम्र अस्वीकृति मिलती है। साझा Slack चैनल service principal का उपयोग करते हैं और किसी प्रतिभागी की निजी permissions नहीं लेते। Managed OAuth और generated Slack app manifest दोनों bot scope `users:read.email` मांगते हैं। नया scope देने के लिए मौजूदा installations को reconnect/reinstall करना होगा; पुराने bot-token installations को इसे Slack में manually जोड़ना होगा। इसके बिना DM fail closed होते हैं, जब तक ऐप स्पष्ट रूप से `allowAnonymousOrgScopedSlackDm` सक्षम न करे।
|
|
406
412
|
|
|
407
413
|
### पूर्ण स्तरीय (केवल स्पष्ट ऑप्ट-इन) {#full-tier}
|
|
408
414
|
|
|
@@ -380,7 +380,7 @@ MCP サーバーは、ホスト型コネクタ (ChatGPT、Claude)、コード
|
|
|
380
380
|
|
|
381
381
|
```ts
|
|
382
382
|
export default createAgentChatPlugin({
|
|
383
|
-
appId: "
|
|
383
|
+
appId: "example-app",
|
|
384
384
|
externalAgents: {
|
|
385
385
|
authenticatedReads: "auto",
|
|
386
386
|
writes: "ask_app_only",
|
|
@@ -390,6 +390,8 @@ export default createAgentChatPlugin({
|
|
|
390
390
|
});
|
|
391
391
|
```
|
|
392
392
|
|
|
393
|
+
これは一般的なポリシーの例です。Analytics は意図的に `authenticatedReads: "off"` を設定し、レビュー済みの `connectorCatalog` アクションだけを公開します。
|
|
394
|
+
|
|
393
395
|
`authenticatedReads: "auto"` が追加するのは、次のすべてを明示的に宣言したアクションだけです。
|
|
394
396
|
|
|
395
397
|
- `http: { method: "GET" }`
|
|
@@ -402,7 +404,11 @@ export default createAgentChatPlugin({
|
|
|
402
404
|
|
|
403
405
|
Core の `db-schema` と `db-query` は外部の自動読み取りとして公開されません。通常のスコープ付き SQL パスを通じてアプリ内エージェントからは利用できますが、広範なスキーマ/SQL アクセスは read-only メタデータだけから推測するには強力すぎます。外部クエリを直接許可する場合は、アクセスチェックと上限を持つアプリ所有の GET action、または行数・バイト数・タイムアウト・監査の制限を備えた明示的なテーブル/カラム許可リストを追加してください。`db-exec` と `db-patch` は自動公開の対象外です。
|
|
404
406
|
|
|
405
|
-
|
|
407
|
+
これは名前ベースの厳格な除外であり、単なるメタデータの記載漏れではありません。汎用のデータベース、seed、ブラウザ セッション、拡張、コンテキスト Xray のツールは、将来の変更で誤って完全な認証済み読み取りフラグセットが付与された場合でも、自動的に公開されることは決してありません — これらには常に明示的な `connectorCatalog` エントリが必要です。
|
|
408
|
+
|
|
409
|
+
`resolveExecutionContext` を指定するアプリは、このデフォルトの ID 判定を明示的に置き換えます。そのリゾルバーはプリンシパルを返す前に、未検証の呼び出し元、ゲスト、外部メンバー、未接続のワークスペースを独自に拒否する必要があります。
|
|
410
|
+
|
|
411
|
+
検証済みの Slack DM は、エージェントを実行する前に既存の Agent Native 組織メンバーと照合され、ワークスペース/ユーザーの ID リンクとして保存されます。生成されたユーザー/組織コンテキストには、そのユーザーのリソース、指示、スキルが読み込まれます。デフォルトでは、プロフィールの取得に成功しても、メールアドレスがない、またはまだ組織メンバーではないワークスペース メンバーは拒否されます。アプリは `allowAnonymousOrgScopedSlackDm: true` を明示的に設定することで、それらのメンバーを組織スコープの匿名サービスプリンシパルとして実行できます。これは共有チャンネルと同じ組織全体の可視性レベルですが、ユーザーの非公開データには決してアクセスしません。エージェントに表示される注記と、個人アクセスの取得方法を説明する 1 回限りの Slack 通知が付きます。この opt-in は、プロフィール取得の失敗、未検証の呼び出し元、ゲストや外部 (Slack Connect) メンバー、組織に接続されていないワークスペースを許可しません。それらには丁寧な拒否応答を返します。Slack の共有チャンネルはサービスプリンシパルを使い、参加者の個人的な権限を借用しません。管理対象 OAuth と生成される Slack アプリ マニフェストは、bot スコープ `users:read.email` を要求します。新たに追加されたスコープを付与するには、既存のインストールを再接続/再インストールする必要があります。従来の bot トークンによるインストールでは、Slack でスコープを手動追加してください。このスコープがない場合、アプリが `allowAnonymousOrgScopedSlackDm` を明示的に有効にしない限り、DM は拒否されます。
|
|
406
412
|
|
|
407
413
|
### フルティア (明示的なオプトインのみ) {#full-tier}
|
|
408
414
|
|
|
@@ -380,7 +380,7 @@ MCP 서버는 호스팅된 커넥터(ChatGPT, Claude), 코드 클라이언트(Cl
|
|
|
380
380
|
|
|
381
381
|
```ts
|
|
382
382
|
export default createAgentChatPlugin({
|
|
383
|
-
appId: "
|
|
383
|
+
appId: "example-app",
|
|
384
384
|
externalAgents: {
|
|
385
385
|
authenticatedReads: "auto",
|
|
386
386
|
writes: "ask_app_only",
|
|
@@ -390,6 +390,8 @@ export default createAgentChatPlugin({
|
|
|
390
390
|
});
|
|
391
391
|
```
|
|
392
392
|
|
|
393
|
+
이는 일반적인 정책 예시입니다. Analytics는 의도적으로 `authenticatedReads: "off"`를 설정하고 검토된 `connectorCatalog` action만 노출합니다.
|
|
394
|
+
|
|
393
395
|
`authenticatedReads: "auto"`는 다음을 모두 명시적으로 선언한 action만 추가합니다.
|
|
394
396
|
|
|
395
397
|
- `http: { method: "GET" }`
|
|
@@ -402,7 +404,11 @@ export default createAgentChatPlugin({
|
|
|
402
404
|
|
|
403
405
|
Core `db-schema`와 `db-query`는 자동 외부 읽기로 공개되지 않습니다. 일반적인 범위 지정 SQL 경로를 통해 앱 내부 에이전트에서는 사용할 수 있지만, 광범위한 스키마/SQL 접근은 읽기 전용 메타데이터만으로 추론하기에는 너무 강력합니다. 외부 쿼리가 필요하면 접근 검사와 제한을 갖춘 앱 소유 GET action 또는 행·바이트·시간 제한과 감사를 포함한 명시적 테이블/열 허용 목록을 제공하세요. `db-exec`와 `db-patch`는 자동 표면에 포함되지 않습니다.
|
|
404
406
|
|
|
405
|
-
|
|
407
|
+
이는 이름 기반의 강력한 제외이며 단순한 메타데이터 누락이 아닙니다. 일반 데이터베이스, seed, 브라우저 세션, 확장, context-xray 도구는 향후 변경으로 인해 실수로 전체 인증된 읽기 플래그 집합이 지정되더라도 절대 자동으로 노출되지 않습니다 — 이러한 도구는 항상 명시적인 `connectorCatalog` 항목이 필요합니다.
|
|
408
|
+
|
|
409
|
+
`resolveExecutionContext`를 제공하는 앱은 이 기본 ID 확인 절차를 명시적으로 대체합니다. 해당 resolver는 principal을 반환하기 전에 검증되지 않은 호출자, 게스트, 외부 구성원, 연결되지 않은 workspace를 독립적으로 거부해야 합니다.
|
|
410
|
+
|
|
411
|
+
검증된 Slack DM은 에이전트가 실행되기 전에 기존 Agent Native 조직 구성원과 연결되고 workspace/user ID 링크로 저장됩니다. 그 결과 생성된 사용자/조직 컨텍스트에는 해당 사용자의 리소스, 지침 및 skills가 로드됩니다. 기본적으로 프로필을 정상적으로 가져왔지만 이메일이 없거나 아직 조직 구성원이 아닌 workspace 구성원은 거부됩니다. 앱은 `allowAnonymousOrgScopedSlackDm: true`를 명시적으로 설정해 이러한 구성원을 조직 범위의 익명 service principal로 실행할 수 있습니다. 이는 공유 채널과 동일한 조직 전체 공개 수준이지만 사용자 비공개 데이터에는 절대 접근하지 않습니다. 에이전트에 표시되는 메모와 개인 액세스를 얻는 방법을 설명하는 일회성 Slack 안내가 함께 제공됩니다. 이 opt-in은 프로필 가져오기 실패, 검증되지 않은 호출자, 게스트, 외부(Slack Connect) 구성원 또는 조직에 연결되지 않은 workspace를 허용하지 않으며, 이들에게는 정중한 거절 응답을 보냅니다. Slack 공유 채널은 service principal을 사용하며 참여자의 개인 권한을 빌리지 않습니다. 관리형 OAuth와 생성된 Slack 앱 매니페스트는 모두 bot scope `users:read.email`을 요청합니다. 새로 추가된 scope를 부여하려면 기존 설치를 다시 연결/설치해야 하며, 이전 bot-token 설치는 Slack에서 scope를 수동으로 추가해야 합니다. 이 scope가 없으면 앱이 `allowAnonymousOrgScopedSlackDm`을 명시적으로 활성화하지 않는 한 DM은 거부됩니다.
|
|
406
412
|
|
|
407
413
|
### 전체 등급(명시적 선택만 해당) {#full-tier}
|
|
408
414
|
|
|
@@ -382,7 +382,7 @@ Aplicativos que desejam que as ferramentas de leitura direta funcionem sem mante
|
|
|
382
382
|
|
|
383
383
|
```ts
|
|
384
384
|
export default createAgentChatPlugin({
|
|
385
|
-
appId: "
|
|
385
|
+
appId: "example-app",
|
|
386
386
|
externalAgents: {
|
|
387
387
|
authenticatedReads: "auto",
|
|
388
388
|
writes: "ask_app_only",
|
|
@@ -392,6 +392,8 @@ export default createAgentChatPlugin({
|
|
|
392
392
|
});
|
|
393
393
|
```
|
|
394
394
|
|
|
395
|
+
Este é um exemplo genérico da política. O Analytics define intencionalmente `authenticatedReads: "off"` e expõe somente as actions revisadas de `connectorCatalog`.
|
|
396
|
+
|
|
395
397
|
`authenticatedReads: "auto"` adiciona somente actions que declaram explicitamente todos os itens a seguir:
|
|
396
398
|
|
|
397
399
|
- `http: { method: "GET" }`
|
|
@@ -404,7 +406,11 @@ A política é autenticada, não anônima. A identidade MCP OAuth/connect é tra
|
|
|
404
406
|
|
|
405
407
|
Os `db-schema` e `db-query` do Core não são expostos automaticamente como leituras externas. Eles continuam disponíveis ao agente interno do aplicativo pelo caminho SQL com escopo normal, mas o acesso amplo ao esquema/SQL é poderoso demais para ser inferido apenas de metadados de leitura. Se o aplicativo precisar de consultas externas diretas, exponha uma action GET própria com controles e limites de acesso, ou uma lista explícita de tabelas/colunas com limites de linhas, bytes, tempo e auditoria. `db-exec` e `db-patch` permanecem fora da superfície automática.
|
|
406
408
|
|
|
407
|
-
|
|
409
|
+
Trata-se de uma exclusão rígida baseada em nome, não apenas uma omissão de metadados: ferramentas genéricas de banco de dados, seed, sessão de navegador, extensões e raio X de contexto nunca são expostas automaticamente, mesmo que uma mudança futura marque acidentalmente uma delas com o conjunto completo de flags de leitura autenticada — elas sempre exigem uma entrada explícita em `connectorCatalog`.
|
|
410
|
+
|
|
411
|
+
Um aplicativo que fornece `resolveExecutionContext` substitui explicitamente essa cadeia de identidade padrão. O resolver deve rejeitar de forma independente autores não verificados, convidados, membros externos e workspaces não vinculados antes de retornar um principal.
|
|
412
|
+
|
|
413
|
+
Antes de o agente ser executado, uma DM verificada do Slack é associada a um membro existente da organização Agent Native e o vínculo de identidade entre workspace e usuário é salvo. O contexto resultante de usuário/organização carrega os recursos, as instruções e as skills desse usuário. Por padrão, membros do workspace cujo perfil foi carregado, mas cujo e-mail está ausente ou que ainda não pertencem à organização, são recusados. Os aplicativos podem definir explicitamente `allowAnonymousOrgScopedSlackDm: true` para executar esses membros como um principal de serviço anônimo com escopo da organização — o mesmo nível de visibilidade para toda a organização usado pelos canais compartilhados, mas nunca acesso privado do usuário — com uma observação visível ao agente e um aviso único no Slack explicando como obter acesso pessoal. Essa opção nunca admite falhas no carregamento do perfil, autores não verificados, convidados, membros externos (Slack Connect) ou workspaces não conectados a uma organização; esses casos recebem uma resposta educada de recusa. Canais compartilhados do Slack usam um principal de serviço e não herdam as permissões privadas de um participante. O OAuth gerenciado e o manifesto gerado do aplicativo Slack solicitam o escopo de bot `users:read.email`. Instalações existentes precisam ser reconectadas/reinstaladas para conceder um escopo recém-adicionado; instalações antigas com token de bot precisam adicioná-lo manualmente no Slack. Sem ele, as DMs são recusadas, a menos que o aplicativo habilite explicitamente `allowAnonymousOrgScopedSlackDm`.
|
|
408
414
|
|
|
409
415
|
### Nível completo (somente aceitação explícita) {#full-tier}
|
|
410
416
|
|
|
@@ -379,7 +379,7 @@ MCP 服务器默认为每个调用者提供一个**紧凑的目录** — 托管
|
|
|
379
379
|
|
|
380
380
|
```ts
|
|
381
381
|
export default createAgentChatPlugin({
|
|
382
|
-
appId: "
|
|
382
|
+
appId: "example-app",
|
|
383
383
|
externalAgents: {
|
|
384
384
|
authenticatedReads: "auto",
|
|
385
385
|
writes: "ask_app_only",
|
|
@@ -389,6 +389,8 @@ export default createAgentChatPlugin({
|
|
|
389
389
|
});
|
|
390
390
|
```
|
|
391
391
|
|
|
392
|
+
这是一个通用政策示例。Analytics 会有意设置 `authenticatedReads: "off"`,并且只公开经过审核的 `connectorCatalog` action。
|
|
393
|
+
|
|
392
394
|
`authenticatedReads: "auto"` 只会添加明确声明了以下全部内容的 action:
|
|
393
395
|
|
|
394
396
|
- `http: { method: "GET" }`
|
|
@@ -401,7 +403,11 @@ export default createAgentChatPlugin({
|
|
|
401
403
|
|
|
402
404
|
Core `db-schema` 和 `db-query` 不会自动作为外部读取公开。它们仍可通过正常的作用域 SQL 路径供应用内代理使用,但广泛的架构/SQL 访问过于强大,不能仅凭只读元数据推断。如果应用需要直接外部查询,应提供带访问检查和边界的应用自有 GET action,或明确的表/列允许列表,并限制行数、字节数、超时和审计。`db-exec` 和 `db-patch` 仍不属于自动公开范围。
|
|
403
405
|
|
|
404
|
-
|
|
406
|
+
这是一种基于名称的硬性排除,而不仅仅是元数据遗漏:通用的数据库、seed、浏览器会话、扩展和上下文 X 射线工具永远不会被自动公开,即使未来的更改意外地为其中某个工具标注了完整的已认证读取标志组合也是如此 — 它们始终需要在 `connectorCatalog` 中显式声明。
|
|
407
|
+
|
|
408
|
+
提供 `resolveExecutionContext` 的应用会明确替换此默认身份判定流程。其解析器必须在返回主体前自行拒绝未经验证的调用者、访客、外部成员以及未关联的工作区。
|
|
409
|
+
|
|
410
|
+
经过验证的 Slack 私信会在代理运行前匹配现有的 Agent Native 组织成员,并保存工作区/用户身份关联;由此生成的用户/组织上下文会加载该用户的资源、指令和技能。默认情况下,已成功获取资料但缺少电子邮件或尚未成为组织成员的工作区成员会被拒绝。应用可以明确设置 `allowAnonymousOrgScopedSlackDm: true`,让这些成员改用组织范围的匿名服务主体运行——其组织级可见性与共享频道相同,但绝不包含用户私有访问——同时向代理显示说明,并通过 Slack 一次性提示如何获得个人访问权限。此选择加入绝不会允许资料获取失败、未经验证的调用者、访客、外部(Slack Connect)成员或尚未连接组织的工作区;这些情况会收到礼貌的拒绝回复。Slack 共享频道使用服务主体,不会借用任何参与者的私人权限。托管 OAuth 和生成的 Slack 应用 manifest 都会请求 bot scope `users:read.email`。已有安装必须重新连接/安装才能授予新增的 scope;旧版 bot token 安装则必须在 Slack 中手动添加该 scope。没有此 scope 时,私信会被拒绝,除非应用明确启用 `allowAnonymousOrgScopedSlackDm`。
|
|
405
411
|
|
|
406
412
|
### 完整层(仅限明确选择加入) {#full-tier}
|
|
407
413
|
|
|
@@ -379,7 +379,7 @@ MCP 伺服器預設為每個呼叫者提供一個**緊湊的目錄** — 託管
|
|
|
379
379
|
|
|
380
380
|
```ts
|
|
381
381
|
export default createAgentChatPlugin({
|
|
382
|
-
appId: "
|
|
382
|
+
appId: "example-app",
|
|
383
383
|
externalAgents: {
|
|
384
384
|
authenticatedReads: "auto",
|
|
385
385
|
writes: "ask_app_only",
|
|
@@ -389,6 +389,8 @@ export default createAgentChatPlugin({
|
|
|
389
389
|
});
|
|
390
390
|
```
|
|
391
391
|
|
|
392
|
+
這是一般政策範例。Analytics 會刻意設定 `authenticatedReads: "off"`,而且只公開經過審查的 `connectorCatalog` action。
|
|
393
|
+
|
|
392
394
|
`authenticatedReads: "auto"` 只會加入明確宣告以下全部內容的 action:
|
|
393
395
|
|
|
394
396
|
- `http: { method: "GET" }`
|
|
@@ -401,7 +403,11 @@ export default createAgentChatPlugin({
|
|
|
401
403
|
|
|
402
404
|
Core `db-schema` 與 `db-query` 不會自動公開為外部讀取。它們仍可透過一般的範圍 SQL 路徑供應用程式內代理使用,但廣泛的結構描述/SQL 存取過於強大,不能只從唯讀中繼資料推斷。若應用程式需要直接外部查詢,請提供具有存取檢查與限制的應用程式自有 GET action,或明確的資料表/欄位允許清單,並限制資料列、位元組、逾時與稽核。`db-exec` 與 `db-patch` 仍不屬於自動公開範圍。
|
|
403
405
|
|
|
404
|
-
|
|
406
|
+
這是一種以名稱為依據的硬性排除,而不只是中繼資料的遺漏:通用的資料庫、seed、瀏覽器工作階段、擴充功能與 context-xray 工具永遠不會自動公開,即使未來的變更意外為其中某個工具標註了完整的已驗證讀取旗標組合也一樣 — 它們一律需要在 `connectorCatalog` 中明確宣告。
|
|
407
|
+
|
|
408
|
+
提供 `resolveExecutionContext` 的應用程式會明確取代這套預設身分判定流程。其解析器必須在傳回主體之前,自行拒絕未經驗證的呼叫者、訪客、外部成員以及未連結的工作區。
|
|
409
|
+
|
|
410
|
+
經過驗證的 Slack 私訊會在代理執行前配對現有的 Agent Native 組織成員,並儲存工作區/使用者身分連結;由此產生的使用者/組織內容會載入該使用者的資源、指示和技能。預設情況下,已成功取得資料但缺少電子郵件或尚未成為組織成員的工作區成員會被拒絕。應用程式可以明確設定 `allowAnonymousOrgScopedSlackDm: true`,讓這些成員改用組織範圍的匿名服務主體執行——其組織級可見性與共用頻道相同,但絕不包含使用者私人存取——同時向代理顯示說明,並透過 Slack 一次性提示如何取得個人存取權。這項選擇加入絕不允許資料取得失敗、未經驗證的呼叫者、訪客、外部(Slack Connect)成員或尚未連接組織的工作區;這些情況會收到禮貌的拒絕回覆。Slack 共用頻道使用服務主體,不會借用任何參與者的私人權限。託管 OAuth 與產生的 Slack 應用程式 manifest 都會要求 bot scope `users:read.email`。現有安裝必須重新連接/安裝,才能授予新增的 scope;舊版 bot token 安裝則必須在 Slack 中手動加入該 scope。若沒有此 scope,私訊會被拒絕,除非應用程式明確啟用 `allowAnonymousOrgScopedSlackDm`。
|
|
405
411
|
|
|
406
412
|
### 完整層(僅限明確選取加入) {#full-tier}
|
|
407
413
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agent-native/core",
|
|
3
|
-
"version": "0.98.
|
|
3
|
+
"version": "0.98.8",
|
|
4
4
|
"description": "Framework for agent-native application development — where AI agents and UI share SQL state, actions, and context",
|
|
5
5
|
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
6
6
|
"bugs": {
|