@moretea-labs/forge 1.8.1 → 1.8.2
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 +5 -2
- package/CHANGELOG.md +20 -0
- package/README.en.md +24 -3
- package/README.md +10 -6
- package/README.zh-CN.md +5 -3
- package/THIRD_PARTY_NOTICES.md +1 -2
- package/adapters/chatgpt/browser-delivery-runtime.ts +5 -3
- package/adapters/chatgpt/provider-delivery.ts +1 -1
- package/adapters/chatgpt/work-conversation-binding-store.ts +20 -1
- package/adapters/computer/chatgpt-extension-target.ts +295 -50
- package/adapters/computer/chrome-extension/background.js +227 -71
- package/adapters/computer/chrome-extension/content.js +181 -157
- package/adapters/computer/chrome-extension/manifest.json +3 -1
- package/adapters/computer/desktop-operator-provider.ts +18 -6
- package/adapters/computer/interaction-target-authority.ts +39 -9
- package/adapters/mcp/access-mode.ts +18 -39
- package/adapters/mcp/auth.ts +2 -6
- package/adapters/mcp/instructions.ts +2 -2
- package/adapters/mcp/multi-repository.ts +7 -28
- package/adapters/mcp/runtime-gateway/context-adapter.ts +79 -40
- package/adapters/mcp/runtime-gateway/context-pack-sidecar.ts +7 -15
- package/adapters/mcp/runtime-gateway/execution-tools.ts +7 -13
- package/adapters/mcp/runtime-gateway/plugin-adapter.ts +16 -3
- package/adapters/mcp/runtime-gateway/process-tools.ts +3 -21
- package/adapters/mcp/runtime-gateway/router.ts +3 -5
- package/adapters/mcp/runtime-gateway/routing-policy.ts +17 -10
- package/adapters/mcp/runtime-gateway/runtime-observation-adapter.ts +1 -1
- package/adapters/mcp/runtime-gateway/runtime-tool-definitions.ts +14 -9
- package/adapters/mcp/runtime-gateway/runtime-tools.ts +1 -5
- package/adapters/mcp/runtime-gateway/scheduler-adapter.ts +36 -1
- package/adapters/mcp/runtime-gateway/status-inbox-adapter.ts +58 -4
- package/adapters/mcp/runtime-gateway/typescript-navigation-sidecar.ts +7 -3
- package/adapters/mcp/runtime-gateway/work-adapter.ts +16 -16
- package/adapters/mcp/runtime-gateway/work-input-wire-migration.ts +0 -17
- package/adapters/mcp/runtime-gateway/work-semantic-operations.ts +69 -12
- package/adapters/mcp/runtime-gateway/workflow-supervisor-adapter.ts +26 -2
- package/adapters/mcp/server.ts +24 -3
- package/adapters/mcp/setup.ts +4 -10
- package/adapters/mcp/tool-mapping/access-tools.ts +0 -6
- package/adapters/mcp/tool-mapping/legacy-tool-service.ts +672 -2935
- package/adapters/mcp/tool-mapping/post-finalize-work-attribution.ts +1 -1
- package/adapters/mcp/tool-mapping/repository-tools.ts +52 -86
- package/adapters/mcp/toolset-names.ts +11 -42
- package/adapters/mcp/toolset.ts +16 -90
- package/{src/cli → adapters}/mcp/transports/AGENTS.md +5 -5
- package/{src/cli → adapters}/mcp/transports/CLAUDE.md +5 -5
- package/adapters/mcp/transports/http-observation.ts +18 -6
- package/adapters/mcp/transports/http-post-lifecycle.ts +19 -0
- package/adapters/mcp/transports/http.ts +54 -14
- package/adapters/mcp/types.ts +0 -6
- package/assets/hooks/lib/session-state.sh +0 -38
- package/assets/hooks/post-bash.sh +1 -1
- package/assets/hooks/post-tool-observer.sh +0 -5
- package/assets/hooks/prompt-guard.sh +0 -55
- package/assets/partials/04-project-structure.partial.md +1 -1
- package/assets/partials/07-footer.partial.md +1 -1
- package/assets/partials-agents/02-operating-mode.partial.md +1 -1
- package/assets/partials-agents/08-deep-docs.partial.md +1 -1
- package/assets/reference-configs/agentic-development-flow.md +1 -1
- package/assets/reference-configs/external-tooling.md +0 -76
- package/assets/reference-configs/release-deploy.md +1 -1
- package/assets/templates/helpers/architecture-queue.sh +1 -1
- package/assets/templates/helpers/check-agent-tooling.sh +1 -327
- package/assets/templates/helpers/check-task-workflow.sh +1 -1
- package/assets/templates/helpers/ensure-task-workflow.sh +0 -14
- package/assets/templates/helpers/migrate-project-template.sh +2 -2
- package/assets/workflow-contract.v1.json +0 -2
- package/docs/README.md +5 -2
- package/docs/architecture/CURRENT.md +114 -30
- package/docs/architecture/decisions/20260904-ios-device-migration-baseline.md +42 -0
- package/docs/architecture/decisions/20260918-stable-candidate-release-lifecycle.md +15 -2
- package/docs/architecture/decisions/20260924-thin-semantic-working-context.md +4 -2
- package/docs/architecture/decisions/20261001-supervisor-turn-authority.md +109 -4
- package/docs/architecture/decisions/20261009-exact-code-context-discovery.md +19 -0
- package/docs/architecture/decisions/20261009-generated-xcode-cache-retention.md +37 -0
- package/docs/architecture/decisions/20261011-autonomous-continuation-convergence.md +597 -0
- package/docs/architecture/decisions/20261017-edit-session-finalization-reconciliation.md +17 -0
- package/docs/architecture/decisions/20261019-retire-host-skills.md +16 -0
- package/docs/architecture/diagrams/agentic-dev-plugin-architecture.html +1 -1
- package/docs/architecture/domains/public-surface.md +3 -5
- package/docs/architecture/domains/verification.md +5 -5
- package/docs/architecture/modules/controller-runtime/transport-lifecycle.md +2 -2
- package/docs/architecture/requests/2026-09-04-computer-plugin-workflow-taxonomy.md +4 -4
- package/docs/architecture/reviews/20261015-code-search-runtime-acceptance.md +75 -0
- package/docs/forge-plugin-management.md +14 -2
- package/docs/operations/controller-browser-plugin.md +23 -0
- package/docs/operations/features.md +6 -7
- package/docs/operations/features.zh-CN.md +1 -1
- package/docs/operations/github-repository.md +4 -4
- package/docs/operations/github-semantic-release-projection.md +20 -0
- package/docs/operations/homebrew.md +2 -2
- package/docs/operations/mcp-tool-exposure.md +13 -54
- package/docs/operations/runtime-performance-diagnostics.md +8 -0
- package/docs/operations/standalone-disaster-recovery.md +1 -1
- package/docs/tutorials/01-install-and-start.zh-CN.md +1 -1
- package/docs/tutorials/03-first-repository-task.md +2 -0
- package/docs/wiki/Computer-and-Plugins.md +78 -0
- package/docs/wiki/Computer-and-Plugins.zh-CN.md +88 -0
- package/docs/wiki/Home.md +16 -2
- package/docs/wiki/Implementation.md +24 -12
- package/docs/wiki/Installation.md +28 -32
- package/docs/wiki/Integrations.md +4 -0
- package/docs/wiki/Quick-Start.md +35 -22
- package/docs/wiki/Releases-and-Upgrades.md +15 -25
- package/docs/wiki/_Sidebar.md +5 -1
- package/package.json +1 -12
- package/packages/kernel/controller/infrastructure/controller-session-store.ts +63 -38
- package/packages/kernel/identity/infrastructure/activity-projection-store.ts +10 -0
- package/packages/kernel/scheduler/application/eligibility.ts +4 -1
- package/packages/kernel/scheduler/infrastructure/schedule-store.ts +13 -10
- package/packages/kernel/work/application/work-service.ts +1 -0
- package/packages/kernel/work/domain/repository-completion-receipt.ts +1 -1
- package/packages/kernel/work/domain/state-machine.ts +9 -2
- package/packages/kernel/work/infrastructure/work-contract-store.ts +28 -1
- package/packages/plugin-runtime/browser/provider-registry.ts +12 -36
- package/packages/plugin-runtime/computer/conversation-target.ts +17 -7
- package/scripts/assemble-template.ts +11 -72
- package/scripts/check-mcp-compatibility.ts +55 -74
- package/scripts/check-package-identity.mjs +0 -5
- package/scripts/check-runtime-architecture.mjs +305 -28
- package/scripts/init-project.sh +0 -46
- package/scripts/install-ios-hid-toolchain.sh +60 -0
- package/scripts/install-standalone-recovery.ts +1 -1
- package/scripts/lib/project-init-lib.sh +3 -3
- package/scripts/migrate-windows-wsl-controller-home.ts +2 -0
- package/scripts/open-source-audit-allowlist.txt +0 -1
- package/scripts/run-governed-gate.ts +2 -0
- package/scripts/smoke-ios-physical-device.ts +38 -10
- package/scripts/smoke-mcp-http-runtime.ts +7 -8
- package/scripts/smoke-mcp-tool-surface.ts +27 -41
- package/scripts/smoke-workflow-supervisor-chrome-adapter.ts +6 -3
- package/scripts/sync-generated-authority.mjs +0 -1
- package/src/cli/agent-jobs/executor-health.ts +1 -1
- package/src/cli/agent-jobs/integration.ts +2 -2
- package/src/cli/chatgpt-browser/file-policy.ts +2 -2
- package/src/cli/commands/doctor.ts +1 -143
- package/src/cli/commands/global-runtime.ts +3 -196
- package/src/cli/commands/init-hook.ts +6 -23
- package/src/cli/commands/init.ts +3 -252
- package/src/cli/commands/mcp.ts +0 -5
- package/src/cli/commands/prompt-guard-decision.ts +0 -2
- package/src/cli/commands/recovery.ts +2 -14
- package/src/cli/commands/repository.ts +17 -1
- package/src/cli/commands/setup-execution.ts +41 -0
- package/src/cli/controller/completion-orchestrator.ts +1 -1
- package/src/cli/controller/composite-operations.ts +1 -1
- package/src/cli/controller/context/instruction-context.ts +1 -1
- package/src/cli/controller/context/known-paths.ts +2 -2
- package/src/cli/controller/context/query-planning.ts +11 -4
- package/src/cli/controller/context/rule-resolution.ts +2 -2
- package/src/cli/controller/context/source-materializer.ts +2 -2
- package/src/cli/controller/context/structural-provider.ts +84 -0
- package/src/cli/controller/context/structural.ts +6 -6
- package/src/cli/controller/context/types.ts +8 -9
- package/src/cli/controller/context-pack.ts +97 -76
- package/src/cli/controller/operational-plan.ts +1 -1
- package/src/cli/controller/systemd-user.ts +4 -10
- package/src/cli/editing/edit-session.ts +17 -5
- package/src/cli/github/github.ts +4 -4
- package/src/cli/github/semantic-projection.ts +174 -0
- package/src/cli/hook/prompt-intents.ts +0 -9
- package/src/cli/index.ts +1 -43
- package/src/cli/local-bridge/connector-freshness.ts +1 -12
- package/src/cli/local-bridge/console-automations.ts +1 -1
- package/src/cli/local-bridge/console-view-models.ts +1 -1
- package/src/cli/local-bridge/facade-api.ts +0 -2
- package/src/cli/repositories/command-classifier.ts +0 -9
- package/src/cli/repositories/command-scope.ts +2 -2
- package/src/cli/repositories/locks.ts +20 -0
- package/src/cli/repositories/registry.ts +2 -1
- package/src/cli/repositories/safe-patch.ts +2 -12
- package/src/cli/repositories/structured-git.ts +39 -3
- package/src/cli/repository/inspector.ts +185 -343
- package/src/effects/process-runner.ts +17 -1
- package/src/runtime/context/generic-lsp-provider.ts +1 -1
- package/src/runtime/context/semantic-navigation-contract.ts +7 -0
- package/src/runtime/context/semantic-navigation.ts +1 -1
- package/src/runtime/control-plane/cleanup-artifact-retention.ts +4 -4
- package/src/runtime/control-plane/execution/work-delivery-service.ts +150 -31
- package/src/runtime/control-plane/execution/work-handle-authority.ts +12 -4
- package/src/runtime/control-plane/execution/work-handle-store.ts +53 -1
- package/src/runtime/control-plane/execution/work-operation-service.ts +20 -10
- package/src/runtime/control-plane/execution/work-preparation-service.ts +108 -4
- package/src/runtime/control-plane/execution/work-process-evidence.ts +2 -2
- package/src/runtime/control-plane/execution/work-terminal-cleanup.ts +28 -13
- package/src/runtime/control-plane/execution/work-validation-reconciler.ts +5 -1
- package/src/runtime/control-plane/execution/work-verification-snapshot.ts +1 -1
- package/src/runtime/control-plane/facade/capability-registry.ts +2 -0
- package/src/runtime/control-plane/facade/work-continuation.ts +1 -1
- package/src/runtime/control-plane/generated-cache-retention.ts +114 -63
- package/src/runtime/control-plane/global-scheduler/maintenance.ts +20 -8
- package/src/runtime/control-plane/global-scheduler/reconciliation.ts +1 -11
- package/src/runtime/control-plane/governance/external-effects.ts +1 -1
- package/src/runtime/control-plane/launcher/chatgpt-work-continuation.ts +1 -0
- package/src/runtime/control-plane/runtime-cleanup.ts +12 -93
- package/src/runtime/evidence/sensitive-output.ts +22 -2
- package/src/runtime/execution/jobs/child-reference.ts +11 -0
- package/src/runtime/execution/jobs/receipt-recovery.ts +1 -11
- package/src/runtime/execution/process-runtime/command-facade.ts +3 -3
- package/src/runtime/execution/process-runtime/runtime.ts +20 -16
- package/src/runtime/execution/thin-harness/execution-router.ts +16 -16
- package/src/runtime/execution/thin-harness/fast-executor.ts +2 -2
- package/src/runtime/execution/thin-harness/search-worker.ts +2 -2
- package/src/runtime/execution/workers/executor.ts +1 -2
- package/src/runtime/maintenance/cleanup.ts +41 -5
- package/src/runtime/plugins/action-application.ts +12 -1
- package/src/runtime/plugins/app-store-connect-adapter.ts +252 -4
- package/src/runtime/plugins/browser-adapter.ts +381 -313
- package/src/runtime/plugins/browser-macos-bridge.ts +114 -112
- package/src/runtime/plugins/browser-manifest-surface.ts +2 -1
- package/src/runtime/plugins/browser-registration.ts +2 -0
- package/src/runtime/plugins/browser-runtime.ts +26 -35
- package/src/runtime/plugins/computer-chatgpt-browser-adapter-installer.ts +11 -2
- package/src/runtime/plugins/computer-registration.ts +76 -9
- package/src/runtime/plugins/github-adapter.ts +30 -3
- package/src/runtime/plugins/gmail-adapter.ts +166 -1
- package/src/runtime/plugins/google-shared.ts +10 -5
- package/src/runtime/plugins/ios/remote-xpc-hid.ts +70 -30
- package/src/runtime/plugins/ios-adapter.ts +45 -40
- package/src/runtime/plugins/ios-agent-device.ts +54 -4
- package/src/runtime/plugins/ios-device-ownership.ts +103 -0
- package/src/runtime/plugins/ios-physical-device.ts +497 -79
- package/src/runtime/plugins/local-system-adapter.ts +1 -99
- package/src/runtime/plugins/store.ts +80 -7
- package/src/runtime/plugins/types.ts +4 -0
- package/src/runtime/projections/git-status-sampler.ts +2 -19
- package/src/runtime/recovery/actions.ts +1 -1
- package/src/runtime/recovery/lifecycle-inventory.ts +1 -11
- package/src/runtime/recovery/probe.ts +2 -2
- package/src/runtime/release/release-coordinator.ts +20 -4
- package/src/runtime/root/controller-progression-composition.ts +67 -5
- package/src/runtime/root/package-connector-service.ts +123 -11
- package/src/runtime/root/package-runtime-release.ts +6 -18
- package/src/runtime/root/package-runtime-service.ts +7 -13
- package/src/runtime/root/release-execution-canary.ts +18 -5
- package/src/runtime/root/release-manifest.ts +0 -34
- package/src/runtime/root/release-materialize.ts +0 -78
- package/src/runtime/root/runtime.ts +1 -2
- package/src/runtime/root/scheduled-controller-composition.ts +2 -1
- package/src/runtime/root/service.ts +90 -11
- package/src/runtime/root/types.ts +0 -6
- package/src/runtime/root/workflow-supervisor-composition.ts +207 -19
- package/src/runtime/root/workflow-supervisor-runtime.ts +365 -10
- package/src/runtime/safe-tooling/google-credential-store.ts +1 -11
- package/src/runtime/safe-tooling/ios-development.ts +22 -8
- package/src/runtime/safe-tooling/job-summary.ts +1 -1
- package/src/runtime/safe-tooling/workspace-auth.ts +4 -1
- package/src/runtime/shared/atomic-text-file.ts +21 -0
- package/src/runtime/shared/json-files.ts +8 -3
- package/src/runtime/standalone-recovery/core.ts +189 -174
- package/src/runtime/standalone-recovery/entry.ts +62 -30
- package/src/runtime/standalone-recovery/operation-lock.ts +11 -1
- package/src/runtime/workflow/schedules/chatgpt-automation-migration.ts +1 -0
- package/src/runtime/workflow/schedules/engine.ts +36 -14
- package/src/runtime/workflow/schedules/pending-activation.ts +11 -4
- package/src/runtime/workflow/schedules/work-continuation.ts +51 -6
- package/supervisor/client.ts +31 -14
- package/supervisor/control-plane.ts +210 -115
- package/supervisor/forge-validators.ts +88 -21
- package/supervisor/native-browser-adapter.ts +393 -28
- package/supervisor/native-messaging/host.ts +21 -2
- package/supervisor/protocol.ts +74 -26
- package/supervisor/server.ts +16 -8
- package/supervisor/store.ts +476 -57
- package/supervisor/types.ts +19 -13
- package/SKILL.md +0 -427
- package/adapters/computer/chatgpt-target-router.ts +0 -103
- package/adapters/mcp/runtime-gateway/automation-receipt-adapter.ts +0 -87
- package/adapters/mcp/runtime-gateway/work-validation-reconciler.ts +0 -1
- package/adapters/mcp/toolset-selection.ts +0 -41
- package/agents/openai.yaml +0 -4
- package/assets/skill-hooks.json +0 -41
- package/assets/skill-version.json +0 -189
- package/assets/skills/claude-review/SKILL.md +0 -231
- package/assets/skills/codex-review/SKILL.md +0 -103
- package/assets/templates/helpers/check-skill-version.ts +0 -193
- package/scripts/check-skill-version.ts +0 -5
- package/scripts/ensure-codegraph.sh +0 -16
- package/scripts/run-skill-hook.ts +0 -244
- package/scripts/sync-codex-installed-copies.sh +0 -182
- package/src/cli/commands/tools.ts +0 -167
- package/src/cli/mcp/access-mode.ts +0 -2
- package/src/cli/mcp/access-tools.ts +0 -2
- package/src/cli/mcp/audit.ts +0 -2
- package/src/cli/mcp/auth.ts +0 -2
- package/src/cli/mcp/instructions.ts +0 -2
- package/src/cli/mcp/legacy-context.ts +0 -2
- package/src/cli/mcp/legacy-tool-service.ts +0 -2
- package/src/cli/mcp/multi-repository.ts +0 -2
- package/src/cli/mcp/oauth.ts +0 -2
- package/src/cli/mcp/openai-secure-tunnel.ts +0 -2
- package/src/cli/mcp/paths.ts +0 -2
- package/src/cli/mcp/policy.ts +0 -2
- package/src/cli/mcp/post-finalize-work-attribution.ts +0 -2
- package/src/cli/mcp/proxy-env.ts +0 -2
- package/src/cli/mcp/readiness-projection.ts +0 -2
- package/src/cli/mcp/redaction.ts +0 -2
- package/src/cli/mcp/repo.ts +0 -2
- package/src/cli/mcp/repository-tools.ts +0 -2
- package/src/cli/mcp/server.ts +0 -2
- package/src/cli/mcp/setup.ts +0 -2
- package/src/cli/mcp/tool-capability-cache.ts +0 -2
- package/src/cli/mcp/tool-contract.ts +0 -2
- package/src/cli/mcp/tools.ts +0 -2
- package/src/cli/mcp/toolset-names.ts +0 -2
- package/src/cli/mcp/toolset-selection.ts +0 -2
- package/src/cli/mcp/toolset.ts +0 -2
- package/src/cli/mcp/transports/http.ts +0 -2
- package/src/cli/mcp/transports/session-registry.ts +0 -2
- package/src/cli/mcp/transports/stdio.ts +0 -2
- package/src/cli/mcp/types.ts +0 -2
- package/src/cli/mcp/umbrella-tools.ts +0 -2
- package/src/cli/tools/codegraph.ts +0 -695
- package/src/core/adoption/helper-wrapper-plan.ts +0 -159
- package/src/runtime/context/codegraph-cache-boundary.ts +0 -255
- package/src/runtime/context/codegraph-read-provider.ts +0 -611
- package/src/runtime/context/codegraph-sidecar.cjs +0 -248
- package/src/runtime/control-plane/codegraph-cache-retention.ts +0 -164
- package/src/runtime/gateway/mcp/execution-tools.ts +0 -2
- package/src/runtime/gateway/mcp/legacy-ios-tool-adapter.ts +0 -2
- package/src/runtime/gateway/mcp/persisted-check-process.ts +0 -2
- package/src/runtime/gateway/mcp/process-tools.ts +0 -2
- package/src/runtime/gateway/mcp/router.ts +0 -2
- package/src/runtime/gateway/mcp/runtime-tool-definitions.ts +0 -2
- package/src/runtime/gateway/mcp/runtime-tools.ts +0 -2
- package/src/runtime/gateway/mcp/work-validation-reconciler.ts +0 -2
- package/src/runtime/plugins/browser-provider-registry.ts +0 -2
- package/src/runtime/plugins/computer-chatgpt-macos-target.ts +0 -891
package/src/cli/commands/mcp.ts
CHANGED
|
@@ -28,7 +28,6 @@ export interface McpServeOptions {
|
|
|
28
28
|
devRunnerAgents?: string;
|
|
29
29
|
devRunnerTimeoutMs?: string;
|
|
30
30
|
devRunnerMaxTimeoutMs?: string;
|
|
31
|
-
toolset?: 'facade' | 'core' | 'advanced' | 'full';
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
interface McpAccessOptions {
|
|
@@ -105,7 +104,6 @@ async function runRepositoryAccessCommand(
|
|
|
105
104
|
repo: rawOpts.repo ?? '.',
|
|
106
105
|
controllerHome: rawOpts.controllerHome,
|
|
107
106
|
profile: 'controller',
|
|
108
|
-
toolset: 'core',
|
|
109
107
|
});
|
|
110
108
|
const result = callAccessTool(ctx, toolName, {
|
|
111
109
|
repo_id: rawOpts.repoId,
|
|
@@ -170,7 +168,6 @@ export function buildMcpCommand(): Command {
|
|
|
170
168
|
.option('--host <host>', 'HTTP bind host', '127.0.0.1')
|
|
171
169
|
.option('--port <port>', 'HTTP bind port', '8765')
|
|
172
170
|
.option('--profile <profile>', 'MCP profile: planner|executor|orchestrator|controller', 'controller')
|
|
173
|
-
.option('--toolset <toolset>', 'Controller toolset: facade|core|advanced|full (default advanced; facade is an explicit five-tool ChatGPT surface)')
|
|
174
171
|
.option('--auth <mode>', 'HTTP auth mode: oauth|bearer|none', 'oauth')
|
|
175
172
|
.option('--enable-chatgpt-browser', 'Expose tools that operate the user logged-in ChatGPT Web browser session')
|
|
176
173
|
.option('--enable-dev-runner', 'Enable local Codex/Claude task runners for controller or orchestrator profiles')
|
|
@@ -191,7 +188,6 @@ export function buildMcpCommand(): Command {
|
|
|
191
188
|
repo: rawOpts.repo ?? '.',
|
|
192
189
|
controllerHome: rawOpts.controllerHome,
|
|
193
190
|
profile: rawOpts.profile,
|
|
194
|
-
toolset: rawOpts.toolset,
|
|
195
191
|
enableChatgptBrowser: rawOpts.enableChatgptBrowser === true,
|
|
196
192
|
enableDevRunner: rawOpts.enableDevRunner,
|
|
197
193
|
devRunnerAgents: rawOpts.devRunnerAgents,
|
|
@@ -206,7 +202,6 @@ export function buildMcpCommand(): Command {
|
|
|
206
202
|
repo: rawOpts.repo,
|
|
207
203
|
controllerHome: rawOpts.controllerHome,
|
|
208
204
|
profile: rawOpts.profile,
|
|
209
|
-
toolset: rawOpts.toolset,
|
|
210
205
|
host: rawOpts.host,
|
|
211
206
|
port: parsePort(rawOpts.port),
|
|
212
207
|
auth: rawOpts.auth,
|
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
isAgenticPackagingIntent,
|
|
19
19
|
isBugFixIntent,
|
|
20
20
|
isBugOrHuntIntent,
|
|
21
|
-
isCodegraphRouteIntent,
|
|
22
21
|
isDoneIntent,
|
|
23
22
|
isEmbeddedApprovedPlanIntent,
|
|
24
23
|
isExecutionApprovalIntent,
|
|
@@ -185,7 +184,6 @@ export function runPromptGuardVerdictFromPrompt(prompt: string): PromptGuardVerd
|
|
|
185
184
|
plan_discussion_continuation: bit(decisionFacts.planningDiscussion),
|
|
186
185
|
trigger_question: bit(isTriggerQuestionPrompt(ctx)),
|
|
187
186
|
agentic_packaging: bit(isAgenticPackagingIntent(ctx)),
|
|
188
|
-
codegraph_route: bit(isCodegraphRouteIntent(ctx)),
|
|
189
187
|
nontrivial_code_task: bit(isNontrivialCodeTaskIntent(ctx)),
|
|
190
188
|
health_route: bit(isHealthRouteIntent(ctx)),
|
|
191
189
|
spa_day: bit(isSpaDayIntent(ctx)),
|
|
@@ -61,7 +61,6 @@ import {
|
|
|
61
61
|
scheduleLinuxControllerHomeMigration,
|
|
62
62
|
type RecoveryControllerHomeMigrationPreflight,
|
|
63
63
|
} from '../../runtime/standalone-recovery/controller-home-migration';
|
|
64
|
-
import { configureCodegraph, ensureCodegraph } from '../tools/codegraph';
|
|
65
64
|
import { isProcessAlive } from '../../runtime/shared/process-tree';
|
|
66
65
|
import { systemdUserServicePid, systemdUserUnitName, systemdUserUnitPath } from '../controller/systemd-user';
|
|
67
66
|
import { installWindowsHostRecoveryPlugin } from '../../runtime/plugins/windows-host-recovery-install';
|
|
@@ -749,13 +748,11 @@ export function buildRecoveryCommand(): Command {
|
|
|
749
748
|
.requiredOption('--repo <path>', 'Forge source repository root used for Recovery and Runtime immutable releases')
|
|
750
749
|
.requiredOption('--primary-connector-service-label <label>', 'Primary OAuth/Connector launchd label')
|
|
751
750
|
.option('--primary-connector-service-plist <path>', 'Absolute primary OAuth/Connector launchd plist path')
|
|
752
|
-
.option('--configure-codegraph', 'Initialize/sync CodeGraph and configure repository-scoped MCP for Codex and Claude during the bootstrap')
|
|
753
751
|
.action(async (opts: {
|
|
754
752
|
controllerHome: string;
|
|
755
753
|
repo: string;
|
|
756
754
|
primaryConnectorServiceLabel: string;
|
|
757
755
|
primaryConnectorServicePlist?: string;
|
|
758
|
-
configureCodegraph?: boolean;
|
|
759
756
|
}) => {
|
|
760
757
|
const home = resolveControllerHome(opts.controllerHome);
|
|
761
758
|
const repoRoot = resolve(opts.repo);
|
|
@@ -793,18 +790,9 @@ export function buildRecoveryCommand(): Command {
|
|
|
793
790
|
process.exitCode = 1;
|
|
794
791
|
return;
|
|
795
792
|
}
|
|
796
|
-
let codegraph: Record<string, unknown> | undefined;
|
|
797
|
-
let codegraphOk = true;
|
|
798
|
-
if (opts.configureCodegraph === true) {
|
|
799
|
-
const ensured = ensureCodegraph({ repoRoot, init: true, sync: true, host: 'both' });
|
|
800
|
-
const configured = configureCodegraph({ repoRoot, target: 'both', location: 'global' });
|
|
801
|
-
codegraphOk = !ensured.actions.some((entry) => entry.status === 'failed')
|
|
802
|
-
&& !configured.actions.some((entry) => entry.status === 'failed');
|
|
803
|
-
codegraph = { ensured, configured };
|
|
804
|
-
}
|
|
805
793
|
const connector = await restartPrimaryConnector(refreshed);
|
|
806
|
-
const ok = connector.ok
|
|
807
|
-
output({ ok, phase: !connector.ok ? 'connector_restart' :
|
|
794
|
+
const ok = connector.ok;
|
|
795
|
+
output({ ok, phase: !connector.ok ? 'connector_restart' : 'complete', recovery: installed, runtime, connector });
|
|
808
796
|
if (!ok) process.exitCode = 1;
|
|
809
797
|
});
|
|
810
798
|
|
|
@@ -106,7 +106,23 @@ export function buildRepositoryCommand(): Command {
|
|
|
106
106
|
.argument('<repo-id>', 'Stable repository ID'))
|
|
107
107
|
.action((repoId: string, opts: { controllerHome?: string; json?: boolean }) => {
|
|
108
108
|
const repository = getRepository(repoId, opts.controllerHome, { includeRemoved: true });
|
|
109
|
-
|
|
109
|
+
const validation = validateRepository(repoId, opts.controllerHome);
|
|
110
|
+
if (opts.json === true) {
|
|
111
|
+
output({ validation, ...initializeRepository(repository, opts.controllerHome) }, true);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// The default validation view is bounded even when the repository has
|
|
115
|
+
// thousands of historical checkout records. Full audit data is opt-in.
|
|
116
|
+
output({
|
|
117
|
+
validation,
|
|
118
|
+
repository: repositorySummary(repository),
|
|
119
|
+
checkouts: {
|
|
120
|
+
total: repository.checkouts.length,
|
|
121
|
+
active: repository.checkouts.filter((checkout) => !checkout.lifecycle || checkout.lifecycle === 'active').length,
|
|
122
|
+
archived: repository.checkouts.filter((checkout) => checkout.lifecycle === 'archived').length,
|
|
123
|
+
removed: repository.checkouts.filter((checkout) => checkout.lifecycle === 'removed').length,
|
|
124
|
+
},
|
|
125
|
+
}, false);
|
|
110
126
|
});
|
|
111
127
|
|
|
112
128
|
common(command.command('command')
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/** Shared synchronous setup/adoption command execution; no Runtime or Work authority. */
|
|
2
|
+
import { runProcess as runBoundedProcess } from '../../effects/process-runner';
|
|
3
|
+
|
|
4
|
+
export interface SetupExecutionStep {
|
|
5
|
+
step: string;
|
|
6
|
+
status: "ok" | "skipped" | "failed";
|
|
7
|
+
command?: string[];
|
|
8
|
+
detail?: string;
|
|
9
|
+
stdout?: string;
|
|
10
|
+
stderr?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function runSetupProcess(command: string, args: string[], cwd: string, env?: NodeJS.ProcessEnv): SetupExecutionStep {
|
|
14
|
+
const result = runBoundedProcess(command, args, { cwd, env });
|
|
15
|
+
|
|
16
|
+
return {
|
|
17
|
+
step: "",
|
|
18
|
+
status: result.ok ? "ok" : "failed",
|
|
19
|
+
command: [...result.command],
|
|
20
|
+
stdout: result.stdout,
|
|
21
|
+
stderr: result.stderr || result.error,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function withProcessEnv<T>(env: NodeJS.ProcessEnv | undefined, fn: () => T): T {
|
|
26
|
+
if (!env) return fn();
|
|
27
|
+
const previous = new Map<string, string | undefined>();
|
|
28
|
+
for (const [key, value] of Object.entries(env)) {
|
|
29
|
+
previous.set(key, process.env[key]);
|
|
30
|
+
if (value === undefined) delete process.env[key];
|
|
31
|
+
else process.env[key] = value;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
return fn();
|
|
35
|
+
} finally {
|
|
36
|
+
for (const [key, value] of previous) {
|
|
37
|
+
if (value === undefined) delete process.env[key];
|
|
38
|
+
else process.env[key] = value;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -6,7 +6,7 @@ import { getAgentJob, markAgentJobClosure, markAgentJobReviewedCompletion, recor
|
|
|
6
6
|
import type { AgentJobMeta } from '../agent-jobs/types';
|
|
7
7
|
import { cleanupIntegratedWorktree, cleanupNoChangeWorktree, integrateAgentJob, IntegrationReviewRequiredError, taskRunDiff } from '../agent-jobs/integration';
|
|
8
8
|
import { finalizeEditSession, getEditSession, revalidateEditSessionOwnership, rollbackEditSession, verifyEditSession } from '../editing/edit-session';
|
|
9
|
-
import { getMcpPolicy } from '
|
|
9
|
+
import { getMcpPolicy } from '../../../adapters/mcp/policy';
|
|
10
10
|
import { resolveRepoPreferredControllerHome } from '../repositories/controller-home';
|
|
11
11
|
import { withControllerLock } from '../repositories/locks';
|
|
12
12
|
import { listActiveLeases } from '../../runtime/resources/leases/store';
|
|
@@ -2,7 +2,7 @@ import { existsSync, readFileSync } from 'fs';
|
|
|
2
2
|
import { join } from 'path';
|
|
3
3
|
import { createHash } from 'crypto';
|
|
4
4
|
import { runProcess } from '../../effects/process-runner';
|
|
5
|
-
import { resolveMcpRepoRoot } from '
|
|
5
|
+
import { resolveMcpRepoRoot } from '../../../adapters/mcp/repo';
|
|
6
6
|
import { listControllerChecks, runControllerCheck } from './check-runner';
|
|
7
7
|
import {
|
|
8
8
|
compositeFailed,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { readFileSync } from 'fs';
|
|
2
2
|
import { posix, resolve } from 'path';
|
|
3
|
-
import type { McpPolicy } from '
|
|
3
|
+
import type { McpPolicy } from '../../../../adapters/mcp/types';
|
|
4
4
|
import { readableFile } from './known-paths';
|
|
5
5
|
|
|
6
6
|
const CONTRACT_NAMES = ['AGENTS.md', 'CLAUDE.md'] as const;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, lstatSync, readdirSync, statSync } from 'fs';
|
|
2
|
-
import { globMatches, resolveMcpPath } from '
|
|
3
|
-
import type { McpPolicy } from '
|
|
2
|
+
import { globMatches, resolveMcpPath } from '../../../../adapters/mcp/paths';
|
|
3
|
+
import type { McpPolicy } from '../../../../adapters/mcp/types';
|
|
4
4
|
|
|
5
5
|
export function looksLikeGlob(path: string): boolean { return /[*?{[]/.test(path); }
|
|
6
6
|
export function coveredByGlob(path: string, globs: string[]): boolean {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { ControllerContextImpactDomain, ControllerContextRetrievalMode } from './types';
|
|
2
2
|
|
|
3
3
|
export const DEFAULT_MAX_FILES = 8;
|
|
4
|
-
export const DEFAULT_MAX_SNIPPETS =
|
|
5
|
-
export const DEFAULT_MAX_CHARS_PER_SNIPPET =
|
|
4
|
+
export const DEFAULT_MAX_SNIPPETS = 12;
|
|
5
|
+
export const DEFAULT_MAX_CHARS_PER_SNIPPET = 1800;
|
|
6
6
|
export const DEFAULT_SEARCH_EXCLUDE_GLOBS = [
|
|
7
7
|
'.git/**', '_ops/**', '.forge/**', '.ai/harness/**', 'node_modules/**', 'dist/**', 'coverage/**', '**/*.bak',
|
|
8
8
|
] as const;
|
|
@@ -47,13 +47,20 @@ export function pathNoisePenalty(path: string, intent: string, retrievalMode: Co
|
|
|
47
47
|
export function textTokens(value: string): string[] {
|
|
48
48
|
const split = value.replace(/([a-z0-9])([A-Z])/g, '$1 $2').split(/[^\p{L}\p{N}_./:-]+/u)
|
|
49
49
|
.map((entry) => entry.trim()).filter(Boolean);
|
|
50
|
-
|
|
50
|
+
// Preserve full code needles before their broad camel-case fragments.
|
|
51
|
+
return Array.from(new Set([...codeShapedAnchors(value), ...split]
|
|
51
52
|
.map((entry) => entry.replace(/^[\'"`]+|[\'"`]+$/g, ''))
|
|
52
53
|
.filter((entry) => entry.length >= 3)
|
|
53
54
|
.filter((entry) => !STOPWORDS.has(entry.toLowerCase()))
|
|
54
55
|
.filter((entry) => !/^\d+$/.test(entry)))).slice(0, 12);
|
|
55
56
|
}
|
|
56
57
|
|
|
58
|
+
/** Split explicit multi-symbol input into independent exact needles before search. */
|
|
59
|
+
export function explicitCodeQueries(searchTerms: readonly string[] | undefined): string[] {
|
|
60
|
+
// Camel-case fragments are hints, not separately mandatory matches.
|
|
61
|
+
return Array.from(new Set((searchTerms ?? []).flatMap(codeShapedAnchors))).slice(0, 4);
|
|
62
|
+
}
|
|
63
|
+
|
|
57
64
|
/** A caller-supplied symbol or path is an exact retrieval needle, not a broad hint. */
|
|
58
65
|
export function isCodeShapedTerm(value: string): boolean {
|
|
59
66
|
const term = value.trim();
|
|
@@ -77,7 +84,7 @@ function codeShapedAnchors(value: string): string[] {
|
|
|
77
84
|
}
|
|
78
85
|
|
|
79
86
|
/**
|
|
80
|
-
*
|
|
87
|
+
* Structural providers' query cost grows materially with long natural-language
|
|
81
88
|
* prompts. Keep short intents exact, but compact long intents around concrete
|
|
82
89
|
* code anchors plus bounded semantic tokens. This affects only structural
|
|
83
90
|
* discovery; lexical search and raw-source retrieval still consume the full
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { closeSync, openSync, readSync, statSync } from 'fs';
|
|
2
2
|
import { extname, resolve } from 'path';
|
|
3
|
-
import { globMatches } from '
|
|
4
|
-
import type { McpPolicy } from '
|
|
3
|
+
import { globMatches } from '../../../../adapters/mcp/paths';
|
|
4
|
+
import type { McpPolicy } from '../../../../adapters/mcp/types';
|
|
5
5
|
import { readableFile } from './known-paths';
|
|
6
6
|
|
|
7
7
|
export const GOVERNANCE_RULES_PATH = '.ai/context/governance-rules.json';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { McpPolicy } from '
|
|
1
|
+
import type { McpPolicy } from '../../../../adapters/mcp/types';
|
|
2
2
|
import { extractTypeScriptSourceSymbolsInSidecar } from '../../../runtime/context/typescript-navigation-process';
|
|
3
|
-
import { redactMcpText } from '
|
|
3
|
+
import { redactMcpText } from '../../../../adapters/mcp/redaction';
|
|
4
4
|
import { readRepositoryRange, type RepositoryReadSession } from '../../repository/inspector';
|
|
5
5
|
|
|
6
6
|
const DEFAULT_CONTEXT_BEFORE = 12;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export type StructuralReadOperation = 'status' | 'search' | 'context' | 'impact' | 'file_dependencies';
|
|
2
|
+
export type StructuralProviderStatus = 'ready' | 'stale' | 'unavailable' | 'degraded';
|
|
3
|
+
|
|
4
|
+
export interface StructuralNodeSummary {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: string;
|
|
7
|
+
name: string;
|
|
8
|
+
qualifiedName?: string;
|
|
9
|
+
filePath: string;
|
|
10
|
+
language?: string;
|
|
11
|
+
startLine: number;
|
|
12
|
+
endLine: number;
|
|
13
|
+
signature?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface StructuralIndexMetadata {
|
|
17
|
+
initialized: boolean;
|
|
18
|
+
lastIndexedAt: number | null;
|
|
19
|
+
buildVersion: string | null;
|
|
20
|
+
extractionVersion: number | null;
|
|
21
|
+
staleEngine: boolean;
|
|
22
|
+
changedFiles: {
|
|
23
|
+
added: string[];
|
|
24
|
+
modified: string[];
|
|
25
|
+
removed: string[];
|
|
26
|
+
};
|
|
27
|
+
ignoredChangedFileCount?: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface StructuralReadRequest {
|
|
31
|
+
operation: StructuralReadOperation;
|
|
32
|
+
query?: string;
|
|
33
|
+
nodeId?: string;
|
|
34
|
+
filePath?: string;
|
|
35
|
+
limit?: number;
|
|
36
|
+
maxNodes?: number;
|
|
37
|
+
maxDepth?: number;
|
|
38
|
+
refresh?: 'if_stale';
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface StructuralReadProviderResponse {
|
|
42
|
+
schemaVersion: 1;
|
|
43
|
+
provider: 'none';
|
|
44
|
+
operation: StructuralReadOperation;
|
|
45
|
+
ok: boolean;
|
|
46
|
+
status: StructuralProviderStatus;
|
|
47
|
+
metadata?: StructuralIndexMetadata;
|
|
48
|
+
result?: Record<string, unknown>;
|
|
49
|
+
error?: {
|
|
50
|
+
code: string;
|
|
51
|
+
message: string;
|
|
52
|
+
};
|
|
53
|
+
timingsMs: {
|
|
54
|
+
total: number;
|
|
55
|
+
process?: number;
|
|
56
|
+
open?: number;
|
|
57
|
+
query?: number;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function unavailableStructuralProvider(
|
|
62
|
+
_repoRoot: string,
|
|
63
|
+
request: StructuralReadRequest,
|
|
64
|
+
): StructuralReadProviderResponse {
|
|
65
|
+
return {
|
|
66
|
+
schemaVersion: 1,
|
|
67
|
+
provider: 'none',
|
|
68
|
+
operation: request.operation,
|
|
69
|
+
ok: false,
|
|
70
|
+
status: 'unavailable',
|
|
71
|
+
error: {
|
|
72
|
+
code: 'STRUCTURAL_PROVIDER_UNAVAILABLE',
|
|
73
|
+
message: 'Integrated CodeGraph structural indexing has been decommissioned; use current raw source, lexical search, known_paths, or semantic_navigation.',
|
|
74
|
+
},
|
|
75
|
+
timingsMs: { total: 0 },
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export async function unavailableStructuralProviderAsync(
|
|
80
|
+
repoRoot: string,
|
|
81
|
+
request: StructuralReadRequest,
|
|
82
|
+
): Promise<StructuralReadProviderResponse> {
|
|
83
|
+
return unavailableStructuralProvider(repoRoot, request);
|
|
84
|
+
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { StructuralNodeSummary, StructuralReadProviderResponse } from './structural-provider';
|
|
2
2
|
|
|
3
|
-
export function structuralResult(response:
|
|
4
|
-
nodes:
|
|
5
|
-
entryPoints:
|
|
3
|
+
export function structuralResult(response: StructuralReadProviderResponse): {
|
|
4
|
+
nodes: StructuralNodeSummary[];
|
|
5
|
+
entryPoints: StructuralNodeSummary[];
|
|
6
6
|
relatedFiles: string[];
|
|
7
7
|
truncated: boolean;
|
|
8
8
|
} {
|
|
9
9
|
const result = response.result ?? {};
|
|
10
10
|
return {
|
|
11
|
-
nodes: Array.isArray(result.nodes) ? result.nodes as
|
|
12
|
-
entryPoints: Array.isArray(result.entryPoints) ? result.entryPoints as
|
|
11
|
+
nodes: Array.isArray(result.nodes) ? result.nodes as StructuralNodeSummary[] : [],
|
|
12
|
+
entryPoints: Array.isArray(result.entryPoints) ? result.entryPoints as StructuralNodeSummary[] : [],
|
|
13
13
|
relatedFiles: Array.isArray(result.relatedFiles) ? result.relatedFiles.filter((value): value is string => typeof value === 'string') : [],
|
|
14
14
|
truncated: result.truncated === true,
|
|
15
15
|
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { RepositoryReadSession } from '../../repository/inspector';
|
|
2
|
-
import type { CodeGraphIndexMetadata, CodeGraphNodeSummary, CodeGraphReadProviderResponse } from '../../../runtime/context/codegraph-read-provider';
|
|
3
|
-
import type { queryCodeGraphReadProvider, queryCodeGraphReadProviderAsync } from '../../../runtime/context/codegraph-read-provider';
|
|
4
2
|
import type { MaterializedSourceSnippet } from './source-materializer';
|
|
3
|
+
import type { StructuralIndexMetadata, StructuralNodeSummary, StructuralReadProviderResponse, unavailableStructuralProvider, unavailableStructuralProviderAsync } from './structural-provider';
|
|
5
4
|
|
|
6
5
|
export const CONTEXT_PACK_SCHEMA_VERSION = 11;
|
|
7
6
|
export type StructuralContextMode = 'off' | 'auto' | 'required';
|
|
@@ -37,8 +36,8 @@ export interface ControllerContextPackOptions {
|
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
export interface ControllerContextPackDependencies {
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
queryStructural?: typeof unavailableStructuralProvider;
|
|
40
|
+
queryStructuralAsync?: typeof unavailableStructuralProviderAsync;
|
|
42
41
|
}
|
|
43
42
|
|
|
44
43
|
export type ControllerContextPackSnippet = MaterializedSourceSnippet;
|
|
@@ -186,7 +185,7 @@ export interface ControllerContextPackProjection {
|
|
|
186
185
|
};
|
|
187
186
|
};
|
|
188
187
|
structuralContext: {
|
|
189
|
-
provider: '
|
|
188
|
+
provider: 'none';
|
|
190
189
|
requestedMode: StructuralContextMode;
|
|
191
190
|
status: 'disabled' | 'ready' | 'stale' | 'unavailable' | 'degraded';
|
|
192
191
|
requiredSatisfied: boolean;
|
|
@@ -194,11 +193,11 @@ export interface ControllerContextPackProjection {
|
|
|
194
193
|
overlayChangedFiles: string[];
|
|
195
194
|
baselineRevisionMatches: boolean;
|
|
196
195
|
query?: string;
|
|
197
|
-
entryPoints: Array<Pick<
|
|
196
|
+
entryPoints: Array<Pick<StructuralNodeSummary, 'id' | 'kind' | 'name' | 'filePath' | 'startLine' | 'endLine'>>;
|
|
198
197
|
relatedFiles: string[];
|
|
199
|
-
metadata?: Pick<
|
|
198
|
+
metadata?: Pick<StructuralIndexMetadata, 'initialized' | 'lastIndexedAt' | 'buildVersion' | 'extractionVersion' | 'staleEngine' | 'changedFiles' | 'ignoredChangedFileCount'>;
|
|
200
199
|
fallbackReason?: string;
|
|
201
|
-
timingsMs?:
|
|
200
|
+
timingsMs?: StructuralReadProviderResponse['timingsMs'];
|
|
202
201
|
truncated: boolean;
|
|
203
202
|
};
|
|
204
203
|
impactContext: {
|
|
@@ -212,7 +211,7 @@ export interface ControllerContextPackProjection {
|
|
|
212
211
|
relevantChecks: string[];
|
|
213
212
|
architectureContracts: string[];
|
|
214
213
|
coverageGaps: string[];
|
|
215
|
-
relationSources: Array<'
|
|
214
|
+
relationSources: Array<'structural' | 'lexical' | 'forge_checks'>;
|
|
216
215
|
freshness: {
|
|
217
216
|
structuralStatus: 'disabled' | 'ready' | 'stale' | 'unavailable' | 'degraded';
|
|
218
217
|
lastIndexedAt?: number | null;
|