@ornexus/neocortex 4.60.72 → 4.60.74
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/dist/release-source.json +1 -1
- package/dist/sbom.cdx.json +1217 -1211
- package/install.ps1 +1 -1
- package/install.sh +1 -1
- package/package.json +2 -2
- package/packages/client/dist/commands/invoke.js +66 -66
- package/packages/client/dist/continuity/sqlite-store.d.ts +22 -1
- package/packages/client/dist/continuity/sqlite-store.js +60 -60
- package/packages/client/dist/git/epic-operational-state.d.ts +198 -0
- package/packages/client/dist/git/epic-operational-state.js +2 -0
- package/packages/client/dist/git/git-lifecycle-store.d.ts +32 -1
- package/packages/client/dist/git/git-lifecycle-store.js +9 -8
- package/packages/client/dist/migrations/epic-lifecycle-backfill.d.ts +97 -0
- package/packages/client/dist/migrations/epic-lifecycle-backfill.js +3 -0
- package/packages/client/dist/migrations/state-json.d.ts +22 -0
- package/packages/client/dist/migrations/state-json.js +4 -4
- package/packages/client/dist/runner/headless/epic-merge-candidate-qa.d.ts +1 -1
- package/packages/client/dist/runner/headless/epic-merge-candidate-qa.js +2 -2
- package/packages/client/dist/runner/headless/epic-terminal-git-cli-adapter.d.ts +2 -0
- package/packages/client/dist/runner/headless/epic-terminal-git-cli-adapter.js +10 -8
- package/packages/client/dist/runner/headless/epic-terminal-git-runner.d.ts +18 -2
- package/packages/client/dist/runner/headless/epic-terminal-git-runner.js +2 -2
- package/packages/client/dist/runner/headless/run-yolo.js +1 -1
- package/packages/client/dist/runner/headless/run-yoloop.d.ts +1 -0
- package/packages/client/dist/runner/headless/run-yoloop.js +2 -2
- package/packages/client/dist/runner/headless/types.js +2 -2
- package/packages/client/dist/state/project-state-snapshot.d.ts +8 -0
- package/packages/client/dist/state/project-state-snapshot.js +1 -1
- package/packages/client/dist/yolo/spec-envelope-collector.js +3 -3
- package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +65 -1
- package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +8 -0
- package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -1
- package/packages/shared/dist/yolo/change-evidence.js +1 -1
- package/packages/shared/dist/yolo/spec-envelope.js +3 -6
- package/packages/shared/dist/yoloop/epic-terminal-git.js +144 -2
- package/targets-stubs/antigravity/gemini.md +1 -1
- package/targets-stubs/antigravity/skill/SKILL.md +1 -1
- package/targets-stubs/claude-code/neocortex-root.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex-root.md +2 -2
- package/targets-stubs/claude-code/neocortex.agent.yaml +1 -1
- package/targets-stubs/claude-code/neocortex.md +2 -2
- package/targets-stubs/codex/AGENTS.md +1 -1
- package/targets-stubs/cursor/agent.md +2 -2
- package/targets-stubs/gemini-cli/agent.md +2 -2
- package/targets-stubs/opencode/neocortex-root.md +1 -1
- package/targets-stubs/vscode/neocortex.agent.md +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { posix } from 'node:path';
|
|
3
3
|
const SHA = /^[a-f0-9]{40}(?:[a-f0-9]{24})?$/;
|
|
4
|
-
const PATH = /^[A-Za-z0-9_
|
|
4
|
+
const PATH = /^[A-Za-z0-9_.\[\]-][A-Za-z0-9_./ \[\]-]{0,239}$/;
|
|
5
5
|
const UNSAFE = /(^|\/)(?:\.env(?:\.|$)|secrets?|credentials?|private-prompts?|customer-data)(?:\/|$)|(?:token|password|license[_-]?key|secret)[=:]/i;
|
|
6
6
|
function digest(paths) {
|
|
7
7
|
return createHash('sha256').update(JSON.stringify(paths)).digest('hex');
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
2
|
import { posix } from 'node:path';
|
|
3
3
|
import { inspectFrontmatterContext } from '../frontmatter-context-contract.js';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
// Artifact bytes are intentionally not capped here. The invoke transport owns
|
|
5
|
+
// the request-level byte guardrail; this contract owns count, shape, content,
|
|
6
|
+
// target, freshness and digest integrity without a smaller duplicate ceiling.
|
|
6
7
|
export const YOLO_SPEC_MAX_ARTIFACTS = 12;
|
|
7
8
|
export const YOLO_SPEC_MAX_AGE_MS = 120_000;
|
|
8
9
|
export const YOLO_SPEC_FUTURE_SKEW_MS = 30_000;
|
|
@@ -59,8 +60,6 @@ function checkArtifact(value) {
|
|
|
59
60
|
}
|
|
60
61
|
const content = normalizeContent(value.content);
|
|
61
62
|
const bytes = Buffer.byteLength(content, 'utf8');
|
|
62
|
-
if (bytes > YOLO_SPEC_ARTIFACT_LIMIT_BYTES)
|
|
63
|
-
deny('yolo-spec-envelope-too-large');
|
|
64
63
|
if (content !== value.content || bytes !== value.byteLength || sha256(content) !== value.sha256) {
|
|
65
64
|
deny('yolo-spec-envelope-digest-mismatch');
|
|
66
65
|
}
|
|
@@ -126,8 +125,6 @@ export function assertYoloSpecEnvelopeV1(value, context) {
|
|
|
126
125
|
for (const artifact of artifacts)
|
|
127
126
|
checkArtifact(artifact);
|
|
128
127
|
const typedArtifacts = artifacts;
|
|
129
|
-
if (typedArtifacts.reduce((sum, artifact) => sum + artifact.byteLength, 0) > YOLO_SPEC_TOTAL_LIMIT_BYTES)
|
|
130
|
-
deny('yolo-spec-envelope-too-large');
|
|
131
128
|
const keys = typedArtifacts.map((artifact) => `${artifact.kind}:${artifact.path}`);
|
|
132
129
|
if (new Set(keys).size !== keys.length || keys.some((key, index) => index > 0 && key < keys[index - 1]))
|
|
133
130
|
deny('yolo-spec-envelope-unsafe');
|
|
@@ -1,4 +1,17 @@
|
|
|
1
1
|
/** Public contracts and pure safety decisions for epic-owned terminal Git. */
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
/**
|
|
4
|
+
* P205 complete-gate budgets are declared in config/release-gates.v2.json and
|
|
5
|
+
* mirrored here so installed clients keep the same closed runtime bounds.
|
|
6
|
+
* release-gates.test.mjs prevents either side from drifting independently.
|
|
7
|
+
*/
|
|
8
|
+
export const P205_RELEASE_GATE_BUDGETS = Object.freeze({
|
|
9
|
+
completeGateWorstCaseMs: 45 * 60 * 1000,
|
|
10
|
+
cancellationGraceMs: 5 * 60 * 1000,
|
|
11
|
+
aggregateValidityMs: 2 * 60 * 60 * 1000,
|
|
12
|
+
terminalWorkflowMaxDurationMs: 2 * 60 * 60 * 1000,
|
|
13
|
+
});
|
|
14
|
+
export const P205_ROOT_INVOKE_TIMEOUT_MS = P205_RELEASE_GATE_BUDGETS.completeGateWorstCaseMs + P205_RELEASE_GATE_BUDGETS.cancellationGraceMs;
|
|
2
15
|
export const EPIC_TERMINAL_GIT_REASON_CODES = Object.freeze({
|
|
3
16
|
READY: 'epic-terminal-git-ready',
|
|
4
17
|
ALREADY_COMPLETE: 'epic-terminal-git-already-complete',
|
|
@@ -38,6 +51,96 @@ export const EPIC_TERMINAL_GIT_REASON_CODES = Object.freeze({
|
|
|
38
51
|
PR_BASE_GUARD_UNVERIFIABLE: 'epic-terminal-pr-base-guard-unverifiable',
|
|
39
52
|
PR_MERGE_QUEUE_LOCAL_GATE_REQUIRED: 'epic-terminal-pr-merge-queue-local-gate-required',
|
|
40
53
|
});
|
|
54
|
+
export function epicHeadReconciliationRangeDigest(lastAcceptedCheckpointHeadSha, executionHeadSha, reconciliationCommitShas) {
|
|
55
|
+
return createHash('sha256').update([
|
|
56
|
+
'epic-head-reconciliation-range-v1',
|
|
57
|
+
lastAcceptedCheckpointHeadSha,
|
|
58
|
+
executionHeadSha,
|
|
59
|
+
...reconciliationCommitShas,
|
|
60
|
+
].join('\0')).digest('hex');
|
|
61
|
+
}
|
|
62
|
+
export function epicHeadReconciliationPathsDigest(paths) {
|
|
63
|
+
return createHash('sha256').update(paths.join('\0')).digest('hex');
|
|
64
|
+
}
|
|
65
|
+
export function epicHeadReconciliationInputDigest(value) {
|
|
66
|
+
return createHash('sha256').update(JSON.stringify({
|
|
67
|
+
schemaVersion: value.schemaVersion,
|
|
68
|
+
kind: value.kind,
|
|
69
|
+
producer: value.producer,
|
|
70
|
+
epicId: value.epicId,
|
|
71
|
+
executionBranch: value.executionBranch,
|
|
72
|
+
originBranch: value.originBranch,
|
|
73
|
+
graphRevision: value.graphRevision,
|
|
74
|
+
originHeadSha: value.originHeadSha,
|
|
75
|
+
lastAcceptedCheckpointHeadSha: value.lastAcceptedCheckpointHeadSha,
|
|
76
|
+
executionHeadSha: value.executionHeadSha,
|
|
77
|
+
acceptedCheckpointIds: value.acceptedCheckpointIds,
|
|
78
|
+
acceptedCheckpointHeads: value.acceptedCheckpointHeads,
|
|
79
|
+
reconciliationCommitShas: value.reconciliationCommitShas,
|
|
80
|
+
commitRangeDigest: value.commitRangeDigest,
|
|
81
|
+
changedPaths: value.changedPaths,
|
|
82
|
+
changedPathsDigest: value.changedPathsDigest,
|
|
83
|
+
allowedWriteSet: value.allowedWriteSet,
|
|
84
|
+
allowedWriteSetDigest: value.allowedWriteSetDigest,
|
|
85
|
+
aggregateReceiptRef: value.aggregateReceiptRef,
|
|
86
|
+
aggregateManifestDigest: value.aggregateManifestDigest,
|
|
87
|
+
aggregateResultDigest: value.aggregateResultDigest,
|
|
88
|
+
producedAt: value.producedAt,
|
|
89
|
+
revalidatedAt: value.revalidatedAt,
|
|
90
|
+
publicSafe: value.publicSafe,
|
|
91
|
+
})).digest('hex');
|
|
92
|
+
}
|
|
93
|
+
export function validateEpicHeadReconciliationReceipt(value, expected) {
|
|
94
|
+
if (!value || value.schemaVersion !== 1 || value.kind !== 'epic_head_reconciliation'
|
|
95
|
+
|| value.producer !== 'client-p205-head-reconciliation-v1' || value.publicSafe !== true
|
|
96
|
+
|| !nonEmpty(value.epicId) || !nonEmpty(value.executionBranch) || !nonEmpty(value.originBranch)
|
|
97
|
+
|| !Array.isArray(value.acceptedCheckpointIds) || !Array.isArray(value.acceptedCheckpointHeads)
|
|
98
|
+
|| !Array.isArray(value.reconciliationCommitShas) || !Array.isArray(value.changedPaths)
|
|
99
|
+
|| !Array.isArray(value.allowedWriteSet)
|
|
100
|
+
|| value.epicId !== expected.epicId || value.executionBranch !== expected.executionBranch
|
|
101
|
+
|| value.originBranch !== expected.originBranch || value.graphRevision !== expected.graphRevision
|
|
102
|
+
|| value.originHeadSha !== expected.originHeadSha || value.executionHeadSha !== expected.executionHeadSha
|
|
103
|
+
|| value.lastAcceptedCheckpointHeadSha !== expected.acceptedCheckpointHeads.at(-1)
|
|
104
|
+
|| !sameOrdered(value.acceptedCheckpointIds, expected.acceptedCheckpointIds)
|
|
105
|
+
|| !sameOrdered(value.acceptedCheckpointHeads, expected.acceptedCheckpointHeads)
|
|
106
|
+
|| value.aggregateReceiptRef !== expected.aggregateQaReceipt.receiptRef
|
|
107
|
+
|| value.aggregateManifestDigest !== expected.aggregateQaReceipt.manifestDigest
|
|
108
|
+
|| value.aggregateResultDigest !== expected.aggregateQaReceipt.resultDigest
|
|
109
|
+
|| !nonEmpty(value.aggregateReceiptRef) || !isHash(value.aggregateManifestDigest)
|
|
110
|
+
|| !isHash(value.aggregateResultDigest) || !nonEmpty(value.producedAt) || !nonEmpty(value.revalidatedAt)
|
|
111
|
+
|| value.acceptedCheckpointIds.length === 0 || value.acceptedCheckpointIds.length > 2_048
|
|
112
|
+
|| value.acceptedCheckpointIds.some((id) => !nonEmpty(id) || id.length > 240)
|
|
113
|
+
|| value.reconciliationCommitShas.length > 2_048
|
|
114
|
+
|| value.changedPaths.length > 2_048
|
|
115
|
+
|| value.allowedWriteSet.length === 0 || value.allowedWriteSet.length > 2_048
|
|
116
|
+
|| (value.lastAcceptedCheckpointHeadSha !== value.executionHeadSha
|
|
117
|
+
&& (value.reconciliationCommitShas.length === 0 || value.changedPaths.length === 0))
|
|
118
|
+
|| (value.lastAcceptedCheckpointHeadSha === value.executionHeadSha
|
|
119
|
+
&& (value.reconciliationCommitShas.length !== 0 || value.changedPaths.length !== 0))
|
|
120
|
+
|| !isFullSha(value.originHeadSha) || !isFullSha(value.lastAcceptedCheckpointHeadSha)
|
|
121
|
+
|| !isFullSha(value.executionHeadSha) || !isHash(value.graphRevision)
|
|
122
|
+
|| value.acceptedCheckpointHeads.some((sha) => !isFullSha(sha))
|
|
123
|
+
|| value.reconciliationCommitShas.some((sha) => !isFullSha(sha))
|
|
124
|
+
|| !sameOrdered(value.changedPaths, [...new Set(value.changedPaths)].sort())
|
|
125
|
+
|| !sameOrdered(value.allowedWriteSet, [...new Set(value.allowedWriteSet)].sort())
|
|
126
|
+
|| value.changedPaths.some((path) => !safeRepositoryPath(path))
|
|
127
|
+
|| value.allowedWriteSet.some((path) => !safeWriteScope(path))
|
|
128
|
+
|| value.changedPaths.some((path) => !value.allowedWriteSet.some((scope) => writeScopeCovers(scope, path)))
|
|
129
|
+
|| value.commitRangeDigest !== epicHeadReconciliationRangeDigest(value.lastAcceptedCheckpointHeadSha, value.executionHeadSha, value.reconciliationCommitShas)
|
|
130
|
+
|| value.changedPathsDigest !== epicHeadReconciliationPathsDigest(value.changedPaths)
|
|
131
|
+
|| value.allowedWriteSetDigest !== epicHeadReconciliationPathsDigest(value.allowedWriteSet)
|
|
132
|
+
|| value.inputDigest !== epicHeadReconciliationInputDigest(value)
|
|
133
|
+
|| !isHash(value.commitRangeDigest) || !isHash(value.changedPathsDigest)
|
|
134
|
+
|| !isHash(value.allowedWriteSetDigest) || !isHash(value.inputDigest))
|
|
135
|
+
return false;
|
|
136
|
+
const producedAt = Date.parse(value.producedAt);
|
|
137
|
+
const revalidatedAt = Date.parse(value.revalidatedAt);
|
|
138
|
+
const now = Date.parse(expected.nowIso);
|
|
139
|
+
return Number.isFinite(producedAt) && Number.isFinite(revalidatedAt) && Number.isFinite(now)
|
|
140
|
+
&& revalidatedAt >= producedAt
|
|
141
|
+
&& now - revalidatedAt <= P205_RELEASE_GATE_BUDGETS.aggregateValidityMs
|
|
142
|
+
&& revalidatedAt - now <= P205_RELEASE_GATE_BUDGETS.cancellationGraceMs;
|
|
143
|
+
}
|
|
41
144
|
export function validateEpicTerminalGitDirective(directive, actual) {
|
|
42
145
|
const reasons = [];
|
|
43
146
|
if (!nonEmpty(directive.originBranch))
|
|
@@ -76,8 +179,8 @@ export function validateEpicTerminalGitDirective(directive, actual) {
|
|
|
76
179
|
|| !directive.localGates.receiptRefs.includes(aggregate.receiptRef)) {
|
|
77
180
|
reasons.push(EPIC_TERMINAL_GIT_REASON_CODES.AGGREGATE_QA_REQUIRED);
|
|
78
181
|
}
|
|
79
|
-
else if (!Number.isFinite(Date.parse(aggregate.checkedAt)) || actual.nowIso && (Date.parse(actual.nowIso) - Date.parse(aggregate.checkedAt) >
|
|
80
|
-
|| Date.parse(aggregate.checkedAt) - Date.parse(actual.nowIso) >
|
|
182
|
+
else if (!Number.isFinite(Date.parse(aggregate.checkedAt)) || actual.nowIso && (Date.parse(actual.nowIso) - Date.parse(aggregate.checkedAt) > P205_RELEASE_GATE_BUDGETS.aggregateValidityMs
|
|
183
|
+
|| Date.parse(aggregate.checkedAt) - Date.parse(actual.nowIso) > P205_RELEASE_GATE_BUDGETS.cancellationGraceMs)) {
|
|
81
184
|
reasons.push(EPIC_TERMINAL_GIT_REASON_CODES.AGGREGATE_QA_STALE);
|
|
82
185
|
}
|
|
83
186
|
const originBinding = actual.originBinding;
|
|
@@ -90,6 +193,24 @@ export function validateEpicTerminalGitDirective(directive, actual) {
|
|
|
90
193
|
|| !Number.isFinite(Date.parse(originBinding.capturedAt))) {
|
|
91
194
|
reasons.push(EPIC_TERMINAL_GIT_REASON_CODES.ORIGIN_BINDING_REQUIRED);
|
|
92
195
|
}
|
|
196
|
+
const directedReconciliation = directive.localGates?.headReconciliationReceipt;
|
|
197
|
+
const actualReconciliation = actual.headReconciliationReceipt;
|
|
198
|
+
if (directedReconciliation && (!actualReconciliation || !originBinding || !aggregate
|
|
199
|
+
|| directedReconciliation.inputDigest !== actualReconciliation.inputDigest
|
|
200
|
+
|| !validateEpicHeadReconciliationReceipt(actualReconciliation, {
|
|
201
|
+
epicId: directive.epicId,
|
|
202
|
+
executionBranch: directive.executionBranch,
|
|
203
|
+
originBranch: directive.originBranch,
|
|
204
|
+
graphRevision: directive.graphRevision,
|
|
205
|
+
originHeadSha: originBinding.originHeadSha,
|
|
206
|
+
executionHeadSha: actual.executionHeadSha,
|
|
207
|
+
acceptedCheckpointIds: actual.acceptedCheckpointIds,
|
|
208
|
+
acceptedCheckpointHeads: actualReconciliation.acceptedCheckpointHeads,
|
|
209
|
+
aggregateQaReceipt: aggregate,
|
|
210
|
+
nowIso: actual.nowIso ?? new Date(0).toISOString(),
|
|
211
|
+
}))) {
|
|
212
|
+
reasons.push(EPIC_TERMINAL_GIT_REASON_CODES.AGGREGATE_QA_REQUIRED);
|
|
213
|
+
}
|
|
93
214
|
if (actual.writerLeaseActive)
|
|
94
215
|
reasons.push(EPIC_TERMINAL_GIT_REASON_CODES.LEASE_ACTIVE);
|
|
95
216
|
if (!sameSet(directive.storyCheckpointIds, actual.acceptedCheckpointIds)) {
|
|
@@ -220,6 +341,9 @@ function nonEmpty(value) {
|
|
|
220
341
|
function isSha(value) {
|
|
221
342
|
return /^[a-f0-9]{7,64}$/i.test(value);
|
|
222
343
|
}
|
|
344
|
+
function isFullSha(value) {
|
|
345
|
+
return /^[a-f0-9]{40,64}$/i.test(value);
|
|
346
|
+
}
|
|
223
347
|
function isHash(value) {
|
|
224
348
|
return typeof value === 'string' && /^[a-f0-9]{64}$/i.test(value);
|
|
225
349
|
}
|
|
@@ -229,3 +353,21 @@ function unique(values) {
|
|
|
229
353
|
function sameSet(left, right) {
|
|
230
354
|
return left.length === right.length && [...left].sort().every((item, index) => item === [...right].sort()[index]);
|
|
231
355
|
}
|
|
356
|
+
function sameOrdered(left, right) {
|
|
357
|
+
return left.length === right.length && left.every((item, index) => item === right[index]);
|
|
358
|
+
}
|
|
359
|
+
function safeRepositoryPath(value) {
|
|
360
|
+
return safeWriteScope(value) && !value.endsWith('/');
|
|
361
|
+
}
|
|
362
|
+
function safeWriteScope(value) {
|
|
363
|
+
if (typeof value !== 'string' || value.length === 0 || value.length > 512
|
|
364
|
+
|| value.startsWith('/') || value.startsWith('-') || value.includes('\\')
|
|
365
|
+
|| value.includes('\0') || value.includes('//'))
|
|
366
|
+
return false;
|
|
367
|
+
const parts = value.replace(/\/$/, '').split('/');
|
|
368
|
+
return parts.length > 0 && parts.every((part) => part.length > 0 && part !== '.' && part !== '..')
|
|
369
|
+
&& parts[0] !== '.git';
|
|
370
|
+
}
|
|
371
|
+
function writeScopeCovers(scope, path) {
|
|
372
|
+
return scope === path || scope.endsWith('/') && path.startsWith(scope);
|
|
373
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex-root
|
|
3
|
-
description: "🧠 Neocortex Root Agent v4.60.
|
|
3
|
+
description: "🧠 Neocortex Root Agent v4.60.74 | OrNexus Team"
|
|
4
4
|
model: opus
|
|
5
5
|
color: blue
|
|
6
6
|
tools:
|
|
@@ -108,7 +108,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
108
108
|
┌────────────────────────────────────────────────────────────┐
|
|
109
109
|
│ │
|
|
110
110
|
│ ####### N E O C O R T E X │
|
|
111
|
-
│ ### ######## v4.60.
|
|
111
|
+
│ ### ######## v4.60.74 │
|
|
112
112
|
│ ######### ##### │
|
|
113
113
|
│ ## ############## Development Orchestrator │
|
|
114
114
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex
|
|
3
|
-
description: "🧠 Neocortex v4.60.
|
|
3
|
+
description: "🧠 Neocortex v4.60.74 | OrNexus Team"
|
|
4
4
|
model: opus
|
|
5
5
|
color: blue
|
|
6
6
|
permissionMode: bypassPermissions
|
|
@@ -104,7 +104,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
104
104
|
┌────────────────────────────────────────────────────────────┐
|
|
105
105
|
│ │
|
|
106
106
|
│ ####### N E O C O R T E X │
|
|
107
|
-
│ ### ######## v4.60.
|
|
107
|
+
│ ### ######## v4.60.74 │
|
|
108
108
|
│ ######### ##### │
|
|
109
109
|
│ ## ############## Development Orchestrator │
|
|
110
110
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -28,7 +28,7 @@ Codex built-in commands or actions.
|
|
|
28
28
|
|
|
29
29
|
<!-- END: Plugin Conflict Prevention -->
|
|
30
30
|
|
|
31
|
-
# Neocortex v4.60.
|
|
31
|
+
# Neocortex v4.60.74 | OrNexus Team
|
|
32
32
|
|
|
33
33
|
You are a Development Orchestrator. All orchestration logic is delivered by the remote Neocortex server.
|
|
34
34
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex
|
|
3
|
-
description: "🧠 Neocortex v4.60.
|
|
3
|
+
description: "🧠 Neocortex v4.60.74 | OrNexus Team"
|
|
4
4
|
model: inherit
|
|
5
5
|
readonly: false
|
|
6
6
|
is_background: false
|
|
@@ -64,7 +64,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
64
64
|
┌────────────────────────────────────────────────────────────┐
|
|
65
65
|
│ │
|
|
66
66
|
│ ####### N E O C O R T E X │
|
|
67
|
-
│ ### ######## v4.60.
|
|
67
|
+
│ ### ######## v4.60.74 │
|
|
68
68
|
│ ######### ##### │
|
|
69
69
|
│ ## ############## Development Orchestrator │
|
|
70
70
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: neocortex-root
|
|
3
|
-
description: "🧠 Neocortex v4.60.
|
|
3
|
+
description: "🧠 Neocortex v4.60.74 | OrNexus Team"
|
|
4
4
|
kind: local
|
|
5
5
|
tools:
|
|
6
6
|
# File operations (Gemini CLI built-ins)
|
|
@@ -62,7 +62,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
62
62
|
┌────────────────────────────────────────────────────────────┐
|
|
63
63
|
│ │
|
|
64
64
|
│ ####### N E O C O R T E X │
|
|
65
|
-
│ ### ######## v4.60.
|
|
65
|
+
│ ### ######## v4.60.74 │
|
|
66
66
|
│ ######### ##### │
|
|
67
67
|
│ ## ############## Development Orchestrator │
|
|
68
68
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -58,7 +58,7 @@ explicit server opt-in rather than a local assumption.
|
|
|
58
58
|
┌────────────────────────────────────────────────────────────┐
|
|
59
59
|
│ │
|
|
60
60
|
│ ####### N E O C O R T E X │
|
|
61
|
-
│ ### ######## v4.60.
|
|
61
|
+
│ ### ######## v4.60.74 │
|
|
62
62
|
│ ######### ##### │
|
|
63
63
|
│ ## ############## Development Orchestrator │
|
|
64
64
|
│ ## ### ###### ## OrNexus Team │
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: "neocortex"
|
|
3
|
-
description: "Neocortex v4.60.
|
|
3
|
+
description: "Neocortex v4.60.74 | OrNexus Team"
|
|
4
4
|
tools:
|
|
5
5
|
# Read / Edit (built-in tool sets)
|
|
6
6
|
- read
|
|
@@ -68,7 +68,7 @@ SEMPRE que este agente for invocado, imprima o banner abaixo como PRIMEIRO outpu
|
|
|
68
68
|
┌────────────────────────────────────────────────────────────┐
|
|
69
69
|
│ │
|
|
70
70
|
│ ####### N E O C O R T E X │
|
|
71
|
-
│ ### ######## v4.60.
|
|
71
|
+
│ ### ######## v4.60.74 │
|
|
72
72
|
│ ######### ##### │
|
|
73
73
|
│ ## ############## Development Orchestrator │
|
|
74
74
|
│ ## ### ###### ## OrNexus Team │
|