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
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ docs(spec): clarify subtask rights intersection

## Reporting bugs and proposing features

Open a [GitHub issue](https://github.com/alteri-one/alteri-one/issues) using the templates. Security issues go through the [private channel](SECURITY.md), never a public issue.
Open a [GitHub issue](https://github.com/dip-develop/alteri-one/issues) using the templates. Security issues go through the [private channel](SECURITY.md), never a public issue.

## License

Expand Down
2 changes: 1 addition & 1 deletion NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ AlteriOne
Copyright 2026 The AlteriOne Authors

This product includes software developed by The AlteriOne Authors
(https://github.com/alteri-one/alteri-one).
(https://github.com/dip-develop/alteri-one).

Licensed under the Apache License, Version 2.0 (the "License").
You may not use this product except in compliance with the License.
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# AlteriOne

[![CI](https://github.com/alteri-one/alteri-one/actions/workflows/ci.yml/badge.svg)](https://github.com/alteri-one/alteri-one/actions/workflows/ci.yml)
[![CI](https://github.com/dip-develop/alteri-one/actions/workflows/ci.yml/badge.svg)](https://github.com/dip-develop/alteri-one/actions/workflows/ci.yml)
[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
[![Discussions](https://img.shields.io/badge/discussions-welcome-brightgreen.svg)](https://github.com/alteri-one/alteri-one/discussions)
[![Discussions](https://img.shields.io/badge/discussions-welcome-brightgreen.svg)](https://github.com/dip-develop/alteri-one/discussions)

**A personal universal assistant: one runtime, three run modes.**

Expand Down Expand Up @@ -63,7 +63,7 @@ One Dart workspace (one `pubspec.lock`, shared resolution) plus Melos. Packages
Requirements: [Dart](https://dart.dev) `^3.13.0` (a Flutter SDK gives you Dart; the client also needs [Flutter](https://flutter.dev) `3.47+`), and [Melos](https://pub.dev/packages/melos) 7.

```sh
git clone https://github.com/alteri-one/alteri-one.git
git clone https://github.com/dip-develop/alteri-one.git
cd alteri-one
flutter pub get # resolves the whole workspace, one lock file
melos run format # formatting
Expand Down Expand Up @@ -91,7 +91,7 @@ Contributions are welcome — for code, documentation, extension examples, and b
- [Contributing guide](CONTRIBUTING.md) — development setup, conventions, and the DCO sign-off (`git commit -s`; no CLA).
- [Code of Conduct](CODE_OF_CONDUCT.md)
- [Security policy](SECURITY.md) — please report vulnerabilities privately.
- Questions and ideas: [GitHub Discussions](https://github.com/alteri-one/alteri-one/discussions).
- Questions and ideas: [GitHub Discussions](https://github.com/dip-develop/alteri-one/discussions).

## License

Expand Down
2 changes: 1 addition & 1 deletion TRADEMARK.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,4 @@ The spec's "personal builds" mechanism (`distribution.yaml`) intentionally gives

## Contact

Questions about the name: open a [discussion](https://github.com/alteri-one/alteri-one/discussions) or write to the address in [SECURITY.md](SECURITY.md) with "trademark" in the subject.
Questions about the name: open a [discussion](https://github.com/dip-develop/alteri-one/discussions) or write to the address in [SECURITY.md](SECURITY.md) with "trademark" in the subject.
20 changes: 18 additions & 2 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,20 @@ analyzer:

linter:
rules:
# Section 7.12 of docs/spec/dart-language.md.
- no_dynamic_casts
- no_raw_types
- use_declaring_parameters
- unnecessary_primary_constructor_body
- unnecessary_type_name_in_constructor
- prefer_initializing_formals
- switch_on_type
- discarded_futures
- unawaited_futures
- unnecessary_unawaited
- async_return_with_no_await
- initialize_in_field_declaration
# Project additions.
- always_declare_return_types
- avoid_print
- avoid_redundant_argument_values
Expand All @@ -20,7 +34,9 @@ linter:
- prefer_const_constructors
- prefer_final_locals
- prefer_single_quotes
- public_member_api_docs
- unawaited_futures
- unnecessary_lambdas
- unnecessary_parenthesis
# public_member_api_docs is omitted: the 3.13.5 analyzer does not attach
# /// comments to primary-constructor parameters, which the spec mandates
# (dart-language.md 7.2, domain.md 8.x). Parameter docs stay mandatory by
# convention; see docs/spec/open-questions.md.
2 changes: 1 addition & 1 deletion clients/app/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ void main() {
/// Placeholder entry point until the real client is implemented (see M9).
final class AlteriOnePlaceholderApp extends StatelessWidget {
/// Creates the placeholder application shell.
const AlteriOnePlaceholderApp({super.key});
const new({super.key});

@override
Widget build(BuildContext context) {
Expand Down
4 changes: 2 additions & 2 deletions clients/app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: >-
AlteriOne Flutter client for desktop, web, and mobile.
version: 0.0.1
publish_to: none
repository: https://github.com/alteri-one/alteri-one
issue_tracker: https://github.com/alteri-one/alteri-one/issues
repository: https://github.com/dip-develop/alteri-one
issue_tracker: https://github.com/dip-develop/alteri-one/issues
environment:
sdk: ^3.13.0
resolution: workspace
Expand Down
4 changes: 2 additions & 2 deletions clients/site/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: >-
The alteri.one website, built with Jaspr server-side rendering.
version: 0.0.1
publish_to: none
repository: https://github.com/alteri-one/alteri-one
issue_tracker: https://github.com/alteri-one/alteri-one/issues
repository: https://github.com/dip-develop/alteri-one
issue_tracker: https://github.com/dip-develop/alteri-one/issues
environment:
sdk: ^3.13.0
resolution: workspace
Expand Down
58 changes: 58 additions & 0 deletions docs/plan/M1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Milestone M1: contracts and core skeleton

- Status: In progress
- Specification: `docs/spec/contracts.md` (section 10), `docs/spec/domain.md` (sections 8–9), `docs/spec/dart-language.md` (section 7)
- ADR: — (no decision changed; interim hand-written DTOs pending spike T2; T21 documented in `open-questions.md`)

## Scope note

The owner asked for the full interface skeleton: contracts types, the pure
domain layer, domain ports, the six state components from section 8.10, and the
injectable composition root. This front-loads parts of M2 (domain) into the M1
plan file; the agent loop itself (section 9) is **not** included.

## Acceptance criteria
- [x] Domain types and pure functions from section 8 exist: `transition`, `PolicyGate.decide`, `effectiveRisk`, `RunCapabilities.narrow`, `Budget`
- [x] Ports from section 8.5 exist as `abstract interface class`: `LlmPort`, `JournalPort`, `MemoryPort`, `ToolPort`
- [x] Contracts: `Risk`, `ToolSpec` (interim hand-written form), `AgentEvent` sealed hierarchy, error codes, `ExtensionManifest`
- [x] State components from section 8.10; `RunBloc` applies the pure `transition` function only (ordering model changed — see T21)
- [x] injectable composition root with environments; `PolicyGate` registered with fail-closed defaults
- [x] `melos run ci` green; tests cover the transition matrix (including invalid transitions), all `PolicyGate.decide` branches, `narrow`, `effectiveRisk`, event JSON round-trip, and a `bloc_test` suite (closes T14)

## Steps
- [x] Root `analysis_options.yaml`: add the section 7.12 lint set
- [x] `packages/contracts`: `risk.dart`, `tool_spec.dart`, `agent_event.dart`, `error_codes.dart`, `manifest.dart`, barrel
- [x] `runtime/core` domain: `run_state`, `policy`, `budget`, `invocation`, `ids`, `messages`, `cancel_token`, `memory`, `context`, `trigger`
- [x] `runtime/core` ports: `llm_port`, `journal_port`, `memory_port`, `tool_port`
- [x] `runtime/core` application: `RunBloc`, `ApprovalsBloc`, `ExtensionsBloc`, `SchedulerBloc`, `TriggersCubit`, `ChannelsCubit`, `StatePublisher`, `bloc_defaults`
- [x] `runtime/core` DI: `CoreModule` (fail-closed `PolicyGate` default), `injection.dart` with `@InjectableInit`, environments `dev`/`prod`/`test`
- [x] Tests: transition matrix, policy branches, capabilities, budget, contracts round-trip, `RunBloc` lifecycle, component suites, DI suite
- [x] `melos run gen` (injectable config), then `melos run ci`

## Open checks [VERIFY]
- [ ] T2: schemantic annotations — `ToolSpec`, `ExtensionManifest`, and the section 10.3 DTOs are hand-written until the spike passes; golden tests then freeze the JSON shapes
- [x] T14: `bloc_test` 10 runs against bloc 9.2 — closed by the `RunBloc` suite
- [ ] `AgentEvent` subtype fields beyond `RunStarted` (shown in the spec) are minimal skeletons; golden tests pin them

## Outcome

Implemented on 2026-10-19. `melos run ci` green; 144 tests in
`alteri_one_core` plus the contracts suite.

Toolchain findings recorded in `docs/spec/open-questions.md`:

- Q5: `public_member_api_docs` cannot see primary-constructor parameter docs
on SDK 3.13.5 — lint omitted from the shared set, docs stay mandatory by
convention.
- Q6: the compiler's verified `new` constructor forms differ from the
section 7.3 examples (space, not dot; type-less named factories; no named
`new` factories). Code follows the compiler.
- T21: bloc 9 runs each `on<E>()` as a separate subscription, so per-handler
`sequential()` does not order events across types. The composition root
sets `Bloc.transformer = sequential()` once (`applyBlocDefaults()`), and
`RunBloc`/`ApprovalsBloc`/`ExtensionsBloc` use a single handler with an
exhaustive `switch` over their sealed event types. Section 8.10 rule 4
should be rewritten; an ADR can record the pattern.

Postponed: the agent loop (section 9), journal infrastructure, and the
`StatePublisher` wiring (M2); `tools/arch_check` and the M0 spikes.
7 changes: 5 additions & 2 deletions docs/spec/open-questions.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,19 @@ Added during the M0 scaffold (2026-10-17). Until answered, the scaffold takes th
| Q1 | schemantic line: the spec pins 0.2.x ("do not use 1.0.0-rc.1 until verified"), but `genkit 1.0.0` declares `schemantic: ^1.0.0`, so 0.2.x cannot coexist with genkit in one workspace, and schemantic 1.0.0 is now a stable release. Confirm the move to the 1.0.0 line and update section 4. | pinned `schemantic: ^1.0.0` everywhere |
| Q2 | Melos line: the spec pins Melos 7 everywhere; Melos 8.x is the current pub.dev release. Migrate to 8 and update sections 4 and 5.2? [VERIFY T12] covers script syntax on 7.x. | pinned `melos: ^7.0.0` (resolves 7.8.2) |
| Q3 | `tools/docs_check` is required by `docs/spec/index.md` ("Rules for maintaining documents") but is missing from the repository layout in `docs/spec/architecture.md`, section 5. Add it to section 5? | scaffolded `tools/docs_check` |
| Q4 | Repository URL: the spec gives the repository name `alteri-one` but not the GitHub owner. All pubspecs and docs use `https://github.com/alteri-one/alteri-one` as a placeholder. | placeholder URL |
| Q4 | ~~Repository URL: the spec gives the repository name `alteri-one` but not the GitHub owner.~~ Resolved 2026-10-17: the owner is `dip-develop`; all pubspecs and docs use `https://github.com/dip-develop/alteri-one`. | resolved |
| Q5 | `public_member_api_docs` cannot coexist with the primary-constructor style mandated by section 7.2: the Dart 3.13.5 analyzer does not attach `///` comments to primary-constructor parameters (the style used by every example in `domain.md` section 8). Re-enable the lint when the analyzer supports parameter docs. Until then, parameter dartdoc stays mandatory by convention; `packages/AGENTS.md` ("public classes and methods have English dartdoc") is enforced in review, not by the analyzer. | lint omitted from the shared set; docs kept by convention |
| Q6 | Section 7.3 shows named `new` constructors with a dot (`new origin()`); the Dart 3.13.5 compiler rejects the dot and requires a space (`new origin() : x = 0, y = 0;`), named factories are written without the class name (`factory standard() { ... }`), and named `new` factories are illegal. Update section 7.3 with the compiler-verified forms. | code follows the compiler forms probed on 3.13.5 |

Previously none were open. Decisions are recorded in ADR-0005, ADR-0006, and ADR-0009.

## 25.2 Technical checks [VERIFY]

T1 is closed (ADR-0007).
T1 is closed (ADR-0007). T14 is closed: the `RunBloc` suite in `alteri_one_core` runs under `bloc_test` 10 with bloc 9.2.

| ID | What to verify | When | What to do on failure |
|---|---|---|---|
| T21 | bloc 9 applies each `on<E>()` transformer as a separate subscription: events of different types are never ordered against each other, so per-handler `sequential()` does not make a multi-handler bloc sequential. `Bloc.transformer` (static, set once in the composition root via `applyBlocDefaults()`) is the workspace default; ordering across types additionally requires one handler per bloc (an exhaustive `switch` over the sealed event type). Section 8.10 rule 4 should be rewritten accordingly. | M1 (done, record as ADR input) | — |
| T2 | schemantic 0.2.x annotations and compatibility with SDK 3.13 | M0 | write the JSON Schema by hand for the problematic type |
| T3 | `returnToolRequests` together with `genkit_openai` and `llama-server` | M3 | a custom HTTP client behind the same port |
| T4 | `genkit_openai` behavior with invalid tool arguments | M3 | a custom client that handles `malformed` |
Expand Down
4 changes: 2 additions & 2 deletions e2e/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: >-
End-to-end tests for the AlteriOne daemon, extensions, and clients.
version: 0.0.1
publish_to: none
repository: https://github.com/alteri-one/alteri-one
issue_tracker: https://github.com/alteri-one/alteri-one/issues
repository: https://github.com/dip-develop/alteri-one
issue_tracker: https://github.com/dip-develop/alteri-one/issues
environment:
sdk: ^3.13.0
resolution: workspace
Expand Down
4 changes: 2 additions & 2 deletions extensions/lsp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
A first-party extension published to pub.dev as part of AlteriOne.

**Status: pre-alpha scaffold.** Implementation follows the milestones in
[`docs/spec/roadmap.md`](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/roadmap.md).
[`docs/spec/roadmap.md`](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/roadmap.md).

## About AlteriOne

AlteriOne is a personal universal assistant: one runtime with three run modes
(`chat`, `task`, `resident`), extensions, LLM providers, and LSP and MCP
integrations. One owner per instance; no accounts, no multi-user mode.

See the [root README](https://github.com/alteri-one/alteri-one) and the [specification index](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/index.md).
See the [root README](https://github.com/dip-develop/alteri-one) and the [specification index](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/index.md).

## License

Expand Down
4 changes: 2 additions & 2 deletions extensions/lsp/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: >-
LSP client and code-navigation tools for AlteriOne task mode.
version: 0.0.1
homepage: https://alteri.one
repository: https://github.com/alteri-one/alteri-one
issue_tracker: https://github.com/alteri-one/alteri-one/issues
repository: https://github.com/dip-develop/alteri-one
issue_tracker: https://github.com/dip-develop/alteri-one/issues
environment:
sdk: ^3.13.0
topics:
Expand Down
4 changes: 2 additions & 2 deletions extensions/mcp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
A first-party extension published to pub.dev as part of AlteriOne.

**Status: pre-alpha scaffold.** Implementation follows the milestones in
[`docs/spec/roadmap.md`](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/roadmap.md).
[`docs/spec/roadmap.md`](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/roadmap.md).

## About AlteriOne

AlteriOne is a personal universal assistant: one runtime with three run modes
(`chat`, `task`, `resident`), extensions, LLM providers, and LSP and MCP
integrations. One owner per instance; no accounts, no multi-user mode.

See the [root README](https://github.com/alteri-one/alteri-one) and the [specification index](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/index.md).
See the [root README](https://github.com/dip-develop/alteri-one) and the [specification index](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/index.md).

## License

Expand Down
4 changes: 2 additions & 2 deletions extensions/mcp/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: >-
Model Context Protocol (MCP) client extension for AlteriOne.
version: 0.0.1
homepage: https://alteri.one
repository: https://github.com/alteri-one/alteri-one
issue_tracker: https://github.com/alteri-one/alteri-one/issues
repository: https://github.com/dip-develop/alteri-one
issue_tracker: https://github.com/dip-develop/alteri-one/issues
environment:
sdk: ^3.13.0
topics:
Expand Down
4 changes: 2 additions & 2 deletions extensions/memory_hive/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
A first-party extension published to pub.dev as part of AlteriOne.

**Status: pre-alpha scaffold.** Implementation follows the milestones in
[`docs/spec/roadmap.md`](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/roadmap.md).
[`docs/spec/roadmap.md`](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/roadmap.md).

## About AlteriOne

AlteriOne is a personal universal assistant: one runtime with three run modes
(`chat`, `task`, `resident`), extensions, LLM providers, and LSP and MCP
integrations. One owner per instance; no accounts, no multi-user mode.

See the [root README](https://github.com/alteri-one/alteri-one) and the [specification index](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/index.md).
See the [root README](https://github.com/dip-develop/alteri-one) and the [specification index](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/index.md).

## License

Expand Down
4 changes: 2 additions & 2 deletions extensions/memory_hive/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: >-
Hive CE-backed long-term memory backend for AlteriOne.
version: 0.0.1
homepage: https://alteri.one
repository: https://github.com/alteri-one/alteri-one
issue_tracker: https://github.com/alteri-one/alteri-one/issues
repository: https://github.com/dip-develop/alteri-one
issue_tracker: https://github.com/dip-develop/alteri-one/issues
environment:
sdk: ^3.13.0
topics:
Expand Down
4 changes: 2 additions & 2 deletions extensions/weather/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
A first-party extension published to pub.dev as part of AlteriOne.

**Status: pre-alpha scaffold.** Implementation follows the milestones in
[`docs/spec/roadmap.md`](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/roadmap.md).
[`docs/spec/roadmap.md`](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/roadmap.md).

## About AlteriOne

AlteriOne is a personal universal assistant: one runtime with three run modes
(`chat`, `task`, `resident`), extensions, LLM providers, and LSP and MCP
integrations. One owner per instance; no accounts, no multi-user mode.

See the [root README](https://github.com/alteri-one/alteri-one) and the [specification index](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/index.md).
See the [root README](https://github.com/dip-develop/alteri-one) and the [specification index](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/index.md).

## License

Expand Down
4 changes: 2 additions & 2 deletions extensions/weather/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: >-
Reference weather extension for AlteriOne; the working example for extension authors.
version: 0.0.1
homepage: https://alteri.one
repository: https://github.com/alteri-one/alteri-one
issue_tracker: https://github.com/alteri-one/alteri-one/issues
repository: https://github.com/dip-develop/alteri-one
issue_tracker: https://github.com/dip-develop/alteri-one/issues
environment:
sdk: ^3.13.0
topics:
Expand Down
4 changes: 2 additions & 2 deletions extensions/workspace/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
A first-party extension published to pub.dev as part of AlteriOne.

**Status: pre-alpha scaffold.** Implementation follows the milestones in
[`docs/spec/roadmap.md`](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/roadmap.md).
[`docs/spec/roadmap.md`](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/roadmap.md).

## About AlteriOne

AlteriOne is a personal universal assistant: one runtime with three run modes
(`chat`, `task`, `resident`), extensions, LLM providers, and LSP and MCP
integrations. One owner per instance; no accounts, no multi-user mode.

See the [root README](https://github.com/alteri-one/alteri-one) and the [specification index](https://github.com/alteri-one/alteri-one/blob/main/docs/spec/index.md).
See the [root README](https://github.com/dip-develop/alteri-one) and the [specification index](https://github.com/dip-develop/alteri-one/blob/main/docs/spec/index.md).

## License

Expand Down
4 changes: 2 additions & 2 deletions extensions/workspace/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ description: >-
Task-mode workspace and file tools for AlteriOne.
version: 0.0.1
homepage: https://alteri.one
repository: https://github.com/alteri-one/alteri-one
issue_tracker: https://github.com/alteri-one/alteri-one/issues
repository: https://github.com/dip-develop/alteri-one
issue_tracker: https://github.com/dip-develop/alteri-one/issues
environment:
sdk: ^3.13.0
topics:
Expand Down
Loading
Loading