"response_format": {
"type": "json_schema",
"json_schema": {...}
}
apex export -applicationid 116 -exptype apexlang
SQL> apex export -applicationid 116 -exptype apexlang
ワークスペースAPEXDEVをエクスポートしています - アプリケーション116:Sample Terminal Emulator
ファイルsample-terminal-emulator/application.apxが作成されました
SQL>
name: Simple Terminal Emulator
version: 0.1.0
description: Oracle APEX 26.1のAPEXlangを使ってアプリケーションを作成する。
author: Yuji
dependencies:
apm:
# Oracle Database Skills
- git: https://github.com/oracle/skills
path: db
ref: main
# Oracle APEX Skills
- git: https://github.com/oracle/skills
path: apex
ref: main
apm install --target codex
apexapps % apm install --target codex
[>] Installing dependencies from apm.yml...
[>] Resolving skills-db...
[>] Resolving skills-apex...
[i] Targets: codex (source: --target flag)
[+] github.com/oracle/skills/apex#main #main @55679630
|-- Skill integrated -> .agents/skills/
[+] github.com/oracle/skills/db#main #main @55679630
|-- Skill integrated -> .agents/skills/
[i] Added apm_modules/ to .gitignore
[*] Installed 2 APM dependencies in 1.3s.
apexapps %
[mcp_servers.oracle-apexdev]
command = "/opt/homebrew/Caskroom/sqlcl/26.1.2.132.1334/sqlcl/bin/sql"
args = [ "-R", "4", "-mcp" ]
[sandbox_workspace_write]
network_access = true
codex --sandbox workspace-write
最初にこれからの作業の条件を指示します。
apexapps % codex --sandbox workspace-write
╭──────────────────────────────────────────────╮
│ >_ OpenAI Codex (v0.139.0) │
│ │
│ model: gpt-5.5 medium /model to change │
│ directory: ~/Documents/apexapps │
╰──────────────────────────────────────────────╯
Tip: New Use /fast to enable our fastest inference with increased plan usage.
› データベースの接続にはsql -name local-26ai-apexdevを使用します。アプリケーションが作成されているAPEXワーク
スペースはAPEXDEVです。今回、修正対象のAPEXアプリケーションはsample-terminal-emulator以下にAPEXlang形式でエ
クスポートされています。
• 了解しました。対象は sample-terminal-emulator 配下の APEXlang エクスポート、DB 接続は local-26ai-apexdev、
APEX ワークスペースは APEXDEV として扱います。
修正依頼を受けたら、まず sample-terminal-emulator の構成と APEXlang 定義を確認し、必要に応じて apex /
apexlang スキルと sql -name local-26ai-apexdev 相当の接続前提で進めます。
› Write tests for @filename
gpt-5.5 medium · ~/Documents/apexapps
› 今はAjaxコールバックCHATは、受信したメッセージ毎にAIエージェントを呼び出しています。これをAPEX_AI.CHATを呼
び出すように変更し、APEXで同一セッションの間は、それまでの会話履歴を含めて生成AIを呼び出して、レスポンスを
得るように変更してください。
• apex / apexlang スキルを使って進めます。まずローカルの APEXlang 定義と既存の Ajax コールバック実装を確認しま
す。
• Explored
└ Read SKILL.md (apexlang skill), SKILL.md (apex skill)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
• 対象アプリの場所はユーザー指定で確定しているので、sample-terminal-emulator 配下だけを見ます。並行して
APEXlang のルーティング資産も最小限確認します。
• Explored
└ Read routing-catalog-main.json, routing-load-policy.json, domains-catalog.json
List sample-terminal-emulator
Read workspace-intelligence.json
Search CHAT|AI|AGENT|APEX_AI|Ajax|ajax|callback in sample-terminal-emulator
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
• CHAT はページ 1 の Ajax callback と共有コンポーネントの AI Agent に分かれていそうです。次に PL/SQL の実装と
アプリ設定を読んで、履歴保存先を APEX セッション内でどう持つのが既存構成に合うか確認します。
• Explored
└ Read p00001-home.apx, application.apx, chat.apx, local-gpt-oss-120b.apx
• Ran node /Users/ynakakoshi/Documents/apexapps/.agents/skills/apex/apexlang/tools/apexctl.mjs workspace probe
│ --db-connection-name local-26ai-apexdev --workspace-name APEXDEV
└ {
"status": "unresolved",
… +263 lines (ctrl + t to view transcript)
}
}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
• 既存実装は apex_ai.generate(p_agent_static_id => 'chat', p_prompt => l_prompt) で単発呼び出しです。
APEX_AI.CHAT の正確なシグネチャは環境の APEX バージョンに依存するため、接続先 DB のパッケージ定義から確認し
ます。
「作成したアプリケーションをアプリケーションID 116 として上書きしてインポートしてください。」
› 作成したアプリケーションをアプリケーションID 116 として上書きしてインポートしてください。
• アプリ ID 116 への上書き import として進めます。まず deployments/default.json の現在値を確認し、APEXlang 側
のターゲット指定を 116 に合わせてから validate-and-import を実行します。
[中略]
• インポート完了しました。
sample-terminal-emulator/deployments/default.json の app id は既に 116 で、APEXDEV の workspace_id は
6339125071034524 と確認しました。そのうえで以下の条件で上書き import しています。
- DB 接続: local-26ai-apexdev
- Workspace: APEXDEV
- Application ID: 116
- Mode: validate-and-import
- Target resolution: update-existing
結果は live_validate: pass、import_status: pass、runtime_gate_status: pass です。ローカル lint は既存の構成
指摘で advisory fail ですが、ライブ検証と import は成功しています。
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
› Write tests for @filename
gpt-5.5 medium · ~/Documents/apexapps
APEXアプケーションを実行し、動作を確認します。
› プロンプトとして/newコマンドを入力すると、それまでの履歴を消去して新たなチャットが始まるように機能を追加し
てください。
• apex / apexlang スキルを使って進めます。今回は既存の Ajax callback に /new 分岐を追加し、サーバ側のセッショ
ン履歴 CHAT_HISTORY を消す形にします。
• Explored
└ Read SKILL.md (apexlang skill), SKILL.md (apex skill), p00001-home.apx
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
• 既存 callback は全入力を AI に渡す構造なので、/new は AI 呼び出し前のサーバ側コマンドとして処理します。これ
により /new 自体は履歴にも送られません。
[中略]
• /new コマンドを追加しました。
sample-terminal-emulator/pages/p00001-home.apx:117 の Ajax callback CHAT で、入力を trim + lowercase 判定
し、/new の場合は CHAT_HISTORY APEX collection を truncate して AI 呼び出しをスキップします。端末には 新しい
チャットを開始しました。 を返します。
検証:
- runtime validate --db-connection-name local-26ai-apexdev: pass
- apexlang validate: 既存の workspace-components / breadcrumb 関連 lint 指摘で fail
APEX アプリ 116 への再インポートは今回は実行していません。
─ Worked for 1m 15s ──────────────────────────────────────────────────────────────────────────────────────────
› Write tests for @filename
gpt-5.5 medium · ~/Documents/apexapps
/newコマンドが追加されました。先ほどと同様にインポートはされていないので、同じプロンプトを渡して、APEXアプリケーションをインポートしたのち、動作を確認します。
› 端末でバックスペースの入力が適切に行われていません。端末上でバックスペースを入力したときに、すでに入力され
ている直前の一文字を削除するようにしてください。日本語のかな漢字変換モードのときは、バックスペースは変換前
の文字列に対して有効に働くため、バックスペースにより削除する文字は、かな漢字変換モードになっていない場合に
限ります。1文字は英数字および漢字の場合があることを考慮すること。
• apex / apexlang スキルを使って、端末入力処理を修正します。今回はページ 1 の JavaScript 側で、バックスペース
時のバッファ削除と画面上の消去を実装します。
• Explored
└ Read SKILL.md (apex skill), SKILL.md (apexlang skill), p00001-home.apx
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
• バックスペースは xterm の onData で \x7f または \b として届く前提で処理します。IME 変換中は composition
event を見て、サーバ送信用バッファにも端末表示にも手を入れないようにします。
• Explored
└ Read routing-catalog-main.json, domains-catalog.json, routing-load-policy.json, workspace-
intelligence.json
──────────────────────────────────────────────────────────────────────────────────────────────────────────────
• これから sample-terminal-emulator/pages/p00001-home.apx:18 の JavaScript を編集します。英数字 1 セルと漢字/
全角 2 セルを区別して、最後の Unicode 文字単位をバッファと表示の両方から削除します。
「中略]
• 対応しました。
sample-terminal-emulator/pages/p00001-home.apx:31 の端末入力処理に、バックスペース対応を追加しました。
Backspace が \x7f または \b として届いた場合、IME 変換中でなければ入力バッファの直前 1 文字を削除し、端末表
示上も消去します。英数字は 1 セル、漢字などの全角文字は 2 セルとして扱います。
IME 変換中は compositionstart / compositionend / compositioncancel で判定し、バックスペースによるバッファ削
除は行いません。
検証:
- runtime validate --db-connection-name local-26ai-apexdev: pass
- apexlang validate: 既存の workspace-components / breadcrumb 関連 lint 指摘で fail
APEX アプリ 116 への再インポートはまだ実行していません。
─ Worked for 6m 58s ──────────────────────────────────────────────────────────────────────────────────────────
› Write tests for @filename
gpt-5.5 medium · ~/Documents/apexapps
対応されたようなので、先ほどと同様にAPEXアプリのインポートを指示し、動作確認を行います。






















