@blackwell-systems/gcf 0.1.2 → 0.2.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 +16 -9
- package/dist/decode.d.ts.map +1 -1
- package/dist/decode.js +9 -1
- package/dist/decode.js.map +1 -1
- package/dist/encode.d.ts.map +1 -1
- package/dist/encode.js +9 -7
- package/dist/encode.js.map +1 -1
- package/dist/session.js +2 -2
- package/dist/session.js.map +1 -1
- package/package.json +1 -1
- package/src/decode.ts +10 -1
- package/src/encode.ts +13 -8
- package/src/session.ts +2 -2
package/README.md
CHANGED
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
# gcf-typescript
|
|
8
8
|
|
|
9
|
-
TypeScript implementation of [GCF (Graph Compact Format)](https://
|
|
9
|
+
TypeScript implementation of [GCF (Graph Compact Format)](https://gcformat.com/) — the most token-efficient wire format for LLMs. A drop-in alternative to JSON and TOON for any structured data.
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**79% fewer input tokens than JSON. 75% fewer output tokens. 52% smaller than TOON. 100% LLM comprehension at 500 symbols, where JSON fails at 66.7%.**
|
|
12
|
+
|
|
13
|
+
Docs: [gcformat.com](https://gcformat.com/) · [Playground](https://gcformat.com/playground.html) · [GCF vs TOON](https://gcformat.com/guide/vs-toon.html)
|
|
12
14
|
|
|
13
15
|
## Install
|
|
14
16
|
|
|
@@ -16,7 +18,7 @@ TypeScript implementation of [GCF (Graph Compact Format)](https://github.com/bla
|
|
|
16
18
|
npm install @blackwell-systems/gcf
|
|
17
19
|
```
|
|
18
20
|
|
|
19
|
-
Zero dependencies. TypeScript-first. Includes CLI.
|
|
21
|
+
Zero dependencies. TypeScript-first. Includes CLI. Don't want to change code? Use the [MCP proxy](https://github.com/blackwell-systems/gcf-proxy) for zero-code adoption.
|
|
20
22
|
|
|
21
23
|
## CLI
|
|
22
24
|
|
|
@@ -62,12 +64,12 @@ const output = encode(p);
|
|
|
62
64
|
|
|
63
65
|
Output:
|
|
64
66
|
```
|
|
65
|
-
GCF tool=context_for_task budget=5000 tokens=1847 symbols=2
|
|
67
|
+
GCF tool=context_for_task budget=5000 tokens=1847 symbols=2 edges=1
|
|
66
68
|
## targets
|
|
67
69
|
@0 fn pkg.AuthMiddleware 0.78 lsp_resolved
|
|
68
70
|
## related
|
|
69
71
|
@1 fn pkg.NewServer 0.54 lsp_resolved
|
|
70
|
-
## edges
|
|
72
|
+
## edges [1]
|
|
71
73
|
@0<@1 calls
|
|
72
74
|
```
|
|
73
75
|
|
|
@@ -191,11 +193,16 @@ GCF wins on every dataset except deeply nested config (75 tokens on a 618-token
|
|
|
191
193
|
|
|
192
194
|
Reproducible: [blackwell-systems/toon@gcf-comparison](https://github.com/blackwell-systems/toon/tree/gcf-comparison)
|
|
193
195
|
|
|
194
|
-
##
|
|
196
|
+
## Links
|
|
195
197
|
|
|
196
|
-
- [
|
|
197
|
-
- [
|
|
198
|
-
- [
|
|
198
|
+
- [Documentation](https://gcformat.com/)
|
|
199
|
+
- [Playground](https://gcformat.com/playground.html)
|
|
200
|
+
- [Specification](https://github.com/blackwell-systems/gcf)
|
|
201
|
+
- [Go library](https://github.com/blackwell-systems/gcf-go)
|
|
202
|
+
- [Python library](https://github.com/blackwell-systems/gcf-python)
|
|
203
|
+
- [MCP Proxy](https://github.com/blackwell-systems/gcf-proxy) (zero-code adoption)
|
|
204
|
+
- [GCF vs TOON](https://gcformat.com/guide/vs-toon.html)
|
|
205
|
+
- [TOON benchmark fork](https://github.com/blackwell-systems/toon/tree/gcf-comparison)
|
|
199
206
|
|
|
200
207
|
## License
|
|
201
208
|
|
package/dist/decode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,OAAO,EAAU,MAAM,YAAY,CAAC;AAGxD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"decode.d.ts","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,OAAO,EAAU,MAAM,YAAY,CAAC;AAGxD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAsF7C"}
|
package/dist/decode.js
CHANGED
|
@@ -20,6 +20,9 @@ export function decode(input) {
|
|
|
20
20
|
};
|
|
21
21
|
// Parse header fields.
|
|
22
22
|
parseHeader(header.slice(4), p);
|
|
23
|
+
if (!p.tool) {
|
|
24
|
+
throw new Error("gcf: header missing required 'tool' field");
|
|
25
|
+
}
|
|
23
26
|
// Parse body: symbols and edges.
|
|
24
27
|
const symbols = [];
|
|
25
28
|
const symByID = new Map();
|
|
@@ -31,7 +34,12 @@ export function decode(input) {
|
|
|
31
34
|
continue;
|
|
32
35
|
// Group header.
|
|
33
36
|
if (line.startsWith('## ')) {
|
|
34
|
-
|
|
37
|
+
let group = line.slice(3);
|
|
38
|
+
// Strip bracket suffix: "edges [200]" -> "edges"
|
|
39
|
+
const bracketIdx = group.indexOf(' [');
|
|
40
|
+
if (bracketIdx >= 0) {
|
|
41
|
+
group = group.slice(0, bracketIdx);
|
|
42
|
+
}
|
|
35
43
|
inEdges = group === 'edges';
|
|
36
44
|
if (!inEdges) {
|
|
37
45
|
switch (group) {
|
package/dist/decode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAa;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,gDAAgD,MAAM,GAAG,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,CAAC,GAAY;QACjB,IAAI,EAAE,EAAE;QACR,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,uBAAuB;IACvB,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhC,iCAAiC;IACjC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,IAAI,KAAK,EAAE;YAAE,SAAS;QAE1B,gBAAgB;QAChB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../src/decode.ts"],"names":[],"mappings":"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"}
|
package/dist/encode.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,YAAY,CAAC;AAyBlD;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,YAAY,CAAC;AAyBlD;;GAEG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CA4DzC"}
|
package/dist/encode.js
CHANGED
|
@@ -18,17 +18,19 @@ function groupByDistance(symbols) {
|
|
|
18
18
|
*/
|
|
19
19
|
export function encode(p) {
|
|
20
20
|
const lines = [];
|
|
21
|
-
// Header line.
|
|
22
|
-
let header = `GCF tool=${p.tool} budget=${p.tokenBudget} tokens=${p.tokensUsed} symbols=${p.symbols.length}`;
|
|
23
|
-
if (p.packRoot) {
|
|
24
|
-
header += ` pack_root=${p.packRoot}`;
|
|
25
|
-
}
|
|
26
|
-
lines.push(header);
|
|
27
21
|
// Build symbol index for edge references.
|
|
28
22
|
const symIndex = new Map();
|
|
29
23
|
for (let i = 0; i < p.symbols.length; i++) {
|
|
30
24
|
symIndex.set(p.symbols[i].qualifiedName, i);
|
|
31
25
|
}
|
|
26
|
+
// Count valid edges (both endpoints in symbol index).
|
|
27
|
+
const validEdges = p.edges.filter((e) => symIndex.has(e.source) && symIndex.has(e.target)).length;
|
|
28
|
+
// Header line.
|
|
29
|
+
let header = `GCF tool=${p.tool} budget=${p.tokenBudget} tokens=${p.tokensUsed} symbols=${p.symbols.length} edges=${validEdges}`;
|
|
30
|
+
if (p.packRoot) {
|
|
31
|
+
header += ` pack_root=${p.packRoot}`;
|
|
32
|
+
}
|
|
33
|
+
lines.push(header);
|
|
32
34
|
// Group symbols by distance.
|
|
33
35
|
const groups = groupByDistance(p.symbols);
|
|
34
36
|
const groupNames = ['targets', 'related', 'extended'];
|
|
@@ -51,7 +53,7 @@ export function encode(p) {
|
|
|
51
53
|
}
|
|
52
54
|
// Edges section.
|
|
53
55
|
if (p.edges.length > 0) {
|
|
54
|
-
lines.push(
|
|
56
|
+
lines.push(`## edges [${validEdges}]`);
|
|
55
57
|
for (const e of p.edges) {
|
|
56
58
|
const srcIdx = symIndex.get(e.source);
|
|
57
59
|
const tgtIdx = symIndex.get(e.target);
|
package/dist/encode.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7C,SAAS,eAAe,CAAC,OAAiB;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAyB,IAAI,CAAC;IAEzC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxD,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,CAAU;IAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../src/encode.ts"],"names":[],"mappings":"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"}
|
package/dist/session.js
CHANGED
|
@@ -65,7 +65,7 @@ export function encodeWithSession(p, sess) {
|
|
|
65
65
|
}
|
|
66
66
|
const lines = [];
|
|
67
67
|
// Header with session=true marker.
|
|
68
|
-
let header = `GCF tool=${p.tool} budget=${p.tokenBudget} tokens=${p.tokensUsed} symbols=${p.symbols.length} session=true`;
|
|
68
|
+
let header = `GCF tool=${p.tool} budget=${p.tokenBudget} tokens=${p.tokensUsed} symbols=${p.symbols.length} edges=${p.edges.length} session=true`;
|
|
69
69
|
if (p.packRoot) {
|
|
70
70
|
header += ` pack_root=${p.packRoot}`;
|
|
71
71
|
}
|
|
@@ -107,7 +107,7 @@ export function encodeWithSession(p, sess) {
|
|
|
107
107
|
}
|
|
108
108
|
// Edges section.
|
|
109
109
|
if (p.edges.length > 0) {
|
|
110
|
-
lines.push(
|
|
110
|
+
lines.push(`## edges [${p.edges.length}]`);
|
|
111
111
|
for (const e of p.edges) {
|
|
112
112
|
const srcIdx = localIndex.get(e.source);
|
|
113
113
|
const tgtIdx = localIndex.get(e.target);
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;;GAIG;AACH,MAAM,OAAO,OAAO;IACV,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IACzC,MAAM,GAAW,CAAC,CAAC;IAE3B,uEAAuE;IACvE,WAAW,CAAC,KAAa;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,6FAA6F;IAC7F,KAAK,CAAC,KAAa;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,OAAiB;QACtB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACjD,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,gCAAgC;IAChC,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAClB,CAAC;CACF;AAOD,SAAS,eAAe,CAAC,OAAiB;IACxC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;YACxD,OAAO,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAU,EAAE,IAAoB;IAChE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,mCAAmC;IACnC,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,WAAW,WAAW,CAAC,CAAC,UAAU,YAAY,CAAC,CAAC,OAAO,CAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/decode.ts
CHANGED
|
@@ -26,6 +26,10 @@ export function decode(input: string): Payload {
|
|
|
26
26
|
// Parse header fields.
|
|
27
27
|
parseHeader(header.slice(4), p);
|
|
28
28
|
|
|
29
|
+
if (!p.tool) {
|
|
30
|
+
throw new Error("gcf: header missing required 'tool' field");
|
|
31
|
+
}
|
|
32
|
+
|
|
29
33
|
// Parse body: symbols and edges.
|
|
30
34
|
const symbols: Symbol[] = [];
|
|
31
35
|
const symByID = new Map<number, Symbol>();
|
|
@@ -38,7 +42,12 @@ export function decode(input: string): Payload {
|
|
|
38
42
|
|
|
39
43
|
// Group header.
|
|
40
44
|
if (line.startsWith('## ')) {
|
|
41
|
-
|
|
45
|
+
let group = line.slice(3);
|
|
46
|
+
// Strip bracket suffix: "edges [200]" -> "edges"
|
|
47
|
+
const bracketIdx = group.indexOf(' [');
|
|
48
|
+
if (bracketIdx >= 0) {
|
|
49
|
+
group = group.slice(0, bracketIdx);
|
|
50
|
+
}
|
|
42
51
|
inEdges = group === 'edges';
|
|
43
52
|
if (!inEdges) {
|
|
44
53
|
switch (group) {
|
package/src/encode.ts
CHANGED
|
@@ -29,19 +29,24 @@ function groupByDistance(symbols: Symbol[]): DistanceGroup[] {
|
|
|
29
29
|
export function encode(p: Payload): string {
|
|
30
30
|
const lines: string[] = [];
|
|
31
31
|
|
|
32
|
-
// Header line.
|
|
33
|
-
let header = `GCF tool=${p.tool} budget=${p.tokenBudget} tokens=${p.tokensUsed} symbols=${p.symbols.length}`;
|
|
34
|
-
if (p.packRoot) {
|
|
35
|
-
header += ` pack_root=${p.packRoot}`;
|
|
36
|
-
}
|
|
37
|
-
lines.push(header);
|
|
38
|
-
|
|
39
32
|
// Build symbol index for edge references.
|
|
40
33
|
const symIndex = new Map<string, number>();
|
|
41
34
|
for (let i = 0; i < p.symbols.length; i++) {
|
|
42
35
|
symIndex.set(p.symbols[i].qualifiedName, i);
|
|
43
36
|
}
|
|
44
37
|
|
|
38
|
+
// Count valid edges (both endpoints in symbol index).
|
|
39
|
+
const validEdges = p.edges.filter(
|
|
40
|
+
(e) => symIndex.has(e.source) && symIndex.has(e.target)
|
|
41
|
+
).length;
|
|
42
|
+
|
|
43
|
+
// Header line.
|
|
44
|
+
let header = `GCF tool=${p.tool} budget=${p.tokenBudget} tokens=${p.tokensUsed} symbols=${p.symbols.length} edges=${validEdges}`;
|
|
45
|
+
if (p.packRoot) {
|
|
46
|
+
header += ` pack_root=${p.packRoot}`;
|
|
47
|
+
}
|
|
48
|
+
lines.push(header);
|
|
49
|
+
|
|
45
50
|
// Group symbols by distance.
|
|
46
51
|
const groups = groupByDistance(p.symbols);
|
|
47
52
|
const groupNames = ['targets', 'related', 'extended'];
|
|
@@ -66,7 +71,7 @@ export function encode(p: Payload): string {
|
|
|
66
71
|
|
|
67
72
|
// Edges section.
|
|
68
73
|
if (p.edges.length > 0) {
|
|
69
|
-
lines.push(
|
|
74
|
+
lines.push(`## edges [${validEdges}]`);
|
|
70
75
|
for (const e of p.edges) {
|
|
71
76
|
const srcIdx = symIndex.get(e.source);
|
|
72
77
|
const tgtIdx = symIndex.get(e.target);
|
package/src/session.ts
CHANGED
|
@@ -80,7 +80,7 @@ export function encodeWithSession(p: Payload, sess: Session | null): string {
|
|
|
80
80
|
const lines: string[] = [];
|
|
81
81
|
|
|
82
82
|
// Header with session=true marker.
|
|
83
|
-
let header = `GCF tool=${p.tool} budget=${p.tokenBudget} tokens=${p.tokensUsed} symbols=${p.symbols.length} session=true`;
|
|
83
|
+
let header = `GCF tool=${p.tool} budget=${p.tokenBudget} tokens=${p.tokensUsed} symbols=${p.symbols.length} edges=${p.edges.length} session=true`;
|
|
84
84
|
if (p.packRoot) {
|
|
85
85
|
header += ` pack_root=${p.packRoot}`;
|
|
86
86
|
}
|
|
@@ -126,7 +126,7 @@ export function encodeWithSession(p: Payload, sess: Session | null): string {
|
|
|
126
126
|
|
|
127
127
|
// Edges section.
|
|
128
128
|
if (p.edges.length > 0) {
|
|
129
|
-
lines.push(
|
|
129
|
+
lines.push(`## edges [${p.edges.length}]`);
|
|
130
130
|
for (const e of p.edges) {
|
|
131
131
|
const srcIdx = localIndex.get(e.source);
|
|
132
132
|
const tgtIdx = localIndex.get(e.target);
|