@oxygen-agent/cli 1.1014.136 → 1.1014.618
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/README.md +1 -1
- package/dist/admin-primary-providers-render.js +27 -19
- package/dist/cli-output.d.ts +12 -0
- package/dist/cli-output.js +395 -0
- package/dist/cli-paths.d.ts +1 -0
- package/dist/cli-paths.js +3 -0
- package/dist/cli-profile-context.d.ts +3 -0
- package/dist/cli-profile-context.js +13 -0
- package/dist/command-manifest.d.ts +15 -0
- package/dist/command-manifest.js +23 -1
- package/dist/command-support.d.ts +438 -0
- package/dist/command-support.js +1610 -0
- package/dist/commands/action-column.d.ts +3 -0
- package/dist/commands/action-column.js +43 -0
- package/dist/commands/activation.d.ts +3 -0
- package/dist/commands/activation.js +24 -0
- package/dist/commands/admin.d.ts +3 -0
- package/dist/commands/admin.js +347 -0
- package/dist/commands/ads.d.ts +3 -0
- package/dist/commands/ads.js +62 -0
- package/dist/commands/agent.d.ts +3 -0
- package/dist/commands/agent.js +274 -0
- package/dist/commands/api-keys.d.ts +3 -0
- package/dist/commands/api-keys.js +77 -0
- package/dist/commands/approvals.d.ts +3 -0
- package/dist/commands/approvals.js +518 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.js +230 -0
- package/dist/commands/billing.d.ts +3 -0
- package/dist/commands/billing.js +357 -0
- package/dist/commands/blueprints.d.ts +3 -0
- package/dist/commands/blueprints.js +312 -0
- package/dist/commands/budget.d.ts +3 -0
- package/dist/commands/budget.js +55 -0
- package/dist/commands/callables.d.ts +3 -0
- package/dist/commands/callables.js +111 -0
- package/dist/commands/capabilities.d.ts +3 -0
- package/dist/commands/capabilities.js +44 -0
- package/dist/commands/cells.d.ts +3 -0
- package/dist/commands/cells.js +94 -0
- package/dist/commands/columns.d.ts +3 -0
- package/dist/commands/columns.js +1628 -0
- package/dist/commands/commands.d.ts +3 -0
- package/dist/commands/commands.js +45 -0
- package/dist/commands/comments.d.ts +3 -0
- package/dist/commands/comments.js +188 -0
- package/dist/commands/companies.d.ts +3 -0
- package/dist/commands/companies.js +312 -0
- package/dist/commands/connections.d.ts +3 -0
- package/dist/commands/connections.js +39 -0
- package/dist/commands/context.d.ts +3 -0
- package/dist/commands/context.js +170 -0
- package/dist/commands/copilot.d.ts +3 -0
- package/dist/commands/copilot.js +565 -0
- package/dist/commands/crm.d.ts +3 -0
- package/dist/commands/crm.js +1669 -0
- package/dist/commands/custom-integrations.d.ts +3 -0
- package/dist/commands/custom-integrations.js +140 -0
- package/dist/commands/dashboards.d.ts +3 -0
- package/dist/commands/dashboards.js +240 -0
- package/dist/commands/db.d.ts +3 -0
- package/dist/commands/db.js +190 -0
- package/dist/commands/deliverability.d.ts +3 -0
- package/dist/commands/deliverability.js +90 -0
- package/dist/commands/directory.d.ts +3 -0
- package/dist/commands/directory.js +101 -0
- package/dist/commands/domains.d.ts +3 -0
- package/dist/commands/domains.js +604 -0
- package/dist/commands/egress.d.ts +3 -0
- package/dist/commands/egress.js +130 -0
- package/dist/commands/email.d.ts +3 -0
- package/dist/commands/email.js +49 -0
- package/dist/commands/engagement.d.ts +3 -0
- package/dist/commands/engagement.js +189 -0
- package/dist/commands/enrich-column.d.ts +3 -0
- package/dist/commands/enrich-column.js +149 -0
- package/dist/commands/enrichment.d.ts +3 -0
- package/dist/commands/enrichment.js +49 -0
- package/dist/commands/feedback.d.ts +3 -0
- package/dist/commands/feedback.js +96 -0
- package/dist/commands/feeds.d.ts +3 -0
- package/dist/commands/feeds.js +486 -0
- package/dist/commands/find.d.ts +3 -0
- package/dist/commands/find.js +159 -0
- package/dist/commands/followers.d.ts +3 -0
- package/dist/commands/followers.js +39 -0
- package/dist/commands/formulas.d.ts +3 -0
- package/dist/commands/formulas.js +43 -0
- package/dist/commands/home.d.ts +3 -0
- package/dist/commands/home.js +22 -0
- package/dist/commands/inbox.d.ts +3 -0
- package/dist/commands/inbox.js +779 -0
- package/dist/commands/integrations.d.ts +3 -0
- package/dist/commands/integrations.js +290 -0
- package/dist/commands/knowledge.d.ts +3 -0
- package/dist/commands/knowledge.js +874 -0
- package/dist/commands/lead-sourcing.d.ts +3 -0
- package/dist/commands/lead-sourcing.js +52 -0
- package/dist/commands/limits.d.ts +3 -0
- package/dist/commands/limits.js +54 -0
- package/dist/commands/linkedin.d.ts +3 -0
- package/dist/commands/linkedin.js +275 -0
- package/dist/commands/login.d.ts +3 -0
- package/dist/commands/login.js +347 -0
- package/dist/commands/logout.d.ts +3 -0
- package/dist/commands/logout.js +12 -0
- package/dist/commands/mailboxes.d.ts +3 -0
- package/dist/commands/mailboxes.js +1290 -0
- package/dist/commands/managed-inboxes.d.ts +3 -0
- package/dist/commands/managed-inboxes.js +361 -0
- package/dist/commands/messages.d.ts +3 -0
- package/dist/commands/messages.js +78 -0
- package/dist/commands/notetaker.d.ts +3 -0
- package/dist/commands/notetaker.js +79 -0
- package/dist/commands/observability.d.ts +3 -0
- package/dist/commands/observability.js +125 -0
- package/dist/commands/orgs.d.ts +3 -0
- package/dist/commands/orgs.js +237 -0
- package/dist/commands/people.d.ts +3 -0
- package/dist/commands/people.js +353 -0
- package/dist/commands/posts.d.ts +3 -0
- package/dist/commands/posts.js +139 -0
- package/dist/commands/profiles.d.ts +3 -0
- package/dist/commands/profiles.js +250 -0
- package/dist/commands/projects.d.ts +3 -0
- package/dist/commands/projects.js +94 -0
- package/dist/commands/prompts.d.ts +3 -0
- package/dist/commands/prompts.js +84 -0
- package/dist/commands/publishing.d.ts +3 -0
- package/dist/commands/publishing.js +1419 -0
- package/dist/commands/recipes.d.ts +3 -0
- package/dist/commands/recipes.js +120 -0
- package/dist/commands/reviews.d.ts +3 -0
- package/dist/commands/reviews.js +75 -0
- package/dist/commands/rows.d.ts +3 -0
- package/dist/commands/rows.js +27 -0
- package/dist/commands/runs.d.ts +3 -0
- package/dist/commands/runs.js +37 -0
- package/dist/commands/search.d.ts +3 -0
- package/dist/commands/search.js +182 -0
- package/dist/commands/senders.d.ts +3 -0
- package/dist/commands/senders.js +393 -0
- package/dist/commands/sequences.d.ts +3 -0
- package/dist/commands/sequences.js +2322 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.js +109 -0
- package/dist/commands/signals.d.ts +3 -0
- package/dist/commands/signals.js +289 -0
- package/dist/commands/signup-leads.d.ts +3 -0
- package/dist/commands/signup-leads.js +46 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.js +50 -0
- package/dist/commands/sourcing.d.ts +3 -0
- package/dist/commands/sourcing.js +27 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.js +51 -0
- package/dist/commands/supabase.d.ts +3 -0
- package/dist/commands/supabase.js +128 -0
- package/dist/commands/support.d.ts +3 -0
- package/dist/commands/support.js +651 -0
- package/dist/commands/suppressions.d.ts +3 -0
- package/dist/commands/suppressions.js +577 -0
- package/dist/commands/table-ingestions.d.ts +3 -0
- package/dist/commands/table-ingestions.js +145 -0
- package/dist/commands/table-runs.d.ts +3 -0
- package/dist/commands/table-runs.js +277 -0
- package/dist/commands/tables.d.ts +3 -0
- package/dist/commands/tables.js +3492 -0
- package/dist/commands/tags.d.ts +3 -0
- package/dist/commands/tags.js +147 -0
- package/dist/commands/tools.d.ts +3 -0
- package/dist/commands/tools.js +246 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.js +106 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.js +27 -0
- package/dist/commands/viewers.d.ts +3 -0
- package/dist/commands/viewers.js +72 -0
- package/dist/commands/voice.d.ts +3 -0
- package/dist/commands/voice.js +351 -0
- package/dist/commands/whatsapp.d.ts +3 -0
- package/dist/commands/whatsapp.js +226 -0
- package/dist/commands/whoami.d.ts +3 -0
- package/dist/commands/whoami.js +110 -0
- package/dist/commands/worker.d.ts +3 -0
- package/dist/commands/worker.js +60 -0
- package/dist/commands/workflows.d.ts +3 -0
- package/dist/commands/workflows.js +1752 -0
- package/dist/commands/workspace.d.ts +3 -0
- package/dist/commands/workspace.js +94 -0
- package/dist/compact-list-flags.d.ts +7 -0
- package/dist/compact-list-flags.js +12 -0
- package/dist/crm-support-flags.js +14 -5
- package/dist/customer-operation-commands.js +8 -6
- package/dist/diagnostic-uploader.d.ts +3 -1
- package/dist/diagnostic-uploader.js +29 -8
- package/dist/help.d.ts +5 -0
- package/dist/help.js +22 -0
- package/dist/index.d.ts +98 -1
- package/dist/index.js +331 -30719
- package/dist/local-module-loader.d.ts +4 -0
- package/dist/local-module-loader.js +156 -0
- package/dist/visual-commands.js +9 -5
- package/node_modules/@oxygen/cli-ugc/dist/commands.js +2 -2
- package/node_modules/@oxygen/shared/dist/agent-session-schedule.d.ts +36 -0
- package/node_modules/@oxygen/shared/dist/agent-session-schedule.js +69 -0
- package/node_modules/@oxygen/shared/dist/agent-sessions.d.ts +14 -5
- package/node_modules/@oxygen/shared/dist/agent-sessions.js +14 -3
- package/node_modules/@oxygen/shared/dist/capability-discovery.js +175 -14
- package/node_modules/@oxygen/shared/dist/compact-list-result.d.ts +6 -0
- package/node_modules/@oxygen/shared/dist/compact-list-result.js +27 -0
- package/node_modules/@oxygen/shared/dist/contracts/agent-sessions.d.ts +12 -1
- package/node_modules/@oxygen/shared/dist/contracts/agent-sessions.js +5 -2
- package/node_modules/@oxygen/shared/dist/contracts/browser-operations.js +4 -2
- package/node_modules/@oxygen/shared/dist/contracts/compact-list-reads.d.ts +57 -0
- package/node_modules/@oxygen/shared/dist/contracts/compact-list-reads.js +23 -0
- package/node_modules/@oxygen/shared/dist/contracts/crm-support.d.ts +52 -0
- package/node_modules/@oxygen/shared/dist/contracts/crm-support.js +43 -2
- package/node_modules/@oxygen/shared/dist/contracts/customer-operations.js +17 -14
- package/node_modules/@oxygen/shared/dist/contracts/knowledge-content-reads.js +1 -1
- package/node_modules/@oxygen/shared/dist/contracts/knowledge-proposal-reads.d.ts +49 -0
- package/node_modules/@oxygen/shared/dist/contracts/knowledge-proposal-reads.js +14 -0
- package/node_modules/@oxygen/shared/dist/contracts/knowledge-sync.js +1 -1
- package/node_modules/@oxygen/shared/dist/contracts/limits-read.js +60 -7
- package/node_modules/@oxygen/shared/dist/contracts/operations.d.ts +9 -1
- package/node_modules/@oxygen/shared/dist/contracts/operations.js +13 -5
- package/node_modules/@oxygen/shared/dist/contracts/publishing-reads.js +1 -1
- package/node_modules/@oxygen/shared/dist/contracts/teammates.d.ts +16 -0
- package/node_modules/@oxygen/shared/dist/contracts/teammates.js +115 -0
- package/node_modules/@oxygen/shared/dist/cost-estimate-view.js +21 -3
- package/node_modules/@oxygen/shared/dist/cost-estimate.d.ts +31 -1
- package/node_modules/@oxygen/shared/dist/cost-estimate.js +56 -15
- package/node_modules/@oxygen/shared/dist/diagnostic-credentials.d.ts +2 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-credentials.js +2 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-lock.js +71 -44
- package/node_modules/@oxygen/shared/dist/diagnostic-spool.d.ts +18 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-spool.js +348 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-storage-failure.d.ts +10 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-storage-failure.js +42 -0
- package/node_modules/@oxygen/shared/dist/diagnostic-storage.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/diagnostic-storage.js +59 -213
- package/node_modules/@oxygen/shared/dist/diagnostics.js +3 -2
- package/node_modules/@oxygen/shared/dist/email-dsn.d.ts +16 -5
- package/node_modules/@oxygen/shared/dist/email-dsn.js +97 -1
- package/node_modules/@oxygen/shared/dist/emailguard-placement-probe.js +5 -0
- package/node_modules/@oxygen/shared/dist/enrichment-intents.js +4 -5
- package/node_modules/@oxygen/shared/dist/file-import.js +5 -2
- package/node_modules/@oxygen/shared/dist/hosted-ai.d.ts +30 -0
- package/node_modules/@oxygen/shared/dist/hosted-ai.js +20 -0
- package/node_modules/@oxygen/shared/dist/knowledge-bootstrap.d.ts +6 -2
- package/node_modules/@oxygen/shared/dist/knowledge-seed-content.d.ts +17 -7
- package/node_modules/@oxygen/shared/dist/knowledge-seed-content.js +81 -17
- package/node_modules/@oxygen/shared/dist/langfuse.js +8 -4
- package/node_modules/@oxygen/shared/dist/mailbox-egress-ownership.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/mailbox-import.d.ts +6 -3
- package/node_modules/@oxygen/shared/dist/mailbox-import.js +9 -9
- package/node_modules/@oxygen/shared/dist/mcp-server-info.d.ts +8 -0
- package/node_modules/@oxygen/shared/dist/mcp-server-info.js +10 -0
- package/node_modules/@oxygen/shared/dist/object-storage.d.ts +10 -0
- package/node_modules/@oxygen/shared/dist/object-storage.js +14 -0
- package/node_modules/@oxygen/shared/dist/plan-limits-view.d.ts +5 -0
- package/node_modules/@oxygen/shared/dist/plan-limits-view.js +17 -1
- package/node_modules/@oxygen/shared/dist/pricing-sheet.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/pricing-sheet.js +1 -1
- package/node_modules/@oxygen/shared/dist/provider-selection.d.ts +15 -0
- package/node_modules/@oxygen/shared/dist/provider-selection.js +3 -0
- package/node_modules/@oxygen/shared/dist/repricing.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/repricing.js +2 -2
- package/node_modules/@oxygen/shared/dist/schedule-label.d.ts +6 -0
- package/node_modules/@oxygen/shared/dist/schedule-label.js +12 -0
- package/node_modules/@oxygen/shared/dist/sequence-failures.d.ts +1 -0
- package/node_modules/@oxygen/shared/dist/sequence-failures.js +20 -6
- package/node_modules/@oxygen/shared/dist/teammate-groups.d.ts +55 -0
- package/node_modules/@oxygen/shared/dist/teammate-groups.js +74 -0
- package/node_modules/@oxygen/shared/dist/teammate-messages.d.ts +52 -0
- package/node_modules/@oxygen/shared/dist/teammate-messages.js +88 -0
- package/node_modules/@oxygen/shared/dist/teammate-notes.d.ts +58 -0
- package/node_modules/@oxygen/shared/dist/teammate-notes.js +73 -0
- package/node_modules/@oxygen/shared/dist/teammate-routines.d.ts +95 -0
- package/node_modules/@oxygen/shared/dist/teammate-routines.js +266 -0
- package/node_modules/@oxygen/shared/dist/teammate-tasks.d.ts +56 -0
- package/node_modules/@oxygen/shared/dist/teammate-tasks.js +114 -0
- package/node_modules/@oxygen/shared/dist/teammates.d.ts +78 -0
- package/node_modules/@oxygen/shared/dist/teammates.js +140 -0
- package/node_modules/@oxygen/shared/dist/user-capability-routing.js +120 -0
- package/node_modules/@oxygen/shared/dist/version.generated.d.ts +1 -1
- package/node_modules/@oxygen/shared/dist/version.generated.js +1 -1
- package/node_modules/@oxygen/shared/dist/visual-render.d.ts +9 -1
- package/node_modules/@oxygen/shared/dist/visual-render.js +12 -5
- package/node_modules/@oxygen/shared/dist/warmup-metrics.d.ts +5 -0
- package/node_modules/@oxygen/shared/dist/warmup-metrics.js +44 -0
- package/package.json +1 -1
|
@@ -20,8 +20,8 @@ export const OXYGEN_CAPABILITY_ROUTES = [
|
|
|
20
20
|
primitive: null,
|
|
21
21
|
owns: "Agent-authored GTM infographics and carousel pages: editable HTML/CSS/SVG sources, isolated PNG/PDF rendering, actual visual inspection, revisions and downloads.",
|
|
22
22
|
notFor: "A separate product primitive, arbitrary package execution, image generation providers, motion/video, or publishing.",
|
|
23
|
-
execution: "Save source in workspace files; preview exact rendering scope
|
|
24
|
-
posture: "
|
|
23
|
+
execution: "Save source in workspace files; preview the exact rendering scope, start it (rendering is free), poll the durable job, inspect its PNG pixels, revise and export. Renderer availability is checked by preview.",
|
|
24
|
+
posture: "workspace_write",
|
|
25
25
|
gatewayTools: ["oxygen_visual_source_create", "oxygen_visual_render_preview", "oxygen_visual_render_get", "oxygen_visual_image_view"],
|
|
26
26
|
gatewayCommands: ["visuals source-create", "visuals render-preview", "visuals render-get", "visuals download"],
|
|
27
27
|
skills: ["oxygen-knowledge"],
|
|
@@ -102,7 +102,7 @@ export const OXYGEN_CAPABILITY_ROUTES = [
|
|
|
102
102
|
gatewayCommands: ["billing balance", "billing usage", "billing audit", "billing estimate", "budget list", "billing invoices", "pricing customer-credit-prices"],
|
|
103
103
|
skills: ["oxygen-gtm", "oxygen-diagnostics"],
|
|
104
104
|
endpointSections: ["billing", "budget", "limits", "pricing"],
|
|
105
|
-
intentTerms: ["billing", "credits", "credit balance", "customer credit prices", "credit price catalog", "usage", "spend", "cost", "cost estimate", "monthly cost", "budget", "subscription", "invoice", "vat", "vat number", "tax id", "cancel plan", "change plan", "upgrade", "downgrade", "subscription plans", "annual plan", "yearly commitment", "yearly saving", "annual discount", "retention offer", "cancellation reason", "winback discount"],
|
|
105
|
+
intentTerms: ["billing", "credits", "credit balance", "customer credit prices", "credit price catalog", "usage", "spend", "cost", "cost estimate", "monthly cost", "budget", "subscription", "invoice", "vat", "vat number", "tax id", "cancel plan", "change plan", "upgrade", "downgrade", "subscription plans", "annual plan", "yearly commitment", "yearly saving", "annual discount", "retention offer", "cancellation reason", "winback discount", "partner bonus", "partner credits", "partner_bonus", "partners2026", "coupon", "promotion", "promo code", "discount"],
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
108
|
id: "support-and-feedback",
|
|
@@ -174,10 +174,10 @@ export const OXYGEN_CAPABILITY_ROUTES = [
|
|
|
174
174
|
primitive: null,
|
|
175
175
|
owns: "The current organization profile and publication state in the public OXYGEN agency directory.",
|
|
176
176
|
notFor: "CRM company records, workspace membership, or outbound campaigns.",
|
|
177
|
-
execution: "Read, update, publish, or unpublish the hosted directory listing.",
|
|
177
|
+
execution: "Read, update, publish, or unpublish the hosted directory listing. Read partner-bonus eligibility and timing without credit grants with billing summary (oxygen_billing_summary). Application: /docs/workspace/agency-directory. Partner benefits: /docs/safety/billing#agency-partner-bonus. Skill instructions require the applicable workspace entitlement.",
|
|
178
178
|
posture: "workspace_write",
|
|
179
|
-
gatewayTools: ["oxygen_directory_get", "oxygen_directory_update", "oxygen_directory_publish"],
|
|
180
|
-
gatewayCommands: ["directory get", "directory update", "directory publish"],
|
|
179
|
+
gatewayTools: ["oxygen_directory_get", "oxygen_billing_summary", "oxygen_directory_update", "oxygen_directory_publish"],
|
|
180
|
+
gatewayCommands: ["directory get", "billing summary", "directory update", "directory publish"],
|
|
181
181
|
skills: ["oxygen-agency-directory"],
|
|
182
182
|
endpointSections: ["directory"],
|
|
183
183
|
intentTerms: ["agency directory", "agency listing", "directory profile", "publish agency", "partner listing"],
|
|
@@ -288,7 +288,7 @@ export const OXYGEN_CAPABILITY_ROUTES = [
|
|
|
288
288
|
gatewayCommands: ["publishing comments list", "publishing analytics summary", "posts get", "posts create"],
|
|
289
289
|
skills: ["oxygen-publishing"],
|
|
290
290
|
endpointSections: [],
|
|
291
|
-
intentTerms: ["post artifact", "social post", "post comments", "public comments", "unanswered comments", "comments needing reply", "owned posts", "post reactions", "post performance", "posting analytics", "broadcast content"],
|
|
291
|
+
intentTerms: ["post artifact", "social post", "post comments", "public comments", "unanswered comments", "comments needing reply", "owned posts", "published posts", "post reactions", "post performance", "content performance", "posting analytics", "broadcast content"],
|
|
292
292
|
},
|
|
293
293
|
{
|
|
294
294
|
id: "signals",
|
|
@@ -423,13 +423,13 @@ export const OXYGEN_CAPABILITY_ROUTES = [
|
|
|
423
423
|
primitive: "agents",
|
|
424
424
|
owns: "Adaptive governed worker definitions, versions, authorization, context, triggers, threads, checkpoints, inference, and first-class runs.",
|
|
425
425
|
notFor: "A known deterministic graph that belongs in Workflows or an opaque uploaded runtime.",
|
|
426
|
-
execution: "Publish and run a governed Agent with explicit tool authority and bounded spend. Staff on dev can create ongoing sessions: draft, exact resource scope, per-run and rolling 24-hour caps, preview/activate, continuing conversation and bounded self-scheduling. Inspect agent session templates; pause/resume preserves history.",
|
|
426
|
+
execution: "Publish and run a governed Agent with explicit tool authority and bounded spend. Staff on dev can create ongoing sessions: draft, exact resource scope, per-run and rolling 24-hour caps, preview/activate, continuing conversation and bounded self-scheduling. Inspect agent session templates; pause/resume preserves history. Staff on dev also talk to Oxygents (AI teammates): the workspace's first one (New Bot until named) and any others added, one ongoing private chat each.",
|
|
427
427
|
posture: "mixed",
|
|
428
428
|
gatewayTools: ["oxygen_agent_list", "oxygen_agent_create", "oxygen_agent_run"],
|
|
429
429
|
gatewayCommands: ["agent list", "agent create", "agent run"],
|
|
430
430
|
skills: ["oxygen-gtm"],
|
|
431
|
-
endpointSections: ["agent", "notetaker"],
|
|
432
|
-
intentTerms: ["agent", "adaptive", "goal directed", "autonomous", "persistent thread", "checkpoint", "standing job", "notetaker", "ongoing worker", "ongoing session", "watch a campaign", "watch one campaign", "campaign monitor", "remember earlier reviews", "rolling daily", "long horizon", "long session"],
|
|
431
|
+
endpointSections: ["agent", "notetaker", "teammates", "teammate-groups"],
|
|
432
|
+
intentTerms: ["agent", "teammate", "oxygent", "ai teammate", "adaptive", "goal directed", "autonomous", "persistent thread", "checkpoint", "standing job", "notetaker", "ongoing worker", "ongoing session", "watch a campaign", "watch one campaign", "campaign monitor", "remember earlier reviews", "rolling daily", "long horizon", "long session"],
|
|
433
433
|
},
|
|
434
434
|
{
|
|
435
435
|
id: "observability",
|
|
@@ -986,6 +986,122 @@ function crmEnrichmentReadRecommendation(query) {
|
|
|
986
986
|
exactMcpCall: { tool: "oxygen_crm_enrichment", arguments: { action: "list", ...(omitCounts ? { backfill: false } : {}), projection: "summary" } },
|
|
987
987
|
};
|
|
988
988
|
}
|
|
989
|
+
/** Stored communications linked to one CRM record use its bounded native read. */
|
|
990
|
+
function crmConnectionsReadRecommendation(query) {
|
|
991
|
+
if (!/\b(?:crm|records?)\b/.test(query)
|
|
992
|
+
|| !/\b(?:conversations?|sequences?|communications?)\b/.test(query)
|
|
993
|
+
|| !/\b(?:connected|linked|links|associated|belongs?)\b/.test(query)
|
|
994
|
+
|| !/\b(?:read|show|list|inspect|view)\b/.test(query)
|
|
995
|
+
|| isHostedWorkflowIntent(query)
|
|
996
|
+
|| /\b(?:send\w*|repl(?:y|ies|ied|ying)|draft\w*|compos\w*|enroll\w*|launch\w*|creat\w*|schedul\w*|edit\w*|updat\w*|chang\w*|delet\w*|remov\w*|merg\w*|attach\w*|complet\w*|finish\w*|prepar\w*|reserv\w*|renam\w*|archiv\w*|assign\w*|cancel\w*|set(?:s|ting)?|add\w*|appl(?:y|ies|ied|ying)|clear\w*|tables?|workflows?|agents?|providers?|sync\w*|import\w*)\b/.test(query))
|
|
997
|
+
return null;
|
|
998
|
+
return {
|
|
999
|
+
tools: ["oxygen_crm_record_connections"], commands: ["crm connections"],
|
|
1000
|
+
execution: "Read stored conversations and Sequence links for one CRM record with oxygen_crm_record_connections. Request projection=compact and a max_chars window; conversation_limit and sequence_limit bound the recent links. hasMore includes older or omitted links; this read has no cursor for older links and does not sync Messages, contact anyone or spend credits.",
|
|
1001
|
+
};
|
|
1002
|
+
}
|
|
1003
|
+
/** Record-file lifecycle asks outrank the generic workspace label vocabulary. */
|
|
1004
|
+
function crmFileUploadRecommendation(query) {
|
|
1005
|
+
// Literal filenames and record identities are values, not competing owners:
|
|
1006
|
+
// mailbox.csv or sarah@acme.com must not turn a record upload into mail work.
|
|
1007
|
+
const intent = query
|
|
1008
|
+
.replace(/\b[^\s@]+@[^\s@]+\b/g, "identity")
|
|
1009
|
+
.replace(/\b(?:file ?name|filename|named|label)\s+(["'])[^"']*\1/g, "value")
|
|
1010
|
+
.replace(/\b(?:file ?name|filename|named)\s+\S+/g, "value")
|
|
1011
|
+
.replace(/\S+\.[a-z0-9]{1,12}\b/g, "value");
|
|
1012
|
+
if (!/\b(?:crm|records?)\b/.test(intent)
|
|
1013
|
+
|| !/\b(?:files?|attachments?|uploads?|uploaded)\b/.test(intent))
|
|
1014
|
+
return null;
|
|
1015
|
+
if (isHostedWorkflowIntent(intent)
|
|
1016
|
+
|| /\b(?:tags?|tagging|classif\w*|categori[sz]\w*|tables?|spreadsheets?|datasets?|worksheets?|columns?|copilot|sessions?|workflows?|agents?|functions?|callables?|recurring|mailboxes?|inbox|messages?|knowledge|wiki|repositories|repository|skills?|logos?|branding|avatars?|hubspot|attio|pipedrive|salesforce)\b/.test(intent)
|
|
1017
|
+
|| /\b(?:send|reply|compose)\b/.test(intent)
|
|
1018
|
+
|| /\b(?:email|e mail)\s+attachments?\b/.test(intent))
|
|
1019
|
+
return null;
|
|
1020
|
+
const complete = /\b(?:finish|complete|confirm)\b/.test(intent)
|
|
1021
|
+
&& /\b(?:uploads?|uploaded|prepared|reserved)\b/.test(intent);
|
|
1022
|
+
const list = /\b(?:list|show|inspect|view)\b/.test(intent);
|
|
1023
|
+
if (list && !complete && /\b(?:pending|prepared|reserved|incomplete)\b/.test(intent))
|
|
1024
|
+
return null;
|
|
1025
|
+
const prepare = /\b(?:prepare|reserve|attach)\b/.test(intent);
|
|
1026
|
+
const boundary = "A record-local label names this attachment; it is separate from workspace Tags and the stored filename. Preparing or completing writes workspace state under the existing authorization; discovery does not approve a write.";
|
|
1027
|
+
if (complete)
|
|
1028
|
+
return {
|
|
1029
|
+
tools: ["oxygen_crm_files_upload_complete", "oxygen_crm_files_upload_prepare", "oxygen_crm_files_list"],
|
|
1030
|
+
commands: ["crm files complete-upload", "crm files prepare-upload", "crm files list"],
|
|
1031
|
+
execution: `Hydrate oxygen_crm_files_upload_complete to confirm a prepared upload after its exact bytes were PUT; completion verifies the reserved file before attaching. List the record's files to inspect existing attachments. ${boundary}`,
|
|
1032
|
+
};
|
|
1033
|
+
if (prepare || (!list && /\bupload\b/.test(intent)))
|
|
1034
|
+
return {
|
|
1035
|
+
tools: ["oxygen_crm_files_upload_prepare", "oxygen_crm_files_upload_complete", "oxygen_crm_files_list"],
|
|
1036
|
+
commands: ["crm files prepare-upload", "crm files complete-upload", "crm files list"],
|
|
1037
|
+
execution: `Hydrate oxygen_crm_files_upload_prepare to reserve an exact filename, byte length and SHA-256. Preparation does not attach; upload the declared bytes before completing. ${boundary}`,
|
|
1038
|
+
};
|
|
1039
|
+
if (list)
|
|
1040
|
+
return {
|
|
1041
|
+
tools: ["oxygen_crm_files_list"],
|
|
1042
|
+
commands: ["crm files list"],
|
|
1043
|
+
execution: `List the record's attached originals with oxygen_crm_files_list; this does not list pending upload reservations. ${boundary}`,
|
|
1044
|
+
};
|
|
1045
|
+
return null;
|
|
1046
|
+
}
|
|
1047
|
+
/** Stored inspections precede similarly named execution and review queues. */
|
|
1048
|
+
function readInspectionRecommendation(query) {
|
|
1049
|
+
const positive = query.replace(/\b(?:do not|don't)\b(?:(?!\b(?:but|then)\b)[^.;])*/g, "");
|
|
1050
|
+
const documentation = positive.replace(/\b(?:would|could|how to)\s+(?:review|create|approve|schedule|publish)(?:\s+(?:and|or)\s+(?:review|create|approve|schedule|publish))*/g, "hypothetical action");
|
|
1051
|
+
const action = /\b(?:but|then)\s+(?:please\s+)?(?:creat\w*|updat\w*|edit\w*|delet\w*|cancel\w*|approv\w*|schedul\w*|publish\w*|sav\w*|enabl\w*|appl\w*|send\w*|clear\w*|set|add)\b/.test(query);
|
|
1052
|
+
if (action)
|
|
1053
|
+
return null;
|
|
1054
|
+
const stored = positive.replace(/\bwithout\s+(?:changing|approving|rejecting|publishing|running|executing|refreshing)\b(?:\s+(?:widget\s+)?data\b)?/g, "");
|
|
1055
|
+
const storedOnly = !isHostedWorkflowIntent(stored) && !isSecondPartyDecisionIntent(stored)
|
|
1056
|
+
&& !/\b(?:create|write|edit|update|change|delete|remove|archive|save|approve|reject|publish|run|running|execute|send|refresh|launch|enable|disable|apply|materialize|import|sync|schedule|enroll|add|set)\b/.test(stored);
|
|
1057
|
+
// The connector BEFORE's explicit Knowledge requests were claimed by the
|
|
1058
|
+
// generic message-review rule. Captured patches live in Knowledge proposals.
|
|
1059
|
+
if (storedOnly && /\b(?:knowledge|wiki|canonical[ -]copy)\b/.test(stored)
|
|
1060
|
+
&& !/\b(?:message reviews?|inbox messages?|reply drafts?|conversations?)\b/.test(stored)
|
|
1061
|
+
&& /\b(?:proposals?|captured(?: page)? changes?|(?:pending|awaiting|waiting)\b[^.;]{0,60}\breview)\b/.test(stored)
|
|
1062
|
+
&& /\b(?:list|read|show|get|inspect|view|review|pending|awaiting|waiting|queue)\b/.test(stored))
|
|
1063
|
+
return {
|
|
1064
|
+
capabilityId: "knowledge-graph",
|
|
1065
|
+
tools: ["oxygen_knowledge_proposals_list"],
|
|
1066
|
+
commands: ["knowledge proposals"],
|
|
1067
|
+
execution: "Read pending Knowledge changes with oxygen_knowledge_proposals_list (status=open), including their exact captured patch and target revision. These are Knowledge proposals; message reviews and page revision history have separate owners. External MCP uses oxygen_capabilities_read; built-in agents invoke the native tool. Inspect the returned proposal before a separately approved decision. An empty result contains no change to inspect; do not invent one or claim unreported pagination.",
|
|
1068
|
+
};
|
|
1069
|
+
if (storedOnly && /\bdashboards?\b/.test(stored)
|
|
1070
|
+
&& /\b(?:saved|stored|existing|user[ -]defined)\b/.test(stored)
|
|
1071
|
+
&& /\b(?:get|read|show|inspect|view|describe)\b/.test(stored)
|
|
1072
|
+
&& /\b(?:definitions?|configurations?|settings|setup|tabs?|widgets?)\b/.test(stored)
|
|
1073
|
+
&& !/\b(?:data|live|analytics|metrics|funnel|summary)\b/.test(stored))
|
|
1074
|
+
return {
|
|
1075
|
+
capabilityId: "dashboards",
|
|
1076
|
+
tools: ["oxygen_dashboards_list", "oxygen_dashboards_get"],
|
|
1077
|
+
commands: ["dashboards list", "dashboards get"],
|
|
1078
|
+
execution: "Read saved Dashboard names with oxygen_dashboards_list, then oxygen_dashboards_get for one exact saved definition, tabs and widget configuration. External MCP uses oxygen_capabilities_read; built-in agents invoke the native tools. Reading the saved setup does not execute or refresh widget data. Curated funnel reports, widget data and Dashboard authoring have separate operations.",
|
|
1079
|
+
};
|
|
1080
|
+
if (/^\s*(?:show|explain|describe|read|inspect)\b/.test(query)
|
|
1081
|
+
&& /\bposts?\b/.test(query) && /\b(?:linkedin|publishing)\b/.test(query)
|
|
1082
|
+
&& /\b(?:how|process|paths?)\b/.test(query) && /\b(?:review|approval|approve)\b/.test(query)
|
|
1083
|
+
&& /\b(?:do not|don't)\b[^.;]{0,120}\b(?:create|approve|schedule|publish)\b/.test(query)
|
|
1084
|
+
&& !/\b(?:creat\w*|updat\w*|edit\w*|delet\w*|cancel\w*|approv(?:e|es|ing)|schedul\w*|publish(?:es)?|send\w*|clear\w*|set|add)\b/.test(documentation)
|
|
1085
|
+
&& !/\b(?:workflows?|agents?|tables?|crm|knowledge|comments?|scrape\w*|search|find)\b/.test(positive))
|
|
1086
|
+
return {
|
|
1087
|
+
capabilityId: "publishing",
|
|
1088
|
+
tools: ["oxygen_publishing_posts_list", "oxygen_publishing_posts_get"],
|
|
1089
|
+
commands: ["publishing posts list", "publishing posts get"],
|
|
1090
|
+
execution: "Read stored Publishing posts and their approval state first. Hydrate list/get; approval_status=needs_approval selects the review queue. Inspect create/update/approve schemas to explain scheduling or immediate-publication paths without executing them. Schema discovery grants no approval to create, approve, schedule or publish a post.",
|
|
1091
|
+
};
|
|
1092
|
+
if (/\bfolders?\b/.test(query) && /\b(?:shared|reference|knowledge)\b/.test(query)
|
|
1093
|
+
&& /\b(?:names?|show|list|read|inspect)\b/.test(query)
|
|
1094
|
+
&& isRecurringCompanyMonitoringIntent(query) && /\b(?:first step|plan|inspect)\b/.test(query)
|
|
1095
|
+
&& /\b(?:do not|don't)\b[^.;]{0,120}\b(?:save|spend)\b/.test(query)
|
|
1096
|
+
&& !/\b(?:creat\w*|writ\w*|edit\w*|updat\w*|delet\w*|cancel\w*|sav\w*|enabl\w*|appl\w*|launch\w*|send\w*|import\w*|sync\w*|clear\w*|set|add|tables?|copilot|mailboxes?|crm)\b/.test(positive))
|
|
1097
|
+
return {
|
|
1098
|
+
capabilityId: "knowledge-graph",
|
|
1099
|
+
tools: ["oxygen_knowledge_folders_list", "oxygen_blueprints_list"],
|
|
1100
|
+
commands: ["knowledge folders list", "blueprints list"],
|
|
1101
|
+
execution: "Read workspace folder names with oxygen_knowledge_folders_list; the registry includes empty folders. Report them as workspace metadata: this native contract has no per-folder sharing or ownership fields. truncated qualifies incomplete page lists. For the separate recurring company-monitoring first step, inspect oxygen_blueprints_list with a narrow query and describe a matching definition. Workflows own recurring execution; discovery does not save or enable automation and grants no provider spend or write approval.",
|
|
1102
|
+
};
|
|
1103
|
+
return null;
|
|
1104
|
+
}
|
|
989
1105
|
/** CRM backfills and account projections use native Records repair owners. */
|
|
990
1106
|
function crmMaintenanceRecommendation(query) {
|
|
991
1107
|
if (isHostedWorkflowIntent(query)
|
|
@@ -1016,8 +1132,15 @@ const CRM_ENRICHMENT_READ_VIEW = {
|
|
|
1016
1132
|
execution: "Read the saved configuration with action=list, free through oxygen_capabilities_call: this tool also writes, so its paid/write annotations and built-in approval policy remain. Omit object and use backfill=false to skip historical counts; object reads ignore it. summary is compact; preset_count counts catalog entries, trigger_default is the current plan-default cap, and backfill:null means no count was produced. set/enable/disable change standing auto-run; action=backfill previews for free, while paid live batches require native approval and a ceiling.",
|
|
1017
1133
|
posture: "mixed",
|
|
1018
1134
|
};
|
|
1135
|
+
function isPartnerBonusReadIntent(query) {
|
|
1136
|
+
return /\b(partner[ _-]+(?:program[ _-]+)?(?:bonus|credits)|partners2026|promotions?|promo codes?|coupons?)\b/.test(query)
|
|
1137
|
+
&& !/\b(apply|redeem|remove|change|cancel|upgrade|downgrade|switch)\b/.test(query);
|
|
1138
|
+
}
|
|
1019
1139
|
/** The card a route reports: Publishing's own, or its UGC view for a creator-program ask. */
|
|
1020
1140
|
function routeCardFor(card, query) {
|
|
1141
|
+
const readOnly = readInspectionRecommendation(query);
|
|
1142
|
+
if (readOnly?.capabilityId === card.id)
|
|
1143
|
+
return { ...card, posture: "read_only", execution: readOnly.execution };
|
|
1021
1144
|
const placementGuide = card.id === "sending-infrastructure" ? placementGuideRecommendation(query) : null;
|
|
1022
1145
|
if (placementGuide)
|
|
1023
1146
|
card = { ...card, posture: "read_only", execution: placementGuide.execution };
|
|
@@ -1030,6 +1153,12 @@ function routeCardFor(card, query) {
|
|
|
1030
1153
|
const collaboration = card.id === "collaboration" ? collaborationRecommendation(query) : null;
|
|
1031
1154
|
if (collaboration)
|
|
1032
1155
|
card = { ...card, execution: collaboration.execution, posture: collaboration.posture };
|
|
1156
|
+
const crmConnections = card.id === "records" ? crmConnectionsReadRecommendation(query) : null;
|
|
1157
|
+
if (crmConnections)
|
|
1158
|
+
return { ...card, posture: "read_only", execution: crmConnections.execution };
|
|
1159
|
+
const crmFileUpload = card.id === "records" ? crmFileUploadRecommendation(query) : null;
|
|
1160
|
+
if (crmFileUpload)
|
|
1161
|
+
return { ...card, execution: crmFileUpload.execution };
|
|
1033
1162
|
if (card.id === "records" && isCrmEnrichmentConfigurationRead(query))
|
|
1034
1163
|
return { ...card, ...CRM_ENRICHMENT_READ_VIEW };
|
|
1035
1164
|
const crmMaintenance = card.id === "records" ? crmMaintenanceRecommendation(query) : null;
|
|
@@ -1058,6 +1187,11 @@ function routeCardFor(card, query) {
|
|
|
1058
1187
|
const spendRead = card.id === "billing-and-budgets" && !providerRead ? spendBreakdownRecommendation(query) : null;
|
|
1059
1188
|
if (spendRead)
|
|
1060
1189
|
card = { ...card, posture: "mixed", execution: spendRead.execution };
|
|
1190
|
+
if (card.id === "billing-and-budgets" && isPartnerBonusReadIntent(query))
|
|
1191
|
+
card = {
|
|
1192
|
+
...card, posture: "read_only",
|
|
1193
|
+
execution: "Read partner_bonus eligibility, amount, conditions and timing with billing summary (oxygen_billing_summary), without grants or expiry. Captured coupon evidence is conditional and dated; a future bonus still requires a fresh Stripe check. Balance and usage can reconcile credits. Publication and plan changes need separate approval.",
|
|
1194
|
+
};
|
|
1061
1195
|
const blockRead = card.primitive === "sequences" ? sendingBlockReadRecommendation(query) : null;
|
|
1062
1196
|
if (blockRead)
|
|
1063
1197
|
card = { ...card, posture: "read_only", execution: blockRead.execution };
|
|
@@ -1083,7 +1217,7 @@ function routeCardFor(card, query) {
|
|
|
1083
1217
|
if (card.primitive === "tables" && isFunctionIntent(query))
|
|
1084
1218
|
card = {
|
|
1085
1219
|
...card,
|
|
1086
|
-
execution: "List, describe or inspect Function runs without executing. Draft edits are isolated; publish requires the inspected draft hash and changes future invocations. Bind adds a caller column for free; columns run previews cost before a bounded approved run. MCP uses
|
|
1220
|
+
execution: "List, describe or inspect Function runs without executing. Draft edits are isolated; publish requires the inspected draft hash and changes future invocations. Bind adds a caller column for free; columns run previews cost before a bounded approved run. External MCP uses oxygen_capabilities_read for oxygen_callables_manage operation=list/list_functions/describe/runs; other operations use oxygen_capabilities_call. Built-in agents invoke the native tool under their existing policy.",
|
|
1087
1221
|
};
|
|
1088
1222
|
if (card.primitive === "tables" && isPlainTableIntent(query))
|
|
1089
1223
|
card = {
|
|
@@ -1566,7 +1700,7 @@ function tableReadRecommendation(query) {
|
|
|
1566
1700
|
&& !/\b(do not|don't|avoid|without)\s+(sort|order|rank)\w*\b/.test(query))
|
|
1567
1701
|
return {
|
|
1568
1702
|
tools: ["oxygen_tables_query", "oxygen_tables_describe"], commands: ["tables query", "tables describe"],
|
|
1569
|
-
execution: "Raw tables query supports sorts[].valueOrder (alias value_order) for an explicit label order. Inspect the Table's column keys and query schema first. Values are trimmed/lowercased and deduplicated; asc puts listed values first and unlisted/null last, desc reverses. An empty list uses ordinary sorting. Keep the same sorts when following its cursor. format=grid rejects sorts; rows-page and saved-view sort formats have separate schemas. This read does not classify rows or run columns.",
|
|
1703
|
+
execution: "Raw tables query supports sorts[].valueOrder (alias value_order) for an explicit label order. Inspect the Table's column keys and query schema first. Values are trimmed/lowercased and deduplicated; asc puts listed values first and unlisted/null last, desc reverses. Equal ranks follow later sorts; implicit creation-time and final row-ID tiebreaks mirror the leading direction. An empty list uses ordinary sorting. Keep the same sorts when following its cursor. format=grid rejects sorts; rows-page and saved-view sort formats have separate schemas. This read does not classify rows or run columns.",
|
|
1570
1704
|
};
|
|
1571
1705
|
if (!/\btables?\b/.test(query))
|
|
1572
1706
|
return null;
|
|
@@ -1860,7 +1994,7 @@ function spendBreakdownRecommendation(query) {
|
|
|
1860
1994
|
return null;
|
|
1861
1995
|
return {
|
|
1862
1996
|
tools: ["oxygen_billing_audit", "oxygen_billing_usage"], commands: ["billing audit", "billing usage"],
|
|
1863
|
-
execution: "Read where managed credits went with oxygen_billing_audit: spend_by_category ranks each area's credits and share of managed_credits_spent, largest first, over the whole window; group_by provider, tool, model, run or workspace narrows it. Spent is reserved minus released in the window; it differs from captured (oxygen_billing_usage's managed_credits_used)
|
|
1997
|
+
execution: "Read where managed credits went with oxygen_billing_audit: spend_by_category ranks each area's credits and share of managed_credits_spent, largest first, over the whole window; group_by provider, tool, model, run or workspace narrows it. Spent is reserved minus released in the window; it differs from captured (oxygen_billing_usage's managed_credits_used) because of holds at the window edges and adjustments to reserved credits, so do not attribute the whole gap to open holds. External MCP uses oxygen_capabilities_call; built-in agents invoke the native capability. Reports cost 0 credits; billing audit and billing usage may apply due plan grants or credit expiry.",
|
|
1864
1998
|
};
|
|
1865
1999
|
}
|
|
1866
2000
|
function sendingBlockReadRecommendation(query) {
|
|
@@ -1897,6 +2031,9 @@ function isWorkspaceSkillIntent(query) {
|
|
|
1897
2031
|
function explicitCapabilityIntent(query) {
|
|
1898
2032
|
if (isWorkspaceSkillIntent(query))
|
|
1899
2033
|
return ROUTE_BY_ID.get("knowledge-graph") ?? null;
|
|
2034
|
+
const readOnly = readInspectionRecommendation(query);
|
|
2035
|
+
if (readOnly)
|
|
2036
|
+
return ROUTE_BY_ID.get(readOnly.capabilityId) ?? null;
|
|
1900
2037
|
// Importing an AI answer is GEO evidence, rather than a Table file import.
|
|
1901
2038
|
if (/\b(?:geo|aeo|ai (?:(?:search|answer) )?visibility|consumer ai answers?|answer engine optimization|generative engine optimization)\b/.test(query))
|
|
1902
2039
|
return ROUTE_BY_ID.get("geo") ?? null;
|
|
@@ -1908,6 +2045,10 @@ function explicitCapabilityIntent(query) {
|
|
|
1908
2045
|
return ROUTE_BY_ID.get("connected-linkedin") ?? null;
|
|
1909
2046
|
if (isCrmEnrichmentConfigurationRead(query))
|
|
1910
2047
|
return ROUTE_BY_ID.get("records") ?? null;
|
|
2048
|
+
if (crmConnectionsReadRecommendation(query))
|
|
2049
|
+
return ROUTE_BY_ID.get("records") ?? null;
|
|
2050
|
+
if (crmFileUploadRecommendation(query))
|
|
2051
|
+
return ROUTE_BY_ID.get("records") ?? null;
|
|
1911
2052
|
if (crmMaintenanceRecommendation(query))
|
|
1912
2053
|
return ROUTE_BY_ID.get("records") ?? null;
|
|
1913
2054
|
if (crmSampleRecordRecommendation(query))
|
|
@@ -1981,7 +2122,7 @@ function explicitCapabilityIntent(query) {
|
|
|
1981
2122
|
if (isInboxAvatarIntent(query)) {
|
|
1982
2123
|
return ROUTE_BY_ID.get("sending-infrastructure") ?? null;
|
|
1983
2124
|
}
|
|
1984
|
-
if (isMailboxDeleteIntent(query) || isSendingDomainDeleteIntent(query)) {
|
|
2125
|
+
if (isDomainDnsIntent(query) || isMailboxDeleteIntent(query) || isSendingDomainDeleteIntent(query)) {
|
|
1985
2126
|
return ROUTE_BY_ID.get("sending-infrastructure") ?? null;
|
|
1986
2127
|
}
|
|
1987
2128
|
if (isMailboxOnboardingIntent(query) || isWarmupEnrollmentIntent(query)) {
|
|
@@ -2236,6 +2377,12 @@ function isPublishingPostIntent(query) {
|
|
|
2236
2377
|
&& !(/\b(find|search|scrape|research)\b/.test(query) && /\b(about|mention|containing)\b/.test(query));
|
|
2237
2378
|
}
|
|
2238
2379
|
function recommendationsFor(card, query) {
|
|
2380
|
+
if (card.id === "billing-and-budgets" && isPartnerBonusReadIntent(query)) {
|
|
2381
|
+
return { tools: ["oxygen_billing_summary"], commands: ["billing summary"] };
|
|
2382
|
+
}
|
|
2383
|
+
const readOnly = readInspectionRecommendation(query);
|
|
2384
|
+
if (readOnly?.capabilityId === card.id)
|
|
2385
|
+
return readOnly;
|
|
2239
2386
|
const placementGuide = card.id === "sending-infrastructure" ? placementGuideRecommendation(query) : null;
|
|
2240
2387
|
if (placementGuide)
|
|
2241
2388
|
return placementGuide;
|
|
@@ -2261,7 +2408,13 @@ function recommendationsFor(card, query) {
|
|
|
2261
2408
|
commands: ["context canonical get", "knowledge page get", "knowledge search"],
|
|
2262
2409
|
};
|
|
2263
2410
|
}
|
|
2411
|
+
const crmConnections = card.id === "records" ? crmConnectionsReadRecommendation(query) : null;
|
|
2412
|
+
if (crmConnections)
|
|
2413
|
+
return crmConnections;
|
|
2264
2414
|
const crmSample = card.id === "records" ? crmSampleRecordRecommendation(query) : null;
|
|
2415
|
+
const crmFileUpload = card.id === "records" ? crmFileUploadRecommendation(query) : null;
|
|
2416
|
+
if (crmFileUpload)
|
|
2417
|
+
return crmFileUpload;
|
|
2265
2418
|
if (crmSample)
|
|
2266
2419
|
return crmSample;
|
|
2267
2420
|
const crmContactRead = card.id === "records" ? storedCrmContactReadRecommendation(query) : null;
|
|
@@ -3156,6 +3309,10 @@ function isMailboxDeleteIntent(query) {
|
|
|
3156
3309
|
* also a data word, so the ask must mark the domains as the workspace's own or
|
|
3157
3310
|
* as sending infrastructure, and a table/list/suppression context is excluded.
|
|
3158
3311
|
*/
|
|
3312
|
+
function isDomainDnsIntent(query) {
|
|
3313
|
+
return /\bdns\b/.test(query)
|
|
3314
|
+
&& !/\b(tables?|columns?|rows?|crm|contacts?|leads?)\b/.test(query);
|
|
3315
|
+
}
|
|
3159
3316
|
function isSendingDomainDeleteIntent(query) {
|
|
3160
3317
|
if (!/\b(delete|remove|shut ?down|tear down|get rid of|decommission)\b/.test(query))
|
|
3161
3318
|
return false;
|
|
@@ -3263,6 +3420,10 @@ function isPostCoverOrPreviewIntent(query) {
|
|
|
3263
3420
|
|| /\bpreview\b.{0,40}\b(post|draft)\b/.test(query);
|
|
3264
3421
|
}
|
|
3265
3422
|
function isOwnedPostCommentIntent(query) {
|
|
3423
|
+
// Community is the stored public-comment queue, including its coverage and
|
|
3424
|
+
// refresh state. Do not send this first-touch intent to paid public research.
|
|
3425
|
+
if (/\bcommunity\b/.test(query) && /\b(comments?|sync|coverage|freshness|queue|unanswered|replies)\b/.test(query))
|
|
3426
|
+
return true;
|
|
3266
3427
|
if (!/\bcomments?\b/.test(query) || !/\b(linkedin|posts?|publishing)\b/.test(query))
|
|
3267
3428
|
return false;
|
|
3268
3429
|
const owned = /\b(my|our|own|owned)\b|\boxygen[ -]published\b|\bpublished through oxygen\b/.test(query);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Plain jsonResult's complete projection. Compact owners use no widget or
|
|
2
|
+
* custom summary. Surface is a formatting hint, never access/approval authority. */
|
|
3
|
+
export declare function compactListResultFits(command: string, data: Record<string, unknown>, maxChars: number, surface: string | null): boolean;
|
|
4
|
+
/** Keep the existing array-of-strings next shape; use the caller's executable
|
|
5
|
+
* read gateway on MCP/built-ins and retain CLI syntax on API/CLI. */
|
|
6
|
+
export declare function compactListReadNext(surface: string | null, tool: string, args: Record<string, unknown>, cli: string): string;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { success } from "./cli-result.js";
|
|
2
|
+
import { OXYGEN_VERSION } from "./version.js";
|
|
3
|
+
import { MCP_SERVER_INFO_META_KEY, OXYGEN_MCP_SERVER_INFO } from "./mcp-server-info.js";
|
|
4
|
+
/** Plain jsonResult's complete projection. Compact owners use no widget or
|
|
5
|
+
* custom summary. Surface is a formatting hint, never access/approval authority. */
|
|
6
|
+
export function compactListResultFits(command, data, maxChars, surface) {
|
|
7
|
+
if (JSON.stringify(success(command, data)).length > maxChars)
|
|
8
|
+
return false;
|
|
9
|
+
if (surface !== "mcp" && surface !== "agent" && surface !== "copilot")
|
|
10
|
+
return true;
|
|
11
|
+
const text = JSON.stringify(data);
|
|
12
|
+
const structured = { ...data, oxygen_version: OXYGEN_VERSION };
|
|
13
|
+
const mcp = { content: [{ type: "text", text }], structuredContent: structured, _meta: { oxygen_version: OXYGEN_VERSION } };
|
|
14
|
+
const modernMcp = { ...mcp, resultType: "complete", _meta: { ...mcp._meta, [MCP_SERVER_INFO_META_KEY]: OXYGEN_MCP_SERVER_INFO } };
|
|
15
|
+
const agent = { ok: true, text, structured };
|
|
16
|
+
const copilot = { ok: true, result: structured };
|
|
17
|
+
return [mcp, modernMcp, agent, copilot].every((result) => JSON.stringify(result).length <= 6_000);
|
|
18
|
+
}
|
|
19
|
+
/** Keep the existing array-of-strings next shape; use the caller's executable
|
|
20
|
+
* read gateway on MCP/built-ins and retain CLI syntax on API/CLI. */
|
|
21
|
+
export function compactListReadNext(surface, tool, args, cli) {
|
|
22
|
+
if (surface === "mcp")
|
|
23
|
+
return JSON.stringify({ tool: "oxygen_capabilities_read", arguments: { tool, arguments: args } });
|
|
24
|
+
if (surface === "agent" || surface === "copilot")
|
|
25
|
+
return JSON.stringify({ tool: "capability_run", arguments: { name: tool, args } });
|
|
26
|
+
return cli;
|
|
27
|
+
}
|
|
@@ -22,6 +22,11 @@ export declare const AGENT_SESSION_CONFIG_CONTRACT: import("./schema.js").Contra
|
|
|
22
22
|
};
|
|
23
23
|
readonly events: import("./schema.js").ArrayProperty<import("./schema.js").StringProperty>;
|
|
24
24
|
readonly schedule: import("./schema.js").ContractObject<{
|
|
25
|
+
readonly kind: {
|
|
26
|
+
type: "string";
|
|
27
|
+
enum: readonly ("cron" | "interval")[];
|
|
28
|
+
description?: string;
|
|
29
|
+
};
|
|
25
30
|
readonly interval_minutes: {
|
|
26
31
|
type: "integer";
|
|
27
32
|
description?: string;
|
|
@@ -43,7 +48,9 @@ export declare const AGENT_SESSION_CONFIG_CONTRACT: import("./schema.js").Contra
|
|
|
43
48
|
maximum?: number;
|
|
44
49
|
"x-clamp"?: true;
|
|
45
50
|
};
|
|
46
|
-
|
|
51
|
+
readonly cron: import("./schema.js").StringProperty;
|
|
52
|
+
readonly timezone: import("./schema.js").StringProperty;
|
|
53
|
+
}, "cron" | "interval_minutes" | "kind" | "max_interval_minutes" | "min_interval_minutes" | "timezone">;
|
|
47
54
|
readonly budget: import("./schema.js").ContractObject<{
|
|
48
55
|
readonly per_run_credits: {
|
|
49
56
|
type: "number";
|
|
@@ -68,5 +75,9 @@ export declare const AGENT_SESSION_CONFIG_CONTRACT: import("./schema.js").Contra
|
|
|
68
75
|
};
|
|
69
76
|
}, "daily_credits" | "per_run_credits">;
|
|
70
77
|
readonly ends_at: import("./schema.js").StringProperty;
|
|
78
|
+
readonly teammate_routine: import("./schema.js").ContractObject<{
|
|
79
|
+
readonly chat_id: import("./schema.js").StringProperty;
|
|
80
|
+
readonly proposal_id: import("./schema.js").StringProperty;
|
|
81
|
+
}, "chat_id">;
|
|
71
82
|
}, "actions" | "budget" | "events" | "goal" | "resources" | "schedule" | "template" | "title">;
|
|
72
83
|
export declare const AGENT_SESSION_OPERATIONS: readonly OperationSpec[];
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { arr, bool, int, num, obj, str } from "./schema.js";
|
|
1
|
+
import { arr, bool, enumOf, int, num, obj, str } from "./schema.js";
|
|
2
2
|
const strings = () => arr(str({ minLength: 1 }), { maxItems: 100 });
|
|
3
3
|
export const AGENT_SESSION_CONFIG_CONTRACT = obj({
|
|
4
4
|
title: str({ minLength: 1, maxLength: 160 }), goal: str({ minLength: 1, maxLength: 16000 }),
|
|
5
5
|
template: str({ minLength: 1 }),
|
|
6
6
|
resources: obj({ sequences: strings(), tables: strings(), conversations: strings(), mailboxes: strings(), records: strings(), objects: strings(), knowledge: strings(), domains: strings() }, { required: ["sequences", "tables", "conversations", "mailboxes", "records", "objects", "knowledge", "domains"] }),
|
|
7
7
|
actions: { ...strings(), description: "Optional standing write permissions from the template catalog. Empty means scoped reads only; template suggestions are never automatically granted." }, events: strings(),
|
|
8
|
-
schedule: obj({ interval_minutes: int({ minimum: 5, description: "Default cadence in minutes; 1440 means one day." }), min_interval_minutes: int({ minimum: 5, description: "Earliest permitted interval when the Agent requests its next check." }), max_interval_minutes: int({ minimum: 5, maximum: 525600, description: "Latest permitted interval when the Agent requests its next check." })
|
|
8
|
+
schedule: obj({ kind: enumOf(["interval", "cron"], { description: "interval (default) wakes every interval_minutes; cron wakes at each cron time in timezone and needs no interval fields." }), interval_minutes: int({ minimum: 5, description: "Default cadence in minutes; 1440 means one day." }), min_interval_minutes: int({ minimum: 5, description: "Earliest permitted interval when the Agent requests its next check." }), max_interval_minutes: int({ minimum: 5, maximum: 525600, description: "Latest permitted interval when the Agent requests its next check." }), cron: str({ minLength: 9, maxLength: 120, description: "Five fields, e.g. \"0 9 * * 1-5\"." }), timezone: str({ minLength: 1, maxLength: 64, description: "IANA zone for cron, e.g. Europe/Berlin." }) }),
|
|
9
9
|
budget: obj({ per_run_credits: num({ minimum: 0.01, maximum: 25000, description: "Credit cap for each check, including inference and paid tools. The host reserves this full cap before starting." }), daily_credits: num({ minimum: 0.01, description: "Rolling 24-hour credit cap. Settled costs count for 24 hours; unresolved costs remain held until settled." }), lifetime_credits: num({ minimum: 0.01, description: "Optional total credit cap across all checks in this session." }) }, { required: ["per_run_credits", "daily_credits"] }),
|
|
10
10
|
ends_at: str({ description: "Optional ISO end time." }),
|
|
11
|
+
teammate_routine: obj({ chat_id: str({ minLength: 36, maxLength: 36 }), proposal_id: str({ minLength: 1, maxLength: 64 }) }, { required: ["chat_id"], description: "An Oxygent routine: your chat with this Agent, which its reports post into. Only you may then start, change or message it." }),
|
|
11
12
|
}, { required: ["title", "goal", "template", "resources", "actions", "events", "schedule", "budget"] });
|
|
12
13
|
function agentSessionOperation(id, verb, method, suffix, summary, fields = {}, required = [], spends = false) {
|
|
13
14
|
const route = `/api/cli/agent/{slug}/sessions${suffix}`;
|
|
@@ -28,6 +29,8 @@ export const AGENT_SESSION_OPERATIONS = [
|
|
|
28
29
|
agentSessionOperation("agent.sessions.preview", "preview", "POST", "/{session}/preview", "Preview the exact pinned Agent version, resource scope, actions, schedule and caps. Returns the revision and approval token; starts no inference."),
|
|
29
30
|
agentSessionOperation("agent.sessions.activate", "activate", "POST", "/{session}/activate", "Approve the exact preview revision and activate scoped standing authority. Starts bounded inference. A cap above default_max_credits requires separate approve_above_default=true. Later settings changes require a fresh preview.", { revision: int({ minimum: 1 }), preview_token: str({ minLength: 1 }), approved: bool(), approve_above_default: bool({ description: "Separately approve a per-run cap above the workspace's default Agent ceiling." }) }, ["revision", "preview_token", "approved"], true),
|
|
30
31
|
agentSessionOperation("agent.sessions.message", "message", "POST", "/{session}/messages", "Queue durable human steering. Draft chat proposes settings for review; active chat resumes the same memory. A bounded run reserves the approved per-run cap.", { message: str({ minLength: 1, maxLength: 16000 }), idempotency_key: str({ minLength: 1, maxLength: 200 }) }, ["message", "idempotency_key"], true),
|
|
32
|
+
agentSessionOperation("agent.sessions.run", "run", "POST", "/{session}/run", "Run this active session's next check now, within its approved caps. Refused while a check runs or a cap is reached.", {}, [], true),
|
|
33
|
+
agentSessionOperation("agent.sessions.webhook", "webhook", "POST", "/{session}/webhook", "Create this session's webhook or rotate its secret (returned once); remove deletes it. A delivery wakes the active session within its caps; its external writes then ask first.", { remove: bool({ description: "Delete the webhook; its URL stops accepting deliveries." }) }),
|
|
31
34
|
agentSessionOperation("agent.sessions.pause", "pause", "POST", "/{session}/pause", "Pause this ongoing session, retaining conversation and run history."),
|
|
32
35
|
agentSessionOperation("agent.sessions.resume", "resume", "POST", "/{session}/resume", "Resume this ongoing session. Requires unchanged approved settings.", {}, [], true),
|
|
33
36
|
agentSessionOperation("agent.sessions.complete", "complete", "POST", "/{session}/complete", "Complete this ongoing session, retaining conversation and run history."),
|
|
@@ -49,7 +49,7 @@ export const BROWSER_OPERATIONS = [
|
|
|
49
49
|
operation("billing.allowance.view", "/api/cli/billing/allowance/view", "GET", "billing allowance view", "oxygen_billing_allowance_view", "billing", "Inspect the current-cycle allowance, billing owner and partner-bonus eligibility; due plan grants or credit expiry may apply. 0 credits; reserves nothing.", {}, [], { mutates: true }),
|
|
50
50
|
operation("billing.commitments.view", "/api/cli/billing/commitments/view", "GET", "billing commitments view", "oxygen_billing_commitments_view", "billing", "Read the complete fixed-credit commitment view and linked billing-owner display, without enumerating a child's sibling resources."),
|
|
51
51
|
operation("billing.invoices.view", "/api/cli/billing/invoices/view", "GET", "billing invoices view", "oxygen_billing_invoices_view", "billing", "Read the browser invoice-history projection, including exact native timestamps, amounts and signed Stripe invoice links."),
|
|
52
|
-
operation("billing.summary", "/api/cli/billing/summary", "GET", "billing summary", "oxygen_billing_summary", "billing", "Read the
|
|
52
|
+
operation("billing.summary", "/api/cli/billing/summary", "GET", "billing summary", "oxygen_billing_summary", "billing", "Read the saved wallet balance, plan and billing owner; trialCreditGrant is the trial budget. Grant records establish actual signup credits. Includes partner-bonus eligibility/timing; applies no grants or expiry."),
|
|
53
53
|
operation("billing.usage.view", "/api/cli/billing/usage/view", "GET", "billing usage view", "oxygen_billing_usage_view", "billing", "Credit spend over 7, 30 or 90 days by category and provider, each with its share, plus permitted linked-workspace rollups. totalSpent is reserved minus released; billing usage managed_credits_used counts captured credits only. Other windows or groupings: billing audit.", { days: enumOf(["7", "30", "90"]), workspace: text() }),
|
|
54
54
|
operation("integrations.managed_endpoints", "/api/cli/integrations/composio/endpoints", "GET", "integrations managed-endpoints", "oxygen_integration_managed_endpoints", "integrations", "Read a managed integration's full action catalog and parameter schemas.", { integration_id: text() }, ["integration_id"]),
|
|
55
55
|
operation("integrations.openrouter_models", "/api/cli/integrations/openrouter/models", "GET", "integrations openrouter-models", "oxygen_openrouter_models", "integrations", "Read model and pricing metadata using this workspace's connected OpenRouter account; credentials are never returned."),
|
|
@@ -93,7 +93,9 @@ export const BROWSER_OPERATIONS = [
|
|
|
93
93
|
operation("tables.resource.views.delete", `${table}/views/{view}`, "DELETE", "tables views delete", "oxygen_tables_views_delete", "tables", "Delete one saved Table view.", {}, [], nativeCli),
|
|
94
94
|
operation("tables.resource.runs.list", `${table}/runs`, "GET", "tables runs history", "oxygen_table_runs_history", "runs", "Read this Table's action-run history and progress.", { status: enumOf(["all", "active", "queued", "running", "paused", "completed", "completed_with_errors", "failed", "canceling", "canceled"]), limit: int({ minimum: 1 }) }),
|
|
95
95
|
operation("tables.resource.runs.start", `${table}/runs`, "POST", "tables runs start", "oxygen_table_resource_run_start", "runs", "Start selected Table actions using the browser's exact row-selection contract. Paid runs require an approved max_credits ceiling.", { actions, selection, max_credits: num({ minimum: 0 }), max_concurrency: int({ minimum: 1 }), force: bool(), approved: bool() }, ["actions"], { spends: true }),
|
|
96
|
-
|
|
96
|
+
// Estimation can seed pricing and reconcile billing grants/expiry; it starts
|
|
97
|
+
// no run and spends no credits, but is not a read-only operation.
|
|
98
|
+
operation("tables.resource.runs.estimate", `${table}/runs/estimate`, "POST", "tables runs preview", "oxygen_table_resource_run_preview", "runs", "Preview selected Table action costs and provider availability, including draft column definitions; starts no run.", { actions, selection }, ["actions"], { mutates: true }),
|
|
97
99
|
operation("tables.resource.runs.cancel", `${run}/cancel`, "POST", "tables runs stop", "oxygen_table_resource_run_stop", "runs", "Cancel one durable Table run; never repeats external provider effects."),
|
|
98
100
|
operation("tables.resource.runs.pause", `${run}/pause`, "POST", "tables runs pause", "oxygen_table_resource_run_pause", "runs", "Pause one durable Table run without discarding its approved scope."),
|
|
99
101
|
operation("tables.resource.runs.resume", `${run}/resume`, "POST", "tables runs resume", "oxygen_table_resource_run_resume", "runs", "Resume a paused Table run within its existing approved scope and credit ceiling."),
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export declare const knowledgeFolderListReadContract: import("./schema.js").ContractObject<{
|
|
2
|
+
readonly limit: {
|
|
3
|
+
type: "integer";
|
|
4
|
+
description?: string;
|
|
5
|
+
minimum?: number;
|
|
6
|
+
maximum?: number;
|
|
7
|
+
"x-clamp"?: true;
|
|
8
|
+
};
|
|
9
|
+
readonly cursor: import("./schema.js").StringProperty;
|
|
10
|
+
readonly max_chars: {
|
|
11
|
+
type: "integer";
|
|
12
|
+
description?: string;
|
|
13
|
+
minimum?: number;
|
|
14
|
+
maximum?: number;
|
|
15
|
+
"x-clamp"?: true;
|
|
16
|
+
};
|
|
17
|
+
readonly view: {
|
|
18
|
+
type: "string";
|
|
19
|
+
enum: readonly ("folders" | "full")[];
|
|
20
|
+
description?: string;
|
|
21
|
+
};
|
|
22
|
+
readonly query: import("./schema.js").StringProperty;
|
|
23
|
+
}, never>;
|
|
24
|
+
export declare const blueprintListWindowContract: import("./schema.js").ContractObject<{
|
|
25
|
+
readonly limit: {
|
|
26
|
+
type: "integer";
|
|
27
|
+
description?: string;
|
|
28
|
+
minimum?: number;
|
|
29
|
+
maximum?: number;
|
|
30
|
+
"x-clamp"?: true;
|
|
31
|
+
};
|
|
32
|
+
readonly cursor: import("./schema.js").StringProperty;
|
|
33
|
+
readonly max_chars: {
|
|
34
|
+
type: "integer";
|
|
35
|
+
description?: string;
|
|
36
|
+
minimum?: number;
|
|
37
|
+
maximum?: number;
|
|
38
|
+
"x-clamp"?: true;
|
|
39
|
+
};
|
|
40
|
+
readonly view: {
|
|
41
|
+
type: "string";
|
|
42
|
+
enum: readonly ("full" | "names" | "summary")[];
|
|
43
|
+
description?: string;
|
|
44
|
+
};
|
|
45
|
+
}, never>;
|
|
46
|
+
export declare const blueprintListSelectorContract: import("./schema.js").ContractObject<{
|
|
47
|
+
readonly query: import("./schema.js").StringProperty;
|
|
48
|
+
readonly tag: import("./schema.js").StringProperty;
|
|
49
|
+
readonly include_seeds: import("./schema.js").BooleanProperty;
|
|
50
|
+
}, never>;
|
|
51
|
+
export type CompactListReadOptions = {
|
|
52
|
+
view?: "full" | "folders" | "summary" | "names";
|
|
53
|
+
query?: string;
|
|
54
|
+
limit?: number;
|
|
55
|
+
cursor?: string;
|
|
56
|
+
max_chars?: number;
|
|
57
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { bool, enumOf, int, obj, str } from "./schema.js";
|
|
2
|
+
// Explicit views only: omitted/full requests retain each owner's legacy shape.
|
|
3
|
+
const window = {
|
|
4
|
+
limit: int({ minimum: 1, maximum: 200, description: "Maximum complete entries in an opt-in view; follow next_cursor." }),
|
|
5
|
+
cursor: str({ minLength: 1, maxLength: 4096, description: "Resume the same view and exact query. Source changes refuse continuation; cursor grants no access." }),
|
|
6
|
+
max_chars: int({ minimum: 2000, maximum: 48000, description: "Complete native receipt window. MCP/built-in caps also apply; entries stay whole." }),
|
|
7
|
+
};
|
|
8
|
+
export const knowledgeFolderListReadContract = obj({
|
|
9
|
+
view: enumOf(["full", "folders"], { description: "Omit/full: existing folder+page explorer. folders: only id/name/parentId; empty folders remain." }),
|
|
10
|
+
query: str({ maxLength: 200, description: "Folders view: case-insensitive substring of folder name. No sharing/permission meaning." }),
|
|
11
|
+
...window,
|
|
12
|
+
});
|
|
13
|
+
export const blueprintListWindowContract = obj({
|
|
14
|
+
view: enumOf(["full", "summary", "names"], { description: "Omit/full: existing summary shape including creates_columns. summary: identity/summary/integrations/counts. names: identity only; describe for details." }),
|
|
15
|
+
...window,
|
|
16
|
+
});
|
|
17
|
+
// Existing ordinary MCP selectors; opt-in native windows validate them before
|
|
18
|
+
// producing an executable continuation. Legacy full HTTP reads remain tolerant.
|
|
19
|
+
export const blueprintListSelectorContract = obj({
|
|
20
|
+
query: str({ description: "Search text (matches name/slug/summary).", maxLength: 200 }),
|
|
21
|
+
tag: str({ description: "Optional tag filter.", maxLength: 80 }),
|
|
22
|
+
include_seeds: bool({ description: "Include shipped seed blueprints (default true)." }),
|
|
23
|
+
});
|