@cavelang/cli 0.27.14 → 0.29.1
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/Authors.md +5 -0
- package/License.md +6 -0
- package/README.md +122 -24
- package/dist/internal/act/action.d.ts +69 -0
- package/dist/internal/act/action.d.ts.map +1 -0
- package/dist/internal/act/action.js +201 -0
- package/dist/internal/act/action.js.map +1 -0
- package/dist/internal/act/declare.d.ts +102 -0
- package/dist/internal/act/declare.d.ts.map +1 -0
- package/dist/internal/act/declare.js +270 -0
- package/dist/internal/act/declare.js.map +1 -0
- package/dist/internal/act/engine.d.ts +103 -0
- package/dist/internal/act/engine.d.ts.map +1 -0
- package/dist/internal/act/engine.js +298 -0
- package/dist/internal/act/engine.js.map +1 -0
- package/dist/internal/act/index.d.ts +27 -0
- package/dist/internal/act/index.d.ts.map +1 -0
- package/dist/internal/act/index.js +25 -0
- package/dist/internal/act/index.js.map +1 -0
- package/dist/internal/automate/automation.d.ts +78 -0
- package/dist/internal/automate/automation.d.ts.map +1 -0
- package/dist/internal/automate/automation.js +135 -0
- package/dist/internal/automate/automation.js.map +1 -0
- package/dist/internal/automate/declare.d.ts +84 -0
- package/dist/internal/automate/declare.d.ts.map +1 -0
- package/dist/internal/automate/declare.js +233 -0
- package/dist/internal/automate/declare.js.map +1 -0
- package/dist/internal/automate/engine.d.ts +125 -0
- package/dist/internal/automate/engine.d.ts.map +1 -0
- package/dist/internal/automate/engine.js +388 -0
- package/dist/internal/automate/engine.js.map +1 -0
- package/dist/internal/automate/index.d.ts +28 -0
- package/dist/internal/automate/index.d.ts.map +1 -0
- package/dist/internal/automate/index.js +26 -0
- package/dist/internal/automate/index.js.map +1 -0
- package/dist/internal/automate/main.d.ts +26 -0
- package/dist/internal/automate/main.d.ts.map +1 -0
- package/dist/internal/automate/main.js +298 -0
- package/dist/internal/automate/main.js.map +1 -0
- package/dist/internal/connect/index.d.ts +26 -0
- package/dist/internal/connect/index.d.ts.map +1 -0
- package/dist/internal/connect/index.js +24 -0
- package/dist/internal/connect/index.js.map +1 -0
- package/dist/internal/connect/main.d.ts +23 -0
- package/dist/internal/connect/main.d.ts.map +1 -0
- package/dist/internal/connect/main.js +330 -0
- package/dist/internal/connect/main.js.map +1 -0
- package/dist/internal/connect/run.d.ts +85 -0
- package/dist/internal/connect/run.d.ts.map +1 -0
- package/dist/internal/connect/run.js +242 -0
- package/dist/internal/connect/run.js.map +1 -0
- package/dist/internal/connect/source.d.ts +44 -0
- package/dist/internal/connect/source.d.ts.map +1 -0
- package/dist/internal/connect/source.js +215 -0
- package/dist/internal/connect/source.js.map +1 -0
- package/dist/internal/connect/template.d.ts +69 -0
- package/dist/internal/connect/template.d.ts.map +1 -0
- package/dist/internal/connect/template.js +221 -0
- package/dist/internal/connect/template.js.map +1 -0
- package/dist/internal/eval/index.d.ts +28 -0
- package/dist/internal/eval/index.d.ts.map +1 -0
- package/dist/internal/eval/index.js +27 -0
- package/dist/internal/eval/index.js.map +1 -0
- package/dist/internal/eval/judge.d.ts +30 -0
- package/dist/internal/eval/judge.d.ts.map +1 -0
- package/dist/internal/eval/judge.js +101 -0
- package/dist/internal/eval/judge.js.map +1 -0
- package/dist/internal/eval/loop.d.ts +64 -0
- package/dist/internal/eval/loop.d.ts.map +1 -0
- package/dist/internal/eval/loop.js +123 -0
- package/dist/internal/eval/loop.js.map +1 -0
- package/dist/internal/eval/main.d.ts +17 -0
- package/dist/internal/eval/main.d.ts.map +1 -0
- package/dist/internal/eval/main.js +236 -0
- package/dist/internal/eval/main.js.map +1 -0
- package/dist/internal/eval/queries.d.ts +74 -0
- package/dist/internal/eval/queries.d.ts.map +1 -0
- package/dist/internal/eval/queries.js +161 -0
- package/dist/internal/eval/queries.js.map +1 -0
- package/dist/internal/eval/run.d.ts +143 -0
- package/dist/internal/eval/run.d.ts.map +1 -0
- package/dist/internal/eval/run.js +376 -0
- package/dist/internal/eval/run.js.map +1 -0
- package/dist/internal/eval/score.d.ts +81 -0
- package/dist/internal/eval/score.d.ts.map +1 -0
- package/dist/internal/eval/score.js +126 -0
- package/dist/internal/eval/score.js.map +1 -0
- package/dist/internal/eval/suite.d.ts +66 -0
- package/dist/internal/eval/suite.d.ts.map +1 -0
- package/dist/internal/eval/suite.js +130 -0
- package/dist/internal/eval/suite.js.map +1 -0
- package/dist/internal/ingest/context.d.ts +20 -0
- package/dist/internal/ingest/context.d.ts.map +1 -0
- package/dist/internal/ingest/context.js +59 -0
- package/dist/internal/ingest/context.js.map +1 -0
- package/dist/internal/ingest/files.d.ts +46 -0
- package/dist/internal/ingest/files.d.ts.map +1 -0
- package/dist/internal/ingest/files.js +115 -0
- package/dist/internal/ingest/files.js.map +1 -0
- package/dist/internal/ingest/index.d.ts +31 -0
- package/dist/internal/ingest/index.d.ts.map +1 -0
- package/dist/internal/ingest/index.js +29 -0
- package/dist/internal/ingest/index.js.map +1 -0
- package/dist/internal/ingest/main.d.ts +12 -0
- package/dist/internal/ingest/main.d.ts.map +1 -0
- package/dist/internal/ingest/main.js +180 -0
- package/dist/internal/ingest/main.js.map +1 -0
- package/dist/internal/ingest/prompt.d.ts +32 -0
- package/dist/internal/ingest/prompt.d.ts.map +1 -0
- package/dist/internal/ingest/prompt.js +75 -0
- package/dist/internal/ingest/prompt.js.map +1 -0
- package/dist/internal/ingest/run.d.ts +142 -0
- package/dist/internal/ingest/run.d.ts.map +1 -0
- package/dist/internal/ingest/run.js +350 -0
- package/dist/internal/ingest/run.js.map +1 -0
- package/dist/internal/ingest/web.d.ts +48 -0
- package/dist/internal/ingest/web.d.ts.map +1 -0
- package/dist/internal/ingest/web.js +140 -0
- package/dist/internal/ingest/web.js.map +1 -0
- package/dist/internal/loop/demo.d.ts +22 -0
- package/dist/internal/loop/demo.d.ts.map +1 -0
- package/dist/internal/loop/demo.js +67 -0
- package/dist/internal/loop/demo.js.map +1 -0
- package/dist/internal/loop/index.d.ts +20 -0
- package/dist/internal/loop/index.d.ts.map +1 -0
- package/dist/internal/loop/index.js +17 -0
- package/dist/internal/loop/index.js.map +1 -0
- package/dist/internal/loop/llm.d.ts +99 -0
- package/dist/internal/loop/llm.d.ts.map +1 -0
- package/dist/internal/loop/llm.js +231 -0
- package/dist/internal/loop/llm.js.map +1 -0
- package/dist/internal/loop/reconstruct.d.ts +87 -0
- package/dist/internal/loop/reconstruct.d.ts.map +1 -0
- package/dist/internal/loop/reconstruct.js +157 -0
- package/dist/internal/loop/reconstruct.js.map +1 -0
- package/dist/internal/loop/sqlite.d.ts +13 -0
- package/dist/internal/loop/sqlite.d.ts.map +1 -0
- package/dist/internal/loop/sqlite.js +33 -0
- package/dist/internal/loop/sqlite.js.map +1 -0
- package/dist/internal/loop/store.d.ts +50 -0
- package/dist/internal/loop/store.d.ts.map +1 -0
- package/dist/internal/loop/store.js +100 -0
- package/dist/internal/loop/store.js.map +1 -0
- package/dist/internal/mcp/bin.d.ts +7 -0
- package/dist/internal/mcp/bin.d.ts.map +1 -0
- package/dist/internal/mcp/bin.js +8 -0
- package/dist/internal/mcp/bin.js.map +1 -0
- package/dist/internal/mcp/index.d.ts +25 -0
- package/dist/internal/mcp/index.d.ts.map +1 -0
- package/dist/internal/mcp/index.js +23 -0
- package/dist/internal/mcp/index.js.map +1 -0
- package/dist/internal/mcp/main.d.ts +23 -0
- package/dist/internal/mcp/main.d.ts.map +1 -0
- package/dist/internal/mcp/main.js +156 -0
- package/dist/internal/mcp/main.js.map +1 -0
- package/dist/internal/mcp/server.d.ts +92 -0
- package/dist/internal/mcp/server.d.ts.map +1 -0
- package/dist/internal/mcp/server.js +251 -0
- package/dist/internal/mcp/server.js.map +1 -0
- package/dist/internal/mcp/tools.d.ts +91 -0
- package/dist/internal/mcp/tools.d.ts.map +1 -0
- package/dist/internal/mcp/tools.js +584 -0
- package/dist/internal/mcp/tools.js.map +1 -0
- package/dist/internal/rules/declare.d.ts +58 -0
- package/dist/internal/rules/declare.d.ts.map +1 -0
- package/dist/internal/rules/declare.js +152 -0
- package/dist/internal/rules/declare.js.map +1 -0
- package/dist/internal/rules/engine.d.ts +125 -0
- package/dist/internal/rules/engine.d.ts.map +1 -0
- package/dist/internal/rules/engine.js +575 -0
- package/dist/internal/rules/engine.js.map +1 -0
- package/dist/internal/rules/index.d.ts +23 -0
- package/dist/internal/rules/index.d.ts.map +1 -0
- package/dist/internal/rules/index.js +21 -0
- package/dist/internal/rules/index.js.map +1 -0
- package/dist/internal/rules/rule.d.ts +88 -0
- package/dist/internal/rules/rule.d.ts.map +1 -0
- package/dist/internal/rules/rule.js +221 -0
- package/dist/internal/rules/rule.js.map +1 -0
- package/dist/internal/shape/check.d.ts +118 -0
- package/dist/internal/shape/check.d.ts.map +1 -0
- package/dist/internal/shape/check.js +331 -0
- package/dist/internal/shape/check.js.map +1 -0
- package/dist/internal/shape/client.d.ts +31 -0
- package/dist/internal/shape/client.d.ts.map +1 -0
- package/dist/internal/shape/client.js +170 -0
- package/dist/internal/shape/client.js.map +1 -0
- package/dist/internal/shape/gate.d.ts +33 -0
- package/dist/internal/shape/gate.d.ts.map +1 -0
- package/dist/internal/shape/gate.js +0 -0
- package/dist/internal/shape/gate.js.map +1 -0
- package/dist/internal/shape/index.d.ts +27 -0
- package/dist/internal/shape/index.d.ts.map +1 -0
- package/dist/internal/shape/index.js +23 -0
- package/dist/internal/shape/index.js.map +1 -0
- package/dist/internal/shape/suggest.d.ts +82 -0
- package/dist/internal/shape/suggest.d.ts.map +1 -0
- package/dist/internal/shape/suggest.js +374 -0
- package/dist/internal/shape/suggest.js.map +1 -0
- package/dist/internal/sync/index.d.ts +22 -0
- package/dist/internal/sync/index.d.ts.map +1 -0
- package/dist/internal/sync/index.js +21 -0
- package/dist/internal/sync/index.js.map +1 -0
- package/dist/internal/sync/sync.d.ts +95 -0
- package/dist/internal/sync/sync.d.ts.map +1 -0
- package/dist/internal/sync/sync.js +342 -0
- package/dist/internal/sync/sync.js.map +1 -0
- package/dist/internal/view/api.d.ts +196 -0
- package/dist/internal/view/api.d.ts.map +1 -0
- package/dist/internal/view/api.js +189 -0
- package/dist/internal/view/api.js.map +1 -0
- package/dist/internal/view/index.d.ts +33 -0
- package/dist/internal/view/index.d.ts.map +1 -0
- package/dist/internal/view/index.js +30 -0
- package/dist/internal/view/index.js.map +1 -0
- package/dist/internal/view/main.d.ts +11 -0
- package/dist/internal/view/main.d.ts.map +1 -0
- package/dist/internal/view/main.js +98 -0
- package/dist/internal/view/main.js.map +1 -0
- package/dist/internal/view/page.d.ts +14 -0
- package/dist/internal/view/page.d.ts.map +1 -0
- package/dist/internal/view/page.js +370 -0
- package/dist/internal/view/page.js.map +1 -0
- package/dist/internal/view/report.d.ts +52 -0
- package/dist/internal/view/report.d.ts.map +1 -0
- package/dist/internal/view/report.js +367 -0
- package/dist/internal/view/report.js.map +1 -0
- package/dist/internal/view/scope.d.ts +11 -0
- package/dist/internal/view/scope.d.ts.map +1 -0
- package/dist/internal/view/scope.js +41 -0
- package/dist/internal/view/scope.js.map +1 -0
- package/dist/internal/view/server.d.ts +35 -0
- package/dist/internal/view/server.d.ts.map +1 -0
- package/dist/internal/view/server.js +141 -0
- package/dist/internal/view/server.js.map +1 -0
- package/dist/src/act.d.ts +3 -0
- package/dist/src/act.d.ts.map +1 -0
- package/dist/src/act.js +3 -0
- package/dist/src/act.js.map +1 -0
- package/dist/src/automate.d.ts +3 -0
- package/dist/src/automate.d.ts.map +1 -0
- package/dist/src/automate.js +3 -0
- package/dist/src/automate.js.map +1 -0
- package/dist/src/cli.d.ts +24 -17
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +408 -107
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands.d.ts +104 -0
- package/dist/src/commands.d.ts.map +1 -0
- package/dist/src/commands.js +33 -0
- package/dist/src/commands.js.map +1 -0
- package/dist/src/connect.d.ts +3 -0
- package/dist/src/connect.d.ts.map +1 -0
- package/dist/src/connect.js +3 -0
- package/dist/src/connect.js.map +1 -0
- package/dist/src/dispatch.d.ts +14 -0
- package/dist/src/dispatch.d.ts.map +1 -0
- package/dist/src/dispatch.js +116 -0
- package/dist/src/dispatch.js.map +1 -0
- package/dist/src/doctor.d.ts +45 -0
- package/dist/src/doctor.d.ts.map +1 -0
- package/dist/src/doctor.js +284 -0
- package/dist/src/doctor.js.map +1 -0
- package/dist/src/eval.d.ts +3 -0
- package/dist/src/eval.d.ts.map +1 -0
- package/dist/src/eval.js +3 -0
- package/dist/src/eval.js.map +1 -0
- package/dist/src/index.d.ts +9 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/ingest.d.ts +3 -0
- package/dist/src/ingest.d.ts.map +1 -0
- package/dist/src/ingest.js +3 -0
- package/dist/src/ingest.js.map +1 -0
- package/dist/src/loop.d.ts +3 -0
- package/dist/src/loop.d.ts.map +1 -0
- package/dist/src/loop.js +3 -0
- package/dist/src/loop.js.map +1 -0
- package/dist/src/main.d.ts +1 -1
- package/dist/src/main.d.ts.map +1 -1
- package/dist/src/main.js +3 -75
- package/dist/src/main.js.map +1 -1
- package/dist/src/mcp.d.ts +3 -0
- package/dist/src/mcp.d.ts.map +1 -0
- package/dist/src/mcp.js +3 -0
- package/dist/src/mcp.js.map +1 -0
- package/dist/src/rules.d.ts +3 -0
- package/dist/src/rules.d.ts.map +1 -0
- package/dist/src/rules.js +3 -0
- package/dist/src/rules.js.map +1 -0
- package/dist/src/shape.d.ts +3 -0
- package/dist/src/shape.d.ts.map +1 -0
- package/dist/src/shape.js +3 -0
- package/dist/src/shape.js.map +1 -0
- package/dist/src/sync.d.ts +3 -0
- package/dist/src/sync.d.ts.map +1 -0
- package/dist/src/sync.js +3 -0
- package/dist/src/sync.js.map +1 -0
- package/dist/src/view.d.ts +3 -0
- package/dist/src/view.d.ts.map +1 -0
- package/dist/src/view.js +3 -0
- package/dist/src/view.js.map +1 -0
- package/package.json +81 -21
- package/src/act.ts +2 -0
- package/src/automate.ts +2 -0
- package/src/cli.ts +416 -102
- package/src/commands.ts +48 -0
- package/src/connect.ts +2 -0
- package/src/dispatch.ts +141 -0
- package/src/doctor.ts +370 -0
- package/src/eval.ts +2 -0
- package/src/index.ts +9 -2
- package/src/ingest.ts +2 -0
- package/src/loop.ts +2 -0
- package/src/main.ts +3 -66
- package/src/mcp.ts +2 -0
- package/src/rules.ts +2 -0
- package/src/shape.ts +2 -0
- package/src/sync.ts +2 -0
- package/src/view.ts +2 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@cavelang/cli/shape` — shape expectations, knowledge health (spec §20) and
|
|
3
|
+
* alias discovery (spec §27).
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { check, gatedIngest, suggestAliases } from '@cavelang/cli/shape'
|
|
7
|
+
*
|
|
8
|
+
* store.ingest('service EXPECTS owner\napi-gateway IS service')
|
|
9
|
+
* check(store).violations
|
|
10
|
+
* // → [{ entity: 'api-gateway', via: 'service', expectation: { …, name: 'owner' } }]
|
|
11
|
+
*
|
|
12
|
+
* gatedIngest(store, 'cache IS service', { source: 'cli' })
|
|
13
|
+
* // → { ok: false, violations: […] } — rolled back, nothing appended
|
|
14
|
+
*
|
|
15
|
+
* suggestAliases(store).map(suggestion => suggestion.line)
|
|
16
|
+
* // → ['maria ALIAS grandma-maria #suggested @ 35% ; segments of maria within grandma-maria']
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export { check, defaultStaleDays, evaluate, expectations } from './check.ts';
|
|
20
|
+
export type { Coverage, Disagreement, Evaluation, Expectation, Options, Report, Stale, Violation } from './check.ts';
|
|
21
|
+
export { gatedIngest, violationKey } from './gate.ts';
|
|
22
|
+
export type { GateResult } from './gate.ts';
|
|
23
|
+
export { clientFormatVersion, generateClient } from './client.ts';
|
|
24
|
+
export type { ClientField, ClientGeneration, ClientGenerationFailure, GeneratedClient } from './client.ts';
|
|
25
|
+
export { defaultMinScore, judgePrompt, parseJudgeReply, suggestAliases, suggestSource, suggestTag, writeSuggestions } from './suggest.ts';
|
|
26
|
+
export type { Signal, Suggestion, Options as SuggestOptions } from './suggest.ts';
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5E,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACpH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC1G,OAAO,EACL,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAC3G,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@cavelang/cli/shape` — shape expectations, knowledge health (spec §20) and
|
|
3
|
+
* alias discovery (spec §27).
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* import { check, gatedIngest, suggestAliases } from '@cavelang/cli/shape'
|
|
7
|
+
*
|
|
8
|
+
* store.ingest('service EXPECTS owner\napi-gateway IS service')
|
|
9
|
+
* check(store).violations
|
|
10
|
+
* // → [{ entity: 'api-gateway', via: 'service', expectation: { …, name: 'owner' } }]
|
|
11
|
+
*
|
|
12
|
+
* gatedIngest(store, 'cache IS service', { source: 'cli' })
|
|
13
|
+
* // → { ok: false, violations: […] } — rolled back, nothing appended
|
|
14
|
+
*
|
|
15
|
+
* suggestAliases(store).map(suggestion => suggestion.line)
|
|
16
|
+
* // → ['maria ALIAS grandma-maria #suggested @ 35% ; segments of maria within grandma-maria']
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export { check, defaultStaleDays, evaluate, expectations } from "./check.js";
|
|
20
|
+
export { gatedIngest, violationKey } from "./gate.js";
|
|
21
|
+
export { clientFormatVersion, generateClient } from "./client.js";
|
|
22
|
+
export { defaultMinScore, judgePrompt, parseJudgeReply, suggestAliases, suggestSource, suggestTag, writeSuggestions } from "./suggest.js";
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE5E,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAErD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjE,OAAO,EACL,eAAe,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAC3G,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alias discovery (spec §27) — propose same-entity candidates for review.
|
|
3
|
+
*
|
|
4
|
+
* §13.6 made merge and unmerge cheap; under LLM extraction the bottleneck
|
|
5
|
+
* is *noticing* that `maria` and `grandma-maria` drifted apart. Everything
|
|
6
|
+
* here is a read: candidates are scored by deterministic, explainable
|
|
7
|
+
* string and graph signals, and the output is *suggested* `ALIAS` claims
|
|
8
|
+
* at low confidence (0.3–0.5 — the §20.2 review band), tagged `#suggested`,
|
|
9
|
+
* for a human to confirm or reject by ordinary appends. Discovery never
|
|
10
|
+
* merges; a pair with any recorded `ALIAS` history is never re-suggested,
|
|
11
|
+
* so review decisions stick. The optional LLM judge stays out-of-band
|
|
12
|
+
* (§19.5): a prompt/reply contract, injected by the caller.
|
|
13
|
+
*/
|
|
14
|
+
import type { Store } from '@cavelang/store';
|
|
15
|
+
/** One piece of evidence behind a suggestion (spec §27.2). */
|
|
16
|
+
export type Signal = {
|
|
17
|
+
/** `equal`/`tokens`/`prefix`/`edit` are string signals, `value`/`neighbor` graph signals. */
|
|
18
|
+
readonly kind: 'equal' | 'tokens' | 'prefix' | 'edit' | 'value' | 'neighbor';
|
|
19
|
+
readonly score: number;
|
|
20
|
+
/** Human-readable evidence, also emitted as the suggested line's comment. */
|
|
21
|
+
readonly detail: string;
|
|
22
|
+
};
|
|
23
|
+
/** One proposed same-entity pair (spec §27), strongest first in results. */
|
|
24
|
+
export type Suggestion = {
|
|
25
|
+
/** The less-established name — subject of the suggested claim. */
|
|
26
|
+
readonly entity: string;
|
|
27
|
+
/** The more-established name — object of the suggested claim. */
|
|
28
|
+
readonly canonical: string;
|
|
29
|
+
/** Combined evidence score in 0..1 (spec §27.2). */
|
|
30
|
+
readonly score: number;
|
|
31
|
+
/** `score / 2`, clamped to 0.3..0.5 — the §20.2 review band. */
|
|
32
|
+
readonly confidence: number;
|
|
33
|
+
readonly signals: readonly Signal[];
|
|
34
|
+
/** The suggested claim as CAVE text: `entity ALIAS canonical #suggested @ N% ; evidence`. */
|
|
35
|
+
readonly line: string;
|
|
36
|
+
};
|
|
37
|
+
export type Options = {
|
|
38
|
+
/** Minimum evidence score (spec §27.2), default {@link defaultMinScore}. */
|
|
39
|
+
readonly minScore?: number;
|
|
40
|
+
/** At most this many suggestions, strongest first. */
|
|
41
|
+
readonly limit?: number;
|
|
42
|
+
};
|
|
43
|
+
export declare const defaultMinScore = 0.6;
|
|
44
|
+
/** Actor stamped on written suggestions (spec §9.5, §27.3). */
|
|
45
|
+
export declare const suggestSource = "suggest/alias";
|
|
46
|
+
/** Tag carried by every suggested claim, so review can find them (§13.5). */
|
|
47
|
+
export declare const suggestTag = "suggested";
|
|
48
|
+
/**
|
|
49
|
+
* Proposes same-entity candidates over current beliefs (spec §27),
|
|
50
|
+
* strongest first. Deterministic: string similarity and shared rare
|
|
51
|
+
* attribute values generate candidates, shared relation neighbors boost
|
|
52
|
+
* them, and every excluded pair stays excluded — recorded `ALIAS` history
|
|
53
|
+
* in either direction (merged, rejected or unmerged), membership in one
|
|
54
|
+
* §13.6 closure group, a direct claim relating the two (related entities
|
|
55
|
+
* are distinct entities), or a scope-parent name (`auth` names a scope of
|
|
56
|
+
* `auth/middleware`, not an alias).
|
|
57
|
+
*/
|
|
58
|
+
export declare const suggestAliases: (store: Store, options?: Options) => Suggestion[];
|
|
59
|
+
/**
|
|
60
|
+
* Appends suggestions as claims, stamped `@src:suggest/alias` (spec §9.5,
|
|
61
|
+
* §27.3). Once written, a pair has `ALIAS` history and is never suggested
|
|
62
|
+
* again — re-runs are naturally idempotent. Note the §13.6 consequence: a
|
|
63
|
+
* positive claim at any confidence links the alias closure; belief is
|
|
64
|
+
* graded, and review (confirm or retract) is the follow-up.
|
|
65
|
+
*/
|
|
66
|
+
export declare const writeSuggestions: (store: Store, suggestions: readonly Suggestion[]) => {
|
|
67
|
+
appended: number;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* The judge prompt (spec §27.4): every suggestion with its evidence and
|
|
71
|
+
* each side's current claims. The reply contract is one JSON array of the
|
|
72
|
+
* suggestion numbers that really are the same entity.
|
|
73
|
+
*/
|
|
74
|
+
export declare const judgePrompt: (store: Store, suggestions: readonly Suggestion[]) => string;
|
|
75
|
+
/**
|
|
76
|
+
* Parses the judge's reply into validated 0-based suggestion indices. The
|
|
77
|
+
* *last* well-formed JSON array wins (agents often think aloud before
|
|
78
|
+
* answering); non-integer, out-of-range and duplicate entries are dropped
|
|
79
|
+
* rather than failing the run.
|
|
80
|
+
*/
|
|
81
|
+
export declare const parseJudgeReply: (output: string, count: number) => number[];
|
|
82
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../src/suggest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAO,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAIjD,8DAA8D;AAC9D,MAAM,MAAM,MAAM,GAAG;IACnB,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAA;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,4EAA4E;AAC5E,MAAM,MAAM,UAAU,GAAG;IACvB,kEAAkE;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,sDAAsD;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,eAAe,MAAM,CAAA;AAElC,+DAA+D;AAC/D,eAAO,MAAM,aAAa,kBAAkB,CAAA;AAE5C,6EAA6E;AAC7E,eAAO,MAAM,UAAU,cAAc,CAAA;AAiOrC;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,UAAS,OAAY,KAAG,UAAU,EAuF9E,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,KAAK,EAAE,aAAa,SAAS,UAAU,EAAE,KAAG;IAAE,QAAQ,EAAE,MAAM,CAAA;CAQjG,CAAA;AAUL;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,aAAa,SAAS,UAAU,EAAE,KAAG,MAoBnE,CAAA;AAEZ;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,EAyBrE,CAAA"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Alias discovery (spec §27) — propose same-entity candidates for review.
|
|
3
|
+
*
|
|
4
|
+
* §13.6 made merge and unmerge cheap; under LLM extraction the bottleneck
|
|
5
|
+
* is *noticing* that `maria` and `grandma-maria` drifted apart. Everything
|
|
6
|
+
* here is a read: candidates are scored by deterministic, explainable
|
|
7
|
+
* string and graph signals, and the output is *suggested* `ALIAS` claims
|
|
8
|
+
* at low confidence (0.3–0.5 — the §20.2 review band), tagged `#suggested`,
|
|
9
|
+
* for a human to confirm or reject by ordinary appends. Discovery never
|
|
10
|
+
* merges; a pair with any recorded `ALIAS` history is never re-suggested,
|
|
11
|
+
* so review decisions stick. The optional LLM judge stays out-of-band
|
|
12
|
+
* (§19.5): a prompt/reply contract, injected by the caller.
|
|
13
|
+
*/
|
|
14
|
+
import { Verb } from '@cavelang/core';
|
|
15
|
+
import { QuerySql } from '@cavelang/store';
|
|
16
|
+
const currentSql = QuerySql.current();
|
|
17
|
+
export const defaultMinScore = 0.6;
|
|
18
|
+
/** Actor stamped on written suggestions (spec §9.5, §27.3). */
|
|
19
|
+
export const suggestSource = 'suggest/alias';
|
|
20
|
+
/** Tag carried by every suggested claim, so review can find them (§13.5). */
|
|
21
|
+
export const suggestTag = 'suggested';
|
|
22
|
+
/**
|
|
23
|
+
* System entities never suggested (spec §27.1): rules, actions, policy
|
|
24
|
+
* sources and connect records are infrastructure, and their digest-shaped
|
|
25
|
+
* names are string-similar by construction.
|
|
26
|
+
*/
|
|
27
|
+
const reservedPrefixes = ['rule/', 'action/', 'source/', 'connect/'];
|
|
28
|
+
/** Entity test, as in §20's checks: not a verb token, not a stored literal. */
|
|
29
|
+
const isEntityName = (name) => !Verb.isVerbToken(name) && !name.startsWith('"') && !name.startsWith('`');
|
|
30
|
+
/** Lowercased with separators stripped — the comparison form. */
|
|
31
|
+
const norm = (name) => name.toLowerCase().replaceAll(/[-_./]+/g, '');
|
|
32
|
+
/** Lowercased `/-_.`-separated segments, deduplicated. */
|
|
33
|
+
const tokensOf = (name) => new Set(name.toLowerCase().split(/[-_./]+/).filter(token => token !== ''));
|
|
34
|
+
const stripDigits = (text) => text.replaceAll(/[0-9]+/g, '');
|
|
35
|
+
/**
|
|
36
|
+
* Names differing only in digits (`api-v1` vs `api-v2`) are versions or
|
|
37
|
+
* deliberate numbering more often than drift — prefix and edit similarity
|
|
38
|
+
* ignore such pairs (spec §27.2).
|
|
39
|
+
*/
|
|
40
|
+
const digitOnlyDifference = (a, b) => a !== b && stripDigits(a) === stripDigits(b);
|
|
41
|
+
const editDistance = (a, b) => {
|
|
42
|
+
let previous = Array.from({ length: b.length + 1 }, (_, at) => at);
|
|
43
|
+
for (let i = 1; i <= a.length; i += 1) {
|
|
44
|
+
const next = [i];
|
|
45
|
+
for (let j = 1; j <= b.length; j += 1) {
|
|
46
|
+
next.push(Math.min(previous[j] + 1, next[j - 1] + 1, previous[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1)));
|
|
47
|
+
}
|
|
48
|
+
previous = next;
|
|
49
|
+
}
|
|
50
|
+
return previous[b.length];
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Whether the segments the names do NOT share are themselves spelling
|
|
54
|
+
* variants (edit similarity ≥ 0.75). Distinguishes drift (`grandma-mria` /
|
|
55
|
+
* `grandma-maria`) from sibling naming (`north-tower` / `south-tower`) —
|
|
56
|
+
* whole-string similarity alone cannot tell a typo from a differing word.
|
|
57
|
+
*/
|
|
58
|
+
const leftoverDrift = (a, b) => {
|
|
59
|
+
const [ta, tb] = [tokensOf(a), tokensOf(b)];
|
|
60
|
+
const leftA = [...ta].filter(token => !tb.has(token));
|
|
61
|
+
const leftB = [...tb].filter(token => !ta.has(token));
|
|
62
|
+
if (leftA.length === 0 || leftB.length === 0) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
const [small, large] = leftA.length <= leftB.length ? [leftA, leftB] : [leftB, leftA];
|
|
66
|
+
return small.every(token => large.some(other => 1 - editDistance(token, other) / Math.max(token.length, other.length) >= 0.75));
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Order-free pair identity. Newline-joined: terms are single-line by
|
|
70
|
+
* construction (§3), so the join cannot collide.
|
|
71
|
+
*/
|
|
72
|
+
const pairKey = (a, b) => a < b ? `${a}\n${b}` : `${b}\n${a}`;
|
|
73
|
+
const readGraph = (store) => {
|
|
74
|
+
const rows = store.db.prepare(`SELECT c.* FROM (${currentSql}) c WHERE c.conf > 0`).all();
|
|
75
|
+
// Entities carrying ingestion bookkeeping (`<path> HAS ingest-digest: …`)
|
|
76
|
+
// are file records, not domain entities — similar paths are not aliases.
|
|
77
|
+
const bookkeeping = new Set(rows.filter(row => row.attribute === 'ingest-digest').map(row => row.subject));
|
|
78
|
+
const isCandidate = (name) => isEntityName(name) && !bookkeeping.has(name) && norm(name) !== '' &&
|
|
79
|
+
!reservedPrefixes.some(prefix => name.startsWith(prefix));
|
|
80
|
+
const counts = new Map();
|
|
81
|
+
const count = (name) => {
|
|
82
|
+
if (isCandidate(name)) {
|
|
83
|
+
counts.set(name, (counts.get(name) ?? 0) + 1);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const neighbors = new Map();
|
|
87
|
+
const neighbor = (name, signature) => {
|
|
88
|
+
neighbors.set(name, (neighbors.get(name) ?? new Set()).add(signature));
|
|
89
|
+
};
|
|
90
|
+
const values = new Map();
|
|
91
|
+
const related = new Set();
|
|
92
|
+
const aliasParent = new Map();
|
|
93
|
+
const find = (name) => {
|
|
94
|
+
const up = aliasParent.get(name);
|
|
95
|
+
if (up === undefined || up === name) {
|
|
96
|
+
return name;
|
|
97
|
+
}
|
|
98
|
+
const root = find(up);
|
|
99
|
+
aliasParent.set(name, root);
|
|
100
|
+
return root;
|
|
101
|
+
};
|
|
102
|
+
for (const row of rows) {
|
|
103
|
+
count(row.subject);
|
|
104
|
+
if (row.object !== null) {
|
|
105
|
+
count(row.object);
|
|
106
|
+
related.add(pairKey(row.subject, row.object));
|
|
107
|
+
if (row.negated === 0 && row.verb === 'ALIAS') {
|
|
108
|
+
aliasParent.set(find(row.subject), find(row.object));
|
|
109
|
+
}
|
|
110
|
+
if (row.negated === 0 && row.verb !== 'ALIAS') {
|
|
111
|
+
neighbor(row.subject, `out ${row.verb} ${row.object}`);
|
|
112
|
+
neighbor(row.object, `in ${row.subject} ${row.verb}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Only textual values long enough to be distinctive can identify —
|
|
116
|
+
// two entities measuring alike (`floors: 2`) are not one entity.
|
|
117
|
+
if (row.negated === 0 && row.attribute !== null && row.value_num === null &&
|
|
118
|
+
row.value_text !== null && row.value_text.length >= 4) {
|
|
119
|
+
const key = [row.attribute, row.value_text, row.value_unit ?? ''].join('\n');
|
|
120
|
+
values.set(key, (values.get(key) ?? new Set()).add(row.subject));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const decided = new Set(store.db.prepare("SELECT DISTINCT subject, object FROM cave_claim WHERE verb = 'ALIAS' AND object IS NOT NULL").all()
|
|
124
|
+
.map(row => pairKey(row.subject, row.object)));
|
|
125
|
+
const closureRoot = new Map([...counts.keys()].map(name => [name, find(name)]));
|
|
126
|
+
return { counts, neighbors, values, related, decided, closureRoot };
|
|
127
|
+
};
|
|
128
|
+
/** String and shared-value signals — the candidate-generating evidence (spec §27.2). */
|
|
129
|
+
const primarySignals = (a, b, graph) => {
|
|
130
|
+
const signals = [];
|
|
131
|
+
const [na, nb] = [norm(a), norm(b)];
|
|
132
|
+
if (na === nb) {
|
|
133
|
+
signals.push({ kind: 'equal', score: 1, detail: 'names equal ignoring case and separators' });
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const [ta, tb] = [tokensOf(a), tokensOf(b)];
|
|
137
|
+
const [small, large] = ta.size <= tb.size ? [ta, tb] : [tb, ta];
|
|
138
|
+
const subset = [...small].every(token => large.has(token));
|
|
139
|
+
if (subset && ta.size === tb.size) {
|
|
140
|
+
signals.push({ kind: 'tokens', score: 0.9, detail: 'same name segments, reordered' });
|
|
141
|
+
}
|
|
142
|
+
else if (subset && Math.min(na.length, nb.length) >= 3) {
|
|
143
|
+
const [short, long] = ta.size <= tb.size ? [a, b] : [b, a];
|
|
144
|
+
signals.push({ kind: 'tokens', score: 0.7, detail: `segments of ${short} within ${long}` });
|
|
145
|
+
}
|
|
146
|
+
if (!digitOnlyDifference(na, nb)) {
|
|
147
|
+
const [short, long] = na.length <= nb.length ? [a, b] : [b, a];
|
|
148
|
+
if (Math.min(na.length, nb.length) >= 4 && (na.startsWith(nb) || nb.startsWith(na))) {
|
|
149
|
+
signals.push({
|
|
150
|
+
kind: 'prefix',
|
|
151
|
+
score: Math.min(na.length, nb.length) / Math.max(na.length, nb.length),
|
|
152
|
+
detail: `${short} prefixes ${long}`
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (Math.min(na.length, nb.length) >= 5 && leftoverDrift(a, b)) {
|
|
156
|
+
const similarity = 1 - editDistance(na, nb) / Math.max(na.length, nb.length);
|
|
157
|
+
if (similarity >= 0.75) {
|
|
158
|
+
signals.push({ kind: 'edit', score: similarity, detail: `spelling ${Math.round(similarity * 100)}% similar` });
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
for (const [key, names] of graph.values) {
|
|
164
|
+
// Exactly the two candidates — a value shared more widely is a common
|
|
165
|
+
// category value (`status: active`), not an identity.
|
|
166
|
+
if (names.size === 2 && names.has(a) && names.has(b)) {
|
|
167
|
+
const [attribute, value, unit] = key.split('\n');
|
|
168
|
+
const shown = value.length > 40 ? `${value.slice(0, 40)}...` : value;
|
|
169
|
+
signals.push({ kind: 'value', score: 0.8, detail: `share ${attribute}: ${shown}${unit === '' ? '' : ` ${unit}`}` });
|
|
170
|
+
if (signals.filter(signal => signal.kind === 'value').length >= 2) {
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return signals;
|
|
176
|
+
};
|
|
177
|
+
/** Shared relation neighbors — evidence that boosts, never generates (spec §27.2). */
|
|
178
|
+
const neighborSignals = (a, b, graph) => {
|
|
179
|
+
const from = graph.neighbors.get(a);
|
|
180
|
+
const other = graph.neighbors.get(b);
|
|
181
|
+
if (from === undefined || other === undefined) {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
const signals = [];
|
|
185
|
+
for (const signature of from) {
|
|
186
|
+
if (other.has(signature)) {
|
|
187
|
+
const [side, first, second] = signature.split(' ');
|
|
188
|
+
signals.push({
|
|
189
|
+
kind: 'neighbor',
|
|
190
|
+
score: 0.1,
|
|
191
|
+
detail: side === 'out' ? `both ${first} ${second}` : `both object of ${first} ${second}`
|
|
192
|
+
});
|
|
193
|
+
if (signals.length >= 2) {
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return signals;
|
|
199
|
+
};
|
|
200
|
+
const formatPercent = (confidence) => `${Math.round(confidence * 100)}%`;
|
|
201
|
+
/**
|
|
202
|
+
* Proposes same-entity candidates over current beliefs (spec §27),
|
|
203
|
+
* strongest first. Deterministic: string similarity and shared rare
|
|
204
|
+
* attribute values generate candidates, shared relation neighbors boost
|
|
205
|
+
* them, and every excluded pair stays excluded — recorded `ALIAS` history
|
|
206
|
+
* in either direction (merged, rejected or unmerged), membership in one
|
|
207
|
+
* §13.6 closure group, a direct claim relating the two (related entities
|
|
208
|
+
* are distinct entities), or a scope-parent name (`auth` names a scope of
|
|
209
|
+
* `auth/middleware`, not an alias).
|
|
210
|
+
*/
|
|
211
|
+
export const suggestAliases = (store, options = {}) => {
|
|
212
|
+
const minScore = options.minScore ?? defaultMinScore;
|
|
213
|
+
const graph = readGraph(store);
|
|
214
|
+
const names = [...graph.counts.keys()].sort();
|
|
215
|
+
// Cheap blocking: a pair is worth scoring when the names share their
|
|
216
|
+
// first comparison character, a normalized suffix, a segment, or a rare
|
|
217
|
+
// value. The suffix block lets leading-character edits reach the existing
|
|
218
|
+
// edit-distance and differing-segment guards.
|
|
219
|
+
const blocks = new Map();
|
|
220
|
+
const block = (key, name) => {
|
|
221
|
+
blocks.set(key, [...blocks.get(key) ?? [], name]);
|
|
222
|
+
};
|
|
223
|
+
for (const name of names) {
|
|
224
|
+
const normalized = norm(name);
|
|
225
|
+
block(`first ${normalized[0]}`, name);
|
|
226
|
+
if (normalized.length >= 5) {
|
|
227
|
+
block(`suffix ${normalized.slice(-4)}`, name);
|
|
228
|
+
}
|
|
229
|
+
for (const token of tokensOf(name)) {
|
|
230
|
+
block(`token ${token}`, name);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
for (const [key, carriers] of graph.values) {
|
|
234
|
+
if (carriers.size === 2) {
|
|
235
|
+
for (const name of carriers) {
|
|
236
|
+
if (graph.counts.has(name)) {
|
|
237
|
+
block(`value ${key}`, name);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const excluded = (a, b) => {
|
|
243
|
+
const key = pairKey(a, b);
|
|
244
|
+
return graph.decided.has(key) || graph.related.has(key) ||
|
|
245
|
+
graph.closureRoot.get(a) === graph.closureRoot.get(b) ||
|
|
246
|
+
a.startsWith(`${b}/`) || b.startsWith(`${a}/`);
|
|
247
|
+
};
|
|
248
|
+
const seen = new Set();
|
|
249
|
+
const suggestions = [];
|
|
250
|
+
for (const bucket of blocks.values()) {
|
|
251
|
+
for (let i = 0; i < bucket.length; i += 1) {
|
|
252
|
+
for (let j = i + 1; j < bucket.length; j += 1) {
|
|
253
|
+
const [a, b] = [bucket[i], bucket[j]];
|
|
254
|
+
const key = pairKey(a, b);
|
|
255
|
+
if (seen.has(key)) {
|
|
256
|
+
continue;
|
|
257
|
+
}
|
|
258
|
+
seen.add(key);
|
|
259
|
+
if (excluded(a, b)) {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
const primary = primarySignals(a, b, graph);
|
|
263
|
+
if (primary.length === 0) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
const boosts = neighborSignals(a, b, graph);
|
|
267
|
+
const score = Math.min(1, Math.max(...primary.map(signal => signal.score)) +
|
|
268
|
+
boosts.reduce((sum, signal) => sum + signal.score, 0));
|
|
269
|
+
if (score < minScore) {
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
// The more-established name is canonical: more current rows, then
|
|
273
|
+
// the shorter name, then lexicographic — a convention, not a
|
|
274
|
+
// semantic (§13.6 reads ALIAS as undirected).
|
|
275
|
+
const countOf = (name) => graph.counts.get(name) ?? 0;
|
|
276
|
+
const canonicalFirst = countOf(a) !== countOf(b) ?
|
|
277
|
+
countOf(a) > countOf(b) :
|
|
278
|
+
a.length !== b.length ? a.length < b.length : a < b;
|
|
279
|
+
const [entity, canonical] = canonicalFirst ? [b, a] : [a, b];
|
|
280
|
+
const signals = [...primary, ...boosts];
|
|
281
|
+
const confidence = Math.min(0.5, Math.max(0.3, Math.round(score * 50) / 100));
|
|
282
|
+
suggestions.push({
|
|
283
|
+
entity,
|
|
284
|
+
canonical,
|
|
285
|
+
score,
|
|
286
|
+
confidence,
|
|
287
|
+
signals,
|
|
288
|
+
line: `${entity} ALIAS ${canonical} #${suggestTag} @ ${formatPercent(confidence)}` +
|
|
289
|
+
` ; ${signals.map(signal => signal.detail).join('; ')}`
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
suggestions.sort((a, b) => b.score - a.score || a.entity.localeCompare(b.entity) || a.canonical.localeCompare(b.canonical));
|
|
295
|
+
return options.limit === undefined ? suggestions : suggestions.slice(0, options.limit);
|
|
296
|
+
};
|
|
297
|
+
/**
|
|
298
|
+
* Appends suggestions as claims, stamped `@src:suggest/alias` (spec §9.5,
|
|
299
|
+
* §27.3). Once written, a pair has `ALIAS` history and is never suggested
|
|
300
|
+
* again — re-runs are naturally idempotent. Note the §13.6 consequence: a
|
|
301
|
+
* positive claim at any confidence links the alias closure; belief is
|
|
302
|
+
* graded, and review (confirm or retract) is the follow-up.
|
|
303
|
+
*/
|
|
304
|
+
export const writeSuggestions = (store, suggestions) => suggestions.length === 0 ?
|
|
305
|
+
{ appended: 0 } :
|
|
306
|
+
{
|
|
307
|
+
appended: store.ingest(suggestions.map(suggestion => suggestion.line).join('\n'), { source: suggestSource, strict: true }).ids.length
|
|
308
|
+
};
|
|
309
|
+
/** Current claims naming the entity, newest first — the judge's evidence. */
|
|
310
|
+
const evidenceOf = (store, entity, limit) => store.db.prepare(`
|
|
311
|
+
SELECT c.raw_line AS line FROM (${currentSql}) c
|
|
312
|
+
WHERE c.conf > 0 AND (c.subject = ? OR c.object = ?)
|
|
313
|
+
ORDER BY c.tx DESC LIMIT ?
|
|
314
|
+
`).all(entity, entity, limit).map(row => row.line);
|
|
315
|
+
/**
|
|
316
|
+
* The judge prompt (spec §27.4): every suggestion with its evidence and
|
|
317
|
+
* each side's current claims. The reply contract is one JSON array of the
|
|
318
|
+
* suggestion numbers that really are the same entity.
|
|
319
|
+
*/
|
|
320
|
+
export const judgePrompt = (store, suggestions) => [
|
|
321
|
+
'You are reviewing entity-alias suggestions for a CAVE knowledge store — one atomic claim',
|
|
322
|
+
'per line: subject VERB object, or subject HAS attribute: value, with optional @context,',
|
|
323
|
+
'#tag and @ N% confidence.',
|
|
324
|
+
'',
|
|
325
|
+
'Each numbered suggestion proposes that two names denote the SAME real-world entity.',
|
|
326
|
+
'Below each suggestion are the current claims about either name. Confirm a suggestion ONLY',
|
|
327
|
+
'when the claims are consistent with one entity — tolerate spelling, casing and phrasing',
|
|
328
|
+
'drift, but never confirm names whose claims describe different things (different types,',
|
|
329
|
+
'contradicting values, distinct roles in the same relation). Judge conservatively: when',
|
|
330
|
+
'unsure, do not confirm.',
|
|
331
|
+
'',
|
|
332
|
+
...suggestions.flatMap((suggestion, index) => [
|
|
333
|
+
`S${index + 1}: ${suggestion.line}`,
|
|
334
|
+
...evidenceOf(store, suggestion.entity, 8).map(line => ` ${line}`),
|
|
335
|
+
...evidenceOf(store, suggestion.canonical, 8).map(line => ` ${line}`),
|
|
336
|
+
''
|
|
337
|
+
]),
|
|
338
|
+
'Reply with ONLY a JSON array of the suggestion numbers that ARE the same entity,',
|
|
339
|
+
'e.g. [1, 3]. Reply [] when none are.'
|
|
340
|
+
].join('\n');
|
|
341
|
+
/**
|
|
342
|
+
* Parses the judge's reply into validated 0-based suggestion indices. The
|
|
343
|
+
* *last* well-formed JSON array wins (agents often think aloud before
|
|
344
|
+
* answering); non-integer, out-of-range and duplicate entries are dropped
|
|
345
|
+
* rather than failing the run.
|
|
346
|
+
*/
|
|
347
|
+
export const parseJudgeReply = (output, count) => {
|
|
348
|
+
let parsed;
|
|
349
|
+
let at = output.indexOf('[');
|
|
350
|
+
while (at !== -1) {
|
|
351
|
+
const end = output.indexOf(']', at);
|
|
352
|
+
if (end === -1) {
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
try {
|
|
356
|
+
parsed = JSON.parse(output.slice(at, end + 1));
|
|
357
|
+
at = output.indexOf('[', end + 1);
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
at = output.indexOf('[', at + 1);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
if (!Array.isArray(parsed)) {
|
|
364
|
+
return [];
|
|
365
|
+
}
|
|
366
|
+
const kept = new Set();
|
|
367
|
+
for (const entry of parsed) {
|
|
368
|
+
if (typeof entry === 'number' && Number.isInteger(entry) && entry >= 1 && entry <= count) {
|
|
369
|
+
kept.add(entry - 1);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return [...kept].sort((a, b) => a - b);
|
|
373
|
+
};
|
|
374
|
+
//# sourceMappingURL=suggest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../src/suggest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@cavelang/cli/sync` — store merge (spec §28).
|
|
3
|
+
*
|
|
4
|
+
* Merge append-only CAVE stores by row identity: rows absent by id copy
|
|
5
|
+
* verbatim, present ids skip — idempotent, transitive, conflict-free by
|
|
6
|
+
* construction (§9.4 coexistence). Sources are store files (`syncDb`) or
|
|
7
|
+
* §28.4 transaction-annotated canonical text (`syncText`,
|
|
8
|
+
* `cave export --tx`); effective merges append a `SYNCED-INTO` record
|
|
9
|
+
* claim, and merged transaction ids feed the §28.2 receive rule.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { open } from '@cavelang/store'
|
|
13
|
+
* import { syncDb } from '@cavelang/cli/sync'
|
|
14
|
+
*
|
|
15
|
+
* const store = open('main.db')
|
|
16
|
+
* syncDb(store, 'laptop.db', { from: 'laptop', into: 'main' })
|
|
17
|
+
* // → { merged: 42, skipped: 108, edges: 17, record: 'store/laptop SYNCED-INTO store/main ; …' }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export { isStoreFile, labelOf, sanitizeLabel, syncDb, syncFile, syncText } from './sync.ts';
|
|
21
|
+
export type { SyncOptions, SyncProblem, SyncReport } from './sync.ts';
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAC3F,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@cavelang/cli/sync` — store merge (spec §28).
|
|
3
|
+
*
|
|
4
|
+
* Merge append-only CAVE stores by row identity: rows absent by id copy
|
|
5
|
+
* verbatim, present ids skip — idempotent, transitive, conflict-free by
|
|
6
|
+
* construction (§9.4 coexistence). Sources are store files (`syncDb`) or
|
|
7
|
+
* §28.4 transaction-annotated canonical text (`syncText`,
|
|
8
|
+
* `cave export --tx`); effective merges append a `SYNCED-INTO` record
|
|
9
|
+
* claim, and merged transaction ids feed the §28.2 receive rule.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { open } from '@cavelang/store'
|
|
13
|
+
* import { syncDb } from '@cavelang/cli/sync'
|
|
14
|
+
*
|
|
15
|
+
* const store = open('main.db')
|
|
16
|
+
* syncDb(store, 'laptop.db', { from: 'laptop', into: 'main' })
|
|
17
|
+
* // → { merged: 42, skipped: 108, edges: 17, record: 'store/laptop SYNCED-INTO store/main ; …' }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export { isStoreFile, labelOf, sanitizeLabel, syncDb, syncFile, syncText } from "./sync.js";
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA"}
|