fix decisions/tickets views to use proper IPC verbs

Both views were calling pql.exec (not registered). Switched to
pql.decisions.list and pql.tickets.list which are registered
IPC handlers. Response parsing updated to read structured data
instead of parsing JSON from stdout.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-23 11:36:10 +02:00
co-authored by Claude Opus 4.6
parent d811a702d6
commit 9689fe65c1
2 changed files with 13 additions and 26 deletions
+7 -13
View File
@@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'package:clide/kernel/kernel.dart';
import 'package:clide/widgets/widgets.dart';
@@ -27,9 +26,8 @@ class _DecisionsViewState extends State<DecisionsView> {
Future<void> _load() async {
final kernel = ClideKernel.of(context);
final resp = await kernel.ipc.request('pql.exec', args: {
'argv': ['decisions', 'list', '--type', 'confirmed'],
});
await kernel.ipc.request('pql.decisions.sync');
final resp = await kernel.ipc.request('pql.decisions.list');
if (!mounted) return;
if (!resp.ok) {
setState(() {
@@ -38,18 +36,14 @@ class _DecisionsViewState extends State<DecisionsView> {
});
return;
}
final raw = resp.data['stdout'] as String? ?? '[]';
try {
final list = (jsonDecode(raw) as List).cast<Map<String, dynamic>>();
final raw = resp.data['decisions'];
if (raw is List) {
setState(() {
_decisions = list.map(_DecisionEntry.fromJson).toList();
_loading = false;
});
} catch (e) {
setState(() {
_error = 'parse error: $e';
_decisions = [for (final e in raw) _DecisionEntry.fromJson((e as Map).cast<String, dynamic>())];
_loading = false;
});
} else {
setState(() => _loading = false);
}
}
+6 -13
View File
@@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:convert';
import 'package:clide/kernel/kernel.dart';
import 'package:clide/widgets/widgets.dart';
@@ -27,9 +26,7 @@ class _TicketsViewState extends State<TicketsView> {
Future<void> _load() async {
final kernel = ClideKernel.of(context);
final resp = await kernel.ipc.request('pql.exec', args: {
'argv': ['ticket', 'list'],
});
final resp = await kernel.ipc.request('pql.tickets.list');
if (!mounted) return;
if (!resp.ok) {
setState(() {
@@ -38,18 +35,14 @@ class _TicketsViewState extends State<TicketsView> {
});
return;
}
final raw = resp.data['stdout'] as String? ?? '[]';
try {
final list = (jsonDecode(raw) as List).cast<Map<String, dynamic>>();
final raw = resp.data['tickets'];
if (raw is List) {
setState(() {
_tickets = list.map(_TicketEntry.fromJson).toList();
_loading = false;
});
} catch (e) {
setState(() {
_error = 'parse error: $e';
_tickets = [for (final e in raw) _TicketEntry.fromJson((e as Map).cast<String, dynamic>())];
_loading = false;
});
} else {
setState(() => _loading = false);
}
}