Skip to content

All updates of master branch until 2026-04-18#409

Merged
gnh1201 merged 66 commits intodevfrom
master
Apr 18, 2026
Merged

All updates of master branch until 2026-04-18#409
gnh1201 merged 66 commits intodevfrom
master

Conversation

@gnh1201
Copy link
Copy Markdown
Owner

@gnh1201 gnh1201 commented Apr 18, 2026

All updates of master branch until 2026-04-18

Summary by Sourcery

Update documentation, metadata, and sponsorship configuration, and add an agent architecture guide for WelsonJS.

Documentation:

  • Revise README with new badges, MCP feature mention, clearer installation methods (including PowerShell bootstrap), updated partner acknowledgements, offline copy instructions, renamed license section, subproject links, and a legal disclaimer.
  • Add AGENTS.md to document the WelsonJS agent architecture, responsibilities, interaction model, and testing approach in depth.
  • Extend SECURITY.MD with a link to the paid mentorship program for Korean users.

Chores:

  • Update funding configuration to add Liberapay support and replace the custom sponsorship URL.
  • Adjust Code of Conduct contact email domain for reporting incidents.
  • Add a .well-known/cats.txt metadata file to the repository.

Update README links and sponsor image URLs
Update special channels section in README
Improve the post-install script
added more download URLs
Update DownloadUrls.psd1
Add an architecture, and fixed a comment on the telemetry section.
Add a telemetry to WelsonJS Launcher
Added the assembly loader with Azure Blob Storage
Add support *.dll.gz file in Assembly Loader
Separate HttpClient instances for raw and compressed HTTP transfer modes
Introduce the Catswords.Phantomizer to load DLL files via network
Edit README.md (Catswords.Phantomizer)
Update README.md (Catswords.Phantomizer)
Update README.md (Catswords.Phantomizer)
Inspired by the i83 cats.txt draft format, integrated within the IETF cats.txt structure.
Update the integrity check (Catswords.Phantomizer)
Fix some bugs (Catswords.Phantomizer)
Change the project name to WelsonJS.Toolkit to WelsonJS.Augmented
Add the utm_source parameter to the all of external links (README.md)
Add Tenstorrent Korea OSS Developer Program (Planned for 2026)
Add methods to ensure TLS security protocols are enabled
Add Catswords.TlsReport TLS 1.2 offline inspector tool
Add support Outlook classic (Microsoft Office)
Microsoft Outlook + ChatGPT integration with real-world case
gnh1201 and others added 22 commits February 14, 2026 00:32
Updated sections on offline distribution and license, added disclaimer.
Added section for requesting an offline copy of the project.
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](lodash/lodash@4.17.23...4.18.1)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.18.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
….18.1

Bump lodash from 4.17.23 to 4.18.1
All updates until 2026-04-12
Updated README to include new links and features.
---
updated-dependencies:
- dependency-name: log4net
  dependency-version: 3.3.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
…ted/WelsonJS.Launcher/log4net-3.3.0

Bump log4net from 3.2.0 to 3.3.0
All updates until 2026-04-18
Add WelsonJS One-Click Installer script #404
Rename install.ps1 to bootstrap.ps1 and update URLs
Add the one-click bootstrap
Clarified the PowerShell usage instruction in README.
Added PowerShell command for bootstrapping WelsonJS.
@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai Bot commented Apr 18, 2026

Reviewer's Guide

Refreshes project documentation and onboarding paths, introduces an agent architecture guide, updates funding and contact information, and aligns ancillary docs and metadata with current branding and distribution methods.

Sequence diagram for WelsonJS launch and agent initialization

sequenceDiagram
    participant User
    participant Launcher as WelsonJS_Launcher
    participant JSRuntime as JavaScript_Runtime_Agent
    participant Interop as Interop_Binding_Layer
    participant Phantomizer as Catswords_Phantomizer
    participant Toolkit as WelsonJS_Toolkit

    User->>Launcher: Start_WelsonJS_application()
    Launcher->>Launcher: loadConfiguration()
    Launcher->>Toolkit: initializeEnvironment()
    Toolkit-->>Launcher: environmentReady

    Launcher->>Phantomizer: loadAssembly(WelsonJS_Toolkit)
    Phantomizer-->>Launcher: assemblyLoaded

    Launcher->>JSRuntime: initialize()
    JSRuntime->>JSRuntime: loadPolyfills()
    JSRuntime->>JSRuntime: initializeModuleSystem()

    Launcher->>JSRuntime: runMainScript(entryScript)
    JSRuntime->>Interop: require(nativeModule)
    Interop->>Phantomizer: loadAssembly(nativeModule)
    Phantomizer-->>Interop: nativeModuleInstance
    Interop-->>JSRuntime: nativeModuleProxy

    JSRuntime->>nativeModuleProxy: invokeBoundApi(parameters)
    nativeModuleProxy-->>JSRuntime: result

    JSRuntime-->>Launcher: scriptCompleted
    Launcher-->>User: exitWithStatus(status)
Loading

Class diagram for WelsonJS agents and responsibilities

classDiagram
    class JavaScript_Runtime_Agent {
        +loadPolyfills()
        +initializeModuleSystem()
        +require(moduleId)
        +executeScript(entryPath)
        +handleError(error)
    }

    class WelsonJS_Launcher {
        +loadConfiguration()
        +initializeEnvironment()
        +loadToolkitModules()
        +runMainScript()
        +startServiceMode()
    }

    class Interop_Binding_Layer {
        +invokeNative(agentName, methodName, parameters)
        +marshalToNative(value)
        +marshalToJS(value)
        +handleNativeException(exception)
        +detectCapabilities()
    }

    class Security_Policy_Agent {
        +verifyModuleIntegrity(path)
        +isModuleAllowed(name)
        +restrictFileSystem(path)
        +restrictRegistry(path)
        +logSecurityEvent(event)
    }

    class Fallback_Compatibility_Agent {
        +isAgentAvailable(name)
        +provideJSFallback(name)
        +logMissingDependency(name)
        +enterReducedFunctionalityMode()
    }

    class Catswords_Phantomizer {
        +loadAssembly(path)
        +loadCompressedAssembly(path)
        +verifyAssemblySignature(path)
        +getCachedAssembly(name)
        +unloadAssembly(name)
    }

    class WelsonJS_Esent {
        +createDatabase(path)
        +openDatabase(path)
        +openTable(name)
        +beginTransaction()
        +commitTransaction()
        +rollbackTransaction()
        +disposeResources()
    }

    class WelsonJS_Cryptography {
        +encrypt(algorithm, key, data)
        +decrypt(algorithm, key, data)
        +computeHash(algorithm, data)
        +generateRandomBytes(length)
        +validateTestVectors()
    }

    class WelsonJS_Service {
        +installService(serviceName)
        +uninstallService(serviceName)
        +onStart()
        +onStop()
        +runScriptAsService(scriptPath)
    }

    class WelsonJS_Toolkit {
        +readFile(path)
        +writeFile(path, content)
        +log(message, level)
        +getEnvironmentVariable(name)
        +createComObject(progId)
    }

    class Virtual_HID_Agent {
        +findWindow(title)
        +sendClick(x, y)
        +sendKeys(sequence)
        +sendEnterKey()
        +showAlert(message)
        +showConfirm(message)
        +showPrompt(message)
    }

    class Network_HTTP_ICMP_Agent {
        +httpGet(url, options)
        +httpPost(url, body, options)
        +detectCharset(response)
        +detectSsl(url)
        +sendIcmpPing(host)
    }

    class Chromium_Control_Agent {
        +runBrowser(profile)
        +createProfile(name)
        +navigate(url)
        +getActivePages()
        +findPageByTitle(title)
        +setTextboxValue(selector, value)
        +sendClick(selector)
        +sendKeys(selector, sequence)
        +autoScrollUntilEnd(selector)
    }

    class GRPC_Service_Agent {
        +runServer(port)
        +receiveCommand(command)
        +shutdownServer()
    }

    class GUI_WebView_Agent {
        +checkEnvironment()
        +createWindow(title)
        +navigate(url)
        +closeWindow()
    }

    WelsonJS_Launcher --> JavaScript_Runtime_Agent : bootstraps
    WelsonJS_Launcher --> Catswords_Phantomizer : loads_assemblies
    WelsonJS_Launcher --> WelsonJS_Toolkit : initializes

    JavaScript_Runtime_Agent --> Interop_Binding_Layer : uses
    Interop_Binding_Layer --> Catswords_Phantomizer : resolves
    Interop_Binding_Layer --> WelsonJS_Esent : database_calls
    Interop_Binding_Layer --> WelsonJS_Cryptography : crypto_calls
    Interop_Binding_Layer --> WelsonJS_Service : service_calls
    Interop_Binding_Layer --> WelsonJS_Toolkit : utility_calls
    Interop_Binding_Layer --> Virtual_HID_Agent : input_calls
    Interop_Binding_Layer --> Network_HTTP_ICMP_Agent : network_calls
    Interop_Binding_Layer --> Chromium_Control_Agent : browser_control
    Interop_Binding_Layer --> GRPC_Service_Agent : grpc_calls
    Interop_Binding_Layer --> GUI_WebView_Agent : gui_calls

    Security_Policy_Agent --> Interop_Binding_Layer : enforces
    Security_Policy_Agent --> WelsonJS_Toolkit : validates_access

    Fallback_Compatibility_Agent --> JavaScript_Runtime_Agent : provides_polyfills
Loading

File-Level Changes

Change Details Files
Update README badges, onboarding instructions, feature list, acknowledgements, distribution methods, and legal sections to reflect current ecosystem and tooling.
  • Add G2, DeepWiki, and MCP-related badges alongside existing community and promotion links.
  • Reorder and reword getting-started bullets to emphasize Azure Marketplace VM, launcher download, and PowerShell bootstrap script.
  • Clarify Office automation capabilities by explicitly listing supported Microsoft Office apps.
  • Add MCP feature to the list of WelsonJS capabilities and note PowerShell-based distribution in the release methods section.
  • Replace individual sponsor logo bullets with a consolidated acknowledgements line including additional partners like AppSignal.
  • Revise offline distribution instructions to direct users to contact maintainers via Discord.
  • Rename the license section header to clarify open-source licensing, add a Subprojects section, and append a disclaimer limiting liability for misuse.
README.md
Adjust funding configuration to point to updated donation platforms.
  • Add Liberapay handle for project support.
  • Update custom funding URL to a new spin-spin.com link.
.github/FUNDING.yml
Update enforcement contact in the code of conduct to the current abuse reporting email domain.
  • Change the abuse reporting email address from catswords.net to catswords.re.kr in the enforcement section.
CODE_OF_CONDUCT.md
Align security/support documentation with README by mentioning the Korean mentorship program.
  • Add Inflearn-based paid mentorship program link to the special channels section for Korean users.
SECURITY.MD
Introduce detailed agent architecture and test-plan documentation for WelsonJS.
  • Document the split between JavaScript runtime and native/managed module agents, including design principles and interaction model.
  • Describe responsibilities of key Toolkit agents such as Phantomizer, Esent, Cryptography, Launcher, Service, and Toolkit utility modules.
  • Outline interop, security, and fallback agents along with their responsibilities and constraints.
  • Add a comprehensive test structure section explaining JSON-based test profiles, coverage areas, schema, and how testloader.js runs them.
AGENTS.md
Add placeholder or configuration-only updates for launcher and package management artifacts.
  • Touch or minimally adjust WelsonJS.Launcher project and configuration files without visible behavioral changes in the diff excerpt.
  • Update or regenerate package-lock.json to align with current dependencies or tooling.
WelsonJS.Augmented/WelsonJS.Launcher/WelsonJS.Launcher.csproj
WelsonJS.Augmented/WelsonJS.Launcher/app.config
WelsonJS.Augmented/WelsonJS.Launcher/packages.config
package-lock.json
Add well-known metadata endpoint for cats-related configuration or branding.
  • Introduce an empty or placeholder .well-known/cats.txt file for future use or external tooling discovery.
.well-known/cats.txt

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 18, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: fa499b23-69cd-4a7c-9602-16b52b858ec3

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch master

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@qodo-code-review
Copy link
Copy Markdown
Contributor

Review Summary by Qodo

Add agent architecture documentation and update project metadata

✨ Enhancement 📝 Documentation

Grey Divider

Walkthroughs

Description
• Add comprehensive agent architecture documentation (AGENTS.md)
• Update funding, contact, and community links across multiple files
• Upgrade log4net dependency from 3.2.0 to 3.3.0 with binding redirect
• Add cats.txt well-known file with WelsonJS metadata and feline registry
• Enhance README with new badges, installation methods, and feature updates
Diagram
flowchart LR
  A["Documentation Updates"] --> B["AGENTS.md<br/>Agent Architecture"]
  A --> C["cats.txt<br/>Well-known Metadata"]
  D["Configuration Updates"] --> E["Funding & Contact Info"]
  D --> F["log4net 3.3.0<br/>Dependency Upgrade"]
  G["README Enhancements"] --> H["New Badges & Links"]
  G --> I["Installation Methods"]
  G --> J["Feature Highlights"]
Loading

Grey Divider

File Changes

1. AGENTS.md 📝 Documentation +450/-0

Comprehensive WelsonJS agent architecture documentation

AGENTS.md


2. .well-known/cats.txt 📝 Documentation +57/-0

Add well-known cats.txt metadata file

.well-known/cats.txt


3. README.md 📝 Documentation +20/-11

Update badges, links, and installation methods

README.md


View more (6)
4. CODE_OF_CONDUCT.md ⚙️ Configuration changes +2/-2

Update abuse reporting email address

CODE_OF_CONDUCT.md


5. SECURITY.MD 📝 Documentation +1/-0

Add mentorship program link and update contact info

SECURITY.MD


6. .github/FUNDING.yml ⚙️ Configuration changes +2/-1

Update funding links and add Liberapay

.github/FUNDING.yml


7. WelsonJS.Augmented/WelsonJS.Launcher/WelsonJS.Launcher.csproj Dependencies +3/-2

Upgrade log4net from 3.2.0 to 3.3.0

WelsonJS.Augmented/WelsonJS.Launcher/WelsonJS.Launcher.csproj


8. WelsonJS.Augmented/WelsonJS.Launcher/app.config ⚙️ Configuration changes +36/-28

Add log4net binding redirect and format XML

WelsonJS.Augmented/WelsonJS.Launcher/app.config


9. WelsonJS.Augmented/WelsonJS.Launcher/packages.config Dependencies +1/-1

Update log4net package version to 3.3.0

WelsonJS.Augmented/WelsonJS.Launcher/packages.config


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown
Contributor

qodo-code-review Bot commented Apr 18, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (1) 📎 Requirement gaps (0)

Grey Divider


Action required

1. Launcher boot depends on log4net 📘 Rule violation ☼ Reliability
Description
The Launcher bootstrap path uses the third-party log4net library, which violates the requirement
that initialization use only .NET BCL dependencies before loading additional modules. If log4net
is missing/mis-bound, startup can fail before any fallback/toolkit loading occurs.
Code

WelsonJS.Augmented/WelsonJS.Launcher/WelsonJS.Launcher.csproj[R77-80]

+    <Reference Include="log4net, Version=3.3.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a">
+      <HintPath>..\packages\log4net.3.3.0\lib\net462\log4net.dll</HintPath>
+      <Private>True</Private>
    </Reference>
Evidence
PR Compliance ID 11 requires the launcher bootstrap initialization path to rely only on .NET BCL
dependencies before loading additional modules. This PR updates the Launcher to reference/package
log4net (non-BCL) and adds a binding redirect, and the launcher code initializes log4net in
Program static construction before InitializeAssemblyLoader() runs.

AGENTS.md
WelsonJS.Augmented/WelsonJS.Launcher/WelsonJS.Launcher.csproj[77-80]
WelsonJS.Augmented/WelsonJS.Launcher/app.config[35-41]
WelsonJS.Augmented/WelsonJS.Launcher/packages.config[1-3]
WelsonJS.Augmented/WelsonJS.Launcher/Program.cs[32-47]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
The Launcher initializes `log4net` during bootstrapping, which introduces a non-.NET-BCL dependency before the launcher’s module/toolkit loading phase.

## Issue Context
Per compliance, the earliest launcher initialization path must use only .NET BCL dependencies. Currently, `Program`'s static initialization calls `LoggingBootstrap.Init(...)` and `LogManager.GetLogger(...)` before `InitializeAssemblyLoader()`.

## Fix Focus Areas
- WelsonJS.Augmented/WelsonJS.Launcher/Program.cs[32-47]
- WelsonJS.Augmented/WelsonJS.Launcher/LoggingBootstrap.cs[1-47]
- WelsonJS.Augmented/WelsonJS.Launcher/WelsonJS.Launcher.csproj[77-80]
- WelsonJS.Augmented/WelsonJS.Launcher/app.config[35-41]
- WelsonJS.Augmented/WelsonJS.Launcher/packages.config[1-3]

## Implementation direction
- Replace early-boot logging with BCL-only mechanisms (e.g., `System.Diagnostics.Trace`, `EventLog`, or minimal file logging via `System.IO`) until after the toolkit/module loading boundary.
- If `log4net` is still desired, initialize/configure it only after the bootstrap phase completes, and ensure failures fall back to BCL logging rather than aborting startup.
- If `log4net` is not strictly required, remove the reference/package and the bindingRedirect entirely.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Remote script pipe-exec 🐞 Bug ⛨ Security
Description
README.md now instructs users to execute a remotely hosted PowerShell script via irm ... | iex,
which runs network-fetched content directly in the caller’s session without any pinned
hash/signature verification. If the hosting endpoint is compromised or content is modified, users
following the official docs can be tricked into immediate arbitrary code execution.
Code

README.md[27]

+* :shell: In PowerShell: `irm https://catswords.blob.core.windows.net/welsonjs/bootstrap.ps1 | iex`
Evidence
The README introduces the irm https://.../bootstrap.ps1 | iex pattern (twice), which downloads a
script and executes it inline. The repository’s own bootstrap.ps1 also documents the same
pipe-to-iex usage, showing this is intended guidance rather than an accidental snippet; however,
neither location provides an integrity pin (hash/signature) or a safer download-then-review
execution flow.

README.md[23-31]
README.md[125-131]
bootstrap.ps1[6-10]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`README.md` instructs users to run `irm https://…/bootstrap.ps1 | iex`, which executes remote content directly in the current PowerShell session without integrity verification.

### Issue Context
This is a supply-chain/RCE risk for any user who follows the project’s official installation instructions.

### Fix Focus Areas
- README.md[23-31]
- README.md[125-131]

### What to change
- Replace `irm … | iex` with a **download-to-file** flow, e.g. `iwr/irm -OutFile bootstrap.ps1`, then instruct users to **inspect** and run `./bootstrap.ps1`.
- Add at least one integrity mechanism:
 - Preferably provide a **pinned SHA-256** (per release) and document `Get-FileHash` verification, and/or
 - Use **Authenticode signing** and document `Get-AuthenticodeSignature` verification.
- If you must keep a one-liner, add a prominent warning and/or use a commit/release-pinned URL (not a mutable blob path), plus verification steps.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

ⓘ The new review experience is currently in Beta. Learn more

Grey Divider

Qodo Logo

@gnh1201 gnh1201 merged commit 3dcfdcb into dev Apr 18, 2026
7 of 10 checks passed
@sonarqubecloud
Copy link
Copy Markdown

Copy link
Copy Markdown
Contributor

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 2 issues, and left some high level feedback:

  • In README.md, the section header ## Offine copy has a typo and the offline distribution instructions now differ from SECURITY.MD (form link vs. Discord contact); consider fixing the spelling and aligning both documents on a single, consistent process.
  • In AGENTS.md under the Subprojects section, there is a typo in OpenClaw compatible the skill definition for a bulit-in JSRT — this should likely be built-in JSRT (and you may want to tweak the surrounding phrasing for clarity while you are there).
  • The new .well-known/cats.txt file is added but appears to be empty in this diff; if it is required by a specification or integration, consider adding the expected contents or a short comment, otherwise remove it until it’s needed to avoid shipping unused placeholders.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In README.md, the section header `## Offine copy` has a typo and the offline distribution instructions now differ from SECURITY.MD (form link vs. Discord contact); consider fixing the spelling and aligning both documents on a single, consistent process.
- In AGENTS.md under the Subprojects section, there is a typo in `OpenClaw compatible the skill definition for a bulit-in JSRT` — this should likely be `built-in JSRT` (and you may want to tweak the surrounding phrasing for clarity while you are there).
- The new `.well-known/cats.txt` file is added but appears to be empty in this diff; if it is required by a specification or integration, consider adding the expected contents or a short comment, otherwise remove it until it’s needed to avoid shipping unused placeholders.

## Individual Comments

### Comment 1
<location path="README.md" line_range="177-178" />
<code_context>

-## Offline Distribution
-You may [request offline distribution](https://forms.gle/4WCnJmnFNDzubUmk7?utm_source=welsonjs) if you are in a restricted environment, such as one without internet access or with specific security requirements.
+## Offine copy
+If you require an offline copy of this project, please contact an appropriate project maintainer via Discord to arrange the request.

</code_context>
<issue_to_address>
**issue (typo):** Correct the heading typo from "Offine" to "Offline".

Change the heading text to "Offline copy".

```suggestion
## Offline copy
If you require an offline copy of this project, please contact an appropriate project maintainer via Discord to arrange the request.
```
</issue_to_address>

### Comment 2
<location path="README.md" line_range="189" />
<code_context>
+
+## Subprojects
+* [catswords-jsrt-rs](https://github.com/gnh1201/catswords-jsrt-rs): Minimal ChakraCore (JsRT) bindings for Rust.
+* [jsrt-claw](https://github.com/gnh1201/jsrt-claw): OpenClaw compatible the skill definition for a bulit-in JSRT (JScript 5.x)
+
+## Disclaimer
</code_context>
<issue_to_address>
**issue (typo):** Fix the typo "bulit-in" and clarify the phrasing of the jsrt-claw description.

For example: `OpenClaw-compatible skill definition for the built-in JSRT (JScript 5.x).`

```suggestion
* [jsrt-claw](https://github.com/gnh1201/jsrt-claw): OpenClaw-compatible skill definition for the built-in JSRT (JScript 5.x).
```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Comment thread README.md
Comment on lines +177 to +178
## Offine copy
If you require an offline copy of this project, please contact an appropriate project maintainer via Discord to arrange the request.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (typo): Correct the heading typo from "Offine" to "Offline".

Change the heading text to "Offline copy".

Suggested change
## Offine copy
If you require an offline copy of this project, please contact an appropriate project maintainer via Discord to arrange the request.
## Offline copy
If you require an offline copy of this project, please contact an appropriate project maintainer via Discord to arrange the request.

Comment thread README.md

## Subprojects
* [catswords-jsrt-rs](https://github.com/gnh1201/catswords-jsrt-rs): Minimal ChakraCore (JsRT) bindings for Rust.
* [jsrt-claw](https://github.com/gnh1201/jsrt-claw): OpenClaw compatible the skill definition for a bulit-in JSRT (JScript 5.x)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (typo): Fix the typo "bulit-in" and clarify the phrasing of the jsrt-claw description.

For example: OpenClaw-compatible skill definition for the built-in JSRT (JScript 5.x).

Suggested change
* [jsrt-claw](https://github.com/gnh1201/jsrt-claw): OpenClaw compatible the skill definition for a bulit-in JSRT (JScript 5.x)
* [jsrt-claw](https://github.com/gnh1201/jsrt-claw): OpenClaw-compatible skill definition for the built-in JSRT (JScript 5.x).

Comment on lines +77 to 80
<Reference Include="log4net, Version=3.3.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a">
<HintPath>..\packages\log4net.3.3.0\lib\net462\log4net.dll</HintPath>
<Private>True</Private>
</Reference>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. Launcher boot depends on log4net 📘 Rule violation ☼ Reliability

The Launcher bootstrap path uses the third-party log4net library, which violates the requirement
that initialization use only .NET BCL dependencies before loading additional modules. If log4net
is missing/mis-bound, startup can fail before any fallback/toolkit loading occurs.
Agent Prompt
## Issue description
The Launcher initializes `log4net` during bootstrapping, which introduces a non-.NET-BCL dependency before the launcher’s module/toolkit loading phase.

## Issue Context
Per compliance, the earliest launcher initialization path must use only .NET BCL dependencies. Currently, `Program`'s static initialization calls `LoggingBootstrap.Init(...)` and `LogManager.GetLogger(...)` before `InitializeAssemblyLoader()`.

## Fix Focus Areas
- WelsonJS.Augmented/WelsonJS.Launcher/Program.cs[32-47]
- WelsonJS.Augmented/WelsonJS.Launcher/LoggingBootstrap.cs[1-47]
- WelsonJS.Augmented/WelsonJS.Launcher/WelsonJS.Launcher.csproj[77-80]
- WelsonJS.Augmented/WelsonJS.Launcher/app.config[35-41]
- WelsonJS.Augmented/WelsonJS.Launcher/packages.config[1-3]

## Implementation direction
- Replace early-boot logging with BCL-only mechanisms (e.g., `System.Diagnostics.Trace`, `EventLog`, or minimal file logging via `System.IO`) until after the toolkit/module loading boundary.
- If `log4net` is still desired, initialize/configure it only after the bootstrap phase completes, and ensure failures fall back to BCL logging rather than aborting startup.
- If `log4net` is not strictly required, remove the reference/package and the bindingRedirect entirely.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Comment thread README.md
* :rocket: [Launch the WelsonJS environment on Microsoft Azure (azuremarketplace.microsoft.com)](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/catswords.catswords-welsonjs-feb2025-02?tab=Overview)
* :rocket: [Launch the WelsonJS pre-configured VM from Microsoft Azure Marketplace](https://azuremarketplace.microsoft.com/en-us/marketplace/apps/catswords.catswords-welsonjs-feb2025-02?tab=Overview)
* :kissing_cat: [Download the WelsonJS Launcher](https://catswords.blob.core.windows.net/welsonjs/welsonjs_launcher_latest.zip)
* :shell: In PowerShell: `irm https://catswords.blob.core.windows.net/welsonjs/bootstrap.ps1 | iex`
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

2. Remote script pipe-exec 🐞 Bug ⛨ Security

README.md now instructs users to execute a remotely hosted PowerShell script via irm ... | iex,
which runs network-fetched content directly in the caller’s session without any pinned
hash/signature verification. If the hosting endpoint is compromised or content is modified, users
following the official docs can be tricked into immediate arbitrary code execution.
Agent Prompt
### Issue description
`README.md` instructs users to run `irm https://…/bootstrap.ps1 | iex`, which executes remote content directly in the current PowerShell session without integrity verification.

### Issue Context
This is a supply-chain/RCE risk for any user who follows the project’s official installation instructions.

### Fix Focus Areas
- README.md[23-31]
- README.md[125-131]

### What to change
- Replace `irm … | iex` with a **download-to-file** flow, e.g. `iwr/irm -OutFile bootstrap.ps1`, then instruct users to **inspect** and run `./bootstrap.ps1`.
- Add at least one integrity mechanism:
  - Preferably provide a **pinned SHA-256** (per release) and document `Get-FileHash` verification, and/or
  - Use **Authenticode signing** and document `Get-AuthenticodeSignature` verification.
- If you must keep a one-liner, add a prominent warning and/or use a commit/release-pinned URL (not a mutable blob path), plus verification steps.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant