@flowdesk/opencode-plugin 0.1.12 → 0.1.14

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.
Files changed (98) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-task-output.d.ts +17 -0
  3. package/dist/agent-task-output.d.ts.map +1 -0
  4. package/dist/agent-task-output.js +119 -0
  5. package/dist/agent-task-output.js.map +1 -0
  6. package/dist/agent-task-runner.d.ts +24 -0
  7. package/dist/agent-task-runner.d.ts.map +1 -1
  8. package/dist/agent-task-runner.js +536 -61
  9. package/dist/agent-task-runner.js.map +1 -1
  10. package/dist/auto-continue-preview-tool.d.ts +36 -0
  11. package/dist/auto-continue-preview-tool.d.ts.map +1 -0
  12. package/dist/auto-continue-preview-tool.js +119 -0
  13. package/dist/auto-continue-preview-tool.js.map +1 -0
  14. package/dist/completion-ui-cache.d.ts +6 -0
  15. package/dist/completion-ui-cache.d.ts.map +1 -0
  16. package/dist/completion-ui-cache.js +260 -0
  17. package/dist/completion-ui-cache.js.map +1 -0
  18. package/dist/controlled-write-tool.d.ts +49 -0
  19. package/dist/controlled-write-tool.d.ts.map +1 -0
  20. package/dist/controlled-write-tool.js +296 -0
  21. package/dist/controlled-write-tool.js.map +1 -0
  22. package/dist/event-hook-observer.d.ts +14 -0
  23. package/dist/event-hook-observer.d.ts.map +1 -0
  24. package/dist/event-hook-observer.js +193 -0
  25. package/dist/event-hook-observer.js.map +1 -0
  26. package/dist/managed-dispatch-adapter.d.ts +1 -0
  27. package/dist/managed-dispatch-adapter.d.ts.map +1 -1
  28. package/dist/managed-dispatch-adapter.js +100 -29
  29. package/dist/managed-dispatch-adapter.js.map +1 -1
  30. package/dist/model-selection-engine.d.ts +47 -0
  31. package/dist/model-selection-engine.d.ts.map +1 -0
  32. package/dist/model-selection-engine.js +175 -0
  33. package/dist/model-selection-engine.js.map +1 -0
  34. package/dist/provider-usage-live-tool.d.ts +27 -0
  35. package/dist/provider-usage-live-tool.d.ts.map +1 -1
  36. package/dist/provider-usage-live-tool.js +443 -4
  37. package/dist/provider-usage-live-tool.js.map +1 -1
  38. package/dist/quick-reviewer-run.d.ts +3 -0
  39. package/dist/quick-reviewer-run.d.ts.map +1 -1
  40. package/dist/quick-reviewer-run.js +20 -8
  41. package/dist/quick-reviewer-run.js.map +1 -1
  42. package/dist/runtime-reviewer-execution-bridge.d.ts +21 -0
  43. package/dist/runtime-reviewer-execution-bridge.d.ts.map +1 -1
  44. package/dist/runtime-reviewer-execution-bridge.js +238 -0
  45. package/dist/runtime-reviewer-execution-bridge.js.map +1 -1
  46. package/dist/server.d.ts +60 -1
  47. package/dist/server.d.ts.map +1 -1
  48. package/dist/server.js +800 -41
  49. package/dist/server.js.map +1 -1
  50. package/dist/stall-recovery.d.ts +60 -0
  51. package/dist/stall-recovery.d.ts.map +1 -1
  52. package/dist/stall-recovery.js +763 -11
  53. package/dist/stall-recovery.js.map +1 -1
  54. package/dist/status-live-tool.d.ts +81 -0
  55. package/dist/status-live-tool.d.ts.map +1 -1
  56. package/dist/status-live-tool.js +620 -38
  57. package/dist/status-live-tool.js.map +1 -1
  58. package/dist/tui-subtask-activity.d.ts +69 -0
  59. package/dist/tui-subtask-activity.d.ts.map +1 -0
  60. package/dist/tui-subtask-activity.js +266 -0
  61. package/dist/tui-subtask-activity.js.map +1 -0
  62. package/dist/tui-usage-snapshot.d.ts +44 -0
  63. package/dist/tui-usage-snapshot.d.ts.map +1 -0
  64. package/dist/tui-usage-snapshot.js +397 -0
  65. package/dist/tui-usage-snapshot.js.map +1 -0
  66. package/dist/tui.d.ts +7 -0
  67. package/dist/tui.d.ts.map +1 -0
  68. package/dist/tui.js +134 -0
  69. package/dist/tui.js.map +1 -0
  70. package/dist/workflow-assign-tool.d.ts +23 -0
  71. package/dist/workflow-assign-tool.d.ts.map +1 -0
  72. package/dist/workflow-assign-tool.js +117 -0
  73. package/dist/workflow-assign-tool.js.map +1 -0
  74. package/dist/workflow-author-tool.d.ts +29 -0
  75. package/dist/workflow-author-tool.d.ts.map +1 -0
  76. package/dist/workflow-author-tool.js +227 -0
  77. package/dist/workflow-author-tool.js.map +1 -0
  78. package/dist/workflow-dispatch-plan-tool.d.ts +47 -0
  79. package/dist/workflow-dispatch-plan-tool.d.ts.map +1 -0
  80. package/dist/workflow-dispatch-plan-tool.js +251 -0
  81. package/dist/workflow-dispatch-plan-tool.js.map +1 -0
  82. package/dist/workflow-dispatch-tool.d.ts +56 -0
  83. package/dist/workflow-dispatch-tool.d.ts.map +1 -0
  84. package/dist/workflow-dispatch-tool.js +306 -0
  85. package/dist/workflow-dispatch-tool.js.map +1 -0
  86. package/dist/workflow-orchestrator.d.ts +31 -0
  87. package/dist/workflow-orchestrator.d.ts.map +1 -0
  88. package/dist/workflow-orchestrator.js +160 -0
  89. package/dist/workflow-orchestrator.js.map +1 -0
  90. package/dist/workflow-scheduler.d.ts +19 -0
  91. package/dist/workflow-scheduler.d.ts.map +1 -0
  92. package/dist/workflow-scheduler.js +45 -0
  93. package/dist/workflow-scheduler.js.map +1 -0
  94. package/dist/workflow-synthesis-tool.d.ts +31 -0
  95. package/dist/workflow-synthesis-tool.d.ts.map +1 -0
  96. package/dist/workflow-synthesis-tool.js +194 -0
  97. package/dist/workflow-synthesis-tool.js.map +1 -0
  98. package/package.json +10 -2
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Usage-weighted model selection engine.
3
+ *
4
+ * Maps task roles to candidate model tiers and uses current provider usage
5
+ * to weight the probability of selecting each model. Low-usage providers are
6
+ * deprioritized; exhausted providers are excluded.
7
+ */
8
+ // ---------------------------------------------------------------------------
9
+ // Model catalog – ordered by preference within each tier
10
+ // ---------------------------------------------------------------------------
11
+ const HEAVY_MODELS = [
12
+ { providerQualifiedModelId: "anthropic/claude-opus-4-7", providerFamily: "claude", agentName: "reviewer-claude-opus", tier: "heavy" },
13
+ { providerQualifiedModelId: "openai/gpt-5.5", providerFamily: "openai", agentName: "reviewer-gpt-frontier", tier: "heavy" },
14
+ ];
15
+ const MEDIUM_MODELS = [
16
+ { providerQualifiedModelId: "openai/gpt-5.5", providerFamily: "openai", agentName: "reviewer-gpt-frontier", tier: "medium" },
17
+ { providerQualifiedModelId: "anthropic/claude-sonnet-4-6", providerFamily: "claude", agentName: "reviewer-claude-opus", tier: "medium" },
18
+ { providerQualifiedModelId: "google/gemini-3.1-pro-preview", providerFamily: "gemini", usageKey: "gemini-pro", agentName: "reviewer-gemini-pro", tier: "medium" },
19
+ { providerQualifiedModelId: "google/gemini-3.1-flash-preview", providerFamily: "gemini", usageKey: "gemini-flash", agentName: "reviewer-gemini-pro", tier: "medium" },
20
+ ];
21
+ const LIGHT_MODELS = [
22
+ { providerQualifiedModelId: "openai/gpt-5.5", providerFamily: "openai", agentName: "reviewer-gpt-frontier", tier: "light" },
23
+ { providerQualifiedModelId: "anthropic/claude-sonnet-4-6", providerFamily: "claude", agentName: "reviewer-claude-opus", tier: "light" },
24
+ { providerQualifiedModelId: "google/gemini-3.1-flash-lite-preview", providerFamily: "gemini", usageKey: "gemini-flash-lite", agentName: "reviewer-gemini-pro", tier: "light" },
25
+ ];
26
+ // Role → preferred tier + candidate pool
27
+ // Heavy roles: only heavy models (high quality required)
28
+ // Medium roles: medium first, heavy fallback
29
+ // Light roles: light first, medium fallback
30
+ const ROLE_TIER_MAP = {
31
+ security: { tier: "heavy", candidates: [...HEAVY_MODELS] },
32
+ architecture: { tier: "heavy", candidates: [HEAVY_MODELS[1], HEAVY_MODELS[0]] },
33
+ review: { tier: "heavy", candidates: [...HEAVY_MODELS, ...MEDIUM_MODELS] },
34
+ decision: { tier: "medium", candidates: [...MEDIUM_MODELS, ...HEAVY_MODELS] },
35
+ implementation: { tier: "medium", candidates: [...MEDIUM_MODELS] },
36
+ verification: { tier: "medium", candidates: [...MEDIUM_MODELS] },
37
+ performance: { tier: "medium", candidates: [...MEDIUM_MODELS] },
38
+ migration: { tier: "medium", candidates: [...MEDIUM_MODELS, ...HEAVY_MODELS] },
39
+ exploration: { tier: "light", candidates: [...LIGHT_MODELS, ...MEDIUM_MODELS] },
40
+ documentation: { tier: "light", candidates: [...LIGHT_MODELS, ...MEDIUM_MODELS] },
41
+ git: { tier: "light", candidates: [...LIGHT_MODELS] },
42
+ };
43
+ // ---------------------------------------------------------------------------
44
+ // Usage weight calculation
45
+ // ---------------------------------------------------------------------------
46
+ function usageWeight(usage) {
47
+ if (!usage)
48
+ return 0.2; // unknown provider → low weight
49
+ if (usage.alertLevel === "exhausted")
50
+ return 0;
51
+ if (usage.alertLevel === "critical")
52
+ return 0.05;
53
+ const pct = usage.remainingPercent;
54
+ if (pct === null)
55
+ return 0.1;
56
+ if (pct > 50)
57
+ return 1.0;
58
+ if (pct > 30)
59
+ return 0.7;
60
+ if (pct > 10)
61
+ return 0.3;
62
+ return 0.05;
63
+ }
64
+ function usageNote(usage) {
65
+ if (!usage)
66
+ return "usage unknown";
67
+ if (usage.alertLevel === "exhausted")
68
+ return "exhausted – excluded";
69
+ if (usage.alertLevel === "critical")
70
+ return `critical (${usage.remainingPercent ?? "?"}% left)`;
71
+ if (usage.alertLevel === "warning")
72
+ return `warning (${usage.remainingPercent ?? "?"}% left)`;
73
+ return `ok (${usage.remainingPercent ?? "?"}% left)`;
74
+ }
75
+ // ---------------------------------------------------------------------------
76
+ // Public API
77
+ // ---------------------------------------------------------------------------
78
+ /**
79
+ * Select the best model for a task given current provider usage.
80
+ * Uses weighted random selection so lower-usage providers are preferred
81
+ * without completely blocking higher-usage ones.
82
+ */
83
+ export function selectModelForTask(role, usageByFamily, now) {
84
+ void now; // reserved for future TTL checks
85
+ const mapping = ROLE_TIER_MAP[role];
86
+ if (!mapping)
87
+ return undefined;
88
+ // Deduplicate by providerQualifiedModelId and compute weights
89
+ const seen = new Set();
90
+ const weighted = [];
91
+ for (const candidate of mapping.candidates) {
92
+ if (seen.has(candidate.providerQualifiedModelId))
93
+ continue;
94
+ seen.add(candidate.providerQualifiedModelId);
95
+ const usage = usageByFamily.get(candidate.usageKey ?? candidate.providerFamily) ?? usageByFamily.get(candidate.providerFamily);
96
+ const weight = usageWeight(usage);
97
+ if (weight <= 0)
98
+ continue; // exhausted – skip entirely
99
+ weighted.push({ candidate, weight, usageNote: usageNote(usage) });
100
+ }
101
+ if (weighted.length === 0)
102
+ return undefined;
103
+ // Weighted random pick
104
+ const total = weighted.reduce((sum, r) => sum + r.weight, 0);
105
+ let rand = Math.random() * total;
106
+ for (const r of weighted) {
107
+ rand -= r.weight;
108
+ if (rand <= 0)
109
+ return r;
110
+ }
111
+ return weighted[weighted.length - 1];
112
+ }
113
+ /**
114
+ * Build a usage map from the sidebar cache provider rows.
115
+ */
116
+ export function buildUsageMapFromProviders(providers) {
117
+ const map = new Map();
118
+ for (const p of providers) {
119
+ if (p.providerFamily !== "claude" && p.providerFamily !== "openai" && p.providerFamily !== "gemini")
120
+ continue;
121
+ const providerUsage = {
122
+ providerFamily: p.providerFamily,
123
+ remainingPercent: p.remainingPercent,
124
+ alertLevel: p.alertLevel ?? "unknown",
125
+ };
126
+ map.set(p.providerFamily, providerUsage);
127
+ if (p.providerFamily !== "gemini")
128
+ continue;
129
+ for (const bucket of p.buckets ?? []) {
130
+ const usageKey = geminiUsageKeyFromResetBucket(bucket.resetBucket);
131
+ if (usageKey === undefined)
132
+ continue;
133
+ const usage = {
134
+ providerFamily: "gemini",
135
+ remainingPercent: bucket.remainingPercent,
136
+ alertLevel: alertLevelForBucket(bucket.remainingPercent, bucket.freshness, bucket.alertLevel),
137
+ };
138
+ const existing = map.get(usageKey);
139
+ if (existing === undefined || usageRank(usage) < usageRank(existing))
140
+ map.set(usageKey, usage);
141
+ }
142
+ }
143
+ return map;
144
+ }
145
+ function geminiUsageKeyFromResetBucket(value) {
146
+ const normalized = value?.toLowerCase().trim().replace(/^[0-9]+(?:\.[0-9]+)?%\s+/, "") ?? "";
147
+ if (normalized.startsWith("gemini-flash-lite"))
148
+ return "gemini-flash-lite";
149
+ if (normalized.startsWith("gemini-flash"))
150
+ return "gemini-flash";
151
+ if (normalized.startsWith("gemini-pro"))
152
+ return "gemini-pro";
153
+ return undefined;
154
+ }
155
+ function alertLevelForBucket(remainingPercent, freshness, explicit) {
156
+ if (explicit === "ok" || explicit === "warning" || explicit === "critical" || explicit === "exhausted" || explicit === "stale" || explicit === "unknown")
157
+ return explicit;
158
+ if (freshness !== undefined && freshness !== "fresh")
159
+ return freshness === "stale" ? "stale" : "unknown";
160
+ if (remainingPercent === null)
161
+ return "unknown";
162
+ if (remainingPercent <= 0)
163
+ return "exhausted";
164
+ if (remainingPercent <= 10)
165
+ return "critical";
166
+ if (remainingPercent <= 30)
167
+ return "warning";
168
+ return "ok";
169
+ }
170
+ function usageRank(usage) {
171
+ if (usage.remainingPercent !== null)
172
+ return usage.remainingPercent;
173
+ return usage.alertLevel === "unknown" || usage.alertLevel === "stale" ? Number.POSITIVE_INFINITY : 100;
174
+ }
175
+ //# sourceMappingURL=model-selection-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-selection-engine.js","sourceRoot":"","sources":["../src/model-selection-engine.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type FlowDeskProviderHealthSnapshotV1 } from "@flowdesk/core";
1
2
  export type FlowDeskProviderUsageLiveProviderFamilyV1 = "claude" | "openai" | "gemini";
2
3
  export interface FlowDeskProviderUsageLiveConfigV1 {
3
4
  homeDir?: string;
@@ -9,8 +10,10 @@ export interface FlowDeskProviderUsageLiveConfigV1 {
9
10
  geminiOAuthClientSecret?: string;
10
11
  geminiProjectId?: string;
11
12
  persistSnapshots?: boolean;
13
+ persistSidebarCache?: boolean;
12
14
  durableStateRootDir?: string;
13
15
  persistWorkflowId?: string;
16
+ appendToChat?: boolean;
14
17
  }
15
18
  export interface FlowDeskProviderUsageLiveRequestV1 {
16
19
  providerFamily?: string;
@@ -31,6 +34,14 @@ export interface FlowDeskProviderUsageLiveProviderRowV1 {
31
34
  redactedReason?: string;
32
35
  usageSnapshotRef?: string;
33
36
  providerHealthSnapshotRef?: string;
37
+ providerHealth?: {
38
+ snapshotRef: string;
39
+ freshness: FlowDeskProviderHealthSnapshotV1["freshness"];
40
+ availabilityState: FlowDeskProviderHealthSnapshotV1["availability_state"];
41
+ failureClass: FlowDeskProviderHealthSnapshotV1["failure_class"];
42
+ dispatchability: FlowDeskProviderHealthSnapshotV1["dispatchability"];
43
+ sourceSurface: FlowDeskProviderHealthSnapshotV1["source_surface"];
44
+ };
34
45
  usageAuthorityAcquired: boolean;
35
46
  }
36
47
  export interface FlowDeskProviderUsageLiveSnapshotPersistenceV1 {
@@ -40,6 +51,20 @@ export interface FlowDeskProviderUsageLiveSnapshotPersistenceV1 {
40
51
  persistedEvidenceIds: readonly string[];
41
52
  skippedReasons: readonly string[];
42
53
  }
54
+ export interface FlowDeskProviderUsageLiveSnapshotReuseV1 {
55
+ requested: boolean;
56
+ durableStateRootConfigured: boolean;
57
+ workflowId?: string;
58
+ reusedEvidenceIds: readonly string[];
59
+ skippedReasons: readonly string[];
60
+ }
61
+ export interface FlowDeskProviderUsageLiveSidebarCachePersistenceV1 {
62
+ requested: boolean;
63
+ durableStateRootConfigured: boolean;
64
+ cachePathRef?: string;
65
+ persisted: boolean;
66
+ skippedReasons: readonly string[];
67
+ }
43
68
  export interface FlowDeskProviderUsageLiveResultV1 {
44
69
  status: "provider_usage_live_collected" | "blocked_before_provider_usage_live";
45
70
  observedAt: string;
@@ -49,7 +74,9 @@ export interface FlowDeskProviderUsageLiveResultV1 {
49
74
  worstAlertLevel: FlowDeskProviderUsageLiveAlertLevelV1;
50
75
  overallRecommendation: string;
51
76
  redactedBlockReason?: string;
77
+ snapshotReuse?: FlowDeskProviderUsageLiveSnapshotReuseV1;
52
78
  snapshotPersistence?: FlowDeskProviderUsageLiveSnapshotPersistenceV1;
79
+ sidebarCachePersistence?: FlowDeskProviderUsageLiveSidebarCachePersistenceV1;
53
80
  safeNextActions: readonly ("/flowdesk-doctor" | "/flowdesk-status")[];
54
81
  authority: {
55
82
  realOpenCodeDispatch: false;
@@ -1 +1 @@
1
- {"version":3,"file":"provider-usage-live-tool.d.ts","sourceRoot":"","sources":["../src/provider-usage-live-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider-usage-live-tool.d.ts","sourceRoot":"","sources":["../src/provider-usage-live-tool.ts"],"names":[],"mappings":"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"}