@neurcode-ai/cli 0.9.64 → 0.9.66
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/LICENSE +201 -0
- package/dist/commands/bootstrap-policy.d.ts +29 -0
- package/dist/commands/bootstrap-policy.d.ts.map +1 -0
- package/dist/commands/bootstrap-policy.js +334 -0
- package/dist/commands/bootstrap-policy.js.map +1 -0
- package/dist/commands/brain.d.ts.map +1 -1
- package/dist/commands/brain.js +273 -0
- package/dist/commands/brain.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +82 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pilot-report.d.ts +9 -0
- package/dist/commands/pilot-report.d.ts.map +1 -0
- package/dist/commands/pilot-report.js +176 -0
- package/dist/commands/pilot-report.js.map +1 -0
- package/dist/commands/quickstart.d.ts +21 -0
- package/dist/commands/quickstart.d.ts.map +1 -0
- package/dist/commands/quickstart.js +178 -0
- package/dist/commands/quickstart.js.map +1 -0
- package/dist/commands/remediate-export.d.ts +31 -0
- package/dist/commands/remediate-export.d.ts.map +1 -0
- package/dist/commands/remediate-export.js +283 -0
- package/dist/commands/remediate-export.js.map +1 -0
- package/dist/commands/remediate-governance.d.ts +54 -0
- package/dist/commands/remediate-governance.d.ts.map +1 -0
- package/dist/commands/remediate-governance.js +375 -0
- package/dist/commands/remediate-governance.js.map +1 -0
- package/dist/commands/remediate.d.ts.map +1 -1
- package/dist/commands/remediate.js.map +1 -1
- package/dist/commands/replay.d.ts.map +1 -1
- package/dist/commands/replay.js +30 -0
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/verify.d.ts.map +1 -1
- package/dist/commands/verify.js +409 -30
- package/dist/commands/verify.js.map +1 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +1078 -0
- package/dist/daemon/server.js.map +1 -1
- package/dist/explainability/DeterminismClassifier.d.ts +34 -0
- package/dist/explainability/DeterminismClassifier.d.ts.map +1 -0
- package/dist/explainability/DeterminismClassifier.js +104 -0
- package/dist/explainability/DeterminismClassifier.js.map +1 -0
- package/dist/explainability/ViolationFormatter.d.ts +32 -0
- package/dist/explainability/ViolationFormatter.d.ts.map +1 -0
- package/dist/explainability/ViolationFormatter.js +252 -0
- package/dist/explainability/ViolationFormatter.js.map +1 -0
- package/dist/explainability/index.d.ts +15 -0
- package/dist/explainability/index.d.ts.map +1 -0
- package/dist/explainability/index.js +94 -0
- package/dist/explainability/index.js.map +1 -0
- package/dist/explainability/types.d.ts +37 -0
- package/dist/explainability/types.d.ts.map +1 -0
- package/dist/explainability/types.js +3 -0
- package/dist/explainability/types.js.map +1 -0
- package/dist/governance/canonical-invariants.d.ts +88 -0
- package/dist/governance/canonical-invariants.d.ts.map +1 -0
- package/dist/governance/canonical-invariants.js +197 -0
- package/dist/governance/canonical-invariants.js.map +1 -0
- package/dist/governance/canonical-ordering.d.ts +76 -0
- package/dist/governance/canonical-ordering.d.ts.map +1 -0
- package/dist/governance/canonical-ordering.js +189 -0
- package/dist/governance/canonical-ordering.js.map +1 -0
- package/dist/governance/canonical-pipeline.d.ts +45 -0
- package/dist/governance/canonical-pipeline.d.ts.map +1 -0
- package/dist/governance/canonical-pipeline.js +616 -0
- package/dist/governance/canonical-pipeline.js.map +1 -0
- package/dist/governance/diff-line-provenance.d.ts +59 -0
- package/dist/governance/diff-line-provenance.d.ts.map +1 -0
- package/dist/governance/diff-line-provenance.js +118 -0
- package/dist/governance/diff-line-provenance.js.map +1 -0
- package/dist/governance/pilot-readiness.d.ts +34 -0
- package/dist/governance/pilot-readiness.d.ts.map +1 -0
- package/dist/governance/pilot-readiness.js +226 -0
- package/dist/governance/pilot-readiness.js.map +1 -0
- package/dist/governance/policy-parity-validator.d.ts +62 -0
- package/dist/governance/policy-parity-validator.d.ts.map +1 -0
- package/dist/governance/policy-parity-validator.js +137 -0
- package/dist/governance/policy-parity-validator.js.map +1 -0
- package/dist/governance/remediation-boundary.d.ts +55 -0
- package/dist/governance/remediation-boundary.d.ts.map +1 -0
- package/dist/governance/remediation-boundary.js +120 -0
- package/dist/governance/remediation-boundary.js.map +1 -0
- package/dist/governance/structural-cache.d.ts +103 -0
- package/dist/governance/structural-cache.d.ts.map +1 -0
- package/dist/governance/structural-cache.js +240 -0
- package/dist/governance/structural-cache.js.map +1 -0
- package/dist/governance/structural-on-diff.d.ts +33 -0
- package/dist/governance/structural-on-diff.d.ts.map +1 -0
- package/dist/governance/structural-on-diff.js +67 -0
- package/dist/governance/structural-on-diff.js.map +1 -0
- package/dist/governance/structural-policy-merge.d.ts +22 -0
- package/dist/governance/structural-policy-merge.d.ts.map +1 -0
- package/dist/governance/structural-policy-merge.js +32 -0
- package/dist/governance/structural-policy-merge.js.map +1 -0
- package/dist/governance/verify-runtime-guard.d.ts +99 -0
- package/dist/governance/verify-runtime-guard.d.ts.map +1 -0
- package/dist/governance/verify-runtime-guard.js +129 -0
- package/dist/governance/verify-runtime-guard.js.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/review-compression/index.d.ts +50 -0
- package/dist/integrations/review-compression/index.d.ts.map +1 -0
- package/dist/integrations/review-compression/index.js +158 -0
- package/dist/integrations/review-compression/index.js.map +1 -0
- package/dist/intent-engine/domain-taxonomy.d.ts +42 -0
- package/dist/intent-engine/domain-taxonomy.d.ts.map +1 -0
- package/dist/intent-engine/domain-taxonomy.js +534 -0
- package/dist/intent-engine/domain-taxonomy.js.map +1 -0
- package/dist/intent-engine/index.d.ts +1 -0
- package/dist/intent-engine/index.d.ts.map +1 -1
- package/dist/intent-engine/index.js +6 -1
- package/dist/intent-engine/index.js.map +1 -1
- package/dist/intent-engine/parser.d.ts.map +1 -1
- package/dist/intent-engine/parser.js +47 -0
- package/dist/intent-engine/parser.js.map +1 -1
- package/dist/intent-engine/repo-classifier.d.ts +64 -0
- package/dist/intent-engine/repo-classifier.d.ts.map +1 -0
- package/dist/intent-engine/repo-classifier.js +178 -0
- package/dist/intent-engine/repo-classifier.js.map +1 -0
- package/dist/intent-engine/semantic-expander.d.ts +104 -0
- package/dist/intent-engine/semantic-expander.d.ts.map +1 -0
- package/dist/intent-engine/semantic-expander.js +480 -0
- package/dist/intent-engine/semantic-expander.js.map +1 -0
- package/dist/patch-engine/patterns.d.ts.map +1 -1
- package/dist/patch-engine/patterns.js +8 -4
- package/dist/patch-engine/patterns.js.map +1 -1
- package/dist/semantic/index.d.ts +14 -0
- package/dist/semantic/index.d.ts.map +1 -0
- package/dist/semantic/index.js +30 -0
- package/dist/semantic/index.js.map +1 -0
- package/dist/semantic/tfidf-engine.d.ts +81 -0
- package/dist/semantic/tfidf-engine.d.ts.map +1 -0
- package/dist/semantic/tfidf-engine.js +278 -0
- package/dist/semantic/tfidf-engine.js.map +1 -0
- package/dist/semantic/vector-store.d.ts +108 -0
- package/dist/semantic/vector-store.d.ts.map +1 -0
- package/dist/semantic/vector-store.js +321 -0
- package/dist/semantic/vector-store.js.map +1 -0
- package/dist/structural-rules/context-severity.d.ts +46 -0
- package/dist/structural-rules/context-severity.d.ts.map +1 -0
- package/dist/structural-rules/context-severity.js +115 -0
- package/dist/structural-rules/context-severity.js.map +1 -0
- package/dist/structural-rules/distributed/DS001-saga-rollback-absence.d.ts +11 -0
- package/dist/structural-rules/distributed/DS001-saga-rollback-absence.d.ts.map +1 -0
- package/dist/structural-rules/distributed/DS001-saga-rollback-absence.js +212 -0
- package/dist/structural-rules/distributed/DS001-saga-rollback-absence.js.map +1 -0
- package/dist/structural-rules/distributed/DS002-missing-correlation-id.d.ts +11 -0
- package/dist/structural-rules/distributed/DS002-missing-correlation-id.d.ts.map +1 -0
- package/dist/structural-rules/distributed/DS002-missing-correlation-id.js +213 -0
- package/dist/structural-rules/distributed/DS002-missing-correlation-id.js.map +1 -0
- package/dist/structural-rules/distributed/index.d.ts +3 -0
- package/dist/structural-rules/distributed/index.d.ts.map +1 -0
- package/dist/structural-rules/distributed/index.js +8 -0
- package/dist/structural-rules/distributed/index.js.map +1 -0
- package/dist/structural-rules/engine.d.ts +25 -0
- package/dist/structural-rules/engine.d.ts.map +1 -0
- package/dist/structural-rules/engine.js +90 -0
- package/dist/structural-rules/engine.js.map +1 -0
- package/dist/structural-rules/index.d.ts +45 -0
- package/dist/structural-rules/index.d.ts.map +1 -0
- package/dist/structural-rules/index.js +158 -0
- package/dist/structural-rules/index.js.map +1 -0
- package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.d.ts +11 -0
- package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.d.ts.map +1 -0
- package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.js +66 -0
- package/dist/structural-rules/python/PY001-asyncio-task-without-cancel.js.map +1 -0
- package/dist/structural-rules/python/PY002-unbounded-dict-singleton.d.ts +11 -0
- package/dist/structural-rules/python/PY002-unbounded-dict-singleton.d.ts.map +1 -0
- package/dist/structural-rules/python/PY002-unbounded-dict-singleton.js +135 -0
- package/dist/structural-rules/python/PY002-unbounded-dict-singleton.js.map +1 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts +32 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.d.ts.map +1 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.js +277 -0
- package/dist/structural-rules/python/PY003-broad-except-clause.js.map +1 -0
- package/dist/structural-rules/python/PY004-swallowed-async-exception.d.ts +11 -0
- package/dist/structural-rules/python/PY004-swallowed-async-exception.d.ts.map +1 -0
- package/dist/structural-rules/python/PY004-swallowed-async-exception.js +167 -0
- package/dist/structural-rules/python/PY004-swallowed-async-exception.js.map +1 -0
- package/dist/structural-rules/python/PY005-fastapi-without-pydantic.d.ts +11 -0
- package/dist/structural-rules/python/PY005-fastapi-without-pydantic.d.ts.map +1 -0
- package/dist/structural-rules/python/PY005-fastapi-without-pydantic.js +154 -0
- package/dist/structural-rules/python/PY005-fastapi-without-pydantic.js.map +1 -0
- package/dist/structural-rules/python/PY006-blocking-io-in-async.d.ts +11 -0
- package/dist/structural-rules/python/PY006-blocking-io-in-async.d.ts.map +1 -0
- package/dist/structural-rules/python/PY006-blocking-io-in-async.js +130 -0
- package/dist/structural-rules/python/PY006-blocking-io-in-async.js.map +1 -0
- package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.d.ts +11 -0
- package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.d.ts.map +1 -0
- package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.js +93 -0
- package/dist/structural-rules/python/PY007-sqlalchemy-session-leak.js.map +1 -0
- package/dist/structural-rules/python/PY008-celery-task-without-retry.d.ts +11 -0
- package/dist/structural-rules/python/PY008-celery-task-without-retry.d.ts.map +1 -0
- package/dist/structural-rules/python/PY008-celery-task-without-retry.js +154 -0
- package/dist/structural-rules/python/PY008-celery-task-without-retry.js.map +1 -0
- package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.d.ts +11 -0
- package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.d.ts.map +1 -0
- package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.js +133 -0
- package/dist/structural-rules/python/PY009-unsafe-pickle-deserialization.js.map +1 -0
- package/dist/structural-rules/python/PY010-leaked-aiohttp-session.d.ts +11 -0
- package/dist/structural-rules/python/PY010-leaked-aiohttp-session.d.ts.map +1 -0
- package/dist/structural-rules/python/PY010-leaked-aiohttp-session.js +80 -0
- package/dist/structural-rules/python/PY010-leaked-aiohttp-session.js.map +1 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts +11 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.d.ts.map +1 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.js +97 -0
- package/dist/structural-rules/python/PY011-thread-lifecycle.js.map +1 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts +11 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.d.ts.map +1 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.js +83 -0
- package/dist/structural-rules/python/PY012-asyncio-run-misuse.js.map +1 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts +11 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.d.ts.map +1 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.js +73 -0
- package/dist/structural-rules/python/PY013-mutable-default-arg.js.map +1 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts +11 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.d.ts.map +1 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.js +115 -0
- package/dist/structural-rules/python/PY014-fixed-sleep-retry.js.map +1 -0
- package/dist/structural-rules/rules/SR001-swallowed-async-rejection.d.ts +11 -0
- package/dist/structural-rules/rules/SR001-swallowed-async-rejection.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR001-swallowed-async-rejection.js +145 -0
- package/dist/structural-rules/rules/SR001-swallowed-async-rejection.js.map +1 -0
- package/dist/structural-rules/rules/SR002-unbounded-collection.d.ts +11 -0
- package/dist/structural-rules/rules/SR002-unbounded-collection.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR002-unbounded-collection.js +196 -0
- package/dist/structural-rules/rules/SR002-unbounded-collection.js.map +1 -0
- package/dist/structural-rules/rules/SR003-timer-without-cleanup.d.ts +11 -0
- package/dist/structural-rules/rules/SR003-timer-without-cleanup.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR003-timer-without-cleanup.js +148 -0
- package/dist/structural-rules/rules/SR003-timer-without-cleanup.js.map +1 -0
- package/dist/structural-rules/rules/SR004-request-boundary-no-validation.d.ts +11 -0
- package/dist/structural-rules/rules/SR004-request-boundary-no-validation.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR004-request-boundary-no-validation.js +162 -0
- package/dist/structural-rules/rules/SR004-request-boundary-no-validation.js.map +1 -0
- package/dist/structural-rules/rules/SR005-halfopen-probe-gate.d.ts +11 -0
- package/dist/structural-rules/rules/SR005-halfopen-probe-gate.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR005-halfopen-probe-gate.js +150 -0
- package/dist/structural-rules/rules/SR005-halfopen-probe-gate.js.map +1 -0
- package/dist/structural-rules/rules/SR006-fanout-error-sanitization.d.ts +11 -0
- package/dist/structural-rules/rules/SR006-fanout-error-sanitization.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR006-fanout-error-sanitization.js +161 -0
- package/dist/structural-rules/rules/SR006-fanout-error-sanitization.js.map +1 -0
- package/dist/structural-rules/rules/SR007-cross-request-error.d.ts +11 -0
- package/dist/structural-rules/rules/SR007-cross-request-error.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR007-cross-request-error.js +175 -0
- package/dist/structural-rules/rules/SR007-cross-request-error.js.map +1 -0
- package/dist/structural-rules/rules/SR008-background-task-orphan.d.ts +11 -0
- package/dist/structural-rules/rules/SR008-background-task-orphan.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR008-background-task-orphan.js +176 -0
- package/dist/structural-rules/rules/SR008-background-task-orphan.js.map +1 -0
- package/dist/structural-rules/rules/SR009-missing-retry-backoff.d.ts +11 -0
- package/dist/structural-rules/rules/SR009-missing-retry-backoff.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR009-missing-retry-backoff.js +168 -0
- package/dist/structural-rules/rules/SR009-missing-retry-backoff.js.map +1 -0
- package/dist/structural-rules/rules/SR010-retry-storm.d.ts +11 -0
- package/dist/structural-rules/rules/SR010-retry-storm.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR010-retry-storm.js +181 -0
- package/dist/structural-rules/rules/SR010-retry-storm.js.map +1 -0
- package/dist/structural-rules/rules/SR011-event-listener-leak.d.ts +11 -0
- package/dist/structural-rules/rules/SR011-event-listener-leak.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR011-event-listener-leak.js +208 -0
- package/dist/structural-rules/rules/SR011-event-listener-leak.js.map +1 -0
- package/dist/structural-rules/rules/SR012-promise-race-leak.d.ts +11 -0
- package/dist/structural-rules/rules/SR012-promise-race-leak.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR012-promise-race-leak.js +191 -0
- package/dist/structural-rules/rules/SR012-promise-race-leak.js.map +1 -0
- package/dist/structural-rules/rules/SR013-missing-idempotency-key.d.ts +11 -0
- package/dist/structural-rules/rules/SR013-missing-idempotency-key.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR013-missing-idempotency-key.js +219 -0
- package/dist/structural-rules/rules/SR013-missing-idempotency-key.js.map +1 -0
- package/dist/structural-rules/rules/SR014-mutable-closure-async.d.ts +11 -0
- package/dist/structural-rules/rules/SR014-mutable-closure-async.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR014-mutable-closure-async.js +208 -0
- package/dist/structural-rules/rules/SR014-mutable-closure-async.js.map +1 -0
- package/dist/structural-rules/rules/SR015-dangling-abort-controller.d.ts +11 -0
- package/dist/structural-rules/rules/SR015-dangling-abort-controller.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR015-dangling-abort-controller.js +190 -0
- package/dist/structural-rules/rules/SR015-dangling-abort-controller.js.map +1 -0
- package/dist/structural-rules/rules/SR016-unsafe-json-parse.d.ts +11 -0
- package/dist/structural-rules/rules/SR016-unsafe-json-parse.d.ts.map +1 -0
- package/dist/structural-rules/rules/SR016-unsafe-json-parse.js +187 -0
- package/dist/structural-rules/rules/SR016-unsafe-json-parse.js.map +1 -0
- package/dist/structural-rules/suppressions.d.ts +43 -0
- package/dist/structural-rules/suppressions.d.ts.map +1 -0
- package/dist/structural-rules/suppressions.js +115 -0
- package/dist/structural-rules/suppressions.js.map +1 -0
- package/dist/structural-rules/types.d.ts +55 -0
- package/dist/structural-rules/types.d.ts.map +1 -0
- package/dist/structural-rules/types.js +3 -0
- package/dist/structural-rules/types.js.map +1 -0
- package/dist/utils/brain-cache.d.ts +100 -0
- package/dist/utils/brain-cache.d.ts.map +1 -0
- package/dist/utils/brain-cache.js +346 -0
- package/dist/utils/brain-cache.js.map +1 -0
- package/dist/utils/governance-provenance.d.ts +95 -0
- package/dist/utils/governance-provenance.d.ts.map +1 -0
- package/dist/utils/governance-provenance.js +187 -0
- package/dist/utils/governance-provenance.js.map +1 -0
- package/dist/utils/pilot-metrics.d.ts +46 -0
- package/dist/utils/pilot-metrics.d.ts.map +1 -0
- package/dist/utils/pilot-metrics.js +240 -0
- package/dist/utils/pilot-metrics.js.map +1 -0
- package/dist/utils/replay-runtime.d.ts +34 -0
- package/dist/utils/replay-runtime.d.ts.map +1 -1
- package/dist/utils/replay-runtime.js +207 -0
- package/dist/utils/replay-runtime.js.map +1 -1
- package/dist/utils/verify-runtime-stability.d.ts +142 -0
- package/dist/utils/verify-runtime-stability.d.ts.map +1 -0
- package/dist/utils/verify-runtime-stability.js +230 -0
- package/dist/utils/verify-runtime-stability.js.map +1 -0
- package/dist/workspace/cross-repo-graph.d.ts +111 -0
- package/dist/workspace/cross-repo-graph.d.ts.map +1 -0
- package/dist/workspace/cross-repo-graph.js +450 -0
- package/dist/workspace/cross-repo-graph.js.map +1 -0
- package/dist/workspace/federated-context.d.ts +144 -0
- package/dist/workspace/federated-context.d.ts.map +1 -0
- package/dist/workspace/federated-context.js +347 -0
- package/dist/workspace/federated-context.js.map +1 -0
- package/dist/workspace/index.d.ts +38 -0
- package/dist/workspace/index.d.ts.map +1 -0
- package/dist/workspace/index.js +48 -0
- package/dist/workspace/index.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* neurcode remediate-export
|
|
4
|
+
*
|
|
5
|
+
* Exports a structured, deterministic remediation payload for a governance finding.
|
|
6
|
+
* The payload is designed to be passed to an external AI coding assistant
|
|
7
|
+
* (Cursor, Claude, Codex, GitHub Copilot) for remediation.
|
|
8
|
+
*
|
|
9
|
+
* TRUST BOUNDARY:
|
|
10
|
+
* Neurcode detects and exports. Your AI assistant remediates.
|
|
11
|
+
* This command never modifies any file.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* neurcode remediate-export --finding <id>
|
|
15
|
+
* neurcode remediate-export --finding-index 0
|
|
16
|
+
* neurcode remediate-export --all
|
|
17
|
+
* neurcode remediate-export --finding <id> --format mcp
|
|
18
|
+
* neurcode remediate-export --finding <id> --out ./payload.json
|
|
19
|
+
* neurcode remediate-export --finding <id> --copy
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.remediateExportCommand = remediateExportCommand;
|
|
23
|
+
const fs_1 = require("fs");
|
|
24
|
+
const path_1 = require("path");
|
|
25
|
+
const crypto_1 = require("crypto");
|
|
26
|
+
const child_process_1 = require("child_process");
|
|
27
|
+
const cli_json_1 = require("../utils/cli-json");
|
|
28
|
+
const chalk = (0, cli_json_1.loadChalk)();
|
|
29
|
+
// ── Trust boundary statement — fixed, never changes ──────────────────────────
|
|
30
|
+
const TRUST_BOUNDARY_STATEMENT = 'Neurcode deterministically detects and governs. ' +
|
|
31
|
+
'Your AI coding assistant (Cursor, Claude, Codex, GitHub Copilot) performs remediation. ' +
|
|
32
|
+
'Neurcode never autonomously modifies production code.';
|
|
33
|
+
// ── Remediation category map — deterministic, ruleId-keyed ───────────────────
|
|
34
|
+
const REMEDIATION_CATEGORY = {
|
|
35
|
+
PY003: 'exception-handling',
|
|
36
|
+
PY005: 'input-validation',
|
|
37
|
+
PY001: 'async-lifecycle',
|
|
38
|
+
PY006: 'async-lifecycle',
|
|
39
|
+
PY007: 'resource-lifecycle',
|
|
40
|
+
PY008: 'retry-resilience',
|
|
41
|
+
PY009: 'security',
|
|
42
|
+
PY010: 'resource-lifecycle',
|
|
43
|
+
PY011: 'thread-lifecycle',
|
|
44
|
+
PY012: 'async-lifecycle',
|
|
45
|
+
PY013: 'correctness',
|
|
46
|
+
PY014: 'retry-resilience',
|
|
47
|
+
SR001: 'exception-handling',
|
|
48
|
+
SR002: 'data-flow',
|
|
49
|
+
SR003: 'resource-lifecycle',
|
|
50
|
+
SR004: 'input-validation',
|
|
51
|
+
SR009: 'retry-resilience',
|
|
52
|
+
SR010: 'retry-resilience',
|
|
53
|
+
DS001: 'distributed-consistency',
|
|
54
|
+
'potential-secret-default': 'security',
|
|
55
|
+
'potential-secret-high': 'security',
|
|
56
|
+
};
|
|
57
|
+
// ── Suggested prompt hint per category — advisory, never prescriptive ─────────
|
|
58
|
+
const PROMPT_HINT = {
|
|
59
|
+
'exception-handling': 'The finding identifies an exception handling pattern that silently swallows errors. ' +
|
|
60
|
+
'Remediation should ensure exceptions are re-raised or converted to structured error responses.',
|
|
61
|
+
'input-validation': 'The finding identifies a missing input validation boundary. ' +
|
|
62
|
+
'Remediation should add schema validation (e.g., Pydantic model) before processing the input.',
|
|
63
|
+
'async-lifecycle': 'The finding identifies an async pattern that may cause silent failures or event loop blocking. ' +
|
|
64
|
+
'Remediation should ensure async tasks are tracked and exceptions are handled.',
|
|
65
|
+
'resource-lifecycle': 'The finding identifies a resource (session, connection, thread) that may not be properly closed. ' +
|
|
66
|
+
'Remediation should use context managers or explicit cleanup in finally blocks.',
|
|
67
|
+
'thread-lifecycle': 'The finding identifies a thread created without daemon=True or without a stored reference. ' +
|
|
68
|
+
'Remediation should set daemon=True and store the thread reference for join() on shutdown.',
|
|
69
|
+
'retry-resilience': 'The finding identifies a retry pattern without exponential backoff or a thundering-herd risk. ' +
|
|
70
|
+
'Remediation should implement exponential backoff with jitter.',
|
|
71
|
+
'security': 'The finding identifies a security-sensitive pattern (hardcoded credential, unsafe deserialization). ' +
|
|
72
|
+
'Remediation must use environment variables, secret managers, or safe alternatives.',
|
|
73
|
+
'correctness': 'The finding identifies a correctness issue (e.g., mutable default argument). ' +
|
|
74
|
+
'Remediation should follow standard Python idioms to avoid shared mutable state.',
|
|
75
|
+
'distributed-consistency': 'The finding identifies a distributed consistency issue. ' +
|
|
76
|
+
'Remediation should add compensating logic, idempotency, or saga rollback.',
|
|
77
|
+
'data-flow': 'The finding identifies a data flow issue (unbounded collection, leaking state). ' +
|
|
78
|
+
'Remediation should add bounds or explicit cleanup.',
|
|
79
|
+
};
|
|
80
|
+
async function remediateExportCommand(options) {
|
|
81
|
+
const projectRoot = process.cwd();
|
|
82
|
+
const lastVerifyPath = (0, path_1.join)(projectRoot, '.neurcode', 'last-verify-output.json');
|
|
83
|
+
if (!(0, fs_1.existsSync)(lastVerifyPath)) {
|
|
84
|
+
console.error(chalk.red('✗ No verify output found.'));
|
|
85
|
+
console.error(chalk.dim(' Run: neurcode verify --policy-only --json'));
|
|
86
|
+
console.error(chalk.dim(' The last verify output must exist at .neurcode/last-verify-output.json'));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
let verifyOutput;
|
|
90
|
+
try {
|
|
91
|
+
verifyOutput = JSON.parse((0, fs_1.readFileSync)(lastVerifyPath, 'utf-8'));
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
console.error(chalk.red('✗ Could not parse .neurcode/last-verify-output.json'));
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
// Collect findings from verify output
|
|
98
|
+
const findings = collectFindings(verifyOutput);
|
|
99
|
+
if (findings.length === 0) {
|
|
100
|
+
console.log(chalk.green('✅ No findings in last verify run. Nothing to export.'));
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Select which findings to export
|
|
104
|
+
let selected = [];
|
|
105
|
+
if (options.all) {
|
|
106
|
+
selected = findings;
|
|
107
|
+
}
|
|
108
|
+
else if (options.findingIndex !== undefined) {
|
|
109
|
+
const idx = parseInt(options.findingIndex, 10);
|
|
110
|
+
if (isNaN(idx) || idx < 0 || idx >= findings.length) {
|
|
111
|
+
console.error(chalk.red(`✗ --finding-index ${options.findingIndex} out of range. ${findings.length} findings available.`));
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
selected = [findings[idx]];
|
|
115
|
+
}
|
|
116
|
+
else if (options.finding) {
|
|
117
|
+
const found = findings.filter((f) => (f.id ?? f.findingId ?? '') === options.finding ||
|
|
118
|
+
String(f.findingId ?? f.id ?? '').startsWith(options.finding));
|
|
119
|
+
if (found.length === 0) {
|
|
120
|
+
console.error(chalk.red(`✗ Finding "${options.finding}" not found in last verify output.`));
|
|
121
|
+
console.error(chalk.dim(` Available IDs:`));
|
|
122
|
+
findings.slice(0, 10).forEach((f) => console.error(chalk.dim(` ${f.id ?? f.findingId ?? '(no id)'} — ${f.ruleId ?? f.rule ?? '?'} @ ${f.file ?? f.filePath ?? '?'}`)));
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
selected = found;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Default: export index 0 with a prompt
|
|
129
|
+
console.log(chalk.dim(`No finding specified. Exporting finding at index 0. Use --finding-index N or --all.\n`));
|
|
130
|
+
selected = [findings[0]];
|
|
131
|
+
}
|
|
132
|
+
const format = options.format ?? 'json';
|
|
133
|
+
const replayChecksum = verifyOutput.replayChecksum ?? null;
|
|
134
|
+
const replayMode = verifyOutput.replayMode ?? null;
|
|
135
|
+
const payloads = selected.map((finding) => buildPayload(finding, verifyOutput, projectRoot, replayChecksum, replayMode, format));
|
|
136
|
+
const output = payloads.length === 1
|
|
137
|
+
? JSON.stringify(format === 'mcp' ? payloads[0].mcpEnvelope : payloads[0], null, 2)
|
|
138
|
+
: JSON.stringify(format === 'mcp' ? payloads.map(p => p.mcpEnvelope) : payloads, null, 2);
|
|
139
|
+
// Write to file or stdout
|
|
140
|
+
if (options.out) {
|
|
141
|
+
const outPath = (0, path_1.resolve)(projectRoot, options.out);
|
|
142
|
+
(0, fs_1.writeFileSync)(outPath, output, 'utf-8');
|
|
143
|
+
console.log(chalk.green(`✅ Remediation export written to ${outPath}`));
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.log(output);
|
|
147
|
+
}
|
|
148
|
+
// Copy to clipboard
|
|
149
|
+
if (options.copy) {
|
|
150
|
+
try {
|
|
151
|
+
(0, child_process_1.execSync)('pbcopy', { input: output });
|
|
152
|
+
console.error(chalk.green('\n✅ Remediation payload copied to clipboard.'));
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
console.error(chalk.yellow('\n⚠ --copy failed (pbcopy not available on this system).'));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Print trust boundary reminder
|
|
159
|
+
if (!options.json) {
|
|
160
|
+
console.error(chalk.dim('\n─────────────────────────────────────────────────────────'));
|
|
161
|
+
console.error(chalk.cyan(' Trust Boundary'));
|
|
162
|
+
console.error(chalk.dim(' Neurcode detects. Your AI assistant remediates.'));
|
|
163
|
+
console.error(chalk.dim(' Pass this payload to Cursor, Claude, Codex, or any provider.'));
|
|
164
|
+
console.error(chalk.dim(' Neurcode will re-verify after remediation.'));
|
|
165
|
+
console.error(chalk.dim('─────────────────────────────────────────────────────────\n'));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// ── Builders ──────────────────────────────────────────────────────────────────
|
|
169
|
+
function collectFindings(verifyOutput) {
|
|
170
|
+
// Try multiple possible locations in verify output shape
|
|
171
|
+
const govEnvelope = verifyOutput.governanceVerification?.findings ?? [];
|
|
172
|
+
const violations = verifyOutput.violations ?? [];
|
|
173
|
+
const blockingItems = verifyOutput.blockingItems ?? [];
|
|
174
|
+
const advisoryItems = verifyOutput.advisoryItems ?? [];
|
|
175
|
+
if (govEnvelope.length > 0)
|
|
176
|
+
return govEnvelope;
|
|
177
|
+
return [...violations, ...blockingItems, ...advisoryItems];
|
|
178
|
+
}
|
|
179
|
+
function buildPayload(finding, verifyOutput, projectRoot, replayChecksum, replayMode, format) {
|
|
180
|
+
const ruleId = finding.ruleId ?? finding.rule ?? finding.structuralMetadata?.ruleId ?? 'UNKNOWN';
|
|
181
|
+
const filePath = finding.filePath ?? finding.file ?? finding.evidence?.filePath ?? '';
|
|
182
|
+
const line = finding.line ?? finding.evidence?.line ?? null;
|
|
183
|
+
const column = finding.column ?? finding.evidence?.column ?? null;
|
|
184
|
+
const severity = finding.severity ?? 'BLOCKING';
|
|
185
|
+
const determinismClass = finding.determinismClassification ?? finding.determinism ?? 'deterministic-structural';
|
|
186
|
+
const findingId = finding.id ?? finding.findingId ?? '';
|
|
187
|
+
const ruleName = finding.title ?? finding.ruleName ?? finding.name ?? ruleId;
|
|
188
|
+
const operationalExplanation = finding.operationalImplication ?? finding.message ?? finding.explanation ?? '';
|
|
189
|
+
// Extract code span from file if it exists
|
|
190
|
+
const { codeSpan, surroundingContext } = extractCodeSpan(projectRoot, filePath, line);
|
|
191
|
+
// Deterministic export ID
|
|
192
|
+
const exportId = (0, crypto_1.createHash)('sha256')
|
|
193
|
+
.update(`${findingId}|${filePath}|${line ?? 0}|${ruleId}`)
|
|
194
|
+
.digest('hex')
|
|
195
|
+
.slice(0, 32);
|
|
196
|
+
// Finding graph hash (deterministic over finding identity fields)
|
|
197
|
+
const findingGraphHash = (0, crypto_1.createHash)('sha256')
|
|
198
|
+
.update(`${ruleId}|${filePath}|${line ?? 0}|${severity}|${determinismClass}`)
|
|
199
|
+
.digest('hex')
|
|
200
|
+
.slice(0, 16);
|
|
201
|
+
const remediationCategory = REMEDIATION_CATEGORY[ruleId] ?? 'general';
|
|
202
|
+
const suggestedPromptHint = PROMPT_HINT[remediationCategory] ?? PROMPT_HINT['correctness'];
|
|
203
|
+
const policyViolations = [];
|
|
204
|
+
if (finding.structuralMetadata?.policyRef)
|
|
205
|
+
policyViolations.push(finding.structuralMetadata.policyRef);
|
|
206
|
+
if (finding.policy)
|
|
207
|
+
policyViolations.push(finding.policy);
|
|
208
|
+
const payload = {
|
|
209
|
+
exportId,
|
|
210
|
+
exportedAt: new Date().toISOString(),
|
|
211
|
+
neurcodeVersion: '0.9.66',
|
|
212
|
+
schemaVersion: '2026-05-12',
|
|
213
|
+
findingId,
|
|
214
|
+
ruleId,
|
|
215
|
+
ruleName,
|
|
216
|
+
severity,
|
|
217
|
+
determinismClass,
|
|
218
|
+
filePath,
|
|
219
|
+
line,
|
|
220
|
+
column,
|
|
221
|
+
codeSpan,
|
|
222
|
+
surroundingContext,
|
|
223
|
+
policyViolations,
|
|
224
|
+
operationalExplanation,
|
|
225
|
+
remediationCategory,
|
|
226
|
+
trustBoundaryStatement: TRUST_BOUNDARY_STATEMENT,
|
|
227
|
+
replayChecksum,
|
|
228
|
+
replayMode,
|
|
229
|
+
findingGraphHash,
|
|
230
|
+
provenanceRunId: finding.provenanceMetadata?.planId ?? null,
|
|
231
|
+
provenanceAt: finding.provenanceMetadata?.generatedAt ?? null,
|
|
232
|
+
suggestedPromptHint,
|
|
233
|
+
};
|
|
234
|
+
if (format === 'mcp') {
|
|
235
|
+
payload.mcpEnvelope = {
|
|
236
|
+
type: 'neurcode/remediation-request',
|
|
237
|
+
version: '1.0',
|
|
238
|
+
trust: 'deterministic-governance',
|
|
239
|
+
finding: {
|
|
240
|
+
id: findingId,
|
|
241
|
+
ruleId,
|
|
242
|
+
severity,
|
|
243
|
+
file: filePath,
|
|
244
|
+
line,
|
|
245
|
+
codeSpan,
|
|
246
|
+
},
|
|
247
|
+
context: surroundingContext,
|
|
248
|
+
constraint: TRUST_BOUNDARY_STATEMENT,
|
|
249
|
+
promptHint: suggestedPromptHint,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
return payload;
|
|
253
|
+
}
|
|
254
|
+
function extractCodeSpan(projectRoot, filePath, line) {
|
|
255
|
+
if (!filePath || line === null) {
|
|
256
|
+
return { codeSpan: '(file or line not available)', surroundingContext: '' };
|
|
257
|
+
}
|
|
258
|
+
const fullPath = (0, path_1.resolve)(projectRoot, filePath);
|
|
259
|
+
if (!(0, fs_1.existsSync)(fullPath)) {
|
|
260
|
+
return { codeSpan: `(file not found: ${filePath})`, surroundingContext: '' };
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
const content = (0, fs_1.readFileSync)(fullPath, 'utf-8');
|
|
264
|
+
const lines = content.split('\n');
|
|
265
|
+
const zeroIdx = line - 1;
|
|
266
|
+
const targetLine = lines[zeroIdx] ?? '';
|
|
267
|
+
const contextStart = Math.max(0, zeroIdx - 5);
|
|
268
|
+
const contextEnd = Math.min(lines.length - 1, zeroIdx + 5);
|
|
269
|
+
const contextLines = [];
|
|
270
|
+
for (let i = contextStart; i <= contextEnd; i++) {
|
|
271
|
+
const prefix = i === zeroIdx ? '→ ' : ' ';
|
|
272
|
+
contextLines.push(`${String(i + 1).padStart(4)} ${prefix}${lines[i]}`);
|
|
273
|
+
}
|
|
274
|
+
return {
|
|
275
|
+
codeSpan: targetLine.trim(),
|
|
276
|
+
surroundingContext: contextLines.join('\n'),
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
return { codeSpan: '(could not read file)', surroundingContext: '' };
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=remediate-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remediate-export.js","sourceRoot":"","sources":["../../src/commands/remediate-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Governance-aligned remediation subcommands for the Neurcode CLI.
|
|
3
|
+
*
|
|
4
|
+
* These implement the provider-agnostic remediation architecture:
|
|
5
|
+
* neurcode remediate export → export GovernanceRemediationRequest JSON
|
|
6
|
+
* neurcode remediate validate → validate a patch against governance rules
|
|
7
|
+
* neurcode remediate status → show remediation artifact status
|
|
8
|
+
*
|
|
9
|
+
* These are SEPARATE from the autonomous remediation loop in remediate.ts.
|
|
10
|
+
* Governance remains deterministic throughout.
|
|
11
|
+
* LLMs are optional and advisory — never autonomous.
|
|
12
|
+
*/
|
|
13
|
+
export interface GovernanceRemediateExportOptions {
|
|
14
|
+
findingId?: string;
|
|
15
|
+
findingIndex?: number;
|
|
16
|
+
verifyOutputFile?: string;
|
|
17
|
+
projectRoot?: string;
|
|
18
|
+
outputFile?: string;
|
|
19
|
+
json?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* neurcode remediate export
|
|
23
|
+
*
|
|
24
|
+
* Reads governance findings from a verify output JSON file and exports a
|
|
25
|
+
* GovernanceRemediationRequest artifact for the selected finding.
|
|
26
|
+
* No provider is invoked. No files are modified.
|
|
27
|
+
*/
|
|
28
|
+
export declare function remediateExportCommand(options?: GovernanceRemediateExportOptions): Promise<void>;
|
|
29
|
+
export interface GovernanceRemediateValidateOptions {
|
|
30
|
+
requestFile: string;
|
|
31
|
+
responseDiff?: string;
|
|
32
|
+
responseFile?: string;
|
|
33
|
+
projectRoot?: string;
|
|
34
|
+
json?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* neurcode remediate validate
|
|
38
|
+
*
|
|
39
|
+
* Validates an LLM-generated (or manually written) patch against the
|
|
40
|
+
* deterministic governance validation pipeline.
|
|
41
|
+
* Never modifies files. Output is a validation receipt (append-only).
|
|
42
|
+
*/
|
|
43
|
+
export declare function remediateValidateCommand(options: GovernanceRemediateValidateOptions): Promise<void>;
|
|
44
|
+
export interface GovernanceRemediateStatusOptions {
|
|
45
|
+
projectRoot?: string;
|
|
46
|
+
json?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* neurcode remediate status
|
|
50
|
+
*
|
|
51
|
+
* Shows the status of all remediation artifacts in .neurcode/remediation/.
|
|
52
|
+
*/
|
|
53
|
+
export declare function remediateStatusCommand(options?: GovernanceRemediateStatusOptions): Promise<void>;
|
|
54
|
+
//# sourceMappingURL=remediate-governance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remediate-governance.d.ts","sourceRoot":"","sources":["../../src/commands/remediate-governance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA8BH,MAAM,WAAW,gCAAgC;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,gCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC,CA+H1G;AAID,MAAM,WAAW,kCAAkC;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,kCAAkC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgJzG;AAID,MAAM,WAAW,gCAAgC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,GAAE,gCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC,CA6D1G"}
|