@tt-a1i/openpi 0.4.0 → 0.6.0

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 (141) hide show
  1. package/README.md +116 -46
  2. package/SETUP.md +29 -7
  3. package/THIRD_PARTY_NOTICES.md +16 -0
  4. package/assets/openpi-launch-card-v1.webp +0 -0
  5. package/bin/openpi.js +155 -0
  6. package/extensions/ai-providers/LICENSE.upstream +23 -0
  7. package/extensions/ai-providers/README.md +59 -0
  8. package/extensions/ai-providers/antigravity/credentials.ts +52 -0
  9. package/extensions/ai-providers/antigravity/discovery.ts +130 -0
  10. package/extensions/ai-providers/antigravity/google-conversion.ts +455 -0
  11. package/extensions/ai-providers/antigravity/models.ts +84 -0
  12. package/extensions/ai-providers/antigravity/oauth.ts +700 -0
  13. package/extensions/ai-providers/antigravity/provider.ts +1116 -0
  14. package/extensions/ai-providers/antigravity/routing.ts +340 -0
  15. package/extensions/ai-providers/antigravity/with-resolvers.d.ts +19 -0
  16. package/extensions/ai-providers/cursor/constants.ts +5 -0
  17. package/extensions/ai-providers/cursor/credentials.ts +14 -0
  18. package/extensions/ai-providers/cursor/discovery.ts +291 -0
  19. package/extensions/ai-providers/cursor/input-images.ts +106 -0
  20. package/extensions/ai-providers/cursor/models.ts +45 -0
  21. package/extensions/ai-providers/cursor/oauth.ts +263 -0
  22. package/extensions/ai-providers/cursor/proto.ts +1064 -0
  23. package/extensions/ai-providers/cursor/protobuf.ts +1171 -0
  24. package/extensions/ai-providers/cursor/provider.ts +1175 -0
  25. package/extensions/ai-providers/cursor/proxy.ts +213 -0
  26. package/extensions/ai-providers/cursor/with-resolvers.d.ts +12 -0
  27. package/extensions/ai-providers/index.ts +86 -0
  28. package/extensions/ai-providers/oauth-adapter.ts +81 -0
  29. package/extensions/ai-providers/usage.ts +10 -0
  30. package/extensions/background-terminals/index.ts +38 -3
  31. package/extensions/background-terminals/src/domain.ts +2 -0
  32. package/extensions/background-terminals/src/manager.ts +484 -106
  33. package/extensions/background-terminals/src/output.ts +33 -0
  34. package/extensions/background-terminals/src/prompt.ts +13 -5
  35. package/extensions/background-terminals/src/result-delivery.ts +47 -24
  36. package/extensions/clear-context/index.ts +83 -0
  37. package/extensions/context-pivot/index.ts +16 -6
  38. package/extensions/cron/index.ts +68 -27
  39. package/extensions/cron/schedule.ts +12 -2
  40. package/extensions/file-mutation-display/render.ts +17 -257
  41. package/extensions/file-search/src/binaries.ts +57 -41
  42. package/extensions/git-read/index.ts +1 -3
  43. package/extensions/model-info/cache-diagnostics.ts +220 -0
  44. package/extensions/model-info/index.ts +65 -33
  45. package/extensions/model-info/session-metrics.ts +96 -0
  46. package/extensions/plan-mode/bash-policy.ts +54 -9
  47. package/extensions/plan-mode/index.ts +82 -6
  48. package/extensions/post-edit/index.ts +16 -6
  49. package/extensions/sessions/git-stats.ts +258 -72
  50. package/extensions/sessions/index.ts +153 -86
  51. package/extensions/sessions/preview-cache.ts +104 -0
  52. package/extensions/sessions/preview-loader.ts +856 -0
  53. package/extensions/sessions/sessions.ts +43 -4
  54. package/extensions/setup/index.ts +138 -130
  55. package/extensions/shared/activity-status.ts +30 -0
  56. package/extensions/shared/agent-session-page.ts +319 -0
  57. package/extensions/shared/agent-tool-renderer.ts +218 -0
  58. package/extensions/shared/agent-transcript.ts +524 -0
  59. package/extensions/shared/capability-intent.ts +1 -1
  60. package/extensions/shared/child-session.ts +457 -21
  61. package/extensions/shared/completion-inbox.ts +193 -0
  62. package/extensions/shared/result-delivery.ts +34 -0
  63. package/extensions/shared/setup-config.ts +83 -34
  64. package/extensions/shared/setup-episode-state.ts +1 -1
  65. package/extensions/shared/structured-output.ts +154 -0
  66. package/extensions/shared/terminal-text.ts +110 -23
  67. package/extensions/shared/text-projection.ts +72 -15
  68. package/extensions/shared/tool-activity.ts +382 -0
  69. package/extensions/shared/tool-surface.ts +29 -2
  70. package/extensions/shared/transcript-viewport.ts +46 -0
  71. package/extensions/shared/web-observer-registry.ts +390 -0
  72. package/extensions/shared/worktree.ts +11 -0
  73. package/extensions/subagents/index.ts +313 -62
  74. package/extensions/subagents/navigation.ts +34 -5
  75. package/extensions/subagents/src/backend.ts +12 -1
  76. package/extensions/subagents/src/backends/pi.ts +450 -70
  77. package/extensions/subagents/src/domain.ts +21 -1
  78. package/extensions/subagents/src/manager.ts +39 -2
  79. package/extensions/subagents/src/prompt.ts +49 -7
  80. package/extensions/subagents/src/result-artifact.ts +36 -0
  81. package/extensions/subagents/src/result-delivery.ts +39 -14
  82. package/extensions/subagents/src/runtime.ts +15 -1
  83. package/extensions/subagents/src/ui/takeover.ts +73 -257
  84. package/extensions/subagents/src/ui/transcript.ts +38 -535
  85. package/extensions/subagents/src/ui/wait-result.ts +103 -15
  86. package/extensions/suggestions/src/ui.ts +10 -4
  87. package/extensions/tasks/index.ts +0 -3
  88. package/extensions/ui-customization/footer.ts +16 -45
  89. package/extensions/ui-customization/index.ts +0 -4
  90. package/extensions/user-input-fold/index.ts +42 -6
  91. package/extensions/web/index.ts +257 -0
  92. package/extensions/workflows/acceptance.ts +43 -19
  93. package/extensions/workflows/artifacts.ts +137 -47
  94. package/extensions/workflows/completion-projection.ts +459 -0
  95. package/extensions/workflows/coordinator.ts +8 -10
  96. package/extensions/workflows/dashboard.ts +175 -228
  97. package/extensions/workflows/handoff.ts +70 -16
  98. package/extensions/workflows/index.ts +501 -198
  99. package/extensions/workflows/journal.ts +148 -13
  100. package/extensions/workflows/model.ts +79 -5
  101. package/extensions/workflows/navigation.ts +32 -8
  102. package/extensions/workflows/progress-projection.ts +306 -0
  103. package/extensions/workflows/prompt.ts +70 -16
  104. package/extensions/workflows/replay-safety.ts +42 -21
  105. package/extensions/workflows/result-delivery.ts +214 -76
  106. package/extensions/workflows/retention.ts +599 -0
  107. package/extensions/workflows/runner.ts +389 -345
  108. package/extensions/workflows/sandbox-child.cjs +25 -3
  109. package/extensions/workflows/sandbox.ts +62 -8
  110. package/extensions/workflows/serialization.ts +325 -17
  111. package/extensions/workflows/tool-renderer.ts +22 -0
  112. package/extensions/workflows/transcript.ts +149 -0
  113. package/extensions/workspace-cleanup-guard/index.ts +54 -0
  114. package/extensions/workspace-cleanup-guard/workspace-provenance.ts +563 -0
  115. package/package.json +34 -14
  116. package/skills/subagents/REFERENCE.md +190 -0
  117. package/skills/subagents/SKILL.md +2 -1
  118. package/skills/workflows/REFERENCE.md +6 -4
  119. package/skills/workflows/SKILL.md +1 -1
  120. package/web/adapter/pi-adapter.ts +664 -0
  121. package/web/host/browser-launcher.ts +20 -0
  122. package/web/host/pi-coding-agent-entry.ts +162 -0
  123. package/web/host/static-assets.ts +4 -0
  124. package/web/host/terminal-status.ts +38 -0
  125. package/web/host/web-host.ts +1069 -0
  126. package/web/http-dispatcher.ts +125 -0
  127. package/web/protocol/types.ts +467 -0
  128. package/web/runtime/pi-runtime.ts +1206 -0
  129. package/web/runtime/types.ts +102 -0
  130. package/web/runtime/web-host-lease.ts +497 -0
  131. package/web/trace.ts +18 -0
  132. package/web/ui/app.js +1700 -0
  133. package/web/ui/index.html +142 -0
  134. package/web/ui/styles.css +680 -0
  135. package/web/vite.config.mjs +34 -0
  136. package/extensions/execution-convergence/active-evidence.ts +0 -129
  137. package/extensions/execution-convergence/index.ts +0 -442
  138. package/extensions/execution-convergence/workspace-provenance.ts +0 -338
  139. package/extensions/setup/intercom-fs-helper.cjs +0 -130
  140. package/extensions/setup/intercom.ts +0 -603
  141. package/extensions/subagents/src/backends/stub.ts +0 -303
@@ -19,6 +19,11 @@ export interface SubagentStripEntry {
19
19
  counts: ActivityCounts;
20
20
  }
21
21
 
22
+ /** Changes only when the strip needs an immediate lifecycle repaint. */
23
+ export function subagentStripEntryKey(entry: SubagentStripEntry | undefined) {
24
+ return entry ? `${entry.snapshot.id}:${entry.snapshot.status}` : undefined;
25
+ }
26
+
22
27
  function cleanLine(value: string) {
23
28
  return sanitizeTerminalText(value).replace(/\s+/g, " ").trim();
24
29
  }
@@ -71,9 +76,11 @@ function statusGlyph(snapshot: SubagentSnapshot, theme: Theme, now: number) {
71
76
  return theme.fg("error", "✗");
72
77
  }
73
78
 
79
+ const SUBAGENT_STRIP_INTERVAL_MS = 500;
80
+
74
81
  /** One-line subagent manager entry with the same affordance as Workflow. */
75
82
  export class SubagentStripWidget {
76
- private readonly timer: ReturnType<typeof setInterval>;
83
+ private timer: ReturnType<typeof setInterval> | undefined;
77
84
  private readonly tui: TUI;
78
85
  private readonly theme: Theme;
79
86
  private readonly strip: BelowEditorStripState;
@@ -89,17 +96,39 @@ export class SubagentStripWidget {
89
96
  this.theme = theme;
90
97
  this.strip = strip;
91
98
  this.getEntry = getEntry;
92
- this.timer = setInterval(() => this.tui.requestRender(), 500);
93
- this.timer.unref?.();
99
+ this.syncSpinner();
94
100
  }
95
101
 
96
102
  dispose() {
97
- clearInterval(this.timer);
103
+ if (this.timer) clearInterval(this.timer);
104
+ this.timer = undefined;
98
105
  }
99
106
 
100
- invalidate() {}
107
+ invalidate() {
108
+ this.syncSpinner();
109
+ }
110
+
111
+ private syncSpinner() {
112
+ if (this.getEntry()?.snapshot.status === "running") {
113
+ if (this.timer) return;
114
+ const timer = setInterval(() => {
115
+ if (this.timer !== timer) return;
116
+ if (this.getEntry()?.snapshot.status !== "running") {
117
+ clearInterval(timer);
118
+ this.timer = undefined;
119
+ }
120
+ this.tui.requestRender();
121
+ }, SUBAGENT_STRIP_INTERVAL_MS);
122
+ this.timer = timer;
123
+ timer.unref?.();
124
+ return;
125
+ }
126
+ if (this.timer) clearInterval(this.timer);
127
+ this.timer = undefined;
128
+ }
101
129
 
102
130
  render(width: number) {
131
+ this.syncSpinner();
103
132
  const entry = this.getEntry();
104
133
  if (!entry || width <= 0) return [];
105
134
  const { snapshot, counts } = entry;
@@ -5,11 +5,11 @@
5
5
  * on it rather than on the pi session directly.
6
6
  *
7
7
  * - pi (./backends/pi.ts): in-process `createAgentSession()` via the pi SDK.
8
- * - stub (./backends/stub.ts): scripted sessions, test-only.
9
8
  */
10
9
 
11
10
  import type { Effect, Scope, Stream } from "effect";
12
11
  import { Context } from "effect";
12
+ import type { AgentToolRenderer } from "../../shared/agent-tool-renderer.ts";
13
13
  import type {
14
14
  BackendName,
15
15
  SendError,
@@ -19,6 +19,13 @@ import type {
19
19
  SubagentMeta,
20
20
  } from "./domain.ts";
21
21
 
22
+ export interface SubagentCleanupReceipt {
23
+ /** True when the session/worktree state could not be proven quiescent. */
24
+ readonly uncertain: boolean;
25
+ /** Bounded operator-facing explanation of the cleanup result. */
26
+ readonly message: string;
27
+ }
28
+
22
29
  /**
23
30
  * A live subagent session. The manager is the single consumer of `events`;
24
31
  * it folds them into the `SubagentSnapshot` everything else reads.
@@ -42,6 +49,10 @@ export interface SubagentSession {
42
49
  * this with a timeout and fall back to closing the session scope.
43
50
  */
44
51
  readonly interrupt: Effect.Effect<void>;
52
+ /** Ephemeral Pi-native tool projection for the operator-facing child page. */
53
+ readonly toolRenderer?: AgentToolRenderer;
54
+ /** Cleanup receipt populated when scope teardown cannot prove safety. */
55
+ readonly cleanupReceipt?: () => SubagentCleanupReceipt | undefined;
45
56
  }
46
57
 
47
58
  export interface SubagentBackend {