@aion0/forge 0.9.14 → 0.9.15

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/RELEASE_NOTES.md CHANGED
@@ -1,15 +1,11 @@
1
- # Forge v0.9.14
1
+ # Forge v0.9.15
2
2
 
3
3
  Released: 2026-05-27
4
4
 
5
- ## Changes since v0.9.13
5
+ ## Changes since v0.9.14
6
6
 
7
7
  ### Other
8
- - fix(pipeline): apply workflow.input defaults for missing fields
9
- - feat(chat): trigger_pipeline schema validation + self-evolving rules
10
- - feat(chat): pipeline input schemas + Forge context tools
11
- - refactor(chat): LLM layer on Vercel AI SDK (provider-agnostic streaming)
12
- - feat(chat): trigger_pipeline + dispatch_task builtin tools
8
+ - fix(connectors): derive mode label from tool protocols
13
9
 
14
10
 
15
- **Full Changelog**: https://github.com/aiwatching/forge/compare/v0.9.13...v0.9.14
11
+ **Full Changelog**: https://github.com/aiwatching/forge/compare/v0.9.14...v0.9.15
@@ -51,6 +51,25 @@ function expandEntry(entry: ConnectorEntry, settings: Record<string, any> | unde
51
51
  return out;
52
52
  }
53
53
 
54
+ /** Pure UI label derived from tool protocols. The actual dispatch goes by
55
+ * each tool's `protocol` field (see lib/chat/tool-dispatcher.ts switch) —
56
+ * this is just so the ConnectorsTab pill stops calling a connector
57
+ * browser-side when every one of its tools is server-side (e.g. gitlab,
58
+ * whose tools all use protocol: http). The legacy connector-level `mode`
59
+ * field is ignored. */
60
+ function deriveModeLabel(entries: ConnectorEntry[]): 'server-side' | 'browser-side' | 'mixed' {
61
+ const ps = new Set<string>();
62
+ for (const e of entries) {
63
+ for (const t of Object.values(e.tools || {})) {
64
+ ps.add((t as any).protocol || 'browser');
65
+ }
66
+ }
67
+ if (ps.size === 0) return 'browser-side';
68
+ const allServer = [...ps].every((p) => p === 'http' || p === 'shell');
69
+ const allBrowser = [...ps].every((p) => p === 'browser');
70
+ return allServer ? 'server-side' : allBrowser ? 'browser-side' : 'mixed';
71
+ }
72
+
54
73
  function toConnectorPayload(def: ConnectorDefinition, config: Record<string, any> | undefined, installed: boolean) {
55
74
  const entries = getConnectorEntries(def).map(e => expandEntry(e, config));
56
75
 
@@ -69,7 +88,7 @@ function toConnectorPayload(def: ConnectorDefinition, config: Record<string, any
69
88
  version: def.version,
70
89
  author: def.author || 'forge',
71
90
  description: def.description || '',
72
- mode: 'browser-side', // every connector is browser-facing
91
+ mode: deriveModeLabel(entries),
73
92
  installed,
74
93
  ...(hostMatch ? { host_match: hostMatch } : {}),
75
94
  ...(loginRedirect ? { login_redirect: loginRedirect } : {}),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aion0/forge",
3
- "version": "0.9.14",
3
+ "version": "0.9.15",
4
4
  "description": "Unified AI workflow platform — multi-model task orchestration, persistent sessions, web terminal, remote access",
5
5
  "type": "module",
6
6
  "scripts": {