@ornexus/neocortex 4.60.22 → 4.60.23
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/sbom.cdx.json +24 -24
- package/install.ps1 +1 -1
- package/install.sh +1 -1
- package/package.json +6 -3
- package/packages/client/dist/cli.js +0 -0
- package/packages/client/dist/commands/invoke.d.ts +19 -5
- package/packages/client/dist/commands/invoke.js +55 -53
- package/packages/client/dist/continuity/invoke-hooks.js +1 -1
- package/packages/client/dist/fs/atomic-state-replace.d.ts +16 -0
- package/packages/client/dist/fs/atomic-state-replace.js +1 -0
- package/packages/client/dist/generated/command-registry.generated.d.ts +53 -19
- package/packages/client/dist/generated/command-registry.generated.js +1 -1
- package/packages/client/dist/graph-retrieval/pre-command-hook.d.ts +11 -0
- package/packages/client/dist/graph-retrieval/pre-command-hook.js +1 -1
- package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.js +1 -1
- package/packages/client/dist/invocation/invoke-input.d.ts +9 -0
- package/packages/client/dist/invocation/invoke-input.js +1 -0
- package/packages/client/dist/migrations/project-identity-capability.d.ts +13 -0
- package/packages/client/dist/migrations/project-identity-capability.js +1 -0
- package/packages/client/dist/migrations/project-identity.d.ts +41 -0
- package/packages/client/dist/migrations/project-identity.js +7 -0
- package/packages/client/dist/runner-cli.js +0 -0
- package/packages/client/dist/state/invocation-shape.d.ts +9 -0
- package/packages/client/dist/state/invocation-shape.js +1 -0
- package/packages/client/dist/state/project-state-snapshot.d.ts +9 -3
- package/packages/client/dist/state/project-state-snapshot.js +1 -1
- package/packages/client/dist/state/structural-dag-projection.d.ts +24 -0
- package/packages/client/dist/state/structural-dag-projection.js +1 -0
- package/packages/shared/dist/generated/command-registry.generated.js +66 -19
- package/packages/shared/dist/generated/invocation-schema.generated.js +16 -4
- package/packages/shared/dist/invocation/index.d.ts +6 -2
- package/packages/shared/dist/invocation/index.js +5 -0
- package/packages/shared/dist/invocation/input-envelope.d.ts +37 -0
- package/packages/shared/dist/invocation/input-envelope.js +98 -0
- package/packages/shared/dist/invocation/project-identity-migration.d.ts +28 -0
- package/packages/shared/dist/invocation/project-identity-migration.js +83 -0
- package/packages/shared/dist/invocation/public-diagnostics.d.ts +87 -0
- package/packages/shared/dist/invocation/public-diagnostics.js +181 -0
- package/packages/shared/dist/invocation/state-projection.d.ts +21 -0
- package/packages/shared/dist/invocation/state-projection.js +1 -0
- package/packages/shared/dist/invocation/strict-effect-receipt.d.ts +12 -0
- package/packages/shared/dist/invocation/strict-effect-receipt.js +43 -0
- 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
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
export const INVOCATION_PUBLIC_DIAGNOSTIC_VERSION = 1;
|
|
3
|
+
export const INVOCATION_DIGEST_PREFIX_LENGTH = 12;
|
|
4
|
+
const SAFE_REASON = /^[a-z0-9][a-z0-9._-]{0,79}$/;
|
|
5
|
+
const BYTE_BUCKETS = new Set(['0', '1-1023', '1k-16k', '16k-64k', '64k-128k', '128k-192k', '192k-256k', '256k+']);
|
|
6
|
+
const FLOOR_BUCKETS = new Set(['0-9', '10-99', '100-999', '1k-10k', '10k+']);
|
|
7
|
+
const INVOCATION_SHAPES = new Set([
|
|
8
|
+
'yolo-story', 'yolo-inline', 'yoloop-target', 'yoloop-session', 'yoloop-discovery',
|
|
9
|
+
]);
|
|
10
|
+
const TRACE_STAGES = new Set(['admission', 'input', 'shape', 'projection', 'size-guard', 'send']);
|
|
11
|
+
function boundedCount(value) {
|
|
12
|
+
return Number.isSafeInteger(value) && value >= 0 ? Math.min(value, 1_000_000) : 0;
|
|
13
|
+
}
|
|
14
|
+
export function invocationByteBucket(bytes) {
|
|
15
|
+
const safe = boundedCount(bytes);
|
|
16
|
+
if (safe === 0)
|
|
17
|
+
return '0';
|
|
18
|
+
if (safe < 1024)
|
|
19
|
+
return '1-1023';
|
|
20
|
+
if (safe < 16 * 1024)
|
|
21
|
+
return '1k-16k';
|
|
22
|
+
if (safe < 64 * 1024)
|
|
23
|
+
return '16k-64k';
|
|
24
|
+
if (safe < 128 * 1024)
|
|
25
|
+
return '64k-128k';
|
|
26
|
+
if (safe < 192 * 1024)
|
|
27
|
+
return '128k-192k';
|
|
28
|
+
if (safe < 256 * 1024)
|
|
29
|
+
return '192k-256k';
|
|
30
|
+
return '256k+';
|
|
31
|
+
}
|
|
32
|
+
export function invocationFloorBucket(floor) {
|
|
33
|
+
const safe = boundedCount(floor);
|
|
34
|
+
if (safe < 10)
|
|
35
|
+
return '0-9';
|
|
36
|
+
if (safe < 100)
|
|
37
|
+
return '10-99';
|
|
38
|
+
if (safe < 1_000)
|
|
39
|
+
return '100-999';
|
|
40
|
+
if (safe < 10_000)
|
|
41
|
+
return '1k-10k';
|
|
42
|
+
return '10k+';
|
|
43
|
+
}
|
|
44
|
+
export function invocationDigestPrefix(domain, value) {
|
|
45
|
+
return createHash('sha256').update(`${domain}\0${value}`, 'utf8').digest('hex').slice(0, INVOCATION_DIGEST_PREFIX_LENGTH);
|
|
46
|
+
}
|
|
47
|
+
export function buildInputPublicDiagnostic(evidence, outcome = 'accepted', reasonCode) {
|
|
48
|
+
return Object.freeze({
|
|
49
|
+
version: 1,
|
|
50
|
+
event: 'invoke.input',
|
|
51
|
+
source: evidence.source,
|
|
52
|
+
bytesBucket: invocationByteBucket(evidence.byteLength),
|
|
53
|
+
newlineStyle: evidence.newlineStyle,
|
|
54
|
+
digestPrefix: evidence.sha256.slice(0, INVOCATION_DIGEST_PREFIX_LENGTH),
|
|
55
|
+
outcome,
|
|
56
|
+
...(reasonCode && SAFE_REASON.test(reasonCode) ? { reasonCode } : {}),
|
|
57
|
+
publicSafe: true,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
export function buildProjectionPublicDiagnostic(input) {
|
|
61
|
+
return Object.freeze({
|
|
62
|
+
version: 1,
|
|
63
|
+
event: 'invoke.projection',
|
|
64
|
+
shape: input.shape,
|
|
65
|
+
bytesBucket: invocationByteBucket(input.bytes),
|
|
66
|
+
includedEpics: boundedCount(input.includedEpics),
|
|
67
|
+
includedStories: boundedCount(input.includedStories),
|
|
68
|
+
omittedEpics: boundedCount(input.omittedEpics),
|
|
69
|
+
omittedStories: boundedCount(input.omittedStories),
|
|
70
|
+
nodes: boundedCount(input.nodes ?? input.includedStories),
|
|
71
|
+
edges: boundedCount(input.edges ?? 0),
|
|
72
|
+
cycles: boundedCount(input.cycles ?? 0),
|
|
73
|
+
outcome: input.outcome ?? 'accepted',
|
|
74
|
+
...(input.reasonCode && SAFE_REASON.test(input.reasonCode) ? { reasonCode: input.reasonCode } : {}),
|
|
75
|
+
publicSafe: true,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
export function buildProjectIdentityPublicDiagnostic(input) {
|
|
79
|
+
return Object.freeze({
|
|
80
|
+
version: 1,
|
|
81
|
+
event: 'invoke.project-identity',
|
|
82
|
+
phase: input.phase,
|
|
83
|
+
outcome: input.outcome,
|
|
84
|
+
floorBucket: invocationFloorBucket(input.floor),
|
|
85
|
+
scopeDigestPrefix: invocationDigestPrefix('nx-project-scope-v1', `${input.licenseId}\0${input.projectId}`),
|
|
86
|
+
capability: 'project-identity-migration-v1',
|
|
87
|
+
publicSafe: true,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
export function buildDiagnosePublicDiagnostic(receiptStatus, attemptedEffectCount, suppressedEffectCount) {
|
|
91
|
+
return Object.freeze({
|
|
92
|
+
version: 1,
|
|
93
|
+
event: 'invoke.diagnose',
|
|
94
|
+
authority: 'strict-read-only',
|
|
95
|
+
receiptStatus,
|
|
96
|
+
attemptedEffectCount: boundedCount(attemptedEffectCount),
|
|
97
|
+
suppressedEffectCount: boundedCount(suppressedEffectCount),
|
|
98
|
+
publicSafe: true,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
export function buildInvokeTracePublicDiagnostic(stages, outcome, reasonCode) {
|
|
102
|
+
const allowed = new Set(['admission', 'input', 'shape', 'projection', 'size-guard', 'send']);
|
|
103
|
+
return Object.freeze({
|
|
104
|
+
version: 1,
|
|
105
|
+
event: 'invoke.trace',
|
|
106
|
+
stages: Object.freeze([...new Set(stages.filter((stage) => allowed.has(stage)))]),
|
|
107
|
+
outcome,
|
|
108
|
+
...(reasonCode && SAFE_REASON.test(reasonCode) ? { reasonCode } : {}),
|
|
109
|
+
publicSafe: true,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
export function assertInvocationPublicDiagnosticV1(value) {
|
|
113
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
114
|
+
throw new Error('INVOCATION_PUBLIC_DIAGNOSTIC_INVALID');
|
|
115
|
+
const record = value;
|
|
116
|
+
const serialized = JSON.stringify(value);
|
|
117
|
+
if (record.version !== 1 || record.publicSafe !== true || serialized.length > 4096
|
|
118
|
+
|| /(rawArgs|stateSnapshot|projectRoot|licenseId|projectId|payload|preview|secret|password|privateUrl)/i.test(serialized)) {
|
|
119
|
+
throw new Error('INVOCATION_PUBLIC_DIAGNOSTIC_INVALID');
|
|
120
|
+
}
|
|
121
|
+
const exactKeys = (required, optional = []) => {
|
|
122
|
+
const allowed = new Set([...required, ...optional]);
|
|
123
|
+
const keys = Object.keys(record);
|
|
124
|
+
return required.every((key) => keys.includes(key)) && keys.every((key) => allowed.has(key));
|
|
125
|
+
};
|
|
126
|
+
const validReason = record.reasonCode === undefined
|
|
127
|
+
|| (typeof record.reasonCode === 'string' && SAFE_REASON.test(record.reasonCode));
|
|
128
|
+
const validCount = (candidate) => Number.isSafeInteger(candidate)
|
|
129
|
+
&& candidate >= 0 && candidate <= 1_000_000;
|
|
130
|
+
const validOutcome = record.outcome === 'accepted' || record.outcome === 'rejected';
|
|
131
|
+
let valid = false;
|
|
132
|
+
if (record.event === 'invoke.input') {
|
|
133
|
+
valid = exactKeys(['version', 'event', 'source', 'bytesBucket', 'newlineStyle', 'digestPrefix', 'outcome', 'publicSafe'], ['reasonCode'])
|
|
134
|
+
&& ['args', 'stdin', 'args-file'].includes(String(record.source))
|
|
135
|
+
&& BYTE_BUCKETS.has(String(record.bytesBucket))
|
|
136
|
+
&& ['none', 'lf', 'crlf', 'mixed'].includes(String(record.newlineStyle))
|
|
137
|
+
&& typeof record.digestPrefix === 'string' && /^[a-f0-9]{12}$/.test(record.digestPrefix)
|
|
138
|
+
&& validOutcome && validReason;
|
|
139
|
+
}
|
|
140
|
+
else if (record.event === 'invoke.projection') {
|
|
141
|
+
valid = exactKeys([
|
|
142
|
+
'version', 'event', 'shape', 'bytesBucket', 'includedEpics', 'includedStories',
|
|
143
|
+
'omittedEpics', 'omittedStories', 'nodes', 'edges', 'cycles', 'outcome', 'publicSafe',
|
|
144
|
+
], ['reasonCode'])
|
|
145
|
+
&& INVOCATION_SHAPES.has(record.shape)
|
|
146
|
+
&& BYTE_BUCKETS.has(String(record.bytesBucket))
|
|
147
|
+
&& ['includedEpics', 'includedStories', 'omittedEpics', 'omittedStories', 'nodes', 'edges', 'cycles']
|
|
148
|
+
.every((key) => validCount(record[key]))
|
|
149
|
+
&& validOutcome && validReason;
|
|
150
|
+
}
|
|
151
|
+
else if (record.event === 'invoke.project-identity') {
|
|
152
|
+
valid = exactKeys([
|
|
153
|
+
'version', 'event', 'phase', 'outcome', 'floorBucket', 'scopeDigestPrefix', 'capability', 'publicSafe',
|
|
154
|
+
])
|
|
155
|
+
&& ['prepare', 'seed', 'remote-acknowledged', 'finalize', 'reconcile'].includes(String(record.phase))
|
|
156
|
+
&& ['prepared', 'seeded', 'already-seeded', 'finalized', 'rejected', 'retry'].includes(String(record.outcome))
|
|
157
|
+
&& FLOOR_BUCKETS.has(String(record.floorBucket))
|
|
158
|
+
&& typeof record.scopeDigestPrefix === 'string' && /^[a-f0-9]{12}$/.test(record.scopeDigestPrefix)
|
|
159
|
+
&& record.capability === 'project-identity-migration-v1';
|
|
160
|
+
}
|
|
161
|
+
else if (record.event === 'invoke.diagnose') {
|
|
162
|
+
valid = exactKeys([
|
|
163
|
+
'version', 'event', 'authority', 'receiptStatus', 'attemptedEffectCount',
|
|
164
|
+
'suppressedEffectCount', 'publicSafe',
|
|
165
|
+
])
|
|
166
|
+
&& record.authority === 'strict-read-only'
|
|
167
|
+
&& (record.receiptStatus === 'verified' || record.receiptStatus === 'rejected')
|
|
168
|
+
&& validCount(record.attemptedEffectCount)
|
|
169
|
+
&& validCount(record.suppressedEffectCount);
|
|
170
|
+
}
|
|
171
|
+
else if (record.event === 'invoke.trace') {
|
|
172
|
+
valid = exactKeys(['version', 'event', 'stages', 'outcome', 'publicSafe'], ['reasonCode'])
|
|
173
|
+
&& Array.isArray(record.stages)
|
|
174
|
+
&& record.stages.length <= TRACE_STAGES.size
|
|
175
|
+
&& new Set(record.stages).size === record.stages.length
|
|
176
|
+
&& record.stages.every((stage) => typeof stage === 'string' && TRACE_STAGES.has(stage))
|
|
177
|
+
&& validOutcome && validReason;
|
|
178
|
+
}
|
|
179
|
+
if (!valid)
|
|
180
|
+
throw new Error('INVOCATION_PUBLIC_DIAGNOSTIC_INVALID');
|
|
181
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const STATE_PROJECTION_VERSION: 2;
|
|
2
|
+
export type InvocationShapeV2 = 'yolo-story' | 'yolo-inline' | 'yoloop-target' | 'yoloop-session' | 'yoloop-discovery';
|
|
3
|
+
export type StructuralProjectionErrorCodeV2 = 'STRUCTURAL_TARGET_NOT_FOUND' | 'STRUCTURAL_DEPENDENCY_MISSING' | 'STRUCTURAL_DEPENDENCY_CYCLE' | 'STRUCTURAL_CONTEXT_TOO_LARGE';
|
|
4
|
+
export interface StateProjectionCountsV2 {
|
|
5
|
+
readonly epics: number;
|
|
6
|
+
readonly stories: number;
|
|
7
|
+
readonly edges: number;
|
|
8
|
+
}
|
|
9
|
+
export type StateProjectionResultV2<TSnapshot> = {
|
|
10
|
+
readonly ok: true;
|
|
11
|
+
readonly version: typeof STATE_PROJECTION_VERSION;
|
|
12
|
+
readonly shape: InvocationShapeV2;
|
|
13
|
+
readonly snapshot: TSnapshot;
|
|
14
|
+
readonly included: StateProjectionCountsV2;
|
|
15
|
+
readonly omitted: Omit<StateProjectionCountsV2, 'edges'>;
|
|
16
|
+
readonly cycleCount: number;
|
|
17
|
+
} | {
|
|
18
|
+
readonly ok: false;
|
|
19
|
+
readonly code: StructuralProjectionErrorCodeV2;
|
|
20
|
+
readonly publicDetails: Readonly<Record<string, string | number>>;
|
|
21
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const STATE_PROJECTION_VERSION = 2;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const STRICT_DIAGNOSE_RECEIPT_VERSION: 1;
|
|
2
|
+
export interface StrictDiagnoseReceiptV1 {
|
|
3
|
+
readonly version: typeof STRICT_DIAGNOSE_RECEIPT_VERSION;
|
|
4
|
+
readonly authority: 'strict-read-only';
|
|
5
|
+
readonly projectBusinessMutation: false;
|
|
6
|
+
readonly attemptedEffects: readonly string[];
|
|
7
|
+
readonly suppressedEffects: readonly string[];
|
|
8
|
+
readonly inputDigest: string;
|
|
9
|
+
readonly responseDigest: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function assertStrictDiagnoseReceiptV1(value: unknown): asserts value is StrictDiagnoseReceiptV1;
|
|
12
|
+
export declare function verifyStrictDiagnoseReceiptV1(value: unknown, rawArgs: string, responseInstructions: string): asserts value is StrictDiagnoseReceiptV1;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { SHA256_HEX_PATTERN } from './project-identity-migration.js';
|
|
2
|
+
import { invokeInputSha256 } from './input-envelope.js';
|
|
3
|
+
export const STRICT_DIAGNOSE_RECEIPT_VERSION = 1;
|
|
4
|
+
const validEffects = (value) => Array.isArray(value)
|
|
5
|
+
&& value.length <= 128
|
|
6
|
+
&& value.every((entry) => typeof entry === 'string' && entry.length > 0 && entry.length <= 128);
|
|
7
|
+
export function assertStrictDiagnoseReceiptV1(value) {
|
|
8
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
9
|
+
throw new Error('STRICT_DIAGNOSE_RECEIPT_INVALID');
|
|
10
|
+
}
|
|
11
|
+
const candidate = value;
|
|
12
|
+
if (candidate.version !== STRICT_DIAGNOSE_RECEIPT_VERSION) {
|
|
13
|
+
throw new Error('STRICT_DIAGNOSE_RECEIPT_VERSION_UNSUPPORTED');
|
|
14
|
+
}
|
|
15
|
+
if (candidate.projectBusinessMutation !== false) {
|
|
16
|
+
throw new Error('STRICT_DIAGNOSE_RECEIPT_MUTATION_CONFLICT');
|
|
17
|
+
}
|
|
18
|
+
const expectedKeys = [
|
|
19
|
+
'attemptedEffects', 'authority', 'inputDigest', 'projectBusinessMutation',
|
|
20
|
+
'responseDigest', 'suppressedEffects', 'version',
|
|
21
|
+
];
|
|
22
|
+
const actualKeys = Object.keys(candidate).sort();
|
|
23
|
+
if (actualKeys.length !== expectedKeys.length
|
|
24
|
+
|| actualKeys.some((key, index) => key !== expectedKeys[index])
|
|
25
|
+
|| candidate.authority !== 'strict-read-only'
|
|
26
|
+
|| !validEffects(candidate.attemptedEffects)
|
|
27
|
+
|| !validEffects(candidate.suppressedEffects)
|
|
28
|
+
|| typeof candidate.inputDigest !== 'string'
|
|
29
|
+
|| !SHA256_HEX_PATTERN.test(candidate.inputDigest)
|
|
30
|
+
|| typeof candidate.responseDigest !== 'string'
|
|
31
|
+
|| !SHA256_HEX_PATTERN.test(candidate.responseDigest)) {
|
|
32
|
+
throw new Error('STRICT_DIAGNOSE_RECEIPT_INVALID');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export function verifyStrictDiagnoseReceiptV1(value, rawArgs, responseInstructions) {
|
|
36
|
+
assertStrictDiagnoseReceiptV1(value);
|
|
37
|
+
const receipt = value;
|
|
38
|
+
if (receipt.inputDigest !== invokeInputSha256(rawArgs)
|
|
39
|
+
|| receipt.responseDigest !== invokeInputSha256(responseInstructions)
|
|
40
|
+
|| JSON.stringify(receipt.attemptedEffects) !== JSON.stringify(receipt.suppressedEffects)) {
|
|
41
|
+
throw new Error('STRICT_DIAGNOSE_RECEIPT_BINDING_CONFLICT');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -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.23 | 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.23 │
|
|
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.23 | 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.23 │
|
|
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.23 | 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.23 | 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.23 │
|
|
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.23 | 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.23 │
|
|
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.23 │
|
|
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.23 | 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.23 │
|
|
72
72
|
│ ######### ##### │
|
|
73
73
|
│ ## ############## Development Orchestrator │
|
|
74
74
|
│ ## ### ###### ## OrNexus Team │
|