Implemented the next parity slice.

New runtime/code:

  - src/ask_user_runtime.py
  - src/team_runtime.py

  New real tools in src/agent_tools.py:

  - ask_user_question
  - team_create
  - team_delete
  - team_list
  - team_get
  - send_message
  - team_messages
  - notebook_edit
This commit is contained in:
Abdelrahman Abdallah
2026-04-07 02:51:30 +02:00
parent a54c90b18f
commit a5629295ac
21 changed files with 1886 additions and 24 deletions
+83
View File
@@ -10,6 +10,7 @@ from typing import Callable
from .background_runtime import BackgroundSessionRuntime, build_background_worker_command
from .account_runtime import AccountRuntime
from .ask_user_runtime import AskUserRuntime
from .agent_runtime import LocalCodingAgent
from .agent_types import (
AgentPermissions,
@@ -37,6 +38,7 @@ from .remote_runtime import (
run_teleport_mode,
)
from .search_runtime import SearchRuntime
from .team_runtime import TeamRuntime
from .runtime import PortRuntime
from .session_store import (
StoredAgentSession,
@@ -613,6 +615,10 @@ def build_parser() -> argparse.ArgumentParser:
account_login_parser.add_argument('--cwd', default='.')
account_logout_parser = subparsers.add_parser('account-logout', help='clear the active local account session')
account_logout_parser.add_argument('--cwd', default='.')
ask_status_parser = subparsers.add_parser('ask-status', help='show local ask-user runtime status')
ask_status_parser.add_argument('--cwd', default='.')
ask_history_parser = subparsers.add_parser('ask-history', help='show local ask-user interaction history')
ask_history_parser.add_argument('--cwd', default='.')
search_status_parser = subparsers.add_parser('search-status', help='show local search runtime status')
search_status_parser.add_argument('--cwd', default='.')
search_status_parser.add_argument('--provider')
@@ -661,6 +667,25 @@ def build_parser() -> argparse.ArgumentParser:
config_set_parser.add_argument('value_json')
config_set_parser.add_argument('--source', default='local')
config_set_parser.add_argument('--cwd', default='.')
teams_status_parser = subparsers.add_parser('team-status', help='show local collaboration team runtime summary')
teams_status_parser.add_argument('--cwd', default='.')
teams_list_parser = subparsers.add_parser('team-list', help='list local collaboration teams')
teams_list_parser.add_argument('--cwd', default='.')
teams_list_parser.add_argument('--query')
team_get_parser = subparsers.add_parser('team-get', help='show one local collaboration team')
team_get_parser.add_argument('team_name')
team_get_parser.add_argument('--cwd', default='.')
team_create_parser = subparsers.add_parser('team-create', help='create a local collaboration team')
team_create_parser.add_argument('team_name')
team_create_parser.add_argument('--description')
team_create_parser.add_argument('--member', action='append', default=[])
team_create_parser.add_argument('--cwd', default='.')
team_delete_parser = subparsers.add_parser('team-delete', help='delete a local collaboration team')
team_delete_parser.add_argument('team_name')
team_delete_parser.add_argument('--cwd', default='.')
team_messages_parser = subparsers.add_parser('team-messages', help='show local team messages')
team_messages_parser.add_argument('--team-name')
team_messages_parser.add_argument('--cwd', default='.')
show_command = subparsers.add_parser('show-command', help='show one mirrored command entry by exact name')
show_command.add_argument('name')
@@ -905,6 +930,16 @@ def main(argv: list[str] | None = None) -> int:
runtime = AccountRuntime.from_workspace(Path(args.cwd).resolve())
print(runtime.logout().as_text())
return 0
if args.command == 'ask-status':
runtime = AskUserRuntime.from_workspace(Path(args.cwd).resolve())
print('# Ask User')
print()
print(runtime.render_summary())
return 0
if args.command == 'ask-history':
runtime = AskUserRuntime.from_workspace(Path(args.cwd).resolve())
print(runtime.render_history())
return 0
if args.command == 'search-status':
runtime = SearchRuntime.from_workspace(Path(args.cwd).resolve())
if args.provider:
@@ -1003,6 +1038,54 @@ def main(argv: list[str] | None = None) -> int:
print(f'effective_key_count={mutation.effective_key_count}')
print(runtime.render_value(args.key_path))
return 0
if args.command == 'team-status':
runtime = TeamRuntime.from_workspace(Path(args.cwd).resolve())
print('# Teams')
print()
print(runtime.render_summary())
return 0
if args.command == 'team-list':
runtime = TeamRuntime.from_workspace(Path(args.cwd).resolve())
print(runtime.render_teams_index(query=args.query))
return 0
if args.command == 'team-get':
runtime = TeamRuntime.from_workspace(Path(args.cwd).resolve())
try:
print(runtime.render_team(args.team_name))
except KeyError:
print(f'Unknown team: {args.team_name}')
return 1
return 0
if args.command == 'team-create':
runtime = TeamRuntime.from_workspace(Path(args.cwd).resolve())
try:
team = runtime.create_team(
args.team_name,
description=args.description,
members=args.member,
)
except KeyError:
print(f'Team already exists: {args.team_name}')
return 1
print(f'created team {team.name}')
return 0
if args.command == 'team-delete':
runtime = TeamRuntime.from_workspace(Path(args.cwd).resolve())
try:
team = runtime.delete_team(args.team_name)
except KeyError:
print(f'Unknown team: {args.team_name}')
return 1
print(f'deleted team {team.name}')
return 0
if args.command == 'team-messages':
runtime = TeamRuntime.from_workspace(Path(args.cwd).resolve())
try:
print(runtime.render_messages(team_name=args.team_name))
except KeyError:
print(f'Unknown team: {args.team_name}')
return 1
return 0
if args.command == 'show-command':
module = get_command(args.name)
if module is None: