@calliopelabs/cli 3.2.0 → 3.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.
Files changed (161) hide show
  1. package/README.md +15 -0
  2. package/dist/acp.d.ts +11 -3
  3. package/dist/acp.d.ts.map +1 -1
  4. package/dist/acp.js +114 -27
  5. package/dist/acp.js.map +1 -1
  6. package/dist/attach.d.ts +95 -0
  7. package/dist/attach.d.ts.map +1 -0
  8. package/dist/attach.js +306 -0
  9. package/dist/attach.js.map +1 -0
  10. package/dist/bin.js +27 -5
  11. package/dist/bin.js.map +1 -1
  12. package/dist/brain/actions.d.ts +1 -1
  13. package/dist/brain/actions.d.ts.map +1 -1
  14. package/dist/brain/actions.js.map +1 -1
  15. package/dist/brain/cli.d.ts +1 -1
  16. package/dist/brain/cli.d.ts.map +1 -1
  17. package/dist/brain/cli.js +47 -5
  18. package/dist/brain/cli.js.map +1 -1
  19. package/dist/brain/exchange-json.d.ts +4 -0
  20. package/dist/brain/exchange-json.d.ts.map +1 -0
  21. package/dist/brain/exchange-json.js +77 -0
  22. package/dist/brain/exchange-json.js.map +1 -0
  23. package/dist/brain/exchange.d.ts +26 -0
  24. package/dist/brain/exchange.d.ts.map +1 -0
  25. package/dist/brain/exchange.js +86 -0
  26. package/dist/brain/exchange.js.map +1 -0
  27. package/dist/brain/index.d.ts +3 -0
  28. package/dist/brain/index.d.ts.map +1 -1
  29. package/dist/brain/index.js +3 -0
  30. package/dist/brain/index.js.map +1 -1
  31. package/dist/brain/journal.js +3 -3
  32. package/dist/brain/journal.js.map +1 -1
  33. package/dist/brain/kg-claims.d.ts +13 -0
  34. package/dist/brain/kg-claims.d.ts.map +1 -0
  35. package/dist/brain/kg-claims.js +156 -0
  36. package/dist/brain/kg-claims.js.map +1 -0
  37. package/dist/brain/kg-export.d.ts +13 -0
  38. package/dist/brain/kg-export.d.ts.map +1 -0
  39. package/dist/brain/kg-export.js +116 -0
  40. package/dist/brain/kg-export.js.map +1 -0
  41. package/dist/brain/kg-transfer.d.ts +29 -0
  42. package/dist/brain/kg-transfer.d.ts.map +1 -0
  43. package/dist/brain/kg-transfer.js +156 -0
  44. package/dist/brain/kg-transfer.js.map +1 -0
  45. package/dist/brain/kg.d.ts.map +1 -1
  46. package/dist/brain/kg.js +89 -16
  47. package/dist/brain/kg.js.map +1 -1
  48. package/dist/brain/presentation.d.ts.map +1 -1
  49. package/dist/brain/presentation.js +10 -0
  50. package/dist/brain/presentation.js.map +1 -1
  51. package/dist/brain/store.d.ts +1 -1
  52. package/dist/brain/store.d.ts.map +1 -1
  53. package/dist/brain/store.js +8 -2
  54. package/dist/brain/store.js.map +1 -1
  55. package/dist/brain/transfer-report.d.ts +38 -0
  56. package/dist/brain/transfer-report.d.ts.map +1 -0
  57. package/dist/brain/transfer-report.js +10 -0
  58. package/dist/brain/transfer-report.js.map +1 -0
  59. package/dist/brain/transfer.d.ts +29 -21
  60. package/dist/brain/transfer.d.ts.map +1 -1
  61. package/dist/brain/transfer.js +120 -89
  62. package/dist/brain/transfer.js.map +1 -1
  63. package/dist/brain/validation.d.ts +1 -0
  64. package/dist/brain/validation.d.ts.map +1 -1
  65. package/dist/brain/validation.js +7 -6
  66. package/dist/brain/validation.js.map +1 -1
  67. package/dist/config.d.ts +4 -0
  68. package/dist/config.d.ts.map +1 -1
  69. package/dist/config.js.map +1 -1
  70. package/dist/execution/authority.d.ts.map +1 -1
  71. package/dist/execution/authority.js +4 -2
  72. package/dist/execution/authority.js.map +1 -1
  73. package/dist/execution/files.d.ts.map +1 -1
  74. package/dist/execution/files.js +9 -6
  75. package/dist/execution/files.js.map +1 -1
  76. package/dist/execution/ledger.d.ts.map +1 -1
  77. package/dist/execution/ledger.js +3 -1
  78. package/dist/execution/ledger.js.map +1 -1
  79. package/dist/execution/project-spend.d.ts.map +1 -1
  80. package/dist/execution/project-spend.js +9 -6
  81. package/dist/execution/project-spend.js.map +1 -1
  82. package/dist/execution/writer-recovery.d.ts.map +1 -1
  83. package/dist/execution/writer-recovery.js +14 -10
  84. package/dist/execution/writer-recovery.js.map +1 -1
  85. package/dist/goals/store.d.ts.map +1 -1
  86. package/dist/goals/store.js +3 -1
  87. package/dist/goals/store.js.map +1 -1
  88. package/dist/index.d.ts +2 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js +1 -0
  91. package/dist/index.js.map +1 -1
  92. package/dist/judgment/cli.d.ts +20 -0
  93. package/dist/judgment/cli.d.ts.map +1 -0
  94. package/dist/judgment/cli.js +141 -0
  95. package/dist/judgment/cli.js.map +1 -0
  96. package/dist/judgment/evaluate.d.ts +47 -0
  97. package/dist/judgment/evaluate.d.ts.map +1 -0
  98. package/dist/judgment/evaluate.js +369 -0
  99. package/dist/judgment/evaluate.js.map +1 -0
  100. package/dist/judgment/index.d.ts +8 -0
  101. package/dist/judgment/index.d.ts.map +1 -0
  102. package/dist/judgment/index.js +5 -0
  103. package/dist/judgment/index.js.map +1 -0
  104. package/dist/judgment/policy.d.ts +61 -0
  105. package/dist/judgment/policy.d.ts.map +1 -0
  106. package/dist/judgment/policy.js +143 -0
  107. package/dist/judgment/policy.js.map +1 -0
  108. package/dist/judgment/types.d.ts +73 -0
  109. package/dist/judgment/types.d.ts.map +1 -0
  110. package/dist/judgment/types.js +9 -0
  111. package/dist/judgment/types.js.map +1 -0
  112. package/dist/model-detection.d.ts.map +1 -1
  113. package/dist/model-detection.js +40 -7
  114. package/dist/model-detection.js.map +1 -1
  115. package/dist/models/metadata.d.ts +2 -0
  116. package/dist/models/metadata.d.ts.map +1 -1
  117. package/dist/models/metadata.js +2 -2
  118. package/dist/models/metadata.js.map +1 -1
  119. package/dist/orchestration/execution-store.d.ts.map +1 -1
  120. package/dist/orchestration/execution-store.js +14 -3
  121. package/dist/orchestration/execution-store.js.map +1 -1
  122. package/dist/orchestration/store.d.ts.map +1 -1
  123. package/dist/orchestration/store.js +3 -1
  124. package/dist/orchestration/store.js.map +1 -1
  125. package/dist/policy.d.ts +8 -1
  126. package/dist/policy.d.ts.map +1 -1
  127. package/dist/policy.js +74 -5
  128. package/dist/policy.js.map +1 -1
  129. package/dist/providers/anthropic.d.ts.map +1 -1
  130. package/dist/providers/anthropic.js +10 -5
  131. package/dist/providers/anthropic.js.map +1 -1
  132. package/dist/providers/openai.d.ts.map +1 -1
  133. package/dist/providers/openai.js +3 -2
  134. package/dist/providers/openai.js.map +1 -1
  135. package/dist/routing/select.d.ts +7 -0
  136. package/dist/routing/select.d.ts.map +1 -1
  137. package/dist/routing/select.js +18 -1
  138. package/dist/routing/select.js.map +1 -1
  139. package/dist/session-management/files.d.ts.map +1 -1
  140. package/dist/session-management/files.js +9 -6
  141. package/dist/session-management/files.js.map +1 -1
  142. package/dist/sessions/history.d.ts.map +1 -1
  143. package/dist/sessions/history.js +12 -6
  144. package/dist/sessions/history.js.map +1 -1
  145. package/dist/spawning/store.d.ts.map +1 -1
  146. package/dist/spawning/store.js +10 -8
  147. package/dist/spawning/store.js.map +1 -1
  148. package/dist/tools.d.ts.map +1 -1
  149. package/dist/tools.js +5 -2
  150. package/dist/tools.js.map +1 -1
  151. package/dist/types.js +1 -1
  152. package/dist/ui/agent.d.ts.map +1 -1
  153. package/dist/ui/agent.js +3 -2
  154. package/dist/ui/agent.js.map +1 -1
  155. package/dist/ui/commands.d.ts.map +1 -1
  156. package/dist/ui/commands.js +20 -12
  157. package/dist/ui/commands.js.map +1 -1
  158. package/dist/ui/model-commands.d.ts.map +1 -1
  159. package/dist/ui/model-commands.js +3 -2
  160. package/dist/ui/model-commands.js.map +1 -1
  161. package/package.json +5 -5
@@ -0,0 +1,156 @@
1
+ /** Preserve rich foreign claims without extending the closed native journal schema. */
2
+ import { digest } from '../approvals/index.js';
3
+ import { sanitizeBrainValue, hasBrainSecrets } from './access.js';
4
+ import { canonicalExchangeJson } from './exchange-json.js';
5
+ import { knowledgeGraphDigest, } from './kg.js';
6
+ import { BrainError, ENTITY_KINDS, } from './types.js';
7
+ import { obj, text, identifier, entity, edge, source } from './validation.js';
8
+ export function graphOrigin(graph, archive, explicit) {
9
+ const claims = [...graph.nodes, ...graph.edges].map((record) => record.props.origin);
10
+ const embedded = claims.filter((value) => value !== undefined);
11
+ if (embedded.some((value) => !obj(value) || typeof value.id !== 'string' || typeof value.revision !== 'string'))
12
+ throw new BrainError('invalid', 'Graph origin claims require an ID and revision.');
13
+ const ids = new Set(embedded.map((value) => value.id));
14
+ const revisions = new Set(embedded.map((value) => value.revision));
15
+ if (ids.size > 1 || revisions.size > 1)
16
+ throw new BrainError('invalid', 'Graph origin claims disagree.');
17
+ const claimedId = ids.values().next().value;
18
+ const id = archive?.origin.id ?? explicit ?? claimedId;
19
+ if (!id)
20
+ throw new BrainError('invalid', 'A bare graph needs --origin or consistent embedded origin claims.');
21
+ if ((explicit && explicit !== id) || (claimedId && claimedId !== id))
22
+ throw new BrainError('invalid', 'Explicit, archive and graph origin IDs must agree.');
23
+ const claimedRevision = revisions.values().next().value;
24
+ if (archive && claimedRevision && archive.origin.revision !== claimedRevision)
25
+ throw new BrainError('invalid', 'Archive and graph origin revisions disagree.');
26
+ const revision = archive?.origin.revision ?? claimedRevision ?? knowledgeGraphDigest(graph);
27
+ text(id, 512);
28
+ text(revision, 512);
29
+ if (hasBrainSecrets({ id, revision }))
30
+ throw new BrainError('policy-denied', 'Origin identifiers contain secret material.');
31
+ return { id, revision };
32
+ }
33
+ export const graphNamespace = (origin, kind, id) => 'import:kg:' + digest(canonicalExchangeJson([origin, kind, id]));
34
+ export function edgeIdentities(graph) {
35
+ const triples = graph.edges.map((record) => canonicalExchangeJson([record.source, record.type, record.target]));
36
+ const counts = new Map();
37
+ for (const triple of triples)
38
+ counts.set(triple, (counts.get(triple) ?? 0) + 1);
39
+ const ids = graph.edges.map((record, index) => {
40
+ if (Object.hasOwn(record.props, 'id')) {
41
+ text(record.props.id, 512);
42
+ return record.props.id;
43
+ }
44
+ if (counts.get(triples[index]) !== 1)
45
+ throw new BrainError('invalid', 'Parallel relationships require distinct explicit props.id values.');
46
+ return 'derived:' + digest(triples[index]);
47
+ });
48
+ if (new Set(ids).size !== ids.length)
49
+ throw new BrainError('invalid', 'Duplicate relationship IDs.');
50
+ return ids;
51
+ }
52
+ export function claimSource(value, locator, losses) {
53
+ const original = canonicalExchangeJson(value), clean = sanitizeBrainValue(value);
54
+ if (hasBrainSecrets(clean))
55
+ throw new BrainError('policy-denied', 'Transfer metadata contains secret keys that cannot be safely retained.');
56
+ const content = canonicalExchangeJson(clean), originalHash = digest(original), contentHash = digest(content);
57
+ if (content !== original)
58
+ losses.push({
59
+ code: 'redaction',
60
+ message: 'Recognized secrets are redacted from retained source claims.',
61
+ });
62
+ return source({
63
+ id: 'source:kg:' + digest(originalHash + ':' + contentHash),
64
+ kind: 'import',
65
+ name: 'Portable graph source claim',
66
+ content,
67
+ originalHash,
68
+ contentHash,
69
+ redacted: content !== original,
70
+ locator,
71
+ });
72
+ }
73
+ export function projectClaim(kind, externalId, record, origin, sourceIds, losses) {
74
+ const clean = sanitizeBrainValue(record), props = clean.props;
75
+ const loss = (code, message, fields) => losses.push({
76
+ code,
77
+ record: { kind, id: externalId },
78
+ message,
79
+ ...(fields ? { fields } : {}),
80
+ });
81
+ if (hasBrainSecrets(externalId))
82
+ throw new BrainError('policy-denied', 'Record identifiers contain secret material.');
83
+ let confidence = props.confidence;
84
+ if (confidence === undefined || confidence === null || confidence === 'unknown') {
85
+ loss('unknown-confidence', 'Native projection uses zero for unknown confidence; the original claim remains in its source.');
86
+ confidence = 0;
87
+ }
88
+ if (typeof confidence !== 'number' || confidence < 0 || confidence > 1)
89
+ throw new BrainError('invalid', 'Confidence must be in [0,1] or explicitly unknown; values are never clamped.');
90
+ const sourceOnly = Object.keys(props).filter((key) => !['summary', 'state', 'confidence', 'attributes', 'id'].includes(key));
91
+ if (sourceOnly.length)
92
+ loss('source-only-metadata', 'Evidence, origin and other metadata remain source claims; native queries do not interpret them.', sourceOnly);
93
+ if (props.state !== undefined && props.state !== 'proposed')
94
+ loss('local-review', 'Imported status remains a source claim; the local projection starts proposed.', ['state']);
95
+ const common = {
96
+ id: graphNamespace(origin, kind, externalId),
97
+ state: 'proposed',
98
+ confidence,
99
+ provenance: sourceIds.map((sourceId) => ({
100
+ sourceId,
101
+ basis: 'inferred',
102
+ })),
103
+ };
104
+ if (kind === 'edge') {
105
+ const relation = clean;
106
+ if (Object.hasOwn(props, 'summary') || Object.hasOwn(props, 'attributes'))
107
+ loss('source-only-edge-properties', 'Relationship summary and attributes remain source claims.', ['summary', 'attributes']);
108
+ if (!identifier(relation.type))
109
+ throw new BrainError('invalid', 'Relationship type cannot be represented by the native identifier grammar.');
110
+ return edge({
111
+ ...common,
112
+ from: graphNamespace(origin, 'entity', relation.source),
113
+ to: graphNamespace(origin, 'entity', relation.target),
114
+ type: relation.type,
115
+ });
116
+ }
117
+ const node = clean;
118
+ const nativeKind = ENTITY_KINDS.includes(node.type)
119
+ ? node.type
120
+ : 'artifact';
121
+ if (nativeKind !== node.type)
122
+ loss('unsupported-kind', 'Native projection uses artifact for this foreign kind; the original kind is retained.');
123
+ const attributes = {
124
+ externalId,
125
+ externalType: node.type,
126
+ };
127
+ if (props.attributes !== undefined && !obj(props.attributes))
128
+ loss('source-only-attributes', 'Non-object attributes remain source claims.', ['attributes']);
129
+ if (obj(props.attributes)) {
130
+ const omitted = [];
131
+ for (const [key, value] of Object.entries(props.attributes)) {
132
+ if (['externalId', 'externalType'].includes(key) ||
133
+ (value !== null && !['string', 'number', 'boolean'].includes(typeof value)))
134
+ omitted.push(key);
135
+ else
136
+ Object.defineProperty(attributes, key, {
137
+ value,
138
+ enumerable: true,
139
+ writable: true,
140
+ configurable: true,
141
+ });
142
+ }
143
+ if (omitted.length)
144
+ loss('source-only-attributes', 'Nested or reserved attributes remain source claims.', omitted);
145
+ }
146
+ if (props.summary !== undefined && typeof props.summary !== 'string')
147
+ loss('source-only-summary', 'Non-text summary remains a source claim; the projection uses the name.', ['summary']);
148
+ return entity({
149
+ ...common,
150
+ kind: nativeKind,
151
+ name: node.name,
152
+ summary: typeof props.summary === 'string' ? props.summary : node.name,
153
+ attributes,
154
+ });
155
+ }
156
+ //# sourceMappingURL=kg-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kg-claims.js","sourceRoot":"","sources":["../../src/brain/kg-claims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type BrainTransferOptions } from './exchange.js';
2
+ import { type TransferReport } from './transfer-report.js';
3
+ /** Explicit graph projection, with source snapshots but without journal history. */
4
+ export declare function exportKnowledgeGraphFile(cwd: string, path: string, options?: BrainTransferOptions): Promise<{
5
+ path: string;
6
+ format: "brain-exchange/v2" | "calliope-kg/v1" | "conflict-kg/v1";
7
+ nodes: number;
8
+ edges: number;
9
+ revision: string;
10
+ report: TransferReport;
11
+ preview: boolean;
12
+ }>;
13
+ //# sourceMappingURL=kg-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kg-export.d.ts","sourceRoot":"","sources":["../../src/brain/kg-export.ts"],"names":[],"mappings":"AAQA,OAAO,EAAgB,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAExE,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI/E,oFAAoF;AACpF,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB;;;;;;;;GAsHnC"}
@@ -0,0 +1,116 @@
1
+ import * as fs from 'node:fs';
2
+ import { dirname, basename, join } from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ import { digest } from '../approvals/index.js';
5
+ import { authorizeSessionAction } from '../session-management/index.js';
6
+ import { throwIfCancelled } from '../cancellation.js';
7
+ import { brainStore, BrainAccess, readBrainFile, projectFile, hasBrainSecrets } from './access.js';
8
+ import { parseExchangeJson, canonicalExchangeJson } from './exchange-json.js';
9
+ import { makeExchange } from './exchange.js';
10
+ import { exportKnowledgeGraph } from './kg.js';
11
+ import { BrainTransferError } from './transfer-report.js';
12
+ import { BrainError } from './types.js';
13
+ import { obj } from './validation.js';
14
+ /** Explicit graph projection, with source snapshots but without journal history. */
15
+ export async function exportKnowledgeGraphFile(cwd, path, options = {}) {
16
+ if (options.manifestPath && !options.exchange)
17
+ throw new BrainError('invalid', 'A manifest requires --exchange so it can be retained in the archive.');
18
+ const store = brainStore(cwd, options), view = store.read(options.signal);
19
+ await new BrainAccess(cwd, view.state.sources, options).all();
20
+ const manifestFile = options.manifestPath
21
+ ? await readBrainFile(cwd, options.manifestPath, options)
22
+ : undefined;
23
+ const manifest = manifestFile ? parseExchangeJson(manifestFile.original) : null;
24
+ if (manifest !== null && !obj(manifest))
25
+ throw new BrainError('invalid', 'Manifest must be an object.');
26
+ const graph = exportKnowledgeGraph(view), origin = { id: view.state.header.id, revision: view.state.revision };
27
+ const report = {
28
+ format: 'calliope-brain-transfer-report/v1',
29
+ operation: 'export',
30
+ representation: 'graph-projection',
31
+ origin,
32
+ manifestHash: manifest ? digest(canonicalExchangeJson(manifest)) : null,
33
+ losses: [
34
+ {
35
+ code: 'graph-history',
36
+ message: 'Graph export omits journal events, tombstones, reversals and unreferenced historical sources. Use native brain export to preserve full history.',
37
+ },
38
+ ],
39
+ mappings: [],
40
+ conflicts: 0,
41
+ changes: 0,
42
+ };
43
+ const value = options.exchange
44
+ ? makeExchange(graph, origin, manifest)
45
+ : graph;
46
+ if (hasBrainSecrets(value))
47
+ throw new BrainError('policy-denied', 'Transfer matches current secret material; preserve it privately and export a reviewed sanitized scope.');
48
+ const content = JSON.stringify(value), target = projectFile(cwd, path);
49
+ const receipt = {
50
+ path: target.file,
51
+ format: value.format,
52
+ nodes: graph.nodes.length,
53
+ edges: graph.edges.length,
54
+ revision: view.state.revision,
55
+ report,
56
+ };
57
+ if (options.preview)
58
+ return { ...receipt, preview: true };
59
+ if (!options.allowLoss)
60
+ throw new BrainTransferError('invalid', 'Review the graph export report and pass --allow-loss to acknowledge its projection limits.', report);
61
+ await authorizeSessionAction(cwd, 'write_file', {
62
+ path: target.file,
63
+ operation: 'brain-kg-export',
64
+ format: value.format,
65
+ digest: digest(content),
66
+ bytes: Buffer.byteLength(content),
67
+ }, { ...options, confirmation: options.confirmation ?? 'mutating' });
68
+ // Re-evaluate retained-source scope after approval; foreign locators are never fetched.
69
+ await new BrainAccess(cwd, view.state.sources, options).all();
70
+ if (manifestFile) {
71
+ await readBrainFile(cwd, options.manifestPath, options);
72
+ manifestFile.assertUnchanged();
73
+ }
74
+ if (hasBrainSecrets(value))
75
+ throw new BrainError('policy-denied', 'Transfer now matches secret material; preview again.');
76
+ target.recheck();
77
+ throwIfCancelled(options.signal);
78
+ const temp = join(dirname(target.file), '.' + basename(target.file) + '-' + randomUUID() + '.tmp');
79
+ let created = false;
80
+ try {
81
+ const fd = fs.openSync(temp, 'wx', 0o600);
82
+ created = true;
83
+ try {
84
+ fs.writeFileSync(fd, content);
85
+ fs.fsyncSync(fd);
86
+ }
87
+ finally {
88
+ fs.closeSync(fd);
89
+ }
90
+ target.recheck();
91
+ throwIfCancelled(options.signal);
92
+ fs.linkSync(temp, target.file);
93
+ // POSIX-only: Windows denies FlushFileBuffers on a directory handle opened via 'r' (#382, #384, #388).
94
+ if (process.platform !== 'win32') {
95
+ const parent = fs.openSync(dirname(target.file), 'r');
96
+ try {
97
+ fs.fsyncSync(parent);
98
+ }
99
+ finally {
100
+ fs.closeSync(parent);
101
+ }
102
+ }
103
+ return { ...receipt, preview: false };
104
+ }
105
+ finally {
106
+ if (created)
107
+ try {
108
+ target.recheck();
109
+ fs.unlinkSync(temp);
110
+ }
111
+ catch {
112
+ /* Preserve replaced directories. */
113
+ }
114
+ }
115
+ }
116
+ //# sourceMappingURL=kg-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kg-export.js","sourceRoot":"","sources":["../../src/brain/kg-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type BrainTransferOptions } from './exchange.js';
2
+ import { type TransferReport } from './transfer-report.js';
3
+ /** Normal journal transaction; a transfer's metadata never authorizes a write. */
4
+ export declare function importKnowledgeGraph(cwd: string, path: string, options?: BrainTransferOptions): Promise<{
5
+ journal: import("./types.js").BrainJournal;
6
+ state: import("./types.js").BrainState;
7
+ index: 'unchanged';
8
+ preview: boolean;
9
+ imported: number;
10
+ unchanged: boolean;
11
+ report: TransferReport;
12
+ } | {
13
+ journal: import("./types.js").BrainJournal;
14
+ state: import("./types.js").BrainState;
15
+ index: 'current';
16
+ preview: boolean;
17
+ imported: number;
18
+ unchanged: boolean;
19
+ report: TransferReport;
20
+ } | {
21
+ journal: import("./types.js").BrainJournal;
22
+ state: import("./types.js").BrainState;
23
+ index: 'rebuild-required';
24
+ preview: boolean;
25
+ imported: number;
26
+ unchanged: boolean;
27
+ report: TransferReport;
28
+ }>;
29
+ //# sourceMappingURL=kg-transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kg-transfer.d.ts","sourceRoot":"","sources":["../../src/brain/kg-transfer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsC,KAAK,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAU9F,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAW/E,kFAAkF;AAClF,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,oBAAyB;;;WAuIvB,WAAW;;;;;;;;;;;;;;;;;;;;;GA6DvB"}
@@ -0,0 +1,156 @@
1
+ import { digest } from '../approvals/index.js';
2
+ import { brainStore, BrainAccess, readBrainFile, hasBrainSecrets } from './access.js';
3
+ import { commitBrain } from './actions.js';
4
+ import { parseExchangeJson, canonicalExchangeJson } from './exchange-json.js';
5
+ import { archiveGraph, parseExchangeArchive } from './exchange.js';
6
+ import { parseKnowledgeGraph } from './kg.js';
7
+ import { graphOrigin, edgeIdentities, graphNamespace, claimSource, projectClaim, } from './kg-claims.js';
8
+ import { recordInput } from './journal.js';
9
+ import { BrainTransferError } from './transfer-report.js';
10
+ import { BrainError, BRAIN_LIMITS, } from './types.js';
11
+ import { obj, text } from './validation.js';
12
+ /** Normal journal transaction; a transfer's metadata never authorizes a write. */
13
+ export async function importKnowledgeGraph(cwd, path, options = {}) {
14
+ const input = await readBrainFile(cwd, path, options, BRAIN_LIMITS.journalBytes);
15
+ const parsed = parseExchangeJson(input.original);
16
+ const archive = obj(parsed) && typeof parsed.format === 'string' && parsed.format.startsWith('brain-exchange/')
17
+ ? parseExchangeArchive(parsed)
18
+ : undefined;
19
+ const graph = archive ? archiveGraph(archive) : parseKnowledgeGraph(parsed);
20
+ const origin = graphOrigin(graph, archive, options.origin), edgeIds = edgeIdentities(graph);
21
+ const prior = brainStore(cwd, options).read(options.signal);
22
+ const report = {
23
+ format: 'calliope-brain-transfer-report/v1',
24
+ operation: 'import',
25
+ representation: 'graph-projection',
26
+ origin,
27
+ destinationRevision: prior.state.revision,
28
+ manifestHash: archive?.manifest ? digest(canonicalExchangeJson(archive.manifest)) : null,
29
+ losses: [
30
+ {
31
+ code: 'graph-history',
32
+ message: 'A graph snapshot cannot restore journal history, tombstones or reversals. Use a native bundle to preserve history.',
33
+ },
34
+ ],
35
+ mappings: [],
36
+ conflicts: 0,
37
+ changes: 0,
38
+ };
39
+ const locator = {
40
+ projectKey: input.project.projectKey,
41
+ path: input.relative,
42
+ importedFrom: origin.id,
43
+ };
44
+ const envelope = archive?.sourceFormat === 'compiled-brain/v1'
45
+ ? Object.fromEntries(Object.entries(archive.payload).filter(([key]) => !['nodes', 'edges'].includes(key)))
46
+ : null;
47
+ const metadata = claimSource({
48
+ format: 'calliope-kg-transfer/v1',
49
+ origin,
50
+ sourceFormat: archive?.sourceFormat === 'compiled-brain/v1' ? archive.sourceFormat : 'conflict-kg/v1',
51
+ manifest: archive?.manifest ?? null,
52
+ envelope,
53
+ }, locator, report.losses);
54
+ report.metadataSourceId = metadata.id;
55
+ const changes = [], retainedIds = new Set(), plannedSources = new Set();
56
+ const records = [];
57
+ const access = new BrainAccess(cwd, prior.state.sources, options);
58
+ const addSource = async (source) => {
59
+ const old = prior.state.sources[source.id];
60
+ if (old) {
61
+ await access.source(old.id);
62
+ retainedIds.add(old.id);
63
+ if (old.content !== source.content || old.originalHash !== source.originalHash)
64
+ throw new BrainError('conflict', 'Retained transfer source differs from its content identity.');
65
+ }
66
+ else if (!plannedSources.has(source.id)) {
67
+ plannedSources.add(source.id);
68
+ if (Object.keys(prior.state.sources).length + plannedSources.size > BRAIN_LIMITS.sources)
69
+ throw new BrainError('limit', 'Import would exceed native source retention; preserve history before continuing.');
70
+ changes.push({ kind: 'source', value: source });
71
+ }
72
+ };
73
+ await addSource(metadata);
74
+ for (const [kind, externalId, record] of [
75
+ ...graph.nodes.map((node) => ['entity', node.id, node]),
76
+ ...graph.edges.map((edge, index) => ['edge', edgeIds[index], edge]),
77
+ ]) {
78
+ text(externalId, 512);
79
+ const source = claimSource({
80
+ format: 'calliope-kg-claim/v1',
81
+ originId: origin.id,
82
+ kind,
83
+ externalId,
84
+ record,
85
+ }, locator, report.losses);
86
+ const value = projectClaim(kind, externalId, record, origin.id, [source.id, metadata.id], report.losses);
87
+ const id = graphNamespace(origin.id, kind, externalId);
88
+ const old = kind === 'entity' ? prior.state.entities[id] : prior.state.edges[id];
89
+ const expected = prior.state.revisions[kind + ':' + id] ?? null;
90
+ if (old) {
91
+ await access.record(old);
92
+ records.push(old);
93
+ }
94
+ const equal = old && canonicalExchangeJson(recordInput(old)) === canonicalExchangeJson(value);
95
+ const status = equal ? 'unchanged' : old ? 'conflict' : expected ? 'deleted' : 'new';
96
+ report.mappings.push({ kind, externalId, localId: id, status });
97
+ if (status === 'conflict' || status === 'deleted')
98
+ report.conflicts++;
99
+ await addSource(source);
100
+ if (!equal)
101
+ changes.push({ kind, id, expected, value });
102
+ }
103
+ report.changes = changes.length;
104
+ if (hasBrainSecrets(report))
105
+ throw new BrainError('policy-denied', 'Transfer report identifiers contain secret material.');
106
+ for (const kind of ['entity', 'edge']) {
107
+ const table = kind === 'entity' ? 'entities' : 'edges';
108
+ const added = report.mappings.filter((mapping) => mapping.kind === kind && ['new', 'deleted'].includes(mapping.status)).length;
109
+ if (Object.keys(prior.state[table]).length + added > BRAIN_LIMITS[table])
110
+ throw new BrainError('limit', 'Import would exceed native graph retention; preserve history before continuing.');
111
+ }
112
+ if (options.preview)
113
+ return {
114
+ ...prior,
115
+ index: 'unchanged',
116
+ preview: true,
117
+ imported: 0,
118
+ unchanged: !changes.length,
119
+ report,
120
+ };
121
+ if (options.reconcileRevision !== undefined && options.reconcileRevision !== prior.state.revision)
122
+ throw new BrainTransferError('conflict', 'The reviewed destination revision is stale; preview the transfer again.', report);
123
+ if (report.conflicts && !options.reconcileRevision)
124
+ throw new BrainTransferError('conflict', 'Existing source claims, local corrections or deletions differ; preview and explicitly reconcile the destination revision.', report);
125
+ if (!changes.length)
126
+ return {
127
+ ...prior,
128
+ index: 'unchanged',
129
+ preview: false,
130
+ imported: 0,
131
+ unchanged: true,
132
+ report,
133
+ };
134
+ if (report.losses.length && !options.allowLoss)
135
+ throw new BrainTransferError('invalid', 'Review the transfer report and pass --allow-loss to acknowledge the projection limits.', report);
136
+ const result = await commitBrain(cwd, changes, 'import', 'Imported foreign source claims as inferred proposals; metadata grants no authority.', prior, options, async () => {
137
+ // Approval may have waited while source policy, secrets or the input changed.
138
+ const currentAccess = new BrainAccess(cwd, prior.state.sources, options);
139
+ for (const id of retainedIds)
140
+ await currentAccess.source(id);
141
+ for (const record of records)
142
+ await currentAccess.record(record);
143
+ await readBrainFile(cwd, path, options, BRAIN_LIMITS.journalBytes);
144
+ if (hasBrainSecrets(changes))
145
+ throw new BrainError('policy-denied', 'Transfer claims now match secret material; preview again.');
146
+ input.assertUnchanged();
147
+ });
148
+ return {
149
+ ...result,
150
+ preview: false,
151
+ imported: changes.length,
152
+ unchanged: false,
153
+ report,
154
+ };
155
+ }
156
+ //# sourceMappingURL=kg-transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kg-transfer.js","sourceRoot":"","sources":["../../src/brain/kg-transfer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"kg.d.ts","sourceRoot":"","sources":["../../src/brain/kg.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,WAAW,cAAc;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE;AAC1G,MAAM,WAAW,cAAc;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE;AAChH,MAAM,WAAW,sBAAsB;IAAG,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAAC;IAAC,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE;AAEzI,uFAAuF;AACvF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,GAAE,sBAAsB,CAAC,QAAQ,CAAoB,GAAG,sBAAsB,CAc/I;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAQ1E;AAED,eAAO,MAAM,oBAAoB,UAAW,sBAAsB,WAAiC,CAAC"}
1
+ {"version":3,"file":"kg.d.ts","sourceRoot":"","sources":["../../src/brain/kg.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AACD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AACD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,GAAG,gBAAgB,CAAC;IAC5C,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,eAAe,EACrB,MAAM,GAAE,sBAAsB,CAAC,QAAQ,CAAoB,GAC1D,sBAAsB,CAgDxB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAoD1E;AAED,eAAO,MAAM,oBAAoB,UAAW,sBAAsB,WAM/D,CAAC"}