@felan-ai/felan 0.1.0-alpha.1 → 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 +32 -1
- package/dist/application.d.ts +7 -0
- package/dist/application.d.ts.map +1 -0
- package/dist/application.js +28 -0
- package/dist/application.js.map +1 -0
- package/dist/cli-main.d.ts +8 -0
- package/dist/cli-main.d.ts.map +1 -0
- package/dist/cli-main.js +67 -0
- package/dist/cli-main.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -0
- package/dist/extensions.d.ts +4 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +18 -0
- package/dist/extensions.js.map +1 -0
- package/dist/index.d.ts +9 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.ts +23 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +186 -0
- package/dist/runtime.js.map +1 -0
- package/dist/settings.d.ts +3 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +29 -0
- package/dist/settings.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/package.json +9 -5
package/README.md
CHANGED
|
@@ -1,3 +1,34 @@
|
|
|
1
1
|
# @felan-ai/felan
|
|
2
2
|
|
|
3
|
-
|
|
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"}
|
package/dist/cli-main.js
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
package/dist/cli.js.map
ADDED
|
@@ -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
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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,
|
|
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"}
|
package/dist/runtime.js
ADDED
|
@@ -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 @@
|
|
|
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"}
|
package/dist/settings.js
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,QAAsB,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -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.
|
|
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
|
-
"@
|
|
24
|
-
"@felan-ai/
|
|
25
|
-
"@felan-ai/ext-powerline": "0.1.0-alpha.
|
|
26
|
-
"@felan-ai/ext-
|
|
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",
|