@agentproto/adapter-jcode 0.2.2 → 0.2.4
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/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.mjs
CHANGED
|
@@ -111,7 +111,7 @@ var jcode = defineAgentCli({
|
|
|
111
111
|
{
|
|
112
112
|
id: "model",
|
|
113
113
|
type: "string",
|
|
114
|
-
description: "Model id for this run (e.g. `claude-sonnet-4-5`). Forwarded to `--model`.",
|
|
114
|
+
description: "Model id for this run (e.g. `claude-sonnet-4-5`). Forwarded to `--model`. An id jcode can't resolve makes its CLI silently fall back to its OWN default model \u2014 the print arm detects that from the NDJSON `start` line's reported model and aborts the turn loudly instead (derived-from-model guard; see PrintArmOptions.expectedModel).",
|
|
115
115
|
bin_args_template: ["--model", "{value}"]
|
|
116
116
|
},
|
|
117
117
|
{
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;AA4CA,SAAS,mBAAA,GAA+D;AACtE,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,EAAE,QAAA,EAAU,WAAA,EAAa,MAAA,EAAQ,WAAA,EAAY;AAAA,IAC7C,EAAE,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAS;AAAA,IACvC,EAAE,QAAA,EAAU,YAAA,EAAc,MAAA,EAAQ,YAAA,EAAa;AAAA,IAC/C,EAAE,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAS;AAAA,IACvC,EAAE,QAAA,EAAU,UAAA,EAAY,MAAA,EAAQ,UAAA,EAAW;AAAA,IAC3C,EAAE,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAO;AAAA,IACnC,EAAE,QAAA,EAAU,SAAA,EAAW,MAAA,EAAQ,SAAA;AAAU,GAC3C;AAEA,EAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,EAAA,MAAM,MAA+C,EAAC;AAEtD,EAAA,KAAA,MAAW,EAAE,QAAA,EAAU,MAAA,EAAO,IAAK,SAAA,EAAW;AAC5C,IAAA,KAAA,MAAW,SAAS,UAAA,CAAW,EAAE,MAAM,KAAA,EAAO,QAAA,EAAU,CAAA,EAAG;AACzD,MAAA,MAAM,SAAS,KAAA,CAAM,EAAA;AACrB,MAAA,MAAM,WAAA,GAAc,OAAO,QAAA,CAAS,GAAG,IAAI,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AACvE,MAAA,MAAM,EAAA,GACJ,QAAA,KAAa,YAAA,GAAe,CAAA,WAAA,EAAc,MAAM,CAAA,CAAA,GAAK,WAAA;AACvD,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,MAAA,IAAA,CAAK,IAAI,EAAE,CAAA;AACX,MAAA,GAAA,CAAI,IAAA,CAAK,EAAE,EAAA,EAAI,QAAA,EAAU,CAAA;AAAA,IAC3B;AAAA,EACF;AAEA,EAAA,OAAO,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AACxB,IAAA,IAAI,CAAA,CAAE,aAAa,CAAA,CAAE,QAAA,SAAiB,CAAA,CAAE,QAAA,CAAS,aAAA,CAAc,CAAA,CAAE,QAAQ,CAAA;AACzE,IAAA,OAAO,CAAA,CAAE,EAAA,CAAG,aAAA,CAAc,CAAA,CAAE,EAAE,CAAA;AAAA,EAChC,CAAC,CAAA;AACH;AAEO,IAAM,QAAwB,cAAA,CAAe;AAAA,EAClD,IAAA,EAAM,OAAA;AAAA,EACN,EAAA,EAAI,OAAA;AAAA,EACJ,WAAA,EACE,0RAAA;AAAA,EAIF,OAAA,EAAS,OAAA;AAAA,EACT,GAAA,EAAK,OAAA;AAAA;AAAA;AAAA;AAAA,EAIL,QAAA,EAAU,CAAC,KAAK,CAAA;AAAA,EAChB,OAAA,EAAS;AAAA,IACP,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,sBAAA,EAAuB;AAAA,IAClD,EAAE,MAAA,EAAQ,MAAA,EAAQ,GAAA,EAAK,0BAAA,EAA2B;AAAA,IAClD,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,OAAA;AAAQ,GACtC;AAAA,EACA,aAAA,EAAe;AAAA,IACb,GAAA,EAAK,iBAAA;AAAA,IACL,KAAA,EAAO,sBAAA;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,UAAA,EAAY;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,GAAA,EAAK,cAAA;AAAA,IACL,KAAA,EAAO;AAAA,MACL,GAAA,EAAK;AAAA,QACH,mBAAA;AAAA,QACA,gBAAA;AAAA,QACA,oBAAA;AAAA,QACA,gBAAA;AAAA,QACA,kBAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AACF;AACF,GACF;AAAA,EACA,kBAAA,EAAoB,IAAA;AAAA,EACpB,OAAA,EAAS,cAAA;AAAA,EACT,QAAA,EAAU,OAAA;AAAA,EACV,KAAA,EAAO;AAAA;AAAA,IAEL,aAAA,EAAe,CAAC,UAAU,CAAA;AAAA,IAC1B,YAAY,EAAC;AAAA,IACb,MAAA,EAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,OAAA,EAAQ;AAAA,IAC1C,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,WAAA;AAAA,IACN,eAAA,EAAiB,IAAA;AAAA,IACjB,iBAAA,EAAmB;AAAA,GACrB;AAAA,EACA,cAAA,EAAgB,oBAAA;AAAA,EAChB,MAAA,EAAQ;AAAA,IACN,OAAA,EAAS,6BAAA;AAAA,IACT,SAAS,mBAAA,EAAoB;AAAA,IAC7B,GAAA,EAAK;AAAA,MACH,SAAA,EAAW,mBAAA;AAAA,MACX,MAAA,EAAQ,gBAAA;AAAA,MACR,UAAA,EAAY,oBAAA;AAAA,MACZ,MAAA,EAAQ,gBAAA;AAAA,MACR,QAAA,EAAU,kBAAA;AAAA,MACV,IAAA,EAAM,cAAA;AAAA,MACN,OAAA,EAAS;AAAA;AACX,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,SAAA,EAAW,IAAA;AAAA,IACX,UAAA,EAAY,IAAA;AAAA,IACZ,UAAA,EAAY,IAAA;AAAA,IACZ,OAAA,EAAS,IAAA;AAAA,IACT,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW,IAAA;AAAA,IACX,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,OAAA,EAAS;AAAA,IACP;AAAA,MACE,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EACE,2EAAA;AAAA,MACF,iBAAA,EAAmB,CAAC,SAAA,EAAW,SAAS;AAAA,KAC1C;AAAA,IACA;AAAA,MACE,EAAA,EAAI,UAAA;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EACE,mFAAA;AAAA,MACF,iBAAA,EAAmB,CAAC,YAAA,EAAc,SAAS;AAAA,KAC7C;AAAA,IACA;AAAA,MACE,EAAA,EAAI,kBAAA;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,WAAA,EACE,qFAAA;AAAA,MACF,iBAAA,EAAmB,CAAC,oBAAA,EAAsB,SAAS;AAAA;AACrD,GACF;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW,CAAC,MAAA,EAAQ,YAAA,EAAc,eAAe;AAAA,GACnD;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK;AAAA,MACH,OAAA,EAAS,YAAA;AAAA,MACT,MAAA,EACE;AAAA,KAGJ;AAAA,IACA,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,YAAA;AAAA,MACT,MAAA,EACE;AAAA;AAGJ,GACF;AAAA,EACA,MAAM,CAAC,OAAA,EAAS,QAAQ,OAAA,EAAS,eAAA,EAAiB,UAAU,gBAAgB;AAC9E,CAAC;AAEM,SAAS,YAAA,GAAgC;AAC9C,EAAA,OAAO,sBAAsB,KAAK,CAAA;AACpC;AAEA,SAAS,mBAAmB,EAAA,EAA2C;AACrE,EAAA,IAAI,EAAA,KAAO,aAAa,OAAO,WAAA;AAC/B,EAAA,IACE,EAAA,KAAO,YACP,EAAA,KAAO,YAAA,IACP,OAAO,UAAA,IACP,EAAA,KAAO,UACP,EAAA,KAAO,SAAA;AAEP,IAAA,OAAO,kBAAA;AACT,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,iBAAA,GAAwC,OAAO,GAAA,EAAK,GAAA,KAAQ;AACvE,EAAA,MAAM,IAAA,GAAO,2BAA2B,GAAG,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAkC,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACjE,GAAG,CAAA;AAAA,IACH,OAAA,EAAS,kBAAA,CAAmB,CAAA,CAAE,EAAE,CAAA;AAAA,IAChC,IAAA,EAAM;AAAA,MACJ,GAAG,CAAA,CAAE,IAAA;AAAA,MACL,OAAA,EAAS,CAAC,CAAC,GAAA,CAAI,IAAI,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,KAAA,GAAQ,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,MAAM,EAAE;AAAA;AAC1E,GACF,CAAE,CAAA;AACF,EAAA,OAAO;AAAA,IACL,GAAG,IAAA;AAAA,IACH,MAAA,EAAQ,YAAA;AAAA,IACR,YAAA,EAAc,MAAA;AAAA,IACd,SAAA;AAAA,IACA,aAAa,EAAE,UAAA,EAAY,OAAO,YAAA,EAAc,KAAA,EAAO,SAAS,KAAA;AAAM,GACxE;AACF","file":"index.mjs","sourcesContent":["/**\n * @agentproto/adapter-jcode — AIP-45 adapter for 1jehuang/jcode.\n *\n * jcode is a RAM-efficient Rust coding agent with multi-provider support\n * (Claude, OpenAI, Gemini, OpenRouter, Copilot, DeepSeek, Groq, Mistral,\n * Ollama, and OpenAI-compatible endpoints). No ACP mode is documented, so\n * this is a `protocol: \"print\"` (headless) arm: we spawn `jcode run\n * --ndjson \"<prompt>\"` per turn and map its NDJSON stream (see the\n * `jcode-ndjson` mapper in the driver's print-arm).\n *\n * Argv order matters: `run` is a clap SUBCOMMAND, so it lives in\n * `bin_args` (the spawn base) — every composed flag (`--ndjson`,\n * `--model`, `--resume`) must come AFTER it or jcode rejects the argv\n * (`error: unexpected argument '--json' found`). The prompt is\n * positional, not a flag.\n *\n * import { jcode, jcodeRuntime } from \"@agentproto/adapter-jcode\"\n * const session = await jcodeRuntime().start({\n * env: { ANTHROPIC_API_KEY: \"sk-...\" },\n * })\n * for await (const evt of session.send({ role: \"user\", content: \"...\" })) {\n * console.log(evt)\n * }\n * await session.close()\n */\n\nimport {\n createAgentCliRuntime,\n defineAgentCli,\n type AgentCliHandle,\n type AgentCliRuntime,\n} from \"@agentproto/driver-agent-cli\"\nimport { listModels } from \"@agentproto/model-catalog\"\nimport {\n deriveDeclaredCapabilities,\n type CapabilityStrategy,\n type ProviderCapability,\n} from \"@agentproto/provider-kit\"\n\n/**\n * Build jcode's model menu from the shared provider catalog. jcode accepts\n * bare model ids via `--model`; the provider is inferred from the id or\n * specified explicitly via `--provider`.\n */\nfunction buildJcodeModelMenu(): Array<{ id: string; provider: string }> {\n const supported = [\n { provider: \"anthropic\", prefix: \"anthropic\" },\n { provider: \"openai\", prefix: \"openai\" },\n { provider: \"openrouter\", prefix: \"openrouter\" },\n { provider: \"google\", prefix: \"google\" },\n { provider: \"deepseek\", prefix: \"deepseek\" },\n { provider: \"groq\", prefix: \"groq\" },\n { provider: \"mistral\", prefix: \"mistral\" },\n ] as const\n\n const seen = new Set<string>()\n const out: Array<{ id: string; provider: string }> = []\n\n for (const { provider, prefix } of supported) {\n for (const model of listModels({ kind: \"llm\", provider })) {\n const bareId = model.id\n const canonicalId = bareId.includes(\"/\") ? bareId : `${prefix}/${bareId}`\n const id =\n provider === \"openrouter\" ? `openrouter/${bareId}` : canonicalId\n if (seen.has(id)) continue\n seen.add(id)\n out.push({ id, provider })\n }\n }\n\n return out.sort((a, b) => {\n if (a.provider !== b.provider) return a.provider.localeCompare(b.provider)\n return a.id.localeCompare(b.id)\n })\n}\n\nexport const jcode: AgentCliHandle = defineAgentCli({\n name: \"jcode\",\n id: \"jcode\",\n description:\n \"1jehuang/jcode — RAM-efficient Rust coding agent with semantic memory, \" +\n \"multi-agent swarm, and broad provider support (Claude, OpenAI, Gemini, \" +\n \"OpenRouter, Copilot, DeepSeek, Groq, Mistral, Ollama). Spawned via \" +\n \"`jcode run --ndjson` in headless mode. No ACP; print/headless arm.\",\n version: \"0.1.0\",\n bin: \"jcode\",\n // `run` is a clap subcommand — it must precede every composed flag, so it\n // lives in the spawn base rather than as a print `prompt_flag` (which\n // would land AFTER `--ndjson`/`--model` and be rejected by jcode).\n bin_args: [\"run\"],\n install: [\n { method: \"brew\", package: \"1jehuang/jcode/jcode\" },\n { method: \"curl\", url: \"https://jcode.sh/install\" },\n { method: \"cargo\", package: \"jcode\" },\n ],\n version_check: {\n cmd: \"jcode --version\",\n parse: \"(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\",\n range: \">=0.1.0\",\n timeout_ms: 15_000,\n },\n auth: {\n ref: \"./SECRETS.md\",\n state: {\n env: [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\",\n \"OPENROUTER_API_KEY\",\n \"GOOGLE_API_KEY\",\n \"DEEPSEEK_API_KEY\",\n \"GROQ_API_KEY\",\n \"MISTRAL_API_KEY\",\n ],\n },\n },\n modelDerivedApiKey: true,\n sandbox: \"./SANDBOX.md\",\n protocol: \"print\",\n print: {\n // No prompt_flag: the message is positional after `run` (in bin_args).\n output_format: [\"--ndjson\"],\n pre_prompt: [],\n resume: { flag: \"--resume\", kind: \"value\" },\n event_schema: \"jcode-ndjson\",\n },\n session: {\n mode: \"ephemeral\",\n idle_timeout_ms: 1_800_000,\n context_carryover: false,\n },\n routeSelection: \"derived-from-model\",\n models: {\n default: \"anthropic/claude-sonnet-4-5\",\n allowed: buildJcodeModelMenu(),\n env: {\n anthropic: \"ANTHROPIC_API_KEY\",\n openai: \"OPENAI_API_KEY\",\n openrouter: \"OPENROUTER_API_KEY\",\n google: \"GOOGLE_API_KEY\",\n deepseek: \"DEEPSEEK_API_KEY\",\n groq: \"GROQ_API_KEY\",\n mistral: \"MISTRAL_API_KEY\",\n },\n },\n capabilities: {\n streaming: true,\n tool_calls: true,\n sub_agents: true,\n file_io: true,\n multimodal: false,\n resumable: true,\n bidirectional: false,\n },\n options: [\n {\n id: \"model\",\n type: \"string\",\n description:\n \"Model id for this run (e.g. `claude-sonnet-4-5`). Forwarded to `--model`.\",\n bin_args_template: [\"--model\", \"{value}\"],\n },\n {\n id: \"provider\",\n type: \"string\",\n description:\n \"Provider override (e.g. `claude`, `openai`, `gemini`). Forwarded to `--provider`.\",\n bin_args_template: [\"--provider\", \"{value}\"],\n },\n {\n id: \"provider_profile\",\n type: \"string\",\n description:\n \"Named provider profile for multi-account setups. Forwarded to `--provider-profile`.\",\n bin_args_template: [\"--provider-profile\", \"{value}\"],\n },\n ],\n continuation: {\n default: \"none\",\n supported: [\"none\", \"transcript\", \"native-resume\"],\n },\n metadata: {\n acp: {\n checked: \"2026-08-11\",\n result:\n \"jcode has no documented ACP mode. The CLI exposes `jcode serve` \" +\n \"(background server) and `jcode connect` (client attach), but neither \" +\n \"speaks ACP over stdio. Adapter stays print/headless until ACP ships.\",\n },\n swarm: {\n checked: \"2026-08-11\",\n result:\n \"jcode supports multi-agent swarm coordination: automatic conflict \" +\n \"detection, inter-agent messaging (DM + broadcast), and repo-scoped \" +\n \"collaboration. Not yet wired into the adapter.\",\n },\n },\n tags: [\"jcode\", \"rust\", \"print\", \"agent-runtime\", \"coding\", \"multi-provider\"],\n})\n\nexport function jcodeRuntime(): AgentCliRuntime {\n return createAgentCliRuntime(jcode)\n}\n\nfunction apiModeForProvider(id: string): ProviderCapability[\"apiMode\"] {\n if (id === \"anthropic\") return \"anthropic\"\n if (\n id === \"openai\" ||\n id === \"openrouter\" ||\n id === \"deepseek\" ||\n id === \"groq\" ||\n id === \"mistral\"\n )\n return \"chat_completions\"\n return undefined\n}\n\nexport const jcodeCapabilities: CapabilityStrategy = async (def, ctx) => {\n const base = deriveDeclaredCapabilities(def)\n const providers: ProviderCapability[] = base.providers.map((p) => ({\n ...p,\n apiMode: apiModeForProvider(p.id),\n cred: {\n ...p.cred,\n present: !!ctx.env[p.cred.source.kind === \"env\" ? p.cred.source.var : \"\"],\n },\n }))\n return {\n ...base,\n source: \"discovered\",\n discoverable: \"live\",\n providers,\n application: { modelApply: \"arg\", postureApply: \"arg\", coupled: false },\n }\n}\n\nexport type { AgentCliHandle, AgentCliRuntime }\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @agentproto/adapter-jcode — AIP-45 adapter for 1jehuang/jcode.\n *\n * jcode is a RAM-efficient Rust coding agent with multi-provider support\n * (Claude, OpenAI, Gemini, OpenRouter, Copilot, DeepSeek, Groq, Mistral,\n * Ollama, and OpenAI-compatible endpoints). No ACP mode is documented, so\n * this is a `protocol: \"print\"` (headless) arm: we spawn `jcode run\n * --ndjson \"<prompt>\"` per turn and map its NDJSON stream (see the\n * `jcode-ndjson` mapper in the driver's print-arm).\n *\n * Argv order matters: `run` is a clap SUBCOMMAND, so it lives in\n * `bin_args` (the spawn base) — every composed flag (`--ndjson`,\n * `--model`, `--resume`) must come AFTER it or jcode rejects the argv\n * (`error: unexpected argument '--json' found`). The prompt is\n * positional, not a flag.\n *\n * import { jcode, jcodeRuntime } from \"@agentproto/adapter-jcode\"\n * const session = await jcodeRuntime().start({\n * env: { ANTHROPIC_API_KEY: \"sk-...\" },\n * })\n * for await (const evt of session.send({ role: \"user\", content: \"...\" })) {\n * console.log(evt)\n * }\n * await session.close()\n */\n\nimport {\n createAgentCliRuntime,\n defineAgentCli,\n type AgentCliHandle,\n type AgentCliRuntime,\n} from \"@agentproto/driver-agent-cli\"\nimport { listModels } from \"@agentproto/model-catalog\"\nimport {\n deriveDeclaredCapabilities,\n type CapabilityStrategy,\n type ProviderCapability,\n} from \"@agentproto/provider-kit\"\n\n/**\n * Build jcode's model menu from the shared provider catalog. jcode accepts\n * bare model ids via `--model`; the provider is inferred from the id or\n * specified explicitly via `--provider`.\n */\nfunction buildJcodeModelMenu(): Array<{ id: string; provider: string }> {\n const supported = [\n { provider: \"anthropic\", prefix: \"anthropic\" },\n { provider: \"openai\", prefix: \"openai\" },\n { provider: \"openrouter\", prefix: \"openrouter\" },\n { provider: \"google\", prefix: \"google\" },\n { provider: \"deepseek\", prefix: \"deepseek\" },\n { provider: \"groq\", prefix: \"groq\" },\n { provider: \"mistral\", prefix: \"mistral\" },\n ] as const\n\n const seen = new Set<string>()\n const out: Array<{ id: string; provider: string }> = []\n\n for (const { provider, prefix } of supported) {\n for (const model of listModels({ kind: \"llm\", provider })) {\n const bareId = model.id\n const canonicalId = bareId.includes(\"/\") ? bareId : `${prefix}/${bareId}`\n const id =\n provider === \"openrouter\" ? `openrouter/${bareId}` : canonicalId\n if (seen.has(id)) continue\n seen.add(id)\n out.push({ id, provider })\n }\n }\n\n return out.sort((a, b) => {\n if (a.provider !== b.provider) return a.provider.localeCompare(b.provider)\n return a.id.localeCompare(b.id)\n })\n}\n\nexport const jcode: AgentCliHandle = defineAgentCli({\n name: \"jcode\",\n id: \"jcode\",\n description:\n \"1jehuang/jcode — RAM-efficient Rust coding agent with semantic memory, \" +\n \"multi-agent swarm, and broad provider support (Claude, OpenAI, Gemini, \" +\n \"OpenRouter, Copilot, DeepSeek, Groq, Mistral, Ollama). Spawned via \" +\n \"`jcode run --ndjson` in headless mode. No ACP; print/headless arm.\",\n version: \"0.1.0\",\n bin: \"jcode\",\n // `run` is a clap subcommand — it must precede every composed flag, so it\n // lives in the spawn base rather than as a print `prompt_flag` (which\n // would land AFTER `--ndjson`/`--model` and be rejected by jcode).\n bin_args: [\"run\"],\n install: [\n { method: \"brew\", package: \"1jehuang/jcode/jcode\" },\n { method: \"curl\", url: \"https://jcode.sh/install\" },\n { method: \"cargo\", package: \"jcode\" },\n ],\n version_check: {\n cmd: \"jcode --version\",\n parse: \"(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\",\n range: \">=0.1.0\",\n timeout_ms: 15_000,\n },\n auth: {\n ref: \"./SECRETS.md\",\n state: {\n env: [\n \"ANTHROPIC_API_KEY\",\n \"OPENAI_API_KEY\",\n \"OPENROUTER_API_KEY\",\n \"GOOGLE_API_KEY\",\n \"DEEPSEEK_API_KEY\",\n \"GROQ_API_KEY\",\n \"MISTRAL_API_KEY\",\n ],\n },\n },\n modelDerivedApiKey: true,\n sandbox: \"./SANDBOX.md\",\n protocol: \"print\",\n print: {\n // No prompt_flag: the message is positional after `run` (in bin_args).\n output_format: [\"--ndjson\"],\n pre_prompt: [],\n resume: { flag: \"--resume\", kind: \"value\" },\n event_schema: \"jcode-ndjson\",\n },\n session: {\n mode: \"ephemeral\",\n idle_timeout_ms: 1_800_000,\n context_carryover: false,\n },\n routeSelection: \"derived-from-model\",\n models: {\n default: \"anthropic/claude-sonnet-4-5\",\n allowed: buildJcodeModelMenu(),\n env: {\n anthropic: \"ANTHROPIC_API_KEY\",\n openai: \"OPENAI_API_KEY\",\n openrouter: \"OPENROUTER_API_KEY\",\n google: \"GOOGLE_API_KEY\",\n deepseek: \"DEEPSEEK_API_KEY\",\n groq: \"GROQ_API_KEY\",\n mistral: \"MISTRAL_API_KEY\",\n },\n },\n capabilities: {\n streaming: true,\n tool_calls: true,\n sub_agents: true,\n file_io: true,\n multimodal: false,\n resumable: true,\n bidirectional: false,\n },\n options: [\n {\n id: \"model\",\n type: \"string\",\n description:\n \"Model id for this run (e.g. `claude-sonnet-4-5`). Forwarded to `--model`. \" +\n \"An id jcode can't resolve makes its CLI silently fall back to its OWN \" +\n \"default model — the print arm detects that from the NDJSON `start` \" +\n \"line's reported model and aborts the turn loudly instead \" +\n \"(derived-from-model guard; see PrintArmOptions.expectedModel).\",\n bin_args_template: [\"--model\", \"{value}\"],\n },\n {\n id: \"provider\",\n type: \"string\",\n description:\n \"Provider override (e.g. `claude`, `openai`, `gemini`). Forwarded to `--provider`.\",\n bin_args_template: [\"--provider\", \"{value}\"],\n },\n {\n id: \"provider_profile\",\n type: \"string\",\n description:\n \"Named provider profile for multi-account setups. Forwarded to `--provider-profile`.\",\n bin_args_template: [\"--provider-profile\", \"{value}\"],\n },\n ],\n continuation: {\n default: \"none\",\n supported: [\"none\", \"transcript\", \"native-resume\"],\n },\n metadata: {\n acp: {\n checked: \"2026-08-11\",\n result:\n \"jcode has no documented ACP mode. The CLI exposes `jcode serve` \" +\n \"(background server) and `jcode connect` (client attach), but neither \" +\n \"speaks ACP over stdio. Adapter stays print/headless until ACP ships.\",\n },\n swarm: {\n checked: \"2026-08-11\",\n result:\n \"jcode supports multi-agent swarm coordination: automatic conflict \" +\n \"detection, inter-agent messaging (DM + broadcast), and repo-scoped \" +\n \"collaboration. Not yet wired into the adapter.\",\n },\n },\n tags: [\"jcode\", \"rust\", \"print\", \"agent-runtime\", \"coding\", \"multi-provider\"],\n})\n\nexport function jcodeRuntime(): AgentCliRuntime {\n return createAgentCliRuntime(jcode)\n}\n\nfunction apiModeForProvider(id: string): ProviderCapability[\"apiMode\"] {\n if (id === \"anthropic\") return \"anthropic\"\n if (\n id === \"openai\" ||\n id === \"openrouter\" ||\n id === \"deepseek\" ||\n id === \"groq\" ||\n id === \"mistral\"\n )\n return \"chat_completions\"\n return undefined\n}\n\nexport const jcodeCapabilities: CapabilityStrategy = async (def, ctx) => {\n const base = deriveDeclaredCapabilities(def)\n const providers: ProviderCapability[] = base.providers.map((p) => ({\n ...p,\n apiMode: apiModeForProvider(p.id),\n cred: {\n ...p.cred,\n present: !!ctx.env[p.cred.source.kind === \"env\" ? p.cred.source.var : \"\"],\n },\n }))\n return {\n ...base,\n source: \"discovered\",\n discoverable: \"live\",\n providers,\n application: { modelApply: \"arg\", postureApply: \"arg\", coupled: false },\n }\n}\n\nexport type { AgentCliHandle, AgentCliRuntime }\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentproto/adapter-jcode",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "@agentproto/adapter-jcode — AIP-45 adapter for 1jehuang/jcode, a RAM-efficient Rust coding agent. Spawns `jcode run` in headless mode.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentproto",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"access": "public"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@agentproto/driver-agent-cli": "2.
|
|
45
|
-
"@agentproto/model-catalog": "0.
|
|
46
|
-
"@agentproto/provider-kit": "0.4.
|
|
44
|
+
"@agentproto/driver-agent-cli": "2.4.0",
|
|
45
|
+
"@agentproto/model-catalog": "0.9.0",
|
|
46
|
+
"@agentproto/provider-kit": "0.4.2"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/node": "^25.6.2",
|