stagent 0.1.11 → 0.1.12

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 (81) hide show
  1. package/README.md +35 -4
  2. package/package.json +3 -2
  3. package/src/__tests__/e2e/blueprint.test.ts +63 -0
  4. package/src/__tests__/e2e/cross-runtime.test.ts +77 -0
  5. package/src/__tests__/e2e/helpers.ts +286 -0
  6. package/src/__tests__/e2e/parallel-workflow.test.ts +120 -0
  7. package/src/__tests__/e2e/sequence-workflow.test.ts +109 -0
  8. package/src/__tests__/e2e/setup.ts +156 -0
  9. package/src/__tests__/e2e/single-task.test.ts +170 -0
  10. package/src/app/api/command-palette/recent/route.ts +41 -18
  11. package/src/app/api/context/batch/route.ts +44 -0
  12. package/src/app/api/permissions/presets/route.ts +80 -0
  13. package/src/app/api/playbook/status/route.ts +15 -0
  14. package/src/app/api/profiles/route.ts +23 -20
  15. package/src/app/api/settings/pricing/route.ts +15 -0
  16. package/src/app/costs/page.tsx +53 -43
  17. package/src/app/playbook/[slug]/page.tsx +76 -0
  18. package/src/app/playbook/page.tsx +54 -0
  19. package/src/app/profiles/page.tsx +7 -4
  20. package/src/app/settings/page.tsx +2 -2
  21. package/src/components/costs/cost-dashboard.tsx +226 -320
  22. package/src/components/dashboard/activity-feed.tsx +6 -2
  23. package/src/components/notifications/batch-proposal-review.tsx +150 -0
  24. package/src/components/notifications/notification-item.tsx +6 -3
  25. package/src/components/notifications/pending-approval-host.tsx +57 -11
  26. package/src/components/playbook/adoption-heatmap.tsx +69 -0
  27. package/src/components/playbook/journey-card.tsx +110 -0
  28. package/src/components/playbook/playbook-action-button.tsx +22 -0
  29. package/src/components/playbook/playbook-browser.tsx +143 -0
  30. package/src/components/playbook/playbook-card.tsx +102 -0
  31. package/src/components/playbook/playbook-detail-view.tsx +223 -0
  32. package/src/components/playbook/playbook-homepage.tsx +142 -0
  33. package/src/components/playbook/playbook-toc.tsx +90 -0
  34. package/src/components/playbook/playbook-updated-badge.tsx +23 -0
  35. package/src/components/playbook/related-docs.tsx +30 -0
  36. package/src/components/profiles/__tests__/learned-context-panel.test.tsx +175 -0
  37. package/src/components/profiles/context-proposal-review.tsx +7 -3
  38. package/src/components/profiles/learned-context-panel.tsx +116 -8
  39. package/src/components/profiles/profile-detail-view.tsx +6 -3
  40. package/src/components/settings/__tests__/auth-config-section.test.tsx +147 -0
  41. package/src/components/settings/api-key-form.tsx +5 -43
  42. package/src/components/settings/auth-config-section.tsx +10 -6
  43. package/src/components/settings/auth-status-badge.tsx +8 -0
  44. package/src/components/settings/budget-guardrails-section.tsx +403 -620
  45. package/src/components/settings/connection-test-control.tsx +63 -0
  46. package/src/components/settings/permissions-section.tsx +85 -75
  47. package/src/components/settings/permissions-sections.tsx +24 -0
  48. package/src/components/settings/presets-section.tsx +159 -0
  49. package/src/components/settings/pricing-registry-panel.tsx +164 -0
  50. package/src/components/shared/app-sidebar.tsx +2 -0
  51. package/src/components/shared/command-palette.tsx +30 -0
  52. package/src/components/shared/light-markdown.tsx +134 -0
  53. package/src/components/workflows/loop-status-view.tsx +8 -4
  54. package/src/components/workflows/workflow-status-view.tsx +16 -9
  55. package/src/lib/agents/learned-context.ts +27 -15
  56. package/src/lib/agents/learning-session.ts +234 -0
  57. package/src/lib/agents/pattern-extractor.ts +19 -0
  58. package/src/lib/agents/profiles/__tests__/sort.test.ts +42 -0
  59. package/src/lib/agents/profiles/sort.ts +7 -0
  60. package/src/lib/constants/settings.ts +1 -0
  61. package/src/lib/db/schema.ts +3 -0
  62. package/src/lib/docs/adoption.ts +105 -0
  63. package/src/lib/docs/journey-tracker.ts +21 -0
  64. package/src/lib/docs/reader.ts +102 -0
  65. package/src/lib/docs/types.ts +54 -0
  66. package/src/lib/docs/usage-stage.ts +60 -0
  67. package/src/lib/notifications/actionable.ts +18 -10
  68. package/src/lib/settings/__tests__/budget-guardrails.test.ts +86 -24
  69. package/src/lib/settings/budget-guardrails.ts +213 -85
  70. package/src/lib/settings/permission-presets.ts +150 -0
  71. package/src/lib/settings/runtime-setup.ts +71 -0
  72. package/src/lib/usage/__tests__/ledger.test.ts +2 -2
  73. package/src/lib/usage/__tests__/pricing-registry.test.ts +78 -0
  74. package/src/lib/usage/ledger.ts +1 -1
  75. package/src/lib/usage/pricing-registry.ts +570 -0
  76. package/src/lib/usage/pricing.ts +15 -95
  77. package/src/lib/utils/__tests__/learned-context-history.test.ts +171 -0
  78. package/src/lib/utils/learned-context-history.ts +150 -0
  79. package/src/lib/validators/__tests__/settings.test.ts +23 -16
  80. package/src/lib/validators/settings.ts +3 -9
  81. package/src/lib/workflows/engine.ts +18 -0
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
  import { useState, useEffect, useCallback } from "react";
4
+
4
5
  import {
5
6
  Card,
6
7
  CardContent,
@@ -12,6 +13,7 @@ import { Separator } from "@/components/ui/separator";
12
13
  import { AuthMethodSelector } from "./auth-method-selector";
13
14
  import { ApiKeyForm } from "./api-key-form";
14
15
  import { AuthStatusBadge } from "./auth-status-badge";
16
+ import { ConnectionTestControl } from "./connection-test-control";
15
17
  import type { AuthMethod, ApiKeySource } from "@/lib/constants/settings";
16
18
  import {
17
19
  DEFAULT_AGENT_RUNTIME,
@@ -32,6 +34,7 @@ export function AuthConfigSection() {
32
34
  apiKeySource: "unknown",
33
35
  });
34
36
  const [connected, setConnected] = useState(false);
37
+ const [testControlKey, setTestControlKey] = useState(0);
35
38
 
36
39
  const fetchSettings = useCallback(async () => {
37
40
  const res = await fetch("/api/settings");
@@ -55,6 +58,8 @@ export function AuthConfigSection() {
55
58
  if (res.ok) {
56
59
  const data = await res.json();
57
60
  setSettings(data);
61
+ setConnected(data.hasKey || data.apiKeySource === "oauth");
62
+ setTestControlKey((current) => current + 1);
58
63
  }
59
64
  }
60
65
 
@@ -102,6 +107,7 @@ export function AuthConfigSection() {
102
107
  <>
103
108
  <Separator />
104
109
  <ApiKeyForm
110
+ key={`api-key-form-${testControlKey}`}
105
111
  hasKey={settings.hasKey}
106
112
  onSave={handleSaveKey}
107
113
  onTest={handleTestConnection}
@@ -126,12 +132,10 @@ export function AuthConfigSection() {
126
132
  OAuth mode uses the Claude Agent SDK&apos;s built-in authentication flow.
127
133
  Requires an active Claude Max or Pro subscription.
128
134
  </p>
129
- <button
130
- onClick={handleTestConnection}
131
- className="text-sm text-primary hover:underline cursor-pointer"
132
- >
133
- Test OAuth connection
134
- </button>
135
+ <ConnectionTestControl
136
+ key={`oauth-test-${testControlKey}`}
137
+ onTest={handleTestConnection}
138
+ />
135
139
  </div>
136
140
  </>
137
141
  )}
@@ -32,6 +32,14 @@ export function AuthStatusBadge({ connected, apiKeySource }: AuthStatusBadgeProp
32
32
  );
33
33
  }
34
34
 
35
+ if (apiKeySource === "unknown") {
36
+ return (
37
+ <Badge variant="outline" className="border-success/50 text-success">
38
+ Connected
39
+ </Badge>
40
+ );
41
+ }
42
+
35
43
  return (
36
44
  <Badge variant="outline" className="border-success/50 text-success">
37
45
  Connected via {sourceLabels[apiKeySource]}