@chatpanel/events 0.98.0 → 0.98.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/model-picker.js CHANGED
@@ -102,9 +102,9 @@ export function groupModels(models, { selectedId = '' } = {}) {
102
102
  if (agents.length) {
103
103
  sections.push({
104
104
  key: 'agents',
105
- // Naming phase 1 (naming-revamp.md): the CLI coding agents are HARNESSES — a runtime one
105
+ // Naming (naming-revamp.md): the CLI coding agents are AGENT TOOLS — a runtime one
106
106
  // of the user's own agents can be given as its engine. The key and kind are code.
107
- label: 'Harnesses',
107
+ label: 'Agent Tools',
108
108
  kind: 'agent',
109
109
  items: agents.slice().sort(availableFirst).map(decorate),
110
110
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chatpanel/events",
3
- "version": "0.98.0",
3
+ "version": "0.98.1",
4
4
  "description": "The canonical ChatPanel event-log and capability contracts — typed durable facts, clock-free deterministic linearization, schema upcasting, and the invariants the replay harness asserts. Pure, dependency-free ESM shared by the ChatPanel extension, gateway and bridge.",
5
5
  "type": "module",
6
6
  "main": "index.js",
package/recruit.js CHANGED
@@ -143,7 +143,7 @@ export function needForJob(job, { reach = 'any' } = {}) {
143
143
  const capabilities = [];
144
144
  const why = [];
145
145
  if (tools.length || grants.length) { capabilities.push('tools'); why.push('the job uses tools'); }
146
- if (harness) why.push(`a work grant (${grants.filter((g) => WORK_GRANTS.includes(g)).join(', ')}) needs a harness`);
146
+ if (harness) why.push(`a work grant (${grants.filter((g) => WORK_GRANTS.includes(g)).join(', ')}) needs an agent tool`);
147
147
  const r = REACH_RANK[reach] != null ? reach : 'any';
148
148
  if (r !== 'any') why.push(`reach ≤ ${r} (the project's privacy setting)`);
149
149
  return { capabilities, harness, reach: r, why };
@@ -155,7 +155,7 @@ const meets = (row, need, policy) => {
155
155
  const why = [];
156
156
  if (row.available === false) why.push('unavailable right now');
157
157
  if (REACH_RANK[row.reach] > REACH_RANK[need.reach]) why.push(`reach ${row.reach} exceeds ${need.reach}`);
158
- if (need.harness && row.engine.kind !== 'harness') why.push('not a harness');
158
+ if (need.harness && row.engine.kind !== 'harness') why.push('not an agent tool');
159
159
  const missing = need.capabilities.filter((c) => !row.capabilities.includes(c));
160
160
  // A harness brings its own tools; the capability list of a bridge agent is the host's guess.
161
161
  if (missing.length && !(row.engine.kind === 'harness' && missing.every((c) => c === 'tools'))) why.push(`lacks ${missing.join(', ')}`);
@@ -222,7 +222,7 @@ export function routeFor(agent, job, { rows = [], summary = null, need = null, r
222
222
  const policy = spec.policy || {};
223
223
  const rejected = [];
224
224
  const cleared = list.filter((r) => { const why = meets(r, n, policy); if (why.length) rejected.push(`${r.key}: ${why.join('; ')}`); return !why.length; });
225
- if (!cleared.length) return none([`no engine clears ${n.harness ? 'a harness with ' : ''}${n.capabilities.join(', ') || 'the requirements'}${n.reach !== 'any' ? ` within reach ${n.reach}` : ''}${policy.prefer ? ` under ${policy.prefer}` : ''}`, ...rejected.slice(0, 4)]);
225
+ if (!cleared.length) return none([`no engine clears ${n.harness ? 'an agent tool with ' : ''}${n.capabilities.join(', ') || 'the requirements'}${n.reach !== 'any' ? ` within reach ${n.reach}` : ''}${policy.prefer ? ` under ${policy.prefer}` : ''}`, ...rejected.slice(0, 4)]);
226
226
  const ordered = orderByPolicy(cleared, policy.prefer || 'balanced', summary);
227
227
  let pick = ordered[0];
228
228
  let exploration = false;