failproofai 1.0.12-beta.1 → 1.0.12
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/.next/standalone/.next/BUILD_ID +1 -1
- package/.next/standalone/.next/build-manifest.json +3 -3
- package/.next/standalone/.next/prerender-manifest.json +4 -4
- package/.next/standalone/.next/required-server-files.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_global-error.html +1 -1
- package/.next/standalone/.next/server/app/_global-error.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/_not-found.html +1 -1
- package/.next/standalone/.next/server/app/_not-found.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/api/audit/invite/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/run/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/audit/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-request/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/login-verify/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/auth/status/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/api/download/[project]/[session]/route.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/audit/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/audit/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/index.html +1 -1
- package/.next/standalone/.next/server/app/index.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/.next/standalone/.next/server/app/index.segments/_full.segment.rsc +3 -3
- package/.next/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/.next/standalone/.next/server/app/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/policies/page/server-reference-manifest.json +14 -14
- package/.next/standalone/.next/server/app/policies/page.js +2 -2
- package/.next/standalone/.next/server/app/policies/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/policies/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/react-loadable-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page/server-reference-manifest.json +2 -2
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/project/[name]/session/[sessionId]/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/projects/page/server-reference-manifest.json +1 -1
- package/.next/standalone/.next/server/app/projects/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/projects/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/app/settings/page/server-reference-manifest.json +8 -8
- package/.next/standalone/.next/server/app/settings/page.js.nft.json +1 -1
- package/.next/standalone/.next/server/app/settings/page_client-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/chunks/_0tovk6q0miud6._.js +1 -1
- package/.next/standalone/.next/server/chunks/_0trp3ycqv17cl._.js +1 -1
- package/.next/standalone/.next/server/chunks/_1ek68lnh2daur._.js +2 -2
- package/.next/standalone/.next/server/chunks/package_json_[json]_cjs_1nxcc4vkpxxu7._.js +1 -1
- package/.next/standalone/.next/server/chunks/src_hooks_0_em82s16zfym._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__08ch3staq3ejw._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0bigvy9xmv2ka._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0h86bl2qf0k_o._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0pia5h3p8re4c._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1-ey9fgesfbc0._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__15usvs-ms-0hf._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__167mipqmjprq5._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__16gb3_92zvk5x._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1avi2kypusyb_._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__1r7drlqli-ado._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{[root-of-the-server]__0b78b0j8iyv6l._.js → [root-of-the-server]__1vofkb2oq7p7e._.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_0eoura3_9gjb-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{_1a3tubds7s7ow._.js → _0ouu886szh6yj._.js} +4 -4
- package/.next/standalone/.next/server/chunks/ssr/_0pedwblqdoh58._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_1d98fyfrcaqhy._.js +3 -0
- package/.next/standalone/.next/server/chunks/ssr/_1djqs9i27e4kg._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/_next-internal_server_app_policies_page_actions_1sp2-yo5_vm5f.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_actions_get-scheduled-audit_ts_0ei9snixb5fd-._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_audit__components_audit-dashboard_tsx_0p9ud47q0xq5w._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_global-error_tsx_1kp6l3x33jqb6._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/app_policies_hooks-client_tsx_19dqvpcz0uxur._.js +2 -2
- package/.next/standalone/.next/server/chunks/ssr/app_settings_02tf1h47jmhhd._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/{node_modules_html-to-image_es_index_1i8oid1gc7s1f.js → node_modules_html-to-image_es_index_0tqc05n832v7a.js} +1 -1
- package/.next/standalone/.next/server/chunks/ssr/package_json_[json]_cjs_013tntikdft59._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_0agdmptetetdt._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_0mdwgjisv4fub._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_fp-config_ts_04t589gp4p60j._.js +1 -1
- package/.next/standalone/.next/server/chunks/ssr/src_hooks_pack-cli_ts_0t7me658zqmh_._.js +1 -1
- package/.next/standalone/.next/server/middleware-build-manifest.js +3 -3
- package/.next/standalone/.next/server/pages/404.html +1 -1
- package/.next/standalone/.next/server/pages/500.html +1 -1
- package/.next/standalone/.next/server/preview-props.json +3 -3
- package/.next/standalone/.next/server/server-reference-manifest.js +1 -1
- package/.next/standalone/.next/server/server-reference-manifest.json +23 -23
- package/.next/standalone/.next/static/chunks/{1b32-afqacaen.js → 0el9n3h9_zp5m.js} +1 -1
- package/.next/standalone/.next/static/chunks/0k7g_8x3o6gd-.js +1 -0
- package/.next/standalone/.next/static/chunks/{42e8zab314654.js → 0umzct31duk5g.js} +1 -1
- package/.next/standalone/.next/static/chunks/{24w3x2da9sk49.js → 0wobqgosirs8p.js} +1 -1
- package/.next/standalone/.next/static/chunks/12rug3jilwqzs.js +1 -0
- package/.next/standalone/.next/static/chunks/{2-tf6_7u623kd.js → 1kduj74-715jh.js} +1 -1
- package/.next/standalone/.next/static/chunks/2701amhrbsbot.js +1 -0
- package/.next/standalone/.next/static/chunks/{18433qz-8njv3.js → 27cavoc8paelg.js} +1 -1
- package/.next/standalone/.next/static/chunks/{0_zfad4co-t2z.js → 2ve23a7keupjw.js} +1 -1
- package/.next/standalone/.next/static/chunks/3bv6xaoitjpnh.js +6 -0
- package/.next/standalone/app/actions/update-jev-config.ts +5 -3
- package/.next/standalone/app/settings/jev-panel.tsx +1 -1
- package/.next/standalone/fp-cloud-cli/CHANGELOG.md +28 -18
- package/.next/standalone/fp-cloud-cli/README.md +127 -9
- package/.next/standalone/fp-cloud-cli/fp_cli/app.py +15 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/client.py +199 -34
- package/.next/standalone/fp-cloud-cli/fp_cli/cloud_output.py +523 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/_cloud.py +45 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/_write.py +3 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/account_cmds.py +171 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/agent_cmds.py +80 -7
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/alerts_cmds.py +23 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/audits_cmds.py +2 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/contracts_cmds.py +67 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/dashboards_cmds.py +159 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/evaluators_cmds.py +380 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/events_cmds.py +14 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/fleet_cmds.py +12 -216
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/incidents_cmds.py +82 -6
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/list_cmds.py +4 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/orgs_cmds.py +17 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/policies_cmds.py +143 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/queries_cmds.py +70 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/sentiment_cmds.py +49 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/sessions_cmds.py +95 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/settings_cmds.py +2 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/usage_cmds.py +21 -1
- package/.next/standalone/fp-cloud-cli/fp_cli/commands/users_cmds.py +14 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/enforcement.py +7 -53
- package/.next/standalone/fp-cloud-cli/fp_cli/errors.py +3 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/evaluator_spec.py +266 -0
- package/.next/standalone/fp-cloud-cli/fp_cli/output.py +189 -152
- package/.next/standalone/fp-cloud-cli/fp_cli/theme.py +21 -24
- package/.next/standalone/fp-cloud-cli/skill/SKILL.md +124 -23
- package/.next/standalone/fp-cloud-cli/skill/agents/openai.yaml +2 -1
- package/.next/standalone/fp-cloud-cli/skill/references/commands.md +173 -22
- package/.next/standalone/fp-cloud-cli/tests/fake_cloud_smoke.py +312 -0
- package/.next/standalone/fp-cloud-cli/tests/test_cloud_account.py +125 -0
- package/.next/standalone/fp-cloud-cli/tests/test_cloud_agent.py +253 -0
- package/.next/standalone/fp-cloud-cli/tests/test_cloud_human_views.py +287 -0
- package/.next/standalone/fp-cloud-cli/tests/test_cloud_jev.py +32 -197
- package/.next/standalone/fp-cloud-cli/tests/test_cloud_observability.py +116 -0
- package/.next/standalone/fp-cloud-cli/tests/test_cloud_transport.py +141 -0
- package/.next/standalone/fp-cloud-cli/tests/test_commands.py +3 -3
- package/.next/standalone/fp-cloud-cli/tests/test_dashboards_agent.py +3 -3
- package/.next/standalone/fp-cloud-cli/tests/test_evaluator_authoring.py +449 -0
- package/.next/standalone/fp-cloud-cli/tests/test_facets.py +1 -1
- package/.next/standalone/fp-cloud-cli/tests/test_help_table_coverage.py +15 -0
- package/.next/standalone/fp-cloud-cli/tests/test_operator.py +1 -1
- package/.next/standalone/fp-cloud-cli/tests/test_orgs.py +1 -1
- package/.next/standalone/fp-cloud-cli/tests/test_output.py +37 -37
- package/.next/standalone/fp-cloud-cli/tests/test_round4_behaviour.py +144 -0
- package/.next/standalone/fp-cloud-cli/tests/test_screen_language.py +80 -0
- package/.next/standalone/fp-cloud-cli/tests/test_session_reevaluate.py +33 -0
- package/.next/standalone/fp-cloud-cli/tests/test_staging_parity.py +198 -0
- package/.next/standalone/fp-cloud-cli/tests/test_whoami.py +1 -1
- package/.next/standalone/hermes-plugin/__init__.py +11 -0
- package/.next/standalone/hermes-plugin/plugin.yaml +1 -1
- package/.next/standalone/package.json +11 -10
- package/.next/standalone/sdk/python/uv.lock +31 -8
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package-lock.json +68 -176
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-4/package.json +2 -2
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package-lock.json +4 -4
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-5/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/package-lock.json +7 -7
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-6/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/package-lock.json +7 -7
- package/.next/standalone/sdk/typescript/integration/fixtures/ai-7/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package-lock.json +98 -115
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-0.3/package.json +3 -3
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/package-lock.json +4 -4
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-1/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package-lock.json +4 -4
- package/.next/standalone/sdk/typescript/integration/fixtures/langchain-dup-core/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package-lock.json +149 -171
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.11/package.json +2 -2
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/package-lock.json +4 -4
- package/.next/standalone/sdk/typescript/integration/fixtures/llamaindex-0.12/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package-lock.json +25 -25
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-0/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package-lock.json +7 -7
- package/.next/standalone/sdk/typescript/integration/fixtures/mastra-1/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package-lock.json +10 -10
- package/.next/standalone/sdk/typescript/integration/fixtures/nextjs/package.json +1 -1
- package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/package-lock.json +7 -7
- package/.next/standalone/sdk/typescript/integration/fixtures/runtimes/package.json +1 -1
- package/.next/standalone/server.js +1 -1
- package/dist/cli.mjs +1760 -638
- package/dist/worker.mjs +426 -76
- package/hermes-plugin/__init__.py +11 -0
- package/hermes-plugin/plugin.yaml +1 -1
- package/package.json +11 -10
- package/src/audit/open-browser.ts +24 -7
- package/src/hooks/agent-roster.ts +9 -1
- package/src/hooks/agent-skill.ts +206 -0
- package/src/hooks/cloud-connection.ts +27 -51
- package/src/hooks/cloud-introspect.ts +5 -2
- package/src/hooks/cloud-login.ts +248 -0
- package/src/hooks/cloud-managed-policies.ts +54 -4
- package/src/hooks/codex-system-hooks.ts +10 -4
- package/src/hooks/config-status.ts +9 -3
- package/src/hooks/configure-wizard.ts +356 -32
- package/src/hooks/delivery-health.ts +47 -2
- package/src/hooks/effective-reviewers.ts +14 -0
- package/src/hooks/fp-config.ts +19 -0
- package/src/hooks/fp-home.ts +1 -1
- package/src/hooks/handler.ts +43 -5
- package/src/hooks/hook-activity-store.ts +7 -1
- package/src/hooks/integrations.ts +18 -3
- package/src/hooks/jev-activity.ts +117 -1
- package/src/hooks/jev-cli.ts +7 -9
- package/src/hooks/manager.ts +80 -46
- package/src/hooks/policy-evaluator.ts +17 -0
- package/src/hooks/policy-reviewability.ts +4 -2
- package/src/hooks/semantic/cloud-jev.ts +219 -28
- package/src/hooks/semantic/combine.ts +26 -1
- package/src/hooks/semantic/intent.ts +127 -24
- package/src/hooks/semantic/jev-client.ts +1 -1
- package/src/hooks/semantic/jev-config.ts +6 -27
- package/src/hooks/semantic/jev-review.ts +111 -4
- package/src/hooks/tui.ts +280 -0
- package/src/hooks/uninstall-cli.ts +12 -1
- package/.next/standalone/.next/server/chunks/ssr/[root-of-the-server]__0588st-tpiuia._.js +0 -3
- package/.next/standalone/.next/server/chunks/ssr/_128ebxr83nk6g._.js +0 -3
- package/.next/standalone/.next/static/chunks/0jutamwqz8pg5.js +0 -1
- package/.next/standalone/.next/static/chunks/114hbolvrv94e.js +0 -1
- package/.next/standalone/.next/static/chunks/1p-hsi58i-6h0.js +0 -6
- package/.next/standalone/.next/static/chunks/3-pku9qwv1yfu.js +0 -1
- /package/.next/standalone/.next/static/{xq8UgF5yFxty1VWxY2hyn → D7LY1YSrw96ZxKSpxxrFw}/_buildManifest.js +0 -0
- /package/.next/standalone/.next/static/{xq8UgF5yFxty1VWxY2hyn → D7LY1YSrw96ZxKSpxxrFw}/_clientMiddlewareManifest.js +0 -0
- /package/.next/standalone/.next/static/{xq8UgF5yFxty1VWxY2hyn → D7LY1YSrw96ZxKSpxxrFw}/_ssgManifest.js +0 -0
|
@@ -6,35 +6,35 @@ entirely under ``NO_COLOR`` / non-color terminals.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
-
ACCENT = "#
|
|
10
|
-
TEXT = "
|
|
11
|
-
TEXT_DIM = "#
|
|
12
|
-
LABEL = "#
|
|
13
|
-
FAINT = "#
|
|
14
|
-
THIN_RULE = "#
|
|
15
|
-
BAR_EMPTY = "#
|
|
16
|
-
INSET_BG = "
|
|
9
|
+
ACCENT = "#66d1b5" # mint: active and successful states
|
|
10
|
+
TEXT = "default" # the terminal's foreground (also works on light themes)
|
|
11
|
+
TEXT_DIM = "#767f8b"
|
|
12
|
+
LABEL = "#767f8b" # grey labels and metadata
|
|
13
|
+
FAINT = "#767f8b"
|
|
14
|
+
THIN_RULE = "#3e434c"
|
|
15
|
+
BAR_EMPTY = "#3e434c"
|
|
16
|
+
INSET_BG = "default"
|
|
17
17
|
|
|
18
18
|
# Errors theme — the one per-command border deviation (the `errors` list + aggregate card).
|
|
19
19
|
# Always red, regardless of error count, so the two views read as one consistent family.
|
|
20
|
-
BORDER_ERROR = "#
|
|
21
|
-
TITLE_ERROR_DIM =
|
|
22
|
-
RULE_ERROR =
|
|
20
|
+
BORDER_ERROR = "#e4587d"
|
|
21
|
+
TITLE_ERROR_DIM = LABEL
|
|
22
|
+
RULE_ERROR = THIN_RULE
|
|
23
23
|
|
|
24
24
|
# Semantic value colors — for run/job states and score thresholds. (They coincide with
|
|
25
25
|
# the perm risk colors below; named separately so the two uses can diverge later.)
|
|
26
|
-
SUCCESS =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
SUCCESS = ACCENT
|
|
27
|
+
PINK = "#e4587d" # pink: commands, selection and attention
|
|
28
|
+
AMBER = PINK
|
|
29
|
+
ERROR = PINK
|
|
30
|
+
SCORE_HIGH = ACCENT
|
|
31
|
+
BLUE = ACCENT
|
|
32
32
|
|
|
33
33
|
# Permission verb colors — by ACTION (the part after `:`), never by resource.
|
|
34
|
-
PERM_READ =
|
|
35
|
-
PERM_WRITE =
|
|
36
|
-
PERM_ACTION =
|
|
37
|
-
PERM_DANGER =
|
|
34
|
+
PERM_READ = ACCENT
|
|
35
|
+
PERM_WRITE = PINK
|
|
36
|
+
PERM_ACTION = PINK
|
|
37
|
+
PERM_DANGER = PINK
|
|
38
38
|
|
|
39
39
|
PERM_COLORS = {
|
|
40
40
|
"read": PERM_READ,
|
|
@@ -44,9 +44,6 @@ PERM_COLORS = {
|
|
|
44
44
|
}
|
|
45
45
|
DEFAULT_PERM_COLOR = LABEL # any unmapped action → neutral dim (never crash / guess a risk)
|
|
46
46
|
|
|
47
|
-
# Risk rank for ordering actions within a row: read → modify → invoke → destroy.
|
|
48
|
-
PERM_RANK = {PERM_READ: 0, PERM_WRITE: 1, PERM_ACTION: 2, PERM_DANGER: 3}
|
|
49
|
-
|
|
50
47
|
|
|
51
48
|
def perm_color(action: str) -> str:
|
|
52
49
|
"""The color for a permission action, or the neutral default if it's unmapped."""
|
|
@@ -4,12 +4,14 @@ description: |-
|
|
|
4
4
|
The way to answer "how are my production AI agents doing?" and to run the team's agent-observability deployment — reach for it even on casual phrasing that names no tool.
|
|
5
5
|
|
|
6
6
|
Trigger when the user wants to:
|
|
7
|
-
• inspect agent telemetry — did agents error/fail/go flaky; sessions, events, latency, token usage, slowest models; eval/quality scores and whether quality dropped;
|
|
8
|
-
• operate the deployment —
|
|
7
|
+
• inspect agent telemetry — did agents error/fail/go flaky; sessions, events, latency, token usage, slowest models, sentiment; eval/quality scores and whether quality dropped;
|
|
8
|
+
• operate the deployment — triage issues and audits; manage alerts, access, keys, settings, dashboards, and queries;
|
|
9
|
+
• manage Cloud enforcement — compose/test/backtest/publish policy versions (regex, Jev or both), deploy them to fleet machines or single agents, inspect guardrails, promote, or roll back;
|
|
10
|
+
• author, dry-run, deploy and backfill hosted code, LLM-judge or Jev evaluators (`fp evaluators`).
|
|
9
11
|
|
|
10
12
|
Served by the `fp` CLI against FailproofAI Cloud.
|
|
11
13
|
|
|
12
|
-
NOT for
|
|
14
|
+
NOT for publishing reusable GitHub policy packs (`failproofai-policy-publish`), deciding what to evaluate (`failproofai-eval-brainstorm`), designing an evaluation's logic (`failproofai-eval-author`), instrumenting an app (`failproofai-sdk`), or debugging the local collector/daemon.
|
|
13
15
|
---
|
|
14
16
|
|
|
15
17
|
# FailproofAI Cloud CLI
|
|
@@ -42,8 +44,8 @@ Throughout this skill, `fp` means "whichever form you resolved."
|
|
|
42
44
|
|
|
43
45
|
- **Global options go BEFORE the command:** `fp --json events`, never
|
|
44
46
|
`fp events --json`. Globals are `--base-url`, `--org`, `--token`,
|
|
45
|
-
`--api-key`, `--json`, `--insecure`/`--secure
|
|
46
|
-
usage error.
|
|
47
|
+
`--api-key`, `--json`, `--insecure`/`--secure`, `--timeout`, `--quiet`/`-q`,
|
|
48
|
+
`--no-color`. After the command they're a usage error.
|
|
47
49
|
- **Two ways to authenticate, and they are not interchangeable:**
|
|
48
50
|
|
|
49
51
|
| | How you supply it | What it is |
|
|
@@ -77,17 +79,19 @@ Throughout this skill, `fp` means "whichever form you resolved."
|
|
|
77
79
|
a saved session (Click treats an empty env var as unset, so it falls to rung 4).
|
|
78
80
|
|
|
79
81
|
- **Some commands need a signed-in user.** `login`, `logout`, `orgs *`, the whole
|
|
80
|
-
`agent` group, `
|
|
82
|
+
`agent` group, `agent brief`, `orgs create`, `evaluators draft`, `query compose`, `slack *`, `plan`, `plan claim`, `keys update`, every
|
|
83
|
+
`policies` subcommand except `test` (it runs locally and calls nothing), and all of `fleet *` /
|
|
81
84
|
`guardrails *` refuse a key with a usage error (**exit 2**) and make **no
|
|
82
85
|
network call at all** — there is no user to sign in, no saved active org to
|
|
83
86
|
switch, no private assistant thread to own, and the enforcement write routes
|
|
84
87
|
are root-only and deliberately absent from `/v1`. `keys update` is in that list
|
|
85
88
|
rather than a special case: `keys:update` can never be granted to a key, so it
|
|
86
89
|
is refused up front like the rest. The key is not the problem to fix — plan
|
|
87
|
-
around them rather than retrying or hunting for a flag.
|
|
90
|
+
around them rather than retrying or hunting for a flag. The one inverse case:
|
|
91
|
+
`usage windows` is served on the versioned API only, so it needs `--api-key`
|
|
92
|
+
and refuses a session with exit 2.
|
|
88
93
|
- **Default to `--json` and parse it.** It prints clean JSON to stdout and
|
|
89
|
-
nothing else. The plain output
|
|
90
|
-
burns context with box-drawing characters and is awkward to parse. Use the
|
|
94
|
+
nothing else. The plain output uses open Rich tables for human eyes. Use the
|
|
91
95
|
rendered output only when the user explicitly wants to *look* at something.
|
|
92
96
|
- **Data → stdout, status/errors/prompts → stderr.** So a `--json` stdout
|
|
93
97
|
capture is pure JSON even when a status line is shown.
|
|
@@ -101,7 +105,7 @@ Throughout this skill, `fp` means "whichever form you resolved."
|
|
|
101
105
|
| 3 | can't reach the dashboard | check base-url / connectivity |
|
|
102
106
|
| 4 | no usable credential — not signed in, session expired, **or the API key was rejected** | session: user must run `fp login`. Key: it's missing, mistyped, disabled, or belongs to another deployment — don't retry, and don't fall back to a session |
|
|
103
107
|
| 5 | authenticated but missing permission | message names the exact permission |
|
|
104
|
-
| 6 | resource not found | the
|
|
108
|
+
| 6 | resource not found / newer capability unavailable | check the id or Cloud version; do not retry blindly |
|
|
105
109
|
|
|
106
110
|
## 3. First call: confirm you're connected
|
|
107
111
|
|
|
@@ -163,11 +167,17 @@ ask** — don't rename-and-retry or rotate/regenerate the existing one. A
|
|
|
163
167
|
|
|
164
168
|
State-changing commands: `keys create/update/disable/regenerate`,
|
|
165
169
|
`users create/update/disable/enable`, `settings set`,
|
|
166
|
-
`alerts create/update/delete/test`, the writing `issues` subcommands
|
|
167
|
-
(`ack/assign/resolve/comment-add/comment-delete/subscribe/unsubscribe/open`),
|
|
168
|
-
`audits create/edit/delete/run` and the finding-triage verbs
|
|
170
|
+
`alerts create/update/delete/test` and `alerts issues --create`, the writing `issues` subcommands
|
|
171
|
+
(`ack/assign/resolve/close/archive/unarchive/clear/comment-add/comment-delete/subscribe/unsubscribe/open`),
|
|
172
|
+
`audits create/edit/delete/run`, `audits contracts create/update` and the finding-triage verbs
|
|
169
173
|
(`ack/mute/dismiss/resolve/reopen/assign`),
|
|
170
|
-
`query create/update/delete`, `
|
|
174
|
+
`query create/update/delete`, `dashboards create/update/delete` and `dashboards tiles add/update/remove/layout`,
|
|
175
|
+
`roles create/update/delete`, `users delete`, `settings context-windows set/delete`, `otel enable/disable`,
|
|
176
|
+
`slack disconnect`, `orgs create`, `plan claim`, `sessions re-evaluate` and `sessions import`,
|
|
177
|
+
`evaluators create/deploy/enable/disable/label/backfill` (an enabled evaluator scores every
|
|
178
|
+
new session; judge/Jev evaluators and Jev dry-runs spend model budget),
|
|
179
|
+
`policies backtest --run` (spends Jev allowance), `agent ask --approve`,
|
|
180
|
+
`agent rename/delete`, `orgs switch`, and — the
|
|
171
181
|
highest-consequence of the lot — `policies publish/enable/disable/delete` and
|
|
172
182
|
`fleet deploy/rollback/rename`, which change what is ENFORCED on production
|
|
173
183
|
machines. A `fleet deploy` replaces a machine's entire policy set, so name the
|
|
@@ -185,28 +195,34 @@ you need a flag you don't already know.
|
|
|
185
195
|
- `evals` — evaluation results + scores; `--aggregate` for a health rollup; `--score key:min..max`.
|
|
186
196
|
- `errors` — errored events; `--aggregate` for count / sessions / agents / last-seen.
|
|
187
197
|
- `usage` — current org usage for its fixed 30-day metering window; needs `usage:read`.
|
|
188
|
-
- `list <kind>` — **discover valid filter values first**: `envs agents event_types score_filters models hooks tools error_types`.
|
|
198
|
+
- `list <kind>` — **discover valid filter values first**: `envs agents event_types score_filters models hooks tools error_types trigger_events eval_envs metric_keys`.
|
|
199
|
+
- `sessions show|export|history|re-evaluate <id>` — one run in depth; `sessions import FILE...` uploads transcripts/JSONL.
|
|
200
|
+
- `events latency` — latency/token aggregate. `sentiment summary|messages|sessions|session <id>` — conversation sentiment.
|
|
201
|
+
- `dashboards list|show|create|update|delete` + `dashboards tiles <id> list|add|update|remove|layout` — org dashboards of saved-query tiles.
|
|
189
202
|
|
|
190
203
|
**Manage (permission-gated, mutations):**
|
|
191
204
|
- `keys list|show|create|update|disable|regenerate` — API keys; secret shown once.
|
|
192
205
|
- `users list|show|create|update|disable|enable` — referenced by **email**.
|
|
193
206
|
- `settings list|schema|set` — fixed registry; `schema` shows what each key accepts.
|
|
194
|
-
- `
|
|
195
|
-
- `
|
|
196
|
-
- `
|
|
207
|
+
- `users delete <id>|defaults`, `roles list|show|create|update|delete` (permission sets), `settings context-windows list|set|delete`, `otel status|enable|disable`, `slack status|disconnect`, `orgs create`, `plan [claim]`.
|
|
208
|
+
- `alerts list|show|create|update|delete|test|recipients|issues` — referenced by **name** (`issues` takes the alert id); full flags in `references/commands.md#alerts`.
|
|
209
|
+
- `issues list|count|facets|show|ack|assign|resolve|close|archive|unarchive|clear|comment-add|comment-list|comment-delete|subscribe|subscribers|unsubscribe|open` — by id (short ids accepted). `list`/`count`/`facets` take the inbox filters (`--agent-id --env --machine --source --audit-id --assignee --archived --search --since`). **One board for everything needing attention**: alert breaches, hand-raised issues, and audit findings, told apart by a `source` of `alert` / `manual` / `audit`. (This group was called `incidents` before; the old name is gone.)
|
|
210
|
+
- `audits list|show|create|edit|delete|run|runs` — scheduled sweeps, referenced by **name**; `audits findings|finding` + the triage verbs `ack|mute|dismiss|resolve|reopen|assign` act on a finding **id**. `audits run <name>` only *queues* a run (poll `audits runs <name>` for completion). `audits contracts list|show|create|update` — per-agent contracts the audits read. See §8.
|
|
197
211
|
|
|
198
212
|
**Enforce (cloud-managed policy, session-only — see §2):**
|
|
199
|
-
- `policies list|show|publish|enable|disable|delete|test|compose` — policy versions. `publish` mints a version of a kind — `regex` (a local `.mjs`), `jev` (`--semantic checks.json`: Jev declarations, no JavaScript) or `both` (the two, the JavaScript reviewable by its own checks); list/show print the kind and the Jev check names; `test` runs one against a synthetic context locally (it applies each policy's `match` filter, so a policy that does not cover the `--event`/`--tool` you pass is reported `skipped`, not run). `enable`/`disable`/`delete` take `--yes`.
|
|
200
|
-
- `fleet list|show|deploy|
|
|
213
|
+
- `policies list|show|publish|enable|disable|delete|test|compose|author|backtest|candidacy` — policy versions. `author "<intent>" [--kind regex|jev|both]` drafts one from your org's events; `backtest` replays a file or published id against stored calls (jev/both: free estimate, `--run` spends Jev allowance); `candidacy --issue <id>` asks whether a policy could prevent an issue. None of the three publishes. `publish` mints a version of a kind — `regex` (a local `.mjs`), `jev` (`--semantic checks.json`: Jev declarations, no JavaScript) or `both` (the two, the JavaScript reviewable by its own checks); list/show print the kind and the Jev check names; `test` runs one against a synthetic context locally (it applies each policy's `match` filter, so a policy that does not cover the `--event`/`--tool` you pass is reported `skipped`, not run). `enable`/`disable`/`delete` take `--yes`.
|
|
214
|
+
- `fleet list|show|deploy|diff|history|rollback|rename` — which machines run which policies, and the policy errors each machine reports. **`deploy` REPLACES a machine's whole set** (`--add`/`--remove` amend it, `--set` replaces, `--create` mints a deployment). `--target POLICY=INTEGRATION[/agt_ID]` scopes one assignment to an integration or a single agent (repeat to OR), `--all-agents POLICY` clears that scope. There is no Jev mode to set: FailproofAI Cloud turns Jev on for a machine while a `jev`/`both` policy is deployed to it (off otherwise); trial one with `:observe`. `deploy` prints the plan and asks **only on an interactive terminal without `--json`** — under `--json` or with stdin redirected it applies immediately, so read `fleet show` first if you want review.
|
|
201
215
|
- `guardrails summary|timeline` — what enforcement actually did; `--since 1h|6h|24h|7d`, `--machine`.
|
|
202
216
|
|
|
203
217
|
**Analytics & assistant:**
|
|
204
218
|
- `query list|show|create|update|delete|run|schema` — saved ClickHouse SQL + ad-hoc runner (`query run <name>` or `query run --sql "…"`); `query schema [table]` for table layout.
|
|
205
|
-
- `
|
|
219
|
+
- `query compose "<question>" [--run]` (AI SQL, session only) and `query export <id>|--sql … [--format csv|json] [--out FILE]`.
|
|
220
|
+
- `agent health|models|chats|ask|show|rename|delete|brief` — built-in assistant; `agent ask "…"` starts a chat, `--chat <short-id>` continues one. Assistant writes are declined in scripts/`--json` unless `--approve` (only with the user's explicit OK).
|
|
221
|
+
- `evaluators list|show|create|deploy|draft|dry-run|enable|disable|label|instances|schema|jobs|backfill` — hosted evaluator authoring (see "Author an evaluator" below); `evals` stays the results reader.
|
|
206
222
|
|
|
207
|
-
**Identity:** `login`, `logout`, `whoami`, `orgs {list,switch,current,perms}`, `version`, `help`.
|
|
223
|
+
**Identity:** `login`, `logout`, `whoami`, `orgs {list,switch,current,perms,create}`, `version`, `help`.
|
|
208
224
|
All of `login` / `logout` / `orgs` — like the whole `agent` group, `keys update`, and
|
|
209
|
-
every `policies` / `fleet` / `guardrails` subcommand — are **session-only**: with a key
|
|
225
|
+
every `policies` (except `test`) / `fleet` / `guardrails` subcommand — are **session-only**: with a key
|
|
210
226
|
they exit 2 without calling anything (§2). `whoami`, `version` and `help` work either way.
|
|
211
227
|
|
|
212
228
|
## 6. Translating plain-English requests
|
|
@@ -224,6 +240,12 @@ command (`list <kind>`, `whoami`, a `list` subcommand) before committing.
|
|
|
224
240
|
| "how many events / how much traffic last week?" | `query schema` then `query run --sql "SELECT count() FROM events WHERE ts >= now() - INTERVAL 7 DAY"` |
|
|
225
241
|
| "what has this org used this metering window?" | `usage` (or `--json usage` for the complete response) |
|
|
226
242
|
| "is anything on fire?", "any alerts firing / open issues?" | `alerts list` + `issues list` (and `issues count`) |
|
|
243
|
+
| "what's assigned to me?", "open issues for agent X" | `issues list --assignee me`, `issues list --agent-id X` (`issues facets` shows valid values) |
|
|
244
|
+
| "alert me when errors spike" | `alerts create <name> --trigger-kind metric_threshold --trigger-spec '…' --severity warning` — **state it, then create** |
|
|
245
|
+
| "would this policy have blocked anything?", "backtest it" | `policies backtest <file-or-id>` (jev/both: estimate first; `--run` only with the user's OK — it spends Jev allowance) |
|
|
246
|
+
| "block X only for the Codex agent" | `fleet deploy <machine> --add <policy> --target <policy>=codex` — **confirm first** |
|
|
247
|
+
| "add an evaluation for Y", "score sessions for Y" | `failproofai-eval-author` to design it, then `evaluators draft`/`create`/`deploy` (+ `--backfill 7d`) |
|
|
248
|
+
| "upload these transcripts" | `sessions import <files> --dry-run`, then without `--dry-run` |
|
|
227
249
|
| "ack / look at / resolve that issue" | `issues list` → `issues show <id>` → **confirm** → `issues ack`/`resolve <id>` |
|
|
228
250
|
| "clear all our issues", "fresh start", "we changed the agents" | **settle the scope first** (`--all-audits` leaves alert and hand-opened issues alone; `--everything` does not; `--audit <id>` is one audit) → `issues clear <scope> --dry-run` → show the count → **confirm** → `issues clear <scope>` |
|
|
229
251
|
| "we're not going to fix that one" | `issues close <id>` (NOT `resolve` — closed survives a recurrence) |
|
|
@@ -315,3 +337,82 @@ Two things about the flow matter when driving it from the CLI:
|
|
|
315
337
|
Typical end-to-end: `audits list` → `audits run <name>` → poll `audits runs <name>`
|
|
316
338
|
→ `audits findings --audit <name>` (highest priority first) → `audits finding <id>`
|
|
317
339
|
for the full write-up → **confirm with the user** → `audits resolve <id>`.
|
|
340
|
+
|
|
341
|
+
## Author an evaluator
|
|
342
|
+
|
|
343
|
+
Use `fp evaluators` for hosted authoring; `fp evals` remains the results reader.
|
|
344
|
+
To decide *what* to measure use `failproofai-eval-brainstorm`; to design the
|
|
345
|
+
evaluation itself (code vs Jev vs LLM judge, the condition, the rubric) use
|
|
346
|
+
`failproofai-eval-author` — then come back here to draft, dry-run and deploy it.
|
|
347
|
+
Read [the evaluator command reference](references/commands.md#author-an-evaluator)
|
|
348
|
+
for the full flags and API spec shape. Creation enables a definition by default;
|
|
349
|
+
confirm the key, version, kind and budget before creating/deploying on a live org.
|
|
350
|
+
|
|
351
|
+
Discover with `fp --json evaluators instances` and `fp --json evaluators schema`.
|
|
352
|
+
The instance must be enabled. Authoring needs `evaluations:trigger`; session
|
|
353
|
+
dry-runs and schema profiling also need `events:read`.
|
|
354
|
+
|
|
355
|
+
Code workflow (write `error_free.py` as a single restricted Python expression,
|
|
356
|
+
not a module with imports or a function):
|
|
357
|
+
|
|
358
|
+
```python
|
|
359
|
+
EvalResult(score=Score(1.0 if session.count("error") == 0 else 0.0), reasoning="Error-free session")
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
fp --json evaluators draft "Measure the absence of error events with code" --kind code --out error-free.json
|
|
364
|
+
fp --json evaluators create --file error-free.json --dry-run-on run-001
|
|
365
|
+
fp --json evaluators dry-run --code error_free.py --session run-001
|
|
366
|
+
fp --json evaluators deploy error_free --code error_free.py --version 2 --dry-run-on run-001
|
|
367
|
+
fp --json evaluators list --key error_free --all
|
|
368
|
+
fp --json evals --since 24h
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
Review the draft before creating. It may choose a different `eval_key`: read
|
|
372
|
+
the file and use its key later; the filename does not determine the key.
|
|
373
|
+
|
|
374
|
+
Judge workflow (server selects the model; judge dry-runs are refused):
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
fp --json evaluators create --key relevance --name Relevance --judge \
|
|
378
|
+
--criteria "Grade how directly the response answers the request" \
|
|
379
|
+
--step "Assess relevance and specificity on a continuous scale" --threshold 0.7
|
|
380
|
+
fp --json evaluators deploy relevance --version 2 --judge \
|
|
381
|
+
--criteria "Grade relevance, accuracy and completeness" --threshold 0.8
|
|
382
|
+
fp --json sessions re-evaluate run-001
|
|
383
|
+
fp --json sessions history run-001
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
Jev workflow (dry-runs spend model budget):
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
fp --json evaluators create --key resolution --name Resolution --jev noul \
|
|
390
|
+
--instructions "Did the assistant resolve the request?" \
|
|
391
|
+
--true "Resolved with supporting evidence" --false "Unresolved" --threshold 0.8
|
|
392
|
+
fp --json evaluators dry-run --jev noul --instructions "Was the request resolved?" \
|
|
393
|
+
--true "Resolved" --false "Unresolved" --session run-001
|
|
394
|
+
fp --json evaluators deploy resolution --version 2 --jev noul \
|
|
395
|
+
--instructions "Was the request resolved without unsupported claims?" \
|
|
396
|
+
--true "Resolved with evidence" --false "Unresolved or unsupported"
|
|
397
|
+
fp --json evaluators show resolution@2
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
Use `--jev score` with 3–5 distinct `--level` values, ordered worst to best, for
|
|
401
|
+
a rubric. `deploy` creates the new immutable version **before** disabling older
|
|
402
|
+
enabled versions. A partial failure names the new id: inspect `list --all`,
|
|
403
|
+
then disable any remaining old version; do not retry creation blindly.
|
|
404
|
+
Backfill (`evaluators backfill`, or `deploy --backfill 7d`) covers code, judge
|
|
405
|
+
and Jev evaluators, at most 90 days, and queues only the (session, evaluator)
|
|
406
|
+
pairs not scored yet; judge/Jev backfills spend model budget, so run
|
|
407
|
+
`backfill --dry-run` first and tell the user the count.
|
|
408
|
+
|
|
409
|
+
Human mode displays dry-run outcomes before creation/deployment. Failed runs
|
|
410
|
+
stop the write unless `--force` is explicitly authorized; do not add it merely
|
|
411
|
+
to get past a failed check. Plan offers and claims require `fp login`, not a key.
|
|
412
|
+
|
|
413
|
+
AI drafting needs a signed-in session (`fp login`); evaluator API operations can
|
|
414
|
+
use a scoped key. Unknown-route 404s exit 6 with “not available on this
|
|
415
|
+
FailproofAI Cloud yet”; missing-record 404s report that the record was not found
|
|
416
|
+
(also exit 6). An assistant approval is different from ordinary
|
|
417
|
+
mutation confirmation: `agent ask` declines writes in scripts/`--json` unless
|
|
418
|
+
`--approve` was explicitly authorized by the user.
|