nolo-cli 0.76.0-alpha.1 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/{_executeModel-MONX3AUM.js → _executeModel-I3XRMAJ2.js} +42 -42
  2. package/{action-D22U6CTH.js → action-7GHFPDSQ.js} +10 -10
  3. package/{addContentAction-XAPUTGL4.js → addContentAction-ZNVB2NOV.js} +8 -8
  4. package/{addDialogAgentAction-M7VLLBZM.js → addDialogAgentAction-CIDFWATM.js} +7 -7
  5. package/{agentDeleteCommand-2TYFURBN.js → agentDeleteCommand-DCTG26JW.js} +27 -26
  6. package/{agentEmailCommands-HXIX4KJE.js → agentEmailCommands-MRRHBLDQ.js} +54 -53
  7. package/{agentListCommands-IFUOWXP3.js → agentListCommands-CUE46CSP.js} +29 -28
  8. package/{agentMachineCommands-NEJEQV5S.js → agentMachineCommands-FYDEKBIO.js} +27 -26
  9. package/{agentProviderCommands-65ZC2WB4.js → agentProviderCommands-X3FA6BUM.js} +87 -0
  10. package/{agentPullCommand-N7L2CT7L.js → agentPullCommand-U73W5IBM.js} +1 -1
  11. package/{agentRecordCommands-USSLZKED.js → agentRecordCommands-P2MSNP7R.js} +52 -51
  12. package/{agentRunCommand-WZZSCEEP.js → agentRunCommand-YJOW3VB3.js} +52 -51
  13. package/{agentRuntimeLocal-PUZINLWJ.js → agentRuntimeLocal-T43UNWAY.js} +26 -25
  14. package/{agentSlice-BLCUNM5V.js → agentSlice-7GDS5Q2S.js} +9 -9
  15. package/{appDeleteCommands-U4NTEJYQ.js → appDeleteCommands-YBKY3VEI.js} +27 -26
  16. package/{appDeployCommands-FXF45Q7F.js → appDeployCommands-EBC76HO4.js} +27 -26
  17. package/{appDeployStatusCommands-KONVRM53.js → appDeployStatusCommands-WXRC5KEK.js} +27 -26
  18. package/{appGetCommands-3VOGIZ7T.js → appGetCommands-VZZQEDOV.js} +27 -26
  19. package/{appListCommands-A6ROBW7P.js → appListCommands-HYSPVQ77.js} +27 -26
  20. package/{authCommand-EVGFLAHO.js → authCommand-E4GDVKMW.js} +91 -17
  21. package/{authCommands-ILTBI6JV.js → authCommands-VOTT6XWX.js} +3 -4
  22. package/builtinSkillRegistry-5SYVTS6Z.js +33 -0
  23. package/{chatQueueReduxAdapter-ROFM5SW7.js → chatQueueReduxAdapter-CXEWIDFZ.js} +22 -22
  24. package/{chunk-NG4UT4K4.js → chunk-23RQKXP6.js} +1 -1
  25. package/{chunk-C3FZR5EC.js → chunk-2F7RJC6L.js} +1 -1
  26. package/{chunk-3QPYFHAH.js → chunk-2XEVK4BT.js} +1 -1
  27. package/{chunk-HQUORJTM.js → chunk-3BMYXEUW.js} +1 -1
  28. package/{chunk-AFIWC5NH.js → chunk-3T4PRBHV.js} +1 -1
  29. package/{chunk-ZDONXM5U.js → chunk-4FRNB4ZG.js} +7 -7
  30. package/{chunk-YFADVSZE.js → chunk-5EJZGJS2.js} +6 -6
  31. package/{chunk-UJ63UXGE.js → chunk-6H7GN3JL.js} +1064 -752
  32. package/{chunk-BGIWMGSP.js → chunk-6RCZYDDC.js} +10 -172
  33. package/{chunk-BYEJ7K2Z.js → chunk-7S4YWN7P.js} +1 -1
  34. package/{chunk-SREASRV5.js → chunk-ABQYVJBJ.js} +1 -1
  35. package/{chunk-MQ25G6VQ.js → chunk-AYT2OKNM.js} +3 -3
  36. package/{chunk-ERD7UXVL.js → chunk-BNMZ7QUV.js} +1 -1
  37. package/{chunk-PGSKWZCB.js → chunk-DS3SQTDT.js} +1 -1
  38. package/{chunk-QC5LGHYP.js → chunk-EXWOCYCR.js} +3 -3
  39. package/chunk-FMODTASJ.js +109 -0
  40. package/{chunk-SZLVDREM.js → chunk-GIG262ZG.js} +3 -3
  41. package/{chunk-FPTQQSS6.js → chunk-GRJTR4PU.js} +25 -4
  42. package/{chunk-PZM3EENV.js → chunk-GXWEF4IZ.js} +1 -1
  43. package/chunk-HJKGQPYF.js +266 -0
  44. package/{chunk-3JQ2NRYU.js → chunk-HVURBGF3.js} +4 -4
  45. package/{chunk-UPQF3C7O.js → chunk-IMDA4FW4.js} +102 -34
  46. package/{chunk-L2Y24GRM.js → chunk-IO7DYRPW.js} +3 -3
  47. package/{chunk-UZ6XXCVR.js → chunk-IZAWJCG7.js} +15 -2
  48. package/{chunk-2SFNAHL6.js → chunk-JC2WQS66.js} +34 -22
  49. package/{chunk-XWNRAIUL.js → chunk-JITSBA52.js} +6 -16
  50. package/{chunk-6XIE5ZGI.js → chunk-JPGCXHNM.js} +1 -1
  51. package/{chunk-PI4DWFYV.js → chunk-KO7QCXLL.js} +1132 -31
  52. package/{chunk-E36HZARC.js → chunk-KT6LENVP.js} +3 -3
  53. package/{chunk-N7DNNV6J.js → chunk-L2VNQQ7M.js} +78 -74
  54. package/{chunk-2R5EVB2O.js → chunk-LEYH5NOH.js} +5 -5
  55. package/{chunk-RXX4GDIH.js → chunk-LS2ZANRJ.js} +1 -1
  56. package/{chunk-4EJ5QYB5.js → chunk-LSV2BOJL.js} +1 -1
  57. package/{chunk-AFIKMMGC.js → chunk-MFW4BGJS.js} +1 -1
  58. package/{chunk-QH6NK22I.js → chunk-NVHJWYUO.js} +60 -788
  59. package/{chunk-Q6FF2MCK.js → chunk-OAJRZ35U.js} +1 -1
  60. package/{chunk-DSRXPQWA.js → chunk-OCL2YCAU.js} +7 -7
  61. package/{chunk-5J7W2VWW.js → chunk-OHUU52T3.js} +6 -265
  62. package/{chunk-V3ZKNK5D.js → chunk-OKCTLCKS.js} +9 -9
  63. package/chunk-P3AS5IPM.js +1624 -0
  64. package/{chunk-ZZCJUXUI.js → chunk-PHDKTASK.js} +2 -2
  65. package/{chunk-RILY7TKG.js → chunk-Q246OUG5.js} +9 -9
  66. package/{chunk-ZLPA7K55.js → chunk-Q4KVAB6L.js} +4 -4
  67. package/{chunk-AETZ7AD6.js → chunk-Q554LLSI.js} +1 -1
  68. package/{chunk-CGRJWXTE.js → chunk-S6STPUMG.js} +19 -15
  69. package/{chunk-K7AG465Q.js → chunk-T4F2EQGN.js} +4 -2
  70. package/{chunk-PYXL2CJL.js → chunk-TGRQUFLU.js} +1 -1
  71. package/{chunk-E6RGHPDR.js → chunk-UINEAQ2R.js} +3 -5
  72. package/{chunk-EXMHJN7C.js → chunk-UO66QKGI.js} +2 -2
  73. package/{chunk-BJCWNHVU.js → chunk-US463UAD.js} +2 -2
  74. package/{chunk-AJHEFRGJ.js → chunk-UWMQ6FPM.js} +4 -0
  75. package/{chunk-FSFQ3A7S.js → chunk-VARZWSKW.js} +9 -9
  76. package/{chunk-NHRQCXIQ.js → chunk-VMFTFOWF.js} +13 -3
  77. package/{chunk-3SPWIDHH.js → chunk-VQD6BTML.js} +3 -3
  78. package/{chunk-ZY4K4CZR.js → chunk-VW3YGKWR.js} +605 -91
  79. package/{chunk-G3O3PD6Q.js → chunk-W7PGACND.js} +14 -14
  80. package/{chunk-KIS76A2P.js → chunk-WSOMSDQB.js} +4 -4
  81. package/{chunk-CMH2SYHX.js → chunk-X77EN2BJ.js} +2 -2
  82. package/{chunk-MYU3MJCF.js → chunk-XCSSFPTB.js} +175 -7
  83. package/{chunk-QA6YKM3H.js → chunk-Y2IFJ7VM.js} +31 -3
  84. package/{chunk-UDQWGU7F.js → chunk-YZHP76TR.js} +1 -1
  85. package/{chunk-GBPZKFYK.js → chunk-ZIHJVHFH.js} +4 -4
  86. package/{chunk-DWPNOYMB.js → chunk-ZKGIAM7I.js} +1 -1
  87. package/chunk-ZSG2AQU4.js +626 -0
  88. package/{contentThunks-3BFZJFHI.js → contentThunks-Y2ACIFDB.js} +23 -23
  89. package/{createAgentAutomationAction-YCWUKLMK.js → createAgentAutomationAction-TNE3QMJR.js} +23 -23
  90. package/{createDialogAction-VULS2PKA.js → createDialogAction-BMGHBTQB.js} +26 -26
  91. package/{createPageAction-MZZLQPFE.js → createPageAction-FFNIZPIS.js} +24 -24
  92. package/{dbSlice-GKGGFNOB.js → dbSlice-4CUQE35F.js} +7 -7
  93. package/{deleteFile-LWSR674W.js → deleteFile-YG6QMJLU.js} +3 -3
  94. package/{dialogCommands-G223U5WU.js → dialogCommands-3JC3BIXC.js} +28 -27
  95. package/{dialogSlice-NQO5ZETL.js → dialogSlice-3E7Z7HZV.js} +22 -22
  96. package/{docCreateCommands-2P47IJDK.js → docCreateCommands-6LNQLCTA.js} +28 -27
  97. package/{docDeleteCommands-N3EGDOIC.js → docDeleteCommands-ZJOAPWZS.js} +29 -28
  98. package/{docReadCommands-6BFV2HI7.js → docReadCommands-LJTRSBG6.js} +28 -27
  99. package/{docStore-AEJONTM4.js → docStore-R47ABXBB.js} +8 -8
  100. package/{docUpdateCommands-ZTMPXHC5.js → docUpdateCommands-7P3QF3N2.js} +28 -27
  101. package/{fetchMessages-DRABNDPZ.js → fetchMessages-EIU7UFFK.js} +3 -4
  102. package/{getPricing-HRMSOF3E.js → getPricing-TV6ZB7ES.js} +4 -4
  103. package/{handleSendMessageAction-WIUO466V.js → handleSendMessageAction-FFYOGXAO.js} +22 -22
  104. package/index.js +61 -53
  105. package/{localDialogRead-PUQKFI73.js → localDialogRead-BTFJ4V2I.js} +2 -2
  106. package/{localRuntimeDb-P37ZTX55.js → localRuntimeDb-SYQGUF4U.js} +1 -1
  107. package/{machineCommands-FUA7HBND.js → machineCommands-FN5GGQV3.js} +52 -51
  108. package/{machineWsRunDispatch-URIG5N2V.js → machineWsRunDispatch-H47IA7ZT.js} +50 -49
  109. package/{memberThunks-KATHH3F4.js → memberThunks-N35XAOC6.js} +8 -8
  110. package/{models-GS72DVJS.js → models-CMXFDBQH.js} +2 -2
  111. package/package.json +1 -1
  112. package/providerPresetApply-D2GGHPI7.js +214 -0
  113. package/providerRegistry-MU6C4ABD.js +31 -0
  114. package/{read-LC6HVYBN.js → read-2PV4PN2E.js} +4 -3
  115. package/{readDocTool-N3ERJHHF.js → readDocTool-FGK5XGAW.js} +1 -1
  116. package/{readlineWorkspace-HVQLD7T3.js → readlineWorkspace-2RP77YDN.js} +133 -74
  117. package/{removeDialogAgentAction-F5GPTALR.js → removeDialogAgentAction-O2POGBOE.js} +10 -10
  118. package/{runAgentClientLoop-QHL2HNAI.js → runAgentClientLoop-CEBV5UPD.js} +41 -41
  119. package/{runtimeDoctorCommands-CROTMULY.js → runtimeDoctorCommands-X6WDBEQX.js} +2 -2
  120. package/{setDialogExtraReferencesAction-AY4ZCF3A.js → setDialogExtraReferencesAction-KPSVVY3C.js} +8 -8
  121. package/{setPrimaryDialogAgentAction-HPMG7V3R.js → setPrimaryDialogAgentAction-RMJETONI.js} +10 -10
  122. package/{settingSlice-OEJA4NQO.js → settingSlice-I6MTTNDX.js} +9 -9
  123. package/{spaceCommands-MRP5U3C3.js → spaceCommands-JHT4ALCQ.js} +26 -25
  124. package/{streamAgentChatTurn-CE2H23VD.js → streamAgentChatTurn-SFCZP4GY.js} +49 -50
  125. package/{switchDialogAgentAction-HMDZTZ4I.js → switchDialogAgentAction-OQSGWVQQ.js} +7 -7
  126. package/{tools-F25QG6XS.js → tools-K3YOTESV.js} +37 -35
  127. package/{tuiSummaryLlmCaller-3Z24VUWM.js → tuiSummaryLlmCaller-T2OA5ZVB.js} +14 -14
  128. package/{updateDialogTitleAction-Z333XUN4.js → updateDialogTitleAction-CSPKYQRO.js} +23 -23
  129. package/chunk-3IT2PFHL.js +0 -611
  130. package/chunk-I42VC5KR.js +0 -15
  131. package/codingSkills-E6KSDNSJ.js +0 -48
  132. package/{chunk-3RAG2NAD.js → chunk-UKWGR5SS.js} +3 -3
  133. package/{db-VQSAOWAO.js → db-WK5MDZVN.js} +1 -1
  134. package/{localRuntimeAuthority-R5UBODT3.js → localRuntimeAuthority-6IR6BBXE.js} +3 -3
@@ -1,40 +1,36 @@
1
1
  import {
2
2
  addContentToSpace
3
- } from "./chunk-CGRJWXTE.js";
3
+ } from "./chunk-S6STPUMG.js";
4
4
  import {
5
5
  prepareAndPersistMessage,
6
6
  uiAskChoiceFunc,
7
7
  uiAskChoiceFunctionSchema
8
- } from "./chunk-N7DNNV6J.js";
8
+ } from "./chunk-L2VNQQ7M.js";
9
9
  import {
10
10
  require_date_fns
11
11
  } from "./chunk-M76ECQRD.js";
12
12
  import {
13
- TOOL_PACKS
14
- } from "./chunk-MYU3MJCF.js";
15
- import {
16
- buildSkillDocMarkdown
17
- } from "./chunk-AETZ7AD6.js";
13
+ buildBuiltinObjectSkillReference
14
+ } from "./chunk-XCSSFPTB.js";
18
15
  import {
19
16
  PLATFORM_HOSTED_DEEPSEEK_FLASH_MODEL,
20
17
  PLATFORM_HOSTED_KIMI_PROVIDER
21
- } from "./chunk-AJHEFRGJ.js";
18
+ } from "./chunk-UWMQ6FPM.js";
22
19
  import {
23
20
  read,
24
21
  readAndWait,
25
22
  removeCachedEntity,
26
23
  upsertSSREntity,
27
24
  write
28
- } from "./chunk-YFADVSZE.js";
25
+ } from "./chunk-5EJZGJS2.js";
29
26
  import {
30
27
  createAgentKey,
31
28
  createDialogKey,
32
- createKey,
33
29
  createMemoryKey,
34
30
  dialogMessageRange,
35
31
  memoryOwnerRange,
36
32
  memorySubjectKindRange
37
- } from "./chunk-NHRQCXIQ.js";
33
+ } from "./chunk-VMFTFOWF.js";
38
34
  import {
39
35
  extractCustomId
40
36
  } from "./chunk-BJIRLHJR.js";
@@ -44,15 +40,15 @@ import {
44
40
  import {
45
41
  selectIdentityUserId
46
42
  } from "./chunk-SEJ5OS6F.js";
43
+ import {
44
+ isRecord
45
+ } from "./chunk-KUG52IAP.js";
47
46
  import {
48
47
  asTrimmedString
49
48
  } from "./chunk-3EUW3WEO.js";
50
49
  import {
51
50
  asOptionalPositiveFiniteNumber
52
51
  } from "./chunk-U6VC4MU4.js";
53
- import {
54
- isRecord
55
- } from "./chunk-KUG52IAP.js";
56
52
  import {
57
53
  asOptionalTrimmedString
58
54
  } from "./chunk-G3SUCT4W.js";
@@ -63,160 +59,6 @@ import {
63
59
  // packages/chat/dialog/actions/createDialogAction.ts
64
60
  var import_date_fns = __toESM(require_date_fns());
65
61
 
66
- // packages/ai/skills/builtinObjectSkills.ts
67
- var BUILTIN_OBJECT_SKILL_IDS = {
68
- table: "builtin-table-skill-v1",
69
- doc: "builtin-doc-skill-v1",
70
- // key 改名为 code-style(它本来就叫「编码风格技能」,"code" 这个名字是它抢的,
71
- // 与「代码执行」能力包撞车)。**id 值保持不变**——skillId 与页面 key 都从它派生,
72
- // 改了会让存量 agent.references 失配。
73
- "code-style": "builtin-code-skill-v1",
74
- image: "builtin-image-skill-v1",
75
- file: "builtin-file-skill-v1",
76
- pagebuilder: "builtin-pagebuilder-skill-v1"
77
- };
78
- var SKILL_DEFS = {
79
- doc: {
80
- id: BUILTIN_OBJECT_SKILL_IDS.doc,
81
- name: "\u6587\u6863\u7F16\u8F91\u6280\u80FD",
82
- description: "\u63D0\u4F9B\u6587\u6863\u8BFB\u53D6\u4E0E\u66F4\u65B0\u80FD\u529B\uFF0C\u4F9B\u6587\u6863\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u6587\u6863\u3001\u6DA6\u8272\u3001\u6539\u5199\u3001\u7EED\u5199\u3001\u6392\u7248\u3001\u6587\u7AE0\u3001document\u3001polish\u3002",
83
- toolNames: ["readDoc", "updateDoc"],
84
- promptPatch: [
85
- "\u6587\u6863\u7F16\u8F91\u6307\u5357\uFF1A",
86
- "1. \u4FEE\u6539\u524D\u5148 readDoc \u8BFB\u53D6\u5F53\u524D\u6587\u6863\u771F\u503C\uFF0C\u518D\u57FA\u4E8E\u73B0\u6709\u5185\u5BB9\u7528 updateDoc \u505A\u5B9A\u70B9\u589E\u91CF\u7F16\u8F91\u3002",
87
- "2. \u4E0D\u8981\u8131\u79BB\u73B0\u6709\u5185\u5BB9\u7A7A\u60F3\u91CD\u5199\uFF1B\u6DA6\u8272/\u6539\u5199/\u7EED\u5199\u90FD\u5E94\u4FDD\u7559\u7528\u6237\u539F\u6709\u7684\u7ED3\u6784\u4E0E\u4E8B\u5B9E\u3002"
88
- ].join("\n")
89
- },
90
- table: {
91
- id: BUILTIN_OBJECT_SKILL_IDS.table,
92
- name: "\u8868\u683C\u7F16\u8F91\u6280\u80FD",
93
- description: "\u63D0\u4F9B\u8868\u683C\u521B\u5EFA\u3001\u67E5\u8BE2\u3001\u65B0\u589E\u3001\u66F4\u65B0\u4E0E\u5220\u9664\u80FD\u529B\uFF0C\u4F9B\u8868\u683C\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u8868\u683C\u3001\u5EFA\u8868\u3001\u65B0\u589E\u4E00\u884C\u3001\u8BB0\u5F55\u3001\u5B57\u6BB5\u3001table\u3001spreadsheet\u3001csv\u3002",
94
- // 与 app-builder 能力包共用同一份清单(TOOL_PACKS.TABLE)。
95
- // 以前两边各抄一份,改一个忘另一个就会静默不同步。
96
- toolNames: [...TOOL_PACKS.TABLE],
97
- promptPatch: [
98
- "\u8868\u683C\u64CD\u4F5C\u6307\u5357\uFF1A",
99
- "1. \u7528\u6237\u8981\u65B0\u5EFA\u8868\u683C\u65F6\uFF0C\u8C03\u7528 createTable\uFF0C\u5E76\u4ECE\u9700\u6C42\u63A8\u65AD\u5408\u7406\u7684\u5B57\u6BB5\u8BBE\u8BA1\uFF08\u5B57\u6BB5\u540D\u3001\u7C7B\u578B\u3001\u5FC5\u586B\u3001\u53EF\u9009\u503C\uFF09\u3002",
100
- "2. \u65B0\u589E\u8BB0\u5F55\u5FC5\u987B\u8C03\u7528 addTableRow / addTableRows\uFF0C\u4E0D\u8981\u53EA\u5728\u56DE\u7B54\u91CC\u53E3\u5934\u63CF\u8FF0\u3002",
101
- "3. addTableRow \u7684 values \u662F\u5BF9\u8C61\uFF0Ckey \u5FC5\u987B\u7528\u5B57\u6BB5\u540D\uFF08name\uFF0C\u4E0D\u662F\u663E\u793A\u540D label\uFF09\uFF1B\u5C3D\u91CF\u4ECE\u7528\u6237\u81EA\u7136\u8BED\u8A00\u63A8\u65AD\u5E76\u586B\u6EE1\u76F8\u5173\u5B57\u6BB5\uFF0C\u5FC5\u586B\u5B57\u6BB5\u5C24\u5176\u6CE8\u610F\uFF1B\u7528\u6237\u6CA1\u63D0\u5230\u7684\u5B57\u6BB5\u53EF\u7528\u7A7A\u5B57\u7B26\u4E32\u6216 null \u5360\u4F4D\uFF1B\u7EDD\u4E0D\u8981\u4F20\u7A7A\u5BF9\u8C61 {}\u3002",
102
- "4. \u66F4\u65B0\u6216\u5220\u9664\u524D\uFF0C\u5148\u7528 queryTableRows \u786E\u8BA4\u76EE\u6807\u884C\uFF0C\u5FC5\u8981\u65F6\u5411\u7528\u6237\u786E\u8BA4\u76EE\u6807\u884C/\u5B57\u6BB5\u3002"
103
- ].join("\n")
104
- },
105
- "code-style": {
106
- id: BUILTIN_OBJECT_SKILL_IDS["code-style"],
107
- name: "\u7F16\u7801\u98CE\u683C\u6280\u80FD",
108
- description: "\u63D0\u4F9B\u7F16\u7801\u89C4\u8303\u4E0E\u98CE\u683C\u7EA6\u675F\uFF0C\u4F9B\u4EE3\u7801\u4EFB\u52A1\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u4EE3\u7801\u3001\u7F16\u7801\u3001\u91CD\u6784\u3001\u4FEEbug\u3001code\u3001refactor\u3001bugfix\u3001coding-style\u3002",
109
- toolNames: [],
110
- promptPatch: [
111
- "\u7F16\u7801\u98CE\u683C\u4E0E\u89C4\u8303\u6307\u5357\uFF1A",
112
- "1. \u6587\u4EF6\u62C6\u5206\uFF1A\u4F18\u5148\u62C6\u5206\u4E3A\u591A\u6587\u4EF6\uFF08MANY SMALL FILES\uFF09\uFF0C\u5178\u578B\u957F\u5EA6 200-400 \u884C\uFF0C\u5355\u6587\u4EF6\u6700\u591A 800 \u884C\uFF08800 max\uFF09\u3002",
113
- "2. \u51FD\u6570\u4E0E\u5D4C\u5957\uFF1A\u51FD\u6570\u4FDD\u6301\u77ED\u5C0F\uFF08<50 lines\uFF09\uFF0C\u4F18\u5148\u4F7F\u7528 early returns \u63D0\u524D\u8FD4\u56DE\uFF0C\u5D4C\u5957\u5C42\u7EA7\u4E0D\u8D85\u8FC7 4 \u5C42\uFF08nesting \u22644\uFF09\u3002",
114
- "3. \u4E0D\u53EF\u53D8\u6027\uFF08immutability\uFF09\uFF1A\u4FDD\u6301\u6570\u636E\u4E0D\u53EF\u53D8\uFF0C\u4E0D\u8981\u539F\u5730 mutate \u73B0\u6709\u5BF9\u8C61\u6216\u6570\u7EC4\uFF0C\u5FC5\u987B\u8FD4\u56DE\u65B0\u5BF9\u8C61/\u6570\u7EC4\u3002",
115
- "4. \u9519\u8BEF\u5904\u7406\u4E0E\u6821\u9A8C\uFF1A\u663E\u5F0F\u5904\u7406\u6240\u6709\u9519\u8BEF\uFF08explicit error handling\uFF09\uFF0C\u5728\u7CFB\u7EDF\u8FB9\u754C\u5B8C\u6210\u6821\u9A8C\uFF08validate at boundaries\uFF09\uFF0C\u4E0D\u9690\u5F0F\u541E\u9519\u3002",
116
- "5. \u5B8C\u6210\u524D Checklist\uFF1A\u5B8C\u6210\u524D\u81EA\u67E5\u51FD\u6570/\u6587\u4EF6\u5C3A\u5BF8\u3001\u5D4C\u5957\u6DF1\u5EA6\u3001\u4E0D\u53EF\u53D8\u6027\u4E0E\u8FB9\u754C\u9519\u8BEF\u5904\u7406\u3002"
117
- ].join("\n")
118
- },
119
- image: {
120
- id: BUILTIN_OBJECT_SKILL_IDS.image,
121
- name: "\u56FE\u7247\u5206\u6790\u6280\u80FD",
122
- description: "\u63D0\u4F9B\u56FE\u7247\u7406\u89E3\u3001\u63CF\u8FF0\u4E0E\u6574\u7406\u5EFA\u8BAE\u80FD\u529B\uFF0C\u4F9B\u56FE\u7247\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u56FE\u7247\u3001\u56FE\u50CF\u3001\u5206\u6790\u3001\u63CF\u8FF0\u3001\u547D\u540D\u3001\u6574\u7406\u3001image\u3001photo\u3001picture\u3002",
123
- toolNames: [],
124
- promptPatch: [
125
- "\u56FE\u7247\u5206\u6790\u6307\u5357\uFF1A",
126
- "1. \u5F53\u524D\u9636\u6BB5\u91CD\u70B9\u56F4\u7ED5\u5F53\u524D\u56FE\u7247\u505A\u7406\u89E3\u3001\u63CF\u8FF0\u3001\u63D0\u70BC\u91CD\u70B9\u3001\u7ED9\u51FA\u547D\u540D/\u6574\u7406\u5EFA\u8BAE\u548C\u540E\u7EED\u5904\u7406\u5EFA\u8BAE\u3002",
127
- "2. \u4E0D\u8981\u5047\u88C5\u5DF2\u7ECF\u5177\u5907\u590D\u6742\u56FE\u7247\u7F16\u8F91\u80FD\u529B\uFF1B\u5982\u679C\u7528\u6237\u8981\u66F4\u5F3A\u64CD\u4F5C\uFF0C\u660E\u786E\u8BF4\u660E\u5F53\u524D\u53EF\u505A\u7684\u662F\u5206\u6790\u4E0E\u7EC4\u7EC7\u3002"
128
- ].join("\n")
129
- },
130
- file: {
131
- id: BUILTIN_OBJECT_SKILL_IDS.file,
132
- name: "\u6587\u4EF6\u5904\u7406\u6280\u80FD",
133
- description: "\u63D0\u4F9B\u6587\u4EF6\u7406\u89E3\u3001\u6574\u7406\u4E0E\u5904\u7406\u5EFA\u8BAE\u80FD\u529B\uFF0C\u4F9B\u6587\u4EF6\u52A9\u624B\u4F7F\u7528\u3002\u89E6\u53D1\u8BCD\uFF1A\u6587\u4EF6\u3001\u89E3\u6790\u3001\u63D0\u53D6\u3001\u6574\u7406\u3001\u5904\u7406\u3001file\u3001document\u3001pdf\u3002",
134
- toolNames: [],
135
- promptPatch: [
136
- "\u6587\u4EF6\u5904\u7406\u6307\u5357\uFF1A",
137
- "1. \u5F53\u524D\u9636\u6BB5\u91CD\u70B9\u56F4\u7ED5\u5F53\u524D\u6587\u4EF6\u63D0\u4F9B\u7406\u89E3\u3001\u6574\u7406\u3001\u63D0\u53D6\u4E0E\u540E\u7EED\u5904\u7406\u5EFA\u8BAE\u3002",
138
- "2. \u4E0D\u8981\u5047\u88C5\u5DF2\u7ECF\u5B8C\u6210\u6587\u4EF6\u5185\u5BB9\u89E3\u6790\uFF1B\u5FC5\u8981\u65F6\u660E\u786E\u544A\u8BC9\u7528\u6237\u5F53\u524D\u66F4\u591A\u662F\u5360\u4F4D\u578B\u5DE5\u4F5C\u6D41\u5165\u53E3\uFF0C\u7B49\u5F85\u540E\u7EED\u63A5\u5165\u66F4\u5B8C\u6574\u7684\u6587\u4EF6\u5904\u7406\u80FD\u529B\u3002"
139
- ].join("\n")
140
- },
141
- pagebuilder: {
142
- id: BUILTIN_OBJECT_SKILL_IDS.pagebuilder,
143
- name: "\u52A8\u6001\u4EA4\u4E92\u7EC4\u4EF6\u751F\u6210\u6280\u80FD",
144
- description: "\u628A\u4E00\u53E5\u8BDD\u9700\u6C42\u53D8\u6210\u53EF\u770B\u7684\u4EA4\u4E92\u9875\u9762\u3001\u62A5\u544A\u3001\u770B\u677F\u3001\u4E3B\u9875\u3001\u6559\u7A0B\u3001\u5BF9\u6BD4\u9875\u6216\u8BA1\u5212\u9875\u3002\u4EFB\u4F55 agent \u5728\u9700\u8981\u8F93\u51FA\u53EF\u4EA4\u4E92\u53EF\u89C6\u5316\u6D88\u606F\u65F6\u6309\u9700\u52A0\u8F7D\u3002\u89E6\u53D1\u8BCD\uFF1A\u9875\u9762\u3001\u62A5\u8868\u3001\u770B\u677F\u3001\u65E5\u62A5\u3001\u5468\u62A5\u3001\u4E3B\u9875\u3001\u6559\u7A0B\u3001\u5BF9\u6BD4\u9875\u3001\u8BA1\u5212\u9875\u3001\u53EF\u89C6\u5316\u3001\u4EA4\u4E92\u9875\u9762\u3001\u4EEA\u8868\u76D8\u3001dashboard\u3001report\u3001page\u3001landing\u3002",
145
- toolNames: [],
146
- promptPatch: [
147
- "\u52A8\u6001\u4EA4\u4E92\u7EC4\u4EF6\u751F\u6210\u89C4\u5219\uFF1A",
148
- "\u4F60\u73B0\u5728\u7684\u4EFB\u52A1\u662F\u628A\u7528\u6237\u9700\u6C42\u53D8\u6210\u4E00\u4E2A\u53EF\u770B\u7684\u4EA4\u4E92\u9875\u9762/\u62A5\u544A/\u770B\u677F/\u4E3B\u9875/\u6559\u7A0B/\u5BF9\u6BD4\u9875/\u8BA1\u5212\u9875\u3002\u7528\u6237\u770B\u4E0D\u5230\u6E90\u7801\uFF0C\u53EA\u4F1A\u770B\u5230\u9875\u9762\u7ED3\u679C\u3002",
149
- "",
150
- "\u7EDD\u5BF9\u89C4\u5219\uFF1A",
151
- "1. \u53EA\u8F93\u51FA\u4E00\u4E2A Markdown \u4EE3\u7801\u5757\uFF0C\u4EE3\u7801\u5757\u8BED\u8A00\u5FC5\u987B\u662F tsx preview\u3002",
152
- "2. \u4EE3\u7801\u5757\u5916\u4E0D\u8981\u8F93\u51FA\u89E3\u91CA\u3001\u524D\u8A00\u3001\u7ED3\u5C3E\u3001\u6E05\u5355\u6216\u601D\u8003\u8FC7\u7A0B\u3002",
153
- "3. \u4EE3\u7801\u5FC5\u987B\u5B9A\u4E49\u9876\u5C42 function Example()\uFF0C\u4E0D\u8981\u8C03\u7528 render()\uFF0C\u4E0D\u8981 export default\u3002",
154
- "4. \u4E0D\u8981\u5199 import\u3002\u8FD0\u884C\u73AF\u5883\u5DF2\u7ECF\u63D0\u4F9B React\u3001useState\u3001useEffect\u3001useMemo\u3001useCallback\u3001useRef\u3001ReactECharts\u3001react-icons/lu \u7684\u56FE\u6807\u7EC4\u4EF6\u3002",
155
- "5. \u6240\u6709\u4EA4\u4E92\u5FC5\u987B\u5728 Example \u5185\u7528 React state \u5B9E\u73B0\uFF0C\u6309\u94AE\u3001Tab\u3001FAQ\u3001\u6B65\u9AA4\u5207\u6362\u3001\u7B5B\u9009\u90FD\u8981\u771F\u7684\u53EF\u70B9\u51FB\u3002",
156
- "6. \u4E3A\u4E3B\u8981\u533A\u5757\u52A0 data-artifact-section \u5C5E\u6027\u3002",
157
- "7. \u751F\u6210\u7ED3\u679C\u4F18\u5148\u662F\u4E00\u9875\u5B8C\u6574\u53EF\u7528\u7684\u9875\u9762\uFF0C\u4E0D\u8981\u53EA\u505A\u5B64\u7ACB\u5361\u7247\u6216\u4E00\u4E2A\u56FE\u3002",
158
- "8. \u5982\u679C\u7528\u6237\u6CA1\u6709\u7ED9\u5177\u4F53\u6570\u636E\uFF0C\u53EF\u4EE5\u751F\u6210\u5408\u7406\u7684\u793A\u4F8B\u6570\u636E\uFF0C\u4F46\u8981\u4FDD\u6301\u4E1A\u52A1\u53EF\u4FE1\u3002",
159
- "",
160
- "\u5404\u7C7B\u9875\u9762\u9ED8\u8BA4\u7ED3\u6784\uFF1A",
161
- "- \u4FE1\u606F\u5C55\u793A\u7C7B\uFF08\u4E3B\u9875\u3001\u4EA7\u54C1\u4ECB\u7ECD\u3001\u670D\u52A1\u9875\u3001\u4F5C\u54C1\u96C6\u3001\u6D3B\u52A8\u9875\uFF09\uFF1A\u9996\u5C4F\u5B9A\u4F4D\u3001\u670D\u52A1/\u80FD\u529B\u5361\u7247\u3001\u4EE3\u8868\u6210\u679C\u5361\u7247\u3001\u53EF\u4FE1\u80CC\u4E66\u3001\u8054\u7CFB\u6216\u884C\u52A8\u6309\u94AE\u3002",
162
- "- \u6570\u636E\u5206\u6790\u7C7B\uFF08\u65E5\u62A5\u3001\u5468\u62A5\u3001\u770B\u677F\u3001\u8D28\u68C0\u3001\u9500\u552E\u6F0F\u6597\u3001\u53CD\u9988\u5206\u6790\uFF09\uFF1A\u9876\u90E8\u6458\u8981\u3001\u6838\u5FC3\u6307\u6807\u3001\u8D8B\u52BF\u56FE\u3001\u660E\u7EC6\u8868\u683C\u6216\u5F02\u5E38\u5217\u8868\u3001\u4E0B\u4E00\u6B65\u5EFA\u8BAE\u3002",
163
- "- \u6D41\u7A0B\u8BF4\u660E\u7C7B\uFF08\u6559\u7A0B\u3001SOP\u3001onboarding\u3001\u64CD\u4F5C\u6307\u5357\u3001\u8BFE\u7A0B\u6B65\u9AA4\uFF09\uFF1A\u5B66\u4E60\u76EE\u6807\u3001\u6B65\u9AA4\u5361\u7247\u3001\u793A\u4F8B/\u7EC3\u4E60\u3001\u68C0\u67E5\u6E05\u5355\u6216\u4E0B\u4E00\u6B65\u6309\u94AE\u3002",
164
- "- \u51B3\u7B56\u6BD4\u8F83\u7C7B\uFF08\u65B9\u6848\u5BF9\u6BD4\u3001\u4EA7\u54C1\u9009\u578B\u3001\u7ADE\u54C1\u5206\u6790\u3001\u91C7\u8D2D\u5EFA\u8BAE\uFF09\uFF1A\u5BF9\u6BD4\u7EF4\u5EA6\u8868\u683C\u3001\u4F18\u7F3A\u70B9\u5361\u7247\u3001\u8BC4\u5206\u6216\u9002\u914D\u5EA6\u3001\u63A8\u8350\u7ED3\u8BBA\u3002",
165
- "- \u8BA1\u5212\u6392\u5E03\u7C7B\uFF08\u9879\u76EE\u8BA1\u5212\u3001\u5B66\u4E60\u8BA1\u5212\u3001\u5185\u5BB9\u65E5\u5386\u3001\u53D1\u5E03\u8282\u594F\uFF09\uFF1A\u9636\u6BB5\u76EE\u6807\u3001\u4EFB\u52A1\u5217\u8868\u3001\u4F18\u5148\u7EA7\u3001\u91CC\u7A0B\u7891\u5361\u7247\u3001\u98CE\u9669\u63D0\u9192\u3002",
166
- "- \u6DF7\u5408\u6C47\u62A5\u7C7B\uFF08\u878D\u8D44\u9875\u3001\u9879\u76EE\u6982\u89C8\u3001\u590D\u6742\u6C47\u62A5\uFF09\uFF1A\u81F3\u5C11\u5305\u542B MetricCard\u3001Chart\u3001Table \u548C Section\uFF0C\u4E0D\u8981\u53EA\u505A\u5355\u4E00\u5217\u8868\u3002",
167
- "- \u6559\u7A0B/\u6B65\u9AA4/FAQ/Tab/\u7B5B\u9009/\u9875\u9762\u5185\u8DF3\u8F6C\u5FC5\u987B\u505A\u6210\u771F\u5B9E\u53EF\u70B9\u51FB\u4EA4\u4E92\u3002",
168
- "",
169
- "\u4EE3\u7801\u98CE\u683C\uFF1A",
170
- "1. \u4F7F\u7528\u5185\u8054 style \u6216\u7EC4\u4EF6\u5185 <style>\uFF0C\u4E0D\u8981\u4F9D\u8D56 Tailwind \u6216\u5916\u90E8 CSS\u3002",
171
- "2. \u9875\u9762\u5BBD\u5EA6\u3001\u95F4\u8DDD\u3001\u5B57\u53F7\u8981\u9002\u5408\u6D88\u606F\u5185\u9884\u89C8\uFF1B\u4E0D\u8981\u7528\u8FC7\u5927\u7684\u843D\u5730\u9875 hero\u3002",
172
- "3. \u989C\u8272\u8981\u514B\u5236\uFF0C\u6709\u5C42\u6B21\uFF1B\u907F\u514D\u6574\u9875\u5355\u4E00\u84DD\u7D2B\u6E10\u53D8\u3002",
173
- "4. \u8868\u683C\u3001\u56FE\u8868\u3001\u5361\u7247\u3001\u6309\u94AE\u90FD\u8981\u6709 hover/active/focus \u7684\u7EC6\u8282\u3002",
174
- "5. \u5FC5\u8981\u65F6\u4F7F\u7528 ReactECharts \u753B\u56FE\uFF1B\u7B80\u5355\u67F1\u72B6\u56FE\u4E5F\u53EF\u4EE5\u7528 div \u5B9E\u73B0\uFF0C\u4FDD\u8BC1\u7A33\u5B9A\u3002",
175
- "6. \u4EE3\u7801\u5C3D\u91CF\u77ED\u800C\u5B8C\u6574\uFF0C\u9ED8\u8BA4 150-260 \u884C\u4EE5\u5185\u3002",
176
- "",
177
- "\u8F93\u51FA\u683C\u5F0F\u793A\u4F8B\uFF1A",
178
- "```tsx preview",
179
- "function Example() {",
180
- " const [tab, setTab] = useState('overview');",
181
- " return <main><section data-artifact-section>...</section></main>;",
182
- "}",
183
- "```"
184
- ].join("\n")
185
- }
186
- };
187
- function buildBuiltinObjectSkillConfig(kind) {
188
- const def = SKILL_DEFS[kind];
189
- return {
190
- version: "0.1",
191
- kind: "skill",
192
- id: def.id,
193
- name: def.name,
194
- description: def.description,
195
- triggerMode: "explicit",
196
- toolNames: def.toolNames,
197
- promptPatch: def.promptPatch
198
- };
199
- }
200
- function buildBuiltinObjectSkillDbKey(kind, userId) {
201
- return createKey("page" /* DOC */, userId, BUILTIN_OBJECT_SKILL_IDS[kind]);
202
- }
203
- function buildBuiltinObjectSkillReference(kind, userId) {
204
- return {
205
- dbKey: buildBuiltinObjectSkillDbKey(kind, userId),
206
- title: SKILL_DEFS[kind].name,
207
- type: "instruction"
208
- };
209
- }
210
- function buildBuiltinObjectSkillPageContent(kind) {
211
- const def = SKILL_DEFS[kind];
212
- return buildSkillDocMarkdown({
213
- body: `# ${def.name}
214
-
215
- ${def.description}`,
216
- skillConfig: buildBuiltinObjectSkillConfig(kind)
217
- });
218
- }
219
-
220
62
  // packages/chat/dialog/objectAssistantRegistry.ts
221
63
  var OBJECT_ASSISTANT_TO_SKILL = {
222
64
  page: "doc",
@@ -1141,10 +983,6 @@ var createDialogAction = async (args, thunkApi) => {
1141
983
  };
1142
984
 
1143
985
  export {
1144
- BUILTIN_OBJECT_SKILL_IDS,
1145
- buildBuiltinObjectSkillConfig,
1146
- buildBuiltinObjectSkillDbKey,
1147
- buildBuiltinObjectSkillPageContent,
1148
986
  resolveAgentMemoryPolicy,
1149
987
  buildMemorySubjectsForAgent,
1150
988
  chooseMemoryOwners,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  dialogMessageRange
3
- } from "./chunk-NHRQCXIQ.js";
3
+ } from "./chunk-VMFTFOWF.js";
4
4
  import {
5
5
  isTombstoneRecord
6
6
  } from "./chunk-GBRG75BQ.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  getRuntimeServerContext,
3
3
  scheduleDeleteReplication
4
- } from "./chunk-3RAG2NAD.js";
4
+ } from "./chunk-UKWGR5SS.js";
5
5
  import {
6
6
  fetchFromClientDb
7
7
  } from "./chunk-QOKAKDPE.js";
@@ -10,7 +10,7 @@ import {
10
10
  import {
11
11
  patch,
12
12
  readAndWait
13
- } from "./chunk-YFADVSZE.js";
13
+ } from "./chunk-5EJZGJS2.js";
14
14
  import {
15
15
  asOptionalTrimmedString
16
16
  } from "./chunk-G3SUCT4W.js";
@@ -326,7 +326,7 @@ async function saveDocState(arg, { dispatch, getState }) {
326
326
  ).unwrap();
327
327
  if (dbSpaceId) {
328
328
  try {
329
- const { updateContentTitle } = await import("./contentThunks-3BFZJFHI.js");
329
+ const { updateContentTitle } = await import("./contentThunks-Y2ACIFDB.js");
330
330
  await dispatch(
331
331
  updateContentTitle({
332
332
  spaceId: dbSpaceId,
@@ -365,7 +365,7 @@ async function saveDocState(arg, { dispatch, getState }) {
365
365
  }
366
366
  }
367
367
  async function createDocState(args, thunkApi) {
368
- const { createPageAction } = await import("./createPageAction-MZZLQPFE.js");
368
+ const { createPageAction } = await import("./createPageAction-FFNIZPIS.js");
369
369
  return createPageAction(args, thunkApi);
370
370
  }
371
371
  function subscribe(listener) {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  fetchReferenceContents,
3
3
  resolveReferenceAssets
4
- } from "./chunk-2SFNAHL6.js";
4
+ } from "./chunk-JC2WQS66.js";
5
5
 
6
6
  // packages/ai/agent/fetchAgentContexts.ts
7
7
  async function fetchAgentContexts(references, dispatch) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  trimTrailingSlash
3
- } from "./chunk-CMH2SYHX.js";
3
+ } from "./chunk-X77EN2BJ.js";
4
4
  import {
5
5
  toErrorMessage
6
6
  } from "./chunk-HNMXYYJR.js";
@@ -35,15 +35,15 @@ import {
35
35
  resolvePlatformAuthToken,
36
36
  resolvePlatformServerUrl,
37
37
  resolveProviderTransportDecision
38
- } from "./chunk-CMH2SYHX.js";
38
+ } from "./chunk-X77EN2BJ.js";
39
39
  import {
40
40
  clipCompactText,
41
41
  isMeaningfulChatCompletionOutput,
42
42
  isMeaningfulResponsesOutput
43
- } from "./chunk-E36HZARC.js";
43
+ } from "./chunk-KT6LENVP.js";
44
44
  import {
45
45
  NOLO_CLIENT_VERSION_HEADER
46
- } from "./chunk-AJHEFRGJ.js";
46
+ } from "./chunk-UWMQ6FPM.js";
47
47
  import {
48
48
  isRecord
49
49
  } from "./chunk-KUG52IAP.js";
@@ -0,0 +1,109 @@
1
+ // packages/agent-runtime/devinOAuth.ts
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { join } from "node:path";
5
+ var DEVIN_CONNECT_URL = "https://server.codeium.com/exa.api_server_pb.ApiServerService/GetChatMessage";
6
+ function buildDevinAuthUrl(orgId) {
7
+ const cleanOrg = orgId?.trim();
8
+ if (cleanOrg) {
9
+ return `https://app.devin.ai/org/${encodeURIComponent(cleanOrg)}/settings/keys`;
10
+ }
11
+ return "https://app.devin.ai/settings/keys";
12
+ }
13
+ function extractDevinToken(input) {
14
+ const raw = input?.trim();
15
+ if (!raw) return null;
16
+ if (/^https?:\/\//i.test(raw)) {
17
+ try {
18
+ const url = new URL(raw);
19
+ const queryToken = url.searchParams.get("token") || url.searchParams.get("access_token") || url.searchParams.get("auth_token");
20
+ if (queryToken?.trim()) return queryToken.trim();
21
+ if (url.hash) {
22
+ const hashParams = new URLSearchParams(url.hash.replace(/^#/, ""));
23
+ const hashToken = hashParams.get("token") || hashParams.get("access_token") || hashParams.get("auth_token");
24
+ if (hashToken?.trim()) return hashToken.trim();
25
+ }
26
+ } catch {
27
+ }
28
+ }
29
+ return raw || null;
30
+ }
31
+ function parseDevinCredentialsToml(content) {
32
+ for (const line of content.split(/\r?\n/)) {
33
+ const cogMatch = line.match(/(cog_[A-Za-z0-9_-]+)/);
34
+ if (cogMatch?.[1]) {
35
+ return cogMatch[1].trim();
36
+ }
37
+ const match = line.match(
38
+ /^\s*(?:windsurf_api_key|devin_api_key|api_key|api_token|token)\s*=\s*"([^"]+)"\s*$/i
39
+ );
40
+ if (match?.[1]) {
41
+ return match[1].trim();
42
+ }
43
+ }
44
+ return null;
45
+ }
46
+ function detectLocalDevinCredentials(options) {
47
+ const baseHome = options?.homeDir || homedir();
48
+ const xdgData = process.env.XDG_DATA_HOME;
49
+ const candidateCliPaths = [
50
+ xdgData ? join(xdgData, "devin", "credentials.toml") : null,
51
+ join(baseHome, ".local", "share", "devin", "credentials.toml"),
52
+ process.env.APPDATA ? join(process.env.APPDATA, "devin", "credentials.toml") : null
53
+ ].filter((p) => Boolean(p));
54
+ for (const credPath of candidateCliPaths) {
55
+ if (existsSync(credPath)) {
56
+ try {
57
+ const content = readFileSync(credPath, "utf-8");
58
+ const token = parseDevinCredentialsToml(content);
59
+ if (token) {
60
+ return {
61
+ found: true,
62
+ token,
63
+ source: "devin-cli",
64
+ sourcePath: credPath
65
+ };
66
+ }
67
+ } catch {
68
+ }
69
+ }
70
+ }
71
+ const codeiumPath = join(baseHome, ".codeium", "config.json");
72
+ if (existsSync(codeiumPath)) {
73
+ try {
74
+ const parsed = JSON.parse(readFileSync(codeiumPath, "utf-8"));
75
+ const token = parsed.apiKey || parsed.api_key;
76
+ if (token?.trim()) {
77
+ return {
78
+ found: true,
79
+ token: token.trim(),
80
+ source: "codeium-config",
81
+ sourcePath: codeiumPath
82
+ };
83
+ }
84
+ } catch {
85
+ }
86
+ }
87
+ return { found: false };
88
+ }
89
+ function buildDevinOAuthCredential(token, now = Date.now()) {
90
+ return {
91
+ provider: "devin",
92
+ accessToken: token.trim(),
93
+ obtainedAt: now
94
+ };
95
+ }
96
+ function isDevinOAuthAgent(agent) {
97
+ const ref = agent.apiKeyRef?.trim().toLowerCase();
98
+ const prov = agent.provider?.trim().toLowerCase();
99
+ return ref === "devin" || prov === "devin";
100
+ }
101
+
102
+ export {
103
+ DEVIN_CONNECT_URL,
104
+ buildDevinAuthUrl,
105
+ extractDevinToken,
106
+ detectLocalDevinCredentials,
107
+ buildDevinOAuthCredential,
108
+ isDevinOAuthAgent
109
+ };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  selectCurrentServer,
3
3
  selectRemoteServers
4
- } from "./chunk-XWNRAIUL.js";
4
+ } from "./chunk-JITSBA52.js";
5
5
  import {
6
6
  createUserKey,
7
7
  extractAgentInfo,
@@ -10,11 +10,11 @@ import {
10
10
  sanitizeShareData,
11
11
  shareKey,
12
12
  toNonEmptyString
13
- } from "./chunk-NHRQCXIQ.js";
13
+ } from "./chunk-VMFTFOWF.js";
14
14
  import {
15
15
  noloDeleteRequest,
16
16
  noloWriteRequest
17
- } from "./chunk-3RAG2NAD.js";
17
+ } from "./chunk-UKWGR5SS.js";
18
18
  import {
19
19
  normalizeTimeFields
20
20
  } from "./chunk-QOKAKDPE.js";
@@ -3,10 +3,13 @@ import {
3
3
  } from "./chunk-YYLHWIW6.js";
4
4
  import {
5
5
  compareAgentSelection
6
- } from "./chunk-V3ZKNK5D.js";
6
+ } from "./chunk-OKCTLCKS.js";
7
+ import {
8
+ isAntigravityOAuthAgent
9
+ } from "./chunk-DS3SQTDT.js";
7
10
  import {
8
11
  getModelAbility
9
- } from "./chunk-NG4UT4K4.js";
12
+ } from "./chunk-23RQKXP6.js";
10
13
  import {
11
14
  isOwnedAgentKey,
12
15
  ownedAgentKey,
@@ -14,12 +17,23 @@ import {
14
17
  } from "./chunk-BJIRLHJR.js";
15
18
  import {
16
19
  fnv1a32Hex
17
- } from "./chunk-3RAG2NAD.js";
20
+ } from "./chunk-UKWGR5SS.js";
18
21
 
19
22
  // packages/ai/agent/agentBilling.ts
20
23
  function resolveBillingSource(candidate) {
21
24
  if (candidate?.local === true || candidate?.isLocal === true || candidate?.cliProvider === "local" || candidate?.apiSource === "local" || candidate?.provider === "local" || candidate?.billingSource === "local") return "local";
22
- if (candidate?.isOwned !== true) return "platform_credits";
25
+ if (candidate?.isOwned !== true) {
26
+ const ownerUserId = typeof candidate?.userId === "string" && candidate.userId.trim() ? candidate.userId.trim() : typeof candidate?.ownerId === "string" && candidate.ownerId.trim() ? candidate.ownerId.trim() : "";
27
+ if (ownerUserId && (candidate?.isOAuth === true || isOAuthApiKeyRef(candidate?.apiKeyRef) || isAntigravityOAuthAgent({
28
+ key: "billing-source-probe",
29
+ apiKeyRef: candidate?.apiKeyRef ?? void 0,
30
+ provider: candidate?.provider ?? void 0,
31
+ customProviderUrl: candidate?.customProviderUrl ?? void 0
32
+ }))) {
33
+ return "owner_subscription";
34
+ }
35
+ return "platform_credits";
36
+ }
23
37
  if (candidate?.isOAuth === true || candidate?.billingSource === "user_subscription" || candidate?.apiSource === "oauth" || isOAuthApiKeyRef(candidate?.apiKeyRef)) return "user_subscription";
24
38
  if (candidate?.apiSource === "custom" || candidate?.billingSource === "user_api") {
25
39
  return "user_api";
@@ -217,6 +231,7 @@ function summarizeCredentialGroups(agents, now = Date.now()) {
217
231
  const groups = /* @__PURE__ */ new Map();
218
232
  for (const agent of agents) {
219
233
  if (!agent.credentialGroup || !agent.credentialKind) continue;
234
+ if (agent.isOwned === false) continue;
220
235
  const existing = groups.get(agent.credentialGroup);
221
236
  const at = typeof agent.nextAvailableAt === "number" && agent.nextAvailableAt > now ? agent.nextAvailableAt : void 0;
222
237
  if (!existing) {
@@ -278,6 +293,9 @@ function resolveFavoriteStatus(record, options) {
278
293
  if (typeof record?.dbKey === "string" && record.dbKey) candidateKeys.push(record.dbKey);
279
294
  if (typeof record?.privateKey === "string" && record.privateKey) candidateKeys.push(record.privateKey);
280
295
  if (typeof record?.publicKey === "string" && record.publicKey) candidateKeys.push(record.publicKey);
296
+ if (typeof record?.verifiedAgentKey === "string" && record.verifiedAgentKey) {
297
+ candidateKeys.push(record.verifiedAgentKey);
298
+ }
281
299
  if (typeof record?.id === "string" && record.id) {
282
300
  candidateKeys.push(record.id);
283
301
  candidateKeys.push(publicAgentKey(record.id));
@@ -362,12 +380,15 @@ function toSafeAgentSummary(record, options) {
362
380
  },
363
381
  options?.now ?? Date.now()
364
382
  );
383
+ const verifiedSharedKey = typeof record?.verifiedAgentKey === "string" && record.verifiedAgentKey ? record.verifiedAgentKey : void 0;
365
384
  let agentKey;
366
385
  if (currentUserId) {
367
386
  if (isOwned) {
368
387
  agentKey = ownedKey ?? (id ? ownedAgentKey(currentUserId, id) : void 0);
369
388
  } else if (publicKey) {
370
389
  agentKey = publicKey;
390
+ } else {
391
+ agentKey = verifiedSharedKey;
371
392
  }
372
393
  }
373
394
  const rawCredRef = (typeof record?.apiKeyRef === "string" && record.apiKeyRef ? record.apiKeyRef : void 0) ?? (typeof record?.credentialRef === "string" && record.credentialRef ? record.credentialRef : void 0);
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-UAD2WT54.js";
8
8
  import {
9
9
  toTimestampMs
10
- } from "./chunk-YFADVSZE.js";
10
+ } from "./chunk-5EJZGJS2.js";
11
11
  import {
12
12
  fetchFromServer,
13
13
  getAllServers