tis-opencode icon

OpenCode

Paquet d'installation silencieuse pour OpenCode

2.1.4-2
Development
Development

Les paquets PREPROD sont des paquets construits via LUTI. Ils restent généralement 5 jours en PREPROD, après quoi un deuxième scan VirusTotal est effectué pour vérifier que le status n'a pas changé.
Si le paquet réussit ce dernier contrôle, il est promu en PROD et publié sur le store.

  • package: tis-opencode
  • name: OpenCode
  • version: 2.1.4-2
  • categories: Development
  • maintainer: Tranquil IT, WAPT TEAM, Kevin Cherel
  • editor: Anomaly Innovations
  • licence: MIT
  • locale: all
  • target_os: windows
  • impacted_process: OpenCode.exe
  • architecture: arm64
  • signature_date:
  • size: 237.73 Mo
  • homepage : https://opencode.ai/
  • depends:

package           : tis-opencode
version           : 2.1.4-2
architecture      : arm64
section           : base
priority          : optional
name              : OpenCode
categories        : Development
maintainer        : Tranquil IT, WAPT TEAM, Kevin Cherel
description       : OpenCode is an open source AI coding agent that helps you write code in your terminal, IDE or desktop app.
depends           : tis-7zip
conflicts         : 
maturity          : PREPROD
locale            : all
target_os         : windows
min_wapt_version  : 2.3
sources           : https://opencode.ai/download
installed_size    : 
impacted_process  : OpenCode.exe
description_fr    : OpenCode est un agent de codage IA open source qui vous aide à écrire du code dans votre terminal, votre IDE ou une application de bureau.
description_pl    : OpenCode to open source'owy agent AI do programowania, który pomaga pisać kod w terminalu, IDE lub aplikacji desktopowej.
description_de    : OpenCode ist ein quelloffener KI-Coding-Agent, der Ihnen hilft, Code in Ihrem Terminal, Ihrer IDE oder einer Desktop-Anwendung zu schreiben.
description_es    : OpenCode es un agente de programación con IA de código abierto que le ayuda a escribir código en su terminal, su IDE o una aplicación de escritorio.
description_pt    : OpenCode é um agente de programação com IA de código aberto que ajuda você a escrever código no terminal, no IDE ou em um aplicativo de desktop.
description_it    : OpenCode è un agente di programmazione IA open source che ti aiuta a scrivere codice nel terminale, nell'IDE o in un'applicazione desktop.
description_nl    : OpenCode is een open source AI-programmeeragent die u helpt code te schrijven in uw terminal, IDE of desktopapplicatie.
description_ru    : OpenCode представляет собой ИИ-агента для программирования с открытым исходным кодом, который помогает писать код в терминале, IDE или настольном приложении.
audit_schedule    : 
editor            : Anomaly Innovations
keywords          : opencode,ai,agent,coding,code,assistant,llm,terminal
licence           : MIT
homepage          : https://opencode.ai/
package_uuid      : 76f054f4-8111-4a91-9898-0612e5b36043
valid_from        : 
valid_until       : 
forced_install_on : 
changelog         : https://opencode.ai/changelog
min_os_version    : 10.0
max_os_version    : 
icon_sha256sum    : 2ef8d582e62e65a55adf11d09f0ef621d56592cd7e319178dff4c968aae27ba2
signer            : test
signer_fingerprint: b82fc8ef4a4475c0f69ac168176c2bfc58f572eb716c4eadd65e4785c155dd8e
signature_date    : 2026-10-23T11:09:59.000000
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
signature         : UQy3lZfpToQOHwpd06Kv6Xe2uenHyJGo60hicdCLjwPXpYnoUME+R5pUhmgSGVwp5MDZw8p/uDZp1jc06rqTkN4Vtxoq2cSx+/JNaXfnMyf4VRtl4XklSsgTD8ofTIPUqoOcZK8Lb8/ru78QOv5XEJSUq8RD5B+ycahCtxJ2FuST8yl9VeqCCbXbtDuW89Wegsy6MyuEA36ca+OdhuKxtwxHc/wUvK6driG8hviqieY+acCTXkAkf3A01t/Jlu1yUcsWdb/l5VIi8l8HhHiaG+ynLDjYIYrbz9+fbQl2qGoxYdJ5Yu03KEcCRmaiRzowMdCoHQZ5dBL9g5dRR9IO/Q==

# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *

app_name = "OpenCode"
app_dir = makepath(programfiles, app_name)
app_path = makepath(app_dir, "OpenCode.exe")
legacy_app_dir = makepath(programfiles32, app_name)
temp_dir = "OpenCode_temp"
installed_version = get_file_properties(app_path).get("ProductVersion", "")


def install():
    bin_name = glob.glob("opencode-desktop-win-*.exe")[0]

    # Removing the install made by previous package revisions in Program Files (x86)
    if isdir(legacy_app_dir):
        print(f"Removing: {legacy_app_dir}")
        killalltasks(ensure_list(control.impacted_process))
        remove_tree(legacy_app_dir)
        remove_programs_menu_shortcut(app_name)

    # Uninstall older version before new one
    if installed_version and Version(installed_version) < Version(control.get_software_version()):
        uninstall()

    # The NSIS installer only supports a per-user install, extracting the application archive instead
    if isdir(temp_dir):
        remove_tree(temp_dir)
    print(f"Extracting: {bin_name}")
    unzip_with_7zip(bin_name, temp_dir)
    app_7z = glob.glob(makepath(temp_dir, "$PLUGINSDIR", "app-*.7z"))[0]

    print(f"Extracting: {app_7z}")
    killalltasks(ensure_list(control.impacted_process))
    unzip_with_7zip(app_7z, app_dir)
    remove_tree(temp_dir)

    # Disabling automatic updates: the desktop updater without its feed, and the bundled CLI background service
    remove_file(makepath(app_dir, "resources", "app-update.yml"))
    set_environ_variable("OPENCODE_DISABLE_AUTOUPDATE", "1")

    create_programs_menu_shortcut(app_name, target=app_path)


def audit():
    # Auditing software
    audit_status = "OK"
    if Version(installed_version) < Version(control.get_software_version()):
        print(f"{app_name} is installed in version ({installed_version}) instead of ({control.get_software_version()})")
        audit_status = "WARNING"
    elif isdir(app_dir) and not dir_is_empty(app_dir):
        print(f"{app_name} ({installed_version}) is installed")
        audit_status = "OK"
    else:
        print(f"{app_name} is not installed")
        audit_status = "ERROR"
    return audit_status


def uninstall():
    # Uninstalling software
    killalltasks(ensure_list(control.impacted_process))
    if isdir(app_dir):
        remove_tree(app_dir)

    # Removing shortcuts
    remove_programs_menu_shortcut(app_name)

# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *
import waptlicences


def get_manifest(manifest_url, proxies):
    manifest = wgets(manifest_url, proxies=proxies)
    if isinstance(manifest, bytes):
        manifest = manifest.decode("utf-8")
    version = None
    files = []
    for line in manifest.splitlines():
        line = line.strip()
        if line.startswith("version:"):
            version = line.split(":", 1)[1].strip()
        elif line.startswith("- url:"):
            files.append(line.split(":", 1)[1].strip())
    return version, files


def update_package():
    # Declaring local variables
    package_updated = False
    proxies = get_proxies()
    if not proxies:
        proxies = get_proxies_from_wapt_console()
    app_name = control.name

    base_url = "https://opencode.ai/update/api/latest/desktop/opencode"
    update_dict = {
        "windows-x64": ("latest.yml", "-win-x64.exe"),
        "windows-arm64": ("latest.yml", "-win-arm64.exe"),
        "darwin-x64": ("latest-mac.yml", "-mac-x64.dmg"),
        "darwin-arm": ("latest-mac.yml", "-mac-arm64.dmg"),
        "debian-x64": ("latest-linux.yml", "-linux-amd64.deb"),
        "debian-arm64": ("latest-linux-arm64.yml", "-linux-arm64.deb"),
        "redhat_based-x64": ("latest-linux.yml", "-linux-x86_64.rpm"),
        "redhat_based-arm64": ("latest-linux-arm64.yml", "-linux-aarch64.rpm"),
    }
    os_type = control.target_os.split("(")[0] + "-" + ensure_list(control.architecture)[0]
    manifest_name, bin_suffix = update_dict[os_type]

    api_url = f"{base_url}/{manifest_name}"
    print("API used is: %s" % api_url)
    version, files = get_manifest(api_url, proxies)
    print(f"Latest {app_name} version is: {version}")

    for to_download in files:
        if to_download.endswith(bin_suffix):
            download_url = to_download
            latest_bin = download_url.rsplit("/", 1)[-1]
            latest_bin_extension = latest_bin.rsplit(".", 1)[-1]
            break

    if isfile(latest_bin):
        remove_file(latest_bin)
    print(f"Downloading: {latest_bin}")
    wget(download_url, latest_bin, proxies=proxies)

    if latest_bin_extension == "exe":
        expected_issuer = "Anomaly Innovations, Inc https://anoma.ly/"
        sign_name = waptlicences.check_exe_signing_certificate(latest_bin)[0]
        if sign_name != expected_issuer:
            error(f"Bad issuer {sign_name} != {expected_issuer}")

    # Deleting outdated binaries
    for f in glob.glob(f"*.{latest_bin_extension}"):
        if f != latest_bin:
            remove_file(f)

    # Changing version of the package
    if Version(version) > Version(control.get_software_version()):
        print(f"Software version updated (from: {control.get_software_version()} to: {Version(version)})")
        package_updated = True
    else:
        print(f"Software version up-to-date ({Version(version)})")
    control.set_software_version(version)
    control.save_control_to_wapt()

    return package_updated

01ca7fe94636e5a08fcb73849d3b5df25d51e2c82f4dd1a08f01798b25899819 : WAPT/certificate.crt
fafb8e01c0a3e3c52a9ee01e0c23839f54530bfb231d3fc257bd95c4d274ac4c : WAPT/control
2ef8d582e62e65a55adf11d09f0ef621d56592cd7e319178dff4c968aae27ba2 : WAPT/icon.png
c04f3e93afcab39429b4b65cd695c3ab49d75821bbb2d10ca093cb4d55d474cf : luti.json
c5f2ffa1a21f42ce9bdcba4653347c57c58aded591f766f91ed14d2026470297 : opencode-desktop-win-arm64.exe
581d064c60d8edf15bafa9fea0cfc5d1a5c686cbdbe14be217daad8941533ba2 : setup.py
10bc1d8ab1e79493a0c0fe414adcb221132bec09c1f7c537047adca04e9549fd : update_package.py