@akira-tl/forgerelay 0.6.1 → 0.7.1

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 (63) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/README.md +38 -0
  3. package/capabilities/subagents/GUIDE.md +100 -40
  4. package/dist/activity/lifecycle.js +1 -1
  5. package/dist/activity/mcp-query-tools.js +1 -0
  6. package/dist/activity/query-service.js +1 -0
  7. package/dist/capabilities.js +1 -1
  8. package/dist/capability-registry.js +34 -0
  9. package/dist/cli.js +80 -165
  10. package/dist/composite-activity.js +155 -0
  11. package/dist/composite-workspaces.js +197 -0
  12. package/dist/db/migrations.js +14 -0
  13. package/dist/db/schema.js +6 -0
  14. package/dist/remote-workspace-relay.js +16 -0
  15. package/dist/server.js +698 -172
  16. package/dist/{local-agent-targets.js → subagents/cli-target.js} +6 -6
  17. package/dist/{local-agent-profiles.js → subagents/profiles.js} +13 -5
  18. package/dist/subagents/providers/adapters/acp.js +148 -0
  19. package/dist/subagents/providers/adapters/claude.js +75 -0
  20. package/dist/{local-agent-runtime.js → subagents/providers/adapters/codex.js} +10 -4
  21. package/dist/subagents/providers/adapters/opencode.js +137 -0
  22. package/dist/subagents/providers/adapters/pi.js +232 -0
  23. package/dist/{local-agent-availability.js → subagents/providers/availability.js} +24 -10
  24. package/dist/subagents/providers/continuation.js +11 -0
  25. package/dist/subagents/providers/contract.js +1 -0
  26. package/dist/subagents/providers/registry.js +26 -0
  27. package/dist/subagents/providers/shared.js +40 -0
  28. package/dist/subagents/sessions/capability.js +214 -0
  29. package/dist/subagents/sessions/delivery-mailbox.js +115 -0
  30. package/dist/subagents/sessions/execution.js +171 -0
  31. package/dist/subagents/sessions/manager.js +107 -0
  32. package/dist/subagents/sessions/mcp/audit.js +85 -0
  33. package/dist/subagents/sessions/mcp/runtime.js +19 -0
  34. package/dist/{local-agent-store.js → subagents/sessions/store.js} +75 -39
  35. package/dist/ui/.vite/manifest.json +33 -33
  36. package/dist/ui/activity-panel-app.html +3 -3
  37. package/dist/ui/assets/{activity-panel-app-CjZVvVNc.js → activity-panel-app-E1ju2dqI.js} +1 -1
  38. package/dist/ui/assets/{heavy-payload-vGgBRvNX.js → heavy-payload-CeW-n9w5.js} +1 -1
  39. package/dist/ui/assets/{review-payload-4erWKckt.js → review-payload-B9CO298v.js} +1 -1
  40. package/dist/ui/assets/{scrollbar-CaOPzUJd.js → scrollbar-C2twAENW.js} +1 -1
  41. package/dist/ui/assets/workspace-app-BztEvZIC.js +5 -0
  42. package/dist/ui/assets/{workspace-app-DkAiSl_0.js → workspace-app-CwbJnb_w.js} +1 -1
  43. package/dist/ui/assets/workspace-app-YnUST8IP.css +1 -0
  44. package/dist/ui/assets/workspace-app-rKuhdae8.js +1 -0
  45. package/dist/ui/assets/workspace-lifecycle-app-CEfMdudP.js +1 -0
  46. package/dist/ui/workspace-app.html +4 -4
  47. package/dist/ui/workspace-lifecycle-app.html +4 -4
  48. package/dist/workspaces.js +3 -3
  49. package/docs/chatgpt-coding-workflow.md +2 -9
  50. package/docs/configuration.md +23 -0
  51. package/docs/debugging.md +7 -0
  52. package/docs/roadmap.md +42 -7
  53. package/package.json +2 -2
  54. package/scripts/debug/runtime.mjs +23 -1
  55. package/scripts/debug/runtime.test.mjs +14 -2
  56. package/scripts/debug/serve.mjs +4 -4
  57. package/scripts/release/release-gate.test.mjs +2 -2
  58. package/dist/local-agent-adapters.js +0 -653
  59. package/dist/ui/assets/workspace-app-CcrHAUIn.css +0 -1
  60. package/dist/ui/assets/workspace-app-DJmkPYJC.js +0 -1
  61. package/dist/ui/assets/workspace-app-QyauBrJX.js +0 -5
  62. package/dist/ui/assets/workspace-lifecycle-app-BIXEo53I.js +0 -1
  63. /package/dist/{local-agent-path.js → subagents/providers/path.js} +0 -0
@@ -64,6 +64,11 @@ const migrations = [
64
64
  name: "activity-host-turn-workspace",
65
65
  up: migrateActivityHostTurnWorkspace,
66
66
  },
67
+ {
68
+ version: 14,
69
+ name: "subagent-session-coordination",
70
+ up: migrateSubagentSessionCoordination,
71
+ },
67
72
  ];
68
73
  export function migrateDatabase(sqlite) {
69
74
  const migrate = sqlite.transaction(() => {
@@ -344,6 +349,15 @@ function migrateBashOutputAuditColumns(sqlite) {
344
349
  addColumnIfMissing(sqlite, "bash_output_streams", "returned", "integer not null default 0");
345
350
  addColumnIfMissing(sqlite, "bash_output_streams", "completion_claimed_at", "text");
346
351
  }
352
+ function migrateSubagentSessionCoordination(sqlite) {
353
+ migrateLocalAgentSessions(sqlite);
354
+ addColumnIfMissing(sqlite, "local_agent_sessions", "active_run_id", "text");
355
+ addColumnIfMissing(sqlite, "local_agent_sessions", "active_activity_id", "text");
356
+ addColumnIfMissing(sqlite, "local_agent_sessions", "active_run_started_at", "text");
357
+ addColumnIfMissing(sqlite, "local_agent_sessions", "latest_run_id", "text");
358
+ addColumnIfMissing(sqlite, "local_agent_sessions", "latest_run_outcome", "text");
359
+ addColumnIfMissing(sqlite, "local_agent_sessions", "latest_run_finished_at", "text");
360
+ }
347
361
  function migrateActivityHostTurnWorkspace(sqlite) {
348
362
  migrateActivityHostTurns(sqlite);
349
363
  addColumnIfMissing(sqlite, "activity_host_turns", "workspace_id", "text");
package/dist/db/schema.js CHANGED
@@ -152,6 +152,12 @@ export const localAgentSessions = sqliteTable("local_agent_sessions", {
152
152
  thinking: text("thinking"),
153
153
  providerSessionId: text("provider_session_id"),
154
154
  status: text("status").notNull(),
155
+ activeRunId: text("active_run_id"),
156
+ activeActivityId: text("active_activity_id"),
157
+ activeRunStartedAt: text("active_run_started_at"),
158
+ latestRunId: text("latest_run_id"),
159
+ latestRunOutcome: text("latest_run_outcome"),
160
+ latestRunFinishedAt: text("latest_run_finished_at"),
155
161
  latestResponse: text("latest_response"),
156
162
  error: text("error"),
157
163
  hookReportsJson: text("hook_reports_json"),
@@ -101,6 +101,13 @@ export class RemoteWorkspaceRelay {
101
101
  instruction: `${remoteInstruction}\nThis workspace executes on remote ${alias}.`,
102
102
  };
103
103
  }
104
+ async resumeWorkspace(gatewayWorkspaceId, context = "auto", conversationScopeId) {
105
+ const result = await this.callWorkspaceTool(gatewayWorkspaceId, "open_workspace", { context }, conversationScopeId);
106
+ if (result.isError === true) {
107
+ throw new Error(`Remote open_workspace failed: ${toolResultText(result)}`);
108
+ }
109
+ return result;
110
+ }
104
111
  async read(gatewayWorkspaceId, input, conversationScopeId) {
105
112
  return this.callWorkspaceTool(gatewayWorkspaceId, "read", input, conversationScopeId);
106
113
  }
@@ -119,6 +126,15 @@ export class RemoteWorkspaceRelay {
119
126
  async bash(gatewayWorkspaceId, input, conversationScopeId) {
120
127
  return this.callWorkspaceTool(gatewayWorkspaceId, "bash", input, conversationScopeId);
121
128
  }
129
+ async execCommand(gatewayWorkspaceId, input, conversationScopeId) {
130
+ return this.callWorkspaceTool(gatewayWorkspaceId, "exec_command", input, conversationScopeId);
131
+ }
132
+ async writeStdin(gatewayWorkspaceId, input, conversationScopeId) {
133
+ return this.callWorkspaceTool(gatewayWorkspaceId, "write_stdin", input, conversationScopeId);
134
+ }
135
+ async applyPatch(gatewayWorkspaceId, input, conversationScopeId) {
136
+ return this.callWorkspaceTool(gatewayWorkspaceId, "apply_patch", input, conversationScopeId);
137
+ }
122
138
  async capability(gatewayWorkspaceId, input, conversationScopeId) {
123
139
  return this.callWorkspaceTool(gatewayWorkspaceId, "capability", input, conversationScopeId);
124
140
  }