@gird/ccli 2.19.0 → 2.21.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 +4 -0
- package/dist/agent/ai.js.map +1 -1
- package/dist/agent/model-catalog.js +100 -0
- package/dist/agent/model-catalog.js.map +1 -0
- package/dist/agent/os.js +291 -2
- package/dist/agent/os.js.map +1 -1
- package/dist/agent/providers/anthropic.js +112 -4
- package/dist/agent/providers/anthropic.js.map +1 -1
- package/dist/agent/rag/db.js +142 -0
- package/dist/agent/rag/db.js.map +1 -0
- package/dist/agent/rag/embedding.js +135 -0
- package/dist/agent/rag/embedding.js.map +1 -0
- package/dist/agent/rag/indexer.js +104 -0
- package/dist/agent/rag/indexer.js.map +1 -0
- package/dist/agent/rag/parser.js +75 -0
- package/dist/agent/rag/parser.js.map +1 -0
- package/dist/agent/rag/search.js +47 -0
- package/dist/agent/rag/search.js.map +1 -0
- package/dist/cli/args/index.js +30 -0
- package/dist/cli/args/index.js.map +1 -1
- package/dist/cli/repl/index.js +4 -3
- package/dist/cli/repl/index.js.map +1 -1
- package/dist/cli/run/index.js +27 -18
- package/dist/cli/run/index.js.map +1 -1
- package/dist/cli/run/task.js +188 -32
- package/dist/cli/run/task.js.map +1 -1
- package/dist/cli/session/checkpoint.js +50 -34
- package/dist/cli/session/checkpoint.js.map +1 -1
- package/dist/cli/slash/config/account.js +84 -0
- package/dist/cli/slash/config/account.js.map +1 -0
- package/dist/cli/slash/config/alias.js +96 -0
- package/dist/cli/slash/config/alias.js.map +1 -0
- package/dist/cli/slash/config/login.js +80 -0
- package/dist/cli/slash/config/login.js.map +1 -0
- package/dist/cli/slash/config/model.js +50 -6
- package/dist/cli/slash/config/model.js.map +1 -1
- package/dist/cli/slash/config/models.js +45 -0
- package/dist/cli/slash/config/models.js.map +1 -0
- package/dist/cli/slash/index.js +25 -1
- package/dist/cli/slash/index.js.map +1 -1
- package/dist/cli/slash/system/agent.js +1 -1
- package/dist/cli/slash/system/agent.js.map +1 -1
- package/dist/cli/slash/system/compact.js +1 -1
- package/dist/cli/slash/system/compact.js.map +1 -1
- package/dist/cli/slash/system/goal.js +1 -1
- package/dist/cli/slash/system/goal.js.map +1 -1
- package/dist/cli/slash/system/help.js +6 -0
- package/dist/cli/slash/system/help.js.map +1 -1
- package/dist/cli/slash/system/indexer.js +25 -0
- package/dist/cli/slash/system/indexer.js.map +1 -0
- package/dist/cli/slash/system/plan.js +1 -1
- package/dist/cli/slash/system/plan.js.map +1 -1
- package/dist/cli/slash/system/revert.js +7 -5
- package/dist/cli/slash/system/revert.js.map +1 -1
- package/dist/cli/slash/system/upgrade.js +13 -0
- package/dist/cli/slash/system/upgrade.js.map +1 -0
- package/dist/cli/stats/index.js +6 -1
- package/dist/cli/stats/index.js.map +1 -1
- package/dist/cli/stats/usage.js +215 -0
- package/dist/cli/stats/usage.js.map +1 -0
- package/dist/cli/upgrade.js +90 -0
- package/dist/cli/upgrade.js.map +1 -0
- package/dist/config/config.js +344 -10
- package/dist/config/config.js.map +1 -1
- package/dist/config/credentials.js +104 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/project-context.js +135 -0
- package/dist/config/project-context.js.map +1 -0
- package/dist/harness/index.js +11 -3
- package/dist/harness/index.js.map +1 -1
- package/dist/index.js +31 -2
- package/dist/index.js.map +1 -1
- package/dist/server/webui-content.js +2 -0
- package/dist/server/webui-content.js.map +1 -0
- package/dist/server/webui.js +15 -4
- package/dist/server/webui.js.map +1 -1
- package/dist/tools/{skill-tool.js → agent/skill-tool.js} +1 -1
- package/dist/tools/agent/skill-tool.js.map +1 -0
- package/dist/tools/{todo.js → agent/todo.js} +1 -1
- package/dist/tools/agent/todo.js.map +1 -0
- package/dist/tools/agent/web-fetch.js.map +1 -0
- package/dist/tools/{edit-file.js → fs/edit-file.js} +8 -14
- package/dist/tools/fs/edit-file.js.map +1 -0
- package/dist/tools/fs/glob.js.map +1 -0
- package/dist/tools/{grep.js → fs/grep.js} +1 -1
- package/dist/tools/fs/grep.js.map +1 -0
- package/dist/tools/fs/list-dir.js +95 -0
- package/dist/tools/fs/list-dir.js.map +1 -0
- package/dist/tools/{read-file.js → fs/read-file.js} +1 -1
- package/dist/tools/fs/read-file.js.map +1 -0
- package/dist/tools/{write-file.js → fs/write-file.js} +8 -15
- package/dist/tools/fs/write-file.js.map +1 -0
- package/dist/tools/index.js +13 -11
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/rag/search.js +65 -0
- package/dist/tools/rag/search.js.map +1 -0
- package/dist/tools/shared.js.map +1 -1
- package/dist/tools/shell/bash-background.js.map +1 -0
- package/dist/tools/shell/bash-output.js.map +1 -0
- package/dist/tools/shell/bash.js.map +1 -0
- package/dist/tools/shell/kill-bash.js.map +1 -0
- package/package.json +3 -1
- package/dist/tools/bash-background.js.map +0 -1
- package/dist/tools/bash-output.js.map +0 -1
- package/dist/tools/bash.js.map +0 -1
- package/dist/tools/edit-file.js.map +0 -1
- package/dist/tools/glob.js.map +0 -1
- package/dist/tools/grep.js.map +0 -1
- package/dist/tools/kill-bash.js.map +0 -1
- package/dist/tools/list-dir.js +0 -45
- package/dist/tools/list-dir.js.map +0 -1
- package/dist/tools/read-file.js.map +0 -1
- package/dist/tools/skill-tool.js.map +0 -1
- package/dist/tools/todo.js.map +0 -1
- package/dist/tools/web-fetch.js.map +0 -1
- package/dist/tools/write-file.js.map +0 -1
- /package/dist/tools/{web-fetch.js → agent/web-fetch.js} +0 -0
- /package/dist/tools/{glob.js → fs/glob.js} +0 -0
- /package/dist/tools/{bash-background.js → shell/bash-background.js} +0 -0
- /package/dist/tools/{bash-output.js → shell/bash-output.js} +0 -0
- /package/dist/tools/{bash.js → shell/bash.js} +0 -0
- /package/dist/tools/{kill-bash.js → shell/kill-bash.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/agent/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/agent/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAShD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,OAAO,eAAe;IAChB,MAAM,CAAY;IAClB,KAAK,CAAS;IACd,WAAW,CAAU;IAE7B,oDAAoD;IACpD,YAAY,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC;YACxB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,4DAA4D;QAC5D,IAAI,CAAC,WAAW;YACZ,MAAM,CAAC,WAAW,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7E,CAAC;IAED,8CAA8C;IAC9C,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,iCAAiC;IACjC,QAAQ,CAAC,KAAa;QAClB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,oDAAoD;IACpD,cAAc;QACV,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACZ,OAAO;YACH,0BAA0B;YAC1B,4BAA4B;YAC5B,4BAA4B;YAC5B,4BAA4B;YAC5B,wBAAwB;YACxB,0BAA0B;YAC1B,yBAAyB;SAC5B,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,IAAI,CACN,QAAuB,EACvB,OAA+B,EAC/B,OAAqB,EACrB,WAAoC,EACpC,mBAIS;QAET,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,mBAAmB,CAC/D,QAAQ,EACR,IAAI,CAAC,WAAW,CACnB,CAAC;QACF,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI;YAChB,MAAM;YACN,QAAQ,EAAE,iBAAiB;YAC3B,MAAM,EAAE,IAAI;YACZ,GAAG,CAAC,OAAO,EAAE,YAAY;gBACrB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACI,KAAK;oBACL,GAAG,CAAC,OAAO,EAAE,YAAY;wBACrB,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAW,EAAE;wBAC3C,CAAC,CAAC,EAAE,CAAC;iBACZ,CAAC;SACX,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,MAAM,GAAG,GAA6B,EAAE,CAAC;QACzC,IAAI,KAAwB,CAAC;QAC7B,qDAAqD;QACrD,qDAAqD;QACrD,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACjC,MAAM,CAAC,GAAI,KAAa,CAAC,OAAO,EAAE,KAAK,CAAC;gBACxC,IAAI,CAAC,EAAE,CAAC;oBACJ,WAAW,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC;oBAClC,mBAAmB,GAAG,CAAC,CAAC,2BAA2B,IAAI,CAAC,CAAC;oBACzD,eAAe,GAAG,CAAC,CAAC,uBAAuB,IAAI,CAAC,CAAC;gBACrD,CAAC;YACL,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBAC9C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACpC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;oBAC/C,WAAW,EAAE,CAAE,KAAK,CAAC,KAAa,CAAC,QAAQ,CAAC,CAAC;gBACjD,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;oBACjD,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC5B,IAAI,EAAE,EAAE,CAAC;wBACL,EAAE,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;wBACzC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;4BACV,mBAAmB,EAAE,CACjB,KAAK,CAAC,KAAK,EACX,EAAE,CAAC,IAAI,EACP,EAAE,CAAC,SAAS,CACf,CAAC;wBACN,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBAC9C,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC1C,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;wBACf,EAAE,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE;wBAC1B,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI;wBAC9B,SAAS,EAAE,EAAE;qBAChB,CAAC;gBACN,CAAC;YACL,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAI,KAAa,CAAC,KAAK,CAAC;gBAC/B,IAAI,CAAC,EAAE,CAAC;oBACJ,MAAM,YAAY,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;oBAC1D,MAAM,gBAAgB,GAAG,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;oBAC9C,KAAK,GAAG;wBACJ,YAAY;wBACZ,gBAAgB;wBAChB,WAAW,EAAE,YAAY,GAAG,gBAAgB;qBAC/C,CAAC;oBACF,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;wBAC1B,KAAK,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;oBACpD,CAAC;oBACD,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;wBACtB,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;oBAC5C,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAC7B,GAAG,CAAC,MAAM,CAAC;aACX,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;aACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;CACJ;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAC/B,QAAuB,EACvB,WAAW,GAAG,KAAK;IAKnB,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,iBAAiB,GAAsC,EAAE,CAAC;IAChE,MAAM,iBAAiB,GAAa,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,SAAS;QACb,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,wCAAwC;YACxC,MAAM,UAAU,GAAI,CAAS,CAAC,YAAY,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1C,SAAS;YACb,CAAC;YACD,MAAM,UAAU,GACZ,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1E,iBAAiB,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,UAAU;wBACvB,OAAO,EAAE,UAAU;qBACqB;iBAC/C;aACJ,CAAC,CAAC;YACH,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YACnE,SAAS;QACb,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,MAAM,OAAO,GAA2C,EAAE,CAAC;YAC3D,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC7C,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,MAAM,SAAS,GAAI,CAAS,CAAC,UAAU,CAAC;YACxC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;oBACzB,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;wBACjC,SAAS;oBACb,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,UAAU;wBAChB,EAAE,EAAE,EAAE,CAAC,EAAE;wBACT,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;wBAC7B,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,IAAI,IAAI,CAAC;qBACX,CAAC,CAAC;oBAC3C,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;gBAClC,CAAC;YACL,CAAC;YAED,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;YACvD,SAAS;QACb,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,0DAA0D;gBAC1D,MAAM,MAAM,GAA2C,EAAE,CAAC;gBAC1D,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,OAAgB,EAAE,CAAC;oBACpC,IAAI,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;wBACxB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;oBACnD,CAAC;yBAAM,IAAI,IAAI,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;wBACpC,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;wBACrD,IAAI,GAAG;4BAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9B,CAAC;gBACL,CAAC;gBACD,iBAAiB,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;iBAC3C,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,iBAAiB,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;iBACrC,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,+DAA+D;IAC/D,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GACR,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,MAAM;YACZ,IAAI;YACJ,GAAG,CAAC,CAAC,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC;gBAC5B,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;gBAC1C,CAAC,CAAC,EAAE,CAAC;SACZ,CAAC,CAAC;QACL,CAAC,CAAC,YAAY,CAAC;IAEvB,yCAAyC;IACzC,yDAAyD;IACzD,+BAA+B;IAC/B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChD,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IACD,MAAM,gBAAgB,GAAG,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,oBAAoB,GAAG,CAAC,GAAG,gBAAgB,CAAC;IAClD,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,IAAI,OAAO,GAAG,oBAAoB,EAAE,EAAE,EAAE,EAAE,CAAC;QAC/E,4BAA4B;QAC5B,IAAI,EAAE,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAE5C,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,UAAU,GAAG,6BAA6B,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,UAAU,IAAI,IAAI;YAAE,SAAS;QAEjC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC5B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,iBAAiB,CAAC,GAAG,CAAC,GAAG;gBACrB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACL;wBACI,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,OAAO;wBACb,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;qBACvC;iBACJ;aACJ,CAAC;QACN,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CACrC,CAAC,CAAC,EAA0C,EAAE,CAC1C,CAAC,CAAC,IAAI,KAAK,MAAM,CACxB,CAAC;YACF,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAsC,CAAC;gBACxE,UAAU,CAAC,WAAW,CAAC,GAAG;oBACtB,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;iBACvC,CAAC;gBACF,iBAAiB,CAAC,GAAG,CAAC,GAAG;oBACrB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,UAAU;iBACtB,CAAC;YACN,CAAC;QACL,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;AACnD,CAAC;AAED,gDAAgD;AAChD,SAAS,6BAA6B,CAClC,OAAwD;IAExD,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC;IACvD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACtC,MAAM,CAAC,GAAI,KAAiD,CAAC,OAAO,CAAC;YACrE,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;gBACxB,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;YACvB,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,KAAK,IAAI,CAAU,EAAE,CAAC;oBAC7B,IACI,OAAO,KAAK,KAAK,QAAQ;wBACzB,KAAK;wBACL,KAAK,CAAC,IAAI,KAAK,MAAM,EACvB,CAAC;wBACC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;oBACtC,CAAC;yBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;wBACnC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;oBAC3B,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;8CAC8C;AAC9C,MAAM,UAAU,gBAAgB,CAC5B,YAAuB;IAEvB,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI;QACrB,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW;QACnC,YAAY,EAAE;YACV,IAAI,EAAE,QAAiB;YACvB,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU;SAC3B;KACJ,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CACxB,GAAY;IAEZ,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO;QACH,IAAI,EAAE,OAAO;QACb,MAAM,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,CAAC,CAAC,CAAC,CAAuD;YACtE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;SACb;KACJ,CAAC;AACN,CAAC;AAED,wDAAwD;AACxD,SAAS,SAAS,CAAC,IAAY;IAC3B,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { mkdirSync } from 'node:fs';
|
|
4
|
+
/**
|
|
5
|
+
* 初始化代码大纲 SQLite 数据库。
|
|
6
|
+
* 数据库存放在项目工作空间根目录的 .ccli/codebase.sqlite 中。
|
|
7
|
+
*/
|
|
8
|
+
export function initDb(workspacePath) {
|
|
9
|
+
const ccliDir = join(workspacePath, '.ccli');
|
|
10
|
+
mkdirSync(ccliDir, { recursive: true });
|
|
11
|
+
const dbPath = join(ccliDir, 'codebase.sqlite');
|
|
12
|
+
const db = new DatabaseSync(dbPath);
|
|
13
|
+
// 初始化数据表
|
|
14
|
+
db.exec(`
|
|
15
|
+
CREATE TABLE IF NOT EXISTS files (
|
|
16
|
+
path TEXT PRIMARY KEY,
|
|
17
|
+
mtime INTEGER NOT NULL
|
|
18
|
+
);
|
|
19
|
+
`);
|
|
20
|
+
db.exec(`
|
|
21
|
+
CREATE TABLE IF NOT EXISTS symbols (
|
|
22
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
23
|
+
file_path TEXT NOT NULL,
|
|
24
|
+
name TEXT NOT NULL,
|
|
25
|
+
type TEXT NOT NULL,
|
|
26
|
+
start_line INTEGER NOT NULL,
|
|
27
|
+
end_line INTEGER NOT NULL,
|
|
28
|
+
FOREIGN KEY(file_path) REFERENCES files(path) ON DELETE CASCADE
|
|
29
|
+
);
|
|
30
|
+
`);
|
|
31
|
+
// 动态增加向量与哈希缓存字段(用于老表平滑升级)
|
|
32
|
+
try {
|
|
33
|
+
db.exec(`ALTER TABLE symbols ADD COLUMN content_hash TEXT;`);
|
|
34
|
+
}
|
|
35
|
+
catch { }
|
|
36
|
+
try {
|
|
37
|
+
db.exec(`ALTER TABLE symbols ADD COLUMN embedding TEXT;`);
|
|
38
|
+
}
|
|
39
|
+
catch { }
|
|
40
|
+
// 创建索引加快符号名搜索和文件范围反查
|
|
41
|
+
db.exec(`
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_name ON symbols(name);
|
|
43
|
+
CREATE INDEX IF NOT EXISTS idx_symbols_file ON symbols(file_path);
|
|
44
|
+
`);
|
|
45
|
+
return db;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 记录或更新扫描过的文件与修改时间。
|
|
49
|
+
*/
|
|
50
|
+
export function saveFile(db, path, mtime) {
|
|
51
|
+
const stmt = db.prepare(`
|
|
52
|
+
INSERT INTO files (path, mtime)
|
|
53
|
+
VALUES (?, ?)
|
|
54
|
+
ON CONFLICT(path) DO UPDATE SET mtime = excluded.mtime
|
|
55
|
+
`);
|
|
56
|
+
stmt.run(path, mtime);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 获取某个文件的扫描记录。
|
|
60
|
+
*/
|
|
61
|
+
export function getFile(db, path) {
|
|
62
|
+
const stmt = db.prepare(`SELECT path, mtime FROM files WHERE path = ?`);
|
|
63
|
+
const rows = stmt.all(path);
|
|
64
|
+
if (rows.length === 0)
|
|
65
|
+
return undefined;
|
|
66
|
+
return {
|
|
67
|
+
path: rows[0].path,
|
|
68
|
+
mtime: Number(rows[0].mtime)
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* 清除某个文件已有的所有符号索引(重新扫描前清理)。
|
|
73
|
+
*/
|
|
74
|
+
export function clearFileSymbols(db, path) {
|
|
75
|
+
const stmt = db.prepare(`DELETE FROM symbols WHERE file_path = ?`);
|
|
76
|
+
stmt.run(path);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 清除某个文件的文件扫描历史。
|
|
80
|
+
*/
|
|
81
|
+
export function deleteFileRecord(db, path) {
|
|
82
|
+
const stmt = db.prepare(`DELETE FROM files WHERE path = ?`);
|
|
83
|
+
stmt.run(path);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* 保存一个符号记录。
|
|
87
|
+
*/
|
|
88
|
+
export function saveSymbol(db, filePath, symbol) {
|
|
89
|
+
const stmt = db.prepare(`
|
|
90
|
+
INSERT INTO symbols (file_path, name, type, start_line, end_line, content_hash, embedding)
|
|
91
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
92
|
+
`);
|
|
93
|
+
const embeddingStr = symbol.embedding ? JSON.stringify(symbol.embedding) : null;
|
|
94
|
+
stmt.run(filePath, symbol.name, symbol.type, symbol.startLine, symbol.endLine, symbol.contentHash || null, embeddingStr);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 更新现有符号的向量与哈希数据(用于按需延迟加载 Embedding)。
|
|
98
|
+
*/
|
|
99
|
+
export function updateSymbolEmbedding(db, id, contentHash, embedding) {
|
|
100
|
+
const stmt = db.prepare(`
|
|
101
|
+
UPDATE symbols
|
|
102
|
+
SET content_hash = ?, embedding = ?
|
|
103
|
+
WHERE id = ?
|
|
104
|
+
`);
|
|
105
|
+
stmt.run(contentHash, JSON.stringify(embedding), id);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 获取所有已生成 Embedding 向量的符号,供内存计算相似度检索。
|
|
109
|
+
*/
|
|
110
|
+
export function getAllSymbolsForSearch(db) {
|
|
111
|
+
const stmt = db.prepare(`
|
|
112
|
+
SELECT id, file_path, name, type, start_line, end_line, content_hash, embedding
|
|
113
|
+
FROM symbols
|
|
114
|
+
WHERE embedding IS NOT NULL
|
|
115
|
+
`);
|
|
116
|
+
return stmt.all();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* 获取某个文件下所有没有生成向量、或者 hash 不一致的待更新符号列表。
|
|
120
|
+
*/
|
|
121
|
+
export function getSymbolsPendingEmbedding(db, filePath) {
|
|
122
|
+
const stmt = db.prepare(`
|
|
123
|
+
SELECT id, file_path, name, type, start_line, end_line, content_hash, embedding
|
|
124
|
+
FROM symbols
|
|
125
|
+
WHERE file_path = ?
|
|
126
|
+
`);
|
|
127
|
+
return stmt.all(filePath);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* 打印当前的符号索引统计数据。
|
|
131
|
+
*/
|
|
132
|
+
export function getSymbolStats(db) {
|
|
133
|
+
const fileStmt = db.prepare(`SELECT COUNT(*) as cnt FROM files`);
|
|
134
|
+
const symStmt = db.prepare(`SELECT COUNT(*) as cnt FROM symbols`);
|
|
135
|
+
const fileRows = fileStmt.all();
|
|
136
|
+
const symRows = symStmt.all();
|
|
137
|
+
return {
|
|
138
|
+
filesCount: fileRows[0]?.cnt ?? 0,
|
|
139
|
+
symbolsCount: symRows[0]?.cnt ?? 0
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/agent/rag/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { initDb, updateSymbolEmbedding } from './db.js';
|
|
5
|
+
function getMd5(text) {
|
|
6
|
+
return createHash('md5').update(text).digest('hex');
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 截取并读取指定文件中的代码行片段(自适应支持本地及 SshOS/DockerOS 远程读取)。
|
|
10
|
+
*/
|
|
11
|
+
export async function readCodeSnippet(workspacePath, filePath, startLine, endLine, os) {
|
|
12
|
+
const fullPath = os ? os.resolve(workspacePath, filePath) : join(workspacePath, filePath);
|
|
13
|
+
try {
|
|
14
|
+
let content;
|
|
15
|
+
if (os) {
|
|
16
|
+
content = await os.readFile(fullPath, 'utf8');
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
if (!existsSync(fullPath))
|
|
20
|
+
return '';
|
|
21
|
+
content = readFileSync(fullPath, 'utf8');
|
|
22
|
+
}
|
|
23
|
+
const lines = content.split(/\r?\n/);
|
|
24
|
+
return lines.slice(startLine - 1, endLine).join('\n');
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return '';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 解析最终生效的 Embedding 配置。
|
|
32
|
+
* 优先使用独立的 embeddingApiKey / embeddingBaseURL / embeddingModel,
|
|
33
|
+
* 未配置时再回退到主对话模型的 apiKey / baseURL。
|
|
34
|
+
*/
|
|
35
|
+
export function resolveEmbeddingConfig(config) {
|
|
36
|
+
return {
|
|
37
|
+
apiKey: config.embeddingApiKey ?? config.apiKey,
|
|
38
|
+
baseURL: config.embeddingBaseURL ?? config.baseURL ?? 'https://api.openai.com/v1',
|
|
39
|
+
model: config.embeddingModel ?? 'text-embedding-3-small',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 调用 AI 接口生成输入文本的高维特征向量 (Embedding)。
|
|
44
|
+
* 优先兼容 OpenAI / Gemini / 千问等任何主流 OpenAI 格式的向量接口。
|
|
45
|
+
*/
|
|
46
|
+
export async function getEmbedding(text, config) {
|
|
47
|
+
const { apiKey, baseURL, model } = resolveEmbeddingConfig(config);
|
|
48
|
+
if (!apiKey) {
|
|
49
|
+
// 兜底返回 1536 维全零向量,防止在未配置 key 时系统直接崩溃或死锁
|
|
50
|
+
return new Array(1536).fill(0);
|
|
51
|
+
}
|
|
52
|
+
// 兼容端点自适应拼接
|
|
53
|
+
const url = baseURL.endsWith('/v1') ? `${baseURL}/embeddings` : `${baseURL}/v1/embeddings`;
|
|
54
|
+
const response = await fetch(url, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: {
|
|
57
|
+
'Content-Type': 'application/json',
|
|
58
|
+
'Authorization': `Bearer ${apiKey}`
|
|
59
|
+
},
|
|
60
|
+
body: JSON.stringify({
|
|
61
|
+
model: model,
|
|
62
|
+
input: text
|
|
63
|
+
}),
|
|
64
|
+
signal: AbortSignal.timeout(10000)
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
throw new Error(`Embedding API error: ${response.statusText} (${response.status})`);
|
|
68
|
+
}
|
|
69
|
+
const data = await response.json();
|
|
70
|
+
if (!data?.data?.[0]?.embedding) {
|
|
71
|
+
throw new Error(`Invalid response format from Embedding API`);
|
|
72
|
+
}
|
|
73
|
+
return data.data[0].embedding;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 计算两个浮点数向量之间的余弦相似度 (Cosine Similarity)。
|
|
77
|
+
* 范围在 [-1, 1] 之间,值越大代表两段文本语义越相似。
|
|
78
|
+
*/
|
|
79
|
+
export function cosineSimilarity(vecA, vecB) {
|
|
80
|
+
let dotProduct = 0;
|
|
81
|
+
let normA = 0;
|
|
82
|
+
let normB = 0;
|
|
83
|
+
const length = Math.min(vecA.length, vecB.length);
|
|
84
|
+
for (let i = 0; i < length; i++) {
|
|
85
|
+
dotProduct += vecA[i] * vecB[i];
|
|
86
|
+
normA += vecA[i] * vecA[i];
|
|
87
|
+
normB += vecB[i] * vecB[i];
|
|
88
|
+
}
|
|
89
|
+
if (normA === 0 || normB === 0)
|
|
90
|
+
return 0;
|
|
91
|
+
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 遍历数据库中大纲里的所有符号,增量计算它们的 Embedding 并写入缓存。
|
|
95
|
+
*/
|
|
96
|
+
export async function syncEmbeddings(workspacePath, config, onProgress) {
|
|
97
|
+
const log = onProgress ?? (() => { });
|
|
98
|
+
const db = initDb(workspacePath);
|
|
99
|
+
const stmt = db.prepare(`
|
|
100
|
+
SELECT id, file_path, name, type, start_line, end_line, content_hash, embedding
|
|
101
|
+
FROM symbols
|
|
102
|
+
`);
|
|
103
|
+
const allSymbols = stmt.all();
|
|
104
|
+
let updated = 0;
|
|
105
|
+
let skipped = 0;
|
|
106
|
+
log(`🧬 正在分析 ${allSymbols.length} 个符号的 Embedding 缓存状态...`);
|
|
107
|
+
for (const sym of allSymbols) {
|
|
108
|
+
const snippet = await readCodeSnippet(workspacePath, sym.file_path, sym.start_line, sym.end_line);
|
|
109
|
+
if (!snippet) {
|
|
110
|
+
skipped++;
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
const currentHash = getMd5(snippet.trim());
|
|
114
|
+
const hasCachedVec = sym.embedding && sym.content_hash === currentHash;
|
|
115
|
+
if (hasCachedVec) {
|
|
116
|
+
skipped++;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
// 缓存失效或缺失,重新拉取向量
|
|
120
|
+
try {
|
|
121
|
+
log(` -> 正在生成符号向量 [${sym.file_path}]: ${sym.name}...`);
|
|
122
|
+
const vector = await getEmbedding(snippet, config);
|
|
123
|
+
updateSymbolEmbedding(db, sym.id, currentHash, vector);
|
|
124
|
+
updated++;
|
|
125
|
+
// 简单的防频控延迟(20ms)
|
|
126
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
127
|
+
}
|
|
128
|
+
catch (e) {
|
|
129
|
+
log(`⚠️ 生成符号 [${sym.name}] 向量失败: ${e.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
log(`✨ 向量同步完成!本次生成: ${updated},跳过复用: ${skipped}。`);
|
|
133
|
+
return { total: allSymbols.length, updated, skipped };
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=embedding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedding.js","sourceRoot":"","sources":["../../../src/agent/rag/embedding.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { readdirSync, statSync, readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join, relative, extname } from 'node:path';
|
|
3
|
+
import { initDb, getFile, clearFileSymbols, saveSymbol, saveFile, deleteFileRecord, getSymbolStats } from './db.js';
|
|
4
|
+
import { parseSourceFile } from './parser.js';
|
|
5
|
+
const ALLOWED_EXTENSIONS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs']);
|
|
6
|
+
const EXCLUDED_DIRS = new Set(['node_modules', 'dist', 'build', '.git', '.ccli', '.gemini']);
|
|
7
|
+
/**
|
|
8
|
+
* 遍历并收集所有的待扫描代码文件。
|
|
9
|
+
*/
|
|
10
|
+
function collectFiles(dirPath, rootDir, filesList) {
|
|
11
|
+
if (!existsSync(dirPath))
|
|
12
|
+
return;
|
|
13
|
+
const items = readdirSync(dirPath);
|
|
14
|
+
for (const item of items) {
|
|
15
|
+
if (item.startsWith('.'))
|
|
16
|
+
continue; // 忽略任何隐藏文件/目录
|
|
17
|
+
const fullPath = join(dirPath, item);
|
|
18
|
+
let stat;
|
|
19
|
+
try {
|
|
20
|
+
stat = statSync(fullPath);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (stat.isDirectory()) {
|
|
26
|
+
if (EXCLUDED_DIRS.has(item))
|
|
27
|
+
continue;
|
|
28
|
+
collectFiles(fullPath, rootDir, filesList);
|
|
29
|
+
}
|
|
30
|
+
else if (stat.isFile()) {
|
|
31
|
+
const ext = extname(item);
|
|
32
|
+
if (ALLOWED_EXTENSIONS.has(ext)) {
|
|
33
|
+
filesList.push(fullPath);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 扫描并增量构建项目代码大纲索引。
|
|
40
|
+
* @param workspacePath 项目根目录物理路径
|
|
41
|
+
* @param onProgress 进度汇报回调函数
|
|
42
|
+
*/
|
|
43
|
+
export function buildIndex(workspacePath, onProgress) {
|
|
44
|
+
const log = onProgress ?? (() => { });
|
|
45
|
+
log('🔎 正在初始化本地代码符号数据库...');
|
|
46
|
+
const db = initDb(workspacePath);
|
|
47
|
+
log('📂 正在扫描项目文件结构...');
|
|
48
|
+
const filesList = [];
|
|
49
|
+
collectFiles(workspacePath, workspacePath, filesList);
|
|
50
|
+
log(`📊 发现 ${filesList.length} 个代码文件,开始进行增量解析...`);
|
|
51
|
+
const currentFilesRelative = new Set();
|
|
52
|
+
let scannedCount = 0;
|
|
53
|
+
let parsedCount = 0;
|
|
54
|
+
for (const absolutePath of filesList) {
|
|
55
|
+
const relativePath = relative(workspacePath, absolutePath);
|
|
56
|
+
currentFilesRelative.add(relativePath);
|
|
57
|
+
const mtime = statSync(absolutePath).mtimeMs;
|
|
58
|
+
const cached = getFile(db, relativePath);
|
|
59
|
+
// 增量检查:如果修改时间一致,跳过解析
|
|
60
|
+
if (cached && cached.mtime === mtime) {
|
|
61
|
+
scannedCount++;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// 解析文件并提取符号
|
|
65
|
+
try {
|
|
66
|
+
const content = readFileSync(absolutePath, 'utf8');
|
|
67
|
+
const symbols = parseSourceFile(relativePath, content);
|
|
68
|
+
// 写入数据库:先保存文件记录,满足外键约束
|
|
69
|
+
saveFile(db, relativePath, mtime);
|
|
70
|
+
clearFileSymbols(db, relativePath);
|
|
71
|
+
for (const sym of symbols) {
|
|
72
|
+
saveSymbol(db, relativePath, sym);
|
|
73
|
+
}
|
|
74
|
+
parsedCount++;
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
log(`⚠️ 无法解析文件 ${relativePath}: ${e.message}`);
|
|
78
|
+
}
|
|
79
|
+
scannedCount++;
|
|
80
|
+
}
|
|
81
|
+
// 清理已经被删除的文件索引
|
|
82
|
+
log('🧹 正在清理失效的废弃索引...');
|
|
83
|
+
const allDbFilesStmt = db.prepare(`SELECT path FROM files`);
|
|
84
|
+
const dbFiles = allDbFilesStmt.all();
|
|
85
|
+
let deletedCount = 0;
|
|
86
|
+
for (const row of dbFiles) {
|
|
87
|
+
const dbPath = row.path;
|
|
88
|
+
if (!currentFilesRelative.has(dbPath)) {
|
|
89
|
+
// 在磁盘上已找不到该文件,执行物理清理
|
|
90
|
+
clearFileSymbols(db, dbPath);
|
|
91
|
+
deleteFileRecord(db, dbPath);
|
|
92
|
+
deletedCount++;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const stats = getSymbolStats(db);
|
|
96
|
+
log(`✨ 索引同步完成!`);
|
|
97
|
+
if (parsedCount > 0)
|
|
98
|
+
log(` -> 新增/修改解析: ${parsedCount} 个文件`);
|
|
99
|
+
if (deletedCount > 0)
|
|
100
|
+
log(` -> 清理失效文件: ${deletedCount} 个`);
|
|
101
|
+
log(` -> 库中当前状态: 共分析 ${stats.filesCount} 个文件,发现 ${stats.symbolsCount} 个符号。`);
|
|
102
|
+
return stats;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../../src/agent/rag/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
function getMd5(text) {
|
|
4
|
+
return createHash('md5').update(text).digest('hex');
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* 使用 TypeScript Compiler API 解析文件大纲,抓取类、函数、方法、接口和变量定义,
|
|
8
|
+
* 并自动截取代码正文计算 MD5 校验和。
|
|
9
|
+
*/
|
|
10
|
+
export function parseSourceFile(filePath, content) {
|
|
11
|
+
const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
|
|
12
|
+
const symbols = [];
|
|
13
|
+
function visit(node) {
|
|
14
|
+
let name = '';
|
|
15
|
+
let type = '';
|
|
16
|
+
if (ts.isClassDeclaration(node) && node.name) {
|
|
17
|
+
name = node.name.text;
|
|
18
|
+
type = 'class';
|
|
19
|
+
}
|
|
20
|
+
else if (ts.isFunctionDeclaration(node) && node.name) {
|
|
21
|
+
name = node.name.text;
|
|
22
|
+
type = 'function';
|
|
23
|
+
}
|
|
24
|
+
else if (ts.isInterfaceDeclaration(node) && node.name) {
|
|
25
|
+
name = node.name.text;
|
|
26
|
+
type = 'interface';
|
|
27
|
+
}
|
|
28
|
+
else if (ts.isMethodDeclaration(node) && node.name) {
|
|
29
|
+
if (ts.isIdentifier(node.name)) {
|
|
30
|
+
name = node.name.text;
|
|
31
|
+
type = 'method';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (ts.isModuleDeclaration(node) && node.name) {
|
|
35
|
+
name = node.name.text;
|
|
36
|
+
type = 'namespace';
|
|
37
|
+
}
|
|
38
|
+
else if (ts.isVariableStatement(node)) {
|
|
39
|
+
// 支持 export const x = ... 等变量声明的符号解析与哈希
|
|
40
|
+
for (const decl of node.declarationList.declarations) {
|
|
41
|
+
if (ts.isIdentifier(decl.name)) {
|
|
42
|
+
const varName = decl.name.text;
|
|
43
|
+
const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
|
|
44
|
+
const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());
|
|
45
|
+
const codeText = content.substring(node.getStart(sourceFile), node.getEnd());
|
|
46
|
+
const contentHash = getMd5(codeText.trim());
|
|
47
|
+
symbols.push({
|
|
48
|
+
name: varName,
|
|
49
|
+
type: 'variable',
|
|
50
|
+
startLine: start.line + 1,
|
|
51
|
+
endLine: end.line + 1,
|
|
52
|
+
contentHash
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (name && type) {
|
|
58
|
+
const start = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
|
|
59
|
+
const end = sourceFile.getLineAndCharacterOfPosition(node.getEnd());
|
|
60
|
+
const codeText = content.substring(node.getStart(sourceFile), node.getEnd());
|
|
61
|
+
const contentHash = getMd5(codeText.trim());
|
|
62
|
+
symbols.push({
|
|
63
|
+
name,
|
|
64
|
+
type,
|
|
65
|
+
startLine: start.line + 1,
|
|
66
|
+
endLine: end.line + 1,
|
|
67
|
+
contentHash
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
ts.forEachChild(node, visit);
|
|
71
|
+
}
|
|
72
|
+
ts.forEachChild(sourceFile, visit);
|
|
73
|
+
return symbols;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/agent/rag/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { initDb, getAllSymbolsForSearch } from './db.js';
|
|
2
|
+
import { getEmbedding, cosineSimilarity, readCodeSnippet } from './embedding.js';
|
|
3
|
+
/**
|
|
4
|
+
* 本地代码库模糊语义检索。
|
|
5
|
+
* 将自然语言转化为向量,计算 SQLite 符号库的余弦相似度并按匹配度倒序返回。
|
|
6
|
+
* 支持 RuntimeOS 跨环境读取真实文件内容。
|
|
7
|
+
*/
|
|
8
|
+
export async function codebaseSearch(query, config, workspacePath, limit = 5, os) {
|
|
9
|
+
const db = initDb(workspacePath);
|
|
10
|
+
// 1. 获取输入文本的向量坐标
|
|
11
|
+
const queryVector = await getEmbedding(query, config);
|
|
12
|
+
// 2. 从本地 SQLite 获取所有已同步的符号及向量
|
|
13
|
+
const dbSymbols = getAllSymbolsForSearch(db);
|
|
14
|
+
// 3. 在内存中极速计算余弦相似度并评分排序
|
|
15
|
+
const scored = dbSymbols.map(sym => {
|
|
16
|
+
let vec = [];
|
|
17
|
+
try {
|
|
18
|
+
vec = JSON.parse(sym.embedding || '[]');
|
|
19
|
+
}
|
|
20
|
+
catch { }
|
|
21
|
+
const similarity = cosineSimilarity(queryVector, vec);
|
|
22
|
+
return {
|
|
23
|
+
filePath: sym.file_path,
|
|
24
|
+
name: sym.name,
|
|
25
|
+
type: sym.type,
|
|
26
|
+
startLine: sym.start_line,
|
|
27
|
+
endLine: sym.end_line,
|
|
28
|
+
similarity
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
// 过滤掉完全不相关的项,并按评分从高到低截取前 N 项
|
|
32
|
+
const topScored = scored
|
|
33
|
+
.filter(item => item.similarity > 0)
|
|
34
|
+
.sort((a, b) => b.similarity - a.similarity)
|
|
35
|
+
.slice(0, limit);
|
|
36
|
+
// 4. 从本地源文件中读取命中的代码段正文(支持 SshOS/DockerOS 远程或本地 OS)
|
|
37
|
+
const results = [];
|
|
38
|
+
for (const item of topScored) {
|
|
39
|
+
const code = await readCodeSnippet(workspacePath, item.filePath, item.startLine, item.endLine, os);
|
|
40
|
+
results.push({
|
|
41
|
+
...item,
|
|
42
|
+
code
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return results;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/agent/rag/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAcjF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,KAAa,EACb,MAAc,EACd,aAAqB,EACrB,KAAK,GAAG,CAAC,EACT,EAAc;IAEd,MAAM,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAEjC,iBAAiB;IACjB,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEtD,8BAA8B;IAC9B,MAAM,SAAS,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC;IAE7C,wBAAwB;IACxB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC/B,IAAI,GAAG,GAAa,EAAE,CAAC;QACvB,IAAI,CAAC;YACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;QAEV,MAAM,UAAU,GAAG,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO;YACH,QAAQ,EAAE,GAAG,CAAC,SAAS;YACvB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,UAAU;YACzB,OAAO,EAAE,GAAG,CAAC,QAAQ;YACrB,UAAU;SACb,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,6BAA6B;IAC7B,MAAM,SAAS,GAAG,MAAM;SACnB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;SACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;SAC3C,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAErB,mDAAmD;IACnD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACnG,OAAO,CAAC,IAAI,CAAC;YACT,GAAG,IAAI;YACP,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
|
package/dist/cli/args/index.js
CHANGED
|
@@ -11,6 +11,7 @@ export function parseArgs(argv) {
|
|
|
11
11
|
yes: false,
|
|
12
12
|
noHooks: false,
|
|
13
13
|
project: false,
|
|
14
|
+
upgrade: false,
|
|
14
15
|
unknown: [],
|
|
15
16
|
positionals: [],
|
|
16
17
|
};
|
|
@@ -35,6 +36,32 @@ export function parseArgs(argv) {
|
|
|
35
36
|
case '--project':
|
|
36
37
|
result.project = true;
|
|
37
38
|
break;
|
|
39
|
+
case '--docker': {
|
|
40
|
+
const next = argv[i + 1];
|
|
41
|
+
if (next && !next.startsWith('-')) {
|
|
42
|
+
result.docker = next;
|
|
43
|
+
i++;
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
result.unknown.push(arg);
|
|
47
|
+
}
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case '--remote': {
|
|
51
|
+
const next = argv[i + 1];
|
|
52
|
+
if (next && !next.startsWith('-')) {
|
|
53
|
+
result.remote = next;
|
|
54
|
+
i++;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
result.unknown.push(arg);
|
|
58
|
+
}
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
case '--upgrade': {
|
|
62
|
+
result.upgrade = true;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
38
65
|
case '--port': {
|
|
39
66
|
const next = argv[i + 1];
|
|
40
67
|
const n = Number(next);
|
|
@@ -92,6 +119,9 @@ export function parseArgs(argv) {
|
|
|
92
119
|
}
|
|
93
120
|
}
|
|
94
121
|
}
|
|
122
|
+
if (result.positionals[0] === 'upgrade') {
|
|
123
|
+
result.upgrade = true;
|
|
124
|
+
}
|
|
95
125
|
return result;
|
|
96
126
|
}
|
|
97
127
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/args/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/args/index.ts"],"names":[],"mappings":"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"}
|