Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,11 @@ jobs:
- name: Verify the generated RPC params catalog
run: pnpm run verify:rpc-params-catalog

# Why: the shipped slot cold-starts under its checksum-pinned Bun, not host Node. The Node
# smoke above builds the artifact; run the same complete built-artifact suite used locally.
- name: Verify the complete bundled Bun orcad runtime
run: pnpm run smoke:orcad-bun:built

- name: Verify bundled skill guides
run: pnpm run verify:bundled-skill-guides

Expand Down
1 change: 1 addition & 0 deletions config/build-plugins/plain-node-entry-guard.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ type OutputChunk = Rollup.OutputChunk
// agent-hooks entry. require("electron") throws MODULE_NOT_FOUND in all of them.
const PLAIN_NODE_ENTRY_NAMES = [
'daemon-entry',
'windows-bun-pty-gate-entry',
'parcel-watcher-process-entry',
'computer-sidecar',
'wsl-transcript-fs-process-entry',
Expand Down
18 changes: 17 additions & 1 deletion config/electron-builder.config.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ const {
assertMobileWebBundleBuilt
} = require('./scripts/verify-packaged-mobile-web-bundle.cjs')
const { verifyPackagedPluginResources } = require('./scripts/verify-packaged-plugin-resources.cjs')
const { verifyPackagedOrcadTemplate } = require('./scripts/verify-packaged-orcad-template.cjs')
const {
verifyPackagedWindowsNodePty
} = require('./scripts/verify-packaged-node-pty-job-ownership.cjs')
Expand Down Expand Up @@ -86,6 +87,10 @@ const relayExtraResource = {
from: 'out/relay',
to: 'relay'
}
const orcadTemplateExtraResource = {
from: 'out/orcad-template',
to: 'orcad-template'
}
// Why: bundled plugins are immutable install inputs and must remain ordinary
// directories so the startup bootstrap can verify and publish exact bytes.
const bundledPluginResources = {
Expand All @@ -105,6 +110,7 @@ const emojiShortcodeDatasetResource = {
}
const commonExtraResources = [
relayExtraResource,
orcadTemplateExtraResource,
bundledPluginResources,
skillFreshnessResources,
emojiShortcodeDatasetResource
Expand Down Expand Up @@ -218,6 +224,10 @@ module.exports = {
// Why: out/electron-dev caches `pnpm dev`'s per-branch Electron.app copies (~270MB each).
// CI never creates it, but packaging on a machine that has run dev would pack them all.
'!out/electron-dev{,/**/*}',
'!out/orcad{,/**/*}',
'!out/orcad-template{,/**/*}',
'!out/.orcad-template-build{,/**/*}',
'!out/.orcad-bun-runtime{,/**/*}',
'!electron.vite.config.{js,ts,mjs,cjs}',
'!{.eslintcache,eslint.config.mjs,.prettierignore,.prettierrc.yaml,CHANGELOG.md,README.md}',
'!{.env,.env.*,.npmrc,pnpm-lock.yaml}',
Expand Down Expand Up @@ -278,6 +288,7 @@ module.exports = {
'out/main/grok/**',
'out/main/hermes/**',
'out/main/daemon-entry.js',
'out/main/windows-bun-pty-gate-entry.js',
'out/main/session-scanner-service-entry.js',
'out/main/wsl-transcript-fs-process-entry.js',
'out/main/session-scanner-opencode-sqlite-worker-entry.js',
Expand Down Expand Up @@ -385,7 +396,12 @@ module.exports = {
)
}
// Why: inspect electron-builder's real output so a broken extraResources
// mapping fails packaging before bundled content reaches users.
// mapping fails packaging before bundled content reaches users. Lightweight
// unit fixtures call this hook without a packager and intentionally omit the
// optional orcad template; real electron-builder contexts always provide one.
if (context.packager || existsSync(join(resourcesDir, 'orcad-template'))) {
verifyPackagedOrcadTemplate(resourcesDir)
}
verifyPackagedPluginResources(resourcesDir)
chmodUnixCliLaunchers(resourcesDir, context.electronPlatformName)
chmodMacServeSimHelpers(resourcesDir, context.electronPlatformName)
Expand Down
1 change: 1 addition & 0 deletions config/knip.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"src/preload/index.ts",
"src/preload/browser-window-close.ts",
"src/main/daemon/daemon-entry.ts",
"src/main/daemon/pty-subprocess/windows-bun-pty-gate-entry.ts",
"src/main/plugins/plugin-host-entry.ts",
"src/main/computer/sidecar-entry.ts",
"src/main/speech/stt-worker.ts",
Expand Down
47 changes: 37 additions & 10 deletions config/patches/@xterm__xterm@6.1.0-beta.303.patch

Large diffs are not rendered by default.

27 changes: 27 additions & 0 deletions config/patches/xterm-src/@xterm__xterm@6.1.0-beta.303.src.patch
Original file line number Diff line number Diff line change
Expand Up @@ -1225,3 +1225,30 @@ index 8a10076e3963e33b4a7d1e4602333eb3f4772dc9..c6dcf18b762e3c56fe22e9c2d49b8e55
this._flushDeletedTask.flush();
}
}
diff --git a/src/common/services/CoreService.ts b/src/common/services/CoreService.ts
index b3e04ebe6f27e7941a2808f96d10fb2700f7b735..5ef3b52dbbd5ee2dc57938e12f57fc13aec66c69 100644
--- a/src/common/services/CoreService.ts
+++ b/src/common/services/CoreService.ts
@@ -46,6 +46,7 @@ export class CoreService extends Disposable implements ICoreService {

private readonly _onData = this._register(new Emitter<string>());
public readonly onData = this._onData.event;
+ public orcaDataEventIsUserInput: boolean = false;
private readonly _onUserInput = this._register(new Emitter<void>());
public readonly onUserInput = this._onUserInput.event;
private readonly _onBinary = this._register(new Emitter<string>());
@@ -91,7 +92,13 @@ export class CoreService extends Disposable implements ICoreService {
// Fire onData API
this._logService.debug(`sending data "${data}"`);
this._logService.trace(`sending data (codes)`, () => data.split('').map(e => e.charCodeAt(0)));
- this._onData.fire(data);
+ const previousUserInput = this.orcaDataEventIsUserInput;
+ this.orcaDataEventIsUserInput = wasUserInput;
+ try {
+ this._onData.fire(data);
+ } finally {
+ this.orcaDataEventIsUserInput = previousUserInput;
+ }
}

public triggerBinaryEvent(data: string): void {
Loading
Loading