aimeat 1.34.0 → 1.35.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 (58) hide show
  1. package/dist/locales/en.json +52 -4
  2. package/dist/locales/fi.json +52 -4
  3. package/dist/public/css/views/secretary.css +52 -0
  4. package/dist/public/js/i18n.js +9 -0
  5. package/dist/public/js/services/secretary-helpers.js +8 -4
  6. package/dist/public/js/services/secretary-policy.js +28 -3
  7. package/dist/public/views/profile/agents/agent-card.js +6 -4
  8. package/dist/public/views/profile/agents/tab-integration.js +5 -2
  9. package/dist/public/views/secretary/cards.js +46 -15
  10. package/dist/public/views/secretary/dashboard.js +68 -2
  11. package/dist/public/views/secretary.js +208 -40
  12. package/dist/src/cli/connect/mcp/tools/organisms.d.ts +2 -0
  13. package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
  14. package/dist/src/cli/connect/mcp/tools/organisms.js +9 -1
  15. package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
  16. package/dist/src/cli/connect/onboarding-prompt.d.ts +3 -0
  17. package/dist/src/cli/connect/onboarding-prompt.d.ts.map +1 -1
  18. package/dist/src/cli/connect/onboarding-prompt.js +10 -3
  19. package/dist/src/cli/connect/onboarding-prompt.js.map +1 -1
  20. package/dist/src/generated/api-types.d.ts +309 -2
  21. package/dist/src/generated/api-types.d.ts.map +1 -1
  22. package/dist/src/mcp/agent-onboarding.d.ts +4 -0
  23. package/dist/src/mcp/agent-onboarding.d.ts.map +1 -1
  24. package/dist/src/mcp/agent-onboarding.js +28 -2
  25. package/dist/src/mcp/agent-onboarding.js.map +1 -1
  26. package/dist/src/models/agent-onboarding-schemas.d.ts +47 -0
  27. package/dist/src/models/agent-onboarding-schemas.d.ts.map +1 -1
  28. package/dist/src/models/agent-onboarding-schemas.js +117 -0
  29. package/dist/src/models/agent-onboarding-schemas.js.map +1 -1
  30. package/dist/src/routes/agent-onboarding.d.ts +5 -0
  31. package/dist/src/routes/agent-onboarding.d.ts.map +1 -1
  32. package/dist/src/routes/agent-onboarding.js +21 -2
  33. package/dist/src/routes/agent-onboarding.js.map +1 -1
  34. package/dist/src/routes/secretary.d.ts +7 -2
  35. package/dist/src/routes/secretary.d.ts.map +1 -1
  36. package/dist/src/routes/secretary.js +119 -28
  37. package/dist/src/routes/secretary.js.map +1 -1
  38. package/dist/src/services/onboarding-guide.d.ts +53 -0
  39. package/dist/src/services/onboarding-guide.d.ts.map +1 -0
  40. package/dist/src/services/onboarding-guide.js +81 -0
  41. package/dist/src/services/onboarding-guide.js.map +1 -0
  42. package/dist/src/services/scheduler.d.ts +9 -0
  43. package/dist/src/services/scheduler.d.ts.map +1 -1
  44. package/dist/src/services/scheduler.js +48 -23
  45. package/dist/src/services/scheduler.js.map +1 -1
  46. package/dist/src/services/secretary-workbrief.d.ts +144 -0
  47. package/dist/src/services/secretary-workbrief.d.ts.map +1 -0
  48. package/dist/src/services/secretary-workbrief.js +315 -0
  49. package/dist/src/services/secretary-workbrief.js.map +1 -0
  50. package/dist/src/services/secretary-worktier.d.ts +118 -0
  51. package/dist/src/services/secretary-worktier.d.ts.map +1 -0
  52. package/dist/src/services/secretary-worktier.js +157 -0
  53. package/dist/src/services/secretary-worktier.js.map +1 -0
  54. package/dist/src/services/skill-bundle/generator.d.ts +3 -0
  55. package/dist/src/services/skill-bundle/generator.d.ts.map +1 -1
  56. package/dist/src/services/skill-bundle/generator.js +19 -0
  57. package/dist/src/services/skill-bundle/generator.js.map +1 -1
  58. package/package.json +1 -1
@@ -9,10 +9,15 @@
9
9
  * @structure secretaryRouter(config, storage, peers) -> Router
10
10
  * - POST /v1/secretary/clarify — send the questions secretary#owner→owner + store the produce job
11
11
  * - POST /v1/secretary/reset — wipe the owner's Secretary back to zero (start over)
12
- * - POST /v1/secretary/author-now — fill the active context's workspaces with REAL content at setup
13
- * (reuses services/secretary-authoring) + remove any workspace left empty ("empty = useless")
12
+ * - POST /v1/secretary/brief — propose grounded Work Briefs for the active context's gaps (heavy
13
+ * work is DISPATCHED to a Builder, not authored here); deterministic + idempotent, never touches content
14
+ * - GET /v1/secretary/briefs — list the open Work Briefs (proposed/dispatched) for the brief tray
14
15
  * @usage app.use(secretaryRouter(config, storage, peers));
15
16
  * @version-history
17
+ * v0.4.0 — 2026-07-01 — Light-vs-heavy seam: REPLACED author-now (cheap one-shot authoring that
18
+ * hallucinated) with POST /v1/secretary/brief — the Secretary detects structural gaps and proposes a
19
+ * grounded Work Brief a Builder executes via the appdev MCP tools, instead of inventing content. Adds
20
+ * GET /v1/secretary/briefs for the brief tray. See services/secretary-workbrief + secretary-worktier.
16
21
  * v0.3.0 — 2026-06-30 — author-now: fill workspaces with real content at handshake (documents first,
17
22
  * schema-valid records, agentic retry) instead of waiting for a tick, and drop any still-empty
18
23
  * workspace. Pairs with the Secretary setup skipping fake "example-N" placeholder records.
@@ -32,7 +37,8 @@ import { listSpecialists, deleteSpecialistConfig } from '../services/specialist.
32
37
  import { getActiveScheduler } from '../services/scheduler.js';
33
38
  import { emitChange } from '../services/event-bus.js';
34
39
  import { logger } from '../utils/logger.js';
35
- import { authorWorkspaceContent } from '../services/secretary-authoring.js';
40
+ import { proposeWorkBriefs, updateBriefStatus, resolveCompletedBriefs, BRIEF_KEY_PREFIX } from '../services/secretary-workbrief.js';
41
+ import { randomUUID } from 'node:crypto';
36
42
  const ClarifySchema = z.object({
37
43
  contextId: z.string().min(1).max(200),
38
44
  contextName: z.string().max(200).optional().default(''),
@@ -166,54 +172,139 @@ export function secretaryRouter(config, storage, peers) {
166
172
  res.status(500).json(error(config.nodeId, 'INTERNAL_ERROR', 'Failed to reset the Secretary'));
167
173
  }
168
174
  });
169
- // ── POST /v1/secretary/author-now ── fill the active context's workspaces with REAL content at SETUP
170
- // ("heti kättelyssä"), reusing the tested authoring service (documents first, schema-valid records,
171
- // agentic retry on flaky models). NEVER deletes a workspace — additive only. (An earlier version
172
- // removed "empty" workspaces after authoring; when the fill produced nothing it nuked ALL the user's
173
- // freshly-created workspaces, leaving an organism with zero spaces. Auto-deleting the owner's
174
- // workspaces is never acceptable, so authoring only ever ADDS content; empties simply stay.)
175
- // Runs as a one-time act-band pass; the persisted band is untouched. Synchronous: the caller waits
176
- // (a slow model can take a while), so call it with a long client timeout.
177
- router.post('/v1/secretary/author-now', requireAuth(), requireRole('owner'), async (req, res) => {
175
+ // ── POST /v1/secretary/brief ── propose grounded Work Briefs for the active context's workspaces (the
176
+ // heavy-work path). The cheap Secretary NO LONGER authors content one-shot (it hallucinated and went
177
+ // "onto the Builders' turf"); instead it detects structural gaps (empty/thin workspaces, stale content,
178
+ // off-target KPIs) and assembles a brief — Current picture + real Discovery sources + exact schemas +
179
+ // MCP playbook — that a Builder (a connected big AI via the appdev MCP tools) executes. Deterministic
180
+ // (no paid AI call), idempotent (deduped against open briefs by gap), additive (never touches content).
181
+ // Optional `ws` scopes to one workspace. The view then offers "Open in Claude Desktop" / dispatch.
182
+ const BriefSchema = z.object({ ws: z.string().max(200).optional() });
183
+ router.post('/v1/secretary/brief', requireAuth(), requireRole('owner'), async (req, res) => {
178
184
  const owner = req.auth.owner;
179
185
  const ownerGhii = `${owner}@${config.nodeId}`;
186
+ const parsed = BriefSchema.safeParse(req.body ?? {});
187
+ if (!parsed.success) {
188
+ res.status(400).json(error(config.nodeId, 'INVALID_INPUT', parsed.error.issues[0]?.message || 'Invalid brief payload'));
189
+ return;
190
+ }
180
191
  try {
181
192
  const cfgRec = await storage.getMemory(ownerGhii, 'secretary.config');
182
193
  const cfg = (cfgRec?.value ?? {});
183
194
  const contexts = Array.isArray(cfg.contexts) ? cfg.contexts : [];
184
195
  const active = contexts.find((c) => c.id === cfg.activeContextId) || contexts[0];
185
196
  if (!active || !active.organismId) {
186
- res.status(400).json(error(config.nodeId, 'NO_CONTEXT', 'No active Secretary context with an organism to fill.'));
197
+ res.status(400).json(error(config.nodeId, 'NO_CONTEXT', 'No active Secretary context with an organism to brief.'));
187
198
  return;
188
199
  }
189
200
  const orgId = active.organismId;
190
- // Open goals for this context steer what gets authored.
201
+ // Open goals for this context steer the brief's "why".
191
202
  const goalRecs = await storage.listMemory(ownerGhii, { prefix: 'secretary.goal.' }).catch(() => []);
192
203
  const openGoals = goalRecs
193
204
  .map((r) => (r.value ?? {}))
194
205
  .filter((g) => g.status === 'open' && (!g.contextId || g.contextId === active.id));
195
- // Honour the owner's autoRetry/maxRetries (flaky models retry instead of dying).
196
- const aiPrefs = (await storage.getMemory(ownerGhii, 'openrouter.settings'))?.value;
197
- const maxRetries = aiPrefs?.autoRetry === false ? 0 : (typeof aiPrefs?.maxRetries === 'number' ? aiPrefs.maxRetries : 3);
198
206
  const regKey = `organism.${orgId}.meta.workspaces`;
199
207
  const regRec = await storage.getMemory(ownerGhii, regKey);
200
208
  const wsEntries = (regRec?.value?.workspaces) ?? [];
201
- const wsList = wsEntries.filter((w) => w && w.id).map((w) => ({ id: w.id, name: w.name || w.id }));
202
- // Author real content (act → publish), reusing the agentic, doc-first, retrying service. ADDITIVE
203
- // ONLY — a workspace that the fill couldn't populate stays exactly as it is; nothing is ever deleted.
204
- const authored = await authorWorkspaceContent(storage, config, ownerGhii, owner, active, wsList, {
205
- openGoals, band: 'act', aggressive: true, useGeneralKnowledge: true, budgetRemaining: null, maxRetries, appId: 'setup:author',
209
+ let wsList = wsEntries.filter((w) => w && w.id).map((w) => ({ id: w.id, name: w.name || w.id }));
210
+ const onlyWs = parsed.data.ws;
211
+ if (onlyWs)
212
+ wsList = wsList.filter((w) => w.id === onlyWs);
213
+ const { briefs } = await proposeWorkBriefs(storage, config, { ownerGhii, ownerName: owner, active, wsList, openGoals });
214
+ emitChange('agents');
215
+ logger.info('[secretary] brief', { owner, proposed: briefs.length, workspaces: wsList.length });
216
+ res.json(success(config.nodeId, {
217
+ briefs: briefs.map((b) => ({ id: b.id, objective: b.objective, ws: b.ws, wsName: b.wsName, gaps: b.gaps.length, status: b.status })),
218
+ proposed: briefs.length, workspaces: wsList.length,
219
+ }, [{ description: 'Open the Secretary', method: 'GET', url: '/v1/secretary' }]));
220
+ }
221
+ catch (err) {
222
+ logger.error('[secretary] brief failed', { owner, error: err.message });
223
+ res.status(500).json(error(config.nodeId, 'INTERNAL_ERROR', 'Failed to build work briefs'));
224
+ }
225
+ });
226
+ // ── GET /v1/secretary/briefs ── list the open Work Briefs (proposed/dispatched) for the brief tray, newest
227
+ // first. Owner-scoped private memory; the full brief markdown + MCP hints are included so the view can
228
+ // render "Open in Claude Desktop" without a second fetch.
229
+ router.get('/v1/secretary/briefs', requireAuth(), requireRole('owner'), async (req, res) => {
230
+ const owner = req.auth.owner;
231
+ const ownerGhii = `${owner}@${config.nodeId}`;
232
+ // Self-heal: a dispatched brief whose Builder task has finished flips to 'done' here, so it leaves the
233
+ // tray on its own when the owner looks — no manual Done needed.
234
+ await resolveCompletedBriefs(storage, ownerGhii).catch(() => 0);
235
+ const recs = await storage.listMemory(ownerGhii, { prefix: BRIEF_KEY_PREFIX }).catch(() => []);
236
+ const briefs = recs
237
+ .map((r) => r.value)
238
+ .filter((b) => b && (b.status === 'proposed' || b.status === 'dispatched'))
239
+ .sort((a, b) => (a.createdAt < b.createdAt ? 1 : a.createdAt > b.createdAt ? -1 : 0));
240
+ res.json(success(config.nodeId, { briefs }));
241
+ });
242
+ // ── POST /v1/secretary/brief/:id/dispatch ── queue a Work Brief as a task a connected Builder picks up
243
+ // and runs via the appdev MCP tools (lane b). The Builder is any of THIS owner's connected agents that
244
+ // is NOT the Secretary (the watcher) or a node-local specialist. Marks the brief 'dispatched'.
245
+ const DispatchSchema = z.object({ targetAgent: z.string().min(1).max(300) });
246
+ router.post('/v1/secretary/brief/:id/dispatch', requireAuth(), requireRole('owner'), async (req, res) => {
247
+ const owner = req.auth.owner;
248
+ const ownerGhii = `${owner}@${config.nodeId}`;
249
+ const briefId = req.params.id;
250
+ const parsed = DispatchSchema.safeParse(req.body ?? {});
251
+ if (!parsed.success) {
252
+ res.status(400).json(error(config.nodeId, 'INVALID_INPUT', 'targetAgent is required'));
253
+ return;
254
+ }
255
+ try {
256
+ const rec = await storage.getMemory(ownerGhii, `${BRIEF_KEY_PREFIX}${briefId}`);
257
+ if (!rec) {
258
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Work brief not found'));
259
+ return;
260
+ }
261
+ const brief = rec.value;
262
+ // Resolve + authorize the target Builder: it must be one of THIS owner's agents, and not the Secretary
263
+ // or a node-local specialist (those are not Builders — heavy work goes to a big external AI via MCP).
264
+ const agent = await storage.getAgent(parsed.data.targetAgent);
265
+ if (!agent || agent.owner !== owner) {
266
+ res.status(400).json(error(config.nodeId, 'INVALID_TARGET', 'Unknown Builder for this owner'));
267
+ return;
268
+ }
269
+ const tags = agent.tags || [];
270
+ if (tags.includes('system:secretary') || tags.includes('system:specialist')) {
271
+ res.status(400).json(error(config.nodeId, 'INVALID_TARGET', 'Pick a connected Builder (a big AI), not the Secretary or a specialist'));
272
+ return;
273
+ }
274
+ const now = new Date().toISOString();
275
+ const taskId = randomUUID();
276
+ await storage.createAgentTask({
277
+ id: taskId, agentGaii: agent.gaii, ownerGaii: ownerGhii,
278
+ title: String(brief.objective || 'Work brief').slice(0, 200), description: String(brief.brief || '').slice(0, 20000),
279
+ scope: [], rules: [], verification: { userExpects: String(brief.objective || ''), technicalChecks: [] }, todos: [],
280
+ status: 'queued', parentTaskId: `brief:${briefId}`, createdAt: now, updatedAt: now,
206
281
  });
207
- emitChange('organisms');
208
- logger.info('[secretary] author-now', { owner, authored: authored.summaries.length, workspaces: wsList.length, morsels: authored.morsels });
209
- res.json(success(config.nodeId, { authored: authored.summaries, workspaces: wsList.length, morsels: authored.morsels }, [
210
- { description: 'Open the workspaces', method: 'GET', url: `/v1/profile?tab=organisms&org=${orgId}` },
282
+ await updateBriefStatus(storage, ownerGhii, briefId, { status: 'dispatched', dispatchedTo: agent.gaii, taskId });
283
+ emitChange('agent-tasks', ownerGhii);
284
+ emitChange('agents');
285
+ logger.info('[secretary] brief dispatched', { owner, briefId, to: agent.gaii, taskId });
286
+ res.json(success(config.nodeId, { dispatched: true, taskId, to: agent.gaii }, [
287
+ { description: 'Track the task', method: 'GET', url: `/v1/agents/${encodeURIComponent(agent.name)}/tasks` },
211
288
  ]));
212
289
  }
213
290
  catch (err) {
214
- logger.error('[secretary] author-now failed', { owner, error: err.message });
215
- res.status(500).json(error(config.nodeId, 'INTERNAL_ERROR', 'Failed to author workspace content'));
291
+ logger.error('[secretary] brief dispatch failed', { owner, briefId, error: err.message });
292
+ res.status(500).json(error(config.nodeId, 'INTERNAL_ERROR', 'Failed to dispatch the brief'));
293
+ }
294
+ });
295
+ // ── POST /v1/secretary/brief/:id/done ── resolve a Work Brief (the owner handled it, or it's no longer
296
+ // relevant). Marks it 'done' so it leaves the tray; the tick won't re-propose the same gap.
297
+ router.post('/v1/secretary/brief/:id/done', requireAuth(), requireRole('owner'), async (req, res) => {
298
+ const owner = req.auth.owner;
299
+ const ownerGhii = `${owner}@${config.nodeId}`;
300
+ const briefId = req.params.id;
301
+ const updated = await updateBriefStatus(storage, ownerGhii, briefId, { status: 'done' });
302
+ if (!updated) {
303
+ res.status(404).json(error(config.nodeId, 'NOT_FOUND', 'Work brief not found'));
304
+ return;
216
305
  }
306
+ emitChange('agents');
307
+ res.json(success(config.nodeId, { done: true }));
217
308
  });
218
309
  return router;
219
310
  }
@@ -1 +1 @@
1
- {"version":3,"file":"secretary.js","sourceRoot":"","sources":["../../../src/routes/secretary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secretary.js","sourceRoot":"","sources":["../../../src/routes/secretary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @file onboarding-guide.ts
3
+ * @description Builds the machine-readable Hello Integration guidance attached to the
4
+ * onboarding status payload: per-step `descriptionText` + `howTo`, a flow-scoped
5
+ * `step_guide`, and a reachability `summary`. A connector drives onboarding from this
6
+ * (calling the exact tool named per pending step) instead of fabricating
7
+ * `aimeat_onboarding_<stepId>`. Single source so the REST GET and MCP status surfaces
8
+ * never drift.
9
+ * @structure
10
+ * - enrichSteps() -- per-step descriptionText + howTo (on a copy, never persisted)
11
+ * - buildStepGuide() -- { [stepId]: StepHowTo } for the steps in this agent's flow
12
+ * - buildOnboardingSummary() -- required/optional counts + completable + next_required_step
13
+ * @usage
14
+ * import { enrichSteps, buildStepGuide, buildOnboardingSummary } from '../services/onboarding-guide.js';
15
+ * @version-history
16
+ * v1.0.0 -- 2026-06-30 -- Initial creation: deterministic Hello Integration completion guidance.
17
+ */
18
+ import type { AgentOnboardingStep } from '../storage/interface.js';
19
+ import { type StepHowTo } from '../models/agent-onboarding-schemas.js';
20
+ export interface EnrichedStep extends AgentOnboardingStep {
21
+ /** Localised, human-readable resolution of `description` (which is an i18n key). */
22
+ descriptionText: string;
23
+ /** How to complete this step (tool + args), or null when the step id has no mapping. */
24
+ howTo: StepHowTo | null;
25
+ }
26
+ export interface OnboardingSummary {
27
+ required_total: number;
28
+ required_passed: number;
29
+ required_remaining: number;
30
+ optional_total: number;
31
+ optional_passed: number;
32
+ optional_remaining: number;
33
+ /** true once every required step has passed -- the agent can stop here. */
34
+ completable: boolean;
35
+ /** First not-yet-passed required step id (pending or failed), or null when none remain. */
36
+ next_required_step: string | null;
37
+ /** Ids of pending optional steps (these never block completion). */
38
+ optional_pending: string[];
39
+ }
40
+ /**
41
+ * Returns a COPY of `steps` with `descriptionText` (resolved via `resolveText`) and `howTo`
42
+ * attached. Never mutates the input -- the persisted onboarding record is untouched.
43
+ */
44
+ export declare function enrichSteps(steps: AgentOnboardingStep[], resolveText: (key: string) => string, agentName: string): EnrichedStep[];
45
+ /** Flow-scoped `{ [stepId]: StepHowTo }` -- only the steps in this agent's flow, `{name}`-substituted. */
46
+ export declare function buildStepGuide(steps: AgentOnboardingStep[], agentName: string): Record<string, StepHowTo>;
47
+ /**
48
+ * Reachability summary. Completion gates ONLY on required steps; optional steps (declare_services +
49
+ * the offers ladder) never block. All counts derive from the actual step list, so reduced
50
+ * task-runner/workstation flows report their own totals.
51
+ */
52
+ export declare function buildOnboardingSummary(steps: AgentOnboardingStep[]): OnboardingSummary;
53
+ //# sourceMappingURL=onboarding-guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-guide.d.ts","sourceRoot":"","sources":["../../../src/services/onboarding-guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAErF,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,oFAAoF;IACpF,eAAe,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB,2FAA2F;IAC3F,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,oEAAoE;IACpE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAoBD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,mBAAmB,EAAE,EAC5B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,EACpC,SAAS,EAAE,MAAM,GAChB,YAAY,EAAE,CAMhB;AAED,0GAA0G;AAC1G,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAOzG;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,EAAE,GAAG,iBAAiB,CAgBtF"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @file onboarding-guide.ts
3
+ * @description Builds the machine-readable Hello Integration guidance attached to the
4
+ * onboarding status payload: per-step `descriptionText` + `howTo`, a flow-scoped
5
+ * `step_guide`, and a reachability `summary`. A connector drives onboarding from this
6
+ * (calling the exact tool named per pending step) instead of fabricating
7
+ * `aimeat_onboarding_<stepId>`. Single source so the REST GET and MCP status surfaces
8
+ * never drift.
9
+ * @structure
10
+ * - enrichSteps() -- per-step descriptionText + howTo (on a copy, never persisted)
11
+ * - buildStepGuide() -- { [stepId]: StepHowTo } for the steps in this agent's flow
12
+ * - buildOnboardingSummary() -- required/optional counts + completable + next_required_step
13
+ * @usage
14
+ * import { enrichSteps, buildStepGuide, buildOnboardingSummary } from '../services/onboarding-guide.js';
15
+ * @version-history
16
+ * v1.0.0 -- 2026-06-30 -- Initial creation: deterministic Hello Integration completion guidance.
17
+ */
18
+ import { getStepHowTo } from '../models/agent-onboarding-schemas.js';
19
+ /** Deep-substitute `{name}` in every string within a JSON-ish value (returns a copy). */
20
+ function substituteName(value, name) {
21
+ if (typeof value === 'string')
22
+ return value.replaceAll('{name}', name);
23
+ if (Array.isArray(value))
24
+ return value.map(v => substituteName(v, name));
25
+ if (value && typeof value === 'object') {
26
+ const out = {};
27
+ for (const [k, v] of Object.entries(value))
28
+ out[k] = substituteName(v, name);
29
+ return out;
30
+ }
31
+ return value;
32
+ }
33
+ /** Resolve a step's howTo with `{name}` substituted, or null when the step id is unknown. */
34
+ function howToFor(stepId, agentName) {
35
+ const howTo = getStepHowTo(stepId);
36
+ return howTo ? substituteName(howTo, agentName) : null;
37
+ }
38
+ /**
39
+ * Returns a COPY of `steps` with `descriptionText` (resolved via `resolveText`) and `howTo`
40
+ * attached. Never mutates the input -- the persisted onboarding record is untouched.
41
+ */
42
+ export function enrichSteps(steps, resolveText, agentName) {
43
+ return steps.map(step => ({
44
+ ...step,
45
+ descriptionText: resolveText(step.description),
46
+ howTo: howToFor(step.id, agentName),
47
+ }));
48
+ }
49
+ /** Flow-scoped `{ [stepId]: StepHowTo }` -- only the steps in this agent's flow, `{name}`-substituted. */
50
+ export function buildStepGuide(steps, agentName) {
51
+ const guide = {};
52
+ for (const step of steps) {
53
+ const howTo = howToFor(step.id, agentName);
54
+ if (howTo)
55
+ guide[step.id] = howTo;
56
+ }
57
+ return guide;
58
+ }
59
+ /**
60
+ * Reachability summary. Completion gates ONLY on required steps; optional steps (declare_services +
61
+ * the offers ladder) never block. All counts derive from the actual step list, so reduced
62
+ * task-runner/workstation flows report their own totals.
63
+ */
64
+ export function buildOnboardingSummary(steps) {
65
+ const required = steps.filter(s => s.required);
66
+ const optional = steps.filter(s => !s.required);
67
+ const requiredPassed = required.filter(s => s.status === 'passed').length;
68
+ const optionalPassed = optional.filter(s => s.status === 'passed').length;
69
+ return {
70
+ required_total: required.length,
71
+ required_passed: requiredPassed,
72
+ required_remaining: required.length - requiredPassed,
73
+ optional_total: optional.length,
74
+ optional_passed: optionalPassed,
75
+ optional_remaining: optional.length - optionalPassed,
76
+ completable: required.every(s => s.status === 'passed'),
77
+ next_required_step: required.find(s => s.status !== 'passed')?.id ?? null,
78
+ optional_pending: optional.filter(s => s.status === 'pending').map(s => s.id),
79
+ };
80
+ }
81
+ //# sourceMappingURL=onboarding-guide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-guide.js","sourceRoot":"","sources":["../../../src/services/onboarding-guide.ts"],"names":[],"mappings":"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"}
@@ -120,6 +120,15 @@ export declare class Scheduler {
120
120
  private ownerHasUsableAiKey;
121
121
  /** Read the active context's workspaces (id + name) from its self-organism registry. */
122
122
  private loadContextWorkspaces;
123
+ /**
124
+ * Detect structural gaps in the active context's workspaces and propose Work Briefs for a Builder to
125
+ * execute — heavy work is DISPATCHED, never invented by the cheap Secretary. Deterministic + idempotent:
126
+ * a gap already covered by an OPEN brief (proposed/dispatched) is skipped, so repeated ticks converge
127
+ * instead of spamming. Bounded to MAX_NEW_BRIEFS new briefs per tick. No paid AI call (storage reads +
128
+ * best-effort Discovery only). Briefs are persisted as secretary.brief.{id}; the view's brief tray reads
129
+ * them and offers "Open in Claude Desktop" / "Send to a connected Builder".
130
+ */
131
+ private proposeWorkBriefs;
123
132
  /** Build the tick's system + user prompt asking for a STRUCTURED action list (P1-A). */
124
133
  private buildTickPrompt;
125
134
  /** Best-match a workspace by (possibly fuzzy) name; falls back to the first workspace. */
@@ -1 +1 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/services/scheduler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/services/scheduler.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,12 @@
5
5
  * Supports special @activate trigger: runs on extension activation AND every server startup.
6
6
  * Every execution creates an ExecutionLogEntry with timing, result, and memory I/O.
7
7
  * @version-history
8
+ * v2.13.0 — 2026-07-01 — Light-vs-heavy seam: the tick no longer cheap-authors content (the one-shot
9
+ * authoring in the now-removed secretary-authoring.ts hallucinated). It now detects STRUCTURAL gaps
10
+ * (empty/thin workspaces, stale content, off-target KPIs) and proposes grounded Work Briefs a Builder
11
+ * (a connected big AI via the appdev MCP tools) executes — proposeWorkBriefs in services/
12
+ * secretary-workbrief.ts (deterministic, no paid call, deduped against open briefs). The cheap
13
+ * Secretary watches + hands off; it never authors structure/data.
8
14
  * v2.12.0 — 2026-06-30 — Learning loop closes: (A) selectLessons threads the highest-signal reviewed-
9
15
  * decision scores into the tick's briefing/action prompt (repeat what worked, avoid what didn't);
10
16
  * (B) proposeLearnedRule — when a cluster of reviewed decisions scored poorly, the tick asks for ONE
@@ -60,7 +66,8 @@ import { executeExtensionAction, trackMemoryAccess } from './extension-runtime.j
60
66
  import { getEncryptionKey } from './encryption.js';
61
67
  import { getExtSecretKeys, getInstanceSecretKeys, decryptSecretFields } from './extension-secrets.js';
62
68
  import { completeForOwner } from './ai-completion.js';
63
- import { authorWorkspaceContent } from './secretary-authoring.js';
69
+ import { proposeWorkBriefs as buildContextBriefs, resolveCompletedBriefs } from './secretary-workbrief.js';
70
+ import { notify } from './notify.js';
64
71
  import { appendSecretaryFeed } from './secretary-feed.js';
65
72
  import { produceClarifyDeliverable } from './secretary-clarify.js';
66
73
  import { listSpecialists } from './specialist.js';
@@ -735,29 +742,31 @@ export class Scheduler {
735
742
  const feedText = deferred.length ? `${briefingText}\n\n${deferred.join('\n')}` : briefingText;
736
743
  await this.appendFeed(owner, { kind: 'briefing', contextId: active.id, contextName: active.name || '', text: feedText });
737
744
  writes.push('secretary.feed');
738
- // Autonomous authoring phase: actually FILL the workspaces (document-first). Band-gated on
739
- // `author_content`: 'act' = write + publish · 'draft' = leave drafts for review · 'off' = skip.
740
- // Each filled workspace is a paid AI call, so it respects the same per-day budget — pass the
741
- // remaining headroom and let authoring stop when it's exhausted. OFF by default (it spends + can
742
- // publish): a context that never opts in behaves exactly as before; the owner enables draft/act.
743
- const authorBand = active.policy?.bands?.author_content ?? 'off';
744
- if (authorBand !== 'off') {
745
- const budgetRemaining = budget === null ? null : Math.max(0, budget - spentToday - paidMorsels);
746
- if (budgetRemaining === null || budgetRemaining > 0) {
747
- // Honour the owner's autoRetry/maxRetries so a flaky stealth model (owl-alpha intermittently 400s)
748
- // is retried instead of killing the authoring on the first transient error. Off → no retry.
749
- const aiPrefs = (await this.storage.getMemory(owner, 'openrouter.settings'))?.value;
750
- const maxRetries = aiPrefs?.autoRetry === false ? 0 : (typeof aiPrefs?.maxRetries === 'number' ? aiPrefs.maxRetries : 3);
751
- const authored = await authorWorkspaceContent(this.storage, this.config, owner, ownerName, active, wsList, {
752
- openGoals, band: authorBand, aggressive: true, useGeneralKnowledge: true, budgetRemaining, maxRetries, appId: `schedule:${job.id}:author`,
745
+ // Heavy work is DISPATCHED, not invented here. Instead of asking the cheap model to author content
746
+ // one-shot (which hallucinated and "went onto the Builders' turf"), the tick detects STRUCTURAL gaps
747
+ // (empty/thin workspaces, stale content, off-target KPIs) and proposes a grounded Work Brief a Builder
748
+ // — a connected big AI via the appdev MCP tools — executes (the owner pastes it into Claude Desktop,
749
+ // or dispatches it to a connected agent). Brief assembly is deterministic (no paid call), idempotent
750
+ // (deduped against open briefs by gap), and bounded per tick. The cheap Secretary never authors data.
751
+ // Self-heal first: a dispatched brief whose Builder task finished flips to 'done' so it leaves the tray.
752
+ await resolveCompletedBriefs(this.storage, owner).catch(() => 0);
753
+ const briefed = await this.proposeWorkBriefs(owner, ownerName, active, wsList, openGoals);
754
+ if (briefed.writes.length) {
755
+ writes.push(...briefed.writes);
756
+ for (const line of briefed.feedLines) {
757
+ await this.appendFeed(owner, { kind: 'briefing', contextId: active.id, contextName: active.name || '', text: line, href: '/v1/secretary' });
758
+ }
759
+ writes.push('secretary.feed');
760
+ emitChange('agents', owner);
761
+ // Notify the owner (the header bell) when NEW heavy work is ready to hand off — so a brief the tick
762
+ // proposes overnight is actively surfaced, not just discovered on the next visit. Best-effort.
763
+ if (briefed.briefs.length) {
764
+ await notify(this.storage, owner, {
765
+ type: 'secretary_work_brief',
766
+ title: briefed.briefs.length === 1 ? '1 work brief ready' : `${briefed.briefs.length} work briefs ready`,
767
+ body: 'Heavy work the Secretary prepared — hand it to a Builder.',
768
+ link: '/v1/secretary',
753
769
  });
754
- paidMorsels += authored.morsels;
755
- writes.push(...authored.writes);
756
- for (const line of authored.summaries) {
757
- await this.appendFeed(owner, { kind: 'act', contextId: active.id, contextName: active.name || '', text: line, href: `/v1/profile?tab=organisms&org=${active.organismId}` });
758
- }
759
- if (authored.summaries.length)
760
- writes.push('secretary.feed');
761
770
  }
762
771
  }
763
772
  }
@@ -799,6 +808,22 @@ export class Scheduler {
799
808
  const list = (rec?.value?.workspaces) ?? [];
800
809
  return list.filter((w) => w && w.id).map((w) => ({ id: w.id, name: w.name || w.id }));
801
810
  }
811
+ /**
812
+ * Detect structural gaps in the active context's workspaces and propose Work Briefs for a Builder to
813
+ * execute — heavy work is DISPATCHED, never invented by the cheap Secretary. Deterministic + idempotent:
814
+ * a gap already covered by an OPEN brief (proposed/dispatched) is skipped, so repeated ticks converge
815
+ * instead of spamming. Bounded to MAX_NEW_BRIEFS new briefs per tick. No paid AI call (storage reads +
816
+ * best-effort Discovery only). Briefs are persisted as secretary.brief.{id}; the view's brief tray reads
817
+ * them and offers "Open in Claude Desktop" / "Send to a connected Builder".
818
+ */
819
+ async proposeWorkBriefs(owner, ownerName, active, wsList, openGoals) {
820
+ const briefContext = { id: active.id, name: active.name, organismId: active.organismId, brain: active.brain, strategy: active.strategy };
821
+ const { writes, briefs } = await buildContextBriefs(this.storage, this.config, {
822
+ ownerGhii: owner, ownerName, active: briefContext, wsList, openGoals,
823
+ });
824
+ const feedLines = briefs.map((b) => `📋 Work brief ready — ${b.objective} Open it in the Secretary to hand to a Builder.`);
825
+ return { writes, feedLines, briefs };
826
+ }
802
827
  /** Build the tick's system + user prompt asking for a STRUCTURED action list (P1-A). */
803
828
  buildTickPrompt(ownerName, active, openGoals, wsList, lessons = []) {
804
829
  const rules = (active.brain?.rules || []).map((r) => '- ' + (r.description || '')).join('\n');