ctxr-cli 0.2.1 → 0.3.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 +18 -0
- 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/harness/claude-code.d.ts.map +1 -1
- package/dist/adapters/harness/claude-code.js +20 -3
- package/dist/adapters/harness/claude-code.js.map +1 -1
- package/dist/adapters/types.d.ts +11 -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 +7 -16
- package/dist/commands/adapters-generate.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +4 -8
- package/dist/commands/init.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/config/defaults.d.ts +2 -4
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +2 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/schema.d.ts +0 -11
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +1 -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 +0 -26
- package/dist/core/agents-doc.js.map +1 -1
- package/dist/core/checks/integrity-checks.d.ts +2 -0
- package/dist/core/checks/integrity-checks.d.ts.map +1 -1
- package/dist/core/checks/integrity-checks.js +31 -1
- 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 +13 -9
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +14 -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/procedures.d.ts.map +1 -1
- package/dist/core/procedures.js +38 -460
- 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/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 +9 -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-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 +39 -0
- package/templates/skills/ctxr-submit.md +26 -0
- package/dist/adapters/identity/claude-code.d.ts +0 -11
- package/dist/adapters/identity/claude-code.d.ts.map +0 -1
- package/dist/adapters/identity/claude-code.js +0 -18
- package/dist/adapters/identity/claude-code.js.map +0 -1
- 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/README.md
CHANGED
|
@@ -23,3 +23,21 @@ ctxr --help # the full command list
|
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Every command accepts `--root <path>` (or `CONTEXTURE_ROOT`) and `--json`.
|
|
26
|
+
|
|
27
|
+
## Releasing
|
|
28
|
+
|
|
29
|
+
Publishing to npm is automated: merging to `main` publishes whenever `package.json`'s version isn't
|
|
30
|
+
already on the registry, via [`.github/workflows/release.yml`](.github/workflows/release.yml).
|
|
31
|
+
Ordinary merges are a no-op — only a version bump triggers a publish.
|
|
32
|
+
|
|
33
|
+
To cut a release:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
git checkout -b chore/release-X.Y.Z
|
|
37
|
+
npm version X.Y.Z --no-git-tag-version # bumps package.json and package-lock.json together
|
|
38
|
+
# hand-edit src/version.ts's CLI_VERSION to match X.Y.Z
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Open a PR and merge it. The workflow then builds, tests, publishes to npm (via trusted publishing —
|
|
42
|
+
no stored token), tags the commit `vX.Y.Z`, and creates a GitHub Release. `test/unit/version-sync.test.ts`
|
|
43
|
+
guards against `CLI_VERSION` drifting from `package.json`'s version on every PR.
|
package/dist/adapter.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* adapter authored against these types compiles against the same contract
|
|
12
12
|
* contexture's built-ins use, ready for that loading mechanism once it ships.
|
|
13
13
|
*/
|
|
14
|
-
export type { Adapter, AdapterKind, HarnessGenerationAdapter
|
|
14
|
+
export type { Adapter, AdapterKind, HarnessGenerationAdapter } from './adapters/types.js';
|
|
15
15
|
export type { ForgeAdapter, OpenPullRequestInput, OpenPullRequestResult } from './adapters/forge/types.js';
|
|
16
16
|
import type { Adapter, AdapterKind } from './adapters/types.js';
|
|
17
17
|
export declare function defineAdapter<K extends AdapterKind, A extends Adapter<K>>(adapter: A): A;
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,YAAY,
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,YAAY,EAAE,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAE3G,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEhE,wBAAgB,aAAa,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAExF"}
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,aAAa,CAA8C,OAAU;IACnF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import type { Adapter } from '../types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Every adapter shipped with contexture itself, resolved by (kind, id)
|
|
4
|
-
* against contexture.yaml's declared list.
|
|
5
|
-
* ships: AGENTS.md's generated agent-identity section already reaches
|
|
6
|
-
* every harness open-box (entry-doc-generation D4), and a harness entry
|
|
7
|
-
* file must contain nothing beyond its AGENTS.md import.
|
|
4
|
+
* against contexture.yaml's declared list.
|
|
8
5
|
*/
|
|
9
6
|
export declare const BUILTIN_ADAPTERS: readonly Adapter[];
|
|
10
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/builtin/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/builtin/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,OAAO,EAAmD,CAAC"}
|
|
@@ -2,10 +2,7 @@ import { githubForgeAdapter } from '../forge/github.js';
|
|
|
2
2
|
import { claudeCodeHarnessAdapter } from '../harness/claude-code.js';
|
|
3
3
|
/**
|
|
4
4
|
* Every adapter shipped with contexture itself, resolved by (kind, id)
|
|
5
|
-
* against contexture.yaml's declared list.
|
|
6
|
-
* ships: AGENTS.md's generated agent-identity section already reaches
|
|
7
|
-
* every harness open-box (entry-doc-generation D4), and a harness entry
|
|
8
|
-
* file must contain nothing beyond its AGENTS.md import.
|
|
5
|
+
* against contexture.yaml's declared list.
|
|
9
6
|
*/
|
|
10
7
|
export const BUILTIN_ADAPTERS = [githubForgeAdapter, claudeCodeHarnessAdapter];
|
|
11
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/builtin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAGrE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/builtin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAGrE;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAuB,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/harness/claude-code.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/adapters/harness/claude-code.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,wBAoDtC,CAAC"}
|
|
@@ -24,15 +24,32 @@ export const claudeCodeHarnessAdapter = {
|
|
|
24
24
|
* session worktree" generically without needing to know which one is
|
|
25
25
|
* currently checked out.
|
|
26
26
|
*
|
|
27
|
+
* Rules are anchored at the store's absolute root (Claude Code's `//`
|
|
28
|
+
* absolute-path syntax), not written cwd-relative (`./`): a `./`-relative
|
|
29
|
+
* rule resolves against whatever directory a session's cwd happens to be
|
|
30
|
+
* at launch, which for a harness that opens a worktree itself as the
|
|
31
|
+
* project root (cwd already inside the worktree, not at the store root)
|
|
32
|
+
* resolves to the wrong directory — `./**` then denies the whole
|
|
33
|
+
* worktree and the `./<worktreesPath>/**` carve-out never matches
|
|
34
|
+
* anything, since there is no nested worktrees directory inside a
|
|
35
|
+
* worktree. An absolute anchor matches the real target path regardless
|
|
36
|
+
* of launch cwd, correctly covering both conventions.
|
|
37
|
+
*
|
|
27
38
|
* This targets Claude Code's settings.json permission-rule syntax as
|
|
28
39
|
* documented at the time this was written; if that syntax changes, this
|
|
29
40
|
* is the one function to update.
|
|
30
41
|
*/
|
|
31
|
-
render({ worktreesPath }) {
|
|
32
|
-
|
|
42
|
+
render({ root, worktreesPath }) {
|
|
43
|
+
// Claude Code's `//` absolute-path marker stands in for the path's own
|
|
44
|
+
// leading slash — strip it here so the result is `//abs/path`, not
|
|
45
|
+
// `///abs/path`.
|
|
46
|
+
const absRoot = root.replace(/^\/+/, '').replace(/\/+$/, '');
|
|
47
|
+
const worktreesSegment = worktreesPath.replace(/^\/+|\/+$/g, '');
|
|
48
|
+
const rootGlob = `//${absRoot}/**`;
|
|
49
|
+
const worktreeGlob = `//${absRoot}/${worktreesSegment}/**`;
|
|
33
50
|
return {
|
|
34
51
|
permissions: {
|
|
35
|
-
deny: [
|
|
52
|
+
deny: [`Write(${rootGlob})`, `Edit(${rootGlob})`, 'Bash(git push:*)', 'Bash(git commit:*)'],
|
|
36
53
|
allow: [`Write(${worktreeGlob})`, `Edit(${worktreeGlob})`],
|
|
37
54
|
},
|
|
38
55
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/harness/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA6B;IAChE,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,oBAAoB;IAC1B,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,WAAW;IAE1B,MAAM,CAAC,YAAoB;QACzB,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB,EAAE;QAChB,IAAI,EAAE,uBAAuB;QAC7B
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/adapters/harness/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA6B;IAChE,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,oBAAoB;IAC1B,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,WAAW;IAE1B,MAAM,CAAC,YAAoB;QACzB,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB,EAAE;QAChB,IAAI,EAAE,uBAAuB;QAC7B;;;;;;;;;;;;;;;;;;;;;;;WAuBG;QACH,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAA2C;YACrE,uEAAuE;YACvE,mEAAmE;YACnE,iBAAiB;YACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7D,MAAM,gBAAgB,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,KAAK,OAAO,KAAK,CAAC;YACnC,MAAM,YAAY,GAAG,KAAK,OAAO,IAAI,gBAAgB,KAAK,CAAC;YAC3D,OAAO;gBACL,WAAW,EAAE;oBACX,IAAI,EAAE,CAAC,SAAS,QAAQ,GAAG,EAAE,QAAQ,QAAQ,GAAG,EAAE,kBAAkB,EAAE,oBAAoB,CAAC;oBAC3F,KAAK,EAAE,CAAC,SAAS,YAAY,GAAG,EAAE,QAAQ,YAAY,GAAG,CAAC;iBAC3D;aACF,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
|
package/dist/adapters/types.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Reserved shape for the adapters capability's single contract, covering the
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* two v1 kinds — harness-generation, forge (a search kind is deferred to v2
|
|
4
|
+
* alongside the visibility-field naming decision).
|
|
5
5
|
*
|
|
6
6
|
* Phase 2.5 ships a concrete GitHub forge adapter six phases before Phase 8.2
|
|
7
7
|
* formally defines discovery. Reserving this shape now means Phase 2 builds
|
|
8
8
|
* against it instead of inventing its own registration mechanism, and
|
|
9
9
|
* Phase 8 extends this rather than retrofitting Phase 2's adapter into it.
|
|
10
10
|
*/
|
|
11
|
-
export type AdapterKind = 'harness-generation' | '
|
|
11
|
+
export type AdapterKind = 'harness-generation' | 'forge';
|
|
12
12
|
export interface Adapter<K extends AdapterKind = AdapterKind> {
|
|
13
13
|
kind: K;
|
|
14
14
|
id: string;
|
|
@@ -36,22 +36,19 @@ export interface HarnessGenerationAdapter extends Adapter<'harness-generation'>
|
|
|
36
36
|
permissionConfig?: {
|
|
37
37
|
/** Relative to the store root (e.g. ".claude/settings.json"). */
|
|
38
38
|
path: string;
|
|
39
|
+
/**
|
|
40
|
+
* `root` is the store's absolute filesystem path. Permission-rule paths
|
|
41
|
+
* are anchored there (not written cwd-relative) because a session may be
|
|
42
|
+
* launched with its cwd already inside a worktree rather than at the
|
|
43
|
+
* store root — a cwd-relative rule would then resolve against the wrong
|
|
44
|
+
* directory. See claude-code.ts's permissionConfig for the concrete case.
|
|
45
|
+
*/
|
|
39
46
|
render(config: {
|
|
47
|
+
root: string;
|
|
40
48
|
worktreesPath: string;
|
|
41
49
|
}): Record<string, unknown>;
|
|
42
50
|
};
|
|
43
51
|
}
|
|
44
|
-
/**
|
|
45
|
-
* An identity-injection adapter delivers the store's canonical identity
|
|
46
|
-
* content (agent-identity spec) into a harness's runtime — by reference
|
|
47
|
-
* (an import, a symlink, a config entry), never by copying the canonical
|
|
48
|
-
* files' content into the harness-specific file.
|
|
49
|
-
*/
|
|
50
|
-
export interface IdentityInjectionAdapter extends Adapter<'identity-injection'> {
|
|
51
|
-
/** The file this adapter writes its injection reference into, relative to the store root. */
|
|
52
|
-
entryFileName: string;
|
|
53
|
-
render(identityFilePaths: readonly string[]): string[];
|
|
54
|
-
}
|
|
55
52
|
/**
|
|
56
53
|
* Maps each adapter kind to its full, kind-specific interface — so a
|
|
57
54
|
* registry lookup by kind returns something with that kind's real methods
|
|
@@ -59,7 +56,6 @@ export interface IdentityInjectionAdapter extends Adapter<'identity-injection'>
|
|
|
59
56
|
*/
|
|
60
57
|
export interface AdapterForKind {
|
|
61
58
|
'harness-generation': HarnessGenerationAdapter;
|
|
62
|
-
'identity-injection': IdentityInjectionAdapter;
|
|
63
59
|
forge: import('./forge/types.js').ForgeAdapter;
|
|
64
60
|
}
|
|
65
61
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,MAAM,WAAW,GAAG,oBAAoB,GAAG,OAAO,CAAC;AAEzD,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IAC1D,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAI3E,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,wBAAyB,SAAQ,OAAO,CAAC,oBAAoB,CAAC;IAC7E,oGAAoG;IACpG,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvC,kFAAkF;IAClF,gBAAgB,CAAC,EAAE;QACjB,iEAAiE;QACjE,IAAI,EAAE,MAAM,CAAC;QACb;;;;;;WAMG;QACH,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClF,CAAC;CACH;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,KAAK,EAAE,OAAO,kBAAkB,EAAE,YAAY,CAAC;CAChD"}
|
package/dist/adapters/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAgC;IAC9E,oBAAoB,EAAE,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/adapters/types.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAgC;IAC9E,oBAAoB,EAAE,CAAC;IACvB,oGAAoG;IACpG,KAAK,EAAE,CAAC;CACT,CAAC"}
|
|
@@ -11,11 +11,9 @@ export interface AdaptersGenerateData {
|
|
|
11
11
|
/**
|
|
12
12
|
* adapters spec / task 8.3-8.4: every configured harness-generation adapter
|
|
13
13
|
* gets its entry file's fenced region (re)written from `render()`, and,
|
|
14
|
-
* for a harness that supports it, its permission config merged in
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* same physical file (the common case: one harness's own entry file) never
|
|
18
|
-
* collide, because each owns a distinctly-named fence.
|
|
14
|
+
* for a harness that supports it, its permission config merged in. Two
|
|
15
|
+
* adapters targeting the same physical file (the common case: one harness's
|
|
16
|
+
* own entry file) never collide, because each owns a distinctly-named fence.
|
|
19
17
|
*/
|
|
20
18
|
/** The generation itself, shared with `ctxr update`. */
|
|
21
19
|
export declare function generateAdapterOutputs(store: Store): Promise<AdaptersGenerateFileResult[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters-generate.d.ts","sourceRoot":"","sources":["../../src/commands/adapters-generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapters-generate.d.ts","sourceRoot":"","sources":["../../src/commands/adapters-generate.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAO1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,0BAA0B,EAAE,CAAC;CACrC;AAMD;;;;;;GAMG;AACH,wDAAwD;AACxD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,0BAA0B,EAAE,CAAC,CA4BhG;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAWzF"}
|
|
@@ -3,24 +3,18 @@ import { configuredAdapters } from '../adapters/registry.js';
|
|
|
3
3
|
import { agentsMdPath } from '../core/agents-doc.js';
|
|
4
4
|
import { ExitCode } from '../core/exit-codes.js';
|
|
5
5
|
import { upsertFencedRegionInFile } from '../core/fs/fenced-region.js';
|
|
6
|
-
import { identityFilePaths } from '../core/identity.js';
|
|
7
6
|
import { mergeJsonArrayLists } from '../core/json-config-merge.js';
|
|
8
7
|
import { htmlCommentFence } from '../core/markers.js';
|
|
9
8
|
export const requires = { store: 'required' };
|
|
10
9
|
function harnessEntryFence(adapterId) {
|
|
11
10
|
return htmlCommentFence(`adapter:${adapterId}:harness-entry`);
|
|
12
11
|
}
|
|
13
|
-
function identityInjectionFence(adapterId) {
|
|
14
|
-
return htmlCommentFence(`adapter:${adapterId}:identity`);
|
|
15
|
-
}
|
|
16
12
|
/**
|
|
17
13
|
* adapters spec / task 8.3-8.4: every configured harness-generation adapter
|
|
18
14
|
* gets its entry file's fenced region (re)written from `render()`, and,
|
|
19
|
-
* for a harness that supports it, its permission config merged in
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* same physical file (the common case: one harness's own entry file) never
|
|
23
|
-
* collide, because each owns a distinctly-named fence.
|
|
15
|
+
* for a harness that supports it, its permission config merged in. Two
|
|
16
|
+
* adapters targeting the same physical file (the common case: one harness's
|
|
17
|
+
* own entry file) never collide, because each owns a distinctly-named fence.
|
|
24
18
|
*/
|
|
25
19
|
/** The generation itself, shared with `ctxr update`. */
|
|
26
20
|
export async function generateAdapterOutputs(store) {
|
|
@@ -31,17 +25,14 @@ export async function generateAdapterOutputs(store) {
|
|
|
31
25
|
files.push({ path: adapter.entryFileName, changed });
|
|
32
26
|
if (adapter.permissionConfig) {
|
|
33
27
|
const permPath = path.join(store.root, adapter.permissionConfig.path);
|
|
34
|
-
const rules = adapter.permissionConfig.render({
|
|
28
|
+
const rules = adapter.permissionConfig.render({
|
|
29
|
+
root: store.root,
|
|
30
|
+
worktreesPath: store.config.session.worktrees_path,
|
|
31
|
+
});
|
|
35
32
|
const { changed: permChanged } = await mergeJsonArrayLists(permPath, rules);
|
|
36
33
|
files.push({ path: adapter.permissionConfig.path, changed: permChanged });
|
|
37
34
|
}
|
|
38
35
|
}
|
|
39
|
-
const identityPaths = identityFilePaths(store.config);
|
|
40
|
-
for (const adapter of configuredAdapters(store.config, 'identity-injection')) {
|
|
41
|
-
const entryPath = path.join(store.root, adapter.entryFileName);
|
|
42
|
-
const { changed } = await upsertFencedRegionInFile(entryPath, identityInjectionFence(adapter.id), adapter.render(identityPaths));
|
|
43
|
-
files.push({ path: adapter.entryFileName, changed });
|
|
44
|
-
}
|
|
45
36
|
return files;
|
|
46
37
|
}
|
|
47
38
|
export async function execute(store) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters-generate.js","sourceRoot":"","sources":["../../src/commands/adapters-generate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"adapters-generate.js","sourceRoot":"","sources":["../../src/commands/adapters-generate.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAc,MAAM,oBAAoB,CAAC;AAGlE,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAW/D,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,OAAO,gBAAgB,CAAC,WAAW,SAAS,gBAAgB,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;GAMG;AACH,wDAAwD;AACxD,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,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC/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;QACF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC;QAErD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,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;gBAC5C,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc;aACnD,CAAC,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,mBAAmB,CACxD,QAAQ,EACR,KAA0D,CAC3D,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QAC5E,CAAC;IAEH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAY;IACxC,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IAC3D,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,EAAE,KAAK,EAAE;QACf,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,sBAAsB,YAAY,qBAAqB,KAAK,CAAC,MAAM,GAAG,YAAY,sBAAsB;QACtH,SAAS,EAAE,KAAK,CAAC,IAAI;QACrB,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,cAAc;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAyB1E,OAAO,EAAmE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAYhI,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAgB5D,eAAO,MAAM,QAAQ,EAAE,eAAqC,CAAC;AAE7D,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB,EAAE,OAAO,CAAC;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE;QAAE,kBAAkB,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC3F,wFAAwF;IACxF,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,mBAAmB,EAAE,CAAA;KAAE,CAAC;IACpE,cAAc,EAAE,MAAM,CAAC;CACxB;AAqMD,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAY9F"}
|
package/dist/commands/init.js
CHANGED
|
@@ -3,12 +3,11 @@ import { mkdir, readFile } from 'node:fs/promises';
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { parse as parseYaml } from 'yaml';
|
|
5
5
|
import { z } from 'zod';
|
|
6
|
-
import { DEFAULT_ADAPTERS, DEFAULT_ARCHIVE_PATH, DEFAULT_ROLLUP_STALE_DAYS, DEFAULT_CATALOG_PATH, DEFAULT_CATALOG_SECTION_MAX_BYTES, DEFAULT_CONVENTIONS_PATH, DEFAULT_DERIVED_PATHS, DEFAULT_DIFF_SIZE_CEILING_LINES, DEFAULT_EXCLUDE_PATHS, DEFAULT_HARD_WALLS,
|
|
6
|
+
import { DEFAULT_ADAPTERS, DEFAULT_ARCHIVE_PATH, DEFAULT_ROLLUP_STALE_DAYS, DEFAULT_CATALOG_PATH, DEFAULT_CATALOG_SECTION_MAX_BYTES, DEFAULT_CONVENTIONS_PATH, DEFAULT_DERIVED_PATHS, DEFAULT_DIFF_SIZE_CEILING_LINES, DEFAULT_EXCLUDE_PATHS, DEFAULT_HARD_WALLS, DEFAULT_INBOX_PATH, DEFAULT_TRACKING_PARAMS, DEFAULT_INTERNAL_AUDIENCES, DEFAULT_PROCEDURES_PATH, DEFAULT_RELATIONS, DEFAULT_GRAPH_SETTINGS, DEFAULT_SESSION_BRANCH_PREFIX, DEFAULT_VISIBILITY_CONTEXT, DEFAULT_VISIBILITY_FIELD_KEY, DEFAULT_WORKTREES_PATH, } from '../config/defaults.js';
|
|
7
7
|
import { configPathFor, readConfig } from '../config/load.js';
|
|
8
8
|
import { renderStoreConfig } from '../config/render.js';
|
|
9
9
|
import { SUPPORTED_SCHEMA_VERSION, TaxonomyLayerSchema } from '../config/schema.js';
|
|
10
|
-
import { buildAgentsCanonicalSection, buildAgentsCaptureSection, buildAgentsConventionsSection,
|
|
11
|
-
import { ensureIdentityFiles } from '../core/identity.js';
|
|
10
|
+
import { buildAgentsCanonicalSection, buildAgentsCaptureSection, buildAgentsConventionsSection, buildAgentsLegRoutingSection, buildAgentsPlacementSection, agentsMdPath, } from '../core/agents-doc.js';
|
|
12
11
|
import { syncShippedSkills } from '../core/procedures.js';
|
|
13
12
|
import { reconcileStore, WORKTREES_GITIGNORE_FENCE } from '../core/reconcile.js';
|
|
14
13
|
import { isInteractive } from '../core/env.js';
|
|
@@ -134,7 +133,6 @@ async function runInitCore(env, flags) {
|
|
|
134
133
|
disclosure: { internal_audiences: [...DEFAULT_INTERNAL_AUDIENCES], hard_walls: [...DEFAULT_HARD_WALLS], leak_markers: {} },
|
|
135
134
|
ingest: { inbox_path: DEFAULT_INBOX_PATH, tracking_params: [...DEFAULT_TRACKING_PARAMS] },
|
|
136
135
|
organize: { archive_path: DEFAULT_ARCHIVE_PATH, rollup_stale_days: DEFAULT_ROLLUP_STALE_DAYS },
|
|
137
|
-
identity: { path: DEFAULT_IDENTITY_PATH, files: {}, entry_delimiter: '' },
|
|
138
136
|
harness: { procedures_path: DEFAULT_PROCEDURES_PATH, conventions_path: DEFAULT_CONVENTIONS_PATH },
|
|
139
137
|
adapters: [...DEFAULT_ADAPTERS],
|
|
140
138
|
};
|
|
@@ -147,10 +145,8 @@ async function runInitCore(env, flags) {
|
|
|
147
145
|
await buildAgentsLegRoutingSection(root, config);
|
|
148
146
|
await buildAgentsCaptureSection(root, config);
|
|
149
147
|
await buildAgentsPlacementSection(root, config);
|
|
150
|
-
const identityFilesCreated = await ensureIdentityFiles(root, config);
|
|
151
148
|
const procedureFilesCreated = await syncShippedSkills(root, config);
|
|
152
149
|
await buildAgentsCanonicalSection(root, config);
|
|
153
|
-
await buildAgentsIdentitySection(root, config);
|
|
154
150
|
await buildAgentsConventionsSection(root, config);
|
|
155
151
|
// One directory per configured layer with a .gitkeep — makes Zettelkasten's
|
|
156
152
|
// zero-layer shape visibly different from PARA's at a glance. This is a
|
|
@@ -169,13 +165,13 @@ async function runInitCore(env, flags) {
|
|
|
169
165
|
const { changed: hookFiles } = await installHooks(root, defaultBranch);
|
|
170
166
|
await configureHooksPath(env.git, root);
|
|
171
167
|
const relConfigPath = path.relative(root, configPath);
|
|
172
|
-
await addPaths(env.git, root, [relConfigPath, '.gitignore', path.relative(root, agentsMdPath(root)), ...layerGitkeeps, ...
|
|
168
|
+
await addPaths(env.git, root, [relConfigPath, '.gitignore', path.relative(root, agentsMdPath(root)), ...layerGitkeeps, ...procedureFilesCreated, ...hookFiles]);
|
|
173
169
|
const commitSha = await commitIfStaged(env.git, root, { kind: 'bootstrap' }, 'chore: initialize contexture store');
|
|
174
170
|
return {
|
|
175
171
|
data: {
|
|
176
172
|
root,
|
|
177
173
|
already_initialized: false,
|
|
178
|
-
created: [relConfigPath, '.gitignore', path.relative(root, agentsMdPath(root)), ...layerGitkeeps, ...
|
|
174
|
+
created: [relConfigPath, '.gitignore', path.relative(root, agentsMdPath(root)), ...layerGitkeeps, ...procedureFilesCreated, ...hookFiles],
|
|
179
175
|
unchanged: [],
|
|
180
176
|
git: { repository_created: !repositoryAlreadyExists, commit: commitSha, default_branch: defaultBranch },
|
|
181
177
|
taxonomy: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,iCAAiC,EACjC,wBAAwB,EACxB,qBAAqB,EACrB,+BAA+B,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,iCAAiC,EACjC,wBAAwB,EACxB,qBAAqB,EACrB,+BAA+B,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,6BAA6B,EAC7B,0BAA0B,EAC1B,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAA8C,MAAM,qBAAqB,CAAC;AAChI,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,6BAA6B,EAC7B,4BAA4B,EAC5B,2BAA2B,EAC3B,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,EAAE,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrH,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE5G,MAAM,CAAC,MAAM,QAAQ,GAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAmB7D,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAQpF,KAAK,UAAU,eAAe,CAAC,GAAW,EAAE,KAAgB;IAC1D,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,8BAA8B,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAY,CAAC;QACvC,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACjD,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ;gBACtC,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC,CAAC;YACJ,MAAM,IAAI,wBAAwB,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,2BAA2B,CACnC,KAAK,CAAC,OAAO,EACb,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC;YAClD,OAAO,EAAE,2CAA2C;YACpD,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9F,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,cAAc,EAAE,CAAC;QAC5D,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,oFAAoF;IACpF,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,IAAY;IACxD,IAAI,CAAC;QACH,OAAO,MAAM,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAOD,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,KAAgB;IACtD,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEvC,yEAAyE;IACzE,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,mCAAmC;QAC1E,4FAA4F;QAC5F,MAAM,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACxC,OAAO;YACL,IAAI,EAAE;gBACJ,IAAI;gBACJ,mBAAmB,EAAE,IAAI;gBACzB,OAAO,EAAE,EAAE;gBACX,SAAS,EAAE,EAAE;gBACb,GAAG,EAAE;oBACH,kBAAkB,EAAE,KAAK;oBACzB,MAAM,EAAE,IAAI;oBACZ,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc;iBAC1C;gBACD,QAAQ,EAAE;oBACR,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;oBAC9E,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;iBAC/B;gBACD,cAAc,EAAE,MAAM,CAAC,cAAc;aACtC;YACD,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAEnD,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACjC,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,IAAI,IAAI,qDAAqD,QAAQ,CAAC,QAAQ,IAAI;YAC3F,OAAO,EAAE,QAAQ,CAAC,QAAQ;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,uBAAuB,EAAE,CAAC;IACtC,CAAC;IAED,2EAA2E;IAC3E,MAAM,uBAAuB,GAAG,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC;IAC7D,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,4EAA4E;IAC5E,MAAM,aAAa,GAAG,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;IAErE,MAAM,MAAM,GAAgB;QAC1B,cAAc,EAAE,wBAAwB;QACxC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE;QAClE,MAAM,EAAE,EAAE,UAAU,EAAE,4BAA4B,EAAE;QACpD,UAAU,EAAE,EAAE,eAAe,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACjG,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,qBAAqB,CAAC,EAAE;QAC9C,SAAS,EAAE,EAAE,aAAa,EAAE,CAAC,GAAG,qBAAqB,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,sBAAsB,EAAE,sBAAsB,EAAE,EAAE,EAAE,EAAE;QAC7J,GAAG,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE;QACtC,OAAO,EAAE,EAAE,aAAa,EAAE,6BAA6B,EAAE,cAAc,EAAE,sBAAsB,EAAE;QACjG,eAAe,EAAE,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,cAAc,EAAE,EAAE,EAAE;QACjG,OAAO,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,iCAAiC,EAAE;QAC7F,UAAU,EAAE,EAAE,kBAAkB,EAAE,CAAC,GAAG,0BAA0B,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,kBAAkB,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;QAC1H,MAAM,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC,GAAG,uBAAuB,CAAC,EAAE;QACzF,QAAQ,EAAE,EAAE,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE;QAC9F,OAAO,EAAE,EAAE,eAAe,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE;QACjG,QAAQ,EAAE,CAAC,GAAG,gBAAgB,CAAC;KAChC,CAAC;IACF,8FAA8F;IAC9F,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE7C,MAAM,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACpD,MAAM,wBAAwB,CAAC,aAAa,EAAE,uBAAuB,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7F,MAAM,wBAAwB,CAAC,aAAa,EAAE,yBAAyB,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1G,MAAM,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,yBAAyB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,qBAAqB,GAAG,MAAM,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAElD,4EAA4E;IAC5E,wEAAwE;IACxE,uEAAuE;IACvE,iCAAiC;IACjC,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAC/C,MAAM,eAAe,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACvC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,yEAAyE;IACzE,0DAA0D;IAC1D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACvE,MAAM,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,qBAAqB,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;IAEhK,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,oCAAoC,CAAC,CAAC;IAEnH,OAAO;QACL,IAAI,EAAE;YACJ,IAAI;YACJ,mBAAmB,EAAE,KAAK;YAC1B,OAAO,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,qBAAqB,EAAE,GAAG,SAAS,CAAC;YACzI,SAAS,EAAE,EAAE;YACb,GAAG,EAAE,EAAE,kBAAkB,EAAE,CAAC,uBAAuB,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE;YACvG,QAAQ,EAAE;gBACR,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;gBAC9E,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM;aAC/B;YACD,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC;QACD,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAgB;IACzD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB;YAC3C,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,oCAAoC;YAC1D,CAAC,CAAC,oCAAoC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;QAC5D,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;QAC3B,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;KAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -7,7 +7,6 @@ export interface SessionCaptureFlags {
|
|
|
7
7
|
export type CaptureOutcomeKind = 'wrote' | 'appended' | 'refused';
|
|
8
8
|
export interface CaptureItemReport {
|
|
9
9
|
id: string;
|
|
10
|
-
kind: 'note' | 'world_facts' | 'user_facts';
|
|
11
10
|
path?: string;
|
|
12
11
|
outcome: CaptureOutcomeKind;
|
|
13
12
|
reason?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-capture.d.ts","sourceRoot":"","sources":["../../src/commands/session-capture.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session-capture.d.ts","sourceRoot":"","sources":["../../src/commands/session-capture.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAgB9C,eAAO,MAAM,QAAQ,EAAE,eAAuC,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAeD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAElE,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,EAAE,CAAC;CAC5B;AAyCD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CA8CnH"}
|
|
@@ -2,11 +2,23 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { mkdir, readFile } from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
|
|
5
|
+
import { z } from 'zod';
|
|
5
6
|
import { ExitCode } from '../core/exit-codes.js';
|
|
6
7
|
import { InvalidCaptureProposalError } from '../core/errors.js';
|
|
7
8
|
import { writeFileAtomic } from '../core/fs/atomic.js';
|
|
8
|
-
import { addIdentityEntry, removeIdentityEntry, replaceIdentityEntry } from '../core/identity.js';
|
|
9
9
|
import { sanctionedPath } from '../core/write-lifecycle/path-gate.js';
|
|
10
|
+
/**
|
|
11
|
+
* session-capture-command spec (D2): every note item is validated and
|
|
12
|
+
* applied independently by `applyNote` — one bad item is a per-item
|
|
13
|
+
* 'refused' outcome, never a whole-proposal rejection. So this schema only
|
|
14
|
+
* enforces the TOP-LEVEL shape (no unsupported key, `notes` an array if
|
|
15
|
+
* present) and deliberately leaves each item as `unknown` — item shape
|
|
16
|
+
* stays applyNote's job. remove-agent-identity: replaces a hand-rolled
|
|
17
|
+
* `Object.keys()` filter that a non-object top-level YAML document (e.g. a
|
|
18
|
+
* bare scalar) could bypass, since `Object.keys()` on a primitive returns
|
|
19
|
+
* `[]`; `z.object(...).strict()` rejects a non-object input outright.
|
|
20
|
+
*/
|
|
21
|
+
const CaptureProposalSchema = z.object({ notes: z.array(z.unknown()).optional() }).strict();
|
|
10
22
|
export const requires = { store: 'required' };
|
|
11
23
|
/**
|
|
12
24
|
* session-capture-command spec (D1): the proposal file is the contract
|
|
@@ -22,56 +34,30 @@ function renderNote(frontmatter, body) {
|
|
|
22
34
|
}
|
|
23
35
|
async function applyNote(store, id, item) {
|
|
24
36
|
if (item.mode !== 'create' && item.mode !== 'append') {
|
|
25
|
-
return { id,
|
|
37
|
+
return { id, path: item.path, outcome: 'refused', reason: 'mode must be "create" or "append"' };
|
|
26
38
|
}
|
|
27
39
|
const gate = await sanctionedPath(store.config, store.root, item.path);
|
|
28
40
|
if (!gate.ok) {
|
|
29
|
-
return { id,
|
|
41
|
+
return { id, path: item.path, outcome: 'refused', reason: gate.reason };
|
|
30
42
|
}
|
|
31
43
|
const absolutePath = path.join(store.root, item.path);
|
|
32
44
|
const exists = existsSync(absolutePath);
|
|
33
45
|
if (item.mode === 'create') {
|
|
34
46
|
if (exists)
|
|
35
|
-
return { id,
|
|
47
|
+
return { id, path: item.path, outcome: 'refused', reason: 'already exists; use mode: append' };
|
|
36
48
|
const frontmatter = { ...item.frontmatter };
|
|
37
49
|
if (item.visibility !== undefined)
|
|
38
50
|
frontmatter[store.config.fields.visibility] = item.visibility;
|
|
39
51
|
await mkdir(path.dirname(absolutePath), { recursive: true });
|
|
40
52
|
await writeFileAtomic(absolutePath, renderNote(frontmatter, item.body));
|
|
41
|
-
return { id,
|
|
53
|
+
return { id, path: item.path, outcome: 'wrote' };
|
|
42
54
|
}
|
|
43
55
|
if (!exists)
|
|
44
|
-
return { id,
|
|
56
|
+
return { id, path: item.path, outcome: 'refused', reason: 'append target does not exist' };
|
|
45
57
|
const existing = await readFile(absolutePath, 'utf8');
|
|
46
58
|
const separator = existing.length > 0 && !existing.endsWith('\n') ? '\n' : '';
|
|
47
59
|
await writeFileAtomic(absolutePath, `${existing}${separator}${item.body}`);
|
|
48
|
-
return { id,
|
|
49
|
-
}
|
|
50
|
-
async function applyIdentityDelta(store, id, kind, role, item) {
|
|
51
|
-
try {
|
|
52
|
-
if (item.action === 'add') {
|
|
53
|
-
if (item.text === undefined)
|
|
54
|
-
throw new Error('action "add" requires text');
|
|
55
|
-
const result = await addIdentityEntry(store.root, store.config, role, item.text);
|
|
56
|
-
return { id, kind, path: result.path, outcome: 'wrote' };
|
|
57
|
-
}
|
|
58
|
-
if (item.action === 'replace') {
|
|
59
|
-
if (item.text === undefined || item.match === undefined)
|
|
60
|
-
throw new Error('action "replace" requires text and match');
|
|
61
|
-
const result = await replaceIdentityEntry(store.root, store.config, role, item.match, item.text);
|
|
62
|
-
return { id, kind, path: result.path, outcome: 'wrote' };
|
|
63
|
-
}
|
|
64
|
-
if (item.action === 'remove') {
|
|
65
|
-
if (item.match === undefined)
|
|
66
|
-
throw new Error('action "remove" requires match');
|
|
67
|
-
const result = await removeIdentityEntry(store.root, store.config, role, item.match);
|
|
68
|
-
return { id, kind, path: result.path, outcome: 'wrote' };
|
|
69
|
-
}
|
|
70
|
-
throw new Error(`unknown action "${item.action}"`);
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
return { id, kind, outcome: 'refused', reason: err instanceof Error ? err.message : String(err) };
|
|
74
|
-
}
|
|
60
|
+
return { id, path: item.path, outcome: 'appended' };
|
|
75
61
|
}
|
|
76
62
|
/**
|
|
77
63
|
* session-capture-command spec (D2): every item is validated and applied
|
|
@@ -87,23 +73,29 @@ export async function execute(store, flags) {
|
|
|
87
73
|
catch (err) {
|
|
88
74
|
throw new InvalidCaptureProposalError(flags.proposal, err instanceof Error ? err.message : String(err));
|
|
89
75
|
}
|
|
90
|
-
let
|
|
76
|
+
let rawProposal;
|
|
91
77
|
try {
|
|
92
|
-
|
|
78
|
+
rawProposal = parseYaml(raw) ?? {};
|
|
93
79
|
}
|
|
94
80
|
catch (err) {
|
|
95
81
|
throw new InvalidCaptureProposalError(flags.proposal, err instanceof Error ? err.message : String(err));
|
|
96
82
|
}
|
|
83
|
+
// remove-agent-identity: a proposal built for the pre-removal contract may still
|
|
84
|
+
// declare world_facts/user_facts — reject loudly rather than silently drop items
|
|
85
|
+
// the caller thought were being applied.
|
|
86
|
+
const result = CaptureProposalSchema.safeParse(rawProposal);
|
|
87
|
+
if (!result.success) {
|
|
88
|
+
const issues = result.error.issues.map((issue) => ({
|
|
89
|
+
path: issue.path.join('.') || '(root)',
|
|
90
|
+
message: issue.message,
|
|
91
|
+
}));
|
|
92
|
+
throw new InvalidCaptureProposalError(flags.proposal, issues);
|
|
93
|
+
}
|
|
94
|
+
const proposal = result.data;
|
|
97
95
|
const items = [];
|
|
98
96
|
for (const [index, item] of (proposal.notes ?? []).entries()) {
|
|
99
97
|
items.push(await applyNote(store, item.id ?? `notes[${index}]`, item));
|
|
100
98
|
}
|
|
101
|
-
for (const [index, item] of (proposal.world_facts ?? []).entries()) {
|
|
102
|
-
items.push(await applyIdentityDelta(store, item.id ?? `world_facts[${index}]`, 'world_facts', 'world-facts', item));
|
|
103
|
-
}
|
|
104
|
-
for (const [index, item] of (proposal.user_facts ?? []).entries()) {
|
|
105
|
-
items.push(await applyIdentityDelta(store, item.id ?? `user_facts[${index}]`, 'user_facts', 'user-facts', item));
|
|
106
|
-
}
|
|
107
99
|
const refused = items.filter((item) => item.outcome === 'refused');
|
|
108
100
|
const written = items.filter((item) => item.outcome === 'wrote' || item.outcome === 'appended');
|
|
109
101
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-capture.js","sourceRoot":"","sources":["../../src/commands/session-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session-capture.js","sourceRoot":"","sources":["../../src/commands/session-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,12 +25,10 @@ export declare const DEFAULT_VISIBILITY_CONTEXT = "private";
|
|
|
25
25
|
/**
|
|
26
26
|
* context-store spec (contexture-home-layout): `.contexture/` is the tool's
|
|
27
27
|
* home directory. Only its cache subpath is derived/gitignored — the
|
|
28
|
-
* catalog
|
|
29
|
-
*
|
|
28
|
+
* catalog and procedure subdirectories are authored-but-tool-owned and stay
|
|
29
|
+
* tracked.
|
|
30
30
|
*/
|
|
31
31
|
export declare const DEFAULT_DERIVED_PATHS: readonly ['.contexture/cache/'];
|
|
32
|
-
/** agent-identity spec: canonical identity files live here, excluded from every retrieval leg. */
|
|
33
|
-
export declare const DEFAULT_IDENTITY_PATH = ".contexture/identity/";
|
|
34
32
|
/**
|
|
35
33
|
* harness-portability spec (entry-doc-generation D5): contexture-owned
|
|
36
34
|
* skills are copied here (`<slug>/SKILL.md`), defaulting to the directory
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,SAAS,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,UAAU,CAAC;AAEtD,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAI,oBAAoB,CAAU,CAAC;AAErE
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,SAAS,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,UAAU,CAAC;AAEtD,gFAAgF;AAChF,eAAO,MAAM,0BAA0B,YAAY,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,YAAI,oBAAoB,CAAU,CAAC;AAErE;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,oBAAoB,CAAC;AAEzD,gHAAgH;AAChH,eAAO,MAAM,wBAAwB,6BAA6B,CAAC;AAEnE,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB,YAAI,cAAc,CAAU,CAAC;AAE/D,oHAAoH;AACpH,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAAO,CAAC;AAEvD,8HAA8H;AAC9H,eAAO,MAAM,sBAAsB;IACjC,aAAa;IACb,OAAO;IACP,UAAU;IACV,sBAAsB,EAAQ,MAAM,EAAE;CACvC,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,gBAAgB,CAAC;AAEpD,8FAA8F;AAC9F,eAAO,MAAM,6BAA6B,aAAa,CAAC;AAExD,oFAAoF;AACpF,eAAO,MAAM,+BAA+B,OAAO,CAAC;AAEpD,2HAA2H;AAC3H,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,6GAA6G;AAC7G,eAAO,MAAM,iCAAiC,QAAY,CAAC;AAE3D,8JAA8J;AAC9J,eAAO,MAAM,0BAA0B,EAAE,SAAS,MAAM,EAAO,CAAC;AAChE,eAAO,MAAM,kBAAkB,EAAE,SAAS,cAAc,EAAO,CAAC;AAEhE,uGAAuG;AACvG,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,gJAAgJ;AAChJ,eAAO,MAAM,uBAAuB,UAA6F,CAAC;AAElI,4FAA4F;AAC5F,eAAO,MAAM,oBAAoB,aAAa,CAAC;AAE/C,iHAAiH;AACjH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,kBAAkB,EAGzD,CAAC"}
|