instar 1.3.435 → 1.3.437

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 (59) hide show
  1. package/dashboard/index.html +2 -0
  2. package/dashboard/subscriptions.js +18 -8
  3. package/dist/commands/init.d.ts +17 -0
  4. package/dist/commands/init.d.ts.map +1 -1
  5. package/dist/commands/init.js +50 -0
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/server.d.ts.map +1 -1
  8. package/dist/commands/server.js +6 -1
  9. package/dist/commands/server.js.map +1 -1
  10. package/dist/core/InUseAccountResolver.d.ts +77 -0
  11. package/dist/core/InUseAccountResolver.d.ts.map +1 -0
  12. package/dist/core/InUseAccountResolver.js +123 -0
  13. package/dist/core/InUseAccountResolver.js.map +1 -0
  14. package/dist/server/AgentServer.d.ts +1 -0
  15. package/dist/server/AgentServer.d.ts.map +1 -1
  16. package/dist/server/AgentServer.js +1 -0
  17. package/dist/server/AgentServer.js.map +1 -1
  18. package/dist/server/routes.d.ts +4 -0
  19. package/dist/server/routes.d.ts.map +1 -1
  20. package/dist/server/routes.js +20 -0
  21. package/dist/server/routes.js.map +1 -1
  22. package/package.json +2 -1
  23. package/skills/README.md +106 -0
  24. package/skills/agent-identity/SKILL.md +226 -0
  25. package/skills/agent-memory/SKILL.md +261 -0
  26. package/skills/agent-passport/SKILL.md +37 -0
  27. package/skills/agent-readiness/SKILL.md +55 -0
  28. package/skills/command-guard/SKILL.md +239 -0
  29. package/skills/credential-leak-detector/SKILL.md +377 -0
  30. package/skills/instar-dev/SKILL.md +223 -0
  31. package/skills/instar-dev/scripts/verify-proposal-derived-runbook.mjs +319 -0
  32. package/skills/instar-dev/scripts/write-trace.mjs +203 -0
  33. package/skills/instar-dev/templates/eli16-overview.md +43 -0
  34. package/skills/instar-dev/templates/side-effects-artifact.md +133 -0
  35. package/skills/instar-feedback/SKILL.md +285 -0
  36. package/skills/instar-identity/SKILL.md +290 -0
  37. package/skills/instar-scheduler/SKILL.md +259 -0
  38. package/skills/instar-session/SKILL.md +270 -0
  39. package/skills/instar-telegram/SKILL.md +259 -0
  40. package/skills/iterative-converging-audit/SKILL.md +96 -0
  41. package/skills/knowledge-base/SKILL.md +189 -0
  42. package/skills/smart-web-fetch/SKILL.md +241 -0
  43. package/skills/spec-converge/SKILL.md +249 -0
  44. package/skills/spec-converge/scripts/cross-model-review.mjs +155 -0
  45. package/skills/spec-converge/scripts/publish-spec-review.mjs +166 -0
  46. package/skills/spec-converge/scripts/write-convergence-tag.mjs +199 -0
  47. package/skills/spec-converge/templates/report.md +76 -0
  48. package/skills/spec-converge/templates/reviewer-adversarial.md +37 -0
  49. package/skills/spec-converge/templates/reviewer-cross-model.md +28 -0
  50. package/skills/spec-converge/templates/reviewer-integration.md +39 -0
  51. package/skills/spec-converge/templates/reviewer-lessons-aware.md +101 -0
  52. package/skills/spec-converge/templates/reviewer-scalability.md +35 -0
  53. package/skills/spec-converge/templates/reviewer-security.md +36 -0
  54. package/skills/systematic-debugging/SKILL.md +222 -0
  55. package/src/data/builtin-manifest.json +47 -47
  56. package/upgrades/1.3.436.md +19 -0
  57. package/upgrades/1.3.437.md +29 -0
  58. package/upgrades/side-effects/builtin-skill-install-single-source.md +80 -0
  59. package/upgrades/side-effects/subscription-inuse-account.md +26 -0
@@ -3288,6 +3288,8 @@
3288
3288
  <!-- subscriptions tab (Subscription & Auth Standard P2.2 — live quota + pending logins) -->
3289
3289
  <style>
3290
3290
  .sub-account { border:1px solid var(--border,#2a2a2a); border-radius:10px; padding:14px 16px; margin-bottom:12px; }
3291
+ .sub-account-inuse { border-color:#16a34a; box-shadow:0 0 0 1px #16a34a44; }
3292
+ .sub-account-inuse-badge { font-size:11px; font-weight:600; color:#22c55e; margin-right:auto; }
3291
3293
  .sub-account-head { display:flex; justify-content:space-between; align-items:baseline; gap:12px; }
3292
3294
  .sub-account-nick { font-weight:600; font-size:15px; }
3293
3295
  .sub-account-status { font-size:12px; opacity:.75; }
@@ -130,8 +130,11 @@ export function quotaBar(doc, label, pct, resetIso, now = Date.now()) {
130
130
  return wrap;
131
131
  }
132
132
 
133
- /** Per-account rows: nickname, status, provider·framework, 5h + weekly quota bars. */
134
- export function renderAccounts(doc, target, accounts, now = Date.now()) {
133
+ /** Per-account rows: nickname, status, provider·framework, 5h + weekly quota bars.
134
+ * `inUseAccountId` (optional) is the account the agent is CURRENTLY running on —
135
+ * that card gets an "In use" marker so "active" (healthy) reads distinct from
136
+ * "actually running right now". */
137
+ export function renderAccounts(doc, target, accounts, now = Date.now(), inUseAccountId = null) {
135
138
  if (!target) return;
136
139
  target.replaceChildren();
137
140
  if (!Array.isArray(accounts) || accounts.length === 0) {
@@ -139,9 +142,11 @@ export function renderAccounts(doc, target, accounts, now = Date.now()) {
139
142
  return;
140
143
  }
141
144
  for (const a of accounts) {
142
- const card = el(doc, 'div', 'sub-account');
145
+ const inUse = !!(inUseAccountId && a && a.id === inUseAccountId);
146
+ const card = el(doc, 'div', inUse ? 'sub-account sub-account-inuse' : 'sub-account');
143
147
  const head = el(doc, 'div', 'sub-account-head');
144
148
  head.appendChild(el(doc, 'span', 'sub-account-nick', sanitizeForDisplay(a && a.nickname, 'label')));
149
+ if (inUse) head.appendChild(el(doc, 'span', 'sub-account-inuse-badge', '● In use now'));
145
150
  head.appendChild(el(doc, 'span', 'sub-account-status', friendlyStatus(a && a.status)));
146
151
  card.appendChild(head);
147
152
  card.appendChild(el(doc, 'div', 'sub-account-meta',
@@ -213,6 +218,7 @@ export function renderDisabled(doc, els) {
213
218
  const URLS = {
214
219
  accounts: '/subscription-pool',
215
220
  pending: '/subscription-pool/pending-logins',
221
+ inUse: '/subscription-pool/in-use',
216
222
  };
217
223
 
218
224
  export function createController(opts) {
@@ -239,11 +245,14 @@ export function createController(opts) {
239
245
  if (state.inFlight) { try { state.inFlight.abort(); } catch { /* superseded */ } }
240
246
  const controller = typeof AbortController !== 'undefined' ? new AbortController() : { signal: undefined, abort() {} };
241
247
  state.inFlight = controller;
242
- let accountsBody, pendingBody;
248
+ let accountsBody, pendingBody, inUseBody;
243
249
  try {
244
- [accountsBody, pendingBody] = await Promise.all([
250
+ // in-use is best-effort — its failure must not blank the accounts list, so
251
+ // it's caught independently and degrades to "unknown" (no badge).
252
+ [accountsBody, pendingBody, inUseBody] = await Promise.all([
245
253
  fetchJson(URLS.accounts, controller),
246
254
  fetchJson(URLS.pending, controller),
255
+ fetchJson(URLS.inUse, controller).catch(() => null),
247
256
  ]);
248
257
  } catch {
249
258
  if (controller.signal && controller.signal.aborted) return;
@@ -259,14 +268,15 @@ export function createController(opts) {
259
268
  reschedule();
260
269
  return;
261
270
  }
262
- render(accountsBody, pendingBody);
271
+ render(accountsBody, pendingBody, inUseBody);
263
272
  reschedule();
264
273
  }
265
274
 
266
- function render(accountsBody, pendingBody) {
275
+ function render(accountsBody, pendingBody, inUseBody) {
267
276
  const accounts = accountsBody && Array.isArray(accountsBody.accounts) ? accountsBody.accounts : [];
268
277
  const logins = pendingBody && Array.isArray(pendingBody.logins) ? pendingBody.logins : [];
269
- renderAccounts(doc, els.accounts, accounts, now());
278
+ const inUseAccountId = inUseBody && inUseBody.activeAccountId ? inUseBody.activeAccountId : null;
279
+ renderAccounts(doc, els.accounts, accounts, now(), inUseAccountId);
270
280
  renderPendingLogins(doc, els.pending, logins, now());
271
281
  }
272
282
 
@@ -74,6 +74,23 @@ export declare function initProject(options: InitOptions): Promise<void>;
74
74
  * Only writes skill files that don't already exist (preserves customizations).
75
75
  */
76
76
  export declare function installBuiltinSkills(skillsDir: string, port: number): void;
77
+ /**
78
+ * Canonical bundled developer-skill toolkit — the authored allowlist (single
79
+ * source of truth) of skills Instar uses to develop itself, installed to every
80
+ * agent. The skill files live as tracked dirs under the repo's `skills/<slug>/`
81
+ * (the one source, also referenced by SourceTreeGuard / crossModelReviewer /
82
+ * PostUpdateMigrator); they ship via the `skills` entry in package.json files[].
83
+ * Excludes document-only skills superseded by built-in infra (instar-telegram →
84
+ * telegram-reply.sh, command-guard → dangerous-command-guard.sh hook, etc.).
85
+ */
86
+ export declare const BUNDLED_DEV_SKILLS: readonly ["spec-converge", "instar-dev", "systematic-debugging", "smart-web-fetch", "knowledge-base", "instar-scheduler", "agent-memory", "agent-identity", "instar-identity", "credential-leak-detector"];
87
+ /**
88
+ * Install the bundled dev-skill toolkit by copying each allowlisted skill's
89
+ * directory from the packaged `skills/<slug>/` source into the agent's
90
+ * `.claude/skills/<slug>/`. Install-if-missing (preserves user customizations);
91
+ * recursive so scripts/ and templates/ subdirs come along.
92
+ */
93
+ export declare function installBundledDevSkills(skillsDir: string): void;
77
94
  export declare function getDefaultJobs(port: number): object[];
78
95
  /**
79
96
  * Refresh hooks, Claude settings, and CLAUDE.md for an existing installation.
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAyDH,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yFAAyF;IACzF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC5E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GACjF,aAAa,CAAC,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC,CAatE;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAIjG,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAEvG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrE;AAw4CD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAw0C1E;AA8ID,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAkhBrD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAqElF"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAyDH,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yFAAyF;IACzF,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC5E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GACjF,aAAa,CAAC,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC,CAatE;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAAa,CAAC,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAIjG,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAEvG;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrE;AAw4CD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAg1C1E;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,4MAWrB,CAAC;AAEX;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAa/D;AA8ID,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAkhBrD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAqElF"}
@@ -2817,6 +2817,56 @@ Cherry-picked from the GSD verifier role. The insight: task completion is not go
2817
2817
  installTestAsSelfSkill(skillsDir);
2818
2818
  // Install autonomous skill with hooks and scripts (special case — needs full directory structure)
2819
2819
  installAutonomousSkill(skillsDir);
2820
+ // Install the bundled developer-skill toolkit (spec-converge, instar-dev, …) —
2821
+ // the tools Instar uses to develop itself, so EVERY agent has the complete
2822
+ // capability to develop Instar (Agent Awareness + Framework-Agnostic
2823
+ // "one shared source of truth"). Single source: the repo's skills/<slug>/ dirs
2824
+ // (referenced by SourceTreeGuard / crossModelReviewer), shipped via
2825
+ // package.json files[] and installed here by copy, install-if-missing.
2826
+ installBundledDevSkills(skillsDir);
2827
+ }
2828
+ /**
2829
+ * Canonical bundled developer-skill toolkit — the authored allowlist (single
2830
+ * source of truth) of skills Instar uses to develop itself, installed to every
2831
+ * agent. The skill files live as tracked dirs under the repo's `skills/<slug>/`
2832
+ * (the one source, also referenced by SourceTreeGuard / crossModelReviewer /
2833
+ * PostUpdateMigrator); they ship via the `skills` entry in package.json files[].
2834
+ * Excludes document-only skills superseded by built-in infra (instar-telegram →
2835
+ * telegram-reply.sh, command-guard → dangerous-command-guard.sh hook, etc.).
2836
+ */
2837
+ export const BUNDLED_DEV_SKILLS = [
2838
+ 'spec-converge',
2839
+ 'instar-dev',
2840
+ 'systematic-debugging',
2841
+ 'smart-web-fetch',
2842
+ 'knowledge-base',
2843
+ 'instar-scheduler',
2844
+ 'agent-memory',
2845
+ 'agent-identity',
2846
+ 'instar-identity',
2847
+ 'credential-leak-detector',
2848
+ ];
2849
+ /**
2850
+ * Install the bundled dev-skill toolkit by copying each allowlisted skill's
2851
+ * directory from the packaged `skills/<slug>/` source into the agent's
2852
+ * `.claude/skills/<slug>/`. Install-if-missing (preserves user customizations);
2853
+ * recursive so scripts/ and templates/ subdirs come along.
2854
+ */
2855
+ export function installBundledDevSkills(skillsDir) {
2856
+ const modDir = __dirname;
2857
+ // Package layout: dist/commands/init.js → ../../skills/<slug>
2858
+ const bundledRoot = path.join(modDir, '..', '..', 'skills');
2859
+ for (const slug of BUNDLED_DEV_SKILLS) {
2860
+ const targetDir = path.join(skillsDir, slug);
2861
+ const targetSkill = path.join(targetDir, 'SKILL.md');
2862
+ // Install-if-missing — check both casings (matches installBuildSkill).
2863
+ if (fs.existsSync(targetSkill) || fs.existsSync(path.join(targetDir, 'skill.md')))
2864
+ continue;
2865
+ const bundledDir = path.join(bundledRoot, slug);
2866
+ if (!fs.existsSync(path.join(bundledDir, 'SKILL.md')))
2867
+ continue; // not packaged — defensive skip
2868
+ fs.cpSync(bundledDir, targetDir, { recursive: true });
2869
+ }
2820
2870
  }
2821
2871
  /**
2822
2872
  * Install the /build skill with its stop hook and state manager.