@gajae-code/coding-agent 0.10.2 → 0.11.1
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 +58 -2
- package/dist/types/append-only-mode.d.ts +1 -1
- package/dist/types/async/job-manager.d.ts +46 -7
- package/dist/types/cli/args.d.ts +4 -5
- package/dist/types/cli/daemon-cli.d.ts +12 -1
- package/dist/types/cli/notify-cli.d.ts +21 -1
- package/dist/types/cli.d.ts +3 -0
- package/dist/types/commands/daemon.d.ts +39 -0
- package/dist/types/commands/launch.d.ts +3 -0
- package/dist/types/commands/notify.d.ts +28 -1
- package/dist/types/commands/sdk.d.ts +33 -0
- package/dist/types/config/atomic-yaml-patch.d.ts +85 -0
- package/dist/types/config/model-profile-activation.d.ts +35 -15
- package/dist/types/config/model-profiles.d.ts +11 -5
- package/dist/types/config/model-registry.d.ts +3 -3
- package/dist/types/config/model-resolver.d.ts +39 -6
- package/dist/types/config/model-selector-value.d.ts +17 -0
- package/dist/types/config/models-config-schema.d.ts +10 -6
- package/dist/types/config/settings-schema.d.ts +133 -6
- package/dist/types/config/settings.d.ts +63 -35
- package/dist/types/coordinator-mcp/model-preset.d.ts +7 -6
- package/dist/types/coordinator-mcp/server.d.ts +6 -49
- package/dist/types/daemon/builtin.d.ts +6 -5
- package/dist/types/daemon/control-types.d.ts +1 -1
- package/dist/types/discovery/mcp-json.d.ts +12 -1
- package/dist/types/extensibility/custom-tools/types.d.ts +1 -1
- package/dist/types/extensibility/extensions/compact-handler.d.ts +4 -2
- package/dist/types/extensibility/extensions/get-commands-handler.d.ts +2 -2
- package/dist/types/extensibility/extensions/loader.d.ts +10 -1
- package/dist/types/extensibility/extensions/runner.d.ts +3 -3
- package/dist/types/extensibility/extensions/types.d.ts +141 -16
- package/dist/types/extensibility/hooks/types.d.ts +1 -1
- package/dist/types/gjc-runtime/launch-tmux.d.ts +3 -2
- package/dist/types/gjc-runtime/psmux-detect.d.ts +3 -0
- package/dist/types/gjc-runtime/session-state-sidecar.d.ts +3 -0
- package/dist/types/gjc-runtime/team-runtime.d.ts +3 -4
- package/dist/types/gjc-runtime/tmux-owner-isolation-cli.d.ts +13 -0
- package/dist/types/gjc-runtime/tmux-sessions.d.ts +4 -1
- package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +11 -0
- package/dist/types/gjc-runtime/windows-powershell-command.d.ts +9 -0
- package/dist/types/harness-control-plane/operate.d.ts +5 -5
- package/dist/types/harness-control-plane/owner.d.ts +18 -4
- package/dist/types/harness-control-plane/receipts.d.ts +0 -1
- package/dist/types/harness-control-plane/sdk-transport.d.ts +43 -0
- package/dist/types/harness-control-plane/session-transport.d.ts +48 -0
- package/dist/types/harness-control-plane/types.d.ts +3 -4
- package/dist/types/lsp/index.d.ts +1 -1
- package/dist/types/main.d.ts +32 -38
- package/dist/types/modes/acp/acp-agent.d.ts +224 -53
- package/dist/types/modes/acp/acp-client-bridge.d.ts +1 -0
- package/dist/types/modes/acp/acp-mode.d.ts +6 -15
- package/dist/types/modes/acp/permission-mode.d.ts +4 -0
- package/dist/types/modes/acp/startup-options.d.ts +6 -0
- package/dist/types/modes/components/agent-dashboard.d.ts +3 -0
- package/dist/types/modes/components/model-selector.d.ts +1 -0
- package/dist/types/modes/components/notifications-settings-editor.d.ts +135 -0
- package/dist/types/modes/components/settings-selector.d.ts +6 -4
- package/dist/types/modes/components/welcome.d.ts +1 -1
- package/dist/types/modes/controllers/command-controller.d.ts +2 -2
- package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -0
- package/dist/types/modes/controllers/selector-controller.d.ts +35 -1
- package/dist/types/modes/index.d.ts +0 -4
- package/dist/types/modes/interactive-mode.d.ts +5 -2
- package/dist/types/modes/runtime-init.d.ts +2 -2
- package/dist/types/modes/shared/agent-wire/approval-gate.d.ts +6 -9
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -6
- package/dist/types/modes/shared/agent-wire/event-contract.d.ts +6 -6
- package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +4 -9
- package/dist/types/modes/shared/agent-wire/event-observation.d.ts +1 -1
- package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +170 -30
- package/dist/types/modes/shared/agent-wire/workflow-gate-schema.d.ts +7 -7
- package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +105 -0
- package/dist/types/modes/types.d.ts +7 -2
- package/dist/types/runtime-mcp/client.d.ts +2 -0
- package/dist/types/runtime-mcp/config.d.ts +5 -1
- package/dist/types/runtime-mcp/manager.d.ts +8 -1
- package/dist/types/runtime-mcp/types.d.ts +4 -0
- package/dist/types/sdk/acp/adapter.d.ts +67 -0
- package/dist/types/sdk/acp/index.d.ts +2 -0
- package/dist/types/sdk/broker/broker.d.ts +53 -0
- package/dist/types/sdk/broker/discovery.d.ts +30 -0
- package/dist/types/sdk/broker/ensure.d.ts +42 -0
- package/dist/types/sdk/broker/identity.d.ts +3 -0
- package/dist/types/sdk/broker/index.d.ts +8 -0
- package/dist/types/sdk/broker/lifecycle-ledger.d.ts +95 -0
- package/dist/types/sdk/broker/lifecycle.d.ts +85 -0
- package/dist/types/sdk/broker/process-incarnation.d.ts +14 -0
- package/dist/types/sdk/broker/runtime.d.ts +33 -0
- package/dist/types/sdk/broker/session-index.d.ts +57 -0
- package/dist/types/sdk/broker/state-version.d.ts +8 -0
- package/dist/types/sdk/broker/transport.d.ts +9 -0
- package/dist/types/sdk/bus/chat-command-policy.d.ts +49 -0
- package/dist/types/sdk/bus/chat-daemon-cli.d.ts +21 -0
- package/dist/types/sdk/bus/chat-daemon-control.d.ts +111 -0
- package/dist/types/sdk/bus/chat-daemon-runtime.d.ts +77 -0
- package/dist/types/sdk/bus/chat-effect-journal.d.ts +84 -0
- package/dist/types/{notifications → sdk/bus}/config-commands.d.ts +7 -2
- package/dist/types/sdk/bus/config.d.ts +274 -0
- package/dist/types/sdk/bus/conversation-store.d.ts +72 -0
- package/dist/types/sdk/bus/discord-conversation.d.ts +58 -0
- package/dist/types/sdk/bus/discord-daemon.d.ts +50 -0
- package/dist/types/sdk/bus/discord-live-provider.d.ts +70 -0
- package/dist/types/sdk/bus/discord-provider.d.ts +85 -0
- package/dist/types/{notifications → sdk/bus}/html-format.d.ts +2 -2
- package/dist/types/{notifications → sdk/bus}/index.d.ts +113 -13
- package/dist/types/{notifications → sdk/bus}/lifecycle-control-runtime.d.ts +4 -2
- package/dist/types/{notifications → sdk/bus}/lifecycle-orchestrator.d.ts +18 -21
- package/dist/types/{notifications → sdk/bus}/managed-daemon.d.ts +1 -1
- package/dist/types/sdk/bus/native-runtime-compatibility.d.ts +13 -0
- package/dist/types/sdk/bus/notification-orchestration.d.ts +170 -0
- package/dist/types/{notifications → sdk/bus}/notification-service.d.ts +7 -1
- package/dist/types/sdk/bus/session-control.d.ts +83 -0
- package/dist/types/sdk/bus/slack-conversation.d.ts +56 -0
- package/dist/types/sdk/bus/slack-daemon.d.ts +60 -0
- package/dist/types/sdk/bus/slack-live-provider.d.ts +59 -0
- package/dist/types/sdk/bus/slack-provider.d.ts +55 -0
- package/dist/types/{notifications → sdk/bus}/telegram-cli.d.ts +4 -4
- package/dist/types/{notifications → sdk/bus}/telegram-daemon-cli.d.ts +14 -5
- package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +12 -0
- package/dist/types/{notifications → sdk/bus}/telegram-daemon-control.d.ts +2 -2
- package/dist/types/{notifications → sdk/bus}/telegram-daemon.d.ts +78 -17
- package/dist/types/{notifications → sdk/bus}/telegram-reference.d.ts +2 -2
- package/dist/types/sdk/bus/telegram-setup.d.ts +128 -0
- package/dist/types/{notifications → sdk/bus}/topic-registry.d.ts +11 -0
- package/dist/types/sdk/cli/index.d.ts +1 -0
- package/dist/types/sdk/cli/session-cli.d.ts +19 -0
- package/dist/types/sdk/client/client.d.ts +1 -0
- package/dist/types/sdk/client/discovery.d.ts +27 -0
- package/dist/types/sdk/client/index.d.ts +2 -0
- package/dist/types/sdk/host/control/dispatch.d.ts +34 -0
- package/dist/types/sdk/host/control/index.d.ts +2 -0
- package/dist/types/sdk/host/control/operations.d.ts +65 -0
- package/dist/types/sdk/host/events.d.ts +35 -0
- package/dist/types/sdk/host/host.d.ts +35 -0
- package/dist/types/sdk/host/index.d.ts +4 -0
- package/dist/types/sdk/host/query/cursor.d.ts +62 -0
- package/dist/types/sdk/host/query/handlers.d.ts +70 -0
- package/dist/types/sdk/host/query/index.d.ts +3 -0
- package/dist/types/sdk/host/query/revision-store.d.ts +60 -0
- package/dist/types/sdk/host/reverse-leases.d.ts +45 -0
- package/dist/types/sdk/host/types.d.ts +32 -0
- package/dist/types/sdk/index.d.ts +6 -0
- package/dist/types/sdk/lifecycle-session.d.ts +14 -0
- package/dist/types/sdk/mcp/index.d.ts +1 -0
- package/dist/types/sdk/mcp/server.d.ts +37 -0
- package/dist/types/sdk/models.d.ts +44 -0
- package/dist/types/sdk/protocol/adapter-validation.d.ts +14 -0
- package/dist/types/sdk/protocol/operation-registry.d.ts +24 -0
- package/dist/types/{sdk.d.ts → sdk/session.d.ts} +44 -38
- package/dist/types/sdk/startup-capability.d.ts +50 -0
- package/dist/types/session/agent-session.d.ts +114 -21
- package/dist/types/session/default-model-selection.d.ts +25 -0
- package/dist/types/session/fallback-chain-controller.d.ts +52 -0
- package/dist/types/session/session-manager.d.ts +58 -1
- package/dist/types/setup/credential-auto-import.d.ts +36 -6
- package/dist/types/tools/ask-answer-registry.d.ts +1 -1
- package/dist/types/tools/browser/benchmark/detector-report.d.ts +63 -0
- package/dist/types/tools/browser/benchmark/run-suite.d.ts +18 -0
- package/dist/types/tools/browser/launch.d.ts +22 -0
- package/dist/types/tools/browser/profile-discovery.d.ts +31 -0
- package/dist/types/tools/browser/profile-posture.d.ts +37 -0
- package/dist/types/tools/browser/profile-reuse.d.ts +39 -0
- package/dist/types/tools/browser/profile-warmup.d.ts +39 -0
- package/dist/types/tools/browser/registry.d.ts +19 -0
- package/dist/types/tools/browser/tab-protocol.d.ts +4 -0
- package/dist/types/tools/index.d.ts +8 -8
- package/dist/types/tools/subagent-render.d.ts +1 -0
- package/dist/types/tools/subagent.d.ts +6 -1
- package/package.json +34 -13
- package/scripts/build-sdk-package-smoke.ts +99 -0
- package/scripts/capture-notifications-settings-showcase.ts +435 -0
- package/scripts/compile-args.ts +4 -2
- package/scripts/g005-daemon-smoke.ts +4 -5
- package/scripts/g011-daemon-path-smoke.ts +5 -5
- package/scripts/generate-sdk-adapter-parity-manifest.ts +163 -0
- package/scripts/generate-sdk-operation-inventory.ts +867 -0
- package/scripts/generate-telegram-baseline-manifest.ts +128 -0
- package/scripts/manifest-schema.ts +124 -0
- package/scripts/run-test-manifest.ts +153 -0
- package/scripts/run-threat-model-check.ts +157 -0
- package/scripts/verify-gjc-sdk-canonicalization.ts +3467 -0
- package/scripts/verify-gjc-sdk-rename.ts +90 -0
- package/src/append-only-mode.ts +1 -1
- package/src/async/job-manager.ts +406 -63
- package/src/cli/args.ts +43 -12
- package/src/cli/auth-gateway-cli.ts +2 -2
- package/src/cli/config-cli.ts +2 -1
- package/src/cli/daemon-cli.ts +63 -14
- package/src/cli/list-models.ts +1 -1
- package/src/cli/notify-cli.ts +288 -286
- package/src/cli.ts +21 -2
- package/src/commands/daemon.ts +50 -6
- package/src/commands/harness.ts +93 -36
- package/src/commands/launch.ts +5 -2
- package/src/commands/mcp-serve.ts +19 -12
- package/src/commands/notify.ts +36 -3
- package/src/commands/sdk.ts +426 -0
- package/src/commit/agentic/agent.ts +1 -0
- package/src/config/atomic-yaml-patch.ts +423 -0
- package/src/config/model-profile-activation.ts +240 -89
- package/src/config/model-profiles.ts +18 -15
- package/src/config/model-registry.ts +51 -26
- package/src/config/model-resolver.ts +138 -51
- package/src/config/model-selector-value.ts +50 -0
- package/src/config/models-config-schema.ts +14 -21
- package/src/config/settings-schema.ts +128 -10
- package/src/config/settings.ts +1120 -158
- package/src/coordinator-mcp/model-preset.ts +74 -20
- package/src/coordinator-mcp/server.ts +1597 -3052
- package/src/daemon/builtin.ts +8 -5
- package/src/daemon/control-types.ts +1 -1
- package/src/defaults/gjc/skills/team/SKILL.md +4 -4
- package/src/discovery/mcp-json.ts +327 -20
- package/src/extensibility/custom-tools/types.ts +1 -1
- package/src/extensibility/extensions/compact-handler.ts +3 -3
- package/src/extensibility/extensions/get-commands-handler.ts +2 -2
- package/src/extensibility/extensions/loader.ts +69 -5
- package/src/extensibility/extensions/runner.ts +112 -4
- package/src/extensibility/extensions/types.ts +176 -17
- package/src/extensibility/hooks/types.ts +1 -1
- package/src/gjc-runtime/launch-tmux.ts +170 -86
- package/src/gjc-runtime/psmux-detect.ts +82 -4
- package/src/gjc-runtime/session-state-sidecar.ts +41 -31
- package/src/gjc-runtime/team-runtime.ts +54 -35
- package/src/gjc-runtime/tmux-owner-isolation-cli.ts +53 -17
- package/src/gjc-runtime/tmux-owner-isolation.ts +1 -1
- package/src/gjc-runtime/tmux-sessions.ts +19 -13
- package/src/gjc-runtime/ultragoal-guard.ts +108 -14
- package/src/gjc-runtime/ultragoal-receipt-freshness.ts +102 -1
- package/src/gjc-runtime/ultragoal-runtime.ts +227 -11
- package/src/gjc-runtime/windows-powershell-command.ts +58 -0
- package/src/harness-control-plane/operate.ts +9 -9
- package/src/harness-control-plane/owner.ts +283 -39
- package/src/harness-control-plane/receipts.ts +0 -1
- package/src/harness-control-plane/sdk-transport.ts +395 -0
- package/src/harness-control-plane/session-transport.ts +94 -0
- package/src/harness-control-plane/types.ts +1 -1
- package/src/internal-urls/docs-index.generated.ts +34 -35
- package/src/lsp/client.ts +42 -6
- package/src/lsp/index.ts +2 -2
- package/src/main.ts +299 -204
- package/src/modes/DESIGN.md +258 -0
- package/src/modes/acp/acp-agent.ts +1228 -2612
- package/src/modes/acp/acp-client-bridge.ts +2 -20
- package/src/modes/acp/acp-event-mapper.ts +18 -2
- package/src/modes/acp/acp-mode.ts +8 -36
- package/src/modes/acp/permission-mode.ts +25 -0
- package/src/modes/acp/startup-options.ts +6 -0
- package/src/modes/components/agent-dashboard.ts +37 -17
- package/src/modes/components/model-selector.ts +93 -35
- package/src/modes/components/notifications-settings-editor.ts +1379 -0
- package/src/modes/components/settings-selector.ts +60 -11
- package/src/modes/components/welcome.ts +4 -4
- package/src/modes/controllers/command-controller.ts +10 -17
- package/src/modes/controllers/event-controller.ts +11 -16
- package/src/modes/controllers/extension-ui-controller.ts +396 -28
- package/src/modes/controllers/selector-controller.ts +674 -36
- package/src/modes/index.ts +0 -22
- package/src/modes/interactive-mode.ts +87 -36
- package/src/modes/runtime-init.ts +298 -6
- package/src/modes/shared/agent-wire/approval-gate.ts +9 -11
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +10 -11
- package/src/modes/shared/agent-wire/event-contract.ts +7 -8
- package/src/modes/shared/agent-wire/event-envelope.ts +9 -17
- package/src/modes/shared/agent-wire/event-observation.ts +16 -7
- package/src/modes/shared/agent-wire/workflow-gate-broker.ts +1258 -87
- package/src/modes/shared/agent-wire/workflow-gate-schema.ts +15 -15
- package/src/modes/shared/agent-wire/workflow-gate-types.ts +113 -0
- package/src/modes/types.ts +7 -2
- package/src/runtime-mcp/client.ts +94 -19
- package/src/runtime-mcp/config.ts +27 -15
- package/src/runtime-mcp/manager.ts +343 -105
- package/src/runtime-mcp/oauth-flow.ts +42 -12
- package/src/runtime-mcp/transports/http.ts +49 -19
- package/src/runtime-mcp/transports/stdio.ts +47 -28
- package/src/runtime-mcp/types.ts +10 -0
- package/src/sdk/acp/adapter.ts +418 -0
- package/src/sdk/acp/index.ts +2 -0
- package/src/sdk/broker/broker.ts +642 -0
- package/src/sdk/broker/discovery.ts +113 -0
- package/src/sdk/broker/ensure.ts +307 -0
- package/src/sdk/broker/identity.ts +42 -0
- package/src/sdk/broker/index.ts +8 -0
- package/src/sdk/broker/internal-source-marker-2178.txt +1 -0
- package/src/sdk/broker/internal-source.bunfig.toml +1 -0
- package/src/sdk/broker/lifecycle-ledger.ts +286 -0
- package/src/sdk/broker/lifecycle.ts +2157 -0
- package/src/sdk/broker/process-incarnation.ts +159 -0
- package/src/sdk/broker/runtime.ts +164 -0
- package/src/sdk/broker/session-index.ts +318 -0
- package/src/sdk/broker/state-version.ts +23 -0
- package/src/sdk/broker/transport.ts +125 -0
- package/src/sdk/bus/chat-command-policy.ts +107 -0
- package/src/sdk/bus/chat-daemon-cli.ts +214 -0
- package/src/sdk/bus/chat-daemon-control.ts +713 -0
- package/src/sdk/bus/chat-daemon-runtime.ts +526 -0
- package/src/sdk/bus/chat-effect-journal.ts +355 -0
- package/src/{notifications → sdk/bus}/config-commands.ts +39 -10
- package/src/sdk/bus/config.ts +433 -0
- package/src/sdk/bus/conversation-store.ts +391 -0
- package/src/sdk/bus/discord-conversation.ts +85 -0
- package/src/sdk/bus/discord-daemon.ts +2292 -0
- package/src/sdk/bus/discord-live-provider.ts +521 -0
- package/src/sdk/bus/discord-provider.ts +56 -0
- package/src/{notifications → sdk/bus}/html-format.ts +2 -2
- package/src/sdk/bus/index.ts +3979 -0
- package/src/{notifications → sdk/bus}/lifecycle-commands.ts +2 -0
- package/src/{notifications → sdk/bus}/lifecycle-control-runtime.ts +225 -196
- package/src/{notifications → sdk/bus}/lifecycle-orchestrator.ts +161 -74
- package/src/{notifications → sdk/bus}/managed-daemon.ts +2 -2
- package/src/sdk/bus/native-runtime-compatibility.ts +42 -0
- package/src/sdk/bus/natives-augment.d.ts +38 -0
- package/src/sdk/bus/notification-orchestration.ts +535 -0
- package/src/{notifications → sdk/bus}/notification-service.ts +106 -12
- package/src/sdk/bus/session-control.ts +333 -0
- package/src/sdk/bus/slack-conversation.ts +74 -0
- package/src/sdk/bus/slack-daemon.ts +2144 -0
- package/src/sdk/bus/slack-live-provider.ts +380 -0
- package/src/sdk/bus/slack-provider.ts +76 -0
- package/src/{notifications → sdk/bus}/telegram-cli.ts +8 -8
- package/src/sdk/bus/telegram-daemon-cli.ts +330 -0
- package/src/sdk/bus/telegram-daemon-contract.ts +14 -0
- package/src/{notifications → sdk/bus}/telegram-daemon-control.ts +4 -4
- package/src/{notifications → sdk/bus}/telegram-daemon.ts +603 -63
- package/src/{notifications → sdk/bus}/telegram-reference.ts +2 -2
- package/src/sdk/bus/telegram-setup.ts +663 -0
- package/src/{notifications → sdk/bus}/topic-registry.ts +32 -0
- package/src/sdk/cli/index.ts +1 -0
- package/src/sdk/cli/session-cli.ts +275 -0
- package/src/sdk/client/client.ts +1 -0
- package/src/sdk/client/discovery.ts +108 -0
- package/src/sdk/client/index.ts +2 -0
- package/src/sdk/host/control/dispatch.ts +367 -0
- package/src/sdk/host/control/index.ts +10 -0
- package/src/sdk/host/control/operations.ts +63 -0
- package/src/sdk/host/events.ts +91 -0
- package/src/sdk/host/host.ts +296 -0
- package/src/sdk/host/index.ts +4 -0
- package/src/sdk/host/query/cursor.ts +189 -0
- package/src/sdk/host/query/handlers.ts +533 -0
- package/src/sdk/host/query/index.ts +3 -0
- package/src/sdk/host/query/revision-store.ts +1126 -0
- package/src/sdk/host/reverse-leases.ts +325 -0
- package/src/sdk/host/types.ts +29 -0
- package/src/sdk/index.ts +13 -0
- package/src/sdk/lifecycle-session.ts +39 -0
- package/src/sdk/mcp/index.ts +1 -0
- package/src/sdk/mcp/server.ts +332 -0
- package/src/sdk/models.ts +168 -0
- package/src/sdk/protocol/adapter-validation.ts +48 -0
- package/src/sdk/protocol/operation-inventory.generated.json +5654 -0
- package/src/sdk/protocol/operation-registry.ts +312 -0
- package/src/{sdk.ts → sdk/session.ts} +339 -212
- package/src/sdk/startup-capability.ts +189 -0
- package/src/session/agent-session.ts +2650 -944
- package/src/session/default-model-selection.ts +93 -0
- package/src/session/fallback-chain-controller.ts +136 -0
- package/src/session/session-manager.ts +438 -11
- package/src/session/session-storage.ts +8 -1
- package/src/setup/credential-auto-import.ts +290 -35
- package/src/setup/hermes/templates/operator-instructions.v1.md +3 -5
- package/src/slash-commands/builtin-registry.ts +2 -1
- package/src/task/executor.ts +62 -13
- package/src/task/index.ts +26 -16
- package/src/tools/ask-answer-registry.ts +1 -1
- package/src/tools/ask.ts +13 -8
- package/src/tools/browser/STEALTH-THIRD-PARTY-NOTICES.md +26 -0
- package/src/tools/browser/benchmark/detector-report.ts +157 -0
- package/src/tools/browser/benchmark/run-suite.ts +39 -0
- package/src/tools/browser/launch.ts +124 -19
- package/src/tools/browser/profile-discovery.ts +63 -0
- package/src/tools/browser/profile-posture.ts +59 -0
- package/src/tools/browser/profile-reuse.ts +102 -0
- package/src/tools/browser/profile-warmup.ts +109 -0
- package/src/tools/browser/registry.ts +87 -11
- package/src/tools/browser/tab-protocol.ts +1 -0
- package/src/tools/browser/tab-supervisor.ts +1 -0
- package/src/tools/browser/tab-worker.ts +1 -1
- package/src/tools/browser.ts +6 -0
- package/src/tools/index.ts +8 -8
- package/src/tools/puppeteer/14_stealth_permissions.txt +57 -0
- package/src/tools/puppeteer/15_stealth_webrtc.txt +60 -0
- package/src/tools/subagent-render.ts +19 -8
- package/src/tools/subagent.ts +84 -32
- package/src/tools/telegram-send.ts +2 -2
- package/vendor/insane-search/MANIFEST.json +2 -1
- package/vendor/insane-search/engine/bias_check.py +4 -1
- package/vendor/insane-search/engine/phase0.py +26 -1
- package/dist/types/harness-control-plane/rpc-adapter.d.ts +0 -69
- package/dist/types/modes/bridge/auth.d.ts +0 -12
- package/dist/types/modes/bridge/bridge-client-bridge.d.ts +0 -9
- package/dist/types/modes/bridge/bridge-mode.d.ts +0 -47
- package/dist/types/modes/bridge/bridge-ui-context.d.ts +0 -88
- package/dist/types/modes/bridge/event-stream.d.ts +0 -8
- package/dist/types/modes/rpc/host-tools.d.ts +0 -1
- package/dist/types/modes/rpc/host-uris.d.ts +0 -1
- package/dist/types/modes/rpc/rpc-client.d.ts +0 -299
- package/dist/types/modes/rpc/rpc-mode.d.ts +0 -86
- package/dist/types/modes/rpc/rpc-socket-security.d.ts +0 -10
- package/dist/types/modes/rpc/rpc-types.d.ts +0 -810
- package/dist/types/modes/shared/agent-wire/command-contract.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +0 -37
- package/dist/types/modes/shared/agent-wire/command-validation.d.ts +0 -2
- package/dist/types/modes/shared/agent-wire/handshake.d.ts +0 -56
- package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +0 -16
- package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +0 -17
- package/dist/types/modes/shared/agent-wire/protocol.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/responses.d.ts +0 -4
- package/dist/types/modes/shared/agent-wire/scopes.d.ts +0 -18
- package/dist/types/modes/shared/agent-wire/session-registry.d.ts +0 -25
- package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +0 -42
- package/dist/types/modes/shared/agent-wire/ui-result.d.ts +0 -27
- package/dist/types/modes/shared/agent-wire/unattended-action-policy.d.ts +0 -29
- package/dist/types/modes/shared/agent-wire/unattended-audit.d.ts +0 -68
- package/dist/types/modes/shared/agent-wire/unattended-run-controller.d.ts +0 -166
- package/dist/types/modes/shared/agent-wire/unattended-session.d.ts +0 -127
- package/dist/types/notifications/config.d.ts +0 -132
- package/src/harness-control-plane/rpc-adapter.ts +0 -290
- package/src/modes/bridge/auth.ts +0 -41
- package/src/modes/bridge/bridge-client-bridge.ts +0 -47
- package/src/modes/bridge/bridge-mode.ts +0 -675
- package/src/modes/bridge/bridge-ui-context.ts +0 -200
- package/src/modes/bridge/event-stream.ts +0 -70
- package/src/modes/rpc/host-tools.ts +0 -1
- package/src/modes/rpc/host-uris.ts +0 -1
- package/src/modes/rpc/rpc-client.ts +0 -1166
- package/src/modes/rpc/rpc-mode.ts +0 -1029
- package/src/modes/rpc/rpc-socket-security.ts +0 -115
- package/src/modes/rpc/rpc-types.ts +0 -637
- package/src/modes/shared/agent-wire/command-contract.ts +0 -18
- package/src/modes/shared/agent-wire/command-dispatch.ts +0 -498
- package/src/modes/shared/agent-wire/command-validation.ts +0 -181
- package/src/modes/shared/agent-wire/handshake.ts +0 -157
- package/src/modes/shared/agent-wire/host-tool-bridge.ts +0 -197
- package/src/modes/shared/agent-wire/host-uri-bridge.ts +0 -236
- package/src/modes/shared/agent-wire/protocol.ts +0 -46
- package/src/modes/shared/agent-wire/responses.ts +0 -17
- package/src/modes/shared/agent-wire/scopes.ts +0 -94
- package/src/modes/shared/agent-wire/session-registry.ts +0 -109
- package/src/modes/shared/agent-wire/ui-request-broker.ts +0 -150
- package/src/modes/shared/agent-wire/ui-result.ts +0 -48
- package/src/modes/shared/agent-wire/unattended-action-policy.ts +0 -365
- package/src/modes/shared/agent-wire/unattended-audit.ts +0 -176
- package/src/modes/shared/agent-wire/unattended-run-controller.ts +0 -426
- package/src/modes/shared/agent-wire/unattended-session.ts +0 -528
- package/src/notifications/config.ts +0 -219
- package/src/notifications/index.ts +0 -1835
- package/src/notifications/telegram-daemon-cli.ts +0 -243
- package/src/tools/puppeteer/09_stealth_locale.txt +0 -46
- /package/dist/types/{notifications → sdk/bus}/attachment-registry.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/chat-adapters.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/daemon-paths.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/engine.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/helpers.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/lifecycle-commands.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/operator-runtime.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rate-limit-pool.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/recent-activity.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/reply-sent-store.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rich-draft.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/rich-render.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/threaded-inbound.d.ts +0 -0
- /package/dist/types/{notifications → sdk/bus}/threaded-render.d.ts +0 -0
- /package/src/{notifications → sdk/bus}/attachment-registry.ts +0 -0
- /package/src/{notifications → sdk/bus}/chat-adapters.ts +0 -0
- /package/src/{notifications → sdk/bus}/daemon-paths.ts +0 -0
- /package/src/{notifications → sdk/bus}/engine.ts +0 -0
- /package/src/{notifications → sdk/bus}/helpers.ts +0 -0
- /package/src/{notifications → sdk/bus}/operator-runtime.ts +0 -0
- /package/src/{notifications → sdk/bus}/rate-limit-pool.ts +0 -0
- /package/src/{notifications → sdk/bus}/recent-activity.ts +0 -0
- /package/src/{notifications → sdk/bus}/reply-sent-store.ts +0 -0
- /package/src/{notifications → sdk/bus}/rich-draft.ts +0 -0
- /package/src/{notifications → sdk/bus}/rich-render.ts +0 -0
- /package/src/{notifications → sdk/bus}/threaded-inbound.ts +0 -0
- /package/src/{notifications → sdk/bus}/threaded-render.ts +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@gajae-code/coding-agent",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.11.1",
|
|
5
5
|
"description": "Gajae Code CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://gajae-code.com",
|
|
7
7
|
"author": "Yeachan-Heo and Gajae Code Contributors",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
31
|
"build": "bun scripts/build-binary.ts",
|
|
32
|
-
"check": "biome check . && bun run check:types",
|
|
32
|
+
"check": "biome check . && bun run verify:sdk-canonicalization && bun run check:types",
|
|
33
33
|
"check:types": "tsc -p tsconfig.json --noEmit",
|
|
34
34
|
"lint": "biome lint .",
|
|
35
35
|
"test": "bun test",
|
|
@@ -43,18 +43,21 @@
|
|
|
43
43
|
"prepack": "bun scripts/generate-docs-index.ts",
|
|
44
44
|
"generate-template": "bun scripts/generate-template.ts",
|
|
45
45
|
"install:defaults": "bun src/cli.ts setup defaults",
|
|
46
|
-
"verify:insane-vendor": "bun scripts/verify-insane-vendor.ts"
|
|
46
|
+
"verify:insane-vendor": "bun scripts/verify-insane-vendor.ts",
|
|
47
|
+
"verify:sdk-canonicalization": "bun scripts/verify-gjc-sdk-canonicalization.ts",
|
|
48
|
+
"check:sdk-closure": "bun scripts/generate-sdk-operation-inventory.ts --check && bun scripts/generate-sdk-adapter-parity-manifest.ts --check && bun scripts/run-test-manifest.ts test/manifests/sdk-adapter-parity-v1.json && bun scripts/generate-telegram-baseline-manifest.ts --check && bun scripts/run-test-manifest.ts test/manifests/telegram-baseline-v1.json && bun test test/sdk-downgrade-rollback.test.ts test/sdk-downgrade-unknown-version.test.ts && bun scripts/verify-gjc-sdk-canonicalization.ts --self-test && bun scripts/verify-gjc-sdk-canonicalization.ts && bun scripts/verify-gjc-sdk-rename.ts"
|
|
47
49
|
},
|
|
48
50
|
"dependencies": {
|
|
49
51
|
"@agentclientprotocol/sdk": "1.2.1",
|
|
50
52
|
"@babel/parser": "^7.29.3",
|
|
51
53
|
"@mozilla/readability": "^0.6.0",
|
|
52
|
-
"@gajae-code/stats": "0.
|
|
53
|
-
"@gajae-code/agent-core": "0.
|
|
54
|
-
"@gajae-code/ai": "0.
|
|
55
|
-
"@gajae-code/
|
|
56
|
-
"@gajae-code/
|
|
57
|
-
"@gajae-code/
|
|
54
|
+
"@gajae-code/stats": "0.11.1",
|
|
55
|
+
"@gajae-code/agent-core": "0.11.1",
|
|
56
|
+
"@gajae-code/ai": "0.11.1",
|
|
57
|
+
"@gajae-code/bridge-client": "0.11.1",
|
|
58
|
+
"@gajae-code/natives": "0.11.1",
|
|
59
|
+
"@gajae-code/tui": "0.11.1",
|
|
60
|
+
"@gajae-code/utils": "0.11.1",
|
|
58
61
|
"@puppeteer/browsers": "^2.13.0",
|
|
59
62
|
"@types/turndown": "5.0.6",
|
|
60
63
|
"@xterm/headless": "^6.0.0",
|
|
@@ -71,6 +74,9 @@
|
|
|
71
74
|
"zod": "4.4.3"
|
|
72
75
|
},
|
|
73
76
|
"devDependencies": {
|
|
77
|
+
"@babel/traverse": "^7.29.0",
|
|
78
|
+
"@babel/types": "^7.29.0",
|
|
79
|
+
"@types/babel__traverse": "^7.28.0",
|
|
74
80
|
"@types/bun": "^1.3.14",
|
|
75
81
|
"@types/ws": "^8.5.13"
|
|
76
82
|
},
|
|
@@ -115,6 +121,24 @@
|
|
|
115
121
|
"./modes/components/runtime-mcp-add-wizard": null,
|
|
116
122
|
"./modes/controllers/runtime-mcp-command-controller": null,
|
|
117
123
|
"./slash-commands/helpers/mcp": null,
|
|
124
|
+
"./sdk": {
|
|
125
|
+
"types": "./dist/types/sdk/index.d.ts",
|
|
126
|
+
"import": "./src/sdk/index.ts"
|
|
127
|
+
},
|
|
128
|
+
"./sdk/models": null,
|
|
129
|
+
"./sdk/models.js": null,
|
|
130
|
+
"./sdk/lifecycle-session": null,
|
|
131
|
+
"./sdk/lifecycle-session.js": null,
|
|
132
|
+
"./sdk/startup-capability": null,
|
|
133
|
+
"./sdk/startup-capability.js": null,
|
|
134
|
+
"./sdk/bus": {
|
|
135
|
+
"types": "./dist/types/sdk/bus/index.d.ts",
|
|
136
|
+
"import": "./src/sdk/bus/index.ts"
|
|
137
|
+
},
|
|
138
|
+
"./sdk/bus/*": {
|
|
139
|
+
"types": "./dist/types/sdk/bus/*.d.ts",
|
|
140
|
+
"import": "./src/sdk/bus/*.ts"
|
|
141
|
+
},
|
|
118
142
|
"./*": {
|
|
119
143
|
"types": "./dist/types/*.d.ts",
|
|
120
144
|
"import": "./src/*.ts"
|
|
@@ -395,6 +419,7 @@
|
|
|
395
419
|
"types": "./dist/types/hindsight/*.d.ts",
|
|
396
420
|
"import": "./src/hindsight/*.ts"
|
|
397
421
|
},
|
|
422
|
+
"./modes/shared/agent-wire/*": null,
|
|
398
423
|
"./modes": {
|
|
399
424
|
"types": "./dist/types/modes/index.d.ts",
|
|
400
425
|
"import": "./src/modes/index.ts"
|
|
@@ -439,10 +464,6 @@
|
|
|
439
464
|
"types": "./dist/types/modes/controllers/*.d.ts",
|
|
440
465
|
"import": "./src/modes/controllers/*.ts"
|
|
441
466
|
},
|
|
442
|
-
"./modes/rpc/*": {
|
|
443
|
-
"types": "./dist/types/modes/rpc/*.d.ts",
|
|
444
|
-
"import": "./src/modes/rpc/*.ts"
|
|
445
|
-
},
|
|
446
467
|
"./modes/theme/*": {
|
|
447
468
|
"types": "./dist/types/modes/theme/*.d.ts",
|
|
448
469
|
"import": "./src/modes/theme/*.ts"
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
import * as fs from "node:fs/promises";
|
|
4
|
+
import * as os from "node:os";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
|
|
7
|
+
const packageDir = path.resolve(import.meta.dir, "..");
|
|
8
|
+
const packageName = "@gajae-code/coding-agent";
|
|
9
|
+
const aiPackageDir = path.resolve(packageDir, "../ai");
|
|
10
|
+
const bridgeClientPackageDir = path.resolve(packageDir, "../bridge-client");
|
|
11
|
+
const tuiPackageDir = path.resolve(packageDir, "../tui");
|
|
12
|
+
const manifestsDir = path.join(packageDir, "test/manifests");
|
|
13
|
+
const baselinePath = path.join(manifestsDir, "sdk-public-surface-v1.json");
|
|
14
|
+
const generatedPath = path.join(manifestsDir, "sdk-public-surface.generated.json");
|
|
15
|
+
|
|
16
|
+
type Surface = { root: string[]; sdk: string[] };
|
|
17
|
+
|
|
18
|
+
function run(command: string[], cwd: string): string {
|
|
19
|
+
const result = Bun.spawnSync(command, { cwd, stdout: "pipe", stderr: "pipe" });
|
|
20
|
+
if (result.exitCode !== 0) {
|
|
21
|
+
throw new Error(`${command.join(" ")} failed:\n${new TextDecoder().decode(result.stderr)}`);
|
|
22
|
+
}
|
|
23
|
+
return new TextDecoder().decode(result.stdout).trim();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function assertExport(module: Record<string, unknown>, name: string, subpath: string): void {
|
|
27
|
+
if (!(name in module)) throw new Error(`${subpath} does not export ${name}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function runSmoke(): Promise<Surface> {
|
|
31
|
+
const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "gjc-sdk-package-smoke-"));
|
|
32
|
+
try {
|
|
33
|
+
const aiTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], aiPackageDir);
|
|
34
|
+
const bridgeClientTarball = run(
|
|
35
|
+
["bun", "pm", "pack", "--destination", tempDir, "--quiet"],
|
|
36
|
+
bridgeClientPackageDir,
|
|
37
|
+
);
|
|
38
|
+
const tuiTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], tuiPackageDir);
|
|
39
|
+
const codingAgentTarball = run(["bun", "pm", "pack", "--destination", tempDir, "--quiet"], packageDir);
|
|
40
|
+
const aiTarballPath = path.isAbsolute(aiTarball) ? aiTarball : path.join(aiPackageDir, aiTarball);
|
|
41
|
+
const bridgeClientTarballPath = path.isAbsolute(bridgeClientTarball)
|
|
42
|
+
? bridgeClientTarball
|
|
43
|
+
: path.join(bridgeClientPackageDir, bridgeClientTarball);
|
|
44
|
+
const tuiTarballPath = path.isAbsolute(tuiTarball) ? tuiTarball : path.join(tuiPackageDir, tuiTarball);
|
|
45
|
+
const codingAgentTarballPath = path.isAbsolute(codingAgentTarball)
|
|
46
|
+
? codingAgentTarball
|
|
47
|
+
: path.join(packageDir, codingAgentTarball);
|
|
48
|
+
await fs.writeFile(
|
|
49
|
+
path.join(tempDir, "package.json"),
|
|
50
|
+
JSON.stringify(
|
|
51
|
+
{
|
|
52
|
+
name: "sdk-smoke",
|
|
53
|
+
private: true,
|
|
54
|
+
dependencies: {
|
|
55
|
+
"@gajae-code/ai": `file:${aiTarballPath}`,
|
|
56
|
+
"@gajae-code/bridge-client": `file:${bridgeClientTarballPath}`,
|
|
57
|
+
[packageName]: `file:${codingAgentTarballPath}`,
|
|
58
|
+
"@gajae-code/tui": `file:${tuiTarballPath}`,
|
|
59
|
+
},
|
|
60
|
+
overrides: {
|
|
61
|
+
"@gajae-code/ai": `file:${aiTarballPath}`,
|
|
62
|
+
"@gajae-code/bridge-client": `file:${bridgeClientTarballPath}`,
|
|
63
|
+
"@gajae-code/tui": `file:${tuiTarballPath}`,
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
null,
|
|
67
|
+
2,
|
|
68
|
+
),
|
|
69
|
+
);
|
|
70
|
+
// Install the matching packed workspace artifacts so the smoke test exercises the
|
|
71
|
+
// release dependency boundary without falling back to an older registry package.
|
|
72
|
+
run(["bun", "install", "--ignore-scripts"], tempDir);
|
|
73
|
+
const probePath = path.join(tempDir, "probe.ts");
|
|
74
|
+
await fs.writeFile(
|
|
75
|
+
probePath,
|
|
76
|
+
`import * as root from ${JSON.stringify(packageName)};\nimport * as sdk from ${JSON.stringify(`${packageName}/sdk`)};\nimport * as bus from ${JSON.stringify(`${packageName}/sdk/bus`)};\nimport * as bridgeClient from "@gajae-code/bridge-client";\nconst required = [[root, "createAgentSession", "root"], [sdk, "createAgentSession", "sdk"], [bus, "createNotificationsExtension", "sdk/bus"], [sdk, "SdkClient", "sdk"], [bridgeClient, "SdkClient", "bridge-client"]] as const;\nfor (const [module, name, subpath] of required) if (!(name in module)) throw new Error(subpath + " missing " + name);\nif (sdk.SdkClient !== bridgeClient.SdkClient) throw new Error("SdkClient class identity differs between sdk and bridge-client");\nprocess.stdout.write(JSON.stringify({ root: Object.keys(root).sort(), sdk: Object.keys(sdk).sort() }));\n`,
|
|
77
|
+
);
|
|
78
|
+
const surface = JSON.parse(run(["bun", "run", probePath], tempDir)) as Surface;
|
|
79
|
+
assertExport(Object.fromEntries(surface.root.map(name => [name, true])), "createAgentSession", "root");
|
|
80
|
+
assertExport(Object.fromEntries(surface.sdk.map(name => [name, true])), "SdkClient", "sdk");
|
|
81
|
+
return { root: [...surface.root].sort(), sdk: [...surface.sdk].sort() };
|
|
82
|
+
} finally {
|
|
83
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
async function main(): Promise<void> {
|
|
88
|
+
const surface = await runSmoke();
|
|
89
|
+
await fs.mkdir(manifestsDir, { recursive: true });
|
|
90
|
+
await fs.writeFile(generatedPath, `${JSON.stringify(surface, null, 2)}\n`);
|
|
91
|
+
const baseline = JSON.parse(await Bun.file(baselinePath).text()) as Surface;
|
|
92
|
+
const removals = (Object.keys(baseline) as Array<keyof Surface>).flatMap(area =>
|
|
93
|
+
baseline[area].filter(name => !surface[area].includes(name)).map(name => `${area}.${name}`),
|
|
94
|
+
);
|
|
95
|
+
if (removals.length > 0) throw new Error(`SDK public surface removals are not allowed:\n${removals.join("\n")}`);
|
|
96
|
+
process.stdout.write(`SDK package smoke passed (root: ${surface.root.length}, sdk: ${surface.sdk.length}).\n`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
await main();
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
import * as fs from "node:fs/promises";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import {
|
|
4
|
+
NOTIFICATIONS_SETTINGS_SHOWCASE_ENTRIES,
|
|
5
|
+
NOTIFICATIONS_SETTINGS_SHOWCASE_EXPECTED_ENTRY_COUNT,
|
|
6
|
+
NOTIFICATIONS_SETTINGS_SHOWCASE_STATE_IDS,
|
|
7
|
+
NOTIFICATIONS_SETTINGS_SHOWCASE_TARGETED_UNICODE_VARIANTS,
|
|
8
|
+
NOTIFICATIONS_SETTINGS_SHOWCASE_VIEWPORTS,
|
|
9
|
+
type NotificationsSettingsShowcaseEntry,
|
|
10
|
+
renderNotificationsSettingsShowcase,
|
|
11
|
+
} from "../test/fixtures/tui/notifications-settings-showcase";
|
|
12
|
+
|
|
13
|
+
const CANONICAL_COMMAND =
|
|
14
|
+
"bun packages/coding-agent/scripts/capture-notifications-settings-showcase.ts --output .gjc/qa/issue-2050-notifications";
|
|
15
|
+
const DETERMINISTIC_CAPTURE_TIMESTAMP = "1970-01-01T00:00:00.000Z";
|
|
16
|
+
const CAPTURE_TOOL_VERSION = "notifications-settings-showcase-live-settings-selector-v3";
|
|
17
|
+
|
|
18
|
+
interface ArtifactFile {
|
|
19
|
+
path: string;
|
|
20
|
+
sha256: string;
|
|
21
|
+
byte_length: number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
interface ManifestEntry {
|
|
25
|
+
key: string;
|
|
26
|
+
state_id: string;
|
|
27
|
+
viewport: {
|
|
28
|
+
id: string;
|
|
29
|
+
columns: number;
|
|
30
|
+
rows: number;
|
|
31
|
+
};
|
|
32
|
+
render_mode: string;
|
|
33
|
+
capture_mode: "live-settings-selector";
|
|
34
|
+
files: ArtifactFile[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
interface VisualReviewInput {
|
|
38
|
+
schema_version: 1;
|
|
39
|
+
manifest_sha256: string;
|
|
40
|
+
expected_manifest_entries: number;
|
|
41
|
+
evidence_scope: {
|
|
42
|
+
component_surface: string;
|
|
43
|
+
operations_boundary: string;
|
|
44
|
+
external_effects: string;
|
|
45
|
+
};
|
|
46
|
+
reviewer_output_file: "independent-review.json";
|
|
47
|
+
review_requirements: string[];
|
|
48
|
+
required_feature_cases: Array<{
|
|
49
|
+
id: string;
|
|
50
|
+
entry_key: string;
|
|
51
|
+
focus: string;
|
|
52
|
+
}>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function usage(): never {
|
|
56
|
+
throw new Error(`Usage: ${CANONICAL_COMMAND}`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function parseOutputPath(args: string[]): string {
|
|
60
|
+
if (args.length !== 2 || args[0] !== "--output" || !args[1]) usage();
|
|
61
|
+
return args[1];
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function json(value: unknown): string {
|
|
65
|
+
return `${JSON.stringify(value, null, 2)}\n`;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function sha256(text: string): string {
|
|
69
|
+
return new Bun.CryptoHasher("sha256").update(text).digest("hex");
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function escapeHtml(text: string): string {
|
|
73
|
+
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
type AnsiStyle = {
|
|
77
|
+
foreground?: string;
|
|
78
|
+
background?: string;
|
|
79
|
+
bold?: boolean;
|
|
80
|
+
dim?: boolean;
|
|
81
|
+
italic?: boolean;
|
|
82
|
+
underline?: boolean;
|
|
83
|
+
inverse?: boolean;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const ANSI_COLORS: Record<number, string> = {
|
|
87
|
+
30: "#000000",
|
|
88
|
+
31: "#cc0000",
|
|
89
|
+
32: "#4e9a06",
|
|
90
|
+
33: "#c4a000",
|
|
91
|
+
34: "#3465a4",
|
|
92
|
+
35: "#75507b",
|
|
93
|
+
36: "#06989a",
|
|
94
|
+
37: "#d3d7cf",
|
|
95
|
+
90: "#555753",
|
|
96
|
+
91: "#ef2929",
|
|
97
|
+
92: "#8ae234",
|
|
98
|
+
93: "#fce94f",
|
|
99
|
+
94: "#729fcf",
|
|
100
|
+
95: "#ad7fa8",
|
|
101
|
+
96: "#34e2e2",
|
|
102
|
+
97: "#eeeeec",
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
function ansi256Color(index: number): string {
|
|
106
|
+
if (index < 16) return ANSI_COLORS[index < 8 ? index + 30 : index + 82] ?? "#ffffff";
|
|
107
|
+
if (index >= 232) {
|
|
108
|
+
const value = (index - 232) * 10 + 8;
|
|
109
|
+
return `rgb(${value},${value},${value})`;
|
|
110
|
+
}
|
|
111
|
+
const value = index - 16;
|
|
112
|
+
const red = Math.floor(value / 36);
|
|
113
|
+
const green = Math.floor((value % 36) / 6);
|
|
114
|
+
const blue = value % 6;
|
|
115
|
+
const channel = (component: number) => (component === 0 ? 0 : component * 40 + 55);
|
|
116
|
+
return `rgb(${channel(red)},${channel(green)},${channel(blue)})`;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function styleAttribute(style: AnsiStyle): string {
|
|
120
|
+
const declarations: string[] = [];
|
|
121
|
+
if (style.foreground) declarations.push(`color:${style.foreground}`);
|
|
122
|
+
if (style.background) declarations.push(`background-color:${style.background}`);
|
|
123
|
+
if (style.bold) declarations.push("font-weight:700");
|
|
124
|
+
if (style.dim) declarations.push("opacity:.65");
|
|
125
|
+
if (style.italic) declarations.push("font-style:italic");
|
|
126
|
+
if (style.underline) declarations.push("text-decoration:underline");
|
|
127
|
+
if (style.inverse) declarations.push("filter:invert(1)");
|
|
128
|
+
return declarations.join(";");
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const NON_VISUAL_TERMINAL_CONTROL = /\x1b_[^\x1b\x07]*(?:\x07|\x1b\\)/g;
|
|
132
|
+
|
|
133
|
+
/** Render the SGR styles emitted by the live editor without retaining raw control codes in HTML. */
|
|
134
|
+
function ansiToHtml(text: string): string {
|
|
135
|
+
const visibleText = text.replace(NON_VISUAL_TERMINAL_CONTROL, "");
|
|
136
|
+
const sgr = /\x1b\[([0-9;]*)m/g;
|
|
137
|
+
let html = "";
|
|
138
|
+
let offset = 0;
|
|
139
|
+
let spanOpen = false;
|
|
140
|
+
let style: AnsiStyle = {};
|
|
141
|
+
const close = () => {
|
|
142
|
+
if (!spanOpen) return;
|
|
143
|
+
html += "</span>";
|
|
144
|
+
spanOpen = false;
|
|
145
|
+
};
|
|
146
|
+
const open = () => {
|
|
147
|
+
const attribute = styleAttribute(style);
|
|
148
|
+
if (!attribute) return;
|
|
149
|
+
html += `<span style="${attribute}">`;
|
|
150
|
+
spanOpen = true;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
for (const match of visibleText.matchAll(sgr)) {
|
|
154
|
+
html += escapeHtml(visibleText.slice(offset, match.index));
|
|
155
|
+
offset = (match.index ?? 0) + match[0].length;
|
|
156
|
+
close();
|
|
157
|
+
const codes = (match[1] || "0").split(";").map(Number);
|
|
158
|
+
for (let index = 0; index < codes.length; index += 1) {
|
|
159
|
+
const code = codes[index];
|
|
160
|
+
if (code === 0) style = {};
|
|
161
|
+
else if (code === 1) style.bold = true;
|
|
162
|
+
else if (code === 2) style.dim = true;
|
|
163
|
+
else if (code === 3) style.italic = true;
|
|
164
|
+
else if (code === 4) style.underline = true;
|
|
165
|
+
else if (code === 7) style.inverse = true;
|
|
166
|
+
else if (code === 22) {
|
|
167
|
+
style.bold = false;
|
|
168
|
+
style.dim = false;
|
|
169
|
+
} else if (code === 23) style.italic = false;
|
|
170
|
+
else if (code === 24) style.underline = false;
|
|
171
|
+
else if (code === 27) style.inverse = false;
|
|
172
|
+
else if (code === 39) style.foreground = undefined;
|
|
173
|
+
else if (code === 49) style.background = undefined;
|
|
174
|
+
else if (code in ANSI_COLORS) style.foreground = ANSI_COLORS[code];
|
|
175
|
+
else if (code >= 40 && code <= 47) style.background = ANSI_COLORS[code - 10];
|
|
176
|
+
else if (code >= 100 && code <= 107) style.background = ANSI_COLORS[code - 10];
|
|
177
|
+
else if (code === 38 || code === 48) {
|
|
178
|
+
const colorMode = codes[index + 1];
|
|
179
|
+
if (colorMode === 2) {
|
|
180
|
+
const red = codes[index + 2];
|
|
181
|
+
const green = codes[index + 3];
|
|
182
|
+
const blue = codes[index + 4];
|
|
183
|
+
if ([red, green, blue].every(Number.isInteger)) {
|
|
184
|
+
if (code === 38) style.foreground = `rgb(${red},${green},${blue})`;
|
|
185
|
+
else style.background = `rgb(${red},${green},${blue})`;
|
|
186
|
+
}
|
|
187
|
+
index += 4;
|
|
188
|
+
} else if (colorMode === 5 && Number.isInteger(codes[index + 2])) {
|
|
189
|
+
if (code === 38) style.foreground = ansi256Color(codes[index + 2]!);
|
|
190
|
+
else style.background = ansi256Color(codes[index + 2]!);
|
|
191
|
+
index += 2;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
open();
|
|
196
|
+
}
|
|
197
|
+
close();
|
|
198
|
+
html += escapeHtml(visibleText.slice(offset));
|
|
199
|
+
return `<!doctype html>
|
|
200
|
+
<html lang="en">
|
|
201
|
+
<head>
|
|
202
|
+
<meta charset="utf-8">
|
|
203
|
+
<meta name="color-scheme" content="dark">
|
|
204
|
+
<title>Notifications settings showcase</title>
|
|
205
|
+
<style>body{margin:0;background:#110b0b;color:#ffe7dc}pre{margin:0;padding:1em;white-space:pre-wrap;font-family:ui-monospace,monospace;line-height:1.2}</style>
|
|
206
|
+
</head>
|
|
207
|
+
<body><pre>${html}</pre></body>
|
|
208
|
+
</html>
|
|
209
|
+
`;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
const TELEGRAM_TOKEN_CANARY = /\d{6,}:[A-Za-z0-9_-]{20,}/;
|
|
213
|
+
|
|
214
|
+
function assertNoSecretCanary(artifacts: Readonly<Record<string, string>>): void {
|
|
215
|
+
for (const [name, content] of Object.entries(artifacts)) {
|
|
216
|
+
if (TELEGRAM_TOKEN_CANARY.test(content)) throw new Error(`Secret-shaped Telegram token found in ${name}`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
function validateShowcaseMatrix(entries: readonly NotificationsSettingsShowcaseEntry[]): void {
|
|
221
|
+
const expectedBaselineCount =
|
|
222
|
+
NOTIFICATIONS_SETTINGS_SHOWCASE_STATE_IDS.length * NOTIFICATIONS_SETTINGS_SHOWCASE_VIEWPORTS.length;
|
|
223
|
+
if (expectedBaselineCount !== 102) {
|
|
224
|
+
throw new Error(`Baseline matrix changed: expected 102 entries, received ${expectedBaselineCount}`);
|
|
225
|
+
}
|
|
226
|
+
if (entries.length !== NOTIFICATIONS_SETTINGS_SHOWCASE_EXPECTED_ENTRY_COUNT) {
|
|
227
|
+
throw new Error(
|
|
228
|
+
`Showcase matrix changed: expected ${NOTIFICATIONS_SETTINGS_SHOWCASE_EXPECTED_ENTRY_COUNT} entries, received ${entries.length}`,
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
const keys = new Set(entries.map(entry => entry.key));
|
|
232
|
+
if (keys.size !== entries.length) throw new Error("Showcase matrix contains duplicate entry keys");
|
|
233
|
+
|
|
234
|
+
for (const stateId of NOTIFICATIONS_SETTINGS_SHOWCASE_STATE_IDS) {
|
|
235
|
+
for (const viewport of NOTIFICATIONS_SETTINGS_SHOWCASE_VIEWPORTS) {
|
|
236
|
+
const key = `${stateId}/${viewport.id}/unicode-color`;
|
|
237
|
+
if (!keys.has(key)) throw new Error(`Showcase matrix is missing ${key}`);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
const expectedAsciiKeys = new Set([
|
|
242
|
+
"home-configured-inactive/80x24/ascii-no-color",
|
|
243
|
+
"health-warning/80x24/ascii-no-color",
|
|
244
|
+
"foreign-blocked/120x36/ascii-no-color",
|
|
245
|
+
"confirmation-remove/80x24/ascii-no-color",
|
|
246
|
+
]);
|
|
247
|
+
const actualAsciiKeys = entries.filter(entry => entry.renderMode === "ascii-no-color").map(entry => entry.key);
|
|
248
|
+
if (actualAsciiKeys.length !== expectedAsciiKeys.size || actualAsciiKeys.some(key => !expectedAsciiKeys.has(key))) {
|
|
249
|
+
throw new Error("Showcase matrix does not contain the required ASCII/no-color variants");
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
const expectedNarrowKeys = new Set(
|
|
253
|
+
NOTIFICATIONS_SETTINGS_SHOWCASE_TARGETED_UNICODE_VARIANTS.map(
|
|
254
|
+
variant => `${variant.stateId}/${variant.viewport.id}/unicode-color`,
|
|
255
|
+
),
|
|
256
|
+
);
|
|
257
|
+
const actualNarrowKeys = entries
|
|
258
|
+
.filter(entry => entry.viewport.id === "48x36" && entry.renderMode === "unicode-color")
|
|
259
|
+
.map(entry => entry.key);
|
|
260
|
+
if (
|
|
261
|
+
actualNarrowKeys.length !== expectedNarrowKeys.size ||
|
|
262
|
+
actualNarrowKeys.some(key => !expectedNarrowKeys.has(key))
|
|
263
|
+
) {
|
|
264
|
+
throw new Error("Showcase matrix does not contain the required narrow CJK and scroll variants");
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
async function writeArtifact(filePath: string, content: string, outputRoot: string): Promise<ArtifactFile> {
|
|
269
|
+
await Bun.write(filePath, content);
|
|
270
|
+
return {
|
|
271
|
+
path: path.relative(outputRoot, filePath).split(path.sep).join("/"),
|
|
272
|
+
sha256: sha256(content),
|
|
273
|
+
byte_length: Buffer.byteLength(content, "utf8"),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
async function captureEntry(entry: NotificationsSettingsShowcaseEntry, outputRoot: string): Promise<ManifestEntry> {
|
|
278
|
+
const rendered = await renderNotificationsSettingsShowcase(entry);
|
|
279
|
+
const entryDirectory = path.join(outputRoot, entry.stateId, entry.viewport.id, entry.renderMode);
|
|
280
|
+
await fs.mkdir(entryDirectory, { recursive: true });
|
|
281
|
+
|
|
282
|
+
const terminalHtml = ansiToHtml(rendered.terminalAnsiText);
|
|
283
|
+
const metadata = json({
|
|
284
|
+
schema_version: 1,
|
|
285
|
+
entry_key: entry.key,
|
|
286
|
+
state_id: entry.stateId,
|
|
287
|
+
viewport: entry.viewport,
|
|
288
|
+
render_mode: entry.renderMode,
|
|
289
|
+
capture_mode: rendered.captureMode,
|
|
290
|
+
capture_timestamp: DETERMINISTIC_CAPTURE_TIMESTAMP,
|
|
291
|
+
command_or_replay_source: CANONICAL_COMMAND,
|
|
292
|
+
fixture_source: "packages/coding-agent/test/fixtures/tui/notifications-settings-showcase.ts",
|
|
293
|
+
tool_version: CAPTURE_TOOL_VERSION,
|
|
294
|
+
terminal: {
|
|
295
|
+
columns: entry.viewport.columns,
|
|
296
|
+
rows: entry.viewport.rows,
|
|
297
|
+
font_rendering_assumptions:
|
|
298
|
+
"Embedded red-claw theme at deterministic truecolor; HTML uses a monospace terminal fallback stack.",
|
|
299
|
+
wrapping_policy:
|
|
300
|
+
"SettingsSelectorComponent renders the Notifications tab; status labels remain on one line and status guidance wraps with ANSI-aware terminal-cell width handling.",
|
|
301
|
+
ansi_control_semantics:
|
|
302
|
+
"terminal-ansi.txt preserves emitted SGR sequences; terminal.txt and ascii-no-color captures strip them.",
|
|
303
|
+
},
|
|
304
|
+
selector_render: {
|
|
305
|
+
component: "SettingsSelectorComponent",
|
|
306
|
+
active_tab: rendered.selectorTab,
|
|
307
|
+
notifications_editor: "NotificationsSettingsEditorComponent",
|
|
308
|
+
operations: "deterministic in-memory NotificationsEditorOperations adapter; live components only",
|
|
309
|
+
fixed_clock_timestamp: rendered.fixedClockTimestamp,
|
|
310
|
+
navigation: rendered.navigation,
|
|
311
|
+
state: rendered.state,
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
assertNoSecretCanary({
|
|
315
|
+
"terminal.txt": rendered.terminalText,
|
|
316
|
+
"terminal-ansi.txt": rendered.terminalAnsiText,
|
|
317
|
+
"terminal.html": terminalHtml,
|
|
318
|
+
"metadata.json": metadata,
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
const files = await Promise.all([
|
|
322
|
+
writeArtifact(path.join(entryDirectory, "terminal.txt"), rendered.terminalText, outputRoot),
|
|
323
|
+
writeArtifact(path.join(entryDirectory, "terminal-ansi.txt"), rendered.terminalAnsiText, outputRoot),
|
|
324
|
+
writeArtifact(path.join(entryDirectory, "terminal.html"), terminalHtml, outputRoot),
|
|
325
|
+
writeArtifact(path.join(entryDirectory, "metadata.json"), metadata, outputRoot),
|
|
326
|
+
]);
|
|
327
|
+
|
|
328
|
+
return {
|
|
329
|
+
key: entry.key,
|
|
330
|
+
state_id: entry.stateId,
|
|
331
|
+
viewport: entry.viewport,
|
|
332
|
+
render_mode: entry.renderMode,
|
|
333
|
+
capture_mode: rendered.captureMode,
|
|
334
|
+
files,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function visualReviewInput(manifestSha256: string): VisualReviewInput {
|
|
339
|
+
return {
|
|
340
|
+
schema_version: 1,
|
|
341
|
+
manifest_sha256: manifestSha256,
|
|
342
|
+
expected_manifest_entries: NOTIFICATIONS_SETTINGS_SHOWCASE_EXPECTED_ENTRY_COUNT,
|
|
343
|
+
evidence_scope: {
|
|
344
|
+
component_surface:
|
|
345
|
+
"Live SettingsSelectorComponent and NotificationsSettingsEditorComponent rendering and input routing.",
|
|
346
|
+
operations_boundary:
|
|
347
|
+
"Deterministic in-memory NotificationsEditorOperations adapter with fixed clock and no fixture filesystem I/O.",
|
|
348
|
+
external_effects: "No network, daemon, settings-file, or provider operation is invoked by this capture.",
|
|
349
|
+
},
|
|
350
|
+
reviewer_output_file: "independent-review.json",
|
|
351
|
+
review_requirements: [
|
|
352
|
+
"Inspect every manifest entry at its recorded viewport and render mode.",
|
|
353
|
+
"Confirm CJK wrapping, action-list position, and selected-row visibility in both 48x36 entries.",
|
|
354
|
+
"Confirm blocked restore/retain remains visible without resolving it in the rendered evidence.",
|
|
355
|
+
"Confirm no terminal, HTML, or metadata artifact contains a secret-shaped Telegram token.",
|
|
356
|
+
],
|
|
357
|
+
required_feature_cases: [
|
|
358
|
+
{
|
|
359
|
+
id: "chat-entry",
|
|
360
|
+
entry_key: "setup-chat-entry/80x24/unicode-color",
|
|
361
|
+
focus: "Optional private-chat entry is focused before masked token entry.",
|
|
362
|
+
},
|
|
363
|
+
{
|
|
364
|
+
id: "preferences",
|
|
365
|
+
entry_key: "preferences/80x24/unicode-color",
|
|
366
|
+
focus: "Safe scalar preferences remain an unsaved draft until explicit save.",
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
id: "blocked-restore-retain",
|
|
370
|
+
entry_key: "blocked-restore-retain/120x36/unicode-color",
|
|
371
|
+
focus: "Both explicit CAS restore and retain-inactive choices remain visible.",
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
id: "no-health-load",
|
|
375
|
+
entry_key: "no-health-load/80x24/unicode-color",
|
|
376
|
+
focus: "Initial status/health failure is rendered with recovery controls still available.",
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
id: "narrow-cjk",
|
|
380
|
+
entry_key: "narrow-cjk/48x36/unicode-color",
|
|
381
|
+
focus: "Korean, Japanese, and Chinese guidance wraps without clipping wide characters.",
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
id: "narrow-scroll",
|
|
385
|
+
entry_key: "narrow-scroll/48x36/unicode-color",
|
|
386
|
+
focus: "The final home action and 11/11 list position remain visible in a narrow viewport.",
|
|
387
|
+
},
|
|
388
|
+
],
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
async function main(): Promise<void> {
|
|
393
|
+
const outputRoot = path.resolve(parseOutputPath(process.argv.slice(2)));
|
|
394
|
+
validateShowcaseMatrix(NOTIFICATIONS_SETTINGS_SHOWCASE_ENTRIES);
|
|
395
|
+
await fs.mkdir(outputRoot, { recursive: true });
|
|
396
|
+
|
|
397
|
+
const entries: ManifestEntry[] = [];
|
|
398
|
+
for (const entry of NOTIFICATIONS_SETTINGS_SHOWCASE_ENTRIES) {
|
|
399
|
+
entries.push(await captureEntry(entry, outputRoot));
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
const manifest = json({
|
|
403
|
+
schema_version: 1,
|
|
404
|
+
capture_tool: CAPTURE_TOOL_VERSION,
|
|
405
|
+
capture_mode: "live-settings-selector",
|
|
406
|
+
command: CANONICAL_COMMAND,
|
|
407
|
+
expected_entry_count: NOTIFICATIONS_SETTINGS_SHOWCASE_EXPECTED_ENTRY_COUNT,
|
|
408
|
+
entry_count: entries.length,
|
|
409
|
+
matrix: {
|
|
410
|
+
canonical_state_ids: NOTIFICATIONS_SETTINGS_SHOWCASE_STATE_IDS,
|
|
411
|
+
viewports: NOTIFICATIONS_SETTINGS_SHOWCASE_VIEWPORTS,
|
|
412
|
+
baseline_render_mode: "unicode-color",
|
|
413
|
+
ascii_no_color_variant_count: 4,
|
|
414
|
+
targeted_unicode_variants: NOTIFICATIONS_SETTINGS_SHOWCASE_TARGETED_UNICODE_VARIANTS,
|
|
415
|
+
},
|
|
416
|
+
evidence_scope: {
|
|
417
|
+
component_surface:
|
|
418
|
+
"Live SettingsSelectorComponent and NotificationsSettingsEditorComponent rendering and input routing.",
|
|
419
|
+
operations_boundary:
|
|
420
|
+
"Deterministic in-memory NotificationsEditorOperations adapter with fixed clock and no fixture filesystem I/O.",
|
|
421
|
+
external_effects: "No network, daemon, settings-file, or provider operation is invoked by this capture.",
|
|
422
|
+
},
|
|
423
|
+
review_input_file: "visual-review-input.json",
|
|
424
|
+
entries,
|
|
425
|
+
});
|
|
426
|
+
const manifestSha256 = sha256(manifest);
|
|
427
|
+
await Bun.write(path.join(outputRoot, "manifest.json"), manifest);
|
|
428
|
+
await Bun.write(path.join(outputRoot, "visual-review-input.json"), json(visualReviewInput(manifestSha256)));
|
|
429
|
+
|
|
430
|
+
process.stdout.write(
|
|
431
|
+
`Captured ${entries.length} deterministic Notifications settings-selector showcase entries to ${outputRoot}\nmanifest.json sha256: ${manifestSha256}\nreview input: visual-review-input.json\n`,
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
await main();
|
package/scripts/compile-args.ts
CHANGED
|
@@ -26,7 +26,8 @@ export const releaseEntrypoints = [
|
|
|
26
26
|
"./packages/coding-agent/src/tools/browser/tab-worker-entry.ts",
|
|
27
27
|
"./packages/coding-agent/src/eval/js/worker-entry.ts",
|
|
28
28
|
"./packages/natives/native/index.js",
|
|
29
|
-
"./packages/coding-agent/src/
|
|
29
|
+
"./packages/coding-agent/src/sdk/bus/telegram-daemon-cli.ts",
|
|
30
|
+
"./packages/coding-agent/src/sdk/bus/chat-daemon-cli.ts",
|
|
30
31
|
// NOTE: models.json must NOT be listed here — `bun build --compile` does not
|
|
31
32
|
// emit `.json` extra entrypoints into the bunfs. It is embedded via the
|
|
32
33
|
// `with { type: "file" }` import in packages/ai/src/models.ts instead.
|
|
@@ -41,7 +42,8 @@ export const devEntrypoints = [
|
|
|
41
42
|
"../stats/src/sync-worker.ts",
|
|
42
43
|
"./src/tools/browser/tab-worker-entry.ts",
|
|
43
44
|
"./src/eval/js/worker-entry.ts",
|
|
44
|
-
"./src/
|
|
45
|
+
"./src/sdk/bus/telegram-daemon-cli.ts",
|
|
46
|
+
"./src/sdk/bus/chat-daemon-cli.ts",
|
|
45
47
|
];
|
|
46
48
|
|
|
47
49
|
export function buildReleaseCompileArgs(target: string, outfile: string): string[] {
|