@pasko70/pibo 1.1.0 → 1.3.0
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 +106 -254
- package/context/codex-base-prompt.md +4 -0
- package/context/compute-worker.md +23 -0
- package/context/pibo-native-tooling.md +18 -0
- package/context/pibo-system-prompt.md +69 -8
- package/dist/api/simple-agent-api.js +136 -0
- package/dist/app-context.js +4 -0
- package/dist/apps/chat/agent-profiles.js +18 -3
- package/dist/apps/chat/agent-store.js +113 -16
- package/dist/apps/chat/chat-api-routes.js +311 -0
- package/dist/apps/chat/chat-capability-routes.js +90 -0
- package/dist/apps/chat/chat-files.js +178 -0
- package/dist/apps/chat/chat-request-normalizers.js +681 -0
- package/dist/apps/chat/chat-settings-routes.js +75 -0
- package/dist/apps/chat/chat-trace-helpers.js +94 -0
- package/dist/apps/chat/chat-user-skill-routes.js +149 -0
- package/dist/apps/chat/cron-api.js +213 -0
- package/dist/apps/chat/data/chat-data-mappers.js +74 -0
- package/dist/apps/chat/data/event-command-service.js +75 -0
- package/dist/apps/chat/data/navigation-query-service.js +11 -0
- package/dist/apps/chat/data/project-service.js +844 -0
- package/dist/apps/chat/data/read-state-service.js +42 -0
- package/dist/apps/chat/data/room-service.js +52 -0
- package/dist/apps/chat/data/session-query-service.js +63 -0
- package/dist/apps/chat/data/timeline-query-service.js +96 -0
- package/dist/apps/chat/event-log.js +1 -307
- package/dist/apps/chat/model-catalog.js +7 -2
- package/dist/apps/chat/output-compactor.js +126 -0
- package/dist/apps/chat/output-event-policy.js +17 -0
- package/dist/apps/chat/project-workflow-human-actions.js +347 -0
- package/dist/apps/chat/project-workflow-sessions.js +260 -0
- package/dist/apps/chat/provider-auth-actions.js +43 -0
- package/dist/apps/chat/ralph-api.js +156 -0
- package/dist/apps/chat/read-model.js +1 -218
- package/dist/apps/chat/rooms.js +1 -321
- package/dist/apps/chat/static-assets.js +996 -0
- package/dist/apps/chat/stream.js +29 -6
- package/dist/apps/chat/trace.js +179 -1003
- package/dist/apps/chat/types/event-store.js +1 -0
- package/dist/apps/chat/types/read-model.js +1 -0
- package/dist/apps/chat/types/rooms.js +36 -0
- package/dist/apps/chat/web-app.js +3131 -1959
- package/dist/apps/chat/workflow-catalog.js +572 -0
- package/dist/apps/chat/workflow-edge-compatibility.js +51 -0
- package/dist/apps/chat/workflow-json-schema-validation.js +335 -0
- package/dist/apps/chat/workflow-persistence-model.js +140 -0
- package/dist/apps/chat/workflow-persistence.js +633 -0
- package/dist/apps/chat/workflow-registered-ref-params.js +130 -0
- package/dist/apps/chat/workflow-registered-ref-pickers.js +179 -0
- package/dist/apps/chat/workflow-registered-ref-validation.js +210 -0
- package/dist/apps/chat/workflow-v2-security-validation.js +93 -0
- package/dist/apps/chat/workflow-validation-helpers.js +114 -0
- package/dist/apps/chat-ui/assets/{dist-CNLWH2qh.js → dist-B4lw9z4F.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-8e4L8ciw.js → dist-BbTaHWON.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CMZOa5ik.js → dist-BcT_c1EJ.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-DNcnQRPF.js → dist-CGINd7XU.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CqqUC8Ce.js → dist-CrBzZkUp.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-D2N4-LIc.js → dist-CyyISotB.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CUqpST5w.js → dist-DFbnFNpX.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-CspjOeBj.js → dist-DGLWQLX8.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-B7bbI3Qz.js → dist-DfcIkFSN.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-v4pjHlB7.js → dist-sKDHTwaT.js} +1 -1
- package/dist/apps/chat-ui/assets/{dist-D9L4MSRF.js → dist-y9D6la48.js} +1 -1
- package/dist/apps/chat-ui/assets/index-C25VYnyb.css +1 -0
- package/dist/apps/chat-ui/assets/index-CUkuvI3v.js +165 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-144x144.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-192x192.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-48x48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-512x512.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-72x72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/android/launchericon-96x96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/1024.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/114.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/120.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/128.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/144.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/152.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/167.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/180.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/192.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/29.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/50.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/512.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/57.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/58.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/76.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/ios/87.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/LargeTile.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SmallTile.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/SplashScreen.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square150x150Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-lightunplated_targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.altform-unplated_targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-16.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-20.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-24.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-256.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-30.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-32.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-36.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-40.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-44.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-48.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-60.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-64.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-72.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-80.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Square44x44Logo.targetsize-96.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/StoreLogo.scale-400.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-100.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-125.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-150.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-200.png +0 -0
- package/dist/apps/chat-ui/assets/pwa-images/windows/Wide310x150Logo.scale-400.png +0 -0
- package/dist/apps/chat-ui/index.html +8 -3
- package/dist/apps/chat-ui/manifest.webmanifest +25 -0
- package/dist/apps/chat-ui/sw.js +41 -0
- package/dist/apps/chat-vscode-web/assets/index-B5QK07zO.css +2 -0
- package/dist/apps/chat-vscode-web/assets/index-C3GTPyDo.js +41 -0
- package/dist/apps/chat-vscode-web/index.html +14 -0
- package/dist/apps/cli-ui/InkSessionApp.js +1218 -0
- package/dist/apps/cli-ui/InkTerminalLine.js +53 -0
- package/dist/apps/cli-ui/InkTerminalRow.js +304 -0
- package/dist/apps/cli-ui/InkTerminalView.js +25 -0
- package/dist/apps/cli-ui/cliSessionsCommand.js +232 -0
- package/dist/apps/cli-ui/index.js +8 -0
- package/dist/apps/cli-ui/inkColors.js +67 -0
- package/dist/apps/cli-ui/inkJson.js +244 -0
- package/dist/apps/cli-ui/inkMarkdown.js +122 -0
- package/dist/apps/context-files-ui/assets/{dist-DFi2YGux.js → dist-BOiGdrG-.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-DyfSeBMu.js → dist-DK01b7x4.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-CwbH_3RN.js → dist-DPG9jOQ-.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-dTBsFYAl.js → dist-Dp5AH00p.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-CxRLRmMx.js → dist-DqYw0LH7.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-MyZgX9K2.js → dist-TF5iO5ML.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-DQXzt2Ng.js → dist-TbjAhles.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-YwR9dpb-.js → dist-ZsBbt0uY.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-CKQF1zEu.js → dist-kmsvtHkH.js} +1 -1
- package/dist/apps/context-files-ui/assets/{dist-BJW3917N.js → dist-vnd7PMu3.js} +1 -1
- package/dist/apps/context-files-ui/assets/{index-BwRDoHMC.css → index-B92tL3Pp.css} +1 -1
- package/dist/apps/context-files-ui/assets/{index-GwvjXytt.js → index-BhAWD3dv.js} +2 -2
- package/dist/apps/context-files-ui/index.html +2 -2
- package/dist/apps/vscode-artifacts/latest.vsix +0 -0
- package/dist/apps/vscode-artifacts/pibo-vscode-1.3.0.vsix +0 -0
- package/dist/auth/better-auth.js +2 -1
- package/dist/auth/login-actions.js +251 -0
- package/dist/auth/openai-codex-usage.js +147 -0
- package/dist/bin/pibo.js +0 -0
- package/dist/bin/rg.js +15 -0
- package/dist/cli-session/fakeSessionSource.js +804 -0
- package/dist/cli-session/index.js +3 -0
- package/dist/cli-session/localSessionSource.js +1144 -0
- package/dist/cli-session/sessionSource.js +13 -0
- package/dist/cli.js +159 -14
- package/dist/compute/cli.js +415 -0
- package/dist/compute/docker.js +827 -0
- package/dist/compute/resource-health.js +333 -0
- package/dist/compute/resource-policy.js +98 -0
- package/dist/config/config.js +9 -5
- package/dist/core/context-build.js +677 -0
- package/dist/core/model-defaults.js +51 -9
- package/dist/core/pibo-home.js +8 -0
- package/dist/core/profiles.js +48 -0
- package/dist/core/provider-telemetry.js +222 -0
- package/dist/core/routed-session.js +441 -47
- package/dist/core/runtime-telemetry.js +853 -0
- package/dist/core/runtime.js +103 -15
- package/dist/core/session-errors.js +47 -0
- package/dist/core/session-model.js +39 -0
- package/dist/core/session-router.js +292 -62
- package/dist/core/shared-app.js +17 -0
- package/dist/core/skill-expansion.js +43 -0
- package/dist/core/system-prompt-template.js +9 -9
- package/dist/core/telemetry-staleness.js +128 -0
- package/dist/core/test-output-compaction.js +145 -0
- package/dist/core/user-settings.js +73 -0
- package/dist/cron/channel.js +28 -0
- package/dist/cron/cli.js +230 -0
- package/dist/cron/plugin.js +11 -0
- package/dist/cron/schedule.js +214 -0
- package/dist/cron/service.js +177 -0
- package/dist/cron/store.js +349 -0
- package/dist/cron/types.js +1 -0
- package/dist/data/cli.js +184 -0
- package/dist/data/event-log.js +106 -0
- package/dist/data/final-app-space-cutover-migration.js +728 -0
- package/dist/data/ingest-service.js +389 -0
- package/dist/data/message-store.js +62 -0
- package/dist/data/navigation-store.js +75 -0
- package/dist/data/observation-store.js +46 -0
- package/dist/data/payload-store.js +144 -0
- package/dist/data/pibo-store.js +59 -0
- package/dist/data/schema.js +434 -0
- package/dist/data/session-store.js +63 -0
- package/dist/data/shared-app-migration.js +757 -0
- package/dist/data/sqlite-schema.js +12 -0
- package/dist/data/telemetry-preview.js +65 -0
- package/dist/data/telemetry-queries.js +212 -0
- package/dist/data/telemetry-retention.js +50 -0
- package/dist/data/telemetry-rows.js +158 -0
- package/dist/data/telemetry.js +357 -0
- package/dist/debug/delta-compaction.js +99 -0
- package/dist/debug/detail-format.js +86 -0
- package/dist/debug/events.js +149 -29
- package/dist/debug/failures.js +162 -0
- package/dist/debug/index.js +655 -30
- package/dist/debug/messages.js +185 -0
- package/dist/debug/next-commands.js +6 -0
- package/dist/debug/payloads.js +123 -0
- package/dist/debug/pty.js +924 -0
- package/dist/debug/session.js +45 -15
- package/dist/debug/sql.js +1 -1
- package/dist/debug/stores.js +18 -13
- package/dist/debug/summary.js +72 -0
- package/dist/debug/telemetry.js +649 -0
- package/dist/debug/tools.js +168 -0
- package/dist/debug/trace-render-check.js +151 -0
- package/dist/debug/trace.js +152 -27
- package/dist/debug/web-artifacts.js +63 -0
- package/dist/debug/web-options.js +313 -0
- package/dist/debug/web-render-analysis.js +310 -0
- package/dist/debug/web-snapshot-browser-scripts.js +303 -0
- package/dist/debug/web-streaming-benchmark-analysis.js +605 -0
- package/dist/debug/web-streaming-browser-library.js +928 -0
- package/dist/debug/web-streaming-browser-scripts.js +242 -0
- package/dist/debug/web-streaming-provider-telemetry.js +194 -0
- package/dist/debug/web-streaming-report.js +493 -0
- package/dist/debug/web-streaming-types.js +1 -0
- package/dist/debug/web.js +574 -0
- package/dist/gateway/backup.js +83 -0
- package/dist/gateway/cli.js +511 -0
- package/dist/gateway/fallback.js +155 -0
- package/dist/gateway/pidfile.js +84 -0
- package/dist/gateway/protocol.js +16 -0
- package/dist/gateway/server.js +172 -17
- package/dist/gateway/tool.js +54 -51
- package/dist/gateway/web.js +74 -2
- package/dist/index.js +3 -1
- package/dist/local/client.js +3 -3
- package/dist/local/extension.js +8 -5
- package/dist/plugins/builtin.js +251 -49
- package/dist/plugins/chat-vscode-web.js +28 -0
- package/dist/plugins/codex-compat.js +0 -41
- package/dist/plugins/context-files.js +98 -18
- package/dist/plugins/dev-auth.js +124 -0
- package/dist/plugins/native-tooling.js +15 -0
- package/dist/plugins/registry.js +49 -1
- package/dist/plugins/web-annotations.js +27 -0
- package/dist/providers/minimax.js +70 -0
- package/dist/providers/openai-compat.js +48 -0
- package/dist/ralph/channel.js +8 -0
- package/dist/ralph/cli.js +152 -0
- package/dist/ralph/plugin.js +14 -0
- package/dist/ralph/service.js +271 -0
- package/dist/ralph/stopping.js +151 -0
- package/dist/ralph/store.js +450 -0
- package/dist/ralph/templates.js +200 -0
- package/dist/ralph/types.js +1 -0
- package/dist/reliability/store.js +42 -26
- package/dist/runs/registry.js +72 -35
- package/dist/session-ui/commandCatalog.js +193 -0
- package/dist/session-ui/commandResults.js +95 -0
- package/dist/session-ui/index.js +7 -0
- package/dist/session-ui/ownerViewModel.js +27 -0
- package/dist/session-ui/roomSessionViewModel.js +69 -0
- package/dist/session-ui/statusViewModel.js +127 -0
- package/dist/session-ui/terminalCards.js +210 -0
- package/dist/session-ui/terminalRows.js +937 -0
- package/dist/session-ui/terminalValue.js +45 -0
- package/dist/sessions/pibo-data-store.js +178 -0
- package/dist/sessions/sqlite-store.js +78 -12
- package/dist/sessions/store.js +11 -4
- package/dist/sessions/workflow-session-kind.js +20 -0
- package/dist/setup/cli.js +567 -0
- package/dist/shared/trace-async-agent-runs.js +127 -0
- package/dist/shared/trace-engine.js +96 -0
- package/dist/shared/trace-event-projection.js +679 -0
- package/dist/shared/trace-live-reducer.js +191 -0
- package/dist/shared/trace-nodes.js +76 -0
- package/dist/shared/trace-order.js +11 -10
- package/dist/shared/trace-patch-nodes.js +83 -0
- package/dist/shared/trace-run-notifications.js +69 -0
- package/dist/shared/trace-subagent-links.js +46 -0
- package/dist/shared/trace-transcript.js +303 -0
- package/dist/shared/trace-types.js +1 -0
- package/dist/shared-app.js +4 -0
- package/dist/signals/aggregate.js +65 -0
- package/dist/signals/events.js +1 -0
- package/dist/signals/projector.js +158 -0
- package/dist/signals/registry.js +513 -0
- package/dist/signals/store.js +1 -0
- package/dist/signals/types.js +1 -0
- package/dist/skills/cli.js +117 -0
- package/dist/tools/agent-browser-leases.js +219 -0
- package/dist/tools/agent-browser-wrapper.js +99 -0
- package/dist/tools/browser-pool.js +623 -0
- package/dist/tools/browser-use-cdp.js +56 -4
- package/dist/tools/browser-use-leases.js +215 -37
- package/dist/tools/browser-use-wrapper.js +508 -65
- package/dist/tools/cdp-client.js +189 -0
- package/dist/tools/guides.js +203 -4
- package/dist/tools/index.js +666 -16
- package/dist/tools/npm-runtime.js +136 -0
- package/dist/tools/registry.js +107 -8
- package/dist/tools/runtime/index.js +3 -0
- package/dist/tools/runtime/node-backend.js +225 -0
- package/dist/tools/runtime/node-worker-source.js +206 -0
- package/dist/tools/runtime/python-backend.js +227 -0
- package/dist/tools/runtime/python-worker-source.js +178 -0
- package/dist/tools/runtime/registry.js +255 -0
- package/dist/tools/runtime/tool.js +168 -0
- package/dist/tools/runtime/types.js +1 -0
- package/dist/tools/web-search.js +2 -1
- package/dist/user-skills/installer.js +39 -36
- package/dist/user-skills/store.js +50 -11
- package/dist/vscode/cli.js +90 -0
- package/dist/vscode/code-cli.js +119 -0
- package/dist/vscode/install.js +177 -0
- package/dist/vscode/status.js +80 -0
- package/dist/vscode/types.js +14 -0
- package/dist/vscode/uninstall.js +49 -0
- package/dist/vscode/vsix-fetcher.js +131 -0
- package/dist/web/auth.js +5 -1
- package/dist/web/channel.js +86 -0
- package/dist/web/http.js +79 -14
- package/dist/web-annotations/api.js +348 -0
- package/dist/web-annotations/attachments.js +201 -0
- package/dist/web-annotations/cdp.js +1107 -0
- package/dist/web-annotations/index.js +7 -0
- package/dist/web-annotations/store.js +407 -0
- package/dist/web-annotations/tools.js +350 -0
- package/dist/web-annotations/types.js +34 -0
- package/dist/web-annotations/validation.js +288 -0
- package/docs/README.md +23 -0
- package/docs/ops/install-developer-host.md +112 -0
- package/docs/ops/install-user-host.md +76 -0
- package/docs/ops/upgrade-user-to-developer-host.md +69 -0
- package/docs/ops/vscode-extension-release.md +138 -0
- package/package.json +24 -9
- package/skills/builtin/pi-agent-harness/SKILL.md +24 -24
- package/skills/builtin/pibo-docker-system/SKILL.md +170 -0
- package/skills/builtin/pibo-spec-writing/SKILL.md +330 -0
- package/skills/builtin/prd/SKILL.md +143 -0
- package/skills/builtin/ralph-loop/SKILL.md +359 -0
- package/skills/builtin/ralph-prd-json/SKILL.md +123 -0
- package/skills/builtin/skill-creator/LICENSE.txt +202 -0
- package/skills/builtin/skill-creator/SKILL.md +513 -0
- package/skills/builtin/skill-creator/agents/analyzer.md +274 -0
- package/skills/builtin/skill-creator/agents/comparator.md +202 -0
- package/skills/builtin/skill-creator/agents/grader.md +223 -0
- package/skills/builtin/skill-creator/assets/eval_review.html +146 -0
- package/skills/builtin/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/builtin/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/builtin/skill-creator/references/schemas.md +430 -0
- package/skills/builtin/skill-creator/scripts/__init__.py +0 -0
- package/skills/builtin/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/builtin/skill-creator/scripts/generate_report.py +326 -0
- package/skills/builtin/skill-creator/scripts/improve_description.py +247 -0
- package/skills/builtin/skill-creator/scripts/package_skill.py +136 -0
- package/skills/builtin/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/builtin/skill-creator/scripts/run_eval.py +310 -0
- package/skills/builtin/skill-creator/scripts/run_loop.py +328 -0
- package/skills/builtin/skill-creator/scripts/utils.py +47 -0
- package/skills/builtin/web-annotations/SKILL.md +93 -0
- package/dist/apps/chat-ui/assets/index-D2Qxambd.js +0 -151
- package/dist/apps/chat-ui/assets/index-DXx368XK.css +0 -1
- package/dist/env.js +0 -32
- package/dist/plugins/core-tools.js +0 -94
- package/dist/plugins/example.js +0 -67
- package/dist/plugins/remote-agent.js +0 -9
- package/dist/remote/channel.js +0 -176
- package/dist/remote/client.js +0 -92
- package/dist/remote/examples/tui-controller.js +0 -263
- package/dist/remote/protocol.js +0 -55
- package/dist/remote/session-client.js +0 -189
- package/dist/sessions/bindings.js +0 -41
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { randomUUID, timingSafeEqual } from "node:crypto";
|
|
2
|
+
import { PiboWebHttpError, readJsonBody, responseJson } from "../web/http.js";
|
|
3
|
+
const DEFAULT_SEND_MESSAGE_TIMEOUT_MS = 10 * 60 * 1000;
|
|
4
|
+
function configuredApiKey(options) {
|
|
5
|
+
return options.apiKey ?? process.env.PIBO_SIMPLE_API_KEY;
|
|
6
|
+
}
|
|
7
|
+
function safeEqual(left, right) {
|
|
8
|
+
const leftBuffer = Buffer.from(left);
|
|
9
|
+
const rightBuffer = Buffer.from(right);
|
|
10
|
+
if (leftBuffer.length !== rightBuffer.length)
|
|
11
|
+
return false;
|
|
12
|
+
return timingSafeEqual(leftBuffer, rightBuffer);
|
|
13
|
+
}
|
|
14
|
+
function decodeBasicAuthCredential(value) {
|
|
15
|
+
const match = value.match(/^Basic\s+(.+)$/i);
|
|
16
|
+
if (!match)
|
|
17
|
+
return [];
|
|
18
|
+
try {
|
|
19
|
+
const decoded = Buffer.from(match[1] ?? "", "base64").toString("utf8");
|
|
20
|
+
return decoded.split(":").map((part) => part.trim()).filter(Boolean);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function requestApiKeyCandidates(request) {
|
|
27
|
+
const candidates = [];
|
|
28
|
+
const add = (value) => {
|
|
29
|
+
let trimmed = value?.trim();
|
|
30
|
+
if (!trimmed)
|
|
31
|
+
return;
|
|
32
|
+
candidates.push(trimmed);
|
|
33
|
+
while (/^(Bearer|Token)\s+/i.test(trimmed)) {
|
|
34
|
+
trimmed = trimmed.replace(/^(Bearer|Token)\s+/i, "").trim();
|
|
35
|
+
if (trimmed)
|
|
36
|
+
candidates.push(trimmed);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
add(request.headers.get("x-api-key"));
|
|
40
|
+
add(request.headers.get("api-key"));
|
|
41
|
+
const authorization = request.headers.get("authorization")?.trim();
|
|
42
|
+
add(authorization);
|
|
43
|
+
for (const credential of decodeBasicAuthCredential(authorization ?? ""))
|
|
44
|
+
add(credential);
|
|
45
|
+
return candidates;
|
|
46
|
+
}
|
|
47
|
+
function requireApiKey(request, options) {
|
|
48
|
+
const expected = configuredApiKey(options);
|
|
49
|
+
if (!expected)
|
|
50
|
+
throw new PiboWebHttpError("Simple agent API key is not configured", 503);
|
|
51
|
+
const candidates = requestApiKeyCandidates(request);
|
|
52
|
+
if (!candidates.some((candidate) => safeEqual(candidate, expected))) {
|
|
53
|
+
throw new PiboWebHttpError("Invalid API key", 401);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function requireString(value, name) {
|
|
57
|
+
if (typeof value !== "string" || value.trim().length === 0) {
|
|
58
|
+
throw new PiboWebHttpError(`${name} is required`, 400);
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
function parseSendMessageBody(body) {
|
|
63
|
+
return {
|
|
64
|
+
sessionId: requireString(body.sessionId, "sessionId"),
|
|
65
|
+
message: requireString(body.message, "message"),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function awaitAgentMessage(context, input) {
|
|
69
|
+
return new Promise((resolve, reject) => {
|
|
70
|
+
let lastAssistantMessage = "";
|
|
71
|
+
let settled = false;
|
|
72
|
+
let unsubscribe;
|
|
73
|
+
const finish = (callback) => {
|
|
74
|
+
if (settled)
|
|
75
|
+
return;
|
|
76
|
+
settled = true;
|
|
77
|
+
clearTimeout(timeout);
|
|
78
|
+
unsubscribe?.();
|
|
79
|
+
callback();
|
|
80
|
+
};
|
|
81
|
+
const timeout = setTimeout(() => {
|
|
82
|
+
finish(() => reject(new PiboWebHttpError("Timed out waiting for agent response", 504)));
|
|
83
|
+
}, input.timeoutMs);
|
|
84
|
+
unsubscribe = context.subscribe((event) => {
|
|
85
|
+
if (event.piboSessionId !== input.sessionId || !("eventId" in event) || event.eventId !== input.eventId)
|
|
86
|
+
return;
|
|
87
|
+
if (event.type === "assistant_message") {
|
|
88
|
+
lastAssistantMessage = event.text;
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (event.type === "session_error") {
|
|
92
|
+
finish(() => reject(new PiboWebHttpError(event.error, 500)));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (event.type === "message_finished") {
|
|
96
|
+
finish(() => resolve({ eventId: input.eventId, sessionId: input.sessionId, message: lastAssistantMessage }));
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
async function handleSendMessage(request, context, options) {
|
|
102
|
+
requireApiKey(request, options);
|
|
103
|
+
const input = parseSendMessageBody(await readJsonBody(request));
|
|
104
|
+
if (!context.getSession(input.sessionId)) {
|
|
105
|
+
throw new PiboWebHttpError("Unknown sessionId", 404);
|
|
106
|
+
}
|
|
107
|
+
const eventId = randomUUID();
|
|
108
|
+
const responsePromise = awaitAgentMessage(context, {
|
|
109
|
+
sessionId: input.sessionId,
|
|
110
|
+
eventId,
|
|
111
|
+
timeoutMs: options.timeoutMs ?? DEFAULT_SEND_MESSAGE_TIMEOUT_MS,
|
|
112
|
+
});
|
|
113
|
+
await context.emit({
|
|
114
|
+
type: "message",
|
|
115
|
+
piboSessionId: input.sessionId,
|
|
116
|
+
id: eventId,
|
|
117
|
+
text: input.message,
|
|
118
|
+
source: "service",
|
|
119
|
+
});
|
|
120
|
+
return responseJson(await responsePromise);
|
|
121
|
+
}
|
|
122
|
+
export async function handleSimpleAgentApiRequest(request, context, options = {}) {
|
|
123
|
+
const url = new URL(request.url);
|
|
124
|
+
if (url.pathname === "/api/health") {
|
|
125
|
+
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
126
|
+
return responseJson({ error: "Method not allowed" }, { status: 405, headers: { allow: "GET, HEAD" } });
|
|
127
|
+
}
|
|
128
|
+
return responseJson({ status: "ok" });
|
|
129
|
+
}
|
|
130
|
+
if (url.pathname !== "/api/send-message")
|
|
131
|
+
return undefined;
|
|
132
|
+
if (request.method !== "POST") {
|
|
133
|
+
return responseJson({ error: "Method not allowed" }, { status: 405, headers: { allow: "POST" } });
|
|
134
|
+
}
|
|
135
|
+
return handleSendMessage(request, context, options);
|
|
136
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { InitialSessionContextBuilder } from "../../core/profiles.js";
|
|
2
|
-
export function createCustomAgentProfileDefinition(agent) {
|
|
2
|
+
export function createCustomAgentProfileDefinition(agent, options = {}) {
|
|
3
|
+
const shouldWarnMissingReferences = options.missingReferenceMode !== "silent";
|
|
3
4
|
return {
|
|
4
5
|
name: agent.profileName,
|
|
5
6
|
aliases: [agent.id, `custom-agent:${agent.id}`],
|
|
@@ -16,6 +17,18 @@ export function createCustomAgentProfileDefinition(agent) {
|
|
|
16
17
|
builder.withMainModel(agent.mainModel);
|
|
17
18
|
if (agent.subagentModel)
|
|
18
19
|
builder.withSubagentModel(agent.subagentModel);
|
|
20
|
+
if (agent.thinkingLevel)
|
|
21
|
+
builder.withThinkingLevel(agent.thinkingLevel);
|
|
22
|
+
if (agent.mainThinkingLevel)
|
|
23
|
+
builder.withMainThinkingLevel(agent.mainThinkingLevel);
|
|
24
|
+
if (agent.subagentThinkingLevel)
|
|
25
|
+
builder.withSubagentThinkingLevel(agent.subagentThinkingLevel);
|
|
26
|
+
if (agent.fast !== undefined)
|
|
27
|
+
builder.withFastMode(agent.fast);
|
|
28
|
+
if (agent.mainFast !== undefined)
|
|
29
|
+
builder.withMainFastMode(agent.mainFast);
|
|
30
|
+
if (agent.subagentFast !== undefined)
|
|
31
|
+
builder.withSubagentFastMode(agent.subagentFast);
|
|
19
32
|
for (const skillName of agent.skills) {
|
|
20
33
|
try {
|
|
21
34
|
builder.addSkill(context.getSkill(skillName));
|
|
@@ -23,7 +36,8 @@ export function createCustomAgentProfileDefinition(agent) {
|
|
|
23
36
|
catch (error) {
|
|
24
37
|
if (!isUnknownSkillError(error, skillName))
|
|
25
38
|
throw error;
|
|
26
|
-
|
|
39
|
+
if (shouldWarnMissingReferences)
|
|
40
|
+
console.warn(`Skipping unknown skill "${skillName}" for custom agent "${agent.profileName}"`);
|
|
27
41
|
}
|
|
28
42
|
}
|
|
29
43
|
for (const contextFileKey of agent.contextFiles) {
|
|
@@ -33,7 +47,8 @@ export function createCustomAgentProfileDefinition(agent) {
|
|
|
33
47
|
catch (error) {
|
|
34
48
|
if (!isUnknownContextFileError(error, contextFileKey))
|
|
35
49
|
throw error;
|
|
36
|
-
|
|
50
|
+
if (shouldWarnMissingReferences)
|
|
51
|
+
console.warn(`Skipping unknown context file "${contextFileKey}" for custom agent "${agent.profileName}"`);
|
|
37
52
|
}
|
|
38
53
|
}
|
|
39
54
|
for (const toolName of agent.nativeTools)
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { randomUUID } from "node:crypto";
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
2
|
import { mkdirSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve } from "node:path";
|
|
4
|
+
import { piboHomePath } from "../../core/pibo-home.js";
|
|
4
5
|
import { DatabaseSync } from "node:sqlite";
|
|
5
6
|
import { DEFAULT_BUILTIN_TOOL_NAMES } from "../../core/profiles.js";
|
|
7
|
+
import { isPiboThinkingLevel } from "../../core/thinking.js";
|
|
6
8
|
import { findPiPackage } from "../../pi-packages/store.js";
|
|
7
9
|
const CUSTOM_AGENT_NAME_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
8
10
|
export class CustomAgentStore {
|
|
@@ -19,7 +21,6 @@ export class CustomAgentStore {
|
|
|
19
21
|
CREATE TABLE IF NOT EXISTS chat_agents (
|
|
20
22
|
id TEXT PRIMARY KEY,
|
|
21
23
|
profile_name TEXT NOT NULL UNIQUE,
|
|
22
|
-
owner_scope TEXT NOT NULL,
|
|
23
24
|
display_name TEXT NOT NULL,
|
|
24
25
|
description TEXT,
|
|
25
26
|
native_tools_json TEXT NOT NULL,
|
|
@@ -30,6 +31,12 @@ export class CustomAgentStore {
|
|
|
30
31
|
pi_packages_json TEXT NOT NULL DEFAULT '[]',
|
|
31
32
|
main_model_json TEXT,
|
|
32
33
|
subagent_model_json TEXT,
|
|
34
|
+
thinking_level TEXT,
|
|
35
|
+
main_thinking_level TEXT,
|
|
36
|
+
subagent_thinking_level TEXT,
|
|
37
|
+
fast INTEGER,
|
|
38
|
+
main_fast INTEGER,
|
|
39
|
+
subagent_fast INTEGER,
|
|
33
40
|
builtin_tools TEXT NOT NULL,
|
|
34
41
|
builtin_tool_names_json TEXT NOT NULL DEFAULT '["read","bash","edit","write"]',
|
|
35
42
|
auto_context_files INTEGER NOT NULL DEFAULT 1,
|
|
@@ -39,23 +46,23 @@ export class CustomAgentStore {
|
|
|
39
46
|
archived_at TEXT
|
|
40
47
|
);
|
|
41
48
|
|
|
42
|
-
CREATE INDEX IF NOT EXISTS idx_chat_agents_owner
|
|
43
|
-
ON chat_agents(owner_scope, updated_at);
|
|
44
49
|
`);
|
|
45
50
|
this.migrateArchivedAtColumn();
|
|
46
51
|
this.migrateAutoContextFilesColumn();
|
|
47
52
|
this.migrateMcpServersColumn();
|
|
48
53
|
this.migratePiPackagesColumn();
|
|
49
54
|
this.migrateModelColumns();
|
|
55
|
+
this.migrateThinkingLevelColumn();
|
|
56
|
+
this.migrateThinkingOptionColumns();
|
|
50
57
|
this.migrateBuiltinToolNamesColumn();
|
|
51
58
|
this.migrateLegacyProfileNames();
|
|
59
|
+
this.migrateDuplicateProfileNames();
|
|
52
60
|
}
|
|
53
|
-
list(
|
|
61
|
+
list(options = {}) {
|
|
54
62
|
this.migrateLegacyProfileNames();
|
|
63
|
+
this.migrateDuplicateProfileNames();
|
|
55
64
|
const archivedClause = options.includeArchived ? "" : " AND archived_at IS NULL";
|
|
56
|
-
const rows =
|
|
57
|
-
? this.db.prepare(`SELECT * FROM chat_agents WHERE owner_scope = ?${archivedClause} ORDER BY updated_at DESC`).all(ownerScope)
|
|
58
|
-
: this.db.prepare(`SELECT * FROM chat_agents WHERE 1 = 1${archivedClause} ORDER BY updated_at DESC`).all();
|
|
65
|
+
const rows = this.db.prepare(`SELECT * FROM chat_agents WHERE 1 = 1${archivedClause} ORDER BY updated_at DESC`).all();
|
|
59
66
|
return rows.map(agentFromRow);
|
|
60
67
|
}
|
|
61
68
|
get(id) {
|
|
@@ -72,7 +79,6 @@ export class CustomAgentStore {
|
|
|
72
79
|
const agent = {
|
|
73
80
|
id,
|
|
74
81
|
profileName,
|
|
75
|
-
ownerScope: input.ownerScope,
|
|
76
82
|
displayName: input.displayName,
|
|
77
83
|
description: input.description,
|
|
78
84
|
nativeTools: [...(input.nativeTools ?? [])],
|
|
@@ -83,6 +89,12 @@ export class CustomAgentStore {
|
|
|
83
89
|
piPackages: sanitizePiPackages(input.piPackages ?? []),
|
|
84
90
|
mainModel: sanitizeModelProfile(input.mainModel),
|
|
85
91
|
subagentModel: sanitizeModelProfile(input.subagentModel),
|
|
92
|
+
thinkingLevel: sanitizeThinkingLevel(input.thinkingLevel),
|
|
93
|
+
mainThinkingLevel: sanitizeThinkingLevel(input.mainThinkingLevel),
|
|
94
|
+
subagentThinkingLevel: sanitizeThinkingLevel(input.subagentThinkingLevel),
|
|
95
|
+
fast: sanitizeBoolean(input.fast),
|
|
96
|
+
mainFast: sanitizeBoolean(input.mainFast),
|
|
97
|
+
subagentFast: sanitizeBoolean(input.subagentFast),
|
|
86
98
|
builtinTools: input.builtinTools ?? "default",
|
|
87
99
|
builtinToolNames: sanitizeBuiltinToolNames(input.builtinToolNames),
|
|
88
100
|
autoContextFiles: input.autoContextFiles ?? true,
|
|
@@ -116,6 +128,12 @@ export class CustomAgentStore {
|
|
|
116
128
|
piPackages: input.piPackages ? sanitizePiPackages(input.piPackages) : existing.piPackages,
|
|
117
129
|
mainModel: input.mainModel === undefined ? existing.mainModel : sanitizeModelProfile(input.mainModel),
|
|
118
130
|
subagentModel: input.subagentModel === undefined ? existing.subagentModel : sanitizeModelProfile(input.subagentModel),
|
|
131
|
+
thinkingLevel: input.thinkingLevel === undefined ? existing.thinkingLevel : sanitizeThinkingLevel(input.thinkingLevel),
|
|
132
|
+
mainThinkingLevel: input.mainThinkingLevel === undefined ? existing.mainThinkingLevel : sanitizeThinkingLevel(input.mainThinkingLevel),
|
|
133
|
+
subagentThinkingLevel: input.subagentThinkingLevel === undefined ? existing.subagentThinkingLevel : sanitizeThinkingLevel(input.subagentThinkingLevel),
|
|
134
|
+
fast: input.fast === undefined ? existing.fast : sanitizeBoolean(input.fast),
|
|
135
|
+
mainFast: input.mainFast === undefined ? existing.mainFast : sanitizeBoolean(input.mainFast),
|
|
136
|
+
subagentFast: input.subagentFast === undefined ? existing.subagentFast : sanitizeBoolean(input.subagentFast),
|
|
119
137
|
builtinTools: input.builtinTools ?? existing.builtinTools,
|
|
120
138
|
builtinToolNames: input.builtinToolNames ? sanitizeBuiltinToolNames(input.builtinToolNames) : existing.builtinToolNames,
|
|
121
139
|
autoContextFiles: input.autoContextFiles ?? existing.autoContextFiles,
|
|
@@ -136,6 +154,12 @@ export class CustomAgentStore {
|
|
|
136
154
|
pi_packages_json = ?,
|
|
137
155
|
main_model_json = ?,
|
|
138
156
|
subagent_model_json = ?,
|
|
157
|
+
thinking_level = ?,
|
|
158
|
+
main_thinking_level = ?,
|
|
159
|
+
subagent_thinking_level = ?,
|
|
160
|
+
fast = ?,
|
|
161
|
+
main_fast = ?,
|
|
162
|
+
subagent_fast = ?,
|
|
139
163
|
builtin_tools = ?,
|
|
140
164
|
builtin_tool_names_json = ?,
|
|
141
165
|
auto_context_files = ?,
|
|
@@ -143,7 +167,7 @@ export class CustomAgentStore {
|
|
|
143
167
|
updated_at = ?
|
|
144
168
|
WHERE id = ?
|
|
145
169
|
`)
|
|
146
|
-
.run(updated.profileName, updated.displayName, updated.description ?? null, JSON.stringify(updated.nativeTools), JSON.stringify(updated.skills), JSON.stringify(updated.contextFiles), JSON.stringify(sanitizeSubagents(updated.subagents)), JSON.stringify(updated.mcpServers), JSON.stringify(updated.piPackages), updated.mainModel ? JSON.stringify(updated.mainModel) : null, updated.subagentModel ? JSON.stringify(updated.subagentModel) : null, updated.builtinTools, JSON.stringify(updated.builtinToolNames), updated.autoContextFiles ? 1 : 0, updated.runControl ? 1 : 0, updated.updatedAt, id);
|
|
170
|
+
.run(updated.profileName, updated.displayName, updated.description ?? null, JSON.stringify(updated.nativeTools), JSON.stringify(updated.skills), JSON.stringify(updated.contextFiles), JSON.stringify(sanitizeSubagents(updated.subagents)), JSON.stringify(updated.mcpServers), JSON.stringify(updated.piPackages), updated.mainModel ? JSON.stringify(updated.mainModel) : null, updated.subagentModel ? JSON.stringify(updated.subagentModel) : null, updated.thinkingLevel ?? null, updated.mainThinkingLevel ?? null, updated.subagentThinkingLevel ?? null, serializeBoolean(updated.fast), serializeBoolean(updated.mainFast), serializeBoolean(updated.subagentFast), updated.builtinTools, JSON.stringify(updated.builtinToolNames), updated.autoContextFiles ? 1 : 0, updated.runControl ? 1 : 0, updated.updatedAt, id);
|
|
147
171
|
return this.get(id);
|
|
148
172
|
}
|
|
149
173
|
setArchived(id, archived) {
|
|
@@ -170,7 +194,6 @@ export class CustomAgentStore {
|
|
|
170
194
|
INSERT INTO chat_agents (
|
|
171
195
|
id,
|
|
172
196
|
profile_name,
|
|
173
|
-
owner_scope,
|
|
174
197
|
display_name,
|
|
175
198
|
description,
|
|
176
199
|
native_tools_json,
|
|
@@ -181,6 +204,12 @@ export class CustomAgentStore {
|
|
|
181
204
|
pi_packages_json,
|
|
182
205
|
main_model_json,
|
|
183
206
|
subagent_model_json,
|
|
207
|
+
thinking_level,
|
|
208
|
+
main_thinking_level,
|
|
209
|
+
subagent_thinking_level,
|
|
210
|
+
fast,
|
|
211
|
+
main_fast,
|
|
212
|
+
subagent_fast,
|
|
184
213
|
builtin_tools,
|
|
185
214
|
builtin_tool_names_json,
|
|
186
215
|
auto_context_files,
|
|
@@ -188,9 +217,9 @@ export class CustomAgentStore {
|
|
|
188
217
|
created_at,
|
|
189
218
|
updated_at,
|
|
190
219
|
archived_at
|
|
191
|
-
) VALUES (
|
|
220
|
+
) VALUES (${Array.from({ length: 25 }, () => "?").join(", ")})
|
|
192
221
|
`)
|
|
193
|
-
.run(agent.id, agent.profileName, agent.
|
|
222
|
+
.run(agent.id, agent.profileName, agent.displayName, agent.description ?? null, JSON.stringify(agent.nativeTools), JSON.stringify(agent.skills), JSON.stringify(agent.contextFiles), JSON.stringify(sanitizeSubagents(agent.subagents)), JSON.stringify(agent.mcpServers), JSON.stringify(agent.piPackages), agent.mainModel ? JSON.stringify(agent.mainModel) : null, agent.subagentModel ? JSON.stringify(agent.subagentModel) : null, agent.thinkingLevel ?? null, agent.mainThinkingLevel ?? null, agent.subagentThinkingLevel ?? null, serializeBoolean(agent.fast), serializeBoolean(agent.mainFast), serializeBoolean(agent.subagentFast), agent.builtinTools, JSON.stringify(agent.builtinToolNames), agent.autoContextFiles ? 1 : 0, agent.runControl ? 1 : 0, agent.createdAt, agent.updatedAt, agent.archivedAt ?? null);
|
|
194
223
|
}
|
|
195
224
|
requireProfileNameAvailable(profileName, currentId) {
|
|
196
225
|
const row = this.db.prepare("SELECT id FROM chat_agents WHERE profile_name = ?").get(profileName);
|
|
@@ -211,6 +240,24 @@ export class CustomAgentStore {
|
|
|
211
240
|
.run(nextName, nextName, row.id);
|
|
212
241
|
}
|
|
213
242
|
}
|
|
243
|
+
migrateDuplicateProfileNames() {
|
|
244
|
+
const rows = this.db.prepare("SELECT id, profile_name, display_name, created_at, updated_at FROM chat_agents ORDER BY profile_name ASC, updated_at DESC, created_at DESC, id DESC").all();
|
|
245
|
+
const used = new Set();
|
|
246
|
+
for (const row of rows) {
|
|
247
|
+
if (!used.has(row.profile_name)) {
|
|
248
|
+
used.add(row.profile_name);
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
const nextName = uniqueAgentName(legacyAgentNameCandidate(row.profile_name, row.id), used);
|
|
252
|
+
used.add(nextName);
|
|
253
|
+
this.db
|
|
254
|
+
.prepare("UPDATE chat_agents SET profile_name = ?, display_name = ? WHERE id = ?")
|
|
255
|
+
.run(nextName, nextName, row.id);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
tableColumns() {
|
|
259
|
+
return new Set(this.db.prepare("PRAGMA table_info(chat_agents)").all().map((column) => column.name));
|
|
260
|
+
}
|
|
214
261
|
migrateArchivedAtColumn() {
|
|
215
262
|
const columns = new Set(this.db.prepare("PRAGMA table_info(chat_agents)").all().map((column) => column.name));
|
|
216
263
|
if (!columns.has("archived_at")) {
|
|
@@ -244,6 +291,30 @@ export class CustomAgentStore {
|
|
|
244
291
|
this.db.prepare("ALTER TABLE chat_agents ADD COLUMN subagent_model_json TEXT").run();
|
|
245
292
|
}
|
|
246
293
|
}
|
|
294
|
+
migrateThinkingLevelColumn() {
|
|
295
|
+
const columns = new Set(this.db.prepare("PRAGMA table_info(chat_agents)").all().map((column) => column.name));
|
|
296
|
+
if (!columns.has("thinking_level")) {
|
|
297
|
+
this.db.prepare("ALTER TABLE chat_agents ADD COLUMN thinking_level TEXT").run();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
migrateThinkingOptionColumns() {
|
|
301
|
+
const columns = new Set(this.db.prepare("PRAGMA table_info(chat_agents)").all().map((column) => column.name));
|
|
302
|
+
if (!columns.has("main_thinking_level")) {
|
|
303
|
+
this.db.prepare("ALTER TABLE chat_agents ADD COLUMN main_thinking_level TEXT").run();
|
|
304
|
+
}
|
|
305
|
+
if (!columns.has("subagent_thinking_level")) {
|
|
306
|
+
this.db.prepare("ALTER TABLE chat_agents ADD COLUMN subagent_thinking_level TEXT").run();
|
|
307
|
+
}
|
|
308
|
+
if (!columns.has("fast")) {
|
|
309
|
+
this.db.prepare("ALTER TABLE chat_agents ADD COLUMN fast INTEGER").run();
|
|
310
|
+
}
|
|
311
|
+
if (!columns.has("main_fast")) {
|
|
312
|
+
this.db.prepare("ALTER TABLE chat_agents ADD COLUMN main_fast INTEGER").run();
|
|
313
|
+
}
|
|
314
|
+
if (!columns.has("subagent_fast")) {
|
|
315
|
+
this.db.prepare("ALTER TABLE chat_agents ADD COLUMN subagent_fast INTEGER").run();
|
|
316
|
+
}
|
|
317
|
+
}
|
|
247
318
|
migrateBuiltinToolNamesColumn() {
|
|
248
319
|
const columns = new Set(this.db.prepare("PRAGMA table_info(chat_agents)").all().map((column) => column.name));
|
|
249
320
|
if (!columns.has("builtin_tool_names_json")) {
|
|
@@ -251,14 +322,13 @@ export class CustomAgentStore {
|
|
|
251
322
|
}
|
|
252
323
|
}
|
|
253
324
|
}
|
|
254
|
-
export function createDefaultCustomAgentStore(
|
|
255
|
-
return new CustomAgentStore(
|
|
325
|
+
export function createDefaultCustomAgentStore(_cwd) {
|
|
326
|
+
return new CustomAgentStore(piboHomePath("chat-agents.sqlite"));
|
|
256
327
|
}
|
|
257
328
|
function agentFromRow(row) {
|
|
258
329
|
return {
|
|
259
330
|
id: row.id,
|
|
260
331
|
profileName: row.profile_name,
|
|
261
|
-
ownerScope: row.owner_scope,
|
|
262
332
|
displayName: row.display_name,
|
|
263
333
|
description: row.description ?? undefined,
|
|
264
334
|
nativeTools: parseStringArray(row.native_tools_json),
|
|
@@ -269,6 +339,12 @@ function agentFromRow(row) {
|
|
|
269
339
|
piPackages: parseStringArray(row.pi_packages_json),
|
|
270
340
|
mainModel: parseModelProfile(row.main_model_json),
|
|
271
341
|
subagentModel: parseModelProfile(row.subagent_model_json),
|
|
342
|
+
thinkingLevel: sanitizeThinkingLevel(row.thinking_level),
|
|
343
|
+
mainThinkingLevel: sanitizeThinkingLevel(row.main_thinking_level),
|
|
344
|
+
subagentThinkingLevel: sanitizeThinkingLevel(row.subagent_thinking_level),
|
|
345
|
+
fast: parseBoolean(row.fast),
|
|
346
|
+
mainFast: parseBoolean(row.main_fast),
|
|
347
|
+
subagentFast: parseBoolean(row.subagent_fast),
|
|
272
348
|
builtinTools: row.builtin_tools,
|
|
273
349
|
builtinToolNames: sanitizeBuiltinToolNames(parseStringArray(row.builtin_tool_names_json)),
|
|
274
350
|
autoContextFiles: row.auto_context_files !== 0,
|
|
@@ -298,6 +374,22 @@ function sanitizePiPackages(value) {
|
|
|
298
374
|
}
|
|
299
375
|
return packages;
|
|
300
376
|
}
|
|
377
|
+
function sanitizeThinkingLevel(value) {
|
|
378
|
+
return typeof value === "string" && isPiboThinkingLevel(value) ? value : undefined;
|
|
379
|
+
}
|
|
380
|
+
function sanitizeBoolean(value) {
|
|
381
|
+
return typeof value === "boolean" ? value : undefined;
|
|
382
|
+
}
|
|
383
|
+
function serializeBoolean(value) {
|
|
384
|
+
if (value === undefined)
|
|
385
|
+
return null;
|
|
386
|
+
return value ? 1 : 0;
|
|
387
|
+
}
|
|
388
|
+
function parseBoolean(value) {
|
|
389
|
+
if (value === null)
|
|
390
|
+
return undefined;
|
|
391
|
+
return value === 1;
|
|
392
|
+
}
|
|
301
393
|
function sanitizeBuiltinToolNames(value) {
|
|
302
394
|
const selected = new Set(uniqueStrings(value ?? DEFAULT_BUILTIN_TOOL_NAMES));
|
|
303
395
|
return DEFAULT_BUILTIN_TOOL_NAMES.filter((name) => selected.has(name));
|
|
@@ -368,6 +460,11 @@ function agentNameCandidate(displayName, id) {
|
|
|
368
460
|
return candidate;
|
|
369
461
|
return `agent-${id.replace(/^agent_/, "").replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "")}`;
|
|
370
462
|
}
|
|
463
|
+
function legacyAgentNameCandidate(profileName, id) {
|
|
464
|
+
const baseName = agentNameCandidate(profileName, id);
|
|
465
|
+
const hash = createHash("sha256").update(id).digest("hex").slice(0, 8);
|
|
466
|
+
return `${baseName}-legacy-${hash}`;
|
|
467
|
+
}
|
|
371
468
|
function uniqueAgentName(baseName, used) {
|
|
372
469
|
let name = baseName;
|
|
373
470
|
let suffix = 2;
|