charness 3.6.1 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +267 -0
- package/DEVELOPMENT.md +31 -5
- package/MIGRATION_RENAME_TO_CHARNESS.md +3 -2
- package/README.md +84 -782
- package/SETUP.md +37 -10
- package/agent-plugin/.claude-plugin/plugin.json +7 -0
- package/agent-plugin/README.md +35 -0
- package/agent-plugin/skills/charness-delegate-claude/SKILL.md +85 -0
- package/agent-plugin/skills/charness-delegate-claude/summarize-events.py +90 -0
- package/agent-plugin/skills/charness-delegate-opencode/SKILL.md +68 -0
- package/agent-plugin/skills/charness-manager/SKILL.md +152 -0
- package/dist/adapters/adapterNames.d.ts +6 -0
- package/dist/adapters/adapterNames.d.ts.map +1 -1
- package/dist/adapters/adapterNames.js +8 -2
- package/dist/adapters/adapterNames.js.map +1 -1
- package/dist/adapters/claudeCliAdapter.d.ts +8 -0
- package/dist/adapters/claudeCliAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeCliAdapter.js +42 -5
- package/dist/adapters/claudeCliAdapter.js.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.d.ts +10 -9
- package/dist/adapters/claudeJsonStreamAdapter.d.ts.map +1 -1
- package/dist/adapters/claudeJsonStreamAdapter.js +53 -55
- package/dist/adapters/claudeJsonStreamAdapter.js.map +1 -1
- package/dist/adapters/createAdapter.d.ts +8 -0
- package/dist/adapters/createAdapter.d.ts.map +1 -1
- package/dist/adapters/createAdapter.js +14 -2
- package/dist/adapters/createAdapter.js.map +1 -1
- package/dist/adapters/openCodeAdapter.d.ts +43 -6
- package/dist/adapters/openCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/openCodeAdapter.js +95 -6
- package/dist/adapters/openCodeAdapter.js.map +1 -1
- package/dist/agentLogin/agentLogin.d.ts +1 -1
- package/dist/agentLogin/agentLogin.d.ts.map +1 -1
- package/dist/apiRetryKick.d.ts +4 -3
- package/dist/apiRetryKick.d.ts.map +1 -1
- package/dist/apiRetryKick.js +16 -9
- package/dist/apiRetryKick.js.map +1 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +1313 -381
- package/dist/bot.js.map +1 -1
- package/dist/cli/claudeProfiles.d.ts +11 -6
- package/dist/cli/claudeProfiles.d.ts.map +1 -1
- package/dist/cli/claudeProfiles.js +50 -22
- package/dist/cli/claudeProfiles.js.map +1 -1
- package/dist/cli/hot.d.ts +5 -0
- package/dist/cli/hot.d.ts.map +1 -1
- package/dist/cli/hot.js +71 -25
- package/dist/cli/hot.js.map +1 -1
- package/dist/cli/tscWatchGuard.d.ts +95 -0
- package/dist/cli/tscWatchGuard.d.ts.map +1 -0
- package/dist/cli/tscWatchGuard.js +295 -0
- package/dist/cli/tscWatchGuard.js.map +1 -0
- package/dist/cli.js +12 -1
- package/dist/cli.js.map +1 -1
- package/dist/connectors/jira/answerSink.d.ts +10 -0
- package/dist/connectors/jira/answerSink.d.ts.map +1 -1
- package/dist/connectors/jira/answerSink.js +13 -0
- package/dist/connectors/jira/answerSink.js.map +1 -1
- package/dist/connectors/jira/config.d.ts +2 -0
- package/dist/connectors/jira/config.d.ts.map +1 -1
- package/dist/connectors/jira/config.js +9 -1
- package/dist/connectors/jira/config.js.map +1 -1
- package/dist/connectors/jira/connector.d.ts +11 -1
- package/dist/connectors/jira/connector.d.ts.map +1 -1
- package/dist/connectors/jira/connector.js +7 -0
- package/dist/connectors/jira/connector.js.map +1 -1
- package/dist/connectors/jira/inbound.d.ts +27 -4
- package/dist/connectors/jira/inbound.d.ts.map +1 -1
- package/dist/connectors/jira/inbound.js +69 -8
- package/dist/connectors/jira/inbound.js.map +1 -1
- package/dist/connectors/jira/issueBlocks.d.ts +5 -0
- package/dist/connectors/jira/issueBlocks.d.ts.map +1 -1
- package/dist/connectors/jira/issueBlocks.js +11 -0
- package/dist/connectors/jira/issueBlocks.js.map +1 -1
- package/dist/connectors/telegram/bindPicker.d.ts +5 -0
- package/dist/connectors/telegram/bindPicker.d.ts.map +1 -1
- package/dist/connectors/telegram/bindPicker.js +18 -1
- package/dist/connectors/telegram/bindPicker.js.map +1 -1
- package/dist/connectors/telegram/bindPickerClaims.d.ts +46 -0
- package/dist/connectors/telegram/bindPickerClaims.d.ts.map +1 -0
- package/dist/connectors/telegram/bindPickerClaims.js +83 -0
- package/dist/connectors/telegram/bindPickerClaims.js.map +1 -0
- package/dist/connectors/telegram/bindSweep.d.ts +32 -0
- package/dist/connectors/telegram/bindSweep.d.ts.map +1 -0
- package/dist/connectors/telegram/bindSweep.js +47 -0
- package/dist/connectors/telegram/bindSweep.js.map +1 -0
- package/dist/connectors/telegram/bindingWelcome.d.ts +23 -0
- package/dist/connectors/telegram/bindingWelcome.d.ts.map +1 -0
- package/dist/connectors/telegram/bindingWelcome.js +26 -0
- package/dist/connectors/telegram/bindingWelcome.js.map +1 -0
- package/dist/connectors/telegram/botApiConnection.d.ts +74 -0
- package/dist/connectors/telegram/botApiConnection.d.ts.map +1 -0
- package/dist/connectors/telegram/botApiConnection.js +201 -0
- package/dist/connectors/telegram/botApiConnection.js.map +1 -0
- package/dist/connectors/telegram/commands/botCore.d.ts +8 -2
- package/dist/connectors/telegram/commands/botCore.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/botSkills.d.ts +21 -0
- package/dist/connectors/telegram/commands/botSkills.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/botSkills.js +133 -0
- package/dist/connectors/telegram/commands/botSkills.js.map +1 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts +5 -0
- package/dist/connectors/telegram/commands/callbackMessage.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/callbackMessage.js +9 -0
- package/dist/connectors/telegram/commands/callbackMessage.js.map +1 -1
- package/dist/connectors/telegram/commands/compaction.d.ts +65 -3
- package/dist/connectors/telegram/commands/compaction.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/compaction.js +512 -94
- package/dist/connectors/telegram/commands/compaction.js.map +1 -1
- package/dist/connectors/telegram/commands/displayModes.d.ts +1 -1
- package/dist/connectors/telegram/commands/displayModes.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/displayModes.js +6 -18
- package/dist/connectors/telegram/commands/displayModes.js.map +1 -1
- package/dist/connectors/telegram/commands/fallbackChain.js +5 -5
- package/dist/connectors/telegram/commands/fallbackChain.js.map +1 -1
- package/dist/connectors/telegram/commands/reminders.d.ts +1 -1
- package/dist/connectors/telegram/commands/reminders.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/reminders.js +4 -15
- package/dist/connectors/telegram/commands/reminders.js.map +1 -1
- package/dist/connectors/telegram/commands/selfUpdate.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/selfUpdate.js +1 -11
- package/dist/connectors/telegram/commands/selfUpdate.js.map +1 -1
- package/dist/connectors/telegram/commands/taskAgents.d.ts +22 -0
- package/dist/connectors/telegram/commands/taskAgents.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/taskAgents.js +104 -0
- package/dist/connectors/telegram/commands/taskAgents.js.map +1 -0
- package/dist/connectors/telegram/commands/todo.d.ts +82 -0
- package/dist/connectors/telegram/commands/todo.d.ts.map +1 -0
- package/dist/connectors/telegram/commands/todo.js +384 -0
- package/dist/connectors/telegram/commands/todo.js.map +1 -0
- package/dist/connectors/telegram/commands/topicCommand.d.ts +6 -2
- package/dist/connectors/telegram/commands/topicCommand.d.ts.map +1 -1
- package/dist/connectors/telegram/commands/topicCommand.js +6 -9
- package/dist/connectors/telegram/commands/topicCommand.js.map +1 -1
- package/dist/connectors/telegram/openBindMessages.d.ts +45 -0
- package/dist/connectors/telegram/openBindMessages.d.ts.map +1 -0
- package/dist/connectors/telegram/openBindMessages.js +67 -0
- package/dist/connectors/telegram/openBindMessages.js.map +1 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts +49 -0
- package/dist/connectors/telegram/outputFlushPlan.d.ts.map +1 -1
- package/dist/connectors/telegram/outputFlushPlan.js +46 -0
- package/dist/connectors/telegram/outputFlushPlan.js.map +1 -1
- package/dist/connectors/telegram/pendingTopicName.d.ts +26 -0
- package/dist/connectors/telegram/pendingTopicName.d.ts.map +1 -0
- package/dist/connectors/telegram/pendingTopicName.js +27 -0
- package/dist/connectors/telegram/pendingTopicName.js.map +1 -0
- package/dist/connectors/test/connector.d.ts.map +1 -1
- package/dist/connectors/test/connector.js +6 -1
- package/dist/connectors/test/connector.js.map +1 -1
- package/dist/i18n/de.d.ts.map +1 -1
- package/dist/i18n/de.js +90 -7
- package/dist/i18n/de.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +90 -7
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +90 -7
- package/dist/i18n/es.js.map +1 -1
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +90 -7
- package/dist/i18n/fr.js.map +1 -1
- package/dist/i18n/hi.d.ts.map +1 -1
- package/dist/i18n/hi.js +90 -7
- package/dist/i18n/hi.js.map +1 -1
- package/dist/i18n/ja.d.ts.map +1 -1
- package/dist/i18n/ja.js +90 -7
- package/dist/i18n/ja.js.map +1 -1
- package/dist/i18n/ka.d.ts.map +1 -1
- package/dist/i18n/ka.js +90 -7
- package/dist/i18n/ka.js.map +1 -1
- package/dist/i18n/pt.d.ts.map +1 -1
- package/dist/i18n/pt.js +90 -7
- package/dist/i18n/pt.js.map +1 -1
- package/dist/i18n/ru.d.ts.map +1 -1
- package/dist/i18n/ru.js +90 -7
- package/dist/i18n/ru.js.map +1 -1
- package/dist/i18n/uk.d.ts.map +1 -1
- package/dist/i18n/uk.js +90 -7
- package/dist/i18n/uk.js.map +1 -1
- package/dist/i18n/uz.d.ts.map +1 -1
- package/dist/i18n/uz.js +90 -7
- package/dist/i18n/uz.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +90 -7
- package/dist/i18n/zh.js.map +1 -1
- package/dist/i18n.d.ts +1 -1
- package/dist/i18n.js +1 -1
- package/dist/installManager.d.ts +13 -0
- package/dist/installManager.d.ts.map +1 -1
- package/dist/installManager.js +38 -4
- package/dist/installManager.js.map +1 -1
- package/dist/instanceSettings.d.ts +40 -1
- package/dist/instanceSettings.d.ts.map +1 -1
- package/dist/instanceSettings.js +105 -26
- package/dist/instanceSettings.js.map +1 -1
- package/dist/openCodeQuestionFlow.d.ts +30 -0
- package/dist/openCodeQuestionFlow.d.ts.map +1 -1
- package/dist/openCodeQuestionFlow.js +43 -0
- package/dist/openCodeQuestionFlow.js.map +1 -1
- package/dist/postToSession.d.ts +20 -5
- package/dist/postToSession.d.ts.map +1 -1
- package/dist/postToSession.js +38 -7
- package/dist/postToSession.js.map +1 -1
- package/dist/remoteRun/cliArgs.d.ts +73 -0
- package/dist/remoteRun/cliArgs.d.ts.map +1 -0
- package/dist/remoteRun/cliArgs.js +197 -0
- package/dist/remoteRun/cliArgs.js.map +1 -0
- package/dist/remoteRun/commands.d.ts +56 -0
- package/dist/remoteRun/commands.d.ts.map +1 -0
- package/dist/remoteRun/commands.js +306 -0
- package/dist/remoteRun/commands.js.map +1 -0
- package/dist/remoteRun/depsPlan.d.ts +16 -0
- package/dist/remoteRun/depsPlan.d.ts.map +1 -0
- package/dist/remoteRun/depsPlan.js +82 -0
- package/dist/remoteRun/depsPlan.js.map +1 -0
- package/dist/remoteRun/exitCodes.d.ts +34 -0
- package/dist/remoteRun/exitCodes.d.ts.map +1 -0
- package/dist/remoteRun/exitCodes.js +38 -0
- package/dist/remoteRun/exitCodes.js.map +1 -0
- package/dist/remoteRun/foreground.d.ts +29 -0
- package/dist/remoteRun/foreground.d.ts.map +1 -0
- package/dist/remoteRun/foreground.js +159 -0
- package/dist/remoteRun/foreground.js.map +1 -0
- package/dist/remoteRun/interrupts.d.ts +17 -0
- package/dist/remoteRun/interrupts.d.ts.map +1 -0
- package/dist/remoteRun/interrupts.js +41 -0
- package/dist/remoteRun/interrupts.js.map +1 -0
- package/dist/remoteRun/jobFiles.d.ts +31 -0
- package/dist/remoteRun/jobFiles.d.ts.map +1 -0
- package/dist/remoteRun/jobFiles.js +84 -0
- package/dist/remoteRun/jobFiles.js.map +1 -0
- package/dist/remoteRun/jobFormat.d.ts +16 -0
- package/dist/remoteRun/jobFormat.d.ts.map +1 -0
- package/dist/remoteRun/jobFormat.js +130 -0
- package/dist/remoteRun/jobFormat.js.map +1 -0
- package/dist/remoteRun/jobId.d.ts +15 -0
- package/dist/remoteRun/jobId.d.ts.map +1 -0
- package/dist/remoteRun/jobId.js +85 -0
- package/dist/remoteRun/jobId.js.map +1 -0
- package/dist/remoteRun/jobMeta.d.ts +18 -0
- package/dist/remoteRun/jobMeta.d.ts.map +1 -0
- package/dist/remoteRun/jobMeta.js +33 -0
- package/dist/remoteRun/jobMeta.js.map +1 -0
- package/dist/remoteRun/jobQuery.d.ts +12 -0
- package/dist/remoteRun/jobQuery.d.ts.map +1 -0
- package/dist/remoteRun/jobQuery.js +22 -0
- package/dist/remoteRun/jobQuery.js.map +1 -0
- package/dist/remoteRun/jobRecords.d.ts +22 -0
- package/dist/remoteRun/jobRecords.d.ts.map +1 -0
- package/dist/remoteRun/jobRecords.js +145 -0
- package/dist/remoteRun/jobRecords.js.map +1 -0
- package/dist/remoteRun/jobState.d.ts +62 -0
- package/dist/remoteRun/jobState.d.ts.map +1 -0
- package/dist/remoteRun/jobState.js +132 -0
- package/dist/remoteRun/jobState.js.map +1 -0
- package/dist/remoteRun/leaseTiming.d.ts +18 -0
- package/dist/remoteRun/leaseTiming.d.ts.map +1 -0
- package/dist/remoteRun/leaseTiming.js +43 -0
- package/dist/remoteRun/leaseTiming.js.map +1 -0
- package/dist/remoteRun/output.d.ts +35 -0
- package/dist/remoteRun/output.d.ts.map +1 -0
- package/dist/remoteRun/output.js +82 -0
- package/dist/remoteRun/output.js.map +1 -0
- package/dist/remoteRun/pathPatterns.d.ts +33 -0
- package/dist/remoteRun/pathPatterns.d.ts.map +1 -0
- package/dist/remoteRun/pathPatterns.js +115 -0
- package/dist/remoteRun/pathPatterns.js.map +1 -0
- package/dist/remoteRun/probe.d.ts +56 -0
- package/dist/remoteRun/probe.d.ts.map +1 -0
- package/dist/remoteRun/probe.js +123 -0
- package/dist/remoteRun/probe.js.map +1 -0
- package/dist/remoteRun/project.d.ts +26 -0
- package/dist/remoteRun/project.d.ts.map +1 -0
- package/dist/remoteRun/project.js +159 -0
- package/dist/remoteRun/project.js.map +1 -0
- package/dist/remoteRun/projectConfig.d.ts +38 -0
- package/dist/remoteRun/projectConfig.d.ts.map +1 -0
- package/dist/remoteRun/projectConfig.js +87 -0
- package/dist/remoteRun/projectConfig.js.map +1 -0
- package/dist/remoteRun/remoteRunCli.d.ts +15 -0
- package/dist/remoteRun/remoteRunCli.d.ts.map +1 -0
- package/dist/remoteRun/remoteRunCli.js +144 -0
- package/dist/remoteRun/remoteRunCli.js.map +1 -0
- package/dist/remoteRun/remoteRunError.d.ts +14 -0
- package/dist/remoteRun/remoteRunError.d.ts.map +1 -0
- package/dist/remoteRun/remoteRunError.js +28 -0
- package/dist/remoteRun/remoteRunError.js.map +1 -0
- package/dist/remoteRun/rsync.d.ts +17 -0
- package/dist/remoteRun/rsync.d.ts.map +1 -0
- package/dist/remoteRun/rsync.js +39 -0
- package/dist/remoteRun/rsync.js.map +1 -0
- package/dist/remoteRun/runnerClient.d.ts +50 -0
- package/dist/remoteRun/runnerClient.d.ts.map +1 -0
- package/dist/remoteRun/runnerClient.js +139 -0
- package/dist/remoteRun/runnerClient.js.map +1 -0
- package/dist/remoteRun/runners.d.ts +57 -0
- package/dist/remoteRun/runners.d.ts.map +1 -0
- package/dist/remoteRun/runners.js +181 -0
- package/dist/remoteRun/runners.js.map +1 -0
- package/dist/remoteRun/runnersConfig.d.ts +44 -0
- package/dist/remoteRun/runnersConfig.d.ts.map +1 -0
- package/dist/remoteRun/runnersConfig.js +107 -0
- package/dist/remoteRun/runnersConfig.js.map +1 -0
- package/dist/remoteRun/safeCopy.d.ts +31 -0
- package/dist/remoteRun/safeCopy.d.ts.map +1 -0
- package/dist/remoteRun/safeCopy.js +137 -0
- package/dist/remoteRun/safeCopy.js.map +1 -0
- package/dist/remoteRun/sendPlan.d.ts +67 -0
- package/dist/remoteRun/sendPlan.d.ts.map +1 -0
- package/dist/remoteRun/sendPlan.js +139 -0
- package/dist/remoteRun/sendPlan.js.map +1 -0
- package/dist/remoteRun/ssh.d.ts +62 -0
- package/dist/remoteRun/ssh.d.ts.map +1 -0
- package/dist/remoteRun/ssh.js +202 -0
- package/dist/remoteRun/ssh.js.map +1 -0
- package/dist/remoteRun/submit.d.ts +29 -0
- package/dist/remoteRun/submit.d.ts.map +1 -0
- package/dist/remoteRun/submit.js +142 -0
- package/dist/remoteRun/submit.js.map +1 -0
- package/dist/requests/answerRequest.d.ts +5 -0
- package/dist/requests/answerRequest.d.ts.map +1 -1
- package/dist/requests/answerRequest.js +16 -1
- package/dist/requests/answerRequest.js.map +1 -1
- package/dist/requests/requestLedger.d.ts +13 -0
- package/dist/requests/requestLedger.d.ts.map +1 -1
- package/dist/requests/requestLedger.js +9 -0
- package/dist/requests/requestLedger.js.map +1 -1
- package/dist/requests/topicRequestSettle.d.ts +30 -0
- package/dist/requests/topicRequestSettle.d.ts.map +1 -0
- package/dist/requests/topicRequestSettle.js +23 -0
- package/dist/requests/topicRequestSettle.js.map +1 -0
- package/dist/requests/wakeUpEngine.d.ts +4 -0
- package/dist/requests/wakeUpEngine.d.ts.map +1 -1
- package/dist/requests/wakeUpEngine.js +5 -1
- package/dist/requests/wakeUpEngine.js.map +1 -1
- package/dist/scheduler/delivery.d.ts +2 -0
- package/dist/scheduler/delivery.d.ts.map +1 -1
- package/dist/scheduler/delivery.js +8 -4
- package/dist/scheduler/delivery.js.map +1 -1
- package/dist/scheduler/mcpSurface.d.ts +59 -10
- package/dist/scheduler/mcpSurface.d.ts.map +1 -1
- package/dist/scheduler/mcpSurface.js +276 -79
- package/dist/scheduler/mcpSurface.js.map +1 -1
- package/dist/scheduler/recurrence.d.ts +5 -0
- package/dist/scheduler/recurrence.d.ts.map +1 -1
- package/dist/scheduler/recurrence.js +12 -2
- package/dist/scheduler/recurrence.js.map +1 -1
- package/dist/scheduler/strictToolInput.d.ts +45 -0
- package/dist/scheduler/strictToolInput.d.ts.map +1 -0
- package/dist/scheduler/strictToolInput.js +155 -0
- package/dist/scheduler/strictToolInput.js.map +1 -0
- package/dist/scheduler/types.d.ts +5 -0
- package/dist/scheduler/types.d.ts.map +1 -1
- package/dist/scheduler/workerWatch.d.ts +23 -0
- package/dist/scheduler/workerWatch.d.ts.map +1 -0
- package/dist/scheduler/workerWatch.js +26 -0
- package/dist/scheduler/workerWatch.js.map +1 -0
- package/dist/selfUpdate/emittedSource.d.ts +11 -0
- package/dist/selfUpdate/emittedSource.d.ts.map +1 -0
- package/dist/selfUpdate/emittedSource.js +24 -0
- package/dist/selfUpdate/emittedSource.js.map +1 -0
- package/dist/selfUpdate/gitSource.d.ts +0 -6
- package/dist/selfUpdate/gitSource.d.ts.map +1 -1
- package/dist/selfUpdate/gitSource.js +2 -18
- package/dist/selfUpdate/gitSource.js.map +1 -1
- package/dist/selfUpdate/updatePending.d.ts +1 -1
- package/dist/sendErrorClassifier.d.ts +10 -0
- package/dist/sendErrorClassifier.d.ts.map +1 -1
- package/dist/sendErrorClassifier.js +22 -0
- package/dist/sendErrorClassifier.js.map +1 -1
- package/dist/state.d.ts +78 -7
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +125 -8
- package/dist/state.js.map +1 -1
- package/dist/stateFile.d.ts +9 -0
- package/dist/stateFile.d.ts.map +1 -0
- package/dist/stateFile.js +57 -0
- package/dist/stateFile.js.map +1 -0
- package/dist/stt/sttInstall.d.ts +7 -3
- package/dist/stt/sttInstall.d.ts.map +1 -1
- package/dist/stt/sttInstall.js +8 -4
- package/dist/stt/sttInstall.js.map +1 -1
- package/dist/stt/sttSettings.d.ts +2 -1
- package/dist/stt/sttSettings.d.ts.map +1 -1
- package/dist/stt/sttSettings.js +3 -2
- package/dist/stt/sttSettings.js.map +1 -1
- package/dist/stt/transcribeChain.js +2 -0
- package/dist/stt/transcribeChain.js.map +1 -1
- package/dist/testTimings.d.ts +13 -3
- package/dist/testTimings.d.ts.map +1 -1
- package/dist/testTimings.js +26 -2
- package/dist/testTimings.js.map +1 -1
- package/dist/todos/board.d.ts +83 -0
- package/dist/todos/board.d.ts.map +1 -0
- package/dist/todos/board.js +227 -0
- package/dist/todos/board.js.map +1 -0
- package/dist/todos/format.d.ts +33 -0
- package/dist/todos/format.d.ts.map +1 -0
- package/dist/todos/format.js +90 -0
- package/dist/todos/format.js.map +1 -0
- package/dist/todos/merge.d.ts +46 -0
- package/dist/todos/merge.d.ts.map +1 -0
- package/dist/todos/merge.js +137 -0
- package/dist/todos/merge.js.map +1 -0
- package/dist/todos/midTurn.d.ts +75 -0
- package/dist/todos/midTurn.d.ts.map +1 -0
- package/dist/todos/midTurn.js +214 -0
- package/dist/todos/midTurn.js.map +1 -0
- package/dist/todos/nag.d.ts +85 -0
- package/dist/todos/nag.d.ts.map +1 -0
- package/dist/todos/nag.js +103 -0
- package/dist/todos/nag.js.map +1 -0
- package/dist/todos/order.d.ts +25 -0
- package/dist/todos/order.d.ts.map +1 -0
- package/dist/todos/order.js +61 -0
- package/dist/todos/order.js.map +1 -0
- package/dist/todos/projects.d.ts +102 -0
- package/dist/todos/projects.d.ts.map +1 -0
- package/dist/todos/projects.js +342 -0
- package/dist/todos/projects.js.map +1 -0
- package/dist/todos/registry.d.ts +64 -0
- package/dist/todos/registry.d.ts.map +1 -0
- package/dist/todos/registry.js +116 -0
- package/dist/todos/registry.js.map +1 -0
- package/dist/todos/reminderEngine.d.ts +78 -0
- package/dist/todos/reminderEngine.d.ts.map +1 -0
- package/dist/todos/reminderEngine.js +162 -0
- package/dist/todos/reminderEngine.js.map +1 -0
- package/dist/todos/store.d.ts +34 -0
- package/dist/todos/store.d.ts.map +1 -0
- package/dist/todos/store.js +208 -0
- package/dist/todos/store.js.map +1 -0
- package/dist/todos/tools.d.ts +26 -0
- package/dist/todos/tools.d.ts.map +1 -0
- package/dist/todos/tools.js +25 -0
- package/dist/todos/tools.js.map +1 -0
- package/dist/todos/types.d.ts +85 -0
- package/dist/todos/types.d.ts.map +1 -0
- package/dist/todos/types.js +30 -0
- package/dist/todos/types.js.map +1 -0
- package/dist/trackers/taskAgentLimit.d.ts +58 -0
- package/dist/trackers/taskAgentLimit.d.ts.map +1 -0
- package/dist/trackers/taskAgentLimit.js +62 -0
- package/dist/trackers/taskAgentLimit.js.map +1 -0
- package/dist/trackers/taskAgentSlots.d.ts +109 -0
- package/dist/trackers/taskAgentSlots.d.ts.map +1 -0
- package/dist/trackers/taskAgentSlots.js +227 -0
- package/dist/trackers/taskAgentSlots.js.map +1 -0
- package/dist/trackers/types.d.ts +14 -0
- package/dist/trackers/types.d.ts.map +1 -0
- package/dist/trackers/types.js +3 -0
- package/dist/trackers/types.js.map +1 -0
- package/dist/types.d.ts +80 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/adoptReplayGate.d.ts +16 -0
- package/dist/utils/adoptReplayGate.d.ts.map +1 -0
- package/dist/utils/adoptReplayGate.js +35 -0
- package/dist/utils/adoptReplayGate.js.map +1 -0
- package/dist/utils/agentPlugin.d.ts +113 -0
- package/dist/utils/agentPlugin.d.ts.map +1 -0
- package/dist/utils/agentPlugin.js +192 -0
- package/dist/utils/agentPlugin.js.map +1 -0
- package/dist/utils/autoContinueOnLimit.d.ts +7 -4
- package/dist/utils/autoContinueOnLimit.d.ts.map +1 -1
- package/dist/utils/autoContinueOnLimit.js +8 -5
- package/dist/utils/autoContinueOnLimit.js.map +1 -1
- package/dist/utils/botSkills.d.ts +62 -0
- package/dist/utils/botSkills.d.ts.map +1 -0
- package/dist/utils/botSkills.js +53 -0
- package/dist/utils/botSkills.js.map +1 -0
- package/dist/utils/botSkillsSetting.d.ts +7 -0
- package/dist/utils/botSkillsSetting.d.ts.map +1 -0
- package/dist/utils/botSkillsSetting.js +9 -0
- package/dist/utils/botSkillsSetting.js.map +1 -0
- package/dist/utils/claudeCodeVersion.d.ts +7 -0
- package/dist/utils/claudeCodeVersion.d.ts.map +1 -1
- package/dist/utils/claudeCodeVersion.js +14 -1
- package/dist/utils/claudeCodeVersion.js.map +1 -1
- package/dist/utils/claudeCompactHook.d.ts +33 -15
- package/dist/utils/claudeCompactHook.d.ts.map +1 -1
- package/dist/utils/claudeCompactHook.js +36 -17
- package/dist/utils/claudeCompactHook.js.map +1 -1
- package/dist/utils/claudeCompactSummary.d.ts +15 -0
- package/dist/utils/claudeCompactSummary.d.ts.map +1 -0
- package/dist/utils/claudeCompactSummary.js +96 -0
- package/dist/utils/claudeCompactSummary.js.map +1 -0
- package/dist/utils/claudeLimitSwitch.d.ts +11 -9
- package/dist/utils/claudeLimitSwitch.d.ts.map +1 -1
- package/dist/utils/claudeLimitSwitch.js +18 -16
- package/dist/utils/claudeLimitSwitch.js.map +1 -1
- package/dist/utils/claudeProfiles.d.ts +5 -0
- package/dist/utils/claudeProfiles.d.ts.map +1 -1
- package/dist/utils/claudeProfiles.js +14 -0
- package/dist/utils/claudeProfiles.js.map +1 -1
- package/dist/utils/claudeSessionTitle.d.ts +2 -1
- package/dist/utils/claudeSessionTitle.d.ts.map +1 -1
- package/dist/utils/claudeSessionTitle.js +14 -14
- package/dist/utils/claudeSessionTitle.js.map +1 -1
- package/dist/utils/claudeUsage.d.ts +95 -15
- package/dist/utils/claudeUsage.d.ts.map +1 -1
- package/dist/utils/claudeUsage.js +241 -41
- package/dist/utils/claudeUsage.js.map +1 -1
- package/dist/utils/claudeUsageRefresher.d.ts +10 -0
- package/dist/utils/claudeUsageRefresher.d.ts.map +1 -1
- package/dist/utils/claudeUsageRefresher.js +11 -0
- package/dist/utils/claudeUsageRefresher.js.map +1 -1
- package/dist/utils/claudeUserEntry.d.ts +50 -0
- package/dist/utils/claudeUserEntry.d.ts.map +1 -0
- package/dist/utils/claudeUserEntry.js +120 -0
- package/dist/utils/claudeUserEntry.js.map +1 -0
- package/dist/utils/clearThreadOutputQueues.d.ts +4 -3
- package/dist/utils/clearThreadOutputQueues.d.ts.map +1 -1
- package/dist/utils/clearThreadOutputQueues.js +1 -1
- package/dist/utils/clearThreadOutputQueues.js.map +1 -1
- package/dist/utils/compactOnIdle.d.ts +33 -13
- package/dist/utils/compactOnIdle.d.ts.map +1 -1
- package/dist/utils/compactOnIdle.js +35 -15
- package/dist/utils/compactOnIdle.js.map +1 -1
- package/dist/utils/fallbackBridge.d.ts +5 -0
- package/dist/utils/fallbackBridge.d.ts.map +1 -1
- package/dist/utils/fallbackBridge.js +19 -3
- package/dist/utils/fallbackBridge.js.map +1 -1
- package/dist/utils/fallbackChain.d.ts +9 -3
- package/dist/utils/fallbackChain.d.ts.map +1 -1
- package/dist/utils/fallbackChain.js +21 -3
- package/dist/utils/fallbackChain.js.map +1 -1
- package/dist/utils/fileSendPlan.d.ts +6 -0
- package/dist/utils/fileSendPlan.d.ts.map +1 -1
- package/dist/utils/fileSendPlan.js +11 -0
- package/dist/utils/fileSendPlan.js.map +1 -1
- package/dist/utils/fileSendService.d.ts +7 -1
- package/dist/utils/fileSendService.d.ts.map +1 -1
- package/dist/utils/fileSendService.js +6 -2
- package/dist/utils/fileSendService.js.map +1 -1
- package/dist/utils/groupFinalizePlan.d.ts +8 -10
- package/dist/utils/groupFinalizePlan.d.ts.map +1 -1
- package/dist/utils/groupFinalizePlan.js +8 -12
- package/dist/utils/groupFinalizePlan.js.map +1 -1
- package/dist/utils/jsonStreamHost.d.ts +13 -0
- package/dist/utils/jsonStreamHost.d.ts.map +1 -1
- package/dist/utils/jsonStreamHost.js +13 -0
- package/dist/utils/jsonStreamHost.js.map +1 -1
- package/dist/utils/messageSendService.d.ts +5 -3
- package/dist/utils/messageSendService.d.ts.map +1 -1
- package/dist/utils/messageSendService.js +12 -5
- package/dist/utils/messageSendService.js.map +1 -1
- package/dist/utils/openCodeCompactPlugin.d.ts +39 -14
- package/dist/utils/openCodeCompactPlugin.d.ts.map +1 -1
- package/dist/utils/openCodeCompactPlugin.js +106 -38
- package/dist/utils/openCodeCompactPlugin.js.map +1 -1
- package/dist/utils/promptDelivery.d.ts +29 -12
- package/dist/utils/promptDelivery.d.ts.map +1 -1
- package/dist/utils/promptDelivery.js +13 -5
- package/dist/utils/promptDelivery.js.map +1 -1
- package/dist/utils/sentKindsSummary.d.ts +10 -0
- package/dist/utils/sentKindsSummary.d.ts.map +1 -0
- package/dist/utils/sentKindsSummary.js +18 -0
- package/dist/utils/sentKindsSummary.js.map +1 -0
- package/dist/utils/telegramError.d.ts +6 -0
- package/dist/utils/telegramError.d.ts.map +1 -1
- package/dist/utils/telegramError.js +12 -0
- package/dist/utils/telegramError.js.map +1 -1
- package/dist/utils/topicView.d.ts +1 -1
- package/dist/utils/topicView.js +1 -1
- package/dist/utils/transcribeAudio.d.ts +10 -0
- package/dist/utils/transcribeAudio.d.ts.map +1 -1
- package/dist/utils/transcribeAudio.js +22 -3
- package/dist/utils/transcribeAudio.js.map +1 -1
- package/dist/utils/transcriptErrorTime.d.ts +8 -0
- package/dist/utils/transcriptErrorTime.d.ts.map +1 -0
- package/dist/utils/transcriptErrorTime.js +56 -0
- package/dist/utils/transcriptErrorTime.js.map +1 -0
- package/dist/utils/wedgeRecovery.d.ts +2 -0
- package/dist/utils/wedgeRecovery.d.ts.map +1 -1
- package/dist/utils/wedgeRecovery.js +1 -1
- package/dist/utils/wedgeRecovery.js.map +1 -1
- package/package.json +11 -3
- package/remoteRun/runner.sh +1242 -0
- package/stt/gigaam_sidecar.py +555 -50
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
3
|
* @description The OpenCode plugin the bot installs so that a compaction OpenCode
|
|
4
|
-
* runs ON ITS OWN when the context overflows also
|
|
5
|
-
* skills to load again
|
|
4
|
+
* runs ON ITS OWN when the context overflows also gets the resume guidance — the
|
|
5
|
+
* skills to load again and the next-steps checklist that ends the summary
|
|
6
|
+
* (`compactionResumeGuidance`).
|
|
6
7
|
*
|
|
7
|
-
* WHY this exists: the
|
|
8
|
+
* WHY this exists: the resume guidance rides the bot's per-invocation
|
|
8
9
|
* `instruction` (`POST /session/:id/summarize`), which an overflow compaction
|
|
9
10
|
* never receives, and unlike D3 it is not baked into the fork's prompt. OpenCode
|
|
10
11
|
* runs the plugin hook `experimental.session.compacting` before EVERY compaction
|
|
@@ -18,6 +19,15 @@
|
|
|
18
19
|
* file and rewrites it only when its content changed; the user's `opencode.json`
|
|
19
20
|
* is never touched.
|
|
20
21
|
*
|
|
22
|
+
* The file name carries a hash of the plugin's content. `GET /config` reports a
|
|
23
|
+
* loaded plugin only by that name, so a name that is the same for every version
|
|
24
|
+
* would make an instance that loaded an OLDER text read as up to date: it would
|
|
25
|
+
* never be recreated, and the bot would leave the guidance out of its own
|
|
26
|
+
* instruction on the strength of a plugin that carries less than the current
|
|
27
|
+
* one. With the hash only an instance that loaded the current text counts
|
|
28
|
+
* ({@link checkHasOpenCodeCompactPlugin}); an older copy of the file is removed on
|
|
29
|
+
* install, so a new instance never loads two.
|
|
30
|
+
*
|
|
21
31
|
* A RUNNING instance does not rescan: OpenCode loads plugins once per project
|
|
22
32
|
* folder. `POST /instance/dispose?directory=` makes the next request recreate the
|
|
23
33
|
* folder's instance, which then loads the plugin — no server restart, sessions
|
|
@@ -29,34 +39,41 @@
|
|
|
29
39
|
*
|
|
30
40
|
* The hook only sees the session id, never the bot's per-invocation instruction,
|
|
31
41
|
* so it cannot skip a compaction that already carries the guidance. The bot
|
|
32
|
-
* therefore leaves the
|
|
33
|
-
* instance has
|
|
42
|
+
* therefore leaves the resume guidance out of its instruction when the folder's
|
|
43
|
+
* instance has the CURRENT plugin ({@link checkHasOpenCodeCompactPlugin} over
|
|
34
44
|
* `GET /config`), and keeps it otherwise.
|
|
35
45
|
*/
|
|
36
46
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
37
47
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
48
|
};
|
|
39
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.
|
|
50
|
+
exports.openCodeCompactPluginFileName = exports.legacyOpenCodeCompactPluginId = exports.legacyOpenCodeCompactPluginFileName = exports.openCodeCompactPluginId = void 0;
|
|
41
51
|
exports.getOpenCodeCompactPluginContext = getOpenCodeCompactPluginContext;
|
|
42
52
|
exports.buildOpenCodeCompactPluginSource = buildOpenCodeCompactPluginSource;
|
|
53
|
+
exports.getOpenCodeCompactPluginFileName = getOpenCodeCompactPluginFileName;
|
|
43
54
|
exports.resolveOpenCodeGlobalPluginDir = resolveOpenCodeGlobalPluginDir;
|
|
44
55
|
exports.checkHasOpenCodeCompactPlugin = checkHasOpenCodeCompactPlugin;
|
|
45
56
|
exports.getCompactPluginActivation = getCompactPluginActivation;
|
|
57
|
+
exports.checkIsOpenCodeSessionStatusIdle = checkIsOpenCodeSessionStatusIdle;
|
|
46
58
|
exports.installOpenCodeCompactPlugin = installOpenCodeCompactPlugin;
|
|
59
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
47
60
|
const fs_1 = __importDefault(require("fs"));
|
|
48
61
|
const os_1 = __importDefault(require("os"));
|
|
49
62
|
const path_1 = __importDefault(require("path"));
|
|
50
63
|
const compactOnIdle_1 = require("./compactOnIdle");
|
|
51
64
|
const legacyNames_1 = require("../legacyNames");
|
|
52
|
-
/** File name of the plugin in OpenCode's plugin folder; also how the bot recognises it in `GET /config`. */
|
|
53
|
-
exports.openCodeCompactPluginFileName = 'charness-compaction.js';
|
|
54
65
|
/** OpenCode requires a path plugin to export an id. */
|
|
55
66
|
exports.openCodeCompactPluginId = 'charness-compaction';
|
|
67
|
+
/** The part of the plugin's file name before the content hash. */
|
|
68
|
+
const openCodeCompactPluginFileStem = 'charness-compaction';
|
|
69
|
+
/** Hex digits of the content hash in the file name: enough that two texts never share one, short enough to read. */
|
|
70
|
+
const openCodeCompactPluginHashLength = 8;
|
|
71
|
+
/** The file name of any version of the plugin: the stem, an optional content hash (the first release had none). */
|
|
72
|
+
const openCodeCompactPluginFileNamePattern = new RegExp(`^${openCodeCompactPluginFileStem}(?:-[0-9a-f]{${openCodeCompactPluginHashLength}})?\\.js$`);
|
|
56
73
|
/**
|
|
57
|
-
* The file and id the same plugin had before the rename.
|
|
58
|
-
*
|
|
59
|
-
*
|
|
74
|
+
* The file and id the same plugin had before the rename. The file is removed on
|
|
75
|
+
* install so a new instance does not load both; an instance that loaded it carries
|
|
76
|
+
* an older text, so it no longer counts as "has the plugin".
|
|
60
77
|
*/
|
|
61
78
|
exports.legacyOpenCodeCompactPluginFileName = 'telegramcode-compaction.js';
|
|
62
79
|
exports.legacyOpenCodeCompactPluginId = 'telegramcode-compaction';
|
|
@@ -64,10 +81,10 @@ exports.legacyOpenCodeCompactPluginId = 'telegramcode-compaction';
|
|
|
64
81
|
* @description The text the plugin adds to every compaction prompt. OpenCode
|
|
65
82
|
* appends it AFTER the bot's per-invocation instruction, which may end with the
|
|
66
83
|
* F2 closing-section directive ("write nothing after the end marker"), so the text
|
|
67
|
-
* says outright that the skills list
|
|
84
|
+
* says outright that the skills list and the checklist belong inside the summary.
|
|
68
85
|
*/
|
|
69
86
|
function getOpenCodeCompactPluginContext() {
|
|
70
|
-
return `Additional instruction for the summary itself (put it inside the summary, never after a closing section the instructions above require): ${compactOnIdle_1.
|
|
87
|
+
return `Additional instruction for the summary itself (put it inside the summary, never after a closing section the instructions above require): ${compactOnIdle_1.compactionResumeGuidance}`;
|
|
71
88
|
}
|
|
72
89
|
/** @description The plugin module source: a v1 plugin (`default` export with `id` + `server`). */
|
|
73
90
|
function buildOpenCodeCompactPluginSource(context) {
|
|
@@ -85,24 +102,36 @@ function buildOpenCodeCompactPluginSource(context) {
|
|
|
85
102
|
'',
|
|
86
103
|
].join('\n');
|
|
87
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* @description The plugin's file name for a given source: the stem and a hash of the source. `GET /config` names a
|
|
107
|
+
* loaded plugin by this file name alone, so the name is what tells an instance that loaded this text from one that
|
|
108
|
+
* loaded an older one.
|
|
109
|
+
*/
|
|
110
|
+
function getOpenCodeCompactPluginFileName(source) {
|
|
111
|
+
const contentHash = crypto_1.default.createHash('sha256').update(source).digest('hex').slice(0, openCodeCompactPluginHashLength);
|
|
112
|
+
return `${openCodeCompactPluginFileStem}-${contentHash}.js`;
|
|
113
|
+
}
|
|
114
|
+
/** File name of the CURRENT plugin in OpenCode's plugin folder; also how the bot recognises it in `GET /config`. */
|
|
115
|
+
exports.openCodeCompactPluginFileName = getOpenCodeCompactPluginFileName(buildOpenCodeCompactPluginSource(getOpenCodeCompactPluginContext()));
|
|
88
116
|
/** @description OpenCode's global plugin folder, resolved the way OpenCode resolves it (XDG config home). */
|
|
89
117
|
function resolveOpenCodeGlobalPluginDir(env) {
|
|
90
118
|
const configHome = env.XDG_CONFIG_HOME || path_1.default.join(os_1.default.homedir(), '.config');
|
|
91
119
|
return path_1.default.join(configHome, 'opencode', 'plugins');
|
|
92
120
|
}
|
|
93
121
|
/**
|
|
94
|
-
* @description Whether a `GET /config` `plugin` list contains the bot
|
|
122
|
+
* @description Whether a `GET /config` `plugin` list contains the CURRENT bot plugin. A
|
|
95
123
|
* spec is a string or a `[spec, options]` tuple; OpenCode reports a path plugin as
|
|
96
|
-
* a `file://` URL.
|
|
124
|
+
* a `file://` URL. Only the current file name counts: an instance that loaded an
|
|
125
|
+
* older version of the plugin (another content hash, the unhashed first release, the
|
|
126
|
+
* pre-rename file) keeps the older text in memory, so it must be recreated and the
|
|
127
|
+
* bot must still send the guidance itself.
|
|
97
128
|
*/
|
|
98
129
|
function checkHasOpenCodeCompactPlugin(pluginSpecs) {
|
|
99
130
|
if (!Array.isArray(pluginSpecs))
|
|
100
131
|
return false;
|
|
101
132
|
return pluginSpecs.some((entry) => {
|
|
102
133
|
const spec = Array.isArray(entry) ? entry[0] : entry;
|
|
103
|
-
return
|
|
104
|
-
(spec.endsWith(`/${exports.openCodeCompactPluginFileName}`) ||
|
|
105
|
-
spec.endsWith(`/${exports.legacyOpenCodeCompactPluginFileName}`)));
|
|
134
|
+
return typeof spec === 'string' && spec.endsWith(`/${exports.openCodeCompactPluginFileName}`);
|
|
106
135
|
});
|
|
107
136
|
}
|
|
108
137
|
/**
|
|
@@ -114,11 +143,16 @@ function checkHasOpenCodeCompactPlugin(pluginSpecs) {
|
|
|
114
143
|
function getCompactPluginActivation(input) {
|
|
115
144
|
if (checkHasOpenCodeCompactPlugin(input.pluginSpecs))
|
|
116
145
|
return 'loaded';
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
146
|
+
return checkIsOpenCodeSessionStatusIdle(input.sessionStatus) ? 'recreate' : 'busy';
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @description Whether a `GET /session/status` map says every session of the instance is idle. A status the bot
|
|
150
|
+
* cannot read counts as busy: an instance or a server is never recreated on a guess.
|
|
151
|
+
*/
|
|
152
|
+
function checkIsOpenCodeSessionStatusIdle(sessionStatus) {
|
|
153
|
+
if (!sessionStatus || typeof sessionStatus !== 'object' || Array.isArray(sessionStatus))
|
|
154
|
+
return false;
|
|
155
|
+
return Object.values(sessionStatus).every((entry) => typeof entry === 'object' && entry !== null && 'type' in entry && entry.type === 'idle');
|
|
122
156
|
}
|
|
123
157
|
/**
|
|
124
158
|
* @description Remove the plugin file a pre-rename release installed, so a folder
|
|
@@ -140,39 +174,73 @@ function removeLegacyOpenCodeCompactPlugin(pluginDir) {
|
|
|
140
174
|
}
|
|
141
175
|
(0, legacyNames_1.warnLegacyNameOnce)('opencode-compact-plugin', `${(0, legacyNames_1.formatDeprecation)(legacyPath, path_1.default.join(pluginDir, exports.openCodeCompactPluginFileName))}; the old file was removed`);
|
|
142
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* @description Remove every OTHER version of the plugin from the folder, so a new
|
|
179
|
+
* folder instance loads one copy of the guidance, not an older text beside the
|
|
180
|
+
* current one. Only a file that is the bot's own (its name fits the plugin's and it
|
|
181
|
+
* exports the plugin's id) goes; anything else stays. Best-effort: a failure leaves a
|
|
182
|
+
* duplicate guidance, which is harmless.
|
|
183
|
+
*/
|
|
184
|
+
function removeOutdatedOpenCodeCompactPlugins(pluginDir) {
|
|
185
|
+
let fileNames;
|
|
186
|
+
try {
|
|
187
|
+
fileNames = fs_1.default.readdirSync(pluginDir);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
for (const fileName of fileNames) {
|
|
193
|
+
if (fileName === exports.openCodeCompactPluginFileName || !openCodeCompactPluginFileNamePattern.test(fileName))
|
|
194
|
+
continue;
|
|
195
|
+
const outdatedPath = path_1.default.join(pluginDir, fileName);
|
|
196
|
+
try {
|
|
197
|
+
if (!fs_1.default.readFileSync(outdatedPath, 'utf-8').includes(JSON.stringify(exports.openCodeCompactPluginId)))
|
|
198
|
+
continue;
|
|
199
|
+
fs_1.default.unlinkSync(outdatedPath);
|
|
200
|
+
console.log(`[compact-plugin] removed the outdated plugin file ${outdatedPath}`);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// Gone already or not ours to read: it stays.
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
143
207
|
/**
|
|
144
208
|
* @description Put the plugin into OpenCode's global plugin folder. Idempotent:
|
|
145
209
|
* an identical file is left alone, a stale one is replaced atomically (a folder
|
|
146
210
|
* instance being created concurrently never reads half a file). Any failure is
|
|
147
211
|
* logged and returned — the plugin improves a summary, it must never block an
|
|
148
212
|
* OpenCode start or the bot's boot. The file a pre-rename release installed is
|
|
149
|
-
* removed first
|
|
213
|
+
* removed first; the older versions of the current name, once the current file is
|
|
214
|
+
* in place (a folder instance created in between loads both, never none).
|
|
150
215
|
*/
|
|
151
216
|
function installOpenCodeCompactPlugin(pluginDir = resolveOpenCodeGlobalPluginDir(process.env)) {
|
|
152
217
|
removeLegacyOpenCodeCompactPlugin(pluginDir);
|
|
153
218
|
const pluginPath = path_1.default.join(pluginDir, exports.openCodeCompactPluginFileName);
|
|
154
219
|
const source = buildOpenCodeCompactPluginSource(getOpenCodeCompactPluginContext());
|
|
220
|
+
let isCurrentFileInPlace = false;
|
|
155
221
|
try {
|
|
156
|
-
|
|
157
|
-
return 'unchanged';
|
|
222
|
+
isCurrentFileInPlace = fs_1.default.readFileSync(pluginPath, 'utf-8') === source;
|
|
158
223
|
}
|
|
159
224
|
catch {
|
|
160
225
|
// Missing or unreadable: (re)write below.
|
|
161
226
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
fs_1.default.mkdirSync(pluginDir, { recursive: true });
|
|
165
|
-
fs_1.default.writeFileSync(tmpPath, source);
|
|
166
|
-
fs_1.default.renameSync(tmpPath, pluginPath);
|
|
167
|
-
}
|
|
168
|
-
catch (e) {
|
|
169
|
-
console.warn(`[compact-plugin] cannot write ${pluginPath}:`, e);
|
|
227
|
+
if (!isCurrentFileInPlace) {
|
|
228
|
+
const tmpPath = `${pluginPath}.${process.pid}.${Date.now()}.tmp`;
|
|
170
229
|
try {
|
|
171
|
-
fs_1.default.
|
|
230
|
+
fs_1.default.mkdirSync(pluginDir, { recursive: true });
|
|
231
|
+
fs_1.default.writeFileSync(tmpPath, source);
|
|
232
|
+
fs_1.default.renameSync(tmpPath, pluginPath);
|
|
233
|
+
}
|
|
234
|
+
catch (e) {
|
|
235
|
+
console.warn(`[compact-plugin] cannot write ${pluginPath}:`, e);
|
|
236
|
+
try {
|
|
237
|
+
fs_1.default.unlinkSync(tmpPath);
|
|
238
|
+
}
|
|
239
|
+
catch { /* never written */ }
|
|
240
|
+
return 'failed';
|
|
172
241
|
}
|
|
173
|
-
catch { /* never written */ }
|
|
174
|
-
return 'failed';
|
|
175
242
|
}
|
|
176
|
-
|
|
243
|
+
removeOutdatedOpenCodeCompactPlugins(pluginDir);
|
|
244
|
+
return isCurrentFileInPlace ? 'unchanged' : 'written';
|
|
177
245
|
}
|
|
178
246
|
//# sourceMappingURL=openCodeCompactPlugin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openCodeCompactPlugin.js","sourceRoot":"","sources":["../../src/utils/openCodeCompactPlugin.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"openCodeCompactPlugin.js","sourceRoot":"","sources":["../../src/utils/openCodeCompactPlugin.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;;;;;;AAmCH,0EAEC;AAGD,4EAcC;AAOD,4EAGC;AAMD,wEAGC;AAUD,sEAMC;AAcD,gEAMC;AAMD,4EAKC;AA+DD,oEA0BC;AA/MD,oDAA4B;AAC5B,4CAAoB;AACpB,4CAAoB;AACpB,gDAAwB;AACxB,mDAA2D;AAC3D,gDAAuE;AAEvE,uDAAuD;AAC1C,QAAA,uBAAuB,GAAG,qBAAqB,CAAC;AAE7D,kEAAkE;AAClE,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AAE5D,oHAAoH;AACpH,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAE1C,mHAAmH;AACnH,MAAM,oCAAoC,GAAG,IAAI,MAAM,CAAC,IAAI,6BAA6B,gBAAgB,+BAA+B,WAAW,CAAC,CAAC;AAErJ;;;;GAIG;AACU,QAAA,mCAAmC,GAAG,4BAA4B,CAAC;AACnE,QAAA,6BAA6B,GAAG,yBAAyB,CAAC;AAEvE;;;;;GAKG;AACH,SAAgB,+BAA+B;IAC7C,OAAO,4IAA4I,wCAAwB,EAAE,CAAC;AAChL,CAAC;AAED,kGAAkG;AAClG,SAAgB,gCAAgC,CAAC,OAAe;IAC9D,OAAO;QACL,oFAAoF;QACpF,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG;QAC7C,kBAAkB;QAClB,SAAS,IAAI,CAAC,SAAS,CAAC,+BAAuB,CAAC,GAAG;QACnD,0BAA0B;QAC1B,oEAAoE;QACpE,qCAAqC;QACrC,QAAQ;QACR,OAAO;QACP,IAAI;QACJ,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,gCAAgC,CAAC,MAAc;IAC7D,MAAM,WAAW,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,+BAA+B,CAAC,CAAC;IACvH,OAAO,GAAG,6BAA6B,IAAI,WAAW,KAAK,CAAC;AAC9D,CAAC;AAED,oHAAoH;AACvG,QAAA,6BAA6B,GAAG,gCAAgC,CAAC,gCAAgC,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;AAEnJ,6GAA6G;AAC7G,SAAgB,8BAA8B,CAAC,GAAsB;IACnE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,IAAI,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC7E,OAAO,cAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,6BAA6B,CAAC,WAAoB;IAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACrD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,qCAA6B,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;AACL,CAAC;AAQD;;;;;GAKG;AACH,SAAgB,0BAA0B,CAAC,KAG1C;IACC,IAAI,6BAA6B,CAAC,KAAK,CAAC,WAAW,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtE,OAAO,gCAAgC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AACrF,CAAC;AAED;;;GAGG;AACH,SAAgB,gCAAgC,CAAC,aAAsB;IACrE,IAAI,CAAC,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IACtG,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CACvC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,CACnG,CAAC;AACJ,CAAC;AAKD;;;;;;GAMG;AACH,SAAS,iCAAiC,CAAC,SAAiB;IAC1D,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,2CAAmC,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,qCAA6B,CAAC,CAAC;YAAE,OAAO;QAC5E,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,IAAA,gCAAkB,EAChB,yBAAyB,EACzB,GAAG,IAAA,+BAAiB,EAAC,UAAU,EAAE,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qCAA6B,CAAC,CAAC,4BAA4B,CAClH,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oCAAoC,CAAC,SAAiB;IAC7D,IAAI,SAAmB,CAAC;IACxB,IAAI,CAAC;QACH,SAAS,GAAG,YAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,KAAK,qCAA6B,IAAI,CAAC,oCAAoC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,SAAS;QACjH,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,IAAI,CAAC,YAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,+BAAuB,CAAC,CAAC;gBAAE,SAAS;YACxG,YAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,qDAAqD,YAAY,EAAE,CAAC,CAAC;QACnF,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,4BAA4B,CAC1C,YAAoB,8BAA8B,CAAC,OAAO,CAAC,GAAG,CAAC;IAE/D,iCAAiC,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qCAA6B,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,gCAAgC,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACnF,IAAI,oBAAoB,GAAG,KAAK,CAAC;IACjC,IAAI,CAAC;QACH,oBAAoB,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,0CAA0C;IAC5C,CAAC;IACD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QACjE,IAAI,CAAC;YACH,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAClC,YAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,iCAAiC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;YAChE,IAAI,CAAC;gBAAC,YAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAC7D,OAAO,QAAQ,CAAC;QAClB,CAAC;IACH,CAAC;IACD,oCAAoC,CAAC,SAAS,CAAC,CAAC;IAChD,OAAO,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC"}
|
|
@@ -2,22 +2,26 @@ import { type SessionKey } from '../sessionKey';
|
|
|
2
2
|
import type { BufferedPromptSettled, StartupPromptBuffer } from '../startupPromptBuffer';
|
|
3
3
|
/**
|
|
4
4
|
* @name PromptDeliveryDeps
|
|
5
|
-
* @description What {@link deliverPromptOrBuffer} acts through. `
|
|
6
|
-
*
|
|
7
|
-
* message, so it is only called for a
|
|
5
|
+
* @description What {@link deliverPromptOrBuffer} acts through. `forwardPrompt` says where the
|
|
6
|
+
* forward put the prompt ({@link LatePromptOutcome}); `announceQueued` tells the person their
|
|
7
|
+
* prompt waits for the session to come up — a topic message, so it is only called for a
|
|
8
|
+
* Telegram conversation.
|
|
8
9
|
*/
|
|
9
10
|
export interface PromptDeliveryDeps {
|
|
10
11
|
startupBuffer: Pick<StartupPromptBuffer, 'addPrompt'>;
|
|
11
|
-
forwardPrompt: (key: SessionKey, text: string) => Promise<
|
|
12
|
+
forwardPrompt: (key: SessionKey, text: string) => Promise<LatePromptOutcome>;
|
|
12
13
|
announceQueued: (key: SessionKey) => Promise<void>;
|
|
13
14
|
}
|
|
14
15
|
/**
|
|
15
16
|
* @name PromptDelivery
|
|
16
17
|
* @description Where {@link deliverPromptOrBuffer} put the prompt: `forwarded` to the
|
|
17
|
-
* session (done),
|
|
18
|
-
* start ends — see `onBufferedSettled`)
|
|
18
|
+
* session (done), `buffered` behind a session start (it waits in memory until the
|
|
19
|
+
* start ends — see `onBufferedSettled`), or `noSession` — the forward found no session
|
|
20
|
+
* left to take it (a prompt that waited for a bot restart's replay; the person was
|
|
21
|
+
* told), so nothing will ever answer it: what the caller opened for it must not wait
|
|
22
|
+
* for a turn.
|
|
19
23
|
*/
|
|
20
|
-
export type PromptDelivery = 'forwarded' | 'buffered';
|
|
24
|
+
export type PromptDelivery = 'forwarded' | 'buffered' | 'noSession';
|
|
21
25
|
/**
|
|
22
26
|
* @description Deliver `text` to a conversation's agent while honouring the startup
|
|
23
27
|
* window: mid-startup the prompt is buffered (it replays in order once the session
|
|
@@ -47,18 +51,24 @@ export declare function deliverPromptOrBuffer(deps: PromptDeliveryDeps, key: Ses
|
|
|
47
51
|
* @name LatePromptRoute
|
|
48
52
|
* @description How a prompt decided on when it ARRIVED is delivered once its handler is ready to forward it:
|
|
49
53
|
* `buffer` — a start or the idle stop is under way (its window is open: the prompt waits there, and the stop resumes the
|
|
50
|
-
* session for it); `wake` — the process is gone meanwhile (the conversation sleeps: wake it, then forward); `forward
|
|
54
|
+
* session for it); `wake` — the process is gone meanwhile (the conversation sleeps: wake it, then forward); `forward`;
|
|
55
|
+
* `drop` — only for a technical prompt that finds no live session without a window: nothing is done for it.
|
|
51
56
|
*/
|
|
52
|
-
export type LatePromptRoute = 'buffer' | 'wake' | 'forward';
|
|
57
|
+
export type LatePromptRoute = 'buffer' | 'wake' | 'forward' | 'drop';
|
|
53
58
|
/**
|
|
54
59
|
* @description The {@link LatePromptRoute} of a prompt, read at the moment it is forwarded. The idle stop posts a
|
|
55
60
|
* re-asked question just before it stops the process, and a handler awaits between reading the session's state and the
|
|
56
61
|
* forward (the tap's toast, the request it opens): written into a process being stopped the prompt was lost, and
|
|
57
62
|
* into one already gone it was dropped.
|
|
63
|
+
*
|
|
64
|
+
* A bot-made TECHNICAL prompt (the todo list's standalone reminder) is posted only into a live session that is idle at
|
|
65
|
+
* this moment — never a resume, never held for a later one, never reported to the person: where a user's prompt would be
|
|
66
|
+
* buffered or wake the conversation, it is dropped.
|
|
58
67
|
*/
|
|
59
68
|
export declare function getLatePromptRoute(input: {
|
|
60
69
|
isWindowOpen: boolean;
|
|
61
70
|
isSessionActive: boolean;
|
|
71
|
+
isTechnical?: boolean;
|
|
62
72
|
}): LatePromptRoute;
|
|
63
73
|
/** @description What a wake did: whether a session is up to forward to, and whether it already told the topic something. */
|
|
64
74
|
export interface LateWakeResult {
|
|
@@ -74,15 +84,22 @@ export interface LateWakeResult {
|
|
|
74
84
|
* already said why (`isAlreadyTold`), where a second, generic line would contradict it.
|
|
75
85
|
*/
|
|
76
86
|
export interface LatePromptDeliveryPorts {
|
|
87
|
+
/** A bot-made technical prompt: dropped, not buffered or woken for, where a session is not live (see {@link getLatePromptRoute}). */
|
|
88
|
+
isTechnical?: boolean;
|
|
77
89
|
checkIsWindowOpen: () => boolean;
|
|
78
90
|
checkIsSessionActive: () => boolean;
|
|
79
91
|
buffer: () => Promise<void>;
|
|
80
92
|
wake: () => Promise<LateWakeResult>;
|
|
81
|
-
forward: ()
|
|
93
|
+
/** Where the forward put the prompt: `forwarded`, or what a forward that routes it again itself (a prompt that waited for an adopt replay) ended in — passed on as the answer. */
|
|
94
|
+
forward: () => Promise<LatePromptOutcome>;
|
|
82
95
|
reportNoSession: (isAlreadyTold: boolean) => Promise<void>;
|
|
83
96
|
}
|
|
84
|
-
/**
|
|
85
|
-
|
|
97
|
+
/**
|
|
98
|
+
* @description Where {@link deliverLatePrompt} put the prompt; `noSession` — nowhere: nothing to deliver it to (the wake found
|
|
99
|
+
* nothing to resume, or the forward itself ended so); `dropped` — a technical prompt that found no live session, left alone
|
|
100
|
+
* on purpose (nothing buffered, woken or said).
|
|
101
|
+
*/
|
|
102
|
+
export type LatePromptOutcome = 'buffered' | 'forwarded' | 'noSession' | 'dropped';
|
|
86
103
|
/**
|
|
87
104
|
* @description Deliver a prompt whose handler decided, when it arrived, that the session is live — routed again by
|
|
88
105
|
* {@link getLatePromptRoute} now, after the handler's awaits. A wake that finds nothing never forwards: the forward
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promptDelivery.d.ts","sourceRoot":"","sources":["../../src/utils/promptDelivery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEzF
|
|
1
|
+
{"version":3,"file":"promptDelivery.d.ts","sourceRoot":"","sources":["../../src/utils/promptDelivery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAEzF;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IACtD,aAAa,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC7E,cAAc,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpD;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,kBAAkB,EACxB,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,OAAO,EACnB,iBAAiB,CAAC,EAAE,qBAAqB,GACxC,OAAO,CAAC,cAAc,CAAC,CAkBzB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAErE;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,YAAY,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,eAAe,CAIrI;AAED,4HAA4H;AAC5H,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,gGAAgG;IAChG,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,qIAAqI;IACrI,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,MAAM,OAAO,CAAC;IACjC,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;IACpC,kLAAkL;IAClL,OAAO,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1C,eAAe,EAAE,CAAC,aAAa,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnF;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAelG"}
|
|
@@ -31,8 +31,9 @@ const sessionKeyCodec_1 = require("../connectors/telegram/sessionKeyCodec");
|
|
|
31
31
|
*/
|
|
32
32
|
async function deliverPromptOrBuffer(deps, key, text, isStarting, onBufferedSettled) {
|
|
33
33
|
if (!isStarting) {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
// Only `noSession` is told apart: a forward that re-routed the prompt behind a stop window itself registered no
|
|
35
|
+
// `onBufferedSettled`, so it reads as forwarded, as it always did.
|
|
36
|
+
return (await deps.forwardPrompt(key, text)) === 'noSession' ? 'noSession' : 'forwarded';
|
|
36
37
|
}
|
|
37
38
|
const isFirstBuffered = deps.startupBuffer.addPrompt((0, sessionKey_1.keyToString)(key), text, onBufferedSettled);
|
|
38
39
|
if (isFirstBuffered && (0, sessionKeyCodec_1.checkIsTelegramKey)(key)) {
|
|
@@ -53,8 +54,14 @@ async function deliverPromptOrBuffer(deps, key, text, isStarting, onBufferedSett
|
|
|
53
54
|
* re-asked question just before it stops the process, and a handler awaits between reading the session's state and the
|
|
54
55
|
* forward (the tap's toast, the request it opens): written into a process being stopped the prompt was lost, and
|
|
55
56
|
* into one already gone it was dropped.
|
|
57
|
+
*
|
|
58
|
+
* A bot-made TECHNICAL prompt (the todo list's standalone reminder) is posted only into a live session that is idle at
|
|
59
|
+
* this moment — never a resume, never held for a later one, never reported to the person: where a user's prompt would be
|
|
60
|
+
* buffered or wake the conversation, it is dropped.
|
|
56
61
|
*/
|
|
57
62
|
function getLatePromptRoute(input) {
|
|
63
|
+
if (input.isTechnical === true)
|
|
64
|
+
return input.isWindowOpen || !input.isSessionActive ? 'drop' : 'forward';
|
|
58
65
|
if (input.isWindowOpen)
|
|
59
66
|
return 'buffer';
|
|
60
67
|
return input.isSessionActive ? 'forward' : 'wake';
|
|
@@ -65,7 +72,9 @@ function getLatePromptRoute(input) {
|
|
|
65
72
|
* would show the topic as working while the adapter drops the text.
|
|
66
73
|
*/
|
|
67
74
|
async function deliverLatePrompt(ports) {
|
|
68
|
-
const route = getLatePromptRoute({ isWindowOpen: ports.checkIsWindowOpen(), isSessionActive: ports.checkIsSessionActive() });
|
|
75
|
+
const route = getLatePromptRoute({ isWindowOpen: ports.checkIsWindowOpen(), isSessionActive: ports.checkIsSessionActive(), isTechnical: ports.isTechnical });
|
|
76
|
+
if (route === 'drop')
|
|
77
|
+
return 'dropped';
|
|
69
78
|
if (route === 'buffer') {
|
|
70
79
|
await ports.buffer();
|
|
71
80
|
return 'buffered';
|
|
@@ -77,7 +86,6 @@ async function deliverLatePrompt(ports) {
|
|
|
77
86
|
return 'noSession';
|
|
78
87
|
}
|
|
79
88
|
}
|
|
80
|
-
|
|
81
|
-
return 'forwarded';
|
|
89
|
+
return ports.forward();
|
|
82
90
|
}
|
|
83
91
|
//# sourceMappingURL=promptDelivery.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promptDelivery.js","sourceRoot":"","sources":["../../src/utils/promptDelivery.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"promptDelivery.js","sourceRoot":"","sources":["../../src/utils/promptDelivery.ts"],"names":[],"mappings":";;AAoDA,sDAwBC;AAqBD,gDAIC;AAwCD,8CAeC;AA5JD,8CAA6D;AAC7D,4EAA4E;AA2B5E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACI,KAAK,UAAU,qBAAqB,CACzC,IAAwB,EACxB,GAAe,EACf,IAAY,EACZ,UAAmB,EACnB,iBAAyC;IAEzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,gHAAgH;QAChH,mEAAmE;QACnE,OAAO,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;IAC3F,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAA,wBAAW,EAAC,GAAG,CAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAChG,IAAI,eAAe,IAAI,IAAA,oCAAkB,EAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,sGAAsG;QACtG,sGAAsG;QACtG,gDAAgD;QAChD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAA,wBAAW,EAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAWD;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAC,KAAiF;IAClH,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACzG,IAAI,KAAK,CAAC,YAAY;QAAE,OAAO,QAAQ,CAAC;IACxC,OAAO,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC;AAmCD;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CAAC,KAA8B;IACpE,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,iBAAiB,EAAE,EAAE,eAAe,EAAE,KAAK,CAAC,oBAAoB,EAAE,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7J,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IACvC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACjD,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FileSendKind } from './fileSendPlan';
|
|
2
|
+
/** What one message of a delivery was: a text, or the kind of file Telegram was asked to render. */
|
|
3
|
+
export type SentKind = 'text' | FileSendKind;
|
|
4
|
+
/**
|
|
5
|
+
* @description "1 text, 2 photos" — what actually went out, per kind: the wording `send_messages_to_user` and
|
|
6
|
+
* `send_file_to_user` both answer with. The agent reads it to notice a file that did not go out as it meant (an
|
|
7
|
+
* image that arrived as a document or as text), which a bare count hides. Empty when nothing went out.
|
|
8
|
+
*/
|
|
9
|
+
export declare function formatSentKinds(kinds: readonly SentKind[]): string;
|
|
10
|
+
//# sourceMappingURL=sentKindsSummary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentKindsSummary.d.ts","sourceRoot":"","sources":["../../src/utils/sentKindsSummary.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,oGAAoG;AACpG,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,YAAY,CAAC;AAK7C;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAMlE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatSentKinds = formatSentKinds;
|
|
4
|
+
/** The order a summary names the kinds in, so the same delivery always reads the same. */
|
|
5
|
+
const sentKindOrder = ['text', 'photo', 'video', 'animation', 'document'];
|
|
6
|
+
/**
|
|
7
|
+
* @description "1 text, 2 photos" — what actually went out, per kind: the wording `send_messages_to_user` and
|
|
8
|
+
* `send_file_to_user` both answer with. The agent reads it to notice a file that did not go out as it meant (an
|
|
9
|
+
* image that arrived as a document or as text), which a bare count hides. Empty when nothing went out.
|
|
10
|
+
*/
|
|
11
|
+
function formatSentKinds(kinds) {
|
|
12
|
+
return sentKindOrder
|
|
13
|
+
.map((kind) => ({ kind, count: kinds.filter((sentKind) => sentKind === kind).length }))
|
|
14
|
+
.filter(({ count }) => count > 0)
|
|
15
|
+
.map(({ kind, count }) => `${count} ${kind}${count === 1 ? '' : 's'}`)
|
|
16
|
+
.join(', ');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=sentKindsSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentKindsSummary.js","sourceRoot":"","sources":["../../src/utils/sentKindsSummary.ts"],"names":[],"mappings":";;AAaA,0CAMC;AAdD,0FAA0F;AAC1F,MAAM,aAAa,GAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAE/F;;;;GAIG;AACH,SAAgB,eAAe,CAAC,KAA0B;IACxD,OAAO,aAAa;SACjB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SACtF,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;SAChC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SACrE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}
|
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export declare function checkIsStaleAnswerCallbackQueryError(err: unknown): boolean;
|
|
2
|
+
/**
|
|
3
|
+
* @description Whether a Telegram error says the message is not there (any more): the answer to deleting or editing a
|
|
4
|
+
* message that was already deleted, by the person or by someone else. Not the one for a message Telegram refuses to delete
|
|
5
|
+
* (older than 48 hours, no right) — that message stays.
|
|
6
|
+
*/
|
|
7
|
+
export declare function checkIsMessageNotFoundError(err: unknown): boolean;
|
|
2
8
|
//# sourceMappingURL=telegramError.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegramError.d.ts","sourceRoot":"","sources":["../../src/utils/telegramError.ts"],"names":[],"mappings":"AAcA,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAS1E"}
|
|
1
|
+
{"version":3,"file":"telegramError.d.ts","sourceRoot":"","sources":["../../src/utils/telegramError.ts"],"names":[],"mappings":"AAcA,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAS1E;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIjE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.checkIsStaleAnswerCallbackQueryError = checkIsStaleAnswerCallbackQueryError;
|
|
4
|
+
exports.checkIsMessageNotFoundError = checkIsMessageNotFoundError;
|
|
4
5
|
function checkIsRecord(value) {
|
|
5
6
|
return typeof value === 'object' && value !== null;
|
|
6
7
|
}
|
|
@@ -13,4 +14,15 @@ function checkIsStaleAnswerCallbackQueryError(err) {
|
|
|
13
14
|
e.on?.method === 'answerCallbackQuery' &&
|
|
14
15
|
/query is too old|query ID is invalid/i.test(description));
|
|
15
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* @description Whether a Telegram error says the message is not there (any more): the answer to deleting or editing a
|
|
19
|
+
* message that was already deleted, by the person or by someone else. Not the one for a message Telegram refuses to delete
|
|
20
|
+
* (older than 48 hours, no right) — that message stays.
|
|
21
|
+
*/
|
|
22
|
+
function checkIsMessageNotFoundError(err) {
|
|
23
|
+
if (!checkIsRecord(err))
|
|
24
|
+
return false;
|
|
25
|
+
const e = err;
|
|
26
|
+
return e.response?.error_code === 400 && /message to (delete|edit) not found/i.test(e.response.description ?? '');
|
|
27
|
+
}
|
|
16
28
|
//# sourceMappingURL=telegramError.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegramError.js","sourceRoot":"","sources":["../../src/utils/telegramError.ts"],"names":[],"mappings":";;AAcA,oFASC;
|
|
1
|
+
{"version":3,"file":"telegramError.js","sourceRoot":"","sources":["../../src/utils/telegramError.ts"],"names":[],"mappings":";;AAcA,oFASC;AAOD,kEAIC;AAxBD,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAgB,oCAAoC,CAAC,GAAY;IAC/D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,CAAC,GAAG,GAAwB,CAAC;IACnC,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC;IAClD,OAAO,CACL,CAAC,CAAC,QAAQ,EAAE,UAAU,KAAK,GAAG;QAC9B,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,qBAAqB;QACtC,uCAAuC,CAAC,IAAI,CAAC,WAAW,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAgB,2BAA2B,CAAC,GAAY;IACtD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,CAAC,GAAG,GAAwB,CAAC;IACnC,OAAO,CAAC,CAAC,QAAQ,EAAE,UAAU,KAAK,GAAG,IAAI,qCAAqC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;AACpH,CAAC"}
|
|
@@ -22,7 +22,7 @@ export declare const topicViewOptions: readonly TopicView[];
|
|
|
22
22
|
export declare const defaultTopicView: TopicView;
|
|
23
23
|
/**
|
|
24
24
|
* @description The typed `/verbosity` spelling of each view — the words the
|
|
25
|
-
* public
|
|
25
|
+
* public command reference (`docs/commands.md`) documents (`/verbosity stream|stream_answers|answers`).
|
|
26
26
|
*/
|
|
27
27
|
export declare const topicViewArguments: Readonly<Record<TopicView, string>>;
|
|
28
28
|
/** @description Type guard over the persisted spelling (a `state.json` value or a callback payload). */
|
package/dist/utils/topicView.js
CHANGED
|
@@ -12,7 +12,7 @@ exports.topicViewOptions = ['stream', 'streamAnswers', 'answers'];
|
|
|
12
12
|
exports.defaultTopicView = 'stream';
|
|
13
13
|
/**
|
|
14
14
|
* @description The typed `/verbosity` spelling of each view — the words the
|
|
15
|
-
* public
|
|
15
|
+
* public command reference (`docs/commands.md`) documents (`/verbosity stream|stream_answers|answers`).
|
|
16
16
|
*/
|
|
17
17
|
exports.topicViewArguments = {
|
|
18
18
|
stream: 'stream',
|
|
@@ -17,6 +17,11 @@
|
|
|
17
17
|
*/
|
|
18
18
|
/** Pauses before the automatic retries: the 1st after 5 s, the 2nd after 15 s. */
|
|
19
19
|
export declare const transcribeRetryDelaysMs: readonly number[];
|
|
20
|
+
/**
|
|
21
|
+
* The interim (1xx) response header in which the local engine names the seconds of audio queued ahead of this upload:
|
|
22
|
+
* it recognises voices strictly in arrival order, so a voice may wait in line before its own recognition starts.
|
|
23
|
+
*/
|
|
24
|
+
export declare const queuedAudioSecondsHeader = "x-charness-queued-audio-seconds";
|
|
20
25
|
/**
|
|
21
26
|
* @description Where and how a voice note is transcribed.
|
|
22
27
|
*/
|
|
@@ -66,6 +71,11 @@ export interface TranscribeAudioOptions {
|
|
|
66
71
|
* rejection ends the attempts with its message.
|
|
67
72
|
*/
|
|
68
73
|
refreshEndpoint?: () => Promise<TranscriptionEndpoint>;
|
|
74
|
+
/**
|
|
75
|
+
* The timeout once the engine reports the audio queued ahead of the upload ({@link queuedAudioSecondsHeader}), so the
|
|
76
|
+
* wait in line does not count against a budget sized for the voice alone. Without it a report changes nothing.
|
|
77
|
+
*/
|
|
78
|
+
getTimeoutMsForQueuedAudio?: (queuedAudioSeconds: number) => number;
|
|
69
79
|
}
|
|
70
80
|
/** @description The Groq Whisper endpoint for `apiKey`. */
|
|
71
81
|
export declare function createGroqEndpoint(apiKey: string): TranscriptionEndpoint;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcribeAudio.d.ts","sourceRoot":"","sources":["../../src/utils/transcribeAudio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"transcribeAudio.d.ts","sourceRoot":"","sources":["../../src/utils/transcribeAudio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAUH,kFAAkF;AAClF,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAoB,CAAC;AAc1E;;;GAGG;AACH,eAAO,MAAM,wBAAwB,oCAAoC,CAAC;AAI1E;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;AAE9E,MAAM,MAAM,gBAAgB,GACxB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAMtD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,2GAA2G;IAC3G,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,wEAAwE;IACxE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC9C;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACvD;;;OAGG;IACH,0BAA0B,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,KAAK,MAAM,CAAC;CACrE;AASD,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAExE;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAE1E;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,qBAAqB,CAEnH;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,qBAAqB,CAI9E;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,WAAW,EAAE,qBAAqB,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,MAAM,GAAG,IAAI,CAQhB;AAyHD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CA8B3B"}
|