@minionry/minion 0.7.36 → 0.7.39
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/bin/commands/minions.js +19 -0
- package/bin/minion.js +33 -4
- package/dist/server/cli/headless/claude-invoker-process.js +23 -7
- package/dist/server/cli/headless/claude-invoker-stream.js +8 -3
- package/dist/server/cli/headless/haiku-assessments.js +2 -1
- package/dist/server/cli/headless/mcp-config.js +2 -1
- package/dist/server/engines/claude/claude-command.js +1 -0
- package/dist/server/engines/factory.js +2 -0
- package/dist/server/engines/hermes/HermesEngine.js +112 -219
- package/dist/server/engines/hermes/hermes-gateway-registry.js +467 -0
- package/dist/server/index.js +10 -4
- package/dist/server/mcp/bouncer-integration.js +3 -2
- package/dist/server/mcp/classifier/ClaudeBouncerClassifier.js +35 -8
- package/dist/server/mcp/classifier/shadow-eval-scheduler.js +42 -0
- package/dist/server/mcp/classifier/telemetry.js +0 -0
- package/dist/server/mcp/permission-channels.js +176 -0
- package/dist/server/mcp/security-analysis.js +9 -1
- package/dist/server/mcp/security-audit.js +22 -2
- package/dist/server/mcp/security-patterns.js +73 -1
- package/dist/server/mcp/server.js +80 -50
- package/dist/server/routes/internal.js +6 -1
- package/dist/server/routes/notifications.js +6 -18
- package/dist/server/server-setup.js +24 -48
- package/dist/server/services/analytics.js +4 -2
- package/dist/server/services/browser/host-mock.js +6 -1
- package/dist/server/services/browser/host.js +27 -3
- package/dist/server/services/browser/reasoning-agent.js +3 -1
- package/dist/server/services/chain/chain-engine.js +494 -0
- package/dist/server/services/chain/chain-store.js +542 -0
- package/dist/server/services/git/haiku.js +2 -2
- package/dist/server/services/plan/agents/check-injection.md +43 -2
- package/dist/server/services/plan/agents/review-code.md +62 -3
- package/dist/server/services/plan/agents/review-quality.md +52 -2
- package/dist/server/services/plan/board-export.js +4 -0
- package/dist/server/services/plan/composer-prompt.js +27 -8
- package/dist/server/services/plan/composer.js +10 -4
- package/dist/server/services/plan/config-installer.js +4 -83
- package/dist/server/services/plan/executor.js +155 -73
- package/dist/server/services/plan/issue-effort.js +9 -21
- package/dist/server/services/plan/issue-prompt-builder.js +72 -9
- package/dist/server/services/plan/parser-core.js +6 -1
- package/dist/server/services/plan/quality-delta.js +6 -24
- package/dist/server/services/plan/readiness-planner.js +12 -4
- package/dist/server/services/plan/record-file.js +52 -0
- package/dist/server/services/plan/review-approval.js +64 -0
- package/dist/server/services/plan/review-gate.js +186 -77
- package/dist/server/services/plan/review-outcome.js +146 -0
- package/dist/server/services/plan/review-report.js +28 -1
- package/dist/server/services/plan/review-target.js +57 -0
- package/dist/server/services/plan/state-reconciler.js +3 -3
- package/dist/server/services/plan/template-diff.js +2 -0
- package/dist/server/services/plan/template-instantiator.js +4 -0
- package/dist/server/services/plan/watcher.js +11 -1
- package/dist/server/services/platform-reconnect.js +7 -0
- package/dist/server/services/platform-token-lifecycle.js +2 -1
- package/dist/server/services/platform.js +293 -50
- package/dist/server/services/relay-http-client.js +107 -0
- package/dist/server/services/schedule/agent-schedule-store.js +69 -8
- package/dist/server/services/schedule/agent-scheduler.js +48 -7
- package/dist/server/services/schedule/daily-timing.js +52 -0
- package/dist/server/services/schedule/prompt-file.js +55 -0
- package/dist/server/services/schedule/run-bootstrap.js +20 -5
- package/dist/server/services/schedule/schedule-store.js +54 -4
- package/dist/server/services/schedule/schedule-wire.js +17 -0
- package/dist/server/services/schedule/scheduler.js +43 -9
- package/dist/server/services/sdk/agent-schedule.js +294 -0
- package/dist/server/services/sdk/agents.js +95 -13
- package/dist/server/services/sdk/app-tools.js +44 -7
- package/dist/server/services/sdk/atomic-write.js +75 -0
- package/dist/server/services/sdk/browser.js +5 -1
- package/dist/server/services/sdk/composer.js +2 -0
- package/dist/server/services/sdk/file-change-notify.js +60 -13
- package/dist/server/services/sdk/files-app.js +12 -7
- package/dist/server/services/sdk/files-search.js +14 -0
- package/dist/server/services/sdk/files-transfer.js +1 -1
- package/dist/server/services/sdk/files-watch.js +721 -0
- package/dist/server/services/sdk/files-workspace.js +37 -11
- package/dist/server/services/sdk/inference-claude.js +4 -2
- package/dist/server/services/sdk/inference.js +16 -2
- package/dist/server/services/sdk/pm-chain.js +0 -0
- package/dist/server/services/sdk/pm-schedule.js +72 -15
- package/dist/server/services/sdk/pm.js +22 -0
- package/dist/server/services/sdk/rate-limits.js +32 -0
- package/dist/server/services/sdk/registry.js +40 -2
- package/dist/server/services/sdk/terminal.js +1 -1
- package/dist/server/services/sentry.js +5 -1
- package/dist/server/services/terminal/pty-manager.js +26 -11
- package/dist/server/services/terminal/pty-utils.js +12 -1
- package/dist/server/services/terminal/terminal-modes.js +87 -0
- package/dist/server/services/timeline/assembler.js +2 -2
- package/dist/server/services/timeline/index.js +1 -1
- package/dist/server/services/websocket/agent-schedule-handlers.js +62 -4
- package/dist/server/services/websocket/ask-user-question-bridge.js +2 -2
- package/dist/server/services/websocket/browser-agent-runtime.js +3 -1
- package/dist/server/services/websocket/browser-handlers.js +5 -2
- package/dist/server/services/websocket/browser-viewer-lifecycle.js +8 -0
- package/dist/server/services/websocket/file-explorer-handlers.js +17 -0
- package/dist/server/services/websocket/file-transfer-http.js +12 -6
- package/dist/server/services/websocket/handler.js +185 -33
- package/dist/server/services/websocket/msg-id-tracker.js +94 -19
- package/dist/server/services/websocket/plan-execution-handlers.js +33 -5
- package/dist/server/services/websocket/plan-handlers.js +10 -5
- package/dist/server/services/websocket/plan-helpers.js +23 -0
- package/dist/server/services/websocket/plan-issue-handlers.js +161 -4
- package/dist/server/services/websocket/plan-sprint-handlers.js +3 -2
- package/dist/server/services/websocket/schedule-handlers.js +8 -2
- package/dist/server/services/websocket/sdk-agent-host.js +5 -1
- package/dist/server/services/websocket/sdk-agent-schedule-host.js +30 -0
- package/dist/server/services/websocket/sdk-browser-host.js +11 -4
- package/dist/server/services/websocket/sdk-handlers.js +6 -1
- package/dist/server/services/websocket/sdk-pm-chain-host.js +20 -0
- package/dist/server/services/websocket/sdk-pm-execution-host.js +21 -14
- package/dist/server/services/websocket/sdk-pm-schedule-host.js +9 -0
- package/dist/server/services/websocket/sdk-terminal-host.js +7 -0
- package/dist/server/services/websocket/settings-handlers.js +6 -18
- package/dist/server/services/websocket/tab-broadcast.js +5 -1
- package/dist/server/services/websocket/terminal-handlers.js +51 -6
- package/dist/server/services/websocket/types.js +6 -5
- package/dist/server/services/websocket/viewer-interest.js +30 -0
- package/package.json +6 -6
|
@@ -4,9 +4,41 @@ import { statSync } from 'node:fs';
|
|
|
4
4
|
import { platform } from 'node:os';
|
|
5
5
|
import { isAbsolute } from 'node:path';
|
|
6
6
|
import { AnalyticsEvents, trackEvent } from '../analytics.js';
|
|
7
|
+
import { isSdkOpenedTerminalId } from '../sdk/terminal.js';
|
|
7
8
|
import { getPTYManager, reloadPty } from '../terminal/pty-manager.js';
|
|
9
|
+
import { canAddressViewer } from './browser-viewer-registry.js';
|
|
8
10
|
import { notifySdkTerminalSessionOpened } from './sdk-terminal-host.js';
|
|
9
|
-
|
|
11
|
+
const INPUT_SEQ_WINDOW = 1024;
|
|
12
|
+
const appliedInputSeqs = new Map();
|
|
13
|
+
function isRepeatedInput(terminalId, device, inputSeq) {
|
|
14
|
+
if (device === undefined || typeof inputSeq !== 'number' || !Number.isSafeInteger(inputSeq) || inputSeq < 0)
|
|
15
|
+
return false;
|
|
16
|
+
let devices = appliedInputSeqs.get(terminalId);
|
|
17
|
+
if (!devices) {
|
|
18
|
+
devices = new Map();
|
|
19
|
+
appliedInputSeqs.set(terminalId, devices);
|
|
20
|
+
}
|
|
21
|
+
const applied = devices.get(device);
|
|
22
|
+
if (!applied) {
|
|
23
|
+
devices.set(device, { highest: inputSeq, recent: new Set([inputSeq]) });
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (inputSeq <= applied.highest - INPUT_SEQ_WINDOW || applied.recent.has(inputSeq))
|
|
27
|
+
return true;
|
|
28
|
+
applied.recent.add(inputSeq);
|
|
29
|
+
applied.highest = Math.max(applied.highest, inputSeq);
|
|
30
|
+
if (applied.recent.size > 2 * INPUT_SEQ_WINDOW) {
|
|
31
|
+
for (const seq of applied.recent) {
|
|
32
|
+
if (seq <= applied.highest - INPUT_SEQ_WINDOW)
|
|
33
|
+
applied.recent.delete(seq);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
function forgetInputSeqs(terminalId) {
|
|
39
|
+
appliedInputSeqs.delete(terminalId);
|
|
40
|
+
}
|
|
41
|
+
export async function handleTerminalMessage(ctx, ws, msg, tabId, workingDir, viewerId) {
|
|
10
42
|
const termId = msg.terminalId || tabId;
|
|
11
43
|
switch (msg.type) {
|
|
12
44
|
case 'terminalInit':
|
|
@@ -19,13 +51,15 @@ export async function handleTerminalMessage(ctx, ws, msg, tabId, workingDir) {
|
|
|
19
51
|
handleTerminalList(ctx, ws);
|
|
20
52
|
break;
|
|
21
53
|
case 'terminalInput':
|
|
54
|
+
if (isRepeatedInput(termId, canAddressViewer(ws, viewerId) ? viewerId : undefined, msg.data?.inputSeq))
|
|
55
|
+
break;
|
|
22
56
|
handleTerminalInput(ctx, ws, termId, msg.data?.input);
|
|
23
57
|
break;
|
|
24
58
|
case 'terminalResize':
|
|
25
59
|
handleTerminalResize(ctx, termId, msg.data?.cols, msg.data?.rows);
|
|
26
60
|
break;
|
|
27
61
|
case 'terminalClose':
|
|
28
|
-
handleTerminalClose(ctx,
|
|
62
|
+
handleTerminalClose(ctx, termId);
|
|
29
63
|
break;
|
|
30
64
|
}
|
|
31
65
|
}
|
|
@@ -45,13 +79,22 @@ async function handleTerminalInit(ctx, ws, terminalId, workingDir, requestedCwd,
|
|
|
45
79
|
});
|
|
46
80
|
return;
|
|
47
81
|
}
|
|
82
|
+
if (isSdkOpenedTerminalId(terminalId) && !ptyManager.exists(terminalId)) {
|
|
83
|
+
ctx.send(ws, {
|
|
84
|
+
type: 'terminalError',
|
|
85
|
+
terminalId,
|
|
86
|
+
data: { error: 'Terminal session not found', sessionNotFound: true }
|
|
87
|
+
});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
48
90
|
addTerminalSubscriber(ctx, terminalId, ws);
|
|
49
91
|
setupTerminalBroadcastListeners(ctx, terminalId);
|
|
50
92
|
const effectiveCwd = resolveEffectiveCwd(requestedCwd, workingDir);
|
|
51
93
|
try {
|
|
52
|
-
const { shell, cwd, isReconnect, platform } = await ptyManager.create(terminalId, effectiveCwd, cols ||
|
|
94
|
+
const { shell, cwd, isReconnect, platform } = await ptyManager.create(terminalId, effectiveCwd, cols || undefined, rows || undefined, requestedShell);
|
|
53
95
|
if (!isReconnect) {
|
|
54
|
-
|
|
96
|
+
forgetInputSeqs(terminalId);
|
|
97
|
+
ctx.broadcastToAll({
|
|
55
98
|
type: 'terminalCreated',
|
|
56
99
|
data: { terminalId, shell, cwd }
|
|
57
100
|
});
|
|
@@ -144,7 +187,7 @@ function handleTerminalResize(_ctx, terminalId, cols, rows) {
|
|
|
144
187
|
const ptyManager = getPTYManager();
|
|
145
188
|
ptyManager.resize(terminalId, cols, rows);
|
|
146
189
|
}
|
|
147
|
-
function handleTerminalClose(ctx,
|
|
190
|
+
function handleTerminalClose(ctx, terminalId) {
|
|
148
191
|
trackEvent(AnalyticsEvents.TERMINAL_SESSION_CLOSED);
|
|
149
192
|
const listenerCleanup = ctx.terminalListenerCleanups.get(terminalId);
|
|
150
193
|
if (listenerCleanup) {
|
|
@@ -154,8 +197,9 @@ function handleTerminalClose(ctx, ws, terminalId) {
|
|
|
154
197
|
const ptyManager = getPTYManager();
|
|
155
198
|
const ownerLabel = ptyManager.getSessionInfo(terminalId)?.ownerLabel;
|
|
156
199
|
ptyManager.close(terminalId);
|
|
200
|
+
forgetInputSeqs(terminalId);
|
|
157
201
|
ctx.terminalSubscribers.delete(terminalId);
|
|
158
|
-
ctx.
|
|
202
|
+
ctx.broadcastToAll({
|
|
159
203
|
type: 'terminalClosed',
|
|
160
204
|
data: { terminalId, ...(ownerLabel !== undefined ? { ownerLabel } : {}) }
|
|
161
205
|
});
|
|
@@ -209,6 +253,7 @@ function setupTerminalBroadcastListeners(ctx, terminalId) {
|
|
|
209
253
|
ptyManager.off('error', onError);
|
|
210
254
|
ctx.terminalListenerCleanups.delete(terminalId);
|
|
211
255
|
ctx.terminalSubscribers.delete(terminalId);
|
|
256
|
+
forgetInputSeqs(terminalId);
|
|
212
257
|
}
|
|
213
258
|
};
|
|
214
259
|
const onError = (tid, error) => {
|
|
@@ -12,7 +12,7 @@ export const GitDiffMessages = ['gitDiff', 'gitShowCommit', 'gitCommitDiff'];
|
|
|
12
12
|
export const GitTagMessages = ['gitListTags', 'gitCreateTag', 'gitPushTag'];
|
|
13
13
|
export const GitWorktreeMessages = ['gitWorktreeList', 'gitWorktreeCreate', 'gitWorktreeCreateAndAssign', 'gitWorktreeRemove', 'tabWorktreeSwitch', 'tabRepoWorktreeSwitch', 'gitWorktreePush', 'gitWorktreeCreatePR'];
|
|
14
14
|
export const GitMergeMessages = ['gitMergePreview', 'gitWorktreeMerge', 'gitMergeAbort', 'gitMergeComplete', 'gitMergeStashPop', 'gitMergeDiscardBlockers'];
|
|
15
|
-
const SessionSyncMessages = ['getActiveTabs', 'createTab', 'reorderTabs', 'syncTabMeta', 'removeTab', 'markTabViewed', 'setTabEngine'];
|
|
15
|
+
const SessionSyncMessages = ['getActiveTabs', 'createTab', 'reorderTabs', 'syncTabMeta', 'removeTab', 'markTabViewed', 'setTabEngine', 'viewerInterest'];
|
|
16
16
|
const SettingsMessages = ['getSettings', 'updateSettings', 'getModelCatalog'];
|
|
17
17
|
const SystemPromptMessages = [
|
|
18
18
|
'getSystemPromptProfiles',
|
|
@@ -24,7 +24,7 @@ const SystemPromptMessages = [
|
|
|
24
24
|
const FileUploadMessages = ['fileUploadStart', 'fileUploadChunk', 'fileUploadComplete', 'fileUploadCancel'];
|
|
25
25
|
const FileDownloadMessages = ['fileDownloadStart', 'fileDownloadCancel'];
|
|
26
26
|
export const FileShareMessages = ['fileShareListDirectory', 'fileShareReadFile', 'fileShareDownloadStart', 'fileShareDownloadCancel'];
|
|
27
|
-
export const PlanMessages = ['planInit', 'planGetState', 'planListIssues', 'planGetIssue', 'planGetSprint', 'planGetMilestone', 'planUpdateIssue', 'planDeleteIssue', 'planScaffold', 'planPrompt', 'planExecute', 'planExecuteEpic', 'planPause', 'planStop', 'planResume', 'queueEnqueueComposerPrompt', 'queueRemoveComposerPrompt', 'queueClearComposerPrompts', 'getPmTimeline'];
|
|
27
|
+
export const PlanMessages = ['planInit', 'planGetState', 'planListIssues', 'planGetIssue', 'planGetSprint', 'planGetMilestone', 'planUpdateIssue', 'planReviewDecision', 'planDeleteIssue', 'planScaffold', 'planPrompt', 'planExecute', 'planExecuteEpic', 'planPause', 'planStop', 'planResume', 'queueEnqueueComposerPrompt', 'queueRemoveComposerPrompt', 'queueClearComposerPrompts', 'getPmTimeline'];
|
|
28
28
|
export const PlanBoardMessages = ['planCreateBoard', 'planUpdateBoard', 'planArchiveBoard', 'planRestoreBoard', 'planGetBoard', 'planGetBoardState', 'planReorderBoards', 'planSetActiveBoard', 'planGetBoardArtifacts', 'planExportBoard', 'planImportBoard', 'planDownloadBoard', 'planInstantiateTemplate'];
|
|
29
29
|
export const PlanSprintMessages = ['planCreateSprint', 'planActivateSprint', 'planCompleteSprint', 'planGetSprintArtifacts'];
|
|
30
30
|
export const PlanScheduleMessages = ['planScheduleCreate', 'planScheduleUpdate', 'planScheduleDelete', 'planScheduleList', 'planScheduleValidateSource'];
|
|
@@ -32,7 +32,7 @@ export const AgentScheduleMessages = ['agentScheduleCreate', 'agentScheduleUpdat
|
|
|
32
32
|
const SkillMessages = ['listSkills', 'chatToBoard'];
|
|
33
33
|
const SnippetMessages = ['snippetAutocomplete', 'snippetList', 'snippetCreate', 'snippetGet', 'snippetUpdate'];
|
|
34
34
|
export const InstanceMessages = ['shutdownInstance', 'restartInstance'];
|
|
35
|
-
export const SdkMessages = ['sdkConnect', 'sdkRequest', 'sdkAgentRun', 'sdkPmWrite', 'sdkPmExecute', 'sdkPmSchedule', 'sdkFilesWrite', 'sdkStorageWrite', 'sdkCancel', 'sdkRevoke', 'sdkAgentSession', 'sdkAgentInteract', 'sdkGitWrite', 'sdkTerminalWrite', 'sdkToolsServe', 'sdkQualityWrite', 'sdkBrowserWrite', 'sdkConsentDecision', 'sdkInferenceRun', 'sdkEndpointsWrite'];
|
|
35
|
+
export const SdkMessages = ['sdkConnect', 'sdkRequest', 'sdkAgentRun', 'sdkPmWrite', 'sdkPmExecute', 'sdkPmSchedule', 'sdkPmChain', 'sdkFilesWrite', 'sdkStorageWrite', 'sdkCancel', 'sdkRevoke', 'sdkAgentSession', 'sdkAgentInteract', 'sdkGitWrite', 'sdkTerminalWrite', 'sdkToolsServe', 'sdkQualityWrite', 'sdkBrowserWrite', 'sdkConsentDecision', 'sdkInferenceRun', 'sdkEndpointsWrite'];
|
|
36
36
|
export const AppsMessages = ['appInstallLocal', 'appServeStatus', 'appStop', 'appUpdate', 'appGreenlightDecision', 'appSpaceList', 'appSpaceAdd', 'appSpaceRemove', 'appSpaceConfigure'];
|
|
37
37
|
export const EngineAuthMessages = [
|
|
38
38
|
'engineAuthStatus',
|
|
@@ -50,7 +50,7 @@ export const DEFAULT_ENGINE_ID = 'claude-code';
|
|
|
50
50
|
export function normalizeEngineId(value) {
|
|
51
51
|
return isEngineId(value) ? value : DEFAULT_ENGINE_ID;
|
|
52
52
|
}
|
|
53
|
-
const CoreResponseMessages = ['output', 'thinking', 'movementStart', 'movementComplete', 'movementError', 'sessionUpdate', 'history', 'sessions', 'sessionsCount', 'sessionDeleted', 'sessionData', 'historyCleared', 'searchResults', 'newSession', 'autocomplete', 'fileContent', 'error', 'pong', 'tabInitialized', 'approvalRequired', 'toolUse', 'streamingTokens', 'executionTargetUpdate', 'notificationSummary', 'executeAck', 'clientOffline', 'clientAuthExpired', 'askUserQuestion', 'askUserQuestionDismissed', 'askUserQuestionAutoAnswered', 'timelineSnapshot', 'timelineEvent', 'timelinePage', 'sessionExported', 'sessionImported'];
|
|
53
|
+
const CoreResponseMessages = ['output', 'thinking', 'movementStart', 'movementComplete', 'movementError', 'sessionUpdate', 'history', 'sessions', 'sessionsCount', 'sessionDeleted', 'sessionData', 'historyCleared', 'searchResults', 'newSession', 'autocomplete', 'fileContent', 'error', 'pong', 'tabInitialized', 'approvalRequired', 'toolUse', 'streamingTokens', 'executionTargetUpdate', 'notificationSummary', 'executeAck', 'duplicateIgnored', 'clientOffline', 'clientAuthExpired', 'askUserQuestion', 'askUserQuestionDismissed', 'askUserQuestionAutoAnswered', 'timelineSnapshot', 'timelineEvent', 'timelinePage', 'sessionExported', 'sessionImported'];
|
|
54
54
|
const TerminalResponseMessages = ['terminalOutput', 'terminalReady', 'terminalExit', 'terminalError', 'terminalList', 'terminalScrollback', 'terminalCreated', 'terminalClosed'];
|
|
55
55
|
const FileExplorerResponseMessages = ['directoryListing', 'fileWritten', 'fileCreated', 'directoryCreated', 'fileDeleted', 'fileRenamed', 'fileOpened', 'fileContentChanged', 'contentSearchResults', 'contentSearchComplete', 'contentSearchError', 'definitionResult', 'fileError'];
|
|
56
56
|
export const CollabResponseMessages = ['collabJoined', 'collabUpdate', 'collabCursor', 'collabRoster', 'collabSaved', 'collabPushRejected', 'collabEnded', 'collabError'];
|
|
@@ -74,8 +74,9 @@ const FileDownloadResponseMessages = ['fileDownloadReady', 'fileDownloadChunk',
|
|
|
74
74
|
const FileShareResponseMessages = ['fileShareDirectoryListing', 'fileShareFileContent', 'fileShareError', 'fileShareDownloadReady', 'fileShareDownloadChunk', 'fileShareDownloadComplete', 'fileShareDownloadError'];
|
|
75
75
|
export const PlanResponseMessages = ['planState', 'planIssueList', 'planIssue', 'planSprint', 'planMilestone', 'planNotFound', 'planStateUpdated', 'planIssueUpdated', 'planIssueDeleted', 'planScaffolded', 'planPromptStreaming', 'planPromptToolUse', 'planPromptProgress', 'planPromptTokens', 'planPromptResponse', 'planExecutionStarted', 'planExecutionProgress', 'planExecutionOutput', 'planExecutionPrompt', 'planExecutionToolUse', 'planExecutionTokens', 'planExecutionMetrics', 'planExecutionComplete', 'planExecutionError', 'planError', 'composerPromptQueueSync', 'pmTimelineSnapshot', 'pmTimelineEvent'];
|
|
76
76
|
const PlanBoardResponseMessages = ['planBoardCreated', 'planBoardUpdated', 'planBoardArchived', 'planBoardState', 'planBoardArtifacts', 'planWorkspaceUpdated', 'planBoardExported', 'planBoardImported', 'planBoardDownloaded', 'planTemplateInstantiated'];
|
|
77
|
-
const PlanSprintResponseMessages = ['planSprintCreated', 'planSprintUpdated', 'planSprintCompleted', 'planSprintArtifacts', 'planReviewProgress'];
|
|
77
|
+
const PlanSprintResponseMessages = ['planSprintCreated', 'planSprintUpdated', 'planSprintCompleted', 'planSprintArtifacts', 'planReviewProgress', 'planIssueAbandoned'];
|
|
78
78
|
const PlanScheduleResponseMessages = ['planScheduleCreated', 'planScheduleUpdated', 'planScheduleDeleted', 'planScheduleListResult', 'planScheduleValidateSourceResult', 'planSchedulesChanged', 'planScheduleFired'];
|
|
79
|
+
const PlanChainResponseMessages = ['planChainsChanged', 'planChainFired'];
|
|
79
80
|
export const AgentScheduleResponseMessages = ['agentScheduleCreated', 'agentScheduleUpdated', 'agentScheduleDeleted', 'agentScheduleListResult', 'agentSchedulesChanged', 'agentScheduleFired'];
|
|
80
81
|
const SkillResponseMessages = ['skillsList', 'chatToBoardCreated'];
|
|
81
82
|
const SnippetResponseMessages = ['snippetSuggestions', 'snippetListResult', 'snippetExpansion', 'snippetCreateResult', 'snippetGetResult', 'snippetUpdateResult'];
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Copyright (c) 2025-present Minionry, Inc.
|
|
2
|
+
// SPDX-License-Identifier: LicenseRef-Minionry-Software
|
|
3
|
+
export const HIGH_FREQUENCY_TAB_EVENTS = new Set([
|
|
4
|
+
'output',
|
|
5
|
+
'thinking',
|
|
6
|
+
'streamingTokens',
|
|
7
|
+
'toolUse',
|
|
8
|
+
'timelineEvent',
|
|
9
|
+
]);
|
|
10
|
+
export function isHighFrequencyTabEvent(type) {
|
|
11
|
+
return HIGH_FREQUENCY_TAB_EVENTS.has(type);
|
|
12
|
+
}
|
|
13
|
+
export class ViewerInterestRegistry {
|
|
14
|
+
byConnection = new WeakMap();
|
|
15
|
+
declare(connection, interest) {
|
|
16
|
+
this.byConnection.set(connection, interest);
|
|
17
|
+
}
|
|
18
|
+
interestOf(connection) {
|
|
19
|
+
return this.byConnection.get(connection) ?? 'full';
|
|
20
|
+
}
|
|
21
|
+
wantsStreams(connection) {
|
|
22
|
+
return this.interestOf(connection) === 'full';
|
|
23
|
+
}
|
|
24
|
+
forget(connection) {
|
|
25
|
+
this.byConnection.delete(connection);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function parseStreamInterest(value) {
|
|
29
|
+
return value === 'full' || value === 'lite' ? value : null;
|
|
30
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minionry/minion",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.39",
|
|
4
4
|
"description": "Command-line client that connects this machine to Minionry.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -56,11 +56,11 @@
|
|
|
56
56
|
"@codemirror/collab": "^6.1.1",
|
|
57
57
|
"@codemirror/state": "^6.5.4",
|
|
58
58
|
"@hono/node-server": "^1.19.6",
|
|
59
|
-
"@minionry/app-manifest": "^0.1.
|
|
60
|
-
"@minionry/browser-types": "^0.1.
|
|
59
|
+
"@minionry/app-manifest": "^0.1.16",
|
|
60
|
+
"@minionry/browser-types": "^0.1.10",
|
|
61
61
|
"@minionry/e2ee": "file:vendor/e2ee",
|
|
62
|
-
"@minionry/roles": "^0.2.
|
|
63
|
-
"@minionry/sdk": "^0.
|
|
62
|
+
"@minionry/roles": "^0.2.14",
|
|
63
|
+
"@minionry/sdk": "^0.5.2",
|
|
64
64
|
"@modelcontextprotocol/sdk": "^1.21.1",
|
|
65
65
|
"@sentry/core": "^10.54.0",
|
|
66
66
|
"fflate": "^0.8.3",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
"devDependencies": {
|
|
82
82
|
"node-pty": "^1.1.0"
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "6b9df70a44e601c53068ffc155c5f04c11111f81"
|
|
85
85
|
}
|