@felan-ai/felan 0.1.0-alpha.0 → 0.1.0-alpha.2

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/README.md CHANGED
@@ -1,3 +1,34 @@
1
1
  # @felan-ai/felan
2
2
 
3
- Package foundation for the local Felan terminal application.
3
+ Local, account-free Felan terminal agent built on `@felan-ai/agent-core` and
4
+ Pi's interactive TUI.
5
+
6
+ ```sh
7
+ npx @felan-ai/felan
8
+ ```
9
+
10
+ The package exposes the `felan` binary. It stores model credentials, settings,
11
+ and sessions under `~/.felan/agent` by default; set `FELAN_AGENT_DIR` to select
12
+ another local directory. Use `/login` inside the TUI to configure provider-owned
13
+ model credentials without a Felan account.
14
+
15
+ Each session uses a cwd-bound `HostAgentRuntime`. Pi's session runtime recreates
16
+ the host runtime, filtered settings, resources, and session composition for
17
+ new, resume, fork, clone, and import flows, then rebinds the active interactive
18
+ UI. Host mode uses the current user's filesystem and process permissions and is
19
+ not an isolation boundary.
20
+
21
+ Only the source-controlled Felan extension package list is imported. Ambient Pi
22
+ packages, extensions, skills, prompts, themes, and context files remain filtered;
23
+ inline Felan extensions can still provide shared tools, prompts, interaction,
24
+ and subagent behavior. The default local list includes `@felan-ai/ext-powerline`
25
+ for an ANSI-aware footer; it is a direct TUI dependency and is not part of any
26
+ cloud composition. Agent Core's `spawn_agent` tool delegates child creation
27
+ through the portable host contract; local children run as in-process Agent Core
28
+ sessions on fresh host runtimes without Felan cloud services.
29
+
30
+ ```sh
31
+ felan --diagnostics
32
+ ```
33
+
34
+ Diagnostics include the Felan, Agent Core, Pi, and Node.js versions.
@@ -0,0 +1,7 @@
1
+ import { type CreateLocalFelanRuntimeOptions } from './runtime.js';
2
+ export interface RunLocalFelanOptions extends CreateLocalFelanRuntimeOptions {
3
+ readonly initialMessage?: string;
4
+ readonly verbose?: boolean;
5
+ }
6
+ export declare function runLocalFelan(options?: RunLocalFelanOptions): Promise<void>;
7
+ //# sourceMappingURL=application.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE5F,MAAM,WAAW,oBAAqB,SAAQ,8BAA8B;IAC1E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrF"}
@@ -0,0 +1,28 @@
1
+ import { InteractiveMode } from '@earendil-works/pi-coding-agent';
2
+ import { createLocalFelanRuntime } from './runtime.js';
3
+ export async function runLocalFelan(options = {}) {
4
+ const runtime = await createLocalFelanRuntime(options);
5
+ const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR;
6
+ process.env.PI_CODING_AGENT_DIR = runtime.services.agentDir;
7
+ try {
8
+ const mode = new InteractiveMode(runtime, {
9
+ ...(options.initialMessage === undefined ? {} : { initialMessage: options.initialMessage }),
10
+ ...(options.verbose === undefined ? {} : { verbose: options.verbose }),
11
+ });
12
+ await mode.run();
13
+ }
14
+ finally {
15
+ try {
16
+ await runtime.dispose();
17
+ }
18
+ finally {
19
+ if (previousPiAgentDir === undefined) {
20
+ delete process.env.PI_CODING_AGENT_DIR;
21
+ }
22
+ else {
23
+ process.env.PI_CODING_AGENT_DIR = previousPiAgentDir;
24
+ }
25
+ }
26
+ }
27
+ }
28
+ //# sourceMappingURL=application.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAuC,MAAM,cAAc,CAAC;AAO5F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE;YACxC,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3F,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;SACvE,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type RunLocalFelanOptions } from './application.js';
2
+ export interface CliDependencies {
3
+ readonly writeOutput?: (line: string) => void;
4
+ readonly writeError?: (line: string) => void;
5
+ readonly launch?: (options: RunLocalFelanOptions) => Promise<void>;
6
+ }
7
+ export declare function runCli(args: readonly string[], dependencies?: CliDependencies): Promise<number>;
8
+ //# sourceMappingURL=cli-main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-main.d.ts","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpE;AAWD,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgDzG"}
@@ -0,0 +1,67 @@
1
+ import { AGENT_CORE_VERSION } from '@felan-ai/agent-core';
2
+ import { VERSION as PI_VERSION } from '@earendil-works/pi-coding-agent';
3
+ import { runLocalFelan } from './application.js';
4
+ import { FELAN_VERSION } from './version.js';
5
+ const help = `Usage: felan [options] [message]
6
+
7
+ Options:
8
+ -c, --continue Continue the most recent session for this directory
9
+ --diagnostics Print local runtime versions and configuration mode
10
+ -h, --help Show this help
11
+ -v, --version Print the Felan version
12
+ --verbose Show verbose startup details`;
13
+ export async function runCli(args, dependencies = {}) {
14
+ const writeOutput = dependencies.writeOutput ?? ((line) => console.log(line));
15
+ const writeError = dependencies.writeError ?? ((line) => console.error(line));
16
+ const launch = dependencies.launch ?? runLocalFelan;
17
+ let continueRecent = false;
18
+ let verbose = false;
19
+ const messageParts = [];
20
+ let positionalOnly = false;
21
+ for (const argument of args) {
22
+ if (positionalOnly) {
23
+ messageParts.push(argument);
24
+ continue;
25
+ }
26
+ if (argument === '--') {
27
+ positionalOnly = true;
28
+ }
29
+ else if (argument === '-c' || argument === '--continue') {
30
+ continueRecent = true;
31
+ }
32
+ else if (argument === '--verbose') {
33
+ verbose = true;
34
+ }
35
+ else if (argument === '-h' || argument === '--help') {
36
+ writeOutput(help);
37
+ return 0;
38
+ }
39
+ else if (argument === '-v' || argument === '--version') {
40
+ writeOutput(FELAN_VERSION);
41
+ return 0;
42
+ }
43
+ else if (argument === '--diagnostics') {
44
+ writeOutput(`Felan version: ${FELAN_VERSION}`);
45
+ writeOutput(`Agent Core version: ${AGENT_CORE_VERSION}`);
46
+ writeOutput(`Pi version: ${PI_VERSION}`);
47
+ writeOutput(`Node version: ${process.versions.node}`);
48
+ writeOutput('Runtime: host');
49
+ writeOutput('Credentials: local');
50
+ return 0;
51
+ }
52
+ else if (argument.startsWith('-')) {
53
+ writeError(`Unknown option: ${argument}`);
54
+ return 1;
55
+ }
56
+ else {
57
+ messageParts.push(argument);
58
+ }
59
+ }
60
+ await launch({
61
+ continueRecent,
62
+ verbose,
63
+ ...(messageParts.length === 0 ? {} : { initialMessage: messageParts.join(' ') }),
64
+ });
65
+ return 0;
66
+ }
67
+ //# sourceMappingURL=cli-main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-main.js","sourceRoot":"","sources":["../src/cli-main.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from './cli-main.js';
3
+ process.exitCode = await runCli(process.argv.slice(2));
4
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { ExtensionPackageImporter } from '@felan-ai/agent-core';
2
+ export declare const localExtensionPackages: readonly ["@felan-ai/ext-prewalk", "@felan-ai/ext-context", "@felan-ai/ext-powerline"];
3
+ export declare const importLocalExtension: ExtensionPackageImporter;
4
+ //# sourceMappingURL=extensions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,eAAO,MAAM,sBAAsB,wFAIzB,CAAC;AAQX,eAAO,MAAM,oBAAoB,EAAE,wBAMlC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const localExtensionPackages = [
2
+ '@felan-ai/ext-prewalk',
3
+ '@felan-ai/ext-context',
4
+ '@felan-ai/ext-powerline',
5
+ ];
6
+ const localExtensionImporters = {
7
+ '@felan-ai/ext-prewalk': () => import('@felan-ai/ext-prewalk'),
8
+ '@felan-ai/ext-context': () => import('@felan-ai/ext-context'),
9
+ '@felan-ai/ext-powerline': () => import('@felan-ai/ext-powerline'),
10
+ };
11
+ export const importLocalExtension = async (packageName) => {
12
+ const importExtension = localExtensionImporters[packageName];
13
+ if (!importExtension) {
14
+ throw new Error(`Unknown local extension package: ${packageName}`);
15
+ }
16
+ return importExtension();
17
+ };
18
+ //# sourceMappingURL=extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,uBAAuB;IACvB,uBAAuB;IACvB,yBAAyB;CACjB,CAAC;AAEX,MAAM,uBAAuB,GAA2C;IACtE,uBAAuB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAC9D,uBAAuB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC;IAC9D,yBAAyB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,yBAAyB,CAAC;CACnE,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAA6B,KAAK,EAAE,WAAW,EAAE,EAAE;IAClF,MAAM,eAAe,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAC7D,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,eAAe,EAAE,CAAC;AAC3B,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,10 @@
1
- export declare const localExtensionPackages: readonly ["@felan-ai/ext-prewalk", "@felan-ai/ext-context", "@felan-ai/ext-powerline"];
1
+ export { runLocalFelan } from './application.js';
2
+ export type { RunLocalFelanOptions } from './application.js';
3
+ export { runCli } from './cli-main.js';
4
+ export type { CliDependencies } from './cli-main.js';
5
+ export { importLocalExtension, localExtensionPackages } from './extensions.js';
6
+ export { createLocalFelanRuntime, createLocalModelRuntime, createLocalSessionHost, createLocalSessionRuntimeFactory, getLocalAgentDir, } from './runtime.js';
7
+ export type { CreateLocalFelanRuntimeOptions, CreateLocalSessionRuntimeFactoryOptions, } from './runtime.js';
8
+ export { createLocalSettingsManager } from './settings.js';
9
+ export { FELAN_VERSION } from './version.js';
2
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,wFAIzB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,gCAAgC,EAChC,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,8BAA8B,EAC9B,uCAAuC,GACxC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
- export const localExtensionPackages = [
2
- '@felan-ai/ext-prewalk',
3
- '@felan-ai/ext-context',
4
- '@felan-ai/ext-powerline',
5
- ];
1
+ export { runLocalFelan } from './application.js';
2
+ export { runCli } from './cli-main.js';
3
+ export { importLocalExtension, localExtensionPackages } from './extensions.js';
4
+ export { createLocalFelanRuntime, createLocalModelRuntime, createLocalSessionHost, createLocalSessionRuntimeFactory, getLocalAgentDir, } from './runtime.js';
5
+ export { createLocalSettingsManager } from './settings.js';
6
+ export { FELAN_VERSION } from './version.js';
6
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,uBAAuB;IACvB,uBAAuB;IACvB,yBAAyB;CACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,gCAAgC,EAChC,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAKtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { ModelRuntime, SessionManager, type AgentRuntime, type AgentSessionHost, type CreateAgentSessionRuntimeFactory, type ExtensionPackageImporter } from '@felan-ai/agent-core';
2
+ export interface CreateLocalSessionRuntimeFactoryOptions {
3
+ readonly agentDir: string;
4
+ readonly modelRuntime: ModelRuntime;
5
+ readonly extensionPackages?: readonly string[];
6
+ readonly importExtension?: ExtensionPackageImporter;
7
+ readonly runtimeFactory?: (cwd: string) => AgentRuntime;
8
+ }
9
+ export interface CreateLocalFelanRuntimeOptions {
10
+ readonly cwd?: string;
11
+ readonly agentDir?: string;
12
+ readonly continueRecent?: boolean;
13
+ readonly sessionManager?: SessionManager;
14
+ readonly modelRuntime?: ModelRuntime;
15
+ readonly sessionDir?: string;
16
+ readonly runtimeFactory?: (cwd: string) => AgentRuntime;
17
+ }
18
+ export declare function getLocalAgentDir(): string;
19
+ export declare function createLocalSessionRuntimeFactory(options: CreateLocalSessionRuntimeFactoryOptions): CreateAgentSessionRuntimeFactory;
20
+ export declare function createLocalSessionHost(options: CreateLocalSessionRuntimeFactoryOptions, cwd: string): AgentSessionHost;
21
+ export declare function createLocalModelRuntime(agentDir: string): Promise<ModelRuntime>;
22
+ export declare function createLocalFelanRuntime(options?: CreateLocalFelanRuntimeOptions): Promise<import("@earendil-works/pi-coding-agent").AgentSessionRuntime>;
23
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,YAAY,EACZ,cAAc,EAId,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,eAAe,CAAC,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,YAAY,CAAC;CACzD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,YAAY,CAAC;CACzD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CAyClC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uCAAuC,EAChD,GAAG,EAAE,MAAM,GACV,gBAAgB,CA2GlB;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAKrF;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,8BAAmC,0EAuB7C"}
@@ -0,0 +1,186 @@
1
+ import { mkdir } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { join, resolve } from 'node:path';
4
+ import { AGENT_CORE_VERSION, HostAgentRuntime, ModelRuntime, SessionManager, createAgentCoreSession, createAgentCoreSessionRuntimeFactory, createAgentSessionRuntime, } from '@felan-ai/agent-core';
5
+ import { resolveCliModel, resolveModelScopeWithDiagnostics, } from '@earendil-works/pi-coding-agent';
6
+ import { importLocalExtension, localExtensionPackages } from './extensions.js';
7
+ import { createLocalSettingsManager } from './settings.js';
8
+ export function getLocalAgentDir() {
9
+ return resolve(process.env.FELAN_AGENT_DIR ?? join(homedir(), '.felan', 'agent'));
10
+ }
11
+ export function createLocalSessionRuntimeFactory(options) {
12
+ const createCoreRuntime = createAgentCoreSessionRuntimeFactory(async ({ cwd }) => {
13
+ const settingsManager = createLocalSettingsManager(cwd, options.agentDir);
14
+ const modelPatterns = settingsManager.getEnabledModels();
15
+ const modelScope = modelPatterns && modelPatterns.length > 0
16
+ ? await resolveModelScopeWithDiagnostics(modelPatterns, options.modelRuntime)
17
+ : { scopedModels: [], diagnostics: [] };
18
+ return {
19
+ applicationKind: 'tui',
20
+ runtime: options.runtimeFactory?.(cwd) ?? new HostAgentRuntime(cwd),
21
+ host: createLocalSessionHost(options, cwd),
22
+ extensionPackages: options.extensionPackages ?? localExtensionPackages,
23
+ importExtension: options.importExtension ?? importLocalExtension,
24
+ modelRuntime: options.modelRuntime,
25
+ settingsManager,
26
+ ...(modelScope.scopedModels.length === 0 ? {} : { scopedModels: modelScope.scopedModels }),
27
+ };
28
+ });
29
+ return async (request) => {
30
+ const result = await createCoreRuntime(request);
31
+ const settingsErrors = result.services.settingsManager.drainErrors();
32
+ const modelPatterns = result.services.settingsManager.getEnabledModels();
33
+ const modelScope = modelPatterns && modelPatterns.length > 0
34
+ ? await resolveModelScopeWithDiagnostics(modelPatterns, options.modelRuntime)
35
+ : { diagnostics: [] };
36
+ return {
37
+ ...result,
38
+ diagnostics: [
39
+ { type: 'info', message: `Agent Core version: ${AGENT_CORE_VERSION}` },
40
+ ...result.diagnostics,
41
+ ...modelScope.diagnostics,
42
+ ...settingsErrors.map(({ scope, error }) => ({
43
+ type: 'warning',
44
+ message: `${scope} settings: ${error.message}`,
45
+ })),
46
+ ],
47
+ };
48
+ };
49
+ }
50
+ export function createLocalSessionHost(options, cwd) {
51
+ return {
52
+ createChildSession: async (request) => {
53
+ const sessionManager = SessionManager.inMemory(cwd);
54
+ const childSessionId = sessionManager.getSessionId();
55
+ const resolvedModel = request.model
56
+ ? resolveCliModel({ cliModel: request.model, modelRuntime: options.modelRuntime })
57
+ : undefined;
58
+ if (resolvedModel?.error) {
59
+ return {
60
+ ok: false,
61
+ sessionId: childSessionId,
62
+ status: 'failed',
63
+ error: resolvedModel.error,
64
+ };
65
+ }
66
+ const created = await createAgentCoreSession({
67
+ applicationKind: 'tui',
68
+ runtime: options.runtimeFactory?.(cwd) ?? new HostAgentRuntime(cwd),
69
+ host: createLocalSessionHost(options, cwd),
70
+ extensionPackages: options.extensionPackages ?? localExtensionPackages,
71
+ importExtension: options.importExtension ?? importLocalExtension,
72
+ modelRuntime: options.modelRuntime,
73
+ settingsManager: createLocalSettingsManager(cwd, options.agentDir),
74
+ sessionManager,
75
+ appendSystemPrompt: [`You are the ${request.personaId} child agent.`],
76
+ ...(resolvedModel?.model === undefined ? {} : { model: resolvedModel.model }),
77
+ ...(resolvedModel?.thinkingLevel === undefined
78
+ ? {}
79
+ : { thinkingLevel: resolvedModel.thinkingLevel }),
80
+ });
81
+ try {
82
+ await created.session.bindExtensions({ mode: 'print' });
83
+ }
84
+ catch (error) {
85
+ created.session.dispose();
86
+ throw error;
87
+ }
88
+ const runChild = async () => {
89
+ let timeout;
90
+ if (request.timeoutMinutes) {
91
+ timeout = setTimeout(() => void created.session.abort(), request.timeoutMinutes * 60_000);
92
+ timeout.unref();
93
+ }
94
+ try {
95
+ await created.session.prompt(request.prompt);
96
+ let assistant;
97
+ for (let index = created.session.messages.length - 1; index >= 0; index -= 1) {
98
+ const message = created.session.messages[index];
99
+ if (message?.role === 'assistant') {
100
+ assistant = message;
101
+ break;
102
+ }
103
+ }
104
+ if (!assistant) {
105
+ return {
106
+ ok: false,
107
+ sessionId: childSessionId,
108
+ status: 'failed',
109
+ error: 'Child session completed without an assistant response',
110
+ };
111
+ }
112
+ if (assistant.stopReason === 'error' || assistant.stopReason === 'aborted') {
113
+ return {
114
+ ok: false,
115
+ sessionId: childSessionId,
116
+ status: 'failed',
117
+ error: assistant.errorMessage ?? `Child session ${assistant.stopReason}`,
118
+ };
119
+ }
120
+ const result = assistant.content
121
+ .filter((part) => part.type === 'text')
122
+ .map((part) => part.text)
123
+ .join('\n');
124
+ return {
125
+ ok: true,
126
+ sessionId: childSessionId,
127
+ status: 'completed',
128
+ result,
129
+ };
130
+ }
131
+ catch (error) {
132
+ return {
133
+ ok: false,
134
+ sessionId: childSessionId,
135
+ status: 'failed',
136
+ error: error instanceof Error ? error.message : String(error),
137
+ };
138
+ }
139
+ finally {
140
+ if (timeout)
141
+ clearTimeout(timeout);
142
+ created.session.dispose();
143
+ }
144
+ };
145
+ if (!request.block) {
146
+ void runChild();
147
+ return {
148
+ ok: true,
149
+ sessionId: childSessionId,
150
+ status: 'running',
151
+ message: 'Child session started',
152
+ };
153
+ }
154
+ return runChild();
155
+ },
156
+ };
157
+ }
158
+ export async function createLocalModelRuntime(agentDir) {
159
+ return ModelRuntime.create({
160
+ authPath: join(agentDir, 'auth.json'),
161
+ modelsPath: join(agentDir, 'models.json'),
162
+ });
163
+ }
164
+ export async function createLocalFelanRuntime(options = {}) {
165
+ const cwd = resolve(options.cwd ?? process.cwd());
166
+ const agentDir = resolve(options.agentDir ?? getLocalAgentDir());
167
+ await mkdir(agentDir, { recursive: true });
168
+ const modelRuntime = options.modelRuntime ?? await createLocalModelRuntime(agentDir);
169
+ const startupSettings = createLocalSettingsManager(cwd, agentDir);
170
+ const sessionDir = options.sessionDir ?? startupSettings.getSessionDir();
171
+ const sessionManager = options.sessionManager
172
+ ?? (options.continueRecent
173
+ ? SessionManager.continueRecent(cwd, sessionDir)
174
+ : SessionManager.create(cwd, sessionDir));
175
+ const createRuntime = createLocalSessionRuntimeFactory({
176
+ agentDir,
177
+ modelRuntime,
178
+ ...(options.runtimeFactory === undefined ? {} : { runtimeFactory: options.runtimeFactory }),
179
+ });
180
+ return createAgentSessionRuntime(createRuntime, {
181
+ cwd: sessionManager.getCwd(),
182
+ agentDir,
183
+ sessionManager,
184
+ });
185
+ }
186
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { SettingsManager } from '@felan-ai/agent-core';
2
+ export declare function createLocalSettingsManager(cwd: string, agentDir: string): SettingsManager;
3
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CA2BzF"}
@@ -0,0 +1,29 @@
1
+ import { SettingsManager } from '@felan-ai/agent-core';
2
+ export function createLocalSettingsManager(cwd, agentDir) {
3
+ const settingsManager = SettingsManager.create(cwd, agentDir);
4
+ const filteredResources = {
5
+ packages: [],
6
+ extensions: [],
7
+ skills: [],
8
+ prompts: [],
9
+ themes: [],
10
+ };
11
+ const reload = settingsManager.reload.bind(settingsManager);
12
+ const getGlobalSettings = settingsManager.getGlobalSettings.bind(settingsManager);
13
+ const getProjectSettings = settingsManager.getProjectSettings.bind(settingsManager);
14
+ settingsManager.applyOverrides(filteredResources);
15
+ settingsManager.reload = async () => {
16
+ await reload();
17
+ settingsManager.applyOverrides(filteredResources);
18
+ };
19
+ settingsManager.getGlobalSettings = () => ({
20
+ ...getGlobalSettings(),
21
+ ...filteredResources,
22
+ });
23
+ settingsManager.getProjectSettings = () => ({
24
+ ...getProjectSettings(),
25
+ ...filteredResources,
26
+ });
27
+ return settingsManager;
28
+ }
29
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,UAAU,0BAA0B,CAAC,GAAW,EAAE,QAAgB;IACtE,MAAM,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC9D,MAAM,iBAAiB,GAAG;QACxB,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,EAAE;KACX,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAClF,MAAM,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEpF,eAAe,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IAClD,eAAe,CAAC,MAAM,GAAG,KAAK,IAAI,EAAE;QAClC,MAAM,MAAM,EAAE,CAAC;QACf,eAAe,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACpD,CAAC,CAAC;IACF,eAAe,CAAC,iBAAiB,GAAG,GAAG,EAAE,CAAC,CAAC;QACzC,GAAG,iBAAiB,EAAE;QACtB,GAAG,iBAAiB;KACrB,CAAC,CAAC;IACH,eAAe,CAAC,kBAAkB,GAAG,GAAG,EAAE,CAAC,CAAC;QAC1C,GAAG,kBAAkB,EAAE;QACvB,GAAG,iBAAiB;KACrB,CAAC,CAAC;IACH,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const FELAN_VERSION: string;
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,QAAsB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'node:module';
2
+ const packageJson = createRequire(import.meta.url)('../package.json');
3
+ export const FELAN_VERSION = packageJson.version;
4
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAwB,CAAC;AAE7F,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@felan-ai/felan",
3
- "version": "0.1.0-alpha.0",
3
+ "version": "0.1.0-alpha.2",
4
4
  "description": "Local Felan terminal agent",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -13,6 +13,9 @@
13
13
  "LICENSE",
14
14
  "README.md"
15
15
  ],
16
+ "bin": {
17
+ "felan": "./dist/cli.js"
18
+ },
16
19
  "exports": {
17
20
  ".": {
18
21
  "types": "./dist/index.d.ts",
@@ -20,10 +23,11 @@
20
23
  }
21
24
  },
22
25
  "dependencies": {
23
- "@felan-ai/agent-core": "0.1.0-alpha.0",
24
- "@felan-ai/ext-context": "0.1.0-alpha.0",
25
- "@felan-ai/ext-prewalk": "0.1.0-alpha.0",
26
- "@felan-ai/ext-powerline": "0.1.0-alpha.0"
26
+ "@earendil-works/pi-coding-agent": "0.82.1",
27
+ "@felan-ai/agent-core": "0.1.0-alpha.2",
28
+ "@felan-ai/ext-powerline": "0.1.0-alpha.2",
29
+ "@felan-ai/ext-context": "0.1.0-alpha.2",
30
+ "@felan-ai/ext-prewalk": "0.1.0-alpha.2"
27
31
  },
28
32
  "publishConfig": {
29
33
  "access": "public",