@akira-tl/forgerelay 0.8.5 → 0.8.7

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 +22 -0
  2. package/README.md +8 -10
  3. package/dist/activity/audit-store.js +44 -6
  4. package/dist/activity/mcp-query-tools.js +53 -36
  5. package/dist/activity/query-service.js +41 -11
  6. package/dist/cli.js +16 -17
  7. package/dist/composite-activity.js +124 -33
  8. package/dist/config.js +8 -13
  9. package/dist/db/migrations.js +9 -0
  10. package/dist/db/schema.js +1 -0
  11. package/dist/lsp/test-support/server-fixture.js +7 -7
  12. package/dist/mcp/server-instructions.js +2 -2
  13. package/dist/process-sessions.js +2 -2
  14. package/dist/remote-auth.js +11 -1
  15. package/dist/remote-mcp-connection-pool.js +90 -0
  16. package/dist/remote-transport.js +28 -14
  17. package/dist/remote-workspace-relay.js +53 -23
  18. package/dist/server.js +105 -70
  19. package/dist/skills.js +1 -1
  20. package/dist/subagents/profiles.js +1 -2
  21. package/dist/subagents/providers/adapters/pi.js +2 -2
  22. package/dist/subagents/providers/availability.js +2 -2
  23. package/dist/subagents/providers/path.js +4 -4
  24. package/dist/ui/.vite/manifest.json +32 -32
  25. package/dist/ui/activity-panel-app.html +3 -3
  26. package/dist/ui/assets/{activity-panel-app-E1ju2dqI.js → activity-panel-app-CUAN6zyW.js} +1 -1
  27. package/dist/ui/assets/{heavy-payload-CeW-n9w5.js → heavy-payload-CgzrutLm.js} +1 -1
  28. package/dist/ui/assets/{review-payload-B9CO298v.js → review-payload-BrLbezbq.js} +1 -1
  29. package/dist/ui/assets/{scrollbar-C2twAENW.js → scrollbar-CbhpdW05.js} +1 -1
  30. package/dist/ui/assets/workspace-app-Bhj96tsR.js +1 -0
  31. package/dist/ui/assets/{workspace-app-CwbJnb_w.js → workspace-app-CxwJuZyS.js} +1 -1
  32. package/dist/ui/assets/{workspace-app-BztEvZIC.js → workspace-app-D6UR0AFl.js} +3 -3
  33. package/dist/ui/assets/workspace-app-ldjBmCJR.css +1 -0
  34. package/dist/ui/assets/workspace-lifecycle-app-Cqfhx9pV.js +1 -0
  35. package/dist/ui/workspace-app.html +4 -4
  36. package/dist/ui/workspace-lifecycle-app.html +4 -4
  37. package/dist/user-config.js +3 -19
  38. package/dist/workspace-presentation.js +69 -0
  39. package/dist/workspace-store.js +29 -1
  40. package/dist/workspaces.js +59 -19
  41. package/docs/agent-profile-schema.md +4 -9
  42. package/docs/artifact-exchange.md +2 -1
  43. package/docs/chatgpt-coding-workflow.md +21 -19
  44. package/docs/configuration.md +34 -39
  45. package/docs/gotchas.md +10 -7
  46. package/docs/roadmap.md +11 -4
  47. package/docs/security.md +3 -2
  48. package/docs/setup.md +8 -5
  49. package/docs/versioning.md +1 -1
  50. package/package.json +3 -2
  51. package/scripts/debug/accept.mjs +7 -1
  52. package/scripts/debug/relay-accept.mjs +0 -1
  53. package/scripts/debug/runtime.mjs +0 -4
  54. package/scripts/debug/runtime.test.mjs +0 -2
  55. package/scripts/debug/traffic/run.sh +5 -0
  56. package/scripts/debug/traffic/traffic-audit.mjs +907 -0
  57. package/scripts/release/push-ready.mjs +124 -0
  58. package/scripts/release/push-ready.test.mjs +108 -0
  59. package/scripts/release/release-gate.test.mjs +1 -0
  60. package/scripts/release-proof.mjs +16 -1
  61. package/dist/ui/assets/workspace-app-YnUST8IP.css +0 -1
  62. package/dist/ui/assets/workspace-app-rKuhdae8.js +0 -1
  63. package/dist/ui/assets/workspace-lifecycle-app-CEfMdudP.js +0 -1
package/docs/roadmap.md CHANGED
@@ -305,7 +305,11 @@ must be published successfully before work begins on the next stage.
305
305
  allowlist-based read-only inspection of other Workspaces and their safe Task
306
306
  projections;
307
307
  - **0.8.5** — verify the complete contract across Workspace Relay and publish the
308
- accepted 0.8 lifecycle/Task model.
308
+ accepted 0.8 lifecycle/Task model;
309
+ - **0.8.7** — make `open_workspace(context="auto")` bootstrap delivery component-level,
310
+ returning only changed/removed AGENTS, nested-instruction, Skill/diagnostic,
311
+ Capability-guide, or Subagent-profile domains while preserving `full`/`none`,
312
+ Composite member, Relay, and legacy delivery-record semantics.
309
313
 
310
314
  The release boundary is part of the dependency graph, not just a documentation
311
315
  milestone: the next stage remains blocked until the previous version's tag-triggered
@@ -365,6 +369,9 @@ New public names use ForgeRelay:
365
369
  - `.forgerelay`
366
370
  - `forgerelay/*` managed branches
367
371
 
368
- Legacy `DEVSPACE_*`, `~/.devspace`, `.devspace`, old managed branch names, and
369
- selected persisted internal identifiers remain readable during migration where
370
- removing compatibility would orphan real user state.
372
+ Rename-era public compatibility adapters have a bounded migration window rather
373
+ than permanent support. `DEVSPACE_*`, automatic `~/.devspace` reuse, legacy
374
+ `.devspace/agents` discovery, and old package-path special cases are retired once
375
+ they are outside that window. Persisted internal identifiers remain compatible
376
+ when removing them would orphan real user state; those are storage/protocol
377
+ migration concerns, not public product aliases.
package/docs/security.md CHANGED
@@ -60,8 +60,9 @@ FORGERELAY_OAUTH_OWNER_TOKEN="$(openssl rand -base64 32)"
60
60
 
61
61
  The token must be at least 16 characters.
62
62
 
63
- Existing `~/.devspace` configuration and `DEVSPACE_*` variables remain readable
64
- for migration compatibility when the new ForgeRelay equivalents are absent.
63
+ Rename-era `DEVSPACE_*` environment-variable and automatic `~/.devspace`
64
+ configuration fallbacks have ended. Use canonical `FORGERELAY_*` settings and
65
+ explicit paths when migrating older installations.
65
66
 
66
67
  ## Public URL and tunnels
67
68
 
package/docs/setup.md CHANGED
@@ -121,11 +121,14 @@ Keep `auth.json` private.
121
121
 
122
122
  ### Existing DevSpace configuration
123
123
 
124
- During migration, if `~/.forgerelay` does not exist but `~/.devspace` does,
125
- ForgeRelay reuses the legacy directory automatically. `FORGERELAY_CONFIG_DIR`
126
- takes precedence over the legacy `DEVSPACE_CONFIG_DIR` environment variable.
127
-
128
- You do not need to move a working legacy config before starting ForgeRelay.
124
+ Automatic DevSpace directory fallback has ended. ForgeRelay defaults to
125
+ `~/.forgerelay` and ignores `DEVSPACE_CONFIG_DIR`.
126
+
127
+ Before upgrading an older installation, move or copy the needed configuration
128
+ and credentials into the ForgeRelay directory, or temporarily point
129
+ `FORGERELAY_CONFIG_DIR` at the old directory. If state or managed worktrees live
130
+ under older paths, preserve them with explicit `stateDir` / `worktreeRoot`
131
+ configuration until migration is complete.
129
132
 
130
133
  ## Check the setup
131
134
 
@@ -167,7 +167,7 @@ npm publishing token.
167
167
  3. Run the appropriate `release:patch`, `release:minor`, or `release:major`
168
168
  command.
169
169
  4. Review the generated version and changelog diff, then commit the release-ready code and metadata.
170
- 5. Push the release-ready `main` commit without changing it afterward.
170
+ 5. Run `npm run release:verify` on the committed release HEAD, then run `npm run release:push-ready`. This is the only normal release-ready branch push entrypoint: it requires a proof for the current HEAD, atomically advances `origin/main` plus the current `release/*` branch when applicable, rejects a local `main` with real unique patches, and synchronizes the local `main` ref after the remote push succeeds.
171
171
  6. Create the exact version tag, for example:
172
172
 
173
173
  ```bash
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akira-tl/forgerelay",
3
- "version": "0.8.5",
3
+ "version": "0.8.7",
4
4
  "description": "Local development control plane for MCP coding agents.",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/Akira-TL/forgerelay#readme",
@@ -48,9 +48,10 @@
48
48
  "release:parity": "node scripts/release-parity.mjs",
49
49
  "release:pack": "node scripts/release/pack.mjs",
50
50
  "release:publish": "node scripts/release/publish.mjs",
51
+ "release:push-ready": "node scripts/release/push-ready.mjs",
51
52
  "postinstall": "node scripts/fix-node-pty-permissions.mjs",
52
53
  "start": "node dist/cli.js serve",
53
- "test": "node --test scripts/debug/runtime.test.mjs scripts/release-proof.test.mjs scripts/release/release-gate.test.mjs scripts/release/release-version.test.mjs && tsx src/oauth/router.test.ts && tsx src/remote-auth-cli.test.ts && tsx src/remote-ssh-auth-cli.test.ts && tsx src/remote-workspace-relay.test.ts && tsx src/remote-workspace-relay-process.test.ts && tsx src/config.test.ts && tsx src/lsp/language-server-config.test.ts && tsx src/lsp/normalization/hover.test.ts && tsx src/lsp/references.server.test.ts && tsx src/lsp/operations/document-symbols.server.test.ts && tsx src/lsp/operations/workspace-symbols.server.test.ts && tsx src/lsp/operations/diagnostics-push.server.test.ts && tsx src/lsp/operations/diagnostics-pull.server.test.ts && tsx src/lsp/operations/request-hardening.server.test.ts && tsx src/lsp/operations/recovery.server.test.ts && tsx src/lsp/operations/lifecycle.server.test.ts && tsx src/lsp/runtime/semantic-requests.test.ts && tsx src/logger.test.ts && tsx src/proxy-trust.test.ts && tsx src/mcp-app-template.test.ts && tsx src/hooks.test.ts && tsx src/capability-registry.test.ts && tsx src/mcp/server-instructions.test.ts && tsx src/request-meta.test.ts && tsx src/incoming-artifacts.test.ts && tsx src/artifact-download.test.ts && tsx src/ui/card-types.test.ts && tsx src/ui/workspace-lifecycle-app.test.ts && tsx src/ui/activity/model.test.ts && tsx src/ui/patch-display.test.ts && tsx src/ui/tool-display.test.ts && tsx src/apply-patch.test.ts && tsx src/process-platform.test.ts && tsx src/process-sessions.test.ts && tsx src/mcp-sessions.test.ts && tsx src/server-shutdown.test.ts && tsx src/subagents/providers/adapters/codex.test.ts && tsx src/subagents/providers/registry.test.ts && tsx src/subagents/providers/availability.test.ts && tsx src/subagents/profiles.test.ts && tsx src/subagents/cli-target.test.ts && tsx src/subagents/sessions/store.test.ts && tsx src/subagents/sessions/manager.test.ts && tsx src/subagents/sessions/mcp/capability.server.test.ts && tsx src/subagents/sessions/mcp/continuation.server.test.ts && tsx src/subagents/sessions/mcp/lifecycle.server.test.ts && tsx src/subagents/sessions/mcp/reconciliation.server.test.ts && tsx src/subagents/sessions/mcp/routing.server.test.ts && tsx src/roots.test.ts && tsx src/file-mutations.test.ts && tsx src/operations/edit-preflight.test.ts && tsx src/skills.test.ts && tsx src/db/migrations.test.ts && tsx src/workspace-store.test.ts && tsx src/workspace-tasks.test.ts && tsx src/workspace-task-reminders.test.ts && tsx src/activity/audit-store.test.ts && tsx src/activity/bash-output-store.test.ts && tsx src/activity/lifecycle.test.ts && tsx src/activity/query-service.test.ts && tsx src/operations/core-operation-executor.test.ts && tsx src/operations/bulk-mutation.test.ts && tsx src/operations/batch/scheduler.test.ts && tsx src/operations/batch/executor-policy.test.ts && tsx src/workspaces.test.ts && tsx src/workspace-conversation.test.ts && tsx src/review-checkpoints.test.ts && tsx src/lsp/code-intelligence.server.test.ts && npm run build:app && tsx src/server.test.ts && tsx src/oauth-store.test.ts && tsx src/cli.test.ts",
54
+ "test": "node --test scripts/debug/runtime.test.mjs scripts/release-proof.test.mjs scripts/release/release-gate.test.mjs scripts/release/push-ready.test.mjs scripts/release/release-version.test.mjs && tsx src/oauth/router.test.ts && tsx src/remote-auth-cli.test.ts && tsx src/remote-ssh-auth-cli.test.ts && tsx src/remote-workspace-relay.test.ts && tsx src/remote-workspace-relay-process.test.ts && tsx src/config.test.ts && tsx src/lsp/language-server-config.test.ts && tsx src/lsp/normalization/hover.test.ts && tsx src/lsp/references.server.test.ts && tsx src/lsp/operations/document-symbols.server.test.ts && tsx src/lsp/operations/workspace-symbols.server.test.ts && tsx src/lsp/operations/diagnostics-push.server.test.ts && tsx src/lsp/operations/diagnostics-pull.server.test.ts && tsx src/lsp/operations/request-hardening.server.test.ts && tsx src/lsp/operations/recovery.server.test.ts && tsx src/lsp/operations/lifecycle.server.test.ts && tsx src/lsp/runtime/semantic-requests.test.ts && tsx src/logger.test.ts && tsx src/proxy-trust.test.ts && tsx src/mcp-app-template.test.ts && tsx src/hooks.test.ts && tsx src/capability-registry.test.ts && tsx src/mcp/server-instructions.test.ts && tsx src/request-meta.test.ts && tsx src/incoming-artifacts.test.ts && tsx src/artifact-download.test.ts && tsx src/ui/card-types.test.ts && tsx src/ui/workspace-lifecycle-app.test.ts && tsx src/ui/activity/model.test.ts && tsx src/ui/patch-display.test.ts && tsx src/ui/tool-display.test.ts && tsx src/apply-patch.test.ts && tsx src/process-platform.test.ts && tsx src/process-sessions.test.ts && tsx src/mcp-sessions.test.ts && tsx src/server-shutdown.test.ts && tsx src/subagents/providers/adapters/codex.test.ts && tsx src/subagents/providers/registry.test.ts && tsx src/subagents/providers/availability.test.ts && tsx src/subagents/profiles.test.ts && tsx src/subagents/cli-target.test.ts && tsx src/subagents/sessions/store.test.ts && tsx src/subagents/sessions/manager.test.ts && tsx src/subagents/sessions/mcp/capability.server.test.ts && tsx src/subagents/sessions/mcp/continuation.server.test.ts && tsx src/subagents/sessions/mcp/lifecycle.server.test.ts && tsx src/subagents/sessions/mcp/reconciliation.server.test.ts && tsx src/subagents/sessions/mcp/routing.server.test.ts && tsx src/roots.test.ts && tsx src/file-mutations.test.ts && tsx src/operations/edit-preflight.test.ts && tsx src/skills.test.ts && tsx src/db/migrations.test.ts && tsx src/workspace-store.test.ts && tsx src/workspace-tasks.test.ts && tsx src/workspace-task-reminders.test.ts && tsx src/activity/audit-store.test.ts && tsx src/activity/bash-output-store.test.ts && tsx src/activity/lifecycle.test.ts && tsx src/activity/query-service.test.ts && tsx src/operations/core-operation-executor.test.ts && tsx src/operations/bulk-mutation.test.ts && tsx src/operations/batch/scheduler.test.ts && tsx src/operations/batch/executor-policy.test.ts && tsx src/workspaces.test.ts && tsx src/workspace-conversation.test.ts && tsx src/review-checkpoints.test.ts && tsx src/lsp/code-intelligence.server.test.ts && npm run build:app && tsx src/server.test.ts && tsx src/oauth-store.test.ts && tsx src/cli.test.ts",
54
55
  "typecheck": "tsc -p tsconfig.json --noEmit",
55
56
  "release:check": "node scripts/release-version.mjs check",
56
57
  "release:tag-check": "node scripts/release-version.mjs tag",
@@ -155,6 +155,7 @@ try {
155
155
  "open_workspace",
156
156
  "activity_panel",
157
157
  "activity_snapshot",
158
+ "activity_index",
158
159
  "activity_detail",
159
160
  "activity_output",
160
161
  "capability",
@@ -694,8 +695,13 @@ try {
694
695
  });
695
696
  assert.equal(inspectorSnapshot.isError, undefined);
696
697
  assert.ok(inspectorSnapshot.structuredContent.revision > 0);
698
+ assert.equal(inspectorSnapshot.structuredContent.activities, undefined);
699
+ const inspectorIndex = callTool(oauth.accessToken, sessionId, 93, "activity_index", {
700
+ turnId: inspectorTurnId,
701
+ });
702
+ assert.equal(inspectorIndex.isError, undefined);
697
703
  assert.deepEqual(
698
- inspectorSnapshot.structuredContent.activities.map(({ tool, workspaceId: activityWorkspaceId, target }) => ({
704
+ inspectorIndex.structuredContent.activities.map(({ tool, workspaceId: activityWorkspaceId, target }) => ({
699
705
  tool,
700
706
  workspaceId: activityWorkspaceId,
701
707
  target,
@@ -537,7 +537,6 @@ function cleanProductEnv() {
537
537
  name !== "HOST"
538
538
  && name !== "PORT"
539
539
  && !name.startsWith("FORGERELAY_")
540
- && !name.startsWith("DEVSPACE_")
541
540
  ));
542
541
  }
543
542
 
@@ -75,10 +75,6 @@ export function createInteractiveDebugEnvironment({
75
75
  delete debugEnv[key];
76
76
  continue;
77
77
  }
78
- if (key.startsWith("DEVSPACE_")) {
79
- delete debugEnv[key];
80
- continue;
81
- }
82
78
  if (
83
79
  key.startsWith("FORGERELAY_")
84
80
  && !key.startsWith("FORGERELAY_LOG_")
@@ -39,7 +39,6 @@ test("interactive debug uses one dedicated persisted config under ~/.forgerelay/
39
39
  FORGERELAY_ALLOWED_HOSTS: "wrong.example.test",
40
40
  FORGERELAY_OAUTH_OWNER_TOKEN: "wrong-owner-password-123456",
41
41
  FORGERELAY_WIDGETS: "off",
42
- DEVSPACE_ALLOWED_ROOTS: "/wrong/root",
43
42
  FORGERELAY_LOG_LEVEL: "debug",
44
43
  },
45
44
  home,
@@ -62,7 +61,6 @@ test("interactive debug uses one dedicated persisted config under ~/.forgerelay/
62
61
  assert.equal(result.env.FORGERELAY_ALLOWED_HOSTS, undefined);
63
62
  assert.equal(result.env.FORGERELAY_OAUTH_OWNER_TOKEN, undefined);
64
63
  assert.equal(result.env.FORGERELAY_WIDGETS, undefined);
65
- assert.equal(result.env.DEVSPACE_ALLOWED_ROOTS, undefined);
66
64
  assert.equal(result.env.FORGERELAY_LOG_LEVEL, "debug");
67
65
  });
68
66
 
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ cd "$(dirname "$0")/../../.."
5
+ exec node --import tsx scripts/debug/traffic/traffic-audit.mjs "$@"