Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>DS Studio — AI · HMI · 3DNew to Visual Studio Code? Get it now.
DS Studio — AI · HMI · 3D

DS Studio — AI · HMI · 3D

DualSoftDev

|
9 installs
| (0) | Free
Author DS2 industrial control flows with AI and inspect HMI, SCADA, 3D twins, and PLC programs together. Includes DS2 2.1 file compatibility mode.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

DS Studio — VS Code 동작 작업실

2.2.2: 기존 DualSoftDev.ds2를 DS Studio 통합 작업실로 업데이트합니다. HMI·SCADA·3D·PLC 프로그램과 별도 관측 창, 구버전 호환 엔진·사본 변환 기능을 포함합니다. 0.7.23: 기본·고급 예제 199개 사용자 시나리오를 검사합니다. 공정 연결 우선 표시, 범위·화면 복귀, 설비 화면 확대·상세 정보, 이미지 입력과 DS2 다운로드를 개선했습니다. 0.7.22: 내부 동작 보기 왼쪽의 ↑ 상위 작업으로 버튼으로 해당 작업의 흐름에 복귀합니다. Alt+↑도 지원하며 같은 흐름의 배치·배율을 유지합니다.

원하는 동작을 말하고, 흐름과 내부 Call을 읽으며 수정하는 VS Code 확장입니다. 기본 화면에는 DSL을 표시하지 않습니다.

설치·업데이트

마켓의 확장 ID는 **DualSoftDev.ds2**로 유지합니다. 2.1.x 사용자는 같은 확장의 2.2.2으로 업데이트합니다. VS Code 1.106 이상이 필요합니다. Windows x64 패키지는 내장 .NET 엔진을 사용하고, universal 패키지는 macOS·Linux·WSL에서 .NET 9 및 ASP.NET Core 9 공유 런타임을 사용합니다. VS Code Web은 내장 브라우저 진입점과 dsdx.serverUrl에 지정한 원격 엔진을 사용합니다.

VSIX 파일 실제 설치 대상 로컬 엔진 실행 조건
win32-x64.vsix Windows x64용 VS Code Desktop .NET 9·ASP.NET Core 9 포함. 별도 런타임 설치 불필요
universal.vsix macOS Intel/Apple Silicon, Linux x64/ARM64, WSL의 VS Code 확장 호스트 .NET Runtime 9와 ASP.NET Core Runtime 9 모두 해당 호스트에 설치. .NET 10만으로 충족되지 않음

Remote WSL·SSH·컨테이너에서는 로컬 Windows가 아니라 확장이 실행되는 원격 호스트가 런타임 조건을 충족해야 합니다. Universal의 Linux x64 실행은 실제 검사했으며 macOS·ARM 실기 수락 검사는 별도입니다. 브라우저의 VS Code Web은 로컬 엔진을 실행하지 않고 설정한 원격 엔진을 사용합니다.

개발용 dualsoft-local.dsdx-studio 0.8.x는 다른 확장 ID입니다. 두 확장의 충돌을 피하려면 기존 로컬 확장을 비활성화하고 프로젝트를 .aasx로 저장한 뒤 공식 확장에서 여세요. 로컬 확장의 개인 저장소·키는 자동으로 읽거나 복사하지 않습니다.

제품·언어 버전 정책

  • DS2 제품군의 버전은 2.y.x를 사용합니다. 현재 ds2 v2; 언어를 제공하는 릴리스는 **2.2.x**이며 이번 버전은 2.2.2입니다. 후속 수정은 2.2.3, 2.2.4처럼 패치 번호를 올립니다.
  • 제품 버전과 소스 헤더·명세 태그는 구별합니다. .ds2 원문의 헤더는 ds2 v2;, 정본 명세는 DS2-SPEC-V2.0이며 제품 패치 증가로 원문을 변경하지 않습니다. 기존 ds2 v1;와 구형 모델의 호환 경로도 유지합니다.
  • VSIX·공통 화면·Desktop 버전과 게시 영수증은 일치해야 합니다. 게시 도구는 다른 버전 계열과 이미 존재하는 동일 버전의 재게시를 거부합니다. 검사 중 다른 PC에서 더 높은 버전이 게시됐다면 현재 게시를 중단하고 릴리스 버전을 다시 검토합니다.
  • v3는 2027년 상반기 출시 예정입니다. 이번 2.2.x 패키지에서 v3 제공·호환 완료를 주장하지 않습니다.

구버전 모델

2.1.6의 공식 공개 배포본을 SHA-256으로 고정해 내장했습니다. .sdf·.seq 편집기, 기존 ds2.* 명령과 설정 이름은 유지합니다. 호환 엔진은 구버전 파일이나 명령을 사용할 때만 불러오며, 현재 ds2 v1;·ds2 v2; 원문의 분석·진단은 새 엔진이 담당합니다. 같은 확장 ID의 기존 VS Code 저장소와 SecretStorage를 사용하며, 업데이트나 파일 열기만으로 AI 키를 읽거나 다른 저장소로 옮기지 않습니다.

파일 탐색기의 DS Studio: 구버전 모델을 새 사본으로 변환 또는 명령 팔레트에서 구형 ds2 2;·ds2 3;·ds2 4; 및 .sdf를 선택할 수 있습니다. 기본 선택은 구버전 그대로 사용입니다. 지원하는 무조건 동작·내부 DAG 구조만 새 엔진용 초안으로 변환하고 실제 현재 컴파일러로 검사합니다. 변환은 자동으로 원본을 바꾸거나 실행하지 않습니다.

새 엔진의 스캔·ACK 정책으로 전체 실행 시점이 달라질 수 있습니다. 실측에서 Call DAG의 완료 순서는 유지됐지만 전체 소요 시간이 달라진 사례가 있어, 변환 초안과 보고서에 경고를 남깁니다. 새 초안은 가상 운전과 현장 조건을 다시 확인해야 합니다. 원본과 동일한 실행 의미가 필요하면 기존 호환 모드를 사용하세요.

새 초안을 저장하면 .ds2 옆에 .ds2.migration.json을 함께 저장합니다. 원본 바이트·해시, 새 원문과 해시, 진단·줄·식별자 대응을 보존합니다. 원본 파일, 이미 존재하는 대상·보존 기록은 덮어쓰지 않습니다. 지원하지 않는 조건·토큰·참조·시간 정밀도는 추정하지 않고 구버전 모드로 유지합니다. .seq와 운전 관측 기록은 실행 원문으로 변환하지 않습니다. 구형 .sdf는 기존 편집형 레지스트리이며 현재의 봉인형 SDF와 구별됩니다.

실행

Windows x64용 VSIX는 VS Code 1.106 이상에서 동봉한 .NET 9·ASP.NET Core 9 엔진을 실행합니다. 사용자 PC에 .NET을 별도로 설치하지 않아도 됩니다. 자연어 생성은 VS Code Language Model API에 등록된 제공자를 사용합니다. AI 연결 없이도 예제 카드에서 직교 로봇 정렬·세정 검사 라인 등을 열어 흐름·설비 화면·3D와 가상 운전을 확인할 수 있습니다.

설치파일을 받은 사용자는 VS Code의 **Extensions: Install from VSIX...**에서 Windows용 .vsix를 선택한 뒤 활동 모음의 DS Studio를 엽니다. 왼쪽 AI와 만들기와 편집기의 작업실을 함께 사용합니다. 설치 버전은 작업실 상단에 표시됩니다.

개발자가 설치파일을 생성할 때는 이 폴더에서 npm ci와 npm run package:windows를 실행합니다. .NET 9 SDK는 빌드 PC에만 필요하며, 출력은 artifacts/ds2-2.2.2-win32-x64.vsix입니다. 기존 npm run package는 개발용 일반 패키지를 생성하며 해당 환경의 .NET 9·ASP.NET Core 9 공유 런타임을 사용합니다.

IR·PLC 프로그램 → 별도 창으로 보기는 현재 탭·작업·검색·배율과 관측 상태를 연결합니다. 같은 창을 다시 열면 기존 창으로 이동하고, 새 창이 차단되거나 준비되지 않으면 원래 화면을 유지합니다. 조작은 HMI에서 합니다. 별도 창 닫기는 실행 정지를 뜻하지 않습니다. VS Code가 별도 창 이동 명령을 지원하지 않으면 이유와 함께 옆 편집기로 열립니다.

개발할 때는 저장소의 DS-Studio.code-workspace를 열고 F5를 누릅니다. 기존 .ds2 파일은 기본으로 DS Studio 그래픽 편집기에서 열립니다. 텍스트 편집기로 열기는 VS Code의 **Reopen Editor With...**로 선택할 수 있습니다.

내부 동작 연결 보기 (0.7.19)

흐름의 Work 카드를 클릭하거나 Enter를 누르면 내부 동작의 순차·병렬·합류를 2D DAG로 바로 봅니다. 부모 카드는 내부 동작 수와 연결 보기 버튼만 표시합니다. 긴 순차 연결은 자동으로 여러 줄에 배치하며, 가로·세로 배치도 선택할 수 있습니다. 노드를 선택하면 선행은 파랑, 후행은 주황으로 표시하고 시간·조건·호출 대상과 정확한 선행 AND를 확인합니다.

내부 동작 찾기로 원하는 노드를 100% 크기로 읽습니다. F는 전체 맞춤, Ctrl+F는 내부 검색, Ctrl+1은 100% 읽기, Alt+← 또는 흐름으로 돌아가기로 기존 배치·배율을 유지하며 돌아갑니다. 드래그는 배치 이동이며 내부 화면을 열지 않습니다. 입체 구조·시간 분석·모델 요약·인과 관계에서도 같은 Work의 내부 연결로 이동할 수 있습니다. 100개 Call 표시 제한을 제거했습니다.

실행 상태는 현재 원문과 일치하는 모델 실행 기록만 표시하며, 원문 변경 시 이전 상태를 지웁니다. Play는 새 모델 분석과 명시적 사용자 요청이 백그라운드 설비 미리보기에 막히지 않도록 처리하고, 명시적인 엔진 혼잡으로 거절된 분석만 제한된 횟수로 다시 시도합니다. 원문 변경·화면 종료는 이전 분석과 대기를 취소합니다.

공통 작업실과 브라우저 VS Code

0.6.0부터 packages/studio/ui가 VS Code·Play·Desktop의 공통 화면입니다. 0.6.1의 VS Code IDE·Web에서는 AI 대화·추천·입력을 기본 사이드바의 AI와 만들기 창으로 분리합니다. 편집기는 프로젝트와 흐름/SCADA/시험을 넓게 표시하고, 속성은 선택할 때만 엽니다. Play·Desktop은 기존 공통 작업실 배치를 사용합니다. 프로젝트는 .aasx로 저장하며 원문·대화·사용자 배치를 다른 환경에서 다시 열 수 있습니다. .ds2와 기존 .dsdx는 가져오기·원문 내보내기 경로를 사용합니다. 저장은 컴파일·실행 성공과 독립적입니다.

브라우저 VS Code는 browser 진입점을 사용하며 Node나 .NET 프로세스를 실행하지 않습니다. 설정의 dsdx.serverUrl에 HTTPS 또는 loopback HTTP DS Studio 서버를 지정합니다. 서버 운영자는 실제 확장 worker의 Origin을 DSDX_MCP_ALLOWED_ORIGINS에 등록해야 합니다. 엔진 API는 analyze/probe/scada/mils를 제공하고 서버 프로젝트를 반영하지 않습니다. AI는 해당 VS Code 환경의 실제 LM 제공자를 사용합니다.

네이티브 IDE에서도 같은 dsdx.serverUrl을 지정하면 설비 화면 탭에 AI로 설비 화면 생성 버튼이 나타납니다(capabilities.scadaGenerate). 확장 호스트가 로컬 엔진으로 정규 장면을 먼저 컴파일한 뒤 서버의 POST /api/studio/scada-svg를 호출해 NDJSON 진행 상황을 화면에 전달하고, 받은 SVG의 SHA-256을 직접 계산해 서버가 알린 값과 다르면 거부합니다. 생성 장면은 현재 원문 해시에 묶인 표시 미리보기이며 실행 증거로 채택하거나 파일·복구 자료에 저장하지 않습니다. 요청에는 키·쿠키를 싣지 않고 서버에 설정된 AI 연결을 사용하며, 취소·원문 변경·문서 전환 시 요청을 중단합니다.

기본3D 예제는 공통 화면에서 제공하며 Native IDE에서는 포함된 로컬 worker를 사용합니다. 별도 Lib3D 폴더나 AI 키는 필요 없습니다. 임의 모델의 DS-SILS 실행은 명시적으로 활성화한 웹 Host 연결이 필요합니다. 상세 구조·검증 범위는 플랫폼 구현 기록을 따릅니다.

사용하는 방법

  • 왼쪽 AI 창: VS Code의 사이드바 너비 조절·접기를 사용합니다. 편집기의 AI와 만들기 버튼이나 명령 팔레트의 DS Studio: AI와 만들기 열기로 다시 엽니다. 여러 작업실 탭을 열면 선택한 탭의 대화·첨부·진행 상태를 보여줍니다. 다른 탭으로 이동해도 기존 요청을 중복 실행하지 않습니다.

  • 예제 → 내부 Call을 포함한 조립라인: 실제 API와 내부 Call을 포함한 작은 모델을 엽니다. 원본 예제 파일은 보존됩니다.

  • 기본3D샘플 실행 · AI 없이: 현재 초안을 보존하고 servo 예제를 바로 실행합니다. 예제 선택에서 다른 가상 설비를 실행할 수 있습니다. servo·vfd는 B02 라이브러리 모델을 사용하며 xy는 수치 실행과 3D 미결속을 표시합니다. 결과 저장은 확정한 실행 기록을 내려받습니다.

  • 추천 카드: 현재 상황에 맞는 추천 3개를 대화 아래에 표시합니다. 처음에는 예시 생성·완성 데모·파일 열기를 제공합니다. AI 질문과 변경 제안에는 같은 응답에서 받은 다음 요청/답변 후보를 표시하고, 카드 클릭으로 바로 전송합니다. 작성 중인 입력은 유지하며 진행 중에는 중복 클릭을 막습니다.

  • AI 판단: 현재 정의로 가능한 논리 변경은 초안을 우선 만들고, 실제 진행을 막는 정보만 한 번에 묻습니다. 불필요한 기술 이름·반복 질문은 내부에서 최대 한 번 재검토합니다. 설명은 설명 완료로 종료하고 원문을 변경하지 않습니다. 빈칸이 있는 추천 카드는 바로 전송하지 않습니다.

  • 대화: 원하는 순서·조건을 입력합니다. 처음 연결할 때 사용할 AI 회사를 선택합니다. GPT·Claude·Gemini 등 연결된 회사의 일반 모델 중 최상위를 매 요청마다 자동 선택합니다. AI 연결 추가에서 VS Code의 계정·키·로컬·호환 서버 연결을 관리할 수 있습니다. dsdx.ai.model을 auto 대신 특정 모델 ID로 설정하면 그 모델만 사용합니다. 사용할 수 없는 회사나 모델을 다른 것으로 바꾸어 보내지 않습니다. 요청할 때 현재 소스·정식 문법·생성 지침 9판·최근 대화를 선택한 모델에 전달합니다.

  • 이미지 첨부: PNG·JPEG·WebP를 최대 4개(각 5MiB, 합계 12MiB) 첨부합니다. 실제 이미지와 이미지 생성 지침 3판을 함께 전달합니다. 모델 제공자나 VS Code 버전 때문에 이미지 지원을 확인할 수 없으면 전송하지 않고 첨부를 유지합니다. 질문·실패·중단에서도 보존하며, 생성 후보를 반영했을 때 사용한 첨부를 제거합니다.

  • 입력: Enter로 전송하고 Alt+Enter 또는 Shift+Enter로 줄을 바꿉니다. 한글 조합을 확정하는 Enter는 전송하지 않습니다. 처리 중에도 다음 요청을 작성할 수 있습니다.

  • 진행 확인: 입력창 위에 모델 준비·응답 생성·내부 검사·변경 반영 단계와 경과시간을 표시합니다. 중단 후 다시 시도할 수 있고 작성 중인 입력은 보존됩니다.

  • 수정 대상: 요청에서 확인된 동작은 다이어그램에서 점멸합니다. 수정 대상 보기로 해당 위치에 이동합니다. 반영이 끝나면 실제로 바뀐 동작을 잠시 강조합니다. 운영체제의 모션 줄이기 설정에서는 정적인 테두리로 표시합니다.

  • 연결선: 카드를 옮기면 실제 위치에 맞춰 연결 면과 경로를 자동으로 바꿉니다. 다른 카드를 피해 선을 정리하고 화살촉이 카드 경계로 들어가도록 합니다. 노드 위치는 그대로 유지합니다.

  • 다이어그램: 기본 배율은 100%입니다. 기본 휠로 확대·축소하고 Alt+휠은 세로, Shift+휠은 가로로 이동합니다. Space+드래그 또는 휠 버튼 드래그로 자유롭게 이동합니다. F/Ctrl+0은 화면 맞춤, Ctrl+1은 100%입니다. 기본 휠을 세로 이동으로 바꿀 수도 있습니다. 100%, 선택 위치, 전체 보기는 각각 별도 기능입니다.

  • MILS 재생: Flow·SCADA의 공통 재생 버튼으로 현재 Active 흐름을 모델 실행합니다. Work와 내부 Call 상태를 보며 일시정지·한 스캔 진행·배속·시간 이동을 사용할 수 있습니다. DSL 수정이나 AI 작성이 시작되면 이전 재생을 중단합니다. 조건 대기·실행 한도·지원 범위는 이유와 함께 표시하며 공식 검사 결과와 별도로 유지합니다.

  • 설치 버전: 상단 DS Studio 이름 옆에 현재 실행 중인 확장의 버전을 표시합니다.

  • 상단 도구줄: 흐름·시험 탭, 검색, 배치 선택을 한 줄로 표시합니다. 시스템·흐름 범위, 가로·세로 방향, 주변 보기와 동작 상세는 ⋯ 보기 설정에서 바꿉니다. 좁은 화면의 검색 아이콘이나 Ctrl/Cmd+F로 검색을 엽니다. Escape 또는 바깥을 눌러 팝업을 닫습니다.

  • 배치 모드: 자동 추천·흐름에 따라·여러 줄·흐름별 구역·격자·원형·랜덤·사용자 레이아웃을 선택합니다. 미니맵·동작 검색·주변 보기를 함께 사용합니다.

  • 사용자 레이아웃: 어느 모드에서든 카드를 드래그하면 사용자 배치로 전환하고 문서·범위별로 저장합니다. 시간 경과로 위치가 바뀌지 않으며, 다시 열어도 복원합니다.

  • SCADA 구조: 병렬 분기·합류를 실제 연결 계층에 맞추고 장치를 호출하는 Work 아래에 표시합니다. 같은 물리 장치를 여러 Work에서 사용하면 공유 표시와 동일 상태를 유지합니다. 제어 시스템은 프로젝트 목록과 범위 선택의 맨 위에 표시합니다.

  • SCADA Pro: 공통 작업실에서 장치 장면과 HMI를 표시합니다. Flow와 같은 MILS 기록으로 Work·Call·장치 실행 상태와 진행률을 표시하며 재생·일시정지·스캔 이동을 공유합니다. 기구 형상은 설계 위치로 유지하고 물리 실행 미연결을 표시합니다. 진행률은 측정 위치가 아닙니다.

  • SCADA 자동 준비: 유효한 DSL 변경을 반영하면 백그라운드에서 미리보기를 준비합니다. 새 결과가 준비될 때까지 같은 문서의 이전 SCADA를 표시하고, 흐름으로 돌아가 계속 작업할 수 있습니다. 실패·시간 초과는 이전 화면을 유지하고 수동 재시도를 제공합니다.

  • 연결 방향: 선택한 동작에 들어오는 선은 파랑, 나가는 선은 주황으로 선·화살촉·라벨을 구분합니다. 상호/자기 연결은 보라, 초기화·되돌림의 점선은 유지합니다.

  • 다시 배치: 선택한 알고리즘을 명시적으로 적용합니다. 랜덤은 모드 선택 또는 이 버튼을 누를 때 새 기준값으로 섞습니다. 화면 이동·대화 갱신·시간 경과는 랜덤 위치를 바꾸지 않습니다. 사용자 모드에서는 저장한 기본 배치를 적용합니다. 배치 모드 변경과 다시 배치는 선택 카드와 관계없이 전체 범위를 화면 중앙에 맞춥니다. 배치 조작은 DSL을 수정하지 않습니다.

  • 범위: 시스템과 흐름을 선택하면 해당 범위만 보여줍니다. 내부 Call의 대상 버튼을 누르면 실제 호출된 Work로 이동합니다. 호출 경로와 흐름으로 돌아가기 버튼으로 호출했던 동작·범위·확대/이동 위치를 복원합니다. 단계별 복귀도 가능하며, 이전 버전에서 이미 Call을 보고 있던 경우에도 실제 호출 관계로 흐름 복귀를 제공합니다.

  • 수정: 생성한 후보를 Core 분석과 main 공식 엔진으로 검사합니다. 컴파일·실행 실패는 제한된 수정 후에도 남으면 반영하지 않습니다. 미측정 입력 때문에 실행을 검증하지 못한 후보는 이유·질문을 표시하고 컴파일된 초안으로 반영합니다. 파일과 연결된 편집기는 저장 전 문서 버퍼에 반영하며, 파일 저장은 흐름 저장으로 수행합니다.

  • 공식 엔진으로 검증: 현재 초안 전체를 dsdx.ai.probe로 검사합니다. 컴파일 통과, 실행 검증 통과, 실행 미검증, 실패를 구분하며 결과를 해당 원문 해시에 연결합니다.

  • 되돌리기: 이전 초안을 복원합니다. 작업실 밖에서 파일이 바뀐 경우 덮어쓰지 않습니다.

  • 고급 → DSL 보기: 현재 초안과 같은 버전의 읽기 전용 소스를 선택적으로 엽니다.

확인하는 범위

작성 분석기는 main의 Dsdx.Core를 호출해 구문·Work/API 참조·Call 투영을 제공합니다. 생성 후보와 수동 검증에는 같은 main의 HostState를 통해 공식 dsdx.ai.probe를 호출합니다. 확장이 별도 TypeScript 파서로 실행 의미를 재구현하지 않습니다.

실행 통과는 원문·정본·봉인 증거, 실행된 스캔과 변이 8/8을 확인한 경우에만 표시합니다. writable true·observe·token.* 가드처럼 외부 측정값이 필요한 모델은 컴파일 통과 · 실행 미검증으로 표시하고 질문을 보존합니다. Call의 구조·대상 탐색은 실행 검증 여부와 관계없이 제공합니다. 이 결과는 사용자 요구 전수 충족이나 실제 설비 동작을 증명하지 않습니다.

모델 연결·권한·사용 한도는 VS Code의 제공자 설정을 따릅니다. 실제 모델 응답을 받기 전 생성이 끝났다고 표시하지 않습니다. 제한된 내부 수정 후에도 오류가 남으면 기존 흐름을 유지합니다.

검증

npm test
npm run test:ui

UI 검증은 Playwright Python과 Chromium이 필요합니다. 스크린샷과 보고서는 tests/artifacts/에 생성됩니다. 브라우저 테스트용 상태와 실제 .NET 분석·실행 결과는 구분해서 검증합니다.

tests/run-vscode-smoke.py는 설치된 Windows VS Code를 별도 프로필에서 실행해 실제 확장·문서·분석 엔진을 확인합니다. UX 비동기 검증에서 생성 모델은 명시적인 테스트 대역을 사용하며, 외부 모델 호출 성공을 주장하지 않습니다.

구조

  • src/: 확장 수명주기, 사용자 요청·파일 버전 보호, 모델 연결, .NET 워커 클라이언트
  • media/: VS Code 테마에 맞는 작업 화면, 카드·Call·간선 레이아웃, 확대·이동
  • runtime/: 빌드 시 생성하는 .NET 작성 엔진과 의존 DLL
  • resources/: 원본 SHA를 기록한 정식 문법·텍스트 및 이미지 생성 지침
  • fixtures/: 편집 원본을 변경하지 않고 여는 예제

이 확장은 별도 HTTP 서버·데이터베이스·3D 엔진을 실행하지 않습니다. 로컬 분석 프로세스는 필요할 때 시작하고 유휴 상태에서 종료합니다.

배치 선택·직접 이동·랜덤 재배치 정책과 검사 결과는 레이아웃 리팩터링 기록에 있습니다.

main 반영 기준·기능 검사·남은 문제는 통합 리포트에 기록합니다.

구현에 사용한 공식 문서: Webview, Language Model API, Custom Editor.

사용자 배치의 저장·복원 정책은 사용자 레이아웃 기록에 있습니다.

캔버스 이동 · 0.6.4

흐름·SCADA 캔버스에서 휠로 확대/축소하고 Alt+휠로 세로, Shift+휠로 가로 이동합니다. Ctrl+휠은 터치패드 확대와 함께 항상 줌으로 동작합니다. 화면 보기 메뉴의 마우스 휠로 확대/축소를 끄면 기본 휠은 세로 이동으로 바뀝니다.

Space+좌클릭 드래그·중간 버튼 드래그로 화면을 잡고 이동하고, H로 손 도구를 전환합니다. 방향키·Page Up/Down은 이동, Ctrl++/-는 줌, Ctrl+0·F·빈 화면 더블 클릭은 전체 맞춤, Ctrl+1은 100%입니다. 단축키는 캔버스에 초점이 있을 때 적용하며 입력창과 IME 입력은 유지합니다.

0.7.1의 Windows VS Code IDE에서는 사이드바에 현재 파일·프로젝트·보기·선택 동작을 표시합니다. 이 동작 AI로 수정을 누르면 입력을 보존한 채 수정 기준을 지정하고 입력창으로 이동합니다. 전송 전 전체 흐름으로 해제할 수 있습니다. 기준 동작은 문서·원문 해시·정확한 ID로 확인하며, 원문 변경 후 오래된 기준을 자동 재사용하지 않습니다. 작업 화면 복귀는 현재 Flow·SCADA·시험 보기를 유지합니다.

상단 검사 배지는 기본 검사·검증 통과·검증 실패·실행 미검증을 구분하며 클릭하면 시험 결과를 엽니다. 직접 편집을 분석 중인 동안에는 이전 검사 결과를 통과로 표시하지 않고, 다음 입력을 보존합니다. 모델 실행 완료와 공식 검증 판정은 별도로 표시합니다.

자동 UX 검사는 npm run test:ide의 headless Chromium과 단위·엔진 검사를 기본으로 사용합니다. 사용자 데스크톱에 VS Code 창을 열지 않습니다. 실제 Windows VS Code 화면 검사는 명시적인 --interactive 옵션이 있어야 실행되며, 일반 테스트·빌드·패키징에서 호출하지 않습니다. 실제 화면 인수는 별도 테스트 환경이나 사용자가 요청한 시점에 수행합니다.

PLCopen XML 탭은 전체 원본의 표시 범위를 나누어 읽고 전체 원문을 검색합니다. 다운로드 파일은 컴파일러 원본을 보존합니다. 실행 관측은 접점·코일 대신 실제 스캔의 작업 상태·경과 시간·판정·내부 동작·채널값을 표시합니다.

인과 관계에서 동작을 누르면 같은 그림 아래의 상세 매트릭스가 갱신됩니다. 직접 효과의 방향·원본 AND 그룹·조건 원문을 확인하며, 시작/리셋/명시적 상호배타를 구별합니다. PLAY 진입 링크는 새 탭/창으로 열립니다.

릴리스 담당자 인계

2026-11-09 사용자 지시에 따라 최신 변경을 반영한 VS Code 확장을 기존 게시 자동화로 배포한다. 먼저 같은 소스의 검사·패키지 검증을 완료하고, 기존 인증으로 검토한 VSIX를 게시한다. 인증 실패와 게시 접수·공개 검증 완료를 구분해 보고한다. 운영 웹사이트·다운로드 페이지 업로드는 별도 배포 절차를 따른다.

대상

기존 마켓 확장 DualSoftDev.ds2(공개 기준 2.1.6)를 2.2.2으로 업데이트한다. 다른 확장을 새로 게시하는 작업이 아니다. 공통 Studio UI·VSIX·Desktop 버전을 2.2.2으로 맞춘다. VS Code 1.106 이상을 요구한다. 기존 더 낮은 VS Code 버전에서 새 버전 설치를 지원한다고 표시하지 않는다.

  • universal VSIX: macOS·Linux·WSL의 .NET 9 / ASP.NET Core 9 공유 런타임, VS Code Web의 원격 엔진 경로.
  • win32-x64 VSIX: .NET 9 / ASP.NET Core 9 자체 포함 엔진.
  • Windows Desktop 설치 파일: 같은 공통 UI·로컬 Host. 운영 웹사이트·다운로드 페이지 반영은 사용자가 다른 PC에서 수행한다.

기존 게시 자동화 근거

사용자가 지정한 dualsoft/dualsoftai/tools/ds2-studio 원격 main의 Makefile → scripts/release.mjs가 실제 게시 진입점이다. 최신 스크립트는 VSCE_PAT가 없으면 --azure-credential로 Microsoft Entra ID 인증을 사용한다. --check-auth는 인증만 확인한다. 해당 저장소의 DESIGN.md도 GitLab CI는 빌드·회귀용이며 Marketplace 업로드 job은 없다고 명시한다. 로컬의 오래된 checkout은 PAT 전용이므로 인증 경로의 기준으로 쓰지 않는다.

현재 플랫폼 코드의 배포에서는 구형 확장을 다시 빌드하는 대신 검증한 2.2.2 VSIX를 그대로 게시한다. 인증 방식과 vsce publish --packagePath 경로는 기존 자동화와 같다. 새 게시 토큰·CI를 임의로 만들거나 기존 dualsoftai 작업 트리를 수정하지 않는다.

생성한 PC 운전 앱의 실행 환경

PC 제어 화면의 EXE 내보내기는 고정 Windows 실행기와 운전 파일을 묶습니다. 생성 PC 앱은 .NET 9·ASP.NET Core 9 실행 환경이 필요하며 SDK는 요구하지 않습니다. DS Studio Desktop 설치본의 내장 런타임과 구별합니다. 생성 파일을 실제 설비에 연결하기 전의 설정·연결·출력 제어 확인은 운전 화면의 기존 절차를 따릅니다. 다운로드만으로 서버의 원문·운전 설정을 바꾸지 않습니다.

자동 게시와 공개 검증

완성한 DualSoftDev.ds2-2.2.2-universal.vsix와 DualSoftDev.ds2-2.2.2-win32-x64.vsix를 아래 publish-marketplace.cjs --publish로 기존 DualSoftDev.ds2의 업데이트로 게시한다. DualSoftDev 게시자 관리 화면에서 검증 상태를 확인할 수 있다. 새 확장을 만들지 않는다. universal과 Windows x64는 같은 2.2.2의 서로 다른 플랫폼 패키지다. 두 파일의 SHA는 함께 전달하는 marketplace-packages.json/최종 보고서와 대조한다. Desktop .exe는 Marketplace 업로드 대상이 아니다.

업로드 후 Marketplace 검증 완료와 설치 버전을 확인한다. 이미 2.2.2이 존재하거나 검증이 실패하면 같은 번호를 덮어쓰지 말고 실제 결과를 확인한다. 게시에는 검토한 VSIX만 사용하며 다시 빌드하지 않는다. 사용자 VS Code 설치·강제 리로드는 자동 게시에 포함하지 않는다.

재현 명령

저장소 루트의 현재 소스를 고정하고 Windows Node·.NET 9 SDK로 실행한다. 빌드 PC만 SDK가 필요하다.

npm --prefix extensions/dsdx-vscode ci
npm --prefix extensions/dsdx-vscode run test
npm --prefix extensions/dsdx-vscode run test:platform
npm --prefix extensions/dsdx-vscode run test:compatibility
npm --prefix apps/studio-desktop test
node extensions/dsdx-vscode/scripts/package-marketplace.cjs --out-directory D:\build\ds-studio\release

마지막 명령은 universal → win32-x64를 순서대로 생성하고 각 패키지의 런타임·구형 자산·명령·Web 진입점·경로·CRC·SHA를 검사한다. 결과는 marketplace-packages.json이다. 공유 runtime 폴더에서 두 빌드를 동시에 수행하지 않는다. 출력 폴더는 obj 또는 별도 빌드 드라이브를 사용한다.

기존 인증 경로로 게시한다. 인증정보는 코드·설치 파일·보고서·명령 인자에 넣지 않는다. 로컬 게시 인증을 등록할 때는 확장 폴더의 터미널에서 npx @vscode/vsce login DualSoftDev를 실행한다. 저장한 로그인은 --stored-credential로 명시해 사용한다.

node extensions/dsdx-vscode/scripts/publish-marketplace.cjs --check-auth --stored-credential D:\build\ds-studio\release\marketplace-packages.json
node extensions/dsdx-vscode/scripts/publish-marketplace.cjs --publish --stored-credential D:\build\ds-studio\release\marketplace-packages.json

Microsoft Entra ID 인증을 사용하는 기존 환경에서는 다음 명령을 사용한다.

az login --allow-no-subscriptions
node extensions/dsdx-vscode/scripts/publish-marketplace.cjs --check-auth --azure-credential D:\build\ds-studio\release\marketplace-packages.json
node extensions/dsdx-vscode/scripts/publish-marketplace.cjs --publish --azure-credential D:\build\ds-studio\release\marketplace-packages.json

자동화된 사용자 로그인은 필요 시 az login --use-device-code --allow-no-subscriptions를 사용한다. 로그인 코드는 유효기간이 있으므로 인계 문서에 보존하지 않는다. PAT 인증이 이미 있는 CI에서는 VSCE_PAT 환경변수를 그대로 사용하고 --azure-credential만 생략한다. 게시 후 Gallery의 2.2.2·두 플랫폼·공개 VSIX SHA와 실행 결과를 확인해야 완료이다. 제출 성공과 Marketplace 검증 완료를 구분한다. 이미 존재하는 2.2.2은 덮어쓰거나 --skip-duplicate로 성공 처리하지 않는다.

--stored-credential와 --azure-credential는 함께 지정하지 않는다. 저장한 로그인을 명시하면 Azure 자동 선택과 상속된 VSCE_PAT를 사용하지 않는다. 인증 옵션이 없으면 기존 정책대로 VSCE_PAT가 있을 때 PAT, 없을 때 Azure를 사용한다.

호환 계약

공식 2.1.6 VSIX의 SHA-256은 c77b0b8e08508e180f508be14990d8b7151a4ba15ea609908d266ba2796e15f5이다. 설치된 개발용 2.1.6의 파일이 공식 배포본과 다르므로 원본 공개 VSIX를 기준으로 삼는다. resources/legacy-manifest.json에 138개 원본의 경로·길이·SHA를 고정한다. 빌드 시 sync-legacy.cjs가 공개 파일을 검증해 compat/2.1.6으로 생성한다. 원본 파일과 Apache-2.0 라이선스를 유지하고 생성한 Native/Web 어댑터를 분리한다.

기존 47개 명령·28개 설정과 ds2.model/ds2.seq 편집기를 유지한다. 구형 엔진은 명시적 구형 작업에서만 활성화한다. 문서 이벤트·언어 기능·진단을 구형 ds2 2;/3;/4; 문서에 제한해 현재 ds2 v1;/v2;를 건드리지 않는다. SecretStorage·기존 저장소를 다른 확장으로 복사하지 않는다. 개발용 dualsoft-local.dsdx-studio는 별도 ID이므로 비활성화 후 .aasx로 옮긴다.

형식은 다음과 같이 구별한다.

  • 구형 .ds2: 별도 문법을 토큰·계층 구조로 해석한다. 헤더만 바꾸지 않는다.
  • 구형 .sdf: gzip JSON 레지스트리다. 공식 구형 page/WASM BuildDs2TextWithIdentity와 원본/해제 JSON의 두 SHA를 대조해 투영한다. 현재 봉인 SDF로 해석하지 않는다.
  • .seq, PLC 로그 관측·보존 자료: 실행 원문으로 합성하지 않는다. 기존 읽기 경로를 유지한다.
  • 현재 .ds2·.dsdx·.aasx: 현재 저장·분석 계약을 유지한다.

기본은 구버전 그대로 사용이다. 명시적으로 선택하면 지원하는 무조건 Work·API·Call DAG의 새 엔진용 초안만 만든다. 기존 실행과 시간 동등하다고 표시하지 않는다. 실측 chain의 시작 스캔 경계와 Call fork/join의 전체 시간(180ms/210ms)이 달랐으므로 원문 주석·진단·선택 UI에 재검증 필요를 표시한다. 비교 결과는 구조 불변량 통과와 실행 시간 불일치를 따로 보고한다. 확인하지 못한 가드·토큰·참조·시간 정밀도는 보수적으로 구형 모드에 남긴다.

System type은 원본 값·출처(원문/레지스트리/reader 기본값)를 기록하며 새 제어·3D·PLC 프리셋으로 자동 결박하지 않는다. 원본 registry의 명시 type과 WASM 투영이 다르면 변환하지 않는다. 새 사본 옆 .migration.json은 원본 바이트/base64·SHA, 새 원문·SHA, 줄·식별자 대응·진단을 보존한다. 원본·이미 존재하는 대상/보존 파일을 덮어쓰지 않는다. 실행 기록·주소·제품 정책을 발명하지 않는다.

패키징 및 검증 범위

Marketplace 한글 경로 손상 이력에 대응해 외부 ZIP 항목은 ASCII로 제한한다. 공식 문서·예제는 asset-manifest.json의 논리 경로를 유지하고 ASCII packagePath로 운반한다. Authoring 엔진이 길이·SHA·안전 경로를 검증한 뒤 개인 probe 작업 공간에서만 원래 이름을 복원한다. 공식 문서의 본문과 식별자를 바꾸지 않는다.

검증은 소스 SHA·실행 DLL·제공 UI·VSIX SHA를 고정해 기록한다. 원래 릴리스 Gate1/2/2b/3/4와 해당 패키지의 실제 분석·원본 보존·키 없는 예제·관측 창을 검사한다. 0.8.14의 21개 UI 여정(258개 검사·35장)과 80개 실제 export는 기능 기준선이며 2.2.2 실행 결과로 다시 표시하지 않는다. 구버전 실제 WASM 비교·변환·취소·원본 보존과 패키지 검사를 추가로 실행한다. 전체 시나리오 199/100·실제 AI·물리 PLC·모든 벤더 IDE·운영 웹 최종 인수를 이번 검사로 주장하지 않는다.

실행별 보고서·스크린샷·로그·설치 파일은 obj/별도 빌드 드라이브 또는 기존 Work Item #27 첨부에 둔다. 현재 작업의 구체적인 source/artifact SHA와 실제 Marketplace 게시 여부는 최종 실행 보고서에 기록한다.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft