@aiwg/cli 2026.9.20 → 2026.9.21
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/agentic/code/providers/capability-matrix.yaml +58 -6
- package/agentic/code/providers/model-capabilities.v1.json +34 -0
- package/agentic/code/providers/model-catalog.v1.json +55 -13
- package/bin/aiwg.mjs +2 -0
- package/dist/src/api/index.d.ts +1 -0
- package/dist/src/api/index.js +1 -0
- package/dist/src/artifacts/enrichment/cli.js +1 -1
- package/dist/src/artifacts/views/cli.js +1 -1
- package/dist/src/audit/operator-decision.js +10 -0
- package/dist/src/auth/credential-store.js +127 -27
- package/dist/src/catalog/builtin-models.json +272 -40
- package/dist/src/catalog/cli.js +1 -1
- package/dist/src/catalog/cli.mjs +1 -1
- package/dist/src/cli/handlers/effect.js +872 -0
- package/dist/src/cli/handlers/help.js +2 -0
- package/dist/src/cli/handlers/index.js +4 -2
- package/dist/src/cli/handlers/models.js +41 -10
- package/dist/src/cli/handlers/ralph.js +1 -1
- package/dist/src/cli/handlers/sessions.js +113 -37
- package/dist/src/cli/handlers/subcommands.js +31 -0
- package/dist/src/cli/handlers/use.js +46 -9
- package/dist/src/cli/handlers/utilities.js +10 -0
- package/dist/src/cli/handlers/workspace.js +3 -1
- package/dist/src/cli/scope-resolver.js +112 -9
- package/dist/src/cli/services/deployment-verification.js +5 -0
- package/dist/src/config/aiwg-config.js +3 -0
- package/dist/src/decision/acceptance-rollout.js +93 -0
- package/dist/src/decision/acceptance.js +175 -0
- package/dist/src/decision/adapters/jev.js +234 -13
- package/dist/src/decision/adapters/llm-subagent.js +60 -12
- package/dist/src/decision/admission.js +550 -0
- package/dist/src/decision/batch-benchmark.js +47 -0
- package/dist/src/decision/batch-receipts/accounting.js +75 -0
- package/dist/src/decision/batch-receipts/export.js +40 -0
- package/dist/src/decision/batch-receipts/index.js +9 -0
- package/dist/src/decision/batch-receipts/protection.js +40 -0
- package/dist/src/decision/batch-receipts/receipt.js +44 -0
- package/dist/src/decision/batch-receipts/result-store.js +341 -0
- package/dist/src/decision/batch-receipts/store.js +362 -0
- package/dist/src/decision/batch-receipts/types.js +2 -0
- package/dist/src/decision/batch-receipts/validate.js +127 -0
- package/dist/src/decision/batch.js +68 -0
- package/dist/src/decision/calibration/index.js +4 -0
- package/dist/src/decision/calibration/receipts.js +130 -0
- package/dist/src/decision/calibration/registry.js +258 -0
- package/dist/src/decision/calibration/types.js +2 -0
- package/dist/src/decision/compile-cache/benchmark.js +62 -0
- package/dist/src/decision/compile-cache/compatibility.js +65 -0
- package/dist/src/decision/compile-cache/file-store.js +280 -0
- package/dist/src/decision/compile-cache/identity.js +26 -0
- package/dist/src/decision/compile-cache/index.js +9 -0
- package/dist/src/decision/compile-cache/prefix.js +21 -0
- package/dist/src/decision/compile-cache/records.js +86 -0
- package/dist/src/decision/compile-cache/runtime.js +68 -0
- package/dist/src/decision/compile-cache/store.js +108 -0
- package/dist/src/decision/compile-cache/types.js +2 -0
- package/dist/src/decision/context-plan.js +234 -0
- package/dist/src/decision/context-qualification.js +60 -0
- package/dist/src/decision/ensemble/aggregate.js +215 -0
- package/dist/src/decision/ensemble/contract.js +316 -0
- package/dist/src/decision/ensemble/drift.js +51 -0
- package/dist/src/decision/ensemble/index.js +6 -0
- package/dist/src/decision/ensemble/report.js +71 -0
- package/dist/src/decision/ensemble/types.js +2 -0
- package/dist/src/decision/evaluate.js +1024 -78
- package/dist/src/decision/file-lifecycle-store.js +168 -0
- package/dist/src/decision/graph-beam.js +40 -0
- package/dist/src/decision/graph-budget.js +110 -0
- package/dist/src/decision/graph-decision-bridge.js +93 -0
- package/dist/src/decision/graph-evidence.js +123 -0
- package/dist/src/decision/graph-flow-adapter.js +56 -0
- package/dist/src/decision/graph-flow.js +105 -0
- package/dist/src/decision/graph-parallel.js +79 -0
- package/dist/src/decision/graph-patterns.js +20 -0
- package/dist/src/decision/graph-run-store.js +66 -0
- package/dist/src/decision/graph-run.js +166 -0
- package/dist/src/decision/graph-skill-bridge.js +91 -0
- package/dist/src/decision/graph-templates.js +56 -0
- package/dist/src/decision/graph.js +115 -0
- package/dist/src/decision/index.js +35 -0
- package/dist/src/decision/job-accounting.js +93 -0
- package/dist/src/decision/job-contract.js +186 -0
- package/dist/src/decision/job-effects.js +95 -0
- package/dist/src/decision/job-evaluate.js +80 -0
- package/dist/src/decision/job-gateway.js +121 -0
- package/dist/src/decision/job-http.js +194 -0
- package/dist/src/decision/job-payload-store.js +258 -0
- package/dist/src/decision/job-poll-limiter.js +92 -0
- package/dist/src/decision/job-quota.js +158 -0
- package/dist/src/decision/job-runtime.js +240 -0
- package/dist/src/decision/job-scheduler.js +26 -0
- package/dist/src/decision/job-service.js +117 -0
- package/dist/src/decision/job-store.js +264 -0
- package/dist/src/decision/job-worker.js +141 -0
- package/dist/src/decision/lifecycle.js +148 -0
- package/dist/src/decision/patterns/artifacts.js +173 -0
- package/dist/src/decision/patterns/catalog.js +108 -0
- package/dist/src/decision/patterns/durable-review.js +237 -0
- package/dist/src/decision/patterns/index.js +8 -0
- package/dist/src/decision/patterns/playground.js +401 -0
- package/dist/src/decision/patterns/recorded.js +43 -0
- package/dist/src/decision/patterns/specs.js +174 -0
- package/dist/src/decision/patterns/types.js +2 -0
- package/dist/src/decision/portable-secrets.js +53 -0
- package/dist/src/decision/projection.js +210 -0
- package/dist/src/decision/qualification/capture.js +67 -0
- package/dist/src/decision/qualification/drift.js +68 -0
- package/dist/src/decision/qualification/gate-evidence.js +172 -0
- package/dist/src/decision/qualification/gates.js +83 -0
- package/dist/src/decision/qualification/index.js +12 -0
- package/dist/src/decision/qualification/load.js +275 -0
- package/dist/src/decision/qualification/manifest.js +37 -0
- package/dist/src/decision/qualification/privacy.js +41 -0
- package/dist/src/decision/qualification/quality.js +213 -0
- package/dist/src/decision/qualification/release.js +116 -0
- package/dist/src/decision/qualification/runner.js +408 -0
- package/dist/src/decision/qualification/types.js +2 -0
- package/dist/src/decision/receipts.js +30 -7
- package/dist/src/decision/result-cache/index.js +6 -0
- package/dist/src/decision/result-cache/integrity.js +28 -0
- package/dist/src/decision/result-cache/key.js +28 -0
- package/dist/src/decision/result-cache/service.js +92 -0
- package/dist/src/decision/result-cache/store.js +327 -0
- package/dist/src/decision/result-cache/types.js +3 -0
- package/dist/src/decision/review/authorization.js +110 -0
- package/dist/src/decision/review/effect-ledger-adapter.js +321 -0
- package/dist/src/decision/review/index.js +12 -0
- package/dist/src/decision/review/migrate.js +34 -0
- package/dist/src/decision/review/operator-audit.js +59 -0
- package/dist/src/decision/review/recovery-adapters.js +252 -0
- package/dist/src/decision/review/recovery.js +33 -0
- package/dist/src/decision/review/service.js +498 -0
- package/dist/src/decision/review/store.js +219 -0
- package/dist/src/decision/review/types.js +2 -0
- package/dist/src/decision/review/validate.js +205 -0
- package/dist/src/decision/scheduler.js +115 -0
- package/dist/src/decision/telemetry/context.js +42 -0
- package/dist/src/decision/telemetry/debug-sidecar.js +152 -0
- package/dist/src/decision/telemetry/exporter.js +77 -0
- package/dist/src/decision/telemetry/file-debug-backend.js +112 -0
- package/dist/src/decision/telemetry/index.js +13 -0
- package/dist/src/decision/telemetry/mapping.js +146 -0
- package/dist/src/decision/telemetry/metrics.js +164 -0
- package/dist/src/decision/telemetry/otlp-http.js +183 -0
- package/dist/src/decision/telemetry/redaction.js +93 -0
- package/dist/src/decision/telemetry/retention.js +109 -0
- package/dist/src/decision/telemetry/runtime.js +310 -0
- package/dist/src/decision/telemetry/trace.js +158 -0
- package/dist/src/decision/telemetry/types.js +3 -0
- package/dist/src/decision/validate.js +135 -5
- package/dist/src/effects/checkpoint-sinks.js +94 -0
- package/dist/src/effects/checkpoint.js +76 -0
- package/dist/src/effects/decision-links.js +54 -0
- package/dist/src/effects/errors.js +48 -0
- package/dist/src/effects/identity.js +178 -0
- package/dist/src/effects/index.js +25 -0
- package/dist/src/effects/keyring.js +160 -0
- package/dist/src/effects/keys.js +130 -0
- package/dist/src/effects/ledger.js +435 -0
- package/dist/src/effects/lifecycle.js +110 -0
- package/dist/src/effects/lock-recovery.js +269 -0
- package/dist/src/effects/reader.js +103 -0
- package/dist/src/effects/records.js +114 -0
- package/dist/src/effects/redaction.js +51 -0
- package/dist/src/effects/schema.js +73 -0
- package/dist/src/effects/store.js +239 -0
- package/dist/src/effects/types.js +49 -0
- package/dist/src/effects/verifiers/decision.js +168 -0
- package/dist/src/effects/verifiers/file.js +106 -0
- package/dist/src/effects/verifiers/git.js +206 -0
- package/dist/src/effects/verifiers/index.js +90 -0
- package/dist/src/effects/verifiers/registry.js +148 -0
- package/dist/src/effects/verifiers/review.js +123 -0
- package/dist/src/effects/verifiers/tracker.js +299 -0
- package/dist/src/effects/verifiers/types.js +21 -0
- package/dist/src/effects/verify.js +295 -0
- package/dist/src/evidence/bundle.js +2 -0
- package/dist/src/extensions/commands/definitions.js +28 -0
- package/dist/src/extensions/manifest.js +1 -0
- package/dist/src/marketplace/provenance.js +25 -27
- package/dist/src/mcp/cli.mjs +11 -1
- package/dist/src/mcp/grok-build-config.mjs +189 -0
- package/dist/src/mcp/registry.js +21 -1
- package/dist/src/mcp/registry.mjs +20 -1
- package/dist/src/models/grok-build-models.js +356 -0
- package/dist/src/models/index.js +1 -0
- package/dist/src/models/model-capabilities.v1.json +34 -0
- package/dist/src/models/model-catalog.v1.json +55 -13
- package/dist/src/models/model-discovery.js +41 -5
- package/dist/src/models/provider-policy.js +3 -2
- package/dist/src/plugin/skill-command-translator.js +1 -0
- package/dist/src/providers/capability-matrix.yaml +58 -6
- package/dist/src/providers/grok-build-acp.js +192 -0
- package/dist/src/providers/grok-build-dispatch.js +251 -0
- package/dist/src/providers/grok-build-headless.js +170 -0
- package/dist/src/providers/muse-paths.js +105 -0
- package/dist/src/providers/provider-definitions.js +93 -7
- package/dist/src/providers/provider-definitions.mjs +21 -1
- package/dist/src/providers/provider-inventory.js +3 -0
- package/dist/src/security/artifact-attestation.js +4 -8
- package/dist/src/security/signing.js +119 -0
- package/dist/src/sessions/adapters/grok-build.js +187 -0
- package/dist/src/sessions/adapters/muse.js +412 -0
- package/dist/src/sessions/contracts.js +1 -1
- package/dist/src/sessions/grok-build-cli.js +196 -0
- package/dist/src/sessions/index.js +3 -0
- package/dist/src/sessions/workspace-discovery.js +9 -5
- package/dist/src/skills/deployer.js +33 -5
- package/dist/src/smiths/context-pipeline/claude-hook.js +2 -0
- package/dist/src/smiths/context-pipeline/context-file-safety.js +18 -0
- package/dist/src/smiths/context-pipeline/finalization.js +1 -32
- package/dist/src/smiths/context-pipeline/generator.js +12 -0
- package/dist/src/smiths/context-pipeline/index.js +1 -1
- package/dist/src/smiths/context-pipeline/managed-hook.js +2 -0
- package/dist/src/smiths/context-pipeline/muse-bridge.js +50 -0
- package/dist/src/smiths/context-pipeline/provider-policy.js +5 -0
- package/dist/src/smiths/context-pipeline/workspace-context.js +22 -16
- package/dist/src/smiths/hook-bridge/grok-build-translator.js +64 -0
- package/dist/src/smiths/hook-bridge/index.js +3 -0
- package/dist/src/smiths/hook-bridge/shim.js +2 -0
- package/dist/src/smiths/hook-bridge/types.js +5 -0
- package/dist/src/smiths/skillsmith/collision-detector.js +1 -0
- package/dist/src/storage/protected-files.js +102 -0
- package/dist/src/tracker/forge-http.js +371 -0
- package/dist/src/tracker/project-inputs.js +41 -0
- package/package.json +2 -1
- package/schemas/decision/BatchReceipt.v1.schema.json +50 -0
- package/schemas/decision/CalibrationArtifact.v1.schema.json +76 -0
- package/schemas/decision/CalibrationCompatibility.v1.schema.json +18 -0
- package/schemas/decision/CalibrationGovernanceReceipt.v1.schema.json +44 -0
- package/schemas/decision/DecisionAdmissionEvidence.v1.schema.json +43 -0
- package/schemas/decision/DecisionBinding.schema.json +309 -0
- package/schemas/decision/DecisionBinding.v1alpha2.schema.json +369 -0
- package/schemas/decision/DecisionCacheTelemetry.v1.schema.json +20 -0
- package/schemas/decision/DecisionChampionChallenger.v1.schema.json +100 -0
- package/schemas/decision/DecisionCompileCacheEntry.v1.schema.json +35 -0
- package/schemas/decision/DecisionCompileCacheIdentity.v1.schema.json +26 -0
- package/schemas/decision/DecisionCompileCacheTombstone.v1.schema.json +31 -0
- package/schemas/decision/DecisionContextEvidence.v1.schema.json +136 -0
- package/schemas/decision/DecisionDefinition.schema.json +159 -0
- package/schemas/decision/DecisionDefinition.v1alpha2.schema.json +203 -0
- package/schemas/decision/DecisionDriftResponse.v1.schema.json +55 -0
- package/schemas/decision/DecisionEnsembleAggregate.v1.schema.json +86 -0
- package/schemas/decision/DecisionEnsembleIntegrityReport.v1.schema.json +64 -0
- package/schemas/decision/DecisionEnsemblePolicy.v1.schema.json +130 -0
- package/schemas/decision/DecisionGraph.v1.schema.json +77 -0
- package/schemas/decision/DecisionJob.v1.schema.json +71 -0
- package/schemas/decision/DecisionLifecyclePolicy.v1.schema.json +52 -0
- package/schemas/decision/DecisionProjectionPolicy.v1.schema.json +65 -0
- package/schemas/decision/DecisionProviderPrefixCompatibility.v1.schema.json +45 -0
- package/schemas/decision/DecisionProviderPrefixEvidence.v1.schema.json +17 -0
- package/schemas/decision/DecisionProviderPrefixIdentity.v1.schema.json +36 -0
- package/schemas/decision/DecisionResult.schema.json +524 -0
- package/schemas/decision/DecisionResult.v1alpha2.schema.json +619 -0
- package/schemas/decision/DecisionResultCacheEntry.v1.schema.json +53 -0
- package/schemas/decision/DecisionReview.schema.json +29 -0
- package/schemas/decision/DecisionRuleset.schema.json +313 -0
- package/schemas/decision/DecisionRuleset.v1alpha2.schema.json +313 -0
- package/schemas/decision/DecisionTelemetryTrace.v1.schema.json +95 -0
- package/schemas/decision/RulesetResult.schema.json +721 -0
- package/schemas/decision/RulesetResult.v1alpha2.schema.json +891 -0
- package/schemas/security/pr-evidence-receipt.v1.schema.json +77 -0
- package/schemas/security/threat-assessment-report.v1.schema.json +71 -1
- package/tools/agents/deploy-agents.mjs +21 -6
- package/tools/agents/providers/base.mjs +7 -4
- package/tools/agents/providers/codex.mjs +1 -1
- package/tools/agents/providers/grok-build.d.mts +7 -0
- package/tools/agents/providers/grok-build.mjs +249 -9
- package/tools/agents/providers/model-role.mjs +6 -3
- package/tools/agents/providers/muse-hooks.mjs +785 -0
- package/tools/agents/providers/muse-paths.mjs +112 -0
- package/tools/agents/providers/muse.mjs +336 -0
|
@@ -117,6 +117,8 @@ function displayHelp() {
|
|
|
117
117
|
helpGroup('EVIDENCE', [
|
|
118
118
|
['evidence export --output <dir>', 'Package portable activity, report, source, eval, and provenance evidence'],
|
|
119
119
|
['evidence verify <bundle>', 'Verify every member hash and the bundle checkpoint'],
|
|
120
|
+
['effect record|lookup|reconcile', 'Record, look up or reconcile a side effect in the signed effect ledger'],
|
|
121
|
+
['effect verify|checkpoint|keys', 'Verify the effect ledger, checkpoint it, or manage its signing key'],
|
|
120
122
|
]);
|
|
121
123
|
helpGroup('SCAFFOLDING', [
|
|
122
124
|
['new-bundle <name>', 'Create project-local bundle (--type extension|addon|framework|plugin|provider, --starter skill|rule|agent|minimal, --dry-run)'],
|
|
@@ -31,6 +31,7 @@ import { refreshHandler } from './refresh.js';
|
|
|
31
31
|
import { regenerateHandler, regenerateHandlers } from './regenerate.js';
|
|
32
32
|
import { workspaceContextHandler, workspaceContextHandlers } from './workspace-context.js';
|
|
33
33
|
import { artifactsHandler, artifactsHandlers } from './artifacts.js';
|
|
34
|
+
import { effectHandler, effectHandlers } from './effect.js';
|
|
34
35
|
import { mcHandler, mcHandlers } from './mc.js';
|
|
35
36
|
import { missionHandlers } from './mission.js';
|
|
36
37
|
import { sdlcAccelerateHandler } from './sdlc-accelerate.js';
|
|
@@ -83,7 +84,7 @@ newBundleHandler, quickrefHandler, newProjectHandler, sessionHandler, sessionsHa
|
|
|
83
84
|
// Workspace
|
|
84
85
|
statusHandler, wizardHandler, migrateWorkspaceHandler, rollbackWorkspaceHandler,
|
|
85
86
|
// Subcommands
|
|
86
|
-
mcpHandler, catalogHandler, modelsHandler, versionsHandler, indexHandler, artifactsHandler, corpusHandler, discoverHandler, showHandler, featuresHandler, skillsHandler, configHandler, opsHandler, storageHandler, activityLogHandler, commandLogHandler, skillUsageHandler, kbHandler, memoryHandler, reflectionsHandler, provenanceHandler, researchStoreHandler, researchQueryHandler, runtimeInfoHandler, agentcardHandler, uhpHandler,
|
|
87
|
+
mcpHandler, catalogHandler, modelsHandler, versionsHandler, indexHandler, artifactsHandler, effectHandler, corpusHandler, discoverHandler, showHandler, featuresHandler, skillsHandler, configHandler, opsHandler, storageHandler, activityLogHandler, commandLogHandler, skillUsageHandler, kbHandler, memoryHandler, reflectionsHandler, provenanceHandler, researchStoreHandler, researchQueryHandler, runtimeInfoHandler, agentcardHandler, uhpHandler,
|
|
87
88
|
// Agentic Tools (RLM)
|
|
88
89
|
chunkHandler, fanoutHandler, rlmPrepHandler, rlmSearchHandler, rlmStatusCliHandler, rlmCacheHandler,
|
|
89
90
|
// Utilities
|
|
@@ -119,7 +120,7 @@ repoAccessHandler,
|
|
|
119
120
|
// Lint
|
|
120
121
|
lintHandler, };
|
|
121
122
|
// Re-export handler arrays
|
|
122
|
-
export { workspaceHandlers, utilityHandlers, scaffoldingHandlers, ralphHandlers, subcommandHandlers, mcHandlers, missionHandlers, teamHandlers, stewardHandlers, regenerateHandlers, workspaceContextHandlers, artifactsHandlers, daemonHandlers, sandboxHandlers, repoAccessHandlers, };
|
|
123
|
+
export { workspaceHandlers, utilityHandlers, scaffoldingHandlers, ralphHandlers, subcommandHandlers, mcHandlers, missionHandlers, teamHandlers, stewardHandlers, regenerateHandlers, workspaceContextHandlers, artifactsHandlers, effectHandlers, daemonHandlers, sandboxHandlers, repoAccessHandlers, };
|
|
123
124
|
/**
|
|
124
125
|
* All registered command handlers
|
|
125
126
|
*
|
|
@@ -177,6 +178,7 @@ export const allHandlers = [
|
|
|
177
178
|
versionsHandler,
|
|
178
179
|
indexHandler,
|
|
179
180
|
artifactsHandler,
|
|
181
|
+
effectHandler,
|
|
180
182
|
corpusHandler,
|
|
181
183
|
discoverHandler,
|
|
182
184
|
showHandler,
|
|
@@ -8,9 +8,10 @@ import path from 'node:path';
|
|
|
8
8
|
import { glob } from 'glob';
|
|
9
9
|
import { load as loadYaml } from 'js-yaml';
|
|
10
10
|
import { compileModelPolicy, validateCanonicalModelPolicy, validateUserProjectModelConfig, } from '../../models/provider-policy.js';
|
|
11
|
+
import { resolveGrokBuildRoleModel } from '../../models/grok-build-models.js';
|
|
11
12
|
const TIERS = new Set(['economy', 'standard', 'premium', 'max-quality']);
|
|
12
13
|
const PROVIDERS = new Set([
|
|
13
|
-
'antigravity', 'claude', 'codex', 'copilot', 'cursor', 'deepseek-harness', 'factory', 'hermes',
|
|
14
|
+
'antigravity', 'claude', 'codex', 'copilot', 'cursor', 'deepseek-harness', 'factory', 'grok-build', 'grokbot', 'hermes',
|
|
14
15
|
'opencode', 'openclaw', 'openhuman', 'omp', 'pi', 'warp', 'windsurf',
|
|
15
16
|
]);
|
|
16
17
|
function parseArgs(args) {
|
|
@@ -169,18 +170,25 @@ async function updateJson(file, mutate, dryRun) {
|
|
|
169
170
|
await atomicWrite(file, content);
|
|
170
171
|
return { file, beforeWrite: value, dryRun };
|
|
171
172
|
}
|
|
172
|
-
async function effectiveCatalog(ctx, target, allowNetwork, parsed) {
|
|
173
|
+
async function effectiveCatalog(ctx, target, allowNetwork, parsed, provider) {
|
|
173
174
|
const { collectProviderInventory } = await import('../../providers/provider-inventory.js');
|
|
174
175
|
const { resolveDynamicModelCatalog } = await import('../../models/model-discovery.js');
|
|
175
176
|
const inventory = await collectProviderInventory(target);
|
|
176
177
|
const aiwgRoot = await fs.access(path.join(ctx.frameworkRoot, 'agentic/code/providers/model-catalog.v1.json'))
|
|
177
178
|
.then(() => ctx.frameworkRoot)
|
|
178
179
|
.catch(() => process.cwd());
|
|
180
|
+
const nativeDiscoverers = provider === 'grok-build' ? {
|
|
181
|
+
'grok-build': async () => {
|
|
182
|
+
const { discoverGrokBuildModels } = await import('../../models/grok-build-models.js');
|
|
183
|
+
return discoverGrokBuildModels({ cwd: target, env: process.env });
|
|
184
|
+
},
|
|
185
|
+
} : undefined;
|
|
179
186
|
return resolveDynamicModelCatalog({
|
|
180
187
|
aiwgRoot,
|
|
181
188
|
inventory,
|
|
182
189
|
allowNetwork,
|
|
183
190
|
forceRefresh: allowNetwork,
|
|
191
|
+
...(nativeDiscoverers ? { nativeDiscoverers } : {}),
|
|
184
192
|
...(flagString(parsed, 'url') ? { remoteUrl: flagString(parsed, 'url') } : {}),
|
|
185
193
|
});
|
|
186
194
|
}
|
|
@@ -228,7 +236,7 @@ async function execute(ctx) {
|
|
|
228
236
|
}
|
|
229
237
|
if (parsed.subcommand === 'sources' || parsed.subcommand === 'refresh') {
|
|
230
238
|
const { diffModelCatalog } = await import('../../models/model-discovery.js');
|
|
231
|
-
const catalog = await effectiveCatalog(ctx, target, parsed.subcommand === 'refresh', parsed);
|
|
239
|
+
const catalog = await effectiveCatalog(ctx, target, parsed.subcommand === 'refresh', parsed, provider);
|
|
232
240
|
if (parsed.flags.has('drift')) {
|
|
233
241
|
const staticCatalog = JSON.parse(await fs.readFile(path.join(ctx.frameworkRoot, 'agentic/code/providers/model-catalog.v1.json'), 'utf8'));
|
|
234
242
|
print({ catalog, drift: diffModelCatalog(staticCatalog, catalog) }, json);
|
|
@@ -259,15 +267,38 @@ async function execute(ctx) {
|
|
|
259
267
|
return { exitCode: 0 };
|
|
260
268
|
}
|
|
261
269
|
if (parsed.subcommand === 'audit' || parsed.subcommand === 'resolve') {
|
|
262
|
-
const catalog = await effectiveCatalog(ctx, target, false, parsed);
|
|
270
|
+
const catalog = await effectiveCatalog(ctx, target, false, parsed, provider);
|
|
263
271
|
const catalogSource = catalog.discovery?.source ?? 'static';
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
272
|
+
let roleMappings = {};
|
|
273
|
+
if (provider === 'grok-build') {
|
|
274
|
+
try {
|
|
275
|
+
const projectConfig = JSON.parse(await fs.readFile(path.join(target, 'models.json'), 'utf8'));
|
|
276
|
+
const candidate = projectConfig?.providers?.['grok-build'];
|
|
277
|
+
if (candidate && typeof candidate === 'object')
|
|
278
|
+
roleMappings = candidate;
|
|
279
|
+
}
|
|
280
|
+
catch { /* optional project policy */ }
|
|
281
|
+
}
|
|
282
|
+
const output = artifacts.map(item => {
|
|
283
|
+
const base = {
|
|
284
|
+
...resolved(item, provider, catalog),
|
|
285
|
+
catalogSource,
|
|
286
|
+
catalogFetchedAt: catalog.discovery?.fetchedAt ?? null,
|
|
287
|
+
};
|
|
288
|
+
if (provider !== 'grok-build')
|
|
289
|
+
return base;
|
|
290
|
+
const discovery = catalog.discovery?.providers['grok-build'];
|
|
291
|
+
if (!discovery)
|
|
292
|
+
return base;
|
|
293
|
+
const providerResolution = resolveGrokBuildRoleModel(discovery, base.policy.role, roleMappings, flagString(parsed, 'model'));
|
|
294
|
+
return { ...base,
|
|
295
|
+
compiled: { ...base.compiled, effectiveModel: providerResolution.model, fields: {},
|
|
296
|
+
source: 'inheritance' },
|
|
297
|
+
providerPolicy: discovery.policy, providerResolution };
|
|
298
|
+
});
|
|
269
299
|
print(output, json);
|
|
270
|
-
return { exitCode: output.some(item => item.compiled.diagnostics.some(d => d.severity === 'error')
|
|
300
|
+
return { exitCode: output.some(item => item.compiled.diagnostics.some(d => d.severity === 'error')
|
|
301
|
+
|| ('providerResolution' in item && item.providerResolution?.source === 'unresolved')) ? 2 : 0 };
|
|
271
302
|
}
|
|
272
303
|
if (parsed.subcommand === 'validate') {
|
|
273
304
|
const invalid = artifacts.filter(item => !validateCanonicalModelPolicy({
|
|
@@ -261,7 +261,7 @@ ARGUMENTS:
|
|
|
261
261
|
OPTIONS:
|
|
262
262
|
-c, --completion <str> Completion criteria (required)
|
|
263
263
|
--max-iterations <n> Maximum iterations (default: 5)
|
|
264
|
-
--model <model> Claude model (default: claude-sonnet-
|
|
264
|
+
--model <model> Claude model (default: claude-sonnet-5)
|
|
265
265
|
--budget <usd> Budget per iteration in USD (default: 5.0)
|
|
266
266
|
--timeout <min> Timeout per iteration in minutes (default: 60)
|
|
267
267
|
|
|
@@ -2,7 +2,7 @@ import { existsSync, linkSync, mkdirSync, readFileSync, realpathSync, renameSync
|
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { basename, dirname, isAbsolute, join, resolve, } from 'node:path';
|
|
4
4
|
import { pathToFileURL } from 'node:url';
|
|
5
|
-
import { CLAUDE_ADAPTER_VERSION, ClaudeSessionAdapter, CODEX_ADAPTER_VERSION, CodexSessionAdapter, COPILOT_ADAPTER_VERSION, CopilotSessionAdapter, CURSOR_ADAPTER_VERSION, CursorSessionAdapter, FACTORY_ADAPTER_VERSION, FactorySessionAdapter, HERMES_ADAPTER_VERSION, HermesSessionAdapter, OPENCODE_ADAPTER_VERSION, OpenCodeSessionAdapter, OPENCLAW_ADAPTER_VERSION, OpenClawSessionAdapter, OPENHUMAN_ADAPTER_VERSION, OpenHumanSessionAdapter, GROKBOT_ADAPTER_VERSION, GrokbotSessionAdapter, PI_ADAPTER_VERSION, PiSessionAdapter, DEEPSEEK_HARNESS_ADAPTER_VERSION, DeepSeekHarnessSessionAdapter, OmpSessionAdapter, OMP_ADAPTER_VERSION, WARP_ADAPTER_VERSION, WarpSessionAdapter, DEVIN_DESKTOP_ADAPTER_VERSION, DevinDesktopSessionAdapter, CandidateExtractionService, GENERIC_ADAPTER_VERSION, GenericSessionInterchangeAdapter, IncrementalSessionImporter, ImportLeaseContentionError, FilesystemMemoryDestination, FilesystemPromotionDispositionCoordinator, MemoryPromotionGateway, SESSION_CONTRACT_VERSION, SESSION_PROVIDER_IDS, SessionContractError, SessionRepository, SessionSourceSchema, StructuralCandidateExtractor, resolveMemoryConsumerManifest, assertSessionProviderId, acquireImportLease, defaultDiscoveryManifestPath, discoverWorkspaceHistories, deriveSessionTimeline, importDiscoveryManifest, previewDiscoveryImport, publicDiscoveryManifest, readDiscoveryManifest, redactSourceLocator, sha256, parseTimelineGap, writeDiscoveryManifest, buildSessionExportPlan, reverifySessionExportPlan, buildSessionAiwgFortemiIndexExport, recoverAiwgFortemiIndexFromFullV1Shard, embedAttachmentsInFullV1Shard, recoverEmbeddedAttachments, SESSION_EXPORT_PLAN_SCHEMA_VERSION, } from '../../sessions/index.js';
|
|
5
|
+
import { CLAUDE_ADAPTER_VERSION, ClaudeSessionAdapter, CODEX_ADAPTER_VERSION, CodexSessionAdapter, COPILOT_ADAPTER_VERSION, CopilotSessionAdapter, CURSOR_ADAPTER_VERSION, CursorSessionAdapter, FACTORY_ADAPTER_VERSION, FactorySessionAdapter, HERMES_ADAPTER_VERSION, HermesSessionAdapter, OPENCODE_ADAPTER_VERSION, OpenCodeSessionAdapter, OPENCLAW_ADAPTER_VERSION, OpenClawSessionAdapter, OPENHUMAN_ADAPTER_VERSION, OpenHumanSessionAdapter, GROKBOT_ADAPTER_VERSION, GrokbotSessionAdapter, GROK_BUILD_ADAPTER_VERSION, GROK_BUILD_CLI_EXPORT_LOCATOR_CLASS, GrokBuildSessionAdapter, grokBuildList, grokBuildSearch, grokBuildExport, grokHeadlessSessionIdFromFile, MUSE_ADAPTER_VERSION, MuseSessionAdapter, PI_ADAPTER_VERSION, PiSessionAdapter, DEEPSEEK_HARNESS_ADAPTER_VERSION, DeepSeekHarnessSessionAdapter, OmpSessionAdapter, OMP_ADAPTER_VERSION, WARP_ADAPTER_VERSION, WarpSessionAdapter, DEVIN_DESKTOP_ADAPTER_VERSION, DevinDesktopSessionAdapter, CandidateExtractionService, GENERIC_ADAPTER_VERSION, GenericSessionInterchangeAdapter, IncrementalSessionImporter, ImportLeaseContentionError, FilesystemMemoryDestination, FilesystemPromotionDispositionCoordinator, MemoryPromotionGateway, SESSION_CONTRACT_VERSION, SESSION_PROVIDER_IDS, SessionContractError, SessionRepository, SessionSourceSchema, StructuralCandidateExtractor, resolveMemoryConsumerManifest, assertSessionProviderId, acquireImportLease, defaultDiscoveryManifestPath, discoverWorkspaceHistories, deriveSessionTimeline, importDiscoveryManifest, previewDiscoveryImport, publicDiscoveryManifest, readDiscoveryManifest, redactSourceLocator, sha256, parseTimelineGap, writeDiscoveryManifest, buildSessionExportPlan, reverifySessionExportPlan, buildSessionAiwgFortemiIndexExport, recoverAiwgFortemiIndexFromFullV1Shard, embedAttachmentsInFullV1Shard, recoverEmbeddedAttachments, SESSION_EXPORT_PLAN_SCHEMA_VERSION, } from '../../sessions/index.js';
|
|
6
6
|
const JSON_CONTRACT_VERSION = '1.0.0';
|
|
7
7
|
async function createLineMemoryPromotionDestination(projectRoot, manifestPath) {
|
|
8
8
|
const modulePath = resolve(dirname(manifestPath), 'commands', 'line-memory.mjs');
|
|
@@ -28,6 +28,10 @@ Commands:
|
|
|
28
28
|
sources Show all canonical provider dispositions
|
|
29
29
|
discover --workspace <path> Inventory authorized workspace histories
|
|
30
30
|
import-discovered --workspace <path> Import the exact saved manifest
|
|
31
|
+
grok-list --workspace <path> List Grok Build CLI session IDs for a workspace
|
|
32
|
+
grok-search <query> --workspace <path> Search Grok Build CLI session IDs
|
|
33
|
+
grok-export <id> --workspace <path> --out <dir> Export one CLI transcript
|
|
34
|
+
grok-id <file> --format json|streaming-json Read a headless session ID
|
|
31
35
|
import <file> --source-id <id> Import a supported provider JSONL source
|
|
32
36
|
list [--limit N] [--cursor N] List normalized sessions
|
|
33
37
|
timeline [--gap 30m] Report chronological activity segments
|
|
@@ -155,6 +159,28 @@ async function executeCommand(ctx, args) {
|
|
|
155
159
|
return discoverWorkspace(ctx, args);
|
|
156
160
|
if (command === 'import-discovered')
|
|
157
161
|
return importDiscovered(ctx, args);
|
|
162
|
+
if (command === 'grok-list' || command === 'grok-search' || command === 'grok-export') {
|
|
163
|
+
const workspace = resolve(ctx.cwd, requiredValue(args, '--workspace'));
|
|
164
|
+
const options = { cwd: workspace, binary: args.values.get('--grok-bin') };
|
|
165
|
+
if (command === 'grok-list') {
|
|
166
|
+
return ok(command, { sessionIds: await grokBuildList(options, boundedInteger(args.values.get('--limit'), 20, 1, 500, '--limit')) });
|
|
167
|
+
}
|
|
168
|
+
if (command === 'grok-search') {
|
|
169
|
+
return ok(command, { sessionIds: await grokBuildSearch(options, requiredPositional(args, 0, 'query'), boundedInteger(args.values.get('--limit'), 20, 1, 500, '--limit')) });
|
|
170
|
+
}
|
|
171
|
+
if (isDryRun(ctx, args)) {
|
|
172
|
+
return preview(command, { sessionId: requiredPositional(args, 0, 'session ID'), wouldExport: true });
|
|
173
|
+
}
|
|
174
|
+
const output = await grokBuildExport(options, requiredPositional(args, 0, 'session ID'), resolve(ctx.cwd, requiredValue(args, '--out')));
|
|
175
|
+
return ok(command, { source: output, provider: 'grok-build', sourceId: `grok-build-${basename(output, '.md')}` });
|
|
176
|
+
}
|
|
177
|
+
if (command === 'grok-id') {
|
|
178
|
+
const format = args.values.get('--format');
|
|
179
|
+
if (format !== 'json' && format !== 'streaming-json') {
|
|
180
|
+
throw new SessionContractError('INVALID_ARGUMENT', '--format must be json or streaming-json');
|
|
181
|
+
}
|
|
182
|
+
return ok(command, { sessionId: await grokHeadlessSessionIdFromFile(resolve(ctx.cwd, requiredPositional(args, 0, 'file')), format) });
|
|
183
|
+
}
|
|
158
184
|
const repository = openRepository(ctx, args);
|
|
159
185
|
try {
|
|
160
186
|
switch (command) {
|
|
@@ -656,7 +682,7 @@ async function importSource(ctx, args) {
|
|
|
656
682
|
if (provider !== 'generic' && provider !== 'claude' && provider !== 'codex'
|
|
657
683
|
&& provider !== 'copilot' && provider !== 'cursor' && provider !== 'factory'
|
|
658
684
|
&& provider !== 'hermes' && provider !== 'opencode' && provider !== 'openclaw'
|
|
659
|
-
&& provider !== 'openhuman' && provider !== 'grokbot' && provider !== 'pi' && provider !== 'omp' && provider !== 'deepseek-harness' && provider !== 'warp' && provider !== 'devin-desktop') {
|
|
685
|
+
&& provider !== 'openhuman' && provider !== 'grokbot' && provider !== 'grok-build' && provider !== 'muse' && provider !== 'pi' && provider !== 'omp' && provider !== 'deepseek-harness' && provider !== 'warp' && provider !== 'devin-desktop') {
|
|
660
686
|
throw new CliError('UNSUPPORTED_OPERATION', `session import is not implemented for ${provider}`, EXIT.unsupported);
|
|
661
687
|
}
|
|
662
688
|
const sourceId = requiredValue(args, '--source-id');
|
|
@@ -673,6 +699,8 @@ async function importSource(ctx, args) {
|
|
|
673
699
|
const isOpenClaw = provider === 'openclaw';
|
|
674
700
|
const isOpenHuman = provider === 'openhuman';
|
|
675
701
|
const isGrokbot = provider === 'grokbot';
|
|
702
|
+
const isGrokBuild = provider === 'grok-build';
|
|
703
|
+
const isMuse = provider === 'muse';
|
|
676
704
|
const isPi = provider === 'pi';
|
|
677
705
|
const isOmp = provider === 'omp';
|
|
678
706
|
const isDsh = provider === 'deepseek-harness';
|
|
@@ -698,13 +726,17 @@ async function importSource(ctx, args) {
|
|
|
698
726
|
? new OpenHumanSessionAdapter()
|
|
699
727
|
: isGrokbot
|
|
700
728
|
? new GrokbotSessionAdapter()
|
|
701
|
-
:
|
|
702
|
-
? new
|
|
703
|
-
:
|
|
704
|
-
? new
|
|
705
|
-
:
|
|
706
|
-
? new
|
|
707
|
-
:
|
|
729
|
+
: isGrokBuild
|
|
730
|
+
? new GrokBuildSessionAdapter()
|
|
731
|
+
: isMuse
|
|
732
|
+
? new MuseSessionAdapter()
|
|
733
|
+
: isPi
|
|
734
|
+
? new PiSessionAdapter()
|
|
735
|
+
: isWarp
|
|
736
|
+
? new WarpSessionAdapter()
|
|
737
|
+
: isDevinDesktop
|
|
738
|
+
? new DevinDesktopSessionAdapter()
|
|
739
|
+
: new GenericSessionInterchangeAdapter();
|
|
708
740
|
const locatorClass = isDsh ? 'deepseek-harness-session-v2-jsonl' : isOmp ? 'omp-session-v3-jsonl' : isClaude
|
|
709
741
|
? claudeLocatorClass(input)
|
|
710
742
|
: isCodex
|
|
@@ -725,13 +757,17 @@ async function importSource(ctx, args) {
|
|
|
725
757
|
? 'openhuman-enriched-jsonl'
|
|
726
758
|
: isGrokbot
|
|
727
759
|
? 'manual-export'
|
|
728
|
-
:
|
|
729
|
-
?
|
|
730
|
-
:
|
|
731
|
-
? '
|
|
732
|
-
:
|
|
733
|
-
? '
|
|
734
|
-
:
|
|
760
|
+
: isGrokBuild
|
|
761
|
+
? GROK_BUILD_CLI_EXPORT_LOCATOR_CLASS
|
|
762
|
+
: isMuse
|
|
763
|
+
? 'manual-export'
|
|
764
|
+
: isPi
|
|
765
|
+
? 'pi-session-v3-jsonl'
|
|
766
|
+
: isWarp
|
|
767
|
+
? 'warp-markdown-export'
|
|
768
|
+
: isDevinDesktop
|
|
769
|
+
? 'devin-desktop-cascade-hook-jsonl'
|
|
770
|
+
: 'manual-export';
|
|
735
771
|
const selectedSource = {
|
|
736
772
|
provider, locator: input, locatorClass, sourceId,
|
|
737
773
|
authorizedScope: { workspaceId, allowedRoots: [dirname(input)] },
|
|
@@ -759,11 +795,15 @@ async function importSource(ctx, args) {
|
|
|
759
795
|
? 'schema-1-session-raw-enriched'
|
|
760
796
|
: isGrokbot
|
|
761
797
|
? 'manual-interchange'
|
|
762
|
-
:
|
|
763
|
-
? '
|
|
764
|
-
:
|
|
765
|
-
? '
|
|
766
|
-
:
|
|
798
|
+
: isGrokBuild
|
|
799
|
+
? 'documented-cli-markdown-export'
|
|
800
|
+
: isMuse
|
|
801
|
+
? 'muse-export-trajectory-v1'
|
|
802
|
+
: isWarp
|
|
803
|
+
? 'manual-lossy-markdown-export'
|
|
804
|
+
: isDevinDesktop
|
|
805
|
+
? 'opt-in-cascade-transcript-hook'
|
|
806
|
+
: 'manual-interchange',
|
|
767
807
|
locatorClass, redactedLocator: redactSourceLocator(input),
|
|
768
808
|
adapterVersion: isDsh ? DEEPSEEK_HARNESS_ADAPTER_VERSION : isOmp ? OMP_ADAPTER_VERSION : isClaude
|
|
769
809
|
? CLAUDE_ADAPTER_VERSION
|
|
@@ -785,16 +825,20 @@ async function importSource(ctx, args) {
|
|
|
785
825
|
? OPENHUMAN_ADAPTER_VERSION
|
|
786
826
|
: isGrokbot
|
|
787
827
|
? GROKBOT_ADAPTER_VERSION
|
|
788
|
-
:
|
|
789
|
-
?
|
|
790
|
-
:
|
|
791
|
-
?
|
|
792
|
-
:
|
|
828
|
+
: isGrokBuild
|
|
829
|
+
? GROK_BUILD_ADAPTER_VERSION
|
|
830
|
+
: isMuse
|
|
831
|
+
? MUSE_ADAPTER_VERSION
|
|
832
|
+
: isWarp
|
|
833
|
+
? WARP_ADAPTER_VERSION
|
|
834
|
+
: isDevinDesktop
|
|
835
|
+
? DEVIN_DESKTOP_ADAPTER_VERSION
|
|
836
|
+
: GENERIC_ADAPTER_VERSION,
|
|
793
837
|
sourceSchemaVersion: probe.sourceSchemaVersion,
|
|
794
|
-
disposition: isWarp || isGrokbot
|
|
838
|
+
disposition: isWarp || isGrokbot || isMuse
|
|
795
839
|
? 'manual-only'
|
|
796
840
|
: isClaude || isCodex || isCopilot || isCursor || isFactory || isHermes
|
|
797
|
-
|| isOpenCode || isOpenClaw || isOpenHuman || isDevinDesktop || isOmp || isDsh || isPi
|
|
841
|
+
|| isOpenCode || isOpenClaw || isOpenHuman || isGrokBuild || isDevinDesktop || isOmp || isDsh || isPi
|
|
798
842
|
? 'implemented' : 'manual-only',
|
|
799
843
|
operationalState: probe.operationalState,
|
|
800
844
|
consistency: probe.consistency, authorizedAt: new Date().toISOString(),
|
|
@@ -818,14 +862,18 @@ async function importSource(ctx, args) {
|
|
|
818
862
|
? { 'native.openhuman': {} }
|
|
819
863
|
: isGrokbot
|
|
820
864
|
? { 'native.grokbot': {} }
|
|
821
|
-
:
|
|
822
|
-
? { 'native.
|
|
823
|
-
:
|
|
824
|
-
? { 'native.
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
865
|
+
: isGrokBuild
|
|
866
|
+
? { 'native.grok-build': { acquisition: 'grok-cli-export-markdown' } }
|
|
867
|
+
: isMuse
|
|
868
|
+
? { 'native.muse': {} }
|
|
869
|
+
: isWarp
|
|
870
|
+
? { 'native.warp': {} }
|
|
871
|
+
: isDevinDesktop
|
|
872
|
+
? { 'native.devin-desktop': {
|
|
873
|
+
product: 'Devin Desktop',
|
|
874
|
+
compatibilityProviderId: 'windsurf',
|
|
875
|
+
} }
|
|
876
|
+
: { 'native.generic': {} },
|
|
829
877
|
});
|
|
830
878
|
if (isDryRun(ctx, args)) {
|
|
831
879
|
return preview('import', { source, wouldInspect: true, wouldPersist: false });
|
|
@@ -1375,6 +1423,34 @@ function providerDisposition(provider) {
|
|
|
1375
1423
|
},
|
|
1376
1424
|
};
|
|
1377
1425
|
}
|
|
1426
|
+
if (provider === 'grok-build') {
|
|
1427
|
+
return {
|
|
1428
|
+
provider, disposition: 'implemented', operationalState: 'available',
|
|
1429
|
+
supportedOperations: ['inspect', 'stream'],
|
|
1430
|
+
acquisitionModes: ['manual-export'],
|
|
1431
|
+
reasonCode: 'CLI_EXPORT_REQUIRED',
|
|
1432
|
+
remediation: 'Run `grok sessions list`, then `grok export <session-id> <session-id>.md` and import the explicitly authorized Markdown file.',
|
|
1433
|
+
evidence: {
|
|
1434
|
+
adapterVersion: GROK_BUILD_ADAPTER_VERSION,
|
|
1435
|
+
verifiedAt: '2026-09-21',
|
|
1436
|
+
documentation: 'https://docs.x.ai/build/features/sessions',
|
|
1437
|
+
},
|
|
1438
|
+
};
|
|
1439
|
+
}
|
|
1440
|
+
if (provider === 'muse') {
|
|
1441
|
+
return {
|
|
1442
|
+
provider, disposition: 'manual-only', operationalState: 'available',
|
|
1443
|
+
supportedOperations: ['inspect', 'stream'],
|
|
1444
|
+
acquisitionModes: ['manual-export'],
|
|
1445
|
+
reasonCode: 'MANUAL_SOURCE_SELECTION_REQUIRED',
|
|
1446
|
+
remediation: 'Run `muse export --session <id-or-session.jsonl>` and explicitly select the trajectory JSON; sessions live under $XDG_DATA_HOME/muse/sessions, but that native log format is internal, so auto-discover is unsupported.',
|
|
1447
|
+
evidence: {
|
|
1448
|
+
adapterVersion: MUSE_ADAPTER_VERSION,
|
|
1449
|
+
verifiedAt: '2026-09-24',
|
|
1450
|
+
documentation: 'docs/providers/muse-sessions.md',
|
|
1451
|
+
},
|
|
1452
|
+
};
|
|
1453
|
+
}
|
|
1378
1454
|
if (provider === 'warp') {
|
|
1379
1455
|
return {
|
|
1380
1456
|
provider, disposition: 'manual-only', operationalState: 'available',
|
|
@@ -1487,7 +1563,7 @@ function parseArgs(argv) {
|
|
|
1487
1563
|
'--inactivity-threshold',
|
|
1488
1564
|
'--control-events',
|
|
1489
1565
|
'--session', '--status', '--actor', '--group-by',
|
|
1490
|
-
'--out', '--plan', '--input', '--shard-name', '--max-attachment-bytes',
|
|
1566
|
+
'--out', '--plan', '--input', '--shard-name', '--max-attachment-bytes', '--format', '--grok-bin',
|
|
1491
1567
|
]);
|
|
1492
1568
|
let command;
|
|
1493
1569
|
for (let index = 0; index < argv.length; index += 1) {
|
|
@@ -24,6 +24,7 @@ import { getProjectDir } from "../../config/aiwg-config.js";
|
|
|
24
24
|
import { formatDeployedWorkspaceSignalPlan, readWorkspaceSignalPlan } from "../workspace-signals.js";
|
|
25
25
|
import * as path from "node:path";
|
|
26
26
|
import * as fsSync from "node:fs";
|
|
27
|
+
import { pathToFileURL } from "node:url";
|
|
27
28
|
/** Generate or deploy the canonical project quickref. */
|
|
28
29
|
export const quickrefHandler = {
|
|
29
30
|
id: 'quickref',
|
|
@@ -713,6 +714,36 @@ export const removeHandler = {
|
|
|
713
714
|
if (ctx.args.includes('--user') || isScopeUser(ctx.args)) {
|
|
714
715
|
return await removeUserScopeDeploy(ctx.args);
|
|
715
716
|
}
|
|
717
|
+
if (firstRemovePositional(ctx.args) === 'grok-build') {
|
|
718
|
+
const providerParse = parseRemoveProvider(ctx.args);
|
|
719
|
+
if (providerParse.provider !== 'grok-build' || providerParse.error) {
|
|
720
|
+
return { exitCode: 1, message: 'Use aiwg remove grok-build --provider grok-build [--dry-run] for reviewed project-scope removal.' };
|
|
721
|
+
}
|
|
722
|
+
const frameworkRoot = await getFrameworkRoot();
|
|
723
|
+
const { uninstall } = (await import(pathToFileURL(path.join(frameworkRoot, 'tools/agents/providers/grok-build.mjs')).href));
|
|
724
|
+
const { readAiwgConfig, writeAiwgConfig } = await import('../../config/aiwg-config.js');
|
|
725
|
+
const target = getProjectDir({ cwd: ctx.cwd }, ctx.args);
|
|
726
|
+
const dryRun = ctx.args.includes('--dry-run');
|
|
727
|
+
const report = uninstall(target, { dryRun, srcRoot: frameworkRoot });
|
|
728
|
+
if (!dryRun && report.skipped.length === 0) {
|
|
729
|
+
const config = await readAiwgConfig(target);
|
|
730
|
+
if (config) {
|
|
731
|
+
for (const [name, entry] of Object.entries(config.installed ?? {})) {
|
|
732
|
+
delete entry.deployedTo?.['grok-build'];
|
|
733
|
+
if (Object.keys(entry.deployedTo ?? {}).length === 0)
|
|
734
|
+
delete config.installed[name];
|
|
735
|
+
}
|
|
736
|
+
await writeAiwgConfig(target, config);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
const lines = [
|
|
740
|
+
`${dryRun ? 'Would remove' : 'Removed'} ${dryRun ? report.planned.length : report.removed.length} unchanged AIWG-owned Grok Build artifact(s).`,
|
|
741
|
+
...report.planned.map(relative => ` ${relative}`),
|
|
742
|
+
...report.skipped.map(relative => ` Preserved modified or unverifiable: ${relative}`),
|
|
743
|
+
'Operator-owned Grok content and shared context files are preserved.',
|
|
744
|
+
];
|
|
745
|
+
return { exitCode: report.skipped.length ? 1 : 0, message: lines.join('\n') };
|
|
746
|
+
}
|
|
716
747
|
// #1037 — Project-local-aware remove. If the first positional arg matches
|
|
717
748
|
// a project-local entry in `installed`, route to the new handler.
|
|
718
749
|
// Otherwise fall through to the existing plugin-uninstaller flow.
|
|
@@ -179,9 +179,9 @@ async function loadDeployModelsConfig(frameworkRoot) {
|
|
|
179
179
|
}
|
|
180
180
|
return {
|
|
181
181
|
shorthand: {
|
|
182
|
-
opus: 'claude-opus-
|
|
183
|
-
sonnet: 'claude-sonnet-
|
|
184
|
-
haiku: 'claude-haiku-4-5
|
|
182
|
+
opus: 'claude-opus-5',
|
|
183
|
+
sonnet: 'claude-sonnet-5',
|
|
184
|
+
haiku: 'claude-haiku-4-5',
|
|
185
185
|
inherit: 'inherit',
|
|
186
186
|
},
|
|
187
187
|
claude_shorthand: { opus: 'opus', sonnet: 'sonnet', haiku: 'haiku', inherit: 'inherit' },
|
|
@@ -249,6 +249,27 @@ function resolveFrameworkDir(framework) {
|
|
|
249
249
|
* aiwg-dev is contributor-only tooling — not for end users.
|
|
250
250
|
*/
|
|
251
251
|
export const USE_ALL_DISALLOW = new Set(['aiwg-dev']);
|
|
252
|
+
/**
|
|
253
|
+
* Whether an addon's manifest keeps it out of bulk deploys (#2641).
|
|
254
|
+
*
|
|
255
|
+
* `devOnly` marks contributor tooling; `explicitInstall` marks an addon that is
|
|
256
|
+
* deployed only when named, such as `aiwg use decision-engine`. Both match
|
|
257
|
+
* `discoverAddons()` in tools/agents/providers/base.mjs, which applies the same
|
|
258
|
+
* rule to framework-mode deploys.
|
|
259
|
+
*
|
|
260
|
+
* `autoInstall: false` is deliberately NOT an exclusion signal: most addons
|
|
261
|
+
* declare it (and the extension manifest schema defaults to it), so honoring
|
|
262
|
+
* it would drop most addons from `all` for existing users.
|
|
263
|
+
*/
|
|
264
|
+
async function isExplicitOnlyAddon(addonDir) {
|
|
265
|
+
try {
|
|
266
|
+
const manifest = JSON.parse(await fs.readFile(path.join(addonDir, 'manifest.json'), 'utf8'));
|
|
267
|
+
return manifest?.devOnly === true || manifest?.explicitInstall === true;
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
252
273
|
/** Full-framework setup requires the corpus omitted by the lightweight CLI. */
|
|
253
274
|
async function bundledSetupPrerequisiteMessage(frameworkRoot) {
|
|
254
275
|
let packageName;
|
|
@@ -280,14 +301,15 @@ async function bundledSetupPrerequisiteMessage(frameworkRoot) {
|
|
|
280
301
|
].join('\n');
|
|
281
302
|
}
|
|
282
303
|
/**
|
|
283
|
-
* Discover all addon names from the filesystem, minus the disallow list
|
|
304
|
+
* Discover all addon names from the filesystem, minus the disallow list and
|
|
305
|
+
* addons whose manifest restricts them to explicit installs.
|
|
284
306
|
*/
|
|
285
307
|
export async function getAllAddons(frameworkRoot) {
|
|
286
308
|
const addonsDir = path.join(frameworkRoot, 'agentic/code/addons');
|
|
287
309
|
const entries = await fs.readdir(addonsDir, { withFileTypes: true });
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
310
|
+
const candidates = entries.filter(e => e.isDirectory() && !USE_ALL_DISALLOW.has(e.name));
|
|
311
|
+
const excluded = await Promise.all(candidates.map(e => isExplicitOnlyAddon(path.join(addonsDir, e.name))));
|
|
312
|
+
return candidates.filter((_, index) => !excluded[index]).map(e => e.name);
|
|
291
313
|
}
|
|
292
314
|
/**
|
|
293
315
|
* Extensions excluded from `aiwg use all` deployment.
|
|
@@ -338,7 +360,8 @@ export function extensionPath(frameworkRoot, name) {
|
|
|
338
360
|
/**
|
|
339
361
|
* Check whether a given addon name exists on disk.
|
|
340
362
|
* The USE_ALL_DISALLOW list does NOT block explicit single-addon installs —
|
|
341
|
-
* contributors can still run `aiwg use aiwg-dev
|
|
363
|
+
* contributors can still run `aiwg use aiwg-dev`, and operators
|
|
364
|
+
* `aiwg use decision-engine` (an explicitInstall addon), directly.
|
|
342
365
|
*/
|
|
343
366
|
/** Resolve canonical addon folder name from user-supplied alias. */
|
|
344
367
|
function resolveAddonFolderName(name) {
|
|
@@ -3338,6 +3361,17 @@ export class UseHandler {
|
|
|
3338
3361
|
};
|
|
3339
3362
|
}
|
|
3340
3363
|
}
|
|
3364
|
+
if (provider === 'muse') {
|
|
3365
|
+
// #226 — fail closed: never let --scope user proceed with unusable
|
|
3366
|
+
// XDG metadata (the mirror would silently land nothing at user scope).
|
|
3367
|
+
const { resolveMuseXdgSkillsDir, museXdgSkillsDirRemediation } = await import('../../providers/muse-paths.js');
|
|
3368
|
+
if (!resolveMuseXdgSkillsDir()) {
|
|
3369
|
+
return {
|
|
3370
|
+
exitCode: 1,
|
|
3371
|
+
message: museXdgSkillsDirRemediation(),
|
|
3372
|
+
};
|
|
3373
|
+
}
|
|
3374
|
+
}
|
|
3341
3375
|
}
|
|
3342
3376
|
// Pre-deployment collision check (skip in dry-run — nothing is written)
|
|
3343
3377
|
if (!dryRun) {
|
|
@@ -3767,6 +3801,9 @@ export class UseHandler {
|
|
|
3767
3801
|
}
|
|
3768
3802
|
}
|
|
3769
3803
|
catch (err) {
|
|
3804
|
+
if (provider === 'grok-build') {
|
|
3805
|
+
return { exitCode: 1, message: `--scope user mirror failed: ${err instanceof Error ? err.message : String(err)}` };
|
|
3806
|
+
}
|
|
3770
3807
|
ui.warn(`--scope user mirror failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
3771
3808
|
}
|
|
3772
3809
|
}
|
|
@@ -3825,7 +3862,7 @@ export class UseHandler {
|
|
|
3825
3862
|
}
|
|
3826
3863
|
else {
|
|
3827
3864
|
// Cross-provider providers per ADR-3 §7 (no-op if their dir not present)
|
|
3828
|
-
const bridgeProviders = ['codex', 'copilot', 'factory', 'hermes'];
|
|
3865
|
+
const bridgeProviders = ['codex', 'copilot', 'factory', 'grok-build', 'hermes'];
|
|
3829
3866
|
const results = await bridgeAll(sources, bridgeProviders, {
|
|
3830
3867
|
projectPath: target,
|
|
3831
3868
|
dryRun,
|
|
@@ -509,6 +509,16 @@ export const doctorHandler = {
|
|
|
509
509
|
// Run core doctor diagnostics
|
|
510
510
|
const result = await runner.run('tools/cli/doctor.mjs', ctx.args, { cwd: ctx.cwd });
|
|
511
511
|
let agentSkillsFailure = false;
|
|
512
|
+
try {
|
|
513
|
+
const { inspectGrokBuildNative } = await import('../../mcp/grok-build-config.mjs');
|
|
514
|
+
const native = await inspectGrokBuildNative({ projectDir: ctx.cwd || process.cwd() });
|
|
515
|
+
console.log(`\n── Grok Build native extensions ──\n MCP: ${native.mcp}\n Hooks: ${native.hooks}`);
|
|
516
|
+
for (const diagnostic of native.diagnostics)
|
|
517
|
+
console.log(` ⚠ ${diagnostic}`);
|
|
518
|
+
}
|
|
519
|
+
catch (error) {
|
|
520
|
+
console.log(`\n── Grok Build native extensions ──\n ⚠ unable to audit: ${error instanceof Error ? error.message : String(error)}`);
|
|
521
|
+
}
|
|
512
522
|
try {
|
|
513
523
|
const { buildAgentSkillsDoctorSection } = await import('../../skills/doctor.js');
|
|
514
524
|
const section = buildAgentSkillsDoctorSection(ctx.cwd || process.cwd());
|
|
@@ -55,9 +55,11 @@ export const statusHandler = {
|
|
|
55
55
|
provider: statusFlagValue(ctx.args, '--provider'),
|
|
56
56
|
bundle: statusFlagValue(ctx.args, '--bundle'),
|
|
57
57
|
});
|
|
58
|
+
const { inspectGrokBuildNative } = await import('../../mcp/grok-build-config.mjs');
|
|
59
|
+
const grokBuildNative = await inspectGrokBuildNative({ projectDir: projectRoot });
|
|
58
60
|
return {
|
|
59
61
|
exitCode: probe.status === 'needs-repair' ? 1 : 0,
|
|
60
|
-
message: JSON.stringify(probe, null, 2),
|
|
62
|
+
message: JSON.stringify({ ...probe, grokBuildNative }, null, 2),
|
|
61
63
|
rawOutput: true,
|
|
62
64
|
};
|
|
63
65
|
}
|