@xopcai/xopc 0.0.110 → 0.0.111
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 +46 -4
- package/README.zh-CN.md +46 -4
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/Combination-BzaXOLd9.js +41 -0
- package/dist/gateway/static/root/assets/agent-avatar-dicebear-zlx9l5Yp.js +1 -0
- package/dist/gateway/static/root/assets/agent-browser-settings-page-B-0zGjt8.js +6 -0
- package/dist/gateway/static/root/assets/agent-defaults-tabbed-page-Bz7JWjRM.js +1 -0
- package/dist/gateway/static/root/assets/agents-DwDnJlXT.js +71 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-DaQwdeCq.js +1 -0
- package/dist/gateway/static/root/assets/appearance-settings-D2zv6r3P.js +1 -0
- package/dist/gateway/static/root/assets/apps-page-BIppe_jj.js +1 -0
- package/dist/gateway/static/root/assets/archive-plugin-DEmu8eH7.js +1 -0
- package/dist/gateway/static/root/assets/attachment-load-B98lJoN5.js +2 -0
- package/dist/gateway/static/root/assets/{attachment-preview-renderer-CybMSIoS.js → attachment-preview-renderer-DonnL2dL.js} +1 -1
- package/dist/gateway/static/root/assets/binary-plugins-CL9QKmyo.js +2 -0
- package/dist/gateway/static/root/assets/block-editor-BOAhMAhT.js +180 -0
- package/dist/gateway/static/root/assets/channels-settings-Br8iRnXp.js +1 -0
- package/dist/gateway/static/root/assets/cn-JdwAhgNB.js +1 -0
- package/dist/gateway/static/root/assets/code-editor-dZTY2dRW.js +1 -0
- package/dist/gateway/static/root/assets/config-api-0o1WYdz2.js +3 -0
- package/dist/gateway/static/root/assets/connectors-settings-DDvHo9in.js +2 -0
- package/dist/gateway/static/root/assets/cron-api-Dj_UZKST.js +1 -0
- package/dist/gateway/static/root/assets/cron-dreaming-jobs-nCMWCf0p.js +1 -0
- package/dist/gateway/static/root/assets/cron-page-Dv7GII9G.js +1 -0
- package/dist/gateway/static/root/assets/cron-schedule-picker-DH10KgD6.js +1 -0
- package/dist/gateway/static/root/assets/dist-By6Rh2ee.js +1 -0
- package/dist/gateway/static/root/assets/dist-CkobR7mk.js +1 -0
- package/dist/gateway/static/root/assets/dist-DokQNVMQ.js +1 -0
- package/dist/gateway/static/root/assets/dreaming-scene-BHMRVEUS.js +4585 -0
- package/dist/gateway/static/root/assets/dreaming-settings-L2rgZDQl.js +1 -0
- package/dist/gateway/static/root/assets/extension-debug-page-Cjx6pZVz.js +1 -0
- package/dist/gateway/static/root/assets/{extension-page-W1wiG38F.js → extension-page-BSPNL90V.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-m_UQYkVc.js +1 -0
- package/dist/gateway/static/root/assets/fetch-Bs7in_4F.js +1 -0
- package/dist/gateway/static/root/assets/format-interval-label-CftJ5uXu.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-Clfck-hW.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-CS177xni.js +1 -0
- package/dist/gateway/static/root/assets/gateway-startup-retry-BkjVJc38.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-kqJue0sE.js +1 -0
- package/dist/gateway/static/root/assets/goals-page-C0FujUB5.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-CJnzNSDo.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-config-api-Cp7CPuIn.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-ifSI1Wbh.js +1 -0
- package/dist/gateway/static/root/assets/html-workspace-editor-CQLWDiwE.js +1 -0
- package/dist/gateway/static/root/assets/index-COkF54xv.js +121 -0
- package/dist/gateway/static/root/assets/index-DIaSNGEO.css +1 -0
- package/dist/gateway/static/root/assets/interval-presets-B29Ss_2y.js +2 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings--MI1rYl7.js +1 -0
- package/dist/gateway/static/root/assets/locale-store-DjbfSsfA.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-BwrVNlyW.js +2 -0
- package/dist/gateway/static/root/assets/markdown-editor-AssmZFx4.js +2 -0
- package/dist/gateway/static/root/assets/markdown-split-B_oc9lJe.js +1 -0
- package/dist/gateway/static/root/assets/media-plugins-DLPvB5H3.js +1 -0
- package/dist/gateway/static/root/assets/mermaid-render-BbqDc_LQ.js +134 -0
- package/dist/gateway/static/root/assets/messages-Csef1aW7.js +3 -0
- package/dist/gateway/static/root/assets/middleware-Pd0e8Igk.js +1 -0
- package/dist/gateway/static/root/assets/models-hub-panel-DHGiTIvf.js +2 -0
- package/dist/gateway/static/root/assets/note-detail-page-BM7zlDiT.js +2 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-rSqAgOi9.js +1 -0
- package/dist/gateway/static/root/assets/note-time-hm6JO_Wi.js +1 -0
- package/dist/gateway/static/root/assets/notes-page-C9ACGEty.js +1 -0
- package/dist/gateway/static/root/assets/preview-open-alternatives-Bw_N2oZi.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-BhcWIKuM.js +1 -0
- package/dist/gateway/static/root/assets/save-bar-controls-CNP2jmw0.js +1 -0
- package/dist/gateway/static/root/assets/schedule-field-BPAWui3P.js +1 -0
- package/dist/gateway/static/root/assets/schedule-summary-B-hdSRdR.js +1 -0
- package/dist/gateway/static/root/assets/schema-form-CDPzua9q.js +1 -0
- package/dist/gateway/static/root/assets/sessions-page-DzkpSDZr.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BYS-rpzn.js +1 -0
- package/dist/gateway/static/root/assets/settings-collapsible-section-C9bff85B.js +1 -0
- package/dist/gateway/static/root/assets/settings-form-section-BsrK7TBF.js +1 -0
- package/dist/gateway/static/root/assets/settings-page-DWK4Zo7s.js +1 -0
- package/dist/gateway/static/root/assets/setup-status-panel-DJiksNu4.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-DnutoY_S.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-6oRgJMpn.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CU9i0nJV.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-ERbdWENm.js +2 -0
- package/dist/gateway/static/root/assets/system-settings-panel-qP1JDtDd.js +1 -0
- package/dist/gateway/static/root/assets/theme-store-CD2wtgZV.js +1 -0
- package/dist/gateway/static/root/assets/use-agent-defaults-form-D3FGVLZb.js +1 -0
- package/dist/gateway/static/root/assets/use-blob-object-url-D4BFuzZB.js +1 -0
- package/dist/gateway/static/root/assets/use-channel-catalog-C4mg1hjD.js +1 -0
- package/dist/gateway/static/root/assets/use-settings-tab-guard-F6C0mpJt.js +1 -0
- package/dist/gateway/static/root/assets/vendor-codemirror-CNP1wPe7.js +45 -0
- package/dist/gateway/static/root/assets/voice-api-key-field-BnDDb6qO.js +1 -0
- package/dist/gateway/static/root/assets/voice-player-store-B2EwIhtY.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-page.utils-EYg_xBQS.js → workflow-page.utils-CRB7WX9l.js} +1 -1
- package/dist/gateway/static/root/assets/workflows-page-2Fptr0je.js +18 -0
- package/dist/gateway/static/root/index.html +12 -10
- package/dist/package.js +1 -1
- package/dist/src/agent/goals/checklist-judge.d.ts +5 -0
- package/dist/src/agent/goals/checklist-judge.js +26 -2
- package/dist/src/agent/goals/checklist-judge.js.map +1 -1
- package/dist/src/agent/goals/evaluate-turn.d.ts +5 -1
- package/dist/src/agent/goals/evaluate-turn.js +29 -3
- package/dist/src/agent/goals/evaluate-turn.js.map +1 -1
- package/dist/src/agent/goals/goal-locale.d.ts +0 -2
- package/dist/src/agent/goals/goal-locale.js +2 -15
- package/dist/src/agent/goals/goal-locale.js.map +1 -1
- package/dist/src/agent/goals/persistent-goal-service.d.ts +9 -0
- package/dist/src/agent/goals/persistent-goal-service.js +2 -1
- package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
- package/dist/src/agent/goals/post-turn.d.ts +7 -0
- package/dist/src/agent/goals/post-turn.js +68 -23
- package/dist/src/agent/goals/post-turn.js.map +1 -1
- package/dist/src/agent/goals/state.d.ts +0 -5
- package/dist/src/agent/goals/state.js +1 -96
- package/dist/src/agent/goals/state.js.map +1 -1
- package/dist/src/agent/messaging/command-handler.d.ts +4 -0
- package/dist/src/agent/messaging/command-handler.js +6 -2
- package/dist/src/agent/messaging/command-handler.js.map +1 -1
- package/dist/src/agent/service/direct-turn-helpers.d.ts +2 -0
- package/dist/src/agent/service/direct-turn-helpers.js +3 -2
- package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +10 -1
- package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
- package/dist/src/agent/service.js +20 -1
- package/dist/src/agent/service.js.map +1 -1
- package/dist/src/agent/service.types.d.ts +8 -0
- package/dist/src/agent/tools/cronjob-tool.d.ts +2 -0
- package/dist/src/agent/tools/cronjob-tool.js +27 -4
- package/dist/src/agent/tools/cronjob-tool.js.map +1 -1
- package/dist/src/agent/tools/edit.d.ts +2 -0
- package/dist/src/agent/tools/edit.js +10 -0
- package/dist/src/agent/tools/edit.js.map +1 -1
- package/dist/src/agent/tools/factory.js +16 -3
- package/dist/src/agent/tools/factory.js.map +1 -1
- package/dist/src/agent/tools/goal-evidence-recorder.d.ts +6 -0
- package/dist/src/agent/tools/goal-evidence-recorder.js +34 -0
- package/dist/src/agent/tools/goal-evidence-recorder.js.map +1 -0
- package/dist/src/agent/tools/goal-tool.d.ts +19 -0
- package/dist/src/agent/tools/goal-tool.js +101 -0
- package/dist/src/agent/tools/goal-tool.js.map +1 -0
- package/dist/src/agent/tools/index.d.ts +1 -0
- package/dist/src/agent/tools/index.js +2 -1
- package/dist/src/agent/tools/shell.d.ts +2 -0
- package/dist/src/agent/tools/shell.js +17 -2
- package/dist/src/agent/tools/shell.js.map +1 -1
- package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
- package/dist/src/agent/tools/workflow-tool.js +10 -2
- package/dist/src/agent/tools/workflow-tool.js.map +1 -1
- package/dist/src/agent/tools/write.d.ts +2 -0
- package/dist/src/agent/tools/write.js +11 -0
- package/dist/src/agent/tools/write.js.map +1 -1
- package/dist/src/channels/attachments/inbound-persist.d.ts +7 -0
- package/dist/src/channels/attachments/inbound-persist.js +20 -2
- package/dist/src/channels/attachments/inbound-persist.js.map +1 -1
- package/dist/src/chat-commands/builtins/goal.d.ts +1 -1
- package/dist/src/chat-commands/builtins/goal.js +55 -97
- package/dist/src/chat-commands/builtins/goal.js.map +1 -1
- package/dist/src/chat-commands/builtins/subgoal.d.ts +1 -1
- package/dist/src/chat-commands/builtins/subgoal.js +49 -108
- package/dist/src/chat-commands/builtins/subgoal.js.map +1 -1
- package/dist/src/chat-commands/builtins/workflow.js +132 -8
- package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
- package/dist/src/chat-commands/context.d.ts +3 -0
- package/dist/src/chat-commands/context.js +5 -0
- package/dist/src/chat-commands/context.js.map +1 -1
- package/dist/src/chat-commands/types.d.ts +5 -0
- package/dist/src/cli/command-catalog.js +43 -0
- package/dist/src/cli/command-catalog.js.map +1 -1
- package/dist/src/cli/command-loaders.js +1 -0
- package/dist/src/cli/command-loaders.js.map +1 -1
- package/dist/src/cli/command-manifest.js +4 -0
- package/dist/src/cli/command-manifest.js.map +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/goal.d.ts +4 -0
- package/dist/src/cli/commands/goal.js +213 -0
- package/dist/src/cli/commands/goal.js.map +1 -0
- package/dist/src/cli/commands/onboard.js +11 -5
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/config/index.js +2 -2
- package/dist/src/config/schema.d.ts +115 -0
- package/dist/src/config/schema.js +63 -4
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/config/web-patch.d.ts +14 -0
- package/dist/src/config/web-patch.js +45 -6
- package/dist/src/config/web-patch.js.map +1 -1
- package/dist/src/cron/executor.d.ts +2 -0
- package/dist/src/cron/executor.js +25 -0
- package/dist/src/cron/executor.js.map +1 -1
- package/dist/src/cron/job-content.js +1 -0
- package/dist/src/cron/job-content.js.map +1 -1
- package/dist/src/cron/types.d.ts +19 -1
- package/dist/src/cron/validation.d.ts +20 -0
- package/dist/src/cron/validation.js +7 -0
- package/dist/src/cron/validation.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +14 -0
- package/dist/src/gateway/hono/routes/goals.d.ts +1 -1
- package/dist/src/gateway/hono/routes/goals.js +670 -173
- package/dist/src/gateway/hono/routes/goals.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.d.ts +5 -0
- package/dist/src/gateway/hono/routes/home.js +88 -3
- package/dist/src/gateway/hono/routes/home.js.map +1 -1
- package/dist/src/gateway/hono/routes/notes.js +20 -14
- package/dist/src/gateway/hono/routes/notes.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +6 -2
- package/dist/src/gateway/hono/routes/workflows.js.map +1 -1
- package/dist/src/gateway/hono/sse.js.map +1 -1
- package/dist/src/gateway/service/agent-runner.d.ts +2 -0
- package/dist/src/gateway/service/agent-runner.js +6 -2
- package/dist/src/gateway/service/agent-runner.js.map +1 -1
- package/dist/src/gateway/service/run-gateway-agent.d.ts +3 -0
- package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
- package/dist/src/gateway/service.d.ts +8 -0
- package/dist/src/gateway/service.js +69 -2
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-notifications.d.ts +29 -0
- package/dist/src/goals/goal-notifications.js +154 -0
- package/dist/src/goals/goal-notifications.js.map +1 -0
- package/dist/src/goals/goal-queue-store.d.ts +16 -0
- package/dist/src/goals/goal-queue-store.js +131 -0
- package/dist/src/goals/goal-queue-store.js.map +1 -0
- package/dist/src/goals/goal-queue-types.d.ts +31 -0
- package/dist/src/goals/goal-queue-types.js +1 -0
- package/dist/src/goals/goal-runner.d.ts +17 -0
- package/dist/src/goals/goal-runner.js +127 -0
- package/dist/src/goals/goal-runner.js.map +1 -0
- package/dist/src/goals/goal-service.d.ts +77 -0
- package/dist/src/goals/goal-service.js +261 -0
- package/dist/src/goals/goal-service.js.map +1 -0
- package/dist/src/goals/goal-store.d.ts +38 -0
- package/dist/src/goals/goal-store.js +404 -0
- package/dist/src/goals/goal-store.js.map +1 -0
- package/dist/src/goals/goal-workflow-judge.d.ts +13 -0
- package/dist/src/goals/goal-workflow-judge.js +147 -0
- package/dist/src/goals/goal-workflow-judge.js.map +1 -0
- package/dist/src/goals/index.d.ts +10 -0
- package/dist/src/goals/index.js +7 -0
- package/dist/src/goals/types.d.ts +119 -0
- package/dist/src/goals/types.js +1 -0
- package/dist/src/storage/sqlite/migrations/006_add_goals.sql +108 -0
- package/dist/src/storage/sqlite/migrations/007_goal_run_judge_schema.sql +4 -0
- package/dist/src/storage/sqlite/migrations/008_goal_queue_workflow_runs.sql +53 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +163 -0
- package/dist/src/utils/logger/stats.d.ts +1 -1
- package/dist/src/workflows/domain/run.d.ts +1 -0
- package/dist/src/workflows/domain/run.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
- package/dist/src/workflows/service/workflow-run-service.js +5 -1
- package/dist/src/workflows/service/workflow-run-service.js.map +1 -1
- package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -0
- package/dist/src/workflows/service/workflow-session-bridge.js +7 -0
- package/dist/src/workflows/service/workflow-session-bridge.js.map +1 -1
- package/dist/src/workflows/store/run-index-store.d.ts +8 -0
- package/dist/src/workflows/store/run-index-store.js +58 -0
- package/dist/src/workflows/store/run-index-store.js.map +1 -0
- package/dist/src/workflows/store/run-store.d.ts +2 -0
- package/dist/src/workflows/store/run-store.js +14 -21
- package/dist/src/workflows/store/run-store.js.map +1 -1
- package/package.json +9 -3
- package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
- package/dist/gateway/static/root/assets/agents-CFFioJCI.js +0 -78
- package/dist/gateway/static/root/assets/apps-page-BYDmkbzG.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-CsbDaMvd.js +0 -1
- package/dist/gateway/static/root/assets/circle-check-C23XjkUj.js +0 -1
- package/dist/gateway/static/root/assets/copy-Dv6d4Dvw.js +0 -1
- package/dist/gateway/static/root/assets/cron-page-Apk-7p4p.js +0 -1
- package/dist/gateway/static/root/assets/dist-DmGDgpy2.js +0 -1
- package/dist/gateway/static/root/assets/extension-debug-page-pxFC-tUa.js +0 -1
- package/dist/gateway/static/root/assets/extension-settings-page-COXSv6xP.js +0 -1
- package/dist/gateway/static/root/assets/fetch-CFdKBnE6.js +0 -1
- package/dist/gateway/static/root/assets/gateway-startup-retry-DdngdObI.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-config-api-DcmAMYmN.js +0 -1
- package/dist/gateway/static/root/assets/index-C_2yKRJX.js +0 -4845
- package/dist/gateway/static/root/assets/index-DI5_GsZt.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-DvTWUOzd.js +0 -2
- package/dist/gateway/static/root/assets/note-detail-page-CZbdugWZ.js +0 -180
- package/dist/gateway/static/root/assets/note-time-RdyBZxj3.js +0 -1
- package/dist/gateway/static/root/assets/notes-page-mEAwy3e1.js +0 -1
- package/dist/gateway/static/root/assets/schema-form-DEvdni_r.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BsgffzV4.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-t6v8Dwb8.js +0 -2
- package/dist/gateway/static/root/assets/settings-form-section-BoYYZmJG.js +0 -1
- package/dist/gateway/static/root/assets/settings-page-ClIthYF8.js +0 -3
- package/dist/gateway/static/root/assets/share-preview-page-Dd9et7KD.js +0 -2
- package/dist/gateway/static/root/assets/skills-page-DEXtxyfQ.js +0 -2
- package/dist/gateway/static/root/assets/theme-store-BZozwAeK.js +0 -1
- package/dist/gateway/static/root/assets/url-DQRqHuL-.js +0 -3
- package/dist/gateway/static/root/assets/vendor-codemirror-DYoKfS8f.js +0 -45
- package/dist/gateway/static/root/assets/voice-api-key-field-CNrKzQrf.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-EMZkzJNN.js +0 -18
- package/dist/src/agent/goals/checklist-user.d.ts +0 -24
- package/dist/src/agent/goals/checklist-user.js +0 -92
- package/dist/src/agent/goals/checklist-user.js.map +0 -1
- package/dist/src/agent/goals/goal-run-store.d.ts +0 -19
- package/dist/src/agent/goals/goal-run-store.js +0 -138
- package/dist/src/agent/goals/goal-run-store.js.map +0 -1
- package/dist/src/agent/goals/goal-run-types.d.ts +0 -28
- package/dist/src/agent/goals/goal-run-types.js +0 -6
- package/dist/src/agent/goals/goal-run-types.js.map +0 -1
- package/dist/src/agent/goals/patch-from-user-action.d.ts +0 -20
- package/dist/src/agent/goals/patch-from-user-action.js +0 -103
- package/dist/src/agent/goals/patch-from-user-action.js.map +0 -1
- /package/dist/gateway/static/root/assets/{note-detail-page-D4ZIVQbk.css → block-editor-D4ZIVQbk.css} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-manifest.js","names":[],"sources":["../../../src/cli/command-manifest.ts"],"sourcesContent":["export type RootHelpOption = {\n flags: string;\n description: string;\n};\n\nexport type RootHelpCommand = {\n name: string;\n description: string;\n};\n\nexport const ROOT_COMMAND_DESCRIPTION = 'Ultra-Lightweight Personal AI Assistant';\n\nexport const ROOT_HELP_OPTIONS: RootHelpOption[] = [\n { flags: '-V, --version', description: 'output the version number' },\n { flags: '--verbose', description: 'Enable verbose logging (default: false)' },\n { flags: '--config <path>', description: 'Config file path' },\n { flags: '--workspace <path>', description: 'Workspace directory' },\n { flags: '-h, --help', description: 'display help for command' },\n];\n\nexport const ROOT_HELP_COMMANDS: RootHelpCommand[] = [\n { name: 'init [options]', description: 'Initialize xopc state directories, config, and agent workspace' },\n { name: 'setup [options]', description: 'Initialize config file and workspace directory' },\n { name: 'profile', description: 'Manage xopc state profiles (~/.xopc vs ~/.xopc-<name>)' },\n { name: 'onboard [options]', description: 'Interactive setup wizard for xopc (gateway uses schema defaults)' },\n { name: 'channels', description: 'Messaging channel configuration' },\n { name: 'auth', description: 'Manage authentication credentials' },\n { name: 'agent [options]', description: 'Chat with the AI agent' },\n { name: 'tui [options]', description: 'Interactive terminal UI (pi-tui)' },\n { name: 'tunnel', description: 'Manage FRP remote access tunnel' },\n { name: 'gateway [options]', description: 'Start the xopc gateway server' },\n { name: 'session', description: 'Session management commands' },\n { name: 'doctor [options]', description: 'Check xopc installation health and diagnose common issues' },\n { name: 'update [options]', description: 'Check for and install xopc updates' },\n { name: 'logs', description: 'Manage and query logs' },\n { name: 'cron', description: 'Manage scheduled tasks' },\n { name: 'config [options]', description: 'View and edit configuration' },\n { name: 'image', description: 'Configure image generation and understanding models' },\n { name: 'models [options]', description: 'List and manage models and model auth' },\n { name: 'providers', description: 'Manage LLM provider credentials (user-friendly hub over `xopc auth`)' },\n { name: 'voice', description: 'Configure text-to-speech (TTS) output' },\n { name: 'search', description: 'Manage web-search providers (brave / tavily / bing / searxng)' },\n { name: 'skills', description: 'Manage skills' },\n { name: 'tailscale', description: 'Tailscale status for gateway remote access' },\n { name: 'browser', description: 'Browser automation commands (uses Playwright)' },\n { name: 'agents', description: 'Manage agents (config + workspace)' },\n { name: 'extensions', description: 'Manage extensions' },\n { name: 'help [command]', description: 'display help for command' },\n];\n\nfunction formatRows(rows: Array<{ label: string; description: string }>): string {\n const labelWidth = Math.max(...rows.map((row) => row.label.length)) + 2;\n return rows.map((row) => ` ${row.label.padEnd(labelWidth)}${row.description}`).join('\\n');\n}\n\nexport function formatRootHelp(): string {\n const options = formatRows(ROOT_HELP_OPTIONS.map((option) => ({ label: option.flags, description: option.description })));\n const commands = formatRows(\n ROOT_HELP_COMMANDS.map((command) => ({ label: command.name, description: command.description })),\n );\n return `Usage: xopc [options] [command]\n\n${ROOT_COMMAND_DESCRIPTION}\n\nOptions:\n${options}\n\nCommands:\n${commands}`;\n}\n"],"mappings":";AAUA,MAAa,2BAA2B;AAExC,MAAa,oBAAsC;CACjD;EAAE,OAAO;EAAiB,aAAa;EAA6B;CACpE;EAAE,OAAO;EAAa,aAAa;EAA2C;CAC9E;EAAE,OAAO;EAAmB,aAAa;EAAoB;CAC7D;EAAE,OAAO;EAAsB,aAAa;EAAuB;CACnE;EAAE,OAAO;EAAc,aAAa;EAA4B;CACjE;AAED,MAAa,qBAAwC;CACnD;EAAE,MAAM;EAAkB,aAAa;EAAkE;CACzG;EAAE,MAAM;EAAmB,aAAa;EAAkD;CAC1F;EAAE,MAAM;EAAW,aAAa;EAA0D;CAC1F;EAAE,MAAM;EAAqB,aAAa;EAAoE;CAC9G;EAAE,MAAM;EAAY,aAAa;EAAmC;CACpE;EAAE,MAAM;EAAQ,aAAa;EAAqC;CAClE;EAAE,MAAM;EAAmB,aAAa;EAA0B;CAClE;EAAE,MAAM;EAAiB,aAAa;EAAoC;CAC1E;EAAE,MAAM;EAAU,aAAa;EAAmC;CAClE;EAAE,MAAM;EAAqB,aAAa;EAAiC;CAC3E;EAAE,MAAM;EAAW,aAAa;EAA+B;CAC/D;EAAE,MAAM;EAAoB,aAAa;EAA6D;CACtG;EAAE,MAAM;EAAoB,aAAa;EAAsC;CAC/E;EAAE,MAAM;EAAQ,aAAa;EAAyB;CACtD;EAAE,MAAM;EAAQ,aAAa;EAA0B;CACvD;EAAE,MAAM;EAAoB,aAAa;EAA+B;CACxE;EAAE,MAAM;EAAS,aAAa;EAAuD;CACrF;EAAE,MAAM;EAAoB,aAAa;EAAyC;CAClF;EAAE,MAAM;EAAa,aAAa;EAAwE;CAC1G;EAAE,MAAM;EAAS,aAAa;EAAyC;CACvE;EAAE,MAAM;EAAU,aAAa;EAAiE;CAChG;EAAE,MAAM;EAAU,aAAa;EAAiB;CAChD;EAAE,MAAM;EAAa,aAAa;EAA8C;CAChF;EAAE,MAAM;EAAW,aAAa;EAAiD;CACjF;EAAE,MAAM;EAAU,aAAa;EAAsC;CACrE;EAAE,MAAM;EAAc,aAAa;EAAqB;CACxD;EAAE,MAAM;EAAkB,aAAa;EAA4B;CACpE;AAED,SAAS,WAAW,MAA6D;CAC/E,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,MAAM,OAAO,CAAC,GAAG;AACtE,QAAO,KAAK,KAAK,QAAQ,KAAK,IAAI,MAAM,OAAO,WAAW,GAAG,IAAI,cAAc,CAAC,KAAK,KAAK;;AAG5F,SAAgB,iBAAyB;AAKvC,QAAO;;EAEP,yBAAyB;;;EANT,WAAW,kBAAkB,KAAK,YAAY;EAAE,OAAO,OAAO;EAAO,aAAa,OAAO;EAAa,EAAE,CASjH,CAAC;;;EARS,WACf,mBAAmB,KAAK,aAAa;EAAE,OAAO,QAAQ;EAAM,aAAa,QAAQ;EAAa,EAAE,CAU1F"}
|
|
1
|
+
{"version":3,"file":"command-manifest.js","names":[],"sources":["../../../src/cli/command-manifest.ts"],"sourcesContent":["export type RootHelpOption = {\n flags: string;\n description: string;\n};\n\nexport type RootHelpCommand = {\n name: string;\n description: string;\n};\n\nexport const ROOT_COMMAND_DESCRIPTION = 'Ultra-Lightweight Personal AI Assistant';\n\nexport const ROOT_HELP_OPTIONS: RootHelpOption[] = [\n { flags: '-V, --version', description: 'output the version number' },\n { flags: '--verbose', description: 'Enable verbose logging (default: false)' },\n { flags: '--config <path>', description: 'Config file path' },\n { flags: '--workspace <path>', description: 'Workspace directory' },\n { flags: '-h, --help', description: 'display help for command' },\n];\n\nexport const ROOT_HELP_COMMANDS: RootHelpCommand[] = [\n { name: 'init [options]', description: 'Initialize xopc state directories, config, and agent workspace' },\n { name: 'setup [options]', description: 'Initialize config file and workspace directory' },\n { name: 'profile', description: 'Manage xopc state profiles (~/.xopc vs ~/.xopc-<name>)' },\n { name: 'onboard [options]', description: 'Interactive setup wizard for xopc (gateway uses schema defaults)' },\n { name: 'channels', description: 'Messaging channel configuration' },\n { name: 'auth', description: 'Manage authentication credentials' },\n { name: 'agent [options]', description: 'Chat with the AI agent' },\n { name: 'tui [options]', description: 'Interactive terminal UI (pi-tui)' },\n { name: 'tunnel', description: 'Manage FRP remote access tunnel' },\n { name: 'gateway [options]', description: 'Start the xopc gateway server' },\n { name: 'session', description: 'Session management commands' },\n { name: 'doctor [options]', description: 'Check xopc installation health and diagnose common issues' },\n { name: 'update [options]', description: 'Check for and install xopc updates' },\n { name: 'logs', description: 'Manage and query logs' },\n { name: 'cron', description: 'Manage scheduled tasks' },\n { name: 'goal', description: 'Manage durable goals' },\n { name: 'config [options]', description: 'View and edit configuration' },\n { name: 'image', description: 'Configure image generation and understanding models' },\n { name: 'models [options]', description: 'List and manage models and model auth' },\n { name: 'providers', description: 'Manage LLM provider credentials (user-friendly hub over `xopc auth`)' },\n { name: 'voice', description: 'Configure text-to-speech (TTS) output' },\n { name: 'search', description: 'Manage web-search providers (brave / tavily / bing / searxng)' },\n { name: 'skills', description: 'Manage skills' },\n { name: 'tailscale', description: 'Tailscale status for gateway remote access' },\n { name: 'browser', description: 'Browser automation commands (uses Playwright)' },\n { name: 'agents', description: 'Manage agents (config + workspace)' },\n { name: 'extensions', description: 'Manage extensions' },\n { name: 'help [command]', description: 'display help for command' },\n];\n\nfunction formatRows(rows: Array<{ label: string; description: string }>): string {\n const labelWidth = Math.max(...rows.map((row) => row.label.length)) + 2;\n return rows.map((row) => ` ${row.label.padEnd(labelWidth)}${row.description}`).join('\\n');\n}\n\nexport function formatRootHelp(): string {\n const options = formatRows(ROOT_HELP_OPTIONS.map((option) => ({ label: option.flags, description: option.description })));\n const commands = formatRows(\n ROOT_HELP_COMMANDS.map((command) => ({ label: command.name, description: command.description })),\n );\n return `Usage: xopc [options] [command]\n\n${ROOT_COMMAND_DESCRIPTION}\n\nOptions:\n${options}\n\nCommands:\n${commands}`;\n}\n"],"mappings":";AAUA,MAAa,2BAA2B;AAExC,MAAa,oBAAsC;CACjD;EAAE,OAAO;EAAiB,aAAa;EAA6B;CACpE;EAAE,OAAO;EAAa,aAAa;EAA2C;CAC9E;EAAE,OAAO;EAAmB,aAAa;EAAoB;CAC7D;EAAE,OAAO;EAAsB,aAAa;EAAuB;CACnE;EAAE,OAAO;EAAc,aAAa;EAA4B;CACjE;AAED,MAAa,qBAAwC;CACnD;EAAE,MAAM;EAAkB,aAAa;EAAkE;CACzG;EAAE,MAAM;EAAmB,aAAa;EAAkD;CAC1F;EAAE,MAAM;EAAW,aAAa;EAA0D;CAC1F;EAAE,MAAM;EAAqB,aAAa;EAAoE;CAC9G;EAAE,MAAM;EAAY,aAAa;EAAmC;CACpE;EAAE,MAAM;EAAQ,aAAa;EAAqC;CAClE;EAAE,MAAM;EAAmB,aAAa;EAA0B;CAClE;EAAE,MAAM;EAAiB,aAAa;EAAoC;CAC1E;EAAE,MAAM;EAAU,aAAa;EAAmC;CAClE;EAAE,MAAM;EAAqB,aAAa;EAAiC;CAC3E;EAAE,MAAM;EAAW,aAAa;EAA+B;CAC/D;EAAE,MAAM;EAAoB,aAAa;EAA6D;CACtG;EAAE,MAAM;EAAoB,aAAa;EAAsC;CAC/E;EAAE,MAAM;EAAQ,aAAa;EAAyB;CACtD;EAAE,MAAM;EAAQ,aAAa;EAA0B;CACvD;EAAE,MAAM;EAAQ,aAAa;EAAwB;CACrD;EAAE,MAAM;EAAoB,aAAa;EAA+B;CACxE;EAAE,MAAM;EAAS,aAAa;EAAuD;CACrF;EAAE,MAAM;EAAoB,aAAa;EAAyC;CAClF;EAAE,MAAM;EAAa,aAAa;EAAwE;CAC1G;EAAE,MAAM;EAAS,aAAa;EAAyC;CACvE;EAAE,MAAM;EAAU,aAAa;EAAiE;CAChG;EAAE,MAAM;EAAU,aAAa;EAAiB;CAChD;EAAE,MAAM;EAAa,aAAa;EAA8C;CAChF;EAAE,MAAM;EAAW,aAAa;EAAiD;CACjF;EAAE,MAAM;EAAU,aAAa;EAAsC;CACrE;EAAE,MAAM;EAAc,aAAa;EAAqB;CACxD;EAAE,MAAM;EAAkB,aAAa;EAA4B;CACpE;AAED,SAAS,WAAW,MAA6D;CAC/E,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,MAAM,OAAO,CAAC,GAAG;AACtE,QAAO,KAAK,KAAK,QAAQ,KAAK,IAAI,MAAM,OAAO,WAAW,GAAG,IAAI,cAAc,CAAC,KAAK,KAAK;;AAG5F,SAAgB,iBAAyB;AAKvC,QAAO;;EAEP,yBAAyB;;;EANT,WAAW,kBAAkB,KAAK,YAAY;EAAE,OAAO,OAAO;EAAO,aAAa,OAAO;EAAa,EAAE,CASjH,CAAC;;;EARS,WACf,mBAAmB,KAAK,aAAa;EAAE,OAAO,QAAQ;EAAM,aAAa,QAAQ;EAAa,EAAE,CAU1F"}
|
|
@@ -52,7 +52,7 @@ async function checkDatabaseSchema(ctx) {
|
|
|
52
52
|
id: "database-schema",
|
|
53
53
|
label: "Database schema",
|
|
54
54
|
status: "pass",
|
|
55
|
-
message: `SQLite schema v${status.dbVersion} (current release
|
|
55
|
+
message: `SQLite schema v${status.dbVersion} (current release v8).`,
|
|
56
56
|
hints: []
|
|
57
57
|
};
|
|
58
58
|
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { init_loader, loadConfig } from "../../config/loader.js";
|
|
2
|
+
import { closeXopcDatabase, openXopcDatabase } from "../../storage/sqlite/connection.js";
|
|
3
|
+
import "../../storage/sqlite/index.js";
|
|
4
|
+
import { GoalService } from "../../goals/goal-service.js";
|
|
5
|
+
import "../../goals/index.js";
|
|
6
|
+
import { formatExamples, register } from "../registry.js";
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
//#region src/cli/commands/goal.ts
|
|
9
|
+
init_loader();
|
|
10
|
+
function parseEvidenceKind(raw) {
|
|
11
|
+
if (raw === "file" || raw === "diff" || raw === "command" || raw === "test" || raw === "link" || raw === "message" || raw === "artifact") return raw;
|
|
12
|
+
return "message";
|
|
13
|
+
}
|
|
14
|
+
function summarize(goal) {
|
|
15
|
+
const done = goal.checklist.filter((it) => it.status === "completed" || it.status === "impossible").length;
|
|
16
|
+
const progress = goal.checklist.length ? ` · checklist ${done}/${goal.checklist.length}` : "";
|
|
17
|
+
const next = goal.nextAction ? `\n Next: ${goal.nextAction}` : "";
|
|
18
|
+
const blocked = goal.blockedReason ? `\n Blocked: ${goal.blockedReason}` : "";
|
|
19
|
+
return ` ${goal.id} [${goal.status}] ${goal.title}\n Agent: ${goal.agentId} · turns ${goal.turnsUsed}/${goal.maxTurns}${progress}${next}${blocked}`;
|
|
20
|
+
}
|
|
21
|
+
async function withGoals(ctx, fn) {
|
|
22
|
+
openXopcDatabase();
|
|
23
|
+
try {
|
|
24
|
+
return await fn(new GoalService());
|
|
25
|
+
} finally {
|
|
26
|
+
closeXopcDatabase();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function printGoal(goal) {
|
|
30
|
+
console.log(summarize(goal));
|
|
31
|
+
if (goal.checklist.length) {
|
|
32
|
+
console.log("\nChecklist:");
|
|
33
|
+
goal.checklist.forEach((it, index) => {
|
|
34
|
+
const marker = it.status === "completed" ? "[x]" : it.status === "impossible" ? "[!]" : "[ ]";
|
|
35
|
+
const evidence = it.evidenceSummary ? ` (${it.evidenceSummary})` : "";
|
|
36
|
+
console.log(` ${index + 1}. ${marker} ${it.text}${evidence}`);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function createGoalCommand(ctx) {
|
|
41
|
+
const cmd = new Command("goal").description("Manage durable goals").addHelpText("after", formatExamples([
|
|
42
|
+
"xopc goal list",
|
|
43
|
+
"xopc goal new \"Ship v0.2 release\"",
|
|
44
|
+
"xopc goal show <goal-id>",
|
|
45
|
+
"xopc goal pause <goal-id>",
|
|
46
|
+
"xopc goal resume <goal-id>",
|
|
47
|
+
"xopc goal archive <goal-id>",
|
|
48
|
+
"xopc goal checklist add <goal-id> \"Tests pass\"",
|
|
49
|
+
"xopc goal evidence add <goal-id> \"CI passed\" --kind test"
|
|
50
|
+
]));
|
|
51
|
+
cmd.addCommand(new Command("list").description("List goals").option("--status <status>", "Filter status (comma-separated)").option("--agent-id <id>", "Filter by agent id").option("--session-key <key>", "Filter by linked session").option("--limit <n>", "Maximum rows", "20").action(async (options) => {
|
|
52
|
+
await withGoals(ctx, async (goals) => {
|
|
53
|
+
const rows = goals.list({
|
|
54
|
+
status: options.status?.split(",").map((s) => s.trim()).filter(Boolean),
|
|
55
|
+
agentId: options.agentId,
|
|
56
|
+
sessionKey: options.sessionKey,
|
|
57
|
+
limit: Number(options.limit) || 20
|
|
58
|
+
});
|
|
59
|
+
if (!rows.length) {
|
|
60
|
+
console.log("No goals.");
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
console.log("Goals:\n");
|
|
64
|
+
rows.forEach((goal) => console.log(`${summarize(goal)}\n`));
|
|
65
|
+
});
|
|
66
|
+
}));
|
|
67
|
+
cmd.addCommand(new Command("new").description("Create a goal").argument("<title>", "Goal title").option("--session-key <key>", "Link to a session key").option("--agent-id <id>", "Agent id").option("--max-turns <n>", "Turn budget").option("--priority <level>", "low, normal, or high", "normal").action(async (title, options) => {
|
|
68
|
+
const cfg = loadConfig(ctx.configPath);
|
|
69
|
+
await withGoals(ctx, async (goals) => {
|
|
70
|
+
const goal = goals.create({
|
|
71
|
+
title,
|
|
72
|
+
sessionKey: options.sessionKey,
|
|
73
|
+
agentId: options.agentId,
|
|
74
|
+
priority: options.priority === "low" || options.priority === "high" ? options.priority : "normal",
|
|
75
|
+
maxTurns: options.maxTurns ? Number(options.maxTurns) : void 0,
|
|
76
|
+
config: cfg,
|
|
77
|
+
source: "cli"
|
|
78
|
+
});
|
|
79
|
+
console.log(`Created goal ${goal.id}`);
|
|
80
|
+
console.log(` ${goal.title}`);
|
|
81
|
+
});
|
|
82
|
+
}));
|
|
83
|
+
cmd.addCommand(new Command("show").description("Show a goal").argument("<goal-id>", "Goal id").action(async (goalId) => {
|
|
84
|
+
await withGoals(ctx, async (goals) => {
|
|
85
|
+
const goal = goals.get(goalId);
|
|
86
|
+
if (!goal) {
|
|
87
|
+
console.error(`Goal not found: ${goalId}`);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
printGoal(goal);
|
|
91
|
+
});
|
|
92
|
+
}));
|
|
93
|
+
for (const [name, description] of [
|
|
94
|
+
["pause", "Pause a goal"],
|
|
95
|
+
["resume", "Resume a goal"],
|
|
96
|
+
["archive", "Archive a goal"]
|
|
97
|
+
]) cmd.addCommand(new Command(name).description(description).argument("<goal-id>", "Goal id").action(async (goalId) => {
|
|
98
|
+
await withGoals(ctx, async (goals) => {
|
|
99
|
+
const goal = name === "pause" ? goals.pause(goalId) : name === "resume" ? goals.resume(goalId) : goals.archive(goalId);
|
|
100
|
+
if (!goal) {
|
|
101
|
+
console.error(`Goal not found: ${goalId}`);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
console.log(`${description}: ${goal.title}`);
|
|
105
|
+
});
|
|
106
|
+
}));
|
|
107
|
+
cmd.addCommand(new Command("runs").description("List goal runs").argument("<goal-id>", "Goal id").option("--limit <n>", "Maximum rows", "20").action(async (goalId, options) => {
|
|
108
|
+
await withGoals(ctx, async (goals) => {
|
|
109
|
+
const runs = goals.listRuns(goalId, Number(options.limit) || 20);
|
|
110
|
+
if (!runs.length) {
|
|
111
|
+
console.log("No runs.");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
runs.forEach((run) => {
|
|
115
|
+
const at = new Date(run.finishedAt ?? run.startedAt).toISOString();
|
|
116
|
+
console.log(` ${run.id} [${run.verdict ?? run.status}] ${at}`);
|
|
117
|
+
if (run.reason) console.log(` ${run.reason}`);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}));
|
|
121
|
+
const checklist = new Command("checklist").description("Manage goal checklist");
|
|
122
|
+
checklist.addCommand(new Command("add").argument("<goal-id>", "Goal id").argument("<text>", "Checklist item").action(async (goalId, text) => {
|
|
123
|
+
await withGoals(ctx, async (goals) => {
|
|
124
|
+
const goal = goals.updateChecklist(goalId, {
|
|
125
|
+
type: "add",
|
|
126
|
+
text
|
|
127
|
+
});
|
|
128
|
+
if (!goal) {
|
|
129
|
+
console.error(`Goal not found: ${goalId}`);
|
|
130
|
+
process.exit(1);
|
|
131
|
+
}
|
|
132
|
+
console.log(`Added checklist item to ${goal.title}`);
|
|
133
|
+
});
|
|
134
|
+
}));
|
|
135
|
+
checklist.addCommand(new Command("mark").argument("<goal-id>", "Goal id").argument("<number>", "1-based checklist item number").argument("<status>", "pending, completed, or impossible").action(async (goalId, number, status) => {
|
|
136
|
+
await withGoals(ctx, async (goals) => {
|
|
137
|
+
const goal = goals.get(goalId);
|
|
138
|
+
const item = goal?.checklist[Number(number) - 1];
|
|
139
|
+
if (!goal || !item) {
|
|
140
|
+
console.error(`Checklist item not found: ${number}`);
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
if (status !== "pending" && status !== "completed" && status !== "impossible") {
|
|
144
|
+
console.error("Status must be pending, completed, or impossible");
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
goals.updateChecklist(goalId, {
|
|
148
|
+
type: "mark",
|
|
149
|
+
itemId: item.id,
|
|
150
|
+
status
|
|
151
|
+
});
|
|
152
|
+
console.log(`Marked item #${number} ${status}`);
|
|
153
|
+
});
|
|
154
|
+
}));
|
|
155
|
+
cmd.addCommand(checklist);
|
|
156
|
+
const evidence = new Command("evidence").description("Manage goal evidence");
|
|
157
|
+
evidence.addCommand(new Command("list").argument("<goal-id>", "Goal id").option("--limit <n>", "Maximum rows", "20").action(async (goalId, options) => {
|
|
158
|
+
await withGoals(ctx, async (goals) => {
|
|
159
|
+
if (!goals.get(goalId)) {
|
|
160
|
+
console.error(`Goal not found: ${goalId}`);
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
const rows = goals.listEvidence(goalId, Number(options.limit) || 20);
|
|
164
|
+
if (!rows.length) {
|
|
165
|
+
console.log("No evidence.");
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
rows.forEach((item) => {
|
|
169
|
+
const at = new Date(item.createdAt).toISOString();
|
|
170
|
+
console.log(` ${item.id} [${item.kind}] ${item.title} · ${at}`);
|
|
171
|
+
if (item.uri) console.log(` URI: ${item.uri}`);
|
|
172
|
+
if (item.summary) console.log(` ${item.summary}`);
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}));
|
|
176
|
+
evidence.addCommand(new Command("add").argument("<goal-id>", "Goal id").argument("<title>", "Evidence title").option("--kind <kind>", "file, diff, command, test, link, message, or artifact", "message").option("--summary <text>", "Evidence summary").option("--uri <uri>", "URI or local path").action(async (goalId, title, options) => {
|
|
177
|
+
await withGoals(ctx, async (goals) => {
|
|
178
|
+
if (!goals.get(goalId)) {
|
|
179
|
+
console.error(`Goal not found: ${goalId}`);
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
const evidence = goals.addEvidence({
|
|
183
|
+
goalId,
|
|
184
|
+
kind: parseEvidenceKind(options.kind),
|
|
185
|
+
title,
|
|
186
|
+
summary: typeof options.summary === "string" ? options.summary : void 0,
|
|
187
|
+
uri: typeof options.uri === "string" ? options.uri : void 0
|
|
188
|
+
});
|
|
189
|
+
console.log(`Added evidence ${evidence.id}`);
|
|
190
|
+
console.log(` [${evidence.kind}] ${evidence.title}`);
|
|
191
|
+
});
|
|
192
|
+
}));
|
|
193
|
+
cmd.addCommand(evidence);
|
|
194
|
+
return cmd;
|
|
195
|
+
}
|
|
196
|
+
register({
|
|
197
|
+
id: "goal",
|
|
198
|
+
name: "goal",
|
|
199
|
+
description: "Manage durable goals",
|
|
200
|
+
factory: createGoalCommand,
|
|
201
|
+
metadata: {
|
|
202
|
+
category: "utility",
|
|
203
|
+
examples: [
|
|
204
|
+
"xopc goal list",
|
|
205
|
+
"xopc goal new \"Ship the release\"",
|
|
206
|
+
"xopc goal show <goal-id>"
|
|
207
|
+
]
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
//#endregion
|
|
211
|
+
export { createGoalCommand };
|
|
212
|
+
|
|
213
|
+
//# sourceMappingURL=goal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goal.js","names":[],"sources":["../../../../src/cli/commands/goal.ts"],"sourcesContent":["import { Command } from 'commander';\n\nimport { loadConfig } from '../../config/loader.js';\nimport { closeXopcDatabase, openXopcDatabase } from '../../storage/sqlite/index.js';\nimport { GoalService, type GoalEvidence, type GoalWithDetails } from '../../goals/index.js';\nimport { register, formatExamples, type CLIContext } from '../registry.js';\n\ntype EvidenceKind = GoalEvidence['kind'];\n\nfunction parseEvidenceKind(raw: string | undefined): EvidenceKind {\n if (\n raw === 'file' ||\n raw === 'diff' ||\n raw === 'command' ||\n raw === 'test' ||\n raw === 'link' ||\n raw === 'message' ||\n raw === 'artifact'\n ) {\n return raw;\n }\n return 'message';\n}\n\nfunction summarize(goal: GoalWithDetails): string {\n const done = goal.checklist.filter((it) => it.status === 'completed' || it.status === 'impossible').length;\n const progress = goal.checklist.length ? ` · checklist ${done}/${goal.checklist.length}` : '';\n const next = goal.nextAction ? `\\n Next: ${goal.nextAction}` : '';\n const blocked = goal.blockedReason ? `\\n Blocked: ${goal.blockedReason}` : '';\n return ` ${goal.id} [${goal.status}] ${goal.title}\\n Agent: ${goal.agentId} · turns ${goal.turnsUsed}/${goal.maxTurns}${progress}${next}${blocked}`;\n}\n\nasync function withGoals<T>(ctx: CLIContext, fn: (goals: GoalService) => Promise<T> | T): Promise<T> {\n openXopcDatabase();\n try {\n return await fn(new GoalService());\n } finally {\n closeXopcDatabase();\n }\n}\n\nfunction printGoal(goal: GoalWithDetails): void {\n console.log(summarize(goal));\n if (goal.checklist.length) {\n console.log('\\nChecklist:');\n goal.checklist.forEach((it, index) => {\n const marker = it.status === 'completed' ? '[x]' : it.status === 'impossible' ? '[!]' : '[ ]';\n const evidence = it.evidenceSummary ? ` (${it.evidenceSummary})` : '';\n console.log(` ${index + 1}. ${marker} ${it.text}${evidence}`);\n });\n }\n}\n\nfunction createGoalCommand(ctx: CLIContext): Command {\n const cmd = new Command('goal')\n .description('Manage durable goals')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc goal list',\n 'xopc goal new \"Ship v0.2 release\"',\n 'xopc goal show <goal-id>',\n 'xopc goal pause <goal-id>',\n 'xopc goal resume <goal-id>',\n 'xopc goal archive <goal-id>',\n 'xopc goal checklist add <goal-id> \"Tests pass\"',\n 'xopc goal evidence add <goal-id> \"CI passed\" --kind test',\n ]),\n );\n\n cmd.addCommand(\n new Command('list')\n .description('List goals')\n .option('--status <status>', 'Filter status (comma-separated)')\n .option('--agent-id <id>', 'Filter by agent id')\n .option('--session-key <key>', 'Filter by linked session')\n .option('--limit <n>', 'Maximum rows', '20')\n .action(async (options) => {\n await withGoals(ctx, async (goals) => {\n const rows = goals.list({\n status: options.status?.split(',').map((s: string) => s.trim()).filter(Boolean),\n agentId: options.agentId,\n sessionKey: options.sessionKey,\n limit: Number(options.limit) || 20,\n });\n if (!rows.length) {\n console.log('No goals.');\n return;\n }\n console.log('Goals:\\n');\n rows.forEach((goal) => console.log(`${summarize(goal)}\\n`));\n });\n }),\n );\n\n cmd.addCommand(\n new Command('new')\n .description('Create a goal')\n .argument('<title>', 'Goal title')\n .option('--session-key <key>', 'Link to a session key')\n .option('--agent-id <id>', 'Agent id')\n .option('--max-turns <n>', 'Turn budget')\n .option('--priority <level>', 'low, normal, or high', 'normal')\n .action(async (title, options) => {\n const cfg = loadConfig(ctx.configPath);\n await withGoals(ctx, async (goals) => {\n const goal = goals.create({\n title,\n sessionKey: options.sessionKey,\n agentId: options.agentId,\n priority: options.priority === 'low' || options.priority === 'high' ? options.priority : 'normal',\n maxTurns: options.maxTurns ? Number(options.maxTurns) : undefined,\n config: cfg,\n source: 'cli',\n });\n console.log(`Created goal ${goal.id}`);\n console.log(` ${goal.title}`);\n });\n }),\n );\n\n cmd.addCommand(\n new Command('show')\n .description('Show a goal')\n .argument('<goal-id>', 'Goal id')\n .action(async (goalId) => {\n await withGoals(ctx, async (goals) => {\n const goal = goals.get(goalId);\n if (!goal) {\n console.error(`Goal not found: ${goalId}`);\n process.exit(1);\n }\n printGoal(goal);\n });\n }),\n );\n\n for (const [name, description] of [\n ['pause', 'Pause a goal'],\n ['resume', 'Resume a goal'],\n ['archive', 'Archive a goal'],\n ] as const) {\n cmd.addCommand(\n new Command(name)\n .description(description)\n .argument('<goal-id>', 'Goal id')\n .action(async (goalId) => {\n await withGoals(ctx, async (goals) => {\n const goal =\n name === 'pause' ? goals.pause(goalId) : name === 'resume' ? goals.resume(goalId) : goals.archive(goalId);\n if (!goal) {\n console.error(`Goal not found: ${goalId}`);\n process.exit(1);\n }\n console.log(`${description}: ${goal.title}`);\n });\n }),\n );\n }\n\n cmd.addCommand(\n new Command('runs')\n .description('List goal runs')\n .argument('<goal-id>', 'Goal id')\n .option('--limit <n>', 'Maximum rows', '20')\n .action(async (goalId, options) => {\n await withGoals(ctx, async (goals) => {\n const runs = goals.listRuns(goalId, Number(options.limit) || 20);\n if (!runs.length) {\n console.log('No runs.');\n return;\n }\n runs.forEach((run) => {\n const at = new Date(run.finishedAt ?? run.startedAt).toISOString();\n console.log(` ${run.id} [${run.verdict ?? run.status}] ${at}`);\n if (run.reason) console.log(` ${run.reason}`);\n });\n });\n }),\n );\n\n const checklist = new Command('checklist').description('Manage goal checklist');\n checklist.addCommand(\n new Command('add')\n .argument('<goal-id>', 'Goal id')\n .argument('<text>', 'Checklist item')\n .action(async (goalId, text) => {\n await withGoals(ctx, async (goals) => {\n const goal = goals.updateChecklist(goalId, { type: 'add', text });\n if (!goal) {\n console.error(`Goal not found: ${goalId}`);\n process.exit(1);\n }\n console.log(`Added checklist item to ${goal.title}`);\n });\n }),\n );\n checklist.addCommand(\n new Command('mark')\n .argument('<goal-id>', 'Goal id')\n .argument('<number>', '1-based checklist item number')\n .argument('<status>', 'pending, completed, or impossible')\n .action(async (goalId, number, status) => {\n await withGoals(ctx, async (goals) => {\n const goal = goals.get(goalId);\n const item = goal?.checklist[Number(number) - 1];\n if (!goal || !item) {\n console.error(`Checklist item not found: ${number}`);\n process.exit(1);\n }\n if (status !== 'pending' && status !== 'completed' && status !== 'impossible') {\n console.error('Status must be pending, completed, or impossible');\n process.exit(1);\n }\n goals.updateChecklist(goalId, { type: 'mark', itemId: item.id, status });\n console.log(`Marked item #${number} ${status}`);\n });\n }),\n );\n cmd.addCommand(checklist);\n\n const evidence = new Command('evidence').description('Manage goal evidence');\n evidence.addCommand(\n new Command('list')\n .argument('<goal-id>', 'Goal id')\n .option('--limit <n>', 'Maximum rows', '20')\n .action(async (goalId, options) => {\n await withGoals(ctx, async (goals) => {\n if (!goals.get(goalId)) {\n console.error(`Goal not found: ${goalId}`);\n process.exit(1);\n }\n const rows = goals.listEvidence(goalId, Number(options.limit) || 20);\n if (!rows.length) {\n console.log('No evidence.');\n return;\n }\n rows.forEach((item) => {\n const at = new Date(item.createdAt).toISOString();\n console.log(` ${item.id} [${item.kind}] ${item.title} · ${at}`);\n if (item.uri) console.log(` URI: ${item.uri}`);\n if (item.summary) console.log(` ${item.summary}`);\n });\n });\n }),\n );\n evidence.addCommand(\n new Command('add')\n .argument('<goal-id>', 'Goal id')\n .argument('<title>', 'Evidence title')\n .option('--kind <kind>', 'file, diff, command, test, link, message, or artifact', 'message')\n .option('--summary <text>', 'Evidence summary')\n .option('--uri <uri>', 'URI or local path')\n .action(async (goalId, title, options) => {\n await withGoals(ctx, async (goals) => {\n if (!goals.get(goalId)) {\n console.error(`Goal not found: ${goalId}`);\n process.exit(1);\n }\n const evidence = goals.addEvidence({\n goalId,\n kind: parseEvidenceKind(options.kind),\n title,\n summary: typeof options.summary === 'string' ? options.summary : undefined,\n uri: typeof options.uri === 'string' ? options.uri : undefined,\n });\n console.log(`Added evidence ${evidence.id}`);\n console.log(` [${evidence.kind}] ${evidence.title}`);\n });\n }),\n );\n cmd.addCommand(evidence);\n\n return cmd;\n}\n\nregister({\n id: 'goal',\n name: 'goal',\n description: 'Manage durable goals',\n factory: createGoalCommand,\n metadata: {\n category: 'utility',\n examples: ['xopc goal list', 'xopc goal new \"Ship the release\"', 'xopc goal show <goal-id>'],\n },\n});\n\nexport { createGoalCommand };\n"],"mappings":"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"}
|
|
@@ -15,6 +15,10 @@ init_schema();
|
|
|
15
15
|
function isInteractive() {
|
|
16
16
|
return process.stdin.isTTY && process.stdout.isTTY;
|
|
17
17
|
}
|
|
18
|
+
function printGitHubStarHint() {
|
|
19
|
+
console.log("\n⭐ If xopc helps you keep long-term AI work moving, please star the repo:");
|
|
20
|
+
console.log(" https://github.com/xopcai/xopc");
|
|
21
|
+
}
|
|
18
22
|
async function setupNonInteractive(_configPath, existingConfig) {
|
|
19
23
|
console.log("\n🤖 AI Model Configuration (Non-Interactive Mode)\n");
|
|
20
24
|
console.log("Current config:", JSON.stringify(existingConfig.agents?.defaults?.models?.chat, null, 2));
|
|
@@ -25,10 +29,11 @@ async function setupNonInteractive(_configPath, existingConfig) {
|
|
|
25
29
|
function createOnboardCommand(ctx) {
|
|
26
30
|
return new Command("onboard").description("Interactive setup wizard for xopc (gateway uses schema defaults)").addHelpText("after", formatExamples([
|
|
27
31
|
"xopc onboard # Full interactive setup",
|
|
32
|
+
"xopc onboard --quick # Configure model only, then launch locally",
|
|
28
33
|
"xopc onboard --model # Configure LLM model only",
|
|
29
34
|
"xopc onboard --channels # Configure messaging channels",
|
|
30
35
|
"xopc onboard --gateway # Apply default gateway settings (quiet)"
|
|
31
|
-
])).option("--model", "Configure LLM provider and model").option("--channels", "Configure messaging channels").option("--gateway", "Configure gateway WebUI").option("--all", "Configure everything (default)").action(async (options) => {
|
|
36
|
+
])).option("--quick", "Configure model only, then launch locally").option("--model", "Configure LLM provider and model").option("--channels", "Configure messaging channels").option("--gateway", "Configure gateway WebUI").option("--all", "Configure everything (default)").action(async (options) => {
|
|
32
37
|
try {
|
|
33
38
|
await runOnboard(options, ctx);
|
|
34
39
|
} catch (error) {
|
|
@@ -50,10 +55,10 @@ async function runOnboard(options, ctx) {
|
|
|
50
55
|
configPath,
|
|
51
56
|
workspacePath
|
|
52
57
|
})).config;
|
|
53
|
-
const doModel = options.model || options.all || !options.channels && !options.gateway;
|
|
54
|
-
const doChannels = options.channels || options.all || !options.model && !options.gateway;
|
|
55
|
-
const doGateway = options.gateway || options.all || !options.model && !options.channels;
|
|
56
|
-
const runFullWizard = !options.model && !options.channels && !options.gateway;
|
|
58
|
+
const doModel = options.quick || options.model || options.all || !options.channels && !options.gateway;
|
|
59
|
+
const doChannels = !options.quick && (options.channels || options.all || !options.model && !options.gateway);
|
|
60
|
+
const doGateway = !options.quick && (options.gateway || options.all || !options.model && !options.channels);
|
|
61
|
+
const runFullWizard = !options.quick && !options.model && !options.channels && !options.gateway;
|
|
57
62
|
/** Any setup step besides the unified launch prompt ran in interactive flow. */
|
|
58
63
|
const didConfigurableSteps = doModel || doChannels || doGateway;
|
|
59
64
|
if (!isInteractive()) {
|
|
@@ -117,6 +122,7 @@ async function runOnboard(options, ctx) {
|
|
|
117
122
|
console.log("\n📁 Files:");
|
|
118
123
|
console.log(" Config:", configPath);
|
|
119
124
|
console.log(" Workspace:", workspacePath);
|
|
125
|
+
printGitHubStarHint();
|
|
120
126
|
if (isInteractive() && didConfigurableSteps) await promptLaunchAfterOnboard(config, ctx, { doChannels });
|
|
121
127
|
process.exit(0);
|
|
122
128
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"onboard.js","names":["runModelSetup","runChannelOnboard"],"sources":["../../../../src/cli/commands/onboard.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { select } from '@inquirer/prompts';\nimport { saveConfig } from '../../config/index.js';\nimport { register, formatExamples } from '../registry.js';\nimport type { CLIContext } from '../registry.js';\nimport type { Config } from '../../config/schema.js';\nimport { setupModel as runModelSetup } from './onboard/model.js';\nimport { colors } from '../utils/colors.js';\nimport { setupChannels as runChannelOnboard, getChannelConfigurators } from './onboard/channels/index.js';\nimport { resolveGatewayLocalClientHost } from '../../config/gateway-bind.js';\nimport { initWorkspace } from '../utils/init-workspace.js';\nimport { ConfigSchema } from '../../config/schema.js';\n\nfunction isInteractive(): boolean {\n return process.stdin.isTTY && process.stdout.isTTY;\n}\n\nasync function setupNonInteractive(_configPath: string, existingConfig: Config): Promise<Config> {\n console.log('\\n🤖 AI Model Configuration (Non-Interactive Mode)\\n');\n console.log('Current config:', JSON.stringify(existingConfig.agents?.defaults?.models?.chat, null, 2));\n console.log('\\n💡 To configure in interactive mode, run: xopc onboard');\n console.log('💡 Or set up manually in:', _configPath);\n return existingConfig;\n}\n\nfunction createOnboardCommand(ctx: CLIContext): Command {\n const cmd = new Command('onboard')\n .description('Interactive setup wizard for xopc (gateway uses schema defaults)')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc onboard # Full interactive setup',\n 'xopc onboard --model # Configure LLM model only',\n 'xopc onboard --channels # Configure messaging channels',\n 'xopc onboard --gateway # Apply default gateway settings (quiet)',\n ])\n )\n .option('--model', 'Configure LLM provider and model')\n .option('--channels', 'Configure messaging channels')\n .option('--gateway', 'Configure gateway WebUI')\n .option('--all', 'Configure everything (default)')\n .action(async (options) => {\n try {\n await runOnboard(options, ctx);\n } catch (error: unknown) {\n const err = error as { name?: string; code?: string };\n if (err?.name === 'ExitPromptError' || err?.code === 'EXIT_PROMPT') {\n console.log('\\n\\n👋 Setup cancelled.');\n process.exit(0);\n }\n throw error;\n }\n });\n\n return cmd;\n}\n\ntype OnboardOptions = {\n model?: boolean;\n channels?: boolean;\n gateway?: boolean;\n all?: boolean;\n};\n\nasync function runOnboard(\n options: OnboardOptions,\n ctx: CLIContext\n): Promise<void> {\n console.log(colors.cyan('\\n🚀 Welcome to xopc setup!\\n'));\n console.log('═'.repeat(50));\n\n const workspacePath = ctx.workspacePath;\n const configPath = ctx.configPath;\n\n const initResult = await initWorkspace({ configPath, workspacePath });\n let config = initResult.config;\n\n // Determine what to configure based on options\n const doModel = options.model || options.all || (!options.channels && !options.gateway);\n const doChannels = options.channels || options.all || (!options.model && !options.gateway);\n const doGateway = options.gateway || options.all || (!options.model && !options.channels);\n const runFullWizard = !options.model && !options.channels && !options.gateway;\n /** Any setup step besides the unified launch prompt ran in interactive flow. */\n const didConfigurableSteps = doModel || doChannels || doGateway;\n\n if (!isInteractive()) {\n // Non-interactive mode\n if (doModel) {\n config = await setupNonInteractive(configPath, config);\n }\n if (doChannels) {\n console.log('\\n💬 Channels Configuration (Non-Interactive Mode)\\n');\n console.log('💡 To configure channels, edit the config file manually.');\n }\n if (doGateway) {\n console.log('\\n🌐 Gateway Configuration (Non-Interactive Mode)\\n');\n console.log('💡 To configure gateway, edit the config file manually.');\n }\n } else {\n // Interactive mode\n if (doModel) {\n config = await runModelSetup(config, ctx);\n }\n\n if (doChannels) {\n const channelIds = (await getChannelConfigurators(config)).map(c => c.id);\n console.log(colors.gray(`\\nChannel onboarding: ${channelIds.join(', ')}\\n`));\n config = await runChannelOnboard(config);\n }\n\n if (doGateway) {\n config = await setupGateway(config);\n }\n }\n\n // Save config once at the end\n await saveConfig(config as Config, configPath);\n\n console.log('\\n' + '═'.repeat(50));\n console.log('\\n🎉 Setup Complete!\\n');\n\n const gatewayAuth = (config as any)?.gateway?.auth;\n const gatewayConfigured =\n gatewayAuth?.mode === 'token' &&\n typeof gatewayAuth?.token === 'string' &&\n gatewayAuth.token.length > 0;\n const port = (config as Config)?.gateway?.port ?? 18790;\n const displayHost = resolveGatewayLocalClientHost(config as Config);\n const gwToken = gatewayConfigured ? (gatewayAuth.token as string) : undefined;\n\n const showGatewaySummary = Boolean(gatewayConfigured && gwToken && (doGateway || runFullWizard));\n\n if (showGatewaySummary && gwToken) {\n const webuiUrl = `http://${displayHost}:${port}?token=${gwToken}`;\n console.log('🌐 Web console (browser) — start here');\n console.log(` Open: http://${displayHost}:${port}`);\n console.log(` Token: ${gwToken.slice(0, 8)}...${gwToken.slice(-8)}`);\n console.log(' Bookmark link (token is saved in the browser when you open it):');\n console.log(` ${webuiUrl}`);\n console.log('');\n }\n\n if (runFullWizard) {\n console.log('🚀 Next steps:');\n if (gatewayConfigured) {\n console.log(' 1. Choose how to launch below (gateway or terminal UI)');\n console.log(' 2. Or chat with: xopc agent -i');\n } else {\n console.log(' 1. Chat in the terminal: xopc agent -i');\n console.log(' 2. Optional: add the Web console: xopc onboard --gateway');\n }\n console.log('');\n } else if (doGateway && gatewayConfigured) {\n console.log('🚀 Next step:');\n console.log(' Start the gateway if it is not running, then open the Web console URL above.');\n console.log('');\n }\n\n console.log('📝 Usage:');\n console.log(' xopc agent -m \"Hello\" # Chat with AI');\n console.log(' xopc agent -i # Interactive mode');\n console.log(' xopc models list # List models');\n console.log(' xopc config validate # Validate xopc.json');\n console.log(' xopc auth list # View authentication');\n console.log(' xopc init # Full state dirs (if upgrading or missing data)');\n\n console.log('\\n📁 Files:');\n console.log(' Config:', configPath);\n console.log(' Workspace:', workspacePath);\n\n if (isInteractive() && didConfigurableSteps) {\n await promptLaunchAfterOnboard(config as Config, ctx, { doChannels });\n }\n\n process.exit(0);\n}\n\nasync function startGatewayAsService(config: Config, ctx: CLIContext): Promise<void> {\n const { startGatewayNow } = await import('./onboard/gateway.js');\n await startGatewayNow(config, ctx);\n}\n\nasync function promptLaunchAfterOnboard(\n config: Config,\n ctx: CLIContext,\n _flags: { doChannels: boolean },\n): Promise<void> {\n console.log('');\n const choice = await select<'tui' | 'gateway' | 'none'>({\n message: 'How do you want to launch xopc now?',\n choices: [\n {\n value: 'tui',\n name: 'Terminal UI (embedded)',\n description: 'xopc tui --local — no gateway process required',\n },\n {\n value: 'gateway',\n name: 'Gateway WebUI (OS service)',\n description: 'Install and start the HTTP gateway for the browser console',\n },\n {\n value: 'none',\n name: 'Exit — I will start manually',\n description: 'Finish setup without starting a runtime',\n },\n ],\n default: 'tui',\n });\n\n if (choice === 'gateway') {\n await startGatewayAsService(config, ctx);\n return;\n }\n\n if (choice === 'tui') {\n const { runTui } = await import('../../tui/tui.js');\n await runTui({ local: true });\n return;\n }\n\n console.log('\\n⏭️ You can start later:');\n console.log(' xopc gateway service install');\n console.log(' xopc gateway');\n console.log(' xopc tui --local');\n}\n\nasync function setupGateway(config: Config): Promise<Config> {\n console.log(colors.cyan('\\n🌐 Gateway WebUI\\n'));\n console.log(\n colors.gray(\n 'Applying defaults from config schema (127.0.0.1:18790, token auth; token generated if missing).\\n',\n ),\n );\n\n const gw = config.gateway ?? {};\n const { randomBytes } = await import('node:crypto');\n const authMode = gw.auth?.mode === 'none' ? ('none' as const) : ('token' as const);\n const token =\n authMode === 'token'\n ? typeof gw.auth?.token === 'string' && gw.auth.token.length > 0\n ? gw.auth.token\n : randomBytes(24).toString('hex')\n : undefined;\n\n const merged: Config = {\n ...config,\n gateway: {\n ...gw,\n bind: gw.bind ?? 'loopback',\n port: gw.port ?? 18790,\n auth:\n authMode === 'none'\n ? { mode: 'none' as const }\n : { mode: 'token' as const, token: token! },\n },\n };\n\n const parsed = ConfigSchema.parse(merged);\n console.log('✅ Gateway defaults applied.\\n');\n return parsed;\n}\n\nregister({\n id: 'onboard',\n name: 'onboard',\n description: 'Interactive setup wizard',\n factory: createOnboardCommand,\n metadata: {\n category: 'setup',\n examples: ['xopc onboard', 'xopc onboard --model', 'xopc onboard --channels'],\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"onboard.js","names":["runModelSetup","runChannelOnboard"],"sources":["../../../../src/cli/commands/onboard.ts"],"sourcesContent":["import { Command } from 'commander';\nimport { select } from '@inquirer/prompts';\nimport { saveConfig } from '../../config/index.js';\nimport { register, formatExamples } from '../registry.js';\nimport type { CLIContext } from '../registry.js';\nimport type { Config } from '../../config/schema.js';\nimport { setupModel as runModelSetup } from './onboard/model.js';\nimport { colors } from '../utils/colors.js';\nimport { setupChannels as runChannelOnboard, getChannelConfigurators } from './onboard/channels/index.js';\nimport { resolveGatewayLocalClientHost } from '../../config/gateway-bind.js';\nimport { initWorkspace } from '../utils/init-workspace.js';\nimport { ConfigSchema } from '../../config/schema.js';\n\nfunction isInteractive(): boolean {\n return process.stdin.isTTY && process.stdout.isTTY;\n}\n\nfunction printGitHubStarHint(): void {\n console.log('\\n⭐ If xopc helps you keep long-term AI work moving, please star the repo:');\n console.log(' https://github.com/xopcai/xopc');\n}\n\nasync function setupNonInteractive(_configPath: string, existingConfig: Config): Promise<Config> {\n console.log('\\n🤖 AI Model Configuration (Non-Interactive Mode)\\n');\n console.log('Current config:', JSON.stringify(existingConfig.agents?.defaults?.models?.chat, null, 2));\n console.log('\\n💡 To configure in interactive mode, run: xopc onboard');\n console.log('💡 Or set up manually in:', _configPath);\n return existingConfig;\n}\n\nfunction createOnboardCommand(ctx: CLIContext): Command {\n const cmd = new Command('onboard')\n .description('Interactive setup wizard for xopc (gateway uses schema defaults)')\n .addHelpText(\n 'after',\n formatExamples([\n 'xopc onboard # Full interactive setup',\n 'xopc onboard --quick # Configure model only, then launch locally',\n 'xopc onboard --model # Configure LLM model only',\n 'xopc onboard --channels # Configure messaging channels',\n 'xopc onboard --gateway # Apply default gateway settings (quiet)',\n ])\n )\n .option('--quick', 'Configure model only, then launch locally')\n .option('--model', 'Configure LLM provider and model')\n .option('--channels', 'Configure messaging channels')\n .option('--gateway', 'Configure gateway WebUI')\n .option('--all', 'Configure everything (default)')\n .action(async (options) => {\n try {\n await runOnboard(options, ctx);\n } catch (error: unknown) {\n const err = error as { name?: string; code?: string };\n if (err?.name === 'ExitPromptError' || err?.code === 'EXIT_PROMPT') {\n console.log('\\n\\n👋 Setup cancelled.');\n process.exit(0);\n }\n throw error;\n }\n });\n\n return cmd;\n}\n\ntype OnboardOptions = {\n quick?: boolean;\n model?: boolean;\n channels?: boolean;\n gateway?: boolean;\n all?: boolean;\n};\n\nasync function runOnboard(\n options: OnboardOptions,\n ctx: CLIContext\n): Promise<void> {\n console.log(colors.cyan('\\n🚀 Welcome to xopc setup!\\n'));\n console.log('═'.repeat(50));\n\n const workspacePath = ctx.workspacePath;\n const configPath = ctx.configPath;\n\n const initResult = await initWorkspace({ configPath, workspacePath });\n let config = initResult.config;\n\n // Determine what to configure based on options\n const doModel = options.quick || options.model || options.all || (!options.channels && !options.gateway);\n const doChannels = !options.quick && (options.channels || options.all || (!options.model && !options.gateway));\n const doGateway = !options.quick && (options.gateway || options.all || (!options.model && !options.channels));\n const runFullWizard = !options.quick && !options.model && !options.channels && !options.gateway;\n /** Any setup step besides the unified launch prompt ran in interactive flow. */\n const didConfigurableSteps = doModel || doChannels || doGateway;\n\n if (!isInteractive()) {\n // Non-interactive mode\n if (doModel) {\n config = await setupNonInteractive(configPath, config);\n }\n if (doChannels) {\n console.log('\\n💬 Channels Configuration (Non-Interactive Mode)\\n');\n console.log('💡 To configure channels, edit the config file manually.');\n }\n if (doGateway) {\n console.log('\\n🌐 Gateway Configuration (Non-Interactive Mode)\\n');\n console.log('💡 To configure gateway, edit the config file manually.');\n }\n } else {\n // Interactive mode\n if (doModel) {\n config = await runModelSetup(config, ctx);\n }\n\n if (doChannels) {\n const channelIds = (await getChannelConfigurators(config)).map(c => c.id);\n console.log(colors.gray(`\\nChannel onboarding: ${channelIds.join(', ')}\\n`));\n config = await runChannelOnboard(config);\n }\n\n if (doGateway) {\n config = await setupGateway(config);\n }\n }\n\n // Save config once at the end\n await saveConfig(config as Config, configPath);\n\n console.log('\\n' + '═'.repeat(50));\n console.log('\\n🎉 Setup Complete!\\n');\n\n const gatewayAuth = (config as any)?.gateway?.auth;\n const gatewayConfigured =\n gatewayAuth?.mode === 'token' &&\n typeof gatewayAuth?.token === 'string' &&\n gatewayAuth.token.length > 0;\n const port = (config as Config)?.gateway?.port ?? 18790;\n const displayHost = resolveGatewayLocalClientHost(config as Config);\n const gwToken = gatewayConfigured ? (gatewayAuth.token as string) : undefined;\n\n const showGatewaySummary = Boolean(gatewayConfigured && gwToken && (doGateway || runFullWizard));\n\n if (showGatewaySummary && gwToken) {\n const webuiUrl = `http://${displayHost}:${port}?token=${gwToken}`;\n console.log('🌐 Web console (browser) — start here');\n console.log(` Open: http://${displayHost}:${port}`);\n console.log(` Token: ${gwToken.slice(0, 8)}...${gwToken.slice(-8)}`);\n console.log(' Bookmark link (token is saved in the browser when you open it):');\n console.log(` ${webuiUrl}`);\n console.log('');\n }\n\n if (runFullWizard) {\n console.log('🚀 Next steps:');\n if (gatewayConfigured) {\n console.log(' 1. Choose how to launch below (gateway or terminal UI)');\n console.log(' 2. Or chat with: xopc agent -i');\n } else {\n console.log(' 1. Chat in the terminal: xopc agent -i');\n console.log(' 2. Optional: add the Web console: xopc onboard --gateway');\n }\n console.log('');\n } else if (doGateway && gatewayConfigured) {\n console.log('🚀 Next step:');\n console.log(' Start the gateway if it is not running, then open the Web console URL above.');\n console.log('');\n }\n\n console.log('📝 Usage:');\n console.log(' xopc agent -m \"Hello\" # Chat with AI');\n console.log(' xopc agent -i # Interactive mode');\n console.log(' xopc models list # List models');\n console.log(' xopc config validate # Validate xopc.json');\n console.log(' xopc auth list # View authentication');\n console.log(' xopc init # Full state dirs (if upgrading or missing data)');\n\n console.log('\\n📁 Files:');\n console.log(' Config:', configPath);\n console.log(' Workspace:', workspacePath);\n\n printGitHubStarHint();\n\n if (isInteractive() && didConfigurableSteps) {\n await promptLaunchAfterOnboard(config as Config, ctx, { doChannels });\n }\n\n process.exit(0);\n}\n\nasync function startGatewayAsService(config: Config, ctx: CLIContext): Promise<void> {\n const { startGatewayNow } = await import('./onboard/gateway.js');\n await startGatewayNow(config, ctx);\n}\n\nasync function promptLaunchAfterOnboard(\n config: Config,\n ctx: CLIContext,\n _flags: { doChannels: boolean },\n): Promise<void> {\n console.log('');\n const choice = await select<'tui' | 'gateway' | 'none'>({\n message: 'How do you want to launch xopc now?',\n choices: [\n {\n value: 'tui',\n name: 'Terminal UI (embedded)',\n description: 'xopc tui --local — no gateway process required',\n },\n {\n value: 'gateway',\n name: 'Gateway WebUI (OS service)',\n description: 'Install and start the HTTP gateway for the browser console',\n },\n {\n value: 'none',\n name: 'Exit — I will start manually',\n description: 'Finish setup without starting a runtime',\n },\n ],\n default: 'tui',\n });\n\n if (choice === 'gateway') {\n await startGatewayAsService(config, ctx);\n return;\n }\n\n if (choice === 'tui') {\n const { runTui } = await import('../../tui/tui.js');\n await runTui({ local: true });\n return;\n }\n\n console.log('\\n⏭️ You can start later:');\n console.log(' xopc gateway service install');\n console.log(' xopc gateway');\n console.log(' xopc tui --local');\n}\n\nasync function setupGateway(config: Config): Promise<Config> {\n console.log(colors.cyan('\\n🌐 Gateway WebUI\\n'));\n console.log(\n colors.gray(\n 'Applying defaults from config schema (127.0.0.1:18790, token auth; token generated if missing).\\n',\n ),\n );\n\n const gw = config.gateway ?? {};\n const { randomBytes } = await import('node:crypto');\n const authMode = gw.auth?.mode === 'none' ? ('none' as const) : ('token' as const);\n const token =\n authMode === 'token'\n ? typeof gw.auth?.token === 'string' && gw.auth.token.length > 0\n ? gw.auth.token\n : randomBytes(24).toString('hex')\n : undefined;\n\n const merged: Config = {\n ...config,\n gateway: {\n ...gw,\n bind: gw.bind ?? 'loopback',\n port: gw.port ?? 18790,\n auth:\n authMode === 'none'\n ? { mode: 'none' as const }\n : { mode: 'token' as const, token: token! },\n },\n };\n\n const parsed = ConfigSchema.parse(merged);\n console.log('✅ Gateway defaults applied.\\n');\n return parsed;\n}\n\nregister({\n id: 'onboard',\n name: 'onboard',\n description: 'Interactive setup wizard',\n factory: createOnboardCommand,\n metadata: {\n category: 'setup',\n examples: ['xopc onboard', 'xopc onboard --model', 'xopc onboard --channels'],\n },\n});\n"],"mappings":"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"}
|
package/dist/src/config/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema } from "../../extensions/telegram/src/config-schema.js";
|
|
2
2
|
import { WeixinAccountConfigSchema, WeixinConfigSchema } from "../../extensions/weixin/src/config-schema.js";
|
|
3
|
-
import { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
3
|
+
import { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigSchema, CronConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultModelRef, init_schema, parseModelRef } from "./schema.js";
|
|
4
4
|
import { applyConfigOverrides, getConfigOverrides, resetConfigOverrides, setConfigOverride, unsetConfigOverride } from "./runtime-overrides.js";
|
|
5
5
|
import { ENV_VARS, XOPC_DB_FILENAME, resolveHomeDir, resolveStateDir, resolveXopcDatabasePath } from "./paths-state.js";
|
|
6
6
|
import { expandWorkspacePathString, init_workspace_path, normalizeWorkspaceDir, resolveWorkspaceRoot } from "./workspace-path.js";
|
|
@@ -27,6 +27,6 @@ init_workspace_path();
|
|
|
27
27
|
init_models_json();
|
|
28
28
|
init_resolve_config_value();
|
|
29
29
|
//#endregion
|
|
30
|
-
export { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, CronConfigSchema, CustomModelSchema, ENV_VARS, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
|
|
30
|
+
export { AgentConfigSchema, AgentDefaultsSchema, AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BASE_RELOAD_RULES, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, ChannelsConfigSchema, CommandsConfigSchema, ConfigHotReloader, ConfigSchema, CronConfigSchema, CustomModelSchema, ENV_VARS, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, FILENAMES, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelOverrideSchema, ModelsDevConfigSchema, ModelsJsonSchema, OpenAICompatSchema, OpenAICompletionsCompatSchema, OpenAIResponsesCompatSchema, OpenRouterRoutingSchema, ProfileManager, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VercelGatewayRoutingSchema, WORKSPACE_FILES, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, XOPC_DB_FILENAME, applyConfigOverrides, buildReloadPlan, canonicalizeConfiguredMcpServer, clearConfigValueCache, createProfile, deleteProfile, diffConfigPaths, existsSync, expandWorkspacePathString, extractProfileAgentId, formatThinkingLevels, getAgentDefaultModelRef, getAllowedCommands, getCacheStats, getConfigOverrides, getCurrentProfile, getDefaultModelValues, resolveModelsJsonPath as getModelsJsonPath, getProfileManager, getProfileNameFromDir, getSwitchCommand, getWorkspacePath, isKnownCliMcpTypeAlias, listAgentProfileMarkdownDirs, listAgentWorkspaceDirs, listProfiles, listThinkingLevels, loadConfig, loadModelsJson, matchReloadRule, modelsJsonExists, normalizeConfiguredMcpServers, normalizeElevatedMode, normalizeReasoningLevel, normalizeThinkLevel, normalizeVerboseLevel, normalizeWorkspaceDir, parseModelRef, resetConfigOverrides, resolveAgentAuthProfilesPath, resolveAgentDir, resolveAgentDir$1 as resolveAgentDirFromConfig, resolveAgentHomeDir, resolveAgentHomeDir$1 as resolveAgentHomeDirFromConfig, resolveAgentProfileDir, resolveAgentProfileMarkdownPath, resolveAgentWorkspaceDir, resolveAuthProfilesPath, resolveBinDir, resolveBundledExtensionsDir, resolveBundledSkillsDir, resolveConfigPath, resolveConfigValue, resolveCredentialsDir, resolveCronDir, resolveCronJobsPath, resolveDefaultAgentWorkspaceDir, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession, resolveExtensionSdkPath, resolveExtensionsDir, resolveExtensionsLockPath, resolveHeaders, resolveHomeDir, resolveInboxDir, resolveInboxMessagePath, resolveInboxPendingDir, resolveInboxProcessedDir, resolveLogPath, resolveLogsDir, resolveModelsJsonPath, resolveNodeBinDir, resolveNodeBinPath, resolveNodeToolsDir, resolveNpmBinPath, resolveOAuthPath, resolvePidPath, resolveProfileStateDir, resolveSkillPath, resolveSkillsCachePath, resolveSkillsDir, resolveSkillsLockPath, resolveSocketPath, resolveStateDir, resolveStatusPath, resolveToolsDir, resolveWorkspaceExtensionsDir, resolveWorkspaceFile, resolveWorkspaceRoot, resolveWorkspaceStateDir, resolveWorkspaceStatePath, resolveXopcBinPath, resolveXopcDatabasePath, resolveXopcMcpTransportAlias, saveConfig, saveModelsJson, setConfigOverride, testApiKeyResolution, thinkLevelToNumber, unsetConfigOverride, validateModelsConfig };
|
|
31
31
|
|
|
32
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1540,6 +1540,61 @@ export declare const UpdateAutoConfigSchema: z.ZodOptional<z.ZodObject<{
|
|
|
1540
1540
|
betaCheckIntervalHours: z.ZodDefault<z.ZodNumber>;
|
|
1541
1541
|
}, z.core.$strict>>;
|
|
1542
1542
|
/** Persistent `/goal` (Ralph loop) — Hermes-aligned defaults. */
|
|
1543
|
+
export declare const GoalNotificationEventSchema: z.ZodEnum<{
|
|
1544
|
+
done: "done";
|
|
1545
|
+
blocked: "blocked";
|
|
1546
|
+
needs_input: "needs_input";
|
|
1547
|
+
queue_failed: "queue_failed";
|
|
1548
|
+
queue_retry: "queue_retry";
|
|
1549
|
+
queue_succeeded: "queue_succeeded";
|
|
1550
|
+
queue_skipped: "queue_skipped";
|
|
1551
|
+
}>;
|
|
1552
|
+
export declare const GoalNotificationTargetSchema: z.ZodObject<{
|
|
1553
|
+
channel: z.ZodString;
|
|
1554
|
+
chatId: z.ZodString;
|
|
1555
|
+
accountId: z.ZodOptional<z.ZodString>;
|
|
1556
|
+
threadId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
1557
|
+
silent: z.ZodOptional<z.ZodBoolean>;
|
|
1558
|
+
events: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1559
|
+
done: "done";
|
|
1560
|
+
blocked: "blocked";
|
|
1561
|
+
needs_input: "needs_input";
|
|
1562
|
+
queue_failed: "queue_failed";
|
|
1563
|
+
queue_retry: "queue_retry";
|
|
1564
|
+
queue_succeeded: "queue_succeeded";
|
|
1565
|
+
queue_skipped: "queue_skipped";
|
|
1566
|
+
}>>>;
|
|
1567
|
+
}, z.core.$strict>;
|
|
1568
|
+
export declare const GoalNotificationsConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
1569
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1570
|
+
includeLinkedSessions: z.ZodDefault<z.ZodBoolean>;
|
|
1571
|
+
channels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
1572
|
+
events: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
1573
|
+
done: "done";
|
|
1574
|
+
blocked: "blocked";
|
|
1575
|
+
needs_input: "needs_input";
|
|
1576
|
+
queue_failed: "queue_failed";
|
|
1577
|
+
queue_retry: "queue_retry";
|
|
1578
|
+
queue_succeeded: "queue_succeeded";
|
|
1579
|
+
queue_skipped: "queue_skipped";
|
|
1580
|
+
}>>>;
|
|
1581
|
+
targets: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
1582
|
+
channel: z.ZodString;
|
|
1583
|
+
chatId: z.ZodString;
|
|
1584
|
+
accountId: z.ZodOptional<z.ZodString>;
|
|
1585
|
+
threadId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
1586
|
+
silent: z.ZodOptional<z.ZodBoolean>;
|
|
1587
|
+
events: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1588
|
+
done: "done";
|
|
1589
|
+
blocked: "blocked";
|
|
1590
|
+
needs_input: "needs_input";
|
|
1591
|
+
queue_failed: "queue_failed";
|
|
1592
|
+
queue_retry: "queue_retry";
|
|
1593
|
+
queue_succeeded: "queue_succeeded";
|
|
1594
|
+
queue_skipped: "queue_skipped";
|
|
1595
|
+
}>>>;
|
|
1596
|
+
}, z.core.$strict>>>;
|
|
1597
|
+
}, z.core.$strict>>;
|
|
1543
1598
|
export declare const GoalsConfigSchema: z.ZodObject<{
|
|
1544
1599
|
maxTurns: z.ZodDefault<z.ZodNumber>;
|
|
1545
1600
|
judgeModelRef: z.ZodOptional<z.ZodString>;
|
|
@@ -1547,6 +1602,36 @@ export declare const GoalsConfigSchema: z.ZodObject<{
|
|
|
1547
1602
|
maxConsecutiveParseFailures: z.ZodDefault<z.ZodNumber>;
|
|
1548
1603
|
judgeTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
1549
1604
|
checklistHistoryChars: z.ZodDefault<z.ZodNumber>;
|
|
1605
|
+
notifications: z.ZodDefault<z.ZodObject<{
|
|
1606
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1607
|
+
includeLinkedSessions: z.ZodDefault<z.ZodBoolean>;
|
|
1608
|
+
channels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
1609
|
+
events: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
1610
|
+
done: "done";
|
|
1611
|
+
blocked: "blocked";
|
|
1612
|
+
needs_input: "needs_input";
|
|
1613
|
+
queue_failed: "queue_failed";
|
|
1614
|
+
queue_retry: "queue_retry";
|
|
1615
|
+
queue_succeeded: "queue_succeeded";
|
|
1616
|
+
queue_skipped: "queue_skipped";
|
|
1617
|
+
}>>>;
|
|
1618
|
+
targets: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
1619
|
+
channel: z.ZodString;
|
|
1620
|
+
chatId: z.ZodString;
|
|
1621
|
+
accountId: z.ZodOptional<z.ZodString>;
|
|
1622
|
+
threadId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
1623
|
+
silent: z.ZodOptional<z.ZodBoolean>;
|
|
1624
|
+
events: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1625
|
+
done: "done";
|
|
1626
|
+
blocked: "blocked";
|
|
1627
|
+
needs_input: "needs_input";
|
|
1628
|
+
queue_failed: "queue_failed";
|
|
1629
|
+
queue_retry: "queue_retry";
|
|
1630
|
+
queue_succeeded: "queue_succeeded";
|
|
1631
|
+
queue_skipped: "queue_skipped";
|
|
1632
|
+
}>>>;
|
|
1633
|
+
}, z.core.$strict>>>;
|
|
1634
|
+
}, z.core.$strict>>;
|
|
1550
1635
|
}, z.core.$strict>;
|
|
1551
1636
|
export type GoalsConfig = z.infer<typeof GoalsConfigSchema>;
|
|
1552
1637
|
export declare const UpdateConfigSchema: z.ZodOptional<z.ZodObject<{
|
|
@@ -2265,6 +2350,36 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
2265
2350
|
maxConsecutiveParseFailures: z.ZodDefault<z.ZodNumber>;
|
|
2266
2351
|
judgeTimeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
2267
2352
|
checklistHistoryChars: z.ZodDefault<z.ZodNumber>;
|
|
2353
|
+
notifications: z.ZodDefault<z.ZodObject<{
|
|
2354
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
2355
|
+
includeLinkedSessions: z.ZodDefault<z.ZodBoolean>;
|
|
2356
|
+
channels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
2357
|
+
events: z.ZodDefault<z.ZodArray<z.ZodEnum<{
|
|
2358
|
+
done: "done";
|
|
2359
|
+
blocked: "blocked";
|
|
2360
|
+
needs_input: "needs_input";
|
|
2361
|
+
queue_failed: "queue_failed";
|
|
2362
|
+
queue_retry: "queue_retry";
|
|
2363
|
+
queue_succeeded: "queue_succeeded";
|
|
2364
|
+
queue_skipped: "queue_skipped";
|
|
2365
|
+
}>>>;
|
|
2366
|
+
targets: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
2367
|
+
channel: z.ZodString;
|
|
2368
|
+
chatId: z.ZodString;
|
|
2369
|
+
accountId: z.ZodOptional<z.ZodString>;
|
|
2370
|
+
threadId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
2371
|
+
silent: z.ZodOptional<z.ZodBoolean>;
|
|
2372
|
+
events: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
2373
|
+
done: "done";
|
|
2374
|
+
blocked: "blocked";
|
|
2375
|
+
needs_input: "needs_input";
|
|
2376
|
+
queue_failed: "queue_failed";
|
|
2377
|
+
queue_retry: "queue_retry";
|
|
2378
|
+
queue_succeeded: "queue_succeeded";
|
|
2379
|
+
queue_skipped: "queue_skipped";
|
|
2380
|
+
}>>>;
|
|
2381
|
+
}, z.core.$strict>>>;
|
|
2382
|
+
}, z.core.$strict>>;
|
|
2268
2383
|
}, z.core.$strict>>;
|
|
2269
2384
|
extensions: z.ZodDefault<z.ZodType<Record<string, unknown>, unknown, z.core.$ZodTypeInternals<Record<string, unknown>, unknown>>>;
|
|
2270
2385
|
providers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|