instar 1.2.51 → 1.2.53
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/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +115 -19
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/setup.d.ts +31 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +105 -17
- package/dist/commands/setup.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +9 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/AutoUpdater.d.ts +9 -0
- package/dist/core/AutoUpdater.d.ts.map +1 -1
- package/dist/core/AutoUpdater.js +36 -1
- package/dist/core/AutoUpdater.js.map +1 -1
- package/dist/core/ClaudeCliIntelligenceProvider.d.ts.map +1 -1
- package/dist/core/ClaudeCliIntelligenceProvider.js +9 -0
- package/dist/core/ClaudeCliIntelligenceProvider.js.map +1 -1
- package/dist/core/Config.d.ts.map +1 -1
- package/dist/core/Config.js +7 -1
- package/dist/core/Config.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +35 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +313 -7
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/UpdateRestartHandshake.d.ts +110 -0
- package/dist/core/UpdateRestartHandshake.d.ts.map +1 -0
- package/dist/core/UpdateRestartHandshake.js +155 -0
- package/dist/core/UpdateRestartHandshake.js.map +1 -0
- package/dist/core/claudeForbiddenGuard.d.ts +56 -0
- package/dist/core/claudeForbiddenGuard.d.ts.map +1 -0
- package/dist/core/claudeForbiddenGuard.js +80 -0
- package/dist/core/claudeForbiddenGuard.js.map +1 -0
- package/dist/core/frameworkSessionLaunch.d.ts.map +1 -1
- package/dist/core/frameworkSessionLaunch.js +8 -5
- package/dist/core/frameworkSessionLaunch.js.map +1 -1
- package/dist/lifeline/ServerSupervisor.d.ts +12 -0
- package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
- package/dist/lifeline/ServerSupervisor.js +50 -3
- package/dist/lifeline/ServerSupervisor.js.map +1 -1
- package/dist/memory/SemanticMemory.d.ts.map +1 -1
- package/dist/memory/SemanticMemory.js +43 -5
- package/dist/memory/SemanticMemory.js.map +1 -1
- package/dist/messaging/SpawnRequestManager.d.ts +15 -1
- package/dist/messaging/SpawnRequestManager.d.ts.map +1 -1
- package/dist/messaging/SpawnRequestManager.js +9 -3
- package/dist/messaging/SpawnRequestManager.js.map +1 -1
- package/dist/monitoring/CodexRolloutParser.d.ts +56 -0
- package/dist/monitoring/CodexRolloutParser.d.ts.map +1 -0
- package/dist/monitoring/CodexRolloutParser.js +115 -0
- package/dist/monitoring/CodexRolloutParser.js.map +1 -0
- package/dist/monitoring/PresenceProxy.d.ts +33 -0
- package/dist/monitoring/PresenceProxy.d.ts.map +1 -1
- package/dist/monitoring/PresenceProxy.js +50 -7
- package/dist/monitoring/PresenceProxy.js.map +1 -1
- package/dist/monitoring/TokenLedger.d.ts +82 -0
- package/dist/monitoring/TokenLedger.d.ts.map +1 -1
- package/dist/monitoring/TokenLedger.js +249 -0
- package/dist/monitoring/TokenLedger.js.map +1 -1
- package/dist/monitoring/TokenLedgerPoller.d.ts +10 -0
- package/dist/monitoring/TokenLedgerPoller.d.ts.map +1 -1
- package/dist/monitoring/TokenLedgerPoller.js +16 -0
- package/dist/monitoring/TokenLedgerPoller.js.map +1 -1
- package/dist/monitoring/frameworkActivitySignals.d.ts.map +1 -1
- package/dist/monitoring/frameworkActivitySignals.js +20 -8
- package/dist/monitoring/frameworkActivitySignals.js.map +1 -1
- package/dist/providers/adapters/openai-codex/models.d.ts.map +1 -1
- package/dist/providers/adapters/openai-codex/models.js +54 -13
- package/dist/providers/adapters/openai-codex/models.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +33 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +9 -1
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +46 -4
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +64 -64
- package/src/scaffold/templates.ts +33 -1
- package/upgrades/1.2.52.md +174 -0
- package/upgrades/1.2.53.md +113 -0
- package/upgrades/side-effects/abi-aware-node-selection.md +37 -0
- package/upgrades/side-effects/awareness-parity-guard.md +58 -0
- package/upgrades/side-effects/codex-audit-item-1-relay-send-priority.md +40 -0
- package/upgrades/side-effects/codex-audit-item-10-legacy-maxsessions-migration.md +39 -0
- package/upgrades/side-effects/codex-audit-item-11-anti-confabulation.md +44 -0
- package/upgrades/side-effects/codex-audit-item-2-spawn-cap-live-read.md +41 -0
- package/upgrades/side-effects/codex-audit-item-3-sqlite-rebuild-status.md +60 -0
- package/upgrades/side-effects/codex-audit-item-4-restart-handshake.md +51 -0
- package/upgrades/side-effects/codex-audit-item-5-scheduler-default-on.md +49 -0
- package/upgrades/side-effects/codex-model-tier-mapping.md +69 -0
- package/upgrades/side-effects/codex-token-ledger-observability.md +93 -0
- package/upgrades/side-effects/commitments-codex-awareness.md +72 -0
- package/upgrades/side-effects/manifest-regen-audit-batch.md +28 -0
- package/upgrades/side-effects/manifest-regen-v1251.md +22 -0
- package/upgrades/side-effects/presence-proxy-codex-blindness.md +63 -0
- package/upgrades/side-effects/secret-drop-codex-awareness.md +88 -0
- package/upgrades/side-effects/vec0-probe-false-corruption.md +73 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAoQH,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAiqDD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0xLtE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
|
package/dist/commands/server.js
CHANGED
|
@@ -25,11 +25,13 @@ import { AgentServer } from '../server/AgentServer.js';
|
|
|
25
25
|
import { TelegramAdapter, TOPIC_STYLE, selectTopicEmoji } from '../messaging/TelegramAdapter.js';
|
|
26
26
|
import { RelationshipManager } from '../core/RelationshipManager.js';
|
|
27
27
|
import { ClaudeCliIntelligenceProvider } from '../core/ClaudeCliIntelligenceProvider.js';
|
|
28
|
+
import { isClaudeForbidden } from '../core/claudeForbiddenGuard.js';
|
|
28
29
|
import { FeedbackManager } from '../core/FeedbackManager.js';
|
|
29
30
|
import { FeedbackAnomalyDetector } from '../monitoring/FeedbackAnomalyDetector.js';
|
|
30
31
|
import { DispatchManager } from '../core/DispatchManager.js';
|
|
31
32
|
import { UpdateChecker } from '../core/UpdateChecker.js';
|
|
32
33
|
import { AutoUpdater } from '../core/AutoUpdater.js';
|
|
34
|
+
import { UpdateRestartHandshake, verifyRestartHandshake } from '../core/UpdateRestartHandshake.js';
|
|
33
35
|
import { AutoDispatcher } from '../core/AutoDispatcher.js';
|
|
34
36
|
import { DispatchExecutor } from '../core/DispatchExecutor.js';
|
|
35
37
|
import { registerAgent, unregisterAgent, startHeartbeat } from '../core/AgentRegistry.js';
|
|
@@ -2147,6 +2149,24 @@ export async function startServer(options) {
|
|
|
2147
2149
|
console.log(pc.yellow(' intelligenceProvider: "anthropic-api" is no longer supported — using Claude CLI subscription instead.\n'
|
|
2148
2150
|
+ ' Remove the field from config.json. See specs/provider-portability/04-anthropic-path-constraints.md.'));
|
|
2149
2151
|
}
|
|
2152
|
+
// Codex-only enforcement (Justin 2026-05-23 absolute requirement): if
|
|
2153
|
+
// this agent's enabledFrameworks excludes 'claude-code', forbid ALL
|
|
2154
|
+
// Claude provider construction process-wide. Any internal LLM path that
|
|
2155
|
+
// tries to fall back to Claude (relationships, summaries, gates) then
|
|
2156
|
+
// throws ClaudeForbiddenError instead of silently using Claude on a
|
|
2157
|
+
// machine where the claude binary happens to be installed. Set BEFORE
|
|
2158
|
+
// any provider is built so the guard is active for the whole boot.
|
|
2159
|
+
try {
|
|
2160
|
+
const { setClaudeForbidden, isCodexOnly } = await import('../core/claudeForbiddenGuard.js');
|
|
2161
|
+
const ef = config.enabledFrameworks;
|
|
2162
|
+
if (isCodexOnly(ef)) {
|
|
2163
|
+
setClaudeForbidden(`enabledFrameworks=${JSON.stringify(ef)} (no claude-code)`);
|
|
2164
|
+
console.log(pc.cyan(' Codex-only mode: Claude provider construction is forbidden process-wide.'));
|
|
2165
|
+
}
|
|
2166
|
+
}
|
|
2167
|
+
catch (err) {
|
|
2168
|
+
console.warn(`[server] codex-only guard init failed (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
|
|
2169
|
+
}
|
|
2150
2170
|
// Provider-portability v1.0.0: pick the IntelligenceProvider that
|
|
2151
2171
|
// matches the configured framework. Defaults to claude-code for
|
|
2152
2172
|
// backwards-compat; INSTAR_FRAMEWORK=codex-cli routes through Codex.
|
|
@@ -2293,9 +2313,11 @@ export async function startServer(options) {
|
|
|
2293
2313
|
config.relationships.intelligence = sharedIntelligence;
|
|
2294
2314
|
intelligenceMode = `LLM-supervised (${intelligenceSource})`;
|
|
2295
2315
|
}
|
|
2296
|
-
else if (config.sessions.claudePath) {
|
|
2316
|
+
else if (config.sessions.claudePath && !isClaudeForbidden()) {
|
|
2297
2317
|
// Last-ditch fallback for installs where sharedIntelligence couldn't
|
|
2298
|
-
// be built but a claude binary path is still configured.
|
|
2318
|
+
// be built but a claude binary path is still configured. Skipped on
|
|
2319
|
+
// codex-only agents (isClaudeForbidden) — there, relationships run
|
|
2320
|
+
// without LLM intelligence rather than silently using Claude.
|
|
2299
2321
|
config.relationships.intelligence = new ClaudeCliIntelligenceProvider(config.sessions.claudePath);
|
|
2300
2322
|
intelligenceMode = 'LLM-supervised (Claude CLI subscription, fallback)';
|
|
2301
2323
|
}
|
|
@@ -3711,30 +3733,37 @@ export async function startServer(options) {
|
|
|
3711
3733
|
// get Codex-summarized topics. Last-ditch ClaudeCli fallback
|
|
3712
3734
|
// preserves v0.x behavior when sharedIntelligence couldn't be
|
|
3713
3735
|
// built but a claude binary is still on disk.
|
|
3714
|
-
let summaryIntelligence;
|
|
3736
|
+
let summaryIntelligence = null;
|
|
3715
3737
|
if (sharedIntelligence) {
|
|
3716
3738
|
summaryIntelligence = sharedIntelligence;
|
|
3717
3739
|
}
|
|
3718
|
-
else {
|
|
3740
|
+
else if (!isClaudeForbidden()) {
|
|
3719
3741
|
const { ClaudeCliIntelligenceProvider } = await import('../core/ClaudeCliIntelligenceProvider.js');
|
|
3720
3742
|
summaryIntelligence = new ClaudeCliIntelligenceProvider(config.sessions.claudePath);
|
|
3721
3743
|
}
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
const
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
|
|
3731
|
-
|
|
3732
|
-
|
|
3733
|
-
|
|
3734
|
-
|
|
3744
|
+
// On a codex-only agent without a built Codex provider, summaryIntelligence
|
|
3745
|
+
// stays null — topic summaries are skipped rather than run on Claude.
|
|
3746
|
+
if (summaryIntelligence) {
|
|
3747
|
+
const summarizer = new TopicSummarizer(summaryIntelligence, topicMemory);
|
|
3748
|
+
sessionManager.on('sessionComplete', (session) => {
|
|
3749
|
+
// Find the topic linked to this session
|
|
3750
|
+
const sessionTopicId = telegram.getTopicForSession(session.tmuxSession);
|
|
3751
|
+
if (!sessionTopicId)
|
|
3752
|
+
return;
|
|
3753
|
+
// Check if this topic needs a summary update (async, fire-and-forget)
|
|
3754
|
+
summarizer.summarize(sessionTopicId).then((result) => {
|
|
3755
|
+
if (result) {
|
|
3756
|
+
console.log(`[TopicSummarizer] Updated summary for topic ${sessionTopicId}: ${result.messagesProcessed} messages processed in ${result.durationMs}ms`);
|
|
3757
|
+
}
|
|
3758
|
+
}).catch((err) => {
|
|
3759
|
+
console.error(`[TopicSummarizer] Failed for topic ${sessionTopicId}: ${err instanceof Error ? err.message : err}`);
|
|
3760
|
+
});
|
|
3735
3761
|
});
|
|
3736
|
-
|
|
3737
|
-
|
|
3762
|
+
console.log(pc.green(' Topic auto-summarization enabled (on session end)'));
|
|
3763
|
+
}
|
|
3764
|
+
else {
|
|
3765
|
+
console.log(pc.dim(' Topic auto-summarization skipped (no LLM provider; codex-only without Codex provider)'));
|
|
3766
|
+
}
|
|
3738
3767
|
}
|
|
3739
3768
|
// Session Activity Sentinel — episodic memory digestion.
|
|
3740
3769
|
// Creates mid-session mini-digests via LLM, and session syntheses on completion.
|
|
@@ -4346,6 +4375,58 @@ export async function startServer(options) {
|
|
|
4346
4375
|
console.log(pc.green(` Instar ${info.currentVersion} is up to date`));
|
|
4347
4376
|
}
|
|
4348
4377
|
}).catch(() => { });
|
|
4378
|
+
// codex-instar audit Item 4 — restart-handshake verification.
|
|
4379
|
+
//
|
|
4380
|
+
// If the previous process applied an update and triggered a restart, it
|
|
4381
|
+
// wrote a pending-handshake marker describing what version it expected
|
|
4382
|
+
// to be running and the notification it would have sent. We now verify
|
|
4383
|
+
// that against the NEW process's runningVersion. The "Just updated, ...
|
|
4384
|
+
// restarting" notification only fires AFTER the restart actually took
|
|
4385
|
+
// effect — eliminating the bug where users were told the update was
|
|
4386
|
+
// live before it really was.
|
|
4387
|
+
const restartHandshake = new UpdateRestartHandshake(config.stateDir);
|
|
4388
|
+
try {
|
|
4389
|
+
const outcome = verifyRestartHandshake({
|
|
4390
|
+
handshake: restartHandshake,
|
|
4391
|
+
runningVersion: processIntegrity.runningVersion,
|
|
4392
|
+
});
|
|
4393
|
+
if (outcome.kind === 'verified') {
|
|
4394
|
+
const topicId = state.get('agent-updates-topic') || 0;
|
|
4395
|
+
if (telegram && topicId) {
|
|
4396
|
+
try {
|
|
4397
|
+
await telegram.sendToTopic(topicId, outcome.deferredNotification);
|
|
4398
|
+
}
|
|
4399
|
+
catch (err) {
|
|
4400
|
+
console.warn(`[restart-handshake] verified notification failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
4401
|
+
}
|
|
4402
|
+
}
|
|
4403
|
+
else {
|
|
4404
|
+
console.log(`[restart-handshake] verified v${outcome.expectedVersion} (no telegram/topic — skipping notification)`);
|
|
4405
|
+
}
|
|
4406
|
+
restartHandshake.clearHandshake();
|
|
4407
|
+
}
|
|
4408
|
+
else if (outcome.kind === 'failed') {
|
|
4409
|
+
const msg = outcome.escalate
|
|
4410
|
+
? `Heads up — I tried to update to v${outcome.expectedVersion} but the restart didn't pick up the new code. Still running v${outcome.runningVersion}. Retry ${outcome.retryCount}.`
|
|
4411
|
+
: `Update to v${outcome.expectedVersion} was applied but I'm still running v${outcome.runningVersion}. The next restart should pick it up.`;
|
|
4412
|
+
const topicId = state.get('agent-updates-topic') || 0;
|
|
4413
|
+
if (telegram && topicId) {
|
|
4414
|
+
try {
|
|
4415
|
+
await telegram.sendToTopic(topicId, msg);
|
|
4416
|
+
}
|
|
4417
|
+
catch (err) {
|
|
4418
|
+
console.warn(`[restart-handshake] failure notification failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
4419
|
+
}
|
|
4420
|
+
}
|
|
4421
|
+
else {
|
|
4422
|
+
console.warn(`[restart-handshake] ${msg}`);
|
|
4423
|
+
}
|
|
4424
|
+
}
|
|
4425
|
+
}
|
|
4426
|
+
catch (err) {
|
|
4427
|
+
// Verification must never block startup — log and continue.
|
|
4428
|
+
console.warn(`[restart-handshake] verification error (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
|
|
4429
|
+
}
|
|
4349
4430
|
// Start auto-updater — periodic check + auto-apply + notify + restart
|
|
4350
4431
|
// Notifications routed dynamically to Updates topic (see getNotificationTopicId)
|
|
4351
4432
|
const autoUpdater = new AutoUpdater(updateChecker, state, config.stateDir, {
|
|
@@ -4354,6 +4435,9 @@ export async function startServer(options) {
|
|
|
4354
4435
|
autoRestart: true,
|
|
4355
4436
|
restartWindow: config.updates?.restartWindow ?? null,
|
|
4356
4437
|
restartCascadeDampenerWindowMs: config.updates?.restartCascadeDampenerWindowMs,
|
|
4438
|
+
// codex-instar audit Item 4 — wire the handshake into AutoUpdater so
|
|
4439
|
+
// the pre-restart notification is DEFERRED into the marker file.
|
|
4440
|
+
restartHandshake,
|
|
4357
4441
|
}, telegram, liveConfig);
|
|
4358
4442
|
// Wire session deps for session-aware restart gating (Phase 2B)
|
|
4359
4443
|
autoUpdater.setSessionDeps(sessionManager, sessionMonitor);
|
|
@@ -5099,6 +5183,9 @@ export async function startServer(options) {
|
|
|
5099
5183
|
stateDir: config.stateDir,
|
|
5100
5184
|
intelligence: sharedIntelligence,
|
|
5101
5185
|
agentName: config.projectName ?? 'the agent',
|
|
5186
|
+
// Resolved default framework so idle/stall detection uses the right
|
|
5187
|
+
// pane signals (Codex panes don't match Claude prompt patterns).
|
|
5188
|
+
agentFramework: _defaultFramework,
|
|
5102
5189
|
hasAgentRespondedSince: (topicId, sinceMs) => {
|
|
5103
5190
|
const sinceIso = new Date(sinceMs).toISOString();
|
|
5104
5191
|
// Check Telegram log
|
|
@@ -5863,6 +5950,15 @@ export async function startServer(options) {
|
|
|
5863
5950
|
let spawnManager;
|
|
5864
5951
|
spawnManager = new SpawnRequestManager({
|
|
5865
5952
|
maxSessions: config.sessions.maxSessions ?? 5,
|
|
5953
|
+
// Live accessor — read config on every admission check so operators
|
|
5954
|
+
// raising sessions.maxSessions don't have to rebuild the manager.
|
|
5955
|
+
// Resolves the split-brain where /status reflected the new cap but
|
|
5956
|
+
// spawn denials kept reporting the constructor value (codex-instar
|
|
5957
|
+
// audit Item 2). Reads the canonical key first; if absent, falls back
|
|
5958
|
+
// to the legacy top-level maxSessions for older configs.
|
|
5959
|
+
getMaxSessions: () => config.sessions?.maxSessions
|
|
5960
|
+
?? config.maxSessions
|
|
5961
|
+
?? 5,
|
|
5866
5962
|
getActiveSessions: () => sessionManager.listRunningSessions(),
|
|
5867
5963
|
spawnSession: async (prompt, opts) => {
|
|
5868
5964
|
const session = await sessionManager.spawnSession({
|