primitive-admin 1.2.0-alpha.0 → 1.2.0-alpha.10
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 +108 -136
- package/assets/skill/skills/primitive-platform/SKILL.md +37 -4
- package/dist/bin/primitive.js +30 -35
- package/dist/bin/primitive.js.map +1 -1
- package/dist/src/commands/agent-sessions.d.ts +133 -0
- package/dist/src/commands/agent-sessions.js +792 -0
- package/dist/src/commands/agent-sessions.js.map +1 -0
- package/dist/src/commands/analytics.js +0 -148
- package/dist/src/commands/analytics.js.map +1 -1
- package/dist/src/commands/apps-children.d.ts +54 -0
- package/dist/src/commands/apps-children.js +631 -0
- package/dist/src/commands/apps-children.js.map +1 -0
- package/dist/src/commands/apps.d.ts +6 -0
- package/dist/src/commands/apps.js +131 -9
- package/dist/src/commands/apps.js.map +1 -1
- package/dist/src/commands/auth-sessions.d.ts +3 -3
- package/dist/src/commands/auth-sessions.js +117 -23
- package/dist/src/commands/auth-sessions.js.map +1 -1
- package/dist/src/commands/auth.js +460 -36
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/collections.js +316 -256
- package/dist/src/commands/collections.js.map +1 -1
- package/dist/src/commands/config.d.ts +1 -1
- package/dist/src/commands/config.js +60 -28
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/connections.js +12 -17
- package/dist/src/commands/connections.js.map +1 -1
- package/dist/src/commands/database-type-configs.js +2 -76
- package/dist/src/commands/database-type-configs.js.map +1 -1
- package/dist/src/commands/databases.d.ts +9 -0
- package/dist/src/commands/databases.js +228 -566
- package/dist/src/commands/databases.js.map +1 -1
- package/dist/src/commands/db3-types.d.ts +15 -0
- package/dist/src/commands/db3-types.js +157 -0
- package/dist/src/commands/db3-types.js.map +1 -0
- package/dist/src/commands/db3.d.ts +12 -0
- package/dist/src/commands/db3.js +1052 -0
- package/dist/src/commands/db3.js.map +1 -0
- package/dist/src/commands/documents.d.ts +121 -2
- package/dist/src/commands/documents.js +1601 -1251
- package/dist/src/commands/documents.js.map +1 -1
- package/dist/src/commands/env.d.ts +9 -1
- package/dist/src/commands/env.js +164 -49
- package/dist/src/commands/env.js.map +1 -1
- package/dist/src/commands/function-trigger-commands.d.ts +28 -0
- package/dist/src/commands/function-trigger-commands.js +341 -0
- package/dist/src/commands/function-trigger-commands.js.map +1 -0
- package/dist/src/commands/functions.js +297 -24
- package/dist/src/commands/functions.js.map +1 -1
- package/dist/src/commands/groups.js +150 -49
- package/dist/src/commands/groups.js.map +1 -1
- package/dist/src/commands/guides.js +5 -5
- package/dist/src/commands/init.d.ts +7 -0
- package/dist/src/commands/init.js +23 -5
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/integrations.js +14 -8
- package/dist/src/commands/integrations.js.map +1 -1
- package/dist/src/commands/metadata-category-configs.d.ts +2 -2
- package/dist/src/commands/metadata-category-configs.js +2 -2
- package/dist/src/commands/prompts.d.ts +7 -0
- package/dist/src/commands/prompts.js +48 -5
- package/dist/src/commands/prompts.js.map +1 -1
- package/dist/src/commands/scripts.d.ts +9 -17
- package/dist/src/commands/scripts.js +24 -479
- package/dist/src/commands/scripts.js.map +1 -1
- package/dist/src/commands/sessions.js +3 -8
- package/dist/src/commands/sessions.js.map +1 -1
- package/dist/src/commands/sync-app-settings.d.ts +36 -8
- package/dist/src/commands/sync-app-settings.js +109 -23
- package/dist/src/commands/sync-app-settings.js.map +1 -1
- package/dist/src/commands/sync.d.ts +436 -613
- package/dist/src/commands/sync.js +2604 -5977
- package/dist/src/commands/sync.js.map +1 -1
- package/dist/src/commands/tokens.js +4 -9
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/users.js +77 -2
- package/dist/src/commands/users.js.map +1 -1
- package/dist/src/commands/workflows.d.ts +5 -83
- package/dist/src/commands/workflows.js +57 -2282
- package/dist/src/commands/workflows.js.map +1 -1
- package/dist/src/lib/aggregate-output.d.ts +25 -0
- package/dist/src/lib/aggregate-output.js +53 -0
- package/dist/src/lib/aggregate-output.js.map +1 -0
- package/dist/src/lib/api-client.d.ts +681 -581
- package/dist/src/lib/api-client.js +880 -851
- package/dist/src/lib/api-client.js.map +1 -1
- package/dist/src/lib/app-settings-descriptor.d.ts +47 -1
- package/dist/src/lib/app-settings-descriptor.js +114 -10
- package/dist/src/lib/app-settings-descriptor.js.map +1 -1
- package/dist/src/lib/auth-fixtures.d.ts +44 -0
- package/dist/src/lib/auth-fixtures.js +61 -0
- package/dist/src/lib/auth-fixtures.js.map +1 -0
- package/dist/src/lib/auth-flow.d.ts +41 -1
- package/dist/src/lib/auth-flow.js +70 -16
- package/dist/src/lib/auth-flow.js.map +1 -1
- package/dist/src/lib/block-layout.d.ts +12 -23
- package/dist/src/lib/block-layout.js +26 -92
- package/dist/src/lib/block-layout.js.map +1 -1
- package/dist/src/lib/block-selector.d.ts +2 -2
- package/dist/src/lib/block-selector.js +2 -2
- package/dist/src/lib/child-apps-local.d.ts +164 -0
- package/dist/src/lib/child-apps-local.js +258 -0
- package/dist/src/lib/child-apps-local.js.map +1 -0
- package/dist/src/lib/ci-session-request.d.ts +22 -0
- package/dist/src/lib/ci-session-request.js +51 -0
- package/dist/src/lib/ci-session-request.js.map +1 -0
- package/dist/src/lib/codegen-shared/generatedFiles.d.ts +10 -8
- package/dist/src/lib/codegen-shared/generatedFiles.js +21 -15
- package/dist/src/lib/codegen-shared/generatedFiles.js.map +1 -1
- package/dist/src/lib/codegen-shared/prettierStable.d.ts +1 -1
- package/dist/src/lib/codegen-shared/prettierStable.js +1 -1
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.d.ts +2 -2
- package/dist/src/lib/codegen-shared/resolveCodegenSourceDir.js +2 -2
- package/dist/src/lib/collection-export.d.ts +76 -15
- package/dist/src/lib/collection-export.js +116 -23
- package/dist/src/lib/collection-export.js.map +1 -1
- package/dist/src/lib/collection-principal.d.ts +22 -0
- package/dist/src/lib/collection-principal.js +35 -0
- package/dist/src/lib/collection-principal.js.map +1 -0
- package/dist/src/lib/config-object-descriptor.d.ts +3 -22
- package/dist/src/lib/config-object-descriptor.js +56 -291
- package/dist/src/lib/config-object-descriptor.js.map +1 -1
- package/dist/src/lib/config-payload.js +2 -3
- package/dist/src/lib/config-payload.js.map +1 -1
- package/dist/src/lib/config-surface.d.ts +5 -7
- package/dist/src/lib/config-surface.js +18 -40
- package/dist/src/lib/config-surface.js.map +1 -1
- package/dist/src/lib/connections-list.d.ts +10 -0
- package/dist/src/lib/connections-list.js +18 -0
- package/dist/src/lib/connections-list.js.map +1 -0
- package/dist/src/lib/credentials-home.d.ts +58 -0
- package/dist/src/lib/credentials-home.js +204 -0
- package/dist/src/lib/credentials-home.js.map +1 -0
- package/dist/src/lib/credentials-lock.d.ts +88 -0
- package/dist/src/lib/credentials-lock.js +302 -0
- package/dist/src/lib/credentials-lock.js.map +1 -0
- package/dist/src/lib/credentials-store.d.ts +179 -24
- package/dist/src/lib/credentials-store.js +712 -77
- package/dist/src/lib/credentials-store.js.map +1 -1
- package/dist/src/lib/csv.d.ts +8 -9
- package/dist/src/lib/csv.js +3 -4
- package/dist/src/lib/csv.js.map +1 -1
- package/dist/src/lib/custodian.d.ts +8 -0
- package/dist/src/lib/custodian.js +18 -0
- package/dist/src/lib/custodian.js.map +1 -0
- package/dist/src/lib/db-codegen/dbGenerator.js +5 -16
- package/dist/src/lib/db-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/db-codegen/dbNaming.d.ts +5 -13
- package/dist/src/lib/db-codegen/dbNaming.js +5 -17
- package/dist/src/lib/db-codegen/dbNaming.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTemplates.d.ts +7 -56
- package/dist/src/lib/db-codegen/dbTemplates.js +25 -125
- package/dist/src/lib/db-codegen/dbTemplates.js.map +1 -1
- package/dist/src/lib/db-codegen/dbTsTypes.d.ts +2 -2
- package/dist/src/lib/db-codegen/dbTsTypes.js +2 -2
- package/dist/src/lib/db-codegen/dbTypeIR.d.ts +67 -2
- package/dist/src/lib/db-codegen/dbTypeIR.js +13 -2
- package/dist/src/lib/db-codegen/dbTypeIR.js.map +1 -1
- package/dist/src/lib/db3-export.d.ts +231 -0
- package/dist/src/lib/db3-export.js +510 -0
- package/dist/src/lib/db3-export.js.map +1 -0
- package/dist/src/lib/db3-index-output.d.ts +27 -0
- package/dist/src/lib/db3-index-output.js +49 -0
- package/dist/src/lib/db3-index-output.js.map +1 -0
- package/dist/src/lib/document-export-lookups.d.ts +31 -0
- package/dist/src/lib/document-export-lookups.js +53 -0
- package/dist/src/lib/document-export-lookups.js.map +1 -0
- package/dist/src/lib/document-export-permissions.d.ts +7 -5
- package/dist/src/lib/document-export-permissions.js +7 -5
- package/dist/src/lib/document-export-permissions.js.map +1 -1
- package/dist/src/lib/document-export-record-log.d.ts +57 -0
- package/dist/src/lib/document-export-record-log.js +215 -0
- package/dist/src/lib/document-export-record-log.js.map +1 -0
- package/dist/src/lib/document-ingest-artifact.d.ts +26 -2
- package/dist/src/lib/document-ingest-artifact.js +42 -8
- package/dist/src/lib/document-ingest-artifact.js.map +1 -1
- package/dist/src/lib/document-ingest-format2.d.ts +36 -0
- package/dist/src/lib/document-ingest-format2.js +78 -0
- package/dist/src/lib/document-ingest-format2.js.map +1 -0
- package/dist/src/lib/document-ingest-input.d.ts +9 -0
- package/dist/src/lib/document-ingest-input.js +28 -1
- package/dist/src/lib/document-ingest-input.js.map +1 -1
- package/dist/src/lib/document-ingest-rows.d.ts +16 -0
- package/dist/src/lib/document-ingest-rows.js +17 -0
- package/dist/src/lib/document-ingest-rows.js.map +1 -1
- package/dist/src/lib/document-ingest.d.ts +33 -1
- package/dist/src/lib/document-ingest.js +49 -0
- package/dist/src/lib/document-ingest.js.map +1 -1
- package/dist/src/lib/document-schema-rows.d.ts +42 -0
- package/dist/src/lib/document-schema-rows.js +53 -0
- package/dist/src/lib/document-schema-rows.js.map +1 -0
- package/dist/src/lib/env-resolver-core.d.ts +70 -2
- package/dist/src/lib/env-resolver-core.js +137 -20
- package/dist/src/lib/env-resolver-core.js.map +1 -1
- package/dist/src/lib/env-resolver.d.ts +14 -2
- package/dist/src/lib/env-resolver.js +32 -10
- package/dist/src/lib/env-resolver.js.map +1 -1
- package/dist/src/lib/function-authorize-check.d.ts +142 -0
- package/dist/src/lib/function-authorize-check.js +310 -0
- package/dist/src/lib/function-authorize-check.js.map +1 -0
- package/dist/src/lib/function-authorize-view.d.ts +15 -0
- package/dist/src/lib/function-authorize-view.js +50 -0
- package/dist/src/lib/function-authorize-view.js.map +1 -0
- package/dist/src/lib/function-bundle.d.ts +38 -18
- package/dist/src/lib/function-bundle.js +96 -35
- package/dist/src/lib/function-bundle.js.map +1 -1
- package/dist/src/lib/function-collect.d.ts +75 -12
- package/dist/src/lib/function-collect.js +427 -12
- package/dist/src/lib/function-collect.js.map +1 -1
- package/dist/src/lib/function-db-types.d.ts +29 -0
- package/dist/src/lib/function-db-types.js +117 -7
- package/dist/src/lib/function-db-types.js.map +1 -1
- package/dist/src/lib/function-document-types.d.ts +5 -3
- package/dist/src/lib/function-document-types.js +10 -14
- package/dist/src/lib/function-document-types.js.map +1 -1
- package/dist/src/lib/function-lint.d.ts +34 -0
- package/dist/src/lib/function-lint.js +112 -0
- package/dist/src/lib/function-lint.js.map +1 -0
- package/dist/src/lib/function-log-row.js +21 -2
- package/dist/src/lib/function-log-row.js.map +1 -1
- package/dist/src/lib/function-run.d.ts +16 -21
- package/dist/src/lib/function-run.js +37 -30
- package/dist/src/lib/function-run.js.map +1 -1
- package/dist/src/lib/function-schema-codegen.d.ts +1 -1
- package/dist/src/lib/function-schema-codegen.js +5 -5
- package/dist/src/lib/function-schema-codegen.js.map +1 -1
- package/dist/src/lib/function-source-roots.d.ts +67 -0
- package/dist/src/lib/function-source-roots.js +148 -0
- package/dist/src/lib/function-source-roots.js.map +1 -0
- package/dist/src/lib/function-sync.d.ts +108 -22
- package/dist/src/lib/function-sync.js +127 -39
- package/dist/src/lib/function-sync.js.map +1 -1
- package/dist/src/lib/function-trigger-listing.d.ts +11 -6
- package/dist/src/lib/function-trigger-listing.js +32 -11
- package/dist/src/lib/function-trigger-listing.js.map +1 -1
- package/dist/src/lib/function-typecheck.d.ts +37 -2
- package/dist/src/lib/function-typecheck.js +210 -28
- package/dist/src/lib/function-typecheck.js.map +1 -1
- package/dist/src/lib/function-versions.d.ts +2 -0
- package/dist/src/lib/function-versions.js +1 -0
- package/dist/src/lib/function-versions.js.map +1 -1
- package/dist/src/lib/generated-allowlist.js +0 -20
- package/dist/src/lib/generated-allowlist.js.map +1 -1
- package/dist/src/lib/generated-config-surfaces.d.ts +703 -201
- package/dist/src/lib/generated-config-surfaces.js +2335 -2033
- package/dist/src/lib/generated-config-surfaces.js.map +1 -1
- package/dist/src/lib/generated-sdk-types.d.ts +1 -1
- package/dist/src/lib/generated-sdk-types.js +1 -1
- package/dist/src/lib/generated-sdk-types.js.map +1 -1
- package/dist/src/lib/init-adopt.js +12 -3
- package/dist/src/lib/init-adopt.js.map +1 -1
- package/dist/src/lib/init-login-note.d.ts +13 -0
- package/dist/src/lib/init-login-note.js +22 -0
- package/dist/src/lib/init-login-note.js.map +1 -0
- package/dist/src/lib/json-value.d.ts +6 -0
- package/dist/src/lib/json-value.js +13 -0
- package/dist/src/lib/json-value.js.map +1 -0
- package/dist/src/lib/load-routes.d.ts +33 -0
- package/dist/src/lib/load-routes.js +35 -0
- package/dist/src/lib/load-routes.js.map +1 -0
- package/dist/src/lib/local-state.d.ts +38 -7
- package/dist/src/lib/local-state.js +172 -49
- package/dist/src/lib/local-state.js.map +1 -1
- package/dist/src/lib/local-test-cases.d.ts +5 -2
- package/dist/src/lib/local-test-cases.js +7 -4
- package/dist/src/lib/local-test-cases.js.map +1 -1
- package/dist/src/lib/log-inspection.d.ts +42 -4
- package/dist/src/lib/log-inspection.js +37 -5
- package/dist/src/lib/log-inspection.js.map +1 -1
- package/dist/src/lib/login-exchange-check.d.ts +18 -0
- package/dist/src/lib/login-exchange-check.js +27 -0
- package/dist/src/lib/login-exchange-check.js.map +1 -0
- package/dist/src/lib/login-scope-lines.d.ts +25 -0
- package/dist/src/lib/login-scope-lines.js +45 -0
- package/dist/src/lib/login-scope-lines.js.map +1 -0
- package/dist/src/lib/logout-admin-session.d.ts +2 -1
- package/dist/src/lib/logout-admin-session.js +7 -1
- package/dist/src/lib/logout-admin-session.js.map +1 -1
- package/dist/src/lib/object-status-filter.d.ts +9 -1
- package/dist/src/lib/object-status-filter.js +9 -1
- package/dist/src/lib/object-status-filter.js.map +1 -1
- package/dist/src/lib/output.js +2 -0
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/paginate.d.ts +0 -5
- package/dist/src/lib/paginate.js +0 -5
- package/dist/src/lib/paginate.js.map +1 -1
- package/dist/src/lib/pin-refusal-hint.d.ts +12 -0
- package/dist/src/lib/pin-refusal-hint.js +35 -0
- package/dist/src/lib/pin-refusal-hint.js.map +1 -0
- package/dist/src/lib/primitive-env-plugin.d.ts +99 -0
- package/dist/src/lib/primitive-env-plugin.js +408 -0
- package/dist/src/lib/primitive-env-plugin.js.map +1 -0
- package/dist/src/lib/project-config.d.ts +7 -0
- package/dist/src/lib/project-config.js +22 -1
- package/dist/src/lib/project-config.js.map +1 -1
- package/dist/src/lib/project-login-apps.d.ts +8 -0
- package/dist/src/lib/project-login-apps.js +27 -0
- package/dist/src/lib/project-login-apps.js.map +1 -0
- package/dist/src/lib/prompt-schema-codegen.d.ts +10 -3
- package/dist/src/lib/prompt-schema-codegen.js +52 -11
- package/dist/src/lib/prompt-schema-codegen.js.map +1 -1
- package/dist/src/lib/pull-write.d.ts +31 -0
- package/dist/src/lib/pull-write.js +49 -0
- package/dist/src/lib/pull-write.js.map +1 -0
- package/dist/src/lib/push-failure-report.d.ts +45 -0
- package/dist/src/lib/push-failure-report.js +57 -0
- package/dist/src/lib/push-failure-report.js.map +1 -0
- package/dist/src/lib/records-verbs.d.ts +69 -0
- package/dist/src/lib/records-verbs.js +40 -0
- package/dist/src/lib/records-verbs.js.map +1 -0
- package/dist/src/lib/refresh-admin-credentials.d.ts +7 -0
- package/dist/src/lib/refresh-admin-credentials.js +16 -4
- package/dist/src/lib/refresh-admin-credentials.js.map +1 -1
- package/dist/src/lib/root-import-decision.d.ts +65 -0
- package/dist/src/lib/root-import-decision.js +109 -0
- package/dist/src/lib/root-import-decision.js.map +1 -0
- package/dist/src/lib/run-status.d.ts +1 -1
- package/dist/src/lib/run-status.generated.d.ts +2 -2
- package/dist/src/lib/run-status.generated.js +3 -1
- package/dist/src/lib/run-status.generated.js.map +1 -1
- package/dist/src/lib/run-status.js +1 -1
- package/dist/src/lib/schema-codegen/generated-schema-descriptor.d.ts +129 -0
- package/dist/src/lib/schema-codegen/generated-schema-descriptor.js +269 -0
- package/dist/src/lib/schema-codegen/generated-schema-descriptor.js.map +1 -0
- package/dist/src/lib/schema-codegen/naming.d.ts +35 -0
- package/dist/src/lib/schema-codegen/naming.js +83 -0
- package/dist/src/lib/schema-codegen/naming.js.map +1 -0
- package/dist/src/lib/schema-codegen/schemaToTs.d.ts +82 -0
- package/dist/src/lib/schema-codegen/schemaToTs.js +305 -0
- package/dist/src/lib/schema-codegen/schemaToTs.js.map +1 -0
- package/dist/src/lib/scope-request.d.ts +84 -0
- package/dist/src/lib/scope-request.js +235 -0
- package/dist/src/lib/scope-request.js.map +1 -0
- package/dist/src/lib/session-id.d.ts +9 -0
- package/dist/src/lib/session-id.js +28 -0
- package/dist/src/lib/session-id.js.map +1 -0
- package/dist/src/lib/snapshot-build-rows.d.ts +21 -0
- package/dist/src/lib/snapshot-build-rows.js +22 -0
- package/dist/src/lib/snapshot-build-rows.js.map +1 -1
- package/dist/src/lib/snapshot-build.js +8 -3
- package/dist/src/lib/snapshot-build.js.map +1 -1
- package/dist/src/lib/snapshots.d.ts +17 -1
- package/dist/src/lib/snapshots.js +50 -2
- package/dist/src/lib/snapshots.js.map +1 -1
- package/dist/src/lib/swift-codegen/agentGenerator.d.ts +6 -2
- package/dist/src/lib/swift-codegen/agentGenerator.js +57 -5
- package/dist/src/lib/swift-codegen/agentGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/banners.d.ts +34 -7
- package/dist/src/lib/swift-codegen/banners.js +37 -7
- package/dist/src/lib/swift-codegen/banners.js.map +1 -1
- package/dist/src/lib/swift-codegen/dbGenerator.d.ts +4 -3
- package/dist/src/lib/swift-codegen/dbGenerator.js +14 -117
- package/dist/src/lib/swift-codegen/dbGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/functionGenerator.d.ts +3 -3
- package/dist/src/lib/swift-codegen/functionGenerator.js +23 -18
- package/dist/src/lib/swift-codegen/functionGenerator.js.map +1 -1
- package/dist/src/lib/swift-codegen/generator.d.ts +5 -5
- package/dist/src/lib/swift-codegen/generator.js +35 -40
- package/dist/src/lib/swift-codegen/generator.js.map +1 -1
- package/dist/src/lib/swift-codegen/schemaToSwift.d.ts +3 -3
- package/dist/src/lib/swift-codegen/schemaToSwift.js +4 -4
- package/dist/src/lib/swift-codegen/schemaToSwift.js.map +1 -1
- package/dist/src/lib/swift-codegen/swiftKeys.d.ts +19 -0
- package/dist/src/lib/swift-codegen/swiftKeys.js +31 -0
- package/dist/src/lib/swift-codegen/swiftKeys.js.map +1 -0
- package/dist/src/lib/sync-paths.d.ts +35 -0
- package/dist/src/lib/sync-paths.js +57 -5
- package/dist/src/lib/sync-paths.js.map +1 -1
- package/dist/src/lib/sync-resource-types.d.ts +26 -26
- package/dist/src/lib/sync-resource-types.js +61 -189
- package/dist/src/lib/sync-resource-types.js.map +1 -1
- package/dist/src/lib/sync-selectors.d.ts +5 -1
- package/dist/src/lib/sync-selectors.js +23 -13
- package/dist/src/lib/sync-selectors.js.map +1 -1
- package/dist/src/lib/test-case-file-names.d.ts +3 -5
- package/dist/src/lib/test-case-file-names.js +3 -5
- package/dist/src/lib/test-case-file-names.js.map +1 -1
- package/dist/src/lib/toml-database-config.d.ts +15 -75
- package/dist/src/lib/toml-database-config.js +17 -306
- package/dist/src/lib/toml-database-config.js.map +1 -1
- package/dist/src/lib/transient-retry.d.ts +43 -0
- package/dist/src/lib/transient-retry.js +94 -0
- package/dist/src/lib/transient-retry.js.map +1 -0
- package/dist/src/lib/vars-override.d.ts +105 -0
- package/dist/src/lib/vars-override.js +143 -0
- package/dist/src/lib/vars-override.js.map +1 -0
- package/dist/src/lib/webhook-capture.d.ts +43 -0
- package/dist/src/lib/webhook-capture.js +91 -0
- package/dist/src/lib/webhook-capture.js.map +1 -0
- package/dist/src/lib/webhook-deliver.d.ts +18 -20
- package/dist/src/lib/webhook-deliver.js +34 -89
- package/dist/src/lib/webhook-deliver.js.map +1 -1
- package/dist/src/lib/webhook-test-run.d.ts +32 -0
- package/dist/src/lib/webhook-test-run.js +108 -0
- package/dist/src/lib/webhook-test-run.js.map +1 -0
- package/dist/src/lib/workflow-codegen/generator.d.ts +7 -7
- package/dist/src/lib/workflow-codegen/generator.js +16 -23
- package/dist/src/lib/workflow-codegen/generator.js.map +1 -1
- package/dist/src/lib/workflow-codegen/invokerIR.d.ts +6 -12
- package/dist/src/lib/workflow-codegen/invokerIR.js +4 -5
- package/dist/src/lib/workflow-codegen/invokerIR.js.map +1 -1
- package/dist/src/lib/workflow-toml-validator.d.ts +2 -0
- package/dist/src/lib/workflow-toml-validator.js +28 -1
- package/dist/src/lib/workflow-toml-validator.js.map +1 -1
- package/dist/src/types/index.d.ts +30 -37
- package/dist/src/validators.d.ts +7 -55
- package/dist/src/validators.js +7 -53
- package/dist/src/validators.js.map +1 -1
- package/dist/src/vite.d.ts +17 -0
- package/dist/src/vite.js +18 -0
- package/dist/src/vite.js.map +1 -0
- package/package.json +20 -12
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* server; the CLI vendors them at build time into
|
|
32
32
|
* `cli/src/lib/generated-config-surfaces.ts`
|
|
33
33
|
* (`cli/scripts/gen-config-surfaces.mjs`), the same server→CLI vendoring
|
|
34
|
-
* `gen-
|
|
34
|
+
* `gen-workflow-schema-descriptor.mjs` (#1442) already uses, so the published CLI
|
|
35
35
|
* still imports no server code at runtime.
|
|
36
36
|
*
|
|
37
37
|
* ── Scope: declarative classification and coverage ONLY ──────────────────
|
|
@@ -283,8 +283,7 @@ export type RuleStage = "preflight" | "apply";
|
|
|
283
283
|
export type CrossFieldRuleStage = RuleStage;
|
|
284
284
|
/**
|
|
285
285
|
* One rule of a configuration object that spans more than one field — `durable
|
|
286
|
-
* = true` beside a webhook trigger,
|
|
287
|
-
* `accessRule`, an HMAC scheme with no `signingSecret`.
|
|
286
|
+
* = true` beside a webhook trigger, an HMAC scheme with no `signingSecret`.
|
|
288
287
|
*
|
|
289
288
|
* Such a rule belongs to no single field, so `ConfigField.validation` has
|
|
290
289
|
* nowhere to put it; attaching it to one field arbitrarily would make the
|
|
@@ -362,8 +361,9 @@ export interface ConfigObjectSurface {
|
|
|
362
361
|
* Declares that this object HAS no TOML field table, with the reason —
|
|
363
362
|
* required when `tables` is empty and forbidden otherwise.
|
|
364
363
|
*
|
|
365
|
-
* `transform`
|
|
366
|
-
*
|
|
364
|
+
* `transform` was the case until it retired with the Rhai runtime (#3190): a
|
|
365
|
+
* `.rhai` file's authored surface was the script body, so there was no
|
|
366
|
+
* key/value table to define. Saying so here is the same
|
|
367
367
|
* rule `notExposed` applies to a field, one level up: "absent from the
|
|
368
368
|
* registry" and "deliberately fieldless" must not look the same (#2644
|
|
369
369
|
* criterion 4).
|
|
@@ -455,8 +455,8 @@ export declare const DECLARED_ACCESS_MANIFEST_KEYS: Readonly<Record<string, NotE
|
|
|
455
455
|
* accepts. What a present key MEANS stays with the per-field handler the
|
|
456
456
|
* definition names (spec §Contracts, decision of record #1976): the workflow
|
|
457
457
|
* `status` enum, the non-negative-integer coercion of the queue limits,
|
|
458
|
-
* `runAs`'s caller|system check, `parseWorkflowLock
|
|
459
|
-
* shape
|
|
458
|
+
* `runAs`'s caller|system check, `parseWorkflowLock` and the `capabilities`
|
|
459
|
+
* array shape all stay where they are. The
|
|
460
460
|
* mechanical win is that a field can no longer be *absent* from the accepted
|
|
461
461
|
* set.
|
|
462
462
|
*
|
|
@@ -466,11 +466,12 @@ export type WriteMode = "create" | "update";
|
|
|
466
466
|
/** The field names this table accepts on the wire in `mode`, in declaration order. */
|
|
467
467
|
export declare function writableFieldNames(table: ConfigTable, mode: WriteMode): string[];
|
|
468
468
|
/**
|
|
469
|
-
* The field names the server
|
|
470
|
-
* fields, plus the `deprecated` classifications — "still
|
|
471
|
-
*
|
|
472
|
-
* a handler still honors (`
|
|
473
|
-
*
|
|
469
|
+
* The field names the server ACCEPTS for this table in `mode`: the writable
|
|
470
|
+
* fields, plus the `deprecated` classifications — "still accepted, superseded
|
|
471
|
+
* or scheduled for removal" is what that kind means (`types.ts`), so a
|
|
472
|
+
* superseded key a handler still honors (`protected`) and a retired one it
|
|
473
|
+
* accepts and ignores (`accessRule`, #4872) belong in every accepted set, and a
|
|
474
|
+
* field that is NOT writable belongs in none of them.
|
|
474
475
|
*
|
|
475
476
|
* Stated once here because three consumers need the same answer: the generated
|
|
476
477
|
* request schemas, `PUT /settings`'s write allow-list, and the guards.
|
|
@@ -629,8 +630,9 @@ export declare function acceptedGroupTomlKeys(table: ConfigTable, group: string)
|
|
|
629
630
|
* is therefore an unknown key rather than one the payload builder silently
|
|
630
631
|
* ignores (SO3626-013) — the builder reads a grouped field only from
|
|
631
632
|
* `source[group][tomlKey]`, so accepting it here would drop the author's value
|
|
632
|
-
* without a word.
|
|
633
|
-
*
|
|
633
|
+
* without a word. A key whose root spelling was retired while it moved into a
|
|
634
|
+
* group (the flat chat keys, #3642) is refused the same way, with the guidance
|
|
635
|
+
* `RETIRED_TOML_SPELLINGS` states.
|
|
634
636
|
*/
|
|
635
637
|
export declare function acceptedTomlKeys(table: ConfigTable): Set<string>;
|
|
636
638
|
/**
|
|
@@ -979,11 +981,11 @@ export declare function findUnreachedPreflightRules(surface: ConfigObjectSurface
|
|
|
979
981
|
*
|
|
980
982
|
* ── What the schema says, and what it deliberately does not ──────────────
|
|
981
983
|
* It states the KEY SET only: each property is the empty schema (or carries
|
|
982
|
-
* only the `deprecated` annotation, #1815), so no value is type-checked here.
|
|
983
|
-
*
|
|
984
|
-
*
|
|
985
|
-
*
|
|
986
|
-
* definition names, with their existing messages. Adding type gates here would
|
|
984
|
+
* only the `deprecated` annotation, #1815), so no value is type-checked here.
|
|
985
|
+
* That is the decision of record (#1976, carried forward at #2644's design
|
|
986
|
+
* gate): the definition classifies, handlers behave. The `status` enum, the
|
|
987
|
+
* queue limits' integer coercion, the CEL parse of a rule set's expressions —
|
|
988
|
+
* all stay in the handlers the definition names, with their existing messages. Adding type gates here would
|
|
987
989
|
* duplicate them and start rejecting values the handlers accept.
|
|
988
990
|
*
|
|
989
991
|
* ── Which keys are in the set ────────────────────────────────────────────
|
|
@@ -1016,7 +1018,8 @@ export interface ConfigRequestSchema {
|
|
|
1016
1018
|
type: "object";
|
|
1017
1019
|
/**
|
|
1018
1020
|
* Each property is the empty schema, or `{ deprecated: true }` for a field
|
|
1019
|
-
* the definition marks `deprecated` (#1815)
|
|
1021
|
+
* the definition marks `deprecated` (#1815) or a key `notExposed` classifies
|
|
1022
|
+
* `deprecated` (#4872). `deprecated` is an OpenAPI
|
|
1020
1023
|
* annotation: it constrains no value, so the schema still states the key set
|
|
1021
1024
|
* and nothing more.
|
|
1022
1025
|
*/
|
|
@@ -1088,7 +1091,7 @@ export declare function unknownRequestKeysMessage(keys: readonly string[]): stri
|
|
|
1088
1091
|
* retired key: the TOML wording for `config push` (which can tell the author to
|
|
1089
1092
|
* delete a line) and the request wording for the API handlers (which cannot).
|
|
1090
1093
|
*
|
|
1091
|
-
* Keyed by the table's TOML path prefix (`
|
|
1094
|
+
* Keyed by the table's TOML path prefix (`integration`, `prompt`, …), because
|
|
1092
1095
|
* that is the identifier both consumers already have in hand.
|
|
1093
1096
|
*
|
|
1094
1097
|
* Pure: no models, no tenant context, no `env` (see `types.ts` §Purity).
|
|
@@ -1100,8 +1103,85 @@ export interface RetiredConfigKey {
|
|
|
1100
1103
|
request: string;
|
|
1101
1104
|
}
|
|
1102
1105
|
export declare const RETIRED_CONFIG_KEYS: Record<string, Record<string, RetiredConfigKey>>;
|
|
1106
|
+
/**
|
|
1107
|
+
* Keys DEPRECATED on a configuration object's write surface: still accepted
|
|
1108
|
+
* in TOML and on the wire, ignored, and scheduled for removal.
|
|
1109
|
+
*
|
|
1110
|
+
* A deprecated key sits between a live field and a retired one. The table
|
|
1111
|
+
* classifies it `deprecated` in both `notExposed` (so a body that still sends
|
|
1112
|
+
* it is accepted) and `tomlOnlyKeys` (so a file that still carries it
|
|
1113
|
+
* validates); this registry holds the one sentence `config push` prints for a
|
|
1114
|
+
* file that carries it, and is what `config pull` keys its forced rewrite on,
|
|
1115
|
+
* so the pull the sentence names removes the line.
|
|
1116
|
+
*
|
|
1117
|
+
* Keyed by the table's TOML path prefix, like `RETIRED_CONFIG_KEYS`. The
|
|
1118
|
+
* scheduled break moves an entry from here to that map.
|
|
1119
|
+
*/
|
|
1120
|
+
export interface DeprecatedConfigKey {
|
|
1121
|
+
/** What `config push` says, once per file, about a file that carries the key. */
|
|
1122
|
+
toml: string;
|
|
1123
|
+
}
|
|
1124
|
+
export declare const DEPRECATED_CONFIG_KEYS: Record<string, Record<string, DeprecatedConfigKey>>;
|
|
1125
|
+
/** The deprecated-key entry for `key` under `prefix`, or null when it is not deprecated. */
|
|
1126
|
+
export declare function deprecatedConfigKey(prefix: string, key: string): DeprecatedConfigKey | null;
|
|
1127
|
+
/**
|
|
1128
|
+
* Config-tree directories whose object type retired — #3190, server-functions
|
|
1129
|
+
* phase 7. The DSL engine, the Rhai runtime and the standalone webhook and
|
|
1130
|
+
* cron objects are gone, so `config push` refuses a tree that still holds one
|
|
1131
|
+
* of these directories, by name and before it writes anything, rather than
|
|
1132
|
+
* ignoring files an author still expects to take effect.
|
|
1133
|
+
*
|
|
1134
|
+
* Each entry is one sentence: what retired, what replaces it, and the docs page
|
|
1135
|
+
* that shows the replacement.
|
|
1136
|
+
*/
|
|
1137
|
+
export declare const RETIRED_CONFIG_DIRECTORIES: Record<string, string>;
|
|
1138
|
+
/**
|
|
1139
|
+
* The type-config directories a config tree no longer has (#4731, project
|
|
1140
|
+
* `role-based-groups-collections`). Groups and collections have fixed roles,
|
|
1141
|
+
* so their per-type configuration retired with its routes; `config push`
|
|
1142
|
+
* refuses a tree that still holds a file in either, naming each file, rather
|
|
1143
|
+
* than ignoring files an author still expects to take effect. The rows the
|
|
1144
|
+
* server already stored are not touched.
|
|
1145
|
+
*
|
|
1146
|
+
* Each entry is one sentence: what retired, and what replaces it.
|
|
1147
|
+
*/
|
|
1148
|
+
export declare const RETIRED_TYPE_CONFIG_DIRECTORIES: Record<string, string>;
|
|
1149
|
+
/** The retirement sentence for a config-tree directory, or null when it is live. */
|
|
1150
|
+
export declare function retiredConfigDirectory(dir: string): string | null;
|
|
1151
|
+
/**
|
|
1152
|
+
* Top-level TOML tables a configuration object's FILE retired — keyed by the
|
|
1153
|
+
* surface's label, then by the table key. Only the TOML half exists: these were
|
|
1154
|
+
* sub-trees applied through their own endpoints, never request keys of the
|
|
1155
|
+
* object itself, so no request body can carry one.
|
|
1156
|
+
*
|
|
1157
|
+
* Without an entry here a retired table would be answered as an unrecognized
|
|
1158
|
+
* one ("check the spelling, or upgrade the CLI"), which is backwards for a
|
|
1159
|
+
* table removed on purpose.
|
|
1160
|
+
*/
|
|
1161
|
+
export declare const RETIRED_DOCUMENT_KEYS: Record<string, Record<string, RetiredTomlSpelling>>;
|
|
1162
|
+
/** The retired-table guidance for `key` on the surface labelled `label`, or null. */
|
|
1163
|
+
export declare function retiredDocumentKey(label: string, key: string): RetiredTomlSpelling | null;
|
|
1103
1164
|
/** The retired-key entry for `key` under `prefix`, or null when it is simply unknown. */
|
|
1104
1165
|
export declare function retiredConfigKey(prefix: string, key: string): RetiredConfigKey | null;
|
|
1166
|
+
/**
|
|
1167
|
+
* A spelling retired from the TOML surface only: the request body still
|
|
1168
|
+
* carries the key, so there is no request sentence to give.
|
|
1169
|
+
*/
|
|
1170
|
+
export interface RetiredTomlSpelling {
|
|
1171
|
+
/** What `config push` says about a file that still writes the key this way. */
|
|
1172
|
+
toml: string;
|
|
1173
|
+
}
|
|
1174
|
+
/**
|
|
1175
|
+
* Spellings retired from TOML while the key itself stays live on the wire,
|
|
1176
|
+
* keyed like `RETIRED_CONFIG_KEYS`. The request side never reads this map: a
|
|
1177
|
+
* body that sends one of these keys is a body the schema accepts.
|
|
1178
|
+
*/
|
|
1179
|
+
export declare const RETIRED_TOML_SPELLINGS: Record<string, Record<string, RetiredTomlSpelling>>;
|
|
1180
|
+
/**
|
|
1181
|
+
* The TOML guidance for `key` under `prefix`: a fully retired key's, else a
|
|
1182
|
+
* retired spelling's, else null when the key is simply unknown.
|
|
1183
|
+
*/
|
|
1184
|
+
export declare function retiredTomlKey(prefix: string, key: string): RetiredTomlSpelling | null;
|
|
1105
1185
|
/**
|
|
1106
1186
|
* The capability grammar for server functions — #3182 phase 1, rewritten by
|
|
1107
1187
|
* #3279 (project `server-functions` phase 3).
|
|
@@ -1124,7 +1204,10 @@ export declare function retiredConfigKey(prefix: string, key: string): RetiredCo
|
|
|
1124
1204
|
* `secret:<NAME>` credential least privilege — which secret VALUES may
|
|
1125
1205
|
* cross into the sandbox at all;
|
|
1126
1206
|
* the high-blast list {@link HIGH_BLAST_CAPABILITIES} — the operations
|
|
1127
|
-
* whose blast radius the intent keeps opt-in
|
|
1207
|
+
* whose blast radius the intent keeps opt-in;
|
|
1208
|
+
* the subject grants {@link SUBJECT_GRANT_CAPABILITIES} — naming another
|
|
1209
|
+
* member on a call about one user, in a run a plain
|
|
1210
|
+
* member invoked.
|
|
1128
1211
|
*
|
|
1129
1212
|
* Every other string a function used to declare is RETIRED, and the grammar
|
|
1130
1213
|
* says so by name: an author who still writes `database:orders/Order:read`
|
|
@@ -1177,15 +1260,44 @@ export declare const KEYED_GRANT_FAMILIES: readonly ["integration", "secret"];
|
|
|
1177
1260
|
* other — `databases:create` is not permission to delete a database.
|
|
1178
1261
|
*
|
|
1179
1262
|
* The database ROLE mutations are here because they hand out persistent
|
|
1180
|
-
* authority: a group grant assigns the manager role (D3279-003).
|
|
1263
|
+
* authority: a group grant assigns the manager role (D3279-003). A db3's sync
|
|
1264
|
+
* switch (`db3:setSync`, the intent's `db3-sync` grant) is here because
|
|
1265
|
+
* turning sync off suspends every grant on the db3 (#4799); a db3's transfer
|
|
1266
|
+
* and its owner-row change (`db3:transfer`, `db3:setOwnerRow`, the intent's
|
|
1267
|
+
* `db3-grant` grant) because they move who holds the db3 and its owner row
|
|
1268
|
+
* (#4800); its app access (`db3:setAppAccess`, the same grant's third string)
|
|
1269
|
+
* because it grants the db3 to every user of the app (#4801). App deletion
|
|
1181
1270
|
* and secret writes have no app-API route today; they are recorded, not gated,
|
|
1182
1271
|
* and the profile generator refuses to admit a future such route without a row
|
|
1183
1272
|
* here (`HIGH_BLAST_WATCH` in `scripts/lib/function-profile.mjs`).
|
|
1184
1273
|
*/
|
|
1185
|
-
export declare const HIGH_BLAST_CAPABILITIES: readonly ["databases:create", "databases:delete", "databases:transferOwnership", "databases:addManager", "databases:revokePermission", "databases:grantGroupPermission", "databases:revokeGroupPermission", "users:remove", "users:setRole", "blobBuckets:createBucket", "blobBuckets:deleteBucket"];
|
|
1186
|
-
/**
|
|
1187
|
-
|
|
1188
|
-
|
|
1274
|
+
export declare const HIGH_BLAST_CAPABILITIES: readonly ["databases:create", "databases:delete", "databases:transferOwnership", "databases:addManager", "databases:revokePermission", "databases:grantGroupPermission", "databases:revokeGroupPermission", "users:remove", "users:setRole", "blobBuckets:createBucket", "blobBuckets:deleteBucket", "db3:setSync", "db3:transfer", "db3:setOwnerRow", "db3:setAppAccess"];
|
|
1275
|
+
/**
|
|
1276
|
+
* The subject grants — #4909.
|
|
1277
|
+
*
|
|
1278
|
+
* A run a plain member invoked may name nobody but its caller on a call that
|
|
1279
|
+
* is about one user (#4142's subject rule): `SUBJECT_USER_FORBIDDEN`. A
|
|
1280
|
+
* function whose own code chooses that user — a class's teacher removing a
|
|
1281
|
+
* student and reading where else the student is enrolled — declares it here,
|
|
1282
|
+
* in a line a reviewer can find:
|
|
1283
|
+
*
|
|
1284
|
+
* `users:readAny` the user-subject READS may name another member
|
|
1285
|
+
* (memberships, a member's collections and documents,
|
|
1286
|
+
* their root document, inbox, devices, agent sessions);
|
|
1287
|
+
* `users:actAsAny` the calls that ACT as a member may name another member
|
|
1288
|
+
* (marking their notifications read, their devices, an
|
|
1289
|
+
* agent session as them, `ctx.db3` `asUser`, their
|
|
1290
|
+
* aliases).
|
|
1291
|
+
*
|
|
1292
|
+
* Each admits only its own kind. Neither changes a run with no caller, an
|
|
1293
|
+
* owner- or admin-invoked run, or a run an agent drives (refused either way),
|
|
1294
|
+
* and a nested child reads its own version's. They are not high-blast rows:
|
|
1295
|
+
* those are 1:1 with an operation id, and these name a rule, not an operation.
|
|
1296
|
+
*/
|
|
1297
|
+
export declare const SUBJECT_GRANT_CAPABILITIES: readonly ["users:readAny", "users:actAsAny"];
|
|
1298
|
+
/** The exact strings: the high-blast list and the subject grants. */
|
|
1299
|
+
export declare const EXACT_GRANT_STRINGS: readonly string[];
|
|
1300
|
+
export type GrantFamily = (typeof KEYED_GRANT_FAMILIES)[number] | "databases" | "users" | "blobBuckets" | "db3";
|
|
1189
1301
|
/**
|
|
1190
1302
|
* The retired FAMILIES (#3279), each with the reason it is gone.
|
|
1191
1303
|
*
|
|
@@ -1387,7 +1499,21 @@ export declare function validateKeyedGrantsAgainstTargets(grants: readonly Funct
|
|
|
1387
1499
|
* A version-1 manifest still parses: it records registrations only.
|
|
1388
1500
|
*/
|
|
1389
1501
|
export declare const FUNCTION_MANIFEST_SCHEMA_VERSION = 2;
|
|
1390
|
-
export declare const FUNCTION_MANIFEST_SCHEMA_VERSIONS: readonly [1, 2];
|
|
1502
|
+
export declare const FUNCTION_MANIFEST_SCHEMA_VERSIONS: readonly [1, 2, 3];
|
|
1503
|
+
/**
|
|
1504
|
+
* Version 3 (#4730) adds what a version's `authorize` admits: the
|
|
1505
|
+
* `authorize` block and the `writeFamilies` its handler reaches. Only a
|
|
1506
|
+
* FLAGGED build emits it — the manifest is inside the envelope hash, so a
|
|
1507
|
+
* universal bump would make every untouched bare-handler tree a new version
|
|
1508
|
+
* on its next push. A bare-handler tree keeps emitting version 2.
|
|
1509
|
+
*/
|
|
1510
|
+
export declare const FUNCTION_MANIFEST_AUTHORIZE_SCHEMA_VERSION = 3;
|
|
1511
|
+
/** The `auth.*` families an `authorize` can read, as the manifest names them. */
|
|
1512
|
+
export declare const AUTH_FAMILIES: readonly ["auth.user", "auth.trigger", "auth.memberships", "auth.collections", "auth.doc", "auth.db", "auth.configVar"];
|
|
1513
|
+
/** The SDK helpers that build an `authorize`, as the manifest names them. */
|
|
1514
|
+
export declare const AUTHORIZE_HELPERS: readonly ["allowAnyone", "allowCallers", "requireSignedIn", "requireRole", "requireMember", "requireCollectionRole", "requireDocumentOwner"];
|
|
1515
|
+
/** How many function keys an `allowCallers` block may list. */
|
|
1516
|
+
export declare const MAX_MANIFEST_CALLER_FUNCTIONS = 200;
|
|
1391
1517
|
/** Bounds, so a manifest cannot be a way to store an unbounded blob. */
|
|
1392
1518
|
export declare const MAX_MANIFEST_QUERIES = 200;
|
|
1393
1519
|
export declare const MAX_MANIFEST_NAME_LENGTH = 120;
|
|
@@ -1438,6 +1564,35 @@ export interface ManifestQuery {
|
|
|
1438
1564
|
/** True when a `$caller` binding scopes this registration. */
|
|
1439
1565
|
callerScoped: boolean;
|
|
1440
1566
|
}
|
|
1567
|
+
/** The doors an `allowCallers` admits, as collected (#4730). */
|
|
1568
|
+
export interface ManifestAuthorizeCallers {
|
|
1569
|
+
webhook: boolean;
|
|
1570
|
+
cron: boolean;
|
|
1571
|
+
manual: boolean;
|
|
1572
|
+
/** The parent function keys the `functions` arm names. */
|
|
1573
|
+
functions: string[];
|
|
1574
|
+
/** `true`, `false`, or `"rule"` when the arm is an authorize function. */
|
|
1575
|
+
agents: boolean | "rule";
|
|
1576
|
+
/** `"rule"` when a `users` arm is present, else false. */
|
|
1577
|
+
users: false | "rule";
|
|
1578
|
+
/**
|
|
1579
|
+
* #4803 — the db3 flush door. Optional: a manifest collected before the door
|
|
1580
|
+
* existed carries no key, and absent reads as closed.
|
|
1581
|
+
*/
|
|
1582
|
+
db3?: boolean;
|
|
1583
|
+
}
|
|
1584
|
+
/** What a version's `authorize` admits, as collected (#4730). */
|
|
1585
|
+
export interface ManifestAuthorize {
|
|
1586
|
+
present: true;
|
|
1587
|
+
/** `allowAnyone()`, or an `allowCallers` whose users or agents rule is one. */
|
|
1588
|
+
public: boolean;
|
|
1589
|
+
/** The SDK helper that built the exported `authorize`, or null when hand-written. */
|
|
1590
|
+
helper: string | null;
|
|
1591
|
+
/** The doors, when the helper is `allowCallers`; else null. */
|
|
1592
|
+
callers: ManifestAuthorizeCallers | null;
|
|
1593
|
+
/** The `auth.*` families the authorize code reaches, sorted. */
|
|
1594
|
+
families: string[];
|
|
1595
|
+
}
|
|
1441
1596
|
export interface FunctionManifest {
|
|
1442
1597
|
schemaVersion: number;
|
|
1443
1598
|
queries: ManifestQuery[];
|
|
@@ -1456,6 +1611,13 @@ export interface FunctionManifest {
|
|
|
1456
1611
|
* empty `models` list does not.
|
|
1457
1612
|
*/
|
|
1458
1613
|
dynamicModels: boolean;
|
|
1614
|
+
/**
|
|
1615
|
+
* Version 3 only: the families on which the scan met a write or send verb.
|
|
1616
|
+
* Absent on versions 1 and 2, which readers treat as `[]`.
|
|
1617
|
+
*/
|
|
1618
|
+
writeFamilies?: string[];
|
|
1619
|
+
/** Version 3 only: the `authorize` block. Absent on 1 and 2 (read as null). */
|
|
1620
|
+
authorize?: ManifestAuthorize;
|
|
1459
1621
|
}
|
|
1460
1622
|
export interface ParsedManifest {
|
|
1461
1623
|
ok: boolean;
|
|
@@ -1470,9 +1632,68 @@ export interface ParsedManifest {
|
|
|
1470
1632
|
* and whether the author meant any of it are questions this cannot answer.
|
|
1471
1633
|
*/
|
|
1472
1634
|
export declare function parseFunctionManifest(value: unknown): ParsedManifest;
|
|
1635
|
+
/**
|
|
1636
|
+
* Whether a top-level input schema is one the closed-schema default leaves
|
|
1637
|
+
* OPEN under its union exemption — #4730, criterion 9.
|
|
1638
|
+
*
|
|
1639
|
+
* The validator closes an object against the root's OWN `properties` only,
|
|
1640
|
+
* so a root whose `anyOf` or `oneOf` members declare `properties` of their
|
|
1641
|
+
* own would, closed, refuse the very keys its members declare. Such a root is
|
|
1642
|
+
* left open, and `config push` warns its author to say `additionalProperties`
|
|
1643
|
+
* explicitly. Shared by the server (`closedInputSchemaFor`) and the CLI's
|
|
1644
|
+
* push warning, so both sides read one rule.
|
|
1645
|
+
*/
|
|
1646
|
+
export declare function inputSchemaRootLeftOpen(schema: unknown): boolean;
|
|
1647
|
+
/**
|
|
1648
|
+
* The schema a flagged version validates against — #4730, criterion 9.
|
|
1649
|
+
*
|
|
1650
|
+
* A top-level object schema that sets no `additionalProperties` reads as
|
|
1651
|
+
* closed: a shallow copy with `additionalProperties: false`. Every other
|
|
1652
|
+
* schema is answered as it is — an explicit `additionalProperties`, a
|
|
1653
|
+
* non-object root, an empty `{}`, and a root left open under
|
|
1654
|
+
* {@link inputSchemaRootLeftOpen}. Nested objects are not touched. Applied at
|
|
1655
|
+
* run time and never written to the header.
|
|
1656
|
+
*/
|
|
1657
|
+
export declare function closedObjectSchema(schema: Record<string, unknown>): Record<string, unknown>;
|
|
1658
|
+
/**
|
|
1659
|
+
* `[function] public`, read from the authored TOML's `[function]` table —
|
|
1660
|
+
* #4730, criterion 13. Absent reads as false; anything but a boolean is
|
|
1661
|
+
* refused. Read by the CLI's preflight and by the server from the envelope's
|
|
1662
|
+
* TOML, never stored.
|
|
1663
|
+
*/
|
|
1664
|
+
export declare function declaredPublicOf(functionTable: unknown): {
|
|
1665
|
+
ok: true;
|
|
1666
|
+
value: boolean;
|
|
1667
|
+
} | {
|
|
1668
|
+
ok: false;
|
|
1669
|
+
error: string;
|
|
1670
|
+
};
|
|
1671
|
+
/**
|
|
1672
|
+
* What makes a version write-capable for the public-writer lint — #4730: a
|
|
1673
|
+
* mutation registration, a family the manifest records a write or send verb
|
|
1674
|
+
* on, or a declared `integration:<key>`, high-blast or subject-grant
|
|
1675
|
+
* capability (#4909: a function anyone may invoke that names any member is
|
|
1676
|
+
* the same hazard). One phrase per reason, for the refusal to quote.
|
|
1677
|
+
*/
|
|
1678
|
+
export declare function writeCapableReasons(manifest: FunctionManifest | null, capabilities: readonly string[]): string[];
|
|
1679
|
+
/**
|
|
1680
|
+
* The public-writer refusal — #4730, criterion 13: a version whose manifest
|
|
1681
|
+
* records `authorize.public` (an `allowAnyone()`, or an `allowCallers` arm
|
|
1682
|
+
* that is one) and that is write-capable needs `public = true` under
|
|
1683
|
+
* `[function]`. The sentence names the function, what makes it write-capable
|
|
1684
|
+
* and the fix; null when the push is fine. The CLI refuses at preflight and
|
|
1685
|
+
* the server at push, from this one rule.
|
|
1686
|
+
*/
|
|
1687
|
+
export declare function publicWriterRefusal(input: {
|
|
1688
|
+
functionKey: string;
|
|
1689
|
+
manifest: FunctionManifest | null;
|
|
1690
|
+
capabilities: readonly string[];
|
|
1691
|
+
declaredPublic: boolean;
|
|
1692
|
+
}): string | null;
|
|
1473
1693
|
/**
|
|
1474
1694
|
* The runtime keys a `functions/<key>.toml` no longer decides anything with —
|
|
1475
|
-
* #3482, project `server-functions` phase
|
|
1695
|
+
* #3482 retired them, and #3188 (project `server-functions` phase 5) refuses
|
|
1696
|
+
* them.
|
|
1476
1697
|
*
|
|
1477
1698
|
* The sponsor settled it on 2026-09-15 (the intent, "Mode vocabulary?",
|
|
1478
1699
|
* amended again): the config says NOTHING about how a function runs. A
|
|
@@ -1481,58 +1702,70 @@ export declare function parseFunctionManifest(value: unknown): ParsedManifest;
|
|
|
1481
1702
|
* and a function that must not run under one runtime tests for it in code with
|
|
1482
1703
|
* `assertRuntime`.
|
|
1483
1704
|
*
|
|
1484
|
-
* ──
|
|
1705
|
+
* ── Accepted through phase 4, refused from phase 5 ────────────────────────
|
|
1485
1706
|
*
|
|
1486
|
-
* Every tree pushed since #3454 that declares a cron trigger
|
|
1487
|
-
* `mode = …` ON THE ENTRY, because `cron-trigger-mode-required` demanded it
|
|
1488
|
-
*
|
|
1489
|
-
*
|
|
1490
|
-
*
|
|
1491
|
-
*
|
|
1707
|
+
* Every tree pushed since #3454 that declares a cron trigger carried
|
|
1708
|
+
* `mode = …` ON THE ENTRY, because `cron-trigger-mode-required` demanded it,
|
|
1709
|
+
* so #3482 accepted the keys and warned rather than refusing them one day
|
|
1710
|
+
* after the platform insisted on them. Phase 5 is the declared breaking phase
|
|
1711
|
+
* that ends the grace: `mode`, `durable` and a cron entry's `mode` are refused
|
|
1712
|
+
* with one sentence per key, naming the key, saying the caller picks the
|
|
1713
|
+
* runtime, and saying to delete the line. `config pull` still strips them
|
|
1714
|
+
* (`stripRetiredFunctionKeys` in the CLI reads this scanner), so a tree pulled
|
|
1715
|
+
* from a version pushed before the retirement pushes again unchanged.
|
|
1492
1716
|
*
|
|
1493
|
-
*
|
|
1494
|
-
*
|
|
1495
|
-
*
|
|
1496
|
-
* nothing left to validate it against, and refusing a bad value for a key
|
|
1497
|
-
* nobody reads would be a refusal about spelling alone.
|
|
1717
|
+
* One rule id, one handler: `refusedFunctionKeys` is declared `preflight` on
|
|
1718
|
+
* the `function` surface and the CLI's push preflight runs it before the first
|
|
1719
|
+
* request. The value is not validated — the key's PRESENCE is the refusal.
|
|
1498
1720
|
*
|
|
1499
|
-
* Pure: no models, no tenant context, no `env` (see `types.ts` §Purity).
|
|
1500
|
-
*
|
|
1501
|
-
*
|
|
1502
|
-
*
|
|
1721
|
+
* Pure: no models, no tenant context, no `env` (see `types.ts` §Purity). The
|
|
1722
|
+
* CLI preflight reaches this module through the vendored copy
|
|
1723
|
+
* (`cli/scripts/gen-config-surfaces.mjs`), so the sentence an author reads from
|
|
1724
|
+
* `config push` is the one this module writes.
|
|
1503
1725
|
*/
|
|
1504
1726
|
/** The two `[function]` keys that no longer say anything (#3482). */
|
|
1505
1727
|
export declare const RETIRED_FUNCTION_RUNTIME_KEYS: readonly ["mode", "durable"];
|
|
1506
1728
|
export type RetiredFunctionRuntimeKey = (typeof RETIRED_FUNCTION_RUNTIME_KEYS)[number];
|
|
1507
|
-
/**
|
|
1508
|
-
|
|
1729
|
+
/**
|
|
1730
|
+
* The rule ids this module owns, declared on the `function` surface (#3374's
|
|
1731
|
+
* anchor). One id covers the three spellings: they are one rule — the config
|
|
1732
|
+
* does not choose the runtime — met in three places.
|
|
1733
|
+
*/
|
|
1734
|
+
export declare const RETIRED_RUNTIME_KEY_RULE_IDS: readonly ["retired-runtime-key"];
|
|
1735
|
+
type RetiredRuntimeKeyRuleId = (typeof RETIRED_RUNTIME_KEY_RULE_IDS)[number];
|
|
1736
|
+
/** One retired key met in a `[function]` table. */
|
|
1737
|
+
export interface RetiredFunctionKey extends RuleRefusal<RetiredRuntimeKeyRuleId> {
|
|
1509
1738
|
/**
|
|
1510
1739
|
* Where it was: `mode`, `durable`, or `triggers.cron.<name>.mode`. Never
|
|
1511
1740
|
* rendered on its own — a reader that wants to branch reads this, and every
|
|
1512
1741
|
* printer reads `message`.
|
|
1513
1742
|
*/
|
|
1514
1743
|
path: string;
|
|
1515
|
-
/** The sentence the author is owed, with no file prefix (the caller adds it). */
|
|
1516
|
-
message: string;
|
|
1517
1744
|
}
|
|
1518
1745
|
/**
|
|
1519
|
-
*
|
|
1520
|
-
*
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
*
|
|
1525
|
-
*
|
|
1746
|
+
* The pre-phase-5 name of a met key, kept for the CLI's pull strip, which only
|
|
1747
|
+
* needs `path`. Every key met is refused now.
|
|
1748
|
+
*/
|
|
1749
|
+
export type IgnoredFunctionKey = RetiredFunctionKey;
|
|
1750
|
+
/**
|
|
1751
|
+
* Every retired runtime key the table carries, each as the refusal the author
|
|
1752
|
+
* reads. A cron entry's sentence says the extra thing its author needs to hear
|
|
1753
|
+
* — that the schedule no longer chooses, because every fire starts a task run.
|
|
1754
|
+
*/
|
|
1755
|
+
export declare function refusedFunctionKeys(functionTable: unknown): RetiredFunctionKey[];
|
|
1756
|
+
/**
|
|
1757
|
+
* The same refusals, rendered for one file — the shape `config push` and
|
|
1758
|
+
* `config diff` print.
|
|
1526
1759
|
*
|
|
1527
|
-
*
|
|
1528
|
-
*
|
|
1760
|
+
* `label` is what the reader can act on: `functions/<key>.toml` from the CLI,
|
|
1761
|
+
* and the function's key from the API, which has no file to name.
|
|
1529
1762
|
*/
|
|
1530
|
-
export declare function
|
|
1763
|
+
export declare function refusedFunctionKeyMessages(label: string, functionTable: unknown): string[];
|
|
1531
1764
|
/**
|
|
1532
1765
|
* The database types a `[function]` table's retired trigger block names —
|
|
1533
1766
|
* #3483.
|
|
1534
1767
|
*
|
|
1535
|
-
* Beside `
|
|
1768
|
+
* Beside `refusedFunctionKeys` because it answers the same question about the
|
|
1536
1769
|
* same table, for the same reader: `config pull` writes a version's AUTHORED
|
|
1537
1770
|
* bytes, and a version pushed before the removal carries the block. Without
|
|
1538
1771
|
* this the pulled tree would be refused on its next push — a tree an author
|
|
@@ -1564,14 +1797,6 @@ export declare function retiredDatabaseTriggerTypes(functionTable: unknown): str
|
|
|
1564
1797
|
* of them would call a block and the other would not cannot exist.
|
|
1565
1798
|
*/
|
|
1566
1799
|
export declare function hasRetiredDatabaseTriggerBlock(functionTable: unknown): boolean;
|
|
1567
|
-
/**
|
|
1568
|
-
* The same scan, rendered for one file — the shape `config push` and
|
|
1569
|
-
* `config diff` print and the admin route answers with.
|
|
1570
|
-
*
|
|
1571
|
-
* `label` is what the reader can act on: `functions/<key>.toml` from the CLI,
|
|
1572
|
-
* and the function's key from the API, which has no file to name.
|
|
1573
|
-
*/
|
|
1574
|
-
export declare function ignoredFunctionKeyWarnings(label: string, functionTable: unknown): string[];
|
|
1575
1800
|
/**
|
|
1576
1801
|
* The trigger blocks a function declares, derived from its authored TOML
|
|
1577
1802
|
* (#3181, project `server-functions`, criterion 4).
|
|
@@ -1633,6 +1858,12 @@ export declare function ignoredFunctionKeyWarnings(label: string, functionTable:
|
|
|
1633
1858
|
* as ignored by `ignoredFunctionKeys` in `function-retired-keys.ts`.
|
|
1634
1859
|
*/
|
|
1635
1860
|
/** A function's single webhook trigger, normalized. */
|
|
1861
|
+
/**
|
|
1862
|
+
* The db3 type-name prefix the platform reserves for its own types (#4882,
|
|
1863
|
+
* project `agent-sessions-db3`): no app pushes, attaches or watches a type
|
|
1864
|
+
* whose name starts with it.
|
|
1865
|
+
*/
|
|
1866
|
+
export declare const RESERVED_DB3_TYPE_PREFIX = "primitive:";
|
|
1636
1867
|
export interface WebhookTriggerDeclaration {
|
|
1637
1868
|
verificationScheme: string;
|
|
1638
1869
|
signingSecret?: string;
|
|
@@ -1643,7 +1874,28 @@ export interface WebhookTriggerDeclaration {
|
|
|
1643
1874
|
secretGracePeriodMs?: number;
|
|
1644
1875
|
/** `[function.triggers.webhook.verification]` — the row's `config`. */
|
|
1645
1876
|
verification?: Record<string, unknown>;
|
|
1877
|
+
/**
|
|
1878
|
+
* `[[function.triggers.webhook.handshakeRules]]` — a provider's setup
|
|
1879
|
+
* handshake (Slack `url_verification`, Discord PING, Microsoft Graph
|
|
1880
|
+
* `validationToken`, Meta `hub.challenge`), answered by the receiver after
|
|
1881
|
+
* verification and before the function runs (#3190).
|
|
1882
|
+
*/
|
|
1883
|
+
handshakeRules?: WebhookHandshakeRuleDeclaration[];
|
|
1884
|
+
/** `allowedIpCidrs` — the sender addresses a delivery may come from (#3190). */
|
|
1885
|
+
allowedIpCidrs?: string[];
|
|
1646
1886
|
}
|
|
1887
|
+
/** One handshake rule: a CEL `when` and the response it answers with. */
|
|
1888
|
+
export interface WebhookHandshakeRuleDeclaration {
|
|
1889
|
+
when: string;
|
|
1890
|
+
response: {
|
|
1891
|
+
status?: number;
|
|
1892
|
+
contentType?: string;
|
|
1893
|
+
body?: string;
|
|
1894
|
+
};
|
|
1895
|
+
}
|
|
1896
|
+
/** The most handshake rules and allowlist entries one webhook block may carry. */
|
|
1897
|
+
export declare const MAX_WEBHOOK_HANDSHAKE_RULES = 10;
|
|
1898
|
+
export declare const MAX_WEBHOOK_IP_CIDRS = 50;
|
|
1647
1899
|
/** One `[[function.triggers.cron]]` entry, normalized. */
|
|
1648
1900
|
export interface CronTriggerDeclaration {
|
|
1649
1901
|
name: string;
|
|
@@ -1652,9 +1904,20 @@ export interface CronTriggerDeclaration {
|
|
|
1652
1904
|
overlapPolicy?: string;
|
|
1653
1905
|
rootInput?: unknown;
|
|
1654
1906
|
}
|
|
1907
|
+
/** One `[[function.triggers.db3]]` entry, normalized (#4803). */
|
|
1908
|
+
export interface Db3TriggerDeclaration {
|
|
1909
|
+
/** The db3 type whose flushes start the function. */
|
|
1910
|
+
type: string;
|
|
1911
|
+
}
|
|
1655
1912
|
export interface TriggerDeclaration {
|
|
1656
1913
|
webhook: WebhookTriggerDeclaration | null;
|
|
1657
1914
|
cron: CronTriggerDeclaration[];
|
|
1915
|
+
/**
|
|
1916
|
+
* `[[function.triggers.db3]]` — present only when the file declares at least
|
|
1917
|
+
* one entry, so a file written before the kind existed stores exactly the
|
|
1918
|
+
* JSON it stored before (#4803).
|
|
1919
|
+
*/
|
|
1920
|
+
db3?: Db3TriggerDeclaration[];
|
|
1658
1921
|
}
|
|
1659
1922
|
export declare const EMPTY_TRIGGER_DECLARATION: TriggerDeclaration;
|
|
1660
1923
|
/**
|
|
@@ -1666,13 +1929,19 @@ export declare const EMPTY_TRIGGER_DECLARATION: TriggerDeclaration;
|
|
|
1666
1929
|
* remaining slots for the other 40+ objects the cap is sized for.
|
|
1667
1930
|
*/
|
|
1668
1931
|
export declare const MAX_CRON_TRIGGERS_PER_FUNCTION = 10;
|
|
1932
|
+
/**
|
|
1933
|
+
* The most db3 types one function may watch — the cron cap's per-object
|
|
1934
|
+
* reasoning (#4803). The per-app ceiling is `MAX_DB3_TRIGGERS_PER_APP`, checked
|
|
1935
|
+
* at the push boundary.
|
|
1936
|
+
*/
|
|
1937
|
+
export declare const MAX_DB3_TRIGGERS_PER_FUNCTION = 10;
|
|
1669
1938
|
/**
|
|
1670
1939
|
* The rule ids this module owns — one per refusal, declared on the `function`
|
|
1671
1940
|
* surface (#3374). The union below closes `refuseTrigger`'s id parameter, so a
|
|
1672
1941
|
* twenty-seventh refusal cannot compile without a twenty-seventh id, and that
|
|
1673
1942
|
* id fails `cli-unit-tests` until the surface declares it (#3373's anchor).
|
|
1674
1943
|
*/
|
|
1675
|
-
export declare const TRIGGER_RULE_IDS: readonly ["triggers-table", "trigger-kind", "database-trigger-removed", "webhook-trigger-single", "webhook-trigger-table", "webhook-trigger-keys", "webhook-trigger-scheme-required", "webhook-trigger-scheme-none", "webhook-trigger-number", "webhook-trigger-dedup-boolean", "webhook-trigger-verification-table", "cron-trigger-cap", "cron-trigger-entry", "cron-trigger-keys", "cron-trigger-name-required", "cron-trigger-name-charset", "cron-trigger-duplicate", "cron-trigger-expression-required", "cron-trigger-overlap-policy"];
|
|
1944
|
+
export declare const TRIGGER_RULE_IDS: readonly ["triggers-table", "trigger-kind", "database-trigger-removed", "webhook-trigger-single", "webhook-trigger-table", "webhook-trigger-keys", "webhook-trigger-scheme-required", "webhook-trigger-scheme-none", "webhook-trigger-number", "webhook-trigger-dedup-boolean", "webhook-trigger-verification-table", "webhook-trigger-handshake-rules", "webhook-trigger-ip-allowlist", "cron-trigger-cap", "cron-trigger-entry", "cron-trigger-keys", "cron-trigger-name-required", "cron-trigger-name-charset", "cron-trigger-duplicate", "cron-trigger-expression-required", "cron-trigger-overlap-policy", "db3-trigger-cap", "db3-trigger-entry", "db3-trigger-keys", "db3-trigger-type-required", "db3-trigger-type-reserved", "db3-trigger-duplicate"];
|
|
1676
1945
|
export type TriggerRuleId = (typeof TRIGGER_RULE_IDS)[number];
|
|
1677
1946
|
/**
|
|
1678
1947
|
* A broken trigger rule. `ruleId` names which one, for a reader that wants to
|
|
@@ -1713,6 +1982,18 @@ export declare function storedDatabaseTriggerTypes(stored: unknown): string[];
|
|
|
1713
1982
|
export declare function cronTriggerKeyFor(functionKey: string, name: string): string;
|
|
1714
1983
|
/** The entry name a `<functionKey>:<name>` trigger key carries. */
|
|
1715
1984
|
export declare function cronTriggerNameFrom(functionKey: string, triggerKey: string): string;
|
|
1985
|
+
/**
|
|
1986
|
+
* The `ServerFunctionTrigger.triggerKey` a db3 entry owns (#4803):
|
|
1987
|
+
* `<functionKey>:db3:<type>`. A cron name cannot hold `:`, so the key never
|
|
1988
|
+
* collides with a cron entry's `<functionKey>:<name>`.
|
|
1989
|
+
*/
|
|
1990
|
+
export declare function db3TriggerKeyFor(functionKey: string, type: string): string;
|
|
1991
|
+
/**
|
|
1992
|
+
* The type a db3 trigger key carries, or null when the key is not this
|
|
1993
|
+
* function's db3 key. Read by stripping the prefix, never by splitting: a type
|
|
1994
|
+
* name may hold `:` and `/`.
|
|
1995
|
+
*/
|
|
1996
|
+
export declare function db3TriggerTypeFrom(functionKey: string, triggerKey: string): string | null;
|
|
1716
1997
|
/**
|
|
1717
1998
|
* The `{{secrets.KEY}}` reference SHAPE, decided from the value alone.
|
|
1718
1999
|
*
|
|
@@ -1915,53 +2196,6 @@ export declare function validateSigningSecretDeclaration(input: {
|
|
|
1915
2196
|
verificationScheme: string;
|
|
1916
2197
|
signingSecret?: unknown;
|
|
1917
2198
|
}): SigningSecretRuleError | null;
|
|
1918
|
-
/**
|
|
1919
|
-
* The workflow rules two runners share (#3374, project `cli-server-rule-parity`
|
|
1920
|
-
* phase 2; intent §Success criteria 3).
|
|
1921
|
-
*
|
|
1922
|
-
* ── One predicate, two messages ──────────────────────────────────────────
|
|
1923
|
-
*
|
|
1924
|
-
* `runAs = "system"` beside a non-empty `accessRule` is dead config: a system
|
|
1925
|
-
* run can only be started by the system and never evaluates its access rule
|
|
1926
|
-
* (#1258, broadening #1172). The server refused it at save time
|
|
1927
|
-
* (`validateWorkflowIdentityConfig`) and the CLI refused it in the push
|
|
1928
|
-
* preflight (`validateWorkflowIdentity`), and the two carried the conjunction
|
|
1929
|
-
* byte-for-byte as separate copies kept in step by a comment. This module is
|
|
1930
|
-
* the one copy: it decides, and returns a STRUCTURED violation — the rule id
|
|
1931
|
-
* and the server's sentence — that each site renders in its own words. The
|
|
1932
|
-
* server pushes the sentence into its `string[]`; the CLI keeps its own hint,
|
|
1933
|
-
* which names the preflight remedy. Neither message changed.
|
|
1934
|
-
*
|
|
1935
|
-
* ── Why a `*-rules.ts` module ────────────────────────────────────────────
|
|
1936
|
-
*
|
|
1937
|
-
* The registry's unclaimed-export check (`findUnclaimedRuleModuleExports`)
|
|
1938
|
-
* keys on this name under `src/config-surface/`: every exported function here
|
|
1939
|
-
* is a rule, so one no surface declares fails `cli-unit-tests`. Shared
|
|
1940
|
-
* predicates that are not rules live elsewhere (`webhook-signing-secret.ts`).
|
|
1941
|
-
* The module is vendored into the CLI artifact like the rest of the
|
|
1942
|
-
* directory, which is what lets `workflow`'s declaration call the rule
|
|
1943
|
-
* `preflight`.
|
|
1944
|
-
*/
|
|
1945
|
-
/** The rule ids this module owns — the union type below anchors them (#3373). */
|
|
1946
|
-
export declare const WORKFLOW_RULE_IDS: readonly ["system-access-rule"];
|
|
1947
|
-
type WorkflowRuleId = (typeof WORKFLOW_RULE_IDS)[number];
|
|
1948
|
-
/** A violation of one of this module's rules, for a site to render. */
|
|
1949
|
-
export interface WorkflowRuleViolation extends RuleRefusal<WorkflowRuleId> {
|
|
1950
|
-
}
|
|
1951
|
-
/**
|
|
1952
|
-
* `runAs = "system"` with a non-empty string `accessRule`, or null.
|
|
1953
|
-
*
|
|
1954
|
-
* Exactly the conjunction both sites carried: a default, unset, empty or
|
|
1955
|
-
* whitespace-only rule is no rule, and a non-string one (`accessRule = false`)
|
|
1956
|
-
* is malformed input for another check to name, not dead config. The message
|
|
1957
|
-
* is the server's save-time sentence; the CLI renders its own hint from the
|
|
1958
|
-
* same answer.
|
|
1959
|
-
*/
|
|
1960
|
-
export declare function checkWorkflowSystemAccessRule(input: {
|
|
1961
|
-
runAs?: unknown;
|
|
1962
|
-
accessRule?: unknown;
|
|
1963
|
-
}): WorkflowRuleViolation | null;
|
|
1964
|
-
export declare const WORKFLOW_SURFACE: ConfigObjectSurface;
|
|
1965
2199
|
/**
|
|
1966
2200
|
* Cron-expression and timezone VALIDITY — the half of `src/cron-parser.ts`
|
|
1967
2201
|
* both runners need (#3376, project `cli-server-rule-parity` phase 4).
|
|
@@ -2073,15 +2307,6 @@ export declare function isValidTimezone(name: unknown): boolean;
|
|
|
2073
2307
|
* pins. So the grammar and the `Intl` probe live next door in
|
|
2074
2308
|
* `cron-expression.ts`, which is a shared-predicate module rather than a rules
|
|
2075
2309
|
* module, and this one only decides and renders.
|
|
2076
|
-
*
|
|
2077
|
-
* ── What is NOT shared ───────────────────────────────────────────────────
|
|
2078
|
-
*
|
|
2079
|
-
* The standalone cron routes ask the same two predicates and render their own
|
|
2080
|
-
* `Invalid cron expression: …` / `Invalid timezone: …`, with their own
|
|
2081
|
-
* defaulting (create reads an absent timezone as UTC, update does not). That
|
|
2082
|
-
* is intent assumption 2 in the form its own fallback describes, and the shape
|
|
2083
|
-
* `workflow-rules.ts` set in phase 2: one predicate, each site's message and
|
|
2084
|
-
* defaulting preserved. No refusal message changed anywhere.
|
|
2085
2310
|
*/
|
|
2086
2311
|
/** The rule ids this module owns — the union type below anchors them (#3373). */
|
|
2087
2312
|
export declare const CRON_TRIGGER_RULE_IDS: readonly ["cron-trigger-expression", "cron-trigger-timezone"];
|
|
@@ -2119,7 +2344,12 @@ export declare function checkCronTriggerEntry(entry: {
|
|
|
2119
2344
|
* all read this one copy, so a refusal at push and a refusal at execution
|
|
2120
2345
|
* cannot disagree.
|
|
2121
2346
|
*
|
|
2122
|
-
*
|
|
2347
|
+
* What this encodes is each provider's SPELLING, per model family — never
|
|
2348
|
+
* which values a particular model accepts (#4147). A value the spelling can
|
|
2349
|
+
* carry is sent, and a model that does not support it is refused by the
|
|
2350
|
+
* provider, whose answer the run reports. A per-model table of accepted levels
|
|
2351
|
+
* and floors went stale with each model release and refused or admitted the
|
|
2352
|
+
* wrong values.
|
|
2123
2353
|
*
|
|
2124
2354
|
* - OpenRouter takes a unified `reasoning` block: `{ effort }`,
|
|
2125
2355
|
* `{ max_tokens }`, or `{ enabled: false }` to decline it. `max_tokens` is an
|
|
@@ -2132,20 +2362,18 @@ export declare function checkCronTriggerEntry(entry: {
|
|
|
2132
2362
|
* is refused by OpenRouter and surfaces as a failed execution rather than a
|
|
2133
2363
|
* silent drop.
|
|
2134
2364
|
* - Gemini 3.x expresses thinking as a LEVEL
|
|
2135
|
-
* (`thinkingConfig.thinkingLevel`) and
|
|
2136
|
-
*
|
|
2137
|
-
*
|
|
2138
|
-
* a pointer at
|
|
2365
|
+
* (`thinkingConfig.thinkingLevel`), and the level spelling has no "off"
|
|
2366
|
+
* value, so `none` has nothing to translate to. `thinkingBudget` is accepted
|
|
2367
|
+
* there only for backward compatibility and is translated to a level rather
|
|
2368
|
+
* than honored as a bound, so a numeric budget is refused with a pointer at
|
|
2369
|
+
* `reasoningEffort`.
|
|
2139
2370
|
* - Gemini 2.5 expresses it as a numeric BUDGET
|
|
2140
|
-
* (`thinkingConfig.thinkingBudget`); `
|
|
2141
|
-
* Flash-Lite, while Pro has a floor of 128 and answers 400 for less.
|
|
2371
|
+
* (`thinkingConfig.thinkingBudget`); `none` is a budget of `0`.
|
|
2142
2372
|
* - Gemini 2.0 and earlier have no thinking control at all.
|
|
2143
2373
|
*/
|
|
2144
2374
|
/** The provider-neutral effort levels a config may state. */
|
|
2145
2375
|
export declare const REASONING_EFFORTS: readonly ["none", "minimal", "low", "medium", "high"];
|
|
2146
2376
|
export type ReasoningEffort = (typeof REASONING_EFFORTS)[number];
|
|
2147
|
-
/** The smallest budget Gemini 2.5 Pro accepts; it cannot stop thinking. */
|
|
2148
|
-
export declare const GEMINI_PRO_MIN_THINKING_BUDGET = 128;
|
|
2149
2377
|
export interface PromptReasoningInput {
|
|
2150
2378
|
provider?: string | null;
|
|
2151
2379
|
model?: string | null;
|
|
@@ -2177,14 +2405,12 @@ export type PromptReasoningResolution = {
|
|
|
2177
2405
|
/**
|
|
2178
2406
|
* How a Gemini model spells its thinking control.
|
|
2179
2407
|
*
|
|
2180
|
-
* `level` — Gemini 3.x, `thinkingLevel`,
|
|
2408
|
+
* `level` — Gemini 3.x, `thinkingLevel`, which has no "off" value.
|
|
2181
2409
|
* `budget` — Gemini 2.5, `thinkingBudget` in tokens.
|
|
2182
2410
|
* `none` — Gemini 2.0 and earlier, no control at all.
|
|
2183
2411
|
*/
|
|
2184
2412
|
export type GeminiReasoningFamily = "level" | "budget" | "none";
|
|
2185
2413
|
export declare function geminiReasoningFamily(model: string): GeminiReasoningFamily;
|
|
2186
|
-
/** Gemini Pro: the tier that cannot stop thinking in either family. */
|
|
2187
|
-
export declare function isGeminiProModel(model: string): boolean;
|
|
2188
2414
|
/** Is EITHER reasoning key stated on this config? */
|
|
2189
2415
|
export declare function hasPromptReasoning(input: PromptReasoningInput): boolean;
|
|
2190
2416
|
/**
|
|
@@ -2227,17 +2453,11 @@ export declare function resolvePromptReasoning(input: PromptReasoningInput): Pro
|
|
|
2227
2453
|
*/
|
|
2228
2454
|
export declare const PROMPT_KINDS: readonly ["chat", "decisions", "agent"];
|
|
2229
2455
|
export type PromptKind = (typeof PROMPT_KINDS)[number];
|
|
2230
|
-
/**
|
|
2231
|
-
* The nine chat settings that existed before `[configs.chat]` did. Only these
|
|
2232
|
-
* keep the deprecated FLAT spelling (#3642): a key added to the block later was
|
|
2233
|
-
* never written flat by any file, so it has none (the `questions` posture,
|
|
2234
|
-
* SO3626-013).
|
|
2235
|
-
*/
|
|
2236
|
-
export declare const LEGACY_FLAT_CHAT_KEYS: readonly ["systemPrompt", "userPromptTemplate", "temperature", "topP", "maxTokens", "outputFormat", "outputSchema", "reasoningEffort", "reasoningBudget"];
|
|
2237
2456
|
/**
|
|
2238
2457
|
* The settings that describe a CHAT COMPLETION and nothing else. They are
|
|
2239
|
-
* authored under `[configs.chat]
|
|
2240
|
-
* is
|
|
2458
|
+
* authored under `[configs.chat]` and only there: the pre-#3626 flat spelling
|
|
2459
|
+
* of the first nine is retired and refused at push (#3642,
|
|
2460
|
+
* `RETIRED_TOML_SPELLINGS`).
|
|
2241
2461
|
*
|
|
2242
2462
|
* #3801 — `strictOutput`, the opt-in that sends `[prompt].outputSchema` as a
|
|
2243
2463
|
* strict `json_schema` on OpenRouter (`prompt-strict-output.ts`). Not an agent
|
|
@@ -2367,28 +2587,6 @@ export type DecisionsRunQuestionsResolution = {
|
|
|
2367
2587
|
* Pure: the stored questions object is never mutated.
|
|
2368
2588
|
*/
|
|
2369
2589
|
export declare function resolveDecisionsRunQuestions(questions: Record<string, unknown>, runCriteria: unknown): DecisionsRunQuestionsResolution;
|
|
2370
|
-
/** What the hoist did to one `[[configs]]` entry. */
|
|
2371
|
-
export interface DeprecatedChatKeyHoist {
|
|
2372
|
-
/** A COPY of the entry with the flat chat keys moved under `chat`. */
|
|
2373
|
-
entry: Record<string, unknown>;
|
|
2374
|
-
/** The flat keys that were moved, sorted — what the warning names. */
|
|
2375
|
-
moved: string[];
|
|
2376
|
-
/** Keys set BOTH flat and under `[configs.chat]`; the caller refuses these. */
|
|
2377
|
-
conflicts: string[];
|
|
2378
|
-
}
|
|
2379
|
-
/**
|
|
2380
|
-
* Move the deprecated flat chat keys of one `[[configs]]` entry under `chat`
|
|
2381
|
-
* — #3626 §4, the blob-bucket `accessPolicy` precedent made reusable.
|
|
2382
|
-
*
|
|
2383
|
-
* Push keeps accepting the nine keys flat so no existing file breaks, and pull
|
|
2384
|
-
* rewrites them, so one pull-then-push migrates a file. A key present in BOTH
|
|
2385
|
-
* spellings is not merged: the grouped value is left standing and the key is
|
|
2386
|
-
* reported in `conflicts`, which the caller turns into a refusal naming the
|
|
2387
|
-
* entry. Nothing else in the entry is touched — `providerConfig` is
|
|
2388
|
-
* provider-keyed rather than chat-keyed (D3626-002) and `questions` has no flat
|
|
2389
|
-
* spelling at all (SO3626-013).
|
|
2390
|
-
*/
|
|
2391
|
-
export declare function hoistDeprecatedChatKeys(entry: unknown): DeprecatedChatKeyHoist;
|
|
2392
2590
|
/**
|
|
2393
2591
|
* Strict output for a chat config — issue #3801 (project `agents`, §D6).
|
|
2394
2592
|
*
|
|
@@ -2502,7 +2700,7 @@ export declare function resolvePromptStrictOutput(input: PromptStrictOutputInput
|
|
|
2502
2700
|
* Pure and dependency-free, like every module under `src/config-surface/`.
|
|
2503
2701
|
*/
|
|
2504
2702
|
/** The stable codes every agent agentRefusal this project adds carries. */
|
|
2505
|
-
export declare const AGENT_ERROR_CODES: readonly ["AGENT_DECLARATION_INVALID", "AGENT_TOOL_FUNCTION_MISSING", "AGENT_TOOL_FUNCTION_SCHEMA_MISSING", "AGENT_OUTPUT_SCHEMA_NOT_ALLOWED", "AGENT_CONFIG_KEY_NOT_ALLOWED", "AGENT_NOT_RUNNABLE", "AGENT_TEST_CASE_NOT_SUPPORTED", "AGENT_SCHEMA_NOT_TRANSLATABLE", "AGENT_MODEL_UNKNOWN", "AGENT_MODEL_CAPABILITY_MISSING", "AGENT_MODEL_CAPABILITIES_UNAVAILABLE", "AGENT_ROUND_NOT_AGENT", "AGENT_ROUND_INPUT_INVALID", "AGENT_TOOL_UNKNOWN", "AGENT_TOOL_ARGUMENTS_INVALID", "AGENT_ROUND_TRUNCATED", "AGENT_ROUND_EMPTY"];
|
|
2703
|
+
export declare const AGENT_ERROR_CODES: readonly ["AGENT_DECLARATION_INVALID", "AGENT_TOOL_FUNCTION_MISSING", "AGENT_TOOL_FUNCTION_SCHEMA_MISSING", "AGENT_OUTPUT_SCHEMA_NOT_ALLOWED", "AGENT_CONFIG_KEY_NOT_ALLOWED", "AGENT_NOT_RUNNABLE", "AGENT_TEST_CASE_NOT_SUPPORTED", "AGENT_SCHEMA_NOT_TRANSLATABLE", "AGENT_MODEL_UNKNOWN", "AGENT_MODEL_CAPABILITY_MISSING", "AGENT_MODEL_CAPABILITIES_UNAVAILABLE", "AGENT_ROUND_NOT_AGENT", "AGENT_ROUND_INPUT_INVALID", "AGENT_TOOL_UNKNOWN", "AGENT_TOOL_ARGUMENTS_INVALID", "AGENT_ROUND_TRUNCATED", "AGENT_ROUND_EMPTY", "AGENT_TEST_CASE_INVALID", "AGENT_PRESENTATION_REFERENCE_INVALID"];
|
|
2506
2704
|
export type AgentErrorCode = (typeof AGENT_ERROR_CODES)[number];
|
|
2507
2705
|
/** One agentRefusal: the code a client branches on, and the sentence a person reads. */
|
|
2508
2706
|
export interface AgentRefusal {
|
|
@@ -2510,16 +2708,20 @@ export interface AgentRefusal {
|
|
|
2510
2708
|
message: string;
|
|
2511
2709
|
}
|
|
2512
2710
|
/**
|
|
2513
|
-
* The platform maximums. An agent may lower `maxSteps
|
|
2514
|
-
* never raise them; the tool and event counts bound what
|
|
2515
|
-
* make every turn carry (principle 2).
|
|
2711
|
+
* The platform maximums. An agent may lower `maxSteps`, `waitLimitSeconds`
|
|
2712
|
+
* and `maxRowBytes`, never raise them; the tool and event counts bound what
|
|
2713
|
+
* one declaration can make every turn carry (principle 2).
|
|
2516
2714
|
*/
|
|
2517
2715
|
export declare const AGENT_LIMITS: {
|
|
2518
2716
|
readonly maxSteps: 25;
|
|
2519
2717
|
readonly waitLimitSeconds: 604800;
|
|
2718
|
+
/** The JSON bytes of one session-document row a turn writes from model or tool output. */
|
|
2719
|
+
readonly maxRowBytes: 262144;
|
|
2520
2720
|
readonly tools: 64;
|
|
2521
2721
|
readonly events: 64;
|
|
2522
2722
|
};
|
|
2723
|
+
/** The smallest row ceiling an agent may declare: room for a call's own columns. */
|
|
2724
|
+
export declare const AGENT_ROW_BYTES_FLOOR = 1024;
|
|
2523
2725
|
/**
|
|
2524
2726
|
* A tool or event name: the intersection of OpenRouter's and Gemini's
|
|
2525
2727
|
* function-name rules, so one declaration maps onto either provider.
|
|
@@ -2528,9 +2730,16 @@ export declare const AGENT_NAME: RegExp;
|
|
|
2528
2730
|
export declare const AGENT_ANSWERED_BY: readonly ["initiator", "participants"];
|
|
2529
2731
|
export declare const AGENT_TOOL_INVOKE: readonly ["request", "task"];
|
|
2530
2732
|
export declare const AGENT_TOOL_HISTORY_SCOPES: readonly ["session", "turn"];
|
|
2733
|
+
/**
|
|
2734
|
+
* Where a tool without a `function` runs: `client` is answered by a member's
|
|
2735
|
+
* client; `presentation` is data the model hands the client with its final
|
|
2736
|
+
* answer, which no client executes (#4549).
|
|
2737
|
+
*/
|
|
2738
|
+
export declare const AGENT_TOOL_RUNS: readonly ["client", "presentation"];
|
|
2531
2739
|
export type AgentAnsweredBy = (typeof AGENT_ANSWERED_BY)[number];
|
|
2532
2740
|
export type AgentToolInvoke = (typeof AGENT_TOOL_INVOKE)[number];
|
|
2533
2741
|
export type AgentToolHistoryScope = (typeof AGENT_TOOL_HISTORY_SCOPES)[number];
|
|
2742
|
+
export type AgentToolRuns = (typeof AGENT_TOOL_RUNS)[number];
|
|
2534
2743
|
/** A JSON Schema object, as the declaration holds one. */
|
|
2535
2744
|
export type AgentSchema = Record<string, unknown>;
|
|
2536
2745
|
/** One `[[prompt.agent.tools]]` entry, as authored. */
|
|
@@ -2540,13 +2749,28 @@ export interface AgentToolDeclaration {
|
|
|
2540
2749
|
/** A server tool: the function whose schemas are the tool's. */
|
|
2541
2750
|
function?: string;
|
|
2542
2751
|
invoke?: AgentToolInvoke;
|
|
2543
|
-
/**
|
|
2544
|
-
|
|
2752
|
+
/**
|
|
2753
|
+
* `client`: answered by a member's client, schemas in the TOML.
|
|
2754
|
+
* `presentation`: data the model hands the client with its final answer;
|
|
2755
|
+
* its call ends the turn and is never answered.
|
|
2756
|
+
*/
|
|
2757
|
+
runs?: AgentToolRuns;
|
|
2758
|
+
/**
|
|
2759
|
+
* A presentation's input properties whose integers name earlier calls of
|
|
2760
|
+
* the turn by the number the platform gave them (`callNumber`).
|
|
2761
|
+
*/
|
|
2762
|
+
references?: string[];
|
|
2545
2763
|
inputSchema?: AgentSchema;
|
|
2546
2764
|
outputSchema?: AgentSchema;
|
|
2547
2765
|
approval?: boolean;
|
|
2548
2766
|
statusText?: string;
|
|
2549
2767
|
historyScope?: AgentToolHistoryScope;
|
|
2768
|
+
/**
|
|
2769
|
+
* A call to this server tool ends the turn: once every call of its response
|
|
2770
|
+
* is final, the turn settles with no further model round. A presentation
|
|
2771
|
+
* always does.
|
|
2772
|
+
*/
|
|
2773
|
+
endsTurn?: boolean;
|
|
2550
2774
|
}
|
|
2551
2775
|
/** One `[[prompt.agent.events]]` entry. */
|
|
2552
2776
|
export interface AgentEventDeclaration {
|
|
@@ -2558,6 +2782,7 @@ export interface AgentDeclaration {
|
|
|
2558
2782
|
answeredBy?: AgentAnsweredBy;
|
|
2559
2783
|
maxSteps?: number;
|
|
2560
2784
|
waitLimitSeconds?: number;
|
|
2785
|
+
maxRowBytes?: number;
|
|
2561
2786
|
turnContext?: {
|
|
2562
2787
|
schema: AgentSchema;
|
|
2563
2788
|
function?: string;
|
|
@@ -2573,12 +2798,24 @@ export interface AgentDeclaration {
|
|
|
2573
2798
|
export type NormalizedAgentTool = AgentToolDeclaration & {
|
|
2574
2799
|
approval: boolean;
|
|
2575
2800
|
historyScope: AgentToolHistoryScope;
|
|
2801
|
+
endsTurn: boolean;
|
|
2576
2802
|
};
|
|
2803
|
+
/**
|
|
2804
|
+
* The result the platform records for a presentation call: the call is final
|
|
2805
|
+
* when its response is committed, and later rounds read this as its tool
|
|
2806
|
+
* result.
|
|
2807
|
+
*/
|
|
2808
|
+
export declare const AGENT_TERMINAL_CALL_OUTPUT: {
|
|
2809
|
+
delivered: true;
|
|
2810
|
+
};
|
|
2811
|
+
/** The schema of `AGENT_TERMINAL_CALL_OUTPUT`, the result a presentation call is recorded with. */
|
|
2812
|
+
export declare const AGENT_TERMINAL_CALL_OUTPUT_SCHEMA: AgentSchema;
|
|
2577
2813
|
/** The declaration with every default applied — what readers consume. */
|
|
2578
2814
|
export interface NormalizedAgentDeclaration {
|
|
2579
2815
|
answeredBy: AgentAnsweredBy;
|
|
2580
2816
|
maxSteps: number;
|
|
2581
2817
|
waitLimitSeconds: number;
|
|
2818
|
+
maxRowBytes: number;
|
|
2582
2819
|
turnContext: {
|
|
2583
2820
|
schema: AgentSchema;
|
|
2584
2821
|
function?: string;
|
|
@@ -2636,6 +2873,18 @@ export type AgentDeclarationResolution = {
|
|
|
2636
2873
|
* the block the author wrote.
|
|
2637
2874
|
*/
|
|
2638
2875
|
export declare const AGENT_BLOCK_LABEL = "[prompt.agent]";
|
|
2876
|
+
/**
|
|
2877
|
+
* One place a declaration names a server function: the key, the tool's name
|
|
2878
|
+
* for a tool, the path that makes the reference, and whether the reference
|
|
2879
|
+
* needs the function's schemas (a tool's are its function's; a turn-context or
|
|
2880
|
+
* history hook only needs the function to exist).
|
|
2881
|
+
*/
|
|
2882
|
+
export interface AgentFunctionReference {
|
|
2883
|
+
key: string;
|
|
2884
|
+
tool?: string;
|
|
2885
|
+
path: string;
|
|
2886
|
+
needsSchemas: boolean;
|
|
2887
|
+
}
|
|
2639
2888
|
/**
|
|
2640
2889
|
* The function keys a declaration references (tools, turn context, history),
|
|
2641
2890
|
* each once, in declaration order. What a caller resolves into the
|
|
@@ -2653,6 +2902,39 @@ export declare const AGENT_BLOCK_LABEL = "[prompt.agent]";
|
|
|
2653
2902
|
*/
|
|
2654
2903
|
export declare function parseAgentDeclarationBlock(agent: unknown): Record<string, unknown> | undefined;
|
|
2655
2904
|
export declare function agentDeclarationFunctionKeys(agent: unknown): string[];
|
|
2905
|
+
/**
|
|
2906
|
+
* Every function reference of a declaration (tools, turn context, history), in
|
|
2907
|
+
* declaration order, with the path that makes it. `[]` for a block that is
|
|
2908
|
+
* absent or does not parse. A declaration written as one JSON string is read
|
|
2909
|
+
* as the object it encodes.
|
|
2910
|
+
*/
|
|
2911
|
+
export declare function agentDeclarationFunctionReferences(agent: unknown): AgentFunctionReference[];
|
|
2912
|
+
/**
|
|
2913
|
+
* What a reference lacks: the function itself, or one of a tool's two schemas.
|
|
2914
|
+
* One deficit per (reference, kind), so a comparison of two states can tell a
|
|
2915
|
+
* schema restored from a schema removed without reading message text.
|
|
2916
|
+
*/
|
|
2917
|
+
export type AgentFunctionDeficitKind = "absent" | "inputSchemaMissing" | "outputSchemaMissing";
|
|
2918
|
+
/** One thing a function reference of a declaration lacks. */
|
|
2919
|
+
export interface AgentFunctionDeficit {
|
|
2920
|
+
path: string;
|
|
2921
|
+
tool?: string;
|
|
2922
|
+
key: string;
|
|
2923
|
+
kind: AgentFunctionDeficitKind;
|
|
2924
|
+
}
|
|
2925
|
+
/**
|
|
2926
|
+
* Every deficit of a declaration's function references against `functions`:
|
|
2927
|
+
* an absent function (`null`, or missing from the map), and for a tool a
|
|
2928
|
+
* missing `inputSchema` and a missing `outputSchema`, each on its own. `[]` for
|
|
2929
|
+
* a block that is absent or does not parse.
|
|
2930
|
+
*/
|
|
2931
|
+
export declare function agentFunctionDeficits(agent: unknown, functions: AgentFunctionFacts): AgentFunctionDeficit[];
|
|
2932
|
+
/**
|
|
2933
|
+
* The refusals for a list of deficits: one `AGENT_TOOL_FUNCTION_MISSING` per
|
|
2934
|
+
* absent reference, and one `AGENT_TOOL_FUNCTION_SCHEMA_MISSING` per tool
|
|
2935
|
+
* reference naming every schema it lacks.
|
|
2936
|
+
*/
|
|
2937
|
+
export declare function agentFunctionDeficitRefusals(deficits: readonly AgentFunctionDeficit[]): AgentRefusal[];
|
|
2656
2938
|
/**
|
|
2657
2939
|
* The one rule: is this `[prompt.agent]` declaration (with the prompt's kind
|
|
2658
2940
|
* and `outputSchema`) something the platform can run?
|
|
@@ -2676,16 +2958,37 @@ export declare function agentNotRunnableRefusal(promptKey?: string): AgentRefusa
|
|
|
2676
2958
|
*/
|
|
2677
2959
|
export declare function agentRoundNotAgentRefusal(promptKey: string): AgentRefusal;
|
|
2678
2960
|
/**
|
|
2679
|
-
* The refusal of a prompt test case that
|
|
2680
|
-
*
|
|
2681
|
-
*
|
|
2682
|
-
*
|
|
2961
|
+
* The refusal of a prompt test case that names an agent as its judge (§D1: an
|
|
2962
|
+
* evaluator runs single-shot, which an agent never does). A case written ON an
|
|
2963
|
+
* agent is a single-round test since #4262 (`agent-test-case.ts`), so
|
|
2964
|
+
* `evaluator` is the one role left.
|
|
2965
|
+
*/
|
|
2966
|
+
export declare function agentTestCaseRefusal(promptKey: string, _role?: "evaluator"): AgentRefusal;
|
|
2967
|
+
/** An earlier call of the turn, as a presentation's references are checked against it. */
|
|
2968
|
+
export interface AgentReferencedCall {
|
|
2969
|
+
/** The number the platform gave the call in its turn (1 for the turn's first). */
|
|
2970
|
+
callNumber: number;
|
|
2971
|
+
toolName: string;
|
|
2972
|
+
/** The call's row state; only `output-available` may be referenced. */
|
|
2973
|
+
state: string;
|
|
2974
|
+
}
|
|
2975
|
+
/**
|
|
2976
|
+
* The refusal of a presentation call whose `references` name a number that
|
|
2977
|
+
* is not an earlier call of the turn with a result — a refused call, a number
|
|
2978
|
+
* the turn never gave, or a call of the same response — or `null`. `earlier`
|
|
2979
|
+
* is the turn's calls committed before this call's response. The message
|
|
2980
|
+
* lists the offending values by property and the numbers that may be
|
|
2981
|
+
* referenced, with their tools, so the model can correct itself next round.
|
|
2683
2982
|
*/
|
|
2684
|
-
export declare function
|
|
2983
|
+
export declare function presentationReferenceRefusal(tool: {
|
|
2984
|
+
name: string;
|
|
2985
|
+
references?: readonly string[];
|
|
2986
|
+
}, args: unknown, earlier: readonly AgentReferencedCall[]): AgentRefusal | null;
|
|
2685
2987
|
/**
|
|
2686
2988
|
* The declaration with every default applied: `answeredBy = "initiator"`, the
|
|
2687
2989
|
* platform maximums for the limits, and per tool `invoke = "request"` (server
|
|
2688
|
-
* tools), `approval = false
|
|
2990
|
+
* tools), `approval = false`, `historyScope = "session"` and `endsTurn = false`
|
|
2991
|
+
* — `endsTurn = true` for a presentation, whose call always ends the turn.
|
|
2689
2992
|
*
|
|
2690
2993
|
* The ONLY accessor for defaults — the stored value never carries them
|
|
2691
2994
|
* (DSO-3798-001). Takes a value `resolveAgentDeclaration` accepted (or `null`)
|
|
@@ -2721,7 +3024,7 @@ export declare function normalizeAgentDeclaration(declaration: AgentDeclaration
|
|
|
2721
3024
|
* the structured error the model sees, and a model following `properties` is
|
|
2722
3025
|
* never told it may add keys. Refusing it instead would put the platform's own
|
|
2723
3026
|
* closed-object marker — `additionalProperties: false` is how
|
|
2724
|
-
* `src/
|
|
3027
|
+
* `src/function-runs/schema-descriptor.ts` spells a closed object — outside
|
|
2725
3028
|
* Gemini's reach.
|
|
2726
3029
|
*
|
|
2727
3030
|
* The TRANSLATED schema is what the provider is sent; the ORIGINAL is what the
|
|
@@ -2813,10 +3116,214 @@ export interface AgentSchemaTranslationInput {
|
|
|
2813
3116
|
* A declaration with no tools and no events reads no function schema at all.
|
|
2814
3117
|
*/
|
|
2815
3118
|
export declare function agentSchemaTranslationRefusals(input: AgentSchemaTranslationInput): AgentRefusal[];
|
|
3119
|
+
/**
|
|
3120
|
+
* One schema an agent's model reads that a provider of a non-archived config
|
|
3121
|
+
* cannot carry — or, for a server tool, a function schema that does not parse.
|
|
3122
|
+
* The structured half of `agentSchemaTranslationRefusals`: its identity is
|
|
3123
|
+
* (`subject`, `which`, `provider`, `schemaPath`, `keyword`), or (`subject`,
|
|
3124
|
+
* `which`, `unparsable`), so two states can be compared without reading
|
|
3125
|
+
* message text.
|
|
3126
|
+
*/
|
|
3127
|
+
export type AgentSchemaDeficit = {
|
|
3128
|
+
/** `tool "propose"`, `tool "lookup" (function "ledger")` or `event "applied"`. */
|
|
3129
|
+
subject: string;
|
|
3130
|
+
/** `inputSchema`, `outputSchema` or `schema`. */
|
|
3131
|
+
which: string;
|
|
3132
|
+
provider: string;
|
|
3133
|
+
/** The non-archived configs on `provider`. */
|
|
3134
|
+
configNames: string[];
|
|
3135
|
+
/** The dotted path from the schema root; `""` is the root. */
|
|
3136
|
+
schemaPath: string;
|
|
3137
|
+
keyword: string;
|
|
3138
|
+
reason: string;
|
|
3139
|
+
} | {
|
|
3140
|
+
subject: string;
|
|
3141
|
+
which: string;
|
|
3142
|
+
/** The function whose stored schema does not parse. */
|
|
3143
|
+
unparsable: string;
|
|
3144
|
+
};
|
|
3145
|
+
/**
|
|
3146
|
+
* Every deficit `agentSchemaTranslationRefusals` reports, in the same order,
|
|
3147
|
+
* before it is rendered. One per (schema, path, keyword, provider), and one
|
|
3148
|
+
* per server-tool schema that does not parse.
|
|
3149
|
+
*/
|
|
3150
|
+
export declare function agentSchemaTranslationDeficits(input: AgentSchemaTranslationInput): AgentSchemaDeficit[];
|
|
3151
|
+
/** The `AGENT_SCHEMA_NOT_TRANSLATABLE` refusal one deficit renders as. */
|
|
3152
|
+
export declare function agentSchemaDeficitRefusal(deficit: AgentSchemaDeficit): AgentRefusal;
|
|
3153
|
+
/**
|
|
3154
|
+
* A change to a server function that an agent uses — issue #4441.
|
|
3155
|
+
*
|
|
3156
|
+
* An agent names server functions as its tools, its turn-context hook and its
|
|
3157
|
+
* history hook. The agent's own writes are checked against those functions
|
|
3158
|
+
* (`resolveAgentDeclaration`, `agentSchemaTranslationRefusals`), but a change
|
|
3159
|
+
* to the FUNCTION — archiving it, deleting it, changing its schemas — used to
|
|
3160
|
+
* be accepted and fail at the agent's next turn. This module is the rule for
|
|
3161
|
+
* that change: given one agent's declaration and configs, and the functions it
|
|
3162
|
+
* names before and after the change, which refusals does the change introduce?
|
|
3163
|
+
*
|
|
3164
|
+
* The admin function routes refuse such a change with `FUNCTION_USED_BY_AGENT`,
|
|
3165
|
+
* and `config push`'s preflight runs the same rule through the vendored
|
|
3166
|
+
* artifact, so the two cannot disagree.
|
|
3167
|
+
*
|
|
3168
|
+
* ONLY WHAT THE CHANGE INTRODUCES. Both states are reduced to structured
|
|
3169
|
+
* deficits (`agentFunctionDeficits`, `agentSchemaTranslationDeficits`) and the
|
|
3170
|
+
* ones already present before the change are dropped. An agent that is broken
|
|
3171
|
+
* for another reason does not block an unrelated change, and a partial repair
|
|
3172
|
+
* — restoring one of two missing schemas, removing one of two `$ref`s — is
|
|
3173
|
+
* accepted. Messages are rendered only afterwards, by the sibling rules' own
|
|
3174
|
+
* builders, so they read exactly as an agent write's refusals do.
|
|
3175
|
+
*
|
|
3176
|
+
* Pure and dependency-free, like every module under `src/config-surface/`.
|
|
3177
|
+
*/
|
|
3178
|
+
/** The code a function route answers when an agent cannot take the change. */
|
|
3179
|
+
export declare const FUNCTION_USED_BY_AGENT = "FUNCTION_USED_BY_AGENT";
|
|
3180
|
+
/** One agent, and the functions it names before and after a change to them. */
|
|
3181
|
+
export interface AgentFunctionChangeInput {
|
|
3182
|
+
/** `[prompt.agent]` as stored: a table, or one JSON string encoding one. */
|
|
3183
|
+
declaration: unknown;
|
|
3184
|
+
/** Every config of the agent's prompt. Archived ones are skipped. */
|
|
3185
|
+
configs: ReadonlyArray<AgentSchemaConfigFact>;
|
|
3186
|
+
/** What the app holds for each function the declaration names, now. */
|
|
3187
|
+
before: AgentFunctionFacts;
|
|
3188
|
+
/** The same, as the change would leave it. */
|
|
3189
|
+
after: AgentFunctionFacts;
|
|
3190
|
+
}
|
|
3191
|
+
/**
|
|
3192
|
+
* Every refusal the change introduces for this agent: a reference whose
|
|
3193
|
+
* function goes away (`AGENT_TOOL_FUNCTION_MISSING`), a tool schema that goes
|
|
3194
|
+
* away (`AGENT_TOOL_FUNCTION_SCHEMA_MISSING`), and a schema a non-archived
|
|
3195
|
+
* config's provider cannot carry where the previous one could
|
|
3196
|
+
* (`AGENT_SCHEMA_NOT_TRANSLATABLE`). `[]` when the agent can take the change,
|
|
3197
|
+
* and for a declaration that does not parse (it names nothing).
|
|
3198
|
+
*/
|
|
3199
|
+
export declare function agentFunctionChangeRefusals(input: AgentFunctionChangeInput): AgentRefusal[];
|
|
3200
|
+
/**
|
|
3201
|
+
* How an agent uses one function: each tool's name (or its path when the tool
|
|
3202
|
+
* has none), and `turnContext.function` / `history.function` for a hook, in
|
|
3203
|
+
* declaration order. `[]` when the declaration does not name the function.
|
|
3204
|
+
*/
|
|
3205
|
+
export declare function agentFunctionUses(declaration: unknown, functionKey: string): string[];
|
|
3206
|
+
/** What a function route was asked to do. */
|
|
3207
|
+
export type FunctionChangeKind = "archive" | "delete" | "schema";
|
|
3208
|
+
/** One agent a function change would break. */
|
|
3209
|
+
export interface FunctionUsedByAgent {
|
|
3210
|
+
promptKey: string;
|
|
3211
|
+
/** `agentFunctionUses` of the changed function. */
|
|
3212
|
+
tools: string[];
|
|
3213
|
+
/** The refusals the change introduces for this agent. */
|
|
3214
|
+
refusals: ReadonlyArray<AgentRefusal>;
|
|
3215
|
+
}
|
|
3216
|
+
/**
|
|
3217
|
+
* The sentence a function route refuses with: the function, then one sentence
|
|
3218
|
+
* per agent naming its key and each use, then the remedy. A schema change also
|
|
3219
|
+
* carries each agent's refusals, since the remedy depends on which schema broke.
|
|
3220
|
+
*/
|
|
3221
|
+
export declare function functionUsedByAgentMessage(functionKey: string, change: FunctionChangeKind, agents: ReadonlyArray<FunctionUsedByAgent>): string;
|
|
3222
|
+
/**
|
|
3223
|
+
* What an agent test case may say — issue #4262 (single-round prompt tests
|
|
3224
|
+
* from a seeded history; design-docs/agents.md §D1).
|
|
3225
|
+
*
|
|
3226
|
+
* A test case on an agent prompt carries one `[test.agent]` block: a seeded
|
|
3227
|
+
* `history` (JSON text), the round's turn `context`, `timezone` and `locale`,
|
|
3228
|
+
* and two assertions on the round's calls (`expectedToolCall`,
|
|
3229
|
+
* `expectedNoToolCall`). On the wire and in storage those are six flat
|
|
3230
|
+
* `BlockTestCase` fields, `agentHistory` … `agentExpectedNoToolCall`.
|
|
3231
|
+
*
|
|
3232
|
+
* This module is the whole FILE-DECIDABLE rule for them: the history's shape,
|
|
3233
|
+
* its turns, its call and result pairing, where its events sit, the
|
|
3234
|
+
* assertions' shapes, and — when the caller passes the agent's declaration —
|
|
3235
|
+
* that the event kinds and the asserted tool are declared. The admin test-case
|
|
3236
|
+
* routes call it, and so does the CLI's push preflight through the vendored
|
|
3237
|
+
* artifact, so a refusal at push and a refusal at the route cannot disagree.
|
|
3238
|
+
* What needs app state or a schema validator (the input, context and event
|
|
3239
|
+
* schemas, the send route's zone and tag rules) is `agent-test-round.ts`'s.
|
|
3240
|
+
*
|
|
3241
|
+
* Every refusal carries `AGENT_TEST_CASE_INVALID` and the caller gets every
|
|
3242
|
+
* offending item at once, as the declaration resolver does.
|
|
3243
|
+
*
|
|
3244
|
+
* Pure and dependency-free apart from the agent declaration's types, like
|
|
3245
|
+
* every module under `src/config-surface/`.
|
|
3246
|
+
*/
|
|
3247
|
+
/** The six wire and stored fields, in the order the surface declares them. */
|
|
3248
|
+
export declare const AGENT_TEST_CASE_FIELDS: readonly ["agentHistory", "agentContext", "agentTimezone", "agentLocale", "agentExpectedToolCall", "agentExpectedNoToolCall"];
|
|
3249
|
+
export type AgentTestCaseField = (typeof AGENT_TEST_CASE_FIELDS)[number];
|
|
3250
|
+
/** One call of a seeded assistant entry. */
|
|
3251
|
+
export interface AgentTestCall {
|
|
3252
|
+
callId: string;
|
|
3253
|
+
name: string;
|
|
3254
|
+
arguments: unknown;
|
|
3255
|
+
}
|
|
3256
|
+
/** One entry of a seeded history, oldest first. */
|
|
3257
|
+
export type AgentTestHistoryEntry = {
|
|
3258
|
+
role: "user";
|
|
3259
|
+
text: string;
|
|
3260
|
+
} | {
|
|
3261
|
+
role: "assistant";
|
|
3262
|
+
text?: string;
|
|
3263
|
+
reasoning?: string;
|
|
3264
|
+
calls?: AgentTestCall[];
|
|
3265
|
+
} | {
|
|
3266
|
+
role: "tool";
|
|
3267
|
+
callId: string;
|
|
3268
|
+
output: unknown;
|
|
3269
|
+
} | {
|
|
3270
|
+
role: "tool";
|
|
3271
|
+
callId: string;
|
|
3272
|
+
error: {
|
|
3273
|
+
code: string;
|
|
3274
|
+
message: string;
|
|
3275
|
+
};
|
|
3276
|
+
} | {
|
|
3277
|
+
role: "event";
|
|
3278
|
+
kind: string;
|
|
3279
|
+
refersTo?: string;
|
|
3280
|
+
data: unknown;
|
|
3281
|
+
};
|
|
3282
|
+
/** The `[test.agent]` block, read. */
|
|
3283
|
+
export interface AgentTestCase {
|
|
3284
|
+
history: AgentTestHistoryEntry[];
|
|
3285
|
+
context: Record<string, unknown> | null;
|
|
3286
|
+
timezone: string | null;
|
|
3287
|
+
locale: string | null;
|
|
3288
|
+
expectedToolCall: {
|
|
3289
|
+
name: string;
|
|
3290
|
+
arguments?: unknown;
|
|
3291
|
+
} | null;
|
|
3292
|
+
/** `false` when unset: no assertion. */
|
|
3293
|
+
expectedNoToolCall: boolean;
|
|
3294
|
+
}
|
|
3295
|
+
export interface AgentTestCaseInput {
|
|
3296
|
+
/**
|
|
3297
|
+
* The prompt's kind; unset means `chat`. The admin routes pass a block type
|
|
3298
|
+
* (`workflow`, `script`, `integration`) for a case that is not a prompt's.
|
|
3299
|
+
*/
|
|
3300
|
+
kind?: unknown;
|
|
3301
|
+
/**
|
|
3302
|
+
* The agent's `[prompt.agent]` (a table, one JSON string, or `null` for an
|
|
3303
|
+
* agent that declares none). Omitted means "not known here": the declared
|
|
3304
|
+
* names are not checked (the CLI preflight reads the sidecar alone).
|
|
3305
|
+
*/
|
|
3306
|
+
declaration?: unknown;
|
|
3307
|
+
/** The case's fields, in wire spelling (`agentHistory`, …, `expectedJsonSubset`). */
|
|
3308
|
+
fields: Record<string, unknown>;
|
|
3309
|
+
}
|
|
3310
|
+
export type AgentTestCaseResolution = {
|
|
3311
|
+
ok: true;
|
|
3312
|
+
testCase: AgentTestCase | null;
|
|
3313
|
+
} | {
|
|
3314
|
+
ok: false;
|
|
3315
|
+
refusals: AgentRefusal[];
|
|
3316
|
+
};
|
|
3317
|
+
/**
|
|
3318
|
+
* The one rule: is this case's agent block something a round can be built
|
|
3319
|
+
* from? `{ ok: true, testCase }` carries it read (`null` on a case whose
|
|
3320
|
+
* prompt is not an agent). On a chat or decisions case, every agent key
|
|
3321
|
+
* holding a non-null value is refused by name; an explicit `null` is unset on
|
|
3322
|
+
* any case, which is how a full-state update clears one.
|
|
3323
|
+
*/
|
|
3324
|
+
export declare function resolveAgentTestCase(input: AgentTestCaseInput): AgentTestCaseResolution;
|
|
2816
3325
|
export declare const PROMPT_SURFACE: ConfigObjectSurface;
|
|
2817
3326
|
export declare const INTEGRATION_SURFACE: ConfigObjectSurface;
|
|
2818
|
-
export declare const WEBHOOK_SURFACE: ConfigObjectSurface;
|
|
2819
|
-
export declare const CRON_TRIGGER_SURFACE: ConfigObjectSurface;
|
|
2820
3327
|
export declare const BLOB_BUCKET_SURFACE: ConfigObjectSurface;
|
|
2821
3328
|
/**
|
|
2822
3329
|
* The `email-template` configuration object's definition (issue #2644, phase 2).
|
|
@@ -2858,28 +3365,23 @@ export declare function isRetiredEmailType(emailType: string): emailType is Reti
|
|
|
2858
3365
|
export declare function retiredEmailTypeGuidance(emailType: string): string;
|
|
2859
3366
|
export declare const EMAIL_TEMPLATE_SURFACE: ConfigObjectSurface;
|
|
2860
3367
|
export declare const DATABASE_TYPE_SURFACE: ConfigObjectSurface;
|
|
3368
|
+
export declare const DB3_TYPE_SURFACE: ConfigObjectSurface;
|
|
2861
3369
|
export declare const RULE_SET_SURFACE: ConfigObjectSurface;
|
|
2862
|
-
export declare const GROUP_TYPE_CONFIG_SURFACE: ConfigObjectSurface;
|
|
2863
|
-
export declare const COLLECTION_TYPE_CONFIG_SURFACE: ConfigObjectSurface;
|
|
2864
3370
|
export declare const METADATA_CATEGORY_CONFIG_SURFACE: ConfigObjectSurface;
|
|
3371
|
+
export declare const SERVER_FUNCTION_SURFACE: ConfigObjectSurface;
|
|
2865
3372
|
/**
|
|
2866
|
-
* The
|
|
2867
|
-
*
|
|
2868
|
-
*
|
|
2869
|
-
* `transforms/<name>.rhai`, a Rhai source file, and its whole authored surface
|
|
2870
|
-
* is the script body. `config pull` writes the active `ScriptConfig`'s body and
|
|
2871
|
-
* `config push` sends it back; there is no key/value table to define, and the
|
|
2872
|
-
* `Script` / `ScriptConfig` scalars around it (name, description, inputSchema,
|
|
2873
|
-
* limits, status) are not authorable through the sync slot today.
|
|
2874
|
-
*
|
|
2875
|
-
* The entry exists so that is a DECISION rather than an absence. Criterion 3's
|
|
2876
|
-
* registry guard reads `SYNC_RESOURCE_TYPES` and requires a surface per label;
|
|
2877
|
-
* without this module `transform` would have to sit in an exemption list, which
|
|
2878
|
-
* is precisely the "absent from a hand-written list" failure mode this epic
|
|
2879
|
-
* exists to end.
|
|
3373
|
+
* The refusal of a new version whose default export has no `authorize`: it
|
|
3374
|
+
* names the function and shows the object form with the function's key. A
|
|
3375
|
+
* `file` prefixes the sentence the way the CLI reports a file it refuses.
|
|
2880
3376
|
*/
|
|
2881
|
-
export declare
|
|
2882
|
-
|
|
3377
|
+
export declare function authorizeRequiredMessage(functionKey: string, file?: string): string;
|
|
3378
|
+
/**
|
|
3379
|
+
* The refusal of a new version that defines `authorize` while its TOML still
|
|
3380
|
+
* carries `access`.
|
|
3381
|
+
*/
|
|
3382
|
+
export declare function accessAmbiguousMessage(functionKey: string): string;
|
|
3383
|
+
/** The refusal of a create or update body that carries `access`. */
|
|
3384
|
+
export declare const FUNCTION_ACCESS_FROZEN_REQUEST: string;
|
|
2883
3385
|
export declare const TEST_CASE_SURFACE: ConfigObjectSurface;
|
|
2884
3386
|
export declare const APP_SETTINGS_SURFACE: ConfigObjectSurface;
|
|
2885
3387
|
/**
|