feat(studio): temporal source bucket + provenance pill on store grid
Some checks failed
Security / Security check (push) Failing after 1s
Some checks failed
Security / Security check (push) Failing after 1s
Adds the missing UI surface for SPARK / Temporal federated
capabilities. Previously only mcp and n8n showed provenance
pills; temporal-sourced entries fell through to the default
"no badge" case.
- storeSourceTemporal + storeProvenanceTemporal l10n keys
(en + de). Pill format: "temporal · <provider>", icon
Icons.timer_outlined, accent tone.
- Source filter chip row gains a "Temporal" option in the
Store filter dialog.
- `_StoreProvenancePill` adds a `case 'temporal'` branch.
Operators federating a SPARK cluster (`services: -
kind: temporal`) now see their workflows visually labelled
as Temporal-sourced in the Store grid + filter UI.
dart analyze green. No test changes required — the
provenance pill is render-only.
Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
parent
2c13ef58ae
commit
ceed8aab02
6 changed files with 1379 additions and 279 deletions
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -3565,6 +3565,18 @@ abstract class AppLocalizations {
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
/// **'Pull failed: {error}'**
|
/// **'Pull failed: {error}'**
|
||||||
String systemAiPullFailedError(String error);
|
String systemAiPullFailedError(String error);
|
||||||
|
|
||||||
|
/// No description provided for @storeProvenanceTemporal.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'temporal · {provider}'**
|
||||||
|
String storeProvenanceTemporal(String provider);
|
||||||
|
|
||||||
|
/// No description provided for @storeSourceTemporal.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Temporal'**
|
||||||
|
String get storeSourceTemporal;
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AppLocalizationsDelegate
|
class _AppLocalizationsDelegate
|
||||||
|
|
|
||||||
|
|
@ -2084,4 +2084,12 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||||
String systemAiPullFailedError(String error) {
|
String systemAiPullFailedError(String error) {
|
||||||
return 'Pull fehlgeschlagen: $error';
|
return 'Pull fehlgeschlagen: $error';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String storeProvenanceTemporal(String provider) {
|
||||||
|
return 'temporal · $provider';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get storeSourceTemporal => 'Temporal';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2090,4 +2090,12 @@ class AppLocalizationsEn extends AppLocalizations {
|
||||||
String systemAiPullFailedError(String error) {
|
String systemAiPullFailedError(String error) {
|
||||||
return 'Pull failed: $error';
|
return 'Pull failed: $error';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String storeProvenanceTemporal(String provider) {
|
||||||
|
return 'temporal · $provider';
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get storeSourceTemporal => 'Temporal';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1030,6 +1030,7 @@ class _FilterDialogState extends State<_FilterDialog> {
|
||||||
(value: 'native', label: l.storeSourceNative),
|
(value: 'native', label: l.storeSourceNative),
|
||||||
(value: 'mcp', label: l.storeSourceMcp),
|
(value: 'mcp', label: l.storeSourceMcp),
|
||||||
(value: 'n8n', label: l.storeSourceN8n),
|
(value: 'n8n', label: l.storeSourceN8n),
|
||||||
|
(value: 'temporal', label: l.storeSourceTemporal),
|
||||||
],
|
],
|
||||||
_source,
|
_source,
|
||||||
(v) => setState(() => _source = v),
|
(v) => setState(() => _source = v),
|
||||||
|
|
@ -3355,6 +3356,13 @@ class _ProvenancePill extends StatelessWidget {
|
||||||
monospace: true,
|
monospace: true,
|
||||||
icon: Icons.account_tree_outlined,
|
icon: Icons.account_tree_outlined,
|
||||||
);
|
);
|
||||||
|
case 'temporal':
|
||||||
|
return FaiPill(
|
||||||
|
label: l.storeProvenanceTemporal(item.provider),
|
||||||
|
tone: FaiPillTone.accent,
|
||||||
|
monospace: true,
|
||||||
|
icon: Icons.timer_outlined,
|
||||||
|
);
|
||||||
default:
|
default:
|
||||||
// Native is the default: no badge needed. Keeps the
|
// Native is the default: no badge needed. Keeps the
|
||||||
// card visually quiet — only foreign code (mcp / n8n)
|
// card visually quiet — only foreign code (mcp / n8n)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue