@moretea-labs/forge 1.7.0 → 1.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.
- package/AGENTS.md +2 -0
- package/CHANGELOG.md +13 -0
- package/CLAUDE.md +2 -0
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/agents/openai.yaml +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +2 -0
- package/assets/plugin-registry.v1.json +3 -3
- package/assets/skill-version.json +2 -2
- package/assets/templates/helpers/check-architecture-sync.sh +17 -0
- package/assets/templates/helpers/inspect-project-state.ts +8 -6
- package/assets/templates/helpers/migrate-workflow-docs.ts +9 -7
- package/assets/templates/helpers/workflow-contract.ts +5 -1
- package/docs/architecture/CURRENT.md +12 -4
- package/docs/forge-plugin-management.md +1 -1
- package/docs/operations/controller-performance-and-502.md +19 -0
- package/docs/operations/homebrew.md +2 -2
- package/package.json +5 -2
- package/scripts/architecture-event.ts +2 -820
- package/scripts/architecture-queue.sh +2 -645
- package/scripts/archive-architecture-request.sh +2 -242
- package/scripts/archive-workflow.sh +1 -291
- package/scripts/benchmark-work-efficiency.ts +0 -0
- package/scripts/capability-config.ts +2 -392
- package/scripts/capability-resolver.ts +2 -503
- package/scripts/capture-plan.sh +1 -332
- package/scripts/check-agent-tooling.sh +2 -1531
- package/scripts/check-architecture-sync.sh +2 -302
- package/scripts/check-brain-manifest.sh +2 -253
- package/scripts/check-context-files.sh +2 -47
- package/scripts/check-deploy-sql-order.sh +2 -115
- package/scripts/check-runtime-architecture.mjs +243 -16
- package/scripts/check-skill-version.ts +3 -191
- package/scripts/check-source-duplication.mjs +61 -0
- package/scripts/check-stable-baseline.ts +0 -0
- package/scripts/check-task-sync.sh +2 -63
- package/scripts/check-task-workflow.sh +2 -1000
- package/scripts/codex-handoff-resume.sh +2 -267
- package/scripts/context-contract-sync.sh +2 -514
- package/scripts/contract-run.ts +2 -463
- package/scripts/contract-worktree.sh +1 -702
- package/scripts/ensure-task-workflow.sh +1 -1192
- package/scripts/inspect-project-state.ts +4 -279
- package/scripts/lib/project-init-lib.sh +7 -2
- package/scripts/lib/run-forge-helper.sh +19 -0
- package/scripts/lib/run-forge-helper.ts +26 -0
- package/scripts/migrate-project-template.sh +1 -33
- package/scripts/migrate-workflow-docs.ts +4 -412
- package/scripts/new-plan.sh +1 -180
- package/scripts/new-spec.sh +1 -47
- package/scripts/new-sprint.sh +1 -46
- package/scripts/plan-to-todo.sh +1 -771
- package/scripts/prepare-codex-handoff.sh +2 -201
- package/scripts/prepare-handoff.sh +1 -78
- package/scripts/refresh-current-status.sh +2 -467
- package/scripts/run-governed-gate.ts +3 -0
- package/scripts/select-agent-context-blocks.sh +2 -64
- package/scripts/ship-worktrees.sh +1 -531
- package/scripts/sprint-backlog.sh +1 -834
- package/scripts/stage-runtime-release.ts +2 -1
- package/scripts/summarize-failures.sh +2 -123
- package/scripts/switch-plan.sh +1 -150
- package/scripts/sync-brain-docs.sh +2 -379
- package/scripts/sync-generated-authority.mjs +175 -0
- package/scripts/verify-contract.sh +2 -593
- package/scripts/verify-sprint.sh +1 -500
- package/scripts/workflow-contract.ts +4 -201
- package/scripts/workstream-sync.sh +2 -261
- package/src/cli/agent-jobs/executor-health.ts +1 -1
- package/src/cli/commands/plugin.ts +12 -3
- package/src/cli/controller/check-runner.ts +7 -2
- package/src/cli/controller/context-pack.ts +46 -21
- package/src/cli/github/contracts.ts +16 -0
- package/src/cli/github/github.ts +2 -16
- package/src/cli/github/session.ts +2 -1
- package/src/cli/local-bridge/facade-api.ts +37 -47
- package/src/cli/local-bridge/server.ts +2 -2
- package/src/cli/mcp/legacy-tool-service.ts +10 -33
- package/src/cli/mcp/post-finalize-work-attribution.ts +150 -0
- package/src/cli/mcp/repository-tools.ts +85 -89
- package/src/cli/mcp/server.ts +57 -13
- package/src/cli/mcp/tool-contract.ts +14 -0
- package/src/cli/mcp/toolset.ts +2 -2
- package/src/cli/mcp/transports/http.ts +23 -0
- package/src/cli/repositories/command-classifier.ts +2 -2
- package/src/cli/repositories/command-executor.ts +24 -6
- package/src/cli/repositories/repository-snapshot.ts +5 -2
- package/src/cli/repositories/structured-git.ts +57 -3
- package/src/cli/repository/inspector.ts +11 -3
- package/src/runtime/context/generic-lsp-provider.ts +1 -1
- package/src/runtime/context/semantic-navigation-contract.ts +61 -0
- package/src/runtime/context/semantic-navigation.ts +9 -61
- package/src/runtime/control-plane/execution/direct-edit-work-completion.ts +18 -25
- package/src/runtime/control-plane/execution/repository-work-attribution.ts +106 -0
- package/src/runtime/control-plane/execution/retained-work-resume.ts +203 -0
- package/src/runtime/control-plane/execution/work-completion-authority.ts +58 -0
- package/src/runtime/control-plane/execution/work-evidence-policy.ts +200 -0
- package/src/runtime/control-plane/execution/work-execution-support.ts +386 -0
- package/src/runtime/control-plane/execution/work-finalization-service.ts +1913 -0
- package/src/runtime/control-plane/execution/work-handle-authority.ts +96 -0
- package/src/runtime/control-plane/execution/work-handle-store.ts +1 -1
- package/src/runtime/control-plane/execution/work-operation-service.ts +468 -0
- package/src/runtime/control-plane/execution/work-path-scope.ts +37 -0
- package/src/runtime/control-plane/execution/work-preparation-service.ts +479 -0
- package/src/runtime/control-plane/execution/work-process-evidence.ts +129 -0
- package/src/runtime/control-plane/execution/work-task-receipt.ts +4 -43
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +13 -3
- package/src/runtime/control-plane/execution/work-verification-context.ts +56 -0
- package/src/runtime/control-plane/execution/work-verification-service.ts +388 -0
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +5 -1
- package/src/runtime/control-plane/facade/controller-round-relay.ts +164 -37
- package/src/runtime/control-plane/facade/controller-session-store.ts +183 -24
- package/src/runtime/control-plane/facade/goal-workloop-access.ts +15 -1
- package/src/runtime/control-plane/facade/goal-workloop.ts +329 -148
- package/src/runtime/control-plane/facade/index.ts +2 -0
- package/src/runtime/control-plane/facade/plan-contract-store.ts +90 -22
- package/src/runtime/control-plane/facade/repository-work-admission.ts +147 -0
- package/src/runtime/control-plane/facade/requirement-authority.ts +83 -0
- package/src/runtime/control-plane/facade/types.ts +68 -5
- package/src/runtime/control-plane/facade/work-contract-store.ts +3 -209
- package/src/runtime/control-plane/facade/work-state-machine.ts +250 -0
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +14 -7
- package/src/runtime/control-plane/global-scheduler/scheduler.ts +5 -1
- package/src/runtime/control-plane/launcher/chatgpt-work-binding-store.ts +13 -0
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +15 -6
- package/src/runtime/control-plane/launcher/launch-reservation-store.ts +54 -5
- package/src/runtime/control-plane/launcher/thin-launcher.ts +56 -7
- package/src/runtime/control-plane/persistence/requirement-store.ts +0 -12
- package/src/runtime/control-plane/repo-actor/registry.ts +4 -2
- package/src/runtime/control-plane/routing/route-policy.ts +18 -6
- package/src/runtime/control-plane/routing/workspace-admission.ts +70 -0
- package/src/runtime/evidence/process-check-execution.ts +18 -0
- package/src/runtime/execution/jobs/child-reference.ts +6 -2
- package/src/runtime/execution/process-runtime/check-result.ts +53 -18
- package/src/runtime/execution/process-runtime/check-runner-sidecar.ts +7 -1
- package/src/runtime/execution/process-runtime/command-facade.ts +39 -17
- package/src/runtime/execution/process-runtime/lightweight-managed.ts +20 -3
- package/src/runtime/execution/process-runtime/persisted-check.ts +4 -1
- package/src/runtime/execution/process-runtime/runtime.ts +10 -0
- package/src/runtime/execution/process-runtime/types.ts +2 -12
- package/src/runtime/execution/work-activity.ts +21 -0
- package/src/runtime/execution/workers/executor.ts +18 -13
- package/src/runtime/gateway/mcp/execution-tools.ts +35 -2930
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +61 -0
- package/src/runtime/gateway/mcp/router.ts +2 -2
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +21 -2
- package/src/runtime/gateway/mcp/runtime-tools.ts +805 -1009
- package/src/runtime/plugins/app-store-connect-adapter.ts +93 -28
- package/src/runtime/plugins/browser-adapter.ts +256 -1083
- package/src/runtime/plugins/browser-handoff-host.ts +2 -25
- package/src/runtime/plugins/browser-handoff.ts +18 -3
- package/src/runtime/plugins/browser-macos-bridge.ts +121 -16
- package/src/runtime/plugins/browser-manifest-surface.ts +603 -0
- package/src/runtime/plugins/browser-native-session-service.ts +222 -0
- package/src/runtime/plugins/browser-runtime-contract.ts +2 -0
- package/src/runtime/plugins/browser-runtime.ts +10 -0
- package/src/runtime/plugins/browser-session-store.ts +121 -0
- package/src/runtime/plugins/browser-session-types.ts +98 -0
- package/src/runtime/plugins/desktop-operator-registration.ts +4 -4
- package/src/runtime/plugins/external-adapter.ts +92 -58
- package/src/runtime/plugins/macos-capability-broker.ts +0 -8
- package/src/runtime/plugins/store.ts +66 -9
- package/src/runtime/plugins/types.ts +3 -1
- package/src/runtime/recovery/maintenance-executor.ts +61 -25
- package/src/runtime/root/package-connector-service.ts +46 -4
- package/src/runtime/root/package-runtime-release.ts +1 -1
- package/src/runtime/root/package-runtime-service.ts +33 -2
- package/src/runtime/root/release-manifest.ts +137 -16
- package/src/runtime/root/release-materialize.ts +109 -35
- package/src/runtime/root/types.ts +10 -0
- package/src/runtime/standalone-recovery/core.ts +425 -194
- package/src/runtime/standalone-recovery/entry.ts +1 -1
- package/src/runtime/standalone-recovery/installer.ts +1 -1
- package/src/runtime/workflow/schedules/engine.ts +113 -87
- package/src/runtime/workflow/schedules/settlement.ts +26 -23
- package/src/runtime/workflow/schedules/store.ts +79 -10
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility translation only: legacy iOS MCP tool names are normalized to
|
|
3
|
+
* the canonical typed iOS plugin action surface. This module owns no runtime,
|
|
4
|
+
* repository, Work, approval, or plugin execution state.
|
|
5
|
+
*/
|
|
6
|
+
export interface LegacyIosPluginInvocation {
|
|
7
|
+
actionId: string;
|
|
8
|
+
requestId: string;
|
|
9
|
+
arguments: Record<string, unknown>;
|
|
10
|
+
confirmAuthorization: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function definedArguments(value: Record<string, unknown>): Record<string, unknown> {
|
|
14
|
+
return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function optionalString(args: Record<string, unknown>, key: string): string | undefined {
|
|
18
|
+
return typeof args[key] === 'string' ? args[key] as string : undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function optionalNumber(args: Record<string, unknown>, key: string): number | undefined {
|
|
22
|
+
return typeof args[key] === 'number' ? args[key] as number : undefined;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function legacyIosPluginInvocation(
|
|
26
|
+
legacyTool: string,
|
|
27
|
+
args: Record<string, unknown>,
|
|
28
|
+
): LegacyIosPluginInvocation | undefined {
|
|
29
|
+
const invocation = (() => {
|
|
30
|
+
switch (legacyTool) {
|
|
31
|
+
case 'ios_xcode_status':
|
|
32
|
+
return { actionId: 'xcode_status', arguments: {} };
|
|
33
|
+
case 'ios_simulators_list':
|
|
34
|
+
return { actionId: 'list_simulators', arguments: { runtime: optionalString(args, 'runtime'), name: optionalString(args, 'name') } };
|
|
35
|
+
case 'ios_project_discover':
|
|
36
|
+
return { actionId: 'discover_project', arguments: {} };
|
|
37
|
+
case 'ios_schemes_list':
|
|
38
|
+
return { actionId: 'list_schemes', arguments: { workspace: optionalString(args, 'workspace'), project: optionalString(args, 'project') } };
|
|
39
|
+
case 'ios_simulator_boot':
|
|
40
|
+
return { actionId: 'launch_simulator', arguments: { udid: String(args.udid ?? '').trim(), open_simulator: args.open_simulator !== false, timeout_ms: optionalNumber(args, 'timeout_ms') } };
|
|
41
|
+
case 'ios_app_build':
|
|
42
|
+
return { actionId: 'build', arguments: { scheme: String(args.scheme ?? '').trim(), udid: optionalString(args, 'udid'), simulator_name: optionalString(args, 'simulator_name'), workspace: optionalString(args, 'workspace'), project: optionalString(args, 'project'), configuration: optionalString(args, 'configuration'), timeout_ms: optionalNumber(args, 'timeout_ms') } };
|
|
43
|
+
case 'ios_simulator_screenshot':
|
|
44
|
+
return { actionId: 'capture_screenshot', arguments: { udid: String(args.udid ?? '').trim(), label: optionalString(args, 'label') } };
|
|
45
|
+
case 'ios_ui_smoke_test':
|
|
46
|
+
return { actionId: 'smoke_review', arguments: { scheme: optionalString(args, 'scheme'), bundle_id: optionalString(args, 'bundle_id'), udid: optionalString(args, 'udid'), simulator_name: optionalString(args, 'simulator_name'), workspace: optionalString(args, 'workspace'), project: optionalString(args, 'project'), configuration: optionalString(args, 'configuration'), app_path: optionalString(args, 'app_path'), screenshot_label: optionalString(args, 'screenshot_label') } };
|
|
47
|
+
default:
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
})();
|
|
51
|
+
if (!invocation) return undefined;
|
|
52
|
+
const requestId = typeof args.request_id === 'string' && args.request_id.trim()
|
|
53
|
+
? args.request_id.trim()
|
|
54
|
+
: `legacy-${legacyTool}-${Date.now()}`;
|
|
55
|
+
return {
|
|
56
|
+
actionId: invocation.actionId,
|
|
57
|
+
requestId,
|
|
58
|
+
arguments: definedArguments(invocation.arguments),
|
|
59
|
+
confirmAuthorization: args.confirm_authorization === true,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from 'crypto';
|
|
2
|
-
import type { CallToolResult, McpToolDefinition } from '../../../cli/mcp/
|
|
2
|
+
import type { CallToolResult, McpToolDefinition } from '../../../cli/mcp/tool-contract';
|
|
3
3
|
import {
|
|
4
4
|
buildMultiRepositoryToolDefinitions,
|
|
5
5
|
type MultiRepositoryMcpToolContext,
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
claimedSessionEditBinding,
|
|
10
10
|
repositoryToolDefinitions,
|
|
11
11
|
} from '../../../cli/mcp/repository-tools';
|
|
12
|
-
import { runtimeToolDefinitions } from './runtime-
|
|
12
|
+
import { runtimeToolDefinitions } from './runtime-tool-definitions';
|
|
13
13
|
import { executionToolDefinitions } from './execution-tools';
|
|
14
14
|
import { processToolDefinitions } from './process-tools';
|
|
15
15
|
import { resolveRepositorySelection } from '../../../cli/repositories/registry';
|
|
@@ -92,6 +92,7 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
92
92
|
handoff_id: { type: 'string', description: 'Optional existing HandoffItem used to resume controller context. Required for controller_disposition=wait_for_user.' },
|
|
93
93
|
disposition: { type: 'string', enum: ['continue_immediately', 'wait', 'wait_for_user', 'goal_complete'], description: 'Explicit ChatGPT end-of-round semantic decision. continue_immediately is consumed only after the current controller lease closes.' },
|
|
94
94
|
relay_scope_id: { type: 'string', description: 'Stable Requirement/Goal relay identity. Requirement-bound Work uses requirement:<id>; otherwise reuse the exact returned goal scope across Works.' },
|
|
95
|
+
controller_authority_id: { type: 'string', description: 'Opaque durable authority for the currently dispatched ChatGPT controller round. Required with relay_scope_id for lifecycle mutation of relay-bound Work; rotates before a successor round while surviving MCP transport/Runtime rotation within the same round.' },
|
|
95
96
|
state_fingerprint: { type: 'string', description: 'Optional controller-observed semantic-state fingerprint. When omitted, Forge derives a mechanical fingerprint from current Requirement/Work/Handoff state.' },
|
|
96
97
|
max_rounds: { type: 'number', description: 'Mechanical immediate-relay round budget; defaults to 8 and cannot be loosened within an existing relay scope.' },
|
|
97
98
|
max_repeated_state: { type: 'number', description: 'Mechanical repeated-state fence; defaults to 2 repeated observations and cannot be loosened within an existing relay scope.' },
|
|
@@ -155,7 +156,7 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
155
156
|
expected_files: { type: 'number' },
|
|
156
157
|
expected_changed_lines: { type: 'number' },
|
|
157
158
|
mode: { type: 'string', enum: ['scale'], description: 'Explicit Scale coordination mode for start. Scale requires a bound approved PlanContract step and uses existing Work/Process/resource-claim authorities; it does not create an agent-swarm lifecycle.' },
|
|
158
|
-
work_kind: { type: 'string', enum: ['repository_change', 'completed_no_change', 'investigation', 'local_effect', 'remote_effect', 'reconciliation'], description: 'Explicit technical Work evidence shape for operation=start.
|
|
159
|
+
work_kind: { type: 'string', enum: ['repository_change', 'completed_no_change', 'read_only_review', 'investigation', 'local_effect', 'remote_effect', 'reconciliation'], description: 'Explicit technical Work evidence shape for operation=start. read_only_review is a recoverable source-frozen review lifecycle: it permits inspected-path/finding persistence without repository edits and only clean-finalizes after unchanged-source proof. local_effect/remote_effect represent effect-only execution; completed_no_change/investigation/reconciliation likewise do not imply a source mutation. None imply semantic completion; ChatGPT must still explicitly finalize after reviewing evidence.' },
|
|
159
160
|
scope_clear: { type: 'boolean' },
|
|
160
161
|
requires_investigation: { type: 'boolean' },
|
|
161
162
|
requires_long_running_checks: { type: 'boolean' },
|
|
@@ -178,9 +179,27 @@ export const runtimeToolDefinitions: McpToolDefinition[] = [
|
|
|
178
179
|
initial_likely_paths: { type: 'array', items: { type: 'string' }, description: 'Non-authoritative first-pass discovery candidates. May expand after investigation; allowed_paths remains a policy fence only.' },
|
|
179
180
|
additional_likely_paths: { type: 'array', items: { type: 'string' }, description: 'Non-authoritative candidates discovered after Work start. Valid for continue; does not widen allowed_paths.' },
|
|
180
181
|
inspected_paths: { type: 'array', items: { type: 'string' }, description: 'Paths actually inspected during progressive discovery. Valid for continue; does not widen allowed_paths.' },
|
|
182
|
+
review_findings: { type: 'array', items: { type: 'string' }, description: 'Concise semantic findings for operation=continue on work_kind=read_only_review. Findings are source-bound durable review evidence and prevent clean completed_no_change finalization until a successor repair/review resolves them.' },
|
|
183
|
+
acceptance_evidence: { type: 'array', items: { type: 'object', required: ['criterion', 'evidence_ids', 'rationale'], properties: { criterion: { type: 'string', description: 'Exact declared Work acceptance criterion reviewed by the Controller.' }, evidence_ids: { type: 'array', items: { type: 'string' }, description: 'Durable evidence ids already attributed to this Work that support this exact criterion.' }, rationale: { type: 'string', description: 'Controller rationale for why the cited evidence satisfies this exact criterion.' } }, additionalProperties: false }, description: 'Operation=continue only. Explicit Controller-reviewed criterion-to-evidence bindings for no-check local_effect Work. Mechanical plugin/process attribution alone never implies semantic acceptance.' },
|
|
181
184
|
acceptance_failure_decision: { type: 'string', enum: ['repair', 'rescope'], description: 'Explicit Controller decision for operation=continue after a deterministic valid_fail. Bypasses acceptance-review handoff only for this bounded repair/re-scope decision; never inferred from free text.' },
|
|
182
185
|
forbidden_paths: { type: 'array', items: { type: 'string' } },
|
|
183
|
-
constraints: {
|
|
186
|
+
constraints: {
|
|
187
|
+
type: 'object',
|
|
188
|
+
properties: {
|
|
189
|
+
max_changed_files: { type: 'number' },
|
|
190
|
+
max_changed_lines: { type: 'number' },
|
|
191
|
+
allow_commit: { type: 'boolean' },
|
|
192
|
+
allow_merge: { type: 'boolean' },
|
|
193
|
+
allow_cleanup: { type: 'boolean' },
|
|
194
|
+
allow_destructive: { type: 'boolean' },
|
|
195
|
+
require_handoff_on_ambiguity: { type: 'boolean' },
|
|
196
|
+
access_mode: { type: 'string', enum: ['request', 'full_access'] },
|
|
197
|
+
workspace_mode: { type: 'string', enum: ['current', 'isolated', 'auto'], description: 'Typed placement policy. isolated is an admission fence and cannot be downgraded to Direct Control.' },
|
|
198
|
+
require_worktree: { type: 'boolean', description: 'Typed placement policy. true requires isolated Work placement before routing.' },
|
|
199
|
+
direct_main_prohibited: { type: 'boolean', description: 'Typed admission fence. true forbids Direct Control/current-main repository mutation.' },
|
|
200
|
+
},
|
|
201
|
+
additionalProperties: true,
|
|
202
|
+
},
|
|
184
203
|
repair_operation: { type: 'string', enum: ['diagnose', 'repair', 'verify', 'handoff'] },
|
|
185
204
|
target: { type: 'string', enum: ['codex', 'grok', 'claude'], description: 'Explicit small-brain delegate target for operation=delegate. Delegation is never the default execution path.' },
|
|
186
205
|
available: { type: 'boolean', description: 'Whether the delegate target is currently available.' },
|