ctxr-cli 0.2.2 → 0.4.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/dist/adapter.d.ts +1 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/adapters/builtin/index.d.ts +1 -4
- package/dist/adapters/builtin/index.d.ts.map +1 -1
- package/dist/adapters/builtin/index.js +1 -4
- package/dist/adapters/builtin/index.js.map +1 -1
- package/dist/adapters/types.d.ts +3 -15
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/types.js +0 -1
- package/dist/adapters/types.js.map +1 -1
- package/dist/commands/adapters-generate.d.ts +3 -5
- package/dist/commands/adapters-generate.d.ts.map +1 -1
- package/dist/commands/adapters-generate.js +4 -19
- package/dist/commands/adapters-generate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +5 -9
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rollup-stale.d.ts.map +1 -1
- package/dist/commands/rollup-stale.js +1 -1
- package/dist/commands/rollup-stale.js.map +1 -1
- package/dist/commands/session-capture.d.ts +0 -1
- package/dist/commands/session-capture.d.ts.map +1 -1
- package/dist/commands/session-capture.js +33 -41
- package/dist/commands/session-capture.js.map +1 -1
- package/dist/commands/session-reap.d.ts.map +1 -1
- package/dist/commands/session-reap.js +4 -0
- package/dist/commands/session-reap.js.map +1 -1
- package/dist/config/defaults.d.ts +4 -4
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +4 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +2 -11
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +18 -22
- package/dist/config/schema.js.map +1 -1
- package/dist/core/agents-doc.d.ts +0 -12
- package/dist/core/agents-doc.d.ts.map +1 -1
- package/dist/core/agents-doc.js +32 -27
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/checks/integrity-checks.d.ts +16 -0
- package/dist/core/checks/integrity-checks.d.ts.map +1 -1
- package/dist/core/checks/integrity-checks.js +108 -2
- package/dist/core/checks/integrity-checks.js.map +1 -1
- package/dist/core/checks/manifest.d.ts.map +1 -1
- package/dist/core/checks/manifest.js +0 -2
- package/dist/core/checks/manifest.js.map +1 -1
- package/dist/core/errors.d.ts +22 -9
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +30 -27
- package/dist/core/errors.js.map +1 -1
- package/dist/core/fs/fenced-region.d.ts +18 -0
- package/dist/core/fs/fenced-region.d.ts.map +1 -1
- package/dist/core/fs/fenced-region.js +60 -0
- package/dist/core/fs/fenced-region.js.map +1 -1
- package/dist/core/markers.d.ts +7 -0
- package/dist/core/markers.d.ts.map +1 -1
- package/dist/core/markers.js +9 -0
- package/dist/core/markers.js.map +1 -1
- package/dist/core/notes/list.d.ts.map +1 -1
- package/dist/core/notes/list.js +7 -3
- package/dist/core/notes/list.js.map +1 -1
- package/dist/core/procedures.d.ts.map +1 -1
- package/dist/core/procedures.js +67 -459
- package/dist/core/procedures.js.map +1 -1
- package/dist/core/reconcile.d.ts +3 -4
- package/dist/core/reconcile.d.ts.map +1 -1
- package/dist/core/reconcile.js +20 -12
- package/dist/core/reconcile.js.map +1 -1
- package/dist/core/rollup.d.ts +25 -2
- package/dist/core/rollup.d.ts.map +1 -1
- package/dist/core/rollup.js +51 -5
- package/dist/core/rollup.js.map +1 -1
- package/dist/core/write-lifecycle/path-gate.d.ts.map +1 -1
- package/dist/core/write-lifecycle/path-gate.js +13 -9
- package/dist/core/write-lifecycle/path-gate.js.map +1 -1
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +4 -43
- package/dist/run.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/templates/skills/ctxr-connection-finding.md +15 -0
- package/templates/skills/ctxr-connection-proposal.md +17 -0
- package/templates/skills/ctxr-derived-artifacts.md +25 -0
- package/templates/skills/ctxr-ingest-orchestration.md +42 -0
- package/templates/skills/ctxr-land.md +19 -0
- package/templates/skills/ctxr-mission.md +36 -0
- package/templates/skills/ctxr-organize-audit.md +49 -0
- package/templates/skills/ctxr-placement.md +65 -0
- package/templates/skills/ctxr-rollup.md +39 -0
- package/templates/skills/ctxr-session-capture.md +65 -0
- package/templates/skills/ctxr-session-lifecycle.md +38 -0
- package/templates/skills/ctxr-submit.md +26 -0
- package/dist/commands/identity.d.ts +0 -24
- package/dist/commands/identity.d.ts.map +0 -1
- package/dist/commands/identity.js +0 -35
- package/dist/commands/identity.js.map +0 -1
- package/dist/core/checks/identity-checks.d.ts +0 -16
- package/dist/core/checks/identity-checks.d.ts.map +0 -1
- package/dist/core/checks/identity-checks.js +0 -43
- package/dist/core/checks/identity-checks.js.map +0 -1
- package/dist/core/identity.d.ts +0 -46
- package/dist/core/identity.d.ts.map +0 -1
- package/dist/core/identity.js +0 -143
- package/dist/core/identity.js.map +0 -1
package/dist/core/identity.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { mkdir, readFile } from 'node:fs/promises';
|
|
3
|
-
import path from 'node:path';
|
|
4
|
-
import { IdentityEntryMatchError } from './errors.js';
|
|
5
|
-
import { writeFileAtomic } from './fs/atomic.js';
|
|
6
|
-
/**
|
|
7
|
-
* agent-identity spec: three canonical, harness-neutral roles — posture,
|
|
8
|
-
* durable world facts, durable user facts — kept distinct from retrievable
|
|
9
|
-
* knowledge (excluded from every retrieval leg via each resolved path being
|
|
10
|
-
* covered by config.retrieval.exclude_paths). A harness's own
|
|
11
|
-
* identity-injection adapter decides how these reach a running agent; core
|
|
12
|
-
* never reads their content itself.
|
|
13
|
-
*
|
|
14
|
-
* session-capture-command spec (D3): a role's path is CONFIGURABLE
|
|
15
|
-
* (`identity.files`) — a store whose runtime keeps its memory elsewhere
|
|
16
|
-
* points the role there, and every consumer below resolves through
|
|
17
|
-
* `identityFilePath`/`identityFilePaths` rather than assuming the canonical
|
|
18
|
-
* layout, so the relocated file IS the mechanism, not a copy of it.
|
|
19
|
-
*/
|
|
20
|
-
export const IDENTITY_ROLES = ['posture', 'world-facts', 'user-facts'];
|
|
21
|
-
/** The canonical filename each role resolves to under `identity.path` when no override is configured. */
|
|
22
|
-
export const IDENTITY_FILES = {
|
|
23
|
-
posture: 'posture.md',
|
|
24
|
-
'world-facts': 'world-facts.md',
|
|
25
|
-
'user-facts': 'user-facts.md',
|
|
26
|
-
};
|
|
27
|
-
const TEMPLATES = {
|
|
28
|
-
posture: '# Agent posture\n\nHow an agent should approach work in this store: tone, defaults, things to always or never do.\n',
|
|
29
|
-
'world-facts': '# Durable world facts\n\nFacts about the world (not the user) worth carrying into every session.\n',
|
|
30
|
-
'user-facts': '# Durable user facts\n\nFacts about the user worth carrying into every session.\n',
|
|
31
|
-
};
|
|
32
|
-
/** The store-relative path this role resolves to: its configured binding, or its canonical file under `identity.path`. */
|
|
33
|
-
export function identityFilePath(config, role) {
|
|
34
|
-
const bound = config.identity.files[role];
|
|
35
|
-
const relative = bound ?? path.join(config.identity.path, IDENTITY_FILES[role]);
|
|
36
|
-
return relative.split(path.sep).join('/');
|
|
37
|
-
}
|
|
38
|
-
export function identityFilePaths(config) {
|
|
39
|
-
return IDENTITY_ROLES.map((role) => identityFilePath(config, role));
|
|
40
|
-
}
|
|
41
|
-
/** Creates any of the three canonical identity files that don't exist yet — never overwrites an existing one. */
|
|
42
|
-
export async function ensureIdentityFiles(root, config) {
|
|
43
|
-
const created = [];
|
|
44
|
-
for (const role of IDENTITY_ROLES) {
|
|
45
|
-
const relativePath = identityFilePath(config, role);
|
|
46
|
-
const absolutePath = path.join(root, relativePath);
|
|
47
|
-
if (!existsSync(absolutePath)) {
|
|
48
|
-
await mkdir(path.dirname(absolutePath), { recursive: true });
|
|
49
|
-
await writeFileAtomic(absolutePath, TEMPLATES[role]);
|
|
50
|
-
created.push(relativePath);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return created;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* session-capture-command spec (D4): an entry is the text between two
|
|
57
|
-
* delimiter lines. The default delimiter ('') means an empty (blank) line,
|
|
58
|
-
* so paragraphs are entries and a heading-sectioned file's headings simply
|
|
59
|
-
* become part of the entry that follows them — no section vocabulary, no
|
|
60
|
-
* format detection.
|
|
61
|
-
*/
|
|
62
|
-
export function splitEntries(text, delimiter) {
|
|
63
|
-
const isDelimiterLine = (line) => (delimiter === '' ? line.trim() === '' : line === delimiter);
|
|
64
|
-
const entries = [];
|
|
65
|
-
let current = [];
|
|
66
|
-
// A single trailing newline is a file-formatting convention, not a blank final line — for a
|
|
67
|
-
// custom delimiter it would otherwise leak into the last entry as trailing junk.
|
|
68
|
-
const trimmed = text.endsWith('\n') ? text.slice(0, -1) : text;
|
|
69
|
-
for (const line of trimmed.split('\n')) {
|
|
70
|
-
if (isDelimiterLine(line)) {
|
|
71
|
-
if (current.length > 0) {
|
|
72
|
-
entries.push(current.join('\n'));
|
|
73
|
-
current = [];
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
current.push(line);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
if (current.length > 0)
|
|
81
|
-
entries.push(current.join('\n'));
|
|
82
|
-
return entries;
|
|
83
|
-
}
|
|
84
|
-
export function joinEntries(entries, delimiter) {
|
|
85
|
-
if (entries.length === 0)
|
|
86
|
-
return '';
|
|
87
|
-
const separator = delimiter === '' ? '\n\n' : `\n${delimiter}\n`;
|
|
88
|
-
return `${entries.join(separator)}\n`;
|
|
89
|
-
}
|
|
90
|
-
async function readEntries(absolutePath, delimiter) {
|
|
91
|
-
let text;
|
|
92
|
-
try {
|
|
93
|
-
text = await readFile(absolutePath, 'utf8');
|
|
94
|
-
}
|
|
95
|
-
catch (err) {
|
|
96
|
-
if (err.code === 'ENOENT')
|
|
97
|
-
return [];
|
|
98
|
-
throw err;
|
|
99
|
-
}
|
|
100
|
-
return splitEntries(text, delimiter);
|
|
101
|
-
}
|
|
102
|
-
function findUniqueMatch(entries, match, filePath) {
|
|
103
|
-
const indices = entries.reduce((acc, entry, index) => {
|
|
104
|
-
if (entry.includes(match))
|
|
105
|
-
acc.push(index);
|
|
106
|
-
return acc;
|
|
107
|
-
}, []);
|
|
108
|
-
if (indices.length !== 1) {
|
|
109
|
-
throw new IdentityEntryMatchError(filePath, match, indices.length);
|
|
110
|
-
}
|
|
111
|
-
return indices[0];
|
|
112
|
-
}
|
|
113
|
-
/** Appends a new entry at the end of the role's file, creating it (with no other entries) if it doesn't exist yet. */
|
|
114
|
-
export async function addIdentityEntry(root, config, role, text) {
|
|
115
|
-
const relativePath = identityFilePath(config, role);
|
|
116
|
-
const absolutePath = path.join(root, relativePath);
|
|
117
|
-
const entries = await readEntries(absolutePath, config.identity.entry_delimiter);
|
|
118
|
-
entries.push(text);
|
|
119
|
-
await mkdir(path.dirname(absolutePath), { recursive: true });
|
|
120
|
-
await writeFileAtomic(absolutePath, joinEntries(entries, config.identity.entry_delimiter));
|
|
121
|
-
return { path: relativePath, entries: entries.length };
|
|
122
|
-
}
|
|
123
|
-
/** Replaces the single entry containing `match`; refuses, writing nothing, when zero or several entries match. */
|
|
124
|
-
export async function replaceIdentityEntry(root, config, role, match, text) {
|
|
125
|
-
const relativePath = identityFilePath(config, role);
|
|
126
|
-
const absolutePath = path.join(root, relativePath);
|
|
127
|
-
const entries = await readEntries(absolutePath, config.identity.entry_delimiter);
|
|
128
|
-
const index = findUniqueMatch(entries, match, relativePath);
|
|
129
|
-
entries[index] = text;
|
|
130
|
-
await writeFileAtomic(absolutePath, joinEntries(entries, config.identity.entry_delimiter));
|
|
131
|
-
return { path: relativePath, entries: entries.length };
|
|
132
|
-
}
|
|
133
|
-
/** Removes the single entry containing `match`; refuses, writing nothing, when zero or several entries match. */
|
|
134
|
-
export async function removeIdentityEntry(root, config, role, match) {
|
|
135
|
-
const relativePath = identityFilePath(config, role);
|
|
136
|
-
const absolutePath = path.join(root, relativePath);
|
|
137
|
-
const entries = await readEntries(absolutePath, config.identity.entry_delimiter);
|
|
138
|
-
const index = findUniqueMatch(entries, match, relativePath);
|
|
139
|
-
entries.splice(index, 1);
|
|
140
|
-
await writeFileAtomic(absolutePath, joinEntries(entries, config.identity.entry_delimiter));
|
|
141
|
-
return { path: relativePath, entries: entries.length };
|
|
142
|
-
}
|
|
143
|
-
//# sourceMappingURL=identity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/core/identity.ts"],"names":[],"mappings":"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"}
|