@divaltor/academy 0.4.0 → 0.4.2

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 CHANGED
@@ -27,11 +27,12 @@ Add Academy to `opencode.jsonc`. All options are optional:
27
27
  "rudolf": {
28
28
  "name": "Emperor",
29
29
  "color": "#8994B8",
30
- "model": "anthropic/claude-opus-4-1#max",
30
+ "model": "opencode/claude-opus-5#max",
31
31
  },
32
32
  },
33
33
  "experimental": {
34
34
  "communication": {
35
+ "enabled": true,
35
36
  "thread_summary": "opencode-go/glm-5.3-flash",
36
37
  },
37
38
  },
@@ -58,7 +59,7 @@ Each agent under `agents` accepts `name`, `color`, and `model`. Colors may be si
58
59
  >
59
60
  > An agent's name is also its session ID. Renaming it can prevent existing sessions from continuing.
60
61
 
61
- Session tools are experimental and off by default; set `experimental.communication` to enable them. They are available under Code Mode's `academy` namespace. Only the root primary session can create threads; omit `agent` for a general coding session.
62
+ Session tools are experimental and off by default; set `experimental.communication.enabled` to `true` to enable them. They are available under Code Mode's `academy` namespace. Only the root primary session can create threads; omit `agent` for a general coding session.
62
63
 
63
64
  > [!NOTE]
64
65
  >
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@divaltor/academy",
3
- "version": "0.4.0",
3
+ "version": "0.4.2",
4
4
  "description": "An OpenCode plugin that trains a Tracen Academy roster of specialist coding agents to research, build, and review.",
5
5
  "homepage": "https://github.com/divaltor/academy#readme",
6
6
  "bugs": {
@@ -4,8 +4,9 @@ You are **Cafe**, an external research subagent. Return evidence-backed answers
4
4
 
5
5
  - Establish the package, provider, protocol, or repository; the exact external question; the relevant version or date when known; and the decision the research must support. State any material version assumption.
6
6
  - When the Academy GitHub tools are available, prefer version-matched official repository source as the primary definition of behavior and internals. Cite commit-pinned source links.
7
- - Check official documentation, API references, and release notes in parallel or as the fallback, especially for supported contracts, intended usage, and migrations. Report material differences between documented and source-confirmed behavior.
8
- - Batch genuinely independent research questions. Open only the sources needed to answer them.
7
+ - Check official documentation, API references, and release notes as needed, especially for supported contracts, intended usage, and migrations. Report material differences between documented and source-confirmed behavior.
8
+ - Batch genuinely independent non-GitHub research. Keep Academy GitHub calls sequential because GitHub search and abuse limits are low; prefer direct repository, release, tag, and file reads over search, and honor any requested retry delay before continuing.
9
+ - Do not assume a package version is also a GitHub release tag. Discover the repository's release or tag convention before fetching a specific version, and treat an expected missing release as an isolated evidence gap rather than failing unrelated research.
9
10
  - Treat a canonical primary source as sufficient for a stable factual claim. Cross-check claims when sources conflict, the behavior is fast-changing or security-sensitive, or the recommendation depends on real-world practice.
10
11
  - Use the Academy GitHub tools for external repository source, history, issues, and pull requests. Use downstream examples only when real-world usage is material.
11
12
  - State material uncertainty, source conflicts, and evidence gaps explicitly.
package/src/index.ts CHANGED
@@ -54,6 +54,7 @@ const setup = Effect.fn("Academy.setup")(function* setup(ctx: Plugin.Context) {
54
54
  Agent.ID.make(agentOptions[id]?.name ?? id);
55
55
  const configuredAgentIDs = agents.map((agent) => agentID(agent.id));
56
56
  const communication = options.experimental?.communication;
57
+ const communicationEnabled = communication?.enabled === true;
57
58
 
58
59
  if (new Set(configuredAgentIDs).size !== configuredAgentIDs.length) {
59
60
  return yield* Effect.die(
@@ -102,7 +103,7 @@ const setup = Effect.fn("Academy.setup")(function* setup(ctx: Plugin.Context) {
102
103
  agent.color =
103
104
  agentOptions[definition.id]?.color ?? agent.color ?? definition.color;
104
105
  const base =
105
- definition.id === "rudolf" && communication !== undefined
106
+ definition.id === "rudolf" && communicationEnabled
106
107
  ? definition.system.replace(
107
108
  "# Communication",
108
109
  `${rudolfCommunicationPrompt}\n\n# Communication`
@@ -133,7 +134,7 @@ const setup = Effect.fn("Academy.setup")(function* setup(ctx: Plugin.Context) {
133
134
  editor.default(agentID("rudolf"));
134
135
  });
135
136
 
136
- if (communication !== undefined) {
137
+ if (communication !== undefined && communicationEnabled) {
137
138
  yield* SessionCommunication.register(ctx, communication, agentID("rudolf"));
138
139
  }
139
140
  });
@@ -43,6 +43,7 @@ export namespace SessionCommunication {
43
43
  );
44
44
 
45
45
  export const Options = Schema.Struct({
46
+ enabled: Schema.optionalKey(Schema.Boolean),
46
47
  thread_summary: Schema.optionalKey(ModelReference),
47
48
  });
48
49