Context 是 Cordis 中最核心的概念,它既是服务容器,也是上下文隔离的边界,同时还是聚合了所有核心能力的门面对象。
每个服务在 Context 上占据一个稳定的键位(如 ctx.tools、ctx.llm、ctx.sessions),提供方通过 ctx.provide() 将对象与服务名绑定,消费方通过 ctx.get() 或直接以 ctx.xxx 的形式读取。其他插件通过键名查找服务,而不是直接导入某个具体实现,从而实现依赖倒置——更换一个服务的实现,所有依赖该服务的插件都无需改动。
Context 通过代理(Proxy)将各个核心服务的方法混入自身,因此 ctx.on() 本质是事件服务的分发、ctx.plugin() 本质是注册表服务的挂载、ctx.effect() 本质是纤程副作用系统的登记。开发者面对的始终是一个统一的 ctx 对象,无需关心底层服务的边界。
每一个插件都在属于它自己的 Context 中被调用,并继承其父上下文的全部功能。Context 因此成为插件隔离的天然边界,父节点卸载时,整棵子上下文构成的子树会跟随一起回收。