@hasna/instructions 0.4.22 → 0.4.24
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/cli/index.js +51 -7
- package/dist/index.js +50 -6
- package/dist/lib/project-context.d.ts +26 -0
- package/dist/lib/project-context.d.ts.map +1 -1
- package/dist/lib/session-render-managed-output-bound.test.d.ts +2 -0
- package/dist/lib/session-render-managed-output-bound.test.d.ts.map +1 -0
- package/dist/lib/session-render.d.ts.map +1 -1
- package/dist/mcp/index.js +5 -2
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -7918,6 +7918,13 @@ import {
|
|
|
7918
7918
|
writeFileSync
|
|
7919
7919
|
} from "fs";
|
|
7920
7920
|
import { basename, dirname, isAbsolute, join as join4, parse, relative, resolve } from "path";
|
|
7921
|
+
function managedObservationMaxBytes(relativePath) {
|
|
7922
|
+
return SESSION_MANAGED_OUTPUT_PATHS.includes(relativePath) ? SESSION_MANAGED_OUTPUT_MAX_BYTES : FOREIGN_INPUT_MAX_BYTES;
|
|
7923
|
+
}
|
|
7924
|
+
function isSessionManagedOutputRelativePath(relativePath) {
|
|
7925
|
+
const normalized = relativePath.replaceAll("\\", "/");
|
|
7926
|
+
return SESSION_MANAGED_OUTPUT_PATHS.some((managed) => managed === normalized || managed.endsWith(`/${normalized}`));
|
|
7927
|
+
}
|
|
7921
7928
|
function computeProjectContextSourceHash(value) {
|
|
7922
7929
|
const normalized = removeHashForFingerprint(value);
|
|
7923
7930
|
return `sha256:${sha2562(stableStringify(normalized))}`;
|
|
@@ -7986,7 +7993,7 @@ function planProjectContext(input) {
|
|
|
7986
7993
|
const inlineMarkerOverhead = nativeImports ? 0 : Buffer.byteLength(buildManagedBlock(bundle, "", `
|
|
7987
7994
|
`), "utf8");
|
|
7988
7995
|
const generated = buildCanonicalFragment(bundle, status, ageSeconds, PROJECT_CONTEXT_MAX_RENDERED_BYTES - Math.max(320, inlineMarkerOverhead), PROJECT_CONTEXT_MAX_APPROX_TOKENS - Math.max(80, Math.ceil(inlineMarkerOverhead / 4)));
|
|
7989
|
-
const previousTargetContent = existsSync4(paths.target) ? readUtf8RegularFile(paths.target, workspaceRoot) : null;
|
|
7996
|
+
const previousTargetContent = existsSync4(paths.target) ? readUtf8RegularFile(paths.target, workspaceRoot, managedObservationMaxBytes(relativePosix(workspaceRoot, paths.target))) : null;
|
|
7990
7997
|
const markerParse = parseManagedBlock(previousTargetContent ?? "", input.force === true);
|
|
7991
7998
|
if (markerParse.block && markerParse.block.id !== bundle.project.id) {
|
|
7992
7999
|
throw new ProjectContextError("MANAGED_BLOCK_CONFLICT", "managed block belongs to a different project");
|
|
@@ -8069,7 +8076,7 @@ function composeProjectContextSessionRender(input) {
|
|
|
8069
8076
|
if (!existsSync4(paths.target)) {
|
|
8070
8077
|
throw new ProjectContextError("MANAGED_BLOCK_CONFLICT", "project-context provider target is missing while durable context is active");
|
|
8071
8078
|
}
|
|
8072
|
-
const currentTarget = readUtf8RegularFile(paths.target, workspaceRoot);
|
|
8079
|
+
const currentTarget = readUtf8RegularFile(paths.target, workspaceRoot, managedObservationMaxBytes(relativePosix(workspaceRoot, paths.target)));
|
|
8073
8080
|
const currentMarkers = parseManagedBlock(currentTarget, false);
|
|
8074
8081
|
if (!currentMarkers.block) {
|
|
8075
8082
|
throw new ProjectContextError("MANAGED_BLOCK_CONFLICT", "project-context provider target lost its managed block");
|
|
@@ -9462,7 +9469,7 @@ function anchoredFileObservation(directory, name) {
|
|
|
9462
9469
|
if (!stat.isFile())
|
|
9463
9470
|
throw new ProjectContextHashRace("managed output is not a regular file");
|
|
9464
9471
|
const relativePath = relativePosix(directory.workspaceRoot, join4(directory.path, name));
|
|
9465
|
-
const maxBytes = directory.maxObservedBytes === undefined ? relativePath
|
|
9472
|
+
const maxBytes = directory.maxObservedBytes === undefined ? managedObservationMaxBytes(relativePath) : directory.maxObservedBytes;
|
|
9466
9473
|
if (maxBytes !== null && stat.size > maxBytes) {
|
|
9467
9474
|
throw new ProjectContextHashRace(`managed output exceeds the safe read limit: ${relativePath}`);
|
|
9468
9475
|
}
|
|
@@ -10109,7 +10116,7 @@ function assertNoSymlinkAncestors(path) {
|
|
|
10109
10116
|
throw new ProjectContextError("PROJECT_CONTEXT_SYMLINK_REJECTED", `workspace ancestor is a symlink: ${current}`);
|
|
10110
10117
|
}
|
|
10111
10118
|
}
|
|
10112
|
-
function readUtf8RegularFile(path, workspaceRoot, maxBytes =
|
|
10119
|
+
function readUtf8RegularFile(path, workspaceRoot, maxBytes = FOREIGN_INPUT_MAX_BYTES) {
|
|
10113
10120
|
assertNoSymlinkSegments(workspaceRoot, path);
|
|
10114
10121
|
const stat = lstatSync(path);
|
|
10115
10122
|
if (!stat.isFile())
|
|
@@ -10122,8 +10129,7 @@ function currentFileHash(path, workspaceRoot) {
|
|
|
10122
10129
|
if (!existsSync4(path))
|
|
10123
10130
|
return null;
|
|
10124
10131
|
const relativePath = relativePosix(workspaceRoot, path);
|
|
10125
|
-
|
|
10126
|
-
return sha2562(readUtf8RegularFile(path, workspaceRoot, maxBytes));
|
|
10132
|
+
return sha2562(readUtf8RegularFile(path, workspaceRoot, managedObservationMaxBytes(relativePath)));
|
|
10127
10133
|
}
|
|
10128
10134
|
function hashesStillMatch(expected, workspaceRoot) {
|
|
10129
10135
|
for (const [path, hash] of expected) {
|
|
@@ -10298,7 +10304,7 @@ function sha2562(content) {
|
|
|
10298
10304
|
function isRecord(value) {
|
|
10299
10305
|
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
10300
10306
|
}
|
|
10301
|
-
var PROJECT_CONTEXT_SCHEMA = "hasna.projects.project_context_bundle.v1", PROJECT_CONTEXT_MAX_INPUT_BYTES, PROJECT_CONTEXT_MAX_RENDERED_BYTES, PROJECT_CONTEXT_MAX_APPROX_TOKENS = 1000, PROJECT_CONTEXT_MAX_COMMANDS = 6, PROJECT_CONTEXT_MAX_WARNINGS = 3, PROJECT_CONTEXT_FRAGMENT_PATH = ".hasna/instructions/project-context.md", PROJECT_CONTEXT_MANIFEST_PATH = ".hasna/project-context-manifest.json", PROJECT_CONTEXT_CACHE_PATH = ".hasna/project-context-cache.json", PROJECT_CONTEXT_LOCK_PATH = ".hasna/project-context.lock", PROJECT_CONTEXT_SNAPSHOT_DIR = ".hasna/project-context-snapshots", PROJECT_CONTEXT_CACHE_SCHEMA = "hasna.instructions.project-context-cache/v1", PROJECT_CONTEXT_MANAGED_COMMENT = "Managed by @hasna/configs project context", SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES, PROJECT_CONTEXT_LOCK_STALE_MS, LEGACY_CONFIGS_PACKAGE = "@hasna/configs", LEGACY_CONFIGS_COMPAT_VERSION = "0.2.45", LEGACY_CONFIGS_EXECUTABLE = "configs", PROJECT_KINDS, PROJECT_STATUSES, LINK_STATES, RESOLUTION_SOURCES, safeId, nullableId, producerSlug, producerName, safeOptionalDisplay, isoTimestamp, revisionSchema, hashSchema, absolutePath, commandArg, commandSchema, projectContextBundleSchema, storedManifestProjectContextSchema, storedManifestFileSchema, storedManifestObservationSchema, projectContextCacheSchema, ProjectContextError, ProjectContextHashRace, anchoredFsOps, atomicExchange, atomicExchangeLibraries;
|
|
10307
|
+
var PROJECT_CONTEXT_SCHEMA = "hasna.projects.project_context_bundle.v1", PROJECT_CONTEXT_MAX_INPUT_BYTES, PROJECT_CONTEXT_MAX_RENDERED_BYTES, PROJECT_CONTEXT_MAX_APPROX_TOKENS = 1000, PROJECT_CONTEXT_MAX_COMMANDS = 6, PROJECT_CONTEXT_MAX_WARNINGS = 3, PROJECT_CONTEXT_FRAGMENT_PATH = ".hasna/instructions/project-context.md", PROJECT_CONTEXT_MANIFEST_PATH = ".hasna/project-context-manifest.json", PROJECT_CONTEXT_CACHE_PATH = ".hasna/project-context-cache.json", PROJECT_CONTEXT_LOCK_PATH = ".hasna/project-context.lock", PROJECT_CONTEXT_SNAPSHOT_DIR = ".hasna/project-context-snapshots", PROJECT_CONTEXT_CACHE_SCHEMA = "hasna.instructions.project-context-cache/v1", PROJECT_CONTEXT_MANAGED_COMMENT = "Managed by @hasna/configs project context", SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES, FOREIGN_INPUT_MAX_BYTES, SESSION_MANAGED_OUTPUT_MAX_BYTES, SESSION_MANAGED_OUTPUT_PATHS, SESSION_MANAGED_OUTPUT_WARN_BYTES, PROJECT_CONTEXT_LOCK_STALE_MS, LEGACY_CONFIGS_PACKAGE = "@hasna/configs", LEGACY_CONFIGS_COMPAT_VERSION = "0.2.45", LEGACY_CONFIGS_EXECUTABLE = "configs", PROJECT_KINDS, PROJECT_STATUSES, LINK_STATES, RESOLUTION_SOURCES, safeId, nullableId, producerSlug, producerName, safeOptionalDisplay, isoTimestamp, revisionSchema, hashSchema, absolutePath, commandArg, commandSchema, projectContextBundleSchema, storedManifestProjectContextSchema, storedManifestFileSchema, storedManifestObservationSchema, projectContextCacheSchema, ProjectContextError, ProjectContextHashRace, anchoredFsOps, atomicExchange, atomicExchangeLibraries;
|
|
10302
10308
|
var init_project_context = __esm(() => {
|
|
10303
10309
|
init_zod();
|
|
10304
10310
|
init_redact();
|
|
@@ -10306,6 +10312,17 @@ var init_project_context = __esm(() => {
|
|
|
10306
10312
|
PROJECT_CONTEXT_MAX_INPUT_BYTES = 8 * 1024;
|
|
10307
10313
|
PROJECT_CONTEXT_MAX_RENDERED_BYTES = 4 * 1024;
|
|
10308
10314
|
SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES = 8 * 1024 * 1024;
|
|
10315
|
+
FOREIGN_INPUT_MAX_BYTES = 256 * 1024;
|
|
10316
|
+
SESSION_MANAGED_OUTPUT_MAX_BYTES = SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES;
|
|
10317
|
+
SESSION_MANAGED_OUTPUT_PATHS = [
|
|
10318
|
+
".hasna/session-render-manifest.json",
|
|
10319
|
+
".codewith/.hasna/session-render-manifest.json",
|
|
10320
|
+
"CLAUDE.md",
|
|
10321
|
+
"AGENTS.md",
|
|
10322
|
+
".codewith/CODEWITH.md",
|
|
10323
|
+
".codewith/CODEWITH.override.md"
|
|
10324
|
+
];
|
|
10325
|
+
SESSION_MANAGED_OUTPUT_WARN_BYTES = Math.floor(SESSION_MANAGED_OUTPUT_MAX_BYTES / 2);
|
|
10309
10326
|
PROJECT_CONTEXT_LOCK_STALE_MS = 5 * 60 * 1000;
|
|
10310
10327
|
PROJECT_KINDS = [
|
|
10311
10328
|
"open-source",
|
|
@@ -11391,6 +11408,9 @@ function planSessionRender(input) {
|
|
|
11391
11408
|
} : {}
|
|
11392
11409
|
};
|
|
11393
11410
|
const manifestFile = makeFile(targetHome, posix.join(".hasna", "session-render-manifest.json"), "manifest", JSON.stringify(manifest, null, 2), orderedSources.map((source) => source.id));
|
|
11411
|
+
const managedOutputs = [...files, manifestFile];
|
|
11412
|
+
rejectOversizedManagedOutputs(managedOutputs);
|
|
11413
|
+
warnings.push(...managedOutputHeadroomWarnings(managedOutputs));
|
|
11394
11414
|
return {
|
|
11395
11415
|
dryRun: true,
|
|
11396
11416
|
tool: input.tool,
|
|
@@ -11509,6 +11529,30 @@ function rejectDuplicateRenderPaths(files) {
|
|
|
11509
11529
|
seen.add(key);
|
|
11510
11530
|
}
|
|
11511
11531
|
}
|
|
11532
|
+
function rejectOversizedManagedOutputs(files) {
|
|
11533
|
+
for (const file of files) {
|
|
11534
|
+
if (!isSessionManagedOutputRelativePath(file.relativePath))
|
|
11535
|
+
continue;
|
|
11536
|
+
const bytes = Buffer.byteLength(file.content, "utf8");
|
|
11537
|
+
if (bytes <= SESSION_MANAGED_OUTPUT_MAX_BYTES)
|
|
11538
|
+
continue;
|
|
11539
|
+
throw new Error(`Session render output ${file.relativePath} is ${bytes} bytes and the managed read bound is ` + `${SESSION_MANAGED_OUTPUT_MAX_BYTES}. Writing it would wedge this home: every later render ` + `refuses to read it, including one that would shrink it back. Reduce the instruction corpus ` + `for this profile, or raise SESSION_MANAGED_OUTPUT_MAX_BYTES \u2014 it is one constant and both ` + `the reader and this check read it.`);
|
|
11540
|
+
}
|
|
11541
|
+
}
|
|
11542
|
+
function managedOutputHeadroomWarnings(files) {
|
|
11543
|
+
const warnings = [];
|
|
11544
|
+
for (const file of files) {
|
|
11545
|
+
if (!isSessionManagedOutputRelativePath(file.relativePath))
|
|
11546
|
+
continue;
|
|
11547
|
+
const bytes = Buffer.byteLength(file.content, "utf8");
|
|
11548
|
+
if (bytes <= SESSION_MANAGED_OUTPUT_WARN_BYTES)
|
|
11549
|
+
continue;
|
|
11550
|
+
if (bytes > SESSION_MANAGED_OUTPUT_MAX_BYTES)
|
|
11551
|
+
continue;
|
|
11552
|
+
warnings.push(`Managed output ${file.relativePath} is ${bytes} bytes, past ${SESSION_MANAGED_OUTPUT_WARN_BYTES} ` + `of a ${SESSION_MANAGED_OUTPUT_MAX_BYTES} byte bound. Renders refuse at the bound; raise ` + `SESSION_MANAGED_OUTPUT_MAX_BYTES or reduce this profile's instruction corpus before then.`);
|
|
11553
|
+
}
|
|
11554
|
+
return warnings;
|
|
11555
|
+
}
|
|
11512
11556
|
function rejectDuplicateSourceSlugs(sources) {
|
|
11513
11557
|
const seen = new Map;
|
|
11514
11558
|
for (const source of sources) {
|
package/dist/index.js
CHANGED
|
@@ -5831,6 +5831,24 @@ var PROJECT_CONTEXT_SNAPSHOT_DIR = ".hasna/project-context-snapshots";
|
|
|
5831
5831
|
var PROJECT_CONTEXT_CACHE_SCHEMA = "hasna.instructions.project-context-cache/v1";
|
|
5832
5832
|
var PROJECT_CONTEXT_MANAGED_COMMENT = "Managed by @hasna/configs project context";
|
|
5833
5833
|
var SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES = 8 * 1024 * 1024;
|
|
5834
|
+
var FOREIGN_INPUT_MAX_BYTES = 256 * 1024;
|
|
5835
|
+
var SESSION_MANAGED_OUTPUT_MAX_BYTES = SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES;
|
|
5836
|
+
var SESSION_MANAGED_OUTPUT_PATHS = [
|
|
5837
|
+
".hasna/session-render-manifest.json",
|
|
5838
|
+
".codewith/.hasna/session-render-manifest.json",
|
|
5839
|
+
"CLAUDE.md",
|
|
5840
|
+
"AGENTS.md",
|
|
5841
|
+
".codewith/CODEWITH.md",
|
|
5842
|
+
".codewith/CODEWITH.override.md"
|
|
5843
|
+
];
|
|
5844
|
+
var SESSION_MANAGED_OUTPUT_WARN_BYTES = Math.floor(SESSION_MANAGED_OUTPUT_MAX_BYTES / 2);
|
|
5845
|
+
function managedObservationMaxBytes(relativePath) {
|
|
5846
|
+
return SESSION_MANAGED_OUTPUT_PATHS.includes(relativePath) ? SESSION_MANAGED_OUTPUT_MAX_BYTES : FOREIGN_INPUT_MAX_BYTES;
|
|
5847
|
+
}
|
|
5848
|
+
function isSessionManagedOutputRelativePath(relativePath) {
|
|
5849
|
+
const normalized = relativePath.replaceAll("\\", "/");
|
|
5850
|
+
return SESSION_MANAGED_OUTPUT_PATHS.some((managed) => managed === normalized || managed.endsWith(`/${normalized}`));
|
|
5851
|
+
}
|
|
5834
5852
|
var PROJECT_CONTEXT_LOCK_STALE_MS = 5 * 60 * 1000;
|
|
5835
5853
|
var LEGACY_CONFIGS_PACKAGE = "@hasna/configs";
|
|
5836
5854
|
var LEGACY_CONFIGS_COMPAT_VERSION = "0.2.45";
|
|
@@ -6044,7 +6062,7 @@ function planProjectContext(input) {
|
|
|
6044
6062
|
const inlineMarkerOverhead = nativeImports ? 0 : Buffer.byteLength(buildManagedBlock(bundle, "", `
|
|
6045
6063
|
`), "utf8");
|
|
6046
6064
|
const generated = buildCanonicalFragment(bundle, status, ageSeconds, PROJECT_CONTEXT_MAX_RENDERED_BYTES - Math.max(320, inlineMarkerOverhead), PROJECT_CONTEXT_MAX_APPROX_TOKENS - Math.max(80, Math.ceil(inlineMarkerOverhead / 4)));
|
|
6047
|
-
const previousTargetContent = existsSync3(paths.target) ? readUtf8RegularFile(paths.target, workspaceRoot) : null;
|
|
6065
|
+
const previousTargetContent = existsSync3(paths.target) ? readUtf8RegularFile(paths.target, workspaceRoot, managedObservationMaxBytes(relativePosix(workspaceRoot, paths.target))) : null;
|
|
6048
6066
|
const markerParse = parseManagedBlock(previousTargetContent ?? "", input.force === true);
|
|
6049
6067
|
if (markerParse.block && markerParse.block.id !== bundle.project.id) {
|
|
6050
6068
|
throw new ProjectContextError("MANAGED_BLOCK_CONFLICT", "managed block belongs to a different project");
|
|
@@ -6127,7 +6145,7 @@ function composeProjectContextSessionRender(input) {
|
|
|
6127
6145
|
if (!existsSync3(paths.target)) {
|
|
6128
6146
|
throw new ProjectContextError("MANAGED_BLOCK_CONFLICT", "project-context provider target is missing while durable context is active");
|
|
6129
6147
|
}
|
|
6130
|
-
const currentTarget = readUtf8RegularFile(paths.target, workspaceRoot);
|
|
6148
|
+
const currentTarget = readUtf8RegularFile(paths.target, workspaceRoot, managedObservationMaxBytes(relativePosix(workspaceRoot, paths.target)));
|
|
6131
6149
|
const currentMarkers = parseManagedBlock(currentTarget, false);
|
|
6132
6150
|
if (!currentMarkers.block) {
|
|
6133
6151
|
throw new ProjectContextError("MANAGED_BLOCK_CONFLICT", "project-context provider target lost its managed block");
|
|
@@ -7521,7 +7539,7 @@ function anchoredFileObservation(directory, name) {
|
|
|
7521
7539
|
if (!stat.isFile())
|
|
7522
7540
|
throw new ProjectContextHashRace("managed output is not a regular file");
|
|
7523
7541
|
const relativePath = relativePosix(directory.workspaceRoot, join3(directory.path, name));
|
|
7524
|
-
const maxBytes = directory.maxObservedBytes === undefined ? relativePath
|
|
7542
|
+
const maxBytes = directory.maxObservedBytes === undefined ? managedObservationMaxBytes(relativePath) : directory.maxObservedBytes;
|
|
7525
7543
|
if (maxBytes !== null && stat.size > maxBytes) {
|
|
7526
7544
|
throw new ProjectContextHashRace(`managed output exceeds the safe read limit: ${relativePath}`);
|
|
7527
7545
|
}
|
|
@@ -8170,7 +8188,7 @@ function assertNoSymlinkAncestors(path) {
|
|
|
8170
8188
|
throw new ProjectContextError("PROJECT_CONTEXT_SYMLINK_REJECTED", `workspace ancestor is a symlink: ${current}`);
|
|
8171
8189
|
}
|
|
8172
8190
|
}
|
|
8173
|
-
function readUtf8RegularFile(path, workspaceRoot, maxBytes =
|
|
8191
|
+
function readUtf8RegularFile(path, workspaceRoot, maxBytes = FOREIGN_INPUT_MAX_BYTES) {
|
|
8174
8192
|
assertNoSymlinkSegments(workspaceRoot, path);
|
|
8175
8193
|
const stat = lstatSync(path);
|
|
8176
8194
|
if (!stat.isFile())
|
|
@@ -8183,8 +8201,7 @@ function currentFileHash(path, workspaceRoot) {
|
|
|
8183
8201
|
if (!existsSync3(path))
|
|
8184
8202
|
return null;
|
|
8185
8203
|
const relativePath = relativePosix(workspaceRoot, path);
|
|
8186
|
-
|
|
8187
|
-
return sha2562(readUtf8RegularFile(path, workspaceRoot, maxBytes));
|
|
8204
|
+
return sha2562(readUtf8RegularFile(path, workspaceRoot, managedObservationMaxBytes(relativePath)));
|
|
8188
8205
|
}
|
|
8189
8206
|
function hashesStillMatch(expected, workspaceRoot) {
|
|
8190
8207
|
for (const [path, hash] of expected) {
|
|
@@ -9428,6 +9445,9 @@ function planSessionRender(input) {
|
|
|
9428
9445
|
} : {}
|
|
9429
9446
|
};
|
|
9430
9447
|
const manifestFile = makeFile(targetHome, posix.join(".hasna", "session-render-manifest.json"), "manifest", JSON.stringify(manifest, null, 2), orderedSources.map((source) => source.id));
|
|
9448
|
+
const managedOutputs = [...files, manifestFile];
|
|
9449
|
+
rejectOversizedManagedOutputs(managedOutputs);
|
|
9450
|
+
warnings.push(...managedOutputHeadroomWarnings(managedOutputs));
|
|
9431
9451
|
return {
|
|
9432
9452
|
dryRun: true,
|
|
9433
9453
|
tool: input.tool,
|
|
@@ -9647,6 +9667,30 @@ function rejectDuplicateRenderPaths(files) {
|
|
|
9647
9667
|
seen.add(key);
|
|
9648
9668
|
}
|
|
9649
9669
|
}
|
|
9670
|
+
function rejectOversizedManagedOutputs(files) {
|
|
9671
|
+
for (const file of files) {
|
|
9672
|
+
if (!isSessionManagedOutputRelativePath(file.relativePath))
|
|
9673
|
+
continue;
|
|
9674
|
+
const bytes = Buffer.byteLength(file.content, "utf8");
|
|
9675
|
+
if (bytes <= SESSION_MANAGED_OUTPUT_MAX_BYTES)
|
|
9676
|
+
continue;
|
|
9677
|
+
throw new Error(`Session render output ${file.relativePath} is ${bytes} bytes and the managed read bound is ` + `${SESSION_MANAGED_OUTPUT_MAX_BYTES}. Writing it would wedge this home: every later render ` + `refuses to read it, including one that would shrink it back. Reduce the instruction corpus ` + `for this profile, or raise SESSION_MANAGED_OUTPUT_MAX_BYTES \u2014 it is one constant and both ` + `the reader and this check read it.`);
|
|
9678
|
+
}
|
|
9679
|
+
}
|
|
9680
|
+
function managedOutputHeadroomWarnings(files) {
|
|
9681
|
+
const warnings = [];
|
|
9682
|
+
for (const file of files) {
|
|
9683
|
+
if (!isSessionManagedOutputRelativePath(file.relativePath))
|
|
9684
|
+
continue;
|
|
9685
|
+
const bytes = Buffer.byteLength(file.content, "utf8");
|
|
9686
|
+
if (bytes <= SESSION_MANAGED_OUTPUT_WARN_BYTES)
|
|
9687
|
+
continue;
|
|
9688
|
+
if (bytes > SESSION_MANAGED_OUTPUT_MAX_BYTES)
|
|
9689
|
+
continue;
|
|
9690
|
+
warnings.push(`Managed output ${file.relativePath} is ${bytes} bytes, past ${SESSION_MANAGED_OUTPUT_WARN_BYTES} ` + `of a ${SESSION_MANAGED_OUTPUT_MAX_BYTES} byte bound. Renders refuse at the bound; raise ` + `SESSION_MANAGED_OUTPUT_MAX_BYTES or reduce this profile's instruction corpus before then.`);
|
|
9691
|
+
}
|
|
9692
|
+
return warnings;
|
|
9693
|
+
}
|
|
9650
9694
|
function rejectDuplicateSourceSlugs(sources) {
|
|
9651
9695
|
const seen = new Map;
|
|
9652
9696
|
for (const source of sources) {
|
|
@@ -13,6 +13,32 @@ export declare const PROJECT_CONTEXT_LOCK_PATH = ".hasna/project-context.lock";
|
|
|
13
13
|
export declare const PROJECT_CONTEXT_SNAPSHOT_DIR = ".hasna/project-context-snapshots";
|
|
14
14
|
export declare const PROJECT_CONTEXT_CACHE_SCHEMA: "hasna.instructions.project-context-cache/v1";
|
|
15
15
|
export declare const PROJECT_CONTEXT_MANAGED_COMMENT = "Managed by @hasna/configs project context";
|
|
16
|
+
export declare const FOREIGN_INPUT_MAX_BYTES: number;
|
|
17
|
+
export declare const SESSION_MANAGED_OUTPUT_MAX_BYTES: number;
|
|
18
|
+
export declare const SESSION_MANAGED_OUTPUT_PATHS: string[];
|
|
19
|
+
/**
|
|
20
|
+
* Headroom threshold. A managed output past this is still written and still read, but the
|
|
21
|
+
* render says so — which is the whole answer to "a bound that refuses eventually stops every
|
|
22
|
+
* render unless someone is watching". The refusal below is the backstop; THIS is what buys
|
|
23
|
+
* the runway to raise the bound before the backstop ever fires.
|
|
24
|
+
*
|
|
25
|
+
* Half is chosen because the corpus grows by whole instruction sources: measured on station01
|
|
26
|
+
* 2026-08-08 the largest single rendered source is 26,564 bytes against a 291,867-byte codex
|
|
27
|
+
* home, so no single addition can cross from "silent" to "refused" — the warning is guaranteed
|
|
28
|
+
* to fire on at least one render first, and in practice on hundreds.
|
|
29
|
+
*/
|
|
30
|
+
export declare const SESSION_MANAGED_OUTPUT_WARN_BYTES: number;
|
|
31
|
+
export declare function managedObservationMaxBytes(relativePath: string): number;
|
|
32
|
+
/**
|
|
33
|
+
* Whether a render-plan path names one of the managed outputs above.
|
|
34
|
+
*
|
|
35
|
+
* SESSION_MANAGED_OUTPUT_PATHS is WORKSPACE-relative; a render plan's `relativePath` is
|
|
36
|
+
* TARGET-HOME-relative, and for codewith those two bases differ by one segment — the plan
|
|
37
|
+
* says `CODEWITH.md` where the allowlist says `.codewith/CODEWITH.md`. Comparing them
|
|
38
|
+
* directly therefore matches for claude and codex and MISSES for codewith, which would leave
|
|
39
|
+
* exactly one tool unguarded while the tests for the other two pass. Match on either base.
|
|
40
|
+
*/
|
|
41
|
+
export declare function isSessionManagedOutputRelativePath(relativePath: string): boolean;
|
|
16
42
|
export declare const LEGACY_CONFIGS_PACKAGE: "@hasna/configs";
|
|
17
43
|
export declare const LEGACY_CONFIGS_COMPAT_VERSION: "0.2.45";
|
|
18
44
|
export declare const LEGACY_CONFIGS_EXECUTABLE: "configs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../src/lib/project-context.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG1H,eAAO,MAAM,sBAAsB,EAAG,0CAAmD,CAAC;AAC1F,eAAO,MAAM,+BAA+B,QAAW,CAAC;AACxD,eAAO,MAAM,kCAAkC,QAAW,CAAC;AAC3D,eAAO,MAAM,iCAAiC,OAAQ,CAAC;AACvD,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAC9C,eAAO,MAAM,6BAA6B,2CAA2C,CAAC;AACtF,eAAO,MAAM,6BAA6B,yCAAyC,CAAC;AACpF,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAC9E,eAAO,MAAM,yBAAyB,gCAAgC,CAAC;AACvE,eAAO,MAAM,4BAA4B,qCAAqC,CAAC;AAC/E,eAAO,MAAM,4BAA4B,EAAG,6CAAsD,CAAC;AACnG,eAAO,MAAM,+BAA+B,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"project-context.d.ts","sourceRoot":"","sources":["../../src/lib/project-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-render-managed-output-bound.test.d.ts","sourceRoot":"","sources":["../../src/lib/session-render-managed-output-bound.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-render.d.ts","sourceRoot":"","sources":["../../src/lib/session-render.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAehD,OAAO,
|
|
1
|
+
{"version":3,"file":"session-render.d.ts","sourceRoot":"","sources":["../../src/lib/session-render.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -5729,7 +5729,7 @@ function isSafeSingleLine(value) {
|
|
|
5729
5729
|
function isSafeCommandArgument(value) {
|
|
5730
5730
|
return /^[A-Za-z0-9_./:@+=,-]+$/.test(value) && !value.includes("://") && !value.startsWith("-") || /^--[a-z][a-z0-9-]*$/.test(value);
|
|
5731
5731
|
}
|
|
5732
|
-
var PROJECT_CONTEXT_SCHEMA = "hasna.projects.project_context_bundle.v1", PROJECT_CONTEXT_MAX_INPUT_BYTES, PROJECT_CONTEXT_MAX_RENDERED_BYTES, PROJECT_CONTEXT_MAX_COMMANDS = 6, PROJECT_CONTEXT_FRAGMENT_PATH = ".hasna/instructions/project-context.md", PROJECT_CONTEXT_CACHE_SCHEMA = "hasna.instructions.project-context-cache/v1", SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES, PROJECT_CONTEXT_LOCK_STALE_MS, PROJECT_KINDS, PROJECT_STATUSES, LINK_STATES, RESOLUTION_SOURCES, safeId, nullableId, producerSlug, producerName, safeOptionalDisplay, isoTimestamp, revisionSchema, hashSchema, absolutePath, commandArg, commandSchema, projectContextBundleSchema, storedManifestProjectContextSchema, storedManifestFileSchema, storedManifestObservationSchema, projectContextCacheSchema;
|
|
5732
|
+
var PROJECT_CONTEXT_SCHEMA = "hasna.projects.project_context_bundle.v1", PROJECT_CONTEXT_MAX_INPUT_BYTES, PROJECT_CONTEXT_MAX_RENDERED_BYTES, PROJECT_CONTEXT_MAX_COMMANDS = 6, PROJECT_CONTEXT_FRAGMENT_PATH = ".hasna/instructions/project-context.md", PROJECT_CONTEXT_CACHE_SCHEMA = "hasna.instructions.project-context-cache/v1", SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES, FOREIGN_INPUT_MAX_BYTES, SESSION_MANAGED_OUTPUT_MAX_BYTES, SESSION_MANAGED_OUTPUT_WARN_BYTES, PROJECT_CONTEXT_LOCK_STALE_MS, PROJECT_KINDS, PROJECT_STATUSES, LINK_STATES, RESOLUTION_SOURCES, safeId, nullableId, producerSlug, producerName, safeOptionalDisplay, isoTimestamp, revisionSchema, hashSchema, absolutePath, commandArg, commandSchema, projectContextBundleSchema, storedManifestProjectContextSchema, storedManifestFileSchema, storedManifestObservationSchema, projectContextCacheSchema;
|
|
5733
5733
|
var init_project_context = __esm(() => {
|
|
5734
5734
|
init_zod();
|
|
5735
5735
|
init_redact();
|
|
@@ -5737,6 +5737,9 @@ var init_project_context = __esm(() => {
|
|
|
5737
5737
|
PROJECT_CONTEXT_MAX_INPUT_BYTES = 8 * 1024;
|
|
5738
5738
|
PROJECT_CONTEXT_MAX_RENDERED_BYTES = 4 * 1024;
|
|
5739
5739
|
SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES = 8 * 1024 * 1024;
|
|
5740
|
+
FOREIGN_INPUT_MAX_BYTES = 256 * 1024;
|
|
5741
|
+
SESSION_MANAGED_OUTPUT_MAX_BYTES = SESSION_COMPATIBILITY_MANIFEST_MAX_BYTES;
|
|
5742
|
+
SESSION_MANAGED_OUTPUT_WARN_BYTES = Math.floor(SESSION_MANAGED_OUTPUT_MAX_BYTES / 2);
|
|
5740
5743
|
PROJECT_CONTEXT_LOCK_STALE_MS = 5 * 60 * 1000;
|
|
5741
5744
|
PROJECT_KINDS = [
|
|
5742
5745
|
"open-source",
|
|
@@ -7236,7 +7239,7 @@ var init_sync_dir = __esm(() => {
|
|
|
7236
7239
|
var require_package = __commonJS((exports, module) => {
|
|
7237
7240
|
module.exports = {
|
|
7238
7241
|
name: "@hasna/instructions",
|
|
7239
|
-
version: "0.4.
|
|
7242
|
+
version: "0.4.24",
|
|
7240
7243
|
description: "AI coding agent instruction & configuration manager \u2014 store, version, apply, and share all your AI coding configs. CLI + MCP + HTTP API (instructions-serve) + generated SDK + Dashboard.",
|
|
7241
7244
|
type: "module",
|
|
7242
7245
|
main: "dist/index.js",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/instructions",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.24",
|
|
4
4
|
"description": "AI coding agent instruction & configuration manager \u2014 store, version, apply, and share all your AI coding configs. CLI + MCP + HTTP API (instructions-serve) + generated SDK + Dashboard.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|