@caupulican/pi-adaptative 0.80.85 → 0.80.88
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/CHANGELOG.md +160 -1
- package/dist/core/agent-session.d.ts +394 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1862 -46
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/autonomy/approval-gate.d.ts +4 -0
- package/dist/core/autonomy/approval-gate.d.ts.map +1 -0
- package/dist/core/autonomy/approval-gate.js +27 -0
- package/dist/core/autonomy/approval-gate.js.map +1 -0
- package/dist/core/autonomy/bounded-completion.d.ts +27 -0
- package/dist/core/autonomy/bounded-completion.d.ts.map +1 -0
- package/dist/core/autonomy/bounded-completion.js +44 -0
- package/dist/core/autonomy/bounded-completion.js.map +1 -0
- package/dist/core/autonomy/contracts.d.ts +129 -0
- package/dist/core/autonomy/contracts.d.ts.map +1 -0
- package/dist/core/autonomy/contracts.js +2 -0
- package/dist/core/autonomy/contracts.js.map +1 -0
- package/dist/core/autonomy/gates.d.ts +15 -0
- package/dist/core/autonomy/gates.d.ts.map +1 -0
- package/dist/core/autonomy/gates.js +205 -0
- package/dist/core/autonomy/gates.js.map +1 -0
- package/dist/core/autonomy/lane-tracker.d.ts +48 -0
- package/dist/core/autonomy/lane-tracker.d.ts.map +1 -0
- package/dist/core/autonomy/lane-tracker.js +125 -0
- package/dist/core/autonomy/lane-tracker.js.map +1 -0
- package/dist/core/autonomy/path-scope.d.ts +9 -0
- package/dist/core/autonomy/path-scope.d.ts.map +1 -0
- package/dist/core/autonomy/path-scope.js +122 -0
- package/dist/core/autonomy/path-scope.js.map +1 -0
- package/dist/core/autonomy/risk-assessment.d.ts +3 -0
- package/dist/core/autonomy/risk-assessment.d.ts.map +1 -0
- package/dist/core/autonomy/risk-assessment.js +122 -0
- package/dist/core/autonomy/risk-assessment.js.map +1 -0
- package/dist/core/autonomy/session-lane-record.d.ts +10 -0
- package/dist/core/autonomy/session-lane-record.d.ts.map +1 -0
- package/dist/core/autonomy/session-lane-record.js +36 -0
- package/dist/core/autonomy/session-lane-record.js.map +1 -0
- package/dist/core/autonomy/status.d.ts +40 -0
- package/dist/core/autonomy/status.d.ts.map +1 -0
- package/dist/core/autonomy/status.js +107 -0
- package/dist/core/autonomy/status.js.map +1 -0
- package/dist/core/autonomy/subagent-prompt.d.ts +21 -0
- package/dist/core/autonomy/subagent-prompt.d.ts.map +1 -0
- package/dist/core/autonomy/subagent-prompt.js +28 -0
- package/dist/core/autonomy/subagent-prompt.js.map +1 -0
- package/dist/core/autonomy/telemetry-events.d.ts +18 -0
- package/dist/core/autonomy/telemetry-events.d.ts.map +1 -0
- package/dist/core/autonomy/telemetry-events.js +60 -0
- package/dist/core/autonomy/telemetry-events.js.map +1 -0
- package/dist/core/context/artifact-retrieval.d.ts +49 -0
- package/dist/core/context/artifact-retrieval.d.ts.map +1 -0
- package/dist/core/context/artifact-retrieval.js +49 -0
- package/dist/core/context/artifact-retrieval.js.map +1 -0
- package/dist/core/context/context-artifacts.d.ts +94 -0
- package/dist/core/context/context-artifacts.d.ts.map +1 -0
- package/dist/core/context/context-artifacts.js +307 -0
- package/dist/core/context/context-artifacts.js.map +1 -0
- package/dist/core/context/context-audit.d.ts +66 -0
- package/dist/core/context/context-audit.d.ts.map +1 -0
- package/dist/core/context/context-audit.js +173 -0
- package/dist/core/context/context-audit.js.map +1 -0
- package/dist/core/context/context-item.d.ts +117 -0
- package/dist/core/context/context-item.d.ts.map +1 -0
- package/dist/core/context/context-item.js +36 -0
- package/dist/core/context/context-item.js.map +1 -0
- package/dist/core/context/context-prompt-enforcement.d.ts +73 -0
- package/dist/core/context/context-prompt-enforcement.d.ts.map +1 -0
- package/dist/core/context/context-prompt-enforcement.js +153 -0
- package/dist/core/context/context-prompt-enforcement.js.map +1 -0
- package/dist/core/context/context-prompt-policy.d.ts +90 -0
- package/dist/core/context/context-prompt-policy.d.ts.map +1 -0
- package/dist/core/context/context-prompt-policy.js +73 -0
- package/dist/core/context/context-prompt-policy.js.map +1 -0
- package/dist/core/context/context-retention.d.ts +36 -0
- package/dist/core/context/context-retention.d.ts.map +1 -0
- package/dist/core/context/context-retention.js +108 -0
- package/dist/core/context/context-retention.js.map +1 -0
- package/dist/core/context/context-store.d.ts +37 -0
- package/dist/core/context/context-store.d.ts.map +1 -0
- package/dist/core/context/context-store.js +45 -0
- package/dist/core/context/context-store.js.map +1 -0
- package/dist/core/context/memory-diagnostics.d.ts +50 -0
- package/dist/core/context/memory-diagnostics.d.ts.map +1 -0
- package/dist/core/context/memory-diagnostics.js +43 -0
- package/dist/core/context/memory-diagnostics.js.map +1 -0
- package/dist/core/context/memory-index-store.d.ts +28 -0
- package/dist/core/context/memory-index-store.d.ts.map +1 -0
- package/dist/core/context/memory-index-store.js +38 -0
- package/dist/core/context/memory-index-store.js.map +1 -0
- package/dist/core/context/memory-prompt-block.d.ts +34 -0
- package/dist/core/context/memory-prompt-block.d.ts.map +1 -0
- package/dist/core/context/memory-prompt-block.js +58 -0
- package/dist/core/context/memory-prompt-block.js.map +1 -0
- package/dist/core/context/memory-provider-contract.d.ts +114 -0
- package/dist/core/context/memory-provider-contract.d.ts.map +1 -0
- package/dist/core/context/memory-provider-contract.js +121 -0
- package/dist/core/context/memory-provider-contract.js.map +1 -0
- package/dist/core/context/memory-retrieval.d.ts +27 -0
- package/dist/core/context/memory-retrieval.d.ts.map +1 -0
- package/dist/core/context/memory-retrieval.js +91 -0
- package/dist/core/context/memory-retrieval.js.map +1 -0
- package/dist/core/context/okf-memory-provider.d.ts +26 -0
- package/dist/core/context/okf-memory-provider.d.ts.map +1 -0
- package/dist/core/context/okf-memory-provider.js +154 -0
- package/dist/core/context/okf-memory-provider.js.map +1 -0
- package/dist/core/context/okf-memory.d.ts +42 -0
- package/dist/core/context/okf-memory.d.ts.map +1 -0
- package/dist/core/context/okf-memory.js +175 -0
- package/dist/core/context/okf-memory.js.map +1 -0
- package/dist/core/context/policy-engine.d.ts +66 -0
- package/dist/core/context/policy-engine.d.ts.map +1 -0
- package/dist/core/context/policy-engine.js +171 -0
- package/dist/core/context/policy-engine.js.map +1 -0
- package/dist/core/context/policy-types.d.ts +102 -0
- package/dist/core/context/policy-types.d.ts.map +1 -0
- package/dist/core/context/policy-types.js +7 -0
- package/dist/core/context/policy-types.js.map +1 -0
- package/dist/core/context/sqlite-runtime-index.d.ts +19 -0
- package/dist/core/context/sqlite-runtime-index.d.ts.map +1 -0
- package/dist/core/context/sqlite-runtime-index.js +344 -0
- package/dist/core/context/sqlite-runtime-index.js.map +1 -0
- package/dist/core/context/storage-authority.d.ts +20 -0
- package/dist/core/context/storage-authority.d.ts.map +1 -0
- package/dist/core/context/storage-authority.js +51 -0
- package/dist/core/context/storage-authority.js.map +1 -0
- package/dist/core/context/tool-output-packer.d.ts +75 -0
- package/dist/core/context/tool-output-packer.d.ts.map +1 -0
- package/dist/core/context/tool-output-packer.js +77 -0
- package/dist/core/context/tool-output-packer.js.map +1 -0
- package/dist/core/cost/session-usage.d.ts +20 -0
- package/dist/core/cost/session-usage.d.ts.map +1 -0
- package/dist/core/cost/session-usage.js +164 -0
- package/dist/core/cost/session-usage.js.map +1 -0
- package/dist/core/delegation/session-worker-result.d.ts +10 -0
- package/dist/core/delegation/session-worker-result.d.ts.map +1 -0
- package/dist/core/delegation/session-worker-result.js +36 -0
- package/dist/core/delegation/session-worker-result.js.map +1 -0
- package/dist/core/delegation/worker-result.d.ts +9 -0
- package/dist/core/delegation/worker-result.d.ts.map +1 -0
- package/dist/core/delegation/worker-result.js +152 -0
- package/dist/core/delegation/worker-result.js.map +1 -0
- package/dist/core/delegation/worker-runner.d.ts +58 -0
- package/dist/core/delegation/worker-runner.d.ts.map +1 -0
- package/dist/core/delegation/worker-runner.js +188 -0
- package/dist/core/delegation/worker-runner.js.map +1 -0
- package/dist/core/extensions/builtin.d.ts +5 -1
- package/dist/core/extensions/builtin.d.ts.map +1 -1
- package/dist/core/extensions/builtin.js +23 -1
- package/dist/core/extensions/builtin.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +5 -1
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +13 -0
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/goals/goal-continuation-controller.d.ts +22 -0
- package/dist/core/goals/goal-continuation-controller.d.ts.map +1 -0
- package/dist/core/goals/goal-continuation-controller.js +88 -0
- package/dist/core/goals/goal-continuation-controller.js.map +1 -0
- package/dist/core/goals/goal-continuation-defaults.d.ts +10 -0
- package/dist/core/goals/goal-continuation-defaults.d.ts.map +1 -0
- package/dist/core/goals/goal-continuation-defaults.js +10 -0
- package/dist/core/goals/goal-continuation-defaults.js.map +1 -0
- package/dist/core/goals/goal-continuation-prompt.d.ts +18 -0
- package/dist/core/goals/goal-continuation-prompt.d.ts.map +1 -0
- package/dist/core/goals/goal-continuation-prompt.js +141 -0
- package/dist/core/goals/goal-continuation-prompt.js.map +1 -0
- package/dist/core/goals/goal-runtime-snapshot.d.ts +19 -0
- package/dist/core/goals/goal-runtime-snapshot.d.ts.map +1 -0
- package/dist/core/goals/goal-runtime-snapshot.js +23 -0
- package/dist/core/goals/goal-runtime-snapshot.js.map +1 -0
- package/dist/core/goals/goal-state.d.ts +87 -0
- package/dist/core/goals/goal-state.d.ts.map +1 -0
- package/dist/core/goals/goal-state.js +259 -0
- package/dist/core/goals/goal-state.js.map +1 -0
- package/dist/core/goals/goal-tool-core.d.ts +66 -0
- package/dist/core/goals/goal-tool-core.d.ts.map +1 -0
- package/dist/core/goals/goal-tool-core.js +146 -0
- package/dist/core/goals/goal-tool-core.js.map +1 -0
- package/dist/core/goals/session-goal-state.d.ts +10 -0
- package/dist/core/goals/session-goal-state.d.ts.map +1 -0
- package/dist/core/goals/session-goal-state.js +35 -0
- package/dist/core/goals/session-goal-state.js.map +1 -0
- package/dist/core/learning/learning-audit.d.ts +45 -0
- package/dist/core/learning/learning-audit.d.ts.map +1 -0
- package/dist/core/learning/learning-audit.js +139 -0
- package/dist/core/learning/learning-audit.js.map +1 -0
- package/dist/core/learning/learning-gate.d.ts +29 -0
- package/dist/core/learning/learning-gate.d.ts.map +1 -0
- package/dist/core/learning/learning-gate.js +150 -0
- package/dist/core/learning/learning-gate.js.map +1 -0
- package/dist/core/learning/session-learning-decision.d.ts +10 -0
- package/dist/core/learning/session-learning-decision.d.ts.map +1 -0
- package/dist/core/learning/session-learning-decision.js +36 -0
- package/dist/core/learning/session-learning-decision.js.map +1 -0
- package/dist/core/model-capability.d.ts +41 -0
- package/dist/core/model-capability.d.ts.map +1 -0
- package/dist/core/model-capability.js +101 -0
- package/dist/core/model-capability.js.map +1 -0
- package/dist/core/model-router/config-diagnostics.d.ts.map +1 -1
- package/dist/core/model-router/config-diagnostics.js +1 -0
- package/dist/core/model-router/config-diagnostics.js.map +1 -1
- package/dist/core/model-router/intent-classifier.d.ts +2 -0
- package/dist/core/model-router/intent-classifier.d.ts.map +1 -1
- package/dist/core/model-router/intent-classifier.js +154 -9
- package/dist/core/model-router/intent-classifier.js.map +1 -1
- package/dist/core/model-router/route-judge.d.ts +54 -0
- package/dist/core/model-router/route-judge.d.ts.map +1 -0
- package/dist/core/model-router/route-judge.js +128 -0
- package/dist/core/model-router/route-judge.js.map +1 -0
- package/dist/core/model-router/status.d.ts +4 -1
- package/dist/core/model-router/status.d.ts.map +1 -1
- package/dist/core/model-router/status.js +30 -6
- package/dist/core/model-router/status.js.map +1 -1
- package/dist/core/model-router/tool-escalation.d.ts +4 -6
- package/dist/core/model-router/tool-escalation.d.ts.map +1 -1
- package/dist/core/model-router/tool-escalation.js +1 -1
- package/dist/core/model-router/tool-escalation.js.map +1 -1
- package/dist/core/models/fitness-store.d.ts +40 -0
- package/dist/core/models/fitness-store.d.ts.map +1 -0
- package/dist/core/models/fitness-store.js +61 -0
- package/dist/core/models/fitness-store.js.map +1 -0
- package/dist/core/profile-registry.d.ts.map +1 -1
- package/dist/core/profile-registry.js +1 -1
- package/dist/core/profile-registry.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +2 -0
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +12 -4
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/research/automata-provider.d.ts +5 -0
- package/dist/core/research/automata-provider.d.ts.map +1 -0
- package/dist/core/research/automata-provider.js +15 -0
- package/dist/core/research/automata-provider.js.map +1 -0
- package/dist/core/research/evidence-bundle.d.ts +10 -0
- package/dist/core/research/evidence-bundle.d.ts.map +1 -0
- package/dist/core/research/evidence-bundle.js +116 -0
- package/dist/core/research/evidence-bundle.js.map +1 -0
- package/dist/core/research/model-fitness.d.ts +79 -0
- package/dist/core/research/model-fitness.d.ts.map +1 -0
- package/dist/core/research/model-fitness.js +257 -0
- package/dist/core/research/model-fitness.js.map +1 -0
- package/dist/core/research/research-gate.d.ts +11 -0
- package/dist/core/research/research-gate.d.ts.map +1 -0
- package/dist/core/research/research-gate.js +82 -0
- package/dist/core/research/research-gate.js.map +1 -0
- package/dist/core/research/research-runner.d.ts +59 -0
- package/dist/core/research/research-runner.d.ts.map +1 -0
- package/dist/core/research/research-runner.js +155 -0
- package/dist/core/research/research-runner.js.map +1 -0
- package/dist/core/research/session-evidence-bundle.d.ts +11 -0
- package/dist/core/research/session-evidence-bundle.d.ts.map +1 -0
- package/dist/core/research/session-evidence-bundle.js +55 -0
- package/dist/core/research/session-evidence-bundle.js.map +1 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +7 -1
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/settings-manager.d.ts +147 -4
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +285 -9
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +4 -0
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +18 -6
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +4 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/toolkit/script-registry.d.ts +34 -0
- package/dist/core/toolkit/script-registry.d.ts.map +1 -0
- package/dist/core/toolkit/script-registry.js +71 -0
- package/dist/core/toolkit/script-registry.js.map +1 -0
- package/dist/core/toolkit/script-runner.d.ts +28 -0
- package/dist/core/toolkit/script-runner.d.ts.map +1 -0
- package/dist/core/toolkit/script-runner.js +48 -0
- package/dist/core/toolkit/script-runner.js.map +1 -0
- package/dist/core/tools/artifact-retrieve.d.ts +23 -0
- package/dist/core/tools/artifact-retrieve.d.ts.map +1 -0
- package/dist/core/tools/artifact-retrieve.js +110 -0
- package/dist/core/tools/artifact-retrieve.js.map +1 -0
- package/dist/core/tools/delegate.d.ts +32 -0
- package/dist/core/tools/delegate.d.ts.map +1 -0
- package/dist/core/tools/delegate.js +60 -0
- package/dist/core/tools/delegate.js.map +1 -0
- package/dist/core/tools/fff-search-backend.d.ts +103 -0
- package/dist/core/tools/fff-search-backend.d.ts.map +1 -0
- package/dist/core/tools/fff-search-backend.js +151 -0
- package/dist/core/tools/fff-search-backend.js.map +1 -0
- package/dist/core/tools/find.d.ts +21 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +183 -10
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/goal.d.ts +35 -0
- package/dist/core/tools/goal.d.ts.map +1 -0
- package/dist/core/tools/goal.js +122 -0
- package/dist/core/tools/goal.js.map +1 -0
- package/dist/core/tools/grep.d.ts +21 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +272 -27
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +4 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +9 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/model-fitness.d.ts +30 -0
- package/dist/core/tools/model-fitness.d.ts.map +1 -0
- package/dist/core/tools/model-fitness.js +38 -0
- package/dist/core/tools/model-fitness.js.map +1 -0
- package/dist/core/tools/run-toolkit-script.d.ts +24 -0
- package/dist/core/tools/run-toolkit-script.d.ts.map +1 -0
- package/dist/core/tools/run-toolkit-script.js +103 -0
- package/dist/core/tools/run-toolkit-script.js.map +1 -0
- package/dist/core/tools/search-router.d.ts +75 -0
- package/dist/core/tools/search-router.d.ts.map +1 -0
- package/dist/core/tools/search-router.js +85 -0
- package/dist/core/tools/search-router.js.map +1 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +18 -16
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +13 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +471 -11
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +4 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +220 -39
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +3 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/utils/tools-manager.d.ts +2 -0
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +154 -2
- package/dist/utils/tools-manager.js.map +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +368 -12
- package/package.json +5 -4
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Container, getCapabilities, getKeybindings, Input, SelectList, SettingsList, Spacer, Text, } from "@caupulican/pi-tui";
|
|
2
2
|
import { formatHttpIdleTimeoutMs, HTTP_IDLE_TIMEOUT_CHOICES } from "../../../core/http-dispatcher.js";
|
|
3
|
-
import { DEFAULT_AUTONOMY_MAX_STALL_TURNS } from "../../../core/settings-manager.js";
|
|
3
|
+
import { DEFAULT_AUTONOMY_GOAL_AUTO_CONTINUE, DEFAULT_AUTONOMY_GOAL_AUTO_CONTINUE_DELAY_MS, DEFAULT_AUTONOMY_GOAL_CONTINUE_MAX_WALL_CLOCK_MINUTES, DEFAULT_AUTONOMY_GOAL_CONTINUE_TURNS, DEFAULT_AUTONOMY_MAX_STALL_TURNS, DEFAULT_RESEARCH_LANE_ENABLED, DEFAULT_RESEARCH_LANE_IDLE_DELAY_MS, DEFAULT_RESEARCH_LANE_MAX_RUNS_PER_SESSION, DEFAULT_RESEARCH_LANE_MAX_USD, DEFAULT_RESEARCH_LANE_MAX_WALL_CLOCK_MS, DEFAULT_WORKER_DELEGATION_ENABLED, DEFAULT_WORKER_DELEGATION_MAX_USD, DEFAULT_WORKER_DELEGATION_MAX_WALL_CLOCK_MS, } from "../../../core/settings-manager.js";
|
|
4
4
|
import { getSelectListTheme, getSettingsListTheme, theme } from "../theme/theme.js";
|
|
5
5
|
import { DynamicBorder } from "./dynamic-border.js";
|
|
6
6
|
import { keyDisplayText } from "./keybinding-hints.js";
|
|
@@ -19,7 +19,27 @@ const THINKING_DESCRIPTIONS = {
|
|
|
19
19
|
xhigh: "Maximum reasoning (~32k tokens)",
|
|
20
20
|
};
|
|
21
21
|
const AUTONOMY_MODES = ["off", "safe", "balanced", "full"];
|
|
22
|
-
const
|
|
22
|
+
const AUTONOMY_GOAL_CONTINUE_TURN_VALUES = ["1", "3", "5", "10", "20"];
|
|
23
|
+
const AUTONOMY_MAX_STALL_TURN_VALUES = ["0", "5", "10", "20", "30", "50", "100"];
|
|
24
|
+
const AUTONOMY_GOAL_CONTINUE_MAX_WALL_CLOCK_MINUTE_VALUES = ["0", "15", "30", "60", "120", "240", "480", "1440"];
|
|
25
|
+
const AUTONOMY_GOAL_AUTO_CONTINUE_DELAY_MS_VALUES = ["0", "250", "1000", "5000", "30000", "60000"];
|
|
26
|
+
const RESEARCH_LANE_MAX_USD_VALUES = ["0.05", "0.1", "0.25", "0.5", "1", "2"];
|
|
27
|
+
const RESEARCH_LANE_MAX_WALL_CLOCK_MS_VALUES = ["0", "30000", "60000", "120000", "300000", "600000"];
|
|
28
|
+
const RESEARCH_LANE_IDLE_DELAY_MS_VALUES = ["0", "250", "1000", "5000", "30000", "60000"];
|
|
29
|
+
const RESEARCH_LANE_MAX_RUNS_PER_SESSION_VALUES = ["0", "1", "3", "5", "10", "25", "50"];
|
|
30
|
+
const CONTEXT_POLICY_PRESERVE_RECENT_MESSAGES_VALUES = ["2", "4", "8", "16", "32"];
|
|
31
|
+
const CONTEXT_POLICY_MIN_CHARS_VALUES = ["300", "600", "1200", "2400", "4800"];
|
|
32
|
+
const CONTEXT_POLICY_ENFORCEMENT_DEFAULTS = {
|
|
33
|
+
enabled: false,
|
|
34
|
+
preserveRecentMessages: 8,
|
|
35
|
+
minChars: 1200,
|
|
36
|
+
};
|
|
37
|
+
const CONTEXT_MEMORY_RETRIEVAL_MAX_RESULTS_VALUES = ["1", "3", "5", "10", "20"];
|
|
38
|
+
const CONTEXT_MEMORY_RETRIEVAL_DEFAULTS = {
|
|
39
|
+
enabled: false,
|
|
40
|
+
maxResults: 5,
|
|
41
|
+
includeInPrompt: false,
|
|
42
|
+
};
|
|
23
43
|
const AUTO_LEARN_DEFAULTS = {
|
|
24
44
|
model: "active",
|
|
25
45
|
longSessionMessages: 32,
|
|
@@ -61,20 +81,60 @@ function autonomyModeValue(settings) {
|
|
|
61
81
|
}
|
|
62
82
|
function autonomySummary(settings) {
|
|
63
83
|
const mode = autonomyModeValue(settings);
|
|
64
|
-
const
|
|
84
|
+
const turns = settings.goalContinueTurns ?? DEFAULT_AUTONOMY_GOAL_CONTINUE_TURNS;
|
|
85
|
+
const stall = settings.maxStallTurns ?? DEFAULT_AUTONOMY_MAX_STALL_TURNS;
|
|
86
|
+
const autoContinue = settings.goalAutoContinue ?? DEFAULT_AUTONOMY_GOAL_AUTO_CONTINUE;
|
|
65
87
|
const modeLabel = mode === "full" ? "standing autonomy" : mode;
|
|
66
|
-
return `${modeLabel}, ${
|
|
88
|
+
return `${modeLabel}, ${turns} turns, stall ${stall}, auto ${autoContinue ? "on" : "off"}`;
|
|
89
|
+
}
|
|
90
|
+
function autonomyGoalContinueTurnsValue(settings) {
|
|
91
|
+
return String(settings.goalContinueTurns ?? DEFAULT_AUTONOMY_GOAL_CONTINUE_TURNS);
|
|
67
92
|
}
|
|
68
93
|
function autonomyMaxStallTurnsValue(settings) {
|
|
69
|
-
|
|
70
|
-
|
|
94
|
+
return String(settings.maxStallTurns ?? DEFAULT_AUTONOMY_MAX_STALL_TURNS);
|
|
95
|
+
}
|
|
96
|
+
function autonomyGoalContinueMaxWallClockMinutesValue(settings) {
|
|
97
|
+
return String(settings.goalContinueMaxWallClockMinutes ?? DEFAULT_AUTONOMY_GOAL_CONTINUE_MAX_WALL_CLOCK_MINUTES);
|
|
98
|
+
}
|
|
99
|
+
function autonomyGoalAutoContinueValue(settings) {
|
|
100
|
+
return String(settings.goalAutoContinue ?? DEFAULT_AUTONOMY_GOAL_AUTO_CONTINUE);
|
|
101
|
+
}
|
|
102
|
+
function autonomyGoalAutoContinueDelayMsValue(settings) {
|
|
103
|
+
return String(settings.goalAutoContinueDelayMs ?? DEFAULT_AUTONOMY_GOAL_AUTO_CONTINUE_DELAY_MS);
|
|
104
|
+
}
|
|
105
|
+
function researchLaneSummary(settings) {
|
|
106
|
+
if (!(settings.enabled ?? DEFAULT_RESEARCH_LANE_ENABLED))
|
|
107
|
+
return "disabled";
|
|
108
|
+
const maxUsd = settings.maxUsd ?? DEFAULT_RESEARCH_LANE_MAX_USD;
|
|
109
|
+
const maxRuns = settings.maxRunsPerSession ?? DEFAULT_RESEARCH_LANE_MAX_RUNS_PER_SESSION;
|
|
110
|
+
return `enabled ($${maxUsd}/pass, ${maxRuns} runs/session)`;
|
|
111
|
+
}
|
|
112
|
+
function workerDelegationSummary(settings) {
|
|
113
|
+
if (!(settings.enabled ?? DEFAULT_WORKER_DELEGATION_ENABLED))
|
|
114
|
+
return "disabled";
|
|
115
|
+
const maxUsd = settings.maxUsd ?? DEFAULT_WORKER_DELEGATION_MAX_USD;
|
|
116
|
+
return `enabled ($${maxUsd}/worker)`;
|
|
71
117
|
}
|
|
72
118
|
function autoLearnSummary(settings) {
|
|
73
119
|
return settings.enabled ? `enabled (${autoLearnModelValue(settings)})` : "disabled";
|
|
74
120
|
}
|
|
121
|
+
function contextPolicyEnforcementSummary(settings) {
|
|
122
|
+
if (!(settings.enabled ?? CONTEXT_POLICY_ENFORCEMENT_DEFAULTS.enabled))
|
|
123
|
+
return "disabled";
|
|
124
|
+
const preserve = settings.preserveRecentMessages ?? CONTEXT_POLICY_ENFORCEMENT_DEFAULTS.preserveRecentMessages;
|
|
125
|
+
const minChars = settings.minChars ?? CONTEXT_POLICY_ENFORCEMENT_DEFAULTS.minChars;
|
|
126
|
+
return `enabled (preserve ${preserve}, min ${minChars} chars)`;
|
|
127
|
+
}
|
|
128
|
+
function contextMemoryRetrievalSummary(settings) {
|
|
129
|
+
if (!(settings.enabled ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.enabled))
|
|
130
|
+
return "disabled";
|
|
131
|
+
const maxResults = settings.maxResults ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.maxResults;
|
|
132
|
+
const includeInPrompt = settings.includeInPrompt ?? CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.includeInPrompt;
|
|
133
|
+
return `enabled (max ${maxResults} results${includeInPrompt ? ", in prompt" : ""})`;
|
|
134
|
+
}
|
|
75
135
|
function modelRouterSummary(settings) {
|
|
76
136
|
const state = settings.enabled ? "enabled" : "disabled";
|
|
77
|
-
return `${state} · cheap: ${optionalStringValue(settings.cheapModel)} · expensive: ${optionalStringValue(settings.expensiveModel)} · learn: ${optionalStringValue(settings.learningModel, "active")}`;
|
|
137
|
+
return `${state} · cheap: ${optionalStringValue(settings.cheapModel)} · medium: ${optionalStringValue(settings.mediumModel)} · expensive: ${optionalStringValue(settings.expensiveModel)} · learn: ${optionalStringValue(settings.learningModel, "active")}`;
|
|
78
138
|
}
|
|
79
139
|
function buildAutoLearnModelOptions(settings, configuredModelOptions, currentModelPattern) {
|
|
80
140
|
const currentValue = autoLearnModelValue(settings);
|
|
@@ -305,6 +365,10 @@ class AutonomySettingsSubmenu extends Container {
|
|
|
305
365
|
this.state = {
|
|
306
366
|
mode: autonomyModeValue(settings),
|
|
307
367
|
maxStallTurns: settings.maxStallTurns ?? DEFAULT_AUTONOMY_MAX_STALL_TURNS,
|
|
368
|
+
goalContinueTurns: settings.goalContinueTurns ?? DEFAULT_AUTONOMY_GOAL_CONTINUE_TURNS,
|
|
369
|
+
goalContinueMaxWallClockMinutes: settings.goalContinueMaxWallClockMinutes ?? DEFAULT_AUTONOMY_GOAL_CONTINUE_MAX_WALL_CLOCK_MINUTES,
|
|
370
|
+
goalAutoContinue: settings.goalAutoContinue ?? DEFAULT_AUTONOMY_GOAL_AUTO_CONTINUE,
|
|
371
|
+
goalAutoContinueDelayMs: settings.goalAutoContinueDelayMs ?? DEFAULT_AUTONOMY_GOAL_AUTO_CONTINUE_DELAY_MS,
|
|
308
372
|
};
|
|
309
373
|
this.scope = scope;
|
|
310
374
|
const items = [
|
|
@@ -323,12 +387,40 @@ class AutonomySettingsSubmenu extends Container {
|
|
|
323
387
|
values: AUTONOMY_MODES,
|
|
324
388
|
},
|
|
325
389
|
{
|
|
326
|
-
id: "autonomy-goal-
|
|
327
|
-
label: "Goal
|
|
328
|
-
description: "
|
|
390
|
+
id: "autonomy-goal-auto-continue",
|
|
391
|
+
label: "Goal auto-continue",
|
|
392
|
+
description: "Inject bounded continuation prompts when Pi becomes idle with an active open goal",
|
|
393
|
+
currentValue: autonomyGoalAutoContinueValue(this.state),
|
|
394
|
+
values: ["true", "false"],
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
id: "autonomy-goal-continue-turns",
|
|
398
|
+
label: "Goal turns",
|
|
399
|
+
description: "Maximum continuation prompts in one idle or explicit goal loop",
|
|
400
|
+
currentValue: autonomyGoalContinueTurnsValue(this.state),
|
|
401
|
+
values: AUTONOMY_GOAL_CONTINUE_TURN_VALUES,
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
id: "autonomy-max-stall-turns",
|
|
405
|
+
label: "Goal stall limit",
|
|
406
|
+
description: "Maximum no-progress rounds before Pi stops continuing and asks the user",
|
|
329
407
|
currentValue: autonomyMaxStallTurnsValue(this.state),
|
|
330
408
|
values: AUTONOMY_MAX_STALL_TURN_VALUES,
|
|
331
409
|
},
|
|
410
|
+
{
|
|
411
|
+
id: "autonomy-goal-wall-clock-minutes",
|
|
412
|
+
label: "Goal max minutes",
|
|
413
|
+
description: "Wall-clock budget per goal continuation loop; 0 disables the time budget",
|
|
414
|
+
currentValue: autonomyGoalContinueMaxWallClockMinutesValue(this.state),
|
|
415
|
+
values: AUTONOMY_GOAL_CONTINUE_MAX_WALL_CLOCK_MINUTE_VALUES,
|
|
416
|
+
},
|
|
417
|
+
{
|
|
418
|
+
id: "autonomy-goal-auto-continue-delay-ms",
|
|
419
|
+
label: "Goal delay ms",
|
|
420
|
+
description: "Delay before idle auto-continuation starts; 0 starts immediately after idle",
|
|
421
|
+
currentValue: autonomyGoalAutoContinueDelayMsValue(this.state),
|
|
422
|
+
values: AUTONOMY_GOAL_AUTO_CONTINUE_DELAY_MS_VALUES,
|
|
423
|
+
},
|
|
332
424
|
];
|
|
333
425
|
this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
|
|
334
426
|
switch (id) {
|
|
@@ -338,9 +430,179 @@ class AutonomySettingsSubmenu extends Container {
|
|
|
338
430
|
case "autonomy-mode":
|
|
339
431
|
this.state = { ...this.state, mode: newValue };
|
|
340
432
|
break;
|
|
341
|
-
case "autonomy-goal-
|
|
433
|
+
case "autonomy-goal-auto-continue":
|
|
434
|
+
this.state = { ...this.state, goalAutoContinue: newValue === "true" };
|
|
435
|
+
break;
|
|
436
|
+
case "autonomy-goal-continue-turns":
|
|
437
|
+
this.state = { ...this.state, goalContinueTurns: Number(newValue) };
|
|
438
|
+
break;
|
|
439
|
+
case "autonomy-max-stall-turns":
|
|
342
440
|
this.state = { ...this.state, maxStallTurns: Number(newValue) };
|
|
343
441
|
break;
|
|
442
|
+
case "autonomy-goal-wall-clock-minutes":
|
|
443
|
+
this.state = { ...this.state, goalContinueMaxWallClockMinutes: Number(newValue) };
|
|
444
|
+
break;
|
|
445
|
+
case "autonomy-goal-auto-continue-delay-ms":
|
|
446
|
+
this.state = { ...this.state, goalAutoContinueDelayMs: Number(newValue) };
|
|
447
|
+
break;
|
|
448
|
+
default:
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
onChange({ ...this.state }, this.scope);
|
|
452
|
+
}, onCancel);
|
|
453
|
+
this.addChild(this.settingsList);
|
|
454
|
+
}
|
|
455
|
+
handleInput(data) {
|
|
456
|
+
this.settingsList.handleInput(data);
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
class ResearchLaneSettingsSubmenu extends Container {
|
|
460
|
+
settingsList;
|
|
461
|
+
state;
|
|
462
|
+
scope;
|
|
463
|
+
constructor(settings, onChange, onCancel, scope = "global") {
|
|
464
|
+
super();
|
|
465
|
+
this.state = {
|
|
466
|
+
...settings,
|
|
467
|
+
enabled: settings.enabled ?? DEFAULT_RESEARCH_LANE_ENABLED,
|
|
468
|
+
maxUsd: settings.maxUsd ?? DEFAULT_RESEARCH_LANE_MAX_USD,
|
|
469
|
+
maxWallClockMs: settings.maxWallClockMs ?? DEFAULT_RESEARCH_LANE_MAX_WALL_CLOCK_MS,
|
|
470
|
+
idleDelayMs: settings.idleDelayMs ?? DEFAULT_RESEARCH_LANE_IDLE_DELAY_MS,
|
|
471
|
+
maxRunsPerSession: settings.maxRunsPerSession ?? DEFAULT_RESEARCH_LANE_MAX_RUNS_PER_SESSION,
|
|
472
|
+
};
|
|
473
|
+
this.scope = scope;
|
|
474
|
+
const items = [
|
|
475
|
+
{
|
|
476
|
+
id: "research-lane-scope",
|
|
477
|
+
label: "Save scope",
|
|
478
|
+
description: "Save these research-lane settings globally or in the current project's .pi/settings.json",
|
|
479
|
+
currentValue: this.scope,
|
|
480
|
+
values: ["global", "project"],
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
id: "research-lane-enabled",
|
|
484
|
+
label: "Enabled",
|
|
485
|
+
description: "Run bounded, read-only background research when idle with an active goal (requires autonomy mode on)",
|
|
486
|
+
currentValue: String(this.state.enabled),
|
|
487
|
+
values: ["true", "false"],
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
id: "research-lane-max-usd",
|
|
491
|
+
label: "Budget per pass",
|
|
492
|
+
description: "USD budget per research pass; breaches mark the lane budget_exhausted in diagnostics",
|
|
493
|
+
currentValue: String(this.state.maxUsd),
|
|
494
|
+
values: RESEARCH_LANE_MAX_USD_VALUES,
|
|
495
|
+
},
|
|
496
|
+
{
|
|
497
|
+
id: "research-lane-max-wall-clock-ms",
|
|
498
|
+
label: "Max milliseconds",
|
|
499
|
+
description: "Wall-clock budget per research pass; 0 disables the time budget",
|
|
500
|
+
currentValue: String(this.state.maxWallClockMs),
|
|
501
|
+
values: RESEARCH_LANE_MAX_WALL_CLOCK_MS_VALUES,
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
id: "research-lane-idle-delay-ms",
|
|
505
|
+
label: "Idle delay ms",
|
|
506
|
+
description: "Delay before idle-triggered research starts; 0 starts immediately after idle",
|
|
507
|
+
currentValue: String(this.state.idleDelayMs),
|
|
508
|
+
values: RESEARCH_LANE_IDLE_DELAY_MS_VALUES,
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
id: "research-lane-max-runs-per-session",
|
|
512
|
+
label: "Runs per session",
|
|
513
|
+
description: "Maximum idle-triggered research passes per session; explicit /autonomy research is uncapped",
|
|
514
|
+
currentValue: String(this.state.maxRunsPerSession),
|
|
515
|
+
values: RESEARCH_LANE_MAX_RUNS_PER_SESSION_VALUES,
|
|
516
|
+
},
|
|
517
|
+
];
|
|
518
|
+
this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
|
|
519
|
+
switch (id) {
|
|
520
|
+
case "research-lane-scope":
|
|
521
|
+
this.scope = newValue;
|
|
522
|
+
break;
|
|
523
|
+
case "research-lane-enabled":
|
|
524
|
+
this.state = { ...this.state, enabled: newValue === "true" };
|
|
525
|
+
break;
|
|
526
|
+
case "research-lane-max-usd":
|
|
527
|
+
this.state = { ...this.state, maxUsd: Number(newValue) };
|
|
528
|
+
break;
|
|
529
|
+
case "research-lane-max-wall-clock-ms":
|
|
530
|
+
this.state = { ...this.state, maxWallClockMs: Number(newValue) };
|
|
531
|
+
break;
|
|
532
|
+
case "research-lane-idle-delay-ms":
|
|
533
|
+
this.state = { ...this.state, idleDelayMs: Number(newValue) };
|
|
534
|
+
break;
|
|
535
|
+
case "research-lane-max-runs-per-session":
|
|
536
|
+
this.state = { ...this.state, maxRunsPerSession: Number(newValue) };
|
|
537
|
+
break;
|
|
538
|
+
default:
|
|
539
|
+
return;
|
|
540
|
+
}
|
|
541
|
+
onChange({ ...this.state }, this.scope);
|
|
542
|
+
}, onCancel);
|
|
543
|
+
this.addChild(this.settingsList);
|
|
544
|
+
}
|
|
545
|
+
handleInput(data) {
|
|
546
|
+
this.settingsList.handleInput(data);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
class WorkerDelegationSettingsSubmenu extends Container {
|
|
550
|
+
settingsList;
|
|
551
|
+
state;
|
|
552
|
+
scope;
|
|
553
|
+
constructor(settings, onChange, onCancel, scope = "global") {
|
|
554
|
+
super();
|
|
555
|
+
this.state = {
|
|
556
|
+
...settings,
|
|
557
|
+
enabled: settings.enabled ?? DEFAULT_WORKER_DELEGATION_ENABLED,
|
|
558
|
+
maxUsd: settings.maxUsd ?? DEFAULT_WORKER_DELEGATION_MAX_USD,
|
|
559
|
+
maxWallClockMs: settings.maxWallClockMs ?? DEFAULT_WORKER_DELEGATION_MAX_WALL_CLOCK_MS,
|
|
560
|
+
};
|
|
561
|
+
this.scope = scope;
|
|
562
|
+
const items = [
|
|
563
|
+
{
|
|
564
|
+
id: "worker-delegation-scope",
|
|
565
|
+
label: "Save scope",
|
|
566
|
+
description: "Save these delegation settings globally or in the current project's .pi/settings.json",
|
|
567
|
+
currentValue: this.scope,
|
|
568
|
+
values: ["global", "project"],
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
id: "worker-delegation-enabled",
|
|
572
|
+
label: "Enabled",
|
|
573
|
+
description: "Allow the delegate tool to run bounded, read-only scout workers on a cheap model lane",
|
|
574
|
+
currentValue: String(this.state.enabled),
|
|
575
|
+
values: ["true", "false"],
|
|
576
|
+
},
|
|
577
|
+
{
|
|
578
|
+
id: "worker-delegation-max-usd",
|
|
579
|
+
label: "Budget per worker",
|
|
580
|
+
description: "USD budget per delegated worker; breaches mark the lane budget_exhausted in diagnostics",
|
|
581
|
+
currentValue: String(this.state.maxUsd),
|
|
582
|
+
values: RESEARCH_LANE_MAX_USD_VALUES,
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
id: "worker-delegation-max-wall-clock-ms",
|
|
586
|
+
label: "Max milliseconds",
|
|
587
|
+
description: "Wall-clock budget per delegated worker; 0 disables the time budget",
|
|
588
|
+
currentValue: String(this.state.maxWallClockMs),
|
|
589
|
+
values: RESEARCH_LANE_MAX_WALL_CLOCK_MS_VALUES,
|
|
590
|
+
},
|
|
591
|
+
];
|
|
592
|
+
this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
|
|
593
|
+
switch (id) {
|
|
594
|
+
case "worker-delegation-scope":
|
|
595
|
+
this.scope = newValue;
|
|
596
|
+
break;
|
|
597
|
+
case "worker-delegation-enabled":
|
|
598
|
+
this.state = { ...this.state, enabled: newValue === "true" };
|
|
599
|
+
break;
|
|
600
|
+
case "worker-delegation-max-usd":
|
|
601
|
+
this.state = { ...this.state, maxUsd: Number(newValue) };
|
|
602
|
+
break;
|
|
603
|
+
case "worker-delegation-max-wall-clock-ms":
|
|
604
|
+
this.state = { ...this.state, maxWallClockMs: Number(newValue) };
|
|
605
|
+
break;
|
|
344
606
|
default:
|
|
345
607
|
return;
|
|
346
608
|
}
|
|
@@ -500,6 +762,132 @@ class AutoLearnSettingsSubmenu extends Container {
|
|
|
500
762
|
this.settingsList.handleInput(data);
|
|
501
763
|
}
|
|
502
764
|
}
|
|
765
|
+
class ContextPolicyEnforcementSettingsSubmenu extends Container {
|
|
766
|
+
settingsList;
|
|
767
|
+
state;
|
|
768
|
+
scope;
|
|
769
|
+
constructor(settings, onChange, onCancel, scope = "global") {
|
|
770
|
+
super();
|
|
771
|
+
this.state = { ...settings };
|
|
772
|
+
this.scope = scope;
|
|
773
|
+
const items = [
|
|
774
|
+
{
|
|
775
|
+
id: "context-policy-scope",
|
|
776
|
+
label: "Save scope",
|
|
777
|
+
description: "Save this context/prompt-policy configuration globally or in the current project's .pi/settings.json",
|
|
778
|
+
currentValue: this.scope,
|
|
779
|
+
values: ["global", "project"],
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
id: "context-policy-enabled",
|
|
783
|
+
label: "Prompt policy enforcement",
|
|
784
|
+
description: "Opt-in: stub stale artifact-backed grep/find output in the model-visible prompt only. Never touches transcript/session history. Requires the artifact_retrieve tool to be active this turn (not configurable here -- it's a runtime fact, not a setting).",
|
|
785
|
+
currentValue: booleanSettingValue(this.state.enabled, CONTEXT_POLICY_ENFORCEMENT_DEFAULTS.enabled),
|
|
786
|
+
values: ["false", "true"],
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
id: "context-policy-preserve-recent-messages",
|
|
790
|
+
label: "Preserve recent messages",
|
|
791
|
+
description: "Never stub a tool result within this many of the most recent messages",
|
|
792
|
+
currentValue: numberSettingValue(this.state.preserveRecentMessages, CONTEXT_POLICY_ENFORCEMENT_DEFAULTS.preserveRecentMessages),
|
|
793
|
+
values: CONTEXT_POLICY_PRESERVE_RECENT_MESSAGES_VALUES,
|
|
794
|
+
},
|
|
795
|
+
{
|
|
796
|
+
id: "context-policy-min-chars",
|
|
797
|
+
label: "Minimum chars before stubbing",
|
|
798
|
+
description: "Only stub a tool result whose original provider-visible text is at least this many characters",
|
|
799
|
+
currentValue: numberSettingValue(this.state.minChars, CONTEXT_POLICY_ENFORCEMENT_DEFAULTS.minChars),
|
|
800
|
+
values: CONTEXT_POLICY_MIN_CHARS_VALUES,
|
|
801
|
+
},
|
|
802
|
+
];
|
|
803
|
+
this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
|
|
804
|
+
switch (id) {
|
|
805
|
+
case "context-policy-scope":
|
|
806
|
+
this.scope = newValue;
|
|
807
|
+
break;
|
|
808
|
+
case "context-policy-enabled":
|
|
809
|
+
this.state = { ...this.state, enabled: newValue === "true" };
|
|
810
|
+
break;
|
|
811
|
+
case "context-policy-preserve-recent-messages":
|
|
812
|
+
this.state = { ...this.state, preserveRecentMessages: parseInt(newValue, 10) };
|
|
813
|
+
break;
|
|
814
|
+
case "context-policy-min-chars":
|
|
815
|
+
this.state = { ...this.state, minChars: parseInt(newValue, 10) };
|
|
816
|
+
break;
|
|
817
|
+
default:
|
|
818
|
+
return;
|
|
819
|
+
}
|
|
820
|
+
onChange({ ...this.state }, this.scope);
|
|
821
|
+
}, onCancel);
|
|
822
|
+
this.addChild(this.settingsList);
|
|
823
|
+
}
|
|
824
|
+
handleInput(data) {
|
|
825
|
+
this.settingsList.handleInput(data);
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
class ContextMemoryRetrievalSettingsSubmenu extends Container {
|
|
829
|
+
settingsList;
|
|
830
|
+
state;
|
|
831
|
+
scope;
|
|
832
|
+
constructor(settings, onChange, onCancel, scope = "global") {
|
|
833
|
+
super();
|
|
834
|
+
this.state = { ...settings };
|
|
835
|
+
this.scope = scope;
|
|
836
|
+
const items = [
|
|
837
|
+
{
|
|
838
|
+
id: "context-memory-scope",
|
|
839
|
+
label: "Save scope",
|
|
840
|
+
description: "Save this local memory-retrieval configuration globally or in the current project's .pi/settings.json",
|
|
841
|
+
currentValue: this.scope,
|
|
842
|
+
values: ["global", "project"],
|
|
843
|
+
},
|
|
844
|
+
{
|
|
845
|
+
id: "context-memory-enabled",
|
|
846
|
+
label: "Local memory retrieval",
|
|
847
|
+
description: "Opt-in: each turn, search local Pi OKF memory documents (under <agent dir>/okf-memory) for evidence related to the latest message. By default this is observe-only (recorded for inspection only). Enable 'Include in prompt' below to also surface a bounded, source-labeled evidence block to the model. Local-only; never queries an external provider.",
|
|
848
|
+
currentValue: booleanSettingValue(this.state.enabled, CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.enabled),
|
|
849
|
+
values: ["false", "true"],
|
|
850
|
+
},
|
|
851
|
+
{
|
|
852
|
+
id: "context-memory-max-results",
|
|
853
|
+
label: "Max results",
|
|
854
|
+
description: "Maximum number of memory items to retrieve per query (1-20)",
|
|
855
|
+
currentValue: numberSettingValue(this.state.maxResults, CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.maxResults),
|
|
856
|
+
values: CONTEXT_MEMORY_RETRIEVAL_MAX_RESULTS_VALUES,
|
|
857
|
+
},
|
|
858
|
+
{
|
|
859
|
+
id: "context-memory-include-in-prompt",
|
|
860
|
+
label: "Include in prompt",
|
|
861
|
+
description: "Opt-in, requires 'Local memory retrieval' enabled above: surfaces retrieved memory as a bounded, source-labeled, untrusted-evidence block in the model prompt only -- never the transcript, never treated as an instruction or rule. Default off.",
|
|
862
|
+
currentValue: booleanSettingValue(this.state.includeInPrompt, CONTEXT_MEMORY_RETRIEVAL_DEFAULTS.includeInPrompt),
|
|
863
|
+
values: ["false", "true"],
|
|
864
|
+
},
|
|
865
|
+
];
|
|
866
|
+
this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
|
|
867
|
+
switch (id) {
|
|
868
|
+
case "context-memory-scope":
|
|
869
|
+
this.scope = newValue;
|
|
870
|
+
break;
|
|
871
|
+
case "context-memory-enabled":
|
|
872
|
+
this.state = { ...this.state, enabled: newValue === "true" };
|
|
873
|
+
break;
|
|
874
|
+
case "context-memory-max-results":
|
|
875
|
+
this.state = { ...this.state, maxResults: parseInt(newValue, 10) };
|
|
876
|
+
break;
|
|
877
|
+
case "context-memory-include-in-prompt":
|
|
878
|
+
this.state = { ...this.state, includeInPrompt: newValue === "true" };
|
|
879
|
+
break;
|
|
880
|
+
default:
|
|
881
|
+
return;
|
|
882
|
+
}
|
|
883
|
+
onChange({ ...this.state }, this.scope);
|
|
884
|
+
}, onCancel);
|
|
885
|
+
this.addChild(this.settingsList);
|
|
886
|
+
}
|
|
887
|
+
handleInput(data) {
|
|
888
|
+
this.settingsList.handleInput(data);
|
|
889
|
+
}
|
|
890
|
+
}
|
|
503
891
|
class ModelRouterSettingsSubmenu extends Container {
|
|
504
892
|
settingsList;
|
|
505
893
|
state;
|
|
@@ -519,6 +907,13 @@ class ModelRouterSettingsSubmenu extends Container {
|
|
|
519
907
|
includeActive: false,
|
|
520
908
|
unsetDescription: "Clear cheap routing model; research turns fall back to the active session model",
|
|
521
909
|
});
|
|
910
|
+
const mediumModelOptions = buildModelRouterRoleModelOptions({
|
|
911
|
+
currentValue: this.state.mediumModel,
|
|
912
|
+
configuredModelOptions: modelOptions,
|
|
913
|
+
currentModelPattern,
|
|
914
|
+
includeActive: false,
|
|
915
|
+
unsetDescription: "Clear medium routing model; implementation turns fall back according to router policy",
|
|
916
|
+
});
|
|
522
917
|
const expensiveModelOptions = buildModelRouterRoleModelOptions({
|
|
523
918
|
currentValue: this.state.expensiveModel,
|
|
524
919
|
configuredModelOptions: modelOptions,
|
|
@@ -570,6 +965,27 @@ class ModelRouterSettingsSubmenu extends Container {
|
|
|
570
965
|
customEmptyValue: MODEL_ROUTER_UNSET_MODEL_VALUE,
|
|
571
966
|
}),
|
|
572
967
|
},
|
|
968
|
+
{
|
|
969
|
+
id: "model-router-medium",
|
|
970
|
+
label: "Medium model",
|
|
971
|
+
description: "Pick the model for normal scoped implementation, edits, tests, and mechanical refactors",
|
|
972
|
+
currentValue: optionalStringValue(this.state.mediumModel),
|
|
973
|
+
submenu: (_currentValue, done) => new ModelSelectionSubmenu(mediumModelOptions, this.state.mediumModel ?? MODEL_ROUTER_UNSET_MODEL_VALUE, (value) => {
|
|
974
|
+
this.state = {
|
|
975
|
+
...this.state,
|
|
976
|
+
mediumModel: value === MODEL_ROUTER_UNSET_MODEL_VALUE ? undefined : value,
|
|
977
|
+
};
|
|
978
|
+
onChange({ ...this.state }, this.scope);
|
|
979
|
+
done(optionalStringValue(this.state.mediumModel));
|
|
980
|
+
}, () => done(), {
|
|
981
|
+
title: "Medium / Implementation Model",
|
|
982
|
+
description: "Choose from models available through configured subscription/API accounts. Type to filter; manual is fallback.",
|
|
983
|
+
customTitle: "Custom Medium / Implementation Model",
|
|
984
|
+
customDescription: "Enter a provider/model pattern from pi --list-models.",
|
|
985
|
+
customEmptyHint: "empty clears the setting",
|
|
986
|
+
customEmptyValue: MODEL_ROUTER_UNSET_MODEL_VALUE,
|
|
987
|
+
}),
|
|
988
|
+
},
|
|
573
989
|
{
|
|
574
990
|
id: "model-router-expensive",
|
|
575
991
|
label: "Expensive model",
|
|
@@ -719,8 +1135,12 @@ export class SettingsSelectorComponent extends Container {
|
|
|
719
1135
|
let currentWarnings = { ...config.warnings };
|
|
720
1136
|
let currentSelfModification = { ...config.selfModification };
|
|
721
1137
|
let currentAutonomy = { ...config.autonomy };
|
|
1138
|
+
let currentResearchLane = { ...config.researchLane };
|
|
1139
|
+
let currentWorkerDelegation = { ...config.workerDelegation };
|
|
722
1140
|
let currentModelRouter = { ...config.modelRouter };
|
|
723
1141
|
let currentAutoLearn = { ...config.autoLearn };
|
|
1142
|
+
let currentContextPolicyEnforcement = { ...config.contextPolicyEnforcement };
|
|
1143
|
+
let currentContextMemoryRetrieval = { ...config.contextMemoryRetrieval };
|
|
724
1144
|
const items = [
|
|
725
1145
|
{
|
|
726
1146
|
id: "autocompact",
|
|
@@ -819,6 +1239,26 @@ export class SettingsSelectorComponent extends Container {
|
|
|
819
1239
|
callbacks.onAutonomyChange(settings, scope);
|
|
820
1240
|
}, () => done(autonomySummary(currentAutonomy)), config.autonomyScope ?? "global"),
|
|
821
1241
|
},
|
|
1242
|
+
{
|
|
1243
|
+
id: "research-lane",
|
|
1244
|
+
label: "Research Lane",
|
|
1245
|
+
description: "Opt-in autonomous read-only research: bounded background passes that produce evidence bundles for active goals",
|
|
1246
|
+
currentValue: researchLaneSummary(currentResearchLane),
|
|
1247
|
+
submenu: (_currentValue, done) => new ResearchLaneSettingsSubmenu(currentResearchLane, (settings, scope) => {
|
|
1248
|
+
currentResearchLane = { ...settings };
|
|
1249
|
+
callbacks.onResearchLaneChange(settings, scope);
|
|
1250
|
+
}, () => done(researchLaneSummary(currentResearchLane)), config.researchLaneScope ?? "global"),
|
|
1251
|
+
},
|
|
1252
|
+
{
|
|
1253
|
+
id: "worker-delegation",
|
|
1254
|
+
label: "Worker Delegation",
|
|
1255
|
+
description: "Opt-in bounded scout-worker delegation: the delegate tool runs read-only workers on a cheap model lane",
|
|
1256
|
+
currentValue: workerDelegationSummary(currentWorkerDelegation),
|
|
1257
|
+
submenu: (_currentValue, done) => new WorkerDelegationSettingsSubmenu(currentWorkerDelegation, (settings, scope) => {
|
|
1258
|
+
currentWorkerDelegation = { ...settings };
|
|
1259
|
+
callbacks.onWorkerDelegationChange(settings, scope);
|
|
1260
|
+
}, () => done(workerDelegationSummary(currentWorkerDelegation)), config.workerDelegationScope ?? "global"),
|
|
1261
|
+
},
|
|
822
1262
|
{
|
|
823
1263
|
id: "model-router",
|
|
824
1264
|
label: "Model Router",
|
|
@@ -839,6 +1279,26 @@ export class SettingsSelectorComponent extends Container {
|
|
|
839
1279
|
callbacks.onAutoLearnChange(settings, scope);
|
|
840
1280
|
}, () => done(autoLearnSummary(currentAutoLearn)), config.autoLearnScope ?? "global"),
|
|
841
1281
|
},
|
|
1282
|
+
{
|
|
1283
|
+
id: "context-policy-enforcement",
|
|
1284
|
+
label: "Context / Prompt Policy",
|
|
1285
|
+
description: "Opt-in artifact-stub prompt-policy enforcement: stubs stale artifact-backed tool output in the model-visible prompt only, never the transcript. Requires the artifact_retrieve tool to be active.",
|
|
1286
|
+
currentValue: contextPolicyEnforcementSummary(currentContextPolicyEnforcement),
|
|
1287
|
+
submenu: (_currentValue, done) => new ContextPolicyEnforcementSettingsSubmenu(currentContextPolicyEnforcement, (settings, scope) => {
|
|
1288
|
+
currentContextPolicyEnforcement = { ...settings };
|
|
1289
|
+
callbacks.onContextPolicyEnforcementChange(settings, scope);
|
|
1290
|
+
}, () => done(contextPolicyEnforcementSummary(currentContextPolicyEnforcement)), config.contextPolicyEnforcementScope ?? "global"),
|
|
1291
|
+
},
|
|
1292
|
+
{
|
|
1293
|
+
id: "context-memory-retrieval",
|
|
1294
|
+
label: "Context / Memory Retrieval",
|
|
1295
|
+
description: "Opt-in local memory retrieval: searches local Pi OKF memory documents each turn and records source-labeled evidence for inspection. Prompt inclusion is off by default and only occurs when 'Include in prompt' is enabled. Never queries an external provider.",
|
|
1296
|
+
currentValue: contextMemoryRetrievalSummary(currentContextMemoryRetrieval),
|
|
1297
|
+
submenu: (_currentValue, done) => new ContextMemoryRetrievalSettingsSubmenu(currentContextMemoryRetrieval, (settings, scope) => {
|
|
1298
|
+
currentContextMemoryRetrieval = { ...settings };
|
|
1299
|
+
callbacks.onContextMemoryRetrievalChange(settings, scope);
|
|
1300
|
+
}, () => done(contextMemoryRetrievalSummary(currentContextMemoryRetrieval)), config.contextMemoryRetrievalScope ?? "global"),
|
|
1301
|
+
},
|
|
842
1302
|
{
|
|
843
1303
|
id: "warnings",
|
|
844
1304
|
label: "Warnings",
|