@triedotdev/mcp 1.0.122 → 1.0.124

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 (51) hide show
  1. package/dist/{chat-store-R46BCMBW.js → chat-store-HFOOWZYN.js} +2 -2
  2. package/dist/{chunk-JG7XVS53.js → chunk-4YJ6KLGI.js} +9 -2
  3. package/dist/{chunk-JG7XVS53.js.map → chunk-4YJ6KLGI.js.map} +1 -1
  4. package/dist/{chunk-ANQPXOT2.js → chunk-7J4ZOOAD.js} +333 -304
  5. package/dist/chunk-7J4ZOOAD.js.map +1 -0
  6. package/dist/{chunk-F4ZIAHTZ.js → chunk-A4EDTN6R.js} +2 -2
  7. package/dist/{chunk-7A5RLKZY.js → chunk-D2CGMX7K.js} +7 -7
  8. package/dist/{chunk-HWXZ3E7B.js → chunk-DFPVUMVE.js} +1 -1
  9. package/dist/chunk-DFPVUMVE.js.map +1 -0
  10. package/dist/{chunk-EOLHWFDG.js → chunk-TRIJC5MW.js} +2 -2
  11. package/dist/{chunk-3BVNB3GY.js → chunk-W2DEBKZ2.js} +4 -5
  12. package/dist/chunk-W2DEBKZ2.js.map +1 -0
  13. package/dist/{chunk-WRGSH5RT.js → chunk-WMI44VIC.js} +2 -2
  14. package/dist/{chunk-WRGSH5RT.js.map → chunk-WMI44VIC.js.map} +1 -1
  15. package/dist/cli/main.js +2 -2
  16. package/dist/cli/main.js.map +1 -1
  17. package/dist/cli/yolo-daemon.js +8 -8
  18. package/dist/{client-PMKE26IV.js → client-EWP4SIG3.js} +2 -2
  19. package/dist/{goal-manager-O446DRJI.js → goal-manager-RREOIX6U.js} +3 -3
  20. package/dist/{goal-validator-XYA364W3.js → goal-validator-CKFKJ46J.js} +2 -2
  21. package/dist/{guardian-agent-KVLNECZ5.js → guardian-agent-5QVLDPKB.js} +7 -7
  22. package/dist/{hypothesis-QFGZ5ITT.js → hypothesis-HFYZNIMZ.js} +3 -3
  23. package/dist/index.js +150 -30
  24. package/dist/index.js.map +1 -1
  25. package/dist/{insight-store-DZ5C3RFM.js → insight-store-F5KDBY5Y.js} +2 -2
  26. package/dist/{terminal-spawn-2GU5KLPS.js → terminal-spawn-P5M5PHAV.js} +28 -6
  27. package/dist/terminal-spawn-P5M5PHAV.js.map +1 -0
  28. package/dist/ui/chat.html +821 -0
  29. package/dist/ui/goals.html +724 -0
  30. package/dist/ui/hypotheses.html +768 -0
  31. package/dist/ui/ledger.html +711 -0
  32. package/dist/ui/nudges.html +752 -0
  33. package/package.json +1 -1
  34. package/dist/chunk-3BVNB3GY.js.map +0 -1
  35. package/dist/chunk-ANQPXOT2.js.map +0 -1
  36. package/dist/chunk-HWXZ3E7B.js.map +0 -1
  37. package/dist/terminal-spawn-2GU5KLPS.js.map +0 -1
  38. package/dist/ui/memory-viewer.html +0 -773
  39. package/dist/ui/pr-review.html +0 -742
  40. package/dist/ui/scan-dashboard.html +0 -741
  41. package/dist/ui/visual-qa.html +0 -762
  42. /package/dist/{chat-store-R46BCMBW.js.map → chat-store-HFOOWZYN.js.map} +0 -0
  43. /package/dist/{chunk-F4ZIAHTZ.js.map → chunk-A4EDTN6R.js.map} +0 -0
  44. /package/dist/{chunk-7A5RLKZY.js.map → chunk-D2CGMX7K.js.map} +0 -0
  45. /package/dist/{chunk-EOLHWFDG.js.map → chunk-TRIJC5MW.js.map} +0 -0
  46. /package/dist/{client-PMKE26IV.js.map → client-EWP4SIG3.js.map} +0 -0
  47. /package/dist/{goal-manager-O446DRJI.js.map → goal-manager-RREOIX6U.js.map} +0 -0
  48. /package/dist/{goal-validator-XYA364W3.js.map → goal-validator-CKFKJ46J.js.map} +0 -0
  49. /package/dist/{guardian-agent-KVLNECZ5.js.map → guardian-agent-5QVLDPKB.js.map} +0 -0
  50. /package/dist/{hypothesis-QFGZ5ITT.js.map → hypothesis-HFYZNIMZ.js.map} +0 -0
  51. /package/dist/{insight-store-DZ5C3RFM.js.map → insight-store-F5KDBY5Y.js.map} +0 -0
@@ -3,18 +3,18 @@ import {
3
3
  InteractiveDashboard,
4
4
  StreamingManager,
5
5
  TrieScanTool
6
- } from "../chunk-ANQPXOT2.js";
7
- import "../chunk-7A5RLKZY.js";
8
- import "../chunk-HWXZ3E7B.js";
9
- import "../chunk-EOLHWFDG.js";
10
- import "../chunk-3BVNB3GY.js";
11
- import "../chunk-JG7XVS53.js";
6
+ } from "../chunk-7J4ZOOAD.js";
7
+ import "../chunk-D2CGMX7K.js";
8
+ import "../chunk-DFPVUMVE.js";
9
+ import "../chunk-TRIJC5MW.js";
10
+ import "../chunk-W2DEBKZ2.js";
11
+ import "../chunk-4YJ6KLGI.js";
12
12
  import {
13
13
  isTrieInitialized
14
14
  } from "../chunk-6LD7OPJL.js";
15
15
  import "../chunk-ZV2K6M7T.js";
16
- import "../chunk-F4ZIAHTZ.js";
17
- import "../chunk-WRGSH5RT.js";
16
+ import "../chunk-A4EDTN6R.js";
17
+ import "../chunk-WMI44VIC.js";
18
18
  import "../chunk-K5EXATBF.js";
19
19
  import "../chunk-UHMMANC2.js";
20
20
  import "../chunk-WS6OA7H6.js";
@@ -9,7 +9,7 @@ import {
9
9
  saveKeyToKeychain,
10
10
  setAPIKey,
11
11
  tryGetClient
12
- } from "./chunk-WRGSH5RT.js";
12
+ } from "./chunk-WMI44VIC.js";
13
13
  import "./chunk-45Y5TLQZ.js";
14
14
  import "./chunk-APMV77PU.js";
15
15
  import "./chunk-DGUM43GV.js";
@@ -25,4 +25,4 @@ export {
25
25
  setAPIKey,
26
26
  tryGetClient
27
27
  };
28
- //# sourceMappingURL=client-PMKE26IV.js.map
28
+ //# sourceMappingURL=client-EWP4SIG3.js.map
@@ -4,8 +4,8 @@ import {
4
4
  calculateAdaptiveScanFrequency,
5
5
  clearGoalManagers,
6
6
  getGoalManager
7
- } from "./chunk-EOLHWFDG.js";
8
- import "./chunk-JG7XVS53.js";
7
+ } from "./chunk-TRIJC5MW.js";
8
+ import "./chunk-4YJ6KLGI.js";
9
9
  import "./chunk-K5EXATBF.js";
10
10
  import "./chunk-UHMMANC2.js";
11
11
  import "./chunk-WS6OA7H6.js";
@@ -21,4 +21,4 @@ export {
21
21
  clearGoalManagers,
22
22
  getGoalManager
23
23
  };
24
- //# sourceMappingURL=goal-manager-O446DRJI.js.map
24
+ //# sourceMappingURL=goal-manager-RREOIX6U.js.map
@@ -56,7 +56,7 @@ async function recordGoalViolationFixed(goal, file, projectPath) {
56
56
  }
57
57
  }
58
58
  async function checkFilesForGoalViolations(goals, projectPath, filesToCheck) {
59
- const { isAIAvailable, runAIAnalysis } = await import("./client-PMKE26IV.js");
59
+ const { isAIAvailable, runAIAnalysis } = await import("./client-EWP4SIG3.js");
60
60
  if (!isAIAvailable()) {
61
61
  throw new Error("AI not available - ANTHROPIC_API_KEY not set");
62
62
  }
@@ -185,4 +185,4 @@ export {
185
185
  recordGoalViolationCaught,
186
186
  recordGoalViolationFixed
187
187
  };
188
- //# sourceMappingURL=goal-validator-XYA364W3.js.map
188
+ //# sourceMappingURL=goal-validator-CKFKJ46J.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  GuardianAgent,
3
3
  getGuardian
4
- } from "./chunk-7A5RLKZY.js";
5
- import "./chunk-EOLHWFDG.js";
6
- import "./chunk-3BVNB3GY.js";
7
- import "./chunk-JG7XVS53.js";
8
- import "./chunk-F4ZIAHTZ.js";
9
- import "./chunk-WRGSH5RT.js";
4
+ } from "./chunk-D2CGMX7K.js";
5
+ import "./chunk-TRIJC5MW.js";
6
+ import "./chunk-W2DEBKZ2.js";
7
+ import "./chunk-4YJ6KLGI.js";
8
+ import "./chunk-A4EDTN6R.js";
9
+ import "./chunk-WMI44VIC.js";
10
10
  import "./chunk-K5EXATBF.js";
11
11
  import "./chunk-UHMMANC2.js";
12
12
  import "./chunk-WS6OA7H6.js";
@@ -23,4 +23,4 @@ export {
23
23
  GuardianAgent,
24
24
  getGuardian
25
25
  };
26
- //# sourceMappingURL=guardian-agent-KVLNECZ5.js.map
26
+ //# sourceMappingURL=guardian-agent-5QVLDPKB.js.map
@@ -3,8 +3,8 @@ import {
3
3
  clearHypothesisEngines,
4
4
  gatherEvidenceForHypothesis,
5
5
  getHypothesisEngine
6
- } from "./chunk-3BVNB3GY.js";
7
- import "./chunk-JG7XVS53.js";
6
+ } from "./chunk-W2DEBKZ2.js";
7
+ import "./chunk-4YJ6KLGI.js";
8
8
  import "./chunk-K5EXATBF.js";
9
9
  import "./chunk-UHMMANC2.js";
10
10
  import "./chunk-WS6OA7H6.js";
@@ -19,4 +19,4 @@ export {
19
19
  gatherEvidenceForHypothesis,
20
20
  getHypothesisEngine
21
21
  };
22
- //# sourceMappingURL=hypothesis-QFGZ5ITT.js.map
22
+ //# sourceMappingURL=hypothesis-HFYZNIMZ.js.map
package/dist/index.js CHANGED
@@ -38,12 +38,12 @@ import {
38
38
  getPrompt,
39
39
  getSystemPrompt,
40
40
  handleCheckpointTool
41
- } from "./chunk-ANQPXOT2.js";
42
- import "./chunk-7A5RLKZY.js";
43
- import "./chunk-HWXZ3E7B.js";
44
- import "./chunk-EOLHWFDG.js";
45
- import "./chunk-3BVNB3GY.js";
46
- import "./chunk-JG7XVS53.js";
41
+ } from "./chunk-7J4ZOOAD.js";
42
+ import "./chunk-D2CGMX7K.js";
43
+ import "./chunk-DFPVUMVE.js";
44
+ import "./chunk-TRIJC5MW.js";
45
+ import "./chunk-W2DEBKZ2.js";
46
+ import "./chunk-4YJ6KLGI.js";
47
47
  import {
48
48
  exportToJson,
49
49
  formatFriendlyError,
@@ -59,11 +59,11 @@ import {
59
59
  getGlobalMemoryStats,
60
60
  listTrackedProjects,
61
61
  searchGlobalPatterns
62
- } from "./chunk-F4ZIAHTZ.js";
62
+ } from "./chunk-A4EDTN6R.js";
63
63
  import {
64
64
  isAIAvailable,
65
65
  runAIAnalysis
66
- } from "./chunk-WRGSH5RT.js";
66
+ } from "./chunk-WMI44VIC.js";
67
67
  import {
68
68
  findSimilarIssues,
69
69
  getMemoryStats,
@@ -1251,7 +1251,10 @@ var TrieWatchTool = class _TrieWatchTool {
1251
1251
  debounceMs
1252
1252
  });
1253
1253
  }
1254
- void this.initialGoalComplianceScan();
1254
+ setTimeout(() => {
1255
+ void this.initialGoalComplianceScan();
1256
+ void this.initialHypothesisGeneration();
1257
+ }, 1e3);
1255
1258
  return {
1256
1259
  content: [{
1257
1260
  type: "text",
@@ -1426,7 +1429,7 @@ ${f.content.slice(0, 1e3)}`
1426
1429
  async checkAndGenerateHypotheses(projectPath) {
1427
1430
  if (!isAIAvailable()) return;
1428
1431
  try {
1429
- const { getHypothesisEngine } = await import("./hypothesis-QFGZ5ITT.js");
1432
+ const { getHypothesisEngine } = await import("./hypothesis-HFYZNIMZ.js");
1430
1433
  const { getOutputManager: getOutputManager2 } = await import("./output-manager-BOTMXSND.js");
1431
1434
  const hypothesisEngine = getHypothesisEngine(projectPath);
1432
1435
  const recentIssues = Array.from(this.state.issueCache.values()).flat();
@@ -1635,10 +1638,16 @@ ${f.content.slice(0, 1e3)}`
1635
1638
  this.state.lastAutoScan = now;
1636
1639
  try {
1637
1640
  const graph = new ContextGraph(projectPath);
1638
- const { getActiveGoals, recordGoalViolationCaught } = await import("./goal-validator-XYA364W3.js");
1641
+ const { getActiveGoals, recordGoalViolationCaught } = await import("./goal-validator-CKFKJ46J.js");
1639
1642
  const { appendIssuesToLedger } = await import("./ledger-JMPGJGLB.js");
1643
+ console.debug("[AI Watcher] Loading active goals...");
1640
1644
  const activeGoals = await getActiveGoals(projectPath);
1641
1645
  const hasGoals = activeGoals.length > 0;
1646
+ console.debug("[AI Watcher] Goals loaded:", {
1647
+ totalGoals: activeGoals.length,
1648
+ hasGoals,
1649
+ goals: activeGoals.map((g) => ({ id: g.id, description: g.description, status: g.status }))
1650
+ });
1642
1651
  if (this.isQuiet() && !hasGoals) return;
1643
1652
  const scored = [];
1644
1653
  for (const file of files) {
@@ -1683,6 +1692,13 @@ ${activeGoals.map((g, i) => ` ${i + 1}. "${g.description}"`).join("\n")}
1683
1692
  Goal violations are HIGH PRIORITY. If a file violates any goal, you MUST report it.
1684
1693
  `;
1685
1694
  }
1695
+ console.debug("[AI Watcher] Sending files to AI analysis:", {
1696
+ fileCount: valid.length,
1697
+ hasGoals,
1698
+ goalsIncluded: hasGoals,
1699
+ filePaths: valid.map((f) => f.path),
1700
+ goalsSection: goalsSection.slice(0, 200) + (goalsSection.length > 200 ? "..." : "")
1701
+ });
1686
1702
  const result = await runAIAnalysis({
1687
1703
  systemPrompt: `You are a code quality watcher. You review code for two things:
1688
1704
 
@@ -1711,13 +1727,29 @@ ${filesBlock}`,
1711
1727
  if (result.tokensUsed) {
1712
1728
  this.recordTokenUsage(result.tokensUsed.input + result.tokensUsed.output);
1713
1729
  }
1714
- if (!result.success || !result.content.trim()) return;
1730
+ console.debug("[AI Watcher] AI analysis result:", {
1731
+ success: result.success,
1732
+ contentLength: result.content ? result.content.length : 0,
1733
+ tokensUsed: result.tokensUsed,
1734
+ contentPreview: result.content ? result.content.slice(0, 500) : "null"
1735
+ });
1736
+ if (!result.success || !result.content.trim()) {
1737
+ console.debug("[AI Watcher] AI analysis failed or returned empty content");
1738
+ return;
1739
+ }
1715
1740
  let issues = [];
1716
1741
  try {
1717
1742
  const cleaned = result.content.replace(/```json?\n?|\n?```/g, "").trim();
1743
+ console.debug("[AI Watcher] Parsing AI response:", { cleanedContent: cleaned.slice(0, 300) });
1718
1744
  issues = JSON.parse(cleaned);
1719
1745
  if (!Array.isArray(issues)) issues = [];
1720
- } catch {
1746
+ console.debug("[AI Watcher] Parsed issues:", {
1747
+ totalIssues: issues.length,
1748
+ goalViolations: issues.filter((i) => i.isGoalViolation).length,
1749
+ issueTypes: issues.map((i) => ({ file: i.file, isGoalViolation: i.isGoalViolation, goalIndex: i.goalIndex }))
1750
+ });
1751
+ } catch (error) {
1752
+ console.debug("[AI Watcher] Failed to parse AI response:", error);
1721
1753
  return;
1722
1754
  }
1723
1755
  const issuedFiles = new Set(issues.map((i) => i.file));
@@ -1733,6 +1765,14 @@ ${filesBlock}`,
1733
1765
  const goal = activeGoals[issue.goalIndex];
1734
1766
  const confidence = Math.min(100, Math.max(0, issue.confidence ?? 80));
1735
1767
  const fixId = `fix-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
1768
+ console.debug("[AI Watcher] Goal violation detected:", {
1769
+ goalDescription: goal.description,
1770
+ file: issue.file,
1771
+ violation: issue.description,
1772
+ confidence,
1773
+ goalIndex: issue.goalIndex,
1774
+ totalActiveGoals: activeGoals.length
1775
+ });
1736
1776
  const ledgerIssue = {
1737
1777
  id: fixId,
1738
1778
  hash: "",
@@ -1752,6 +1792,11 @@ ${filesBlock}`,
1752
1792
  await recordGoalViolationCaught(goal, issue.file, projectPath);
1753
1793
  const confidenceStr = `${confidence}%`;
1754
1794
  const nudgeMsg = `Goal "${goal.description}" violated in ${issue.file}: ${issue.description} [${confidenceStr} confidence]`;
1795
+ console.debug("[AI Watcher] Sending nudge:", {
1796
+ message: nudgeMsg,
1797
+ file: issue.file,
1798
+ severity: "warning"
1799
+ });
1755
1800
  getOutputManager().nudge(nudgeMsg, "warning", issue.file);
1756
1801
  this.state.nudges.push({
1757
1802
  file: basename2(issue.file),
@@ -1828,6 +1873,56 @@ ${filesBlock}`,
1828
1873
  this.state.autoScanInProgress = false;
1829
1874
  }
1830
1875
  }
1876
+ /**
1877
+ * Initial hypothesis generation when watch starts.
1878
+ *
1879
+ * This generates hypotheses from existing patterns and issues to give
1880
+ * users immediate insights about their codebase.
1881
+ */
1882
+ async initialHypothesisGeneration() {
1883
+ if (!isAIAvailable()) {
1884
+ console.debug("[Initial Hypothesis] AI not available, skipping initial hypothesis generation");
1885
+ return;
1886
+ }
1887
+ const projectPath = this.watchedDirectory || getWorkingDirectory(void 0, true);
1888
+ console.debug("[Initial Hypothesis] Starting initial hypothesis generation", { projectPath });
1889
+ try {
1890
+ const { getHypothesisEngine } = await import("./hypothesis-HFYZNIMZ.js");
1891
+ const hypothesisEngine = getHypothesisEngine(projectPath);
1892
+ console.debug("[Initial Hypothesis] Running AI-powered hypothesis generation...");
1893
+ const generated = await hypothesisEngine.generateHypothesesWithAI({
1894
+ recentIssues: [],
1895
+ // No recent issues yet on startup
1896
+ patterns: [],
1897
+ observations: ["Initial watch session started", "Analyzing codebase for potential patterns"]
1898
+ });
1899
+ console.debug("[Initial Hypothesis] Generated hypotheses on startup:", {
1900
+ count: generated.length,
1901
+ hypotheses: generated.map((h) => ({ statement: h.statement, confidence: h.confidence }))
1902
+ });
1903
+ if (generated.length > 0) {
1904
+ const { getOutputManager: getOutputManager2 } = await import("./output-manager-BOTMXSND.js");
1905
+ const outputManager = getOutputManager2();
1906
+ for (const hypothesis of generated.slice(0, 2)) {
1907
+ const message = `[Initial Hypothesis] "${hypothesis.statement}" (${Math.round(hypothesis.confidence * 100)}% confidence)`;
1908
+ outputManager.nudge(message, "info", void 0, 1e4);
1909
+ if (!isInteractiveMode()) {
1910
+ console.error(` [?] ${message}`);
1911
+ }
1912
+ }
1913
+ if (this.streamingManager) {
1914
+ this.streamingManager.reportSignalExtraction({
1915
+ decisions: 0,
1916
+ facts: 0,
1917
+ blockers: 0,
1918
+ questions: generated.length
1919
+ });
1920
+ }
1921
+ }
1922
+ } catch (error) {
1923
+ console.debug("[Initial Hypothesis] Failed to generate initial hypotheses:", error);
1924
+ }
1925
+ }
1831
1926
  /**
1832
1927
  * Initial goal compliance scan when watch starts.
1833
1928
  *
@@ -1843,12 +1938,23 @@ ${filesBlock}`,
1843
1938
  * 5. Nudge the user about any violations found
1844
1939
  */
1845
1940
  async initialGoalComplianceScan() {
1846
- if (!isAIAvailable()) return;
1941
+ if (!isAIAvailable()) {
1942
+ console.debug("[Initial Scan] AI not available, skipping initial goal compliance scan");
1943
+ return;
1944
+ }
1847
1945
  const projectPath = this.watchedDirectory || getWorkingDirectory(void 0, true);
1946
+ console.debug("[Initial Scan] Starting initial goal compliance scan", { projectPath });
1848
1947
  try {
1849
- const { getActiveGoals, recordGoalViolationCaught } = await import("./goal-validator-XYA364W3.js");
1948
+ const { getActiveGoals, recordGoalViolationCaught } = await import("./goal-validator-CKFKJ46J.js");
1850
1949
  const activeGoals = await getActiveGoals(projectPath);
1851
- if (activeGoals.length === 0) return;
1950
+ console.debug("[Initial Scan] Loaded goals for initial scan:", {
1951
+ goalCount: activeGoals.length,
1952
+ goals: activeGoals.map((g) => ({ id: g.id, description: g.description }))
1953
+ });
1954
+ if (activeGoals.length === 0) {
1955
+ console.debug("[Initial Scan] No active goals found, skipping initial scan");
1956
+ return;
1957
+ }
1852
1958
  if (!isInteractiveMode()) {
1853
1959
  console.error("[*] Checking recent files against active goals...");
1854
1960
  }
@@ -1866,7 +1972,17 @@ ${filesBlock}`,
1866
1972
  const ext = extname3(file).toLowerCase();
1867
1973
  return WATCH_EXTENSIONS.has(ext) && existsSync3(file);
1868
1974
  });
1869
- if (filesToCheck.length === 0) return;
1975
+ console.debug("[Initial Scan] Files discovered for initial scan:", {
1976
+ totalRecentFiles: recentFiles.size,
1977
+ filteredFiles: filesToCheck.length,
1978
+ filePaths: filesToCheck.slice(0, 5).map((f) => f.replace(projectPath + "/", "")),
1979
+ // Show first 5
1980
+ watchedExtensions: Array.from(WATCH_EXTENSIONS)
1981
+ });
1982
+ if (filesToCheck.length === 0) {
1983
+ console.debug("[Initial Scan] No recent files found for initial scan");
1984
+ return;
1985
+ }
1870
1986
  const maxInitialFiles = 10;
1871
1987
  const filesToScan = filesToCheck.slice(0, maxInitialFiles);
1872
1988
  if (!isInteractiveMode()) {
@@ -2047,7 +2163,7 @@ Use \`trie_watch start\` to begin autonomous scanning.`
2047
2163
  ).join("\n");
2048
2164
  let agencyStatus = "";
2049
2165
  try {
2050
- const { getGuardian } = await import("./guardian-agent-KVLNECZ5.js");
2166
+ const { getGuardian } = await import("./guardian-agent-5QVLDPKB.js");
2051
2167
  const trieAgent = getGuardian(this.watchedDirectory || getWorkingDirectory(void 0, true));
2052
2168
  await trieAgent.initialize();
2053
2169
  const status = await trieAgent.getAgencyStatus();
@@ -3845,21 +3961,25 @@ async function listInstalledSkills() {
3845
3961
 
3846
3962
  // src/server/resource-manager.ts
3847
3963
  var UI_APPS = {
3848
- "scan-dashboard": {
3849
- name: "Scan Dashboard",
3850
- description: "Interactive dashboard for viewing and managing scan results"
3964
+ "ledger": {
3965
+ name: "Decision Ledger",
3966
+ description: "Track decisions, blockers, facts, and questions across your project"
3967
+ },
3968
+ "goals": {
3969
+ name: "Goals & Progress",
3970
+ description: "Monitor code quality goals and track progress with visual indicators"
3851
3971
  },
3852
- "memory-viewer": {
3853
- name: "Memory Viewer",
3854
- description: "Search and browse issue history with context preview"
3972
+ "hypotheses": {
3973
+ name: "Hypotheses",
3974
+ description: "Test and validate development theories with evidence-based reasoning"
3855
3975
  },
3856
- "pr-review": {
3857
- name: "PR Review",
3858
- description: "File-by-file diff viewer with inline actions"
3976
+ "nudges": {
3977
+ name: "Nudges & Insights",
3978
+ description: "AI-powered code quality insights, warnings, and suggestions"
3859
3979
  },
3860
- "visual-qa": {
3861
- name: "Visual QA",
3862
- description: "Screenshot gallery with viewport comparison"
3980
+ "chat": {
3981
+ name: "AI Chat",
3982
+ description: "Interactive chat with Trie assistant for code analysis and guidance"
3863
3983
  }
3864
3984
  };
3865
3985
  var ResourceManager = class {