@bastani/atomic 0.8.31-alpha.1 → 0.8.31-alpha.3
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/CHANGELOG.md +17 -5
- package/README.md +12 -10
- package/dist/builtin/cursor/CHANGELOG.md +1 -1
- package/dist/builtin/cursor/package.json +2 -2
- package/dist/builtin/intercom/CHANGELOG.md +1 -1
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/CHANGELOG.md +1 -1
- package/dist/builtin/mcp/package.json +3 -3
- package/dist/builtin/subagents/CHANGELOG.md +10 -1
- package/dist/builtin/subagents/agents/codebase-online-researcher.md +8 -8
- package/dist/builtin/subagents/agents/debugger.md +6 -6
- package/dist/builtin/subagents/package.json +4 -4
- package/dist/builtin/subagents/skills/effective-liteparse/SKILL.md +118 -0
- package/dist/builtin/subagents/skills/effective-liteparse/scripts/search.py +128 -0
- package/dist/builtin/subagents/skills/playwright-cli/SKILL.md +404 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/element-attributes.md +23 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/request-mocking.md +87 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/running-code.md +241 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/session-management.md +225 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/spec-driven-testing.md +305 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/storage-state.md +275 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/test-generation.md +134 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/tracing.md +139 -0
- package/dist/builtin/subagents/skills/playwright-cli/references/video-recording.md +143 -0
- package/dist/builtin/web-access/CHANGELOG.md +1 -1
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +7 -1
- package/dist/builtin/workflows/README.md +4 -4
- package/dist/builtin/workflows/builtin/open-claude-design.ts +59 -56
- package/dist/builtin/workflows/builtin/ralph.ts +56 -3
- package/dist/builtin/workflows/builtin/shared-prompts.ts +1 -1
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/research-codebase/SKILL.md +1 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +49 -21
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/context-window.d.ts +26 -1
- package/dist/core/context-window.d.ts.map +1 -1
- package/dist/core/context-window.js +30 -6
- package/dist/core/context-window.js.map +1 -1
- package/dist/core/copilot-model-catalog.d.ts +39 -21
- package/dist/core/copilot-model-catalog.d.ts.map +1 -1
- package/dist/core/copilot-model-catalog.js +44 -16
- package/dist/core/copilot-model-catalog.js.map +1 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +6 -4
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js +2 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +18 -7
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/settings-manager.d.ts +11 -2
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +62 -8
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +1 -0
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +1 -2
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +1 -2
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +5 -7
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +2 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +4 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +165 -15
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +44 -4
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +24 -54
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/model-search.d.ts +7 -0
- package/dist/modes/interactive/model-search.d.ts.map +1 -0
- package/dist/modes/interactive/model-search.js +6 -0
- package/dist/modes/interactive/model-search.js.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +30 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -0
- package/dist/modes/interactive/theme/theme-controller.js +108 -0
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -0
- package/dist/modes/interactive/theme/theme-schema.json +2 -1
- package/dist/modes/interactive/theme/theme.d.ts +5 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +70 -29
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +1 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +39 -9
- package/dist/package-manager-cli.js.map +1 -1
- package/docs/extensions.md +21 -0
- package/docs/models.md +3 -3
- package/docs/packages.md +13 -9
- package/docs/providers.md +3 -3
- package/docs/quickstart.md +14 -0
- package/docs/rpc.md +3 -3
- package/docs/sdk.md +15 -11
- package/docs/session-format.md +1 -1
- package/docs/settings.md +8 -3
- package/docs/themes.md +3 -1
- package/docs/tui.md +1 -1
- package/docs/usage.md +12 -9
- package/docs/workflows.md +9 -7
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/preset.ts +10 -4
- package/examples/extensions/provider-payload.ts +5 -5
- package/examples/extensions/sandbox/index.ts +2 -2
- package/examples/extensions/sandbox/package-lock.json +3 -3
- package/examples/extensions/sandbox/package.json +2 -2
- package/examples/extensions/subagent/agents.ts +2 -2
- package/examples/extensions/subagent/index.ts +4 -2
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +5 -5
- package/dist/builtin/subagents/skills/browser/EXAMPLES.md +0 -151
- package/dist/builtin/subagents/skills/browser/LICENSE.txt +0 -21
- package/dist/builtin/subagents/skills/browser/REFERENCE.md +0 -451
- package/dist/builtin/subagents/skills/browser/SKILL.md +0 -170
|
@@ -23,7 +23,7 @@ import { ATOMIC_GUIDE_COMMAND_NAME, ATOMIC_GUIDE_HELP_CHOICES, atomicGuideModeFo
|
|
|
23
23
|
import { formatNoApiKeyFoundMessage, formatNoModelSelectedMessage, formatUnresolvedModelMessage, } from "./auth-guidance.js";
|
|
24
24
|
import { executeBashWithOperations } from "./bash-executor.js";
|
|
25
25
|
import { calculateContextTokens, collectEntriesForBranchSummary, contextCompact as runContextCompact, estimateContextTokens, generateBranchSummary, prepareContextCompaction, shouldCompact, validateContextDeletionRequest, } from "./compaction/index.js";
|
|
26
|
-
import { getModelDefaultContextWindow, getSupportedContextWindows, selectContextWindow } from "./context-window.js";
|
|
26
|
+
import { getEffectiveInputBudget, getModelDefaultContextWindow, getSupportedContextWindows, selectContextWindow } from "./context-window.js";
|
|
27
27
|
import { formatCopilotProviderError, parseCopilotPromptLimitError } from "./copilot-errors.js";
|
|
28
28
|
import { DEFAULT_THINKING_LEVEL } from "./defaults.js";
|
|
29
29
|
import { exportSessionToHtml } from "./export-html/index.js";
|
|
@@ -84,6 +84,7 @@ export function parseSkillBlock(text) {
|
|
|
84
84
|
userMessage: afterClosing ? afterClosing.slice(2).trim() || undefined : undefined,
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
|
+
const COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS = { allowCopilotLongContextFallback: true };
|
|
87
88
|
function drainAgentMessageQueue(queue) {
|
|
88
89
|
if (!queue)
|
|
89
90
|
return [];
|
|
@@ -1536,7 +1537,7 @@ export class AgentSession {
|
|
|
1536
1537
|
if (!this.model) {
|
|
1537
1538
|
throw new Error("No model selected");
|
|
1538
1539
|
}
|
|
1539
|
-
const selected = selectContextWindow(this.model, contextWindow);
|
|
1540
|
+
const selected = selectContextWindow(this.model, contextWindow, COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS);
|
|
1540
1541
|
if ("error" in selected) {
|
|
1541
1542
|
throw new Error(selected.error);
|
|
1542
1543
|
}
|
|
@@ -1548,13 +1549,13 @@ export class AgentSession {
|
|
|
1548
1549
|
this._emit({ type: "context_window_changed", contextWindow: selected.contextWindow });
|
|
1549
1550
|
}
|
|
1550
1551
|
if (options.persistDefault === true) {
|
|
1551
|
-
this.settingsManager.
|
|
1552
|
+
this.settingsManager.setDefaultContextWindowForModel(selected.model.provider, selected.model.id, selected.contextWindow);
|
|
1552
1553
|
}
|
|
1553
1554
|
}
|
|
1554
1555
|
_withContextWindowForModelSwitch(model) {
|
|
1555
1556
|
// A source model's scalar contextWindow can be its natural default (for example a 1m-default
|
|
1556
1557
|
// model). Do not treat that alone as an opt-in to larger windows on a 400k-default target.
|
|
1557
|
-
const settingsDefaultContextWindow = this.
|
|
1558
|
+
const settingsDefaultContextWindow = this._getSettingsContextWindowRequestForModel(model)?.contextWindow;
|
|
1558
1559
|
const candidates = [];
|
|
1559
1560
|
const targetDefaultContextWindow = getModelDefaultContextWindow(model);
|
|
1560
1561
|
if (model.contextWindow !== targetDefaultContextWindow) {
|
|
@@ -1570,12 +1571,12 @@ export class AgentSession {
|
|
|
1570
1571
|
candidates.push(settingsDefaultContextWindow);
|
|
1571
1572
|
}
|
|
1572
1573
|
candidates.push(targetDefaultContextWindow);
|
|
1573
|
-
const
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
return
|
|
1574
|
+
for (const candidate of candidates) {
|
|
1575
|
+
const selected = selectContextWindow(model, candidate, COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS);
|
|
1576
|
+
if (!("error" in selected))
|
|
1577
|
+
return selected.model;
|
|
1578
|
+
}
|
|
1579
|
+
return model;
|
|
1579
1580
|
}
|
|
1580
1581
|
_shouldCarryCurrentContextWindowForModelSwitch(currentModel, settingsDefaultContextWindow) {
|
|
1581
1582
|
if (currentModel.contextWindow !== getModelDefaultContextWindow(currentModel)) {
|
|
@@ -1588,19 +1589,29 @@ export class AgentSession {
|
|
|
1588
1589
|
currentModel.contextWindow === settingsDefaultContextWindow &&
|
|
1589
1590
|
getSupportedContextWindows(currentModel).includes(settingsDefaultContextWindow));
|
|
1590
1591
|
}
|
|
1591
|
-
|
|
1592
|
+
_getSettingsContextWindowRequestForModel(model) {
|
|
1593
|
+
const modelContextWindow = this.settingsManager.getDefaultContextWindowForModel(model.provider, model.id);
|
|
1594
|
+
if (modelContextWindow !== undefined) {
|
|
1595
|
+
return { contextWindow: modelContextWindow, source: "model-settings" };
|
|
1596
|
+
}
|
|
1597
|
+
const globalContextWindow = this.settingsManager.getDefaultContextWindow();
|
|
1598
|
+
return globalContextWindow === undefined
|
|
1599
|
+
? undefined
|
|
1600
|
+
: { contextWindow: globalContextWindow, source: "global-settings" };
|
|
1601
|
+
}
|
|
1602
|
+
_getContextWindowReplayForModel(model, requestedContextWindow, source) {
|
|
1592
1603
|
if (requestedContextWindow !== undefined) {
|
|
1593
|
-
const selected = selectContextWindow(model, requestedContextWindow);
|
|
1604
|
+
const selected = selectContextWindow(model, requestedContextWindow, COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS);
|
|
1594
1605
|
if (!("error" in selected)) {
|
|
1595
1606
|
return { model: selected.model, contextWindow: selected.contextWindow, wouldWarn: false };
|
|
1596
1607
|
}
|
|
1597
|
-
return this._getDefaultContextWindowReplayForModel(model,
|
|
1608
|
+
return this._getDefaultContextWindowReplayForModel(model, source !== "global-settings");
|
|
1598
1609
|
}
|
|
1599
1610
|
return this._getDefaultContextWindowReplayForModel(model, false);
|
|
1600
1611
|
}
|
|
1601
1612
|
_getDefaultContextWindowReplayForModel(model, wouldWarn) {
|
|
1602
1613
|
const defaultContextWindow = getModelDefaultContextWindow(model);
|
|
1603
|
-
const selected = selectContextWindow(model, defaultContextWindow);
|
|
1614
|
+
const selected = selectContextWindow(model, defaultContextWindow, COPILOT_CONTEXT_WINDOW_SELECTION_OPTIONS);
|
|
1604
1615
|
if (!("error" in selected)) {
|
|
1605
1616
|
return { model: selected.model, contextWindow: selected.contextWindow, wouldWarn };
|
|
1606
1617
|
}
|
|
@@ -1612,15 +1623,20 @@ export class AgentSession {
|
|
|
1612
1623
|
}
|
|
1613
1624
|
_getResumeContextWindowReplayForModel(model) {
|
|
1614
1625
|
const sessionContext = this.sessionManager.buildSessionContext();
|
|
1615
|
-
|
|
1616
|
-
|
|
1626
|
+
if (sessionContext.contextWindow !== undefined) {
|
|
1627
|
+
return this._getContextWindowReplayForModel(model, sessionContext.contextWindow, "session");
|
|
1628
|
+
}
|
|
1629
|
+
const settingsContextWindow = this._getSettingsContextWindowRequestForModel(model);
|
|
1630
|
+
return this._getContextWindowReplayForModel(model, settingsContextWindow?.contextWindow, settingsContextWindow?.source);
|
|
1617
1631
|
}
|
|
1618
1632
|
_applyContextWindowReplay(contextWindow) {
|
|
1619
1633
|
if (!this.model)
|
|
1620
1634
|
return;
|
|
1621
1635
|
const previousContextWindow = this.model.contextWindow;
|
|
1622
|
-
const
|
|
1623
|
-
const
|
|
1636
|
+
const settingsContextWindow = this._getSettingsContextWindowRequestForModel(this.model);
|
|
1637
|
+
const requestedContextWindow = contextWindow ?? settingsContextWindow?.contextWindow;
|
|
1638
|
+
const source = contextWindow !== undefined ? "session" : settingsContextWindow?.source;
|
|
1639
|
+
const replay = this._getContextWindowReplayForModel(this.model, requestedContextWindow, source);
|
|
1624
1640
|
this.agent.state.model = replay.model;
|
|
1625
1641
|
if (previousContextWindow !== replay.contextWindow) {
|
|
1626
1642
|
this._emit({ type: "context_window_changed", contextWindow: replay.contextWindow });
|
|
@@ -1993,7 +2009,11 @@ export class AgentSession {
|
|
|
1993
2009
|
else {
|
|
1994
2010
|
contextTokens = calculateContextTokens(assistantMessage.usage);
|
|
1995
2011
|
}
|
|
1996
|
-
|
|
2012
|
+
// Compact against the effective input budget (the hard prompt cap for providers like Copilot
|
|
2013
|
+
// that advertise a larger total window) so we compact before overrunning the server-side limit
|
|
2014
|
+
// rather than relying on reactive overflow recovery near the cap.
|
|
2015
|
+
const compactionBudget = this.model ? getEffectiveInputBudget(this.model) : contextWindow;
|
|
2016
|
+
if (shouldCompact(contextTokens, compactionBudget, settings)) {
|
|
1997
2017
|
await this._runAutoCompaction("threshold", false);
|
|
1998
2018
|
}
|
|
1999
2019
|
}
|
|
@@ -2001,7 +2021,11 @@ export class AgentSession {
|
|
|
2001
2021
|
if (!this.model || this.model.provider !== "github-copilot" || !assistantMessage.errorMessage)
|
|
2002
2022
|
return false;
|
|
2003
2023
|
const promptLimitError = parseCopilotPromptLimitError(assistantMessage.errorMessage);
|
|
2004
|
-
|
|
2024
|
+
// Compare against the effective input budget (the model's real prompt cap), not the displayed
|
|
2025
|
+
// total window. A rejection at the prompt cap is a normal overflow we should compact-and-retry;
|
|
2026
|
+
// only a rejection *below* the cap (e.g. a missing long-context entitlement dropping the account
|
|
2027
|
+
// to a lower server tier) keeps the friendly error visible instead of silently compacting down.
|
|
2028
|
+
return promptLimitError !== undefined && getEffectiveInputBudget(this.model) > promptLimitError.limitTokens;
|
|
2005
2029
|
}
|
|
2006
2030
|
/**
|
|
2007
2031
|
* Internal: remove the trailing overflow error from retry context if it is still present.
|
|
@@ -2195,7 +2219,11 @@ export class AgentSession {
|
|
|
2195
2219
|
if (!refreshedModel || refreshedModel === currentModel) {
|
|
2196
2220
|
return;
|
|
2197
2221
|
}
|
|
2198
|
-
|
|
2222
|
+
const replay = this._getResumeContextWindowReplayForModel(refreshedModel);
|
|
2223
|
+
this.agent.state.model = replay.model;
|
|
2224
|
+
if (currentModel.contextWindow !== replay.contextWindow) {
|
|
2225
|
+
this._emit({ type: "context_window_changed", contextWindow: replay.contextWindow });
|
|
2226
|
+
}
|
|
2199
2227
|
this._refreshBaseSystemPromptFromActiveTools();
|
|
2200
2228
|
}
|
|
2201
2229
|
_bindExtensionCore(runner) {
|