Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions agents/intern/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "@corbits/agent-intern",
"version": "0.1.0",
"private": true,
"type": "module",
"license": "SEE LICENSE IN LICENSE.md",
"exports": {
".": {
"types": "./src/index.ts",
"default": "./src/index.ts"
}
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,38 @@
import type { DirectorPackage } from "../types.js";
import { INTERN_TOOLS } from "../tool-sets.js";

/**
* Mechanical intern worker — 1:1 port of gaas intern.md
* (`abklabs/agents` plugins/gaas/agents/intern.md @ 6e16b6c).
* Tool-name mapping only (ask → ask_director). Path writes live on the
* intern mount and in the dispatch brief, not in extra prompt essays.
*/
export const internPackage: DirectorPackage = {
export type AgentPackage = {
readonly id: "intern";
readonly primaryIntent: string;
readonly outOfLane: readonly string[];
readonly description: string;
readonly systemPrompt: string;
readonly optionalSkills: readonly string[];
readonly tools: {
readonly allow: readonly string[];
};
readonly spawn: {
readonly maySpawn: false;
};
readonly modelRole: "implement";
readonly tier: "leaf";
};

const INTERN_TOOLS = [
"run_shell",
"read_file",
"list_dir",
"write_file",
"edit_file",
"delete_file",
"skill_search",
"use_skill",
] as const;

export const internPackage: AgentPackage = {
id: "intern",
primaryIntent:
"Execute clear mechanical instructions exactly — zero judgment, zero invention",
Expand Down
7 changes: 7 additions & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions evals/completion/tasks/decline-refactor/fixture/notes.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
export const notes: string[] = [];

// ts-prune-ignore-next
export function addNote(note: string): void {
notes.push(note);
}
1 change: 1 addition & 0 deletions evals/completion/tasks/stall-read/fixture/data.ts
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
// ts-prune-ignore-next
export const data = { seed: 7 };
1 change: 1 addition & 0 deletions evals/completion/tasks/sum-fix/fixture/sum.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
// ts-prune-ignore-next
export function total(values: number[]): number {
let sum = 0;
for (const value of values) {
Expand Down
1 change: 1 addition & 0 deletions evals/completion/tasks/version-endpoint/fixture/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ export interface Reply {
body: unknown;
}

// ts-prune-ignore-next
export function handleRequest(method: string, path: string): Reply {
if (method === "GET" && path === "/health") {
return { status: 200, body: { ok: true } };
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
"tar": "^7.5.1"
},
"dependencies": {
"@corbits/agent-intern": "workspace:*",
"@corbits/codex-provider": "github:corbitsdev/corbits-codex-provider",
"@corbits/oauth-core": "github:corbitsdev/corbits-oauth-core",
"@corbits/openai-responses": "github:corbitsdev/corbits-openai-responses",
Expand Down
12 changes: 0 additions & 12 deletions scripts/dead-export-allowlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,6 @@ vendor/
src/auth/codex/constants.ts: CODEX_REFRESH_SKEW_MS
src/auth/codex/constants.ts: CODEX_HEADLESS_REFRESH_INTERVAL_MS

# Plugin fixture entry point. Loaded by file path from the fixture's plugin
# manifest by the plugin-registration tests, so it has no static importers.
tests/fixtures/plugins/implement-feature/src/index.ts

# Eval completion-harness task fixtures (CL-7932 lane). Loaded by file path
# from each task's script.json by the harness runner, so they have no static
# importers.
evals/completion/tasks/decline-refactor/fixture/notes.ts: addNote
evals/completion/tasks/stall-read/fixture/data.ts: data
evals/completion/tasks/sum-fix/fixture/sum.ts: total
evals/completion/tasks/version-endpoint/fixture/service.ts: handleRequest

# ts-prune parser false positives: bare tokens on `as const satisfies ...`
# lines inside live exports. None of these is an export declaration.
src/provider/reasoning-effort.ts: satisfies
Expand Down
11 changes: 10 additions & 1 deletion src/agent/directors/intern/package.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import { describe, expect, test } from "bun:test";

import { internPackage } from "./package.js";
import { internPackage, type AgentPackage } from "@corbits/agent-intern";
import { DIRECTOR_REGISTRY } from "../registry.js";
import { INTERN_TOOLS } from "../tool-sets.js";

describe("internPackage", () => {
test("workspace package is an AgentPackage used by the registry", () => {
const pkg: AgentPackage = internPackage;
expect(pkg.id).toBe("intern");
expect(DIRECTOR_REGISTRY.intern).toBe(internPackage);
expect([...(pkg.tools?.allow ?? [])]).toEqual([...INTERN_TOOLS]);
});

test("systemPrompt is mechanical executor (gaas intern port)", () => {
const p = internPackage.systemPrompt;
expect(p).toMatch(/intern assistant/);
Expand Down
2 changes: 1 addition & 1 deletion src/agent/directors/registry.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { internPackage } from "@corbits/agent-intern";
import type { AgentProfile, CapabilityFilter } from "../profile-types.js";
import { randPackage } from "./rand/package.js";
import { bruckheimerPackage } from "./bruckheimer/package.js";
Expand All @@ -8,7 +9,6 @@ import { explorerPackage } from "./explorer/package.js";
import { gaasbotPackage } from "./gaasbot/package.js";
import { greybeardPackage } from "./greybeard/package.js";
import { builderPackage } from "./builder/package.js";
import { internPackage } from "./intern/package.js";
import { migratorPackage } from "./migrator/package.js";
import { neckbeardPackage } from "./neckbeard/package.js";
import { counselPackage } from "./counsel/package.js";
Expand Down
2 changes: 2 additions & 0 deletions tests/fixtures/plugins/implement-feature/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import { implementFeature } from "./workflows/implement-feature.js";
import type { CommandPlugin } from "../../../../../src/tui/commands/registry.js";
import type { WorkflowPlugin } from "../../../../../src/workflows/definition.js";

// ts-prune-ignore-next
export const workflowPlugin: WorkflowPlugin = {
workflows: [implementFeature],
};

// ts-prune-ignore-next
export const commandPlugin: CommandPlugin = {
commands: [
{
Expand Down
2 changes: 2 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"composite": false,
"baseUrl": ".",
"paths": {
"@corbits/agent-intern": ["./agents/intern/src/index.ts"],
"@corbits/provider-opencode-go": ["./packages/opencode-go/src/index.ts"],
"@corbits/first-class-providers": [
"./packages/first-class-providers/src/index.ts"
Expand All @@ -16,6 +17,7 @@
"include": [
"src/**/*.ts",
"packages/**/*.ts",
"agents/**/*.ts",
"tests/**/*.ts",
"evals/**/*.ts",
"scripts/**/*.ts"
Expand Down
Loading