ctxr-cli 0.20.0 → 0.21.0
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/README.md +55 -16
- package/dist/adapters/builtin/index.d.ts.map +1 -1
- package/dist/adapters/builtin/index.js +8 -1
- package/dist/adapters/builtin/index.js.map +1 -1
- package/dist/adapters/harness/antigravity.d.ts +18 -0
- package/dist/adapters/harness/antigravity.d.ts.map +1 -0
- package/dist/adapters/harness/antigravity.js +24 -0
- package/dist/adapters/harness/antigravity.js.map +1 -0
- package/dist/adapters/harness/codex.d.ts +22 -0
- package/dist/adapters/harness/codex.d.ts.map +1 -0
- package/dist/adapters/harness/codex.js +28 -0
- package/dist/adapters/harness/codex.js.map +1 -0
- package/dist/adapters/types.d.ts +9 -0
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/commands/adapters-generate.d.ts +2 -14
- package/dist/commands/adapters-generate.d.ts.map +1 -1
- package/dist/commands/adapters-generate.js +2 -50
- package/dist/commands/adapters-generate.js.map +1 -1
- package/dist/commands/ingest.d.ts.map +1 -1
- package/dist/commands/ingest.js +13 -1
- package/dist/commands/ingest.js.map +1 -1
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +32 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/publish-urls.d.ts +32 -0
- package/dist/commands/publish-urls.d.ts.map +1 -0
- package/dist/commands/publish-urls.js +125 -0
- package/dist/commands/publish-urls.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +0 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/config/defaults.d.ts +26 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +25 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +19 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +31 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/core/adapter-outputs.d.ts +19 -0
- package/dist/core/adapter-outputs.d.ts.map +1 -0
- package/dist/core/adapter-outputs.js +54 -0
- package/dist/core/adapter-outputs.js.map +1 -0
- package/dist/core/agents-doc.d.ts +26 -0
- package/dist/core/agents-doc.d.ts.map +1 -1
- package/dist/core/agents-doc.js +95 -39
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/checks/harness-portability-checks.d.ts +32 -0
- package/dist/core/checks/harness-portability-checks.d.ts.map +1 -1
- package/dist/core/checks/harness-portability-checks.js +177 -2
- package/dist/core/checks/harness-portability-checks.js.map +1 -1
- package/dist/core/checks/integrity-checks.d.ts.map +1 -1
- package/dist/core/checks/integrity-checks.js +34 -14
- package/dist/core/checks/integrity-checks.js.map +1 -1
- package/dist/core/checks/organize-checks.d.ts +5 -0
- package/dist/core/checks/organize-checks.d.ts.map +1 -1
- package/dist/core/checks/organize-checks.js +57 -4
- package/dist/core/checks/organize-checks.js.map +1 -1
- package/dist/core/convention-doc.d.ts.map +1 -1
- package/dist/core/convention-doc.js +5 -2
- package/dist/core/convention-doc.js.map +1 -1
- package/dist/core/conventions.d.ts +7 -0
- package/dist/core/conventions.d.ts.map +1 -1
- package/dist/core/conventions.js +3 -0
- package/dist/core/conventions.js.map +1 -1
- package/dist/core/errors.d.ts +16 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +32 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/ingest/required-sections.d.ts +3 -3
- package/dist/core/ingest/required-sections.d.ts.map +1 -1
- package/dist/core/ingest/required-sections.js +79 -16
- package/dist/core/ingest/required-sections.js.map +1 -1
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js +3 -0
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/reconcile.d.ts +2 -1
- package/dist/core/reconcile.d.ts.map +1 -1
- package/dist/core/reconcile.js +10 -2
- package/dist/core/reconcile.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +16 -5
- package/dist/core/skills.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +14 -1
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +3 -3
- package/templates/agents/canonical.md +3 -6
- package/templates/agents/capture-and-ingest.md +1 -36
- package/templates/agents/conventions.md +3 -1
- package/templates/agents/guidance-index.md +5 -0
- package/templates/agents/mission.md +2 -0
- package/templates/agents/retrieval-leg-routing.md +7 -36
- package/templates/conventions/baseline-conventions.md +20 -9
- package/templates/conventions/house-conventions-seed.md +10 -0
- package/templates/notes/Concept.md +2 -1
- package/templates/skills/ctxr-capture.md +30 -4
- package/templates/skills/ctxr-derived-artifacts.md +6 -0
- package/templates/skills/ctxr-ingest-orchestration.md +5 -1
- package/templates/skills/ctxr-mission.md +40 -31
- package/templates/skills/ctxr-organize-audit.md +6 -0
- package/templates/skills/ctxr-placement.md +5 -0
- package/templates/skills/ctxr-publish.md +18 -4
- package/templates/skills/ctxr-second-opinion/lenses.md +3 -1
- package/templates/skills/ctxr-second-opinion/run.mjs +39 -12
- package/templates/skills/ctxr-second-opinion.md +19 -6
- package/templates/skills/ctxr-submit.md +28 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-outputs.d.ts","sourceRoot":"","sources":["../../src/core/adapter-outputs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH;;;;GAIG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC,CA2ChG"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { configuredAdapters } from '../adapters/registry.js';
|
|
3
|
+
import { agentsMdPath } from './agents-doc.js';
|
|
4
|
+
import { upsertFencedRegionInFile } from './fs/fenced-region.js';
|
|
5
|
+
import { retireInstalledHookScript } from './hooks.js';
|
|
6
|
+
import { mergeJsonArrayLists } from './json-config-merge.js';
|
|
7
|
+
import { harnessEntryFence } from './markers.js';
|
|
8
|
+
/**
|
|
9
|
+
* adapters spec / task 8.3-8.4: every configured harness-generation adapter
|
|
10
|
+
* gets its entry file's fenced region (re)written from `render()`, and,
|
|
11
|
+
* for a harness that supports it, its permission config merged in. Two
|
|
12
|
+
* adapters targeting the same physical file (the common case: one harness's
|
|
13
|
+
* own entry file) never collide, because each owns a distinctly-named fence.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* The generation itself, shared by `ctxr adapters generate`, `reconcileStore`
|
|
17
|
+
* (so `ctxr update` and `ctxr init` on an existing store), and a fresh
|
|
18
|
+
* `ctxr init` (init-generates-harness-adapter-output).
|
|
19
|
+
*/
|
|
20
|
+
export async function generateAdapterOutputs(store) {
|
|
21
|
+
const files = [];
|
|
22
|
+
for (const adapter of configuredAdapters(store.config, 'harness-generation')) {
|
|
23
|
+
if (adapter.entryFileName !== undefined && adapter.render !== undefined) {
|
|
24
|
+
const entryPath = path.join(store.root, adapter.entryFileName);
|
|
25
|
+
const { changed } = await upsertFencedRegionInFile(entryPath, harnessEntryFence(adapter.id), adapter.render(agentsMdPath(store.root)));
|
|
26
|
+
files.push({ path: adapter.entryFileName, changed });
|
|
27
|
+
}
|
|
28
|
+
if (adapter.permissionConfig) {
|
|
29
|
+
const input = {
|
|
30
|
+
root: store.root,
|
|
31
|
+
worktreesPath: store.config.session.worktrees_path,
|
|
32
|
+
};
|
|
33
|
+
let permChanged = false;
|
|
34
|
+
// retire-the-write-gate: the script this adapter used to install is
|
|
35
|
+
// removed rather than left orphaned. contexture delivered it, so
|
|
36
|
+
// contexture takes it away; it is version-controlled, so an operator
|
|
37
|
+
// who wants it back has it in history.
|
|
38
|
+
for (const targetPath of adapter.permissionConfig.retiredHookFiles ?? []) {
|
|
39
|
+
const { changed: retired } = await retireInstalledHookScript(store.root, targetPath);
|
|
40
|
+
permChanged = permChanged || retired;
|
|
41
|
+
}
|
|
42
|
+
const permPath = path.join(store.root, adapter.permissionConfig.path);
|
|
43
|
+
const rules = adapter.permissionConfig.render(input);
|
|
44
|
+
const retired = adapter.permissionConfig.retiredRules(input);
|
|
45
|
+
const { changed: rulesChanged } = await mergeJsonArrayLists(permPath, rules, {
|
|
46
|
+
remove: retired,
|
|
47
|
+
});
|
|
48
|
+
permChanged = permChanged || rulesChanged;
|
|
49
|
+
files.push({ path: adapter.permissionConfig.path, changed: permChanged });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return files;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=adapter-outputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-outputs.js","sourceRoot":"","sources":["../../src/core/adapter-outputs.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAqC,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAQjD;;;;;;GAMG;AACH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAY;IACvD,MAAM,KAAK,GAAiC,EAAE,CAAC;IAE/C,KAAK,MAAM,OAAO,IAAI,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC7E,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACxE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;YAC/D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,wBAAwB,CAChD,SAAS,EACT,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC,EAC7B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACzC,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc;aACnD,CAAC;YACF,IAAI,WAAW,GAAG,KAAK,CAAC;YAExB,oEAAoE;YACpE,iEAAiE;YACjE,qEAAqE;YACrE,uCAAuC;YACvC,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC;gBACzE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,yBAAyB,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBACrF,WAAW,GAAG,WAAW,IAAI,OAAO,CAAC;YACvC,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,KAAmB,EAAE;gBACzF,MAAM,EAAE,OAAsB;aAC/B,CAAC,CAAC;YACH,WAAW,GAAG,WAAW,IAAI,YAAY,CAAC;YAE1C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -70,6 +70,12 @@ export declare function buildAgentsCanonicalSection(root: string, config: StoreC
|
|
|
70
70
|
* or the note doesn't exist, either of which renders nothing at all.
|
|
71
71
|
*/
|
|
72
72
|
export declare const AGENTS_MD_MISSION_FENCE: import("./markers.js").Fence;
|
|
73
|
+
/**
|
|
74
|
+
* a-dated-mission-core D2: the date the operator last confirmed the mission,
|
|
75
|
+
* from its recorded rollup timestamp — rendered rather than judged, so the
|
|
76
|
+
* generated text stays deterministic and the agent compares it to today.
|
|
77
|
+
*/
|
|
78
|
+
export declare function missionConfirmedLine(missionRaw: string, missionPath: string): string;
|
|
73
79
|
export declare function renderMissionSection(config: StoreConfig, missionRaw: string | null): string[];
|
|
74
80
|
export declare function buildAgentsMissionSection(root: string, config: StoreConfig): Promise<{
|
|
75
81
|
changed: boolean;
|
|
@@ -101,10 +107,30 @@ export declare function renderConventionBlock(doc: ScannedDoc): string[];
|
|
|
101
107
|
export declare const BASELINE_SOURCE_LABEL = "contexture's shipped baseline, rendered from this store's configuration";
|
|
102
108
|
/** The shipped baseline as an inlined block, synthesized rather than read off disk. */
|
|
103
109
|
export declare function renderBaselineBlock(config: StoreConfig): string[];
|
|
110
|
+
/**
|
|
111
|
+
* lean-composed-entry-document: a guidance document that declares `read_when`
|
|
112
|
+
* loads on demand — it is listed in the guidance index, never inlined here.
|
|
113
|
+
*/
|
|
114
|
+
export declare function inlinedConventions(conventions: readonly ScannedDoc[]): ScannedDoc[];
|
|
115
|
+
export declare function onDemandGuidance(conventions: readonly ScannedDoc[]): ScannedDoc[];
|
|
116
|
+
/** `conventions` is every scanned guidance document; the on-demand ones are filtered out here, not by the caller. */
|
|
104
117
|
export declare function renderConventionsSection(config: StoreConfig, conventions: readonly ScannedDoc[]): string[];
|
|
105
118
|
export declare function buildAgentsConventionsSection(root: string, config: StoreConfig): Promise<{
|
|
106
119
|
changed: boolean;
|
|
107
120
|
}>;
|
|
121
|
+
/**
|
|
122
|
+
* lean-composed-entry-document: the router. One row per on-demand guidance
|
|
123
|
+
* document — its trigger, its title, its path — so an agent learns that the
|
|
124
|
+
* document exists and when it matters without paying for its body on every
|
|
125
|
+
* turn. Absent entirely when no document is on demand (the mission
|
|
126
|
+
* section's pattern), never an empty fence pair.
|
|
127
|
+
*/
|
|
128
|
+
export declare const AGENTS_MD_GUIDANCE_INDEX_FENCE: import("./markers.js").Fence;
|
|
129
|
+
export declare function renderGuidanceIndexRow(doc: ScannedDoc): string;
|
|
130
|
+
export declare function renderGuidanceIndexSection(conventions: readonly ScannedDoc[]): string[];
|
|
131
|
+
export declare function buildAgentsGuidanceIndexSection(root: string, config: StoreConfig): Promise<{
|
|
132
|
+
changed: boolean;
|
|
133
|
+
}>;
|
|
108
134
|
/**
|
|
109
135
|
* harness-portability spec: "Generated sections render in a fixed order" —
|
|
110
136
|
* hard rules and current state first, operating mechanics next, the long
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-doc.d.ts","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"agents-doc.d.ts","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"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"}
|
package/dist/core/agents-doc.js
CHANGED
|
@@ -2,6 +2,8 @@ import { readFile } from 'node:fs/promises';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { GRAPH_DOCUMENT_RELATIVE_PATH } from './graph/persist.js';
|
|
4
4
|
import { CONFIG_FILE_NAME } from './root.js';
|
|
5
|
+
import { parseNoteText } from './notes/parse.js';
|
|
6
|
+
import { ROLLED_UP_FIELD } from './rollup.js';
|
|
5
7
|
import { excludedPrefixesFor } from './notes/list.js';
|
|
6
8
|
import { extractDocMetadata, inlineDocBody, scanConventions } from './conventions.js';
|
|
7
9
|
import { renderBaselineConventions } from './convention-doc.js';
|
|
@@ -62,7 +64,11 @@ function collapseNestedPrefixes(prefixes) {
|
|
|
62
64
|
}
|
|
63
65
|
export function renderLegRoutingSection(config) {
|
|
64
66
|
const exclusions = collapseNestedPrefixes(excludedPrefixesFor(config));
|
|
65
|
-
return
|
|
67
|
+
return agentsTemplate('retrieval-leg-routing')
|
|
68
|
+
.replaceAll('__GRAPH_DOCUMENT_PATH__', GRAPH_DOCUMENT_RELATIVE_PATH)
|
|
69
|
+
.replaceAll('__CAPTURE_ROOT__', config.ingest.capture_root)
|
|
70
|
+
.replaceAll('__EXCLUSION_PATHS__', exclusions.map((prefix) => `\`${prefix}\``).join(', '))
|
|
71
|
+
.split('\n');
|
|
66
72
|
}
|
|
67
73
|
/** Idempotently reconciles AGENTS.md's leg-routing section from current config — called at init and on re-init. */
|
|
68
74
|
export async function buildAgentsLegRoutingSection(root, config) {
|
|
@@ -120,32 +126,15 @@ export async function buildAgentsPlacementSection(root, config) {
|
|
|
120
126
|
* path at the configured skills path.
|
|
121
127
|
*/
|
|
122
128
|
export const AGENTS_MD_CANONICAL_FENCE = htmlCommentFence('canonical');
|
|
123
|
-
/**
|
|
124
|
-
* context-organize spec, kept through inline-conventions-and-mission's
|
|
125
|
-
* design decision "the identity/mission pointer coexists with the inlined
|
|
126
|
-
* Mission section": when `organize.mission_path` is configured, the
|
|
127
|
-
* canonical section still names it as a document to load at session start,
|
|
128
|
-
* immediately followed (as its own fenced section — see
|
|
129
|
-
* `renderMissionSection` below) by that document's full inlined body.
|
|
130
|
-
* Nothing is rendered when unset: the `__MISSION_POINTER__` template line
|
|
131
|
-
* disappears entirely (via `substituteBlock`'s empty-list case), not a
|
|
132
|
-
* placeholder.
|
|
133
|
-
*/
|
|
134
|
-
function renderMissionPointer(config) {
|
|
135
|
-
const { mission_path: missionPath } = config.organize;
|
|
136
|
-
if (!missionPath)
|
|
137
|
-
return [];
|
|
138
|
-
return [
|
|
139
|
-
'',
|
|
140
|
-
`Load \`${missionPath}\` at the start of every session — this store's standing current-state document, ` +
|
|
141
|
-
'kept current by the mission skill and written through `ctxr rollup write`; its full content follows in the "Mission" section below.',
|
|
142
|
-
];
|
|
143
|
-
}
|
|
144
129
|
export function renderCanonicalSection(config) {
|
|
145
|
-
|
|
130
|
+
// a-dated-mission-core: no mission pointer here — the Mission section
|
|
131
|
+
// already carries the content and names its source, and the pointer
|
|
132
|
+
// caused ritual re-reads of a document every agent already had.
|
|
133
|
+
return agentsTemplate('canonical')
|
|
146
134
|
.replaceAll('__CONFIG_FILE_NAME__', CONFIG_FILE_NAME)
|
|
147
135
|
.replaceAll('__SKILLS_PATH__', config.harness.skills_path)
|
|
148
|
-
.replaceAll('__TEMPLATES_PATH__', config.templates.path)
|
|
136
|
+
.replaceAll('__TEMPLATES_PATH__', config.templates.path)
|
|
137
|
+
.split('\n');
|
|
149
138
|
}
|
|
150
139
|
export async function buildAgentsCanonicalSection(root, config) {
|
|
151
140
|
return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_CANONICAL_FENCE, renderCanonicalSection(config));
|
|
@@ -159,12 +148,33 @@ export async function buildAgentsCanonicalSection(root, config) {
|
|
|
159
148
|
* or the note doesn't exist, either of which renders nothing at all.
|
|
160
149
|
*/
|
|
161
150
|
export const AGENTS_MD_MISSION_FENCE = htmlCommentFence('mission');
|
|
151
|
+
/**
|
|
152
|
+
* a-dated-mission-core D2: the date the operator last confirmed the mission,
|
|
153
|
+
* from its recorded rollup timestamp — rendered rather than judged, so the
|
|
154
|
+
* generated text stays deterministic and the agent compares it to today.
|
|
155
|
+
*/
|
|
156
|
+
export function missionConfirmedLine(missionRaw, missionPath) {
|
|
157
|
+
let rolledUp;
|
|
158
|
+
try {
|
|
159
|
+
rolledUp = parseNoteText(missionRaw, missionPath).frontmatter?.[ROLLED_UP_FIELD];
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
rolledUp = undefined;
|
|
163
|
+
}
|
|
164
|
+
const raw = rolledUp instanceof Date ? rolledUp.toISOString() : typeof rolledUp === 'string' ? rolledUp : '';
|
|
165
|
+
const date = /^\d{4}-\d{2}-\d{2}/.exec(raw)?.[0];
|
|
166
|
+
return date
|
|
167
|
+
? `_Last confirmed ${date}. Check what has moved since before relying on a priority below._`
|
|
168
|
+
: '_Never confirmed: these priorities have not been reviewed since the document was seeded._';
|
|
169
|
+
}
|
|
162
170
|
export function renderMissionSection(config, missionRaw) {
|
|
163
171
|
const { mission_path: missionPath } = config.organize;
|
|
164
172
|
if (!missionPath || missionRaw === null)
|
|
165
173
|
return [];
|
|
166
174
|
const doc = extractDocMetadata(missionRaw, missionPath);
|
|
167
|
-
return substituteBlock(agentsTemplate('mission')
|
|
175
|
+
return substituteBlock(agentsTemplate('mission')
|
|
176
|
+
.replaceAll('__MISSION_PATH__', missionPath)
|
|
177
|
+
.replaceAll('__MISSION_CONFIRMED__', missionConfirmedLine(missionRaw, missionPath)), '__MISSION_BODY__', inlineDocBody(doc, 1)).split('\n');
|
|
168
178
|
}
|
|
169
179
|
export async function buildAgentsMissionSection(root, config) {
|
|
170
180
|
const { mission_path: missionPath } = config.organize;
|
|
@@ -221,25 +231,51 @@ export function renderBaselineBlock(config) {
|
|
|
221
231
|
const doc = extractDocMetadata(renderBaselineConventions(config), BASELINE_SOURCE_LABEL);
|
|
222
232
|
return [`### ${doc.title}`, '', ...inlineDocBody(doc, 2), '', `_Source: ${BASELINE_SOURCE_LABEL}_`];
|
|
223
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* lean-composed-entry-document: a guidance document that declares `read_when`
|
|
236
|
+
* loads on demand — it is listed in the guidance index, never inlined here.
|
|
237
|
+
*/
|
|
238
|
+
export function inlinedConventions(conventions) {
|
|
239
|
+
return conventions.filter((doc) => doc.readWhen === null);
|
|
240
|
+
}
|
|
241
|
+
export function onDemandGuidance(conventions) {
|
|
242
|
+
return conventions.filter((doc) => doc.readWhen !== null);
|
|
243
|
+
}
|
|
224
244
|
function conventionsBody(config, conventions) {
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
"contexture's shipped baseline, inlined in full. This store has added none of its own yet —",
|
|
228
|
-
'operator-authored conventions (content style, field semantics, house rules) belong as markdown',
|
|
229
|
-
`files under \`${config.harness.guidance_path}\`, each inlined here alongside the baseline.`,
|
|
230
|
-
]
|
|
231
|
-
: ["contexture's shipped baseline and this store's own conventions, inlined in full:"];
|
|
232
|
-
const blocks = [renderBaselineBlock(config), ...conventions.map(renderConventionBlock)];
|
|
233
|
-
const bodies = blocks.flatMap((block, i) => (i === blocks.length - 1 ? block : [...block, '']));
|
|
234
|
-
return [...intro, '', ...bodies];
|
|
245
|
+
const blocks = [renderBaselineBlock(config), ...inlinedConventions(conventions).map(renderConventionBlock)];
|
|
246
|
+
return blocks.flatMap((block, i) => (i === blocks.length - 1 ? block : [...block, '']));
|
|
235
247
|
}
|
|
248
|
+
/** `conventions` is every scanned guidance document; the on-demand ones are filtered out here, not by the caller. */
|
|
236
249
|
export function renderConventionsSection(config, conventions) {
|
|
237
|
-
return substituteBlock(agentsTemplate('conventions'), '__CONVENTION_BODY__', conventionsBody(config, conventions)).split('\n');
|
|
250
|
+
return substituteBlock(agentsTemplate('conventions').replaceAll('__GUIDANCE_PATH__', config.harness.guidance_path), '__CONVENTION_BODY__', conventionsBody(config, conventions)).split('\n');
|
|
238
251
|
}
|
|
239
252
|
export async function buildAgentsConventionsSection(root, config) {
|
|
240
253
|
const conventions = await scanConventions(root, config);
|
|
241
254
|
return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_CONVENTIONS_FENCE, renderConventionsSection(config, conventions));
|
|
242
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* lean-composed-entry-document: the router. One row per on-demand guidance
|
|
258
|
+
* document — its trigger, its title, its path — so an agent learns that the
|
|
259
|
+
* document exists and when it matters without paying for its body on every
|
|
260
|
+
* turn. Absent entirely when no document is on demand (the mission
|
|
261
|
+
* section's pattern), never an empty fence pair.
|
|
262
|
+
*/
|
|
263
|
+
export const AGENTS_MD_GUIDANCE_INDEX_FENCE = htmlCommentFence('guidance-index');
|
|
264
|
+
export function renderGuidanceIndexRow(doc) {
|
|
265
|
+
return `- ${doc.readWhen} → [${doc.title}](${doc.path})`;
|
|
266
|
+
}
|
|
267
|
+
export function renderGuidanceIndexSection(conventions) {
|
|
268
|
+
const rows = onDemandGuidance(conventions).map(renderGuidanceIndexRow);
|
|
269
|
+
if (rows.length === 0)
|
|
270
|
+
return [];
|
|
271
|
+
return substituteBlock(agentsTemplate('guidance-index'), '__GUIDANCE_ROWS__', rows).split('\n');
|
|
272
|
+
}
|
|
273
|
+
export async function buildAgentsGuidanceIndexSection(root, config) {
|
|
274
|
+
const body = renderGuidanceIndexSection(await scanConventions(root, config));
|
|
275
|
+
if (body.length === 0)
|
|
276
|
+
return removeFencedRegionFromFile(agentsMdPath(root), AGENTS_MD_GUIDANCE_INDEX_FENCE);
|
|
277
|
+
return upsertFencedRegionInFile(agentsMdPath(root), AGENTS_MD_GUIDANCE_INDEX_FENCE, body);
|
|
278
|
+
}
|
|
243
279
|
/**
|
|
244
280
|
* harness-portability spec: "Generated sections render in a fixed order" —
|
|
245
281
|
* hard rules and current state first, operating mechanics next, the long
|
|
@@ -255,6 +291,7 @@ export const AGENTS_MD_SECTION_ORDER = [
|
|
|
255
291
|
AGENTS_MD_CAPTURE_FENCE,
|
|
256
292
|
AGENTS_MD_PLACEMENT_FENCE,
|
|
257
293
|
AGENTS_MD_CONVENTIONS_FENCE,
|
|
294
|
+
AGENTS_MD_GUIDANCE_INDEX_FENCE,
|
|
258
295
|
];
|
|
259
296
|
/**
|
|
260
297
|
* harness-portability spec: "The entry document's inlined content matches
|
|
@@ -277,21 +314,40 @@ export async function checkAgentsMdDrift(root, config) {
|
|
|
277
314
|
if (!conventionsRegion.includes(renderBaselineBlock(config).join('\n'))) {
|
|
278
315
|
driftedConventions.push(BASELINE_SOURCE_LABEL);
|
|
279
316
|
}
|
|
280
|
-
if (conventions.length === 0) {
|
|
317
|
+
if (inlinedConventions(conventions).length === 0) {
|
|
281
318
|
if (driftedConventions.length === 0)
|
|
282
319
|
driftedConventions.push(config.harness.guidance_path);
|
|
283
320
|
}
|
|
284
321
|
else {
|
|
285
|
-
for (const doc of conventions) {
|
|
322
|
+
for (const doc of inlinedConventions(conventions)) {
|
|
286
323
|
if (!conventionsRegion.includes(renderConventionBlock(doc).join('\n')))
|
|
287
324
|
driftedConventions.push(doc.path);
|
|
288
325
|
}
|
|
326
|
+
// A document switched to on demand whose body is still inlined.
|
|
327
|
+
for (const doc of onDemandGuidance(conventions)) {
|
|
328
|
+
if (conventionsRegion.includes(renderConventionBlock(doc).join('\n')))
|
|
329
|
+
driftedConventions.push(doc.path);
|
|
330
|
+
}
|
|
289
331
|
// Every individual block present, yet the whole section still differs
|
|
290
332
|
// (a reordering, an added/removed file, a template change): still real
|
|
291
333
|
// drift, just not attributable to one file — report the whole set.
|
|
292
334
|
if (driftedConventions.length === 0)
|
|
293
|
-
driftedConventions.push(...conventions.map((doc) => doc.path));
|
|
335
|
+
driftedConventions.push(...inlinedConventions(conventions).map((doc) => doc.path));
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
// lean-composed-entry-document: an on-demand document drifts when its row
|
|
339
|
+
// (trigger, title, path) no longer matches — or it moved in or out of the
|
|
340
|
+
// index — even though none of its body was ever in AGENTS.md.
|
|
341
|
+
const indexRegion = (await readFencedRegionFromFile(filePath, AGENTS_MD_GUIDANCE_INDEX_FENCE)).join('\n');
|
|
342
|
+
const freshIndex = renderGuidanceIndexSection(conventions).join('\n');
|
|
343
|
+
if (freshIndex !== indexRegion) {
|
|
344
|
+
const before = driftedConventions.length;
|
|
345
|
+
for (const doc of onDemandGuidance(conventions)) {
|
|
346
|
+
if (!indexRegion.includes(renderGuidanceIndexRow(doc)) && !driftedConventions.includes(doc.path))
|
|
347
|
+
driftedConventions.push(doc.path);
|
|
294
348
|
}
|
|
349
|
+
if (driftedConventions.length === before)
|
|
350
|
+
driftedConventions.push(config.harness.guidance_path);
|
|
295
351
|
}
|
|
296
352
|
let driftedMission = null;
|
|
297
353
|
const missionPath = config.organize.mission_path;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agents-doc.js","sourceRoot":"","sources":["../../src/core/agents-doc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { HarnessGenerationAdapter } from '../../adapters/types.js';
|
|
1
2
|
/**
|
|
2
3
|
* compose-store-guidance-documents design.md D6: inlining every convention
|
|
3
4
|
* file's full body into AGENTS.md's "Store conventions" section
|
|
@@ -29,5 +30,36 @@ export declare const conventionsSectionSizeCheck: import("./types.js").CheckDefi
|
|
|
29
30
|
* relocation and no migration. The store is told, not blocked.
|
|
30
31
|
*/
|
|
31
32
|
export declare const skillsPathIsHarnessBrandedCheck: import("./types.js").CheckDefinition;
|
|
33
|
+
/**
|
|
34
|
+
* lean-composed-entry-document:
|
|
35
|
+
* the generated section a byte offset falls inside — the last
|
|
36
|
+
* `contexture:<region>` fence opened at or before it — so a finding says
|
|
37
|
+
* what a harness stops reading, not just how much. `null` when the offset
|
|
38
|
+
* precedes every fence (hand-written preamble).
|
|
39
|
+
*/
|
|
40
|
+
export declare function sectionAtByte(content: string, offset: number): string | null;
|
|
41
|
+
/** Every built-in harness adapter that declares a read limit — declared by the store or not. */
|
|
42
|
+
export declare function limitedBuiltinHarnesses(): HarnessGenerationAdapter[];
|
|
43
|
+
/**
|
|
44
|
+
* lean-composed-entry-document: "The entry document fits every supported
|
|
45
|
+
* harness." One store-wide limit, defaulting to the smallest built-in read
|
|
46
|
+
* limit, applied whichever harnesses the store declares (design.md D3). An
|
|
47
|
+
* invariant, because past a harness's limit content is silently never seen.
|
|
48
|
+
* Each finding names a built-in harness whose own limit is exceeded. Store
|
|
49
|
+
* scope only, so an over-limit store can still commit the edits that bring
|
|
50
|
+
* it back under.
|
|
51
|
+
*/
|
|
52
|
+
export declare const entryDocumentReadLimitCheck: import("./types.js").CheckDefinition;
|
|
53
|
+
/**
|
|
54
|
+
* lean-composed-entry-document D3: the target is a judgment about per-turn
|
|
55
|
+
* cost and adherence, not a fact about any harness — an observation, never a
|
|
56
|
+
* failure.
|
|
57
|
+
*/
|
|
58
|
+
export declare const entryDocumentTargetSizeCheck: import("./types.js").CheckDefinition;
|
|
59
|
+
/**
|
|
60
|
+
* a-dated-mission-core D3: the mission core loads on every turn, so its size
|
|
61
|
+
* is budgeted like the conventions section — measured on the inlined body.
|
|
62
|
+
*/
|
|
63
|
+
export declare const missionSizeCheck: import("./types.js").CheckDefinition;
|
|
32
64
|
export declare const HARNESS_PORTABILITY_CHECKS: import("./types.js").CheckDefinition[];
|
|
33
65
|
//# sourceMappingURL=harness-portability-checks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-portability-checks.d.ts","sourceRoot":"","sources":["../../../src/core/checks/harness-portability-checks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"harness-portability-checks.d.ts","sourceRoot":"","sources":["../../../src/core/checks/harness-portability-checks.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAcxE;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,sCAuBtC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,+BAA+B,sCAyB1C,CAAC;AAWH;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU5E;AAED,gGAAgG;AAChG,wBAAgB,uBAAuB,IAAI,wBAAwB,EAAE,CAIpE;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,sCAyCtC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,sCA4BvC,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,gBAAgB,sCAiC3B,CAAC;AAEH,eAAO,MAAM,0BAA0B,wCAMtC,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
1
3
|
import { configuredAdapters } from '../../adapters/registry.js';
|
|
2
|
-
import {
|
|
4
|
+
import { BUILTIN_ADAPTERS } from '../../adapters/builtin/index.js';
|
|
5
|
+
import { DEFAULT_ENTRY_DOCUMENT_MAX_BYTES, DEFAULT_ENTRY_DOCUMENT_TARGET_BYTES, DEFAULT_MISSION_MAX_BYTES, DEFAULT_SKILLS_PATH, } from '../../config/defaults.js';
|
|
6
|
+
import { extractDocMetadata, inlineDocBody } from '../conventions.js';
|
|
7
|
+
import { GENERIC_START_RE } from '../fs/fenced-region.js';
|
|
3
8
|
import { AGENTS_MD_CONVENTIONS_FENCE, agentsMdPath } from '../agents-doc.js';
|
|
4
9
|
import { readFencedRegionFromFile } from '../fs/fenced-region.js';
|
|
5
10
|
import { defineCheck } from './types.js';
|
|
@@ -68,6 +73,11 @@ export const skillsPathIsHarnessBrandedCheck = defineCheck({
|
|
|
68
73
|
for (const adapter of configuredAdapters(ctx.config, 'harness-generation')) {
|
|
69
74
|
if (adapter.skillsDir !== canonical)
|
|
70
75
|
continue;
|
|
76
|
+
// support-codex-and-antigravity-harnesses: an adapter that declares the
|
|
77
|
+
// cross-harness location itself (codex, antigravity) reads the directory
|
|
78
|
+
// every other harness is bridged to — that is not a branded path.
|
|
79
|
+
if (adapter.skillsDir === DEFAULT_SKILLS_PATH)
|
|
80
|
+
continue;
|
|
71
81
|
findings.push({
|
|
72
82
|
code: 'harness_portability.skills_path_is_harness_branded',
|
|
73
83
|
severity: 'info',
|
|
@@ -79,5 +89,170 @@ export const skillsPathIsHarnessBrandedCheck = defineCheck({
|
|
|
79
89
|
return { status: findings.length > 0 ? 'fail' : 'pass', findings };
|
|
80
90
|
},
|
|
81
91
|
});
|
|
82
|
-
|
|
92
|
+
async function readAgentsMd(storeRoot) {
|
|
93
|
+
try {
|
|
94
|
+
return await readFile(agentsMdPath(storeRoot), 'utf8');
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
if (err.code === 'ENOENT')
|
|
98
|
+
return null;
|
|
99
|
+
throw err;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* lean-composed-entry-document:
|
|
104
|
+
* the generated section a byte offset falls inside — the last
|
|
105
|
+
* `contexture:<region>` fence opened at or before it — so a finding says
|
|
106
|
+
* what a harness stops reading, not just how much. `null` when the offset
|
|
107
|
+
* precedes every fence (hand-written preamble).
|
|
108
|
+
*/
|
|
109
|
+
export function sectionAtByte(content, offset) {
|
|
110
|
+
let consumed = 0;
|
|
111
|
+
let current = null;
|
|
112
|
+
for (const line of content.split('\n')) {
|
|
113
|
+
if (consumed > offset)
|
|
114
|
+
break;
|
|
115
|
+
const start = GENERIC_START_RE.exec(line);
|
|
116
|
+
if (start)
|
|
117
|
+
current = start[1];
|
|
118
|
+
consumed += Buffer.byteLength(line, 'utf8') + 1;
|
|
119
|
+
}
|
|
120
|
+
return current;
|
|
121
|
+
}
|
|
122
|
+
/** Every built-in harness adapter that declares a read limit — declared by the store or not. */
|
|
123
|
+
export function limitedBuiltinHarnesses() {
|
|
124
|
+
return BUILTIN_ADAPTERS.filter((a) => a.kind === 'harness-generation' && a.entryDocumentMaxBytes !== undefined);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* lean-composed-entry-document: "The entry document fits every supported
|
|
128
|
+
* harness." One store-wide limit, defaulting to the smallest built-in read
|
|
129
|
+
* limit, applied whichever harnesses the store declares (design.md D3). An
|
|
130
|
+
* invariant, because past a harness's limit content is silently never seen.
|
|
131
|
+
* Each finding names a built-in harness whose own limit is exceeded. Store
|
|
132
|
+
* scope only, so an over-limit store can still commit the edits that bring
|
|
133
|
+
* it back under.
|
|
134
|
+
*/
|
|
135
|
+
export const entryDocumentReadLimitCheck = defineCheck({
|
|
136
|
+
id: 'harness_portability.entry_document_read_limit',
|
|
137
|
+
title: 'AGENTS.md fits within its size limit, which by default every supported harness reads in full',
|
|
138
|
+
severity: 'invariant',
|
|
139
|
+
capability: 'harness-portability',
|
|
140
|
+
scopes: ['store'],
|
|
141
|
+
async run(ctx) {
|
|
142
|
+
const content = await readAgentsMd(ctx.storeRoot);
|
|
143
|
+
if (content === null) {
|
|
144
|
+
return { status: 'skip', skipReason: 'AGENTS.md has not been generated yet — run `ctxr update`', findings: [] };
|
|
145
|
+
}
|
|
146
|
+
const size = Buffer.byteLength(content, 'utf8');
|
|
147
|
+
const limit = ctx.config.harness.entry_document_max_bytes ?? DEFAULT_ENTRY_DOCUMENT_MAX_BYTES;
|
|
148
|
+
if (size <= limit)
|
|
149
|
+
return { status: 'pass', findings: [] };
|
|
150
|
+
const findings = limitedBuiltinHarnesses()
|
|
151
|
+
.filter((adapter) => size > adapter.entryDocumentMaxBytes)
|
|
152
|
+
.map((adapter) => {
|
|
153
|
+
const harnessLimit = adapter.entryDocumentMaxBytes;
|
|
154
|
+
const section = sectionAtByte(content, harnessLimit);
|
|
155
|
+
return {
|
|
156
|
+
code: 'harness_portability.entry_document_read_limit_exceeded',
|
|
157
|
+
severity: 'error',
|
|
158
|
+
message: `AGENTS.md is ${size} bytes, over this store's ${limit}-byte limit; ${adapter.id} stops reading at ${harnessLimit}, ` +
|
|
159
|
+
`${section ? `inside the "${section}" section` : 'before the first generated section'}. ` +
|
|
160
|
+
'Move guidance that is not needed on every turn into a file declaring `read_when`, or trim the mission.',
|
|
161
|
+
subject: adapter.id,
|
|
162
|
+
details: { size, limit, harness_limit: harnessLimit, section },
|
|
163
|
+
};
|
|
164
|
+
});
|
|
165
|
+
// A store that set its own limit below every harness's still fails, with no harness to name.
|
|
166
|
+
if (findings.length === 0) {
|
|
167
|
+
findings.push({
|
|
168
|
+
code: 'harness_portability.entry_document_read_limit_exceeded',
|
|
169
|
+
severity: 'error',
|
|
170
|
+
message: `AGENTS.md is ${size} bytes, over this store's ${limit}-byte limit (\`harness.entry_document_max_bytes\`).`,
|
|
171
|
+
details: { size, limit },
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return { status: 'fail', findings };
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
/**
|
|
178
|
+
* lean-composed-entry-document D3: the target is a judgment about per-turn
|
|
179
|
+
* cost and adherence, not a fact about any harness — an observation, never a
|
|
180
|
+
* failure.
|
|
181
|
+
*/
|
|
182
|
+
export const entryDocumentTargetSizeCheck = defineCheck({
|
|
183
|
+
id: 'harness_portability.entry_document_target_size',
|
|
184
|
+
title: 'AGENTS.md stays within its target size',
|
|
185
|
+
severity: 'observation',
|
|
186
|
+
capability: 'harness-portability',
|
|
187
|
+
scopes: ['store'],
|
|
188
|
+
async run(ctx) {
|
|
189
|
+
const content = await readAgentsMd(ctx.storeRoot);
|
|
190
|
+
if (content === null) {
|
|
191
|
+
return { status: 'skip', skipReason: 'AGENTS.md has not been generated yet — run `ctxr update`', findings: [] };
|
|
192
|
+
}
|
|
193
|
+
const size = Buffer.byteLength(content, 'utf8');
|
|
194
|
+
const target = ctx.config.harness.entry_document_target_bytes ?? DEFAULT_ENTRY_DOCUMENT_TARGET_BYTES;
|
|
195
|
+
if (size <= target)
|
|
196
|
+
return { status: 'pass', findings: [] };
|
|
197
|
+
return {
|
|
198
|
+
status: 'fail',
|
|
199
|
+
findings: [
|
|
200
|
+
{
|
|
201
|
+
code: 'harness_portability.entry_document_over_target',
|
|
202
|
+
severity: 'info',
|
|
203
|
+
message: `AGENTS.md is ${size} bytes, over its ${target}-byte target. Every byte loads on every turn: ` +
|
|
204
|
+
'move guidance that matters only for one task into a file declaring `read_when`.',
|
|
205
|
+
details: { size, target },
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
};
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
/**
|
|
212
|
+
* a-dated-mission-core D3: the mission core loads on every turn, so its size
|
|
213
|
+
* is budgeted like the conventions section — measured on the inlined body.
|
|
214
|
+
*/
|
|
215
|
+
export const missionSizeCheck = defineCheck({
|
|
216
|
+
id: 'harness_portability.mission_size',
|
|
217
|
+
title: 'The inlined mission core stays within its size budget',
|
|
218
|
+
severity: 'invariant',
|
|
219
|
+
capability: 'harness-portability',
|
|
220
|
+
scopes: ['store'],
|
|
221
|
+
async run(ctx) {
|
|
222
|
+
const missionPath = ctx.config.organize.mission_path;
|
|
223
|
+
if (!missionPath)
|
|
224
|
+
return { status: 'skip', skipReason: 'no organize.mission_path configured', findings: [] };
|
|
225
|
+
let raw;
|
|
226
|
+
try {
|
|
227
|
+
raw = await readFile(path.join(ctx.storeRoot, missionPath), 'utf8');
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return { status: 'skip', skipReason: `no mission document at ${missionPath}`, findings: [] };
|
|
231
|
+
}
|
|
232
|
+
const size = Buffer.byteLength(inlineDocBody(extractDocMetadata(raw, missionPath), 1).join('\n'), 'utf8');
|
|
233
|
+
const budget = ctx.config.organize.mission_max_bytes ?? DEFAULT_MISSION_MAX_BYTES;
|
|
234
|
+
if (size <= budget)
|
|
235
|
+
return { status: 'pass', findings: [] };
|
|
236
|
+
return {
|
|
237
|
+
status: 'fail',
|
|
238
|
+
findings: [
|
|
239
|
+
{
|
|
240
|
+
code: 'harness_portability.mission_size_exceeded',
|
|
241
|
+
severity: 'error',
|
|
242
|
+
message: `The mission's inlined core is ${size} bytes, over its ${budget}-byte budget. Keep the primary mission, the ranked ` +
|
|
243
|
+
'priorities, and what is not now; move the back burner, sunset candidates, and open debt to the register note (`ctxr-mission`).',
|
|
244
|
+
subject: missionPath,
|
|
245
|
+
details: { size, budget },
|
|
246
|
+
},
|
|
247
|
+
],
|
|
248
|
+
};
|
|
249
|
+
},
|
|
250
|
+
});
|
|
251
|
+
export const HARNESS_PORTABILITY_CHECKS = [
|
|
252
|
+
conventionsSectionSizeCheck,
|
|
253
|
+
skillsPathIsHarnessBrandedCheck,
|
|
254
|
+
entryDocumentReadLimitCheck,
|
|
255
|
+
entryDocumentTargetSizeCheck,
|
|
256
|
+
missionSizeCheck,
|
|
257
|
+
];
|
|
83
258
|
//# sourceMappingURL=harness-portability-checks.js.map
|